diff --git a/CMakeLists.txt b/CMakeLists.txt index 6635e2b875..9ec0d3afa7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1214,25 +1214,9 @@ if(USE_LIBFREENECT AND USE_LIBUSB_1 AND USE_THREADS) endif() endif() -# check OpenCV nonfree modules and version +# OpenCV version if(USE_OPENCV) set(VISP_HAVE_OPENCV_VERSION "(${OpenCV_VERSION_MAJOR}<<16 | ${OpenCV_VERSION_MINOR}<<8 | ${OpenCV_VERSION_PATCH})") # for vpConfig.h - if(OpenCV_VERSION) - if(OpenCV_VERSION VERSION_LESS "2.4.0") - message(STATUS "opencv nonfree module found") - set(VISP_HAVE_OPENCV_NONFREE TRUE) # for header vpConfig.h - elseif(OPENCV_NONFREE_FOUND) # OpenCV < 3.0.0 - message(STATUS "opencv xfeatures2d module found") - set(VISP_HAVE_OPENCV_NONFREE TRUE) # for header vpConfig.h - elseif(OPENCV_XFEATURES2D_FOUND) # OpenCV >= 3.0.0 - set(VISP_HAVE_OPENCV_XFEATURES2D TRUE) # for header vpConfig.h - else() - message(STATUS "opencv nonfree or xfeature2d module not found") - endif() - else() - message(STATUS "opencv nonfree not found") - set(VISP_HAVE_OPENCV_VERSION "(0)") # for vpConfig.h - endif() endif() # coin and gui diff --git a/apps/CMakeLists.txt b/apps/CMakeLists.txt index 2737090285..44742ba031 100644 --- a/apps/CMakeLists.txt +++ b/apps/CMakeLists.txt @@ -1,7 +1,7 @@ ############################################################################# # # ViSP, open source Visual Servoing Platform software. -# Copyright (C) 2005 - 2023 by Inria. All rights reserved. +# Copyright (C) 2005 - 2024 by Inria. All rights reserved. # # This software is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by diff --git a/apps/calibration/CMakeLists.txt b/apps/calibration/CMakeLists.txt index 952dacffee..cfe1f34b37 100644 --- a/apps/calibration/CMakeLists.txt +++ b/apps/calibration/CMakeLists.txt @@ -17,7 +17,7 @@ if(VISP_HAVE_UR_RTDE) list(APPEND apps_cpp visp-acquire-universal-robots-calib-data.cpp) endif() -file(GLOB apps_data "*.yaml" "*.py" "camera.xml" "*.png") +file(GLOB apps_data "*.yaml" "*.py" "camera.xml" "*.jpg") foreach(cpp ${apps_cpp}) visp_add_app(${cpp}) diff --git a/apps/calibration/image-1.jpg b/apps/calibration/image-1.jpg new file mode 100644 index 0000000000..3d6ecfee0b Binary files /dev/null and b/apps/calibration/image-1.jpg differ diff --git a/apps/calibration/image-1.png b/apps/calibration/image-1.png deleted file mode 100644 index 43a55e05dd..0000000000 Binary files a/apps/calibration/image-1.png and /dev/null differ diff --git a/apps/calibration/image-2.jpg b/apps/calibration/image-2.jpg new file mode 100644 index 0000000000..2f229466b8 Binary files /dev/null and b/apps/calibration/image-2.jpg differ diff --git a/apps/calibration/image-2.png b/apps/calibration/image-2.png deleted file mode 100644 index 886eee832b..0000000000 Binary files a/apps/calibration/image-2.png and /dev/null differ diff --git a/apps/calibration/image-3.jpg b/apps/calibration/image-3.jpg new file mode 100644 index 0000000000..626780b5d7 Binary files /dev/null and b/apps/calibration/image-3.jpg differ diff --git a/apps/calibration/image-3.png b/apps/calibration/image-3.png deleted file mode 100644 index 3d7d2d4b71..0000000000 Binary files a/apps/calibration/image-3.png and /dev/null differ diff --git a/apps/calibration/image-4.jpg b/apps/calibration/image-4.jpg new file mode 100644 index 0000000000..85332469f7 Binary files /dev/null and b/apps/calibration/image-4.jpg differ diff --git a/apps/calibration/image-4.png b/apps/calibration/image-4.png deleted file mode 100644 index a5ce1a5ef3..0000000000 Binary files a/apps/calibration/image-4.png and /dev/null differ diff --git a/apps/calibration/image-5.jpg b/apps/calibration/image-5.jpg new file mode 100644 index 0000000000..7891fcb79c Binary files /dev/null and b/apps/calibration/image-5.jpg differ diff --git a/apps/calibration/image-5.png b/apps/calibration/image-5.png deleted file mode 100644 index 9170e953b0..0000000000 Binary files a/apps/calibration/image-5.png and /dev/null differ diff --git a/apps/calibration/image-6.jpg b/apps/calibration/image-6.jpg new file mode 100644 index 0000000000..f5bc829303 Binary files /dev/null and b/apps/calibration/image-6.jpg differ diff --git a/apps/calibration/image-6.png b/apps/calibration/image-6.png deleted file mode 100644 index 03e08e55c4..0000000000 Binary files a/apps/calibration/image-6.png and /dev/null differ diff --git a/apps/calibration/image-7.jpg b/apps/calibration/image-7.jpg new file mode 100644 index 0000000000..76b1873baf Binary files /dev/null and b/apps/calibration/image-7.jpg differ diff --git a/apps/calibration/image-7.png b/apps/calibration/image-7.png deleted file mode 100644 index 6e80d4ed1c..0000000000 Binary files a/apps/calibration/image-7.png and /dev/null differ diff --git a/apps/calibration/image-8.jpg b/apps/calibration/image-8.jpg new file mode 100644 index 0000000000..b48a42b180 Binary files /dev/null and b/apps/calibration/image-8.jpg differ diff --git a/apps/calibration/image-8.png b/apps/calibration/image-8.png deleted file mode 100644 index 35766f7c81..0000000000 Binary files a/apps/calibration/image-8.png and /dev/null differ diff --git a/apps/calibration/visp-compute-chessboard-poses.cpp b/apps/calibration/visp-compute-chessboard-poses.cpp index a13cd6776a..311df186e8 100644 --- a/apps/calibration/visp-compute-chessboard-poses.cpp +++ b/apps/calibration/visp-compute-chessboard-poses.cpp @@ -1,6 +1,6 @@ /* * ViSP, open source Visual Servoing Platform software. - * Copyright (C) 2005 - 2023 by Inria. All rights reserved. + * Copyright (C) 2005 - 2024 by Inria. All rights reserved. * * This software is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -36,9 +36,14 @@ #include -#if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_CALIB3D) && defined(VISP_HAVE_PUGIXML) +#if defined(VISP_HAVE_PUGIXML) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_HIGHGUI) && \ + (((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_CALIB3D)) || ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_CALIB))) +#if defined(HAVE_OPENCV_CALIB3D) #include +#elif defined(HAVE_OPENCV_CALIB) +#include +#endif #include #include #include @@ -101,7 +106,7 @@ void usage(const char **argv, int error) << std::endl << " --input Generic name of the images to process." << std::endl << " Default: empty" << std::endl - << " Example: \"image-%d.png\"" << std::endl + << " Example: \"image-%d.jpg\"" << std::endl << std::endl << " --intrinsic XML file that contains" << std::endl << " camera parameters. " << std::endl @@ -120,6 +125,11 @@ void usage(const char **argv, int error) #endif << " --help, -h Print this helper message." << std::endl << std::endl; + std::cout << "Example" << std::endl + << " " + << argv[0] + << " --input image-%d.jpg" << std::endl + << std::endl; if (error) { std::cout << "Error" << std::endl << " " @@ -140,32 +150,25 @@ int main(int argc, const char **argv) for (int i = 1; i < argc; i++) { if (std::string(argv[i]) == "-w" && i + 1 < argc) { - opt_chessboard_width = atoi(argv[i + 1]); - i++; + opt_chessboard_width = atoi(argv[++i]); } else if (std::string(argv[i]) == "-h" && i + 1 < argc) { - opt_chessboard_height = atoi(argv[i + 1]); - i++; + opt_chessboard_height = atoi(argv[++i]); } else if (std::string(argv[i]) == "--square-size" && i + 1 < argc) { - opt_chessboard_square_size = atof(argv[i + 1]); - i++; + opt_chessboard_square_size = atof(argv[++i]); } else if (std::string(argv[i]) == "--input" && i + 1 < argc) { - opt_input_img_files = std::string(argv[i + 1]); - i++; + opt_input_img_files = std::string(argv[++i]); } else if (std::string(argv[i]) == "--intrinsic" && i + 1 < argc) { - opt_intrinsic_file = std::string(argv[i + 1]); - i++; + opt_intrinsic_file = std::string(argv[++i]); } else if (std::string(argv[i]) == "--output" && i + 1 < argc) { - opt_output_pose_files = std::string(argv[i + 1]); - i++; + opt_output_pose_files = std::string(argv[++i]); } else if (std::string(argv[i]) == "--camera-name" && i + 1 < argc) { - opt_camera_name = std::string(argv[i + 1]); - i++; + opt_camera_name = std::string(argv[++i]); } #if defined(VISP_HAVE_MODULE_GUI) else if (std::string(argv[i]) == "--no-interactive") { @@ -213,7 +216,6 @@ int main(int argc, const char **argv) std::cout << " Output camera poses : " << opt_output_pose_files << std::endl; std::cout << " Interactive mode : " << (opt_interactive ? "yes" : "no") << std::endl << std::endl; - #if defined(VISP_HAVE_MODULE_GUI) vpDisplay *display = nullptr; if (opt_interactive) { @@ -228,7 +230,7 @@ int main(int argc, const char **argv) #elif defined(VISP_HAVE_GTK) display = new vpDisplayGTK(I); #endif - } + } #endif std::vector corners_pts; @@ -339,7 +341,7 @@ int main(int argc, const char **argv) } } #endif -} + } catch (const vpException &e) { std::cout << "Catch an exception: " << e.getMessage() << std::endl; } @@ -349,9 +351,18 @@ int main(int argc, const char **argv) #else int main() { -#if !(defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_CALIB3D)) +#if !defined(HAVE_OPENCV_IMGPROC) + std::cerr << "OpenCV imgproc module is requested to run the calibration." << std::endl; +#endif +#if !defined(HAVE_OPENCV_HIGHGUI) + std::cerr << "OpenCV highgui module is requested to run the calibration." << std::endl; +#endif +#if (VISP_HAVE_OPENCV_VERSION < 0x050000) && !defined(HAVE_OPENCV_CALIB3D) std::cerr << "OpenCV calib3d module is requested to run the calibration." << std::endl; #endif +#if (VISP_HAVE_OPENCV_VERSION >= 0x050000) && !defined(HAVE_OPENCV_3D) + std::cerr << "OpenCV 3d module is requested to run the calibration." << std::endl; +#endif #if !defined(VISP_HAVE_PUGIXML) std::cout << "pugixml built-in 3rdparty is requested to run the calibration." << std::endl; #endif diff --git a/cmake/templates/VISPConfig.cmake.in b/cmake/templates/VISPConfig.cmake.in index 2e3f786289..1fe371669e 100644 --- a/cmake/templates/VISPConfig.cmake.in +++ b/cmake/templates/VISPConfig.cmake.in @@ -240,11 +240,10 @@ set(VISP_HAVE_OGRE "@VISP_HAVE_OGRE@") set(VISP_HAVE_OIS "@VISP_HAVE_OIS@") set(VISP_HAVE_OPENBLAS "@VISP_HAVE_OPENBLAS@") set(VISP_HAVE_OPENCV "@VISP_HAVE_OPENCV@") -set(VISP_HAVE_OPENCV_NONFREE "@VISP_HAVE_OPENCV_NONFREE@") set(VISP_HAVE_OPENCV_VERSION "@VISP_HAVE_OPENCV_VERSION@") set(VISP_HAVE_OPENGL "@VISP_HAVE_OPENGL@") set(VISP_HAVE_OPENMP "@VISP_HAVE_OPENMP@") -set(VISP_HAVE_PANDA3D "@VISP_HAVE_PANDA3D@") +set(VISP_HAVE_PANDA3D "@VISP_HAVE_PANDA3D@") set(VISP_HAVE_PARPORT "@VISP_HAVE_PARPORT@") set(VISP_HAVE_PCL "@VISP_HAVE_PCL@") set(VISP_HAVE_PIONEER "@VISP_HAVE_PIONEER@") diff --git a/cmake/templates/vpConfig.h.in b/cmake/templates/vpConfig.h.in index 1703725de2..6750fa4b31 100644 --- a/cmake/templates/vpConfig.h.in +++ b/cmake/templates/vpConfig.h.in @@ -177,12 +177,6 @@ namespace vp = VISP_NAMESPACE_NAME; // Defined if OpenCV available. #cmakedefine VISP_HAVE_OPENCV -// Defined if OpenCV nonfree module available. Only with OpenCV < 3.0.0 -#cmakedefine VISP_HAVE_OPENCV_NONFREE - -// Defined if OpenCV xfeatures2d module available. Only since OpenCV >= 3.0.0 -#cmakedefine VISP_HAVE_OPENCV_XFEATURES2D - // OpenCV version in hexadecimal (for example 2.1.0 gives 0x020100). #ifdef VISP_HAVE_OPENCV # define VISP_HAVE_OPENCV_VERSION ${VISP_HAVE_OPENCV_VERSION} @@ -190,6 +184,10 @@ namespace vp = VISP_NAMESPACE_NAME; #endif // For compat with previous releases +#if defined(HAVE_OPENCV_XFEATURES2D) +#define VISP_HAVE_OPENCV_XFEATURES2D +#endif + #if defined(HAVE_OPENCV_OBJDETECT) #define VISP_HAVE_OPENCV_OBJDETECT #endif diff --git a/doc/config-doxygen.in b/doc/config-doxygen.in index 8aa93cba61..972492467e 100644 --- a/doc/config-doxygen.in +++ b/doc/config-doxygen.in @@ -2400,10 +2400,12 @@ PREDEFINED = @DOXYGEN_SHOULD_SKIP_THIS@ \ VISP_HAVE_OGRE_RESOURCES_PATH \ VISP_HAVE_OIS \ VISP_HAVE_OPENCV \ - VISP_HAVE_OPENCV_NONFREE \ VISP_HAVE_OPENCV_VERSION=0x030403 \ + HAVE_OPENCV_3D \ + HAVE_OPENCV_CALIB \ HAVE_OPENCV_CALIB3D \ HAVE_OPENCV_DNN \ + HAVE_OPENCV_FEATURES \ HAVE_OPENCV_FEATURES2D \ HAVE_OPENCV_HIGHGUI \ HAVE_OPENCV_IMGCODECS \ @@ -2411,6 +2413,8 @@ PREDEFINED = @DOXYGEN_SHOULD_SKIP_THIS@ \ HAVE_OPENCV_OBJDETECT \ HAVE_OPENCV_VIDEO \ HAVE_OPENCV_VIDEOIO \ + HAVE_OPENCV_XFEATURES2D \ + HAVE_OPENCV_XOBJDETECT \ VISP_HAVE_OPENGL \ VISP_HAVE_PANDA3D \ VISP_HAVE_PARPORT \ diff --git a/doc/tutorial/tracking/tutorial-tracking-blob.dox b/doc/tutorial/tracking/tutorial-tracking-blob.dox index 98103cdf0c..49f4dca61b 100644 --- a/doc/tutorial/tracking/tutorial-tracking-blob.dox +++ b/doc/tutorial/tracking/tutorial-tracking-blob.dox @@ -32,40 +32,40 @@ a v4l2 live camera that can be an usb camera, or a Raspberry Pi camera module. \subsection live-firewire From a firewire live camera -The following code also available in tutorial-blob-tracker-live-firewire.cpp file provided in ViSP source code tree +The following code also available in tutorial-blob-tracker-live.cpp file provided in ViSP source code tree allows to grab images from a firewire camera and track a blob. The initialisation is done with a user mouse click on a pixel that belongs to the blob. To acquire images from a firewire camera we use vp1394TwoGrabber class on unix-like systems or vp1394CMUGrabber class under Windows. These classes are described in the \ref tutorial-grabber. -\include tutorial-blob-tracker-live-firewire.cpp +\include tutorial-blob-tracker-live.cpp From now, we assume that you have successfully followed the \ref tutorial-getting-started and the \ref tutorial-grabber. Here after we explain the new lines that are introduced. -\snippet tutorial-blob-tracker-live-firewire.cpp Construction +\snippet tutorial-blob-tracker-live.cpp Construction Then we are modifying some default settings to allow drawings in overlay the contours pixels and the position of the center of gravity with a thickness of 2 pixels. -\snippet tutorial-blob-tracker-live-firewire.cpp Setting +\snippet tutorial-blob-tracker-live.cpp Setting Then we are waiting for a user initialization throw a mouse click event in the blob to track. -\snippet tutorial-blob-tracker-live-firewire.cpp Init +\snippet tutorial-blob-tracker-live.cpp Init The tracker is now initialized. The tracking can be performed on new images: -\snippet tutorial-blob-tracker-live-firewire.cpp Track +\snippet tutorial-blob-tracker-live.cpp Track \subsection live-v4l2 From a v4l2 live camera -The following code also available in tutorial-blob-tracker-live-v4l2.cpp file provided in ViSP source code tree allows +The following code also available in tutorial-blob-tracker-live.cpp file provided in ViSP source code tree allows to grab images from a camera compatible with video for linux two driver (v4l2) and track a blob. Webcams or more generally USB cameras, but also the Raspberry Pi Camera Module can be considered. To acquire images from a v4l2 camera we use vpV4l2Grabber class on unix-like systems. This class is described in the \ref tutorial-grabber. -\include tutorial-blob-tracker-live-v4l2.cpp +\include tutorial-blob-tracker-live.cpp The code is the same than the one presented in the previous subsection, except that here we use the vpV4l2Grabber class to grab images from usb cameras. Here we have also modified the while loop in order to catch an exception when diff --git a/doc/tutorial/tracking/tutorial-tracking-mb-generic-apriltag-live.dox b/doc/tutorial/tracking/tutorial-tracking-mb-generic-apriltag-live.dox index 700796faed..2fbf7a35e5 100644 --- a/doc/tutorial/tracking/tutorial-tracking-mb-generic-apriltag-live.dox +++ b/doc/tutorial/tracking/tutorial-tracking-mb-generic-apriltag-live.dox @@ -105,7 +105,7 @@ tutorials given in \ref tutorial_install_src. Once build, to see the options that are available, just run: \code $ ./tutorial-mb-generic-tracker-apriltag-webcam --help -Usage: ./tutorial-mb-generic-tracker-apriltag-webcam [--input ] [--cube_size ] [--tag_size ] [--quad_decimate ] [--nthreads ] [--intrinsic ] [--camera_name ] [--tag_family <0: TAG_36h11, 1: TAG_36h10, 2: TAG_36ARTOOLKIT, 3: TAG_25h9, 4: TAG_25h7, 5: TAG_16h5>] [--display_off] [--texture] [--projection_error <30 - 100>] [--help] +Usage: ./tutorial-mb-generic-tracker-apriltag-webcam [--input ] [--cube-size ] [--tag-size ] [--quad-decimate ] [--nthreads ] [--intrinsic ] [--camera-name ] [--tag-family <0: TAG_36h11, 1: TAG_36h10, 2: TAG_36ARTOOLKIT, 3: TAG_25h9, 4: TAG_25h7, 5: TAG_16h5>] [--display-off] [--texture] [--projection-error <30 - 100>] [--help] \endcode To test the tracker on a 12.5 cm wide cube that has an AprilTag of size 8 by 8 cm, and enable moving-edges and @@ -126,7 +126,7 @@ $ ./tutorial-mb-generic-tracker-apriltag-webcam --input 1 \endcode - The default size of the cube is 0.125 meter large. To use rather a 0.20 meter large cube, run: \code -$ ./tutorial-mb-generic-tracker-apriltag-webcam --cube_size 0.20 +$ ./tutorial-mb-generic-tracker-apriltag-webcam --cube-size 0.20 \endcode - The AprilTag size is 0.08 by 0.08 meters. To change the tag size to let say 0.10 meter square, use: \code @@ -160,7 +160,7 @@ $ ./tutorial-mb-generic-tracker-apriltag-webcam --display_off The default value of this threshold is set to 40 degrees. To decrease this threshold to 30 degrees (meaning that we accept less projection error and thus trigger a new AprilTag detection more often) you may run: \code -$ ./tutorial-mb-generic-tracker-apriltag-webcam --projection_error 30 +$ ./tutorial-mb-generic-tracker-apriltag-webcam --projection-error 30 \endcode \subsection mb_generic_apriltag_webcam_result Expected results @@ -202,7 +202,7 @@ provided in the tutorials available from \ref tutorial_install_src. Once build, to see the options that are available, just run: \code $ ./tutorial-mb-generic-tracker-apriltag-rs2 --help -Usage: ./tutorial-mb-generic-tracker-apriltag-rs2 [--cube_size ] [--tag_size ] [--quad_decimate ] [--nthreads ] [--tag_family <0: TAG_36h11, 1: TAG_36h10, 2: TAG_36ARTOOLKIT, 3: TAG_25h9, 4: TAG_25h7, 5: TAG_16h5>] [--display_off] [--texture] [--depth] [--projection_error <30 - 100>] [--help] +Usage: ./tutorial-mb-generic-tracker-apriltag-rs2 [--cube-size ] [--tag-size ] [--quad-decimate ] [--nthreads ] [--tag-family <0: TAG_36h11, 1: TAG_36h10, 2: TAG_36ARTOOLKIT, 3: TAG_25h9, 4: TAG_25h7, 5: TAG_16h5>] [--display-off] [--texture] [--depth] [--projection-error <30 - 100>] [--help] \endcode To test the tracker on a 12.5 cm wide cube that has an AprilTag of size 8 by 8 cm, and enable moving-edges, keypoints @@ -224,7 +224,7 @@ $ ./tutorial-mb-generic-tracker-apriltag-rs2 By default, the following settings are used:
- Default size of the cube is 0.125 meter large. To use rather a 0.20 meter large cube, run: \code -$ ./tutorial-mb-generic-tracker-apriltag-rs2 --cube_size 0.20 +$ ./tutorial-mb-generic-tracker-apriltag-rs2 --cube-size 0.20 \endcode - The AprilTag size is 0.08 by 0.08 meters. To change the tag size to let say 0.10 meter square, use: \code @@ -251,7 +251,7 @@ $ ./tutorial-mb-generic-tracker-apriltag-rs2 --display_off The default value of this threshold is set to 40 degrees. To decrease this threshold to 30 degrees (meaning that we accept less projection error and thus trigger a new AprilTag detection more often) you may run: \code -$ ./tutorial-mb-generic-tracker-apriltag-webcam --projection_error 30 +$ ./tutorial-mb-generic-tracker-apriltag-webcam --projection-error 30 \endcode \subsection mb_generic_apriltag_realsense_result Expected results diff --git a/doc/tutorial/visual-servo/tutorial-franka-ibvs.dox b/doc/tutorial/visual-servo/tutorial-franka-ibvs.dox index 3e8014e71b..99755ddc99 100644 --- a/doc/tutorial/visual-servo/tutorial-franka-ibvs.dox +++ b/doc/tutorial/visual-servo/tutorial-franka-ibvs.dox @@ -22,7 +22,7 @@ Now enter in `example/servo-franka folder` and run `servoFrankaIBVS` binary usin $ cd example/servo-franka $ ./servoFrankaIBVS --help - ./servoFrankaIBVS [--ip ] [--tag_size ] [--eMc ] [--quad_decimate ] [--adaptive_gain] [--plot] [--task_sequencing] [--no-convergence-threshold] [--verbose] [--help] [-h] + ./servoFrankaIBVS [--ip ] [--tag-size ] [--eMc ] [--quad-decimate ] [--adaptive_gain] [--plot] [--task_sequencing] [--no-convergence-threshold] [--verbose] [--help] [-h] Run the binary activating the plot and using a constant gain: diff --git a/doc/tutorial/visual-servo/tutorial-franka-pbvs.dox b/doc/tutorial/visual-servo/tutorial-franka-pbvs.dox index 40d2999005..ef836365f6 100644 --- a/doc/tutorial/visual-servo/tutorial-franka-pbvs.dox +++ b/doc/tutorial/visual-servo/tutorial-franka-pbvs.dox @@ -264,7 +264,7 @@ Now enter in `example/servo-franka folder` and run `servoFrankaPBVS` binary usin $ cd example/servo-franka $ ./servoFrankaPBVS --help - ./servoFrankaPBVS [--ip ] [--tag_size ] [--eMc ] [--quad_decimate ] [--adaptive_gain] [--plot] [--task_sequencing] [--no-convergence-threshold] [--verbose] [--help] [-h] + ./servoFrankaPBVS [--ip ] [--tag-size ] [--eMc ] [--quad-decimate ] [--adaptive_gain] [--plot] [--task_sequencing] [--no-convergence-threshold] [--verbose] [--help] [-h] Run the binary activating the plot and using a constant gain: diff --git a/doc/tutorial/visual-servo/tutorial-universal-robot-ibvs.dox b/doc/tutorial/visual-servo/tutorial-universal-robot-ibvs.dox index 715f2dad90..27a918b08a 100644 --- a/doc/tutorial/visual-servo/tutorial-universal-robot-ibvs.dox +++ b/doc/tutorial/visual-servo/tutorial-universal-robot-ibvs.dox @@ -135,8 +135,8 @@ Now enter in `example/servo-universal-robots folder` and run `servoUniversalRobo \verbatim $ cd example/servo-universal-robots $ ./servoUniversalRobotsIBVS --help -./servoUniversalRobotsIBVS [--ip ] [--tag_size ] \ - [--eMc ] [--quad_decimate ] \ +./servoUniversalRobotsIBVS [--ip ] [--tag-size ] \ + [--eMc ] [--quad-decimate ] \ [--adaptive_gain] [--plot] [--task_sequencing] [--no-convergence-threshold] \ [--verbose] [--help] [-h] \endverbatim diff --git a/doc/tutorial/visual-servo/tutorial-universal-robot-pbvs.dox b/doc/tutorial/visual-servo/tutorial-universal-robot-pbvs.dox index e388bdde50..3128828df3 100644 --- a/doc/tutorial/visual-servo/tutorial-universal-robot-pbvs.dox +++ b/doc/tutorial/visual-servo/tutorial-universal-robot-pbvs.dox @@ -18,8 +18,8 @@ Now enter in `example/servo-universal-robots folder` and run `servoUniversalRobo \verbatim $ cd example/servo-universal-robots $ ./servoUniversalRobotsPBVS --help -./servoUniversalRobotsPBVS [--ip ] [--tag_size ] \ - [--eMc ] [--quad_decimate ] \ +./servoUniversalRobotsPBVS [--ip ] [--tag-size ] \ + [--eMc ] [--quad-decimate ] \ [--adaptive_gain] [--plot] [--task_sequencing] [--no-convergence-threshold] \ [--verbose] [--help] [-h] \endverbatim diff --git a/example/calibration/calibrate-camera.cpp b/example/calibration/calibrate-camera.cpp index dc6059fa6f..d4c4ba4c68 100644 --- a/example/calibration/calibrate-camera.cpp +++ b/example/calibration/calibrate-camera.cpp @@ -1,7 +1,6 @@ -/**************************************************************************** - * +/* * ViSP, open source Visual Servoing Platform software. - * Copyright (C) 2005 - 2023 by Inria. All rights reserved. + * Copyright (C) 2005 - 2024 by Inria. All rights reserved. * * This software is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -30,18 +29,26 @@ * * Description: * Camera calibration with chessboard or circle calibration grid. - * -*****************************************************************************/ + */ #include #include -#if (VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_CALIB3D) && defined(HAVE_OPENCV_HIGHGUI) && \ - defined(HAVE_OPENCV_IMGPROC) && defined(VISP_HAVE_PUGIXML) +#if defined(HAVE_OPENCV_HIGHGUI) && defined(HAVE_OPENCV_IMGPROC) && defined(VISP_HAVE_PUGIXML) \ + && (((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_CALIB3D)) || ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_3D))) #include +#if defined(HAVE_OPENCV_CALIB3D) #include +#elif defined(HAVE_OPENCV_CALIB) +#include +#endif + +#if defined(HAVE_OPENCV_CONTRIB) +#include // Needed on Ubuntu 16.04 with OpenCV 2.4.9.1 +#endif + #include #include #include @@ -674,14 +681,21 @@ int main(int argc, const char *argv[]) #else int main() { -#if !((VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_CALIB3D) && defined(HAVE_OPENCV_HIGHGUI) && defined(HAVE_OPENCV_IMGPROC)) - std::cout << "OpenCV calib3d, highgui and imgproc modules are requested to run the calibration." << std::endl; - std::cout << "Tip:" << std::endl; - std::cout << "- Install OpenCV, configure again ViSP using cmake and build again this example" << std::endl; +#if !defined(HAVE_OPENCV_IMGPROC) + std::cout << "This example requires OpenCV imgproc module." << std::endl; +#endif +#if !defined(HAVE_OPENCV_HIGHGUI) + std::cout << "This example requires OpenCV highgui module." << std::endl; +#endif +#if (VISP_HAVE_OPENCV_VERSION < 0x050000) && !defined(HAVE_OPENCV_CALIB3D) + std::cout << "This example requires OpenCV calib3d module." << std::endl; +#endif +#if (VISP_HAVE_OPENCV_VERSION >= 0x050000) && !defined(HAVE_OPENCV_3D) + std::cout << "This example requires OpenCV 3d module." << std::endl; #endif #if !defined(VISP_HAVE_PUGIXML) std::cout << "pugixml built-in 3rdparty is requested to run the calibration." << std::endl; #endif return EXIT_SUCCESS; - } +} #endif diff --git a/example/manual/ogre/HelloWorldOgre.cpp b/example/manual/ogre/HelloWorldOgre.cpp index 36083fcf96..c977a1e1f2 100644 --- a/example/manual/ogre/HelloWorldOgre.cpp +++ b/example/manual/ogre/HelloWorldOgre.cpp @@ -36,21 +36,31 @@ \example HelloWorldOgre.cpp \brief Example that shows how to exploit the vpAROgre class. - */ #include +#include + +//! [Undef grabber] +// Comment / uncomment following lines to use the specific 3rd party compatible with your camera +// #undef VISP_HAVE_V4L2 +// #undef VISP_HAVE_DC1394 +// #undef HAVE_OPENCV_HIGHGUI +// #undef HAVE_OPENCV_VIDEOIO +//! [Undef grabber] + #include #include -#include #include #include #include #include -#if defined(HAVE_OPENCV_VIDEOIO) -#include +#if (VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI) +#include // for cv::VideoCapture +#elif (VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO) +#include // for cv::VideoCapture #endif int main() @@ -61,7 +71,9 @@ int main() try { #if defined(VISP_HAVE_OGRE) -#if defined(VISP_HAVE_V4L2) || defined(VISP_HAVE_DC1394) || defined(HAVE_OPENCV_VIDEOIO) +#if defined(VISP_HAVE_V4L2) || defined(VISP_HAVE_DC1394) || \ + ((VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI)) || \ + ((VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO)) // Image to stock gathered data // Here we acquire a color image. The consequence will be that @@ -79,7 +91,7 @@ int main() vp1394TwoGrabber grabber; grabber.open(I); grabber.acquire(I); -#elif defined(HAVE_OPENCV_VIDEOIO) +#elif ((VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI))|| ((VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO)) // OpenCV to gather images cv::VideoCapture grabber(0); // open the default camera if (!grabber.isOpened()) { // check if we succeeded @@ -142,7 +154,7 @@ int main() // Acquire a new image #if defined(VISP_HAVE_V4L2) || defined(VISP_HAVE_DC1394) grabber.acquire(I); -#elif defined(HAVE_OPENCV_VIDEOIO) +#elif ((VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI))|| ((VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO)) grabber >> frame; vpImageConvert::convert(frame, I); #endif diff --git a/example/manual/ogre/HelloWorldOgreAdvanced.cpp b/example/manual/ogre/HelloWorldOgreAdvanced.cpp index 7aa04c37c7..e9c7313d75 100644 --- a/example/manual/ogre/HelloWorldOgreAdvanced.cpp +++ b/example/manual/ogre/HelloWorldOgreAdvanced.cpp @@ -41,16 +41,27 @@ #include +#include + +//! [Undef grabber] +// Comment / uncomment following lines to use the specific 3rd party compatible with your camera +// #undef VISP_HAVE_V4L2 +// #undef VISP_HAVE_DC1394 +// #undef HAVE_OPENCV_HIGHGUI +// #undef HAVE_OPENCV_VIDEOIO +//! [Undef grabber] + #include #include -#include #include #include #include #include -#if defined(HAVE_OPENCV_VIDEOIO) -#include +#if (VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI) +#include // for cv::VideoCapture +#elif (VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO) +#include // for cv::VideoCapture #endif #ifdef ENABLE_VISP_NAMESPACE @@ -114,7 +125,9 @@ int main() { try { #if defined(VISP_HAVE_OGRE) -#if defined(VISP_HAVE_V4L2) || defined(VISP_HAVE_DC1394) || defined(HAVE_OPENCV_VIDEOIO) +#if defined(VISP_HAVE_V4L2) || defined(VISP_HAVE_DC1394) || \ + ((VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI)) || \ + ((VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO)) // Image to store gathered data // Here we acquire a grey level image. The consequence will be that @@ -139,7 +152,7 @@ int main() // the image size grabber.open(I); grabber.acquire(I); -#elif defined(HAVE_OPENCV_VIDEOIO) +#elif ((VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI))|| ((VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO)) // OpenCV to gather images cv::VideoCapture grabber(0); // open the default camera if (!grabber.isOpened()) { // check if we succeeded @@ -171,7 +184,7 @@ int main() // Acquire a new image #if defined(VISP_HAVE_V4L2) || defined(VISP_HAVE_DC1394) grabber.acquire(I); -#elif defined(HAVE_OPENCV_VIDEOIO) +#elif ((VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI))|| ((VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO)) grabber >> frame; vpImageConvert::convert(frame, I); #endif diff --git a/example/math/quadprog.cpp b/example/math/quadprog.cpp index 617d08f31e..754d1e3b4f 100644 --- a/example/math/quadprog.cpp +++ b/example/math/quadprog.cpp @@ -69,12 +69,14 @@ int main(int argc, char **argv) bool opt_click_allowed = true; #endif - for (int i = 0; i < argc; i++) { + for (int i = 1; i < argc; i++) { #ifdef VISP_HAVE_DISPLAY - if (std::string(argv[i]) == "-d") + if (std::string(argv[i]) == "-d") { opt_display = false; - else if (std::string(argv[i]) == "-c") + } + else if (std::string(argv[i]) == "-c") { opt_click_allowed = false; + } else #endif if (std::string(argv[i]) == "-h" || std::string(argv[i]) == "--help") { diff --git a/example/math/quadprog_eq.cpp b/example/math/quadprog_eq.cpp index 6c3cf66c51..3171b8962e 100644 --- a/example/math/quadprog_eq.cpp +++ b/example/math/quadprog_eq.cpp @@ -67,12 +67,14 @@ int main(int argc, char **argv) bool opt_click_allowed = true; #endif - for (int i = 0; i < argc; i++) { + for (int i = 1; i < argc; i++) { #ifdef VISP_HAVE_DISPLAY - if (std::string(argv[i]) == "-d") + if (std::string(argv[i]) == "-d") { opt_display = false; - else if (std::string(argv[i]) == "-c") + } + else if (std::string(argv[i]) == "-c") { opt_click_allowed = false; + } else #endif if (std::string(argv[i]) == "-h") { diff --git a/example/reflex-takktile/takktile2-control.cpp b/example/reflex-takktile/takktile2-control.cpp index 92d9611d49..a223e13077 100644 --- a/example/reflex-takktile/takktile2-control.cpp +++ b/example/reflex-takktile/takktile2-control.cpp @@ -1,7 +1,6 @@ -/**************************************************************************** - * +/* * ViSP, open source Visual Servoing Platform software. - * Copyright (C) 2005 - 2023 by Inria. All rights reserved. + * Copyright (C) 2005 - 2024 by Inria. All rights reserved. * * This software is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -30,8 +29,7 @@ * * Description: * Interface for the Reflex Takktile 2 hand from Right Hand Robotics. - * -*****************************************************************************/ + */ /*! \example takktile2-control.cpp @@ -57,22 +55,26 @@ int main(int argc, char *argv[]) std::string opt_tactile_file_name = "yaml/tactile_calibrate.yaml"; std::string opt_motor_file_name = "yaml/motor_constants.yaml"; - for (int i = 0; i < argc; i++) { - if (std::string(argv[i]) == "--network") - opt_network_interface = std::string(argv[i + 1]); - else if (std::string(argv[i]) == "--finger") - opt_finger_file_name = std::string(argv[i + 1]); - else if (std::string(argv[i]) == "--tactile") - opt_tactile_file_name = atoi(argv[i + 1]); - else if (std::string(argv[i]) == "--motor") - opt_motor_file_name = atoi(argv[i + 1]); + for (int i = 1; i < argc; i++) { + if (std::string(argv[i]) == "--network" && i + 1 < argc) { + opt_network_interface = std::string(argv[++i]); + } + else if (std::string(argv[i]) == "--finger" && i + 1 < argc) { + opt_finger_file_name = std::string(argv[++i]); + } + else if (std::string(argv[i]) == "--tactile" && i + 1 < argc) { + opt_tactile_file_name = atoi(argv[++i]); + } + else if (std::string(argv[i]) == "--motor" && i + 1 < argc) { + opt_motor_file_name = atoi(argv[++i]); + } else if (std::string(argv[i]) == "--help" || std::string(argv[i]) == "-h") { std::cout << "\nUsage: " << argv[0] << " [--network ] " - " [--finger ]" - " [--tactile ]" - " [--motor ]" - " [--help] [-h]\n" + << " [--finger ]" + << " [--tactile ]" + << " [--motor ]" + << " [--help] [-h]\n" << std::endl; std::cout << "Options:" << std::endl; std::cout << " --network " << std::endl; diff --git a/example/reflex-takktile/takktile2-read-data.cpp b/example/reflex-takktile/takktile2-read-data.cpp index 8a04cb7aa8..da98cfb65f 100644 --- a/example/reflex-takktile/takktile2-read-data.cpp +++ b/example/reflex-takktile/takktile2-read-data.cpp @@ -57,22 +57,26 @@ int main(int argc, char *argv[]) std::string opt_tactile_file_name = "yaml/tactile_calibrate.yaml"; std::string opt_motor_file_name = "yaml/motor_constants.yaml"; - for (int i = 0; i < argc; i++) { - if (std::string(argv[i]) == "--network") - opt_network_interface = std::string(argv[i + 1]); - else if (std::string(argv[i]) == "--finger") - opt_finger_file_name = std::string(argv[i + 1]); - else if (std::string(argv[i]) == "--tactile") - opt_tactile_file_name = atoi(argv[i + 1]); - else if (std::string(argv[i]) == "--motor") - opt_motor_file_name = atoi(argv[i + 1]); + for (int i = 1; i < argc; i++) { + if (std::string(argv[i]) == "--network" && i + 1 < argc) { + opt_network_interface = std::string(argv[++i]); + } + else if (std::string(argv[i]) == "--finger" && i + 1 < argc) { + opt_finger_file_name = std::string(argv[++i]); + } + else if (std::string(argv[i]) == "--tactile" && i + 1 < argc) { + opt_tactile_file_name = atoi(argv[++i]); + } + else if (std::string(argv[i]) == "--motor" && i + 1 < argc) { + opt_motor_file_name = atoi(argv[++i]); + } else if (std::string(argv[i]) == "--help" || std::string(argv[i]) == "-h") { std::cout << "\nUsage: " << argv[0] << " [--network ] " - " [--finger ]" - " [--tactile ]" - " [--motor ]" - " [--help] [-h]\n" + << " [--finger ]" + << " [--tactile ]" + << " [--motor ]" + << " [--help] [-h]\n" << std::endl; std::cout << "Options:" << std::endl; std::cout << " --network " << std::endl; diff --git a/example/servo-bebop2/servoBebop2.cpp b/example/servo-bebop2/servoBebop2.cpp index 69e94fec9d..f5cb8964c7 100644 --- a/example/servo-bebop2/servoBebop2.cpp +++ b/example/servo-bebop2/servoBebop2.cpp @@ -161,7 +161,7 @@ int main(int argc, char **argv) else if (argc >= 2 && (std::string(argv[1]) == "--help" || std::string(argv[1]) == "-h")) { std::cout << "\nUsage:\n" << " " << argv[0] - << " [--tag_size ] [--ip ] [--distance_to_tag ] [--intrinsic ] " + << " [--tag-size ] [--ip ] [--distance_to_tag ] [--intrinsic ] " << "[--hd_stream] [--verbose] [-v] [--help] [-h]\n" << std::endl << "Description:\n" diff --git a/example/servo-pioneer/servoPioneerPoint2DDepth.cpp b/example/servo-pioneer/servoPioneerPoint2DDepth.cpp index 4e4b13a145..79c93b0b27 100644 --- a/example/servo-pioneer/servoPioneerPoint2DDepth.cpp +++ b/example/servo-pioneer/servoPioneerPoint2DDepth.cpp @@ -36,6 +36,15 @@ #include +//! [Undef grabber] +// Comment / uncomment following lines to use the specific 3rd party compatible with your camera +// #undef VISP_HAVE_V4L2 +// #undef VISP_HAVE_DC1394 +// #undef VISP_HAVE_CMU1394 +// #undef HAVE_OPENCV_HIGHGUI +// #undef HAVE_OPENCV_VIDEOIO +//! [Undef grabber] + #include #include #include @@ -53,11 +62,15 @@ #include #include -#if defined(HAVE_OPENCV_VIDEOIO) -#include +#if (VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI) +#include // for cv::VideoCapture +#elif (VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO) +#include // for cv::VideoCapture #endif -#if defined(VISP_HAVE_DC1394) || defined(VISP_HAVE_V4L2) || defined(VISP_HAVE_CMU1394) || defined(HAVE_OPENCV_VIDEOIO) +#if defined(VISP_HAVE_DC1394) || defined(VISP_HAVE_V4L2) || defined(VISP_HAVE_CMU1394) || \ + ((VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI)) || \ + ((VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO)) #if defined(VISP_HAVE_X11) || defined(VISP_HAVE_GDI) #if defined(VISP_HAVE_PIONEER) #define TEST_COULD_BE_ACHIEVED @@ -65,31 +78,28 @@ #endif #endif -#undef VISP_HAVE_OPENCV // To use a firewire camera -#undef VISP_HAVE_V4L2 // To use a firewire camera - - /*! - \example servoPioneerPoint2DDepth.cpp +/*! + \example servoPioneerPoint2DDepth.cpp - Example that shows how to control the Pioneer mobile robot by IBVS visual - servoing with respect to a blob. The current visual features that are used - are s = (x, log(Z/Z*)). The desired one are s* = (x*, 0), with: - - x the abscise of the point corresponding to the blob center of gravity - measured at each iteration, - - x* the desired abscise position of the point (x* = 0) - - Z the depth of the point measured at each iteration - - Z* the desired depth of the point equal to the initial one. + Example that shows how to control the Pioneer mobile robot by IBVS visual + servoing with respect to a blob. The current visual features that are used + are s = (x, log(Z/Z*)). The desired one are s* = (x*, 0), with: + - x the abscise of the point corresponding to the blob center of gravity + measured at each iteration, + - x* the desired abscise position of the point (x* = 0) + - Z the depth of the point measured at each iteration + - Z* the desired depth of the point equal to the initial one. - The degrees of freedom that are controlled are (vx, wz), where wz is the - rotational velocity and vx the translational velocity of the mobile platform - at point M located at the middle between the two wheels. + The degrees of freedom that are controlled are (vx, wz), where wz is the + rotational velocity and vx the translational velocity of the mobile platform + at point M located at the middle between the two wheels. - The feature x allows to control wy, while log(Z/Z*) allows to control vz. - The value of x is measured thanks to a blob tracker. - The value of Z is estimated from the surface of the blob that is - proportional to the depth Z. + The feature x allows to control wy, while log(Z/Z*) allows to control vz. + The value of x is measured thanks to a blob tracker. + The value of Z is estimated from the surface of the blob that is + proportional to the depth Z. - */ +*/ #ifdef TEST_COULD_BE_ACHIEVED int main(int argc, char **argv) { @@ -137,7 +147,7 @@ int main(int argc, char **argv) vpCameraParameters cam; // Create the camera framegrabber -#if defined(HAVE_OPENCV_VIDEOIO) +#if ((VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI))|| ((VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO)) int device = 1; std::cout << "Use device: " << device << std::endl; cv::VideoCapture g(device); // open the default camera @@ -181,7 +191,7 @@ int main(int argc, char **argv) #endif // Acquire an image from the grabber -#if defined(HAVE_OPENCV_VIDEOIO) +#if ((VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI))|| ((VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO)) g >> frame; // get a new frame from camera vpImageConvert::convert(frame, I); #else @@ -262,7 +272,7 @@ int main(int argc, char **argv) while (1) { // Acquire a new image -#if defined(HAVE_OPENCV_VIDEOIO) +#if ((VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI))|| ((VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO)) g >> frame; // get a new frame from camera vpImageConvert::convert(frame, I); #else diff --git a/example/servo-pioneer/servoPioneerPoint2DDepthWithoutVpServo.cpp b/example/servo-pioneer/servoPioneerPoint2DDepthWithoutVpServo.cpp index 40bd30b641..060ece2519 100644 --- a/example/servo-pioneer/servoPioneerPoint2DDepthWithoutVpServo.cpp +++ b/example/servo-pioneer/servoPioneerPoint2DDepthWithoutVpServo.cpp @@ -34,9 +34,19 @@ *****************************************************************************/ #include +#include + +//! [Undef grabber] +// Comment / uncomment following lines to use the specific 3rd party compatible with your camera +// #undef VISP_HAVE_V4L2 +// #undef VISP_HAVE_DC1394 +// #undef VISP_HAVE_CMU1394 +// #undef HAVE_OPENCV_HIGHGUI +// #undef HAVE_OPENCV_VIDEOIO +//! [Undef grabber] + #include #include -#include #include #include #include @@ -51,11 +61,15 @@ #include #include -#if defined(HAVE_OPENCV_VIDEOIO) -#include +#if (VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI) +#include // for cv::VideoCapture +#elif (VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO) +#include // for cv::VideoCapture #endif -#if defined(VISP_HAVE_DC1394) || defined(VISP_HAVE_V4L2) || defined(VISP_HAVE_CMU1394) || defined(HAVE_OPENCV_VIDEOIO) +#if defined(VISP_HAVE_DC1394) || defined(VISP_HAVE_V4L2) || defined(VISP_HAVE_CMU1394) || \ + ((VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI)) || \ + ((VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO)) #if defined(VISP_HAVE_X11) || defined(VISP_HAVE_GDI) #if defined(VISP_HAVE_PIONEER) #define TEST_COULD_BE_ACHIEVED @@ -63,9 +77,6 @@ #endif #endif -#undef VISP_HAVE_OPENCV // To use a firewire camera -#undef VISP_HAVE_V4L2 // To use a firewire camera - /*! \example servoPioneerPoint2DDepthWithoutVpServo.cpp @@ -87,7 +98,7 @@ The value of Z is estimated from the surface of the blob that is proportional to the depth Z. - */ + */ #ifdef TEST_COULD_BE_ACHIEVED int main(int argc, char **argv) { @@ -135,7 +146,7 @@ int main(int argc, char **argv) vpCameraParameters cam; // Create the camera framegrabber -#if defined(HAVE_OPENCV_VIDEOIO) +#if ((VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI))|| ((VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO)) int device = 1; std::cout << "Use device: " << device << std::endl; cv::VideoCapture g(device); // open the default camera @@ -179,7 +190,7 @@ int main(int argc, char **argv) #endif // Acquire an image from the grabber -#if defined(HAVE_OPENCV_VIDEOIO) +#if ((VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI))|| ((VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO)) g >> frame; // get a new frame from camera vpImageConvert::convert(frame, I); #else @@ -249,7 +260,7 @@ int main(int argc, char **argv) while (1) { // Acquire a new image -#if defined(HAVE_OPENCV_VIDEOIO) +#if ((VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI))|| ((VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO)) g >> frame; // get a new frame from camera vpImageConvert::convert(frame, I); #else @@ -276,7 +287,7 @@ int main(int argc, char **argv) L.stack(L_Z); // not constant since it corresponds to log(Z/Z*) that // evolves at each iteration -// Update the global error s-s* + // Update the global error s-s* vpColVector error; error.stack(s_x.error(s_xd, vpFeaturePoint::selectX())); error.stack(s_Z.error(s_Zd)); diff --git a/example/servo-universal-robots/servoUniversalRobotsIBVS.cpp b/example/servo-universal-robots/servoUniversalRobotsIBVS.cpp index 2a94b25689..c5991e8372 100644 --- a/example/servo-universal-robots/servoUniversalRobotsIBVS.cpp +++ b/example/servo-universal-robots/servoUniversalRobotsIBVS.cpp @@ -134,7 +134,7 @@ int main(int argc, char **argv) else if (std::string(argv[i]) == "--task_sequencing") { opt_task_sequencing = true; } - else if (std::string(argv[i]) == "--quad_decimate" && i + 1 < argc) { + else if (std::string(argv[i]) == "--quad-decimate" && i + 1 < argc) { opt_quad_decimate = std::stoi(argv[i + 1]); } else if (std::string(argv[i]) == "--no-convergence-threshold") { @@ -142,9 +142,9 @@ int main(int argc, char **argv) } else if (std::string(argv[i]) == "--help" || std::string(argv[i]) == "-h") { std::cout - << argv[0] << " [--ip ] [--tag_size ] [--tag-size ] [--eMc ] " - << "[--quad_decimate ] [--adaptive_gain] [--plot] [--task_sequencing] [--no-convergence-threshold] [--verbose] [--help] [-h]" << "\n"; return EXIT_SUCCESS; diff --git a/example/servo-universal-robots/servoUniversalRobotsPBVS.cpp b/example/servo-universal-robots/servoUniversalRobotsPBVS.cpp index 0af04753a1..49423ac938 100644 --- a/example/servo-universal-robots/servoUniversalRobotsPBVS.cpp +++ b/example/servo-universal-robots/servoUniversalRobotsPBVS.cpp @@ -132,7 +132,7 @@ int main(int argc, char **argv) else if (std::string(argv[i]) == "--task_sequencing") { opt_task_sequencing = true; } - else if (std::string(argv[i]) == "--quad_decimate" && i + 1 < argc) { + else if (std::string(argv[i]) == "--quad-decimate" && i + 1 < argc) { opt_quad_decimate = std::stoi(argv[i + 1]); } else if (std::string(argv[i]) == "--no-convergence-threshold") { @@ -141,9 +141,9 @@ int main(int argc, char **argv) } else if (std::string(argv[i]) == "--help" || std::string(argv[i]) == "-h") { std::cout - << argv[0] << " [--ip ] [--tag_size ] [--tag-size ] [--eMc ] " - << "[--quad_decimate ] [--adaptive_gain] [--plot] [--task_sequencing] [--no-convergence-threshold] [--verbose] [--help] [-h]" << "\n"; return EXIT_SUCCESS; diff --git a/modules/ar/CMakeLists.txt b/modules/ar/CMakeLists.txt index 15c70e9c76..e631b8df34 100644 --- a/modules/ar/CMakeLists.txt +++ b/modules/ar/CMakeLists.txt @@ -191,3 +191,15 @@ vp_glob_module_sources() vp_module_include_directories(${opt_incs} SYSTEM ${opt_system_incs}) vp_create_module(${opt_libs}) + + +set(opt_test_incs "") +set(opt_test_libs "") + +if(WITH_CATCH2) + # catch2 is private + list(APPEND opt_test_incs ${CATCH2_INCLUDE_DIRS}) + list(APPEND opt_test_libs ${CATCH2_LIBRARIES}) +endif() + +vp_add_tests(DEPENDS_ON visp_core PRIVATE_INCLUDE_DIRS ${opt_test_incs} PRIVATE_LIBRARIES ${opt_test_libs}) diff --git a/modules/ar/include/visp3/ar/vpPanda3DBaseRenderer.h b/modules/ar/include/visp3/ar/vpPanda3DBaseRenderer.h index d0844a4625..209c92830f 100644 --- a/modules/ar/include/visp3/ar/vpPanda3DBaseRenderer.h +++ b/modules/ar/include/visp3/ar/vpPanda3DBaseRenderer.h @@ -58,12 +58,24 @@ class VISP_EXPORT vpPanda3DBaseRenderer { public: vpPanda3DBaseRenderer(const std::string &rendererName) - : m_name(rendererName), m_renderOrder(-100), m_framework(nullptr), m_window(nullptr), m_camera(nullptr) + : m_name(rendererName), m_renderOrder(-100), m_window(nullptr), m_camera(nullptr), m_isWindowOwner(false) { setVerticalSyncEnabled(false); } - virtual ~vpPanda3DBaseRenderer() = default; + virtual ~vpPanda3DBaseRenderer() + { + if (m_window != nullptr) { + for (GraphicsOutput *buffer: m_buffers) { + buffer->get_engine()->remove_window(buffer); + } + } + if (m_isWindowOwner) { + framework.close_window(m_window); + } + + m_window = nullptr; + } /** * @brief Initialize the whole Panda3D framework. Create a new PandaFramework object and a new window. @@ -71,7 +83,7 @@ class VISP_EXPORT vpPanda3DBaseRenderer * Will also perform the renderer setup (scene, camera and render targets) */ virtual void initFramework(); - virtual void initFromParent(std::shared_ptr framework, PointerTo window); + virtual void initFromParent(PointerTo window); virtual void initFromParent(const vpPanda3DBaseRenderer &renderer); virtual void beforeFrameRendered() { } @@ -80,7 +92,7 @@ class VISP_EXPORT vpPanda3DBaseRenderer { GraphicsOutput *mainBuffer = getMainOutputBuffer(); if (mainBuffer != nullptr) { - m_framework->get_graphics_engine()->extract_texture_data(mainBuffer->get_texture(), mainBuffer->get_gsg()); + m_window->get_graphics_output()->get_engine()->extract_texture_data(mainBuffer->get_texture(), mainBuffer->get_gsg()); } } @@ -266,17 +278,19 @@ class VISP_EXPORT vpPanda3DBaseRenderer const static vpHomogeneousMatrix VISP_T_PANDA; //! Homogeneous transformation matrix to convert from the Panda coordinate system (right-handed Z-up) to the ViSP coordinate system (right-handed Y-Down) const static vpHomogeneousMatrix PANDA_T_VISP; //! Inverse of VISP_T_PANDA + static PandaFramework framework; //! Panda Rendering framework + static bool frameworkIsOpen; protected: std::string m_name; //! name of the renderer int m_renderOrder; //! Rendering priority for this renderer and its buffers. A lower value will be rendered first. Should be used when calling make_output in setupRenderTarget() - std::shared_ptr m_framework; //! Pointer to the active panda framework PointerTo m_window; //! Pointer to owning window, which can create buffers etc. It is not necessarily visible. vpPanda3DRenderParameters m_renderParameters; //! Rendering parameters NodePath m_renderRoot; //! Node containing all the objects and the camera for this renderer PointerTo m_camera; NodePath m_cameraPath; //! NodePath of the camera std::vector m_buffers; //! Set of buffers that this renderer uses. This storage contains weak refs to those buffers and should not deallocate them. + bool m_isWindowOwner; // Whether this panda subrenderer is the "owner" of the window framework and should close all associated windows when getting destroyed }; END_VISP_NAMESPACE diff --git a/modules/ar/include/visp3/ar/vpPanda3DRendererSet.h b/modules/ar/include/visp3/ar/vpPanda3DRendererSet.h index d64ad49424..4a3f142acf 100644 --- a/modules/ar/include/visp3/ar/vpPanda3DRendererSet.h +++ b/modules/ar/include/visp3/ar/vpPanda3DRendererSet.h @@ -79,7 +79,7 @@ class VISP_EXPORT vpPanda3DRendererSet : public vpPanda3DBaseRenderer, public vp * Thus, if a renderer B depends on A for its render, and if B.getRenderOrder() > A.getRenderOrder() it can rely on A being initialized when B.initFromParent is called (along with the setupCamera, setupRenderTarget). */ void initFramework() VP_OVERRIDE; - void initFromParent(std::shared_ptr framework, PointerTo window) VP_OVERRIDE; + void initFromParent(PointerTo window) VP_OVERRIDE; void initFromParent(const vpPanda3DBaseRenderer &renderer) VP_OVERRIDE; /** diff --git a/modules/ar/src/panda3d-simulator/vpPanda3DBaseRenderer.cpp b/modules/ar/src/panda3d-simulator/vpPanda3DBaseRenderer.cpp index 734a00b6b9..75ae0cce59 100644 --- a/modules/ar/src/panda3d-simulator/vpPanda3DBaseRenderer.cpp +++ b/modules/ar/src/panda3d-simulator/vpPanda3DBaseRenderer.cpp @@ -48,22 +48,29 @@ const vpHomogeneousMatrix vpPanda3DBaseRenderer::VISP_T_PANDA({ }); const vpHomogeneousMatrix vpPanda3DBaseRenderer::PANDA_T_VISP(vpPanda3DBaseRenderer::VISP_T_PANDA.inverse()); + +PandaFramework vpPanda3DBaseRenderer::framework; +bool vpPanda3DBaseRenderer::frameworkIsOpen(false); + + void vpPanda3DBaseRenderer::initFramework() { - if (m_framework.use_count() > 0) { - throw vpException(vpException::notImplementedError, - "Panda3D renderer: Reinitializing is not supported!"); + + if (!frameworkIsOpen) { + frameworkIsOpen = true; + framework.open_framework(); } - m_framework = std::shared_ptr(new PandaFramework()); - m_framework->open_framework(); + + m_isWindowOwner = true; + WindowProperties winProps; winProps.set_size(LVecBase2i(m_renderParameters.getImageWidth(), m_renderParameters.getImageHeight())); int flags = GraphicsPipe::BF_refuse_window; - m_window = m_framework->open_window(winProps, flags); + m_window = framework.open_window(winProps, flags); // try and reopen with visible window if (m_window == nullptr) { winProps.set_minimized(true); - m_window = m_framework->open_window(winProps, 0); + m_window = framework.open_window(winProps, 0); } if (m_window == nullptr) { throw vpException(vpException::notInitialized, @@ -76,9 +83,9 @@ void vpPanda3DBaseRenderer::initFramework() //m_window->get_display_region_3d()->set_camera(m_cameraPath); } -void vpPanda3DBaseRenderer::initFromParent(std::shared_ptr framework, PointerTo window) +void vpPanda3DBaseRenderer::initFromParent(PointerTo window) { - m_framework = framework; + m_isWindowOwner = false; m_window = window; setupScene(); setupCamera(); @@ -87,7 +94,8 @@ void vpPanda3DBaseRenderer::initFromParent(std::shared_ptr frame void vpPanda3DBaseRenderer::initFromParent(const vpPanda3DBaseRenderer &renderer) { - initFromParent(renderer.m_framework, renderer.m_window); + m_isWindowOwner = false; + initFromParent(renderer.m_window); } void vpPanda3DBaseRenderer::setupScene() @@ -109,7 +117,18 @@ void vpPanda3DBaseRenderer::setupCamera() void vpPanda3DBaseRenderer::renderFrame() { beforeFrameRendered(); - m_framework->get_graphics_engine()->render_frame(); + // Disable rendering for all the other renderers + for (int i = 0; i < framework.get_num_windows(); ++i) { + WindowFramework *fi = framework.get_window(i); + if (fi != m_window) { + fi->get_graphics_output()->get_gsg()->set_active(false); + } + } + m_window->get_graphics_output()->get_engine()->render_frame(); + for (int i = 0; i < framework.get_num_windows(); ++i) { + WindowFramework *fi = framework.get_window(i); + fi->get_graphics_output()->get_gsg()->set_active(true); + } afterFrameRendered(); } @@ -273,7 +292,7 @@ void vpPanda3DBaseRenderer::enableSharedDepthBuffer(vpPanda3DBaseRenderer &sourc NodePath vpPanda3DBaseRenderer::loadObject(const std::string &nodeName, const std::string &modelPath) { - NodePath model = m_window->load_model(m_framework->get_models(), modelPath); + NodePath model = m_window->load_model(framework.get_models(), modelPath); for (int i = 0; i < model.get_num_children(); ++i) { model.get_child(i).clear_transform(); } diff --git a/modules/ar/src/panda3d-simulator/vpPanda3DRendererSet.cpp b/modules/ar/src/panda3d-simulator/vpPanda3DRendererSet.cpp index e50d7293e7..e3c07389e9 100644 --- a/modules/ar/src/panda3d-simulator/vpPanda3DRendererSet.cpp +++ b/modules/ar/src/panda3d-simulator/vpPanda3DRendererSet.cpp @@ -52,19 +52,20 @@ vpPanda3DRendererSet::vpPanda3DRendererSet(const vpPanda3DRenderParameters &rend void vpPanda3DRendererSet::initFramework() { - if (m_framework.use_count() > 0) { - throw vpException(vpException::notImplementedError, "Panda3D renderer: Reinitializing is not supported!"); + + if (!frameworkIsOpen) { + frameworkIsOpen = true; + framework.open_framework(); } - m_framework = std::shared_ptr(new PandaFramework()); + m_isWindowOwner = true; - m_framework->open_framework(); WindowProperties winProps; winProps.set_size(LVecBase2i(m_renderParameters.getImageWidth(), m_renderParameters.getImageHeight())); int flags = GraphicsPipe::BF_refuse_window; - m_window = m_framework->open_window(winProps, flags); + m_window = framework.open_window(winProps, flags); if (m_window == nullptr) { winProps.set_minimized(true); - m_window = m_framework->open_window(winProps, 0); + m_window = framework.open_window(winProps, 0); } if (m_window == nullptr) { throw vpException(vpException::fatalError, "Could not open Panda3D window (hidden or visible)"); @@ -72,15 +73,15 @@ void vpPanda3DRendererSet::initFramework() m_window->set_background_type(WindowFramework::BackgroundType::BT_black); for (std::shared_ptr &renderer: m_subRenderers) { - renderer->initFromParent(m_framework, m_window); + renderer->initFromParent(*this); } } -void vpPanda3DRendererSet::initFromParent(std::shared_ptr framework, PointerTo window) +void vpPanda3DRendererSet::initFromParent(PointerTo window) { - vpPanda3DBaseRenderer::initFromParent(framework, window); + vpPanda3DBaseRenderer::initFromParent(window); for (std::shared_ptr &renderer: m_subRenderers) { - renderer->initFromParent(m_framework, m_window); + renderer->initFromParent(m_window); } } @@ -184,12 +185,12 @@ void vpPanda3DRendererSet::addSubRenderer(std::shared_ptr ++it; } m_subRenderers.insert(it, renderer); - renderer->setRenderParameters(m_renderParameters); - if (m_framework != nullptr) { - renderer->initFromParent(m_framework, m_window); + if (m_window != nullptr) { + renderer->initFromParent(m_window); renderer->setCameraPose(getCameraPose()); } + } void vpPanda3DRendererSet::enableSharedDepthBuffer(vpPanda3DBaseRenderer &sourceBuffer) diff --git a/modules/ar/test/catchPanda.cpp b/modules/ar/test/catchPanda.cpp new file mode 100644 index 0000000000..697b25b103 --- /dev/null +++ b/modules/ar/test/catchPanda.cpp @@ -0,0 +1,93 @@ +/* + * ViSP, open source Visual Servoing Platform software. + * Copyright (C) 2005 - 2024 by Inria. All rights reserved. + * + * This software is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * See the file LICENSE.txt at the root directory of this source + * distribution for additional information about the GNU GPL. + * + * For using ViSP with software that can not be combined with the GNU + * GPL, please contact Inria about acquiring a ViSP Professional + * Edition License. + * + * See https://visp.inria.fr for more information. + * + * This software was developed at: + * Inria Rennes - Bretagne Atlantique + * Campus Universitaire de Beaulieu + * 35042 Rennes Cedex + * France + * + * If you have questions regarding the use of this file, please contact + * Inria at visp@inria.fr + * + * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE + * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + * + * Description: + * Test vpCameraParameters JSON parse / save. + */ + +/*! + \example catchJsonCamera.cpp + + Test saving and parsing JSON configuration for vpCameraParameters. +*/ + +#include +#include + +#if defined(VISP_HAVE_PANDA3D) && defined(VISP_HAVE_CATCH2) +#include +#include +#include +#include +#include + +#ifdef ENABLE_VISP_NAMESPACE +using namespace VISP_NAMESPACE_NAME; +#endif + +#include + + +vpPanda3DRenderParameters defaultRenderParams() +{ + vpCameraParameters cam(600, 600, 160, 120); + return vpPanda3DRenderParameters(cam, 240, 320, 0.001, 1.0); +} + +SCENARIO("Instanciating multiple Panda3D renderers", "[Panda3D]") +{ + GIVEN("A single renderer") + { + vpPanda3DGeometryRenderer r1(vpPanda3DGeometryRenderer::CAMERA_NORMALS); + r1.setRenderParameters(defaultRenderParams()); + r1.initFramework(); + + THEN("Creating another, uncoupled renderer is ok and its destruction does not raise an error") + { + vpPanda3DGeometryRenderer r2(vpPanda3DGeometryRenderer::CAMERA_NORMALS); + r2.setRenderParameters(defaultRenderParams()); + r2.initFramework(); + } + } +} + +int main(int argc, char *argv[]) +{ + Catch::Session session; // There must be exactly one instance + session.applyCommandLine(argc, argv); + + int numFailed = session.run(); + return numFailed; +} + +#else + +int main() { return EXIT_SUCCESS; } + +#endif diff --git a/modules/core/CMakeLists.txt b/modules/core/CMakeLists.txt index 3b2063d25d..7da5ead8cb 100644 --- a/modules/core/CMakeLists.txt +++ b/modules/core/CMakeLists.txt @@ -76,7 +76,7 @@ if(USE_OPENCV) set(OpenCV_REQUIRED_LIB_COMPONENTS ${OpenCV_LIB_COMPONENTS}) vp_list_filterout(OpenCV_REQUIRED_LIB_COMPONENTS "opencv_*") # We import only required OpenCV libraries - list(APPEND OpenCV_REQUIRED_LIB_COMPONENTS "opencv_core" "opencv_imgproc" "opencv_highgui" "opencv_calib3d" "opencv_features2d") + list(APPEND OpenCV_REQUIRED_LIB_COMPONENTS "opencv_core" "opencv_imgproc" "opencv_highgui" "opencv_calib3d" "opencv_features2d" "opencv_calib" "opencv_3d" ) if(OpenCV_VERSION AND OpenCV_VERSION VERSION_LESS 2.4.8) list(APPEND OpenCV_REQUIRED_LIB_COMPONENTS "opencv_legacy") endif() @@ -240,8 +240,8 @@ endif() # Misc: xml, pthread, zlib if(USE_XML2) - list(APPEND opt_incs ${XML2_INCLUDE_DIRS}) - list(APPEND opt_libs ${XML2_LIBRARIES}) + include_directories(${XML2_INCLUDE_DIRS}) + list(APPEND opt_libs_private ${XML2_LIBRARIES}) endif() if(USE_THREADS) diff --git a/modules/core/include/visp3/core/vpConvert.h b/modules/core/include/visp3/core/vpConvert.h index eb012e5759..0bf0b04db4 100644 --- a/modules/core/include/visp3/core/vpConvert.h +++ b/modules/core/include/visp3/core/vpConvert.h @@ -36,13 +36,18 @@ \brief Tools for type or general conversion. */ -#ifndef _vpConvert_h_ -#define _vpConvert_h_ +#ifndef VP_CONVERT_H +#define VP_CONVERT_H #include -#if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_FEATURES2D) +#if defined(VISP_HAVE_OPENCV) && (defined(HAVE_OPENCV_FEATURES2D) || defined(HAVE_OPENCV_FEATURES)) + +#if defined(HAVE_OPENCV_FEATURES2D) #include +#elif defined(HAVE_OPENCV_FEATURES) +#include +#endif #include #include diff --git a/modules/core/include/visp3/core/vpImageConvert.h b/modules/core/include/visp3/core/vpImageConvert.h index e2cbf19f1a..30131a2bbd 100644 --- a/modules/core/include/visp3/core/vpImageConvert.h +++ b/modules/core/include/visp3/core/vpImageConvert.h @@ -49,8 +49,10 @@ #if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) #include +#if (VISP_HAVE_OPENCV_VERSION < 0x050000) #include #endif +#endif #ifdef VISP_HAVE_YARP #include diff --git a/modules/core/include/visp3/core/vpImageFilter.h b/modules/core/include/visp3/core/vpImageFilter.h index 6fd6bdad8c..01616fb11b 100644 --- a/modules/core/include/visp3/core/vpImageFilter.h +++ b/modules/core/include/visp3/core/vpImageFilter.h @@ -56,8 +56,10 @@ #if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) #include +#if (VISP_HAVE_OPENCV_VERSION < 0x050000) #include #endif +#endif BEGIN_VISP_NAMESPACE /*! diff --git a/modules/core/include/visp3/core/vpMeterPixelConversion.h b/modules/core/include/visp3/core/vpMeterPixelConversion.h index eeee75f8d4..70c2f07f0a 100644 --- a/modules/core/include/visp3/core/vpMeterPixelConversion.h +++ b/modules/core/include/visp3/core/vpMeterPixelConversion.h @@ -46,8 +46,8 @@ #include #include -#if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_CALIB3D) -#include +#if defined(VISP_HAVE_OPENCV) +#include #endif BEGIN_VISP_NAMESPACE @@ -343,7 +343,7 @@ class VISP_EXPORT vpMeterPixelConversion #endif // #ifndef DOXYGEN_SHOULD_SKIP_THIS //@} -#if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_CALIB3D) +#if (((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_CALIB3D)) || ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_CALIB) && defined(HAVE_OPENCV_3D))) /** @name Using OpenCV camera parameters */ //@{ static void convertEllipse(const cv::Mat &cameraMatrix, const vpCircle &circle, vpImagePoint ¢er, double &n20_p, diff --git a/modules/core/include/visp3/core/vpPixelMeterConversion.h b/modules/core/include/visp3/core/vpPixelMeterConversion.h index ee06703cf0..6b4c0b1844 100644 --- a/modules/core/include/visp3/core/vpPixelMeterConversion.h +++ b/modules/core/include/visp3/core/vpPixelMeterConversion.h @@ -44,9 +44,8 @@ #include #include -#if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_CALIB3D) && defined(HAVE_OPENCV_IMGPROC) -#include -#include +#if defined(VISP_HAVE_OPENCV) +#include #endif BEGIN_VISP_NAMESPACE @@ -398,7 +397,9 @@ class VISP_EXPORT vpPixelMeterConversion #endif // #ifndef DOXYGEN_SHOULD_SKIP_THIS //@} -#if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_CALIB3D) && defined(HAVE_OPENCV_IMGPROC) +#if defined(HAVE_OPENCV_IMGPROC) && \ + (((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_CALIB3D)) || ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_CALIB) && defined(HAVE_OPENCV_3D))) + /** @name Using OpenCV camera parameters */ //@{ static void convertEllipse(const cv::Mat &cameraMatrix, const cv::Mat &distCoeffs, const vpImagePoint ¢er_p, diff --git a/modules/core/include/visp3/core/vpXmlParser.h b/modules/core/include/visp3/core/vpXmlParser.h index adce5cad4f..a346013ab3 100644 --- a/modules/core/include/visp3/core/vpXmlParser.h +++ b/modules/core/include/visp3/core/vpXmlParser.h @@ -1,6 +1,6 @@ /* * ViSP, open source Visual Servoing Platform software. - * Copyright (C) 2005 - 2023 by Inria. All rights reserved. + * Copyright (C) 2005 - 2024 by Inria. All rights reserved. * * This software is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -36,8 +36,8 @@ \brief Tools to simplify the creation of xml parser based on the libXML2 */ -#ifndef vpXmlParser_HH -#define vpXmlParser_HH +#ifndef VP_XML_PARSER_H +#define VP_XML_PARSER_H #include @@ -45,8 +45,6 @@ #include -#include - #include #include #include @@ -54,6 +52,14 @@ #include #include +struct _xmlDoc; +typedef _xmlDoc xmlDoc; +typedef xmlDoc *xmlDocPtr; + +struct _xmlNode; +typedef _xmlNode xmlNode; +typedef xmlNode *xmlNodePtr; + BEGIN_VISP_NAMESPACE /*! \class vpXmlParser @@ -93,6 +99,8 @@ BEGIN_VISP_NAMESPACE A class to parse this document is declared as follows: \code + #include + class vpDataParser: public vpXmlParser { private: @@ -105,7 +113,7 @@ BEGIN_VISP_NAMESPACE range, step, size_filter - }dataToParse + } dataToParse vpDataParser(){ nodeMap["config"] = config; @@ -117,8 +125,7 @@ BEGIN_VISP_NAMESPACE virtual void writeMainClass(xmlNodePtr node); virtual void readMainClass(xmlDocPtr doc, xmlNodePtr node); - // additionals methods specific to the data to parse - // such as: accessors + // additional methods specific to the data to parse such as: accessors } \endcode @@ -184,7 +191,7 @@ class VISP_EXPORT vpXmlParser As the content of the function depends on the structure of the file to read, data name, data types and data values, it has to be reimplemented - for every type of filenam + for every type of filename. \param doc : a pointer representing the document \param node : the root node of the document @@ -264,7 +271,7 @@ class VISP_EXPORT vpXmlParser dataToParse["size_filter"] = 3; \endcode - Or, you can use keyzord instead of number as key but it implies to declare + Or, you can use keyword instead of number as key but it implies to declare in the child class an enumeration type of the name. For example: \code @@ -307,7 +314,7 @@ class VISP_EXPORT vpXmlParser static function vpXmlParser::cleanup() that calls xmlCleanupParser() that could be called just before exit(). */ - static void cleanup() { xmlCleanupParser(); } + static void cleanup(); //@} }; END_VISP_NAMESPACE diff --git a/modules/core/src/camera/vpMeterPixelConversion.cpp b/modules/core/src/camera/vpMeterPixelConversion.cpp index 520daf3586..cee3d50a67 100644 --- a/modules/core/src/camera/vpMeterPixelConversion.cpp +++ b/modules/core/src/camera/vpMeterPixelConversion.cpp @@ -42,6 +42,14 @@ #include #include +#if (VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_CALIB3D) +#include +#endif +#if (VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_CALIB) && defined(HAVE_OPENCV_3D) +#include +#include +#endif + BEGIN_VISP_NAMESPACE /*! Line parameters conversion from normalized coordinates \f$(\rho_m,\theta_m)\f$ expressed in the image plane @@ -194,7 +202,7 @@ void vpMeterPixelConversion::convertEllipse(const vpCameraParameters &cam, doubl n02_p = n02_m * vpMath::sqr(cam.get_py()); } -#if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_CALIB3D) +#if (((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_CALIB3D)) || ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_CALIB) && defined(HAVE_OPENCV_3D))) /*! Line parameters conversion from normalized coordinates \f$(\rho_m,\theta_m)\f$ expressed in the image plane to pixel coordinates \f$(\rho_p,\theta_p)\f$ using OpenCV camera parameters. This function doesn't use distortion diff --git a/modules/core/src/camera/vpPixelMeterConversion.cpp b/modules/core/src/camera/vpPixelMeterConversion.cpp index 62e254f2cc..2f04a503dc 100644 --- a/modules/core/src/camera/vpPixelMeterConversion.cpp +++ b/modules/core/src/camera/vpPixelMeterConversion.cpp @@ -29,8 +29,7 @@ * * Description: * Pixel to meter conversion. - * -*****************************************************************************/ + */ /*! \file vpPixelMeterConversion.cpp @@ -41,6 +40,21 @@ #include #include +#if defined(HAVE_OPENCV_IMGPROC) && \ + (((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_CALIB3D)) || ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_CALIB) && defined(HAVE_OPENCV_3D))) + +#if (VISP_HAVE_OPENCV_VERSION < 0x050000) +#include +#endif + +#if (VISP_HAVE_OPENCV_VERSION >= 0x050000) +#include +#include +#endif + +#include +#endif + BEGIN_VISP_NAMESPACE /*! * Convert ellipse parameters (ie ellipse center and normalized centered moments) @@ -132,7 +146,7 @@ void vpPixelMeterConversion::convertMoment(const vpCameraParameters &cam, unsign double yc = -cam.m_v0; double xc = -cam.m_u0; - for (unsigned int k = 0; k < order; ++k) { // iteration correspondant e l'ordre du moment + for (unsigned int k = 0; k < order; ++k) { // iteration corresponding to moment order for (unsigned int p = 0; p < order; ++p) { // iteration en X for (unsigned int q = 0; q < order; ++q) { // iteration en Y if ((p + q) == k) { // on est bien dans la matrice triangulaire superieure @@ -148,7 +162,7 @@ void vpPixelMeterConversion::convertMoment(const vpCameraParameters &cam, unsign } } - for (unsigned int k = 0; k < order; ++k) { // iteration correspondant e l'ordre du moment + for (unsigned int k = 0; k < order; ++k) { // iteration corresponding to moment order for (unsigned int p = 0; p < order; ++p) { for (unsigned int q = 0; q < order; ++q) { if ((p + q) == k) { @@ -158,7 +172,7 @@ void vpPixelMeterConversion::convertMoment(const vpCameraParameters &cam, unsign } } - for (unsigned int k = 0; k < order; ++k) { // iteration correspondant e l'ordre du moment + for (unsigned int k = 0; k < order; ++k) { // iteration corresponding to moment order for (unsigned int p = 0; p < order; ++p) { for (unsigned int q = 0; q < order; ++q) { if ((p + q) == k) { @@ -169,7 +183,8 @@ void vpPixelMeterConversion::convertMoment(const vpCameraParameters &cam, unsign } } -#if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_CALIB3D) && defined(HAVE_OPENCV_IMGPROC) +#if defined(HAVE_OPENCV_IMGPROC) && \ + (((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_CALIB3D)) || ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_CALIB) && defined(HAVE_OPENCV_3D))) /*! * Convert ellipse parameters (ie ellipse center and normalized centered moments) * from pixels \f$(u_c, v_c, n_{{20}_p}, n_{{11}_p}, n_{{02}_p})\f$ @@ -246,7 +261,7 @@ void vpPixelMeterConversion::convertMoment(const cv::Mat &cameraMatrix, unsigned double yc = -v0; double xc = -u0; - for (unsigned int k = 0; k < order; ++k) { // iteration correspondant e l'ordre du moment + for (unsigned int k = 0; k < order; ++k) { // iteration corresponding to moment order for (unsigned int p = 0; p < order; ++p) { // iteration en X for (unsigned int q = 0; q < order; ++q) { // iteration en Y if (p + q == k) { // on est bien dans la matrice triangulaire superieure @@ -262,7 +277,7 @@ void vpPixelMeterConversion::convertMoment(const cv::Mat &cameraMatrix, unsigned } } - for (unsigned int k = 0; k < order; ++k) { // iteration correspondant e l'ordre du moment + for (unsigned int k = 0; k < order; ++k) { // iteration corresponding to moment order for (unsigned int p = 0; p < order; ++p) { for (unsigned int q = 0; q < order; ++q) { if (p + q == k) { @@ -272,7 +287,7 @@ void vpPixelMeterConversion::convertMoment(const cv::Mat &cameraMatrix, unsigned } } - for (unsigned int k = 0; k < order; ++k) { // iteration correspondant e l'ordre du moment + for (unsigned int k = 0; k < order; ++k) { // iteration corresponding to moment order for (unsigned int p = 0; p < order; ++p) { for (unsigned int q = 0; q < order; ++q) { if (p + q == k) { diff --git a/modules/core/src/tools/convert/vpConvert.cpp b/modules/core/src/tools/convert/vpConvert.cpp index 3b1ce481b9..6d54183d28 100644 --- a/modules/core/src/tools/convert/vpConvert.cpp +++ b/modules/core/src/tools/convert/vpConvert.cpp @@ -38,12 +38,15 @@ \brief Tools for type or general conversion. */ +#include + +#if defined(VISP_HAVE_OPENCV) && (defined(HAVE_OPENCV_FEATURES2D) || defined(HAVE_OPENCV_FEATURES)) + #include // std::transform #include // std::vector #include -#if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_FEATURES2D) BEGIN_VISP_NAMESPACE /*! Unary function used to transform a cv::KeyPoint to a vpImagePoint. @@ -52,7 +55,7 @@ BEGIN_VISP_NAMESPACE \return A vpImagePoint with the 2D coordinates corresponding to the location of the KeyPoint. */ -vpImagePoint vpConvert::keyPointToVpImagePoint(const cv::KeyPoint &keypoint) + vpImagePoint vpConvert::keyPointToVpImagePoint(const cv::KeyPoint &keypoint) { return vpImagePoint(keypoint.pt.y, keypoint.pt.x); } diff --git a/modules/core/src/tools/xml/vpXmlParser.cpp b/modules/core/src/tools/xml/vpXmlParser.cpp index 140b5f83fe..d75a23eed1 100644 --- a/modules/core/src/tools/xml/vpXmlParser.cpp +++ b/modules/core/src/tools/xml/vpXmlParser.cpp @@ -1,7 +1,7 @@ /**************************************************************************** * * ViSP, open source Visual Servoing Platform software. - * Copyright (C) 2005 - 2023 by Inria. All rights reserved. + * Copyright (C) 2005 - 2024 by Inria. All rights reserved. * * This software is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -30,15 +30,15 @@ * * Description: * Tool to automatize the creation of xml parser based on the libXML2. - * -*****************************************************************************/ + */ #include -#include #ifdef VISP_HAVE_XML2 #include + +#include #include #include @@ -482,6 +482,12 @@ void vpXmlParser::save(const std::string &filename, bool append) xmlSaveFormatFile(filename.c_str(), doc, 1); xmlFreeDoc(doc); } + +void vpXmlParser::cleanup() +{ + xmlCleanupParser(); +} + END_VISP_NAMESPACE #elif !defined(VISP_BUILD_SHARED_LIBS) // Work around to avoid warning: libvisp_core.a(vpXmlParser.cpp.o) has no symbols diff --git a/modules/core/test/camera/testCameraParametersConversion.cpp b/modules/core/test/camera/testCameraParametersConversion.cpp index a60814cbda..9a64871c52 100644 --- a/modules/core/test/camera/testCameraParametersConversion.cpp +++ b/modules/core/test/camera/testCameraParametersConversion.cpp @@ -119,7 +119,9 @@ int main() return EXIT_FAILURE; } -#if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_CALIB3D) && defined(HAVE_OPENCV_IMGPROC) +#if defined(HAVE_OPENCV_IMGPROC) && \ + (((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_CALIB3D)) || ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_CALIB))) + { std::cout << "* Compare ViSP and OpenCV point pixel meter conversion without distortion" << std::endl; cv::Mat cameraMatrix = (cv::Mat_(3, 3) << px, 0, u0, 0, py, v0, 0, 0, 1); diff --git a/modules/core/test/math/catchMatrixCholesky.cpp b/modules/core/test/math/catchMatrixCholesky.cpp index 391ca816ba..373d325c67 100644 --- a/modules/core/test/math/catchMatrixCholesky.cpp +++ b/modules/core/test/math/catchMatrixCholesky.cpp @@ -142,9 +142,9 @@ TEST_CASE("3 x 3 input", "[cholesky]") } #endif -// There is a bug with OpenCV 3.1.0 +// There is a bug with OpenCV 2.4.9 and OpenCV 3.1.0 // See https://answers.opencv.org/question/99704/cholesky-function-in-opencv/ -#if defined(VISP_HAVE_OPENCV) && (VISP_HAVE_OPENCV_VERSION != 0x030100) +#if defined(VISP_HAVE_OPENCV) && (VISP_HAVE_OPENCV_VERSION != 0x020409) && (VISP_HAVE_OPENCV_VERSION != 0x030100) SECTION("OPENCV") { vpMatrix L = M.choleskyByOpenCV(); @@ -183,9 +183,9 @@ TEST_CASE("4 x 4 input", "[cholesky]") } #endif -// There is a bug with OpenCV 3.1.0 +// There is a bug with OpenCV 2.4.9 and OpenCV 3.1.0 // See https://answers.opencv.org/question/99704/cholesky-function-in-opencv/ -#if defined(VISP_HAVE_OPENCV) && (VISP_HAVE_OPENCV_VERSION != 0x030100) +#if defined(VISP_HAVE_OPENCV) && (VISP_HAVE_OPENCV_VERSION != 0x020409) && (VISP_HAVE_OPENCV_VERSION != 0x030100) SECTION("OPENCV") { vpMatrix L = M.choleskyByOpenCV(); diff --git a/modules/core/test/tools/serial/testSerialRead.cpp b/modules/core/test/tools/serial/testSerialRead.cpp index 8054ddb8a5..a78a8fce68 100644 --- a/modules/core/test/tools/serial/testSerialRead.cpp +++ b/modules/core/test/tools/serial/testSerialRead.cpp @@ -51,14 +51,18 @@ int main(int argc, char **argv) std::string port; unsigned long baud = 9600; - for (int i = 0; i < argc; i++) { - if (std::string(argv[i]) == "--port") - port = std::string(argv[i + 1]); - else if (std::string(argv[i]) == "--baud") { - baud = (unsigned long)atol(argv[i + 1]); + for (int i = 1; i < argc; i++) { + if (std::string(argv[i]) == "--port" && i + 1 < argc) { + port = std::string(argv[++i]); } - else if (std::string(argv[i]) == "--help") { - std::cout << "\nUsage: " << argv[0] << " [--port ] [--baud ] [--help]\n" << std::endl; + else if (std::string(argv[i]) == "--baud" && i + 1 < argc) { + baud = (unsigned long)atol(argv[++i]); + } + else if (std::string(argv[i]) == "--help" || std::string(argv[i]) == "-h") { + std::cout << "\nUsage: " << argv[0] + << " [--port ]" + << " [--baud ]" + << " [--help,-h]\n" << std::endl; return EXIT_SUCCESS; } } diff --git a/modules/core/test/tools/serial/testSerialWrite.cpp b/modules/core/test/tools/serial/testSerialWrite.cpp index 92ab7d0118..db036b4bb4 100644 --- a/modules/core/test/tools/serial/testSerialWrite.cpp +++ b/modules/core/test/tools/serial/testSerialWrite.cpp @@ -49,11 +49,12 @@ int main(int argc, char **argv) std::string port; unsigned long baud = 9600; - for (int i = 0; i < argc; i++) { - if (std::string(argv[i]) == "--port") - port = std::string(argv[i + 1]); - else if (std::string(argv[i]) == "--baud") { - baud = (unsigned long)atol(argv[i + 1]); + for (int i = 1; i < argc; i++) { + if (std::string(argv[i]) == "--port" && i + 1 < argc) { + port = std::string(argv[++i]); + } + else if (std::string(argv[i]) == "--baud" && i + 1 < argc) { + baud = (unsigned long)atol(argv[++i]); } else if (std::string(argv[i]) == "--help") { std::cout << "\nUsage: " << argv[0] << " [--port ] [--baud ] [--help]\n" << std::endl; diff --git a/modules/core/test/tools/xml/testXmlParser.cpp b/modules/core/test/tools/xml/testXmlParser.cpp index 98c41d3905..96192c96f6 100644 --- a/modules/core/test/tools/xml/testXmlParser.cpp +++ b/modules/core/test/tools/xml/testXmlParser.cpp @@ -58,6 +58,8 @@ #include #include +#include + #include #ifndef DOXYGEN_SHOULD_SKIP_THIS diff --git a/modules/detection/CMakeLists.txt b/modules/detection/CMakeLists.txt index 8e289ebd9f..f3287bebb8 100644 --- a/modules/detection/CMakeLists.txt +++ b/modules/detection/CMakeLists.txt @@ -101,7 +101,9 @@ if(USE_OPENCV) if(OpenCV_VERSION AND ((OpenCV_VERSION VERSION_EQUAL 3.4.3) OR (OpenCV_VERSION VERSION_GREATER 3.4.3))) list(APPEND OpenCV_REQUIRED_LIB_COMPONENTS "opencv_dnn") endif() - + if(OpenCV_VERSION AND ((OpenCV_VERSION GREATER_EQUAL 5.0.0))) + list(APPEND OpenCV_REQUIRED_LIB_COMPONENTS "opencv_xobjdetect") + endif() if(USE_TENSORRT) list(APPEND OpenCV_REQUIRED_LIB_COMPONENTS "opencv_cudaarithm" "opencv_cudawarping") endif() diff --git a/modules/detection/include/visp3/detection/vpDetectorFace.h b/modules/detection/include/visp3/detection/vpDetectorFace.h index 46e3e8c3fe..7eec8a0e56 100644 --- a/modules/detection/include/visp3/detection/vpDetectorFace.h +++ b/modules/detection/include/visp3/detection/vpDetectorFace.h @@ -1,6 +1,6 @@ /* * ViSP, open source Visual Servoing Platform software. - * Copyright (C) 2005 - 2023 by Inria. All rights reserved. + * Copyright (C) 2005 - 2024 by Inria. All rights reserved. * * This software is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -31,18 +31,23 @@ * Detect faces. */ -#ifndef _vpDetectorFace_h_ -#define _vpDetectorFace_h_ +#ifndef VP_DETECTOR_FACE_H +#define VP_DETECTOR_FACE_H #include -#if defined(HAVE_OPENCV_OBJDETECT) +#if ((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_OBJDETECT)) || ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_XOBJDETECT)) #include // needed by (std::min) in opencv2/objdetect/objdetect.hpp #include #include + +#if (VISP_HAVE_OPENCV_VERSION < 0x050000) #include +#elif (VISP_HAVE_OPENCV_VERSION >= 0x050000) +#include +#endif #include diff --git a/modules/detection/src/face/vpDetectorFace.cpp b/modules/detection/src/face/vpDetectorFace.cpp index 1cccd1f4a1..eff49d45bb 100644 --- a/modules/detection/src/face/vpDetectorFace.cpp +++ b/modules/detection/src/face/vpDetectorFace.cpp @@ -1,7 +1,6 @@ -/**************************************************************************** - * +/* * ViSP, open source Visual Servoing Platform software. - * Copyright (C) 2005 - 2023 by Inria. All rights reserved. + * Copyright (C) 2005 - 2024 by Inria. All rights reserved. * * This software is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -30,11 +29,10 @@ * * Description: * Detect faces. - * -*****************************************************************************/ + */ #include -#if defined(HAVE_OPENCV_OBJDETECT) +#if ((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_OBJDETECT)) || ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_XOBJDETECT)) #include @@ -47,14 +45,14 @@ BEGIN_VISP_NAMESPACE /*! Default constructor. */ -vpDetectorFace::vpDetectorFace() : m_faces(), m_face_cascade(), m_frame_gray() { } - -/*! - Set the name of the OpenCV cascade classifier file used for face detection. - \param filename : Full path to access to the file. Such a file can be found - in OpenCV. Within the last versions it was name - "haarcascade_frontalface_alt.xml". - */ + vpDetectorFace::vpDetectorFace() : m_faces(), m_face_cascade(), m_frame_gray() { } + + /*! + Set the name of the OpenCV cascade classifier file used for face detection. + \param filename : Full path to access to the file. Such a file can be found + in OpenCV. Within the last versions it was name + "haarcascade_frontalface_alt.xml". + */ void vpDetectorFace::setCascadeClassifierFile(const std::string &filename) { if (!m_face_cascade.load(filename)) { diff --git a/modules/gui/src/display/vpDisplayOpenCV.cpp b/modules/gui/src/display/vpDisplayOpenCV.cpp index cfbe2b170a..cbe89ab15e 100644 --- a/modules/gui/src/display/vpDisplayOpenCV.cpp +++ b/modules/gui/src/display/vpDisplayOpenCV.cpp @@ -58,8 +58,9 @@ #include #include +#if (VISP_HAVE_OPENCV_VERSION < 0x050000) #include // for CV_FILLED versus cv::FILLED - +#endif #if defined(HAVE_OPENCV_IMGPROC) #include #endif diff --git a/modules/gui/test/display-with-dataset/testDisplayScaled.cpp b/modules/gui/test/display-with-dataset/testDisplayScaled.cpp index 8fb37971ac..9a77cef7da 100644 --- a/modules/gui/test/display-with-dataset/testDisplayScaled.cpp +++ b/modules/gui/test/display-with-dataset/testDisplayScaled.cpp @@ -279,13 +279,16 @@ int main(int argc, const char *argv[]) std::string env_ipath; std::string ipath; - for (int i = 0; i < argc; i++) { - if (std::string(argv[i]) == "-c") + for (int i = 1; i < argc; i++) { + if (std::string(argv[i]) == "-c") { opt_click = false; - else if (std::string(argv[i]) == "-d") + } + else if (std::string(argv[i]) == "-d") { opt_display = false; - else if (std::string(argv[i]) == "-i") - opt_ipath = std::string(argv[i + 1]); + } + else if (std::string(argv[i]) == "-i" && i + 1 < argc) { + opt_ipath = std::string(argv[++i]); + } else if (std::string(argv[i]) == "--help" || std::string(argv[i]) == "-h") { std::cout << "\nUsage: " << argv[0] << " [-i ] [-c] [-d] [--help]\n" << std::endl; std::cout << "\nOptions: " << std::endl; diff --git a/modules/io/include/visp3/io/vpVideoReader.h b/modules/io/include/visp3/io/vpVideoReader.h index 1e2a9ebb3a..67a1b79daf 100644 --- a/modules/io/include/visp3/io/vpVideoReader.h +++ b/modules/io/include/visp3/io/vpVideoReader.h @@ -41,11 +41,13 @@ #include +#include #include -#if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_VIDEOIO) && defined(HAVE_OPENCV_HIGHGUI) -#include +#if (VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI) #include +#elif (VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO) +#include #endif BEGIN_VISP_NAMESPACE @@ -180,7 +182,7 @@ class VISP_EXPORT vpVideoReader : public vpFrameGrabber private: //! To read sequences of images vpDiskGrabber *m_imSequence; -#if defined(HAVE_OPENCV_HIGHGUI) && defined(HAVE_OPENCV_VIDEOIO) +#if ((VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI))|| ((VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO)) //! To read video files with OpenCV cv::VideoCapture m_capture; cv::Mat m_frame; diff --git a/modules/io/include/visp3/io/vpVideoWriter.h b/modules/io/include/visp3/io/vpVideoWriter.h index 99601c7b95..28bf69c6a5 100644 --- a/modules/io/include/visp3/io/vpVideoWriter.h +++ b/modules/io/include/visp3/io/vpVideoWriter.h @@ -43,9 +43,14 @@ #include -#if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_VIDEOIO) && defined(HAVE_OPENCV_HIGHGUI) +#if ((VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI)) || ((VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO)) + +#if (VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI) +#include // for cv::VideoCapture +#elif (VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO) #include -#include +#endif + #endif BEGIN_VISP_NAMESPACE @@ -163,7 +168,7 @@ BEGIN_VISP_NAMESPACE class VISP_EXPORT vpVideoWriter { private: -#if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_HIGHGUI) && defined(HAVE_OPENCV_VIDEOIO) +#if ((VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI)) || ((VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO)) cv::VideoWriter m_writer; int m_fourcc; double m_framerate; @@ -236,7 +241,7 @@ class VISP_EXPORT vpVideoWriter void saveFrame(vpImage &I); void saveFrame(vpImage &I); -#if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_HIGHGUI) && defined(HAVE_OPENCV_VIDEOIO) +#if ((VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI)) || ((VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO)) inline void setCodec(const int fourcc_codec) { m_fourcc = fourcc_codec; } #endif @@ -252,7 +257,7 @@ class VISP_EXPORT vpVideoWriter * * \note Framerate can only be set when OpenCV > 2.1.0. */ -#if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_HIGHGUI) && defined(HAVE_OPENCV_VIDEOIO) +#if ((VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI)) || ((VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO)) inline void setFramerate(const double framerate) { m_framerate = framerate; } #else inline void setFramerate(const double dummy) { (void)dummy; } diff --git a/modules/io/src/video/vpVideoReader.cpp b/modules/io/src/video/vpVideoReader.cpp index b5f85268d2..51a6c9f7cf 100644 --- a/modules/io/src/video/vpVideoReader.cpp +++ b/modules/io/src/video/vpVideoReader.cpp @@ -50,7 +50,7 @@ BEGIN_VISP_NAMESPACE */ vpVideoReader::vpVideoReader() : vpFrameGrabber(), m_imSequence(nullptr), -#if defined(HAVE_OPENCV_HIGHGUI) && defined(HAVE_OPENCV_VIDEOIO) +#if ((VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI))|| ((VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO)) m_capture(), m_frame(), m_lastframe_unknown(false), #endif m_formatType(FORMAT_UNKNOWN), m_videoName(), m_frameName(), m_initFileName(false), m_isOpen(false), m_frameCount(0), @@ -132,7 +132,7 @@ void vpVideoReader::getProperties() m_frameRate = -1.; } else if (isVideoExtensionSupported()) { -#if defined(HAVE_OPENCV_HIGHGUI) && defined(HAVE_OPENCV_VIDEOIO) +#if ((VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI))|| ((VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO)) m_capture.open(m_videoName.c_str()); if (!m_capture.isOpened()) { @@ -185,7 +185,7 @@ void vpVideoReader::open(vpImage &I) m_frameCount = m_firstFrame; if (isVideoExtensionSupported()) { -#if defined(HAVE_OPENCV_HIGHGUI) && defined(HAVE_OPENCV_VIDEOIO) +#if ((VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI))|| ((VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO)) #if VISP_HAVE_OPENCV_VERSION >= 0x030000 m_capture.set(cv::CAP_PROP_POS_FRAMES, m_firstFrame - 1); @@ -218,7 +218,7 @@ void vpVideoReader::open(vpImage &I) m_frameCount = m_firstFrame; if (isVideoExtensionSupported()) { -#if defined(HAVE_OPENCV_HIGHGUI) && defined(HAVE_OPENCV_VIDEOIO) +#if ((VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI))|| ((VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO)) #if VISP_HAVE_OPENCV_VERSION >= 0x030000 m_capture.set(cv::CAP_PROP_POS_FRAMES, m_firstFrame - 1); @@ -266,7 +266,7 @@ void vpVideoReader::acquire(vpImage &I) m_imSequence->setImageNumber(m_frameCount); } } -#if defined(HAVE_OPENCV_HIGHGUI) && defined(HAVE_OPENCV_VIDEOIO) +#if ((VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI))|| ((VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO)) else { m_capture >> m_frame; if (m_frameStep == 1) { @@ -361,7 +361,7 @@ void vpVideoReader::acquire(vpImage &I) m_imSequence->setImageNumber(m_frameCount); } } -#if defined(HAVE_OPENCV_HIGHGUI) && defined(HAVE_OPENCV_VIDEOIO) +#if ((VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI))|| ((VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO)) else { m_capture >> m_frame; if (m_frameStep == 1) { @@ -452,7 +452,7 @@ bool vpVideoReader::getFrame(vpImage &I, long frame_index) } } else { -#if defined(HAVE_OPENCV_HIGHGUI) && defined(HAVE_OPENCV_VIDEOIO) +#if ((VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI))|| ((VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO)) #if (VISP_HAVE_OPENCV_VERSION >= 0x030000) if (!m_capture.set(cv::CAP_PROP_POS_FRAMES, frame_index)) { // Couldn't find the %ld th frame", frame_index @@ -529,7 +529,7 @@ bool vpVideoReader::getFrame(vpImage &I, long frame_index) } } else { -#if defined(HAVE_OPENCV_HIGHGUI) && defined(HAVE_OPENCV_VIDEOIO) +#if ((VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI))|| ((VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO)) #if VISP_HAVE_OPENCV_VERSION >= 0x030000 if (!m_capture.set(cv::CAP_PROP_POS_FRAMES, frame_index)) { // Couldn't find the %ld th frame", frame_index @@ -718,7 +718,7 @@ void vpVideoReader::findLastFrameIndex() } } -#if defined(HAVE_OPENCV_HIGHGUI) && defined(HAVE_OPENCV_VIDEOIO) +#if ((VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI))|| ((VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO)) #if VISP_HAVE_OPENCV_VERSION >= 0x030000 else if (!m_lastFrameIndexIsSet) { m_lastFrame = (long)m_capture.get(cv::CAP_PROP_FRAME_COUNT); @@ -771,7 +771,7 @@ void vpVideoReader::findFirstFrameIndex() m_imSequence->setImageNumber(m_firstFrame); } } -#if defined(HAVE_OPENCV_HIGHGUI) && defined(HAVE_OPENCV_VIDEOIO) +#if ((VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI))|| ((VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO)) else if (!m_firstFrameIndexIsSet) { m_firstFrame = 1L; diff --git a/modules/io/src/video/vpVideoWriter.cpp b/modules/io/src/video/vpVideoWriter.cpp index e196b9f573..69a0b2517a 100644 --- a/modules/io/src/video/vpVideoWriter.cpp +++ b/modules/io/src/video/vpVideoWriter.cpp @@ -50,13 +50,13 @@ BEGIN_VISP_NAMESPACE */ vpVideoWriter::vpVideoWriter() : -#if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_HIGHGUI) && defined(HAVE_OPENCV_VIDEOIO) +#if ((VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI)) || ((VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO)) m_writer(), m_framerate(25.0), #endif m_formatType(FORMAT_UNKNOWN), m_videoName(), m_frameName(), m_initFileName(false), m_isOpen(false), m_frameCount(0), m_firstFrame(0), m_width(0), m_height(0), m_frameStep(1) { -#if defined(HAVE_OPENCV_HIGHGUI) && defined(HAVE_OPENCV_VIDEOIO) +#if ((VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI)) || ((VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO)) #if (VISP_HAVE_OPENCV_VERSION >= 0x030000) m_fourcc = cv::VideoWriter::fourcc('P', 'I', 'M', '1'); #else @@ -125,7 +125,7 @@ void vpVideoWriter::open(vpImage &I) } else if (m_formatType == FORMAT_AVI || m_formatType == FORMAT_MPEG || m_formatType == FORMAT_MPEG4 || m_formatType == FORMAT_MOV) { -#if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_HIGHGUI) && defined(HAVE_OPENCV_VIDEOIO) +#if ((VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI)) || ((VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO)) m_writer = cv::VideoWriter(m_videoName, m_fourcc, m_framerate, cv::Size(static_cast(I.getWidth()), static_cast(I.getHeight()))); @@ -165,7 +165,7 @@ void vpVideoWriter::open(vpImage &I) } else if (m_formatType == FORMAT_AVI || m_formatType == FORMAT_MPEG || m_formatType == FORMAT_MPEG4 || m_formatType == FORMAT_MOV) { -#if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_HIGHGUI) && defined(HAVE_OPENCV_VIDEOIO) +#if ((VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI)) || ((VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO)) m_writer = cv::VideoWriter(m_videoName, m_fourcc, m_framerate, cv::Size(static_cast(I.getWidth()), static_cast(I.getHeight()))); @@ -205,7 +205,7 @@ void vpVideoWriter::saveFrame(vpImage &I) m_frameName = std::string(name); } else { -#if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_HIGHGUI) && defined(HAVE_OPENCV_VIDEOIO) +#if ((VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI)) || ((VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO)) cv::Mat matFrame; vpImageConvert::convert(I, matFrame); m_writer << matFrame; @@ -238,7 +238,7 @@ void vpVideoWriter::saveFrame(vpImage &I) m_frameName = std::string(name); } else { -#if defined(HAVE_OPENCV_HIGHGUI) && defined(HAVE_OPENCV_VIDEOIO) +#if ((VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI)) || ((VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO)) #if (VISP_HAVE_OPENCV_VERSION >= 0x030000) cv::Mat matFrame, rgbMatFrame; vpImageConvert::convert(I, matFrame); diff --git a/modules/robot/src/real-robot/mavsdk/vpRobotMavsdk.cpp b/modules/robot/src/real-robot/mavsdk/vpRobotMavsdk.cpp index d78b35b3c2..4e6a8e3730 100644 --- a/modules/robot/src/real-robot/mavsdk/vpRobotMavsdk.cpp +++ b/modules/robot/src/real-robot/mavsdk/vpRobotMavsdk.cpp @@ -1,5 +1,4 @@ -/**************************************************************************** - * +/* * ViSP, open source Visual Servoing Platform software. * Copyright (C) 2005 - 2023 by Inria. All rights reserved. * @@ -30,8 +29,7 @@ * * Description: * Interface to mavlink compatible controller using mavsdk 3rd party - * - *****************************************************************************/ + */ #include diff --git a/modules/robot/test/virtuose/testVirtuose.cpp b/modules/robot/test/virtuose/testVirtuose.cpp index 40cbc46739..a896a58a04 100644 --- a/modules/robot/test/virtuose/testVirtuose.cpp +++ b/modules/robot/test/virtuose/testVirtuose.cpp @@ -47,11 +47,13 @@ int main(int argc, char **argv) #if defined(VISP_HAVE_VIRTUOSE) std::string opt_ip = "localhost"; int opt_port = 5000; - for (int i = 0; i < argc; i++) { - if (std::string(argv[i]) == "--ip") - opt_ip = std::string(argv[i + 1]); - else if (std::string(argv[i]) == "--port") - opt_port = std::atoi(argv[i + 1]); + for (int i = 1; i < argc; i++) { + if (std::string(argv[i]) == "--ip" && i + 1 < argc) { + opt_ip = std::string(argv[++i]); + } + else if (std::string(argv[i]) == "--port" && i + 1 < argc) { + opt_port = std::atoi(argv[++i]); + } else if (std::string(argv[i]) == "--help" || std::string(argv[i]) == "-h") { std::cout << "\nUsage: " << argv[0] << " [--ip ] [--port ]" diff --git a/modules/robot/test/virtuose/testVirtuoseHapticBox.cpp b/modules/robot/test/virtuose/testVirtuoseHapticBox.cpp index 67f8cc8fbf..173e0676bf 100644 --- a/modules/robot/test/virtuose/testVirtuoseHapticBox.cpp +++ b/modules/robot/test/virtuose/testVirtuoseHapticBox.cpp @@ -241,11 +241,13 @@ int main(int argc, char **argv) { std::string opt_ip = "localhost"; int opt_port = 5000; - for (int i = 0; i < argc; i++) { - if (std::string(argv[i]) == "--ip") - opt_ip = std::string(argv[i + 1]); - else if (std::string(argv[i]) == "--port") - opt_port = std::atoi(argv[i + 1]); + for (int i = 1; i < argc; i++) { + if (std::string(argv[i]) == "--ip" && i + 1 < argc) { + opt_ip = std::string(argv[++i]); + } + else if (std::string(argv[i]) == "--port" && i + 1 < argc) { + opt_port = std::atoi(argv[++i]); + } else if (std::string(argv[i]) == "--help" || std::string(argv[i]) == "-h") { std::cout << "\nUsage: " << argv[0] << " [--ip ] [--port ]" diff --git a/modules/robot/test/virtuose/testVirtuoseJointLimits.cpp b/modules/robot/test/virtuose/testVirtuoseJointLimits.cpp index ba0231050f..c1070ef5f9 100644 --- a/modules/robot/test/virtuose/testVirtuoseJointLimits.cpp +++ b/modules/robot/test/virtuose/testVirtuoseJointLimits.cpp @@ -99,15 +99,18 @@ int main(int argc, char **argv) { std::string opt_ip = "localhost"; int opt_port = 5000; - for (int i = 0; i < argc; i++) { - if (std::string(argv[i]) == "--ip") - opt_ip = std::string(argv[i + 1]); - else if (std::string(argv[i]) == "--port") - opt_port = std::atoi(argv[i + 1]); + for (int i = 1; i < argc; i++) { + if (std::string(argv[i]) == "--ip" && i + 1 < argc) { + opt_ip = std::string(argv[++i]); + } + else if (std::string(argv[i]) == "--port" && i + 1 < argc) { + opt_port = std::atoi(argv[++i]); + } else if (std::string(argv[i]) == "--help" || std::string(argv[i]) == "-h") { std::cout << "\nUsage: " << argv[0] - << " [--ip ] [--port ]" - " [--help] [-h]\n" + << " [--ip ]" + << " [--port ]" + << " [--help] [-h]\n" << std::endl << "Description: " << std::endl << " --ip " << std::endl diff --git a/modules/sensor/test/force-torque/testForceTorqueAtiNetFTSensor.cpp b/modules/sensor/test/force-torque/testForceTorqueAtiNetFTSensor.cpp index b6b1b167fd..12d5b71b8b 100644 --- a/modules/sensor/test/force-torque/testForceTorqueAtiNetFTSensor.cpp +++ b/modules/sensor/test/force-torque/testForceTorqueAtiNetFTSensor.cpp @@ -55,16 +55,20 @@ int main(int argc, char **argv) int opt_port = 49152; bool opt_no_display = false; - for (int i = 0; i < argc; i++) { - if (std::string(argv[i]) == "--ip") - opt_ip = std::string(argv[i + 1]); - else if (std::string(argv[i]) == "--port") - opt_port = atoi(argv[i + 1]); - else if (std::string(argv[i]) == "--no-display" || std::string(argv[i]) == "-d") + for (int i = 1; i < argc; i++) { + if (std::string(argv[i]) == "--ip" && i + 1 < argc) { + opt_ip = std::string(argv[++i]); + } + else if (std::string(argv[i]) == "--port" && i + 1 < argc) { + opt_port = atoi(argv[++i]); + } + else if (std::string(argv[i]) == "--no-display" || std::string(argv[i]) == "-d") { opt_no_display = true; + } else if (std::string(argv[i]) == "--help" || std::string(argv[i]) == "-h") { std::cout << "\nUsage: " << argv[0] - << " [--ip ] [--port ]" + << " [--ip ]" + << " [--port ]" << " [--no-display] [-d] [--help] [-h]\n" << std::endl; return EXIT_SUCCESS; diff --git a/modules/sensor/test/force-torque/testForceTorqueIitSensor.cpp b/modules/sensor/test/force-torque/testForceTorqueIitSensor.cpp index 271e19b7cc..16abcf90cb 100644 --- a/modules/sensor/test/force-torque/testForceTorqueIitSensor.cpp +++ b/modules/sensor/test/force-torque/testForceTorqueIitSensor.cpp @@ -51,13 +51,20 @@ int main(int argc, char **argv) bool opt_no_display = false; bool opt_filtered = false; - for (int i = 0; i < argc; i++) { - if (std::string(argv[i]) == "--no-display" || std::string(argv[i]) == "-d") + for (int i = 1; i < argc; i++) { + if (std::string(argv[i]) == "--no-display" || std::string(argv[i]) == "-d") { opt_no_display = true; - if (std::string(argv[i]) == "--filtered" || std::string(argv[i]) == "-f") + } + else if (std::string(argv[i]) == "--filtered" || std::string(argv[i]) == "-f") { opt_filtered = true; + } else if (std::string(argv[i]) == "--help" || std::string(argv[i]) == "-h") { - std::cout << "\nUsage: " << argv[0] << " [--no-display] [--filtered] [--help] [-d] [-f] [-h]\n" << std::endl; + std::cout << "\nUsage: " << argv[0] + << " [--no-display]" + << " [--filtered]" + << " [-d]" + << " [-f]" + << " [--help,-h]\n" << std::endl; return 0; } } diff --git a/modules/sensor/test/rgb-depth/testRealSense2_D435_opencv.cpp b/modules/sensor/test/rgb-depth/testRealSense2_D435_opencv.cpp index 06b4a146a3..2e39d8d0b6 100644 --- a/modules/sensor/test/rgb-depth/testRealSense2_D435_opencv.cpp +++ b/modules/sensor/test/rgb-depth/testRealSense2_D435_opencv.cpp @@ -48,7 +48,7 @@ #include #include -#include +#include namespace { diff --git a/modules/sensor/test/rgb-depth/testRealSense2_SR300.cpp b/modules/sensor/test/rgb-depth/testRealSense2_SR300.cpp index 41c50c9947..dc2f847be2 100644 --- a/modules/sensor/test/rgb-depth/testRealSense2_SR300.cpp +++ b/modules/sensor/test/rgb-depth/testRealSense2_SR300.cpp @@ -57,7 +57,7 @@ #if VISP_HAVE_OPENCV_VERSION >= 0x030000 #include -#include +#include #endif #ifdef ENABLE_VISP_NAMESPACE diff --git a/modules/tracker/blob/include/visp3/blob/vpDot2.h b/modules/tracker/blob/include/visp3/blob/vpDot2.h index b6a7d030b3..d0befc5882 100644 --- a/modules/tracker/blob/include/visp3/blob/vpDot2.h +++ b/modules/tracker/blob/include/visp3/blob/vpDot2.h @@ -103,10 +103,10 @@ BEGIN_VISP_NAMESPACE * can also be used to find a certain type of dots in the full image. * * The following sample code available in - * tutorial-blob-tracker-live-firewire.cpp shows how to grab images from a + * tutorial-blob-tracker-live.cpp shows how to grab images from a * firewire camera, track a blob and display the tracking results. * - * \include tutorial-blob-tracker-live-firewire.cpp + * \include tutorial-blob-tracker-live.cpp * A line by line explanation of the previous example is provided in * \ref tutorial-tracking-blob. * diff --git a/modules/tracker/klt/include/visp3/klt/vpKltOpencv.h b/modules/tracker/klt/include/visp3/klt/vpKltOpencv.h index 03109c3ba9..60a8078eea 100644 --- a/modules/tracker/klt/include/visp3/klt/vpKltOpencv.h +++ b/modules/tracker/klt/include/visp3/klt/vpKltOpencv.h @@ -1,6 +1,6 @@ /* * ViSP, open source Visual Servoing Platform software. - * Copyright (C) 2005 - 2023 by Inria. All rights reserved. + * Copyright (C) 2005 - 2024 by Inria. All rights reserved. * * This software is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -39,14 +39,15 @@ implemented with opencv. */ -#ifndef _vpKltOpencv_h_ -#define _vpKltOpencv_h_ +#ifndef VP_KLT_OPENCV_H +#define VP_KLT_OPENCV_H -#include #include -#include -#if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_HIGHGUI) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO) +#if defined(HAVE_OPENCV_HIGHGUI) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO) + +#include +#include #include #include diff --git a/modules/tracker/klt/src/vpKltOpencv.cpp b/modules/tracker/klt/src/vpKltOpencv.cpp index 66a4e4de3d..76cb6172d7 100644 --- a/modules/tracker/klt/src/vpKltOpencv.cpp +++ b/modules/tracker/klt/src/vpKltOpencv.cpp @@ -1,6 +1,6 @@ /* * ViSP, open source Visual Servoing Platform software. - * Copyright (C) 2005 - 2023 by Inria. All rights reserved. + * Copyright (C) 2005 - 2024 by Inria. All rights reserved. * * This software is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -41,7 +41,7 @@ #include -#if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_HIGHGUI) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO) +#if defined(HAVE_OPENCV_HIGHGUI) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO) #include @@ -95,7 +95,6 @@ void vpKltOpencv::initTracking(const cv::Mat &I, const cv::Mat &mask) { m_next_points_id = 0; - // cvtColor(I, m_gray, cv::COLOR_BGR2GRAY); I.copyTo(m_gray); for (size_t i = 0; i < 2; i++) { diff --git a/modules/tracker/mbt/include/visp3/mbt/vpMbEdgeTracker.h b/modules/tracker/mbt/include/visp3/mbt/vpMbEdgeTracker.h index f8073a0205..d107f838ad 100644 --- a/modules/tracker/mbt/include/visp3/mbt/vpMbEdgeTracker.h +++ b/modules/tracker/mbt/include/visp3/mbt/vpMbEdgeTracker.h @@ -71,8 +71,10 @@ #if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) #include +#if (VISP_HAVE_OPENCV_VERSION < 0x050000) #include #endif +#endif BEGIN_VISP_NAMESPACE diff --git a/modules/tracker/mbt/test/generic-with-dataset/testGenericTracker.cpp b/modules/tracker/mbt/test/generic-with-dataset/testGenericTracker.cpp index de84aeec61..425d72bdef 100644 --- a/modules/tracker/mbt/test/generic-with-dataset/testGenericTracker.cpp +++ b/modules/tracker/mbt/test/generic-with-dataset/testGenericTracker.cpp @@ -371,7 +371,7 @@ bool run(const std::string &input_directory, bool opt_click_allowed, bool opt_di map_thresh[vpMbGenericTracker::KLT_TRACKER] = useScanline ? std::pair(0.007, 1.9) : std::pair(0.007, 1.8); map_thresh[vpMbGenericTracker::EDGE_TRACKER | vpMbGenericTracker::KLT_TRACKER] = - useScanline ? std::pair(0.005, 3.7) : std::pair(0.007, 3.4); + useScanline ? std::pair(0.005, 3.8) : std::pair(0.007, 3.7); #endif map_thresh[vpMbGenericTracker::EDGE_TRACKER | vpMbGenericTracker::DEPTH_DENSE_TRACKER] = useScanline ? std::pair(0.003, 1.7) : std::pair(0.002, 0.8); diff --git a/modules/tracker/me/src/moving-edges/vpMeNurbs.cpp b/modules/tracker/me/src/moving-edges/vpMeNurbs.cpp index 6dd895580a..25dfec5905 100644 --- a/modules/tracker/me/src/moving-edges/vpMeNurbs.cpp +++ b/modules/tracker/me/src/moving-edges/vpMeNurbs.cpp @@ -53,8 +53,10 @@ #include #if defined(HAVE_OPENCV_IMGPROC) #include +#if (VISP_HAVE_OPENCV_VERSION < 0x050000) #include #endif +#endif BEGIN_VISP_NAMESPACE double computeDelta(double deltai, double deltaj); diff --git a/modules/vision/CMakeLists.txt b/modules/vision/CMakeLists.txt index c5d52386ac..17e97d1c18 100644 --- a/modules/vision/CMakeLists.txt +++ b/modules/vision/CMakeLists.txt @@ -1,7 +1,7 @@ ############################################################################# # # ViSP, open source Visual Servoing Platform software. -# Copyright (C) 2005 - 2023 by Inria. All rights reserved. +# Copyright (C) 2005 - 2024 by Inria. All rights reserved. # # This software is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -68,7 +68,8 @@ if(USE_OPENCV) set(OpenCV_REQUIRED_LIB_COMPONENTS ${OpenCV_LIB_COMPONENTS}) vp_list_filterout(OpenCV_REQUIRED_LIB_COMPONENTS "opencv_*") # We import only required OpenCV libraries - list(APPEND OpenCV_REQUIRED_LIB_COMPONENTS "opencv_legacy" "opencv_xfeatures2d" "opencv_nonfree" "opencv_flann") + # Note: opencv_contrib is required with OpenCV 2.4.9.1 coming with Ubuntu 16.04 + list(APPEND OpenCV_REQUIRED_LIB_COMPONENTS "opencv_legacy" "opencv_xfeatures2d" "opencv_features" "opencv_3d" "opencv_calib" "opencv_calib3d" "opencv_nonfree" "opencv_flann" "opencv_contrib") foreach(component_ ${OpenCV_REQUIRED_LIB_COMPONENTS}) string(TOUPPER "${component_}" component_UP) diff --git a/modules/vision/include/visp3/vision/vpKeyPoint.h b/modules/vision/include/visp3/vision/vpKeyPoint.h index 8571bd98c0..24a1f4e880 100644 --- a/modules/vision/include/visp3/vision/vpKeyPoint.h +++ b/modules/vision/include/visp3/vision/vpKeyPoint.h @@ -1,6 +1,6 @@ /* * ViSP, open source Visual Servoing Platform software. - * Copyright (C) 2005 - 2023 by Inria. All rights reserved. + * Copyright (C) 2005 - 2024 by Inria. All rights reserved. * * This software is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -30,8 +30,13 @@ * Description: * Key point functionalities. */ -#ifndef _vpKeyPoint_h_ -#define _vpKeyPoint_h_ +#ifndef VP_KEYPOINT_H +#define VP_KEYPOINT_H + +#include + +#if ((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_CALIB3D) && defined(HAVE_OPENCV_FEATURES2D)) || \ + ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_3D) && defined(HAVE_OPENCV_FEATURES)) #include // std::transform #include // DBL_MAX @@ -43,7 +48,6 @@ #include // time #include // std::vector -#include #include #include #include @@ -60,16 +64,21 @@ #include #include -// Require at least OpenCV >= 2.1.1 -#if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_FEATURES2D) +#include + +#if defined(HAVE_OPENCV_FEATURES2D) #include -#include -#include +#endif -#if defined(VISP_HAVE_OPENCV_XFEATURES2D) // OpenCV >= 3.0.0 +#if defined(HAVE_OPENCV_XFEATURES2D) #include -#elif defined(VISP_HAVE_OPENCV_NONFREE) && (VISP_HAVE_OPENCV_VERSION >= 0x020400) && \ - (VISP_HAVE_OPENCV_VERSION < 0x030000) +#endif + +#if defined(HAVE_OPENCV_IMGPROC) +#include +#endif + +#if defined(HAVE_OPENCV_NONFREE) #include #endif @@ -78,7 +87,7 @@ BEGIN_VISP_NAMESPACE * \class vpKeyPoint * \ingroup group_vision_keypoints group_detection_keypoint group_detection_mbt_object * - * \brief Class that allows keypoints detection (and descriptors extraction) + * \brief Class that allows keypoints 2D features detection (and descriptors extraction) * and matching thanks to OpenCV library. Thus to enable this class OpenCV should * be installed. Installation instructions are provided here * https://visp.inria.fr/3rd_opencv. @@ -93,6 +102,43 @@ BEGIN_VISP_NAMESPACE * from 3.0.0. You have to check you have the corresponding module to use SIFT * and SURF. * + * Depending on OpenCV version, the table below shows which OpenCV module + * is required to be able to use a given 2D features detectors. + * + * 2D features detectors | OpenCV < 5.0 | OpenCV >= 5.0 + * :-------------------: | :----------: | :-----------: + * AGAST | features2d | xfeatures2d + * AKAZE | features2d | xfeatures2d + * BRISK | features2d | xfeatures2d + * GFTTDetector | features2d | features + * FAST | features2d | features + * KAZE | features2d | xfeatures2d + * MSDDetector | xfeatures2d | xfeatures2d + * MSER | features2d | features + * ORB | features2d | features + * SIFT | xfeatures2d | features + * SimpleBlobDetector | features2d | features + * STAR | xfeatures2d | xfeatures2d + * SURF | xfeatures2d | xfeatures2d + * + * Depending on OpenCV version, the table below shows which OpenCV module + * is required to be able to use a given 2D features descriptor. + * + * 2D features descriptors | OpenCV < 5.0 | OpenCV >= 5.0 + * :---------------------: | :----------: | :-----------: + * AKAZE | features2d | xfeatures2d + * BRIEF | xfeatures2d | xfeatures2d + * BRISK | features2d | xfeatures2d + * BoostDesc | xfeatures2d | xfeatures2d + * DAISY | xfeatures2d | xfeatures2d + * FREAK | xfeatures2d | xfeatures2d + * KAZE | features2d | xfeatures2d + * LATCH | xfeatures2d | xfeatures2d + * ORB | features2d | features + * SIFT | xfeatures2d | features + * SURF | xfeatures2d | xfeatures2d + * VGG | xfeatures2d | xfeatures2d + * * The goal of this class is to provide a tool to match reference keypoints * from a reference image (or train keypoints in OpenCV terminology) and detected * keypoints from a current image (or query keypoints in OpenCV terminology). @@ -257,65 +303,104 @@ class VISP_EXPORT vpKeyPoint : public vpBasicKeyPoint /*! Predefined constant for feature detection type. */ enum vpFeatureDetectorType { -#if (VISP_HAVE_OPENCV_VERSION >= 0x020403) +#if (VISP_HAVE_OPENCV_VERSION >= 0x050000) +# if defined(HAVE_OPENCV_FEATURES) DETECTOR_FAST, //!< FAST detector + DETECTOR_GFTT, //!< GFTT detector DETECTOR_MSER, //!< MSER detector DETECTOR_ORB, //!< ORB detector - DETECTOR_BRISK, //!< BRISK detector - DETECTOR_GFTT, //!< GFTT detector + DETECTOR_SIFT, //!< SIFT detector DETECTOR_SimpleBlob, //!< SimpleBlob detector -#if (VISP_HAVE_OPENCV_VERSION < 0x030000) || (defined(VISP_HAVE_OPENCV_XFEATURES2D)) +# endif +# if defined(HAVE_OPENCV_XFEATURES2D) + DETECTOR_AGAST, //!< AGAST detector + DETECTOR_AKAZE, //!< AKAZE detector + DETECTOR_BRISK, //!< BRISK detector + DETECTOR_KAZE, //!< KAZE detector + DETECTOR_MSD, //!< MSD detector DETECTOR_STAR, //!< STAR detector -#endif -#if defined(VISP_HAVE_OPENCV_NONFREE) || defined(VISP_HAVE_OPENCV_XFEATURES2D) || \ - (VISP_HAVE_OPENCV_VERSION >= 0x030411 && CV_MAJOR_VERSION < 4) || (VISP_HAVE_OPENCV_VERSION >= 0x040400) - DETECTOR_SIFT, //!< SIFT detector -#endif -#if defined(VISP_HAVE_OPENCV_NONFREE) || defined(VISP_HAVE_OPENCV_XFEATURES2D) +# endif +# if defined(OPENCV_ENABLE_NONFREE) && defined(HAVE_OPENCV_XFEATURES2D) DETECTOR_SURF, //!< SURF detector +# endif +#else // OpenCV < 5.0.0 +# if defined(HAVE_OPENCV_FEATURES2D) +#if (VISP_HAVE_OPENCV_VERSION >= 0x030000) + DETECTOR_AGAST, //!< AGAST detector + DETECTOR_AKAZE, //!< AKAZE detector #endif + DETECTOR_BRISK, //!< BRISK detector + DETECTOR_FAST, //!< FAST detector + DETECTOR_GFTT, //!< GFTT detector #if (VISP_HAVE_OPENCV_VERSION >= 0x030000) DETECTOR_KAZE, //!< KAZE detector - DETECTOR_AKAZE, //!< AKAZE detector - DETECTOR_AGAST, //!< AGAST detector #endif -#if (VISP_HAVE_OPENCV_VERSION >= 0x030100) && defined(VISP_HAVE_OPENCV_XFEATURES2D) + DETECTOR_MSER, //!< MSER detector + DETECTOR_ORB, //!< ORB detector + DETECTOR_SimpleBlob, //!< SimpleBlob detector +# endif +# if defined(HAVE_OPENCV_XFEATURES2D) DETECTOR_MSD, //!< MSD detector + DETECTOR_SIFT, //!< SIFT detector + DETECTOR_STAR, //!< STAR detector +# endif +# if defined(OPENCV_ENABLE_NONFREE) && defined(HAVE_OPENCV_XFEATURES2D) + DETECTOR_SURF, //!< SURF detector +# endif #endif -#endif + DETECTOR_TYPE_SIZE //!< Number of detectors available }; /*! Predefined constant for descriptor extraction type. */ enum vpFeatureDescriptorType { -#if (VISP_HAVE_OPENCV_VERSION >= 0x020403) +#if (VISP_HAVE_OPENCV_VERSION >= 0x050000) +# if defined(HAVE_OPENCV_FEATURES) DESCRIPTOR_ORB, //!< ORB descriptor + DESCRIPTOR_SIFT, //!< SIFT descriptor +# endif +# if defined(HAVE_OPENCV_XFEATURES2D) + DESCRIPTOR_AKAZE, //!< AKAZE descriptor DESCRIPTOR_BRISK, //!< BRISK descriptor -#if (VISP_HAVE_OPENCV_VERSION < 0x030000) || (defined(VISP_HAVE_OPENCV_XFEATURES2D)) - DESCRIPTOR_FREAK, //!< FREAK descriptor + DESCRIPTOR_BoostDesc, //!< BoostDesc descriptor DESCRIPTOR_BRIEF, //!< BRIEF descriptor + DESCRIPTOR_DAISY, //!< DAISY descriptor + DESCRIPTOR_FREAK, //!< FREAK descriptor + DESCRIPTOR_KAZE, //!< KAZE descriptor + DESCRIPTOR_LATCH, //!< LATCH descriptor + DESCRIPTOR_VGG, //!< VGG descriptor +# endif +# if defined(OPENCV_ENABLE_NONFREE) && defined(HAVE_OPENCV_XFEATURES2D) + DESCRIPTOR_SURF, //!< SURF descriptor +# endif +#else // opencv < 5.0.0 +# if defined(HAVE_OPENCV_FEATURES2D) +#if (VISP_HAVE_OPENCV_VERSION >= 0x030000) + DESCRIPTOR_AKAZE, //!< AKAZE descriptor #endif -#if defined(VISP_HAVE_OPENCV_NONFREE) || defined(VISP_HAVE_OPENCV_XFEATURES2D) || \ - (VISP_HAVE_OPENCV_VERSION >= 0x030411 && CV_MAJOR_VERSION < 4) || (VISP_HAVE_OPENCV_VERSION >= 0x040400) - DESCRIPTOR_SIFT, //!< SIFT descriptor -#endif -#if defined(VISP_HAVE_OPENCV_NONFREE) || defined(VISP_HAVE_OPENCV_XFEATURES2D) - DESCRIPTOR_SURF, //!< SUFT descriptor -#endif + DESCRIPTOR_BRISK, //!< BRISK descriptor #if (VISP_HAVE_OPENCV_VERSION >= 0x030000) DESCRIPTOR_KAZE, //!< KAZE descriptor - DESCRIPTOR_AKAZE, //!< AKAZE descriptor -#if defined(VISP_HAVE_OPENCV_XFEATURES2D) +#endif + DESCRIPTOR_ORB, //!< ORB descriptor +# endif +# if defined(HAVE_OPENCV_XFEATURES2D) + DESCRIPTOR_BRIEF, //!< BRIEF descriptor DESCRIPTOR_DAISY, //!< DAISY descriptor + DESCRIPTOR_FREAK, //!< FREAK descriptor DESCRIPTOR_LATCH, //!< LATCH descriptor + DESCRIPTOR_SIFT, //!< SIFT descriptor +# endif +# if defined(OPENCV_ENABLE_NONFREE) && defined(HAVE_OPENCV_XFEATURES2D) + DESCRIPTOR_SURF, //!< SURF descriptor +# endif +# if defined(HAVE_OPENCV_XFEATURES2D) && (VISP_HAVE_OPENCV_VERSION >= 0x030200) + DESCRIPTOR_BoostDesc, //!< BoostDesc descriptor, only with OpenCV >= 3.2.0 + DESCRIPTOR_VGG, //!< VGG descriptor, only with OpenCV >= 3.2.0 +# endif #endif -#endif -#if (VISP_HAVE_OPENCV_VERSION >= 0x030200) && defined(VISP_HAVE_OPENCV_XFEATURES2D) - DESCRIPTOR_VGG, //!< VGG descriptor - DESCRIPTOR_BoostDesc, //!< BoostDesc descriptor -#endif -#endif + DESCRIPTOR_TYPE_SIZE //!< Number of descriptors available }; @@ -971,19 +1056,16 @@ class VISP_EXPORT vpKeyPoint : public vpBasicKeyPoint { if (!m_computeCovariance) { std::cout << "Warning : The covariance matrix has not been computed. " - "See setCovarianceComputation() to do it." + << "See setCovarianceComputation() to do it." << std::endl; return vpMatrix(); } if (m_computeCovariance && !m_useRansacVVS) { std::cout << "Warning : The covariance matrix can only be computed " - "with a Virtual Visual Servoing approach." - << std::endl + << "with a Virtual Visual Servoing approach." << std::endl << "Use setUseRansacVVS(true) to choose to use a pose " - "estimation method based on a Virtual Visual Servoing " - "approach." - << std::endl; + << "estimation method based on a Virtual Visual Servoing approach." << std::endl; return vpMatrix(); } @@ -1008,9 +1090,7 @@ class VISP_EXPORT vpKeyPoint : public vpBasicKeyPoint { std::map::const_iterator it_name = m_mapOfDetectorNames.find(type); if (it_name == m_mapOfDetectorNames.end()) { - std::cerr << "Internal problem with the feature type and the " - "corresponding name!" - << std::endl; + std::cerr << "Internal problem with the feature type and the corresponding name!" << std::endl; } std::map >::const_iterator findDetector = @@ -1064,9 +1144,7 @@ class VISP_EXPORT vpKeyPoint : public vpBasicKeyPoint { std::map::const_iterator it_name = m_mapOfDescriptorNames.find(type); if (it_name == m_mapOfDescriptorNames.end()) { - std::cerr << "Internal problem with the feature type and the " - "corresponding name!" - << std::endl; + std::cerr << "Internal problem with the feature type and the corresponding name!" << std::endl; } std::map >::const_iterator findExtractor = @@ -1551,12 +1629,10 @@ class VISP_EXPORT vpKeyPoint : public vpBasicKeyPoint m_computeCovariance = flag; if (!m_useRansacVVS) { std::cout << "Warning : The covariance matrix can only be computed " - "with a Virtual Visual Servoing approach." - << std::endl + << "with a Virtual Visual Servoing approach." << std::endl << "Use setUseRansacVVS(true) to choose to use a pose " - "estimation method based on a Virtual " - "Visual Servoing approach." - << std::endl; + << "estimation method based on a Virtual " + << "Visual Servoing approach." << std::endl; } } @@ -1923,8 +1999,8 @@ class VISP_EXPORT vpKeyPoint : public vpBasicKeyPoint } else if (m_matcher != nullptr && m_useKnn && m_matcherName == "BruteForce") { std::cout << "Warning, you try to set the crossCheck parameter with a " - "BruteForce matcher but knn is enabled"; - std::cout << " (the filtering method uses a ratio constraint)" << std::endl; + << "BruteForce matcher but knn is enabled" + << " (the filtering method uses a ratio constraint)" << std::endl; } } #endif diff --git a/modules/vision/src/key-point/vpKeyPoint.cpp b/modules/vision/src/key-point/vpKeyPoint.cpp index 011c9294a6..1433cf0c4e 100644 --- a/modules/vision/src/key-point/vpKeyPoint.cpp +++ b/modules/vision/src/key-point/vpKeyPoint.cpp @@ -1,6 +1,6 @@ /* * ViSP, open source Visual Servoing Platform software. - * Copyright (C) 2005 - 2023 by Inria. All rights reserved. + * Copyright (C) 2005 - 2024 by Inria. All rights reserved. * * This software is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -31,13 +31,30 @@ * Key point functionalities. */ +#include + +// opencv_xfeatures2d and opencv_nonfree are optional +#if ((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_CALIB3D) && defined(HAVE_OPENCV_FEATURES2D)) || \ + ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_3D) && defined(HAVE_OPENCV_FEATURES)) + #include #include #include #include -#if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_FEATURES2D) +#if (VISP_HAVE_OPENCV_VERSION >= 0x050000) +#include +#include +#endif + +#if (VISP_HAVE_OPENCV_VERSION <0x050000) +#include +#endif + +#if defined(HAVE_OPENCV_XFEATURES2D) +#include +#endif #if defined(VISP_HAVE_PUGIXML) #include @@ -207,7 +224,6 @@ unsigned int vpKeyPoint::buildReference(const vpImage &I_color, const vp return buildReference(I_color, vpRect(iP, width, height)); } - unsigned int vpKeyPoint::buildReference(const vpImage &I, const vpRect &rectangle) { // Reset variables used when dealing with 3D models @@ -553,11 +569,10 @@ void vpKeyPoint::compute3DForPointsInPolygons(const vpHomogeneousMatrix &cMo, co } -void vpKeyPoint::compute3DForPointsOnCylinders( - const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam, std::vector &candidates, - const std::vector &cylinders, - const std::vector > > &vectorOfCylinderRois, std::vector &points, - cv::Mat *descriptors) +void vpKeyPoint::compute3DForPointsOnCylinders(const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam, + std::vector &candidates, const std::vector &cylinders, + const std::vector > > &vectorOfCylinderRois, + std::vector &points, cv::Mat *descriptors) { std::vector candidatesToCheck = candidates; candidates.clear(); @@ -613,11 +628,10 @@ void vpKeyPoint::compute3DForPointsOnCylinders( } } -void vpKeyPoint::compute3DForPointsOnCylinders( - const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam, std::vector &candidates, - const std::vector &cylinders, - const std::vector > > &vectorOfCylinderRois, std::vector &points, - cv::Mat *descriptors) +void vpKeyPoint::compute3DForPointsOnCylinders(const vpHomogeneousMatrix &cMo, const vpCameraParameters &cam, + std::vector &candidates, const std::vector &cylinders, + const std::vector > > &vectorOfCylinderRois, + std::vector &points, cv::Mat *descriptors) { std::vector candidatesToCheck = candidates; candidates.clear(); @@ -708,24 +722,24 @@ bool vpKeyPoint::computePose(const std::vector &imagePoints, const 0.99, // confidence=0.99 (default) – The probability // that the algorithm produces a useful result. inlierIndex, cv::SOLVEPNP_ITERATIVE); -// SOLVEPNP_ITERATIVE (default): Iterative method is based on -// Levenberg-Marquardt optimization. In this case the function finds such a -// pose that minimizes reprojection error, that is the sum of squared -// distances between the observed projections imagePoints and the projected -// (using projectPoints() ) objectPoints . SOLVEPNP_P3P: Method is based on -// the paper of X.S. Gao, X.-R. Hou, J. Tang, H.-F. Chang “Complete Solution -// Classification for the Perspective-Three-Point Problemâ€. In this case the -// function requires exactly four object and image points. SOLVEPNP_EPNP: -// Method has been introduced by F.Moreno-Noguer, V.Lepetit and P.Fua in the -// paper “EPnP: Efficient Perspective-n-Point Camera Pose Estimationâ€. -// SOLVEPNP_DLS: Method is based on the paper of Joel A. Hesch and Stergios I. -// Roumeliotis. “A Direct Least-Squares (DLS) Method for PnPâ€. SOLVEPNP_UPNP -// Method is based on the paper of A.Penate-Sanchez, J.Andrade-Cetto, -// F.Moreno-Noguer. “Exhaustive Linearization for Robust Camera Pose and Focal -// Length Estimationâ€. In this case the function also estimates the -// parameters -// f_x and f_y assuming that both have the same value. Then the cameraMatrix -// is updated with the estimated focal length. + // SOLVEPNP_ITERATIVE (default): Iterative method is based on + // Levenberg-Marquardt optimization. In this case the function finds such a + // pose that minimizes reprojection error, that is the sum of squared + // distances between the observed projections imagePoints and the projected + // (using projectPoints() ) objectPoints . SOLVEPNP_P3P: Method is based on + // the paper of X.S. Gao, X.-R. Hou, J. Tang, H.-F. Chang “Complete Solution + // Classification for the Perspective-Three-Point Problemâ€. In this case the + // function requires exactly four object and image points. SOLVEPNP_EPNP: + // Method has been introduced by F.Moreno-Noguer, V.Lepetit and P.Fua in the + // paper “EPnP: Efficient Perspective-n-Point Camera Pose Estimationâ€. + // SOLVEPNP_DLS: Method is based on the paper of Joel A. Hesch and Stergios I. + // Roumeliotis. “A Direct Least-Squares (DLS) Method for PnPâ€. SOLVEPNP_UPNP + // Method is based on the paper of A.Penate-Sanchez, J.Andrade-Cetto, + // F.Moreno-Noguer. “Exhaustive Linearization for Robust Camera Pose and Focal + // Length Estimationâ€. In this case the function also estimates the + // parameters + // f_x and f_y assuming that both have the same value. Then the cameraMatrix + // is updated with the estimated focal length. #else int nbInlierToReachConsensus = m_nbRansacMinInlierCount; if (m_useConsensusPercentage) { @@ -998,9 +1012,14 @@ void vpKeyPoint::detect(const vpImage &I, std::vector 0 && rectangle.getHeight() > 0) { +#if VISP_HAVE_OPENCV_VERSION >= 0x030000 + int filled = cv::FILLED; +#else + int filled = CV_FILLED; +#endif cv::Point leftTop((int)rectangle.getLeft(), (int)rectangle.getTop()), rightBottom((int)rectangle.getRight(), (int)rectangle.getBottom()); - cv::rectangle(mask, leftTop, rightBottom, cv::Scalar(255), CV_FILLED); + cv::rectangle(mask, leftTop, rightBottom, cv::Scalar(255), filled); } else { mask = cv::Mat::ones(matImg.rows, matImg.cols, CV_8U) * 255; @@ -1017,9 +1036,14 @@ void vpKeyPoint::detect(const vpImage &I_color, std::vector 0 && rectangle.getHeight() > 0) { +#if VISP_HAVE_OPENCV_VERSION >= 0x030000 + int filled = cv::FILLED; +#else + int filled = CV_FILLED; +#endif cv::Point leftTop((int)rectangle.getLeft(), (int)rectangle.getTop()), rightBottom((int)rectangle.getRight(), (int)rectangle.getBottom()); - cv::rectangle(mask, leftTop, rightBottom, cv::Scalar(255), CV_FILLED); + cv::rectangle(mask, leftTop, rightBottom, cv::Scalar(255), filled); } else { mask = cv::Mat::ones(matImg.rows, matImg.cols, CV_8U) * 255; @@ -1192,7 +1216,7 @@ void vpKeyPoint::displayMatching(const vpImage &ICurrent, vpImage displayMatching(m_mapOfImages.begin()->second, IMatching, crossSize); } else { - // Multiple training images, display them as a mosaic image + // Multiple training images, display them as a mosaic image int nbImgSqrt = vpMath::round(std::sqrt((double)nbImg)); //(int) std::floor(std::sqrt((double) nbImg) + 0.5); int nbWidth = nbImgSqrt; int nbHeight = nbImgSqrt; @@ -1229,8 +1253,8 @@ void vpKeyPoint::displayMatching(const vpImage &ICurrent, vpImage current_class_id_index = mapOfImageIdIndex[m_mapOfImageId[it->class_id]]; } else { - // Shift of one unity the index of the training images which are after - // the current image + // Shift of one unity the index of the training images which are after + // the current image current_class_id_index = mapOfImageIdIndex[m_mapOfImageId[it->class_id]] + 1; } @@ -1266,8 +1290,8 @@ void vpKeyPoint::displayMatching(const vpImage &ICurrent, vpImage current_class_id = mapOfImageIdIndex[m_mapOfImageId[m_trainKeyPoints[(size_t)it->trainIdx].class_id]]; } else { - // Shift of one unity the index of the training images which are after - // the current image + // Shift of one unity the index of the training images which are after + // the current image current_class_id = mapOfImageIdIndex[m_mapOfImageId[m_trainKeyPoints[(size_t)it->trainIdx].class_id]] + 1; } @@ -1305,7 +1329,7 @@ void vpKeyPoint::displayMatching(const vpImage &ICurrent, vpImagesecond, IMatching, crossSize); } else { - // Multiple training images, display them as a mosaic image + // Multiple training images, display them as a mosaic image int nbImgSqrt = vpMath::round(std::sqrt((double)nbImg)); //(int) std::floor(std::sqrt((double) nbImg) + 0.5); int nbWidth = nbImgSqrt; int nbHeight = nbImgSqrt; @@ -1342,8 +1366,8 @@ void vpKeyPoint::displayMatching(const vpImage &ICurrent, vpImageclass_id]]; } else { - // Shift of one unity the index of the training images which are after - // the current image + // Shift of one unity the index of the training images which are after + // the current image current_class_id_index = mapOfImageIdIndex[m_mapOfImageId[it->class_id]] + 1; } @@ -1379,8 +1403,8 @@ void vpKeyPoint::displayMatching(const vpImage &ICurrent, vpImagetrainIdx].class_id]]; } else { - // Shift of one unity the index of the training images which are after - // the current image + // Shift of one unity the index of the training images which are after + // the current image current_class_id = mapOfImageIdIndex[m_mapOfImageId[m_trainKeyPoints[(size_t)it->trainIdx].class_id]] + 1; } @@ -1478,13 +1502,13 @@ void vpKeyPoint::extract(const cv::Mat &matImg, std::vector &keyPo } } else { - // Extract descriptors for the given list of keypoints + // Extract descriptors for the given list of keypoints itd->second->compute(matImg, keyPoints, descriptors); } } else { - // Copy the input list of keypoints, keypoints that cannot be computed - // are removed in the function compute + // Copy the input list of keypoints, keypoints that cannot be computed + // are removed in the function compute std::vector keyPoints_tmp = keyPoints; cv::Mat desc; @@ -1717,10 +1741,10 @@ void vpKeyPoint::getTrainPoints(std::vector &points) const { points = m void vpKeyPoint::init() { // Require 2.4.0 <= opencv < 3.0.0 -#if defined(VISP_HAVE_OPENCV_NONFREE) && (VISP_HAVE_OPENCV_VERSION >= 0x020400) && (VISP_HAVE_OPENCV_VERSION < 0x030000) +#if defined(HAVE_OPENCV_NONFREE) && (VISP_HAVE_OPENCV_VERSION >= 0x020400) && (VISP_HAVE_OPENCV_VERSION < 0x030000) // The following line must be called in order to use SIFT or SURF if (!cv::initModule_nonfree()) { - std::cerr << "Cannot init module non free, SIFT or SURF cannot be used." << std::endl; + std::cerr << "Cannot init module non free, SURF cannot be used." << std::endl; } #endif @@ -1757,7 +1781,8 @@ void vpKeyPoint::initDetector(const std::string &detectorName) } if (detectorNameTmp == "SIFT") { -#if (VISP_HAVE_OPENCV_VERSION >= 0x040500) // OpenCV >= 4.5.0 +#if ((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_XFEATURES2D)) || ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_FEATURES)) +# if (VISP_HAVE_OPENCV_VERSION >= 0x040500) // OpenCV >= 4.5.0 cv::Ptr siftDetector = cv::SiftFeatureDetector::create(); if (!usePyramid) { m_detectors[detectorNameTmp] = siftDetector; @@ -1765,25 +1790,19 @@ void vpKeyPoint::initDetector(const std::string &detectorName) else { m_detectors[detectorName] = cv::makePtr(siftDetector); } -#else -#if defined(VISP_HAVE_OPENCV_XFEATURES2D) || (VISP_HAVE_OPENCV_VERSION >= 0x030411 && CV_MAJOR_VERSION < 4) || \ - (VISP_HAVE_OPENCV_VERSION >= 0x040400) +# elif (VISP_HAVE_OPENCV_VERSION >= 0x030411) // SIFT is no more patented since 09/03/2020 cv::Ptr siftDetector; if (m_maxFeatures > 0) { -#if (VISP_HAVE_OPENCV_VERSION >= 0x030411 && CV_MAJOR_VERSION < 4) || (VISP_HAVE_OPENCV_VERSION >= 0x040400) siftDetector = cv::SIFT::create(m_maxFeatures); -#else - siftDetector = cv::xfeatures2d::SIFT::create(m_maxFeatures); -#endif } else { -#if (VISP_HAVE_OPENCV_VERSION >= 0x030411 && CV_MAJOR_VERSION < 4) || (VISP_HAVE_OPENCV_VERSION >= 0x040400) siftDetector = cv::SIFT::create(); -#else - siftDetector = cv::xfeatures2d::SIFT::create(); -#endif } +# else + cv::Ptr siftDetector; + siftDetector = cv::xfeatures2d::SIFT::create(); +# endif if (!usePyramid) { m_detectors[detectorNameTmp] = siftDetector; } @@ -1791,16 +1810,14 @@ void vpKeyPoint::initDetector(const std::string &detectorName) std::cerr << "You should not use SIFT with Pyramid feature detection!" << std::endl; m_detectors[detectorName] = cv::makePtr(siftDetector); } -#else +# else std::stringstream ss_msg; - ss_msg << "Fail to initialize the detector: SIFT. OpenCV version " << std::hex << VISP_HAVE_OPENCV_VERSION - << " was not build with xFeatures2d module."; + ss_msg << "Failed to initialize the SIFT 2D features detector with OpenCV version " << std::hex << VISP_HAVE_OPENCV_VERSION; throw vpException(vpException::fatalError, ss_msg.str()); -#endif #endif } else if (detectorNameTmp == "SURF") { -#ifdef VISP_HAVE_OPENCV_XFEATURES2D +#if defined(OPENCV_ENABLE_NONFREE) && defined(HAVE_OPENCV_XFEATURES2D) cv::Ptr surfDetector = cv::xfeatures2d::SURF::create(); if (!usePyramid) { m_detectors[detectorNameTmp] = surfDetector; @@ -1811,12 +1828,12 @@ void vpKeyPoint::initDetector(const std::string &detectorName) } #else std::stringstream ss_msg; - ss_msg << "Fail to initialize the detector: SURF. OpenCV version " << std::hex << VISP_HAVE_OPENCV_VERSION - << " was not build with xFeatures2d module."; + ss_msg << "Failed to initialize the SURF 2D features detector with OpenCV version " << std::hex << VISP_HAVE_OPENCV_VERSION; throw vpException(vpException::fatalError, ss_msg.str()); #endif } else if (detectorNameTmp == "FAST") { +#if ((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_FEATURES2D)) || ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_FEATURES)) cv::Ptr fastDetector = cv::FastFeatureDetector::create(); if (!usePyramid) { m_detectors[detectorNameTmp] = fastDetector; @@ -1824,8 +1841,14 @@ void vpKeyPoint::initDetector(const std::string &detectorName) else { m_detectors[detectorName] = cv::makePtr(fastDetector); } +#else + std::stringstream ss_msg; + ss_msg << "Failed to initialize the FAST 2D features detector with OpenCV version " << std::hex << VISP_HAVE_OPENCV_VERSION; + throw vpException(vpException::fatalError, ss_msg.str()); +#endif } else if (detectorNameTmp == "MSER") { +#if ((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_FEATURES2D)) || ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_FEATURES)) cv::Ptr fastDetector = cv::MSER::create(); if (!usePyramid) { m_detectors[detectorNameTmp] = fastDetector; @@ -1833,8 +1856,14 @@ void vpKeyPoint::initDetector(const std::string &detectorName) else { m_detectors[detectorName] = cv::makePtr(fastDetector); } +#else + std::stringstream ss_msg; + ss_msg << "Failed to initialize the MSER 2D features detector with OpenCV version " << std::hex << VISP_HAVE_OPENCV_VERSION; + throw vpException(vpException::fatalError, ss_msg.str()); +#endif } else if (detectorNameTmp == "ORB") { +#if ((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_FEATURES2D)) || ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_FEATURES)) cv::Ptr orbDetector; if (m_maxFeatures > 0) { orbDetector = cv::ORB::create(m_maxFeatures); @@ -1849,9 +1878,19 @@ void vpKeyPoint::initDetector(const std::string &detectorName) std::cerr << "You should not use ORB with Pyramid feature detection!" << std::endl; m_detectors[detectorName] = cv::makePtr(orbDetector); } +#else + std::stringstream ss_msg; + ss_msg << "Failed to initialize the ORB 2D features detector with OpenCV version " << std::hex << VISP_HAVE_OPENCV_VERSION; + throw vpException(vpException::fatalError, ss_msg.str()); +#endif } else if (detectorNameTmp == "BRISK") { +#if ((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_FEATURES2D)) || ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_XFEATURES2D)) +#if (VISP_HAVE_OPENCV_VERSION >= 0x050000) + cv::Ptr briskDetector = cv::xfeatures2d::BRISK::create(); +#else cv::Ptr briskDetector = cv::BRISK::create(); +#endif if (!usePyramid) { m_detectors[detectorNameTmp] = briskDetector; } @@ -1859,9 +1898,20 @@ void vpKeyPoint::initDetector(const std::string &detectorName) std::cerr << "You should not use BRISK with Pyramid feature detection!" << std::endl; m_detectors[detectorName] = cv::makePtr(briskDetector); } +#else + std::stringstream ss_msg; + + ss_msg << "Failed to initialize the BRISK 2D features detector with OpenCV version " << std::hex << VISP_HAVE_OPENCV_VERSION; + throw vpException(vpException::fatalError, ss_msg.str()); +#endif } else if (detectorNameTmp == "KAZE") { +#if ((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_FEATURES2D)) || ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_XFEATURES2D)) +#if (VISP_HAVE_OPENCV_VERSION >= 0x050000) + cv::Ptr kazeDetector = cv::xfeatures2d::KAZE::create(); +#else cv::Ptr kazeDetector = cv::KAZE::create(); +#endif if (!usePyramid) { m_detectors[detectorNameTmp] = kazeDetector; } @@ -1869,9 +1919,19 @@ void vpKeyPoint::initDetector(const std::string &detectorName) std::cerr << "You should not use KAZE with Pyramid feature detection!" << std::endl; m_detectors[detectorName] = cv::makePtr(kazeDetector); } +#else + std::stringstream ss_msg; + ss_msg << "Failed to initialize the KAZE 2D features detector with OpenCV version " << std::hex << VISP_HAVE_OPENCV_VERSION; + throw vpException(vpException::fatalError, ss_msg.str()); +#endif } else if (detectorNameTmp == "AKAZE") { +#if ((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_FEATURES2D)) || ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_XFEATURES2D)) +#if (VISP_HAVE_OPENCV_VERSION >= 0x050000) + cv::Ptr akazeDetector = cv::xfeatures2d::AKAZE::create(); +#else cv::Ptr akazeDetector = cv::AKAZE::create(); +#endif if (!usePyramid) { m_detectors[detectorNameTmp] = akazeDetector; } @@ -1879,8 +1939,14 @@ void vpKeyPoint::initDetector(const std::string &detectorName) std::cerr << "You should not use AKAZE with Pyramid feature detection!" << std::endl; m_detectors[detectorName] = cv::makePtr(akazeDetector); } +#else + std::stringstream ss_msg; + ss_msg << "Failed to initialize the AKAZE 2D features detector with OpenCV version " << std::hex << VISP_HAVE_OPENCV_VERSION; + throw vpException(vpException::fatalError, ss_msg.str()); +#endif } else if (detectorNameTmp == "GFTT") { +#if ((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_FEATURES2D)) || ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_FEATURES)) cv::Ptr gfttDetector = cv::GFTTDetector::create(); if (!usePyramid) { m_detectors[detectorNameTmp] = gfttDetector; @@ -1888,8 +1954,14 @@ void vpKeyPoint::initDetector(const std::string &detectorName) else { m_detectors[detectorName] = cv::makePtr(gfttDetector); } +#else + std::stringstream ss_msg; + ss_msg << "Failed to initialize the GFTT 2D features detector with OpenCV version " << std::hex << VISP_HAVE_OPENCV_VERSION; + throw vpException(vpException::fatalError, ss_msg.str()); +#endif } else if (detectorNameTmp == "SimpleBlob") { +#if ((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_FEATURES2D)) || ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_FEATURES)) cv::Ptr simpleBlobDetector = cv::SimpleBlobDetector::create(); if (!usePyramid) { m_detectors[detectorNameTmp] = simpleBlobDetector; @@ -1897,9 +1969,14 @@ void vpKeyPoint::initDetector(const std::string &detectorName) else { m_detectors[detectorName] = cv::makePtr(simpleBlobDetector); } +#else + std::stringstream ss_msg; + ss_msg << "Failed to initialize the SimpleBlob 2D features detector with OpenCV version " << std::hex << VISP_HAVE_OPENCV_VERSION; + throw vpException(vpException::fatalError, ss_msg.str()); +#endif } else if (detectorNameTmp == "STAR") { -#ifdef VISP_HAVE_OPENCV_XFEATURES2D +#if defined(HAVE_OPENCV_XFEATURES2D) cv::Ptr starDetector = cv::xfeatures2d::StarDetector::create(); if (!usePyramid) { m_detectors[detectorNameTmp] = starDetector; @@ -1909,23 +1986,31 @@ void vpKeyPoint::initDetector(const std::string &detectorName) } #else std::stringstream ss_msg; - ss_msg << "Fail to initialize the detector: STAR. OpenCV version " << std::hex << VISP_HAVE_OPENCV_VERSION - << " was not build with xFeatures2d module."; + ss_msg << "Failed to initialize the STAR 2D features detector with OpenCV version " << std::hex << VISP_HAVE_OPENCV_VERSION; throw vpException(vpException::fatalError, ss_msg.str()); #endif } else if (detectorNameTmp == "AGAST") { +#if ((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_FEATURES2D)) || ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_XFEATURES2D)) +#if (VISP_HAVE_OPENCV_VERSION >= 0x050000) + cv::Ptr agastDetector = cv::xfeatures2d::AgastFeatureDetector::create(); +#else cv::Ptr agastDetector = cv::AgastFeatureDetector::create(); +#endif if (!usePyramid) { m_detectors[detectorNameTmp] = agastDetector; } else { m_detectors[detectorName] = cv::makePtr(agastDetector); } +#else + std::stringstream ss_msg; + ss_msg << "Failed to initialize the STAR 2D features detector with OpenCV version " << std::hex << VISP_HAVE_OPENCV_VERSION; + throw vpException(vpException::fatalError, ss_msg.str()); +#endif } else if (detectorNameTmp == "MSD") { -#if (VISP_HAVE_OPENCV_VERSION >= 0x030100) -#if defined(VISP_HAVE_OPENCV_XFEATURES2D) +#if defined(HAVE_OPENCV_XFEATURES2D) cv::Ptr msdDetector = cv::xfeatures2d::MSDDetector::create(); if (!usePyramid) { m_detectors[detectorNameTmp] = msdDetector; @@ -1936,14 +2021,8 @@ void vpKeyPoint::initDetector(const std::string &detectorName) } #else std::stringstream ss_msg; - ss_msg << "Fail to initialize the detector: MSD. OpenCV version " << std::hex << VISP_HAVE_OPENCV_VERSION - << " was not build with xFeatures2d module."; + ss_msg << "Failed to initialize the MSD 2D features detector with OpenCV version " << std::hex << VISP_HAVE_OPENCV_VERSION; throw vpException(vpException::fatalError, ss_msg.str()); -#endif -#else - std::stringstream ss_msg; - ss_msg << "Feature " << detectorName << " is not available in OpenCV version: " << std::hex - << VISP_HAVE_OPENCV_VERSION << " (require >= OpenCV 3.1)."; #endif } else { @@ -1956,7 +2035,7 @@ void vpKeyPoint::initDetector(const std::string &detectorName) detectorInitialized = !m_detectors[detectorNameTmp].empty(); } else { - // if not null and to avoid warning C4800: forcing value to bool 'true' or 'false' (performance warning) + // if not null and to avoid warning C4800: forcing value to bool 'true' or 'false' (performance warning) detectorInitialized = !m_detectors[detectorName].empty(); } @@ -1982,131 +2061,128 @@ void vpKeyPoint::initExtractor(const std::string &extractorName) m_extractors[extractorName] = cv::DescriptorExtractor::create(extractorName); #else if (extractorName == "SIFT") { -#if (VISP_HAVE_OPENCV_VERSION >= 0x040500) // OpenCV >= 4.5.0 - m_extractors[extractorName] = cv::SIFT::create(); -#else -#if defined(VISP_HAVE_OPENCV_XFEATURES2D) || (VISP_HAVE_OPENCV_VERSION >= 0x030411 && CV_MAJOR_VERSION < 4) || \ - (VISP_HAVE_OPENCV_VERSION >= 0x040400) +#if ((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_XFEATURES2D)) || ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_FEATURES)) // SIFT is no more patented since 09/03/2020 -#if (VISP_HAVE_OPENCV_VERSION >= 0x030411 && CV_MAJOR_VERSION < 4) || (VISP_HAVE_OPENCV_VERSION >= 0x040400) +# if (VISP_HAVE_OPENCV_VERSION >= 0x030411) m_extractors[extractorName] = cv::SIFT::create(); -#else +# else m_extractors[extractorName] = cv::xfeatures2d::SIFT::create(); -#endif +# endif #else std::stringstream ss_msg; - ss_msg << "Fail to initialize the extractor: SIFT. OpenCV version " << std::hex << VISP_HAVE_OPENCV_VERSION - << " was not build with xFeatures2d module."; + ss_msg << "Fail to initialize the SIFT 2D features extractor with OpenCV version " << std::hex << VISP_HAVE_OPENCV_VERSION; throw vpException(vpException::fatalError, ss_msg.str()); -#endif #endif } else if (extractorName == "SURF") { -#ifdef VISP_HAVE_OPENCV_XFEATURES2D +#if defined(OPENCV_ENABLE_NONFREE) && defined(HAVE_OPENCV_XFEATURES2D) // Use extended set of SURF descriptors (128 instead of 64) m_extractors[extractorName] = cv::xfeatures2d::SURF::create(100, 4, 3, true); #else std::stringstream ss_msg; - ss_msg << "Fail to initialize the extractor: SURF. OpenCV version " << std::hex << VISP_HAVE_OPENCV_VERSION - << " was not build with xFeatures2d module."; + ss_msg << "Fail to initialize the SURF 2D features extractor with OpenCV version " << std::hex << VISP_HAVE_OPENCV_VERSION; throw vpException(vpException::fatalError, ss_msg.str()); #endif } else if (extractorName == "ORB") { +#if ((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_FEATURES2D)) || ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_FEATURES)) m_extractors[extractorName] = cv::ORB::create(); +#else + std::stringstream ss_msg; + ss_msg << "Fail to initialize the ORB 2D features extractor with OpenCV version " << std::hex << VISP_HAVE_OPENCV_VERSION; + throw vpException(vpException::fatalError, ss_msg.str()); +#endif } else if (extractorName == "BRISK") { +#if ((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_FEATURES2D)) || ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_XFEATURES2D)) +#if (VISP_HAVE_OPENCV_VERSION >= 0x050000) + m_extractors[extractorName] = cv::xfeatures2d::BRISK::create(); +#else m_extractors[extractorName] = cv::BRISK::create(); +#endif +#else + std::stringstream ss_msg; + ss_msg << "Fail to initialize the BRISK 2D features extractor with OpenCV version " << std::hex << VISP_HAVE_OPENCV_VERSION; + throw vpException(vpException::fatalError, ss_msg.str()); +#endif } else if (extractorName == "FREAK") { -#ifdef VISP_HAVE_OPENCV_XFEATURES2D +#if defined(HAVE_OPENCV_XFEATURES2D) m_extractors[extractorName] = cv::xfeatures2d::FREAK::create(); #else std::stringstream ss_msg; - ss_msg << "Fail to initialize the extractor: " << extractorName << ". OpenCV version " << std::hex - << VISP_HAVE_OPENCV_VERSION << " was not build with xFeatures2d module."; + ss_msg << "Fail to initialize the FREAK 2D features extractor with OpenCV version " << std::hex << VISP_HAVE_OPENCV_VERSION; throw vpException(vpException::fatalError, ss_msg.str()); #endif } else if (extractorName == "BRIEF") { -#ifdef VISP_HAVE_OPENCV_XFEATURES2D +#if defined(HAVE_OPENCV_XFEATURES2D) m_extractors[extractorName] = cv::xfeatures2d::BriefDescriptorExtractor::create(); #else std::stringstream ss_msg; - ss_msg << "Fail to initialize the extractor: " << extractorName << ". OpenCV version " << std::hex - << VISP_HAVE_OPENCV_VERSION << " was not build with xFeatures2d module."; + ss_msg << "Fail to initialize the BRIEF 2D features extractor with OpenCV version " << std::hex << VISP_HAVE_OPENCV_VERSION; throw vpException(vpException::fatalError, ss_msg.str()); #endif } else if (extractorName == "KAZE") { +#if ((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_FEATURES2D)) || ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_XFEATURES2D)) +#if (VISP_HAVE_OPENCV_VERSION >= 0x050000) + m_extractors[extractorName] = cv::xfeatures2d::KAZE::create(); +#else m_extractors[extractorName] = cv::KAZE::create(); +#endif +#else + std::stringstream ss_msg; + ss_msg << "Fail to initialize the KAZE 2D features extractor with OpenCV version " << std::hex << VISP_HAVE_OPENCV_VERSION; + throw vpException(vpException::fatalError, ss_msg.str()); +#endif } else if (extractorName == "AKAZE") { +#if ((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_FEATURES2D)) || ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_XFEATURES2D)) +#if (VISP_HAVE_OPENCV_VERSION >= 0x050000) + m_extractors[extractorName] = cv::xfeatures2d::AKAZE::create(); +#else m_extractors[extractorName] = cv::AKAZE::create(); - } - else if (extractorName == "DAISY") { -#ifdef VISP_HAVE_OPENCV_XFEATURES2D - m_extractors[extractorName] = cv::xfeatures2d::DAISY::create(); +#endif #else std::stringstream ss_msg; - ss_msg << "Fail to initialize the extractor: " << extractorName << ". OpenCV version " << std::hex - << VISP_HAVE_OPENCV_VERSION << " was not build with xFeatures2d module."; + ss_msg << "Fail to initialize the AKAZE 2D features extractor with OpenCV version " << std::hex << VISP_HAVE_OPENCV_VERSION; throw vpException(vpException::fatalError, ss_msg.str()); #endif } - else if (extractorName == "LATCH") { -#ifdef VISP_HAVE_OPENCV_XFEATURES2D - m_extractors[extractorName] = cv::xfeatures2d::LATCH::create(); + else if (extractorName == "DAISY") { +#if defined(HAVE_OPENCV_XFEATURES2D) + m_extractors[extractorName] = cv::xfeatures2d::DAISY::create(); #else std::stringstream ss_msg; - ss_msg << "Fail to initialize the extractor: " << extractorName << ". OpenCV version " << std::hex - << VISP_HAVE_OPENCV_VERSION << " was not build with xFeatures2d module."; + ss_msg << "Fail to initialize the DAISY 2D features extractor with OpenCV version " << std::hex << VISP_HAVE_OPENCV_VERSION; throw vpException(vpException::fatalError, ss_msg.str()); #endif } - else if (extractorName == "LUCID") { -#ifdef VISP_HAVE_OPENCV_XFEATURES2D - // m_extractors[extractorName] = cv::xfeatures2d::LUCID::create(1, 2); - // Not possible currently, need a color image - throw vpException(vpException::badValue, "Not possible currently as it needs a color image."); + else if (extractorName == "LATCH") { +#if defined(HAVE_OPENCV_XFEATURES2D) + m_extractors[extractorName] = cv::xfeatures2d::LATCH::create(); #else std::stringstream ss_msg; - ss_msg << "Fail to initialize the extractor: " << extractorName << ". OpenCV version " << std::hex - << VISP_HAVE_OPENCV_VERSION << " was not build with xFeatures2d module."; + ss_msg << "Fail to initialize the LATCH 2D features extractor with OpenCV version " << std::hex << VISP_HAVE_OPENCV_VERSION; throw vpException(vpException::fatalError, ss_msg.str()); #endif } else if (extractorName == "VGG") { -#if (VISP_HAVE_OPENCV_VERSION >= 0x030200) -#if defined(VISP_HAVE_OPENCV_XFEATURES2D) +#if (VISP_HAVE_OPENCV_VERSION >= 0x030200) && defined(HAVE_OPENCV_XFEATURES2D) m_extractors[extractorName] = cv::xfeatures2d::VGG::create(); #else std::stringstream ss_msg; - ss_msg << "Fail to initialize the extractor: " << extractorName << ". OpenCV version " << std::hex - << VISP_HAVE_OPENCV_VERSION << " was not build with xFeatures2d module."; - throw vpException(vpException::fatalError, ss_msg.str()); -#endif -#else - std::stringstream ss_msg; - ss_msg << "Fail to initialize the extractor: " << extractorName << ". OpenCV version " << std::hex - << VISP_HAVE_OPENCV_VERSION << " but requires at least OpenCV 3.2."; + ss_msg << "Fail to initialize the VGG 2D features extractor with OpenCV version " << std::hex << VISP_HAVE_OPENCV_VERSION; throw vpException(vpException::fatalError, ss_msg.str()); #endif } else if (extractorName == "BoostDesc") { -#if (VISP_HAVE_OPENCV_VERSION >= 0x030200) -#if defined(VISP_HAVE_OPENCV_XFEATURES2D) +#if (VISP_HAVE_OPENCV_VERSION >= 0x030200) && defined(HAVE_OPENCV_XFEATURES2D) m_extractors[extractorName] = cv::xfeatures2d::BoostDesc::create(); #else std::stringstream ss_msg; - ss_msg << "Fail to initialize the extractor: " << extractorName << ". OpenCV version " << std::hex - << VISP_HAVE_OPENCV_VERSION << " was not build with xFeatures2d module."; - throw vpException(vpException::fatalError, ss_msg.str()); -#endif -#else - std::stringstream ss_msg; - ss_msg << "Fail to initialize the extractor: " << extractorName << ". OpenCV version " << std::hex - << VISP_HAVE_OPENCV_VERSION << " but requires at least OpenCV 3.2."; + ss_msg << "Fail to initialize the BoostDesc 2D features extractor with OpenCV version " << std::hex << VISP_HAVE_OPENCV_VERSION; throw vpException(vpException::fatalError, ss_msg.str()); #endif } @@ -2155,60 +2231,65 @@ void vpKeyPoint::initExtractors(const std::vector &extractorNames) void vpKeyPoint::initFeatureNames() { // Create map enum to string -#if (VISP_HAVE_OPENCV_VERSION >= 0x020403) +#if ((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_FEATURES2D)) || ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_FEATURES)) m_mapOfDetectorNames[DETECTOR_FAST] = "FAST"; m_mapOfDetectorNames[DETECTOR_MSER] = "MSER"; m_mapOfDetectorNames[DETECTOR_ORB] = "ORB"; - m_mapOfDetectorNames[DETECTOR_BRISK] = "BRISK"; m_mapOfDetectorNames[DETECTOR_GFTT] = "GFTT"; m_mapOfDetectorNames[DETECTOR_SimpleBlob] = "SimpleBlob"; -#if (VISP_HAVE_OPENCV_VERSION < 0x030000) || (defined(VISP_HAVE_OPENCV_XFEATURES2D)) - m_mapOfDetectorNames[DETECTOR_STAR] = "STAR"; -#endif -#if defined(VISP_HAVE_OPENCV_NONFREE) || defined(VISP_HAVE_OPENCV_XFEATURES2D) || \ - (VISP_HAVE_OPENCV_VERSION >= 0x030411 && CV_MAJOR_VERSION < 4) || (VISP_HAVE_OPENCV_VERSION >= 0x040400) - m_mapOfDetectorNames[DETECTOR_SIFT] = "SIFT"; -#endif -#if defined(VISP_HAVE_OPENCV_NONFREE) || defined(VISP_HAVE_OPENCV_XFEATURES2D) - m_mapOfDetectorNames[DETECTOR_SURF] = "SURF"; #endif +#if ((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_FEATURES2D)) || ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_XFEATURES2D)) + m_mapOfDetectorNames[DETECTOR_BRISK] = "BRISK"; #if (VISP_HAVE_OPENCV_VERSION >= 0x030000) m_mapOfDetectorNames[DETECTOR_KAZE] = "KAZE"; m_mapOfDetectorNames[DETECTOR_AKAZE] = "AKAZE"; m_mapOfDetectorNames[DETECTOR_AGAST] = "AGAST"; #endif -#if (VISP_HAVE_OPENCV_VERSION >= 0x030100) && defined(VISP_HAVE_OPENCV_XFEATURES2D) +#endif +#if defined(HAVE_OPENCV_XFEATURES2D) + m_mapOfDetectorNames[DETECTOR_STAR] = "STAR"; m_mapOfDetectorNames[DETECTOR_MSD] = "MSD"; #endif +#if ((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_XFEATURES2D)) || ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_FEATURES)) + m_mapOfDetectorNames[DETECTOR_SIFT] = "SIFT"; +#endif +#if defined(OPENCV_ENABLE_NONFREE) && defined(HAVE_OPENCV_XFEATURES2D) + m_mapOfDetectorNames[DETECTOR_SURF] = "SURF"; +#endif +#if defined(HAVE_OPENCV_XFEATURES2D) + m_mapOfDetectorNames[DETECTOR_MSD] = "MSD"; #endif -#if (VISP_HAVE_OPENCV_VERSION >= 0x020403) +#if ((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_FEATURES2D)) || ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_FEATURES)) m_mapOfDescriptorNames[DESCRIPTOR_ORB] = "ORB"; +#endif +#if ((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_FEATURES2D)) || ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_XFEATURES2D)) m_mapOfDescriptorNames[DESCRIPTOR_BRISK] = "BRISK"; -#if (VISP_HAVE_OPENCV_VERSION < 0x030000) || (defined(VISP_HAVE_OPENCV_XFEATURES2D)) +#endif +#if defined(HAVE_OPENCV_XFEATURES2D) m_mapOfDescriptorNames[DESCRIPTOR_FREAK] = "FREAK"; m_mapOfDescriptorNames[DESCRIPTOR_BRIEF] = "BRIEF"; #endif -#if defined(VISP_HAVE_OPENCV_NONFREE) || defined(VISP_HAVE_OPENCV_XFEATURES2D) || \ - (VISP_HAVE_OPENCV_VERSION >= 0x030411 && CV_MAJOR_VERSION < 4) || (VISP_HAVE_OPENCV_VERSION >= 0x040400) +#if ((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_XFEATURES2D)) || ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_FEATURES)) m_mapOfDescriptorNames[DESCRIPTOR_SIFT] = "SIFT"; #endif -#if defined(VISP_HAVE_OPENCV_NONFREE) || defined(VISP_HAVE_OPENCV_XFEATURES2D) +#if defined(OPENCV_ENABLE_NONFREE) && defined(HAVE_OPENCV_XFEATURES2D) m_mapOfDescriptorNames[DESCRIPTOR_SURF] = "SURF"; #endif +#if ((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_FEATURES2D)) || ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_XFEATURES2D)) #if (VISP_HAVE_OPENCV_VERSION >= 0x030000) m_mapOfDescriptorNames[DESCRIPTOR_KAZE] = "KAZE"; m_mapOfDescriptorNames[DESCRIPTOR_AKAZE] = "AKAZE"; -#if defined(VISP_HAVE_OPENCV_XFEATURES2D) +#endif +#endif +#if defined(HAVE_OPENCV_XFEATURES2D) m_mapOfDescriptorNames[DESCRIPTOR_DAISY] = "DAISY"; m_mapOfDescriptorNames[DESCRIPTOR_LATCH] = "LATCH"; #endif -#endif -#if (VISP_HAVE_OPENCV_VERSION >= 0x030200) && defined(VISP_HAVE_OPENCV_XFEATURES2D) +#if (VISP_HAVE_OPENCV_VERSION >= 0x030200) && defined(HAVE_OPENCV_XFEATURES2D) m_mapOfDescriptorNames[DESCRIPTOR_VGG] = "VGG"; m_mapOfDescriptorNames[DESCRIPTOR_BoostDesc] = "BoostDesc"; #endif -#endif } void vpKeyPoint::initMatcher(const std::string &matcherName) @@ -4211,7 +4292,11 @@ void vpKeyPoint::PyramidAdaptedFeatureDetector::detectImpl(const cv::Mat &image, src = dst; if (!mask.empty()) +#if (VISP_HAVE_OPENCV_VERSION >= 0x050000) + resize(dilated_mask, src_mask, src.size(), 0, 0, cv::INTER_AREA); +#else resize(dilated_mask, src_mask, src.size(), 0, 0, CV_INTER_AREA); +#endif } } diff --git a/modules/vision/src/pose-estimation/vpPoseRansac.cpp b/modules/vision/src/pose-estimation/vpPoseRansac.cpp index eefbe8cb92..670474ce82 100644 --- a/modules/vision/src/pose-estimation/vpPoseRansac.cpp +++ b/modules/vision/src/pose-estimation/vpPoseRansac.cpp @@ -480,7 +480,6 @@ bool vpPose::poseRansac(vpHomogeneousMatrix &cMo, FuncCheckValidityPose func) best_consensus = sequentialRansac.getBestConsensus(); } } - if (foundSolution) { const unsigned int nbMinRandom = 4; diff --git a/modules/vision/test/keypoint-with-dataset/testKeyPoint-2.cpp b/modules/vision/test/keypoint-with-dataset/testKeyPoint-2.cpp index 778e60eef0..0296d9d050 100644 --- a/modules/vision/test/keypoint-with-dataset/testKeyPoint-2.cpp +++ b/modules/vision/test/keypoint-with-dataset/testKeyPoint-2.cpp @@ -41,14 +41,13 @@ #include -#if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_FEATURES2D) && defined(HAVE_OPENCV_VIDEO) +#if defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO) && \ + ((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_CALIB3D) && defined(HAVE_OPENCV_FEATURES2D)) || \ + ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_3D) && defined(HAVE_OPENCV_FEATURES)) #include #include -#include -#include -#include -#include +#include #include #include #include @@ -169,19 +168,15 @@ void run_test(const std::string &env_ipath, bool opt_click_allowed, bool opt_dis vpImageIo::read(I, filenameRef); std::string filenameCur = vpIoTools::createFilePath(dirname, "image%04d." + ext); -#if defined(VISP_HAVE_X11) - vpDisplayX display; -#elif defined(VISP_HAVE_GTK) - vpDisplayGTK display; -#elif defined(VISP_HAVE_GDI) - vpDisplayGDI display; -#elif defined(HAVE_OPENCV_HIGHGUI) - vpDisplayOpenCV display; -#endif + vpDisplay *display = nullptr; if (opt_display) { - display.setDownScalingFactor(vpDisplay::SCALE_AUTO); - display.init(I, 0, 0, "ORB keypoints matching and pose estimation"); +#ifdef VISP_HAVE_DISPLAY + display = vpDisplayFactory::allocateDisplay(I, 0, 0, "ORB keypoints matching and pose estimation"); + display->setDownScalingFactor(vpDisplay::SCALE_AUTO); +#else + std::cout << "No image viewer is available..." << std::endl; +#endif } vpCameraParameters cam; @@ -321,21 +316,15 @@ void run_test(const std::string &env_ipath, bool opt_click_allowed, bool opt_dis g.open(I); g.acquire(I); -#if defined(VISP_HAVE_X11) - vpDisplayX display2; -#elif defined(VISP_HAVE_GTK) - vpDisplayGTK display2; -#elif defined(VISP_HAVE_GDI) - vpDisplayGDI display2; -#elif defined(HAVE_OPENCV_HIGHGUI) - vpDisplayOpenCV display2; -#endif + vpDisplay *display2 = nullptr; keypoints.createImageMatching(I, IMatching); if (opt_display) { - display2.setDownScalingFactor(vpDisplay::SCALE_AUTO); - display2.init(IMatching, 0, (int)I.getHeight() / vpDisplay::getDownScalingFactor(I) + 80, "IMatching"); +#ifdef VISP_HAVE_DISPLAY + display2 = vpDisplayFactory::allocateDisplay(IMatching, 0, (int)I.getHeight() / vpDisplay::getDownScalingFactor(I) + 30, "IMatching"); + display2->setDownScalingFactor(vpDisplay::SCALE_AUTO); +#endif } bool opt_click = false; @@ -424,6 +413,13 @@ void run_test(const std::string &env_ipath, bool opt_click_allowed, bool opt_dis } } + if (display) { + delete display; + } + if (display2) { + delete display2; + } + if (!times_vec.empty()) { std::cout << "Computation time, Mean: " << vpMath::getMean(times_vec) << " ms ; Median: " << vpMath::getMedian(times_vec) << " ms ; Std: " << vpMath::getStdev(times_vec) diff --git a/modules/vision/test/keypoint-with-dataset/testKeyPoint-3.cpp b/modules/vision/test/keypoint-with-dataset/testKeyPoint-3.cpp index f4c4d67076..5ebac247dd 100644 --- a/modules/vision/test/keypoint-with-dataset/testKeyPoint-3.cpp +++ b/modules/vision/test/keypoint-with-dataset/testKeyPoint-3.cpp @@ -43,16 +43,19 @@ #include -#if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_FEATURES2D) +#if defined(HAVE_OPENCV_IMGPROC) && (defined(HAVE_OPENCV_FEATURES2D) || defined(HAVE_OPENCV_FEATURES)) +#if defined(HAVE_OPENCV_FEATURES) +#include +#endif + +#if defined(HAVE_OPENCV_FEATURES2D) #include +#endif #include #include -#include -#include -#include -#include +#include #include #include #include @@ -192,19 +195,15 @@ void run_test(const std::string &env_ipath, bool opt_click_allowed, bool opt_dis Imatch.resize(Icur.getHeight(), 2 * Icur.getWidth()); Imatch.insert(Iref, vpImagePoint(0, 0)); -#if defined(VISP_HAVE_X11) - vpDisplayX display; -#elif defined(VISP_HAVE_GTK) - vpDisplayGTK display; -#elif defined(VISP_HAVE_GDI) - vpDisplayGDI display; -#elif defined(HAVE_OPENCV_HIGHGUI) - vpDisplayOpenCV display; -#endif + vpDisplay *display = nullptr; if (opt_display) { - display.setDownScalingFactor(vpDisplay::SCALE_AUTO); - display.init(Imatch, 0, 0, "ORB keypoints matching"); +#ifdef VISP_HAVE_DISPLAY + display = vpDisplayFactory::allocateDisplay(Imatch, 0, 0, "ORB keypoints matching"); + display->setDownScalingFactor(vpDisplay::SCALE_AUTO); +#else + std::cout << "No image viewer is available..." << std::endl; +#endif } bool opt_click = false; @@ -269,6 +268,10 @@ void run_test(const std::string &env_ipath, bool opt_click_allowed, bool opt_dis } } } + + if (display) { + delete display; + } } int main(int argc, const char **argv) diff --git a/modules/vision/test/keypoint-with-dataset/testKeyPoint-4.cpp b/modules/vision/test/keypoint-with-dataset/testKeyPoint-4.cpp index 94d69d74d6..98baa5e3f7 100644 --- a/modules/vision/test/keypoint-with-dataset/testKeyPoint-4.cpp +++ b/modules/vision/test/keypoint-with-dataset/testKeyPoint-4.cpp @@ -43,15 +43,14 @@ #include -#if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_FEATURES2D) +#if defined(HAVE_OPENCV_IMGPROC) && \ + ((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_CALIB3D) && defined(HAVE_OPENCV_FEATURES2D)) || \ + ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_3D) && defined(HAVE_OPENCV_FEATURES)) #include #include #include -#include -#include -#include -#include +#include #include #include #include @@ -151,7 +150,7 @@ bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display) template void run_test(const std::string &env_ipath, bool opt_click_allowed, bool opt_display, vpImage &I, - vpImage &Imatch, vpImage &Iref) + vpImage &Imatch, vpImage &Iref) { #if VISP_HAVE_DATASET_VERSION >= 0x030600 std::string ext("png"); @@ -167,23 +166,20 @@ void run_test(const std::string &env_ipath, bool opt_click_allowed, bool opt_dis Iref = I; std::string filenameCur = vpIoTools::createFilePath(dirname, "image%04d." + ext); -#if defined(VISP_HAVE_X11) - vpDisplayX display, display2; -#elif defined(VISP_HAVE_GTK) - vpDisplayGTK display, display2; -#elif defined(VISP_HAVE_GDI) - vpDisplayGDI display, display2; -#elif defined(HAVE_OPENCV_HIGHGUI) - vpDisplayOpenCV display, display2; -#endif + vpDisplay *display = nullptr, *display2 = nullptr; if (opt_display) { - display.setDownScalingFactor(vpDisplay::SCALE_AUTO); - display.init(I, 0, 0, "ORB keypoints matching"); Imatch.resize(I.getHeight(), 2 * I.getWidth()); Imatch.insert(I, vpImagePoint(0, 0)); - display2.setDownScalingFactor(vpDisplay::SCALE_AUTO); - display2.init(Imatch, 0, (int)I.getHeight() / vpDisplay::getDownScalingFactor(I) + 70, "ORB keypoints matching"); + +#ifdef VISP_HAVE_DISPLAY + display = vpDisplayFactory::allocateDisplay(I, 0, 0, "ORB keypoints matching"); + display->setDownScalingFactor(vpDisplay::SCALE_AUTO); + display2 = vpDisplayFactory::allocateDisplay(Imatch, 0, (int)I.getHeight() / vpDisplay::getDownScalingFactor(I) + 40, "ORB keypoints matching"); + display2->setDownScalingFactor(vpDisplay::SCALE_AUTO); +#else + std::cout << "No image viewer is available..." << std::endl; +#endif } vpCameraParameters cam; @@ -240,6 +236,7 @@ void run_test(const std::string &env_ipath, bool opt_click_allowed, bool opt_dis cv::Ptr extractor; cv::Ptr matcher; +#if ((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_FEATURES2D)) || ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_FEATURES)) #if (VISP_HAVE_OPENCV_VERSION >= 0x030000) detector = cv::ORB::create(500, 1.2f, 1); extractor = cv::ORB::create(500, 1.2f, 1); @@ -247,11 +244,8 @@ void run_test(const std::string &env_ipath, bool opt_click_allowed, bool opt_dis detector = cv::FeatureDetector::create("ORB"); extractor = cv::DescriptorExtractor::create("ORB"); #endif - matcher = cv::DescriptorMatcher::create("BruteForce-Hamming"); - -#if (VISP_HAVE_OPENCV_VERSION >= 0x020400 && VISP_HAVE_OPENCV_VERSION < 0x030000) - detector->set("nLevels", 1); #endif + matcher = cv::DescriptorMatcher::create("BruteForce-Hamming"); // Detect keypoints on the current image std::vector trainKeyPoints; @@ -286,7 +280,7 @@ void run_test(const std::string &env_ipath, bool opt_click_allowed, bool opt_dis bool opt_click = false; vpMouseButton::vpMouseButtonType button; - while ((opt_display && !g.end()) || (!opt_display && g.getFrameIndex() < 30)) { + while (g.getFrameIndex() < 30) { g.acquire(I); vpImageConvert::convert(I, matImg); @@ -326,12 +320,16 @@ void run_test(const std::string &env_ipath, bool opt_click_allowed, bool opt_dis bool is_pose_estimated = false; if (estimated_pose.npt >= 4) { try { - unsigned int nb_inliers = (unsigned int)(0.6 * estimated_pose.npt); + unsigned int nb_inliers = static_cast(0.7 * estimated_pose.npt); estimated_pose.setRansacNbInliersToReachConsensus(nb_inliers); - estimated_pose.setRansacThreshold(0.01); + estimated_pose.setRansacThreshold(0.001); estimated_pose.setRansacMaxTrials(500); - estimated_pose.computePose(vpPose::RANSAC, cMo); - is_pose_estimated = true; + if (estimated_pose.computePose(vpPose::RANSAC, cMo)) { + is_pose_estimated = true; // success + } + else { + is_pose_estimated = false; + } } catch (...) { is_pose_estimated = false; @@ -381,6 +379,13 @@ void run_test(const std::string &env_ipath, bool opt_click_allowed, bool opt_dis } } } + + if (display) { + delete display; + } + if (display2) { + delete display2; + } } int main(int argc, const char **argv) diff --git a/modules/vision/test/keypoint-with-dataset/testKeyPoint-5.cpp b/modules/vision/test/keypoint-with-dataset/testKeyPoint-5.cpp index 8321466188..486cc1ef3c 100644 --- a/modules/vision/test/keypoint-with-dataset/testKeyPoint-5.cpp +++ b/modules/vision/test/keypoint-with-dataset/testKeyPoint-5.cpp @@ -43,14 +43,13 @@ #include -#if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_FEATURES2D) && defined(HAVE_OPENCV_VIDEO) +#if defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO) && \ + ((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_CALIB3D) && defined(HAVE_OPENCV_FEATURES2D)) || \ + ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_3D) && defined(HAVE_OPENCV_FEATURES)) #include #include -#include -#include -#include -#include +#include #include #include #include @@ -158,64 +157,65 @@ void run_test(const std::string &env_ipath, bool opt_click_allowed, bool opt_dis vpImageIo::read(Iinput, filename); Iinput.halfSizeImage(I); -#if defined(VISP_HAVE_X11) - vpDisplayX display; -#elif defined(VISP_HAVE_GTK) - vpDisplayGTK display; -#elif defined(VISP_HAVE_GDI) - vpDisplayGDI display; -#elif defined(HAVE_OPENCV_HIGHGUI) - vpDisplayOpenCV display; -#endif + vpDisplay *display = nullptr; if (opt_display) { - display.init(I, 0, 0, "KeyPoints detection."); +#ifdef VISP_HAVE_DISPLAY + display = vpDisplayFactory::allocateDisplay(I, 0, 0, "KeyPoints detection."); +#else + std::cout << "No image viewer is available..." << std::endl; +#endif } // Here, we want to test feature detection on a pyramid of images even for // features that are scale invariant to detect potential problem in ViSP. std::cout << "INFORMATION: " << std::endl; std::cout << "Here, we want to test feature detection on a pyramid of images even for features " - "that are scale invariant to detect potential problem in ViSP." - << std::endl + << "that are scale invariant to detect potential problem in ViSP." << std::endl << std::endl; vpKeyPoint keyPoints; // Will test the different types of keypoints detection to see if there is // a problem between OpenCV versions, modules or constructors std::vector detectorNames; +#if ((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_FEATURES2D)) || ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_FEATURES)) detectorNames.push_back("PyramidFAST"); detectorNames.push_back("FAST"); +#endif +#if ((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_FEATURES2D)) || ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_FEATURES)) detectorNames.push_back("PyramidMSER"); detectorNames.push_back("MSER"); detectorNames.push_back("PyramidGFTT"); detectorNames.push_back("GFTT"); detectorNames.push_back("PyramidSimpleBlob"); detectorNames.push_back("SimpleBlob"); -// In contrib modules -#if (VISP_HAVE_OPENCV_VERSION < 0x030000) || defined(VISP_HAVE_OPENCV_XFEATURES2D) +#endif + + // In contrib modules +#if defined(HAVE_OPENCV_XFEATURES2D) detectorNames.push_back("PyramidSTAR"); detectorNames.push_back("STAR"); #endif +#if ((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_FEATURES2D)) || ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_FEATURES)) + detectorNames.push_back("PyramidORB"); + detectorNames.push_back("ORB"); +#endif +#if ((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_FEATURES2D)) || ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_XFEATURES2D)) #if (VISP_HAVE_OPENCV_VERSION >= 0x030000) detectorNames.push_back("PyramidAGAST"); detectorNames.push_back("AGAST"); #endif - detectorNames.push_back("PyramidORB"); - detectorNames.push_back("ORB"); -#if (VISP_HAVE_OPENCV_VERSION >= 0x020403) detectorNames.push_back("PyramidBRISK"); detectorNames.push_back("BRISK"); -#endif #if (VISP_HAVE_OPENCV_VERSION >= 0x030000) detectorNames.push_back("PyramidKAZE"); detectorNames.push_back("KAZE"); detectorNames.push_back("PyramidAKAZE"); detectorNames.push_back("AKAZE"); #endif +#endif -#if defined(VISP_HAVE_OPENCV_NONFREE) || defined(VISP_HAVE_OPENCV_XFEATURES2D) || \ - (VISP_HAVE_OPENCV_VERSION >= 0x030411 && CV_MAJOR_VERSION < 4) || (VISP_HAVE_OPENCV_VERSION >= 0x040400) +#if ((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_XFEATURES2D)) || ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_FEATURES)) #if (VISP_HAVE_OPENCV_VERSION != 0x040504) && (VISP_HAVE_OPENCV_VERSION != 0x040505) && \ (VISP_HAVE_OPENCV_VERSION != 0x040600) && (VISP_HAVE_OPENCV_VERSION != 0x040700) && \ (VISP_HAVE_OPENCV_VERSION != 0x040900) && (VISP_HAVE_OPENCV_VERSION != 0x040A00) && \ @@ -228,7 +228,7 @@ void run_test(const std::string &env_ipath, bool opt_click_allowed, bool opt_dis detectorNames.push_back("SIFT"); #endif #endif -#if defined(VISP_HAVE_OPENCV_NONFREE) || defined(VISP_HAVE_OPENCV_XFEATURES2D) +#if defined(OPENCV_ENABLE_NONFREE) && defined(HAVE_OPENCV_XFEATURES2D) detectorNames.push_back("PyramidSURF"); detectorNames.push_back("SURF"); #endif @@ -268,8 +268,7 @@ void run_test(const std::string &env_ipath, bool opt_click_allowed, bool opt_dis std::map mapOfDetectorNames = keyPoints.getDetectorNames(); for (int i = 0; i < vpKeyPoint::DETECTOR_TYPE_SIZE; i++) { -#if defined(VISP_HAVE_OPENCV_NONFREE) || defined(VISP_HAVE_OPENCV_XFEATURES2D) || \ - (VISP_HAVE_OPENCV_VERSION >= 0x030411 && CV_MAJOR_VERSION < 4) || (VISP_HAVE_OPENCV_VERSION >= 0x040400) +#if ((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_XFEATURES2D)) || ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_FEATURES)) #if ((VISP_HAVE_OPENCV_VERSION == 0x040504) || (VISP_HAVE_OPENCV_VERSION == 0x040505) || \ (VISP_HAVE_OPENCV_VERSION == 0x040600) || (VISP_HAVE_OPENCV_VERSION == 0x040700) || \ (VISP_HAVE_OPENCV_VERSION == 0x040900) || (VISP_HAVE_OPENCV_VERSION == 0x040A00)) && \ @@ -314,6 +313,10 @@ void run_test(const std::string &env_ipath, bool opt_click_allowed, bool opt_dis } } } + + if (display) { + delete display; + } } int main(int argc, const char **argv) diff --git a/modules/vision/test/keypoint-with-dataset/testKeyPoint-6.cpp b/modules/vision/test/keypoint-with-dataset/testKeyPoint-6.cpp index 2b5471617a..1a961b41fb 100644 --- a/modules/vision/test/keypoint-with-dataset/testKeyPoint-6.cpp +++ b/modules/vision/test/keypoint-with-dataset/testKeyPoint-6.cpp @@ -41,14 +41,13 @@ #include -#if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_FEATURES2D) && defined(HAVE_OPENCV_VIDEO) +#if defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO) && \ + ((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_CALIB3D) && defined(HAVE_OPENCV_FEATURES2D)) || \ + ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_3D) && defined(HAVE_OPENCV_FEATURES)) #include #include -#include -#include -#include -#include +#include #include #include #include @@ -203,54 +202,50 @@ void run_test(const std::string &env_ipath, bool opt_click_allowed, bool opt_dis vpImageIo::read(Iinput, filename); Iinput.quarterSizeImage(I); -#if defined(VISP_HAVE_X11) - vpDisplayX display; -#elif defined(VISP_HAVE_GTK) - vpDisplayGTK display; -#elif defined(VISP_HAVE_GDI) - vpDisplayGDI display; -#elif defined(HAVE_OPENCV_HIGHGUI) - vpDisplayOpenCV display; -#endif + vpDisplay *display = nullptr; if (opt_display) { - display.init(I, 0, 0, "KeyPoints detection."); +#ifdef VISP_HAVE_DISPLAY + display = vpDisplayFactory::allocateDisplay(I, 0, 0, "KeyPoints detection."); +#else + std::cout << "No image viewer is available..." << std::endl; +#endif } vpKeyPoint keyPoints; std::vector descriptorNames; -#if defined(VISP_HAVE_OPENCV_NONFREE) || defined(VISP_HAVE_OPENCV_XFEATURES2D) || \ - (VISP_HAVE_OPENCV_VERSION >= 0x030411 && CV_MAJOR_VERSION < 4) || (VISP_HAVE_OPENCV_VERSION >= 0x040400) +#if ((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_XFEATURES2D)) || ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_FEATURES)) descriptorNames.push_back("SIFT"); #endif -#if defined(VISP_HAVE_OPENCV_NONFREE) || defined(VISP_HAVE_OPENCV_XFEATURES2D) +#if defined(HAVE_OPENCV_NONFREE) || defined(HAVE_OPENCV_XFEATURES2D) descriptorNames.push_back("SURF"); #endif +#if ((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_FEATURES2D)) || ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_FEATURES)) descriptorNames.push_back("ORB"); -#if (VISP_HAVE_OPENCV_VERSION >= 0x020403) +#endif +#if ((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_FEATURES2D)) || ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_XFEATURES2D)) descriptorNames.push_back("BRISK"); #endif -#if defined(VISP_HAVE_OPENCV_XFEATURES2D) || (VISP_HAVE_OPENCV_VERSION < 0x030000) +#if defined(HAVE_OPENCV_XFEATURES2D) descriptorNames.push_back("BRIEF"); -#if (VISP_HAVE_OPENCV_VERSION >= 0x020402) descriptorNames.push_back("FREAK"); -#endif -#endif -#if defined(VISP_HAVE_OPENCV_XFEATURES2D) descriptorNames.push_back("DAISY"); descriptorNames.push_back("LATCH"); #endif -#if (VISP_HAVE_OPENCV_VERSION >= 0x030200) && defined(VISP_HAVE_OPENCV_XFEATURES2D) +#if (VISP_HAVE_OPENCV_VERSION >= 0x030200) && defined(HAVE_OPENCV_XFEATURES2D) descriptorNames.push_back("VGG"); descriptorNames.push_back("BoostDesc"); #endif +#if ((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_FEATURES2D)) || ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_XFEATURES2D)) #if (VISP_HAVE_OPENCV_VERSION >= 0x030000) descriptorNames.push_back("KAZE"); descriptorNames.push_back("AKAZE"); #endif - +#endif +#if ((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_FEATURES2D)) || ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_FEATURES)) std::string detectorName = "FAST"; +#endif keyPoints.setDetector(detectorName); std::vector kpts; @@ -288,7 +283,7 @@ void run_test(const std::string &env_ipath, bool opt_click_allowed, bool opt_dis } } else if (*itd == "BoostDesc") { -#if (VISP_HAVE_OPENCV_VERSION >= 0x030200) && defined(VISP_HAVE_OPENCV_XFEATURES2D) +#if (VISP_HAVE_OPENCV_VERSION >= 0x030200) && defined(HAVE_OPENCV_XFEATURES2D) cv::Ptr boostDesc = keyPoints.getExtractor("BoostDesc"); // Init BIN BOOST descriptor for FAST keypoints boostDesc = cv::xfeatures2d::BoostDesc::create(cv::xfeatures2d::BoostDesc::BINBOOST_256, true, 5.0f); @@ -357,7 +352,7 @@ void run_test(const std::string &env_ipath, bool opt_click_allowed, bool opt_dis } } else if (mapOfDescriptorNames[(vpKeyPoint::vpFeatureDescriptorType)i] == "BoostDesc") { -#if (VISP_HAVE_OPENCV_VERSION >= 0x030200) && defined(VISP_HAVE_OPENCV_XFEATURES2D) +#if (VISP_HAVE_OPENCV_VERSION >= 0x030200) && defined(HAVE_OPENCV_XFEATURES2D) detectorName = "FAST"; keyPoints.setDetector(detectorName); keyPoints.detect(I, kpts); @@ -407,6 +402,9 @@ void run_test(const std::string &env_ipath, bool opt_click_allowed, bool opt_dis } } } + if (display) { + delete display; + } } int main(int argc, const char **argv) diff --git a/modules/vision/test/keypoint-with-dataset/testKeyPoint-7.cpp b/modules/vision/test/keypoint-with-dataset/testKeyPoint-7.cpp index eba90a7573..d81d1d3736 100644 --- a/modules/vision/test/keypoint-with-dataset/testKeyPoint-7.cpp +++ b/modules/vision/test/keypoint-with-dataset/testKeyPoint-7.cpp @@ -42,7 +42,9 @@ #include -#if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_FEATURES2D) && defined(HAVE_OPENCV_VIDEO) +#if defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO) && \ + ((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_CALIB3D) && defined(HAVE_OPENCV_FEATURES2D)) || \ + ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_3D) && defined(HAVE_OPENCV_FEATURES)) #include #include @@ -466,10 +468,8 @@ template void run_test(const std::string &env_ipath, const std:: std::cout << "Saving / loading learning files with binary descriptor are ok !" << std::endl; } -// Test with floating point descriptor -#if defined(VISP_HAVE_OPENCV_NONFREE) || \ - ((VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(VISP_HAVE_OPENCV_XFEATURES2D) || \ - (VISP_HAVE_OPENCV_VERSION >= 0x030411 && CV_MAJOR_VERSION < 4) || (VISP_HAVE_OPENCV_VERSION >= 0x040400)) + // Test with floating point descriptor +#if ((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_XFEATURES2D)) || ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_FEATURES)) { #if (VISP_HAVE_OPENCV_VERSION != 0x040504) && (VISP_HAVE_OPENCV_VERSION != 0x040505) && \ (VISP_HAVE_OPENCV_VERSION != 0x040600) && (VISP_HAVE_OPENCV_VERSION != 0x040700) && \ diff --git a/modules/vision/test/keypoint-with-dataset/testKeyPoint.cpp b/modules/vision/test/keypoint-with-dataset/testKeyPoint.cpp index 5278fe739e..7692432e95 100644 --- a/modules/vision/test/keypoint-with-dataset/testKeyPoint.cpp +++ b/modules/vision/test/keypoint-with-dataset/testKeyPoint.cpp @@ -41,14 +41,13 @@ #include -#if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_FEATURES2D) && defined(HAVE_OPENCV_VIDEO) +#if defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_VIDEO) && \ + ((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_CALIB3D) && defined(HAVE_OPENCV_FEATURES2D)) || \ + ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_3D) && defined(HAVE_OPENCV_FEATURES)) #include #include -#include -#include -#include -#include +#include #include #include #include @@ -75,24 +74,23 @@ bool getOptions(int argc, const char **argv, bool &click_allowed, bool &display) void usage(const char *name, const char *badparam) { fprintf(stdout, "\n\ - Test keypoints matching.\n\ - \n\ - SYNOPSIS\n\ - %s [-c] [-d] [-h]\n", - name); + Test keypoints matching.\n\ + \n\ + SYNOPSIS\n\ + %s [-c] [-d] [-h]\n", name); fprintf(stdout, "\n\ - OPTIONS: \n\ - \n\ - -c\n\ - Disable the mouse click. Useful to automate the \n\ - execution of this program without human intervention.\n\ - \n\ - -d \n\ - Turn off the display.\n\ - \n\ - -h\n\ - Print the help.\n"); + OPTIONS: \n\ + \n\ + -c\n\ + Disable the mouse click. Useful to automate the \n\ + execution of this program without human intervention.\n\ + \n\ + -d \n\ + Turn off the display.\n\ + \n\ + -h\n\ + Print the help.\n"); if (badparam) fprintf(stdout, "\nERROR: Bad parameter [%s]\n", badparam); @@ -174,19 +172,15 @@ void run_test(const std::string &env_ipath, bool opt_click_allowed, bool opt_dis Imatch.resize(Icur.getHeight(), 2 * Icur.getWidth()); Imatch.insert(Iref, vpImagePoint(0, 0)); -#if defined(VISP_HAVE_X11) - vpDisplayX display; -#elif defined(VISP_HAVE_GTK) - vpDisplayGTK display; -#elif defined(VISP_HAVE_GDI) - vpDisplayGDI display; -#elif defined(HAVE_OPENCV_HIGHGUI) - vpDisplayOpenCV display; -#endif + vpDisplay *display = nullptr; if (opt_display) { - display.setDownScalingFactor(vpDisplay::SCALE_AUTO); - display.init(Imatch, 0, 0, "ORB keypoints matching"); +#ifdef VISP_HAVE_DISPLAY + display = vpDisplayFactory::allocateDisplay(Imatch, 0, 0, "ORB keypoints matching"); + display->setDownScalingFactor(vpDisplay::SCALE_AUTO); +#else + std::cout << "No image viewer is available..." << std::endl; +#endif } bool opt_click = false; @@ -217,7 +211,7 @@ void run_test(const std::string &env_ipath, bool opt_click_allowed, bool opt_dis } } else { - // Use right click to enable/disable step by step tracking + // Use right click to enable/disable step by step tracking if (vpDisplay::getClick(Imatch, button, false)) { if (button == vpMouseButton::button3) { opt_click = true; @@ -229,6 +223,10 @@ void run_test(const std::string &env_ipath, bool opt_click_allowed, bool opt_dis } } } + + if (display) { + delete display; + } } int main(int argc, const char **argv) diff --git a/modules/visual_features/test/feature/catchLuminanceMapping.cpp b/modules/visual_features/test/feature/catchLuminanceMapping.cpp index c8282a90cf..f0af70125b 100644 --- a/modules/visual_features/test/feature/catchLuminanceMapping.cpp +++ b/modules/visual_features/test/feature/catchLuminanceMapping.cpp @@ -37,16 +37,17 @@ * \example catchLuminanceMapping.cpp */ -#include - -#include +#include -#include -#include #if defined(VISP_HAVE_CATCH2) #include +#include +#include +#include +#include + #ifdef ENABLE_VISP_NAMESPACE using namespace VISP_NAMESPACE_NAME; #endif @@ -314,103 +315,97 @@ SCENARIO("Using DCT features", "[visual_features]") { GIVEN("A matrix") { - std::vector> data = { + vpMatrix M1({ + {0.0, 1.0, 2.0}, + {3.0, 4.0, 5.0}, + {6.0, 7.0, 8.0} + }); + vpColVector v( + { 0.0, 1.0, 3.0, 6.0, 4.0, 2.0, 5.0, 7.0, 8.0 } + ); + vpMatrix M2({ + {0.0, 1.0, 5.0}, + {2.0, 4.0, 6.0}, + {3.0, 7.0, 8.0} + }); + std::tuple data(M1, v, M2); + + WHEN("Building the associated zigzag indexing matrix") + { + vpMatrix m = std::get<0>(data); + vpColVector contentAsZigzag = std::get<1>(data); + const vpMatrix mAfterWriterVec = std::get<2>(data); + vpLuminanceDCT::vpMatrixZigZagIndex zigzag; + zigzag.init(m.getRows(), m.getCols()); + vpColVector s; + THEN("Calling getValues with wrong matrix rows throws") { - vpMatrix({ - {0.0, 1.0, 2.0}, - {3.0, 4.0, 5.0}, - {6.0, 7.0, 8.0} - }), - vpColVector( - { 0.0, 1.0, 3.0, 6.0, 4.0, 2.0, 5.0, 7.0, 8.0 } - ), - vpMatrix({ - {0.0, 1.0, 5.0}, - {2.0, 4.0, 6.0}, - {3.0, 7.0, 8.0} - }) + vpMatrix wrongM(m.getRows() + 1, m.getCols()); + REQUIRE_THROWS(zigzag.getValues(wrongM, 0, 2, s)); } - }; - for (unsigned int i = 0; i < data.size(); ++i) { - WHEN("Building the associated zigzag indexing matrix") + THEN("Calling getValues with wrong matrix cols throws") { - vpMatrix m = std::get<0>(data[i]); - vpColVector contentAsZigzag = std::get<1>(data[i]); - const vpMatrix mAfterWriterVec = std::get<2>(data[i]); - vpLuminanceDCT::vpMatrixZigZagIndex zigzag; - zigzag.init(m.getRows(), m.getCols()); - vpColVector s; - THEN("Calling getValues with wrong matrix rows throws") - { - vpMatrix wrongM(m.getRows() + 1, m.getCols()); - REQUIRE_THROWS(zigzag.getValues(wrongM, 0, 2, s)); - } - THEN("Calling getValues with wrong matrix cols throws") - { - vpMatrix wrongM(m.getRows(), m.getCols() + 1); - REQUIRE_THROWS(zigzag.getValues(wrongM, 0, 2, s)); - } - THEN("Calling getValues with wrong start and end arguments throws") - { - REQUIRE_THROWS(zigzag.getValues(m, 2, 1, s)); - } - THEN("Calling getValues and querying all values returns correct result") - { - REQUIRE_NOTHROW(zigzag.getValues(m, 0, m.size(), s)); - REQUIRE(s == contentAsZigzag); - } - THEN("Calling getValues and querying a subset of the values is correct") - { - REQUIRE_NOTHROW(zigzag.getValues(m, 0, m.size() / 2, s)); - REQUIRE(s == contentAsZigzag.extract(0, m.size() / 2)); - REQUIRE_NOTHROW(zigzag.getValues(m, m.size() / 2, m.size(), s)); - REQUIRE(s == contentAsZigzag.extract(m.size() / 2, m.size() - m.size() / 2)); - } - THEN("Calling setValues with wrong matrix rows throws") - { - vpMatrix wrongM(m.getRows() + 1, m.getCols()); - REQUIRE_THROWS(zigzag.setValues(contentAsZigzag, 0, wrongM)); - } - THEN("Calling setValues with wrong matrix cols throws") - { - vpMatrix wrongM(m.getRows(), m.getCols() + 1); - REQUIRE_THROWS(zigzag.setValues(contentAsZigzag, 0, wrongM)); - } - - THEN("Calling setValues with wrong start and vector size arguments throws") - { - REQUIRE_THROWS(zigzag.setValues(contentAsZigzag, m.size() - contentAsZigzag.size() + 1, m)); - } - - THEN("Calling setValues leads to expected result") - { - vpMatrix mWrite(m.getRows(), m.getCols()); - vpColVector powered = contentAsZigzag; - for (unsigned i = 0; i < powered.size(); ++i) { - powered[i] *= powered[i]; - } - vpColVector poweredRead; - REQUIRE_NOTHROW(zigzag.setValues(powered, 0, mWrite)); - REQUIRE_NOTHROW(zigzag.getValues(mWrite, 0, mWrite.size(), poweredRead)); - REQUIRE(powered == poweredRead); - - vpColVector indices = contentAsZigzag; - for (unsigned i = 0; i < powered.size(); ++i) { - indices[i] = static_cast(i); - } - vpColVector indicesRead; - REQUIRE_NOTHROW(zigzag.setValues(indices, 0, mWrite)); - REQUIRE(mWrite == mAfterWriterVec); - - vpMatrix m2(m.getRows(), m.getCols(), 0.0); - zigzag.setValues(contentAsZigzag.extract(0, 3), 0, m2); + vpMatrix wrongM(m.getRows(), m.getCols() + 1); + REQUIRE_THROWS(zigzag.getValues(wrongM, 0, 2, s)); + } + THEN("Calling getValues with wrong start and end arguments throws") + { + REQUIRE_THROWS(zigzag.getValues(m, 2, 1, s)); + } + THEN("Calling getValues and querying all values returns correct result") + { + REQUIRE_NOTHROW(zigzag.getValues(m, 0, m.size(), s)); + REQUIRE(s == contentAsZigzag); + } + THEN("Calling getValues and querying a subset of the values is correct") + { + REQUIRE_NOTHROW(zigzag.getValues(m, 0, m.size() / 2, s)); + REQUIRE(s == contentAsZigzag.extract(0, m.size() / 2)); + REQUIRE_NOTHROW(zigzag.getValues(m, m.size() / 2, m.size(), s)); + REQUIRE(s == contentAsZigzag.extract(m.size() / 2, m.size() - m.size() / 2)); + } + THEN("Calling setValues with wrong matrix rows throws") + { + vpMatrix wrongM(m.getRows() + 1, m.getCols()); + REQUIRE_THROWS(zigzag.setValues(contentAsZigzag, 0, wrongM)); + } + THEN("Calling setValues with wrong matrix cols throws") + { + vpMatrix wrongM(m.getRows(), m.getCols() + 1); + REQUIRE_THROWS(zigzag.setValues(contentAsZigzag, 0, wrongM)); + } - vpColVector s2; - zigzag.getValues(m2, 0, 3, s2); - REQUIRE(s2 == contentAsZigzag.extract(0, 3)); + THEN("Calling setValues with wrong start and vector size arguments throws") + { + REQUIRE_THROWS(zigzag.setValues(contentAsZigzag, m.size() - contentAsZigzag.size() + 1, m)); + } + THEN("Calling setValues leads to expected result") + { + vpMatrix mWrite(m.getRows(), m.getCols()); + vpColVector powered = contentAsZigzag; + for (unsigned i = 0; i < powered.size(); ++i) { + powered[i] *= powered[i]; + } + vpColVector poweredRead; + REQUIRE_NOTHROW(zigzag.setValues(powered, 0, mWrite)); + REQUIRE_NOTHROW(zigzag.getValues(mWrite, 0, mWrite.size(), poweredRead)); + REQUIRE(powered == poweredRead); + + vpColVector indices = contentAsZigzag; + for (unsigned i = 0; i < powered.size(); ++i) { + indices[i] = static_cast(i); } + vpColVector indicesRead; + REQUIRE_NOTHROW(zigzag.setValues(indices, 0, mWrite)); + REQUIRE(mWrite == mAfterWriterVec); + + vpMatrix m2(m.getRows(), m.getCols(), 0.0); + zigzag.setValues(contentAsZigzag.extract(0, 3), 0, m2); + vpColVector s2; + zigzag.getValues(m2, 0, 3, s2); + REQUIRE(s2 == contentAsZigzag.extract(0, 3)); } } diff --git a/tutorial/bridge/opencv/CMakeLists.txt b/tutorial/bridge/opencv/CMakeLists.txt index 1c2130b14c..333e32dcdf 100644 --- a/tutorial/bridge/opencv/CMakeLists.txt +++ b/tutorial/bridge/opencv/CMakeLists.txt @@ -9,7 +9,7 @@ set(tutorial_cpp tutorial-bridge-opencv-image.cpp tutorial-bridge-opencv-matrix.cpp) -list(APPEND tutorial_data "${CMAKE_CURRENT_SOURCE_DIR}/chessboard.pgm" ) +list(APPEND tutorial_data "${CMAKE_CURRENT_SOURCE_DIR}/chessboard.jpeg" ) list(APPEND tutorial_data "${CMAKE_CURRENT_SOURCE_DIR}/monkey.jpeg" ) foreach(cpp ${tutorial_cpp}) diff --git a/tutorial/bridge/opencv/chessboard.jpeg b/tutorial/bridge/opencv/chessboard.jpeg new file mode 100644 index 0000000000..41338d6328 Binary files /dev/null and b/tutorial/bridge/opencv/chessboard.jpeg differ diff --git a/tutorial/bridge/opencv/chessboard.pgm b/tutorial/bridge/opencv/chessboard.pgm deleted file mode 100644 index 3f4231e6d9..0000000000 --- a/tutorial/bridge/opencv/chessboard.pgm +++ /dev/null @@ -1,4 +0,0 @@ -P5 -640 480 -255 -MORSUW[^fkrwz|~‚ƒ„„…„„„„„„ƒ‚‚‚…††„‚‚„…†††‡ˆˆˆ‡‰‹Œ‹‹Œ‹‹‹‹ŒŒŽŽŽŽ‘‘‘‘’“”””••––————————––—˜˜—––—––––—˜™™™™ššš››ššššš™™™™™˜˜——––————˜š›œœœœœœœœœœœœœœœœœŸŸŸŸŸ ¡¢ŸŸŸŸŸžžž¡¡¡¡¡¡¡¡££¢¢¡¡  ŸŸ  ¡¡¢¢¤£¢¡¡¡¡¢ŸŸ ¡¢£¤¤Ÿ ¢£¤¤¤¤¦¥¤¤¤¤¥¦¤¤¤¤¤¤¤¤¦¦¦§§§¨¨«ªª©¨¨§§¦¦§§¨¨©©­­­¬«««ªª¨§©­¯­«©ª«¬­­­­©©ª«¬¬¬«¨©ª«¬¬««¬­®®¬«¬®ª««¬­®¯¯«¬¬ª©ª­¯°±²´¶·¹¹¹¼¿ÂÃÄÇÉÆÊÎÎËËÏÓ×ØÙÚÛÛÛÛÝÞßàáãääççççççççççççççççæææççèèèççççççççèèèèèèèèééééééééêêêëëìììíììëëììíëëëëëëëëëëëëëëëëèèéêêéèèááàßàâãåæäßÚÔÏÊÈÁ¿½¼¾ÂÇÊÎÊÄÀ¿¿¿¾¿ÉÐÍÆÁ¼¸´´°ªª¬ª¦¡¥¯¿ÉÍÐÔÖ××ÖÔÒÏÎÏÉÀº¸¶³°³´¶·¹¾ÃȽ¸®¥¥©§¡­·ÃÈú´±²¶½ÅÎØãêèçæåãâààÞÜÜÝÜØÏÈÁ¿¾ÄÌÑÐÍÏÐÒÒÐÍÉÆÎÑÕ×××××Õ×ÕÓØØŬŸŽƒ„…‡—«µ¬“rWF3"NPRTUX\`inuz}~€ƒ„……††……………„„ƒƒƒ†‡ˆ†„„†‡‡‡‡ˆˆˆ‰‰ˆŠŒŒŒŽŒŒŒŽŽŽ‘‘‘‘‘‘‘‘Ž‘‘““”””•••˜˜˜˜˜˜˜˜™™™™™™™™—˜˜˜˜˜˜—˜————˜™š™™šš››››š›››››››ššš™™˜˜˜™™™™š›œžžžžžžžž   ¡¡¢¢¢¡¡¡¡¡¡¡¢¢¢¢¢¢¢¢¢¤¤¤££¢¢¢¡¡¡¢¢£££¥¥¤£££££¢££¤¤¥¦¦¢£¤¥¦§§§§¦¦¥¥¦¦§¦¦¦¦¦¦¦¦§§§¨¨¨©©««ªªªª©©¬¬¬¬­­­­®®®­­¬¬¬¬ª©«­¯®¬«¬­®®®­­¬¬­­­­¬¬¬­®¯¯¯¯®®°±°®®¯°¬¬­®¯¯°°°°±°¯¯²´¶¶¶··¸¸¸¼¿ÃÅÆÇÉËËÏÓÓÐÐÔØÙÚÛÝÝÞÞÞààáâäåææççççççççççççççççæææççèèèççççççççèèèèèèèèééééééééêêêëëìììíììëëììíëëëëëëëëììììììììééêëëêééèçæææçèééèåáÝÚ×ÕÏÎÌÌÍÐÓÕÓÏÊÆÅÅÄÄÂÌÓÑËÇÿ¼½»¸··³­¥§±ÀËÏÒÕÔÕÖ×Ø×ÖÖÕÏÆÀ½»¸¶´¶·¸»¿Åʽ´¬¬®«¥±»ÇÍÉÁº·µ»ÄÎÖÞåêèèçåãâáàßÞÞßÞØÏǽººÁÌÑÏËÎÐÒÓÒÐÍËÏÒÖÙÙØØÙØÙ×ÕÚÛÊ´©—Š‰‰Š™­º´ž|^J7'OQSUWZ_cmry~€ƒ„„…†‡‡‡‡‡‡††††………ˆ‰Š‰‡ˆŠŒˆ‰‰‰‰ŠŠŠ‰‹ŽŽŽŽŽŽ““““““““‘’“••–––———šššššš™™šššššššššššššššš™™™™™š›œšš›››œœœ››œœžžžœœœœ››››œœ››œŸŸŸŸŸŸŸŸ¡¡¡¡¡¡¡¡ ¡£¤¤¤£¢¢¢£¤¤¥¥¦¤¤¤¤¤¤¤¤¦¦¦¥¥¥¤¤££¤¤¤¥¥¥§§¦¥¤¥¥¥§§§§§§§§¥¦§¨©©©©©¨§§§§¨©©©©©©©©©©©©ªªª««««¬¬¬­­­°°°°¯¯¯¯°¯¯¯¯®®®¯®­­¯°¯­¯¯°°¯¯®­®¯¯¯¯¯®­®¯°°±±°°±²³³±±²³¯¯¯°±²²²³´´´²³µ·¸¸¹¹ºº»»ÁÄÇÈÉÉËÍÎÒÕÖÔÕØÜÜÝßàááááããäåæçèèççççççççççççççççççççèèèèççççççççèèèèèèèèééééééééêêêëëìììíììëëììíëëëëëëëëííííííííêëììììëêíìëëêëëìëêéèæåäãÞÞÝÝÝÞßàÚ×ÒÏÎÎÍÍÉÑØÖÑÏËÇÁÃÃÀ¿¾¹±«¬´ÂÍÑÓÖÓÔÕ×ØÙÙÙØÓÌÅ¿½¼¸¹º»½ÁÈÌÈž·¶·³¬´¾ÊÑÎÇÀ½¹ÁÌÖÞãæèéèçæäâááâááâáÚÏÇ»¶µ½ÊÑÐÊÎÏÒÔÕÔÒÑÏÓ×ÚÚÙÚÚÛÜÙ×ÜÞÑÀ´ŸŒ‹‹˜«¾¾­‹hO<-!RSUWY]bfpu{€‚ƒ„……†‡ˆ‰‰‰‰ˆˆˆˆ‡‡‡‡ˆ‰ŠŠ‰‰ŒŽŠŠ‹‹‹‹‹‹‹‘‘‘’’’’••••••••’’‘‘’’“”••–––———šššš™™™™››››››››œœ››››œœ›››››œ››œœœœžŸ ¡¡žžžžžžžž ŸžžžžŸ¡¡¡¡¡¡¡¡¢¢¢¢¢¢¢¢¢£¥§§¦¤¢££¤¥¦§§¨¦¦¦¦¦¦¦¦¨¨§§§§§§¦¦¦¦¦¦§§¨§¦¥¥¥¦¦©©©¨¨¨¨¨§¨©ªªªªªªª©©©©ªªªªªªªªªªª«««¬¬¬­¬¬­®¯°°±°°°¯¯®®­±±±±°°°°±±°°°°°¯²²²²±°®­­®¯°°°°°®¯°°°°¯¯±³´´³²´µ²²²³³´´´²³´´³³´¶¶·¸º½¿ÀÁÄÇÉËËËÌÎÎÑÔÕÕÖØÛÞßàáâãââääåæçèèéèèèèèèèèèèèèèèèèçèèèèèèèèèèèèèèèèèèèèèèèééééééééêêêëëìììíììëëììíììììììììîîîîîîîîììíîîíììîííìëëëëëêêêééééååææåääãáÞÚ×××ÖÕÒÙÝÛ×ÕÑÍÆÈÇý¶°¯µÂÍÑÓÖÕÖÖÖÖÕÕÕ×ÓÍÆÂÀ¿¾½½½½¿ÃÊÏÎÍÉÂÀÀ¼µ·ÀËÒÒÌÆ¿ÆÐÙßâåæêéèæåãâáäääåäÝÒɾ·²¸ÆÑÒÎÏÑÓÔÕÕÔÓÎÒÖÙÙÙÚÚÜÜÙØÜß×˹£‘‹Š–¨¾Äº™sV@2$ WXYZ\`fjrw}ƒƒƒ„…†ˆ‰ŠŠŠŠˆˆ‰‰‰‰‰‰ˆ‰ŠŠ‰‰‹ŽŒŒŒŒŒ‹‹‹‹Ž‘‘’’’’““”””––––––––”““““”•–———˜˜˜™™›››››ššš››››››››žœœœœžœœœœžŸžžŸŸžžŸ ¡¢¢        ¡¡ ŸŸŸ  ¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¤¥§¨¨§¤£¢£¤¥¦§§¨¨¨¨¨¨¨¨¨©©©©©©©©¨¨¨¨¨¨¨¨¨§¦¥¥¥¥¦©©¨¨¨¨¨§¨¨©ªªª©©¬«ªªªª«¬ªªªªªªªª¬¬¬­­­®®­®®¯±²²³±±°¯¯®®®±±²²²²²²²³³²²±±²´´´³²°¯®ª«­¯±±²²°±±²±±°°±²´´³²´¶´µµµµ¶¶¶²´µµ´´µ¶¶·¹»¾ÀÂÃÅÇÊËËËÍÎÏÑÓÕÖØÚÜÞßàâããããääåææççèèèèèèèèèèèèèèèèèéèèèèèèèèèèèèèèèèèèèèèèèééééééééêêêëëìììíììëëììíììììììììîîîîîîîîííîîîîííîîîííìëëìììëëêêêèèèèèæäãæãàÞÞÞÝÜÛàâßÛÙÕÐÐÐÍÇÆÇÄ¿µ²µÁÌÑÓÕ×ÖÖÕÕÔÔÔÕÒÍÈÃÁÂÃÂÂÁÀÀÄËÐÒÓÐÊÈÈľ¾ÅÎÕÖÓÍÊÉÎÕÚßâæéëêéçæäãâæåæçæàÖÎȾµ¸ÄÐÕÕÓÓÔÕÔÓÒÑÌÐÕ×ØØÙÚÛÚÙØÜÞÚÓ¿¨”ŽŒ–¦¸Åħ^F6)! ]]^^_cimtx~‚ƒƒƒ„…†‡‰Š‹‹‹ˆ‰‰‰‰ŠŠŠ‰Š‹Š‰‰‹ŒŒŒŒ‹‹‹‹ŒŽ‘‘’“““”””••––––––––••””•–——ššš››œœœœœžžžŸœœœœœœœœŸžœœžŸœœžžŸžžžŸŸŸ  ŸŸŸ ¡¡¢¢¡¡¡¡¢¢¢¢¡¡   ¡¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¢¦¦§¨¨¦¥¤£¤¤¥¥¦¦§©©©©©©©©©©©ªªª««ªª©©©¨¨¨¨¨§¦¦¦¦¦¨¨¨¨¨¨¨¨¨©©ªª©©¨¬¬«ªª«¬¬ªªªªªªªª¬¬­­­®®®®¯¯°±²³³²²²²²±±±±²²²²³³³±³´´²²³´´´´´³±°¯«¬®°±²²³³´´´´³²²°²³³³³´¶¶¶¶¶¶···´¶¹¹¸·¸¹»¼½¾¿ÀÁÁÅÇÊÌÌÍÎÐÒÓÕ×ÚÜÝÞßàáâããããääååææççééééééééééééééééééééèèèèééééééééèèèèèèèèééééééééêêêëëìììíììëëììíííííííííîîîîîîîîííîîîîííïïðððïîíðïïîîííìëëëëêéççéçåääåãâãææâßÞÚÕÕÔÏÉÇÉǺµ·ÁÍÒÓÔÖÕÔÔÓÔÔÕÔÓÏÊÆÅÇÉÇÆÄÁÁÄÊÏÓÕÓÎËÌÊÆÈÌÓØÚÙÕÓÕØÜßâæêíëëêèæåäãçææçèäÝÖÓÊÀ¿ÆÐ×ÚÖÖÖÕÔÓÒÑËÏÔ×ØØÙÚÙÙØÙÛÜÚØǯœ—”‘˜¥²ÄÊ´ŽkM:.%ccbabfkpv{€„„„„„„…‡ˆŠŠ‹‹ˆˆˆ‰‰ŠŠŠ‹ŒŒ‹‰‰ŠŒŒŒŒŒ‹‹ŠŠ‹’“““””•••–––––––––––––—˜˜šš›››œœœš›œžŸ  Ÿžœ››œžŸœœžŸŸŸŸŸ  ¡¡      ¡¡¡¡¡¢¢£££    ¡¢£¤¢¢¢¢¢¢¢¢££££££££§§§§¦¦¥¥¦¦¦¦¦¦¦¦©©©©©©©©©©©ªª«««ªªª©©¨¨¨ªª©¨§§¨¨§¨¨©©ªª«©ªª««ª©©¬¬«ªª«¬¬««««««««¬¬­­­®®®¯°°±±²²³²²³³³³³´±±±²²³³³°²´´²²´¶³³³³³²°°°°±²²²²±´´´´´³²±±²´´´´¶·········µ¸º»º¹¹º¾¾¿ÀÂÃÄÅÅÈËÍÎÏÑÓÔÔÖØÛÞßààáâãääääååæææçççééééééééééééééééêêêééèèèééééééééèèèèèèèèééééééééêêêëëìììíììëëììíííííííííííííííííìíîîîîíìíîðññðïïñññððïïïïïîííìììíëééêêèçèêéåääáÛØØÕÏÎÎÊÄÀº¹ÃÎÓÕÖÕÓÑÏÍÍÍÍÒÑÏËÇÇÊÍËÊÆÂÁÃÈÍÒÕÓÎËÍÍËÎÐÔØÛÛÙ×ÜßâåçéìîìëêéçåääçååçéèãÞÛÕÎËÌÒØÜØØØ×ÖÕÔÔÌÐÕØÙÙÚÛÙØÙÛÜÛÛÛζ¢™“–¡­ÃÏ¿yW@2)ffecdglqx|‚…†………„…†ˆ‰Š‹‹ˆˆˆ‰‰ŠŠŠŽŽŒŠ‰‹ŒŒŒŒ‹‹ŠŠŠ‹‘“““””•••––––––––——––——˜™˜˜˜™™™šš——™šœžŸŸŸŸŸŸŸŸŸŸžœ››œžŸœœœœžŸŸŸ   ¡¡¡¡     ŸŸ¡¡¡¢¢£££ŸŸŸ ¡¢¤¤¢¢¢¢¢¢¢¢¤¤¤¤¤¤¤¤¨¨¦¥¥¥¥¥¨§§§§§§¦©©©©©©©©©©©ªª«««ªªª©©¨¨¨¬«ªª©©ªª§¨©©««¬­««¬¬¬«ªª¬««ªª««¬¬¬¬¬¬¬¬¬¬¬¬­­®®®°°±±±²²²°±±²²³³´±±±²²³³³®±´´²²µ¸²²³³³²±°µµµ´³²±°±²²²±°¯¯±³µµµµ·¹········´·¹º¹¸¸¹¼½¿ÂÅÈÊËÅÈÌÎÏÑÓÕÓÓÔ×ÛÞßßáâãäåæååææççççèèééééééééééééééééêêêééèèèééééééééèèèèèèèèééééééééêêêëëìììíììëëììíííííííííííííííííìííîîííìëìîïðïïîððððððððñðïîîîîîïíììííìêéëêççèæáÞàßÛÙØÒÊļ»ÄÐÕÖ×ÕÒÎÊÆÃÁÁÎÎÍÉÆÆÊÎÎÌÇÃÀÂÇÌÑÔÒÍËÎÏÎÐÑÒÖØÙØ×ÝàåèéêëìììêéçæåäçåäæéêæãÞÜØÔÒÔØÜÙÙÙØØØØ×ÍÑÖÙÚÚÛÜÙÙÚÝÝÛÛÝÒº¥Ÿš‘’›¬ÃÓǧ‚^E4+ddcabgns|}€ƒ„„ƒ‚†‡ˆ‰Š‹ŠŠ‹‰ˆˆ‰‹ŒŽŒ‹Š‰‰‰Š‹ŒŒŠŠ‹ŒŽ‘’“““””•••—•“’‘“•–—––••––———˜™™š›››››œœœžŸŸŸŸžŸŸŸŸŸŸŸŸžžŸŸŸ¢¢¢¡¡      ¡¡¡¢¢¥¤£¢£¤¦§££££££££¢¢¢£¤¥§¨¥§§¥¢£§¬§§§§§§§§©©¨§§©ª¬¨¨¨©©ªªª¨©ª«¬­­®§¨ª««ª¨§¨¨¨¨¨¨¨¨§©««©©«­®­«©¨©«¬¬¬¬¬«ª©¨­¯°¯­¬­¯¯¯¯°±³´µ±±±±±±±±´´´³³²²²¯±²²±±³µ³´´µ´³±°°°°°°±³³³³³³³³³³µµµ¶¶···¹¹¸¸¸¸¸··¹ºººº¼½¼½¾ÀÂÄÅÆÈÊÌÍÍÎÐÒÔÔÖÛàâàÝãããääåååääåææçèèééééééééèèèèèèèèééééééééééééééééééééééééêêêêêêêêììììììììëëëëëëëëëëëììíííííííííííîîîîîîîîîîîîîîîîððððððððððððððððîîîîîîîîììëêéçåäääâàßÝÛÛÏÊÇÊÑ×ØÖÒÏÉþ¼¼¼ÁÉÍÊÅÄÄÄÆÀ¼½½¾ÃÉÏÕÖÒÍËÇÃÇÍÔØØ×ØÙßàãæéêêêíììëéçåäãåçééèçåäâßÝÛÚÚÛÚÙÙØØÙÚÚÓÑÐÓ×ÚÙ×ÙÙØØÙÛÝÞÔ¯¤›“‘•¥ÂÏÓ¹‹kJ92$ eedcdhot|}€‚„„ƒ‚…†‡ˆ‰‰‰‰Œ‹‰ˆˆ‰‹ŒŽŒ‹Š‰‰‰Š‹ŒŒŠŠ‹ŒŽŽ‘’“““”””••–•“’’“•——––••––———˜˜™š›››››œœœœžžŸŸžžŸŸŸŸŸŸŸŸžžŸŸŸ¢¢¢¡¡    ¡¡¡¢¢¢¢¤¤£¢£¤¥¦££££££££££££¤¥¦§¦¦¦¤£¥¨ª§§§§§§§§©¨§§§¨ª«¨¨¨©©©ªª©©ª««¬¬­©ª«¬¬«ª©©©©©©©©©¨©««©©«¬®­«©©©«¬«¬¬¬¬««ª­®¯¯­¬­¯²²±°°°±±±±²²²²±±¯°±²³´µµ±²´³²²³´´µµ¶µ´³²±°°°±±²³³³³³³³³³µµµ¶¶¶··¶¶¶······¸ºººº»½¼½¾ÀÂÄÅÆÈÊÌÍÍÎÐÒÕÕÖÚßáàÞãããääåååääåæççèèééééééééèèèèèèèèééééééééééééééééééééééééêêêêêêêêììììììììëëëëëëëëëëëììíííííííííííîîîîîîîîîîîîîîîîððððððððððððððððîîîîîîîîííííëêèçæåäâáßÞÝÖÒÏÑ×ÜÜÛÕÏƽ·µ·¸¾ÆÊÆÂÂÂÁ¿º·¹ºº¾ÄÏÔÖÒÎÌÉÄÃÉÑ×ÙÚÛÝáãæéëìììììëëéèæåäæèêêéèçæäâßÝÜÜÜØØ×ÖÖÖ××ÔÑÐÒ×ÚÙ×Ø×ÖÖ×ÙÛÜØȵ©Ÿ–”–¤ÀÎ×ÙwS=4&fffefjpu|}€‚ƒƒƒ‚ƒ„†‡ˆˆˆˆ‹Š‰ˆˆ‰ŠŒ‹Š‰‰‰ŠŠ‹ŒŒŠŠ‹ŒŽŽŽŽ‘’““““”””•”“’’“”–——––••––————˜™šš›››››œœœœœžŸŸžžžžžžžžžžŸŸŸŸŸŸŸŸžžŸŸŸ¡¡¡¡    ¡¡¡¢¢££££££¢£¤¥¦££££££££¥¤¤££¤¤¥¨¦¤£¥§¨¨¨¨¨¨¨¨¨¨¨¨§§¨¨ªª¨¨¨¨©©©ªªªª«««««ª«¬¬¬¬«ª©©©©©©©©¨ª««©©ª¬­¬ª©©©ª«««¬­­­¬¬¬®¯®­¬®¯²±°°¯¯°°°±²³³²±°¯¯°±²´µµ³´µ´³²³´µµ¶¶¶µ´³±±±°±²²³³³³³³³³³µµµµ¶¶¶·´´´µ¶¶··¶¸ºº¹¹»½¼½¾ÀÂÄÅÆÈÊÌÍÍÎÐÒÖÕÖÙÝàáàãããääåååäååæçèèèééééééééèèèèèèèèééééééééééééééééééééééééêêêêêêêêììììììììëëëëëëëëëëëììíííííííííííîîîîîîîîîîîîîîîîððððððððððððððððîîîîîîîîîïïïîîíìéèçæäãâáßÜÙÚßââàÜÔȼµ´·ºÀÆÊÆÂÂÁ¿¹´²´µ¶ºÀÏÕ×ÔÑÐÍÉÄÉÐÕØÚÜÝâãæéëìììêêëëêéèèæçéêëêéèéçåãàßÞÞÚÙØ×ÖÖÖ×ÔÒÐÒ×ÚÚØÖÖÕÕÕ×ÙÚÜϾ°¤š–— ¹ÈØϪ…]D8(hhhghlrw|}‚‚‚‚„„†‡ˆˆˆˆŠ‰ˆˆˆ‰Š‹ŒŒ‹Š‰‰‰ŠŠ‹ŒŒŠŠ‹ŒŽŽŽŽŽ‘’’“““”””’’’’“•—˜—––••––—––—˜™™šššš›››œœœ›œžžžžžžžžžžžžžžžžžžžžžžŸŸŸ¡       ¡¡¢¢£££££¢¢££¤¤¥££££££££¦¥¤££££¤¨¥¢£§©¨¦¨¨¨¨¨¨¨¨©©©©©ªª«§§¨¨¨©©©«««ªªªªªª««««««ªªªªªªªªª©ª««©©ª«¬¬ª©©©ªªª«¬­­®­­«­®®­¬®¯®®®®¯°²²°±²´´²±°³³³³³³³³µ¶¶µ³²³´´´´´´´´³²²±±±²²³³³³³³³³³´´µµµ¶¶¶³³´µ¶·¸¸¶¸¹º¹¹»¼¼½¾ÀÂÄÅÆÈÊÌÍÍÎÐÒÖÖ×ÙÜßáâãããääåååååææçèééééééééééèèèèèèèèééééééééééééééééééééééééêêêêêêêêëëëëëëëëëëëëëëëëëëëììíííííííííííîîîîîîîîîîîîîîîîïïððððññððððððððïïïïïïïïîïïðððïïììëêéèççæäááäååäãÜÑÆÀ¿ÁÃÉÎÐËÆÅ¿¹²®®°²¸¿ÏÕÙÖÔÓÑÍÈËÐÕ×ÙÙÙàáäæèééèèèéêëêêêèéêëëëêêëêéæäãááßÞÜÛÙÙØØÕÒÐÒ×ÚÚÙ××ÖÕÖ×ÙÚÞÔŵ§—•š°¾ÕÖ¶dK<*hiiijnsw|}~€‚‚‚……‡ˆ‰‰‰‰ˆˆˆˆ‰‰Š‹‹‹Š‰‰‰‰ŠŠ‹ŒŒŠŠ‹ŒŽŽŽ‘’’’“““””’’’“”•–——––••––—––——˜™ššššš›››œœ›œžžžžžžžžžžžžžžžžžžžžŸŸŸŸ       ¡¡¡¢¢£££¡¢¢££¤¤£££££££££§¦¥¤££££¨¥¢¤§©¨¥¨¨¨¨¨¨¨¨©ªª««¬¬¬§§§¨¨¨©©ªªªªª©©©ª©©©©©©ªªªªªªªªª©«¬«©¨©«««ª©©©©©ªª«¬­­­­ª¬­­¬¬®¯®®­­®¯°±¯°±²²±°¯³³³´´´´´µ¶¶µ³²³´²²²²²²²³³³²±±²²³³³³³³³³³´´´µµµ¶¶´´µ¶·¸¹¹¶·¹¹¸¹º¼¼½¾ÀÂÄÅÆÈÊÌÍÍÎÐÒÕÖØÙÛÞáããããääåååååæçèèééééééééééèèèèèèèèééééééééééééééééééééééééêêêêêêêêëëëëëëëëëëëëëëëëëëëììíííííííííííîîîîîîîîîîîîîîîîïïïððñññððððððððïïïïïïïïíîïðððïïïîîííììëéèææççæååáÛÕÐÏÎÏÔ××ÑËÈÄ¿»³«¨©¬´½ËÑÕÓÑÑÏËÈÊÎÓ×ÙÙÙßàãåççççæçèéêêêêééêëëëëëììëêèæåäãâàÝÛÚÙÙÖÓÐÒ×ÛÛÚÚÙØ××ØÚÛÜÖʹªž–’˜«·ÓÛÁœmS@,! hijjknsw|}~€‚ƒ…†‡ˆ‰‰‰‰†‡‡ˆ‰‰ŠŠŠŠ‰‰‰‰ŠŠŠ‹ŒŒŠŠ‹ŒŽŽ‘’’’““““’““””••–—––••––—•––—˜™™™™ššš››››››œžžŸŸŸŸŸŸŸ       ¡¡¡¢¢ ¡¢£¤£££££££££££¦¦¤£££££¦¥¤¥§¨§¦§§§§§§§§©©ª«¬¬««¦§§§¨¨¨¨©©©©©ªªªª©¨¨¨¨©ª©©©©©©©©ª«¬«©¨©ªªªªª©©¨¨©ª«¬¬¬««©«­­¬¬®¯±°¯®¬¬¬¬¯¯¯¯¯¯¯¯®¯°²´¶·¸³´µ´³²³´±±°°°±²³´´³²²²²³³³³³³³³³³´´´µµµµµµ¶¶·¸¸¸µ·¹¹¸¸º¼¼½¾ÀÂÄÅÆÈÊÌÍÍÎÐÒÓÖÙÛÜÝàâãããääåååæææçèééêééééééééèèèèèèèèééééééééééééééééééééééééêêêêêêêêêêêêêêêêëëëëëëëëëëëììíííííííííííîîîîîîîîîîîîîîîîîîïððñòòððððððððððððððððîîïðððïïððððððïïììëêééèèæåãàÞÛÚÙÜßÝÖÑÎÈÁ¿µ¬§¦¨°¹ÅËÎÌËËÉÅÅÆÊÑ×ÜÝÝàáäæççççäåæèéééééééêêëëëììììëêèèåãáÞÛÙØØ×ÔÐÒÖÛÜÛÜÛÚÙÙÚÛÜÜÚо­¡˜‘™©³ÑßË©|[E/%hijklosw}}}~‚ƒƒ„†‡ˆˆˆˆ…†‡ˆ‰ŠŠŠŠ‰‰ˆˆ‰ŠŠŠ‹ŒŒŠŠ‹ŒŽŽ‘‘’’’“““““””•”””—––••––—••–—˜˜™™™™ššš›››š›œœœœœœœœœœžžŸŸŸžžžŸŸ   ŸŸŸŸ  ¡¡ ¡¢£¤£¢¢££££££££¥¥¤£££¤¤£¥§§¦¦¦§¦¦¦¦¦¦¦¦¦§©ªªª©¨¦¦§§§¨¨¨§¨¨©©ª«««ª©¨¨©ª«©©©©©©©©ª«¬«©¨©ªªªªª©©¨¨©ªª«ªª©¨©ª¬¬¬¬®°±°¯­¬«««°¯­¬¬­¯°¬¬®°²´µ¶±²´³²²³´²±±°±²³´µ´³²²²²²³³³³³³³³³³´´´µµµµµµµµ¶¶¶µ·¸¸¸¸º»¼½¾ÀÂÄÅÆÈÊÌÍÍÎÐÒÒÕÚÜÝÝßáãããääåååææççèéêêééééééééèèèèèèèèééééééééééééééééééééééééêêêêêêêêêêêêêêêêëëëëëëëëëëëììíííííííííííîîîîîîîîîîîîîîîîîîïððñòòððððððððððððððððððñññðïïññññòòòòïððïîìììêêèçåäãããåãÝÙ×ÑÊż´°­¬°¶ÂÈÌÊÇÇÅÂÅÆÉÏ×ÜÞÝÞàâäåååäãäåæççççéééééêëëêëìííìëêèçäàÝÛÙÙØÔÑÑÖÛÜÜÜÛÚÙÙÚÛÜÞß×ų§”—¦¯ÎàÒµŠdK3)"gijklnsv}}}~€‚ƒ‚ƒ„…††††…†‡ˆ‰ŠŠŠ‰‰ˆˆˆ‰ŠŠŠ‹ŒŒŠŠ‹ŒŽŽŽ‘‘‘’’“““””•••”““—––••––—••–——˜™™™™™šš›››š›œœ››››››››žžŸŸŸžžžŸŸ   žžžŸŸŸ  Ÿ ¢£¤£¢¡££££££££¥¤¤££¤¤¥¢¥¨¨¥¤¦©¥¥¥¥¥¥¥¥¤¥§¨©¨§¦¦¦¦§§¨¨¨¦§§¨©ª«¬­¬ª©©ª¬­¨¨¨¨¨¨¨¨ª«¬«©¨©ª©ªªªª©¨§ªªªª©¨§¦¨ª¬¬¬¬®°­­¬¬¬­®®°®«©©«®°­­®®¯°°°¯±²²±±³µ³²²±²³µ¶µµ´²²²²²³³³³³³³³³³³´´µµµµ´´´´´³³µ¶¸¸¸¸¹»¼½¾ÀÂÄÅÆÈÊÌÍÍÎÐÒÐÕÛÞÝÝßáãããääåååææçèèéêêééééééééèèèèèèèèééééééééééééééééééééééééêêêêêêêêêêêêêêêêëëëëëëëëëëëììíííííííííííîîîîîîîîîîîîîîîîîîïððñòòððððððððððððððððñòòòòñðïñòòòòóóóñóôóñðïððïíëééééèêèäáßÚÓÊýº¶²³·ÃÊÍÊÈÈÆÂÉÉÊÐÖÚÛÙÛÝßáââááããäåæææåéèèèèéêëéêìíîîíìíëèäáÞÝÜØÔÑÑÖÛÜÜÜÛÚÙØÙÛÛàãÜɸ¬¡˜“¢«ÊÞÔº“iO6,%eegimpsuyz|~€‚‚ƒƒƒƒƒƒƒƒ…††ˆ‰Š‹‹‰‰ŠŠŠ‹‹‹ŠŠ‰‰‰Š‹‹Ž‘““““““““””””””””•••––———––———˜˜˜˜˜˜™™ššššš›œœžžœ››šš››œžžœžžžžžžžžžžŸŸžžžŸ ¡ Ÿœ ¡¢££££¢¢££¤¤££¢Ÿ  ŸŸ ¤§¥¥¦¦¦§§§¥¥£¢¢£¥¦¥¥¦¦¦§§§¥¨©¨¦¥§©§§§¨¨©©©««««««««©©©©©©©©¨¨¨¨¨¨¨¨ªªª©©¨¨¨ªªªªªªªª©­¯®«¨¨ª¬­­®®­­¬¯¯¯®®­­­¯¯¯°°±±²´´³²±±±²³²²±±²²³°°°±±±²²°±²³³³²²²²²³³´´´³´µ¶¶¶µµº¹¹¸¸¹ºº¿ÀÁÂÄÆÇÇÉÉÉÊÍÐÓÕÒÔ×ÛÝÞÞÞáâãäåæååååæççèééêêêêêêêêèèèèèèèèèèèèèèèèéééééééééééêêëëëêééèèééêééééééééììììììììììììììììììììììììííííííííîííííîïðïïïïïïïïðððïïîîîïððññððïððððððððñññòòóóóóóóóóóóóïïîíìëëêëêèæãáßÞÙÖÑËÆÂÀ¿ÁÉÒÓÍÈÈËÍÍÏÑÔØÛÜÛÜÝÞàáâãäåæççççæååæçèééêëëìììíííêìëåââßÛÜØÔÕÙÝÞÞßÞÛÚÚÛÞßàáÞÒÀ®¢ž”š«½ÏÜÈžxW>2#degjnrvxyz|~€‚‚‚‚‚‚‚‚„……‡ˆ‰ŠŠ‰‰‰ŠŠŠ‹‹Š‰‰‰‰Š‹ŒŒŽŽŽ‘’’’’’’’’””””””““””””••––•–––———˜˜˜˜™™ššššš›œœžžœœ››››œœœžžžžžžžžžžŸŸŸŸžžŸ  ¡ ŸžŸŸ ¡¢¡¡¡¡¡¢¢¢¢¡¡Ÿ¡£¢¡ ¡££¤¤¤¥¥¥¥¦¥¤£¢£¤¥¥¥¥¦¦¦§§¥§©¨¦¥¦©¨¨¨©©ªªª««««««««©©©©©©©©¨¨¨¨¨¨¨¨©©©¨¨¨§§ªªªªªªªª¦©¬­«ª«­¬¬««««¬¬®®®­­¬¬¬¯¯¯°°°°°´³²±±±±±³²±±±±²³¯°°±²³³´±±²²²³³³²²²³³³´´²³´µµµµ´µµµµ¶¸¹º¾¿ÀÂÃÅÆÇÊÉÉÉËÍÏÑÕÕ×ÙÛÞàááâãäååååååææçèééêêêêêêêêèèèèèèèèèèèèèèèèéééééééééééêêêëëêééèèééêééééééééììììììììììììììììììììììììííííííííîííííîïðïïïïïïïïðððïïîîîïððññððïððððððððñññòòóóóóóóóóóóóóóòòñðïïíìëéçåäãâàÝØÔÑÎÍÍÒØØÕÑÐÑÕÕÕÕÖ×ÙÚÝÝÞßáâããääåæççææäååæçèèéëëëëììííëíìçääâÝÞÚÖÕØÝßààßÞÝÝÞßàáâßÔ𣜔™¨ºÌÜ̧^C5%dehkptxzyz|~€€€€€€€€€ƒƒ„…†‡ˆ‰ˆˆ‰‰‰ŠŠŠ‰‰‰‰‰Š‹Œ‹ŽŽŒŽ‘‘‘‘‘‘‘‘••””““’’’’““”””””•••–––—˜˜˜™™ššššš›œœžžœœ››œœ››œœžžžžžžžžžžžŸŸŸŸŸŸŸŸ  ¡¡ ŸžžžŸ    ŸŸ      ŸŸ¢¥¥£¡ŸŸ¢¢¢¢£££¤¦¥¤£¢¢££¤¤¥¥¥¦¦¦¥§¨§¦¥¦¨¨©©©ªªªªªªªªªªªª¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨©©¨¨¨§§§©©©©©©©©¦¨ª«ªª«¬««©¨¨©««­­­­¬¬¬¬¯¯¯¯¯®®®²²±°°°°±²²±°°±²²°°±²³´´µ³²±±±³´µ²²²²³³³´²³´´µµ´´³³´µ¶¹º¼½¾¿ÀÂÃÅÅÊÉÉÈÉËÍÎ×ÖÖ×ÙÝáãááãäåååååååæçèèéêêêêêêêêèèèèèèèèèèèèèèèèééééééééééééêêêëêééèèééêééééééééììììììììììììììììììììììììííííííííîííííîïðïïïïïïïïðððïïîîîïððññððïððððððððñññòòóóóóóóóóóóóõõõôóóòòðïîíìëêêëëéæãàÝÜÛÜÝÞÝÛÙØ××ÖÕÕÖÖ×ÞßßàâããäãäåæææååäääåæçççêêêëëëìììïîéççåááÝØ×ÙÝàâáââããââáâãáØȵ¥›”–¢´ÇÛÓµhJ9'ghjmquxzyz|}€€‚ƒ„…†‡‡‡ˆˆˆ‰‰‰‰ˆˆˆˆ‰Š‹ŒŠ‹‹‹Ž••””“’’‘’“““”””•”””•••––˜˜˜™™ššš›››œœœœœœšš›œžžŸ  ŸŸŸŸ       ŸŸžžŸ  ŸŸŸŸŸžžŸŸŸŸ¡¤¤¢¡¡¡¡¡¡¢¢£££¥¥¤££¢¢¢£¤¤¤¥¥¥¥¦¦§¦¦¦¦§§§¨¨¨©©©©©©©©©©©§§§§§§§§§§§§§§§§ªª©©¨¨¨¨¨¨¨¨¨¨¨¨ªªªª¨§§§¬«©§§©«¬­­­­­­­­¯¯¯®­­¬¬±°¯¯¯¯°°±±°°°°±±²²²²²³³³´³±°°²´¶±±²²²³³³³³´µ¶¶µµ¶¶¶·¸º»¼¼½¾¿ÁÂÄÄÉÉÈÈÉÌÎÏÖÖÖØÚÞàâàáâääååäääåæççèèééééééééèèèèèèèèèèèèèèèèèèèèèèèèèèéééêêêêééèèééêééééééééëëëëëëëëììììììììììììììììííííííííîííííîïðïïïïïïïïðððïïîîîïððññððïððððððððñññòòóóóóóóóóóóóôóóóòòññññðððïïïîîîíëéæäåâààââßÜÙÙØØÙÚÛÛßßààáâããããäåææååäääååæææééééêêëëíïïëéêéååáÜÙÚÝáããäæççæäãääãÜ먛•“¬ÀØÙĘqP=*kklnqtwxyz|}~€‚ƒ„…†‡‡‡‡‡ˆˆˆ‰‡‡‡‡ˆŠ‹Œ‰‹ŒŒ‹‹ŒŽ”””““’’‘“”””•••–”””•••––˜˜˜™™ššš››œœœœœœ››œœ™šš›œžž ŸžžžžŸ   ŸŸžžžžžŸ       ŸžžŸ  Ÿ   Ÿ £¦¡¡¡¢¢£££¤¤¤££¢¢¡££££¤¤¤¥¦¦¥¦¦¦¦¥¥¥¥¦¦¦§§©©©©©©©©§§§§§§§§§§§§§§§§««ªª©©©©¨¨¨¨¨¨¨¨ª©¨§§§¦¥­«©¨¨©«­­­­­­®®®®®­­¬«««¯®®­®®¯¯°°¯¯¯¯°°´³³²²±°°³²°¯¯±´µ±±±²²²³³´´µ¶··¶¶¸¸···¸¹º»¼½¿ÀÂÃÄÈÈÈÉËÎÑÒÒÔ×ÚÜÞÞßàáâãääääääååæçèèééééééééèèèèèèèèèèèèèèèèèèèèèèèèèèèéééêêêééèèééêééééééééëëëëëëëëììììììììììììììììííííííííîííííîïðïïïïïïïïðððïïîîîïððññððïððððððððñññòòóóóóóóóóóóóòòòòòñññññññññññîîïïîìêéìèääççåáâáàßßàààßßààáââããäåææææåäääååååæççèèééééìïïëëìëççåáÝÜÞáääæèêêèæäæåäßÔ¬ž—’˜¦¹ÓÜÏ£yVA.!llmoqsvwyz{}~~~~‚‚‚‚‚‚‚‚€‚ƒ„…†††††‡‡‡ˆˆ†††‡ˆŠ‹ŒŠ‹‹‹Ž’’’’’“““””””••––”•••–––—˜˜˜™™šššœœœœœœœœœ››šš››œššš›œœœœœœœœœœ ŸœœŸ ŸŸœœžŸ    Ÿ ŸžžŸ žžŸ£¦ ¡¡¡¢¢¢¢¡¢££££¢¢¢¢¢£££¤¤§¥¤¥¦§¦¤¤¤¤¤¥¥¥¦¨¨¨¨¨¨¨¨¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ªªª©©©¨¨§§§§§§§§¦¥£¤¦¨¨¨¬«©©©©«¬¬¬¬¬­­­­¬¬¬«««««­­¬¬­­®¯°¯®®®®¯°³²²±±°¯¯±°¯¯¯°²³°±±±²²²²³´µ¶¶¶¶µ¶¶µ´´µ¶¶¼¼¾¿ÁÂÃÄÇÇÇÉËÏÒÔÐÒÖÚÜÝÝÜààâãääääãääåæçççèèèèèèèèèèèèèèèèèèèèèèèèçççççççççèèèééééêééèèééêééééééééêêêêêêêêììììììììììììììììííííííííîííííîïðïïïïïïïïðððïïîîîïððññððïððððððððñññòòóóóóóóóóóóóôôôôôóóóññññññññðñññðïîîïíêëííëèçæäâàÞÞÝáááââãããäåæççççæååååææææææçççèèèéííëêíìèéèæâßßâäåçéêêéçåçæäáÙȲ¡š’• ±ÌÛÕ°„]F2$jklnqtvxyz{}}~}}€€€€€€€€‚ƒ„…†‡……†††‡‡‡†††‡ˆŠ‹ŒŠŒŒŒ‘‘‘‘‘‘‘‘‘‘’’“””’’““””””•–––———˜˜˜˜™™šššœœœœœœœœšš™™™™šš›››››››œœœœœœœœœŸžœššœžŸžœ›š››œœœžžžžžŸœššœŸœžžŸ¡ŸŸŸŸ   ¡Ÿ ¢£¤¤££¡¡¢¢¢£££§¥£¤¦§¦£¤¤¤¥¥¦¦¦§§§§§§§§¥¥¥¥¥¥¥¥¦¦¦¦¦¦¦¦¨¨§§§¦¦¦¦¦¦¦¦¦¦¦§¤¢¢¦¨¨§©©¨¨¨¨©©©©©ªª«««ªªªªª«««¬¬««¬­®®¯¯®­­®¯¯®¯¯¯°°±±®®®®¯¯°°°°±±±²²²±²³³´´³³´´´´µ¶··¼½¾ÀÁÃÄÅÇÇÇÈÊÌÏÑÐÑÓÖØÚÜÝßàáããääãããäåææççèèèèèèèèèèèèèèèèèèèèèèèèççççççççççèèèéééêééèèééêééééééééêêêêêêêêììììììììììììììììííííííííîííííîïðïïïïïïïïðððïïîîîïððññððïððððððððñññòòóóóóóóóóóóóôôôôôôôôòòòòòòòòóóòñññññïîîïððîìëêèåãâááäääåååææåæçèèèèèççççææææååææçççççêëééìëèêêéæâàáäæçèééèçæéæãâÜÍ·¦“”«ÅØÖ¾fM6'hikmquxyyz{|}}}}‚ƒ…†‡‡………†††‡‡……††ˆŠ‹Œ‹ŒŽŽŒŽ‘‘‘‘‘‘‘‘‘“”••‘‘‘’’“““––———˜˜˜˜˜˜™™šššœœœœœœœœš™˜˜˜˜™šœ›››››ššœœœœœœœœž›™™›žœ›™™š››š›œœœœœš˜˜šœšŸ žœ››žžžŸŸŸ¡£¤¤¤£¡¡¡¢¢¢££§¤£¤¦§¥£¥¥¥¦¦§§§§§§§§§§§¥¥¥¥¥¥¥¥¦¦¦¦¦¦¦¦¦¦¥¥¥¤¤¤¦¦¦¦¦¦¦¦ª§£¢¤¦¤£¦§§¨¨§§¦¦§§§¨©©©¨©©ªª««««««««¬­®¯®®­­®®¯ª«¬®°±³³¬­®®¯¯®®°°°±±²²²¯°±±²²±±´´µ¶·¹»¼½¾¿ÀÂÃÅÅÈÈÇÇÈÊÌÍÒÑÑÒÕØÜÞßàáâããããããäååæççèèèèèèèèèèèèèèèèèèèèèèèèçççççççççççèèéééêééèèééêééééééééêêêêêêêêììììììììììììììììííííííííîííííîïðïïïïïïïïðððïïîîîïððññððïððððððððñññòòóóóóóóóóóóóòóóóóóóóôôóóóóòòôóòðððòòìíïððïîíñðïîîîïïçççççèèèæçèééééèèçççççççåååæææççåéêèèëëèêëìéäááãæççèèççæêæââÞк¨Ÿ”“›¨ÂÖÖȘlQ9)ijloswz|{{||||}}~~€‚ƒ„…†††ƒ„…†‡ˆ‡‡‰‰ŠŠŠ‹‹‹ŠˆˆŒŒ‹ŽŽŽ‘‘‘’’“““‘‘‘’’“““”””•••–––•–˜š›š™šššššššš››››››››™š›š™˜˜™˜—–—˜˜–”š™˜˜——˜˜˜˜˜———––———–––••˜˜————˜˜––——˜˜™™”•–˜šœžž ŸŸ ¡¢¡ ££¢¢¢£¤¥¥¥¤¤¤¤¤¤¡£¥§¨§¥¤¦¦¦¦¦¦¦¦¥¥¥¥¥¥¥¥¤¦©ª©§§§¤¢¡¡£¥¥¤¢¢¢££¤¤¤£££¤¤¤¤¤§¦¦¥¥¥¦¦¥¦§¨©©©©§©««ªª¬®­­­­¬¬¬¬©«®®®¯±³®¬«¬°±°®³³²±°°°±±°°¯¯°°±±²³³²±¯®´´´µ·¹»¼»¼½¾ÀÃÅÆÊÉÈÇÇÉÊËÐÐÑÓÕØÛÜÝßàßßàâääååææççèæææççèèèççççççççæççèèççæççççççççèèèèèèèèèèèèèèèèèèèééêêêééééééééëëëììíííêêêëëìììììììììììîîîîîîîîîîîîîîîîïïïïïïïïðððïïîîîððððððððñññòòóóóòòòòòòòòóóóóóóóóóóóóóóóóõõôóóòñññññððïïïíîîïïîîíééééééééééééééééééèèççççææåååæççççèèééêêèéêèæååæçëìéæèçäèáããÜÓÁ¦ š“–§ÀÓÛʨyT=+hiknrvy{{{||||}}~€€€‚ƒ„…………ƒ„…†‡ˆ‡‡ˆˆ‰‰ŠŠŠŠŒŠˆ‰ŒŽŽŒŽ‘‘‘’’’““‘‘‘’’“““”•••–––––•–—š›š˜šššššššš››››››››™™šš™˜˜™‘‘‘’‘ŽŽŽŽŽŽŒŒŒŒŽ‹‹ŒŒŽ‘”–˜šžžžŸ¡¡¡ ¡¡  ¡¢£¤££¤¤¤¤¤¤¢£¥§¨§¥¤¦¦¦¦¦¦¦¦¥¥¥¥¥¥¥¥¥¦§§¥¤¢¢›™™›œœ››››œœœœžžž  ŸžžŸŸ ŸŸ¡¢££££¢¤¥¦¥¥§¨§§§§§§§§©«­®­®°±¯­¬­¯°¯­±±°¯®®¯¯±°¯¯¯¯°±±±²²²±¯®³´´µ·¹»¼¼¼½¿ÁÃÅÆÊÉÉÉÊËÌÍÏÐÒÔÖÙÚÛÛÝàááâäæããäååæççæææçççèèççççççççæççèèççæççççççççèèèèèèèèèèèèèèèèèèèééêêêééééééééëëëìììííêêêëëìììììììììììîîîîîîîîîîîîîîîîïïïïïïïïðððïïîîîððððððððñññòòóóóòòòòòòòòóóóóóóóóóóóóóóóóõõôóóòñññññðððïïïðññññðïííííííííëëëëëëëëêêêééèèèèçææååååååææçççèæèéèæåæçèëìèæèçääÞáâÜÖÅ«¡›”–¤ºÏÚÑ°ƒ\B0!ghjnruxy{{{||}}}~€€€€‚ƒ„…………ƒ„…†‡ˆ‡‡‡‡ˆˆˆ‰‰‰ŒŠ‰Š‘‘‘‘‘‘‘’’’“‘‘‘’’“““•••––———–••—šš™—››››››››šššššššš™™˜—•’‹ŠˆˆŠŠˆ†‰‰ˆ‡‡‡‡‡‡‡‡†††……††………„„„ƒ‚‚ƒ‚‚‚ƒƒƒ„„‚ƒ„†‰‘“š›Ÿ    žžžŸ ¡¢£¡¢¢£¤¤¥¥£¤¥§§¦¥¤¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¦¥¥£¡Ÿœ™–’‘“”•””””•••–––––——˜˜˜šš™™™™šš™š›žžž ¢¢¡¡£¥££££££¤¤¤§©ªªª¬­°®­­®¯®¬¯®­­¬¬­­°°¯®®¯°°°±±±±°¯®³³³µ¶¸º»¼½¾ÀÂÄÆÆÇÈÉÊËÌÌÌÌÎÑÔÖØØØÖÚÞàáâäåââãääåææææææçççèççççççççæççèèççæççççççççèèèèèèèèèèèèèèèèèèèééêêêééééééééëëëëìììíêêêëëìììììììììììîîîîîîîîîîîîîîîîïïïïïïïïððïïïïîîððððððððñññòòóóóòòòòòòòòóóóóóóóóóóóóóóóóõõôóóòññññññðððïððññññððððððððððîîîîîîîîìììëëëêêééèçåääãââãããääääæççæåçèéëêçæèèäàÛßâÝÙʱ£ž—–Ÿ²ÉÙÙ¼‘hJ5%fhkosvxyzz{||}~~~€€€‚ƒ„„„„„ƒ„…†‡ˆ‡‡†††‡‡ˆˆˆ‹‹‹‹‘‘‘‘‘‘‘’’’‘‘‘’’“““••––————–••—™š˜—››››››››™™™™™™™™š˜•‘‰ƒ€}}~~}{}|{{zz{{zzzzyyyxyxxxwwwwuttssttuwwwwwwwwuuvy~„ŠŽ•˜œŸ ŸŸŸžžžžŸ¡££  ¡¢£¤¥¥£¤¥¦¦¥¥¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¥¤¢¡Ÿ™—’Ž‰††‡ˆˆˆˆˆ‰‰‰ŠŠ‹‹‹ŒŽŽŽŽŽ‘‘’“””””–˜šš™™›šš››œœ £¥¦¦¨©¯®­­­­¬«­­¬««¬¬­¯¯®®®®¯¯¯°°°°¯¯¯²²³´µ·¹º¼½¿ÁÃÄÆÆÄÅÇÉËËÊÊÉËÏÓÖÖÖÖÓ×ÜßßßààáââäåææçååæææçççæææææææææççèèççæççççççççèèèèèèèèèèèèèèèèèèèééêêêééééééééêêëëëìììêêêëëìììììììììììííííííííîîîîîîîîïïïïïïïïïïïïïïïïððððððððñññòòóóóóóóóóóóóóóóóóóóóôôóóóóòòôôôóóòòòòòñññðððîîïïïïîîïïïïïïïïïïïïïïïïîîîîííìììëêéæäâáàáááááááâäåæååçééëéææèæâÞÙÝâßÜζ§¡š˜œ«ÄØÝÆžsQ:(gimquwyzzz{||}~~~€€~~‚ƒƒ„„ƒƒƒ„…†‡ˆ‡‡††††‡‡ˆˆ‹ŒŒŒŽ‘‘‘‘‘‘‘’’‘‘‘’’“““•••––———––•—™™—–šššššššš™™™™™™™™—”Œˆ‚{urpmlmmlklkjiiiijiihhhggggfffeeeedccbbccdeeddddddeegkr{ƒˆ•›ŸŸžžŸŸŸŸŸ ¡££ŸŸ ¡¢£¤¤£¤¤¤¤¤££¢¢¢¢¢¢¢¢¤¤¤¤¤¤¤¤¤¢  Ÿœ–’‡‚{vtuuvvvvwwwxxyyz{|}~~~~~~~€€‚ƒ„……„‡‰‹‹ŠŠŒŽŒŒŽ‘”˜¡£¥§©­­­¬«ªªª¬¬«««¬¬­®®­­­­®®¯®®®®¯¯¯±±²³µ·¸º»¼¾ÁÃÄÅÅÄÅÇÉÊÊÉÉÊÌÐÔÖ××ÖÕØÜÞÞÝÝÝááâäåæçèåååæææççæææææææææççèèççæççççççççèèèèèèèèèèèèèèèèèèèééêêêééééééééêêêëëëììêêêëëìììììììììììííííííííîîîîîîîîïïïïïïïïïïïïïïïïððððððððñññòòóóóóóóóóóóóóóóóóóóóôôôóóòòòôôóóóóòòòòòñññððîïïððïïîïïïïïïïïïïïïïïïïðððïïîîîîîíëéæãááááàààààáâäåäåçéèêèååçãÜÝ×ÜàÞÜиª£œ™›¦¾ÕÝͪ}W>*gjnrvxyzyzz{}~~~~}}‚ƒƒƒƒ‚‚ƒ„…†‡ˆ‡‡†††‡‡ˆˆˆ‹ŒŒ‹‹ŽŽŽ‘‘‘‘‘‘‘’’“““”””•••––—–•–˜˜—•˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜”‹ˆ„}tmeb_]^^^]]]\[ZZ[[ZZYYYXXXWWWVVVUUUUTTTTUUSSRRRQQQQRTZcoz€‹’šŸŸžŸ  ŸŸŸ ¡¢ŸŸ  ¡¢¢££¢¢¢¡¡¡¡¡¡¡¡¡¡¡¡£££££££££¡ŸŸž™‰€ypieeeeeefffgggiijklnnonnnnopqrrstuvvvvy{}}||~€~~€‚„……‰Ž–œ ¤§©©ª«ª¨§¨ª«ªªªª«¬¬®­¬¬¬¬­®®­­­­®¯°°±±²´¶¸¹¹»¾ÁÃÄÄÃÆÇÈÈÉÉÈÈËÍÐÓÕ××××ÚÝÞÝÜÝÞßàáâäåæçäåååææææååååååååæççèèççæççççççççèèèèèèèèèèèèèèèèèèèééêêêéééééééééêêêëëëëêêêëëìììììììììììììììììììîîîîîîîîïïïïïïïïîîïïïïððððððððððñññòòóóóôôôôôôôôóóóóóóóóõõôóóòññóóóóóóóóóòòòññññññòóóòññññññññññïïïïïïïïññðððïïïððïîëèåãããââââááàâääääæèçéçåååÞÕ×Ò×ÜÛÛй¬¢š™š£¹ÏÚѵ‰`D. fhmruwxxyyz{}~~}|‚ƒƒƒ‚‚ƒ„…†‡ˆ‡‡‡‡‡‡ˆˆˆ‰‹ŽŒ‰‰‹ŽŽ‘‘‘‘‘‘’’“““““““””••—–•–˜˜–”————————————————“Ž‡|rf]TPMKKLKKKKJIIIIIHHGGGFFFEEDDDCCCCBAAAABC@@@??>>>>?BITbow‡™Ÿžž  Ÿžžžž      ¡¡¢¡  ŸŸŸŸ        £££££££££¡ Ÿ”ˆ~umaXSQQQQQQRRSSSUVWXYZ[\[[[[\]_`_`accddcfhjjiikmlmnprstuz€‰’˜¢¥¥§©¨¦¥§©¨¨¨¨¨©ª«­­¬««¬­­­­¬¬¬­¯°°°±²³µ·¸·¹½ÀÂÂÂÂÅÅÄÃÃÃÃÄÇÈÊÌÏÑÒÓÓÖØÙÙÙÛÝÜÜÞßáãääääåååæææååååååååæççèèççæççççççççèèèèèèèèèèèèèèèèèèèééêêêééééééééééêêêëëëêêêëëìììììììììììììììììììîîîîîîîîïïïïïïïïîîîïïðððððððððððñññòòóóóôôôôôôôôóóóóóóóóõõôóóòññóóóóóóóóóóòòòññññòòóóòòñòòòòòòòòððððððððñññððïïïñññðîëçåææååäääãàâääããäææççååãÙÍÍÉÏÕ×ÙϺªž–—š ³ÈØÖ¿”iK5$dglqtvwwxyz{}~€}||‚‚ƒƒƒ‚ƒ„…†‡ˆ‡‡‡‡ˆˆˆ‰‰‰ŒŽŒˆ‡‰ŒŒŒŒŽŽ‘‘‘‘‘‘’’“““’’’“““””—–•–——–”––––––––————————•Ž„|sfWL@=9777778766556644433322111000//.--,,--./..--,,,126=JYgp…Ž™Ÿžœž Ÿžœœ›œœ      ŸŸ¡ Ÿžžžžž        ££££££££¤¢ Ÿ›ue\PE?==<<<<===>>@ABCEFGGFFFGHIJKKLMNOPOORSUUUUVXXYZ\^`abmt~ˆ–›ž¢¥§§¥¤§©¦¦¦¦¦§¨©­¬¬««¬¬­­¬««¬­¯°°°°±³µ·¸¶¸¼¿ÁÂÁÁÂÁ¿½¼½½¾ÁÁÂÄÇÊÌÍÍÏÑÒÓÕÙÜÙÚÛÝßàââäääååæææååååååååæççèèççæççççççççèèèèèèèèèèèèèèèèèèèééêêêéééééééééééêêëëëêêêëëìììììììììììììììììììîîîîîîîîïïïïïïïïîîîïïðððððððððððñññòòóóóôôôôôôôôóóóóóóóóõõôóóòññóóóóóóóóóóóòòñññïððññððïñññññññññññññññññññððïïïñòòòðìéæèèççææååáâääââãååççæåâÖÉÆÂÈÑÓ×Ϻ©›“•™ž¯ÃØÙÆœpQ9(hkqvxywvyz{|}~~}|}€€}|~~~€€€‚ƒ„…††††‰‰‰‰‰‰‰‰‰‰‰ŠŠ‹‹‹ŠŠŠ‹ŒŽ‘‘’’’”“’‘‘“•–’’‘’“•••••••••—––••””“™™™˜—–•”‘Ž…wk^M>2,)*)&%'########""""""""!.=Mbr‚Ž™›š›œ››››››››œžŸŸŸŸžŸŸŸŸŸŸŸŸžŸŸ  ŸŸž££££££££œŸŸ™Žzh_N<2-(&'+++++,-.../001226666666666789::;<<=>?@AAEFGGGIMPYfs|‡”Ÿ£¤¥¥¥¥¥¦¦¥¥¦§¨ª¬­«««ªªªªª­¬¬¬¬¬¬¬®¯°±³´¶¶»¼½¾ÀÁÂÃÁÀ¾¹´±°°µµ¶¸º½¿ÁÁÄÇÈÉÊÍÏÑÒÕ×ÛÝàáääääååååääååæççèêèæåæçèèæçççææèêæææççèèèççççççççèèèèèèèèèèèééêêêèèèééêêêëëëëëëëëëëëëëëëëìììììììììììííîîîîîîîîîîîïïïïïïïïïïïððññññññòòóóóôôôôôôôôóóóóóóóóõõõôôóóóõõõôôóóóôôôóóòòòóòòññððïðññòòññððññòòññðòòòññððððñóõôñîìëêéçææææååååååååäããååÞÒÈÁÃÅÊÑÓɽ¬•—–—ªÃÕÞÊ°…XC,hkquxyxwwxyz{|{{}}}}€€€‚ƒ„††‡‡†‰‰‰‰‰‰‰‰‡ˆˆˆ‰‰‰‰‹ŠŠ‹ŒŽ‘‘‘’’‘’““””””’’’’’“””••••••••––••••””˜˜˜˜—–•”ŒrcUB3"(7I]m‚Ž™›š›œœ››››››››œœžŸŸžžŸŸŸŸŸŸŸŸžžŸ  Ÿžž¢¢¢¢¢¢¢¢  ˜ygSA.#!!!!!!!!&&'()**+++,-.//0345557:>KYivƒ’¢¤¤¤¥¥¥¥¦¥¥¥¦§¨ª«©©©©©©©ª¬¬¬¬¬¬¬«®®¯±³´µ¶¶·¹¼¿ÂÄÅÁ¾¹²ª¤¡ ¢¢¤¦¨«®¯±´·¹º»¾ÁÃÄÆÊÍÐÓÔÙÙÚÚÛÜÝÝÞÞßàáââãæåäääåååèééèæåæçæææçççèèççççççççèèèèèèèèèèèéééêêèèèééêêêëëëëëëëëëëëëëëëëìììììììììììíííîîîîîîîîîîïïïïïïïïïïïðððñññññòòòóóôôôôôôôôóóóóóóóóõõõôôóóóõõõôôóóóôôôóóòòòòòñññññðñòóóóóòñðññòòññðòòòñññððòôö÷öóðîííëêééééææææææææçååææàÖÍÃÃÃÅÌÐËÁ°¡™š˜—§¾ÏÜϺ`H/ilquxyxwwxy{||||}~~~~}€€‚‚‚ƒƒ…†‡‡‡‡‰‰‰‰‰‰‰‰ˆˆ‰‰ŠŠŠŠ‹‹‹‹ŒŽ‘‘‘’‘“•–•“’’“””••””••••••••””••••––––———––•‘Œm\L8($4F[l‚Ž˜š™šœ››››››››››œžžžžžžžžžžžŸŸŸŸž        Ÿ¡ —‹vdN;& "%(8H\m}›Ÿ£££¤¤¥¥¥¥¥¤¤¥¦§§¦¦¦§¨¨©©««««««««­®¯°²´µµµ¶¸º½¿Á¾¹°¦›’Œ‰Ž‘”˜›œž ¤¦§ª­°±³µ¹½ÁÄÅÊÊËÍÏÐÑÒÔÕÖ×ÙÚÛÜÞßàáââââãåççåäåæææææçççèççççççççèèèèèèèèèèèèéééêèèèééêêêëëëëëëëëëëëëëëëëììììììììììììíííîîîîîîîîîïïïïïïïïïïïïðððñññññòòòóóóóôôôôôóóóóóóóóõõôôôôóóõõõôôóóóôôôóóòòòññññòòòòòóôôôôóòññòòòòññòòòòñññðòôö÷öóðîðïîíììììééééééééëéçççãÜÕÍËÆÄÈÍÊô§™–£¶ÇÚÖÇžlP5jlquxyyxz{|}~~~~~~~~~~~~€€€€‚‚ƒ„…†‡‡‡‡‰‰‰‰‰‰‰‰‹‹ŒŒŒ‹‹‹‹‹ŒŽ‘‘‘‘’“”•”““’“•–—–•”••••••••“””••––—”••––––•’~kYH3#$5H^n‚Ž˜š™š›ššššššššššš›œœœžžžžžžžžžžžž ¢¡œ–‰taO;%** !"#%&'(/02468::CDFIKNPQSVZ^^aly„š¯»ÈØáâãääååääãääääääääçççææåååæææææææææææççèèèêééèçççèêæåéëéèêééèêìííìéìîîíìíîííììëëêêìíïïïïñòïïïïïïïïîîîïïðððññòòòóóóóóóóóóóóôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôõõõôôóóóôóòóôóðíîêèêêèéíëëìíííììììììììììêëìíìëéèäÛǯŸš™—¦»ÍàÖ·”^mptvwxz|{|}}~~}}~~~~€€€€‚ƒ„…‡‡ˆˆ‡ŠŠŠŠŠŠŠŠŠŠŠ‰‰Š‹‹Ž‘‘‘‘’’’““’’““”••––•””•———––——˜™˜—•”““””•”’“””’‘‰p^L8%** "#%%)*+-/1338:>AACNZo‡¡³Ä×ãåãääååääãääääääääçççææåååæææææææææææçççèèèèèççææåäààäçåäæçæææçççæçéëëêéêëêêêêêëëëéëììëëíïîîîîîîîîîîîïïïððñññòòòóóóóóóóóóóôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôõõõôôóóóôóóóôóðííéèééçèìêëìíííììììììììììëëìíìëêéæÞ˳¢œš˜¢µÈßÚ¿gnquwxy{}{{|}~~}}}}}~~~~~€€€‚‚„„†‡ˆˆˆˆŠŠŠŠŠŠŠŠŒ‹ŠŠŠŠŠ‹ŒŽ‘‘‘’’’’““’’“”••–—˜—••—™——––—˜™™—–•”““““•”“”••’ˆ}m[H5" ,>Qfw‰‘–•”–˜˜—˜˜˜™™™š˜™š››››š››››››››››œœœœ››œžžœ›š˜‘€iYE4! $7Pcuˆ—žŸŸ ¡¡¢££¢£££¢¢¡ ¥¤¢¡¡¢¤¥§¦¦§§©ª«¨©ª¬®°±²´´´µ¶··¸°Ÿ…lU?*##&)()3>Xs’¨¾ÔáäããääääããääääääääææææååååææææææææææææçççèççççåãáàÞÚÛàäââãææææååååçéëëêêêìéêêëìííîëìîíììíîííííííííîîîîïïïðððñññòòòòòòóóóóóôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôõõõõôôôôôóóôôóðîíèçèèåæêêëìííííìììììììììëììììëêééâѹ§Ÿœ™¯ÁÜßʪtprvxxy{}z{|}}}}|}|||}}~~€€€€‚ƒ„…†‡ˆˆˆˆŠŠŠŠŠŠŠŠŒŒ‹ŠŠŠŠ‹Œ‘Ž‘‘‘’’’““”““““”•––—˜–••—˜˜————˜™š—–••”“““•””•–•“ˆ}kXE2! .@Shx‹’–”“–™™———˜˜˜™™˜™š››››šœœ››››šš›››œœ›››››››››››œš™—~gWD3  $7Pcuˆ—ž   ¡¡¢¢¢¡¢£¤¤¢ Ÿ¤££¢¢££¤¦¥¥¦§¨©ª¨©ª¬®°±²²³´µ¶¶¶¶°Ÿ†lU?+%/Kgˆ¢¹ÐÝßâãääääãâääääääääæåååååååååååååååååæææççççççåâÜ×ÔÐÍÎÔØ××ÙÞßàáàáâããæèéèèéëèèééêëëìêìííëëìíììííííîîííîîîïïïïðððñññññòòòòóóóóóóóóóóóôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôõõõõõõõôôôóôõôñîìèæççäåèéêëìííííííííííííììììëëêêêæÖ¿«¡œ™›ªºØâÔ·‚psvxxy{|z{||}}||}||{|}~€€‚ƒ„…†ˆˆ‰‰ˆŠŠŠŠŠŠŠŠŒŒ‹ŠŠ‹‹ŒŽ‘‘Ž‘‘’’’“““””““””•–•–—–””–˜˜˜——˜˜™š———–•”““”””–—–“‰|iUC0  0CUjz‹’–”’•˜˜———˜˜˜™™˜™š››››šœœœ››ššš›››šš››››››››››››š™–}fUC2  $7Pcuˆ—ž  ¡¡¡¡¢¢¡¢£¤¤¢ Ÿ££££££££¤¤¤¤¥¦§¨¨©ª¬®°±²²³´¶¶¶¶¶± †lU@+%Daƒž·ÏÜÞââãääãââäääääääääååååååååååååååååååæææççèèæâÚÐÆÀ¹¶¶»¿¿ÀÃÉÌÏÑÒÔ×ÚÚÝàââãåæåååææççççèééèèéêìììííîîïíííîîîïïïïïïðððñðññòòóóóóóóóóóóóôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôõõõõõõõöõôôôõôñîìèæçæãäçéêëìíîîîííííííííììëëêêêêêèÛÅ°£™œ¨¶ÔâÚÂpsvwwxz{zz{|||||}}|{|~€‚ƒƒ……‡ˆ‰‰‰‰ŠŠŠŠŠŠŠŠ‹‹‹‹‹ŒŽ’’’’“““””””””•––•––•””•—˜˜˜˜˜™šš˜˜˜˜—–•”””•—˜–“‰|hS@.  2EWl{‹’—•“•—–—˜˜˜™™™š˜™š››››šœ››š™™››šššš››žœœžœš™–Ž}fUB1 $7Pcuˆ—ž¡¡¡¡¡¡¡¡¢£££¢¢¡ ££££££££££££¤¥¦§¨©ª¬®°±²²³µ·¸··¶± ‡mV@,">[›µÏÞáââããããââääääääääääääååååäääääääääåååææææèçäÜξ°§¢œ›Ÿ¢¤¦«¯³¹¼¾ÁÆËÎÑÕØÙÛÞàááâãäåæææèêêééëíêêëììííîìíííîîîîîîîïïïðððððñòòóóòòòòòòòòôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôôõõõõööööõôôõöôñïíéæçæãäçèéëìíîîîîîîîîîîîíìëêêêêëééàÊ´§Ÿšœ§²ÐßÜËpruvvwxzyz{||||{~}||}ƒ‚‚ƒ„…†‡ˆ‰‰‰‰ŠŠŠŠŠŠŠŠŠŠŠŠŒ‘’’’“““””•””””•–—–—˜—••—™™˜˜˜˜™š›™™šš™˜–•””•—˜—“‡zeO<*!3FYm}Œ”™˜–—˜–˜™™™ššš›˜™š››››šœ››š™™››š™™š››žžœœžž›™—}fUA1 $7Pcuˆ—ž¡¡¡¡¡¡¡¡¤£¢¢¡¡¡¢¢££¤¤££¢¤££¤¤¦§¨¨©ª¬®°±²²´¶¸¹¹·¶± ‡mV@,"5..0148;=AEJORT[]agmrvy~…‰’˜œ£§¬°³¸¼ÀÈÊÑÝäåçêéëííìëìíîîîïïïððïïïðððññóóóòòñññóóóóóóóóôôôôôôôôòóóóôôôôôôôôôôôôóôôõõôôóõöö÷÷ööõö÷÷÷÷öõôðíêèèèçæèêìîïïïïïïïîîíííîíìëëëëìéëéÝɶ©£žŸ¦¸ÑàÙËprtvxyzzyz{||||{||}~€‚‚„ƒƒƒƒ„…†‰ˆˆ‡‡ˆˆ‰†‡ˆ‰‰‰‰ˆŠ‹‹ŒŽŽŽ‘‘‘‘‘’’“““““”–˜™š–™™–—›œš›››š›œœš™›š—–™š›š˜™™“Š€p\I6" (9Mbv‚–™˜—šš˜š™™™™š›œœœœœœœœœœ›š™™›ž››››››››œš˜–{cR=-%8Qevˆ–œ¡¢£¤¤¢ Ÿ¢¢¢¢££££££££££££¨¦¥¤¤¦©ª¨ª­®¯°³µµµ·¸¹¹¹¹³£‹r[D. "7Rv•®ÆØáããããããããããããããããßàâãääãâäãããâââáââããäåååçâÝÉ¥…gJ6+!"%&(+.135:<@FKQUW[_cglqw{€„‰Ž“˜ž¢©­ºËØÞäééëííìëìíííîîîïïïïïïïðððñòòòòññññóóóóóóóóôôôôôôôôóóóôôõõõôôôôôôôôóôôõõôôóõõööööõõöö÷÷÷öõôñîëéééèçéêëíîïïïïïïîîíííîíìëëëëìêíìâѽ®¦ŸŸ£³ÌÞÝÔpqsuwxyyyz{||||{||}~€‚‚„ƒƒƒƒ„…†‹Šˆ‡‡ˆŠ‹‡ˆ‰ŠŠŠŠ‰‹‹ŒŒŽ‘‘‘’’“““””•••““”•—™›œ—šš—˜œ›œœ›››œœš™œ›——™š›š˜˜˜’‰~nZG4!):Ndxƒ’—›™˜››™ššššš›œœœœœœœœœœ››ššš›œœœœœœœœœ›š˜•‹xaQ=,%9Qew‰–œ¢¢£££¢¡ ££££££££¤¤¤¤¤¤¤¤¦¦¥¥¦§©ª¦©«¬­®±³µ¶·¸¹¹¹¹´¤Œs[D. !6Qt“¬ÅØáããããããããääääääääÞßáâãäããããâââáááâââããääåäàÞͪ‹lN;." "#$%&(+/369;?CGKOTZ^`djpu{€…‰ ·ÊÖàèèêìíëëëíìíííîîîîîîïïïðððòñññññññòòòòòòòòòòòòòòòòóóôôõõõõôôôôôôôôóôôõõôôóôõööööõôõö÷÷÷öõõòïìêêêéèééëìíîïïïïïîîíííîíìëëëëìêìíæØų¨ Ÿ¡­ÅÚàÜpqsuvwxxyz{||||{||}~€‚‚„ƒƒƒƒ„…†‹Š‰ˆˆ‰Š‹‰Š‹ŒŒŒ‹‹‹‹ŒŽŽ‘‘‘’’’”””””•••“””–—šœ˜šš˜™žœœ››œœžššœ›˜—šš›š—˜˜‘ˆ}mXF3!);Oex„”™œš™›œ™››šš›œœœœœœœœœ››››››››šššš››œœœœœœœœœšš™•Šw`Q<, %9Rew‰—££££¢¢¡ ££££££££¤¤¤¤¤¤¤¤£¥¦¨©©©¨§©¬­­¯±³µ¶·¹¹ºº¹¶¥t\E/  4OrªÃ×àããããããããääääääääßàáâãäääããâââáááâââããããäâààЮpR;-  !#$%')-037. #!$%&'*,2;Rt—µÏàçéëìêêêìêêëëëìììííîîîïïïïïïððñññññññññññññññññññññññòòóóôôôôôôôôóôôõõôôóóôôõõôôóôõö÷÷÷÷ööóïíííìëééééêìîðïïïîîíííîíìëëëëììëêéãÔÀ±¥¢ž °ÈÚàoprstuuuyz{||||{||}~€‚‚„ƒƒƒƒ„…††‡‰ŠŠ‰‡†ˆ‰Š‹‹‹‹ŠŒŒŽŽ‘‘‘’’“““–••••••••••••–˜˜™œœ™šž ŸŸžœœœœœŸ››œ˜˜šš›™——–†vfQ>,.AVk~‰—Ÿœ›œœœžŸŸŸŸŸŸŸŸŸ™š›œœœœ››˜Šv`S;+ &:SfxŠ˜ž¤£¢¡¡¡¡¢¢¢¢¡¡  Ÿ¥¥¥¥¥¥¥¥§¦¥¥§©¬®¨ª¬®®¯²´¶·¸¹º»ºº¸¨u]F/!1Kn‹¦ÀÕßããããããããååååååååçæååäååååååäääããââââââââçåäÔ²“uW@/ "$ *BfŒ®Ëßçéëëêêêëêêêëëëììíííîîïïïïïïððñññññññññññííííííííðððñññòòôôôôôôôôóôôõõôôóóôôõõôôóôôö÷÷÷÷÷öóïîíííëééééêìîðïïïîîíííîíìëëëëìîìêêåØô¦£žŸ­Ä×ßpqstuvvvxyz{|}}}z{}‚‚‚ƒƒ„……†‡‡‰‰‰‰‰‰‰‰‹‹‹‹‹‹‹‹ŽŽŽŽŽŽŽŽŽ’’‘“““““““’––•–—˜™šš›œžŸŸ ŸŸŸžžžžžœœœ™šš™›™udO<+  !2DWkžžžžžžžžœœœžž ŸžžžžŸ  ž›œŸ¡››œžŸŸœœœœœœœœœžœ”‰x`M;+%9RfxŠ˜Ÿ¢¢¢¡¡  Ÿ¤¤¢¡¡¡¡¡£¤¥¦¦¥£¢¦¦§¨ª«¬¬««­®°±²³²´¶¸º»¼¼²¦u^I2!,Gj‰¤¾ÓÝâãäååååäååååååååååååååååååååååååããããããããâàáÓ³•vXB1! $(:Z§ÇÝâèìêêëëèêêêëëììììíîïïïïîîîîïïðððóïîñóñïíííìêêíïîðïïðòóóòóòðñòôôóñððñóôôóõôôõö÷øùöööööööööóîìëìëêêéèçèéêëîîîîîîîîìííííìëêíéíîæÞÍ´¨¥Ÿ¨½Óápqstuvvvxyz{|}}|z{|~‚ƒƒƒ„……†‡‡ˆ‰‰‰‰‰‰Š‹‹‹‹‹‹‹‹ŽŽ‘’’””””““““––––—˜™ššš››œŸŸŸžžžžžœœœš›š™›˜€sbM:)  !3EXl‚žžžžžžžžžžžŸŸŸ   ŸŸŸŸ  ¡ŸœœŸ žžžœœœœœœœœœœœžœ”‰w`M;+%9Rfx‹™Ÿ¢¢¢¡¡¡  ¤£¢¢¡¡¡¢¢¢£££¢¢¡¦¦§¨©ª«¬«¬­®°²³³´µ¶¸¹º»»´¨‘w`K4",Fjˆ£¾ÓÝâãäååååäååååååååååååååååååååååååããããããããäâãÕ¶˜y[C2" !%6W~£ÅÚâèìêéëëèêêêëëììììíîîïïîîîîîïïïððóñððïìèæèæãáâåççéééêìíííïîîîðñòòø÷÷÷÷÷ööõôôôõö÷øööööööööôñíêêêéèéèçççéëìîîîîîîîîìííííìëêíéíîçß϶¬§Ÿœ¥¹ÐÞpqstuvvvxyz{||||{{{{}‚ƒƒƒ„……†‡‡ˆˆˆ‰‰ŠŠŠ‹‹‹‹‹‹‹‹‹ŒŒ‘“’‘“•””””••••––––—˜šššš››››››ŸŸŸžžžžžœœœš››šš˜Œ€p_J7&  "4GYnƒ‘žžžžžžžžŸŸŸ  ¡¡¡¢¡¡  ¡¡¢¢¡Ÿœžž¡¡ Ÿœ›šœžœ”ˆw_L:*&:Rfx‹™Ÿ££¢¢¢¡¡¡¤££¢¡¢¢¢££¢¢¢££¤¥¦§¨©ª««¬¬­¯±²³´¶¶·¸¹ºº»¶ª“xaL5#+Eh‡¢½ÒÝããäåååååååååååååååååååååååååååååããããããããæãäغœ}^E4" "2QxžÁ×áçëêéëëèêêêëëìììììíîïïîîîîîîïïïðòòòðîêæãâÝØÖØÛßáâãäæèêìíëììíîïðñððððððïïõõôôôõö÷ööööööööõòîëëêéèèçæåæéëíîîîîîîîîìííííìëêíéíîçáÒº°© ›¢´ËÛpqstuvvvyz{|||||{zyy{~„ƒƒ„……†‡‡‡‡ˆ‰‰Š‹‹‹‹‹‹‹‹‹‹Š‹Œ‘’“’‘‘‘’”•”••••–––—––——™š›œœœ›››››ŸŸŸžžžžžœœœ›œ›šš—‹o^H5%  "5I[p…“ŸŸŸŸŸŸŸŸŸŸ   ¡¡¡£¢¢¡¡¢¢££¡ ž¢¡ Ÿžœœžžžž›žœ”ˆw_L9)&:Sgy‹™Ÿ£££££¢¢¢¤££¢¢¢££§¦¥¤¤¥§¨¥¦§¨©ª«¬¬­®°±³´µ¸¸¸¸¹¹º»¸«”ybM6$*Dg…¡¼ÒÝãäååææååååååååååååååååååååååååååääääääääæãåÙ½ €`G6$ .Lr™½ÔàçëééëëèêêêëëìììëìíîîîîíííîîîïïïïòóñðíèâÓÊÁÀÃÇÍÑÒÕÙÝàäèëæèêêêëìíðñóóóóõöööõõõõööõõöööö÷÷øõñïîíëêçæääåèìîííííííííìííííìëêíèìîèäÖÀ²©ŸšŸ®ÆÙpqstuvvvyz{|||{{{zyy{~„ƒƒ„……†‡‡ˆˆˆ‰‰ŠŠŠ‹‹‹‹‹‹‹‹Š‹Œ‘’‘’“”“’’”””••–––————˜™š›œœœŸŸŸžžžžžœœœœšš—Š}n]G4$#7K^r‡”ŸŸŸŸŸŸŸŸŸŸŸ   ¡¡££¢¢¢¢££¢¢¡ŸžžŸŸŸŸŸŸŸŸ  ŸŸžž››“‡v_K8(&:SgyŒš £££££¤¤¤¤££¢¢£¤¤§¦¥¥¥§¨ª¦§¨©ª«¬¬­®¯±²´µ¶¹¸¸¸¸º»¼¸¬•ybL5#)BeƒŸ»ÑÝãäåææææåååååååååååååååååååååååååääääääääæãäÚ¿£‚aJ8% +Gm”¹ÐßæêééëëèêêêëëìììëìííîîíííííîîîïïîòóñðíâÖ¹«Ÿ ¤«²¶»ÂÈÍÓÚßÞáåæææèêìîððîîðòõõôôôõö÷õõõöö÷÷÷ùöóñðîëéçåãâäçëîííííííííìííííìëêíèìîéçÛų©žš©ÀÖpqstuvvvzz{||{{z{{{{}‚ƒƒƒ„……†‡‡‰‰‰‰‰‰‰‰‹‹‹‹‹‹‹‹‹ŒŒ‘Ž’””“‘“““”•–––————˜™››žžŸŸŸžžžžžœœœžžœšš–Š|l[E2#$8M`tˆ–        ŸŸŸ  ¡¡¡£¢¢¡¡¢¢£¡¡¡ ŸŸžžžžŸ ¡¢¢£¡¡  Ÿžž››“‡v^K7(';ThzŒš ££¤¤¤¥¥¥¤££££¤¥¥¤¤¤¤¥¦§¨¨¨©ª«¬­®®¯°±³µ¶¶¹¸··¸º¼¾¹­•zbM5#'AcºÑÝääåæççææååååååååååååååååååååååååååååååååæãäÜç…cL:& )CgŽ³ËÞåéèèëëéêêêëëìììëëìíííííìíííîîîîïòòïîéÖÁ¤‘{}~…•›¤«±¸ÁÇÏÕÛÞßáäèçêìëèçéìñññòòôõöôôõöö÷øø÷õòðïìéççåãáâæêíìììììììììííííìëêíèëîêéß˵ª œ›£¹Ðpqstuvvvz{{||{{zz{|~‚ƒƒƒ„……†‡‡‹‹Š‰‰ˆ‡‡‹‹‹‹‹‹‹‹ŽŽ‘‘‘‘‘‘’’“”••–˜——˜˜š›œ›››œžžŸŸŸžžžžžœœœžŸšš–‰|jXB0 %:NbvŠ—         ¡¡¡¢¢¢£¢¢¡¡¡¡¢¢      ŸŸžŸŸ ¡¢££¢¢¡ Ÿžžšœš“‡v^K6'';ThzŒš¡¤¤¤¥¥¥¦¦£££££¤¥¦££¥¦§§§§©ªª¬­®¯¯¯¯°²´µ¶·¸¸··¸»¾À»¯˜|dN7$'@b€œ¹ÑÝäåææççææååååååååååååååååååååååååååååååååèäæÞÆ«‰fN;' &>aˆ­ÆÞäéèèëëéêêêëëìììêëìííííìììíííîîîïòðîïéϲ–~g_^\ainu†‹’›¢«³½ÃÇËÑÖàåéêèéíòìììíïñòôôôõöö÷øøøõóñïíéæèæãàáäèëìììììììììííííìëêíèëîëëâϹ­£žš±Èpqstuvvv{{|||{zzz{}‚‚‚ƒƒ„……†‡‡ŒŒ‹Šˆ‡††‹‹‹‹‹‹‹‹ŽŽŽŽŽŽŽŽ‘ŽŽŽ’“‘‘’“”••˜˜˜˜™š›œ˜™™š›œžŸŸŸžžžžžœœœŸŸ›š•ˆ{hV@-%:OcwŠ˜        ¢¢£££¤¤¤¢¡¡  ¡¡¢ŸŸ ¡¡¡     ¡¡¢¢¢£¢¡¡ Ÿžžšœš’‡u^K6'';ThzŒ›¡¤¤¤¥¥¦¦§£££££¥¦¦¤¥¨©ªªª©ª««­®¯°°¯°±²´µ··¸·¶·¹¼¿Á½±™~fP8&&@a›¸ÐÝäåæççççæååååååååååååååååååååååååååååååååéåçàÉ®ŒhO<' #:\ƒ©ÂÝäèèèëëéêêêëëìììêëìííííììììííîîîîðïïóîÑ°ŠoUKFBENMT]chnw~ƒŒ˜¡¦­µ»ÁÇÎÒÓ×Þäçèèêìîðñôôõöö÷øøúøõôòðìééçãààãçêìììììììììííííìëêíèëîëìäѼ°¥ ™™«Ásstuuvww{{{{{{{{{|~€€‚„…††ˆˆˆˆˆˆˆˆŽŒ‹‹‹‹‰Š‹’’‘‘’‘’”••”“––—˜™™š›™™™šš›››››œžŸŸžžžŸŸ    ¡ ›”…wfR:))>Sgz‹•ž ¢££¢¡¤¥¥¦¦¥¥¤¢¢¢££¤¤¤ŸŸ ¡¡  Ÿ¢¡¡  ¡¡¢  ŸŸŸžžžž›–Št[J6'(Th{‹–žŸ¡¢£££¢¤¤¥¥¥¥¤¤¢¢¢££¤¤¤  ¡¡¢¡  ¢¡¡  ¡¡¢¡¡  ŸŸŸŸ Ÿœ•ˆsZJ6'',1Pq®È×ãåççåääåååååååååæææææææææææææææææææææææææåååÛÀš~aF2& &Be‹®ÉÜäåëéæëêêêêêêêêëëëëëëëëíììììíîïîñìñíëìЫ†fS?53/......//22321012246832.--,,--....//000//01123313:Ns¤Ñêêîóõôôöùùùùùú÷óðîìèåâààßåéêçæèêèççèéëìíííííììëëëêÙŶ¨œ˜œttuvwwxxyxxwwxxy|}~€‚‚‚„„………†††ˆˆ‰‰‰ŠŠŠ‹‹‹‹‹‹‹‹‹‹ŒŽŽŽŽŽ‘’“””“’‘ŽŽ””““”•––š™˜˜˜˜™š™™šš›œœœžžŸŸŸžžœ—‘†raN<( &8Nat‡–œ¥£¡¢¥¦¤¢¥¥¥¦¦§§§§§¦¦¥¤££¤££¢¡¡¢¢¡ ŸžžžžŸ¤¤¤££¢¢¢¥¦¢•ƒnVC/!  ';Ti}‘¡©««¬¬¬­­­¬¬¬«ªª©©­­®¯°±²²´´µµ¶¶··¸º½¾¾¾¿ÀÀÀÁÂÃÅÅÆû¨Žu]D2*Eh‡ ¾×áãææååæçççççççççååççççååååååååååææææææææäææäãÔ¯‹pS;+ /Io–¶ËáéçæèééééêêêëëììììììììììììììììëîïíîïëäЪdR@52.--,,--....///00//011233348Ik›ÊæéîóõôôöùùùùùúøôðîìèäááááäéëèæéêéçèéêëìíîíííììëëëëÛɹ«ž›tuuvwxxxyyxxxxyy}~‚ƒƒƒ„………††††ˆ‰‰‰ŠŠŠŠ‹‹‹‹‹ŒŒŒ‹‹‹ŒŽŒŽ‘‘’––•”“’‘‘•••••–—˜™™˜——˜™™˜˜™š›œœžžžžŸŸžžœ—‘†sbL:%):Pcv‰–œ¥£¢£¤¥¤¢¤¤¤¥¥¥¥¦§§¦¦¥¤¤¤§¦¥¥¤¤¥¥££¢¡¡¡¡¢¤££££¢¢¢£¥¡•„oVC/" ';Ti}‘¡©«¬¬¬­­­­¯¯®­¬«ª©­®¯°²³´µ········¸»¾¿¾¾ÀÁÀÀÁÂÃÅÅÆŽªw_E2 (Ac‚½×áãææååæçççççççççåææççææåååååååååææææææææäæåääÖ²tV>. -Ej‘°ÆÞæååçèééééêêêëëëëëëëëëììììììììëîîííïëåÖ²‡jVC62.--,,--.....///0//011233645B`Ž¿àçìòõôôöùùùùúúøôñðìçãàáâääéëèçêëéèèéêìíîîíííììëëëìßξ®¢žuuvvwxyyzyxxxxyz~‚ƒ„„„………†††‡‡‰‰‰ŠŠŠ‹‹‹‹‹ŒŒŒŒŒ‹‹ŒŽ‘ŒŒŽ‘‘’’“”””••””••–—˜—––––—˜––—˜™š›œœœœœœœš›˜”†tdL:%(9Nbv‹˜¤£££¤¤¤££££¤¤¤¤¤¥¥¥¤¤£££§§¦¥¥¥¥¥££¢¡¡¢¢£¢¢¢¢¡¡¡¡ ž“ƒoVC0#';Ti}‘¡©¬¬¬­­­®®¯¯¯®­­¬¬­®¯°²´µµ¶····¸¸¸¸º½¾¾¾¿ÁÀÁÁÃÄÅÆÆÇ¿¬“yaG3!'@cœ»Õáãææååæçççççççççææææææææææææææææææææææææäæåäåض”xZ@0  *@cŠªÁÚåååçèèèéééêêêêêêêêêêêëëëëëëëëëîîìíïìæÛºpYE71.--,,--.--.../////0112336333.--,,--.,,---...//0112334127?ZŽ½Þåîóôôöøøøùûüû÷ôðíçáÝÚÙÙÜâçææèèåææçèéêëìíííììëëëêêá̸¬¤žvvwxxyzz{zzyyzz{}~‚ƒƒƒ†††‡‡ˆˆˆŠŠŠ‹‹ŒŒŒ‹‹ŒŽŽŽ‹‰‡……„„ƒ‚‚‚~~€‚ƒ„„‚‚ƒ„„ƒƒ‚‚ƒƒ„‡‡†……„ƒƒ……„„ƒƒ‚‚€€~zwqcTK=0++)((&&&&&&&&''''''''((((((((((((((((((((((((&##%%$(.5@N\lz€ˆŠŒ‹ˆ‡‰ŒŒŒ‹‹ŠŠ‰‰ŒŒŽŽŒŒŒŒŒŽŽŽŽ‘’ŽƒvgUF9,';Ti}‘¡©­­­®®¯¯¯®®®®®®®®µµµ´´´³³ºººººººº½ÀÂÃÃÃÄÆÆÇÇÉÊËÌÌÍÆ´›gJ6$!8Yx”µÑáãææååæçççççççççèçåääåçèççççççççææææææææäåãäçáÄ¥…fK8%!!/Nt”¯ÎßãåçççççèèéééèèèèèèèèêêêêêêêêëíìêëïîêéѪƒfRA5.--,,--.,,,--...//0112334237;R„³ÜäíóôõöøøøùûüûøõïìçâÝÙ×ÖÚáææåççäååæçèêêëíííììëëëëíäÏ»¯¦Ÿtuwxyzzz}}|{{{||€€€‚ƒ…†ˆˆˆˆˆˆˆˆ‰‰Š‹‹Œ‘ŒŒŽ‘’‘‹†ƒ‚‚‚zvy{yxywwwwwwwwwwwvvvuuuuuuttsswwwwwwwwutttsssrqtrmki`UHC<64456235666545555555567778888776556777777777777653467=DO[fovz|{{zz{{|zzzzzzzz|||}}}~~~~~~~€€€€€€€€‚…ƒ~ui\QJ73,'%$$$$$###$$% *:644443322233400000///.---,,,,*)))((('''&%%$##!"#!"%2AVgt›Ÿ ¢££¢¢£££¤¥¦¦¦ª¬®®­®¯±²³µ·¹ººº½¿ÁÂÂÃÅÇÃÅÈÊÌÌËÊÌÅ´œ„jN8(4Ut‘³ÏàåçååèéæççççççççççççççççççççççççççççççççêäæèåâÍ«lO=)"*EiŠ¬ÉÙäåäëèèèèèèèèééééééééèèèéééêêëëëëëëëëè׶nWD61,*-.+)++++,,---///0001115448CjœÄéäñíøø÷ûøöøüýùõóïçÝÔÏÍÍÓÞççääãáàáâãäæèêéëííìëìíêëèÚŲ¦¡tuwxyzzz}||{{|}}€ƒ„……………………††‰‰‰Š‹ŒŒŽŒŽ‹†|wtkb]^_][\ZZZZZZZZZZYYXXXXWWVVUUUUTTTTTTTTTTTSSSRRSUUSTVSNSSTUUUUUVUUUVVWXYYYYYYYYVVVWWWXXYXWWWWXYZZZZZZZZXXXWVTSRQQPQQRSTVVUUUUVVXXXXXXXXXXXXYYZZ[[[[[\]^\\\\]]^^^^___```cb`]YTQNIHGFEEEFCCBBABBCAA@@??>>>===<<<;9999887766543322/00/--/0=HXdnw‚ŠŽ‘’“’’–——˜™š››Ÿ¡¢¢£¥§©ª¬®¯°±±´¶¸¹¹º½¿¼¾ÁÃÅÆÆÆÇÁ²œ„kP<) 2Rr±ÌÞäèææéêèççççççççççççççççççççççççççççççççéåçèæãЯ‘nQ?* (@dƒ¦ÄÖãåäëèèèèèèèèééééééééèèèèéééêëëëëëëëëçÙ¼—u[E61,*,-*)++++,,---////000136335<^Œ¹ááðì÷øøúøöøûüùöóïçÞÕÎÉÇÓÝæçåãàÜÙÙÚÜßãçééëííìëìíëëèÜɶ¨¢tuwxyzzz||{{{|}~~€‚ƒ„„……………††††ˆˆ‰Š‹‹ŒŒŒŽŽŒ‰…~vnh]UNNOLKLIIIIIIIIJJJJIIHHGGGFFEEECCCCCCCCDDCCCBBBCDDEINQQVZ`dffeehgfffgijhhhhhhhhhhhiiijjlkjjjjkllllllllljjiihea^XTOJHGFECCBBBBCCEEEEEEEEEEEFFFGGIIHHHIJKIIJJJKKKLLMMMNNNNNMMNOPQQSVWWWWXUUTSSSSTSRRQPONMNNNMMMLLLLLKKKJJHHGGFEDDBBBA@?@@HOXahov{|}~€€‡‡ˆ‰Š‹ŒŒ‹Ž’’”–™™šœžŸ ¡¡£¦¨©ª«­°®°³¶¸º»»¿»®™ƒlS@.%0OoŒ­ÆÛâçæåèéèèèèèèèèèççççççççççççççççççççççççéåèéæåÓµ•rUA+ &=_€¢ÁÔãæäêèèèèèèèèèèèèèèèèççèèèéééêêêêêêêêèÜÀ›y^H92-*,-**,+++,,---..///000252258T}®Ûßñìõö÷ùø÷ùûüú÷õñêâÛÔÍÉÒÜåçåãÞØÒÑÒÕÚáåèèêìíëëëíëëèßϼ¬¢tuwxyzzz{{{{{|}~~ƒ„„„„……††‡‡ˆˆˆˆ‰‰Š‹ŒŒŽŒŒŒˆƒ{pd[PG@@@>=>::::::::::9988887766555544444444433322222137=EOU[cmtvvvvzyxwxy{|yyyyyyyy{{{|||}}~~}}~~~~~~~~~~}||}|wpk`WLB<85311000011222222222233444466556788667788889:::;;;<<;;:844833210/../.-,*)('%%$#"! +KmŒ¬Å×áééçéëìççççççççççççççççççççççççççççççççéæééçèÛÀ |]H1"! "6V{»ÑãæãæèèèèèèèèççççççççæçççèèèèééééééééëáÈ£~bL?3-)++**-+++,,----...////121475Ff•ÊÙïêñóõö÷øùúúúúöñêæãßÙÔÔÛâäååàÙÐÌÊÍÕÞäæçéììëêëììëéäÚȲ¤tuwxyzzz{zz{|}~}~„……„ƒƒƒ„…†‡‡ˆ‡‡ˆ‰ŠŠ‹‹Œ‹ŒŽŒŽŠƒ|q`L>1(  !*8K\r|Š’”””•——˜™™™™™šššššššššššš››œœœœ››œœŸŸŸŸŸŸŸŸ ŸŸ  ™„o_H4&&5GWau‹’“‘‘‘ŽŒŒŒŒŒŠŠŠ‰‰‰ˆˆ†††………„„„ƒƒ‚€€€€~||}{wtoh^VQKD?CBBBCDFGKKLNPQSSQSVWWX[]_`bdegggilopqsvxyz{}ƒ…ƒulg`ZTQPQNJILIIHGEDCCCBA?=<::87653211,,+*)(''&&%$#"! ##0Mn‹ªÁÒÝææäåèéççççççççççççççççççççççççççççççççéæêêçéÞÅ¥aK3%  2Qu–¶Íâæãæèèèèèèèèççççççççææçççèèèééééééééêãͪ…fN?4-)*+)*-+++,,-----...///120472>Z…¾Òìèðòõõ÷ùúúúúûùóìçåâÜ×ÕÛáãåæâÛÔÎÊÌÕÞãåçéëìêêêììëéçÞ̵¤tuwxyzzzzzz{|}~|~„……„ƒ‚ƒƒ„…††‡‡ˆ‰‰Š‹‹Œ‹ŒŽ‹ˆym[E6&(7M`x‚™š™š›œŸ   ŸžžŸŸŸ    ¡¡    ¡¡¦¦¦¦¦¦¦¦§¦¦¨§ “ˆraI3%  1FZfƒŽ›££¡  ¢¡ žžžŸŸŸŸŸŸœœœ››››››šš™™™™™˜˜—–••”’‘‹†yo`TJ@6/10//02354568:;==@BDEEFHJJKMOPQRRTVY[\^acdeegikmnpsqkfec`gefhe``caa`^][ZYYXWUSQPONMLJIGFFCCB@>=<;:9875422/-7Qn‰¥»Ë×ááßàãäææææææææççççççççççççççççççççççççéæêêçéßǧƒcM5&!.Mo‘±ÊàçäçèèèèèèèèççççççççæææççèèèéééééééééäÒ±‹jO>4-)*+)*-+++,,------..///22036/8Rz¶Ìéæïó÷õ÷ùúúúûûÿ÷ïêèåßÚÖÛàâåçäÞÖÐËÌÕÞãåçéëëêêêëíëéèà϶¤stwyz{zzyyz{}~€€€‚‚‚ƒ„†…„„…‡‰‰ŠŠŠ‹‹‹Š‹ŒŽŠˆ€seT?-*:N`y†“—˜™š™Ÿ ¡ žžŸ   ŸŸžžžžŸŸ  ŸŸ£££¢¢¡¡¡¨¦¤£¤¦©«¥¦¥¤¤ “†uaG2#/D\nƒ“£¨§¦¦¥§¦¦¥¥¦¦§¤¥¦¦§§¦¦¥¨ª©§¦¨«¥¥¦¦¦¦¥¥§§§§¨¨©©£¥¥££¤ šˆu_N@1%  %%%%%%%%**+-/01266789::;@@BDFHIJLMNOQRST[YZ^`ciqsz~|{}}z{ywusrsspppomkihhgda^]]]]\ZXUSQQONMKIGEECBK_v‹¢´¾ÉÔÙÚÛÜÜØÜáäääããççççèéêëéèæåååæçèèèéèèçæçäèçäèàʪ„eR:)",HmŽ®ÇßçåèèèèèèèèèèèèççæææèèèèèèèèééééééééêáÕ¸ŽpZD8/))+))*,,,--......//000102324=HpžÆéåòîóóõøùùùúüøõðëæâàßÜÝàãææäá×ÕÒÑÔÚàåæèêêééêëïëéêäÒº©suwyzzzzyyz|}~€€‚‚‚ƒ…††……†ˆˆ‰‰‰ŠŠŠ‹Š‹ŒŽŽ‰‡qcR=,+;Pay‡•™™››™œž ŸŸž ¢   ŸŸŸžžžžŸ ¡   £££¢¢¡¡¡£££¤¤¥¥¦¦§¦¥¥¡”†s^E0!0D\oƒ“£¨¦¦¦¥¦¦¥¥¥¥¦¦¦§¨¨©©¨¨§©«ª¨¨ª¬©ªª««ªª©«««¬¬­­­­¯¯­­®ª¤}dP>, !!"#$%%((*+-./0778:;<=>EDHQYbo{‡–——™™—•”‘ŽŽŽŽŒŒ‹‹‰‡†…ƒ‚€}{yxxsrqomkihhgec`][ZZY_m|‰˜¥­µ¾ÃÅÅÆÇÇÊÎÑÒÒÓÔÚÚÚÛÜÞßàààßÞßàáâääåææææææäèçäèá̯‰iT:( !! -Hi‹«ÅÝåãçèèèèèèèèèèèççæææèèèèèèèèééééééééëãÙ½“t]F80))+))*++++,,--...///00101323;Ef•¿æãñîõóõøùùùúûøöñìçäâáßàãæééæäÞÜÙØÚßäèæèêêééêëîëêëæÔ¼ªtuwxyzzzyz{|}~€€‚‚‚‚…†ˆ‡††‡‰‡ˆˆˆ‰‰‰ŠŠ‹ŒŽŽŽŽˆ…|n`O:) -*"4Ke•¨¶ÄÉËÌÌÊÈÈÇÆÆÅÅÅÀÀÀÀÀ¿¾½¸¸¸·´±®¬««ª©§¦¥¤Ÿžœš™——’‘‹‹Œ‹‹‘‘’”—™›œž¡¥©©ª«­°³¶¸º»¼¾ÁÃÅÆÊËÌÎÐÓÕÖÖÖÛÚ×ÜÙƦ‡mX@2-% %=_‚£¿ÙââæèèèèèèèèèèèèèèèçèèèèèèèèééééééééêæâË¢eK<2*)*((*)***+++,--...///1/02104;N|«ÚÞíìöòõ÷øøøùûúùöòîêèæââãæèéçäåãáààâåççéëëêééêêëììéÜűwwwwxyzzz{{}~€€‚‚‚ƒƒƒ†ˆ‰‰ˆˆ‰‹‡‡‡ˆˆˆ‰‰‹ŒŽŽŽ†‚xhXH3" #0BXj~Œšžžž›žŸ  žžŸ ¡¡¡   ŸŸŸ ¡¢¢¢¢¡¢¢¢¢¢¢¢¢¦¥£¡¡¢¤¥¤¥¤¢¡‚mZA. 1F^qƒ“¡¥£¤¦¦¦¥¥¤¤¥¥¦§§¨©©©©©©©¨©ª««ªªª«¬¬«ªªª«««¬¬¬­­°°¯°±­§•gR?+0If…œ¶ÅÕÛÛÜÜÚÜÜÜÜÜÜÛÛØÙÙÙÙÙØ×ÓÓÓÒÐÍÊÉÅÅÄÃÂÁÀÀ¼¼º¸¶³²±­«¥œ”Œ†zrmpsrsvy{|~ƒˆ‹Š‹“–™›œž £¦©«¬¯°±³¶¹½¾¿¿ÅÅÁÇŵœƒn\G<80-,,+*)((%%$#""!!!!!  !!!!"%:[~ ½ØâãèèèèèèèèèèèèèèèèéèèèèèèèèééééééééèæåШ…gL>4+)*((**+++,,,----...//1//22027IrŸÓÜìêôòô÷ø÷øùúûú÷ôñíëéåäåçéêèæçæäããäæçéêììêééêéëìëêáÌ·xwwwwxyzz{|}~€‚‚‚‚ƒƒƒ„†‡‰‰‡‡‰Š‡ˆˆˆ‰‰‰ŠŒŒŽŽŒ†‚wfVE1  $2D[m€™œœŸ ¡ žžŸ¢¡¡¡    ŸŸ ¡¡¡¡¡¡¡¢¢¢¢££©§¤¢¡£¥§¤¤£¡ ›Ž€lX?- 2G_rƒ’ ¤££¥¦§¦¦¥¥¦¦§¥¦§¨¨¨¨§©¨§¨ª««©¬¬­­­­¬¬¬¬¬­­®®®¬¯°®¯±®§˜ƒiS>*/Ge†¸ÉÚàààáàããäåååääåæçççççæääãâáàÞÝÛÛÛÚÚÙÙØÛÙ×ÔÐÍÊÉÊÈ¿®}ri[RTXVW[^`bcdgkopqsvy}€‚‚„‡ŠŽ’“––—™œ ¤§§©¯¯«²²£‘~pcRLI@?>=<:987321/-,*)('&%$#"!!!!!! !!!4VyœºÖâãèèèèèèèèèèèèèééééèèèèèèèèééééééééççæÓ«‰kO@6,*)''*++++,,--,---....1./33115Eh’ÉØëèññôö÷÷÷øúúúøöóïìëêééêìíìêêêéèèééêéëíìêééêéììêéäÒ½xxwvwxyz{{|}~€‚‚‚ƒƒƒ„„…‡ˆˆ‡‡ˆŠˆ‰‰‰ŠŠŠ‹ŒŽŽŒ†‚veUD/ %4F]o‚Ž˜ššœŸ  žžŸ¡¢¢¡¡¡   žžŸ ¡   ¡¡¡¢¢£££§¦¥¤££¤¥¤¥¤¡ ›Ž€iU=+ 2G`s„’ £¢£¥¦¨¨§§§§¨¨¥¦§¨¨¨¨¨«©¨©¬­¬ª¬­®®®®­¬¬¬­­­®®®ª­®­®°¬¦™„iS?*,Ecƒ›´Æ×ÝÝßááàáãäåääãåæçèèèèèççæåååååæææåååååèèæäâàÞÝßàת‘xeWD79=;;@ACEFGILOSTVX[_bcdfimpsttyyy{~ƒ‡‰ŠŒ”“—˜‹upj__`WXWVTSQPOKJHEB?=<876420/.+++*))((#$!"%"4Qt˜·ÓàâçèèèèèèèèèèèééêêêèèèèèèèèééééééééèèéÖ¯ŒnRB7-))''*))**++++,,---...0./35324A^„¿Õëèïñóö÷÷÷øúúùø÷ôñíììëêëíîíëëëëìììììêìííëééêéíìèèç×Ãyxwvwxyz{{|}€‚‚‚ƒƒ„„„…†ˆ‡††ˆ‰‰‰ŠŠŠ‹‹‹ŽŽŽŒŒ‡‚veTC/ %4G^qƒŽ˜™˜›ž›ŸŸŸŸ¡£¢¢¢¡¡   žŸŸ  ŸŸ¡¡¡¢¢£££¤¥¥¦¥¤¢¡¦¦¥¢¡œgS;) 2G`s„’ £¡£¥¦©©¨§§¨©©¦§¨¨©©¨¨­«©«®¯­««¬¬­­¬¬««««¬¬¬­­­°°¯±²¯©–‚hS?,)B`™³Å×ÞÞàäæàâãåææåäãäåçççççèçæååæèéææææææææææççèééééìåд—w_D/ "&#$)&(+,,-/1779;>ADFGILPSUVW]\]^afjmnpxxt|~qrkmmjotlrqpnljihdc`]YVTRONLJGECB>==;:988./,-0)+@ACEHJLMQSVY[^be^fmqxƒŠŒŒŒŠˆ†„ƒ~{xuspljliea^[WTUSPNNLJHDB>;;>BE]yš´ÈÙãåååææçèèèççèèèèçæçççèèéééçéêêéèêëæéèÚ¼–q\D8-)(&'*)((((()),,,,,,,,--./01127Ks¥Ìâìññó÷ø÷÷÷øûúù÷õòïîëëëëëëëëìììííîîïííííííííñëìíèçßÌstwz{{zyxwxz~€€‚ƒ„„„„ƒ†ˆ‰ˆ†…‡‰‡ˆ‰‹‹ŒŒ‹‹ŒŽŽŒŒ†~qbQ<'  )9Kbu†‘š›™›œœœžŸŸŸŸž¡  ŸŸ  ¡ŸŸŸŸŸŸŸŸŸ ¢£££¢¢©¦£¢¢¢ Ÿ¥¥¤£¢œŒ{dQ9' "4I`r…“ ¤¥¦¦¥§§¦¥¥¦§§¨¨¨©©ªªª¬««ªª««¬­­­­­­­­­ª«®¯¬¬¯­¯®­¯±¬¤•hS@,&C]y–«ÆÕ×ßáÞàâââãããääåååæææççççççççççææææææææççççççççèææÙºœ{\D- !#$&(('(*,.01268:<=@DGR_nz…”Ÿ¤¨¨¨¦¥£¡ŸŸœ˜”’‹‡ˆ…~|yurqnkjigeba^YURRSTl›­¼ËÔÖÛÜÝÞßàáâáâäåæææææææææææææçéèççèêêìëßÄw`I=1,+)*-**)))*+++++++,,,-../01225FlžÈàêîðóöø÷÷÷øúúù÷õòïíëëëëëëëëëìììííîîííííííííðêììèèáÏtuwz{{zzxwxz~€€‚‚ƒ„„„„„†‡‰ˆ‡†‡‰ˆˆŠ‹ŒŒŒŒŒŽŽŒ‹…|o`N:%,Pgy‰”œ›™šœœœžŸŸŸŸž  ŸžžŸ  žžžžŸŸŸ  ¡¡¢¢¢¢¡ Ÿ £¥¦¥¤¤££¢›‰xaN7& #5Ias†” ¤¤¦§¦§§§¦¦§§§¨¨¨¨¨¨¨©««ª©©ª««¬¬¬¬¬¬¬¬­ªª®®«¬¯­®­¬®°«¤–‚iT@,#@Zv“©ÃÒÕÜßÜÞàááâããääääåååæææææææææææææææææææææææææææçåæÚ¼ž`G0" "4Os¦¾ÒÜßßßßÞÜÛÚÓÑÎËÊÈÅ¿½º¸·¶³°«¨¥££¡ž›–•’Ž‹ˆ…„Š‘™ ¦«®¯³´¶¸»¾ÀÁÅÇÊÎÒÕ×ØÜÝÝÞàááââäæçæçéëäåäÝʧcJ>1+)&'**)))**+,*++,--..--..//002:V†¸Øåéîñôööö÷øøùùøöóïíìëêéééêëêêêëëëëëëììììíííìèëíèêç×wxxyzz{{xwxz~€€‚ƒ„…………„‡‡‡ˆ‰‰‰‰ˆ‰ŠŒŒŒŽŽ‹Š‚yiXG4!/?RhzŒ•œ›˜™œœœžŸŸŸŸž ŸžžžžŸ œžžŸŸŸ    ¡¡¢¢ ŸžŸ£¥¦¥£¤£¢¢š‡u_L5% #5Jasˆ” ¤¤¦¨¨§§§¨¨§§§¨¨¨¨¨¨¨§«ª©©©©ª«¬¬¬¬¬¬¬¬¬©ª­­««®¬­­¬®°«£–‚iT@+!=Xt‘§ÂÐÓÛÝÚÜßààáâãäääääåååæææææææææææææææææææææææææææäæÚ½ cH1#-Kq‘¬ÅÚææçççæåäãäâàßàßÞÜÙ×ÕÔÔÓÑÏÊÇÅÄÿ½·¶³°­©¦¤¥£¡ ˜’”•—›ž¡£¥ª¬°µ¹½¿ÁÄÅÇÊÍÐÒÓÖÙÛÝÞàâåæåãÛÇ¥~cNB61/,+-.-,,,,--***++,,,,----...36Lz­Ñãéìïóõõõöø÷øùù÷óðííìêèèèéêêêêéééééêëëììíííëèìíèëéÛxyyyzz{{xwxz~€€ƒƒ„…††……ˆ‡†‡Š‹Š‰‰‰‹ŒŽŽ‹ŠwfUC1  0ATk|Ž—›˜™›œœžŸŸŸŸžŸŸžžžžŸŸœœœžžŸŸ  ŸŸ ¡¢¢¤¢  ¡¢¢¡¢££¢¡™†t]J4$ $5Jbtˆ•¡¤¤¦©¨§§¨¨¨¨§§¨¨¨¨§§§§ªª©©©©ªª««««««««¬©©­­ª«®¬­¬«®°«£—ƒiT@+ ;Vr¦ÀÏÒÙÛØÚßßàáâãääãäääååååååååååååææææææææåååååååååäæÛ¾¢„eJ2$+GlªÆÛåèèéééèççëéèéëëêéèæääååãâàÞÜÛÛÛÙ×ÓÒÏËÇÃÀ¿¶¬¢›“ˆ~zyz}€ƒ‡‰Š‘“—› £¦§¨ª­±µ¹¼¾ÅÈÌÏÑÔØÛáàÝÓ¾Ÿ}fQG=:84120/.-,+,,,,++++++-------.43Dm Èßêëîòôõõö÷ö÷ùù÷ôðíîìéçççéêéééèèèèçêêêëììííëèíîèëêÞzyyyzz{{xwxz~€€ƒ„……††……ˆ‡†‡ŠŒ‹‰‰Š‹ŒŽŽŽŒŠ‰€udRA/#3DWm˜ž›—™›œœžŸŸŸŸžŸžžžžŸ››œžžŸŸ  ŸŸŸ ¢£¤¢  ¡¡¡Ÿ¡££¢¡™…r[I3# $6Jbt‰•¡£¤¦©©§§¨©©¨§§¨¨¨§§¦¦¦ª©©¨¨©©ª««««««««¬©©¬­ª«®¬­¬«­¯ª£—ƒiT@+:TqŽ¤¿ÎÐØÚ×ÙÞÞßàâãääããäääåååååååååååææææææææåååååååååãæÛ¿£…gK3%)Bd†¦ÅÚäçèééééèèêéèèêëêèéçæçèéçæèæååææåããáßÜÙØ×ÖÊ·¢“…uhc[]_behjkrtx|ƒ…†‹Œ“—›ž ¦ª¯³¶»¿ÃÆÇƾ­”|l\SKJHC@?<;9765443322100/////////31>c“½Ûëêíñôôõö÷õ÷ùúøôðíîìéçæçèêéèèèççææééêëììííëéîîèëëàzzyyyz{{xwxz~€€ƒ„…††††…‰†…‡‹Œ‰‰Š‹ŒŽŽŽŽŒŠ‰€ucQ?.$5GZp™ž›—˜›œœžŸŸŸŸžŸžžžžŸš›œœžŸŸ¡ ŸžŸ ¢£¡ žŸ¡££¢¡¢£¢¡˜„q[H2" $6JbtŠ–¡£¤¦©ª¦§©ªª©§¦¨¨¨§§¦¦¦ª©©¨¨©©ª«««««««««©©¬­ªª®«­¬«­¯ª£˜ƒjT@+9SpŽ¤¾ÍÐ×Ú×ÙÝÞßàâãääãããääåååååååååååææææææææååååååååäãæÛ¿¤†hK4%(>^€¤ÄÚãæçèéééèèëéèèééèæèçææèéèçëêéêëìëêêéèççèêëå˪w^MF?@BEHKMNUVZ]`cefprtx{‚†‰”˜¢¦¦ª­©œ‹{qld^]\WRQPOMJHFFE<;;98766221111112/:\Š¶×êêíñóôôö÷õ÷ùúøõðíïìéæåæèêèèèççææåèéêêëìííìêïïèêëàyzz{{zzyz{}‚‚‚ƒ…………‡ˆ‡‡ˆ‹ŒŒ‰†‰‰ŠŠ‹ŒŽŽŒ‰†}p`P=)%6H[qƒ”™œššŸ˜ž›œ¡¡œŸŸŸžžžžžŸŸŸœŸ ¡ Ÿž¡¢¢££¢¢¡£¤¤¢ –n\H0! %7KbtŠ–¢¥¥¦§¦¦¨ª¬­¬ª©§§§§§§§§ªªª©©©¨¨¨©ª««««ª©ª««©©ª«¨««ª¬¯­§–‚iT@,7Pn¢µÊÔÖ×Ø×ÚÛÝßáâããääåääâáàääääääääçççæææåååååååååååäçݧˆiO5$"9]€ ½×çäæèèçæçèééééééééééééééééêêêêêêêêêêêééèèèèÒ²‘sV?2/-+,/3558:<@DHJLSTW[_cfhjlpu{€„†Š”‘Šƒ|xrpprrolledb_]ZXWSPKHGFDC@><<<<:887?X¯Óçéìðòóóõöôõöøù÷óïîéæææäæëååææååããåæèéëëëëíîíééëèãyzz{{zzyz{}‚‚‚‚„††……‡‰ˆ‡ˆŠŒŒŠ‡‰ŠŠ‹ŒŽŽŽŽŠ†}p_O<('8J]s…”šœ›šŸ›  œœŸž™žžžžžœœžžŸŸŸžŸ ¡ ŸŸ¡¢¢££¢¢¡¡¢¢¡Ÿ•n[G0! %7KctŠ—¢¥¥¦§¦¥§©««ª©¨¨¨¨¨¨¨¨¨¨¨§§§¦¦¦¨©ªª««ªª©ª««©¨ª«©««ª«­«¥–‚iT@,6OmŒ¡µÉÓÖ×Ø×ÚÛÝßàáââããääããâáääääääääççæææååååååååååååãæÝè‰jP6%!7Y}ºÔäåçééèçèéééééééééééééééééêêêêêêêêêêêééèèèéÔ´“tW?1(%#"$&''()*,/12368:=ADFHOQTX]begkpuvuvy{‚„ˆŽ‹Š€}zwtqpmjeb`_\ZURNKIGC@B@E[­Ñäéìðòóóõöõõöøøöòîîéåäãàáæåååääãããäåæèéêêêèëêéêîìçzz{{{{zzz|}‚ƒƒƒ…‡‡††ˆŠ‰ˆ‡‰‹‹‹‰Š‹‹ŒŽŽŽŠ‡|n]L:&);M`v‡•š››žŸŸ¡¡žœ›˜œžžž›šžžŸŸŸžŸ    Ÿ¡¡¢¢¢¢¡¡Ÿ  Ÿ”lYF/  %7LcuŠ—£¥¥¦§¦¥¦¨©©©§¦¨¨¨¨¨¨¨¨¨¨§§§¦¦¦¨¨©ª««ªª¨ª«ª©¨©«ª¬¬ªª¬ª¤–‚iT@,5Nl‹¡´ÉÓÕ××ÖÙÚÜÞßàááááâããããâääääääääæææåååäääääääääääâåÝÄ©‹kQ7%4Ux˜¶Ðàåçééèèéêééééééééééééééééêêêêêêêêêêééééèèêع—vY@1)%! !!!!!!!!$$&(*,./579<@CEGLPTW\gw„•Ÿ§«««ª¢ š–’ŽŠ‡‚~|yvsqniea]XTWRSe‡¯Ñäéìðòóóôööö÷øøõðìíçâàÜØÙÜáàßßßàáââãäæçèèèåèèæèìêæzz{||{zz{|~€‚ƒƒ…†ˆˆ‡‡ˆŠ‹‰‡ˆŠ‹‹‹‹‹ŒŽŽ‘‘Š†zlZI7$*=Obw‰–›ž››žŸ   Ÿž›™›œžžœš™žžŸŸŸžžŸŸ     ¡¢¢¢¢¡ žž›’}jWD- %8Mdv‹—£¥¥¦¦¥¦§¨©©¨§§©©©©©©©©ªªª©©©¨¨§¨©ªªªª©¨©«ª¨¨©ª«­­««­ª¤–‚iT@,4Mj‰ ³ÈÒÔÖÖÕØÙÛÝÞßßßÞßàâããããããããããããååååäääãããããããããäáäÜŬŒlS9&1Ps”³ÍÝåçéêéèéêééééééééééééééééééééééééééééééééëÜ¿œy\B1+'#! !! #""! "##$&&'(((*,.01289:>EVqˆ–¥µ¿ÃÄÄÂÀ¿¼¸´°­¬§¤Ÿ›™•‘Š…~zvrrljw•¸×çêíñóóóôõ÷÷÷ø÷ôïëëäÝÚÔÎÎÐÖÕÔÔÖÙÜßÞßáãäåååäæåãäæäßz{||||{z{|~€‚ƒƒ„…‡ˆˆ‡†ˆ‰‹‰ˆˆŠŒŒ‹‹‹ŒŽŽ‘’’‰…yjWF4"+>Qcx‰—œžœ›žŸžžžŸŸžž›œœš™žžŸŸŸžžžžŸŸ    ¡¢¢¡  žžœš{hVB, &8Mew‹˜£¦¤¥¦¥¨©©©©¨¨¨©©©©©©©©ªªª©©©¨¨§¨©©ªª©©¨©ªª¨§©ª¬®®«¬®ª¥–‚iT@,3Lh‡Ÿ³ÇÑÔÕÕÔØÙÚÜÝÝÝÝÝÞßáâãããããããããããåäääãããããããããããããàâÜÆ®mU:'/Ln‘°ËÚäæèéèèéëééééééééééééééééééééééééééééééééêàÅ }`F3'$  """""###!!"##$%%)'(+2Fjˆ¥¹Î×ÚÜÜÙÜÛØÕÒÏÌËÈÅ¿½¹µ²«¨¤ œ˜”‘ˆ…Ž¦ÄÜéêíñóóòóôööö÷÷ôïëèáÙÔÍÆÄÆÇÇÇÈÌÐÔ×ÙÚÛÝÞßßßàââàáäâÝ{{||||{{|}‚ƒ„„…‡ˆ‡†…†ˆ‹‰‰ŠŒŒŠŠ‹‹ŒŽŽ‘’‘ŽˆƒxhUC1 ,@SezŠ˜Ÿœ›žŸ›œ ¡ŸŸ¡žœœœœžžŸŸŸŸžžžžŸ ¡  ¡¡¡¡  ŸŸžœ™ŽyeTA* &9NfxŒ˜¤¦¤¥¥¤ª©©©¨¨¨¨¨¨¨¨¨¨¨¨¨¨§§§¦¦¦§§¨©©©©©§©ª©¨§¨ª«­­«¬®«¥–‚iT@,2Jg…Ÿ²ÇÐÓÔÕÔ×ØÙÛÛÜÜÜÜÝßàáâââââââââââääãããâââââââââââãßáÜÇ°nW<(-HjŒ­È×âäçèççéêééééééééééééééééèèèèèèèèèèééééêêéâÊ¥dI5'$  !  !!!!!! """"#####!"&-AhŒ®ÆÞåæééåéèçåãáàßàÞÛÚÙÖÒÏËǾº¶±®®§£©»Ðàèëîñóóòóôõõö÷÷ôïëèàØÑÊÁ¾À½½¾ÁÄÈËÎÐÑÓÔÖÖÖÖÖÙÚÚÝââÝ{||}}||{|}ƒ„„„…†‡†…„…‡‰‰Š‹‹‰‰ŠŠ‹ŒŽŽ‘‘†wgR@. /CVh|™ž œžžž›œ¡¢ŸŸ¢¡Ÿœ›œžžžŸŸŸŸŸžžŸ ¡Ÿ  ¡¡  Ÿ¡¡ ™wcR?) &9NfyŒ™¤¦¤¥¥¤©©¨§§¦§§¨¨¨¨¨¨¨¨¨¨§§§¦¦¦¦§¨©©©©¨§¨ª©§§¨©§ªª¨ª¬ª¤–‚iT@,2Ie„ž±ÆÐÒÔÔÓ××ÙÚÛÛÛÚÝÞßàààààââââââââãããâââááááááááááãÞàÛȲ’oY=()Cdˆ©ÄÓàãæçææèéééééééééééééééééèèèèèèèèèèèééêêêèäΨ„hM7*'#!!""! !!""##""!!! $$$$$$$$$"#'+('@a…§ÁÐßâåæææçéééééééééééééééééèèèèèèèèèèèééêêêçäϪ…jO9*&"""!!! !!!!! # !$%2X¨ÅßååéëèêëëëììííëêêëìëèæêèçæçæäãäÞØÙáèêêëîòóòòòóòóôö÷õñíìãÛÔ˾À½¾¿ÀÀÀÀ¿ÀÁÂÄÅÆÆÆÆÈÈÇÉÍÌÇ|{{{{|}~{}‚„†‡‡…†‡ˆˆˆ‡‡ŠŠŠ‹‹ŒŒŒŽŽŽ‘’‘’‡}sbM;*%4FYo„‘œžŸŸžž ŸŸžžŸŸ ŸžžžžŸ Ÿžž  Ÿ¡ žž ¡žŸŸ  ŸžžŸŸœ—ŒxeN;&   '.& !#!  !!!!!!!!%# $.Ozš¿ÚãèèçìëëëëëëëëììììììììèèèèèèèèææååååææïïðñòóóôîðòôõôòñéäÞÙÕÑÍËÈÇÅÄÃÃÃÃÆÆÅÄÃÂÁÁÅÆÆÇÇÇÆÆ||{{||}~|~€‚„…††…†‡ˆˆˆˆ‡ŠŠ‹‹‹ŒŒŒŽŽŽ‘’‘‘‡|raL:)%5GZp…’žŸŸ  ŸŸ¡  ŸŸ  ¡  ŸŸŸŸ  Ÿžž ¢¡   ŸŸŸŸ  žžŸŸŸ    ¢¡—ŠucM;&   'Tj{š£¥¤¦¥£§§§§¨¨¨©©©¨¨©ª««ª©©©ª«¬­«ª¨¨©©§¦©©©©©ªªª¬«ªª«ª¨¦–‚iT@,*Fg~˜¬ÁÌÐÒÓÓÔÕ×ÙÚÚÚÚÛÜÝÞÞÝÝÞÛÜÞÞÝÜÞßàßÝÜÛÜÝÞÞÞÝÜÛÚÙÙÝáâÝз”w_B,!2Tt‘¯ÇÙáçåäåæåææææææææææççççææææææææææææçççèèèéçÛ¿œzZE1(!!! $" #*EjŽ³ÐÜçéçëêêêêêêêêëëëëëëëëììììììììííììììííìíííîîïïðñòóôôóòïìçãâàÞÜÞÞÞÞÞßàáÞÞÝÝÜÜÛÛÚÚÙ×ÕÒÐÎ}}||}}~€‚„…………ˆˆ‰ŠŠŠŠŠ‹‹ŒŒŒ‘‘‘‘’””’‘Ž„zkZD2#(:Nbw‹—¢££¤¥¥¤¤  ŸŸŸŸ  ¢¡    ¡¢¤¢¡¡¢¢ Ÿ ¡¢££¢¡ §¥¢ŸžŸ ¡¡£¢–ŠtaK8$   )?Ul|‘›¤¦¥¦¥£§¨¨¨©©©©ªªªªª«¬¬««ªª«¬­®¬ª©©ªª¨§«««««ªªª­«ª«««¨¦–‚iT@,)Ef}—«ÁÌÐÒÔÓÔÕÖØÙÚÛÛÜÜÜÝÞÞÞÝÝÞßÞÜÛÛÝßÞÜÛÛÛÜÝÝÜÜÛÚÙØØÝààÜѺ–y`C-!0QqŽ­Å×àææäææåææææææææççèèèèççæææææææææææçççèèèèÝá~]H3)!  #! #(@c‰®ÌÚçëéëêêêêêêêêëëëëëëëëêêêêêêêêíìëëëëìíîîîîîïïïðññòòóòòîëæãâáßÞÞÞßßàâãäãããâââââàààßÞÜÚÙ}}}}}~€‚„…†††ˆ‰Š‹‹‹‹ŠŒŒŒŒŽ‘‘‘’’’“•”’‘ƒxhWB/ *,+>Sg|›¢£¤¥¥¥¥¤¦¦¥¤¤¥¦¦¥¤¤££¤¤¥¤¢¡¢¤¥¤¢¥¤¢¡¡¢¤¥Ÿ ¢£¥¥¦¦§§¥ž•‡p\I7"   +AWn“ž§©ª««©©©ªªª«««­­¬¬­­®¯±°¯®­­­­­¬«¬®°¯®¯®®­­¬¬¬­¬««¬¬©§–‚iT@,'Bcz–ªÀÌÐÓÕÔÔÔÕÖØÚÜÝÝÛÚÜßàÞÛÛÝÞßÞÞßáÜÝÞßßÝÛÚÙÚÚÚÚÚÛÛÝÜÚÖλ™}bE."(Ffƒ£½ÔÝåæåææäååååååååäååææååäåååååååååååææçççãæßɨ„aJ7,"" #$5Syž½ÏáçäåééééééééêêêêêêêêêêêêêêêêêêééééêêëëëëëëëêîííííîïðíêåâàßÝÛÚÚÜÝàãåçééééééééêêêéèæä €€€€€€~€‚„‡ŠŒˆ‰Š‹ŽŽŽŽŽ‘’‘‘‘‘’“””—˜–”ŽudS<).BUj“œ£¥§§¦¥¦§¨§¥¦¨¨§¦¦§¨§¥¤¥¦¨¦¤¥§§£ž£¦¨§¤¢£¥¦¦§§§¦¥¤¤¥£”†p\G4 .BXo”ž¦¨¨ª«©ª«¬¬­­¬¬­¬¬¬¬­®¯²±¯®­­®®¯®­­­¯±²°°®­­®°°¯­ªªª«ª¨˜„jUA,'Bcz”­ÀÉÔÕÓØ×ÖÖ××ÙÚÛÞÝÜÜÞÞÝÜÝÜÚÛÝÝÜÛÜÝÝÝÜÛÚÚÚÚÛÛÛÛÛÛÝÝÜ×Ï»š~bK0 (Bb‚¢·ÍÝâàåäâèåååääãããäååææååäååååååååååååååååæäâͦ„gL8," !"%"!#"0Lp–·ÌáéçèèèèèèèèèééééééééèèèééêêêéééêêëëëëëëëëëëëííííííííîìéäàÝÛÙÚÚÛÜÞáãäææçèèéêêèèçççææ怀€€€€€€‚„…‡‰‹‹‰ŠŠŒŽŽŽ‘’’‘‘’““”“–—•’ŒscQ;( /CVk‚”¤¦¨¨§¦§¨ª¨§¨©ª©§¦¨¨§¥¤¥§§¦¦¦§¦¤¡¤¦¨¨¥£¤¥¥¦¦§§§¦¦¥¦¤ž•‡p\G4 .CYp‚– ¨ªª¬­«ª«¬­­­­­­­­¬­®¯¯²±¯®®®¯°±°¯®¯°±²²±°¯¯°±²±®¬¬­­«ª˜„jUA,&Bcz”­ÀÊÕÖÔÙ××××ØÙÚÛÞÝÛÜÞÞÝÜÞÜÛÜÝÞÝÛÝÝÝÝÝÜÛÚÜÜÜÜÛÛÛÛÜÝÜÙмš~cL1!(Ba‚ ¶ÌÝâáåäâèåååääãããäååææååäååååååååååååååååæäâΧ†hM9-" !!$! "!.Im“´ÊßèæçèèèèèèèèééééééééèèèéééêêéééêêêëëëëëëëëëëììììììììîìéäàÝÚÙÚÚÛÜÞáãäæççèééêêéèèèççç怀„…†‡ˆ‰ŠŠŠ‹ŒŽ‘’“’’’’“”•“––“‘Š}paO8&!1FXm„–Ÿ¤§©©¨§¨©¬ª©ª«¬«©¨©ª©§¦¦¨¥¦¨¨¦¥¥¦¥§¨¨¦¥¥¦¥¥§¨¨©¨¨§¨¥Ÿ–ˆq]F3 /DZr„˜¢ª¬¬®¯­«¬­®®®®­®®®®®¯°±±°°°°±²²³³²±±±²²³³²²²²³³²°¯®¯¯­¬™…kVA-&Aby“®ÁËÖ×ÔÙØØØØÙÚÛÜÞÜÛÜÞÞÝÜßÝÜÝÞßÞÜÝÞÞÞÞÝÜÜÞÞÞÝÜÜÛÛÛÝÞÛÓ¾œdM2"'A`€ž³ËÜâáåäâçååääääããäååææååäååååååååååååååååæäâϪ‰jN:-" ! #! ,EhŽ°ÆÜæäæèèèèèèèèééééééééèèèèéééêééééêêêëëëëëëëëëëëëëëëëëíëèåàÝÚØÚÛÛÝßáãåçççèéêêëêéééèèè瀀€€…†‡ˆ‰Š‹ŒŒŒŽ‘‘’’“““““”•••——”Š|o_L5$#4I\q‡™¡¥¨ªªª©ª«¬«ªª¬¬«ª©ª«ª¨§¨©¤§ª©¦¥§ª§¨©©¨§¦¦¥¦§©ªªªªªª§ —ˆq]E20E\t†™£«­­¯°®­­®¯¯¯¯¯°°¯¯°°±²°°±±²³´µµµ´´³²²²³³³³³³³³³±°°±°®¬š†lWB-&Aax“®ÁÌ×ØÕÚÙÙÙÙÚÛÜÝÞÝÜÜÞßÞÜàßÞÞàáßÞÞÞßßßßÞÝáààßÞÝÜÜÚÝßÞÖÁžfO3#%?^}›°ÊÛááååâçäääääääääååææååäååååååååååååååååæãâЬŒmP;.# !!)@cŠ¬ÃÚåäæççççççççèèèèèèèèççèèèéééèèéééêêêêêêêêêêêêêêêêêêêìëèåáÝÙ×ÚÚÛÝßáãåæççèéêêëêêêéééè耀‚……‡‰‹ŽŽŽ‘‘‘‘‘‘’““””““”•––˜š™•‘Š{n\I2"%6L_tŠ›£¦©«¬««¬®¬«ªª¬¬«ª«¬­¬ª©ª«¦©«ª§¦©¬©©©©ª©§¦¦§¨ª««¬«««¨¡—ˆp\D11G^vˆ™£¬­®°°®®®¯°±±°°²±±±±²³´±±²´µ¶¶¶¶¶¶µµ´³³³³³³³³³³²±°±²±®¬œˆmXC.%@aw“®ÂÍÙÚÖÛÚÚÚÚÛÜÞßàÞÝÞßàßÝâáßàââáàßßààáààßââáàßÞÞÝÛÞàßØàƒhQ5$$1$  "$9Z¥¿ØååèææææææææççççççççæçççèèèèçèèèééééééééééééêêêêêêêêêêèåáÜØÕØØÙÚÜßáâäååæççèèêéééèèè炃„……†ˆ‰Š‹ŒŽ‘‘‘‘’’’““’’’’“”•–••••–—˜™›š•‡xjXC,);Qez §¨«­®®®°±¯­¬­®¯®¬­¯°¯­¬¬®¯¬ª©ªªª©­«ª«¬¬ª§ª«¬¬­¬¬«¬¬¨ –†nYB03IazŒœ¦¯±±³³²°°±²³³²²´´´´´µ¶¶´µ¶¸¸¸··³´µ¶·¶µ´´µ¶··¶µ´´´´µ¶´±®žŠoYD.$?_v’®ÃÐÛÜØÜÜÜÜÜÝÞàáãâááãäâáåãâãäåäâààáâããââããããââââÞàáßÙƦŠkS7%5Rt–­ÅØàáæåáæãããääåååäååææååäååååååååååååååååçãâÔµ–uU?2$  ##6U}¡»ÕãäçææææææææççççççççææçççèèèççèèèéééééééééééëëëëëëëëééèåáÜ×ÕÖ××ÙÛÝßáããääåæççéèèèçççæ‚‚ƒ„…††‡‹‹ŒŒŒ‘’’’’’““““’’’“”•––•••–—˜™š™“Ž…vhWB**_u’®ÄÐÜÜÙÜÝÝÝÝÞßàáäãââäåäâåäããåæäãàáâãããããããããããääßááßØƧŒlT8&2Pr•­ÅØàáçåáåãããääåååäååææååäååååååååååååååååçãâÔ¶˜vV@2$  $#5Qyž¹ÓáãæææææææææççççççççæææççèèèçççèèéééééééééééëëëëëëëëééèåáÜ×ÔÕÖÖØÚÜßàââããäåææèèçççæææ……„„„…††‰Š‹Ž‘‘‘’’’““‘’’“”•–—–––———˜˜šš—“‡whT?(!,=Ui~“¢©©«­¯°°¯®±°¯®®¯°±°°¯¯®®®®­­¬¬¬¬­­¯­««®®¬©®®­­¬«««©¬ª¢–„lXC1!5KbzŒ£¬´µ´¶·¶µµµµµµµµ¶¶¶···¸¸¸··¹»»º¸¹¹¸¸¸¹ºº¶¶µµµµ¶¶¶¸¸µ¶¸µ¯£Žs\G1":]z”ªÃÒÙÝßßÝÝÝÞÞÞßßâââãããääääääääääääääääääããããããããàääßÚͯ’sT:(1Sr’±ÄÚãáåæäçäääääääääääååæææååååååååååååååååçáãÙ»šy\E0$!!!! '1Ou˜³ÐáãæççççççççææææææææççççççççèèèèèèèèééêêêëëëëëëëëëëëêêéçâÝØÕ×ÓÒ×ÛÛÜßààßßàâäåååääãääå……„„……†‡‰ŠŒŽ‘‘’’’“““””••––———˜˜˜™™™š™š˜“†udO;$$-?Wl€”¢¨«¬®¯°°°¯¯®®­­®®¯±±°°°¯¯¯°¯¯®®®®®±¯­®¯°®¬®®®®¯¯¯¯­¯¬¤—„kWA.!5Lc{¢«³´³¶¶µµµµµµµµµ¸¸¹¹ººººº¹¹º¼½»ºº¹¹¸¸¹ººº¹¹¸¸¹¹º·¹¹·¸¹¶±¥u^H2!"9]z”ªÃÓÙÞàßßßàààáááââãããäääääääääääääääääääããããããããâååáÝϱ”uW<*/Qp¯ÃÚãáåæäçääääääääääåååæææååååååååååååååååèãäÛ¾|^G1%!   ! '0Ms–²ÏàãæççççççççææææææææççççççççèèèèèèèèèéééêêêëêêêêêêêêêêéæâÝØÕÕÑÑÖÚÚÜßßßÞÞßáãäääãââããä……………†‡ˆŠ‹Ž’’’“““””————————™™™šš›››™š˜”„q`K8""/BZp„—¤©¯°±²³³³²±±²²²²±±±±°°°¯¯¯±±°°¯¯®®²°¯¯°±¯®®®¯¯°±²²¯°­£•‚iU?-!5Md}¡«²³³µ¶µ¶¶¶¶¶¶¶¶¹¹¹ºº»»»¼»»¼¾¿½»»ºº¹¹¹ºº¼¼»ºº»¼¼¹»»¹º¼¸³§’w`J3""9\y”ªÄÔÛßáàâââãããääãããäääååååååååååäääääääääääääääääçæâßÓ´–xY?--OnŽ­ÂÚãáåçäçäääääääääåååææææååååååååååååååååêäæÞ¢€bI3&"   ! &/Io“¯ÍÞâåççççççççææææææææççççççççèèèèèèèèçèèèéééêêêêêêêêêééèæâÝØÕÓÎÎÓ×ØÚÞÞÞÝÝÞßááâááàááâↅ……†‡ˆ‰ŒŽ‘‘‘‘““““”””•˜˜˜—————™™ššš›››™›™•ƒo\K8#"0D^u‰œ©­¯¯°±±±²²±²³´´³²±±°°°¯¯¯¯±±±±°¯®­²±±°±°°¯¯¯°°±±²²°°¬¡’fR?-!6Me~‘£¬´µ´¶·¶¸¸¸¸¸¸¸¸·¸¸¸¹¹¹º¼¼»½¿¿¾¼¼¼»ºººº»¼¼»ºº»¼¼»¾½»¼¾»µ§’w`J3""8[x”«ÅÕÝáâáããäääåååääääåååæææææææææååååååååååååååååäçåãáÕ¶—z[@.,MlŒ¬ÁÙãâæçåçåååååååååååæææççææææææææææææææææêäæàƦ„eL5'"   " %-Dk¬ËÝáåççççççççççççççççèèèèèèèèèèèèèèèèçççèèèééééééééééééèæâÝØÕÏËÊÏÓÕ×ÛÜÜÜÝÝÞßßàßßßßààᆆ††‡ˆŠ‹Ž‘’’’’“”””••••—————–––™™™ššš›››œš•‚n[K7"$2F`wŒŸ¬°®®®®®®¯¯¯°±²²±°¯²²²±±°°°±²²³²±°¯³³³³²±±²´³³³²²±±±±¬¡’fS<+"7Nf‘¥®¶··¹º¸ºººººººº¸¸¹¹¹ººº¼»»½¿¿¾¼¾½¼»ºº»»¾½½¼¼½½¾½¿¿½½¿¼·§’w`I3!"8Zw”«Ç×ßãäããããääåååäåååææææææææææææååååååååååååååååäæäââ׸˜|]A.,MlŒ«ÀØãâçèåçååååååååååæææçççææææææææææææææææéãæáɪˆgO7)# " $,@gŒ©ÉÜáåççççççççççççççççèèèèèèèèèèèèèèèèçççèèèééééééééééééèçãÞÚ×ÎÉÈÌÐÒÕÙÛÜÜÝÝÝÝÝÞÝÝÝÞßàà†††‡ˆ‰‹Œ‘’“““’””•••–––————————™™™šš›››œš•Žƒo]I6!$5HavŠª®±±°°°±±²°°±±±±°°²²²±±±°°¯°±²²±°¯²³´³±°±²´´´³²±°°±±¬¡”jW:*#8Of‘¦°·¸¸º»¹»»»»»»»»»»¼¼½½½½½¼¼½¿À¾½¿¾½¼»»»»ÁÀÀ¿¿ÀÀÁ¾ÀÀ¾¾À½·¨“x`I2!"7Yv”¬ÈÙáäåäãããääåååååæææçççççççççççææææææææææææææææåæäãäÙº™~_C0+KjŠª¿ØããèèåçææææææææææææçççèççççççççççççççççêãæãͯŒjR:*# " #*>>????@@@@????@@@@@@@@>ACB@@DGJPYepz€ƒ‚€€€€‚€€€€‚‚ƒƒƒƒƒƒƒƒ……‡‡‡‡……†‡ƒ{tmaTME>=:67;678999878888888898655566555544334432223321000012,2:FSdv“›œšœžžžŸ ¡¡¢¡¡¢£¤¤¥¥§§¨¨¨©©©««ªªª«¬­®®¯¯¯®®­±±²´µ³¯¬£ŽvcQ<* "9Yp’ªÇÙàäåäæææææåååææççèççæççææååääæææåååååææææååååæäéêåßɨ‹mP:$$B`‚£»ÖããççäçççççççççççççççççççççççççççççççççæèéæÜšz\C1' "%6S}¥ÅÛäãççèèèéééééééééééééééééééééééééééèèéééêêêêêëëëìììëëëéçãàÞÛÙØ××ÙÛÝÝßààÞÜÝÝàßßßàáãä‹ŒŒŒ‹“••””••–——˜š™˜˜™›››œœœ›ŸŸŸŸŸžžžŸž˜’Š~sdWJFFEEFFFFGGHHHLLMMMNNNOOOOPPQQQQQQQQQQRRRRRRRRQRTSRQQRRTX]bgjlooooooooonnmmnnonnnnnnnnmmmnnooorqpoopqrqqrrrrqqstpkgd^WTPNNMJJMJKKKKJJIJJJJJJJJLLKJIJJKJIIIHHHGHHFEEEEEEEDDDDEEEGKQXcnu~ƒ‰‹‰ˆŠŒŽŽ‘‘’‘‘’““”–––———˜˜œ››››œžžŸ    ŸŸ¢¢£¥¦¥¡ž“ƒpaSC5/&&%$#$$$ !!! "9Xo•¬ÈÙàåæåçççèèèèèèèééééèççççççæææççççççççééèèçççæèåéêæãÏ°‹mR<&#>[}ŸºÕãäèèåçççççççççççççççççççççççççççççççççèéêçßÇŸ`F3) ! "$3Py¡ÂÙãäçèèèééééééééééééééééééééééééééééèéééêêêêêëëëììììììëêèäáàÜÛÙØØÚÜÝÝßáàÞÝÝÞááàáâãä匎‘”––••–—˜˜—™šš™™šœœžœ›¡¡¡ ŸŸžž ¢ š•Ž„ymbXVVUUVVVVWXXYY\]]^^_`````aaabbbbbbcccceeeddddccdddda^[YWVUUVXY\\\\\\\\\\[[[[\\^^^^^^^^]]]]^^^_ba^]]^ab\\]]]]\\^_^]]][YY[^``_^_____^]]\^^^^^^^^__^^^^^^]]]\\\[[]\[ZXXXXXXXXXXXXYYYZ]bgkqtwyxwxzzz{{|}}~~€‚‚‚„„……††††‰ˆˆˆˆ‰Š‹‹ŒŽ’““Žui`WLDB:98877884443333333210/..,,,,,+++**)))(((&&&&&&&&$$!!*@]r‘§ÀÑÚàãâäääåååååååææææååçççèèèèèæææçççççêéééèèèçêæééåãѳŒnR<&";Xz¸ÔãäèèåèççççççççèèèèèèèèèèèèèèèèèèèèèèèèéééçáʤƒdI5* !!  "$2Nv¿ØãåèèèéééêêêêêêêêêêêêêêêêêêêêêêêêêêéééêêêëëëëëìììííìììëéæãáÞÜÚÙÙÛÝÞÞàááßÝÝÞáááââãä厎Ž“–—————˜™™˜š››šš›žžžžœ¢¢¡¡ ŸŸŸ¢¤¢œ—’‰{rkkkiikjjklmnnoppqqrsttttuuuvvvvvwwxxyy{{{zzyyxyxxyyumg]YSMIHIJFFFFFFFFGGFEEFGGHHHHHHHHGGHHIIIIKJGFFGJKIIIIIIIIJKMQTWZ]dkrvvvvvxwvvuuttvvvvvvvvuuuvvvvuttttsssrutsrqpppooppppooigdbaaaa`abbbbcdccddefgghiijkllmnooopppqrqqqqrsttuvwwwwwyxy{}}|zslea[SPRNMLKKKKLJJIIHHGGJJIHGFEEEEDDCCCB???>>>==;;;;;;;;8755=Phz‰›±ÀÊÒÖÖÖÖ××ØØØÙÚÛÜÝÝÝÝÜààááâãããááââãããäææææææææéåççãáϱ”tW?' 9Uy¶ÒâäééæèççççççççèèèèèèèèèèèèèèèèèèèèèèèèèèççâΨ‡iM8+ !"! "$0Kr™»ÖäçèèéééêêêêêêêêêêêêêêêêêêêêêêêêêêêééêêêëëëëëìììííííííìêèåãßÞÜÚÚÛÝßÞàâáßÞÞßßàáââãã㎔—™˜˜˜˜™š›™›œœ›šœžžŸŸŸžž¢¢¢¡¡¡¡¡¤¥£žš—ˆ…{||zz|{{|}€€€€‚ƒ„…†……††‡‡‡‡‡‡ˆ‰‰Š‹‹ŽŽŒ‹‹ŠŒ‰ˆŠŠ…zpb[PD<88944444444655445565555555544455566653333566655556677;CJQ[eoyƒ‡‰‹‹ŠŒŒ‹ŠŠŠŠ‹‹‹‹‹‹‹‹‹‰ŠŠ‹Œ‹‹‹Š‰‰‰ˆˆˆˆŠ‰ˆ‡††††……†‡‡†……zsle_YUPONNMNNOPPPQRSSTSSTUVVWWYYZZZ[[[^^]]]^_``abcddddedegijjhfcbb_\]bccba`aaaaa``_^^]^^]]\[[[[[[ZYXXXTTTSSRRROOOOOOOONNMMR^o{‡•¥¯·¿ÃÃÃÃÄÅÅÆÆÇËÌÎÏÑÑÒÒÓÔÔÕÖ×ØØÙÙÚÚÛÜÜÝßààáââããæâååáßί”tX@)  7SxµÑâåêêçéççççççççéééééééééééééééééééééééééçæçåÒ¬‹mQ:-  !!""!!"$-Gm”·ÓâçééééêêêëëëëëëëëëëëëëëëëëëëëëëëëëêêêêëëëìììììíííîîîîíìéæåáßÝÛÛÜÞßßàâáßÞÞßßàáâãäãã‘‘•˜™™™™™š›œš›œ››œžœžŸ    ¡¡¡¢¢¢¢¢£¥£ Ÿžš“ŒŠŠŠ‹ŒŽ‘’‘’“”––—————˜˜˜™˜™™š›œœ  ŸŸžœœž›™›œ•ˆ|h]M;.'%%$$$$$$$$%$$##$$%$$$$$$$$###$$%%%$$$$$$$$$#""""#$&$'1><<=>>?@@BBBCCDDDGGFFGHIIIJKMNNNNONNPSUTSSU[begox~}||||}}}|{zyyxwwwwwwwwvvutssrroooonnmmkkkkkkkkkkjijox~ˆ‘™œŸ¤§¦¨©©ª«¬¬­±²´¶¸º»»»¼½¾¿ÁÂÂÃÄÄÅÆÇÈÈÊËÌÎÏÑÒÓÔÑÕ×ÕÓÁ£‹pZI6-,&''&%%$###""! !!  !6Pu›³ÐâåëëçéççççççççééééééééééééééééééééééééëèçèèÖ±pS<.   !!!##"!"$)BhŽ±ÏàåéééêêêëëëëëëëëëëëëëëëëëëëëëëëëëëêêêëëëìììììíííîîîîïîìêèæâáÞÜÜÝßàßáââàÞÞßàáãäåååä‘‘’•˜šš™™šš›œš›œ›žœžŸ ¡¡¡ ¡¡¢¢££¤¢¤£¡¢¤¡›š™œšš›œžŸ ¡¢¡¡¢¤¥¦§¨§¨¨¨©©©ª©©ª«¬­®®²²±°¯®­­¯¬©¬­¦–‰k_K6%$2F`vŒ›§ª«°²°²±°°±²´µ²²²²²²²²²³µ¶··¶µ´´´³³²²²¯¯®®®¯°°±²³´´³²±®¤“€mYG<+($##$$$$$%%&''(''(()*++---...//00000122235677778779<>>=CHS`jr‹–•”““““”““’‘Ž’’’’’“““‘ŽŒŒ‹‹‹‹ŠŠ‰‰‡‡‡‡‡‡‡‡†‡†ƒ„ˆ‚ˆŠˆ‡‰Š‰Ž‘’’“”—šœžŸ ¡¡¢¤¥§¨©¨©©ª«¬­­°°²´¶¸º»º¸¾ÁÀ¿­‡paWICB<;;:9877633210/....,+)('&'&%$#"!! #!5Ns˜³ÐâåëëçéççççççççééééééééééééééééééééééééìêèêêÙ´“rU=.   !!!!##"""#%?dŠ­ÌÝãéééêêëëëëëëëëëëëëëëëëëëëëëëëëëëëêêêëëììììììííîîîîïïïíëèçãáßÝÜÝßàßáââàÞßßáãåæççææ’’““”•––—˜šššš›ŸžœœžŸ ŸŸŸ   ¡¡¡¢£¤¤¢¡ ¥¥¥¤¤££¢¤¤¤¥¥¥¦¦¤¥¦§©ª«¬§¨ª«¬­­­®®®¯¯°°°°°±±²³´´´¸·²²·¸´´µ´²±ª›Œt]B/"#3Hcx’£´»»¼¾½½½½½½½½½¿½»ºº¼¾À¿¿¿ÀÀÀÁÁ¾¿ÀÁÀ¿½¼¼¾À¿½¼½½ÃÂÁÀ¿¿ÀÀ¿µ¡‰s^F4 !!!!!!!!''&&'()).=Qcq“ ¦§¨©©¨§¦ªª«««ªª©««««««¬¬«ªª¨§¦¥¥¨§¥££¥§¨¤¥¦¥¢¡¢£ ›œ›•Œ‡wspllprrsuvwxy{{}‚„……†‡‰‹ŽŽ‘“”––˜™šœž ¡¢¦¦§§§¢–‹zsjc]WUTRPOOOONLIIHGFDDCCBA?><;;86444420....-+*)*(&'5Ty”¹ËÜäèííêëëêêééèèçççèèèéééééééèçæêêêêêêêêëïïêèܼ›wY;-% """#####*>_‡¯ÏâèèêììëêëììììììììììììììììììììììììììììììììììììííîîîíîïïîìëéäáÝÚÚÝàããããâáàÞÝÝßâåçèèè““””•–———™ššššœŸžž  ŸŸ   ¡¡¡¡¢¢£££¢¢¥¥¥¤¤¤££¤¤¥¥¥¦¦¦§§¨¨©ªªª««¬­­­­¬¯¯°°°±±±²²³´µµ¶¶³··³³··³´µµ³±ªšŠr\A."$4Idy“¤µ¼¼½¾¾¾¾¾¾¾¾¾¾½½¼¼½¾ÀÁÀÁÁÁÂÂÂÃÂÂÂÂÂÁÀ¿ÀÂÄÃÂÁÂÃÃÃÃÄÄÄÄĸ¤Œu^D1&6OeyŽ¤²½¾ÀÁÁÀ¿¾ÂÃÃÃÃÃÂÂÃÃÄÄÅÅÆÆÂÂÁÀÀ¿¿¾¿¾¼»»¼¾¿½¾¿¾¼»¼½½º¸¸´¨—Œtg_XSSWVWXYZ\\]``bceghiijkmopqrrstvxz{||}~€‚ƒ……‰‰Š‹Œˆ€xtqmllmnpomkkkkigffecba`_[ZYWUTRRRPNMMLJHFFFEDB@?==<>Ib€–«¼ÍÖÜáãàâââââââââããäåæççççèèèèççççççèèèèèëéææܾžbC3) !! !" !!!""""!!!!""""##$$$$%%&9Z‚«ÌàèéëíîìììíëëëëëëëëìììììììììììììììììììììììììììííîîîîîïïîíëéåâÞÛÚÝàããããâáàÞÝÝßáäæçç甕•–——˜˜—™››ššœžžžžžžŸ ¡   ¡¡¡¢¢¡¡¡¡¢£¤¥¦¦¥¥¥¤¤¤¥¥¥¦¦¦§§ªªªªªªªª®®¯¯®­¬¬°°±±±²²²²³³´µ¶¶·³¶·¶¶·¶³´¶µ³±©˜‰p[@-!$5Jez•¦¸¾¾¿ÀÀ¿¿¿¿¿¿¿¿½½¾¿ÀÁÂÂÂÂÂÃÃÄÄÄÅÅÄÃÃÃÃÄÂÄÅÆÅÅÆÈÄÅÆÈÉÉÈÇż¨v^B-0Lg˜°ÁÌÎÏÑÑÑÐÏÓÔÔÔÔÔÔÔÔÕÖ×ØÙÙÚÙÙÙÙÙÙÙÙÙØÖÕÕÖØÙ×ÙÚÙ×Ö×ØÙ×××ÒÀ¤ŽziUF;459;;<=>?@@CDEFHIJKKLMNPQRSSTVXZ\]^``acdefgkjkmonkinpty€ˆŽ‘ŽŒŠ‰‰‰‡…†…„‚€}}{zyvtrqpnljihgecaa`_][YWUUUW_o„’¢¯½ÆËÐÑÐÓÓÔÕÖÖ××ÚÛÜÝßáâââãäææççæåææççèééééççéßÁ¢}bE4*! !    !!!!!""###$%6U~§ÇÝçèêííìëìíëëëëëëëëìììììììììììììììììììììììììììííîîîîîïïïíëêåãßÜÛÝàããããâáßÝÜÜÞáãåæçæ––——˜™™š˜™››š›œžžžžŸ  ¡¢¡¡¡¡¢¢¢£¢¡¡¡¢¤¦§¦¦¦¦¦¥¥¥¦¦¦¦§§§¨ªªª«««¬¬­­®®®®­¬°°°°±±²²±±±²³´´µ³µ·¸¸·µ³µ·¶´°¨–†nX>+ %6Lg}˜©ºÀÀÁÁÁÀÀÀÀÀÀÀÀ¿ÀÁÁÂÁÁÁÂÂÃÃÃÄÄÄÇÆÅÄÃÄÆÇÁÂÄÄÃÄÆÈÆÇÉËËÊÈÇÄ»¨w]A+/Jf~˜±ÁÎÏÒÓÔÔÔÓ×××××ØÙÙÙÙÚÜÝÞààáááââãããååäããäååãäåäãâãääãäæäÒ±•{fK6)!"'''()**+,-./012233456788999;=?ABCFGGHIJKLONORTUX\hq}‡“ ¨««©§¦¦¥£¡£¢¡Ÿ›™™˜˜–”‘ŒŠˆ…„„ƒ€~||{ywtrqpoopt~ˆ¥­²´¶¶¶º»¼¾¿ÁÂÃÆÇÉËÍÏÐÑÒÓÕÖØÙÚÚÛÜÝÞßàáâäããäæÚ»v_F7.'$&$$#!!!!!  !!!!!"""###$(5R{£ÃÚçæèêëêêëììììììììììììììììììììììììììììììììììììííîîîîïððïíëêæäàÝÝÞáâãããâàÞÝÜÛÝßâäååå–——˜™šš›˜š›œ››žžžŸ ¡¢¢¢¡¢¢¢££££¢¢¡¡¢¤¦¨¦¦¦¦¦§§§¦§§§¨¨¨¨¨©©«¬­®¯©ª¬­®®®®®®¯¯°°°°±±²³´´µµ´µ·¹¹·µ´¶··´°§”ƒkV;)&8Nj™ª»ÁÁÁÂÁÀÀÀÀÀÀÀÀÂÃÃÃÂÁÀ¿ÂÂÂÃÃÃÄÄÆÆÄÃÃÅÆÇÁÂÃÃÃÄÆÉÈÉÊËÊÈÅÃÁ¸¥v]A+/Ke~–¯¿ÎÐÒÕÖ×ÖÖÚÚÙÙÚÛÜÝÜÝÞßáâãäááâããäååæææååæææåæççååæçæææççÙ¹›fG/! !!""##"#$%'()*,,--..//201678?Iar†–§¸ÁÃËÉÇÆÇÆÄÂÃÂÁ¿½¼»º¶µ´²°®¬«ª¨¥¤¤£¡Ÿœš˜•“’’ŒŽ‘“”–—˜™˜—˜šœŸ¡£¥¦§ªª¬®±³µ¶·¸»½¿ÁÁÂÅÅÇÉËÍÎÏÓÓÕØ×È©wfQD<64411/.-,,,**))((('%%%%%%%%%%%%%%%%&0LvŸ¿ÙêæèëëëëìíîîîîîîîîìììììììììììììììììììììììììììííîîîïïððïîìëçåâßÞßáâãããáàÞÜÚÚÛÞáãäää———˜™šš›˜šœœ››Ÿž ¢££££¢¢£££¤¤¤£¢¢££¤¥¦¦¦§§§¨¨¨§§¨¨¨©©©§§©ª¬­¯¯¨©«­®¯¯¯®®®¯¯¯°°´´µµ¶··¸¶µ¶¹¹¶µ¶¶¸¸µ°¦’hS9('9Plš«¼ÂÁÂÂÁÀÀÀÀÀÀÀÀÄÃÃÂÁÁÀÀÂÂÂÃÃÄÄÄÅÅÄÄÅÅÆÇÅÆÆÅÄÅÈËÉÊÊÉÈÅÃÁÀ·¤Œt]B-/Kf˜±ÂÍÏÑÔÖ×××ÛÚÙÙÚÜÞßÞßßàáâãäãããääååæååååååååæçééççèêéêèæåÚ¼ž€fF.  ##",;Yq¥»ÐÚÚáßÝÝÞÞÜÛÛÚÚØ×ÖÕÕÓÒÑÐÎÍËËÆÄÂÁÂÁ¿½¼¼»º¸¶´³±®«©¨£œ–‘‹…‚}ƒ‚ƒ…‡‰‹Œ‘“–˜™šŸ¡£¥§¨¨ª«­¯²´¶·»½ÀÄÁ²š‡xm_TNJGEDCB@>===;;987543..--,+**+**)((''(/Hr›»ÖêçéìíììíïîîîîîîîîìììììììììììììììììììììììììììííîîîïððñðîìëçæãàßàáâäããáßÝÛÚØÚÝàâããã–——˜™™šš™šœœœœŸž ¢¤¤¤¤£££¤¤¤¥¥££¤¤¥¤¤¤§§§¨¨¨©©¨¨¨©©©ªª¨¨©ª«¬­­«¬­®¯¯¯®¯¯¯°°°±±´´µ¶¶·¸¸¹µµ¹¹µµ¹·¹¸µ°¥‘gQ8&(:Qmƒ›¬¼ÂÁÁÂÁ¿¿¿¿¿¿¿¿ÂÁÀÀÀÁÃÄÃÄÄÄÅÅÅÆÄÅÆÆÇÇÇÆÈÈÇÆÄÅÈËÉÉÈÇÆÅÄÄù¥‹t]C..Jf˜²ÂÌÍÐÓÕ×××ÛÚÙÙÚÜÞàßßààááââãäääääååäääååäääæçééèçéêéìëæãÙ¾¡‚gG/!$5Sq•°ÈÞèæèçææèèçæçæææååääåääãâááàÜÚÙÙÚÚÙ×ÖÖÖÕÔÒÐÏÏÌÊÈö¥—‹~qic^`fefgikmnoqqstvxyz€‚…†ˆ‰‰Š‹“–˜™›¡¥£˜‹‚wrkfeedaa_^[ZXXXVUSQNLJIEEDB@?>=<;:976447;Pvš¶ÐääæéêêêëíìììììììììììììììììììììììììììììììììììííîîîïðññðîìëèæäáààááäããáßÜÚÙØÙÜßáâââ––—˜˜™šš™›œœœœžŸž¡£¤¥¤¤££¤¤¤¥¥¥£¤¥¦¦¤£¢§§§¨¨©©ª¨¨©©©ªªªªªªªªªªª¯¯°°°¯®­°°°±±²²²²²³³´µ¶¶ºµ´¸¸´µº·¹¹µ°¤~eP7&(;Rn„›«¼ÂÁÁÁÁ¿¿¿¿¿¿¿¿¿¾½¾¿ÂÆÈÅÅÆÆÆÇÇÇÄÅÇÈÉÉÈÇÈÈÇÄÃÃÆÉÈÈÇÆÆÆÇÇǼ¦Œt]C/.Id|•®¿ÎÐÓÖØÙÚÚÞÝÜÜÝßâãããããääääââââââââãääååääããåçæååçéåëìçãÚÀ£ƒiI1$ 3Pq˜´ÍâêçìêéêìíìëííííííííêêêéééèèìëêêìíëêéêêéèçåäæåäãÛÉ°‚q^RH@BHIJKLNPQRTUVWYZ[\bcegijjkmnptwz|~}ƒ‡…€{zxwww{€€~}|zwutssrpnkhecbba_][YXWTSRPMKJIKK[}œ³ÊÝßâäæåæçèêêêêêêêêìììììììììììììììììììììììììììííîîîïðññðïíëèçäâáàááäãâáßÜÚÙ×ÙÜÞááâá—˜™š››››žŸ   ŸŸ££¢¡¢£¥¦¢¢¢£££¤¤¨¨§¦¦¦§§¦§©©©©§¦¤¥§©ª«¬¬¬¬¬¬¬¬¬¬¯®®®®­­­³²°¯¯°±²·µ´´¶¶µ³¶·¸¹¹¹¹¸¸µº¹®¤“{dM3#+>Uq†œ­½ÂÀÀÀ¿ÂÂÂÂÂÂÂÂÀÀ¿¿ÁÃÅÇÅÇÉËËÊÇÆÃÄÆÇÇÆÄÃÇÇÈÈÈÇÆÆÈÇÇÆÆÇÇÈù¤ŠrZ?+.Je~—°ÁÐÓÖØØ×ØÙÛÚÚÜÞààßáááââãããâââããäääåååææçççæææççèèèéåèéåßÇ¥‰iK5!!*Lq”°ÏáçëëëëììíííííííííííììììììììëëëëëëëëêêéééèèèéèêçâÞÅŸcK<-+.*-./12455:;<=?@ABIIJLNOPQSTVY\_abdfekrjeqr†ˆ”š› œ›˜•“‘Ž‹ˆ†…‚}}{xvvtqorpmjhgghbco†ž¯ÀÍÕÚàâäææåèèèèèèèèééêêëêêéêêëëêéèèëìííìíîðìíîíëìíïðñññðîìêçåãàßßáâãæåàÞßÝØÙØØÚÞààß—˜™››œœœŸŸŸŸŸ   ¤££¢¢£¤¥¤¤¤¤¥¥¥¦§§§§§§§§§¨©ªª©¨§§¨©ªª«ªª¬¬¬¬¬¬¬¬­­®®¯¯°°³²±°°±²²¶µ´´¶·¶´¶·¸¹¹¹¹¸·´¹¸¬¢‘ycM2",?Vr‡®¾ÂÁÁÁÀÂÂÂÂÂÂÂÂÀÀÁÁÃÄÆÇÇÇÈÈÈÈÇÇÄÄÆÆÆÆÄÄÆÆÇÇÈÇÇÇÈÇÇÆÆÇÇÈŤŠrZ@+.Je~—°ÁÏÒÕÖÖÖÖ×ÛÚÚÛÞààßáááââãããââãããäääåååææçççæææççèèèéåèéåàȦŠjL6" *Hn‘­ÌßæëëëëìììííííííííííììììììììììììììììììëëëêêêëéìéäáÉ£cI8($&! "#$%%&'()*,--/001345578:)+Gb{”­¾ÏÒÕÖÖÖÖ×ÙØØÚÝßÞÝáááââãããääääåååæåååææçççæææççèèèêåèéçäЯ“qS;%$;_€œ¿ØãìéêêêëëëëëëëëëëëëììììììììììììììììëëëêêêééêéìëéêÖ³’qR<'!!" ,Fk³ÎåìêîíììëëìííîìëëííìêìêééêêèçèèééééèèèèáÑ»¢†rk^UVXVX^bcegjlnotvy}„†‡‰‹“—šœžŸ¤¯ÀÓáèêéìðññðññðñññðîìêèæâßÝÝÝÞàââÞÝÞÝÙÛÚÚÛÝßÞÝ›œžŸŸŸŸ  ¡¢£¥¦¦¤¦¨©«««ª¨©©©ªªªª¨©ªª«¬­­­¬«ªª«¬­©ª¬­®¯¯®®®®®®®®®°°°°±±±±±²´¶··¶¶¸¶µ¶¸¸·¶¶·¸¹¹¹¹¸¹µ¸¶¨Šq[E, 1E]yŽ¢±¾ÁÀÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÅÆÈÉÉÉÈÇÅÄÆÆÄÄÄÄÆÆÉÈÆÅÅÆÈÊÊÉÉÈÈÉÉÊ変pW<'+Fbz”­½ÍÐÔÕÕÔÕÖÙØØÚÝÞÞÝáááââãããäääåååææåååææçççæææççèèèêåèéçåѱ”sT<&#9\}˜ºÔàêééêêêëëëëëëëëëëëììììììììììììììììëëëêêêééêéìëêìÙ¶—uV>(!!  !!!! +Ce‹¯ËãëêðííììëììíîìëìîïîíìêééëëêèêêéééêëëéíéØÀ¢eVG<>?:;AFGIKMOQRTVY]adfggimqvy{|€ƒŽ£½ÖæìèìðñññññðñññðîìêèæâßÝÜÝÝÝàáÞÝßÞÛÛÙÙÚÜÞÝÜ›œžŸ  ŸŸ ¡£¥¥¦¦£¥§ª¬¬¬¬ªª«««¬¬¬ª©©ª«¬®®®­««««­®¬­­®®®­­®®®®®®®®­­®¯°²²³±²´¶···¶¹·¶¶¸¸·µ¶·¸¹¹¹¹¸¸´·´§›ˆoZD+ 1E]z¢°¾Á¿ÁÃÄÄÄÄÄÄÄÄÄÅÄÃÂÂÄÅÆÌËÉÇÆÆÇÇÇÆÄÃÃÄÆÇÊÈÆÅÄÆÈÉÊÉÉÈÈÉÉÊĹ£ˆoV;&*Faz“¬½ÌÏÒÔÓÓÔÕÙØØÚÜÞÞÝáááââãããäääååæææåååææçççæææççèèèêåèéçåÒ²•tU='"7Zz•·ÑÞçéééêêëëëëëëëëëëëììììììììëëëëëëëëììëëëêêêëéììëíÛ¸{ZA*""  !" *Acˆ¬ÈßççíîíìëëëììëêéêìíìëîíììîîíëîíìêêëíîéïïáÉ©ƒgK;011,+1,-/1468979<@DFHIJMPTY\^_egp†¥ÅÛææéíïïîïïðñññðîìêèæâßÜÜÜÝÚÞßÝÞààÝÙØØÙÛÜÜÚœœž ¢¤¥£¡ ¢¦¨§¥«¨§ªª§§ª«««¬¬«ªª«¬¬­­®®¯¬¬¬­­®®®­­­®®¯¯¯±°®­­®°±¬®°±±²´¶±²³´¶·¸¹·¶µ¶¸¹¸·¶·¸¹¹¹¹¸·¹·²ª›„pUA) 1F^z¦²½¿¿ÁÂÂÄÄÅÅÅÆÆÆÄÃÁÀÁÂÅÆÊÉÇÇÇÇÉÊÅÄÃÁÁÂÃÃÅÅÆÆÆÅÄÄÉÉÉÉÉÉÉÉĹ£ˆpX>*(C_x©½ÎÔ×ÕÔÖÖÔÙÚÚÛÛÜÝÝÞßàâääååååæææåääååååååååçççèèééééåéêèçÖ¹—wZA)4Pv–²ÍáêèèèééêêêêêêêêêêêëëëëëëëëëëëëëëëëëëëëëëëëëèìíëìÝÀŸ{\G0#! !*5Y€§ÅÞèéïëììííììëììììììììììììììììììììììììëíìãÒ²‡eP<1.''*&))))))))*+,./123679;>@BCJKVo”ºØçåèìîîîïððïîïðïìéæàÝÞÝÙØÙÝÝÜÜÝÝÞßÛÙØÙÛÛÚÙžŸ¡£¤¥¤£¢¤§©©§ª§§««¨¨«««¬¬¬«««¬­­­­­®®¬¬­­­®®®­­­®®¯¯¯°°¯®®¯°°­¯±±±±³µ²²³´¶·¸¸¸¶µ¶¸¹¹···¸¹¹¹¸¸·¹·±©šƒoT@) 2G_{¦²½À¿ÁÂÂÄÄÄÅÅÅÆÆÆÅÃÂÃÄÆÈÉÈÇÆÆÇÈÉÇÆÅÄÃÄÄÅÄÄÅÅÆÅÅÅÉÉÉÉÉÉÉÉź£‰pX>*(B_wŽ¨½ÏÕØÖÕ×ØÕÙÙÚÚÛÜÜÝÞßáâãääääååææåääååååååååçççèèèéééåéêèç×¹˜xZB)1Ns”°ËßéèèèééêêêêêêêêêêêëëëëëëëëëëëëëëëëëëëëëëëëìèëìêëÞá}]H1$! !)4V|£ÂÜæçîêêëììëêêììììììììììììììììììììììììëíìäÓ´‰gQ=2.''*&))))))))((()**++()*,.02213?Y¬ÎàåèìíîîîððïîïðïìéæàÝÞÜØ×ÙÛÛÛÛÜÜÝÝÝÛÚÚÜÝÜÚžŸ ¢£¥¥¥¥¤¦©«ª©ª§§«¬©ª­¬¬¬¬¬¬¬¬®®®®­­­­¬­­­®®®®®®®®¯¯¯¯°°¯¯¯¯°°¯°²²±±²´²³³´¶··¸¸·¶·¹º¹¸¸¸¹¹¹¸··¸¹·±¨™mS>' 3G_{§³¾ÀÀÁÃÂÃÃÄÄÄÅÅÅÇÆÅÄÅÆÈÉÈÈÇÆÆÇÈÈÉÈÇÆÆÆÆÇÃÄÄÅÅÆÆÇÈÈÈÈÈÈÈÈź¤‰pX>*(B_wŽ¨¼ÍÓÖÔÔÖÖÔØØÙÚÛÛÜÜßàáâããââääååååääååååååååççççèèèééåèêçç׺™y\C).Jp­ÈÝçèèèééêêêêêêêêêêêëëëëëëëëëëëëëëëëëëëëëëëëíéëëèëàȤ€`J2$! (2Qw½ÙäæìééêëëêééììììììììììììììììììììììììëíìåÖ¸kS?3/''*&))))))))&&&&&&&&$%%'()**%'2Lu£ÉßåèëíííîïðïîïðïìéæáÝÝÚÕÕØÙÙÚÛÛÛÛÛÜÚÙÙÚÛÛÚžŸ¡¢¤¥¥¥¥¥¦§©ª««ª¨¨¬¬ª«®¬¬¬¬¬­­®¯¯¯®­­¬¬­­­®®®¯¯®¯¯¯¯¯¯¯°°°¯¯°°°°²³²±±²³³³´µµ¶··¸·¶·¹ºº¸¸¸¹¹¹¸·¶¸¹·°¦—~jP<&!4H`{¦³¾À¿ÁÃÂÂÃÃÃÄÄÄÄÆÆÅÅÅÆÇÈÇÇÆÆÆÆÇÇÈÈÇÇÆÆÆÆÃÃÃÄÅÆÇÈÇÇÇÇÇÇÇÇź¤‰pX>*'A^v§¼ÉÏÒÑÐÓÓÑ××ØÙÚÛÜÜààáâââááããäååååäååååååååææçççèèèéåèéççØ»›{]D*,HmŽ«ÇÜçèèèééêêêêêêêêêêêëëëëëëëëëëëëëëëëëëëëëëëëíéëéçëãͨƒcL3%!&/Mr˜¸ÖãæëéêëëëëêéììììììììëëëëëëëëììììììììëììçÚ½“pWB50''*&((((((((&&''''''))))**++*+2IpžÇßäçëíííîïðïîïðïìéæáÝÛ×ÑÑÕ×ØÚÛÜÛÚÙÚ×ÕÕ×ÙÙÙ ¡£¤¥¦¦¥¤¥§¨¨©ª«¬©©­­««®­­¬¬­®¯°°°¯¯®­­­­­®®®¯¯¯°¯¯¯¯¯¯¯°°°±±°°°±²³³²±²´³³´µµ¶··¸·¶·¹º¹¸·¸¸¹¹¸··¹¹¶¯¥”|gN:$"5Ia{¦²½¿¿ÀÂÁÂÂÂÂÃÃÃÄÄÄÃÄÄÅÅÆÅÅÆÆÆÆÅÅÆÆÆÆÆÅÄÄÃÃÃÃÄÆÈÉÇÇÇÇÇÇÇÇĹ£ˆoX=)&@]uŒ¦»ÈÎÑÐÏÒÓÑÕÖ×ØÙÛÛÜßàáââááàââãäåååäååååååååæææçççèèéåçèæçÙ¼}^E*+FkŒ©ÆÝèèèèééêêêêêêêêêêêëëëëëëëëëëëëëëëëëëëëëëëëíêëéæëæѬ‡fO5&!$-Im“´ÔãæìëëìííìëëììììììììëëëëëëëëììììììììëììèÞÙvZE71''*&((((((((%%&'(())((((((((++0Dh–ÁÛäçêìììíîðïîïðïìéæáÝÙÒËËÐÕ×ÙÜÜÛØ××ÕÓÓÖÙÚÚ¡¢¤¦§§¦¥¤¦¨©¨©«­®««®®««®®­¬¬­¯°²¯¯¯¯®®®®®®®®¯¯¯°°°°°¯¯¯¯°°±±±±°°°²³³²²´µ´´´µµ¶¶¶·¶µ¶¸¹¸·¶·¸¹¹¹¹¸¹¹¶®£’ydL8""6Ja{¤°»¾½¿ÀÀÁÁÁÂÂÂÃÃÂÂÂÃÃÃÄÄÄÄÅÆÆÅÄÄÄÅÅÅÅÄÃÂÅÄÃÃÄÅÇÈÆÆÆÆÆÆÆÆø¡‡nV<(%?\t‹¥ºÉÏÓÒÒÔÕÓÔÔÖ×ÙÚÛÜÞßàáââááááãäåååäåååååååååæææççççéåççæçÙ¾Ÿ~`F+(Dh‰§ÅÜèèèèééêêêêêêêêêêêëëëëëëëëëëëëëëëëëëëëëëëëìéìêçìèÕ±‹iQ7&!"*Eh°ÒâæëëìííííìëììììììììêêêêêêêêìììììììììììêâÈž{^G92('*&''''''''$$%%&'((''''&&&&)(-?b½ØãæêìììíîðïîïðïìéçâÝÖÍÄÅÊÑÔØÛÛÙÖÔÕÒÑÑÕÙÛÜ¢£¥§¨¨¦¥¦¨««ªª­¯°­¬¯®ªª¬¯®­¬­¯²³®®¯¯¯¯¯°®®®¯¯¯°°±±±°°¯¯¯°°±²²±°°¯±³³³³µ·´´µµµµ¶¶¶´´µ·¸·¶´µ·¸¹ººº¹º¶®¢‘wbJ6!#6Kb{£¯º¼¼½¿¾ÀÀÁÁÁÂÂÂÁÁÂÃÃÃÃÃÃÄÅÆÆÅÄÃÄÅÅÆÅÄÃÂÇÆÄÃÃÄÆÈÅÅÅÅÅÅÅÅÁ¶ …lU:&%?\t‹¥¹ÉÏÓÒÒÕÖÔÓÔÕÖØÚÛÜÝÝßàáâââàáâãäåååååååååååååæææçççéäæçæçÚ¾ €aF+%@e†¤ÂÚæèèèééêêêêêêêêêêêëëëëëëëëëëëëëëëëëëëëëëëëêéìëçíé×´ŽlS8'!!)@cˆ«ÏáäêêëììììëêììììììììêêêêêêêêìììììììììììëåÍ¢`I:2('*&''''''''&&&&&&''((((((((*)->_Œ¸ÔãæêìììíîðïîïðïìéçâÜÔȾ¾ÄÍÐÕØÙÖÒÏÎÌÊÌÐÖÙÚ¢¤¦¨©¨§¥§ª­­«¬®±²®­¯®ª©¬¯®­¬­¯²´­®®¯¯°°±®®®¯¯°°°±±±°°¯¯¯¯°²³³²°¯®°²³³´¶¸´´µµµµ¶¶µ´³´¶·¶µ³´¶¸º»»»ºº¶­¢vaI5 #7Lb{¢®¹»»¼¾½ÀÀÀÁÁÁÂÂÁÂÃÃÄÄÃÃÂÃÅÅÅÅÃÂÄÅÆÇÆÅÃÂÈÆÄÃÂÄÆÇÅÅÅÅÅÅÅÅÀµŸ„kT9%$>[tŠ¥¹ÇÍÑÐÐÓÔÓÒÓÔÖØÙÛÛÛÝÞàââããàáâãäååååååååååååååææçççéäæçåèÚ¿¡€aG,#>cƒ¢ÀØåèèèééêêêêêêêêêêêëëëëëëëëëëëëëëëëëëëëëëëëéèíìèíê×µmT8'! (=_„§ÌßãèéêêëëêêéììììììììêêêêêêêêììììììììììììæÏ¥bJ;3('*&''''''''+**)('&&'''''(((+*-;Z…°ÌãæêìììíîðïîïðïìéèãÜÓÅ»»ÁÊÍÒÖÖÔÏÌÇÅÃÆËÐÕÖ£¤§©««ª©«««¬¬¬­­¯¯®®®­­­«¬­­®¯°°±±±±±±±±±²²²²±°¯°°°°°®­­¬­®®®°´·²²²²²²²³³³³´´µµµ´µ·¹¹·µ´µµ·¸¸¸¸¸¹¹µ¬ s^H5 $8Lc|¦°¹»»½½»¿¾¾¾¿ÀÁÁÃÂÀ¿¾¿ÀÀÁÂÃÄÄÄÄÃÃÃÃÃÃÃÃÃÃÃÃÄÄÅÅÆÃÃÃÃÃÃÃÃÀ´‚jS:&#;Wq‰£·ÄÌÑÐÎÐÑÐÓÔÕÖØÙÚÚÛÜÝÞßàßßââááââãääåæççççæååååååååæäèéæçÚ¿ ~aK0$<_‚ ½ÖçæèêêéééêêêêêêêêêêêêêêêêêëëëëëëëëìëëêêëëìíçéëéìæÕ¹“pV9'!!;Y‚¦ÂÙåêèéêëëëëêëëëëëëëëêêêêêêêêììììììììêìëèåÔ­ˆgM;2)),(&&&''(((''''''''((((((((&+*4W¬ÑÜåìììîïïñðïïððîìèÞÙͺ·¾½ÁÌÖ×ÕÒÍȺ´·ÃÎÔÕ¦¦¦§¨ª«¬««¬¬¬­­­¯¯¯®®®­­¬¬­®¯°°±±±±±±±±±±²²²²±°¯°°°°°¯®­¬­®®­¯²´¯°°°±²²²³³³´´µµµ³´¶¸¸¶´³µ¶··¸¸¸·¸¸³ªž‹q\G4 $8Mc}¥¯¸ºº¼¼»¾¾¾¾¾¿ÀÁÂÁÀ¿¾¿¿À¿ÀÁÂÂÂÂÁÃÃÃÃÃÃÃÃÂÃÃÃÄÄÅÅÅÅÅÅÅÅÅÅÀ´žƒjS:'#;Wp‰£·ÂÊÐÏÎÑÓÒÔÔÕ×ØÙÚÚÝÞßàáááááááááâãäääåæççææååååååååæãçèæçÚ¿¡~aK0"9\ºÔåæèêêéèéêêêêêêêêêêêêêêêêêëëëëëëëëìëëêêëëììçéìéìçÖ»”qW:(!!6T}¡¾ÕãèèéêêëëêêëëëëëëëëêêêêêêêêììììììììêìëèåÕ®‰jP=3('*%&&&'''((''''''''((((((((&+)2S{¦ËÜåëìëîïïñðïïððîìëáÙ˶°µ³ÂÍØÚÙÖÏÉÀ¸±´¿ÌÓÕ¨§¦¦§ª¬®¬¬¬­­­®®°°¯¯¯®®®­­®®¯°°±±±±±±±±±±²²²²±°¯¯°°°°¯®®­®¯®­­¯±­­®¯°±²³³³³´´µµµ²³µ¶¶µ³²µ¶¶·¸···¶¶±¨œ‰oYE3#8Md~’¤®·¸¹»»¹¾½½½½¾¿¿ÁÀ¿¾¾¾¿¿½¾¿ÀÀÀ¿¿ÂÂÂÂÂÂÂÂÂÂÂÃÃÃÃÄÄÄÄÄÄÄÄÄÀ´žƒkT;'#:Vpˆ¢¶ÀÈÏÏÎÒÔÓÔÕÖ×ØÙÚÚÜÝÞßààààáààààáâããäååææååäääåååååæãçèåæÚ¿¡bK0 6Xz™¶Ñãæèêêéèéêêêêêêêêêêêêêêêêêëëëëëëëëëëêêêêëëìçêìèëç×½—tZ<)" 1Nw›¹ÑáçèèéêëëêêëëëëëëëëêêêêêêêêììììììììêìëéæÖ°ŒnS@4(&(#&&&&'''(''''''''((((((((&+(/MtŸÄÛäëëëîðïñïïðññïííâÚ̶°³¯ÀÌ×ÛÚ×ÏȽµ­¯ºÈÒÖ¨¨§¨©«­®­­­­®®®¯±°°°¯¯¯¯®®¯¯°°±±±±±±±±±±±²²²²±°¯¯°°±±°¯¯¯°°°®­¯°­­®°±²³´³³³´´µµµ²³´´´´³²µ¶¶···¶¶µµ°§šˆmXC1#8Ne“£­¶·¸ºº¸½½¼¼¼¼½¾¿¿¾¾¾¾¾¾½½¾¿¿¿¿¿ÁÁÁÁÁÁÁÁÁÁÁÂÂÂÂÂÁÁÁÁÁÁÁÁ¿´ƒkT;(#:Vo‡¡´ÁÉÏÎÎÑÓÒÔÕÕÖ×ØÙÙÙÙÛÜÝÝÝÝßßßßßàááââãäååääãääääåååæãæçäæÚÀ¢€bL14Uw•³ÏáåçéêèèèêééééééééééééééééêêêêêêêêëëêééêëëìçëìèëèÚÀšw]?+" -Iq•³ÎßççèéêêêêéêêêêêêêêêêêêêêêêëëëëëëëëêìëéçسoUA5)'(#%%&&&'''&&&&&&&&''''''''%*',Io›ÁÚãêëëîðïðïïðññïííâÛϽ¸»·¼ÈÓØÙÖÍÄ»´¬­·ÆÒئ§©«¬­¬¬­®®®¯¯¯¯±±±±°°°¯°°°°±±±±±±±±±±±±±²²²²±°¯¯°°±±±°°°²³²°¯°±®¯°±²´µµ³³³´´µµµ²²³³³³²²µ¶¶··¶µµ¶µ±§š‡lW@/$8Nf€“£­µ··¹º¸¼¼»»º»»¼½½¾¾¾¾¾¾½¾¿ÀÀÀÀÀ¿¿¿¿¿¿¿¿ÁÁÁÀÀÀÀÀÀÀÀÀÀÀÀÀ¾²œ‚jT;("9Un†Ÿ³ÂÊÐÏÍÏÐÏÔÔÕÕÖ××××ØÙÛÛÜÜÜÞÞÝÝÞßààááâãããããâããääåååæãææãåÙÀ£cL13St’±ÎàåçééèçèéééééééééééééééééêêêêêêêêëêééééêëìèììçêéÜÄž{`B-#+Fl¯ËÞççèééêêééêêêêêêêêêêêêêêêêëëëëëëëëëìëéèÚ¶“pUA6*(*$%%%&&&''&&&&&&&&''''''''#)&*Fl™ÁÙâêêëîðïðïïðòòðïíâÜÓÿ½¼ÆÑ×Ú×ÎÄ»´­­¶ÅÒÚ¦¨ª­®®­¬®®¯¯¯°°°²²²±±±°°±±±±±±±±±±±±±±±±±²²²²±°¯¯°°±²±±±°²´´²±±²¯°±²³´µµ³³³´´µµµ³³³³³³³³µ¶¶¶¶µ´´µµ°¦™†kU>-%9Oe“£­¶··¹º¸¼»ºº¹¹ºº»¼½¾¾¾½½¾¿ÀÁÁÁÁÀ¾¾¾¾¾¾¾¾ÀÀÀ¿¿¿¿¾Â¼°š€iR:'"9Tm„ž²ÃËÐÎÌÎÏÎÒÓÓÓÔÔÕÕØÙÛÜÝÝÝÝÝÝÜÜÝÝÞßßàáââââáâââãääååçãååâåÙÀ¤‚dM11PpŽ®ÌßäæééèçèéèèèèèèèèèèèèèèèèééééééééêêééééêêëèììçêêÞÇ¡dD.$*Di‹«ÈÜæççèéééééééééééééêêêêêêêêêêêêêêêêëìëééܹ–qVB7+(*%$%%%&&&&%%%%%%%%&&&&&&&&#)&)Ci–¿ØáéêêîðïðïïðòóñïðäÝÔÅÁ¼¾ÇÑ×ÛÚÒÇ»µ®®¶ÄÑÙ¨©ª¬­®®®¯¯¯°°°±±³³²²²±±±²²²²²²²²±±±±±±±±±²²²²±°¯¯°±±²²²±®°³³²±±±°°°±²²²³³³³´´µµµ´´³³³³´´¶¶¶¶¶µ´³´³®¤—ƒiS<+&:Oe~’¤®¶¸¸º»¹»»º¹¸¸¹¹º»¼½¾½½¼¾¿ÀÀÁÁÀÀ½½½½½½½½À¿¿¿¾¾½½ÁÁÁÁÁÁÁÁº¯™gQ9&"8Tl„±ÁÉÏÎÌÏÐÏÑÑÑÒÒÒÓÓØØÚÛÜÜÜÜÜÜÛÛÜÝÞÞÞßàáááááááâãääååçãåäáäÙÀ¥‚dM1.LlŠªÉÝäæèéçççéèèèèèèèèèèèèèèèèééééééééêééèèééêëèíìæêëàʤfF0$(Bf‡¦ÄÚäæçèééééèééééééééêêêêêêêêêêêêêêêêëìëêêÝ»™tYE8+'("$$%%%&&&%%%%%%%%&&&&&&&&%+'(?d‘º×áèêêîðïðïïñóóòðñåÞÖÇÄŽ¿ÇÏÕÚÛÓɺµ¯®µÂÏ׫ª©©«­°±¯¯°°°±±±³³³²²²±±²²²²²²²²±±±±±±±±±²²²²±°¯¯¯±²²²²²¬¯±²±°°±¯°°°°°°°³³³´´µµµµ´´³³´´µ¶¶¶¶¶´³³²±¬¢•fQ;*&:Ne~‘¤®·¸¹»»¹»º¹¸¸¸¸¸¹º¼½¾½¼¼½¾¿ÀÀÀÀ¿½½½½½½½½¿¿¿¾¾½½¼¿¿¿¿¿¿¿¿¹­˜~fP8%"8Tlƒ°¿ÇÍÍÍÐÒÑÐÐÐÑÑÑÑÑÕÖ×ØÙÙÙÙÜÛÛÛÛÜÝÞÞßààááàààáââãäååçãääáäÙÀ¥ƒdM1,Ii‡§ÆÛäæèèçççèèèèèèèèèèèèèèèèèééééééééêééèèééêëéíìæéëáË¥ƒgG0%'Ad„£Á×âæçèééééèééééééééêêêêêêêêêêêêêêêêëìëêêÞ¼šx\F9*&& $$$%%&&&%%%%%%%%&&&&&&&&',''=`Œµ×àèéêîðïðïïñóôòðñåßØËÉʽÄÌÑ×ØÑǹ´¯¯µÀÌÔª©¨ª¬­­¬¬­®¯±²³³´´µµ´²°¯³³²²³µ·¸²²²²²²²²±±²²²±°¯²²³³³³³´±±±±±±±±²²²²²²²²´³³³³´µ¶´´³³³²²²²²²³´µ¶·²²­¡“€gT:)';Pf’§°¶¶¶¹»»·¸¹º¼¼¼¼º»¼½½½½¼ÀÀ¿¾¾¿ÀÀ»»»»¼½¾¾½½¾¾¾¿¿¿»½¿¿¾¾¿À½®—gN5& 6Qkƒž²ÃÈÎÐÏÏÑÓÐÐÐÐÑÒÓÔÖÖÖÖ×ØÙÚÚÙÙØÙÚÜÝÜÜÝÞßßààÞàâãããäåäâææâãÙÁ¤‡eK5!+GjŒ©ÅÙäéìéçééæèèèééêêêééééééééééééééééééééééééìêéééèåã̪ƒfN6% %;]ƒ¥ÁØåæçèééééèèèèèèèèèèèèèèèèèèèèèèèèèççëëçâÆœ}\C8*$$ """##$$$$$$$$$$$###$$%%%$+''9X…±ÐéæéïìòíðððññòòòñèÞØÕÒÍɾÃÌÕÚ×Ðʽº¶´·ÀÌÕª©©ª­®­¬­®®°±²³´´´µµ´²±°²²±±²´µ¶²²²²²²²²¯°±²²²²²´³³³³³³³³³³³³³³³²²²²²²²²³²²²²³´µ´´´³³³²²³³³³´µ¶·±±« ‘}eQ9)(=Rh•¦¯¶··¹»º·¸¹ºº»ººº»»¼½½¼¼¿¿¾½½¾¿¿ººººº»¼½¼¼½½¾¾¾¾»½¿¿¾¾¾¿¼®—gM5% 6Qkƒ±ÃÈÍÏÎÍÏÑÏÏÏÐÐÒÓÔÕÕÕÕÖ×ÙÚÚÚÙØØÙÛÜÜÜÜÝÞßßàÜÞáâááâãåäèçäåÛÃ¥ˆeL6!)Dgˆ¥ÁÕàæéçæééçèèèéééêêééééééééééééééééééééééééìêéééèåãά„hO6%%:\£À×äæçèééééèèèèèèèèèèèèèèèèèèèèèèèèèèçëëçãÇž^E9,&&""""##$$$$$$$$$$$###$$%%%#)&%7T­ÎèåéïìòîðððññòòòñêàÚ×ÔÐËÁÆÍÕÙ×ÒÍÆÄÀ½¾ÆÑÙ«ªª«­¯®­®¯°±²³´´´µµµ´³±±±±±±²³´µ³³³³³³³³®¯°²³´´´µµ´´³²²²´´´´´´´´²²²²²²²²²²±±²²³´µµ´´´³³³³³³³´µ¶·²²¬ ‘}eQ8()>Tk„—¥¯·¸¸ºº¸··¸¹¹¹¸¸¹º»¼¼¼¼»¾½¼¼¼¼½¾¹¹¹¸¹ºº»»»¼¼¼½½½»½¿¿¾½¾¿»­–~fM5% 6Qj‚±ÂÇÌÎÌËÌÎÏÏÏÏÐÑÒÓÕÔÔÕÕ×ØÙÚÚÙØØØÙÙÛÛÜÜÝÞßßÛÝßàßßàáåãææâäÚÃ¥ˆfM7"%@c„¡½ÑÜâæååèéçèèèèéééêééééééééééééééééééééééééëéèèéèåãѯ‡jQ7%#8Y~ ¾ÖãæçèééééèèèèèèèèèèèèèèèèèèèèèèèèèèçëêçäÉ¡ƒaH;-''#"""##$$$$$$$$$$$###$$%%%"(%%4O{©ËæåéïìòîðððññòòòòìãÝÚØÓÐÈÊÏÕØØÔÐÌÊÆÂÂÈÐ׬««¬¯°¯®°°±²³´´µµµµ´´³³²²²²²³´´µ´´´´´´´´°°²³´´´´¶¶µ´³²²±²²²²²²²²³³³³³³³³³³²²²³´µ¶µµµ´´´´´´´´´µ¶·µµ¯¢“fR7')>Tl…™¥¯¸º¹º¹···¸¸¸·¶¶¹¹º»»»»»¼¼»ºº»¼¼ºº¹¹¹¹º»ººº»»¼¼¼»½¿¿½¼½¾º«•}eM5% 6Qj‚œ°ÁÆËÌÊÈÉËÎÎÎÎÏÐÒÒÓÓÓÓÔÕ×ØÚÙØØ××ÖÖÚÚÚÛÜÝÝÞÛÝßßÞÞÞàáßââÞáØÀ¦‰hN8"$>`€ºÎÜâæååèéçççèèèéééèèèèèèèèèèèèèèèèèèèèèèèèêéèèèèåãÔ²ŠmS8%!5Vzœ»ÔâæçèééééèèèèèèèèèèèèèèèèèèèèèèèèèéçêêèåÌ¥†cI;-&&""""##$$$###########$$%%%#(%%3Ju¥ÇääéîëòïðððññòòòóíçáÞÛØÕÏÐÒÕØÙ×ÕÒÐÌÈÇÉÏÔ®­¬­°±±°²²³³´µµµµµµ´´´´´´´µµµµµµ´´´´´´´´³³´´´´³²·¶¶µ´³²²²²²²²²²²³³³³³³³³µ´´´´µ¶·¶¶¶¶µµµ´µµ´´µµ¶·¶µ¯¢’}dP5&(>Tk…˜¥°¸º¹¹¹¶¶··¸··¶µ¸¸¹º»»ºº»»ºººº»»¼»ºººº»»ºººº»»¼¼»½¿¾½¼¼½¹ª”|eL4% 6Qi›¯ÀÅÊËÉÇÈÊÍÍÍÍÎÏÑÑÒÒÒÒÓÔÕÖØØ××ÖÖÕÔØÙÙÚÛÜÜÜÛÝßàÞÝÞßàÝààÝà×Á§ŠiP9##=^~›·ÌßåèæåçèåçççèèèééèèèèèèèèèèèèèèèèèèèèèèèèéèççèçåãÕ³ŒoU:&2Rv˜¸ÒáæçèééééèèèèèèèèèèèèèèèèèèèèèèèèèêèêêèçЩˆeI;,%%!"""##$$$###########$$%%%%)&'2Ep¢ÃâäéîëòððððññòòòòïêåáÞÛÚÖÕÕ×ÚÛÚØØ×ÔÑÎÏÓÖ¯®­¯±²²±´´´µµµ¶¶¶µ´´´´µµµµ¶··¶¶µµµµµµµµµ´µµµµ´³²¶¶¶µ´´³³µµµµµµµµ´´´´´´´´¶µµµµ¶·¸···¶¶¶µµ¶¶µµµµ¶·³²¬žŽy`K4%)>Tk„—§°¸¹¸¹¹¶¶¶·¸¸····¸¹¹ºº¹¹»»ºººº»»¼¼»ºººº»ººº»»¼¼¼»½¿¾¼»»¼·©“{dL4% 6Pi€š®¾ÃÉÊÈÇÈÊÍÌÌÍÍÏÐÑÑÑÑÑÒÓÔÕÕÕÖÖÖÕÔÔ××ØÙÚÚÛÛÛÝßßÞÝÝÞáÞáàÝáÙç‹jQ;$#<\{˜µÊßåèæåççåæçççèèèèççççççççççççççççççççççççèçæçèçåãÔ³pV;'0Or•µÐàæçèééééèèèèèèèèèèèèèèèèèèèèèèèèèêèêéèéÓ­‹gK;+$$!"""##$$$""""""""###$$%%%&)&(0@jžÀßãéíêóñðððññòòòñïìèäáÞÝÛÚÙÚÜÜÜÚØ×ÖÓÑÐÓÕ°¯®¯²³³²µµµµ¶¶¶·¶µ´³´´¶¶´µ¶·¶¶´´¶¶¶¶¶¶¶¶³´µµ¶µµµµµµµµµµ´µµµµµµµµ´´´´´´´´µµ´´µµ¶·¸¸···¶¶¶·¶¶µµµ¶·²±«Œw]I2$+@Ul…˜©±¸·¶¸¹·µ¶·¸¹¹¹¸¶·¸¹¹¹¹¸¼»ºººº»¼»»º¹¸¸¹¹»»»»¼¼¼½»½¿¾¼ºº»¶¨’{dK4$ 6Ph€™­½ÂÈÊÉÈÉÌÌÌÌÌÍÎÏÐÐÐÐÐÑÒÓÔÒÓÕÖÖÕÔÔÖ××ØÙÚÚÚÚÜÝÝÜÚÛÜàÝàßÜàÙèŒkS;$":Zy–³ÇÛáåääæçåææçççèèèçççççççççççççççççççççççççæææèçåãÓ²ŒpW;'.Lo’³ÏàæçèééééèèèèèèèèèèèèèèèèèèèèèèèèèëèêééêÕ°ŽjM=,%%""""##$$$""""""""###$$%%%%'%'.;e™½ÞãéíêóòðððññòòòðïíêåâààßÝÜÜÞÞÝÛÕÕÕÔÒÑÒÔ°¯¯°²´³²µ¶¶¶¶¶··¶µ´³´µ¶·³´µ¶¶´³²¶¶¶¶¶¶¶¶±²´µ¶···´µµµµµ¶¶³³³³³³³³´´´´´´´´´³³³³´µ¶¸¸¸···¶¶··¶µµµ¶¶´³¬žx^J2#-BWm…˜ª²¸¶µ·¹¸µ¶·¸¹ººº¶·¸¹¹¹¸¸¼»»ºº»»¼º¹¸·····»»¼¼¼½½½»½¿¾¼ºº»¶§‘zcK4$ 6Ph™­¼ÂÈÊÉÉÊÍÌËËÌÍÎÏÐÐÏÏÐÐÒÓÔÑÒÔÕÖÕÕÔÖÖ××ØÙÚÚØÚÜÜÚÙÙÚÞÛÝÜÙÝÖÀ¨ŒlS<%!8Xw”±Å×ÞâââæèææææççèèèçççççççççççççççççççççççççæåæççåãÒ±ŒpW;' ,Jm²ÎßæçèééééèèèèèèèèèèèèèèèèèèèèèèèèèëèêééëÖ²‘mO?.&'#"""##$$$""""""""###$$%%%$&$&,7a–»ÝãéíéóóðððññòòòïïîêæâááàßÞÞßßÝÜØÙÚÙ××ØÙ°±²³³³²²³´¶µ´´¶·µµ¶¶¶¶¶¶µµµµµµµµ¸¸·¶µ´´³µµ¶¸¸¸¸¸¸¹º¹·¶·¸¸·µ´´µ·¸¶¶¶¶¶¶¶¶µ´´¶¸¸·µ¶¶¶·¸¹»¼··¶¶¶µµµ´³­ Žy^I0")?Ul†šª²¸·¶·¸··¸·¶´µ·º¹¹¹ºº»»»¹¼¾½º¸¹»¹¹¹¹¹¹¹¹¸º»ºº»½¿º»¼»¹¹»½¶¨’zcK3$ 5Ph€™­¹ÁÇÆÅÈÊÉÇÊÌÍÌÌÎÐÍÍÎÎÐÒÓÔÓÓÔÔÔÕÕÕÕÕÕ×ÙÚÙ×ØÚÛÚ×ÕÕÕÛÞÞÜßáÔãˆhP:$!7Xv­ÅØÝààâççäååååååååççççççççææææææææççççççççæççççæåäÕ²sT>-)DiŒ«ÇÚåæççææéëçèèééèèçèèèèèèèèèèèèèèèèéêäìëåÜ·“oQ@/&%!!!!!!!!!########$$$%%&&&&*((,6[³×áìðéððñññòòóóóñðîìêèæåãâáßÝÝÜÜÛÙÙÛØÔÕÙ±²³´´´´´³µ¶¶µ´¶···¶¶¶¶¶¶´´µµ¶¶¶¶º¹¹¸·¶¶µ·¸¸¸¸¸¸·¸¹º¹·¶·¸¶µ³²²³µ¶¶¶¶¶¶¶¶¶¶µµ¶¸¹·µ¶¶¶¶·¸¹¹···¶¶¶µµ´³¬Ÿw]H/"+@Wnˆ›ª²¹¸¶¸¸·¸¹º¹··¹»¹¹ººº»»»º¼¾½»¹¹»¹¹¹¹¹¹¹¹¸º»»º»½¿»¼½¼ºº¼½¶¨’zcK3$5Ph™­¼ÄÊÉÇÊËÊÍÎÍÌÊÊËÍÎÎÎÏÐÒÓÔÒÓÓÓÔÔÔÕÕÔÕÖÙÚÙ×ÙÚÛÚ×Ö×ØÛÞÝÛÞßÓ¤ˆiQ;$5UtŽ«ÃÕÜááâåæäååååååååççççççççææææææææççççççççæççççæåäÕ³‘tU>.(Cg‹ªÆÙäæççæçéëçèèééèèçèèèèèèèèèèèèèèèèéêåìëåݹ–rTC1(&"!!!!!!!!########$$$%%&&&'*)(,4Y‰±ÖáëðéñðñññòòóóóñðîìêèæåãâáßÞÝÝÝÛÙÙÚ×ÒÓ׳³´µ¶¶µµ´µ·¶µµ¶¸¹¸¸·¶¶µµµµµ¶··¸¸»»º¹¹¸··¹¹¹¸¸¸¸·¸ºº¹·¶·¹·¶´³³´¶·¶¶¶¶¶¶¶¶¶µµ·¹¹¸¶¶¶¶¶¶¶¶¶¸¸···¶¶¶´³«‹u[F.!,BYp‰œ«³¹¸·¸¹¸¹»½½»º»¼¹ººº»»»»º¼¾½»ºº»ººº¹¹¹¹¹¹º»»ºº½¿¼½¾¾¼»½¾¶¨’zcK3$5Ph™­½ÅÊÉÇÉÊÉÍÎÍËÉÉÌÎÎÎÎÏÐÑÓÔÑÒÒÒÓÓÓÔÕÔÔÖÙÙØ×ÚÛÚÙ××ÙÜÛÞÜÙÜÝÑÀ¥‰iR;%2RpŠ¨ÀÐÚããáâäãååååååååæææçççççææææææææççççççççæççççæåäÖ´“vV?.'Ae‰¨ÅÙäæççççéêçèèééèèçèèèèèèèèèèèèèèèèéëåíëæß½›vXF3)(#!!!!!!!!########$$$%%&&&(+))+2T‚¬ÓáêïéñðñññòòóóóñðïìêçæåãâáßÞÞÞÞÜÙØØÕÐÐÔ³³´µµµµµ´¶··¶¶·¹ºº¹¸·¶µµ¸¸¸·····»ººº¹¹¸¸·····¸¸¸¹º»º¸·¸¹º¹¸··¸¹º·········¶¶·¹º¸·¸¸¸¸··¶µ¹¸¸¸····µ³«œ‰tYE-!-CZp‰œ«´º¹¸¹º¸¹»¾¾½»»»ººº»»»¼¼¼¼½½¼»ºº»ºººº¹¹¹¹º»»ºº¼¾¼¾À¿¾½½¿¶¨’zcK3$5Og™­¼ÄÉÇÅÆÇÆÈÊÌÌÌÌÎÐÎÎÎÏÐÑÒÓÑÑÑÒÒÒÓÓÔÔÔÖØÙØÖÛÛÚØ×ØÛÞÛÝÛØÚÜп¦ŠjR<%1Qn‰¦¿ÌÙããààâãääääääääåææææçççæææææææææææææææææççççæåäض•xXA/&?b†¦ÄØãåçèççèêçèèééèèçéééééééééééééééééëæíëæâžy[H5*(#""""""""########$$$%%&&&(+))+0Nz¥ÑàéíêñïñññòòóóóòñïìêçåäãâáßÞÞÞÞÜÙ××ÒÍÎÒ²²³´µ´´´µ·¸¸··¸º»»º¹¸·¶¶»»º¹¸·¶¶¹¹¹¹¹¸¸¸µµ´µ¶·¹º¹º»º¸·¸¹ººº¹¹ººº········¸··¸º»¹·ººººº¸·¶¹¹¹¹¸¸¸·¶´«›ˆrXD, -CZpˆ›¬µ»º¸º»¹¸º½½¼ººººº»»»¼¼¼½½½½½¼»º¼»»ºº¹¹¹º»¼»ºº¼¾¼¾ÀÀ¿½¾¾¶¨’zcK3$4Og~˜¬¼ÄÉÇÅÆÇÆÅÈÍÏÏÎÍÍÏÏÏÏÐÑÒÓÑÑÑÒÒÒÓÓÔÓÔÕØÙ×ÖÛÛÚØ×ØÛÞÛÝÚ×ÙÜÐÀ§ŒlS=&1Pnˆ¦¿ËØâãààâãäääääääääååææçççæææææææææææææææææççççæåäÙ¸—{[B0$<_‚¤Â×ãåèéèçèéçèèééèèçééééééééééééééééèìæíëçåÇ¢}]J5*'"""""""""########$$$%%&&&(*()+.IsžÎßèìêòîñññòòóóóóñïíéçåãááßÞÞÝÞÞÝÙ×ÕÑÌÌѲ²³´´´´´¶¸¹¹¸·¹º»»ºº¹¸¸·½¼»º¹¸··¹¹¹¹¹¹¹¹·¶µµ¶·¹»¹»¼»¹¸¸º¹¹¹¹¹¹¹¹¸¸¸¸¸¸¸¸¹¸¸¹»¼º¸ºº»¼»º¸·ººº¹¹¹¸¸¸µ«›ˆrXD+-D[qˆš­µ»»¹»»º¸º¼»º¹¹º»»»»¼¼¼½¾½¼½¾¾¼º¼¼¼»ºº¹¹º»¼»¹¹»½»¾ÀÁ¿½½¾¶¨’zcK3$4Ng~˜¬½ÅÊÉÇÉÊÉÉÌÏÐÎËÊÉÐÏÏÏÏÐÑÒÑÒÒÒÓÓÓÔÔÓÓÕ×Ø×ÕÚÛÚÙ××ÙÜÚÜÙÖÙÜÒ©mT=&1Pmˆ¦¿ÍØàáàâääããããããããäääåææççææææææææååååååååæççççæåäÛ¹™}]D1#:\¡ÁÖâåèéèèèéçèèééèèçêêêêêêêêêêêêêêêêèìçíêèè˦€`L7*'!################$$$%%&&&')'(+-El˜ËßçëêòîñññòòóóóóòðíéæäãßßÞÝÜÜÝÝÝÙÖÔÐÌÍÒ³³´µ¶¶µµ·¸º¹¸¸¹»ºººººº¹¹ºº»»»»»»ºººº»»»»½»¹···¹ºº»¼»¹¸¹º¹¹ºººº¹¹¸¸¸¸¸¸¸¸¹¸¸º¼¼»¹¸¹º»»º¸¶»»ººº¹¹¹º·¬›ˆrXD+/F]rŠ›­¶¼»º»¼ºº»»º¹¸º¼»»»¼¼¼½½¿½¼½¿¿¼¹½½¼»ºº¹¹»¼¼»¹¹»½º½ÀÀ¿½¼¼¶¨’zcK3$4Nf~˜«¼ÄÊÉÇÊËÊÌÍÎÍËÊËÍÐÐÏÏÏÐÑÒÒÓÓÓÔÔÔÕÓÓÓÕ×Ø×ÕÙÚÛÚ×Ö×ØÙÛÙÖÚÞÔŪŽmU>'0Nl†¥¾ÑØÞßàäæäããããããããããäåææççææææææææååååååååæççççæåäÜ»›^E2!8Y}ŸÀÖâåèêéèèèçèèééèèçêêêêêêêêêêêêêêêêèíèíêèêϪ„dO9,("################$$$%%&&&%(&(+,Ch“ÉßæêêóíñññòòóóóóòðíéæäãÝÝÜÛÛÛÛÜÝÙÖÔÐÌÎÔ´µ¶····¶·¸ºº¹¸º»ºººººº»»¸¸¹º¼½¾¿¼¼¼¼¼¼¼½ÂÀ½º¸·¸¹º»¼»¹¸¹º»¼½½½½¼»¸¸¸¸¸¸¸¸¹¹¸º¼¼»¹µ·¹ºº¹·¶»»»ººº¹¹»¸­›ˆrXD*0H_t‹®¶¼¼º¼¼»»¼¼º¸¹»¾»»»¼¼½½½¿½¼½¿¿¼¹¾½¼¼»º¹¹»¼¼»¹¹»½¹¼¿À¿½¼¼¶¨’zcK3$3Nf~—«¹ÁÇÆÅÈÊÉÌËÊÈÈËÐÔÐÐÏÏÏÐÑÑÓÓÔÔÔÕÕÕÓÓÓÕ×Ø×ÕØÚÛÚ×ÕÕÕÙÛÙÖÛßÖǪŽnU>'/Mj…¤½ÓÙÜÝáæçåããããããããâãääåæççææææææææååååååååæççççæåäÝ»›€_F2!7X|ž¿ÖáåèêéèçèçèèééèèçêêêêêêêêêêêêêêêêèíèíêéëÑ­‡fQ;.*$################$$$%%&&&$'%(+,BfÇÞæéêóíñññòòóóóôòðíéæäâÜÜÛÚÚÚÛÛÝØÕÔÑÍÏÕµ¶·¸¸¸···¹»»ºº»½½½»ººººººº»¼½½½½¼»»ºº»»¼½½¼¼»ººº¹¸·¹»½¼»º¼½¼º¸¸¸»ºº¹¹ºº»¹¹¹ººº»»ºº»¼¼»ºº¹»½¾¾½»¹¹¹­–‚qX@+/G^v¢³¹¼»»½¾¼¹¹ºº»»»»»»¼½½½½½½½¾¿À¿¿¿¾¾¾¾½½½¼½¼¼¼»ºººº»¼½½½½¼¸¨w`I3%3Nh~–¨»ÂÆÆÇÊÊÈÍÍËËËÌÎÏÍÍÍÍÎÏÑÑÒÔÕÕÔÔÕ××ÖÔÓÔ×ÙÛÚÚÛÛÛÛÚÚÛÙÝÝÜáÛǬnU>',Lk†£ºÍÙäåãââàääääääääåååææçççèèèççææææååääååæçççææåååÙá~`G1$1Rv˜¹ÓáåéëêééêèèèèèèèèêêêêêêêêééééééééíçéëêíèصkU@3-%########$$$$$$$$###$$%%%#)('*+=\‰¼×êäðèðòòòóóôôôõôñìçâààÜÛÙÚÛÛÚØÚÙ×ÕÒÑÐе¶·¸¸¸¸··¹ºº¹¹º¼½¼»ºººº»»»¼½½½¼¼»»»»»»»¼»ºº¹¸¸¸¸·¶µ¶¹ºº¹º»¼»¹¸¹º¹¸¸··¸¸¹¹¹¹¹ººº»¹¹ºººº¹¹¸º»½½»º¸··¬–ƒpW@,  1H_v¡±·»¹¹»¼º»»¼¼½½½½º»¼½½½½¼¼¼½¾¾¾¾¾ÀÀ¿¿¾½½½¾¾½½¼¼¼»º»¼½½½½½ºª’yaI2#2Mf~—ªºÁÆÅÆÉÉÇÌÌËËËÌÍÎÌÌÌÌÍÏÐÑÑÓÔÔÓÒÔÕÕÕÔÔÕÖØÙÙÙÚÚÚÚÙÙØÖÚÚØÝ×î’pW?(,Ki„¢¹ÍÙâãààáàããããããããääåååæææççæææåååæååääååæçççææåååÚÄ¢€bH2$0Qu—¹Óáåéëêééêèèèèèèèèêêêêêêêêééééééééíçêëéíéغ’nXA3,#########$$$$$$$$##$$$%%%$)('*+AKW`hu’–””——•’“““”””•‘’“”””””™™š›››››————˜˜˜˜šš›››œœœšš›œœœœ—Œ{l_QB71.+*+,+*((((((((&&&&&&&&%%%%%%%%$$$$$$$$""""!! ##""!!! '.>SgyŽž­´¸¸¸»¼ººº»¼½¿ÀÁÁÁÁÁÂÃÄÅÅÇÈÈÇÇÈÊËËÊÊËÍÎÐÑÑÒÒÒÒÑÑÎÐØ×ÑÖÔĪ‘s]H1# )Eb}œ´ÊÖáããäææââââââââãããäääååååæææçççèççææççèåååææçççäϯnR9)(EhŒ²ÎáåéëêééêêêêêêêêêêêêêêêêêëëëëëëëëìéíìçëíãÏ¥eK90&########&&&&&&&&%%%&&&''&)&'+&-Bb›ÁßáñêñòòòóóôôôôðìæÞϽ°¨¦¤£¤¥¤£¥£¢   ¡¢¹º»¼¼¼¼»¼¾¾½»º»¼ººººº»½½ºº»¼½½½½½¾À¿º³«¦”ƒxpmmnlkjjklkihjllkjklpoonnoopnnnoooppqqrssrqqtsrrrrstupllke^Z_YVWWTVYVVVUUUTTVVUTSSRQSSSSSSSSQQQPPOOONNNNNNNNPOONNOOPNPU\`ckty‚€ƒƒ‚‚‚ƒƒƒƒƒ„……………„…†‡‡‡‡†ƒ„„…††‡‡ˆˆ‰‰ŠŠ‹‹†‡ˆ‰‰‰‰‰†|pf`XNGCA=<=>>=????????<<<<<<<<;;;;;;;;9999999977766555666554444:GXfsƒš ¥¥¥¨©¦§§¦¦¨ª¬®®®®®¯°±²³µ¶¶µ´¶·º¸·¶·¹¼¾¾¿ÀÀÀÀ¿¾½ÁÉÈÂÇƶ¡‰o^M:/.))))))))$$$$$$$$$$$$$$$$""""""""+Fb{˜°¿ÌØÛÛÝÞÝààààààààáááâââããäääååæææèççææççèåååææçççåаpS:*'Dg‹±ÎáåéëêééêêêêêêêêêêêêêêêêêëëëëëëëëìéíìæëíäÕ«„iN;0&########&&&&&&&&%%%&&'''&)&'+&+?\–¾ÝáñëóòòòóóôôôôðëåÛË·©¡Ÿœœ›™——————˜™š¹º»¼½¾¾¾¹º¼½½¼º¹»ºº¹¹ºº»º»½¾¿¾½¼¾¾¼¹¸´¨œ•„qga[XWZZZYYYXXZZZZZZZZ\\\\\\\\]]]]]]]]__```aaa``aaabbbb_`cdceicjnkhikjiiiiiiiigijihghjiiiihgeeddeeeedcbbbbbbbb```___^^``_`bcdeljhijlkjoooooooojjklmnooqqqqqqqqqqqqqqqqtttttttttuwxyxwvrkeb^WTUSTTRPPQSRRSSSTTTSRRQPPQQONMNPRQPQPPONMLLKKKJJJIIIIIIIIIIHMVbluz|‹‘’’”•“””•–—˜˜–—˜™šœžŸŸ ¡¢£££££¤¤¤¥¥¨©©ª«¬­­ª¯±±³µ®¤€ocWJCC=<<<;:::8887776686556643764211232222210/.....-,++-:Qi}’¢·ÄÎÍËÎÑÑÑÑÒÒÓÓÓÓÓÓÔÖ×ØÙÚÙÚÚÛÜÜÝÝáàßÞßàâãââááâãåçâÊ©ŒpT=1#  !   '?b‰­ÅÞæêçæëíëëëëëêêêêëëëêêêééêêêëëëëëíëëëììêç×·lS?1+%#""#$$#$$%%&&''''(((((('&()'&-7]‰²ÜàñìòñññòòóóóôòïçÙƳ¦›™––––•”“”“’‘‘”–¹º»¼½¾¾½º»»¼¼»»º»ºº¹¹ºº»¼½¾¿À¿¿¾¾¿½º¸³¦˜ˆvaUNGDEFFFEEEDDFFFFFFFFHHHHHHHHIIIIIIIIKKKKLLMMLLLLMMNNRQTZ_ciqu|‚€~~}~~~~~~~~~€€~~€~~~}|{zyzz{{zzyyyyyyyyywwvvvuuupmid`]ZXXVUUWXWVXXXXXXXXVVWXYZZ[\\\\\\\\\\\\\\\\]]]]]]]]]^`aaa`_a]\_a`bejklkiikmhhhiiijjhhgfffffedcdefedeeddcbaaaa```___________]_bgloppwy{|}~€~€‚‚ƒ‚ƒ„…‡ˆˆˆˆ‰Š‹ŒŒŒŒŽŽŽ’’“”•––—“—™˜›—ƒyojcYTTSSSRRQQQRRQQPPPPQONNOONLPOMKKKKLHIIIIHGFFFFGFEDDDEN`q›¥°¸·¶¹»»»»»¼¼¼½½½½¾¿ÁÂÃÃÄÄÅÆÇÈÉÉÎÍÌÌÌÎÏÐÐÐÏÏÐÒÓÕÍ·œ…q[JB41..00/-..----,,.--,+**)**++*)(())(((()*(&.Ff‰«ÁØàæååéêèèèééééééêêêêêêêêêêêëëëììëéééêêèæ׸ŽmT@2,(&$$&''&''(()))*))))))))+*,-+*09X„¯ÛàñìñññòòòóóóóñíåØƳ§œš—–––”“”••”““”–¹º»¼½½½½¼¼»»»»¼¼»»ºººº»»½¾¿ÀÀÀÀ¿¾¿¾»¹²¢“€lUE<634443332223333333355555555666666667788899988999:::==CNYcq|„••“”“‘““““““““’”•”“’“•””””“’ŽŽŽŽŒŒ„~tj`VNHECAACDCBCCCCCCCCBCCDDEFFFFFFFFFFGGGGGGGGHHHHHHHHHIJKKKKJMLQ[ciqx‚‚‚‚ƒ…‚‚ƒƒƒ„„„‚‚€€€€€~~€~}~}}|{{|{{{zzzyzzzzzzzzwtqnlieb``abcdeeeeefgghhhiijlmmnmmnoopqqqqqqrrrswwxxyzz{xz{z|~|wrpprqmlnqqpppooommlllkkkljiijkihjihgffffcddddcbaabbbba`_`_dmv}„‹“› Ÿž ¢¢¢¢¢££¤¤¤¤¥¥¦¨©©ª«¬­®°±²²¶µµµµ¶·¸¹¹¹¹º»½½¹¦~oaVRJHFFFFECBBBBBCCCBBA@??>><====<;:<;;:::;;<;AUo‹¦¸Ï×ÞàâääâââãääåæææççèééêêéééêêëëëêéééëêèæѳoXE95-,**+-,+----....---,++**-,-/-,19S€¬ÙßðìññòòòóóóóôòîçÜ̼±¥£ žž›™™›œœš™š›º»¼½½½½½½¼»ºº»¼½¼»ºººº»¼½¾¾¿¿¿¿¿¾¿¿¼¹°žŽ}gL:/(&'&&&%%$$$%%%%%%%%&&&&&&&&''''''''((()))**)))***+++.6ETdxˆ’œ¦§§§¦£¦¦¦¦¦¦¦¦£¤¦¥££¤¥¦¦§¦¥¤£¢ ¡¢£££¢¢£££££££££¢¢¢¡¡¡ –~o`RD<42001210111111110011223322222222444444446666666677899999;>GWdo{†‘“–—–—˜š˜˜™™™ššš——˜——––•—–””••”’”””““’’’’’’’‘‘‡}tld\VNMLLNOONOOPPQQQRRSSTUVWWWWXXYYZZZZZ[[[\\``aabbccccccdffechov{„‰ŠŠŠŠŠŠŠŠ††……„„„„„ƒ‚ƒ„ƒƒ‚€~~~~}|||}}}|{zyxy|}}}~ƒ…‡††‡ˆˆŠŠŠ‹‹‹ŒŒŒŽ‘‘’“”•—˜™ššššš››œœžžŸŸ ¡¢¢ ‘wpjffdccbba`_]]^^__``]]\\[ZZYXXXXXWVVWWVUUUUVXVZi| ­¿ÄÊÏÑÓÒÐÐÐÑÓÔÕÖ×Ö×ØÙÛÜÝÝÝÝÝÞßßààâáàáããáß©Šr`RIG?=;;=>>=========<;;:98767668759@Wƒ­ÙÞðìñòòòóóóôôöôñìåÙÌŶ³±°¯­«¦©««©§§§º»¼½½½¼¼¾½¼»»¼½¾¼¼»ºº»¼¼½½½½½¾¾¿¾¿¿¼¸®›Šv^B.""%0@Re}¢­·ººº¹¶¹¹¹¹¹¹¹¹·¸º¹··¸¹¹¹¹¹¸·µµ²³´µ¶¶µµ¶¶¶¶¶¶¶¶¶¶¶¶µµ´´¨›ˆs`L:."  !!!!!!!!#""##$$%*0?Seu†”¨ª®¯¯¯°²­®®®¯¯¯°­­®®®­««®¬ªª««ª¨««ªªªª©©©©©¨¨¨§§¥¥¥¥¥¥¥¥£™Š{m`RI<:779:989::::;;;<<=>>??@ABBBBCCCCCCDDEEEIIIIJJJJLKKLLMPRWanx‚š¢¢¢¢£££££££¢¢¡¡¡¡ ŸžŸ ¡ Ÿ  ŸŸžœ›œœ›š™™™™™˜—–““’Žˆƒ}xqmkjkkkkoooopppqrrsstuuuuvwxy{{|||}~~~~~€‚ƒƒ„„„ƒyqqtvz}~~}||{{||}~~~|{{zyxxwwxxxxwvuwvutttttqor~Š“¤¬¬°´··¶¶´µ¶¸¹»¼¼¼½¾¿ÁÂÄÄÆÆÇÇÈÉÊÊÌËÊÌÍÎÌʱž‡wkb\\ZXVVXYXWVVVVVUUUTSRQPOONNKKNMKMRh‘¶ÝßïìòòòóóóôôôöôòðìåÜÖÎËÈÆÅÄÂÀ»½¿¿½»ºº»»¼½½¼¼»½½¼¼¼¼½½¼¼»»»»¼¼½¼¼¼¼½¾¿¾¿¾º¶¬š‰s[>*".@Rg–«¶ÀÂÂÿÂÂÂÂÂÂÂÂÃÅÆÅÄÃÄÆÂÃÃÂÂÀ¿¾¼¼½¿¿À¿¿¿¿¿¿¿¿¿¿ÀÀÀÀ¿¿¿¾·§v_G0"$8Qh~”¥º½ÀÂÂÁÂÃÂÂÂÃÃÃÄÄÂÃÄÄÄÃÁÀÂÁ¿ÀÁÂÀ¿ÁÁÁÁÁÁÁÁÀÀ¿¿¾¾¾¾¼¼¼¼¼¼¼¼º¬˜ƒp[G9+'""$%#!$$$$%%%%&&&''(((++++++++++,,,---000000002114436>???@@@AABBBBBBFGIJJJIHIJLMNNNMTTZhx„‘›­±µ¶µ´µ¶¶¶¶µµµµµ¶¶µ´³³²²³³³³³²±±³²±¯®®®®°¬ª«§ž–“…}||z{||}~€ƒƒ„…†‡ˆˆŠ‹ŒŽ‘‘“”’†€~‚‡ŠŒ’ŽŽ‘‘ŽŽŒŒŒŒ‹‹‹‹‰ˆ‹Œ‰‰‹Ÿ¾ÓëâîìóóóóôôôõõöôòðïíêçæãàßßßÞÜßààÞÜÛÜݼ¼½½½¼»»»¼¾¿¿¾¼»½¼¼»»¼¼½À¿¾½¾¿Á¾¾¼·³ª™‰oX=).ATj…›°ºÂÃÂÄÄÂÃÃÃÃÃÃÃÃÅÇÈÇÅÅÆÇÉÉÉÉÈÇÅÅÁÂÃÅÆÆÆÆÄÄÄÄÄÄÄÄÆÆÆÆÅÅÅĺ©w`H0 !9Uoˆ¢µÈËÎÐÏÎÍÎÏÏÏÐÐÑÑÑÑÒÔÕÔÓÐÏÐÏÎÏÑÓÒÑÓÓÓÓÔÔÔÔÐÐÐÐÏÏÎÎÐÐÐÐÐÐÐÐÏ¿¨x]B/ #2Or¤¿ÕàââããääååçççææåååäãâãåææäççèèçæäãåååååäãããããããâááàßÒ¸œ‚hT<.##%#!#"###$$$$''''((((+++***)),./010//.013443249Hb|’¦´ÉÎÓÕÔÔÕÖÕÕÔÔÓÓÒÒÕÔÔÓÒÒÑÑÑÑÒÒÑÑÐÏÑÐÏÍÌÌÌÌÏÉþ²¡’‹{nb_^\^c__`aabcceeffghhijklmnpqqsrrtvwussqw„‘™ ¦¯­««­®­­®®®­­¬¬¬«««««¬¬¬¬¨§ª«¨§©±ÌÝïãîìôóóóôôõõõù÷ôòñïìéêèæåååäãççæäááâ常¹º»»»º½½½¼¼»»»½½½½½½½½¿½º¼¿ÁÀ¾»¼¼¸´©•ƒlT8' .CYq‹Ÿµ¾ÅÆÅÇÈÆÅÆÇÇÆÅÃÂÅÈÊÈÆÄÆÉÍÌËÉÇÅÄÃÂÂÃÄÅÆÇÈÄÅÆÆÇÇÆÆÆÅÅÃÁÂÃź©v]E.$;Vpˆ£·ÆÌÎÌÌÏÐÎÑÑÑÑÑÑÑÑÒÓÓÔÕÕÔÔÓÓÔÕÕÔÓÓÖÖ×Ø×ÖÔÓ×ÖÔÔÕÕÔÒÑÔÔÑÑÔÔÑÏí‘w^C/0Jm‹§ÂØäèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèêééèèççææãÝÅ¡…iK8% ',?_}—³ÉÛáäâáããáââââââââãâáààáâãààààààààßßßßßßßßããÝпª‘}lVIE@CHDGGFFGHIIJKKLMNOOOOPQRTTUVVWWWXXXWey‹š¨µ¾ÅÇÉÊÉÈÉÊÌÌËËÊÉÉÉÉÉÉÉÉÉÉÉÈÈÉÉÉÊÊÊÖÛâçêîóøóóóôôõõõ÷öõóñïîíêéçæåäääçççææåå庻¼¼½½½¼¿¾¾¾½½¼¼¾½½¼¼½½¾¿¼º»½¿¾¼»½¼¸³¨”ƒkT8& .CZqŒ µ¾ÆÆÅÇÈÆÆÆÇÈÈÇÅÄÆÈÉÈÆÅÇÉÌÌÊÉÇÅÄÃÅÅÅÅÅÆÆÆÅÆÆÇÈÈÇÇÇÆÆÄÃÃÄƺ©v]E.$;Vpˆ£·ÇÍÐÏÏÑÒÏÒÒÒÒÒÒÒÒÓÔÕÕÖÖÕÕÔÕÕÖÖÕÕÔÖ×ØØØ×ÖÕ×ÖÔÕ××ÖÕÒÕÕÒÒÕÕÒÐÄ­‘w_D/1Km‹§ÃÙäèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèééèèèèèçèåßȤ‰lN9%$9\~›¹ÑàæéçæééçèèèèèèèèëêéèèéêëêêêêêêêêêêêêêêêêèêçÛɯw^G83,.2-..--./000112345555667889999:::;;EWqŒ¤¸ÉÓÞàããâáâãääääããããââââââââââââãããäÞâèëìïòöóóóôôõõõ÷öõóñïîíêéçæåäääçççææååå¼½¾¿¿¿¾¾¿¿¿¿¾¾¾¾¿¾¼»»¼¾¿¾¼ºº¼¼¼»»½¼¸²§“jR6% .DZr¡µ¾ÆÆÆÇÈÆÆÇÈÈÉÈÈÇÆÇÉÈÇÆÇÉËËÉÈÇÅÄÄÇÇÇÆÆÆÅÅÆÇÈÉÉÉÉÉÉÈÇÆÆÆÆǺ©u]D-$;Wp‰¤¸ÈÏÔÓÓÕÔÑÔÔÔÔÔÔÔÔÕÕÖ×ØØ××Ö××ØØ××Ö×ØÙÙÚÙÙØØ×Ö×ÙÙØ×Ô××ÔÔ××ÔÑƯ“y`E0 1KnŒ¨ÄÚåèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèééééêèãÌ©pQ9%5X|›¼ÕãéìëêìíêìììììììììëëêêëëìììììììììííííííííëïïçÖ¸’uY@0)!!# !! !!"##$$%%%%%%%%$%%%&&&'3Hk¯ÈÜçáãææåäåæææææççççææææææææååæææçççéëîðððòóóóóôôõõõ÷÷öôòðîìêéçæåäääççææææåå¾¾¿¿À¿¿¾¿¿¿¿¾¾¾¾¿¾¼»»¼¾¿¿¾¼¼»¼»»»½»·±¦’gP5$ /D[sŽ¢¶¿ÆÇÆÈÈÇÆÆÇÇÈÉÉÉÇÇÈÈÈÈÈÉÊÊÉÈÇÆÅÅÈÈÇÇÇÇÇÇÈÈÉÊËËÊÊËÉÈÈÉÉÈǹ©u\D-$;WqŠ¤¹ÊÑ×××Ø×ÔÖÖÖÖÖÖÖÖ××ØÙÚÙÙÙØÙÚÚÚÚÙØÙÙÚÛÛÜÜÜÜÚÙÙÚÚÙ×ÕØØÕÕØØÕÓȱ”zaF1 1KnŒ¨ÄÛæééééééééééééééééééééééééééééééééééééééééççèèéêêêêéåЭ‘sT:%3Ux—¸ÒâèëêéììêëëëëëëëëêêééééêêêêêêêêêêëëëëëëëëêîðëÝÁ˜w\C2) " !""!!!""###$$$##"""""""##$$,Ch³Ïâìèêìíëëëíìììííîïïíííííííííííîîîïïïðñòòòñòóóóôôõõõ÷÷öõóðîìêéçæåäääææææææææ½¾¾¿¾¾½½½½½½¾¾¾¾¾¾¼¼¼¼¾¾À¿¿½¼¼½½¼½»·°¤~eN3"!/E\t£¶¿ÇÇÆÈÉÇÅÅÅÆÇÇÈÈÇÇÇÈÉÉÉÉÊÊÉÉÈÇÇÇÆÇÇÈÉÊËËÉÉÊËÌËËËÌÊÉÉËËÉǹ¨t\C-$;WqŠ¥ºËÒØÙÙÚÙÖ××××××××ØÙÙÚÛÛÚÚÚÛÛÜÜÛÛÚÚÛÛÛÜÝÝÞàÞÜÛÛÚØÖØÛÛØØÛÛØÖʳ–|bG2 0JmŒ¨ÄÛæééééééééééééééééééééééééééééééééééééééééèèèéêêëëéèæÒ¯“uU<&1Rt“´ÎáçêééììêëëëëëëëëííííííííììììììììííííííííëííêßÄ›y[A0'!  !" !!!#""!  !!!""*@d±Íàéëíïïîíîïîîïïðñññððððððððððñññòòòððñòóóòñóóóôôõõõö÷÷öôñîìêéçæåäääææææææææ½½¾¾½½¼»½½½½¾¾¾¾½½½½½½½½¿¿À¾½¼¾À¼½»¶¯£Ž|cL1!!0F]u¥¶ÀÇÈÇÉÉÈÇÆÆÅÆÆÇÈÈÇÆÇÊËÊÉÊÊÊÊÊÉÉÉÇÇÈÉÊÌÍÍÉÉÊËÌÌËËÍÊÈÊÌÍÊƸ¨Žt[C,$;Xr‹¦»ÌÓØØØÛÚØ××××××××ØÙÚÛÛÛÛÚÛÜÜÝÝÜÜÛÜÜÜÛÛÜÝÞàÞÜÛÛÚØÖÙÜÜÙÙÜÜÙØÌ´˜}cH3!.Il‹§ÃÚæêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêééééêêêêèèçÔ²•vV>(.Nq‘´ÏâèëêêíîìííííííííìííîîííìììììììììììììììììïîìèßÅœy\B0'"   ';]†¬ÊÞçåèêêéèéêêêêêëëëëëëëëëëëëììììííîîðïïñóôòñóóóôôõõõö÷ø÷õòîìêéçæåäääååææææçç¾¾¾¾¾½¼»½¾¾¾¿¿ÀÀ»¼¾¿¿¾¼»¼½¿½»»¾À¼½»¶¯¢zaJ0 !0F^v‘¦·ÀÇÈÇÉÉÈÊÉÇÆÆÇÈÈÈÇÆÇÊÌËÉËËËËËËÌÌÉÉÊÊËËÌÌÈÉÊËËËËËÍÊÈÊÍÎÉŸ¨Žt[C,$;Xr‹§¼ÌÒÖÖÖÙÛÙ××××××××ØÙÚÛÛÛÛÚÛÜÜÝÝÜÜÛÞÝÜÛÛÛÜÝÝÜÚÛÜÜÛÙÛÞÞÛÛÞÞÛÙͶ™~dI4!-Gj‰¦ÂÙåêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêëêêêêêééèéé×µ˜xW@*,Ln²ÎáçëêêíîìííííííííéêëììëêéêêêêêêêêêêêêêêêêîíëéãÌ¢~bG4* #   !!&7W~¦ÆÜçìîððïîïðñññññðððòòòòòòòòòóóóôôôôñðïñôôòðóóóôôõõõö÷øøöòîìêéçæåäääåååææççç¿¿¿¿¾½¼¼¿¿¿ÀÀÁÁÁº¼¾ÀÀ¾¼º¹»½¼ºº½À¼½»µ®¡Œy`I/!0F^w’¦·ÀÇÈÇÉÊÈÌËÉÈÇÇÈÉÉÆÅÇËÍÌÉËÌÌÌÌÍÍÍÌÌÌËËËÊÊÈÉÊËËËÊÊÍÉÇÊÍÎÉĸ§Žt[C,$;XrŒ§¼ÌÒÕÔÔØÛÙ××××××××ØÙÚÛÛÛÛÚÛÜÜÝÝÜÜÛßÞÜÛÚÚÛÜÚÙØÚÜÞÝÜÜßßÜÜßßÜÚηšeI4!+Fiˆ¥ÂÙäêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêìëëêêééèèêëØ·šzYA+,KlŒ¯ÊßåéèèëìêëëëëëëëëêëííííëêííííííííììììììììêééìéÓ©…dI5*!   '7Tz¢ÄÛæçéëëêéêëíííìëëêêííííííííîîîïïïððóñðñôôòïóóóôôõõõö÷øøöòîìêéçæåäääåååææçççÃÁ¿½¼¼¼½¾¿ÁÂÂÁÀ¿¼½¾¿¾½»º½¼¼»»¼¼½¼»·²­¡‹w]G-$4J`w’¨¹ÃÊÈÄÅÈÊÆÇÉÉÇÇÉÊÌËËÊÊËËÌÊÆÇÌÌÉÉÎÊÊÊÊÊÊÊÊËÌÌÌÌÌÍÍÏÎÍÎÎÌÈź¥Šs]C, #:Vq‹§¼ÊÑÖ××ÙÙ×Ö×ÙÙ××ÙÚÙÙÙÚÚÚÛÛÝÝÝÜÜÛÛÚÞÝÝÜÜÝÝÞÛÛÜÝÝÜÜÛßÞÞÝÝÞÞßÛÓ¼›~fK4#(Di‡£¿×äêêêêêêêêêêêêêêêêêêêêêêêêééééééééééééééééêêêêêêêêìçå×¹›zYD*)DfŠ¬ÃÛëîêìêèíëëëëëëëëííííííííììììììììììììììììêììêçÔ«…hJ5,   !"#0Nw¼Õåçêíîíìíîííííííííîîîïïðððïïïððññññññòòóóóóóóôôõõõ÷÷ö÷öôïìêéçåãâââäãâäæèçæÁÀ¾½¼¼½½¾¿ÀÁÁÀ¿¿¾¾¾¾¾½¼¼½½¼¼¼¼½½¼»·²¬ Šw\F-$5J`x“¨¹ÃÊÈÄÅÈÉÆÇÉÉÇÇÉÊÌËËÊÊËËÌÍÉÉÍÌÉÈÌËËËËËËËËÌÌÌÌÌÌÌËÏÎÌÍÍÌÉǺ¤‰r[A*#:VpŠ¦»ÊÑÖ××ÙÙ×Ö×ÙÙ××ÙÚÛÛÜÜÜÝÝÝÞÞÝÝÜÜÜÛÞÝÝÜÜÝÝÞÝÞÞÞÞÝÝÜÞÞÞÞÞÞÞÞÜÕ¾€hL5#(Dh‡¢¾×äêêêêêêêêêêêêêêêêêêêêêêêêééééééééééééééééêêêêêêêêíèçÙ»ž}\E*)Ceˆ«ÂÚêíéìêèíëëëëëëëëììììììììììììììììììììììììêììêçÕ­‡iK6,!  !!!.Ksš¹Òãçêíîíìííííííííííîîîïïðððïïïððññññññòòóóóóóóôôõõõ÷öö÷öôðìêéçåãâââäãâäæçç濾½½½½¾¾¿¿ÀÀÀ¿¿¾À¿¾¾½½½¾¾½½¼¼½½¾»º·²¬Ÿ‰u[E,$5Kax”©¹ÃÉÇÄÆÈÉÆÇÉÉÇÇÉÊÌËËÊÊËËÌÏÌÌÎÍÉÉËËËËËËËËËÍÍÍÌËËÊÊÎÍËËÌÌËɺ¤‰qZ?(#9Up‰¥ºÊÑÖ××ÙÙ×Ö×ÙÙ××ÙÚÛÛÜÜÜÝÝÝÞÞÞÞÝÝÝÝÞÝÝÜÜÝÝÞàààààßÝÝÝÞßààßÞÝÞÖÀŸ‚jN7#'Cg…¡½ÖäêêêêêêêêêêêêêêêêêêêêêêêêééééééééééééééééêêêêêêêêîééÜ¿¡€_G,'Ab†©ÁÙèìéìêèíëëëëëëëëëëëëëëëëììììììììììììììììêììêèÖ¯‰kL7-! ,Ho•µÏàçéìîíììíííííííííîîîïïðððïïïððññññññòòóóóóóóôôõõõ÷ööööôðìêéçåäãââäãâãæççå¼¼¼½½¾¾¿¿¿¿¿¿¾¾½ÁÀ¾½¼½¾¿¾¾½½½½¾¾º¹¶±«ž‡sYC*%5Lby•ªºÃÈÇÅÇÈÈÆÇÉÉÇÇÉÊÌËËÊÊËËÌÏÎÍÎÍÌËÌÌÌÌÌÌÌÌÌÎÍÍÌËÊÉÉÍÌÊÊÌÌËÊ»¥‰qZ?'#9Uoˆ¤¹ÊÑÖ××ÙÙ×Ö×ÙÙ××ÙÚÙÙÙÚÚÚÛÛÞÞÞÞÞÞÞÞÞÝÝÜÜÝÝÞàááààßÝÝÝßáââáßÝÞ×Á ƒjN7#&AeƒŸ¼ÖäêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêëëëëëëëëíééÞÁ¤‚aJ.%=^‚¦¾ÖæëéìëèíëëëëëëëëëëëëëëëëììììììììììììììììêììëèرŒmN9.! *Ek‘²Íßæéìíìììíííííííííîîîïïðððïïïððññññññòòóóóóóóôôõõõöööö÷ôðíëêèæäããâãââãåçæå»»¼½½¾¾¾¿¿¾¾½½½½ÁÀ¾¼¼½¾¿¾½½¼¼½½¾¹¸µ±ª…pWA)%6Lc{–¬»ÂÇÆÅÈÉÇÆÇÉÉÇÇÉÊÌËËÊÊËËÌÌÍÍÍÍÎÏÎÌÌÌÌÌÌÌÌÍÍÌËÊÉÉÈÌËÊÊÌÌËɼ¦Šr[@("8Tn‡£¸ÊÑÖ××ÙÙ×Ö×ÙÙ××ÙÚÙÙÙÚÚÚÛÛÞÞÞÞÞÞÞÞÞÝÝÜÜÝÝÞßßààßÞÝÝÞßáããáßÞÝÖÁ¡„kN6#%@c»ÕäêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêëëëëëëëëëèéßÃ¥„cL0":Z£¼ÔäêèìëçìëëëëëëëëííííííííììììììììììììììììêììëéÚ´pQ:0" *Bg¯Ëßæéìíìëììííííííííîîîïïðððïïïððññññññòòóóóóóóôôõõõöõõö÷õñîëêèæåäãããâáãåææ庻¼½¾¾½½À¿½¼¼»¼¼¿¾½¼¼¼¼½½¼¼»»¼¼½··µ°ªœƒnU@'%6Mc|˜­¼ÂÇÆÆÈÉÆÆÇÉÉÇÇÉÊÌËËÊÊËËÌÊÍÍËÌÐÐÎËËËËËËËËÌÌËËÊÉÉÉËËËÌÍÌÉÆ»¥Šr[@)"8Sm†¡¶ÊÑÖ××ÙÙ×Ö×ÙÙ××ÙÚÛÛÜÜÜÝÝÝÝÝÝÝÞÞÞÞÞÝÝÜÜÝÝÞÞÞßààßßÞàáâããâáàÝ×¢…kN6#$?b€œºÕäêêêêêêêêêêêêêêêêêêêêêêêêëëëëëëëëëëëëëëëëììììììììêèêàŨ‡fO2  7W{ ºÑãéèìëçìëëëëëëëëííííííííììììììììììììììììêììëêÜ·“rS<1"(?c‰«ÉÝæèëììëëìííííííííîîîïïðððïïïððññññññòòóóóóóóôôõõõõõõö÷õñîìêéçåäãããááâåæå亻¼½¾½¼»À¿½»ºº»»¼¼½½¼»ºº»»ºººº»»¶·´°©›‚lT>&%7Md|˜®¼ÂÆÆÆÉÉÆÆÇÉÉÇÇÉÊÌËËÊÊËËÌÊÎÎÊËÏÏËËËËËËËËËËÊÊÊÊÊÊÊÊËÌÎÎËÇø£ˆqZ@)"8Sl…¡µÊÑÖ××ÙÙ×Ö×ÙÙ××ÙÚÛÛÜÜÜÝÝÝÛÜÜÜÝÝÞÞÞÝÝÜÜÝÝÞÞßàáââââââââââââÞØĤ‡mP7##>`~š¹ÕäêêêêêêêêêêêêêêêêêêêêêêêêëëëëëëëëëëëëëëëëììììììììëéìãÈ«ŠiQ3!4Tyž¸Ïáèèìëçìëëëëëëëëììììììììììììììììììììììììêììëëݹ–tT=1#&<^„§ÆÛåèëìëëëìííííííííîîîïïðððïïïððññññññòòóóóóóóôôõõõõôõö÷õòîìëéçåäääâááâäæåä»»½¾¾½»ºÀ¿½»ººº»º»¼½¼»¹¸»º¹¹¹¹º»¶¶´°©škS>%&7Nd}™¯½ÂÆÅÇÉÉÆÆÇÉÉÇÇÉÊÌËËÊÊËËÌËÐÏÊÉÍÍÈÊÊÊÊÊÊÊÊÉÉÊÊÊÊÊËÊËÍÏÏËÅÀ¶¡†oY?("7Rl… µÊÑÖ××ÙÙ×Ö×ÙÙ××ÙÚÙÙÙÚÚÚÛÛÚÛÛÜÜÝÝÝÞÝÝÜÜÝÝÞÞßáâääääãââááââãàÚƦ‰oR9#"=`}š¹ÔäêêêêêêêêêêêêêêêêêêêêêêêêëëëëëëëëëëëëëëëëìììììììììëîåÊ®kR4"3Rw·ÎàççìëçìëëëëëëëëëëëëëëëëììììììììììììììììêììëëÞº—uU>2#$9[€¤ÄÙåèëìëêëìííííííííîîîïïðððïïïððññññññòòóóóóóóôôõõõôôõö÷õòïìëéçåäääâáàâäæå亻»¼¼»»º¸¹¹ºº¹¹¸¶¸º¼¼º¸¶¹¹¹¹¹¹¹¹¶µ±¬¤–~iQ<%&9Qh™­»ÀÂÂÄÈÈÄÉÈÇÅÆÈÊÌÈÉÊËËËËÊÍÎÎÍÊÊËÌÐÎÊÇÆÇÉÊËËÉÈÈÉËËÊÊËÌÌÊÅÁµ¡‡oW<&$9Sl…¡¶ÅÎÔÔÔÖ×ÖÕÕÕÖÖ×××ØØØÙÙÚÚÚØÚÜÞßÞÜÛÜÛÚÚÚÜÞßßààßÝÝßáááâââãããà×ĨŒpS=%%?_z—·ÒÞèéêëëëëêëëëëëëëëêêêêêêêêììììììììêêêêêêêêêêêêêêêêìíëãÒ´mS6$-Qr”´ÊáéæéêèëëëëëëëëëêêêëëìììëëëëëëëëëëëëëëëëìëïíèáØ}Z?1" "3V{žÂÜãèìêêííëìììììììììììííîîîîîîïïðððñññòòóóóòòòóóôôôø÷÷÷ø÷ôñîëéçççåããããääååå¹¹ºººº¹¹¸¸¹ºº¹¸¸¶¸º¼¼º¸¶········¶µ±«¤•}hO;$&9Qh™­½ÁÃÃÄÈÇÄÉÈÆÅÆÇÊËÇÇÈÉÊÊÉÉÇÊÍÍÌÊÊÊÏÍÊÈÈÊÌÍÌËÊÉÉÊËÌËËÊËÌÊÆõ¡‡oW<&#9Sl…¡¶ÆÏÕÔÒÔÔÓÕÕÕÖÖ×××ØØÙÙÙÙÙÙÙÛÝÞßÞÜÛÝÜÜÜÜÝÝÞÞßàßÞÝßáààááââââáØĨŒpR=%#<\x•µÐÞèéêêëëêêëëëëëëëëêêêêêêêêììììììììêêêêêêêêêêêêêêêêëíëãÒµnT7$+Np‘²ÉàéæéëèëëëëëëëëëêêêëëìììëëëëëëëëëëëëëëëëìëïíèâÄš[@2# 1Sxœ¿Úâèìêêìíëìììììììììììííîîîîîîïïðððñññòòòóóòòòóóôôôø÷÷÷ø÷ôñîìéçççåäããäääååå·¸¸¹¹¸¸··¸¹¹¹¹¸·¶¸º»»º¸¶¶¶¶¶¶¶¶¶µ´°ª¢”|fM8"&9Rh™­¾ÃÅÄÅÈÇÃÈÇÆÅÆÇÉÊÆÆÇÈÈÈÈÈÂÆËÍÍËÉÈÍÌÊÉÊËÎÏÌÌËËËËÌÌÍËÊÊËÉÇĵ¡‡oV;%#9Tm…¡µÇÏÕÓÑÑÑÐÕÕÕÖÖ×××ÙÙÙÙÙØØØÚÛÝÞßÞÝÜÝÞÞÞÞÝÝÜÝßàßÞÝÞàßßàààáááâÙÅ©ŒoQ<% 8Xu“³ÎÞèèéêëëêêëëëëëëëëêêêêêêêêììììììììêêêêêêêêêêêêêêêêëíëãÓ¶pV8% )KlŽ¯ÈßèæêëèëëëëëëëëëêêêëëìììëëëëëëëëëëëëëëëëìëîíèãÇ^B3$.Ot˜¼×âèëêêìíëìììììììììììííîîîîîîïïðððññññòòòóòòòóóôôô÷÷ö÷ø÷ôñïìéèèèæäãäääåååå··¸¹¹¸····¸¸¸¸··¶·¹ºº¹·¶¸¸¸¸¸¸¸¸´³¯¨¡’zdJ6 ':Rh™®ÀÄÆÄÅÇÆÃÇÆÅÅÅÇÈÉÆÆÇÈÉÈÈÈÃÇËÌËÉÈÈÍÌÊÉÉÊÌÍÌÌÌÌÌÌÌÌÎÌÊÊÊÉÇƵ¡†oV;%#9Tm† µÅÍÓÒÐÑÑÐÕÕÕÖÖ×××ÙÙÙØØØØ×ÚÛÜÝÞÞÝÜÞßàààÞÜÛÝÞàßÞÝÞßÞÞÞßßàààâÙÅ©ŒoQ<%5Ut’±ÍßçèéêêêêéêêêêêêêêêêêêêêêêëëëëëëëëêêêêêêêêêêêêêêêêêìëäÔ¸‘sX:& (Hh‹­ÆÝèæêëéëêêêêêêêêêêêëëìììëëëëëëëëëëëëëëëëíëîìéåÊ¢„aD5%,Lq”¹Õâèëêéììêìììììììììììííîîîîîîïïðððððñññòòòòòòóóôôô÷öö÷ø÷ôòðíêééèçåäääåååææ·¸¹¹¹¹¸·¶¶····¶¶¶·¸¹¹¸·¶········³²­§ŸwbG4':Ri€š®¿ÃÅÄÄÇÆÂÅÅÅÅÅÆÇÇÇÇÈÉÉÉÉÉÉËËËÈÇÈÉÍÌÊÈÇÇÈÈÌÌÌÌÌÌÌÌÏÍËÊÊÊÈÆ´ †nU;%#9Un† ´ÂËÑÑÐÒÓÒÕÕÕÖÖ×××ØØØØØØØØÚÛÛÜÜÝÜÜÞßàààÞÜÛÛÞààÞÝÝÞÞÞÞÞßßààâÙÅ©ŒoR<% 4Ss‘¯ÌàçèééêêééêêêêêêêêêêêêêêêêëëëëëëëëêêêêêêêêêêêêêêêêéëëäÕº“u[<' (Fe‰¬ÄÜçæëìéëêêêêêêêêêêêëëìììëëëëëëëëëëëëëëëëíëíìéçΦ‡dG7&+Jn’·Ôáçëééëìêìììììììììììííîîîîîîïïððððððñññòòòòòóóôôôööö÷øøõòñîëêêéçæääåååæææ·¸¸¹¹¸¸·µµ¶··¶µµ··¸¸¸¸··´´´´´´´´²±¬¥Žv`E2';Si€š®½ÂÄÃÃÆÆÂÄÄÄÅÅÅÆÆÇÇÈÉÊÊÉÉËËËÉÇÆÇÉÌËÊÈÇÆÆÆËËÌÌÌÌËËÎÍËËÌËÈÅ´ †nU:$":Un† ³ÁÊÑÑÐÓÔÓÕÕÕÖÖ×××ÖÖ××ØØØÙÙÙÚÚÚÛÛÛÝÞÞÞÞÝÝÜÛÝààÞÝÜÝÞÞÞßßàààà×ĨŒpS>%!2Qs¬ÉßççèéééééééééééééêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêèëëåÖ»–w]>(!&Cb‡«ÂÚææëìéëééééééééêêêëëìììëëëëëëëëëëëëëëëëíëíìêéÑ«‹fI9()GjµÒáçêéèëìêìììììììììììííîîîîîîïïðððïðððññññòòòóóôôôöõõ÷øøõóñïìêêêèçååååæææ綶····¶¶´µ¶¶¶¶µ´········³³³³³³³³±°«¤œt^D2(;Sj€š¯»¿ÂÁÃÆÆÂÃÃÄÅÅÅÅÅÅÆÇÈÈÈÈÈÆÈÊÉÈÆÆÇËÊÊÉÈÈÈÈÉÊËÌÌËÊÉÍÌÌÍÍËÈijŸ…nU:$":Vo† ³ÄÌÓÒÑÒÓÒÕÕÕÖÖ×××ÔÕÕ×ØÙÚÚØØØØØÙÚÚÝÜÜÜÜÝÝÞÚÝßàßÝÜÜßßßßàààáÞÖèŒqT?%!1NqŽ¨ÅÜæçèééééèééééééééêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêèêëå×½—y_?)!$?^ƒ¨ÀÙåæëíéëééééééééêêêëëìììëëëëëëëëëëëëëëëëíëìëêêÔ®iK:) &Cf‹±Ïáçêèèëëéìììììììììììííîîîîîîïïðððïïðððñññòòòóóôôôõõõ÷øøöóòïìëëêéçåååæææçç´µµ¶¶µµ´´µµ¶¶µµ´········µµµµµµµµ±¯«¤›Œs^D2(;Sj›¯¹¾ÀÀÂÆÆÂÂÃÄÄÅÅÄÄÄÅÆÇÇÇÆÆ¿ÃÈÊÉÇÆÅÉÉÊÊÊÊËËÈÉËËËËÉÈÌÌÍÎÏÌÇóŸ…mU:$":Vo† ³ÇÏÔÓÑÑÒÐÕÕÕÖÖ×××ÓÔÕÖØÙÚÛØ××××ØÙÚÜÛÚÚÚÜÞßÙÜßàßÝÜÜßßàààáááÝÕ¨rU@% /Lo‹¥ÂÚæçèééééèééééééééêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêçêëåؽ˜z`@*!"=[¦¿ØåæìíéëééééééééêêêëëìììëëëëëëëëëëëëëëëëíêìëêëÕ°ŽjL;) #@cˆ¯Ìáæêèèëëéìììììììììììííîîîîîîïïðððïïïððñññòòòóóôôôõõõ÷øøöôòðíëëëéèåååææççç³´µ¶¶¶¶µ´³²±±³´¶µ¶····¶µ´´³´µ´±®²°«¢™Šq\D1 )=Ukš®¹»½ÀÁÂÂÁÀÀÁÂÄÅÆÇÅÄÃÂÂÄÆÇÅÆÇÈÈÇÅÄÄÄÄÅÆÇÉÊÊËÍÍËÊÊËÍËÊÌÎÌÇ´Ÿ„kR8##:Un…°ÃÌÓÔÔÕÒÎØ×ÕÓÒÒÒÓÔÔÔÕÖ×ÙÚÖÖ×ØÙÚÚÛÛÙ×ÙÝßÞÛÙÙÚÛÜÞßàÜÜÝÞÞßààÛ×ŨsU<(.Mo‹¥ÂØçéêêèèéëêêêêêêêêêêêêêêêêêééèèééêìììëëêêêêêêêêêêêèéèãØ¿™{^A+  <[€£ºÕäåêëèëêêêêêêêêêêêêêêêêìììëëêêêëëëëëëëëìïçìëçܳ‘nP=)!7bˆ«ÉÝåëëéëëêëììííììëììììììììíííîîïïïïïïððñññóóóôôõõõõõôöøø÷õôñíëëìëêææææææææ³´´µ¶¶µµ³³³³³´µµ´´´´´´´´²²²³µµ³±²°ª¢™Šq\C1 )=Ukš®¼½¿ÀÁÁÀ¿¾¿ÀÁÂÃÄÅÂÃÃÄÄÅÄÄÄÄÆÇÇÆÅÄÆÆÅÅÅÆÇÇÉËÌÌËÊÊËÌÊÉÊÌËÅÁ´ŸƒkR8#"9Un…ž±ÄÌÒÓÓÔÓÏÒÑÑÒÓÕ×ØÖÕÕÕÕÖÖ×××ØØÙÙÚÚ××Ö×ÚÛÛÚÛÛÚÚÚÚÛÜÛÜÜÝÞßààÛ×ŨsU<(.Mo‹¥ÂØåçééççèéêêêêêêêêêêêêêêêêêééèèééêììëëëêêêêêêêêêêêèéèãØÀš|_B+  ;Z~¢¹ÔäåêëèëêêêêêêêêêêêêêêêêìììëëêêêëëëëëëëëìïçìëèÝ´“oQ>)!6`†©ÈÛäëêéëëêëììííììëììììììììíííîîïïïïïïððñññóóóôôôõõõõôöøø÷õôñíëëëêéæææææååå²³´µµµµ´³³´µµµµµ´³²±±²³´±°°²µ¶´³²°ª¢™Šq[C0 )=Ukš®¾¿ÀÁÁÀ¿¾½¾¾¿ÁÂÂÃÀÁÄÅÆÅÃÂÂÂÄÅÅÅÅÅÇÆÅÅÄÄÅÅÈÊËËÊÉÉÊÊÈÇÈÊÉÄ¿³žƒjQ7#!8Tm…Ÿ³ÆÌÑÐÐÓÓÐÏÏÐÑÓÖØÙÖÖÖÕÕÕÔÔØØØØØØØØÕÖØØ×ØÙÛÝÜÛÙØ×××ÚÚÛÜÞßàáÛ×ŨtV=(.LmŠ¥Á×ãåçèçæçèêêêêêêêêêêêêêêêêêééèèééêìëëëêêêêêêêêêêêêèéèäÙÁ›}`C, 9W{Ÿ·ÓãåêëèëêêêêêêêêêêêêêêêêììëëëëêêëëëëëëëëëïèìëèÞ·•qS?*  4]‚¦ÅÚãêêéëëêëììííììëììììììììíííîîïïïïïïððñññóóóóôôôõõõôöøø÷õôñíëëëêéçææååäää²²³´´´´´²´µ··¶µ´µ³±°°±³µ²±°²´´³²±°ª¢™‰p[B/ )=Ukš®¼½¿ÀÁÀ¿¾½¾¾¿ÀÁÂÂÀÁÂÄÄÄÃÂÀÁÂÃÄÅÅÅÅÅÄÄÄÄÅÅÆÈÊÊÉÈÉÊÊÈÇÈÊÉÄ¿²iQ7" 7Sl… ´ÇÌÏÎÎÑÓÑÒÒÒÒÒÒÓÓÔÔÕÕÕÕÔÔ×ÖÖÖÖÖÕÕÔØÚÚØ×ÚÝÝÜÛÙØØ×ØØÙÚÜÝßààÛ×Å©ŽtW>(-Jk‰¤ÀÕâåçèçççèééééééééééééééééêééèèééêëëëêêêééééééééééçééäÚÂaD-!6Swœ´ÑâäêëèëêêêêêêêêêêêêêêêêëëëëëëëëëëëëëëëëëïéíëèຘtUA+ 2X}¡Â×áéêéëëéëììííììëììììììììíííîîïïïïïïððñññòòóóóôôôõõôöøø÷õôñíëêêéèææååäããã±±²³´´³³²´µ··¶µ´¶µ²±±²µ¶´³±±²²±°±¯©¡˜‰p[A. )=Ukš®¹º¼¿ÀÀÀ¿¿¿¿ÀÁÁÂÂÂÁÀÀÀÂÃÄÀÁÁÂÃÄÅÆÂÂÂÂÃÅÆÇÄÆÈÉÈÇÈÉÊÈÇÉËÉÄ¿°›€hP6"6Rk„Ÿ´ÆÌÎÌÍÐÒÑÓÓÓÒÒÑÐÏÐÑÓÔÕÕÕÕÔÔÔÔÔÓÓÓÓÖÙÙÖÖÙÜÜÛÚÚÚÚÛÛØÙÚÛÜÞÞßÛ×Å©ŽuX?(,Gh‡¢¾ÒâåèêéèèéééééééééééééééééêééèèééêëëêêêéééééééééééçééåÛßcE."3Ns˜²Ïáäêëèêêêêêêêêêêêêêêêêêëëëëëëëëëëëëëëëëêðêíëèâ½›wXC-!/Txœ¾Õßèééëëéëììííììëììììììììíííîîïïïïïïððñññòòòóóóôôõõôöøø÷õôñíêêéèçååääããââ°±²²³³²²³³´µµµµµ¶µ´³³´µ¶¶³±°±±°¯±¯©¡˜ˆpZ@. )=Ukš®¶·º½¾¿¿¾¿¿¿ÀÀÁÁÁÂÁ¿¾¿ÀÃÄÂÂÂÂÂÄÅÆÀÀÁÁÃÄÆÇÂÅÇÇÇÆÇÈÊÈÇÉÊÉÄ¿¯šgO6" 6QjƒŸ³ÅËÎÌÌÐÑÐÏÐÑÒÒÒÑÑÎÏÒÔÕÕÕÔÓÓÓÓÓÓÓÔÑÓÔÔÔÔÖ×ÚÚÙÚÚÛÜÝÙÙÚÚÛÜÜÝÛ×Å©vX@(*Ce„ »ÏáäèêêéééèèèèèèèèèèèèèèèèêééèèééêêêêêéééèèèèèèèèèçééæÜÅ¡ƒdG/"0Jo•¯ÍßäêëèêêêêêêêêêêêêêêêêêêêëëëëììëëëëëëëëêðêîëèäÀŸzZE." -Ps˜ºÒÝæééëëéëììííììëììììììììíííîîïïïïïïððññññòòòóóóóõõôöøø÷õôñíêééçæããããããã㯰±²²²²±³³³³³´µµµµµµµµµµ´²¯¯°²²±°®©¡˜ˆoZ?- )=Ukš®¶·¹»¼¼»»¾¾¾¾¿¿¿¿ÀÀ¿ÀÀÁÁÂÅÄÃÂÂÃÄÅÂÁÁÁÂÃÄÅÁÃÆÆÆÆÇÈÈÇÅÇÉǾ®™~gO6"!6Pi‚²ÄÊÎÍÍÏÐÎÌÎÏÑÒÒÒÑÏÐÒÔÕÔÓÒÓÓÔÔÕÕÖÖÒÑÑÒÔÖÕÔÙÙØØÙÚÛÛÚÚÚÚÚÚÚÚÛ×ŪvY@((@až¹ÌßãçééèèèèèèèèèèèèèèèèèèèêééèèééêêêêéééèèèèèèèèèèæèéæÝÆ¢„eG0#.Gl“®Ìßãêëèêêêêêêêêêêêêêêêêêêêêëëìììëëëëëëëëêðëîêéåá|\F/" +Lo•¸ÐÛæééëëéëììííììëììììììììíííîîïïïïïïððñññññòòòóóóõõôöøø÷õôñíêéèçåàááâããä䯰±²²²±±´³²±±³´¶³´´µµ´´³²°®®±³³³°®¨ —ˆoZ?- )=Ukš®·¸¹ººº¸·¼¼½½½½½¾½¾ÀÂÂÁÀ¿ÆÅÄÃÂÃÄÅÄÃÂÁÁÁÂÂÀÃÅÆÅÅÆÈÇÅÄÅÇÆÁ¼­™~fN5!"6Piœ±ÂÉÎÍÍÏÐÍÍÎÐÑÒÑÐÏÐÒÓÔÔÒÐÏÓÔÕÖ×ØØÙÕÓÑÓ×Ù×ÕÙØØ×××ØØÛÛÚÚÚÙÙÙÛ×ƪwYA(&?_€œ·ÊÝáæèèçææèèèèèèèèèèèèèèèèêééèèééêêêêééèèèèèèèèèèèæèéæÝÆ¢…fH0#-Fj‘­ËÞãêëèêêêêêêêêêêêêêêêêêêêêëëìììëëëëëëëëéðëîêéæÄ¢}]G/" *Km“¶ÏÛåèéëëèëììííììëììììììììíííîîïïïïïïððññññññòòóóóõõôöøø÷õôñíêéèæåßßàáãääå°°°±±²²²²µ·¶³²´¶´´´´´´´´³³³²²±±±°¯ª¡•…mX<++@Ukƒ›ª¶·¸¹º»»º¼¼¼»»ººº¿¿ÀÀÀÁÁÁÁ¿¼¼ÀÄÂÃÃÄÄÃÃÂÃÃÃÃÃÃÃÃÂÅÆÄü´ª–{dM4!#8Qi›¯ÁÈÍÎÎÑÐÎÌÌÌÍÍÎÎÎÍÎÏÏÐÑÒÒÑÑÒÒÒÓÓÓÒÒÒÓÓÔÔÕÕÖÙÚÛÚØ×ÙÙØØÙÙÚÛÜ×Ç­sU@*%?_{—³ÉÝäéæäæçççççèèéééèèèèèèèèëêèèèèêëééééééééèééééèçæëéèæÝá‡gO3!.Fh¨ÀÙæèééèéééééééééééêêëëëéééêêëëëëëëëëëëëêîéïëçæɦ€_I2$ )Ij°ÉÞæåìîêêëëëëëëëëììììììììííííííííîîîïïðððñññòòóóóóôõö÷ø÷÷õòîëéèåãáàßàâãâᯯ¯¯°°±±²´µ´²±³µ´´´´´´´´³³³²²±±±°¯ª •„lX<++@Ukƒšª¶·¸¹ºººº¼¼¼»»ººº¾¿¿¿ÀÀÀÁÀÁÂÀ¾¾ÀÃÂÃÄÄÄÄÃÂÄÄÄÃÃÃÃÃÂÄÅÃÃÿ¸ª–|dM5!"8Rjš®ÀÈÍÍÎÐÐÍÌÌÍÍÍÎÎÎÎÎÏÐÑÑÒÒÑÑÑÑÒÒÓÓÑÒÒÒÓÓÔÔÓÕ×ØÙØÖÕ××ÖÖ××ØÙÜÖÆ­sUA*%?^{–³ÈÛâçåãåçæææææççççèèèèèèèèêéèççèéêèèèèèèèèêêëëêêéèêèçæÜá‡gO3!,DfŠ¦¾Øäçèèçéééééééééééêêêëëéééêêêëëëëëëëëëëêíéîëçæɨ‚`J3% 'Fg‹­ÈÝæåìîêêëëëëëëëëììììììììííííííííîîîïïïððñññòòòóóóôõö÷÷÷÷õòîëéçåâßÞÞßâããâ­­®®¯¯¯¯±²³³±±²³´´´´´´´´³³³²²±±±°¯ª •„lW<++?Uk‚š©µ¶·¹¹ºº¹¼¼¼»»»»º½½¾¾¿¿¿¿¾ÀÂÂÀ¿ÀÁÂÃÄÄÄÄÃÂÄÄÄÄÄÄÄÄÂÄÄÂÃÅÁ¼ª–|eN5"!8Sk™¬¿ÆÌÌÌÏÏÌÍÍÍÍÎÎÏÏÎÏÏÐÑÑÒÒÐÐÐÑÑÑÒÒÑÑÑÒÒÒÒÓÑÓÔÖÖÕÔÓÕÔÔÔÕÖ××ÚÕŬsVA*$=\y”±ÇØàåäãåçæååååååååççççççççééèççèééææææææææêêêêêéèçêèçæÜá‡gO3"*Ac‡¤»ÕãæçççééééééééééééêêêëééééêêêëëëëëëëëëêíèîëèçÊ«„cL5'"$Bc‡ªÅÜååëíéêëëëëëëëëììììììììííííííííîîîîïïïðññññòòòóóóõö÷÷÷÷õòîëéçäâÝÜÜÞáããâ­®®®¯¯¯°±±²±±±±±³³³³³³³³³³³²²±±±°¯ª ”ƒkV<++?Uj‚™¨µµ·¸¹¹¹¹»»»»»»ºº¼¼¼½½½¾¾¼¾ÁÂÂÁ¿¿ÂÂÃÄÄÃÂÂÄÄÄÄÄÅÅÅÄÆÄÁÂÄÁ¼ª•{dN5" 7Sk€˜ª¾ÅÊÊËÍÍÊÍÍÍÍÎÎÎÏÎÏÏÏÐÑÑÑÏÏÏÏÐÐÑÑÐÐÐÑÑÑÑÑÑÒÓÔÔÔÔÓÓÓÓÓÔÕÖ×ØÓÄ«sVA*$^‚Ÿ·ÒáåçééèèèèèèèèèèèéééêêèèèéééêêêêêêêêêêêíçìêèèÌ°‰gP7(##=\¦¾×ääéêèêêêêêêêêêëëëëëëëëììììììììíííîîîïïðððñññòòòóôõööööõòîêèåâà×××ÚÞáâᯯ¯¯°°±±²±°°²²±°²²²²²²²²³³³²²±±±°¯ªŸ“‚iU<++?Ti€—¦³´µ¶·······¸¸¸¸¹¹¹¹¹ºº»»ºº»¾ÀÀ¾»¿¿ÀÁÁÀ¿¿ÁÁÂÃÃÄÄÅÅÇÅÂÁÁ½¶¦’xbL4! 5Ph~—ª»ÂÇÇÈÊÊÇÊÊËËËÌÌÌÍÍÍÍÍÍÍÍÌÌÍÍÍÎÎÎÏÏÏÎÎÎÎÍÑÑÑÒÒÒÓÓÑÑÑÑÓÔÖ×ÕÐÁ©ŽrVB*"9VrŽ¬ÂÔÝääâääâäääååæææååååååååååæççæååèèèèèèèèççèèèçæåçååäÛá‡iQ4#&<\€›´ÏÞãæèèçççççççççèèèééééçèèèééééééééééééêíæìéèéͱŠhP8("":X~¤ºÕãäèéçêééééééééêêêêêêêêëëëëëëëëìíííîîîîïðððññññòòôõöööööòíêçåáßÖÖÖÙÝßàß­­®®¯¯¯¯³±°°³´²°²²²²²²²²³³³²²±±±±¯©Ÿ“hT<++?Ti€—¦²³´¶¶···µµµ¶¶····¸¸¸¹¹¹º¹¸¸»¾¿½º½¾¾¿¿¾¾½¿ÀÀÁÂÃÄÄÁÃÄÁÁÁ¼µ¤w`J3  4Of}—ª¹ÀÆÆÆÉÉÆÉÉÉÊÊÊËËËËËËËËËËËËÌÌÍÍÍÍÏÎÎÎÍÍÌÌÏÏÏÏÏÐÑÑÎÎÏÏÑÒÔÕÓÏÀ¨rVB*!8TpŒ«ÁÑÚááßàßÝááâãäåææäääääääääåæççæåäææææææææçççççæååæäääÛá‡iQ5#$9Y|—¯ËÛàäææççççççççççèèèéééççèèèéééééééééééêíæëéèêβ‹hQ8(" 7Tz¡¸ÔãäèèæêééééééééêêêêêêêêëëëëëëëëììíííîîîïïðððññññòóõõööõöòíêçäáÞÖÕÕØÛÞÞݬ¬¬­­®®®´²°±³´³°²²²²²²²²³³³²²±±±±¯©Ÿ“hS<++?Ti–¥²³´µ¶¶¶¶³´´´µ¶¶¶···¸¸¸¹¹¹·¶¹¼¾¼º¼¼½¾¾½¼¼¾¿¿ÀÁÂÃýÀÂÁ½¶£v_I2 4Me}—«¹ÀÅÅÆÈÈÅÈÈÈÉÉÉÊÊÊÊÊÊÊÊÉÉËËËÌÌÌÍÍÎÎÎÍÍÌÌËÎÍÍÍÍÎÏÐÌÌÌÍÏÐÒÓÒÎÀ¨rVB*!7ToŒªÁÏÙßßÝÝÜÙÞÞàáãäåæääääääääãäææææäãååååååååääååääãâæäääÛá‡iQ5#"7Vz“¬ÈØÞáääçççççççççççèèéééçççèèéééééééééééêìæëéèêϲ‹hP7'!4QxŸ¶ÓãäçèæêééééééééêêêêêêêêëëëëëëëëìììííîîîïïïððññññòóôõõõõöòíêçäàÞÖÕÕ×ÚÝÝÜ­®¯°°°°¯±±°°°±²³³³³²²±±±´´´³³²²²²°©ž’€hT;* ,?Uk‚—¤³´´²°°²³³´µ¶¶¶¶µ¶µµµ¶¸º¼¹¹¹ºº»¼¼»»¼¼¼½½½¿¿ÀÀÀÁÁÁ¾ÁÂÁÁ¾·£v_J24Md{•¨·¾ÃÃÃÅÄÂÆÈÉÈÆÆÇÈÊÈÆÅÅÆÈÊÉÉÈÈÉÉÊËÉÉÉÊÊËËÌËËÌÌÌÍÍÍÊËÌÍÎÏÏÐÐÊ»¥sVA)4Qn‰¦ºÊØÛØÞÝÛßÝÞßáâäåæââãäåææçåääããâââãääãâáãååååååäãâåæåáÙÄ£‡jR6$3Vt–¬ÆÕÜáääãäåäããåçææååææçèçççççççççèèééèèççæééåéäвkR7'! 2Py—³ÐáäéêæéèèèèèèèèêêêêêêêêëëëëëëëëëëëìììííîîïðññòòòòóôôõöööóïëèåáÞÒÒÓÖÚÝÞÞ­®¯°°°°¯¯¯¯¯°±²³³³³²²±±±´´³³³²²²²°©ž’€hT;* ,?Uk‚—¤­¯±²±²´¶´µ¶¶··¶¶··¶µµ¶¸¹¹¹¹¹ººººº»»»¼¼¼¼½½¾¾¾¿¿¿½ÀÀ¾¿¿º³£u_I23Ldz”¨¶½ÂÂÂÄÃÀÄÆÇÆÄÄÅÆÉÇÆÄÄÆÇÉÈÈÇÇÈÉÊÊÊÊÊÊÉÉÉÉÊËËËÌÌÌÍÊÊËËÌÍÍÎÎȺ£‹qU@)4Qm‰¤¹É×ÚØÝÝÚÞÜÜÛÛÜÝÞßààááâãäääãããââááàáâáßßáãäååååäãâäååáÙÄ£‡jR6$3Vt‘¨ÂÒÚàãäâãäãâãåçåååååæçèççççççççççèééèçççæéèåéäϲkS8'!0Nv•²ÏàãéêæéççççççççééééééééêêêêêêêêììíííîîîîîïïðñòòòòóóôõöööóïìéæâßÔÓÔÖÛÞßß®®¯°°°°°¯¯¯°±²´´³³³³²²²²´³³³²²²²²°©ž’€hT;* ,?Uk–£«­±²²±²³´´µ¶·¶¶¶¸·¶µµµµ¶¹¹¹¸¸¸¸¸¹¹¹ºº»»»»»»¼¼¼½½»¾¾¼»»¶¯¢Žt^I23Lcz“§µ¼ÁÀÀ¿ÂÃÄÄÂÂÃÅÇÆÅÄÄÅÆÇÇÆÆÆÆÇÈÉÊÊÉÈÈÇÆÆÉÉÊÊËËËËÊÊÊËËËËËÌǸ¢ŠpT?)3Pl‡£·ÈÖØÖÛÛØÝÝÜÙ×Ö×ÙÚÝÝÞßßààáââáááàààÞàààßßâäãääääãââãääàØÄ£‡jR6$2UrŒ£½ÎØÞâãáãããáâäæåääääåæçæææææææææçèèèèçæçåéèäéãϲŒkS8'!-Ks“±Îßâèéæéççççççççééééééééééééééééììììíííîííîïððññòòòóôõõö÷ôðíêçãàÕÔÔÖÚÞßß®¯°°±±°°±±±±³´¶·³³³³³³³²³³³²²²±±²°©ž’€hT;* ,?Tj•¢¬¯²²°®­­²²³´µ´´´µµµ´´´µµ¸¸¸·¶¶µµ···¸¸¹¹¹¹¹ºº»»»»º½½º¹¹´¬ s^H13Kbx’¦´»ÀÀÀ¿ÀÂÃÃÁÁÂÄÅÄÃÃÃÃÄÅÅÄÄÄÄÅÆÇÇÆÆÆÆÆÆÆÈÈÈÉÉÉÊÊËËËÊÊÊÊÊËÆ·¡‰pT?)2Nj… ´ÆÔÖÔÙÙÖÛÞÜÙÖÖ×ÙÛÛÜÜÜÝÞÞÞßßßßßßßßßàááàáãåââãããââááãâßØÄ£‡jR6$0Sp‹¡¼ÍÖÜàáàáâáààãåãããããäååååååååååææççççæææåéèäéãϱŒkT9'!,Hq‘¯ÌÞáèéçéèèèèèèèèêêêêêêêêêêêêêêêêêêêëëëìììííîïðððññòóôôõõ÷ôðíëèäáÖÕÔÕÙÜÝÝ®¯°±±±±°°°°°±²´µ³³³³³³³´³³²²²±±±²°©ž’€hT<+ ,?Tj€”¡ª­°±¯¬««¯¯°±²±±±±±²³´µµµ··¶¶µ´´´µµµ¶¶···¹¹¹¹ºº»»º¼¼º¹¹³¬Ÿ‹r]G12Kaw‘¤´»ÀÀÀÂÁ¿¿ÁÃÂÁÁÃÄÃÂÂÂÂÂÂÃÃÂÂÂÂÃÄÅÁÂÃÃÄÅÆÇÆÆÇÇÇÈÈÈËÊÊÊÊÊÊÉËƸ¢ŠqU@)1Mhƒž²ÄÒÔÒ××ÔÙÛÙ×ÕÕØÛÝÛÛÛÛÛÜÜÜÝÝÝÝÝÝÝÝÞßàßÞÞàãßßàáááààßááÞ×Ä£ˆjR6$/QnŒ£½ÍÕÛÞßßàáàßßáãââááâãääååååååååååææææååæäèçäèâαŒlT9(!+Go‘­ÊÜàçéçêêêêêêêêêëëëëëëëëêêêêêêêêêêëëëììììììíîïïðññòòóôõõöôðíëèåâ×ÕÓÔ×ÚÜܯ¯°±²²±±¯®®®®¯°°³³³³´´´´²²²²±±±°²°©ž’€hT<+ ,?Ti“ ¦©¬­­­­®­­®¯¯¯¯¯®¯±²´´µµ´´´´´³³³³³³´´µµµ··¸¸¸¹¹¹¹»¼¹¹¹´­žŠq\G02J`v£²¹¾¾¾ÀÀ½¾ÀÁÁÀÁÂÄÁÁÁÁÁÁÁÁÁÁÀÀÀÁÂþ¿ÀÁÃÄÅÆÅÅÅÅÆÆÇÇÈÈÈÈÈÉÉÉËÅ·¡ŠqU@)1Lf€›¯ÂÐÒÐÕÕÒ×ÕÔÓÓÔÖÙÛÙÙÙÙÙÙÙÙÚÚÛÛÛÜÜÜÚÛÜÚÙÙÚÜÜÜÝÞßÞÞÞÝßßÝ×ãˆjR6$-OmŒ£½ÍÕÛÞÞÞßàßÞÞàâááààááâãääääääääääåææåääåäèçãèâΰŒlU:( *Dm«ÉÛßçéçêêêêêêêêêêêêêêêêêêêêêêêêêììììííîîëëììíîïïðññòóôôôõòïìëèåâÙ×ÔÔ×ÚÛܯ°±±²²±±±±°¯¯¯¯°³³³´´µµµ²²²±±±°°²°©ž’€hT<, ,?Ti“Ÿ¦¨ª«ª«­®¬­®¯¯¯¯®¯°±²³³²±²²²²³³³³²²²²³³³´µµµ¶¶¶··¶¹º¸¸¸´­‰p[F01I`uŽ¢¯¶»»»½½º»½¿¿¾¿À¿¿ÀÀÀÀ¿¿¿¿¿¿¿ÀÁÁ¾¾¿ÀÁÂÃÃÃÄÄÄÅÅÅÆÄÄÄÅÆÆÇÇÉõ ˆpT?)0Ke™­ÀÎÑÏÔÔÑÕÓÓÓÓÔÕÖ×ÖÖÖÖÖÖÖÖØÙÙÙÚÚÛÛÚÚÚØÖÕÖØÙÚÛÜÜÜÜÜÜÞÞÝÖãˆjR6$,Nk‰ ºËÔÛÞßÝÞßÞÝÝßáààßßàáââãããããããããäååååäãåäèçãçâίŒlU:( 'AjªÇÚßæéçêèèèèèèèèèèèèèèèèççççççççééêêêëëëêêëìííîîððñòóóôôôñîëêçäáÝÚ×ÖØÛÝÞ¯°±²²²²±¶µ´³²²²²³³³´´µµµ²²²±±°°°²°©ž’€hT=, ,?Ti~’Ÿª««ª¨¨©«­®¯¯°°¯¯°±²³²±°¯°°±²²³³³±±±²²²³³³³³´´´µµ´·¸¶·¸³¬œ‰p[F01I_uŽ¡­´¹¸¸ºº·¹»½½½½¿À¾¿¿ÀÀ¿¿¾¿¾¾¾¾¿ÀÁ¿¿¿ÀÀÀÀÀÃÃÃÄÄÄÅÅÀÀÁÂÃÄÅÅdzž‡nR>)/Jd~˜¬¿ÎÐÎÓÓÐÕÔÔÕÕÕÖÖÖÔÔÔÔÔÓÓÓ×ØØÙÙÚÚÚÛÜÜÙ×ÕÖØ×ØÙÚÛÛÛÚÛÝÞÜÖãˆjR6$,Mj…œ¸ÉÓÛßàÜÞÞÞÜÝßáàßßßßàáâãããããããããääååääãåäççãçâί‹lV;( %>hŠ©ÇÙÞæéçêææææææææææææææææååååååååååååææççêêëëìíîîððñòòóôôóðíëéçãáßÜÙØÚÝß௰±²²²²±´´´´´²±±°±²²±±³µ³³³²²±±±¯®©Ÿ“‚jU8)+>Si”¡«¬­¬«ª«¬¯°±°­¬­®²²²±°°¯¯¯¯¯¯¯¯¯¯¶´³±±±²³µ³±±²³³²²µ¶µ¶·³¬Ÿ‹q[F0 2J_s‹ª´»¹´µ¸¹»»»»¼¼½½½½¾¾¿¿ÀÀ¾¾½½¼¼»»¿¿¿¿ÀÂÃÄÂÂÂÂÃÃÄÄÃÂÀ¿¿ÁÃÅ¿³Ÿ‡nTA,2Le~—©¿ÈÎÎÍÏÐÎÕÓÑÏÏÒÕ×ÖÕÕÕÔÔÔÔ×××××××××××××ØÙÚÔÙÜÛÖÔÕÙÚÞàÞÕÁ¢ˆhR7&(Hi…ŸºÇÐÜàÜßÞÛÚÚÛÞßààááááááââáááâããââáãååäââçæâæéÞ̯iSA,!,FlŠª½ÑÚÞãäáààààßßßßÝÜÛÜÞßÞÝÜÛÚÚÜÝÜÚÔÛØÖØÕÕáåèåçòðëðîîïðññòóòòðìèæååÜÙØÚÞáßÝ­®¯¯°°¯¯²²²³²²±°°²²²±±³µ³³³²²²±±¯®¨Ÿ“hS:+!,?Ti“Ÿ«¬­¬«ª«­¯°±°®¬­®­­­­®®®®°°°°°°°°µ´²±±±²²µ³±±²³³²¯²³²²³¯¨Ÿ‹q[F/0I^s‹ž©³º·³´¶¸¹¹ººº»»»¼¼¼½½¾¾¾¼¼¼»»ººº¼¼¼¼½¿ÀÁ½½¾¾¾¿¿¿ÀÀ¿¿¿ÀÁÂÃÀ´ ‡mR>,.Hc|—ª¼ÄËÊÉËÌËÎÍÌÌÍÏÒÔÖÕÕÕÔÔÔÓÒÒÒÓÓÓÓÓÓÓÒÒÓÔÕÖÕØÛÙÕÓÕÙÔ×Ø×ѾžƒhQ6$*Iiƒ·ÄÍØÛ×ÝÝÜÛÛÜÝÝÝÝÞÞÞÞÞÞÞÞÝÝÝÞÞßäãâãååãáàäãàâåÚÊ«ŒiSB.!  !"""&&&'''((,,-../00/025?Ts‹œ­½ÄÈÌÎÌÊÊÊÉÉÉÈÈÇÅÄÅÆÇÆÄÁÀ¿¿ÁÂÁ¿¾ÃÁ¿Á¾¿ÌÙáãæïíéïíîîïðñòòòòðíêçååâßÜÝàáßÝ­®¯¯°°¯¯¯°±±²±±±±²³²±±³µ³³³³²²²±®­¨ž’€fQ8)".@Ti’Ÿ©ª¬«ª©ª¬­®¯®¬«¬®­­®¯°°±±¯¯¯¯¯¯¯¯²²±°°°°±³±¯¯±²²±²µµ³³´¯¨›ˆoZE/0H]q‰œ«´º¸µ¶¸¸ººº»»¼¼¼½½½½¾¾¾¾½½¼¼¼¼»»¼¼¼¼½¾¿À¾¾¾¾¿¿ÀÀÀÁÁÂÃÃÂÂÀ¾³ž†mQ=)-Ga{–ª½ÆÌÌÊÌÍÌÌÌÌÍÏÑÓÔÔÓÓÓÒÒÒÒÑÒÒÓÓÔÔÔÓÓÓÒÓÔÔÕÕ××ÕÑÑÔ×ÔÕÖÖÒÀ „iR6#*He„›´ÁËÔ×Ó××ØØØØ××ØØØØØØ×××ÖÖÕÕÕÖ×ÙØ××ØØÕÓÔ×ÖÒÔÖ̾¢‡jWI910)+---.0211234566999:::;;AABCCDEEEHKNUez‰“§¬®²´´°°°¯¯®®®­¬ªª«ª©§¤£¡¢£¤£¡ž£ Ÿ¢ž¡±ÆÖàåíêçîíîîïððññòòñïìèåãÞÚ×ØÛÞÝÛ¯°±²²²²±¯°±²²³²²±²³²°°²´´´³³³²²²®­¨Ÿ“hS<-!-@Ti“Ÿ§¨ª©¨¨©ª«¬­¬«ª«¬®®®¯¯°°°­­­­­­­­°¯¯¯¯¯¯¯±¯®®°±±°³µ¶³³³®§–„lYE00G[o†™ª²¸¶³µ¶¶¸¸¸¹¹¹ºº»»»»»»»»ºººººººº»»ºº»¼½¾¿¿¿¿ÀÀÁÁ¾ÀÂÃÄÃÁÀ¾¼±…lQ>(.G`y”¨½ÆÌÌËÍÎÌÌÌÍÎÏÐÐÑÐÐÏÏÎÎÎÎÏÐÐÑÑÒÓÓÒÑÑÐÑÑÒÒÓÓÓÐÍÎÑÔÕÕÔÓÐÀ¡…jT9&!1Me’¨·ÀÈÊÈÄÅÇÈÈÇÅÄÇÇÇÇÇÆÆÆÅÄÃÃÂÂÃÃÃÁÀ¿À¿¼¹¾À¾¼¼½µª”k^UMIJCEGHGHJLKKMNOQRRSTTUUVWWZZ[\]^__aeghny„Š‘””•—™š––•””““’“‘ŽŽŽŒŠ‰ˆ†‡ˆˆ‡…„„€†š°ÊÜäëéçîííîîïïððòññðíéãßÏËÉËÐÕ×ׯ°±²²²²±°±²³´´´³²³³²°°²´´´´³³³²²¯®© •…nZF8*%$"!""""!! #.@Th}œ£¥¦¦¥¥§¨§©ªª¨¨©ªªªª©©©¨¨««««««««¬­­­­­­­¯­¬¬®°°¯®°±®®®©¢•ƒlYF0/F[o‡™§®³±°²³±´´´´µµ¶¶···¶¶¶¶¶µµµ¶¶¶¶¶¸¸···¸¹º»»¼¼½½½½»½¿ÁÂÀ¾½Â¾²…lQ>).G_w‘¤·ÀÆÆÅÆÇÆÇÇÇÇÇÇÆÆÉÉÉÈÈÈÇÇÇÇÇÈÈÉÉÉÉÈÈÇÇÇÈÈÍÌËÉÇÈÊÍËËÉÇô˜~gT=,! !!""##$$#$%&''&&((())***,)(+3BXju„–£«²´³¬­°±±°­¬¯¯¯®®­­­««ª©¨¨¨©«ª¨¨¨§¤¡¦§¥£££–…zngb``babdcbbdefghiklmnqrrstuvvwwxz{|}~‚…„ƒˆ‘Ž‰…|{z{|xxwvuuttuspppoljkihhiigfegdegcl„¾×âééèïííííîîîîñððïíçÞØÆ¿ÁÇÎÑÑ­®¯¯°°¯¯²²³´´´³³²³´²°°±³µ´´´³³³³²°ª¡˜‹weQC621/.//..-,,++++**)(('(((''&&&%$$#""!!!!!  !#,6EUdu…™›œœž Ÿ  ŸŸ ¡¤££¢¡  Ÿ¢¢¢¢¢¢¢¢£¤¥¦¦¦¥¥§¥¤¥§©©¨§©ª¨¨¨¤’kYG2 0G[o†˜¥¬°¯¯±±®±±²²²³³³´´´´³³³³²²³³³´´´¶¶µµµ¶¶·¶¶···¸¸¸¸¹¼¾¾½»ºÁ¼®˜jR@( 1H^s‰š­¶¼¼»¼½¼¿¾¼»ººº»»»»ººº¹¹»»»»»»»»¼»ºº¹¹ºº¼»º¹¸¹ºº¹º¸µ°£ycUD90)(+(())*++,00000000222344556789::::;;<<=>>>?>>@FQ_is|‡‘—šœœ™›žž›™™™˜˜—––••”“’‘‘‘‘”“‘‘‘‹Œ‹ŠŠ‰…‚vtqpprux}~€~~€ƒƒ„…†‡ˆˆ‹ŒŒ‘’“”•—˜™šž¡Ÿœž¡˜‹†{oiea_`^]][ZYXXZXUUUTRPOMLLMMKIIIFHJEQnŒ²ÏÜçêêïííííííííðïîîìäØÏÅÀ»¼ÁÇËÌ­®¯¯°°¯¯²²³³³²±±³´´²°°±³µµ´´´³³³´²¬£œ’q_RFBCA@AAA@?>===<<;;99988777665443224444332201210024;BMV`jv~‡‰Š‹ŠŠŒŽ‹ŒŽŽŒŽ““’’’’’’’“”–––•”–”“”—™™˜—š›šš›—†veXK:+$ (7JYi|š £¢£¥¥¡¥¥¥¦¦¦§§¨¨¨§§¦¦¦¦¦¦§§§¨¨©©¨§§¨¨©§¨¨¨©©©ªª«¬­®­¬¬¯«ž‹xfSD2' !!!!!!!!""""""""$$$$$$$$$$$%%&&&)0>P`m~‹š¢©¨§©ª©ª©§¥¥¦¨©¤¤¤¤££¢¢¦¦¥¥¤££¢¥¥¤£¢¢££¡ ŸŸŸŸžžž¡¡˜ŽqbYQLHCBEBCCDEFGGIIIIIIIIJJKLMNNOPPRSTTTTTTUVVWXXYYYZ]bgiruz€€ƒ„„ƒ~~}|{{zzzxwvvvvvutttsqoonmnnljjhmt{‰“™›žž ¡¤¤¥¥¦¦§§©©ª¬­®¯°°±²´µ·¸¹»¿½¹¸´ Šn^VPIDDDDCA@?>>?=<;<;988644543110-/2-;Z§ÇÖäêêíììììììììîíììéàÒǽ¸²³¹ÀÅƯ°±²²²²±²²²²±°¯¯³´´²°¯±³µµµ´´³³³¶³¬¤ž–‡yqdXVVUTUUUTSRRQPPPONMLLKMMLLLKKKKKJIHGGFFFEEDDCC@ABA@@BDGLSX\bjpvxzzyz{}z|}}||~}}}~€€€€€€€€€€€‚ƒ…†‡†……†…„…‡‰Š‰„‡ˆ‡ˆ‰…~xk]VNB8200///...........,,,,,,,,,,,,,,,,,,,,,,,,))))))))********.4@MWbq€†ŒŽ’‘‘‘‘’’’““”””““’’‘‘’’““””””““’’’““”””•••––””•–––––™–Œ}ocUIE:11320033333333444444446666666677777777:::::::::;;;<<<<>BMZbit~ƒ‹’‘’“’’ŽŒ“•‘‘‘ŽŒ‹Š‰‰Œ‹Š‰‰ŠŠŠ‰ˆ‰Š‰‡†…‰‹‡zoee`\][XWZYYZ[\]^^bbbbbbbbcddefghhijklmnnnmmnoopqqsttstutqkjklkhgheeffffeeddcba`__`_^\[[[[\[ZZ[ZXVXVUWWUUV^hvƒœ¦«¯±´µ¶·º¼¾¾¾¾¿¿¿¿ÆÇÈÉÊÌÍÍÌÍÎÏÑÓÔÕÔÚÙÔÑÈ­s`MC<3-,.-,+*('')'%%&&$"&$"""" $#"$ /Px¡ÁÑâêéëììììììììîìëëèÝ૧¨°¹À±±±±±±±²°²´´²¯¯¯µµ³²²²²²³³³´´´µµ´³±¬£˜‡wsmiggfeeedcbbaaaaa``__^`_^]\[[[]]\[[ZYYZYYXXWWVVXWSRUURWWUTUY_chhhhhhhhiiijjkklkklmmnoonnnnnnnnqqqrrsstrrstuvvwttttsrqpdb^XQKGEAAA@???>@@@@@@@@>>?@@?>>?><;;<=>========;;;;;;;;<<<<<<<=>=;>DOc|Ÿ±ÁÉÌÌËÌÎÐÓÔ××××××××ÝÝÝÝÝÝÝÝÞÞßàáââããâåãÝÕ·ŒwV?4(#$! -Km–ºÑåìéêëëëëëëëëíëëìéÚij¤ ž¢«¶½À®®¯¯°°±±°²³³±°°±µ´³³²²²³³³³´´µµ¶³²±­¦ž–‘‰…|{{{zyyxwvvuuuuttsssrtsrqpooonnmlkkjjjiiiiihhjlkgfiheda\WSSTVWWWWWWWWVVWWXXYYXYYZ[\]]^^^^^^^^^^__````__`abbccaaaaaa`_YYYWVUVWUUUTTSSSRRRRRRRRSSTTTTSSSSRQQQQROOOOOOOOPPPPPPPPNNNNNNNNQQRUY\^^dgkkjijlkkkkkkkkllmmmmlllkkkjjjjkkkkkkkkmmmmmmmmllmnoppqlmi`\]\XYZ[\\ZZ\\\\]]^^^__``abbb^^^_`acc`abbcccbeeeffggghggfghijjffhfabfbcccbbccaabccbaa____^^^]\\\\\\\\[[[[[[[[\[[ZYXWWVVYZVRV]glu|‚†ˆ‰‰‰ŠŒŽ‘‘’’’’••••••––˜™š›œžŸ£¡Ÿ ¡¡Ÿž £¤¡œ”…wh[NE?:8:6655432233210/.---------++++++++*''('&)/Ha˜­ÃÔÜÞÞÞÞßáãäææææææææççççççççççèèéêëëèçêéäÞÀ–zX@4'!!+Hk”¹ÐäëéêëëëëëëëëíëêëçÙ±œ™˜¨´½Á¬¬­®¯°±±°±²±°°²´µ´´³²³³³²²³´µ¶··³³²¯«§£ ˜”ŽŽŽŽŒŒ‹ŠŠ‰ˆˆ‡‡‡‡††††††…„„ƒƒ‚„„ƒ‚‚€€~~€€|~~zy{{xsneZRLHGBBBBBBBBEEEEFFFFDDEEFGGHHHHHHHHHIIIIJJJJIJJKKLMMKKLLLMMMNPTW[`gkmmlllkkkjjjjjjjjghhiihhgghhhgffeffffffffddddddddeeeeeeeeeb^\ZWTQPRTUTSTUUUUUUUUUTTUUUUTTTTTSSRRRSSSSSSSSUUUUUUUUTUUVWWXXSUTSV\aajnsuvwxyuuvvvwwwuvwxyz{{vvwxy{}~|||}}}~~}}~~~€€€‚ƒ}wqi^XWPONMLKKKIIJKKJIIGGGFFFEEDDDDDDDDCCCCCCCCCCBAA@??@?@A?ALXgq— ¢¤¤¥¦§¨©©¨©©ª«­®¯®®¯¯°°±±±²³´µ¶··»º¹¹»»º¸»»º¶±¤ycR?3*#!###""! #?Zž·ÎßçèèççèéêêëëëëëëëëêêêêêêêêèééêêëììëêííéäÉŸ}[A4&)Ei’¶Íâêèêëëëëëëëëíëêêæ×À®š˜—œ¥±»Á««¬®¯±²²±±²±°±´¶µ´´³³³´´²²³´µ¶·¸¶µ´³±¯­¬£ œŸŸžœœ›š™™˜˜———–––––––––•””“—––•”““’‘‘’’““ŒŽ‹ŠŒ‹ˆ€xk]QF>:333333334444555555667788777777779999999999::;;<<:;;;<=>?EJQX_is{~~~~~~~~~~~~~~~~zz{{{{zzz{{|{yxvzzzzzzzzwwwwwwwwyyyyyyyyuoha[TLGABBCBBBCCCCCCCCCAABBBBAAAAAA@@@?@@@@@@@@BBBBBBBBBBBCCDDDBCEIQ\ejw‡‰‹Ž‹‹‹‹ŒŒŒ‹ŒŒŽŽŽŽ‘’“’’’““”•’’““””””•””””•••—…yl^RLA><:9987677887764444333200000000////////..--,,++-,,,-4FWguŠª±µ·¹ºº»¼½¾¾¿¿¾¾¾ÀÂÄÄÄÅÆÇÈÉÉÅÆÆÇÈÉÊÊÉÉÈÊÎÐÏÏÐÏÌÉÄ´–|dP9)#\„¦¿ÓáæééééèèççêêêêêêêêêêêêêêêêëëëììììííêìêæãÉ¡€]B4%&?b‹¯ÆÜççêêêêêêêêêìéèèãÔ½«¢ ŸŸ¤®¹À­­®¯°±²²±³³³±±³µµ´´´´µ¶¶µµµµ¶¶¶¶º¹¹¸·¶µµµ´²³µ¶¶µµµ´³²²±±±±±±²²²²°±²³³²±°²²±°¯¯®®¬¬¬­­­­­©¬­ªª«©¤šycO;) *7I[l}œ¥¥¥¥¦¦¦¦££££££££¡¢££££¢¡¢¢¢¡ Ÿœ                ŸŸŸŸŸŸŸŸšŽ|k[J8," $4G[p•¥²³³··³···¸¸¹¹¹¾½½¼º¹¸¸¾½¼»ºººº¾½¼»¼½¿À¿¿¿ÀÀÀÁÁÀÁÁÁÁÀ¿¾½³ ‡pZD3!!:Qr…¡¸ÅÌÐÓÕÕÕÖÖ×××ÛÛÚÙÙÙÙÙÚÚÛÛÜÝÝÝÝÝÞÞÞßßßáßÞÝÞÞÜÚÞßÞÝ×Ä£†iQ5$ 8V »ÑßæèéêêêéèèëëëëëëëëêêêêêêêêììììììììïìíêçäÌ¥„`D5& %<_‡«ÃÚåæêééééééééëèçèãÔ½¬žœœ¡«·À­­®®¯¯°°²³µ´³±²³´´´´´µ¶···¶¶¶µµµ··¸¸¸¸·¶¶´³´¶·¶µ··¶µ´´³³´´´µµ¶¶¶³µ·¸¸·µ´¹¹¸·¶¶µµ´´´´´³³³®²³°¯°®©Ÿ‘{eO:&!1H_s‡›¨²³³³´´µµ²²²²²²²²®¯¯°°¯¯®°¯­¬ª©©©°°°°°°°°­­­­­­­­¯¯¯¯¯¯¯¯©›…p]H3$-D\t†°ÀÁÂÇÇÂÅÅÅÆÆÆÇÇÇÇÆÆÅÄÄÄÊÊÉÈÈÈÉÉÊÉÈÇÇÉËÌÈÈÈÉÉÊÊÊÉÊÊËÊÉÇÇÉ¿©s[B-!:Qo„¡¹ÆÍÒÖ×××ØØØØÙÚÚÛÛÜÛÛÛÛÛÛÛÜÜÜÜÝÞÞÞÞßßßâàÞÝÝÜÚØÛÝÞÝÕ¡†jQ5$!4Qy›¶ÎßææçèéééèçééééééééééééééééêêêêééééîëìêèçЪ‰eG7&"8\…©ÁØäæêééééééééêèçèäÕ¿®Ÿžœ›ž§´½¬­­­­­­­²´¶¶´±±±´´´´´¶··¸¸·¶¶µ´´´µ·¸¹¹··¹·¶·¹º¹¸ººº¹¸··¶¸¸¹¹ºº»»¸¹»½½¼º¹»ºº¹¸··¶··¶¶µµ´´³·¹¶µ¶´¯œzdP<( 1Kcw‹Ÿ¬··¸¸¹¹ºº¸¸¸¸¸¸¸¸¹¹º»»º¹¹»¹·µ³³³´¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸¸········¯ ‰t_I3#-D\u‰²ÃÆÇÍÎÈÈÈÉÉÊÊÊÊËËËËËÌÌÌÌÌËËÌÍÎÏÌËÉÈÉËÍÎÍÍÎÎÎÏÏÏÎÏÐÐÏÎÌËÍÄ­v^D.7Np…£»ÈÐÕÚÚÛÛÛÛÛÜÜÚÛÝßàààßáààààààßààáááááââàßßààßÝÞâäáØÄ¥‹kS6%9V|¸ÐâëçèêëëëêéêêêêêêêêììììììììëëëëëëëëìéêéèèÒ­hJ8& 6[ƒ§À×ãåêéééééééééççèäÖÀ¯¥¤ ¤°¹®­«ªª«¬­¯±³³²²²³¶¶µµµµµ´¶·¸ºº¹¸··¸¸¹¹ºº»¸¸¸¹¹ººº»º¹¸¸¸¸¸¹¹¹¹¹¸¸¸¹ºº»»ºº¹ºººººººº···¸¸¸¸¸µ·¶³³´°ªž{eQ;&"2JbxŽ¢¯µº¾½¹·¹½¼»»ºº»»¼»»»»»»»»»»º¹¸··¶¹¹º»º¹·¶´µ¸º»º¸·»º¸··¸º»°¥u_J3! ,C]yŽ£¶ÅÇÇÍÐÎÌÌÌÌÌÌÌÌËÌÎÏÐÏÏÎÉËÎÐÐÐÒÔÐÐÐÐÏÎÍÌÒÑÑÐÐÑÑÒÓÓÒÑÐÐÏÏÑÅ­‘w_E14TlŠ¤¸ÍÖÖÜÚÚÚÛÛÛÜÜßßßßßßßßÝßááàßàáßßßßßßßßáâãäãâàßßàààÜ˪ŽqS:*4Qxœ¹Óãéêêêêêêêêééééééééêêêëëìììììììììììêîçíëå׬ŽjK:( 1V¥½ÕáãççççèèéééçæçéæÙÄ´«©¤ž›¡¯º®®®­®®¯¯¯±³³²²²³´µµµµµµµ¶¶·¸¸¸¸¸¸¸¹¹¹¹ºº¶¶··¸¸¸¹»»º¹¸¸¹¹»»»»»»»»ºº»»»»ºº»»»»»»»»ººººº¹¹¹·¹¸µµ¶²¬Ÿ‘{eQ;&"2JcyŽ¢°¶»¾¾»¹¼¿½½¼¼¼¼½½ºººººººº½½¼»º¹¹¸¹º»»»¹¸··¸º¼¼»¹¸¼»º¹¹º»¼±¦v_K3! ,C]yŽ¤¶ÆÈÈÍÐÎÎÎÎÎÎÎÍÍÎÏÐÑÑÑÐÏÌÎÐÐÏÏÐÒÐÐÑÒÒÑÑÐÒÒÑÑÑÑÒÒÒÒÒÒÑÑÑÑÒƯ“y`F23TlŠ¤¹ÎÖ×ÜÛÛÛÛÜÜÜÝßßßßßßßßÞáããâáâãááááááááâããäãâáààáááÝË«rT;*4Pw›¹ÒãéêêêêêêêêééééééééêêêëëìììììììììììêîèíëåØ®kL;( 0U~¤½ÕáãççççèèéééêèèéæÙŶ¯­ª¤¡¥°¹¬¬­®¯¯¯¯¯±³³²²²³³³´´µ¶¶¶¶¶¶¶¶·¸¸ºº¹¹¹¹¸¸¸¸¸¸¹¹¹¹»»º¹¹¹¹º¼¼½½¾¾¿¿»»¼¼¼¼»»¼¼¼¼¼¼¼¼¾½½¼¼»ºº¹»º··¸´®¡’|fQ;&"2Jcy£°·»¿¿½¼¾Á¿¾¾½½¾¾¿¼¼¼¼¼¼¼¼¿¾¾½¼¼»»»»»¼»»º¹»¼½¾½¼»¹¼¼»ºº»¼¼²§‘w`K4! ,C]yŽ¥·ÆÈÉÎÑÏÒÒÑÑÐÏÏÏÒÒÓÓÓÒÑÐÏÐÑÑÏÎÏÐÐÑÒÔÕÕÕÕÓÓÒÒÒÒÓÓÒÒÓÓÓÔÔÔÔȱ•{bG23SlŠ¤¹ÏØÙÞÜÜÜÝÝÞÞÞàààààààààâääãããäääääääääããäääãâáááââÞÍ­sU<+3Ov™·ÑâéêêêêêêêêééééééééêêêëëìììììììììììêîèíëæÛ±’mN<) 0T}¢¼ÔáãççççèèéééëêéêæÛɼ·¶²¬©«´»¨©«­®®­­¯±³³²²²³²²³´µ¶¶·¶µ´´´¶¸¹»ºº¹¹¸¸·»»»»»»¼¼¼»ºººº»»¼¼½¾¿ÀÁÁ¼½¾¾¾¾½¼¾¾¾¾¾¾¾¾À¿¾½¼»»ºº¼»¸¸¹µ¯£”}fQ;&!2Jcy¤±·º½¾¾¾À¿¿¾½½¾¿¿ÀÀÀÀÀÀÀÀ¿¿¿¾¾½½½¼¼¼½¼¼¼¼½¾¾¾¾¼»º¼¼¼»»¼¼¼´©’xaL5" ,C]yŽ¦¸ÈÊÊÏÒÐÔÓÓÒÑÑÐÐÔÔÔÔÓÒÑÑÐÑÒÑÐÏÑÓÓÓÔÕÖÖÕÕÕÕÔÓÓÔÕÕÓÓÔÕÕÖ××Ôɲ–|bG23SlŠ¥ºÐÚÛàÞÞÞßßàààááááááááàâäåäãäåååååååååäääääããââãããàϯ’uW=,1Mt—µÏáèêêêêêêêêêêêêêêêêêêêëëìììììììììììêïéíêæݶ•pQ>+!/Q{¡»ÓàãççççèèéééêéééçßÑÇÃÀº³¯²¹À¨©«­®®­­¯±³³²²²³±²²³´µ¶¶µµ´´µ¶¹º»ºº¹¹¸¸·¼¼»»»»»»¼»»»»»¼½»¼¼½¾¿ÀÁ¾¾¿ÀÀ¿¾¾ÀÀÀÀÀÀÀÀÀ¿¿¾½¼»ºº¼»¸¸¹¶°¦–~fP;&!2Jcz¥²·¹¼½¾¾¿À¿¾½½½½¾¿Â¿¿¿¾¾¾¾½¾¾¾½¾¾¾¾¾¾¾¾½¼¼»¼¼¼¼¼¼¼¼¶ª”zbM5# ,C]yŽ§ºÉËËÑÔÒÔÓÓÓÒÒÑÑÕÕÔÓÒÒÒÒÑÒÓÒÑÒÕ×ÖÖÖÖÖÕÔÓ×ÖÕÕÕÕÖ×ÔÕÕÖØÙÙÚÕʳ˜}cG12Rl‹¦»ÒÛÝãàààááâââããããããããàâääãâãäååååååååæååäääääãääåáѱ•wY?-0Kr”³Îàèêêêêêêêêêêêêêêêêêêêëëìììììììììììêïêíêçà»™sS@,! .OyŸ¹ÒàãççççèèéééèèèéèãÛÔÑ˺·ºÁǬ¬­®¯¯¯¯¯±³³²²²³²²²³´´µµ´´µµ¶¸¹ººº¹¹¹¹¸¸¹¹¹¹¸¸¸¸¼¼»»¼¼½¾¼¼¼½¾¾¿¿ÀÀÁÁÁÁÀÀÂÂÂÂÂÂÂÂÀÀ¿¾¾½½¼»½¼¹¹º·±¨˜€gP;&!2Jd{‘¦³¹º¼½¾¿¿¿¿¾¾½½¾¾¿ÁÁÁÁÁÁÁÁ¿¿¿¿¿¿¿¿¿¿¿¾¿¿ÀÁ¿¿¾¾¾¾¾¾½½¾¿¿¾½½¸¬•{cN6# ,C]yŽ¨»ÊÌÌÒÕÓÔÔÔÔÔÔÔÔÖÕÔÓÓÓÔÔÔÔÕÔÓÕØÛØØØØ×ÖÕÔØØ××××ØØÖ×ØØÙÚÛÛ×̶š€eH22Rm‹¦¼ÓÝßåâââããäääääääääääàâääãããäååååååååçæåäääååäååæãÒ³—yZ@..Jo’±ÌßèêêêêêêêêëëëëëëëëêêêëëìììììììììììêðêíêèãÀœvVB-" -Mw¸ÑßâççççèèéééçççééçãßÜÖÍÅÂÅÊή®®­®®¯¯¯±³³²²²³³³³³³³³´³´¶¸¹ººº¸¸¹¹¹¹ºº¹¸¸¸··¶¶¼¼¼¼¼½¾¿¾¾¾¾¾¾¾¾ÁÁÂÂÂÂÁÁÃÃÃÃÃÃÃÃÁÁÁÀÀÀÀÀ½¿¾»»¼¹³ªš€gP;&!1Jd{‘¦´½½½¿ÀÀÀ¿ÀÀ¿¿¿¿ÀÀÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÁÀ¿¿¿ÁÂÃÀÀÀÀÀÀÁÁ¿ÀÁÂÂÁÀ¿¹­—|dN7$ ,C]yŽ©¼ËÍÍÓÖÔÔÕÕÖ××ØØ×ÖÕÕÕÖ×ØÙÙØÖÕÖÙÛÙÙÚÚÚÙØØÙÙØØØØÙÙÙÙÙÚÛÛÜÜÚкžƒhK51Qm‹§½ÔßàçãäääååååååååååååáäææåäåæææææææææèçæåäååæåææçäÔ´˜z\A/-Hn¯ËßçêêêêêêêêëëëëëëëëêêêëëìììììììììììêðëíêèåÞxXC.# ,Kuœ·ÑßâççççèèéééééééêéçåãßØÓÑÑÒÓ®­«ªª«¬­¯±³³²²²³´³³³³³²²³´·¹»»ºº·¸¸¹¹ºº»ººº¹¹¸¸¸¼¼¼¼½¾¿¿À¿¿¿¿¿¾¾ÁÂÂÃÃÂÂÁÄÄÄÄÄÄÄÄÂÂÂÂÂÃÃÿÁÀ½½¾»µ«›gP;&!1Kd{’§´À¿¿ÀÂÂÀ¿ÂÁÁÀÀÁÁÂÃÃÃÃÃÃÃÃÃÃÃÃÃÃÄÄÁÁÀ¿ÀÁÃÄÁÁÁÁÂÃÄÅÂÃÄÅÅÄù®—|eO7$ ,C]yŽ©¼ËÍÎÓÖÔÕÖÖØÙÚÛÛØ××Ö×ØÚÛÝÝÛØÖÖØÛÙÙÛÜÜÝÜÜÚÙÙØØÙÙÚÚÚÛÛÛÜÜÜÝÒ½¡†kM71Qm‹§½ÕßáèääåååæææååååååååãåçèæææèççççççççéèæåäåæçåæçèåÕµ™{\B/,Hm¯ÊÞçêêêêêêêêëëëëëëëëêêêëëìììììììììììêðëíêéçÅŸyYD/# ,Jt›¶ÐÞâççççèèéééëëêêééèçæãàÞÜÚ×Ö©©ª«­®¯¯±±±±±±±±±±²³³´µµ·¶µ´µ¶¸¹¸¸¸¹¹ººººººººººº»»»»»»»»»¾ÂÂÀ¿ÁÃÂÁÁÁÁÂÃÄÂÂÄÅÆÇÇÇÁÁÂÃÃÂÁÁÅÇÄÀÀÁ¾¸¨šƒjR;'#3Le|“©·¾¿ÀÀÁÁÀÀÃÄÄÃÁÁÃÅÅÆÆÇÇÈÈÈÃÃÄÅÆÆÆÅÃÃÃÃÃÂÂÂÃÄÆÇÇÆÄÃÁÁÂÃÄÄÄú¬–~gO7('D]w“ª»ÌÓÓÕÖÖÛÛÛÚÚÙØØÚÚÚÚÚÚÚÚÞÝÜÜÜÜÝÞÜÜÜÜÜÜÜÜÞÝÜÛÛÜÝÞÚÚÛÜÜÛÚÚÛÓ½žƒkM3#/NhŠ§»ÓàâåææææææææçççççççççççççççççççççççççççççççççäçèâÚ¿›`D0*EkŽ­ÉÝæèéêëëëëêììììììììììììììììììììììììíñëïëçæȦ]G1%"'Js™¶ÒáãæçççèèééééêëììêéèãåæãÝØÖÖ©©ª«¬®¯¯­®®¯°±²²²²³´µµ¶¶¶¶µ´µ¶·¸¸¸¸¹¹ººº»»»»»»»»»»»»»»»»¼¾ÁÂÀÀÁÃÁÁÂÂÃÃÃÃÃÃÅÆÆÆÆÆÅÅÆÆÆÆÅÅÅÆÅÂÁ¾·©š„kS<'$4Le}”ª¸¿¿ÀÁÂÂÁÁÄÅÅÄÃÃÄÆÇÇÇÇÇÈÈÈÅÅÆÇÈÈÇÇÃÃÃÄÄÄÄÄÃÄÆÇÇÆÄÃÂÂÃÄÅÅÄļ­—gO7''D]w“«¼ÎÕÕ×ØØÙÚÜÝÝÛÙ×ÛÛÛÛÛÛÛÛßÞÞÝÝÞÞßßßßßßßßßßÞÞÝÝÞÞßÜÝÝÞÞÝÝÜÜÕ¿ …mO5#/NhŠ§»ÓáâåææææææææçççççççççççççççççççççççççççççççççäçèâÚÀœ€aE1)Dj¬ÉÝæèéêëëëëêìììììììììììììììììììììììììðêïëèçʧ€^H1%"'Jsš¶ÒáãçççèèèééééêëìëêèçãååáÜ×ÖÖ¨©ª«¬­®¯««¬®°±²³³³´´µ¶¶·¶µµµµ¶·¸¸¸¸¹¹ººº¼¼¼¼¼¼¼¼»»»»»¼¼¼¼¿ÁÂÁÁÂÃÀÁÃÄÅÄÃÂÄÅÆÆÆÆÅÅÆÇÇÈÈÇÇÆÃÆÆÄÃþ·ª›„kS<($4Lf}•ª¹ÀÁÂÃÃÃÃÂÅÆÇÆÄÄÆÈÉÉÉÈÈÈÈÈÇÈÉÉÊÊÉÉÃÄÄÅÅÆÆÇÄÅÆÇÇÆÅÄÃÄÅÆÆÆÅÅ¿°™€hO6&'D]w“­¾ÏÖ×ÙÚÚ×ÚÝààÞÛÙÞÞÞÞÞÞÞÞáààßßààáààààààààßààááààßÞßààààßÞß×Á¢‡oQ7$.MhŠ§»ÓáãæææææææææççççççççççççççççèèèèèèèèççççççççèäçèãÛž‚bF2'Ch‹«ÈÝæééêëëëëëììììììììììììììììììììììììëîéîëééÍ©‚_I2&"'Jsš·ÓâäèçèèèéééééêëëëêèçããâßÚÖÕÕ¨©©«¬­®®¬­­¯°±²³³³³´´µµµµµµµ¶¶··¸¸¸¹¹ººº»»»»»»»»»»»¼¼¼¼½½¿ÀÁÂÂÂÂÀÂÄÆÆÅÃÂÆÆÆÇÆÆÅÄÄÅÅÆÆÅÅÄÃÆÇÅÅÅ¿·«…lT<($4Mf~–¬ºÂÃÄÅÅÅÅÄÆÇÈÆÅÅÇÈËËÊÊÉÈÈÈÉÉÊËËÊÊÉÄÅÅÆÇÈÉÊÆÆÇÈÈÇÆÆÆÆÇÈÈÇÇÆÁ²›‚iO6&'D]w“­¾Ð×ØÚÛÛÚÜÞàáàÞÝààààààààããâááâããààààààààáâãääãâáààááááàààØ£ˆpR8$.Lg‰¦»ÓáãæççççççççèèèèèèèèèèèèèèèèééééééééèèèèèèèèèåèéäÝÄ¡„dH3 %@fˆ©ÇÝçéêëëììëëììììììììììììììììììììììììêíèîìêìЬ„aJ3&"'Jsš·ÔãåèèèèéééêêéêëëêéçæâàÞÚÖÓÒÒ¨¨©ª«­­®°°°±±±±²±±²²²³³³µµ¶¶····¸¸¸¹¹ººº¹¹¹¹¹¹¹¹»»»¼¼½½¾¿¿ÀÁÃÃÃÂÁÂÅÇÇÆÄÃÆÆÇÇÇÆÅÅÄÄÅÅÅÅÄÄÃÆÇÆÆÆÀ¹¬ž‡mT=($4Mg—­»ÄÅÆÇÇÇÇÆÇÈÈÇÆÅÇÉÌÌÌËÊÊÉÉÊÊËËËÊÊÉÆÇÈÉÊËËÌÈÉÉÉÉÉÉÈÉÉÊÊÊÉÈÈôœƒjP7''D]w“¬½Ï×ØÚÛÛßßßßßáâãââââââââåääããääåâââââââââãåææåãâááââââááàؤˆpR9$-Kg‰¦»ÔáäçççççççççèèèèèèèèèèèèèèèèééééééééèèèèèèèèéåèéäÞǤ†fJ5!#>c†§ÅÜçéêëììììëììììììììììììììììììììììììêíçíìëíÒ¯‡dL4&"'Irš·ÓãåéèèéééêêêêêëëêèæåßÜ×ÓÐÏÎͧ¨©ª«¬­®±±±±±±±±±±±±±±±±´µ¶····¶¸¸¸¹¹ººº¸¸¸¸¸¸¸¸»»¼¼½¾¾¾À¿¿ÁÄÄÃÂÃÄÅÆÇÆÅÅÅÆÇÇÇÇÇÆÆÇÇÈÈÇÇÆÄÇÇÆÆÆ»®ŸˆnU=)$5Nh€˜®½ÆÇÈÉÉÉÈÈÉÊÊÉÈÈÉËÌÌÌÌÌËËËËÌÌÌÌËÊÊÉÊÊËËÌÌÍÌÌËËËËÌÌËËÌÌÌËÊÉĵ„kQ8('D]w“¬¾Ð×ÙÛÜÝäâáßßáäåããããããããæååääååæææææææææäååææååäââãääãââáÙÃ¥‰qS:%,Jfˆ¦»Ôâäçèèèèèèèèééééééééééééééééêêêêêêêêééééééééêæèéåàɧ‰iL6"!)%5Nh™¯¾ÈÈÉÊÊÊÊÊÌÍÎÍËËÍÏÌÌÌÍÍÍÍÍÎÎÎÎÎÍÌËÌÌÌÌÌÍÍÍÎÎÎÍÍÎÎÎÍÍÍÍÍÌËÊĵ…lS:*'D]w“­¿ÑÙÛÝßßåäããâããäääääääääæååääååæèèèèèèèèæååääååæäååææååäãÛƧŒsU<%+Jfˆ¦»ÔâäèèèèèèèèèééééééééééééééééëëëëëëëëééééééééêæéêæáË©ŠjM7# :_‚£ÃÛçêëììííìììììììììììììììììììììììììììîèíëëîÔ³‹gN5&!'Fo—´Ñáäçéééêêêëëêêëêéçåã×ÑÉÅÄÄÄ秨©«¬­­«¬­®°±²³³³³³³³³³³´¶·¸·¶µ¸¸¸¹¹ººººººººººº»»¼½¾¾¿ÀÁ¿¿ÁÅÆÄÁÆÆÅÅÅÆÇÈÄÄÆÇÈÉÉÉÇÈÈÉÉÈÈÇÇÈÇÄÅÇÄ¿¯¡‰oV>)%5Ni™°¾ÈÉÊËËËËÊÏÐÐÏÎÎÏÑÌÌÌÍÍÎÎÏÐÐÐÐÐÏÎÍÎÎÎÍÍÍÍÍÐÐÏÏÏÏÐÐÎÎÎÎÎÍÌËĵ…mS;+'D]w“¯ÁÓÛÜßááäåææåäâáääääääääæååääååæææææææææçæäããäæçæçèèèèçæåÝÇ©ŽuW>%+Ieˆ¥»Ôâåèèèèèèèèèééééééééééééééééëëëëëëëëééééééééëæéêæâ̪‹kN8#9^£ÃÛçêëìííííìììììììììììììììììììììììììíïèíëëîÓµŒhO6'!'En–³ÐàãçéééêêëëëêêëêéçäãÔÎÆÁÀÁÁÀ¨¨©ªª«¬¬ª¬­­­®±´²²²³³´´´¹¸¸¸·¶¶¶¸¸¹¹¹¸··¶¸º»»»½¿¾¾½½½¾¿¿ÀÀÀÀÀÀÀÀÅÅÅÆÆÇÇÇÇÈÈÉÉÈÈÇÇÈÈÆÅÅÇÊÇÊÊÈÈÉÅ¿± ˆnV?)#5Pi€˜¯ÀÊÊËËÌÍÎÎÐÍÎÑÒÏÏÒÎÎÎÏÏÏÐÐÑÑÑÒÒÒÓÓÓÒÒÑÑÒÒÓÒÑÐÐÐÐÑÒÐÎÍÍÎÎÍËŤ‰pX=((E_y•¯Ã×ßßßàáääääääääææææææææççççççççççççççççèèèèèèèèççççççççãßί‘vX@,+Ie„£½ØãäèèèèééêêêêêêêêêêêëëëëëëëëëëëëëëëëêêêêêêêêêêíêççÔ³’qR;%8\~¡ÄÛäèêììëëëìììììììììììììììììììììììììîêíîêíëݺ‘kQ7(##Ak“±ÏàãçéééêêëëëèììéèèæáÙÏÆÃÁÀÂƨ¨©©ª«¬¬«¬­­­®°²²³³³´´´µ···¶¶¶µµ·¸¸¹¹¸··º»¼»¹¸¹»¾½½½¾¾¿¿ÀÀÀÀÀÀÀÀÅÅÅÆÆÆÇÇÇÈÈÉÉÈÈÇÈÉÉÈÆÆÉËÇÊÊÈÈÉÅ¿±¡ˆnW?)#5Pi€˜°ÀÌÌÌÍÎÏÏÐÒÏÏÓÓÑÑÔÐÐÐÑÑÑÒÒÑÒÒÒÓÓÓÔÒÒÑÑÑÑÒÒÒÒÑÑÑÑÒÒÔÒÐÏÏÎÌÊź¤ŠqX=((E_y•®Â×ßàáãäååååååååææææææææççççççççççççççççèèèèèèèèççççççççãàÏ°’wYA,*Ie„¢½ØãäèèèèééêêêêêêêêêêêëëëëëëëëëëëëëëëëêêêêêêêêêêíêççÕ´”sT='7Z| ÂÚäèêììëêëìììììììììììììììììììììììììîêíîéìëݺ‘lR8)##@j’±ÏßãçéééêêëëëêììèçèåàØÐÉÇÆÄÅɨ¨¨©ª««¬«­­­¬¬®±±±±±²²³³¶µµµµ´´´··¸¸¸¸··º»¼»¹¸¹º½½½¾¾¿¿¿ÀÀÀÀÀÀÀÀÅÅÅÅÆÆÆÇÇÇÈÈÈÈÇÇÉÊÊÉÈÇÉËÈÊÊÈÉÊÆ¿²¡ˆoW?)#5Pi˜°ÁÍÎÎÏÐÑÑÒÓÑÑÔÕÒÒÖÒÒÒÓÓÓÔÔÓÓÓÓÔÔÕÕÔÔÓÒÒÓÔÔÔÓÓÒÒÓÓÔØÖÓÒÑÐÍËǼ¦‹rY>)'E_z–­Â×áâäæçææææææææææææææææççççççççççççççççèèèèèèèèççççççççäáв”xZB-)Gdƒ¢¼Øãäèèèèééêêêêêêêêêêêëëëëëëëëëëëëëëëëêêêêêêêêêêíêçè׶–uW?)5Wz¿×ãèêììëêëìììììììììììììììììììììììììíéíîéìêܺ’mS9)##?i‘°Îßãçéééêêëëëëíëèèéåß×ÑÍÍÍÉÈʧ§¨©ªª««¬­­¬««­¯®®®¯¯¯°°´´³³³³³³¶¶·¸¸¸¸··¹»»º»¼¾¼¼½¾¿¿¿¿ÁÁÁÁÁÁÁÁÄÄÅÅÅÆÆÆÆÇÈÈÈÈÇÆÈÉÊÉÈÇÉÊÈËËÉÉÊÆÀ²¢‰oW?)#5Pj™±ÁÎÎÏÐÐÑÒÒÔÑÑÕÕÒÓÖÓÓÓÔÔÔÕÕÔÔÕÕÕÖÖÖ××ÖÕÕÖ××ÖÕÕÔÔÕÕÖÚ×ÕÔÔÓÑÏɾ¨sZ?*'D^z–°ÄÙâãäçèççççççççççççççççèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèæãÓµ–{\C.(Fcƒ¡¼×ãäèèèèééêêêêêêêêêêêëëëëëëëëëëëëëëëëëëëëëëëëëêìêçéÙ¸˜wX@)1Swš»ÔâçéëìêêêìëëëëëëëëëëëëëëëëëëëëëëëëíéìíéìêÜ»“nU:*##=g¯ÎßãèéééêêëëëëìëéêëæßÖÑÎÏÍÈÅŧ§¨¨©ª«««¬¬«ªª¬®®®®¯¯°°°²²²²²³³³µµ¶·¸¸¸·¹»¼¼»»½¾º¼½¿ÀÀÀ¿ÁÁÁÁÁÁÁÁÄÄÄÅÅÅÆÆÆÆÇÈÈÇÆÆÆÇÉÈÇÆÇÈÉËËÉÉÊÆÀ´£ŠpW?)#5Pj‚š²ÂÎÎÏÐÐÑÒÒÓÐÑÔÔÒÒÕÓÓÔÔÔÕÕÕÖÖÖ×××ØØ×ÖÖÕÕÖÖ×Ø××ÖÖ××ØÙØÖÖ×ÖÕÓËÀªŽu\@+&C^z—³ÇÜäãäææççççççççççççççççèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèçåÕ·™}^D/'Db‚ »×ãäèèèèééêêêêêêêêêêêëëëëëëëëëëëëëëëëëëëëëëëëëêìêèëÛ»™xX@).Ot—·Ñâçéëëêéêëëëëëëëëëëëëëëëëëëëëëëëëëìèìíèëéܼ”pV;+##;fŽ®ÍßãèéééêêëëëêìëêììäÛÑËÇÆý¸¸¦§§¨©ªªª©ª«ª©ª¬®°°°°±±±²²²²²³³³³´´¶·¸¸¸·½¾¾¼º¸¹º¹»½¿ÀÀÀ¿ÂÂÂÂÂÂÂÂÃÄÄÄÅÅÅÅÆÆÇÇÇÇÆÆÅÇÉÈÇÆÆÇÉËËÉÊËÇÀ´¤ŠpX?)#5Pj‚›³ÃÎÏÏÐÑÒÒÓÓÑÑÔÕÒÒÖÔÔÕÕÕÖÖÖ××ØØÙÙÙÙÕÕÔÔÔÔÕÕÚÙÙØØÙÙÚÚØ××ØØ×Õͬv]A,%C^z˜´ÈÜäãäååççççççççèèèèèèèèééééééééééééééééèèèèèèèèééééééééèæ׺œ_F/&Ca »×ãäéèèèééêêêêêêêêêêêëëëëëëëëëëëëëëëëììììììììëêìêèìݽ›yZA)+Kq”³ÎáæèëëêéêëêêêêêêêêêêêêêêêêêêêêêêêêìèììèëéÛ½•qX=+$#9d­ÍßäèéééêêëëëêëëêêçÜÏļ¶´°ª§§¦¦§¨©©ªª§©ªª©ª­¯®®®¯¯¯°°²²²²³³´´³´µ¶·¸¸¸»¼¼º·¶¶·¹º½ÀÁÁÀ¿ÂÂÂÂÂÂÂÂÃÃÄÄÄÅÅÅÅÆÆÇÇÆÆÅÅÇÊÊÈÇÇÈÉÌÌÊÊËÇÁµ¤‹qX?)"5Pkƒ›´ÄÐÑÑÒÓÔÔÔÕÒÒÖÖÔÔ×ÖÖ×××ØØØØÙÙÙÚÚÚÛ××ÖÕÕÖ××ÛÛÚÚÚÚÛÛÜÚØØØØÖÔÎí‘w^B-%B^{˜²ÆÛããäæçææææææææèèèèèèèèééééééééééééééééèèèèèèèèéééééééééèÙ¼ž`G0%Ba€Ÿ»×ãäéèèèééêêêêêêêêêêêëëëëëëëëëëëëëëëëììììììììëêìêèíÞ¿|\C+ )Gn’°ÌàæèêëéééëêêêêêêêêêêêêêêêêêêêêêêêêìèëìèëéÛ½–rY>,$#8cŒ¬Ìßäèéééêêëëëëëêèçß¡š–•—¦¦§¨¨©ªª¦§©©©ª­°ªªª«««¬¬²²²³³´´´³´µ¶·¸¸¸µ·¸·¶¶·¸¸º½ÀÁÁÀ¿ÂÂÂÂÂÂÂÂÃÃÃÄÄÅÅÅÅÆÆÇÇÆÆÅÆÉËËÊÈÈÉÉÌÌÊÊËÇÁµ¥‹qX?)"5Pkƒ›´ÄÒÒÓÔÕÕÖÖ×ÔÔ×ØÕÖÙØØÙÙÙÚÚÚÙÙÚÚÚÛÛÛÛÛÚÙÙÚÛÛÜÜÛÚÚÛÜÜÞÜÙØØ×ÔÒÏÄ®’x^C-%B^{˜¯ÄÙâãåèéææææææææèèèèèèèèééééééééééééééééèèèèèèèèééééééééêèÚ½Ÿ‚aG1%A`€Ÿº×ãäéèèèééêêêêêêêêêêêëëëëëëëëëëëëëëëëììììììììëêìêéíßÀ ~^E,!(Fm‘®ËàæèêêéééêêêêêêêêêêêêêêêêêêêêêêêêêìèëìèëéÛ¾–sY>,$#7b‹¬ÌßäèéééêêëëëëìêçãÙı¥›‘‹ˆŠŽ¦§©ªª©¨§¤¥§©ªªª©¨©«­®®®­±±²²²³³³°°°³µ·¶´··¸¸¹¹¹¹¹¹º»¼¼½½½½¾¿ÀÀÁÁÁÁÂÃÄÄÅÅÃÃÄÄÄÅÅÅÉÉÉÉÉÈÆÆÈÈÈÉÊÈÅÁ´¡‰rZ>'$5Pj‚›´ÅÏÏÐÑÓÕ×ØÖÔÔÖØÚÚØÓÕ×ÙÛÜÝÝÛÛÛÛÛÛÛÛÚÚÚÚÚÚÚÚßÞÝÝßßÞÝÜÝÝÝÜÚØÖÔÈ°“x_C.&A\z™¯ÄÚäæçéêåääääåæçééééééééêêêêêêêêçèèééèèçèèèèèèèèêêêêêêêêççÚ¿¡„cH.!$?[~ž·ÕåçéèèèééêêêêêêêêêêêëëëëëëëëëëëëëëëëììììììììêéíîêëßǦ_H. (Dh‹ªÉÞèæéîìçæìêêêêêêêêêêêêêêêêééééééééìèëìèêèÚ¿—tZ?-$6^‰­ÌÜâìèéêëëëëêçêìêàÌ·¨–†€€~¥¦§¨©©¨§¥¦¨©ªª©¨©ª«­®­­¬®¯¯°°±±²±°±²µµ´³µµµ¶¶¶··¸¹¹º»¼¼½º»»¼½¾¾¿ÁÁÁÂÃÄÄÅÃÃÃÄÄÄÅÅÆÇÇÇÇÆÆÅÆÆÆÈÈÇÃÀ´¡ˆrY>'$5Pj‚›´ÅÐÐÑÒÔÖ×ØÖÕÕÖØÙÙØÔÕ×ÙÛÛÜÜÜÜÜÜÜÜÜÜÛÛÛÛÛÛÛÛÞÝÛÜÞÞÝÜÛÜÝÝÝÜÛÚÔÈ°”y_D/%A[y˜­ÂØâäæèéåååååæççééééééééééééééééçèèééèèçèèèèèèèèêêêêêêêêççÚ¿¢„cI/"#>Z}¶Ôåçéèèèééêêêêêêêêêêêëëëëëëëëëëëëëëëëëëëëëëëëêèííêëàǧ`H/ 'Cf‰©ÇÝçæèíìççëêêêêêêêêêêêêêêêêééééééééìèëìçêèÚ¿˜t[?-$5^ˆ¬ÌÜãëèéêëëëëêíîïêÜƯŸ‘Š‚}}~}|¢£¥¦¨¨¨¨§§¨©©©¨§ª«¬¬­¬¬«««¬­®¯°°²±±²³´²°²²²²³³´´·¸¸¹º»»»ººº»¼½½¾ÀÀÁÁÂÃÄÄÂÂÃÃÃÄÄÄÃÄÅÅÆÅÅÄÅÄÅÆÇÅÁ¾³ ˆqY>'$5Pj‚›´ÅÑÑÒÔÕ×ØØØÖÕÖØÙØÖÖ×ØÙÚÛÛÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÝÜÛÛÝÞÜÛÛÜÝÞÞÞÝÝÔȱ”y`D/$@Zx—«À×áãäæçæææåæçèèééééééééèèèèèèèèçèèééèèçèèèèèèèèêêêêêêêêççÚ¿¢…dI/""'$5Pj‚›´ÅÑÒÓÕÖ×ØØÙ×ÖÖØØ×Õ××ØÚÚÚÚÚÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÞÝÜÜÞÞÝÜÝÞÞÞÞÞÞÞÕɲ•z`E0#?Yv•«À×áâäæçççææççèéèèèèèèèèèèèèèèèèçèèééèèçèèèèèèèèééééééééççÚÀ¢…dJ0#!;Wy™²Ñãçêèèèééêêêêêêêêêêêëëëëëëëëëëëëëëëëêêêêêêêêêèììéëáɪ…dL2!%?aƒ£Â×ãåèêéçèéééééééééééééééééèèèèèèèèêæêëçêèÛÁšv\@.%3Z„ªÌÞãëéêëëììëëêëëæÚƱ£—‘‹‰‹Œ‹¡¢¢¤¥§¨©©©¨¨¨¨¨¨¬«««ªªª«««¬­®®¯¯²°¯°±°®¬°°°±±±²²´´µ¶··¸¸¹ºº»¼½½¾½¾¾¿ÀÁÁÁÁÁÁÁÂÂÂÃÂÂÃÅÅÅÅÅÅÅÅÆÇÆ¿±ž†pY>'$5Pj‚›´ÅÑÒÔÖ××××Ù×ÖÖØØ×Õ××ØÚÚÚÚÚÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝÝàßÞÞààßÞáàßÞÞÝÝÜÖʳ–{aF1 "=Wu“¬Á×áãäççççææççèéèèèèèèèèêêêêêêêêçèèééèèçèèèèèèèèééééééééççÚÀ£†eK1$8Uw–°ÏâæêèèèééêêêêêêêêêêêëëëëëëëëëëëëëëëëììììììììêèìëèëâÊ«†fN3"#<^Ÿ¾ÔáåèèçèèèééééééééééééééééèèèèèèèèéåéêçêéÛÛw]A.%2X‚¨ÌÞãêéêëììììëéééæÝν²¥ ›šœžž££££¥¦¨©©¨§§§¨©©«ªª©ªª«¬­­­­®®®®°¯®¯°¯­«¯¯°°±±±±³³³´µ¶¶·¶¶·¸¹¹ºº¼¼½¾¿¿ÀÀÀÀÀÁÁÁÂÂÂÃÃÄÄÄÄÃÅÅÅÆÇž°ž†pX>'$5Pj‚›´ÅÐÒÔÖ×ÖÖÕØÖÕÖØÙØÖÖ×ØÙÚÛÛÛÜÜÜÜÜÜÜÜÝÝÝÝÝÝÝÝáàÞßááàßâáàÞÝÜÜÜ×˳—|bF2 !* "&7Rn†®»ÃÉÉÈÉÇÄÁÀ¾º·´±°°¯­ª§¤¢¡›™—–“ŒŒŠ‡…„|xory…‘š¡¥­°´¸»¾ÂÅÉÌÏÑÒÕØÚàâäååæèêèéééêêêëëíïïîîñôðððñññòòôõõõóðîìíëçäâàÜÚª¬­­¬¬®°­­­­¬¬¬¬««««««««ª«¬­­­­­¬¬¬¬¬¬¬¬®­­¬¬­­®¯¯®­­®¯¯±°¯®¯°²³±±³´µµµµ¶···¸¸¸¹··¸¹º»¼¼¸»»¹º»·±¨š…oYB+-D\s‹¢±À¿ÀÄÆÄÆÃÁÃÆÈÆÃÄÅÅÆÇÈÈÉÈÉÉÉÊÊÊËÏÌÊÊÌÎÎÎÍÍÎÎÏÐÑÑÔÓÑÑÒÒÑÏÌï–~eI4 ,Eeš®ÅÑÖÚÜÜÝÞÞÞÞÝÝÜßßßßßßßßààààààààááááááááßßàáááááàáâããâáàáãÚémS=&%;_~—µÌØâåååæææççææææçççèèèçççæææççççèèèèääääääääåãæåâæâζ’s[=(!"#$((()+.0238G\qƒ“ž£©­«ª«©¥§¦£Ÿ›˜•“Š†ƒ€|zxvqnmligec`]ak{Œ­¸¾ÍÐÒÔÕ×ÚÜáãååååçéèêëêèçèêëëìííîïïíîïïïðóõððñññòòòôõööôñîëìèãÞÛØÔÒ¬­®­«¬®°¯¯¯®®®®­­­­­­­­­«¬­­®­­¬­­­­­­­­®­­¬¬­­®­­¬¬¬¬­­°¯¯¯°°±²°±²³´´´´····¸¸¹¹µµ¶¶·¸¸¸¸º»¹¹º¶°§š„oYB, ,C[rŠ ¯¿ÁÁ¿ÀÄÅÃÄÃÂÃÄÄÄÂÄÄÅÅÆÇÈÈÈÈÈÉÉÉÊÊÌËÉÉËÌËÊÉÉÊËÍÎÎÏÏÎÍÍÏÐÏÍËÁ®•}eI4 +Cd}˜¬ÃÏÔØÚÚÛÜÜÝÝÝÜÜÝÝÝÝÝÝÝÝßßßßßßßßààààààààÝÞßààààßßàâããâàßàâÙ¨mS=&%;^|”²Ê×âäåååææææåååæææççççççæææåççççææææææææææææéçêèäèãÏ´qZ=( !#$&'(-./13466=>?ADGIJLR]kxƒŠ‘””‘ŽŠ‹‰‡ƒ€|zxvuspmjhgfca_^[WTPONLJHGFPc}•¬ÁÑ×âäææåæèéëìííëêëíìíïïííïðîîïððñòòññððïððñññññòòòóóôööõñíëèâÚÓÎËÉǯ°°®¬¬®°±±±°°¯¯¯®®®®®®®®­­®®®­¬«­­­­­­­­®­­¬¬­­®­­¬¬¬¬­­­­®¯¯¯¯¯¯°±³³´´´µµ¶¶····¶¶¶¶¶¶¶·¸ºº¸¸¹µ¯§™„nYB, +BZq‰ ¯¼¿À¾¿ÂÃÀÂÃÄÃÂÁÂÃÂÃÃÄÅÅÆÆÆÆÇÇÈÈÈÈÉÈÇÈÉÊÈÆÆÆÇÉÊËÌÍËÊÉËÍÎÎÌÊÁ­•}dI4 *Bb|•©ÀÌÑÔÖÖÙÚÛÜÜÝÜÜÚÚÚÛÛÚÚÚÝÝÝÝÝÝÝÝßßßßßßßßÜÝÞßßßßßÞßáââáßÞàâÙ¨mR=&$;]z‘¯È×ãääåååæææääåååæææçççæææååæååääããâääääääääåâåâÝáÛÇ«‰nZB0( !#$%&)*+-/13389:=?ACDIJLNPRSTZ[^aegiinrx|€}|}ztrsrnjigda^\[YXVTQOMLIGEDB@<977643112@\ž¹ÑáæçéëêééëìêìíìëêëìíîððððòôðððñññññòòññññðïñññòòòóóòóõöôñìéæÞÓÊÅÂÁÀ²²²°­­¯±³²²²±°°°¯¯¯¯¯¯¯¯®®®®®¬««­­­­­­­­®­­¬¬­­®®­­¬¬­­®ª«­®¯®­¬¯°±²³³³³´´´µµ¶¶¶¹¹¸¸¸¸¸·¸ºº¸¸¹µ®§™„nYC,  +BYpˆŸ®¹½¿½¾ÁÁ½ÀÃÅÃÀ¿ÁÄÁÁÂÂÃÄÅÅÅÅÅÆÆÆÇÇÆÅÅÇÈÈÅÂÄÅÆÇÈÊËËÊÉÉËÍÏÏÎÉÀ­”|dI4 *Bb{’¦½ÉÎÒÔÔ×ØÚÛÜÝÝÝ××ØØØØ××ÝÝÝÝÝÝÝÝßßßßßßßßÜÝÞÞßßÞÞÝßáââáßÝàâÙ¨lR=&$<]y­Ç×ãäääååæææäääåååææçççææåååääãâáààßÚÚÚÚÚÚÚÚ×ÔÖÓÎÑË·¢ƒk]I<824568:<>?FGIKNPRSUVY[^acdfgikmpqrvx|€ƒ…†‡ˆ‹Œ‰„}unfe`YVXWSQPNLIGFE>=;964321/-,+)%"$$$" !"6W€¢¿×åééêììëëíîëíîîííîðìíïîííîðôôóóòòññðððòôôóòñññòòóóóñóõöôðìéçÞÒÇÁ¿¾¾²²±±±°°°µµµ´³²°¯¯°°°°°°°¯¯¯¯¯¯¯¯¬¬¬­®­ª¨§©¬®¯¯®­±°¯®­­®®®¯±±±°¯­­²³°±·¸´²²²²³´µ¶º¹·¶¶·¸¹¸·¶¶·¶´²¤˜†qY@) )@WoˆŸ¯´º¾¼¼¾¿½¿ÀÀÁÁÀÀ¿ÁÁÀÀÀÁÂÃÂÃÅÆÇÆÅÄÂÃÃÃÄÅÅÅÇÇÆÆÆÇÈÈÅÆÆÇÈÉÊËÆ¿­”{bH5! +Dd|¦¾ÉÌÎÓÕÔÕÖ×ØÚÛÛÕÖØÚÛÚÙÙÝÜÜÜÜÝÞÞßßßàààààÜÜÜÜÜÜÝÝããââááààäâØĪnW<*"98631/..*)('%$#"3Q|£ÃÛæéêîîëìïïíîîîîîîîîïïïïïïïïññññññññññññññññòòòóóôôôöõõõôðêæáÙÎÆ¿¼º³²²²±±±°´´´´³²±°°°°°°°°±¯¯¯¯¯¯¯¯­¬¬­®®¬ªª«­¯°°¯¯®®®­­¬¬¬¬­­­­­¬¬®²³°±¶·³³³³³´µ···¶µ´´µ¶¶·¶µµµ´²°¦›ˆrZA) +AXo‡ž®µ»¾½¼¿À¾ÁÁÁÁÁÁÁÁ¿¾¾¾¾¿ÀÁÃÄÆÇÈÇÆÅÄÄÅÅÆÆÆÇÉÈÇÆÆÅÆÆÇÇÈÈÉÊÊËÇ¿­“zaG3  *B_vŒ¢»ÇÊÍÒÔÒÒÓÔÖ×ØØÔÕÖ×ØØ×ÖØØØØÙÚÛÜÜÜÜÜÜÜÜÜÝÝÝÝÝÝÝÝÛÛÜÝÝÞßßßÞÖênW<+%=Wx’¨¾ÏÖØ×ÖÔÓÒÒÒÒÒÐÏÎÎÎÏÎÌÊÉÉÈÅþ¼º¸¸·µ³¯®­¬«©¨¨¤§¥¡ Ÿ˜Žxoihihgklnqtvxyz{}‚…‡ˆŠ‹Ž‘•™›ž ¤¦¨ª®±±³µ¹¼¾¿À¾¾¶¥xbQB8/-,)'(%$" 2P{¢ÃÚæéêîîëìïïíîîîîîîîîïïïïïïïïññññññññññññññññòòòóóôôôõõõõôðëæãÙËÁ½»¹·´´³³²²²²²³³´´³²²±±±±±±±±¯¯¯¯¯¯¯¯¯­¬­¯¯®­¬¬®¯¯°¯¯¯°±±±°®­¯¯®®®®¯¯®±²¯°³´±²²²²³´µ¶·¶µµµ¶··¹¸¶¶¶µ²°¥™‡qZA*,BYo‡ž­´º¾¼¼¾¿½ÂÁÀ¿¿ÀÁÂÀÀÀÀÀÁÂÂÂÃÅÆÇÆÅÄÄÅÅÅÅÆÆÆÈÇÆÄÃÂÂÂÇÇÇÇÇÈÈȺ©x`F3   *@]s¤¼ÇÊÍÑÒÒÓÔÕÖ×ØØÕÖ×ØØØ×××××ØÙÚÛÜÜÜÜÜÜÜÜÛÜÜÛÛÛÛÛÛÜÜÝÝÞÞßßÛÛÔëŽnW=,!*CZw‹›¬¼ÅÄÄÃÃÁÀ¾½»»¹¸····²°®­­¬ª¨¤¢Ÿž›™–ŽŽŒŒŠ‹Š†„‚|uommqw~‚„†ˆ‹’”••—˜š £¥¦¨ª¬°´·º»»¾ÂÄÆÉÌÏÎÏÒÔÖ×ØØÙ×˳•wZE3) 1Oy¡ÁÙæéêîîëìïïíîîîîîîîîïïïïïïïïññññññññññññññññòòòóóôôôõõõõôñëçäØÈ»¶¶¶¶µµµ´´´³³±²³´´´´´³³³³²²²²°°°¯¯¯¯¯°®­­®¯®­««««¬¬¬­¬®°±±¯­¬°¯®­­¯°±¯°°¯¯°±°°°°°±²³´µµµµµ¶¶·¹·¶¶¶´±¯¢—„oXA+,BXo‡ž­´º½»»¾¾¼À¿½»»½¿À¿¿¿¿¿ÀÁ¿ÁÂÄÄÃÂÂÃÃÃÃÃÃÄÄÅÄÃÂÁÁÂÂÅÅÅÄÄÄÄļµ¥Žw`H5" *A^u’¦»ÆÉËÌÌÒÒÓÓÔÕÖÖÖÖÖÖÖÕÕÕÖÕÖÖ×ÙÚÛÚÚÚÚÙÙÙÙÙÙÙÙØØØØààßÞÝÜÛÛÛÛÔªnW<, !#$##%'*((*+,3;O`uƒ‹•¡ª««¬«ª§¥£¡ Ÿœœœœ•“‘‹ŒŠ‡…„‚|xwwutsrrqqomjgd`afnxƒ–šŸ£¨«¬¬«±²´¶¹»½¾ÄÅÇÊÌÏÐÑÒÕØÙÚÜßáÞÞàáâããâæä×¾ž|\E1&/Lwž¿ØæéêîîëìïïíïïïïïïïïððððððððññññññññññññññññòòòóóôôôõõõõõñìèãÖĶ²´·¸··¶¶¶µµµ²³´µ¶¶¶¶µµ´´³³²²²²±±°°¯¯±¯­­­¬ª¨©¨§¥¥¦§¨£¥§©©§¥¤ª©¨§¨©«¬®­®¯¯®®¯±±±±²³µµ²³³´µµµµ¶µ³³³²°­¦š†oX@* *@Wn‡ž®¶¼¿½½ÀÀ¾Á¿½¼¼½¿Á¼¼»»¼½¾¾¿ÀÂÃÄÃÂÁÃÃÃÃÃÃÃÃÃÃÂÂÃÄÅÆÄÄÄÄÄÃÃÿ¸§ybI6!'?_wŽ¢·ÃÇËÌËÐÐÑÑÒÓÓÓÔÔÓÒÒÑÑÑÓÓÓÓÔÕ×ØÖÖÖÕÕÔÔÓØØ××ÖÖÕÕÙÙØ×ÕÔÓÓØ×줉mX;- !!!""###'(()*+,,,-./123468;;;<>@EBCFHHMS^fr{‚Š‘Šˆ†…„‚~~~ywutsspnomjhgeb_`_][YWVUTSRQNJIJU`q‚‘žª±»½ÁÅÇÈÈÇÍÍÏÑÓÔÖ×ÞÞÞßààááäåççççèêçèéêêêééèçÜÄ¥‚`I/$,Jtœ½×åéêîîëìïïíïïïïïïïïððððððððññññññññññññññññòòòóóôôôõõõöõòíéâÕö³¶º½¸¸¸¸··¶¶´µ¶······¶¶µ´´³³´´³³²±±°²°®­«¨£Ÿ ž›™™š›œš›œžœ›¡¡¡¡¢£¤¥§¤¥¨¨¦§©®­­®®°±²°±²´´µ´´µ´³³´³±¯¨œ‡qYB,)?Vm…œ«·½À¿¾Á¿ÁÀ¾¾¾¾ÀÁ¾¾¾¾¾¿ÀÀÀÁÃÄÄÄÃÂÄÄÃÃÃÂÂÂÂÂÃÃÄÆÈÈÃÄÄÄÄÄÄÄž¬“zbH5  &=\tŒŸµÂÊÏÐÏÏÏÏÐÐÑÑÑÓÒÐÏÎÍÍÍÐÐÏÏÐÐÑÒÐÐÏÏÎÍÍÌÎÎÎÍÌËËËÉÉÉÉÉÉÉÉÈƼª–‚kZB6,)(')+**+,-/1244556778<<=?@BCCCDEGIKLMMORSSTWY^[\acbdhnnquutuzwwvuspnmmkjhfeeeb`]\\[YWTQOMLKHFHGFCA>=<;9997348IZt¡²ÂÌÕ×ÙÜÞÞÞÞààáâãääåééèèççææèêëêèçèêêêëììëêêêêàÉ©…aI0$*Hr™»ÖåéêîîëìïïíððððððððññññññññññññññññññññññññòòòóóôôôõõõööóîêâÖÆ»¸»¾Àº¹¹¹¸¸¸···¸¹¹¹¸¸¸¸·¶µ´´³¶¶µµ´³²²²°¯­©£›–Œ‰†…†ˆŠŠ‹‹ŒŒ‘’“”••••’“˜™–—›žŸ ¡£¤¦¨¨¨¨¨©¨¨©ªª¨¦’€lYE2&+@Uj—¦²¸¼ºº¼½»¼¼¼¼¼¼¼¼¾¾½½¾¿ÀÀ½¾¿ÁÁÁÀ¿ÀÀÀ¿¿¾¾¾ÀÀ¿¿ÀÁÂÿ¿ÀÀÁÁÂÂÀ¹¨xaH5!,@Zo…—¬¹ÀÅÆÃÂÂÂÃÃÃÄÄÅÄÂÀ¿¾¾¿ÀÀ¿¾¾¾¾¿½½¼»º¹¹¸¶¶µ´´³²²±±±±±±±±®«¢“…xj]SJCCDCDGDDEFHJLMPPQQRSTTVWXZ\^__`abdfhjkilnpqruwywy~€~}€wonjb]]^][XVUTSRQOMKJIIHFDCCB?=;975542010/-+*(('%%'%!%,>Tu”¬ÁÔàããäåææççèçççççççééèèççççæçèèææçèèééêêééèëìã̬‡aH2')Fp˜ºÕåéêîîëìïïíððððððððññññññññññññññññññññññññòòòóóôôôõõõööóîêæÛ̾¿ÁÁººº¹¹¹¸¸¹¹ºººº¹¸¹¸¸·¶µ´´¸··¶µ´³³±±¯­¨ —}xutuxzxwwwxyz{{}‚‚€†‚ƒˆŠ‡ˆ‹ŠŠ‹ŒŽŽ‘“””““–••–˜˜—•ƒteVG8."!   -AUi~“¡¬²µ´³¶·µ··¸¸¸¸··¶¶µµ¶·¸¸¸¹»¼¼¼»º»»ºº¹¹¸¸¼»ºººº»»¹¹º»¼½¾¾µ®ŸŠu`H6&(4DZlz‹ž©®°¯«­­®®®®®¯°¯¬ª¨¨¨¨©¨§¦¥¥¥¥¤£¢¢¡ ŸŸžžœ›šš™›š™—–”“’™–Žxqi`d]XZ[[\^__`acehikklmnooppqrtvxzz{{}‚„†‡†ˆ‹Œ’””’”šœ™––}nh`SHDFDA><;;;8753100//-*))(&$(&$##"  9Qu–°ÆÚèèèçççèéêëëëêééèèêêêêêêêêçèêêééêìéêêëëëêêêëäÍ­ˆcI1%(Eo—¹ÕäêêîîëìïïíððððððððññññññññññññññññññññññññòòòóóôôôõõõööôïëéßÑÇÃÂÁÀºº»»º¹¹¸¸º¼½½¼º¸¹¹¸¸¸···¸·¶µµµµ¶µ¶³¬¥‘…|pebbabeffghiijkjklmopqrrrstvwxyuvwxz{||~~~€€ƒ„…††…ƒ‚~uldYKB@544310//20./11-*,,,++******))(('%&&&&&''#""!!""#"!  !"#)5GWfwŠ— ¢¥¥££¦¨§§§§§§§§¨¨¨¨¨¨¨¨¨©¬­®­«ª««««««««©©©ªª««¬ª«¬­­¬«ª¥Ÿ{l`O?1& " " !!!" !#$$$#"'''''&&&&&'()*++++,,------...///225:BO]et}Š’”•—™˜˜˜——–––˜—–•“’‘‘““‘ŽŽ‹‹‹ŠŠŠ‰‰ˆ‡†…ƒ‚€~}|{{{wusoijniorqqtvuyyz{}‚€ƒ…†‡‡‡ˆŠŽŽ’”————˜š›œžž ¢¤¦§¨¬¨­¯­³³§˜‡rbTD72))))((''!!!!!!!!5Vv”µÌÛêæçèééééèééééééééëêêééèèçêêêêêêêêêêêêêêêêìéæÔ¯ŒjK8%$@i’¸ÖçìëìíîîîîíïïïïïïïïïððññððïðððññòòòòòòòòòòòñññòòóóóôóôõöôðíçàÔÊÅÅÈË¿¿¿¿¾½¼¼¹»¼¾¾¼»¹»»ººº¹¹¹¸¸·¶µ¶¶¶µ¶³«¤›ŽpcWSRQRTRSSTUVVWXYZ[\]^_aabdefghefghikklmmmnnnoonopqqponpjeb\SMLGGGFFEDCECBBDC@>@???>>==>===<<;;;:::::::9988889987655678?GR[akw€’’’•””””””””••••••••“”—˜™˜–•””””””””””•••–––•–————–••ƒsiaTGA83575587888999:99:;;;;;====<<<<=>>??@@ADDDEEFFFFGGGHHHIFHKOT[bgjq{€‚‚ƒ…~~~}}}||}||zyxwvxxvuttttqqpponnnllkjhgffeeddcbaa`^^`bdjrxˆŠŒ’‘”••–˜šœžŸŸ¡¢£¤¥¢¤§¨¨©«­°°°±±³´µµ¶·¹»½¾¾ÅÁÄÆÂÇƹ¢Žt_K7( 3Uu“´ËÚéæçèééééèééééééééêêéééééèêêêêêêêêêêêêêêêêìéçÕ°kL9%$@h‘·ÕæëëìíîîîîíïïïïïïïïïððññððïðððññòòòòòòòòòòòñññòòóóóôóôõöôðíçàÖÍÈÈËÎÂÂÂÂÁ¿¾½»¼¾¿¿¾¼»½½¼¼¼»»»º¹¸·····¶¶²ª£˜ˆzcTF@?>>?@@ABBCDDDDEFGHIJKLMNOPQQPQRSTUVVWWWXXXYY[[\]]\\[\Z[^_[[^[[[\\[[ZYXWXXXUSTTTTSSSSSSRRRQQQQQQPOONNNNNNNNNNLLKJJKKLOSY]_dkpy{||||}~~~~~~~~}~€€}}}}}}}}~~~~~€€~~zqgc`YRQLIKMMMPPPPPQQRRRRRRRSTTUUUUUUUUXXXXXYYY]]^^^___aaaabbbc_aceeecbadhjihhifeeeddddccba`^^]^]\[ZZZZXWWVUTSSRQQPNMMLLLKJJIHHCACJR\jw‚Ž›¡¥«­¬®®¯°±³µ¶ºº¹º»½¿À¼¾ÀÁÁÂÄÆÈÈÈÈÉÊËÌËÌÍÎÐÑÒÓÙÕØØÔÖÔÆ­–w]E-1St‘²ÊÙèççèéééééééééééééééééêêêêêêêêêêêêêêêêêêêêìéèÖ±mM9&%@g´ÓäêëìíîîîîíïïïïïïïïïððññððïðððññòòòòòòòòòòòñññòòóóóôóôõöôðíèâÚÒÎÎÑÓÂÂÂÁÀ¾½¼¾¾¿ÀÀ¿¾¾¾¾½½½¼¼¼»º¹¹¸¸¹¹··²ª¡–ƒr[J920/./11223344566789::99:;<==>>??@ABCCDEEEFFFGIJJKKKKKIJPY^aflnopqrqqpnmmmmkjiiiiiihhhhhhggggggfeeccba``aaaa``^]]]\\\\^^__^_acefgggghiiiiiiiiijjjjjjjjhijkkkjjjjjjjjjjiiiiiiiiiiijjiiihe_\\^^\^^_accegeeefffgghhfffhiklllmmmmmqqqqqpppssstttuuwwwxxyyyzzyxtnf`^\XUSRQPQQQQPPOONMMLKJIIIHGFFFFFDCCA@?>>>=<<;:99777665551.09EUj{‰™ª´º¾À¿ÀÀÁÂÃÅÆÇÍËÊÉÊÍÐÑÏÐÒÓÒÓÔÖ×ÖÖÖ×ØÙÙÙÙÚÛÜÝÞÞáÝàáÜÞÛͲšz]D-/Qr±ÈØççèééêêééêêêêêêêêèèééêëëëëëëëëëëëëëëëëëëëìêéØ´‘oO:'$?eŒ±ÐâéëìíîîîîíïïïïïïïïïððññððïðððññòòòòòòòòòòòñññòòóóóôóôõöôðíêæàÚÖÖØÚÂÂÂÂÁ¿¾½ÁÁÁÂÂÁÁÁ¾¾¾½½½¼¼½¼»ºººº»¸·±©¡”~lUB.&$#""!!!!""""''())**+))*++,,-../001124455666655566788:=FS\cmwƒ„†ˆ‰‰‡‡„„…„ƒ€€€€€€€€€}}|{zyxxvwxyyxwvttttsrrqsoic]WROPPOPQQQQQQQQQQQQRRRRRRRRRRSTTTTTSSSSSSSSSSSRRRRRRRRRRRRRVRPQV\afmsxzz{~~~~~€€€‚ƒ………††‡‡‡‹‹ŠŠŠŠŠ‰ŒŒŒŒŽŽ‘‘‘’’–”‘Œ…zmd[SIB?=<:999888775543321110//..//--,+*))(((''&%%$""!!!! # ",MZgw…”•˜š›š˜—•—˜—•“““’’’’““““‘‘’’’’““ŽŽŒŒŒ‹ŒŽŽŒ‹ŠŠŠŠŠˆ‡†‚zof]UKE?>==?@?=>>>>>>>>????????@@@@AABB>>>>>>>>@@@@????@??>>??@B?@GQ[gq{…ŽŽ’””•••–––——————˜™™™™š››œžžžžŸŸŸŸ¢¢¢££¤¤¤¥¦¦¦§§§§«¨¢œ’‚pdUH8.**(&%%%%$$##!!! "6Po…¡¶Ì×ÛÝÝÜÜÜÜÜÝÞàáââáàáâäåáâäãâáãäâááàááââããããääääàÝâåáäáÒµ|_F.-Op°ÈØçèèéêëëêêëëëëëëëëêêêêëëëëìììììììììììììììììëëܸ–sS<(!:_…«ÌáéëìíîîîîíïïïïïïïïïððññððïðððññòòòòòòòòòòòñññòòóóóôóôõöôðíìëçäáßßÞÅÅÆÇÇÇÇÆÅÅÄÄÄÄÅÅÁÁÁÀÀÀ¿¿¿¿¾½½½½½¹¶±ª¢”{eN8 !#)7I[m„•¤¦¨ª«©§¥¥¨©¨¥££¥£££¤¤¥¥¥¢£££¤¤¥¥¡¡¡¡¡¡¡¡Ÿ ¢££¢ ŸžŸŸŸž›š‘†wi^QC9/-+,./-+,,,,,,,,-------------.//,,,,,,,,..--,,,+-,+**+,-,+0=M\o~‹™¤¤¢¤§§©©©ªªª««ª«¬¬­­¬¬­®®¯°±²²°±±²²³´´µµ¶¶····¸¸¸¹¹¹ºº»¸´­ ‹raN>* 3Oo‡£¸ÏÛÝßßßÝÝÝÝÞßàááááâââããàâãâààáâááàßßààáààààààààßÜáäàâÞ϶ž~bH0-Op±ÉÙèèéêêëëêêëëëëëëëëìëëëëëêêìììììììììììììììììëìݺ˜uU=)7\ƒ©ËâêëìíîîîîíïïïïïïïïïððññððïðððññòòòòòòòòòòòñññòòóóóôóôõöôðíêéçäáÞÜÛÃÄÅÇÇÈÇÇÆÆÅÄÄÅÆÆÃÃÃÂÂÂÁÁÀ¿¾¾½½¾¾¹¶±ª£”zdN7#3H]s¢´¶¹»º¹¶´¶¸º¹µ³´¶³³´´µµ¶¶³³´´µµ¶¶³³³´´´´´¯±³´´³±¯°°±±°®¬«¦˜‚n[H3&%7J^u‡œ¬¸¸´·ºººººº»»¼¼º»½¾¿¾½¼ÀÁÁÂÃÄÅÅÂÂÃÄÅÆÇÇÅÆÆÆÇÇÇÈÇÇÈÈÉÉÉÉÉÈÅ¿°–xcK9# 3Oo†£¹ÑÜßàááÞÞÞÞÞßáááâããäããâãåååãâãäåäããããääâââááááàãáæèãåáÑ·Ÿ€dK3!.Oq±ÉÙèèéêëëëëêëëëëëëëëíììëëêêéìììììììììììììììììëíÞ»™vV=)6Z¨ËâëëìíîîîîíïïïïïïïïïððññððïðððññòòòòòòòòòòòñññòòóóóôóôõöôðíèçæãàÝÚØÆÇÈÈÉÈÈÇÆÆÆÆÆÆÆÆÅÄÃÁÁÁÂÃÁÁÁÁÀ½»º¾·¶±£—ƒhM9#!2Iax’¦¶¼¿¾¾ÀÁ¿ÁÁÀ¿¾½½¼¾½½½¾¿ÁÃÂÁÀ¾¾¾¿À¾¾¾¾¿¿ÀÀ»¼½¾¾½¼»ººº¼¼»·´«ž‰s^H1#/E_{¡¶ÁÄÉÈÆËÄÅÅÆÇÈÈÉÈÇÅÆÈÉÉÈÊÊÉÊÊËÌÍÌÌÌÌÌÌÌÌÎÑÔÑÍÌÏÓÍÎÏÏÍÌÍÎÍÏͱš|eP5"1MoˆŸ¶ÏÜßàááÝÞßààßÞÝááááááááãããââáááâãäãââäæáâääãáÞÜàÝãåâåâÓ½œiK1!+Gm¬ÆÛåéêêëëêêéëëëëëëëëëëëëëëëëíììëëììíììììììììíééݾŸ|YC+ 4V~¤ÅÞìëíïïîîîïïïïïïïïïòññððïïîñððïïððññññññññññññòòóóóóõôòóöôîíéäàÝÚÖÓÈÉÉÊÊÉÈÈÈÈÈÈÈÈÈÈÇÆÆÅÄÄÅÅÃÃÃÃÁ¿½¼¾·¶±£—ƒhN:$!2Iay“¦¸¾ÂÁÁÃÃÀÃÂÂÁÁÀ¿¿ÀÀÀÀÀÂÄÅÅÄÂÁÁÁÂÃÀÀÁÁÁÂÂÂÃÄÅÆÆÅÄÃÀ¿¿ÀÁÀ¼¹±¢Œv_G0!/E_{£¸ÃÆËÊÈÎÉÊÊËÌÍÍÍÌÊÉÉËÍÌÌÏÏÎÎÏÏÐÐÎÎÎÎÎÎÎÎÏÒÓÑÍÌÐÕÒÓÔÓÑÐÑÓÎÐÎò›}fP6#1MnˆžµÎÛÞßààÞßàááàßÞááááááááãããââáááâããâááãåáâââáàÞÝàÝâäàäâÔ¾œhI0 +GmŽ«ÆÛåéêêëëêêéëëëëëëëëëëëëëëëëíììëëììíììììììììîëëßÁ¡~[D+2S{¡ÃÜêëíïïîíîïïïïïïïïïñðððððïïñððïïððññññññññññññòòòóóóõôòóöóîìéãßÛ×ÒÏÌÌÌÌËÊÉÈÉÉÉÉÉÉÉÉÉÉÉÉÉÈÇÇÅÅÅÄÃÂÀ¿¿¸·²£—ƒhO;$!2Iay“§¹ÀÅÅÅÆÅÂÄÄÄÃÃÃÃÃÄÄÃÃÄÅÇÈÇÇÆÅÄÄÅÅÃÃÄÄÅÅÅÅÄÅÅÆÆÅÅÄÃÃÂÃÄÃÀ½¶§x`G/ /F_{¦»ÆÈÎÍÊÐÌÍÍÎÏÐÐÑÐÎÍÍÏÑÑÐÒÒÒÑÑÑÑÑÑÑÑÑÑÑÑÑÒÓÓÑÎÎÒ×ÕÖ×ÖÔÓÔÕÐÒÏÅ´œhQ6#1Ln‡´ÍÚÝÞßßàáââââáàâââáááááããââââáááââáßßáãááààßÞÝÝáÝàáÞâáÔ¾œ}fG/ +GmŽ«ÆÛæéêêëëêêéëëëëëëëëëëëëëëëëíììëëììíììììììììïìíáã€]E,/PwžÀÚèëíïïîíîïïïïïïïïïïïïïððððððïïïïððññññññññññññòòòóòôôñòõóîîêäßÚÕÏËÎÎÎÎÍËÊÉÊÊÊÊÊÊÊÊÉÊËÌÌÊÈÇÆÆÅÅÄÃÂÁÁ¹¸³¥˜„iQ<%!2Jbz”¨ºÂÈÈÈÈÆÂÄÄÄÅÅÅÅÅÆÆÆÆÇÇÈÈÈÈÇÇÆÆÆÆÅÅÅÆÆÇÇÇÃÃÃÃÃÃÃÃÄÃÂÂÃÂÀ½·¨‘yaH/    .F`|§¼ÇÉÏÎËÑÌÌÍÍÎÏÐÐÓÑÐÐÒÔÓÓÒÒÒÑÑÐÏÎÓÓÓÓÓÓÓÓÔÔÓÑÏÑÕØÕÖÖÕÓÒÒÓÒÔÑǶž€iR7$0Lm†žµÎÛÞßààâããããããâãââââáááââââââââàáâàÞÞàáààÞÝÝÝÝÞáÜßàÜááÔ¿œ}dF.!+GlŒ©ÅÚåéêêëëêêéëëëëëëëëëëëëëëëëíììëëììíììììììììíëíâÄ¥_F- .Nt›¾ÙèêìîïíííïîîîîîîîîîîîïððññððïîîïððððððððððððñññòòòòôóñòõóîïëæàÚÓÍÈÐÐÐÏÎÍËÊÊÊÊÊÊÊÊÊÊÊÌÌÌÊÉÈÆÆÅÄÃÃÃÃü»µ§š…kS>&!2Jb{•©»ÃÉÉÉÊÇÃÅÅÅÅÅÆÆÆÆÇÇÈÈÈÈÈÈÈÈÈÇÇÆÆÅÅÆÆÆÇÇÇÇÇÇÇÇÇÇÇÅÄÂÂÃÃÁ¿µ¦xaI1!  .F`|‘¦»ÆÉÎÍËÐÌÌÍÎÏÏÐÐÔÒÐÑÓÔÔÓÒÒÓÓÒÑÏÎÓÓÓÓÓÓÓÓÕÕÔÓÒÔ×ÙÕÖ×ÕÓÑÒÓÓÕÓÈ· ‚kS8%0Kl… ·ÐÝàáââääããããäääããââáááââââââââáááàÞÝßàßßÞÝÝÝÝÞáÜßàÜááÔ¿œ}eF.!*EjŠ§ÃÙäéêêëëêêéëëëëëëëëëëëëëëëëíììëëììíìììììììììêìâŦ‚_H. -Lr™¼ØèêìîîíìíîîîîîîîîîííîîïððððïîîîîïððððððððððððñññòòòôóñòôòíîêäÞØÐÈÃÏÏÐÏÏÎÌÌËËËËËËËËËËÌÌËÊÉÉÇÇÅÅÄÄÄÅÆ¿¾¸©œ‡mU?'!2Jc{–ª¾ÅÊÊÊËÊÆÇÇÇÇÇÆÆÆÇÈÈÉÉÉÈÈÈÈÉÉÈÇÆÆÆÆÆÆÇÇÈÈÉÉÈÇÇÈÉÉÉÇÅÅÆÆÄ´¦ybJ3#   .F`}‘¦»ÆÈÎÍÊÐÏÏÐÐÑÒÓÓÔÒÐÑÓÔÔÓÔÕÖ×ÖÕÔÒÔÔÔÔÔÔÔÔÕÕÕÕÖ×ØÙØÙÙØÕÓÓÔÔÖÓȸ ‚kT9%/Jk„¡¸ÑÞàâããåäããããäåäääãââááááââââããáââàÞÝÞàÞÞÞÞÞÞÞÞáÝàáÞâáÔ¿~gH0"(Cg‡¤Á×ãéêêëëêêéëëëëëëëëëëëëëëëëíììëëììíììììììììëéíãǧƒ`I/!,Jo–º×çéëîîíìíîííííííííîîîîïïïïïïîîîîïïïïïïïïïïïðððñññññóòðñôòíëçâÛÕÍÄ¿ÎÎÏÏÏÎÎÍÌÌÌÌÌÌÌÌÎÍÌËËËËËÉÉÇÆÆÆÇÈÉÂÀº«ž‰oV@'!2Jc|–ªÂÈÌËËÍÍÊËËÊÉÉÈÈÇÉÉÊËËÊÉÈÉÉÊÊÊÉÇÆÇÇÇÈÈÈÉÉÈÇÆÅÅÆÇÈËÉÆÆÇÇÆÄ·¨’{dK4$ .F`}’¦»ÇÉÎÍËÑÐÐÑÒÒÓÔÔÔÒÑÑÓÕÕÔÔÖØÙÚÙ×ÖÕÕÕÕÕÕÕÕÕÕÖØÚÚÙØÙÚÚÙÖÔÔÕÔÖÓȸ ‚kT:&/Jk„ ·ÐÝàáââåäãââãäåååäãââáááááââãããâããáßÞßàÝÞßààßÞÝàÝâäàäâÔ¿€iK2"'Ae…¢¾Õáéêêëëêêéëëëëëëëëëëëëëëëëíììëëììíììììììììëêîåɪ†bK0!*Gk’·ÔåéëíîìììîííííííííïïîîîîîíïîîííîîïïïïïïïïïïïðððññññóòðñôòíëèãÝÖÎÅ¿ÍÍÎÏÏÏÎÎÎÎÎÎÎÎÎÎÐÏÍÌËÌÍÎËÊÉÈÇÈÉÊËļ­Ÿ‹pWA(!2Jc|—«ÅËÎÌÌÏÐÎÎÍÍÌËÊÉÉÊËÌÍÍÌÊÉÊÊËÌËÊÉÇÈÈÈÉÉÊÊÊËÊÈÈÈÈÊËÊÈÅÅÆÆÅú¬•}eL4$  .Fa}’§¼ÇÊÏÎÌÒÏÏÐÑÑÒÓÓÕÓÒÒÔÖÕÕÓÕ×ÙÚÙ×ÖÖÖÖÖÖÖÖÖÔÕ×ÚÜÜÙ×ØÙÙ×ÔÒÓÔÓÕÓÈ· ‚kU:&/IjƒŸ¶ÏÜßàááåäâááâäåæåääãâáááááââããããääâßÞßáÜÞàââàÞÝàÝãåâåâÓ¿ž‚kM3#&@dƒ ½ÔàéêêëëêêéëëëëëëëëëëëëëëëëíììëëììíìììììììììëðçˬˆdK0!(Ei´ÒäéëííìììíííííííííðïïîîííìïîîííîîïïïïïïïïïïïïððññññóòðñôòìîëæáÚÒÉÃÐÑÑÑÐÐÒÔÒÒÒÑÑÐÐÏÐÐÐÏÎÌËÊÊÈÇÈÉÊÉÈÈÉø¯¢‰qZD*"3J`x”ª¿ÈÏÏÎÏÐÎÏÎÍÌÌÌÌÌÍÍÌËËËÌÌÌÌÊÉÉÊÌÌÎÍËÊÊËÍÎÌÌËËËÌÍÍËËÊÊÈÆÅĺ®˜~fP7$  /E^z¨·ÆËËÍÐÐÐÐÑÓÓÓÓÓÒÒÑÑÒÓÕÖÒÓÕÖ×ØØØÖ×ØØÖÖ×Ø×××ØØÙÙÚÙÙÙØ×ÖÕÔÓÕÓʼ¥…lT>%0Hf‡¡¶ÏÝâääãåääããääåäääããââââââââââââááààááâààààààààßàßÞàâÝÕÀ§…hN5!%=`ƒ¡¼ÔäæçèééééèëëëëëëëëêêêëëìììëëëëëëëëììììììììëííåЫƒgL1"$?fŽ±ÏâæìîìëîïíííííííííîîîîîîîîííííííííïïïïïïïïïïïððñññòòòññððððìæàÙÑÈÃÐÑÒÑÐÐÒÔÒÒÒÑÑÑÐÐÐÐÐÐÏÎÍÌÌÊÉÉËËÊÈÈÉø¯£‹r[D*"3J`y•ªÀÉÐÐÏÐÑÏÐÏÎÍÍÍÍÍÌÌÌÌÍÎÏÐÎÍÌËËÌÍÎÍÌËÊÊËÌÍÍÌÌÌÌÌÍÍËËËÊÉÇÆź¯™~gP7$  /D]z©¹ÈÍÌÎÑÒÐÑÒÓÓÓÓÓÓÒÒÒÓÔÖ×ÕÕÖ×××ÖÖÕ×Ø×ÖÕÖØÖ×××ØØÙÙÙÙØ×ÖÕÕÕÕÖÔ̾§‡nT>&0Hf‡ ¶ÏÝâååäåääããääåååååääããâââââââââáààààáâßßßßßßßßàáàßâãßר†jP7#%<_‚ »ÔãæçèééééèëëëëëëëëêêêëëëììëëëëëëëëììììììììëíìåЬ„hM2"$>e°ÎáæìîìëîïíííííííííîîîîîîîîííííííííïïïïïïïïïïïðððññòòòññðððïìçâÛÓÊÄÐÒÒÒÐÑÓÕÓÓÒÒÒÑÑÑÐÑÑÒÒÑÐÐÏÍÌÌÍÍËÉÈÉű¥u\E+"3Jay•«ÀÉÐÐÏÑÑÏÑÐÏÏÎÎÏÏÌÌÌÍÎÐÑÒÏÏÎÎÎÎÏÏÍÌËÊÊËÌÍÎÍÍÍÍÍÍÍÌÌÌËÊÈÇƼ°šgQ8%  .D]zªºÉÎÎÐÒÒÑÑÒÓÓÓÓÒÔÓÓÔÔÖ×Ø×××××ÖÕÔÕÖ××ÕÕÖ×ÖÖÖ×××ØØÚÙ×ÕÔÕÕÖÖØÖÎÀ¨‰pU?&0Hf‡ŸµÎÝãæçæååääääååççææååååããããããããááààààááßßßßßßßßáãâáãåàÙĪˆkR8$$;^€ž¹ÓãæçèééééèëëëëëëëëêêêêëëëìëëëëëëëëìììììììììììåÑ®…iN2##Yy‘«ÄÓÙàÞÙÝÞßáàßßàâáááâââããáááááááááâãâáàáãàààáááââáááàààßßáÜÞÚÉ·~hJ2"$<^z–¯ÍÞäæççèèèééêêêëêêééêêëëëëëëëëëééééééééèèèèèèèèêéèéëëéç×Àž}aF.,JjŠ¨ÃÕâåèéèçèéèèèèèèèèèèèèèèèèééééêêêëééééééééêììçÚÀ˜y[?+!'EiŽ°ÇÜäéééëêæìêééêéæäãáÞÝÛÙÕÒÍÊÅÁ½¸³®§¢žž§»ÍßäéëééêìììììììììííëåÖÀ©šÝÜÜÜÜÝÞÞÝÝÞÞÞßßßßÞÞÞÝÝÝÝÜÜÜÜÛÛÚÚÜÖÖÒÄ·¡†kT7&'2Eby”°ÅÓÝÜÚÞßÜáàààßßÞÞàààßßÞÞÞàààâäãáÞßßàáâãäääãããâââáßßßßßßßßÖ˵™~dG1(>YyªÃÓÚáàÛàÞàááààáãââââãããäââââââââãäääãããäáááâââââââââááààâÞàÝ̺Ÿ€hK2"$;]x•¯ÍÞäçèçèèèééêêêëêêééêêëëëëëëëëëêêêêêêêêéééééééééèèéêêéçØ cH/+Iiˆ§ÃÔâåèéèçèéèèèèèèèèèèèèèèèèèèéééêêêééééééééêììçÛÁ™y\@,"%ChŽ°ÇÛãéêêêçãäâàÞÝÚÖÓÐÍÉÆÿº·±­¨¢—‘Š…ƒ’¬Ã×àéêèéëëëëëëëëëëïîëáй£•ÝÝÜÜÝÞßàÝÝÝÞÞÞßßßßßßÞÞÞÝÞÞÝÝÜÜÜÜÝ××ÓŸ¢‡mT7%'2Eby”°ÄÓÞÝÜààÜßßßßßÞÞÞàààßßÞÞÞáàáâäãáÞàááâãäååååäääãããßßßßßßßßØÍ·›€eH2(=Xx§ÀÑÚããßäßáââááâäâãããääääääääääääååääåååäãããâââââääããââââåáäáн¢ƒjL3##:\w•¯ÌÝäçèèèèèééêêêëêêééêêëëëëëëëëëêêêêêêêêééééééééèçæçééçåÚÄ£‚eI0*Hg‡¦ÂÔâåèéèçèéèèèèèèèèèèèèèèèèèèèéééêêééééééééêììçÛÁš{]A-#&Beˆ¨¼ÒÚààßÞÚÕÓÐÌÈÅÀ»·²®©¥¡œ˜”ŽŠ„zuplkfa`fzšµÏÜçéçéëêëëëëëëëëðîéÝ˶£˜ÝÝÝÝÞßàáÝÝÝÞÞßßßàààßßßÞÞßßÞÞÞÝÝÝÞØØÔƹ¤ˆmU8%&2Ebz”±ÄÔßßÞáâÞßßßßßßßßáàààßßßßâááâããâàâââãääåååååäääããààààààààÚϹœfI3(=Ww¦¿ÑÚääâçàâããâáãäããäääåååååååååååæåääæçæääääãããââååäääãããçãçäÓÀ¤„jM4#"9Zv”®ÌÝäçéèèèèééêêêëêêééêêëëëëëëëëëëëëëëëëëêêêêêêêêçææçèéçåÛÆ¥„gK0*Gf…¥ÂÔâåèéèçèéèèèèèèèèèèèèèèèèçèèèéééééééééééééììèÜ›{^B-#)Fhˆ£´ÂÉÎÍËÉÄ¿¼¸´¯«¥Ÿ›–’Œ‡ƒzwplfb^ZVTOKGGPg¬ÇØæèæêëéêêêêêêêêïíèÛɵ¥œÝÝÝÝÞàáâÞßßßàààáááàààßßßààßßÞÞÞÞßÙÙÕǺ¤‰nU8%%1Eb{•²ÅÕááàãäßààààááááââââáááàåãááãäãâããããããääåååäääããááááááááÜѺžƒgJ4(;6314?[„¦ÁÕæçåêëèêêêêêêêêëìèÜÉ´¤›ÝÝÝÞßàââààáááâââáááàààßßàààßßßÞÞàÚÚÖȺ¥‰oV8%$0Eb{–³ÆÖââáååàâââââââãäääãããââçäââãåååäãããããââåååääãããããããããããÝÑ»žƒhK5'Wr¨¼ÒÞâåææçççææåååæææææææææççèèççæææææææææåååææçççççççççççççäßÖäŠlT7# #7Ux‘¯ÈØçéæêêêêêêêêêêêêêêêêêìëëêêëëìììììììììééééééééééééééééÝȨ‡jM2!%Be„¡¾ÓßåéçæèèåçèèééèççêêêêêéééççèèèéééèèéééèççéëìèàÉ }[E,!! #'*-047;@EKOSX[^fnw€…‚z~wstslge^[WSQNIF>=:741/.&%$"!2MsšµÑâåêêçéèèèèèèèèçêèÜDz¤žÜÝÞßàáááãããâââááååäãâáàßààààààààäÜÛÖǺ¦‹sS9($/A_x”±ÊÖàááãææääääääääææææææææççççççççããäääåååäååææååäååååååååÝÒ½¡†kN8"#>Vr©½ÓÞâåçæçççææåååæææææææææççèèççæææææææææååæææçççççççççççççåàØĤ‰mU8# #7Uw®ÈØçéæêêêêêêêêêêêêêêêêêìëëêêëëìììììììììêêêêêêêêééééééééÞÉ©ˆkN3"%Bd„ ½ÓßåéèçéèæèèéêêêééééèèççææèèèèèèèèèééêêêééäæèåÜÄœz`J0##&(*,/36;>CFIMQUZ^dinrwz}‚…††ƒyoh_YXUOJHC@<:852/*)'%" 0Kq™´ÑâäêêçéèèèèèèèèèêèÜȳ¦ ÝÝßàáááàââââããããäääããâââááááááááäÝÝÙʽ§‹sT9)$/A_x”±ËÖáââäææååååååååææææææææèèèèèèèèäääåååææååææææååååååååååÞÔ¾£ˆmO9#"=Vq©½ÔßãæçæççççææææææææææææççèèèèççææææææææåæææçççççççççççççèçãÚŤˆnV9$"6Tv®ÇØçéæêêêêêêêêêêêêêêêêêìëëêêëëìììììììììêêêêêêêêééééééééàË«ŠmP5$%Ac‚Ÿ¼ÒàæêèèééææçèéêêééêéééèèççêéééééééæçèéêêêéæéêèÝÃœ}_I1$ #&'*-07:>BEJOSY\aeimrvy~„ŠŽ“˜›¡£¡™Ž€o`UKA>;500,*'&%$!.Ip—³ÐáäéêæéèèèèèèèèèêèÜȵ©¤ÞÞßàáááààááâãäååãããäääääââââââââãÝÞÚ˽§‹tT9)$/A_x”±Ë×âäãåççææææææææççççççççææææææææåååæææææååæççæååææææææææàÕÀ¥ŠoQ:#!^|š¸ÎßåéçæèèåèèééééèèêêêêêêêêçççæææååÞÞÝÜÚ×ÕÔÏÊÅ¿¯˜ƒxoidcbaeklpuz~ƒ‰Œ‘”™¡¦¬°´·º½¿ÁÄÇÏÒÖÙÚÜÞáãäÜĤ`I2'.In•¯ÌÝáçèåèææææææææäæåÛÍÁ¼»àááââáààâããääåååæææææåååääääääääçßÞÙʽ©ŽuU:*$/A_x”±ËØäèçèèçèèèèèèèèèèèèèèèèééééééééééèèèçççæççèèççæççççççççãÚƬ’uV>%9RoŽ©¿×äéêéççççèèéééèèèèèèèèèééêêééèèèèèèèèèçççèèèéééééééééééêéæàί•u]>( 2OpŒ«ÅÖæéæëêêêêêêêêêêêêêêêêìëëêêëëìêêêêêêêêêêêêêêêêééééééééäήŽpT9'#=]{˜·ÎÝäçæåççäççèççåäãéèæäâàßÞÝÜÚØÕÓÑÐÆÅÃÀ¼¸µ³±«¦¢—‡|zwvz€„‰‹”˜œ¡¦ª±³·º¼ÀÅÈÎÐÓÔÔÕ×ÙÝàâãããäæèêãË©„aK2',Gl“®ËÝàçèåèæææææææææèçßÒÈÅÅááâââáààããäääåååçççææåååääääääääéáßÙË¿«‘uU;*$/A_x”±ËÙåèèèéçèèèèèèèèèèèèèèèèççççççççêééèèçççæççèèççæççççççççäÛÇ­“vV?%8RoŽ©¿Øåéêéççççèèéééèèèèèèèèèééêêééèèèèèèèèèçççèèéééééééééééêêéæàϱ˜v]?( 2NpŒªÄÖæéçëêêêêêêêêêêêêêêêêìëëêêëëìêêêêêêêêééééééééééééééééãήpS9'#<\z˜·ÍÝãçåäææãäääãâàßÞÝÛØÕÑÍÊÉÈÆÿº¶³±­«¨¥ ›—”•ŽŠˆwsvƒ—œ¡§«®³·»¿ÄÇÍÏÒÓÕØÜßâäååäåæèæèêêèçèéäèâ̪†dN2'+Ek‘®ËÜàæèåèææææææææçééáÖÍËÌßßààààààááâãääääääääääääåäãâãäæçèçâÚÑÀ¥uV<*!/CZu•­ÇÙçæäçéæççççççççèèèèèèèèéèèççèèéééééééééèèèèèèèèèèèèèèèèãÜɯ“uWA'!9RoŽ¬ÃÜçéêêéèèèèèêëëééééééééééééééééééééééééèèèèèèèèêêêêêêêêêêéçãÒ±•xZ@,.Pl‹¨ÂÔæêçêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêééééééééééèèèçççãέpU;+";\z•²É×ÞâàààÛÓÖÕÔÑÏÍÌËÃÁ¾»·³°¯ª§£¡Ÿœ˜–Ž‹‡‚~{zrpnkfenz‚‘¡ª±·»»ÂÆËÏÒÕØÛßßàâãåæçéèèççèèéèèèèèèèèæåãЪ‡gI6)(DmŽ­ÂØâãåççççççççççèçåáÚÒÊÅààááââããââãäääããââââââââäãâââãåæååàÚÑÁ§‘vW<*!/CZv–®ÈÚççåèéæééééééééèèèèèèèèéèèççèèéééééééééèèèèèèèèèèèèèèèèäÜÊ°“vWA' 9QnŽ¬ÃÛçéêêéééèèèéêëééééééééééééééééééééééééééééééééêêêêêêêêêêéèãÒ²–y[A-.OkŠ§ÁÓåêæêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêééééééééëêêêééééæÑ°qT9'$<\w¨¼ÃÊÍÌËËƾ¼»¹¶³°®­¥¤¡™•’‘Œ‰…‚€}ywqoliea^\YVRPOUfwŽŸ³ÀÉÑÖÖ×ÚÞàáâåçäååçèéêêéèèççèèéèèèèèèèèéçæÓ¬‰iK6)(Dn­ÂÙâäåçççççççççççèèåÝÓÉÂááâãäåææããäääãââââââââââãâáàáâäåãâßÙÑ©“vW<* .C[w˜°ÉÛèèæéêçééééééééèèèèèèèèéèèççèèéééééééééèèèèèèèèèèèèèèèèäÝ˱•wXA'8Pn«ÂÛçéêêéëêééèééêééééééééééééééééééééééééêêêêêêêêêêêêêêêêéêéèäÓ³˜{]B..Njˆ¦¿ÒäéæéêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêëëêêééééæѲ’tV9&!%0F`v‡˜¥¬°³±°®ª¤Ÿž›˜”‘Ž‡†ƒ{wtsmjfca^ZXRQNKHEBA@;76:Id|–ªÁÑÚâæåäæèéçççéèéééêêëëéèèççèèéèèèèèèèèéçæÓ­ŠiK6)(En®ÃÙãäåççççççççççæèéçàÔÈÀßàáâäåæçääääãâááääääääääâáàßàáãäââÞÙÑ©“wX=+-BZw™²ÊÛééæêëèççççççççèèèèèèèèéèèççèèéééééééééèèèèèèèèèèèèèèèèåÞ̳–xYB(6OmªÁÚæééêêìëêéééééêêêêêêêêêêêêêêêêêêêêêêêêëëëëëëëëêêêêêêêêééééåÕµ™}_D/-Mh†£½Ðãèåéééééééééééééééééééééééééééééééééêêêêêêêêéééèèèççãϱ“vX<)"$%'+./258>HYiv†‹’”•”’‹ˆ…ƒ€|xtqpnljfb_\ZTQNKIGCA<;97420/+(%&-Bdš¯ÉØàäåäæçéèæääåééèèèèèèéèèççèèéèèèèèèèèçåäÑ«ˆgJ6))Eo¯ÄÚãäåçççççççççççèèåÞÒÇÀÞÞßáâãäåääääãâááääääääääáàßßßáâããâßØÐÁ§‘xY>+,AYv˜²ÊÛééæêëèççççççççèèèèèèèèéèèççèèéééééééééèèèèèèèèèèèèèèèèåßε˜zZB(5MlŒ©ÀÙæèéêêíìëêééééêêêêêêêêêêêêêêêêêêêêêêêêëëëëëëëëêêêêêêêêééééæÖ·›aF0,Keƒ »Îáçåèééééééééééééééééééééééééééééééééêêêêêêêêéééèèèççãϱ“vY<) !"#$&''...037;=ADHKNQUXY`jquwwuyxwwtolkgeb_[WTRPOMJGDA@;85320-+''%$"! #9]|µÐßåççåèéëëéçèèéèèèèçççéèèççèèéèèèèèèèèèæåÒ«ˆhJ6))Fp‘°ÅÛääåççççççççççèèæáÚÐÈÂÝÝÞßàáââããäääãâââââââââââáàßàáâäââÞØÐÁ§‘yZ>,+?Vt–°ÉÛèèæéêçééééééééèèèèèèèèéèèççèèéééééééééèèèèèèèèèèèèèèèèæà϶š{[C)3Lk‹¨¿Ùåèéêêìëëêêêêëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëêêêêêêêêéééêç×¹cG2+Ic€ž¸Ìàæäèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèééééééééêéééèèèçâΰ‘uX<* "%')*2358:=?@HHJMPTWX]`dgimpsswyvspjdeb`_\VSTKJGEA?<;66420.,+(%#""! 5Zxš³ÐáæééèèêììêéêëêêêêéééééèèççèèéèèèèèèèèêèçÔ®‹jM6)*Gq’±ÆÛäååæçççççççççèçåáÚÑÊÅÞÞßßààááââãäääããâââââââââáàààâãäàßÜ×Щ”zZ?,*=Tq“­ÈÚççåèéæééééééééèèèèèèèèéèèççèèéééééééééèèèèèèèèèèèèèèèèæàи›|[C)2Kj‹¨¿ØåèéêêëëêêêëììëëëëëëëëëëëëëëëëëëëëëëëëêêêêêêêêêêêêêêêêèéêêèغŸƒdI3+Hb~œ·ËßåäçèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèèææåååäääÛǪt[C2"!"##%'),/1267:=@CFGNORVZ]`afhjnqtvv}€ƒ†ˆŠŽ’’‹~sj_UOJGGC<9;321/-+*)%%$#" 4Yy–°ÎÞãæççæèêêèçèéêêêêêêëëéèèççèèéèèèèèèèèëéèÕ®‹kM6)*Gq“²ÆÜäååæççççççççççççäÞÕÍÇßßààààààááâãääääääääääääãâáàáâäåÝÝÛÖÑë–z[?,*Uq’«Å×æçåéêçèèèèèèèèèèèèèèèèééééééééêêêêêêêêèèèèèèèèèèèèèèèèçÜк™}aD,0Gf‡¢»ÖåéêëêëëëëëëëëììììììììëëëëëëëëêêêêêêêêììììììììììëëêêêêëéçèèÚ»‚dH2)E^€—µËÚäèèææçèèéêêéèèçæååäèççæåääãçæåäãáàààÞÜÙ×ÕÔÔÐÍËÊÉÈÅú¥Ž~seXQJJJKLORTY[^bfiklmptz~‚„…ˆŠŒ”˜šœžŸ¡¤§ª¬®±³µ¹¼ÀÂÄĺ¥‹t`L<-%1Tr•´ÍÛæçãèæææççèèèèèèèèèèèèèèèèèèèèèèèèèèèèæåÒ«‰jM7*+Gp™®ÊÛÝäæäèèççççèéêæçéêåÙʾßÝÜÞáâáßãââââãäåääåæåäãâãâàßßàâãßÞÚÖÐë•z[?-)=Tq“¬ÂÕääãæèäééééééééççççççççèèèèèèèèééééééééèèèèèèèèèèèèèèèèçÛк˜}aD,0Gf‡¡ºÕäèéêéëëëëëëëëëëëëëëëëììììììììììììììììééééééééëëëêêéééêèæèèÚ»Ÿ…gL6 )G`~•²ÉÚåééååååååääæåäãâààßÝÜÛÚÙ××ÖÖÕÔÒÐÎÍÌÉÇÅ¿½¼»µ²°®®¬©§ wsmfcefhiknrtwy|€„†ˆ‰‹Ž’—›ž¡¡¥¦¨¬¯³µ·»¼¾ÀÃÅÇÈÊËÍÐÓÕ×ÙÕɱ“w_F4'1Tr”³ÌÛæçãèæææççèèèèèèèèèèèèèèèèèèèèèèèèèèèèæåÒ«‰jM7*+Gpš³ÏÞàåçäèèèççèèéêééêéãØɾßÞÝßáââáâââââãäääååååäãâãâáààáâãÝÝÛ×ÑĬ—|\A.(@BCEEHHIKMPRSYUV\adhlosuux||xyxvtrponhgfda_^][ZYWTRPPMLKIGFDD>=;976551/---,*('0C\u¦¸ÊÓÝáßÞáåãäåæææææçæååæçèéççççææææèçççææææççççççççèÜÄ£ƒeH2 1Tr¯ÉØåæäéæææççèèèèèèèèèèèèèèèèèèèèèèèèèèèèæåÒ«‰jM7*-Jtž¸ÓâãèéæéêééééêëìêëêãÙÎÆÃÚÝßßÝÝßâáààààáâãçæäãâãäåâããääããâäåãÜÕζ§’‚uc]^[XWVTRPONMLJHECA@@@><:8764432100/..-,+*))&%%$$###&(1?Pfƒš±ÄÓÕÕÙÛØààààààààââââââââããããããããääääääääææææææææææææææææçÜѼ›eI1".Cbƒ™²ÎÞãæçæççççççççèèèèèèèèååååååååááááááááâááàßÞÝÝÙÙØØØ××××Ø×ÔÏÁ¨’hVI921*//01345599:<=?@AABDFHJLLLMNPSUVWXYZ\^`abddegjlopwrqw|{xwqqmfcd`[\\ZYXVUTPOMLJHFF@?><:8664321/.--('%$""!! )>ZtŽ¨¼ÒÜæêçäçêççèéêéééèçæååæèéëëêêééèèéééèèèèèèèèèéééééÞƦ†hK6 1Tr¯ÉØåæäéæææççèèèèèèèèèèèèèèèèèèèèèèèèèèèèæåÒ«‰jM7*.Ktž»ÖäåèèåèêééééêëìçèçßÓƽºÝÜÜÜÜÝÞßáÝÞãæäãååäãâáàààäåææääåæéåàÝÚÔÊÁ¬£”†|vrponmljihgca^^^^]\ZYXVTRPPNNNLKHFEFFDCA?>=>=;9765579;==;::::::::::::::::;;;;;;;;9999:::;;<=>>>==>>>??@@@=@EKS^ip|‡—¢§§¦§¨¨¨§§¦¦¦¤¤¤¤£¢ Ÿœœ›š™™™˜˜—–••””‘‘Ž‰‰ˆ‡†„„ƒ„‚~xpkrtw{~‚‚„…†ˆŠ‹‘‘’“”–˜™™š›Ÿ¡¢£¤¤¤¥¦§§¨««¬­®°²³µ¶¸¹¹»¾ÁÃÇÉÈõžŠr`J:.$ "7Us®ÃØàçæåçèççèèééèèçèèèèèèèèééééééééééééééééèèèèèèèèçàɧ‡kL2$.Ms‘¯ÇÖâäãéçææååææçççççççççççççççççèèèèèèèèèæäÑ«‰iL7)1NwŸ½×ääèéèëêêêêêêêêìãÔÁ®ž“ŽÜÜÛÛÜÜÝÞàÜÝâåãâäææåäãããäãäæåããäåçåäääâÝÚÑËľ»º¹¸µµ´³²±±°¯­«ª«¬«ª¦¦¥¤£¢¡¡žžž›š˜——–•”“’‘Ž‹ˆ†‡ˆ‰†…‚~xsommquwxyz{}}~€ƒ„„„………†…†ˆŠ‹‹Š‰‹ŒŒŒŽŽ‘‘‘’’“““””••–’Žˆ|wpjd_YVWYYXTTTTTTTTUUUUUUUUUUUUUUUUUUUVVVWWXXYZZYYXYYYZ[[\\Z\`eiloqu{ƒ‰ŒŒŒŒŒŒŒŒ‹‹ŠŠ‡‡‡‡†…„ƒƒ‚‚€~}}|{zzyywvvutsssmmlkjjiijgffdabenv†•™™œž ¢¤¥¦©©ª«¬®¯°²²³µ¶·¸¹º»»¼½½¾¾ÁÁÁÁÂÄÅÆÈÊËËËÍÏÒ×ÙÚØÑÁ¦uaG3%!7Tr­ÂØàçæåçèççèèééèèçèèèèèèèèééééééééééééééééèèèèèèèèèàʧˆlM4$.Ms¯ÇÖâäãèçææååææçççççççççççççççççèèèèèèèèèæåÒ¬‰jL7)1NwŸ½×ääèéèëêêêêêêêêéß̸¥˜‘ŽÜÛÛÛÛÜÝÞàÜÜâåãâãæåäãããääãäååãâäåèèçæåãàÞÚ×ÒÏÎÎÎÍÉÉÈÈÇÆÆÅÅÃÁÁÂÃÂÁ¾¾½½¼»»»¸¸¸¸·µ´³±°°¯­¬¬«ª©¦¤¢£¤¥ ž™“‰}rka^\]^_`abbccdeffhhhiiijjijlnonmmooppqrrstttuuuvvvvwwxyyyyupnnnpqqqqqrssrrrrrrrrrssssssssssssssssuuuvvvwwwwxxxwwvwwxyz{{|z{}}zxonnopqqpooonnmmmkkkjjhgfgffedccb``_^^]\\ZZYYXWVVQQPPONNNOKIJIIQ[n{‰“Ÿ¬µ¶··¹º¼¾¿ÀÃÃÃÃÄÆÇÈËËÌÍÎÏÐÐÑÑÒÒÓÔÕÕÖÖÕÖÖ×ØÙÚÜÝÝÜÝàâåæåáÛË°˜ycG1! 6SqŽ¬ÂØàçæåçèççèèééèèçèèèèèèèèééééééééééééééééèèèèèèèèèáʨ‰mN5$-Ls¯È×ãåãèçææååææçççççççççççççççççèèèèèèèèçæåÓ­ŠjL7)1NwŸ½×ääèéèëêêêêêêêêçÛÉ´£™”’ÛÛÚÚÛÜÝÝßÜÜáäâáãåäããããääâäåäãâãåèèèçæäâáâßÜÛÜÝÜÛØØØ××ÖÖÖ×ÕÓÓÔÕÕÔÑÑÑÑÑÑÑÐÏÏÏÏÎÌËÊÆÆÅÄÃÂÂÁ¿¿½¼»»»»´±«¢•„rgYQJIKJKLKKJKLMNOOOOPPPQQSTTUVVVUWXXYYZZZ[\\\]]]]^^^_____c^\_djs||ˆŽŒŒ‹‹‹‹‹‹‹‹ŒŒŒŒŒŒŒŒ‘‘‘‘‘‘Ž‘‘’”••––••“ˆ~xoh_ZYZYWVVVUUUTTSSSSRQPOMMLLKJJIGGFFEDCCBBA@??>>:::99888943556DTgzŽ®ÁÍÏÍÎÎÐÑÒÓÓÕÕÕÕÖØÙÚÝÝÝÞÞßßàßßàáââããããâââããääåææååçéèèæäßдœzdG0 5RpŽ«ÁØàçæåçèççèèééèèçèèèèèèèèééééééééééééééééèèèèèèèèèáÊ©‰nO6$-Lr¯ÉÙåæäéçææååææçççççççççççççççççèèèèèèèèçææÔ®‹jL7)1NwŸ½×ääèéèëêêêêêêêêçÜ˸© œÛÛÚÚÛÛÜÝßÛÜáäâáãããââââãäâãåäââãäææçæåääääâàáâãâáààààßßßßáßÝÝßààßÝÝÞÞÞÞÞÞÞÞÞÞÝÜÛÚ×××ÖÕÔÔÔÐÑÑÑÑÏÎÍÉļ°ŸˆqbPC768779776678:;9:::;;;;>>==>>?@BBBBBCCCDDDEEEFFGGGGGFFFKGGPZgw†‹•¢ª¬ª¨§¦¦¦¦¦¦¦¦¨¨¨¨¨¨¨¨§§§§§§§§©©©©ªª««©ªªªª©¨§ª«¬­®¯°±°¯®«£”ƒxmaQFCB@=?>>>====<<<<;:9876654333332100//.--,+***(((('''&(##&&(9N`y”§»ÐÛÜÜÜÜÝÝÞÞÞßßßßàáâãäääåååååääååæççèçæååäååæåæææääæèæçæåáÒ´š|eH1 4Rp«ÀØàçæåçèççèèééèèçèèèèèèèèééééééééééééééééèèèèèèèèèáË©ŠoP7$-Kr‘±ËÚçèåéçææååææçççççççççççççççççèèèèèèèèçææÕ®‹jK7)1NwŸ½×ääèéèëêêêêêêêêæÞÑù³±°ÛÚÚÚÚÛÜÝßÛÜáäâáãââáááâããâãääââãäãäååååæççåäåæçæäçæææææååèæäåæççæææææççççèèèèçæåäææååäãããßàáââàÝÛÜÖ;ªtcC3&$&$$''&&%&(*+(()))***+*)((*+,........///0001133321100514@O_u‡™¥µ¿Á¿¼»¿¿¿¿¿¿¿¿ÁÁÁÁÁÁÁÁÀÀÀÀÀÀÀÀÀÀÀÁÁÁÂÂÁÂÂÂÁÀ¿¾ÂÃÄÅÇÈÉÉÇÇÆ·¤Ž~fWC4/,)&**)))(((''('&%$#$$##"! """! .Ebž³ÇÛäâååååææææææææçèéêééééééééæççèéêêêéèççææççåæçæääæèèéëëç×·›~hJ2!4RoªÀØàçæåçèççèèééèèçèèèèèèèèééééééééééééééééèèèèèèèèéá˪ŠoQ8$,Kr’±ÌÛèèåêçææååææçççççççççççççççççèèèèèèèèçæçÕ¯‹jK7)1NwŸ½×ääèéèëêêêêêêêêæà×ÎÇÄÄÅÙÙÙÚÛÝÞßÝÝÞßßßÞÞàáããâáãäááââãäåååååææçççèççææååäçæååççæååæçèèèèççççèèèééééééééééççççççççççæææåååçÞØÉ®–z\B+!!!!!!!!!!!!!!!!""""""""$%*5E[y‘žºÊÌÑÒÐÔÒÒÑÑÐÐÏÏÓÓÓÔÔÔÕÕÒÑÑÑÐÐÐÐÒÒÒÒÒÒÒÒÕÕÔÔÔÓÓÓÕÕÕÕÕÕÕÕÖØÖÐÅ°‘whR9*#)E^~š±ÍàäéçççççççççççèèééééééèèçççççççççççççççççççæææçççèèèæêêâÙ¿œ‚dI50Pnˆ¥½ÔÞæççéêèééééééééèèèèèèèèêêêêêêêêèèèèèèèèçççççççççÞÉ«nN7%,Lt¯ÊÙææãèæççèèççæççççççççèèèèèèèèèèèèèèèèèççÕ¯ŒlN9+0Tt¢¼×ääèêèìëëëëëëëëæãßÚÖÔÔÔ×××ØÙÛÜÝÜÜÝÝÞÞÝÝàáãâááâäããäååæççåååæææççççççææææçæååçèæååæçèèèèçèèèèééêêêêêêêêêêèèèèèèèèéééèèçççèßÙʯ–z[@)#1D^~—¬ÈØÚßàÞáááááàààààààáááââàßßßÞÞÞÝááááááááââáááàààââââââââßàÞØ͸˜}dM4$)D]~š°ÍàåéççççççççççèèèééééééèèèççççççççççççççççççççççèèééèæêêâÙÀƒeJ50Pm‡¥½ÕÞæççéêèééééééééèèèèèèèèêêêêêêêêèèèèèèèèçççççççççÞɬnN7%,Lt¯ÊÙææãèæççèèççæççççççççèèèèèèèèèèèèèèèèèççÕ¯lN9+0Tt£½×ääèêèìëëëëëëëëéæâÞÛÙØØÕÕÕÖ×ÙÚÛÛÛÛÜÜÝÝÝßáââáàâãããääåææçååååæææçæçççççèèèæåæçèçåææçèèèèèéééêêêëëììììììììééééééééìëëëêêêéêáÚË°–yZ?(.C^€™³ÏßáçèåèçççèèèèèææçççèèèçççææåååççççççççèèèçççææèèèèèèèèæèæàÔ¾‚aK0!(D]}™°ÍàåéçççççççççèèèééééééééèèèçççççççççççççççççèèèéééêêéæêêãÚŸ„fL6 /Om‡¥¾ÕßæççéêèééééééééèèèèèèèèêêêêêêêêèèèèèèèèçççççççççÞɬnN8%,Lt¯ÊÚæçãèççèèèèççççççççççèèèèèèèèèèèèèèèèèççÖ°mO9+1Uu¤½×åäèêèìëëëëëëëëëéæãàßßßÔÔÔÕÖØÙÚÛÛÛÛÜÝÞÞÞàááààáãààáâããääääåååææææææçèèééèçåæèèçææçèèééèèêêêëëìììëëëëëëëëëëëëëëëëììììëëëêëãÜͱ—yZ?(-A\}—³ÏàãèéæèåååæççèèææççèèèèèèèçççææååååååååèèèèççææèèèèèèèèèéèáÕ¾‚dM2!'C\|™°ÍßåéèèèèèèèèèèèéééêêêêéééèèèèèèèèèèèèèèèèèèèéééêêëëëéçëëäÜÄ¢†hM8!.Nl‡¦¿ÖàçèçéêèééééééééèèèèèèèèééééééééèèèèèèèèçççççççççÞʬnO8%,Lt°ÊÚæçäéççèééèççèèèèèèèèèèèèèèèèèèèèèèèèèèèÖ±nQ:,2Vv¥¾ØååéêèìëëëëëëëëìëéæäããâÔÔÔÔÖ×ÙÚÛÛÚÛÜÝßàÝßààßßàâàààáâããääääåååææåææççèèéèçææèéçææçèééééèêêëëììììëëëëëëëëììììììììììëëëêêêìäÞϳ™zZB*.B\}–µÒãæëëèêççèèéêêêééééêêêëëëëêêéééççççççççëêêêééééééééééééçéèâÖ¾œfN2!&B[{˜¯ÌßåéèèèèèèèèèèéééêêêêêêéééèèèèèèèèèèèèèèèèèèééêêëëëëêçëëäÝÇ¥‰kO9"-Mk†¦À×áèèçéêèééééééééèèèèèèèèééééééééèèèèèèèèççççççççèßÊ­ŽoO9%,Lt°ËÚçèäéçèééééèçèèèèèèèèèèèèèèèèèèèèèèèèéèèײpR:,3Wx¦¿ÙæåéêèëëëëëëëëëëêéçåäããÓÓÓÓÕÖØÙÚÙÙÙÚÜÞàÝÞàßÞÞßááââãäååæãäääååååååæææææçéçæçèéèæççèéêêééêêêëëìììêêêêêêêêììììììììëëëëêêêéëäßѵ›|\D+.C^˜³ÐáåêêæèééééêêêêèèèéééêêêêêééèèèééééééééêêéééèèèèèèèèèèèçééäØÀžƒgN2%AZ{—¯Ìßåéééééééééééééêêêëëêêêéééééééééééééééééééééééêêëëëëèëëåßɨ‹mQ:#,Lj†¦ÀØáèéèééèééééééééèèèèèèèèèèèèèèèèèèèèèèèèççççççççèßÊ­ŽoP9%,Lt‘±ËÛçèåéèèééééèèééééééééèèèèèèèèèèèèèèèèéèéس‘qS;-4Xy¨ÀÚçæéêèëëëëëëëëëêêèçåãááÐÐÑÑÓÔÖ××ÖÕÕ×ÙÜÞÜÞßßÞÝßàááâãääååããäääååååååååäääéèæçééèççèééêêéééêêêëëëëììììììììëëëëëëëëìììëëêêêêãßÒ·~^D+.B]~˜°ÍßãèèäåèèèçççççççççèèèéèèèççæææèèèèèèèèéèèèççççççççççççæééåÙ „hP2 %@Yz—®Ìßåééééééééééééêêêëëëëêêêéééééééééééééééééééèéééêêêêëèììæà˪nR;$,Ki†¦ÁÙâééèééèééééééééèèèèèèèèèèèèèèèèèèèèèèèèççççççççèßË­pP9%,Lt‘±ËÛèèåêèééêêééèééééééééèèèèèèèèèèèèèèèèéèéس’rT;-4Yz©ÁÛçæêêèëëëëëëëëëêéèçäâàßÏÏÏÏÑÒÔÕÕÔÓÓÔ×ÚÜÜÝßÞÝÝßàßßààáâãããããääååååååäããââéèççééèççèéêêêêééééêêêëëííííííííëëëëëëëëíííììëëëêãßÒ¸ž_D+-@Z{”²ÐâæëëæçéééèççææêêêëëëììëëêêêéééééééééééììëëëêêêêêêêêêêêäçèäÙ „kR4!$@Yz–®ÌßåééééééééééééêêëëëëëëêêéééééééééééééééééééèèèéééêêìèììæáÌ«ŽoS<$+Ki†§ÁÙâééèééèééééééééèèèèèèèèèèèèèèèèèèèèèèèèççççççççéàË­pP9%,Lt‘±ÌÛèèåêèééêêééèééééééééèèèèèèèèèèèèèèèèéééÙ´’rU;- 5Zz©ÁÛèæêêèëëëëëëëëëêêéçäáßÞËÌÎÏÑÒÒÒÐÑÒÓÕÖ×ØÛÛÛÛÛÜÜÜÝÝÞÞÞßßßããâââãäåææææææææççççççççèèèééêêêêêêëëìììêêêëëìììììììììììììììììììêãÞѶ_G,-A[{•±ÉßåæéëèéééèèçççèéêëëëëêêêêêêêêêêêêééèèèéééééééééééêêëëëêêèãÙÄ£‡nP6%#&+Jh„¥¿ÖàèééêêèééééééééééééééééèèèèèèèèéééèèçççèèèèèèèèåáήŽrS:%+Jr’³ÎÝèçåëééééééééééééééééééééééééééééééééêèèÙ¸—tS=. '=a‹«ÎÚåèçéêêééééééééééçæäâáàÆÇÉÊËËËËÐÐÑÑÑÑÑÑÔÔÔÕÖÖ××ÚÚÚÛÛÛÜÜàßßßàáâãääääååååééééééééèèèééêêêêêêëëìììêêêëëìììììììììììëëëëëëëëíçäؾ¤…eK/)0!#$)6Ns›¶ÓÝæèçéêééééééééééèçåäâáàÅÆÇÈÉÉÉÉÏÏÏÏÏÏÐÐÒÓÓÔÕÖ××ØØÙÙÙÚÚÚÞÞÞÞßàâãââããääååééééééééèèèééêêêêêêëëìììêêêëëìììììììììììëëëëëëëëîèåÚÀ¦‡fM0);Vx’­ÆÝåçêêçéééèèçççèéêëëëëêêêêêêêêêëëëêêêééêêêêêêêêêêêêêêêêëìëçßË«tU:( 9Su“«ÈÝåìééééééééëêêééêêëêêêêêêêêêêêêêêêêêêêêêêêêéééêêëëëìéììçäб”uX@')Ge‚£¾ÔÞçèèêêèéééééééééééééééééééééééééééèèçççèèèèèèèèæãаsT<&+Jr‘²ÎÝèèæìêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêéèêݼ›xV@1"!#%(-2:>ESkŽ±ÇÙáçèèêêééééééééééèçåãáàßÅÆÇÈÈÈÈÈÌÌÍÍÎÎÏÏÐÑÒÓÔÕÖÖ××××ØØÙÙÜÜÜÝÞàáâááââãääåèèèèèèèèèèèééêêêêêêëëìììêêêëëìììììììììììììììììììíèæÛ§ˆgO2 (;Uw’«ÅÝåçêêæéééèèçççèéêëëëëêêêêêêêêêìëëëêêêêëëëëëëëëëëêêêêééêëêçß̬vW<)8Su“«ÉÝæíêêêêêêêêëêêééêêëêêêêêêêêêêêêêêêêêêêêêêêêéééêêëëëíéììçäѳ–vYA'(Fd£¾ÔÞæèèêêèééééééééééééééééêêêêêêêêéééèèçççèèèèèèèèçãѱ‘tU<'+Jr²ÍÝèèçíëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëêéëß¿ž{YA2# !%)/37=FLW]eqˆ¦ÂÑÞäèèèêêèéééééééééèæäáßÝÜÅÆÇÈÈÈÇÇÊÊËÌÍÎÏÏÎÎÏÐÑÓÔÔÕÖÖÖ×××ØÛÛÛÜÝßàáààáâãääåèèèèèèèèèèèééêêêêêêëëìììêêêëëìììììììììììíííííííííçæܨˆgP3!&8SvªÄÝåçêêæéééèèçççèéêëëëëêêêêêêêêêììëëëêêêëëëëëëëëëëëêêéééêëêçàÍ­’wX=*7Qs‘ªÇÜåìêêêêêêêêëêêééêêëêêêêêêêêêêêêêêêêêêêêêêêêéééêêëëëíéììçåÒ´—xZB((Ec€£¾ÓÝæçèêêéééééééééééééééééêêêêêêêêéééèèçççèèèèèèèèèäѱ‘tV='+Jr±ÍÝèéçíëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëêíâ¡~\B3$"'-279AGNSX`ksy‰’¤½ÐØâçéçèêêèéééééééééèåâßÜÚÙÆÆÇÈÈÈÇÇÈÉÊËÍÎÏÐËÌÍÎÏÑÒÒÕÕÕÖÖÖ××ÚÚÛÛÝßàáßàááâãääççççççççèèèééêêêêêêëëìììêêêëëìììììììììììîîîîîîîîìçæÜèˆgQ3!$7Rt©ÃÝæçêêæéééèèçççèéêëëëëêêêêêêêêêìììëëêêêëëëëëëëëëëëêêéééêëëèáή“xY=*7Or¨ÆÛãëêêêêêêêêëêêééêêëêêêêêêêêêêêêêêêêêêêêêêêêéééêêëëëíéëëçåÓ´˜x[B('Db€¢¾ÓÝåçèêêéééééééééééééééééêêêêêêêêéééèèçççèèèèèèèèèäѱ‘uV='+Jr±ÍÝèéçíëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëîãÄ£]B4%!#$149@HPVZbhpv{ƒ˜˜ §®¼ÑßãäèêçèêêèéééééééééèåâÞÛØ×ÇÅÃÄÈÉÇÅÉÉÊËËÌÍÍÌÌÌÍÍÎÎÎÖÖÕÕÔÕÕÖÕ×ØØØÙÜÞÞßßàâããäåæææææççèèèééêêêêêêëëìììììììììììëëëëëëëëëëëììíííîçåÚÁ©ŒlS5#&8RsŒ¨¿ÙæèééèéééééééééêêëëêêéëëëëëëëëêêêêêêêêëëëëëëëëëëëëëëëëéêéæßÍ®“{\A,5NoŒ¥ÆÜåìëëëëëëëëëëëëëëëëëëëêêéééëëëêêééééééééééééééêêëëëíêíîêæÓ³˜x]H,&Ed ¹Íâèäéëçéèèèèèèèèèèèèèèèèééééééééêééèèééêéééèèçççéäѱ’uV<+,Kr¯ÐàæìîëëëëëëëëëëëëëëëëëììììììììììììììììííêàÊ¥{`J6%! "'-39=@JQZ`diqw€…•¥­²·»ÃÌÔÜáãåææççèèèççèééèèçéçåáÜ×ÓÑÇÅÃÅÇÉÇÅÉÊÊËÌÌÍÍÌÌÍÍÍÎÎÎÒÒÑÐÐÑÑÒÖ×ØÙØÙÜÞÝÝßáâäææåååææææçèèèéééêêêêêëëëììììììììììëëëëëëëëëëëììíííîéçÝĬŽnS6#&8QrŒ§¿Øåèééèéééééééééêêëëêêéëëëëëëëëêêêêêêêêëëëëëëëëëëëëëëëëêëêçàί•|]B-5MnŒ¥ÅÜåìëëëëëëëëëëëëëëëëëëëêêéééëëêêêééééééééééééééêêêëëìéìîêçÔµ™y^H-&Ed ¹ÍâèäéëçéèèèèèèèèèèèèèèèèééééééééêééèèééêêêêéééèèéäѲ’vV=+,Kr°Ñàæëíëëëëëëëëëëëëëëëëëììììììììììììììììííëą̂€eF4''(&)19>DKQW^cmt}„‰Ž–¤©¯¶¼ÂÈÍÔÖÚÞâåæçææççèèèéèèéêêêêéêèãÞ×ÐËÈÆÄÄÅÇÈÇÅÊÊÊËÌÍÍÎÍÍÍÍÎÎÏÏÐÐÏÏÏÏÐÐÖ×ÙÙØÙÜÞÚÛÜÞáãåæäääååæææèèèèéééêêêêêëëëìììììììììëëëëëëëëëëëììíííîêêàȯpT6#%7PpŠ¦½×åèééééééééééééêêëëêêéëëëëëëëëêêêêêêêêëëëëëëëëëëëëëëëëëëëèâб—}^C.4Mm‹¤ÅÜåëëëëëëëëëëëëëëëëëëëëêêéééëêêêééééééééééééééééêêêëëèëíêèÕ·šz_I-&Dc€Ÿ¹ÍâèäéëçéèèèèèèèèèèèèèèèèééééééééêééèèééêëëëêêêééèåÓ³“vW>+ ,Kr’±Òáæëìéëëëëëëëëëëëëëëëëììììììììììììììììííìãά‡oPB9;?@FNT[elqy‚Š”š£ª¯µ¼ÂÇÊÏÓÖÙÞáåæçççææåççèèèéééççèéêêêééæáÛÓÍÈÅÅÄÄÅÆÆÆÆÉÊÊËÌÍÍÎÍÍÍÍÎÎÎÏÑÑÐÐÐÑÒÓÕ×ØØØÙÛÞØÙÚÜÞßááãããäååææççèèèéééééêêêëëëëëëëëëëëëëëëëëëëëëëììííííéêâʱ‘pV7$$5Nnˆ¤¼ÖäçééééééééééééêêëëêêéëëëëëëëëêêêêêêêêëëëëëëëëëëëëëëëëëìëéãÒ´™`D/3KlŠ£ÄÛäëëëëëëëëëëëëëëëëëëëëêêéééêêêéééèèèèèèèèèèèèéééêêêêçêìéè×¹œ|`J.&CbŸ¸ÍâèäéëçéèèèèèèèèèèèèèèèèééééééééêééèèééêëëêêééééèæÕµ•wX@, ,Jq“²ÓáæëìéììììììììììììììììíííííííííííííííííîíåѲ‘|kaZ[_bhopz†‘˜¤®´¹ÀÅÊÏÔØÛÝßàáâäçåååæåååäèèèèèéééååæçèçççåâÞØÓÎËÉÃÄÅÅÅÅÆÆÉÉÊÊËÌÌÍÌÌÌÍÍÍÎÎÑÐÐÐÑÒÓÓÔÕ×××ØÚÝÛÜÜÝÝÞÞßáââãäåææçççèèèéééééêêêëëëëëëëëëëëëëëëëëëëëëììíííëçèàÉ°‘pX9$#4Ll…¢ºÕãçèéééééééééééêêëëêêéëëëëëëëëêêêêêêêêëëëëëëëëëëëëëëëëëììêäÓµ›bF02Jk‰¢ÃÛäëëëëëëëëëëëëëëëëëëëëêêéééêêéééèèèèèèèèèèèèèèéééêêêæêëéèغž}aK.%Ba~ž¸Íâèäéëçéèèèèèèèèèèèèèèèèééééééééêééèèééêééééèèçççæ׸–xYB, +Jq”³ÓâæëìéììììììììììììììììííííííííííííííííîïîæÔº †€{|€„‹‘—¡¬²µ»ÆÏÑÔØÜÞáäææçéèçæçéççççèèééèèèèèèèèåææççæååàÞÚÕÐÍÊÉÂÄÅÅÄÄÅÇÇÈÈÉÊÊËËÊÊËËËÌÌÌÍÍÍÍÎÏÐÑÒÔÕÕÕÖØÛÞÞÞßßßßßààáâãäåææçççèèèèèéééêêêêêêêêêêêêëëëëëëëëëëëììíííêææÞÈ°’rY:%"2Kjƒ ¸ÓâæèêééééééééééêêëëêêéëëëëëëëëêêêêêêêêëëëëëëëëëëëëëëëëêëëêåÔ¶ƒdG11Hj‡¡ÃÚäëëëëëëëëëëëëëëëëëëëëêêéééééééèèèççççççççççèèèééééëçêëèèغ cL/%B`}ž¸ÍâèäéëçéèèèèèèèèèèèèèèèèééééééééêééèèééêééèèèçççæçÙº˜y[D-!+Ip“²ÓâçìíëííííííííííííííííîîîîîîîîîîîîîîîîíîîèÚǵ©žœš›Ÿ¦­³½ÄËÏÑÕÝããäåçèééêéêëêèæçèëëéèèèèéèèçççæææççççæåãâÝÚÖÐÌÉÇÆÁÄÆÅÃÃÅÇÆÆÇÇÈÉÊÊÉÉÉÊÊÊËËËËËËÌÍÏÐÐÒÓÓÓÔ×ÙÛÛÜÜÝÞÞÞßßàâãäåæææçççèèèèèéééêêêêêêêêêêêëëëëëëëëëëëììíííëææÝÇ°“tZ;%"1IiŸ·ÒáæèêêéééééééééêêëëêêéëëëëëëëëêêêêêêêêëëëëëëëëëëëëëëëëéêêéäÔ·„eH10Hi‡¡ÂÚäêëëëëëëëëëëëëëëëëëëëêêééééééèèèççççççççççççèèèéééìèêêçç׺¡€dM/%A_|·ÍâèäéëçéèèèèèèèèèèèèèèèèééééééééêééèèééêêêéééèèèæçÚ»™y[E-!+Ip’±ÒâèíïìííííííííííííííííîîîîîîîîîîîîîîîîëííêâÖÌÆ»¼¼¼ÀÇÏÓØÚÞàáãæéèèèéêêéèçèééçæçèìêèæååååççææåååääääãáßÝÜØÖÒÎËÊÊÊÁÄÆÅÃÂÄÇÅÅÆÆÇÈÉÉÈÈÈÉÉÉÊÊËËËÌÍÎÏÐÏÑÒÒÒÓÕØÕÖ×ØÙÛÜÜÞßàáãäååæææççèèèèèèééêêêêêêêêêêêëëëëëëëëëëëììíííìçæÝÇ°•v[;%!1Hh€ž¶ÒàåèêêéééééééééêêëëêêéëëëëëëëëêêêêêêêêëëëëëëëëëëëëëëëëèéêéäÔ·…fI20Gh† ÂÚãêëëëëëëëëëëëëëëëëëëëêêééééééèèççççççççççççççèèéééíéêêççÖº¢dM/$A_|·ÍâèäéëçéèèèèèèèèèèèèèèèèééééééééêééèèééêëëëêêéééåèÛ¼™z\F-!+Ip‘±ÒâèîðíííííííííííííííííîîîîîîîîîîîîîîîîéëíìçáÛÙÕ××ÕØßåéèèèééêêëëêêëììëééêëëêéêììêèçæææçæææååääãààßÝÛÙÖÕÔÓÐÏÏÐÒÓÁÂÃÅÅÆÆÅÆÆÆÆÇÈÉÊÊÊÊÊÊÊÊÊÉÊËËÌÍÎÎÐÐÑÒÔÕÖ×Õ×ÙÛÜÛÙØÜÞàááâäæääåçççççèèèèèèèèêêêêêêêêéééêêëëëëëëëëëëëíèçÞÇ°“t[>'!0Giƒž·ÔãèêêéèèèèèèèèéééêêëëëêêêêêêêêêêêêêêêêêêêêêêêêëëëëëëëëêéíëáÕ¼š~hJ3!+Fc…¡¼Öæêëëëëëëëëìììëëêêêééééééééèèèèèèèèèèèèèèèèêééèèééêéçëëçæ×¼¡cM1%CbŸ¹ÒãéçëéåéèèèèèèèèééééééééèèèééêêêêêêêêêêêééééééééççÙ¼`H."!)Gn“±ÑáéïïêîîîïïðððïïïïïïïïííííííííîîîîîîîîîíìëéèææààáâãäååççèèééêêêëìííìëëìëëìíìêçèèçççæææåäãáßÝÜÛØ×ÖÔÒÐÏÎÏÏÏÐÑÓÔÕÀÁÃÄÅÅÅÅÅÅÅÆÆÈÉÊÉÉÊÊÊÊÊÊÉÉÊËÌÌÍÍÎÏÐÑÒÔÔÕÔÖØÛÜÛÚÙÛÝßàààâäãäåæççççèèèèèèèèêêêêêêêêéééêêëëëëëëëëëëëìççÞÇ°”u[>(!/Gh‚¶ÓãèêêéèèèèèèèèéééêêëëëêêêêêêêêêêêêêêêêêêêêêêêêëëëëëëëëêéíëáÖ½›hK3"+Eb… »Öæêëëëëëëëëìììëëêêêééééééééèèèèèèèèèèèèèèèèêééèèééêêçëëççؽ¡cM1%Ba~Ÿ¸ÒãéçëéåéèèèèèèèèééééééééèèèééêêêêêêêêêêêééééééééççÚ½ž€aH/#!+Iq‘±ÒãéîïëîîîïïðððïïïïïïïïííííííííîîîîîîîîîíìëêéèèåææçèéêêêêêëëìììííìììëëëëêéêìëéçéèæãáßÞÝÛÛÚÙØØ××ÓÒÑÏÍÌÊÊÏÐÑÒÔÖ×Ø¿ÀÁÃÃÄÄÃÅÅÅÅÆÇÈÉÈÈÉÉÊÊËËÉÉÊÊËÌÌÍÍÎÏÐÑÒÓÓÓÕ×ÚÛÛÛÛÚÜÞßÞßáââãåæççççèèèèèèèèêêêêêêêêéééêêëëëëëëëëëëëìççÞȱ•v\>(!.Fg¶ÓãèêêéèèèèèèèèéééêêëëëêêêêêêêêêêêêêêêêêêêêêêêêëëëëëëëëêéíëáÖ¾jL4"+DaƒŸºÕæêëëëëëëëëììëëëëêêééééééééèèèèèèèèèèèèèèèèêééèèééêêèëëèçÙ¾¢€cM1%B`~ž¸ÒãéçëéåêèèèèèèèèééééééééèèèééêêêêêêêêêêêééééééééçèÛ¿Ÿ‚bI0$(Go²ÕåêîïìîîîïïðððïïïïïïïïííííííííîîîîîîîîíííììëëëêêëëììííëëëëììììííëêêéêêëéèèééèæèæâÝÙÕÓÒÑÑÑÑÒÒÒÒÍÍÌÊÉÈÇÆÌÍÏÑÔÖØÙ¾¿ÀÁÂÃÂÂÄÄÄÄÅÆÈÈÇÈÈÉÊÊËËÊËËËÌÌÍÍÎÏÏÐÑÒÓÓÒÔÖØÚÛÜÜÛÝßßÞÞàâââäåççççèèèèèèèèéééééééééééêêëëëêêêêêêêêëæçÞȲ–w\?) -DeœµÒâçêêééééééééééééêêëëëêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêèìêá×ÀŸ‚kM5#+C`‚¸ÔåêëëëëëëëëëëëëëëëëêêêêêêêêééééééééééééééééêééèèééêëèëëèèÛÀ£dN2$A_}ž¸ÑãèçëéæêééééééééééééééééèèèééêêêêêêêêêêêêêêêêêêêèéÜÁ¢„dK1% +Jq•¶ÙçêíïíîîîïïðððïïïïïïïïííííííííííííííííííííííííëëëëëìììêêëëëëëëìëêéèèéêëéæåååäâãàÜÖÑÎËÊÍÍÍÍÍÎÎÎÉÉÈÇÆÅÄÄÆÈÊÍÐÓÔÕ¾¿ÀÁÂÂÂÂÃÃÃÃÄÅÇÇÇÈÈÉÉÊÊÊÌÌÌÌÍÍÍÍÐÐÐÑÒÒÓÓÓÔÕ×ÙÛÜÜÝÞààßßáâáâãåæçççèèèèèèèèéééééééééééêêëëëêêêêêêêêëææßɳ—y^@*,Cc}›´ÑâçéêêéééééééééééêêëëëêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêêèìêáØÁ¡„mO6#+B^€›¶ÓåêëëëëëëëëëëëëëëëëêêêêêêêêééééééééééééééééêééèèééêìéììèéÜÂ¥ƒfP4 $@^|¸ÑâèçëêæëééééééééééééééééèèèééêêêêêêêêêêêêêêêêêêêèéÞä†fM3&!&$(3@^„¢ÀÞèêíïîîîîïïðððïïïïïïïïííííííííííííííííííííîîîîììëëëëëëìììììëëëëëêéééééçäßÝÜÜÛÚÚØÓÏËÉÈÇÉÉÉÉÈÈÈÈÄÄÃÃÂÂÁÁÄÆÉÌÐÒÓÔ¾¿ÀÁÂÂÂÂÃÂÂÃÃÅÆÇÉÉÉÈÈÈÈÈÌÌÌÌÌÌÌÌÐÑÑÑÒÒÓÓÔÔÕ×ØÚÛÛÝßààßßàâàáãäæççèèèèèèèèèèèèèèèèèéééêêëëëééééééééêåæßÊ´™z^A*+Aa{š³ÑáçéêêêêêêêêêêéééêêëëëêêêêêêêêêêêêêêêêêêêêêêêêéééééééééèëêáÙã†oP7$+A]~™µÒäêëëëëëëëëêêëëëëììëëëëëëëëêêêêêêêêêêêêêêêêêééèèééêíéììéêÞĨ†iR6"$?]{œ·ÐâèçëêçëêêêêêêêêééééééééèèèééêêêêêêêêêêêëëëëëëëëèêàŦˆgN4'"$&'/69AO]y¶ÍâèêîðíîîîïïðððïïïïïïïïííííííííììììììììííííííííîîîíììëëîííííìììéééèæäâáÙÕÐÎÎÏÐÐÐÎÊÇÄÄÅÅÃÃÃÂÂÂÂÂÁÁÀÀÀÀÀÀÇÉÌÐÓÕÖÖ¿¿ÁÂÃÃÃÃÂÂÂÂÃÄÅÆÊÊÉÈÈÇÇÆÊÊÊÊÊÊÊÊÏÐÐÐÑÑÑÑÕÕÖÖ×ØÙÚÜÞßßÞÝßàßàâäæççèèèèèèèèèèèèèèèèèéééêêëëëéééééééééåæßʵš{_B++@`z™³ÐáçéêêêêêêêêêêéééêêëëëêêêêêêêêêêêêêêêêêêêêêêêêéééééééééçëéáÙĤˆpQ7$+@\}˜´ÑäêëëëëëëëëêêêëëìììëëëëëëëëêêêêêêêêêêêêêêêêêééèèééêíêììéëßŪˆkT8$$>\zœ·ÐáèçëêçìêêêêêêêêééééééééèèèééêêêêêêêêêêêëëëëëëëëéëáƨŠiO5(#')*-17=BFIQX]ft–¶ÊÚçèéïðìîîîïïðððïïïïïïïïííííííííììììììììííííììììïïîíìëëêëëêêéééèããâàÝ×ÒÏÅÁ½»½ÁÄÅÇÅ¿¾¿Á½½¾¾¿ÀÁÁÃÃÃÃÃÃÄÄÊÌÐÔÖØØ׿ÀÁÂÃÄÄÃÂÁÁÂÃÄÅÆËËÊÉÇÆÅÅÈÈÈÈÈÈÇÇÎÎÏÏÏÏÏÐÖÖÖÖÖØÙÙÛÝÞÞÜÜÝßßàâäæççèèèèèèèèèèèèèèèèèéééêêëëëéééééééééåæßʵš|_B+*@_y™²ÐáçéêêêêêêêêêêéééêêëëëêêêêêêêêêêêêêêêêêêêêêêêêéééééééééçëéáÚÅ¥ˆqR8$+@[|—³ÐäêëëëëëëëëêêêëëìììëëëëëëëëêêêêêêêêêêêêêêêêêééèèééêîêììéëßƬŠmV9%#>\zœ·ÐáççìêçìêêêêêêêêééééééééèèèééêêêêêêêêêêêëëëëëëëëéëáÇ©ŠiP6(''),17Xw•¯ÎàçêëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëêêêêêêêêêéèèêêéèéçëéàÙÄ¥ŒoT<#$\{¹ÑâéèìëèíëëëëëëëëééééééééêêêêêêêêëëëëëëëëëëëëëëëëæçßÈ©‰jU9* %),048;?EKPU[_cjsy}ƒŒ“™ž¤©°½ÍÙåçéìîïðñïððññððïñññððïïïîîîîîïðñïîëééëîðïíììíîìëêêëëëêêéåâßÜÚØÕÓÌËÉÈŽ³«¤£¢£§¬²µµ·¹¹¸·¸¹»»¼¿ÃÆÈÉÌÍÌÊÈÈÊÌÍÏÓÕ××ÖÕÀÀÀÀÀÀÀÀÃÃÃÃÃÄÅÅÇÇÇÇÇÇÇÇÆÇÈÈÇÇÉËÎÍÌÌÍÐÒÔÓÔÕÖÖÖÕÔØÙÛÝÞààààáâäåååæçççèèèééééççççééééééééééééééééééêåäÞ̹~cE- +=Xw”¯ÎàçêëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëêêêêêêêêêéèèêëéèéçëéáÚƧpU=$$;Y}™³ÏâèêêëëëììììììììììììììëëëêêëëëêêêééêêêêêêêêêêêêêêêêëêîíçéàÊ°ŽpY;&"=\z¹ÑâéèìëèíëëëëëëëëééééééééêêêêêêêêëëëëëëëëëëëëëëëëëìäÍ®mX<. "%&*.158=AEINQ\`flrw~‚‡–œ ¦®µº¿ÅÉÍÓÝåèéëíîïððïððññððïðïïïïïïïïîîîîîîïñðíëëëìíïîíîïîìêççåãàßÝÜÚ×ÓÐÍÊÇÅÈÇĽµª£œ›š›Ÿ¦­²³¶¹ººº»¼¼½¾ÂÆÉÌÌÏÏÎËÉÉËÍÏÑÔÖØØ×Ö¿¿¿¿¿¿¿¿ÁÂÃÄÄÄÄÄÅÅÅÅÅÅÅÅÅÆÇÇÇÇÊÌÏÎÍÍÍÏÐÒÒÓÔÕÖÖÕÕ×ÙÚÜÞßßßâáááâãääççççèèèééèèççèèéééééééééééééééééìææß̹~dF.!*=Wv”®ÍßçêëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëêêêêêêêêëéèéêëêèéçëéáÛÈ©qV>%$9X{—²Îáèêëëëììììììììììììììììëëëêëëëëêêêéêêêêêêêêêêêêêêêêëêîíèêâ̲rZ<'"=[z¸ÑâéèìëèíëëëëëëëëééééééééêêêêêêêêëëëëëëëëëëëëëëëëêìãÍ®ŒmX?1$ "#%(-159=BHLVZ_dinsw…‹‘–œ¢¦­²¹¾ÂÇÏÔ×ÜáãããæéëìíîïïïïïïððððïïîîîîïïïïññðððððïîîîíììììíììììêæâÞÜØÓÏÍËÊÉÈÆÄÁ¿½¼ÅÃÀ¼µ¬¡š”“’”š£«±³¶º¼½½¿À¾¿ÃÇËÎÐÒÓÓÑÍÊÉËÎÑÓÕØÙØ×Ö¾¾¾¾¾¾¾¾ÀÁÃÄÄÄÃÂÅÅÅÅÅÅÅÅÃÅÆÆÆÈÊÍÐÏÎÍÍÎÎÏÒÓÓÔÕÕÖÖ×ØÚÜÝÞÞÞàßÞÝÝÞàáææçççèèèèèèèèèèèééééééééééééééééíççà͹ž~eG/!*("548<@EMPTY]bhlvz€‡Œ“™¡¥«°µºÀÄÉÍÑÕ×ÚßãäçêëéèèèîïïððïïîîïððððïîîîîïïïððîïïïïïïîêëìííìëêååäãâÝ×ÒÍËƾ¼¼¼¼½¿¿¿¾¿Àľ¸°¦—’’‘”›¥¯µ¶¹½ÀÀÀÀÁ¿ÃÈÍÐÓÕ×ØÖÔÏÌËÍÏÓÕ×ÙÚÙ×Ö¾¾¾¾¾¾¾¾¿ÀÂÃÄÃÂÁÅÅÅÅÅÅÅÅÃÄÆÆÆÇÊÌÏÏÎÍÍÍÍÍÒÒÒÓÔÕÖÖ×ØÙÛÜÝÝÝàßÞÝÝÞàáæææçççèèèèèèèèèèééééééééééééééééíççáκŸ€gH0");Vt’¬ÌÞæêëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëêééëìêéêçëêãßÍ°”v[B($;X{—²ÏäëëëìììííííííííííííííìììëëìììëëëêêëëëëëëëëëëëëëëëëëêîíèìæÑ·•v^?)!;Yx›¸ÑâéèìëèíëëëëëëëëêêêêêêêêëëëëëëëëìììììììììììììììììîçÔ» ‡vd[TUY]ciorw|‡’–š¡§­´º¿ÂÅÊÎÑÖÚÞàáãååæèêëìííììíïðððððïîíîîïððïîîïïïïïðððëììíííìëëìììêçäãÙØÖÔÑÌÅ¿»¹¶³²³´µ¸»¿À¿¿ÁÃÁ¿»´¬£œ˜”””˜Ÿ©³¹¼¿ÃÄÃÁÀÀÀÆÍÒÔÖØÙÚÙÕÐÌÌÎÑÔÖØÚÚÙ×Õ¾¾¾¾¾¾¾¾¿ÀÁÁÂÂÁÁÅÅÅÅÅÅÅÅÃÅÆÆÅÆÉËÎÎÎÎÍÍÍÍÑÑÑÒÓÕÖ××ØÙÚÛÛÛÛààààáâããåæææçççççèèééèèçééééééééééééééééíççáϼ¡‚hJ1#);Ut‘¬ËÞæêëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëìììììììììêéêëìëéêçëêäáг—y]D)$;X{–±ÏäìììììíííîîîîîîîîîîíííììììíìììëëëëìììììììììììììììììêîíéíçÓº—y`@* !:Xw›·ÑâéèìëèíëëëëëëëëëëëëëëëëììììììììííííííííííííííííêìçØÄ°€yuvy{€…ŠŽ“™Ÿ¦­²¸¼ÁÆÊÏÕØÙÜßáãåèëëëëëëëëëíììëìîðòðððððïîíîîïïïïîîððïïîîííîïïïîìêéèçæãÞÚÕÓËÉÇÅþ¹´±°¯®®¯°±·»¿À½¼½¿¼»¸²©¢žœ˜˜šž¥®¶»ÁÄÇÈÅÂÀ¿ÁÈÐÕÖÖØÚÛÚÖÑÍÍÐÓÕ×ØÚÙØÖÔ¿¿¿¿¿¿¿¿ÀÀ¿¿ÀÁÁÂÃÃÃÃÃÃÃÃÄÆÆÆÅÅÇÊÌÍÍÎÎÎÍÍÑÑÑÑÒÔÖØ××ÙÚÚÛÛÚÞßàâãäääååæææçççççééééççééééééééééééééééìæçáн£„iK2#):Ts«ËÞæêëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëìììììììììëéêììëêêçëêåâÒ¶™{^E*$:Wy”°ÎäììììíííîîîîîîîîîîîîíííìììííìììëëëìììììììììììììììììêîíéîéÕ¼™zaB+ !9Wvš·ÑâéèìëèíëëëëëëëëëëëëëëëëììììììììííííííííííííííííèëèÛÍ¿²¨˜–šœ¡¦«¯´¹¾ÃÊÎ×ÙÜÞßáäæäæèéèéêìììëëììëëíìëìíîîîîïïïïîíííîîïïîîíïîîíëêêéìììêæáÝÛÕÔÒÎÊÆÃÁÀ¾¼¼»º¶´±±±°¯¯¯¯²·½½º¹º½»»¹³¬§¥¦žŸ¢¦¬³º½ÃÆÊÊÈÄÁÀÁÉÓ××Ö×ÙÛÙÕÐÍÍÑÔÕ×ØÙÙ×ÔÓ¿¿¿¿¿¿¿¿ÁÀ¿¾¾ÀÁÃÂÂÂÂÂÂÂÂÅÆÇÆÄÅÆÈËÌÍÎÎÎÎÍÑÑÐÑÒÔ×ØÖ×ØÙÚÚÚÚÛÜßáâãââåååææçççæçéêêéçæééééééééééééééééëåæájK2#(:Ts«ÊÝåêëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëëìììììììììëêêììëêêçëêåãÓ·š|_F*$8Ux“®ÌãëìììííîîîîîîîîîîîîîîííìììíííììëëëìììììììììììììììììêîíéïêÖ½š{bB+ !9Vvš·ÑâéèìëèíëëëëëëëëëëëëëëëëììììììììíííííííííííííííííðíãØÏŽµ²²¸¼¾ÂÇÎÑÔ×ÙÝáåèêëêéèéëëìíìëêëìíììíîïïîñðððñðîìíîîïïîíííîîïïîîíîíìëéçææáàÞÛÕÏÉÅ¿¿½»¹¸·¶º¸·¸¹º¹¸¶¶µ´²°®¬¬²¹»º¹¼¿¼½¼·±­­®¤¥©®³¹¾ÀÃÆÊËÉÆÃÂÁÊÔØ×ÕÖ×ÛÙÕÐÍÍÑÕÕÖØÙØÖÓÒÂÂÁÀÀ¿¾¾¾¾¾¿¿ÀÀÀÂÁÁÀÀÁÁÂÃÄÅÆÇÈÈÈÉÉÉÊËÍÎÏÑÍÎÔÕÒÓ××ØÙÚÛÜÜÝÛÜÝÞßßßßâãäæèèééçççèèéééééééééééèèèèèèèèéææàÒŬŠmO6&):Tr¬ÆÙéëèìëëëëëëëëììììììììììììììììììììììììììììììììëëëëëëëëëéîíæäÕº }^G,"6Rv–²Íáëííîîîïïïííííííííîîîííìììììììììììììììììììííííííííêìííîîæݼ™zcE.!#9Uw›¶ÑßìïííîíììììììììììììììììíííììëëëììììììììííííííííëëìêåßØÔÊËÌÏÓ×ÜÞââãäåæççëëëëëëëëííîîïîîíîîïïïïîîíîîîîíìëñðïïðïìêííìíîíêèìèäââàÛØÐÍÉÄ¿»¹·µ±¯²²²´¹·¹»»¹¸¹º½»·´±±±²±³µµ´¶º¾¿Á¿º¶¶³®­«¬¯µ¼ÀÁÊËÍÍËÇÃÀÃÉÒØÚÚÙØ×ÖÔÎÉÈÌÑÒÔÔÑÐÏÊÃÂÂÁÀÀ¿¾¾¾¾¾¿¿¿ÀÀÃÃÂÂÂÃÄÄÃÃÅÆÇÇÇÇÈÈÉÉÊÌÎÏÏÌÍÒÓÐÑÖ××ØÙÚÛÜÝÛÜÝÞÞÞÞÞâãäæçèèèçççèèéééééééééééèèèèèèèèéååßÑÅ«ŠnP6&):SqŒ«ÆÙéìéìëëëëëëëëììììììììììììììììììììììììììììììììëëëëëëëëëêîíæäÖ¼£aI."6Qv–²ÌáìííííîîîïííííííííîîîííìììììììììììììììììììííííííííëíííîîçÞÁ~fH0#$:Vxœ¶ÒàìîììíìììììììììììììììììíííììëëëììììììììííííííííëëìëèäàÝßßßàâåèêèèééêëììììììììììíîïðññññîîîîîíìëññññðïíìñðïðññïíîìêéèåáÞÝÙÔÐÎÊÅÁº¹·´²°¯¯®«¬±´´·¼¾ÀÂÂÀ¿ÀÁ¾½»¹¸··¸¸¹¸µ³³·»¼¿¿»¸¸µ°°°°´ºÁÆÈËÌÍÌÊÇÃÀÃÉÑ×ÙØ×Ö×ÕÑÍÉÉÌÎÐÑÍÈÆƼÂÂÁÀÀ¿¾¾¾¾¾¾¿¿¿ÀÂÁÁÁÂÃÄÅÂÃÄÅÆÆÆÆÇÇÈÈÊËÍÎÍËÌÐÑÏÐÓÕÖ×ØÙÛÜÜÜÜÝÞÞÞÞÝâãäæçèèèçççèèéééééééééééèèèèèèèèèäåßÑÅ«ŠoQ7')9Rp‹«ÆÙéìéìëëëëëëëëììììììììììììììììììììììììììììììììëëëëëëëëëêîíçåؾ¥‚dL1 "5Qu•±ÌáììììííîîîííííííííîîîîííííííííííííííííííííííííííííìîîíîîèßǤ„kK2$#:WxœµÕáëíëììëììììììììììììììììíííììëëëììììììììííííííííëëìììëêéëëêêêêëììììíîïïïííííííííððñññðïïððððïîííðððððïîîðïîîïîìéåâßÛØÓÎÊÄÁ½º·´°­ª©©©©ª«««ª­´¸¸º¾ÀÁÂÂÀ¿ÀÂÁÁÂÂÂÁÀÀÁ¿ºµ±°´·¸½¿½¼¼¹³³²²¶½ÄÈÊÉÊËÊÈÅÁ¿ÄÉÐÕÖÔÓÓÓÏÊÇÆÆÇÇÈÇý»½¼·ÂÂÁÀÀ¿¾¾½½¾¾¾¿¿¿¾¾¾¾¿ÀÁÂÁÂÃÄÅÅÄÄÆÆÇÇÈÊÌÍÌÌÍÏÐÐÑÒÔÔÕ×ØÚÛÛÝÝÞßßßßßâãäæçççççççèèéééééééééééééééééééèäåßÑŬŠqS9((8QoŠªÆÚêíéìììììììììííííííííííííííííííííííííííííííííìììììììììêîíèçÚÀ§„fO3!"5Pt“°ËáìììììííîîîîîîîîîîîîîîîîîíîîîîîîîîîîîîîîîîîîîîîîîîíïîíîïéàͨˆnM4%"#.Ec„¥¼ØâëëêëëêììììììììììììììììíííììëëëììììììììííííííííììììíîïïììëêéééèìììííîîïîîîîîîîîòòñðïíëêîîïïïïîíëìííîíííëéçåãàÜÙÑÍÉÄÀ»¶²­¬«««««ªªªªª«¬­®°¯³º½¼¼¿ÁÂÃÁÀ¿ÀÂÇÉÊËËÊÈÇÇ»³¯¯²µ·¼¿¿¿¿¼¶²±±³¹¿ÃÄÆÆÆÅÃÀ½»ÂÇÍÑÑÏÎÍËÆÀ¾¿¿¾¼¼½»¸¸¼º¶ÂÂÁÀÀ¿¾¾½½½¾¾¾¿¿¾¾½½¾¿ÀÁÁÁÂÃÃÃÃÂÅÅÅÆÇÉÊËÌÍÎÎÏÑÒÒÒÓÔÕ×ÙÚÛÝÞßàááááâãäåææææçççèèéééééééééééééééééééèäåßÒÆ­ŒsT:)'7Pm‰©ÆÚëíéìììììììììííííííííííííííííííííííííííííííííììììììììíëïîéèÜè†hP4!"4Or’®ÊáíìììííîîîîîîîîîîîîîîîîîîïîîîîîîîîîîîîîîîîîîîîîîîîîðïíïðêáЫ‹pO4% "#$'*.135;?AEGOPSVZ_cehkpsvz~„‡Œ“˜œ §©¬°´¸»½ÃÄÆÉÌÏÑÒÕ×ÛàåéìíêëìíííííííííííííííííííííîîîíííììííìëëëëìííìëëëëìêëìííííìîîîîïïïðïîìììëéçææåãßÜØÖÐÎÊÆÀ¼¸¶³±¯¬©¨§§¦¦¦¥¥¥¥¤©ªªªª¨¦¥–ŽŒ•š¢ª±¸¿ÃÉÊËÌÍÎÍÍÎÐÓÔÔÔÕ×ØÖÒÏÎÏÐÒÒÔÖØÙØØ×ÕÔÐÉÃÀÁÿ¼¸´¯©¢—™£©¯³¶¶³²´³®¬®°±³´µ´³²®¬©¥¢¡¤¦¨ª¬«©©«®ÂÂÂÂÂÂÁÁ½½½½½½½½½½¾¾¾½½¼¾½½¼¼½½¾¾ÁÂÀÁÄÅÃÇÈÊÊÉÊÍÏÏÏÐÑÓÔÕÕ××ØÚÛÜÝÞßàáâäæççççççççççêêêêêêêêêêêêêêêêíçèæÛ癀`E1'1Hi‰¤ÆÝéïðïîîîîîîîîîîîîîîîîîîîîîîîîííííííííîîîîîîîîííííííííìëðïêìäÏ·”u\>)!,Gk‹©ÇàíîîïðððððððññññððððððððððññððððññññññññññññððððññóñðððïíëÞƬ˜ƒl\XWZ^acfjmrsvz„ˆŠŽ‘–™œ ¤§ª®²¶º¾ÂÆÉÊÌÏÒÕ×ØÜÝÞàâäåæåæçéëìííëëìííííìííííííííííííííííîíííììììðïïîíìììíííííîîîéêëëìììëíííííìììêçäâáßÜÙØÖÒÍǾ¼·´°«§¥¤¤£¢¢¡¡¢££¥¥¥¦¦¦§§«¬­­­ª¨¦ž–‘‘‘’™Ÿ©³¼ÄËÐÒÓÓÔÔÓÒÒÐÒÕÖÕÕ×ØÙ×ÔÑÐÐÒÓÔÕ×ØÙÙØ×ÕÔÑÍÈÆÆÇ¿¼·²­§ ›–˜¢©®³µ·´³µ³®¬®®¯±²³²±°«ª§¤¡¡¤§¬®°°¯®¯°ÂÂÂÂÁÁÁÁÂÁÀ¾¼º¹¸º»¼½½½½½¿¾½¼¼¼¼¼¾¿ÀÀÁÂÃÂÅÇÈÈÈÉÌÎÍÍÎÏÑÒÓÓÖ××ØÙÚÛÛÞßàâãåæçææççççèèêêêêêêêêêêêêêêêêíçèçÜйœ‚bF2&0Gh… ÃÚçíîíïïïïïïïïïïïïïïïïïïïïïïïïððððððððïïïïïïïïîîîîîîîîíìðïêíæÑ»—w^?*"+Eiˆ¦ÄÝêîïððññððððñòòñððññññññññòñððððñòññññññññòñððððñòóñððñðîëäÓ¾®‹{y|€„†ŠŽ‘’“–šŸ¤¨«±´¸»½ÁÄÇÊÌÐÓÕ×ÛÞÜÝÞßáãääääåæçèèéçèêëìíííììíîîííìííííííííììììììììììëëëêêêíííííìëëëììíííííëëëëêéèçèçæäâàÞÞÖÓÏÌÊÇÄÁÂÀ»¶±­ª©¥¤¢   ¡¢¡¢£¤¦§©©¨¨©ªª«¬¬¬­¯°®¬©¦ š•–—••˜ž¥°»ÄÌÓ×ÕÖÖÕÕÓÒÑÒÔ×Ø××ØÙÚØÖÓÒÒÓÔÕÖØÙÙØ×ÖÒÒÐÍÊÈÇÇÄ¿¹²¬¥Ÿš•—›¡§¬°³¶³²´²­ª¬¬­®°°¯®®¬¬ª§¥¦©¬³´´´³±°°ÂÂÁÁÀÀ¿¿ÃÂÀ¾¼º¸·¹º»¼½½½½À¿¾½¼¼¼¼¾½¾¿ÀÀÁÂÄÅÆÇÆÇÊÌËËÌÍÏÐÑÑÕÕÖ×ØÙÙÚÝÞßáâäåææææççèèèêêêêêêêêêêêêêêêêíçéèÞÒ»žƒcF2&/Fg‚ŸÂÚçîïíïïïïïïïïïïïïïïïïïïïïïïïïððððððððïïïïïïïïîîîîîîîîîìðïêîçÓ¼™y`@+"+EiŠ©ÇáîîïðññññððñòòòòñðññññññññòòñððñòòññññññññòòñððñòòòñðñññïìëßÑĸ«¡›ž¢¥¨«¯²¶·¹¼ÁÅÉËÐÒÖØÙÜßâáãåæææéëéééêêêëëêêêêêëëëëìíïïðïïííîîîííìííííííííìììììììììììëëëêêéêëëìëêééêêëêéèçééèæãàÞÜÛÙÖÒÎÊÇƼ¹µ²±¯­«¬«©¦¤£¢¢žŸ ¡¡¢¢£¤¥§©ª¬­­¬¬­®¯°±²¯°°±¯­ª¨¢œ™›œšš¥¬·ÂÉÏÔ××××ÖÕÓÑÐÔÖØÙØØÙÚÚÙ×ÕÔÓÓÔÖ×ØÙØ×ÖÕÒÐÎËÉÈÆÅÈú²«¤žš—™¢§¬¯²³°¯±¯ª¨ª©ª¬®¯¯®­¯¯­«ª¬°³¼»¹·µ³°®ÂÂÁÁÀ¿¿¿¿¾¾½½¼¼»¹¹º»¼¼¼»¿¿¾½¼¼¼¼½»¼¿À¾¿ÂÂÄÅÅÅÆÈËÉÉÊËÍÎÏÏÒÓÔÕÖØÙÙÝÝÞàâãäåååæççèééêêêêêêêêêêêêêêêêíçééßÓ½ †fI3%/FfƒŸÃÝêðñïððððððððððððððððððððððððîîîîîîîîððððððððïïïïïïïïïíðïëïéÕ½›|cC,",Gk‹ªÈáîïïðñòòññññòòòòññòòòòòòòòòòññññòòññññññññòòññññòòòñðñòòïíïéà×ÏÈÁ½½ÀÃÅÇÉÌÏÒÓÔÖÙÜßááãåççèêíêëíìêêëìîîííííííííííííííîîïïîíìëîîîïîííìííííííííëëëëëëëëîîííìììììíîïîíëêèééèçäáàÛÚØÕÑÍÊÈÆÄÀ»¶±®¬¦£ ŸŸ  ŸŸŸ ¡¡¢¢¢  ¡¢¢¢¡¡¥§©«¬­®®³³´µ¶··¸´´³²°®­¬¤žœŸ¡Ÿ ¢­´¿ÈÎÒÔÕÙÙØØÖÕÓÒÕ×ÙÚÙØÙÚÚÙ×ÖÔÔÓÓÖ××Ø×ÖÔÓÕÑÌÉÇÆÄÂÆÀ·®§¢š› £¨¬¯°®««­¬¨¦¨©ª­¯±±±±²²²°°³·»Å½¹·µ²°ÄÄÃÂÁÀÀ¿¾¾½½½½¼¼¹¹º»»»ºº½¼»»»»»¼½ºº¿À½½ÁÁÂÄÄÃÅÇÊÇÈÉÊËÌÍÎÐÐÒÔÕ×ÙÙÜÝÞßáãääååæççèééêêêêêêêêêêêêêêêêíèêêàÕ¿¢‹kN8$%.EfžÃÝêññïððððððððððððððððððððððððïïïïïïïïððððððððïïïïïïïïïíðïëïêÖ¿ž€hH/# !"""#$%%'+.?Xy•¯ÊàëïðññòòñññòòóóòòñòòòòòòòòóòòññòòóññññññññóòòññòòóòñðñòòðîïíéåáÞÚ×ØÚÝÞÞßâäããääæèéêèéëëêêìíëìíìëêëìïïîîííììííííííííííííìëêéîïïïîîíìííííííííëëëëëëëëëëëêêêéééêêêèåâàÜÜÜÚ×ÒÎÌÃÂÀ½º¶²°°®«¦¢š˜–”’“–š›œž £¤¤¤¤¤£¢¢¢¤¦§«­¯²´¶¶¶¾¾¾¿ÀÀÁÁº¹¶´²±±±ª¥£§©¨¨«´¼ÆÏÔÖÖ×ÙÙÙÙØÖÕÔÕ×ÙÚØØØÙÙØ×ÖÔÓÓÒÕÖ××ÖÔÒÑÕÏÈÃÁÀ¾¼¾¸¯§¢Ÿœš›œŸ¢¥¨ª«©¦¦©©¥¤¦ª¬¯³µ¶··¹¹¹¸¹¼ÁÅÌÆÀ»º¹·µÆÅÄÄÃÂÁÁÁÀ¿¾¼»º¹¹ºº»»º¹¹»º¹¹¹ºº»½¹¹¿À¼¼ÁÀÂÃÃÃÄÇÉÇÇÈÉÊÌÌÍÎÏÑÓÕ×ÙÚÜÜÞßáâãäååæççèééêêêêêêêêêêêêêêêêíèêêàÕÀ£pR<' %.Ee~›ÀÚèïïíððððððððððððððððððððððððññññññññððððððððïïïïïïïïðîñïëðê×Á ƒkK2$ !"##%%&'(()*--.01345:;==>AEHZr¦»ÑãìïðñòòòòññòòóóòòñòòòòòòòòóòòññòòóññññññññóòòññòòóòñðñóòðîíîíëëëéææèêêêêìîîííííîïïíïðïîíîïîïððïïðòòòññððïïîîîîîîïïííîïðððïïïïïïîììííííííííëëëëëëëëççææååååÞÞÝÜØÔÐÍÈÈÇÄÀºµ²°°®«¨¥¢ ¢ žš–’ŽŒ‹’—›œŸ¡¤¦§§¦¤§¥££¥ª¯³´¶¹½ÀÁÂÂÈÈÈÈÉÉÉÉ¿¼¹¶´´µµ°¬«¯±°°³¹ÀËÔØÙÙÙØØØØ×ÖÔÔÕ×ÙÙØ×ØÙØØ×ÖÔÓÒÒÕÖÖÖÕÓÑÏÓÌý»º¸¶µ°¨¡žœ›š˜™› ¢¤¥¥££§§££¥¬®²¶¹º»»ÀÀÀÀÀÄÉÎÏÉÁ½¼½¼ºÇÇÆÅÃÂÁÁ¿¿¾½½¼»»¼¼¼»»»ººººº¹¸¹»¾¹º»¼½¾¾¿¿ÁÃÂÁÁÃÄÅÅÇÈÊÌÍÎÎÏÐÑÓÔÖÖ×ÙÝßßàâäãäåæèéêëéééêêëëëëëëëëëëëíëéçáÔµ˜„gK7/--)(('%$##!! ! $3La|™½ØèðòðððððððððððððððððððððððððññññññññððððððððððððððððððîíïïèÞÁ©ŠmT<+$""##$%&&%&&'(())*++,-.//124789::==>?BDFHIIJLOQTUWXZ]`cefy‹¤¼ÍÛæíððñòòóôôòòòòòòòòóóóóóóóóóóóóóóóóòòòòòòòòòòòòòòòòóóóòòñññïïîíìëëêééêêëëìììííîîïïïïïïïïïïïññðððïïïïïïðïïîíîñòñîíîñîííîðñïíííííííííîííììëëêïíêêìíêçæååâÞÙÔÑÎÍÊÇÃÁ¿¾¹·´°¬©¨§¤¡ŸŸ¡¡ž›œ›™•‹‰ˆ€„ˆ“˜šŸ¢¥§§¨ª¬­¬¬¬¯´¹¼ÁÄÇÈÈÈÉËÏÐÑÑÑÏÎÍÆÄÁ½»»»¼¶¶¹½»¶¶¹ÄÈÏÔ×ÙÛÝÚÙØ×ÖÕÕÕÔÖÙÙØÖÖ××ÖÔÓÒÓÔÔÕÔÔÔÓÓÓÓÐÅ»¸¶±­«§¤ œ™——˜•–™œŸ¡££¢£¤£¢£¥§«¯µº½¾ÀÁÆÃÀ½½ÁÅÈÊÅ¿¼¾¿¾½ÇÇÆÅÃÂÁÁ¿¿¾½½¼»»¼»»»ººº¹¹¹º¹¸¸»½ºº»¼¼½½¾ÁÃÄÃÁÁÂÃÄÅÆÈÊËÌÍÎÎÏÑÓÔÕÖÖÙÜÞßàâãääåæçèéééééêêêëëëëëëëëëëìëéèã×Ç»¤“zbQHEDCBA@>=<<:9987654543210000/./00.,--,,++**++***)))(&'*0=Th„ŸÁÚèðòðððððððððððððððððððððððððññññññññðððððððððððððððððñïíïïèßȲ•|dN?977899:;;AABCDDEEHIJKLNOORSTVXY[\^^_acfhjmmnortvxxz|€ƒ‡‰‹“¡·Ê×áéîððñòòóôôòòòòòòòòóóóóóóóóóóóóóóóóòòòòòòòòòòòòòòòòóóóòòñññññðïïîííîîîïïðððïïïðððññððððððððòòòñññððíîîïïîíííïðïíìíïðîîîðïíëììííííîîíííìëêêêèåâààßÜÙÕÔÓÑÍÇÃÀ»¹·´²±±²«ª©§¦¤£¢žœ›œž žœ›—’ŽŒ‹‚ƒ…‰–œ §ª®°²´¶¸¹¸¸¹¼¿ÃÅÍÏÒÓÓÓÔÖÕÕÖÖÖÕÓÓÌËÉÆÅÄÄĽ»»½»¸¹½ÇÌÑÕ×ØÙÛÜÛÙ×ÕÔÔÔÔÖØØÖÕÖ×ØÖÔÒÑÑÒÓÓÓÓÒÐÎÌËÆ»²¯­¨££Ÿ™–”””••–™œŸ¡££¢£¥¥¤¤¦¨­²¸¾ÂÄÅÆÁ¾¹¶¶º¿ÃÄÁ¾½½¾¿¾ÇÇÆÅÃÂÁÁ¿¿¾½½¼»»»ººº¹¹¹¸·¸¹¸··º¼»»»¼¼¼¼¼ÂÃÄÄÂÁÂÃÄÅÆÇÉÊÌÌÍÎÏÐÒÔÕÕÖØÜÝÞßàâåååææççèééééêêêëëëëëëëëëëêêéåÛÎÄ°£|nea___]\ZXWVWVUTSQPPPOMLJIIIJIHIJIGEDDDCCCCBA@@@???>B@@CHRfx“ªÈÝéðòðððððððððððððððððððððððððññññññññðððððððððððððððððñïíîïêâÓÁ¨“k^YXXYYZ[\\aabccdeeiiklnpqrvvvxz}‚‚„…ˆ‹“””•—šœŸ¡¥©¬¯±¶ÁÐÝäéíðððñòòóôôòòòòòòòòóóóóóóóóóóóóóóóóòòòòòòòòòòòòòòòòóóóòòñññóóóòñðððññññòòòòñññòòòòóððððððððòñññððððïïðññððïîðñðïîðñîíìíïïíëìììììëëëêéèçåäãâÜÙÕÒÐÍÊÇÂÂÀ½¹´°­§¥£¡¡¢£¤ŸŸ¡¡¡ Ÿžœœœž¡££¢£¢ š–“‘‰ŠŒ‘˜¡©­³·»¾ÁÃÆÉÆÆÆÇÉËÍÎÒÔ×Ø××ÙÚÙÙÚÚÚÙØ×ÑÑÑÐÏÎÍÌÆÃÁÀ¾º½ÂËÏÔ×××ØÙÛÚØÖÔÓÒÒÕÖ××ÕÔÕ××ÖÓÑÏÏÏÐÒÒÑÏÌÇÃÀº°§¤¢™™—–“’‘’”•–˜š £¤¥£¥¨¨§§¨ª¯³ºÀÅÇÇÆ»·±­­²¹¾¼½¾¾¼¼½¿ÇÇÆÅÃÂÁÁ¿¿¾½½¼»»ºº¹¹¹¸¸¸¶·¹¸··¹º¼¼¼»»»»»ÀÂÃÃÂÂÃÅÄÅÅÇÈÉÊËÌÍÎÐÑÓÔÕÕØÛÜÝÝßàååååææææèèéééêêêëëëëëëëëëêêêçàÖÏÀ´£“ˆ}{{zywusrqtsrqonmlonmkihhhfeeeffdbaaaaaaaa^^^]]\\\`^^bfoŽ¦¹Ñáêñòðññññññññññññññññññññññññññññññññññññññññððððððððïñðîîðìåßн¬š‰~{zz{{|}~~€‚ƒ„„„‡ˆŠŒŽ’“——–—™œ ¢¢£¤¦¨«­¯³³´´¶¸¹º½¾ÀÂÅÈÊËÓÚãêíîïðñññòòóóóòòòòòòòòóóóóóóóóóóóóóóóóòòòòòòòòòòòòòòòòóóóòòñññôôóóòòññððððððññòòòòòòòòññññññññððïïïîîîîïïððïïîïïððïïïðëëëìîïîìëëéèæäãâßÞÜÙÖÔÒÑÌÊÇÄÁ¾»¹·¶µ²®ª¦¤Ÿš˜˜šœœž £££¡ ¤¥¦¨ª­®®®­«©§£Ÿœ–—™Ÿ§±¹¿ÁÄÈËÌÎÑÓÎÎÏÏÐÑÒÒÓÕØØØØÙÚÚÚÚÚÙÙØØÒÓÕÖÖÔÒÑÌÉÇÇÿÀÄÍÐÕ×ØØØÙØ×ÕÔÒÑÑÑÖ××ÖÔÔÕÖÕÔÑÎÌÌÌÌÐÐÏÌÇÀ¹µ°§Ÿš•“””“‘‘’”—™š›ž¡¤¦§¨§©«¬«ª«¬±´ºÀÄÄÁ¾´¯¨¤¦­¶¼¸¼¿¾»¹º¼ÇÇÆÅÃÂÁÁ¿¿¾½½¼»»ºº¹¹¹¸¸¸µ·¹¹¸·¸º»»»»»ººº½¿ÁÂÂÃÅÇÄÄÅÆÇÈÉÉËÌÍÏÐÒÓÔÕ×ÚÛÛÜÝßääääååååèèèéééêêëëëëëëëëêêëëéäÞÙÓȸª¡œš™™™—–”’‘’‘‘ŽŒ‹‹Š‰‰‰ˆ‡†‡ˆˆ†„‚‚‚‚ƒƒƒƒ€€|{|†š¦»ÊÚåìñòïññññññññññññññññññññññññññññññññññññññññððððððððïññîîðíèèÜδ¥›™™š›œœ££¤¤¥¦§§«¬®°²´¶·»º¹¹»¾ÁÃÃÄÅÆÈÊÍÎÐÐÐÑÒÓÕÖÚÚÛÜÝßßàâæëîðïïïññòòòòóóòòòòòòòòóóóóóóóóóóóóóóóóòòòòòòòòòòòòòòòòóóóòòñññóòòòòñññððððððïïññññððððññññññññðððïïïîîîîïïîíììîííííììëíëêëìëéæåäáÞÚ×ÔÓÎÌÊÇÃÀ½¼ºº¹·´²°°°¯­ª§¤¡ žœš—–—˜™›¢§ª¬¬¬°±³µ¶¸º»¾¼¹¸¶³­¨¢£§­µ¾ÇÌÌÎÑÒÒÒÔÕÓÓÓÔÔÔÔÕØÚÜÝÜÛÜÝÛÚÚÙÙÙÙÙÕÖÙÚÚØÖÔÏÍÍÎÊÃÂÄÌÐÔ×ØØÙÙ×ÖÕÔÓÓÓÔÕÖ×ÖÔÓÓÕÒÐÍËÉÈÈÈÍÍËÇÀ¹±­¦Ÿ™—”’““’’“–™œž £¦©«¬­«­®®¬«¬­´¶¹¾À½·±§£š¦±¸¸¼¿¾º··¹ÇÇÆÅÃÂÁÁ¿¿¾½½¼»»»ººº¹¹¹¸µ¸ºº¹¸¹ºººººº»»»»½¿ÀÀÁÃÅÄÄÅÅÆÇÈÈËËÌÎÐÑÒÓÔÖÙÚÚÚÛÝâããääåååçèèèééééëëëëëëëëêêëëéæãáÝÔǼµ²±±³³²±°¯®­«ªª©¨¨§§©¨§¦¥¥¥¥¦¥¤¥¦¦¤¢ŸŸŸ    ¡ŸŸŸŸžžž›™›¡¦«´¾ÎÙãéíòòïòòòòòòòòòòòòòòòòòòòòòòòòññññññññòòòòòòòòððððððððîòòïîðïëìåÜÕË¿¹¹··¸¹¹º»»ÀÀÁÁÂÃÄÄÊËÌÎÐÑÓÓÖÖÕÕÖ×ÙÚÜÜÜÝÞàáâäãããäåæçêêêëëëëëéëíîðððïòòòòòòòòòòòòòòòòóóóóóóóóóóóóóóóóòòòòòòòòòòòòòòòòóóóòòñññòòòñññññòòòòññññðððïïïïîððððððððòòññððððóóóòñïííîìêéééçåèåãáßÝÙÖÖÔÑÍÉÄÁ¿»º¸µ³°¯®­®¯®¬ª«¬«ª©§¤¢¡ ¡ žœ›š™™›ž¤ª°µ¸¹º½¿ÁÂÄÇÉÍÊÇÆÅÁº´«®²¸ÀÈÏÓÓÕ××ÕÔÕÖ××ÖÖÖ×ØÙÙÛÝÞÝÜÝÞÝÜÛÛÚÚÛÛÙÚÜÝÝÜÙØÐÏÐÒÎÆÄÆÌÐÔ××××ØØ×ÕÔÓÓÓÓÑÓÕÕÓÑÐÐÍËÉÆÅÄÅÅÈÇÄ¿¹±ª¦Ÿ™•”‘Ž“–•””–˜›ž¢£¦©¬®°°®¯®¬©¨ª«µ¶¸»¼·­¤—”• ¬´º»½¼º¸··ÇÇÆÅÃÂÁÁ¿¿¾½½¼»»¼»»»ººº¹¶¸»»º¹ºº¸¹¹ºº»¼¼½¾À¿¾¾¿ÁÃÄÄÅÆÆÇÇÊËÌÍÏÑÒÒÓÖØÙÙÙÚÜááâãäåææççèèèéééëëëëëëëëêêëêéçææâÜÕÎÊÈÆÄÇÇÇÆÆÆÅÅÁÁÁÁÁÁÁÁÁÀÀ¿¿¿ÀÁÂÁÀÁÂÁ¿½¼¼¼½½¾¾¾½½¼¼¼»»»½»¼ÁÅÈÎÕÝäêìîòòïòòòòòòòòòòòòòòòòòòòòòòòòññññññññòòòòòòòòððððððððîòòïîððîîéæäÞÖÓÔÒÒÓÔÕÕÖÖÖ××ØÙÙÚÚÞÞßáâãäåååååååååèèèçèéêêììëëëìíîíííîîïïïîîîïñòòñòòòòòòòòòòòòòòòòóóóóóóóóóóóóóóóóòòòòòòòòòòòòòòòòóóóòòñññòòòòòòòòóóóòòñññððððïïîîððððððððïïïîîîííïïîíëèæåáÞÛÚÚÙÖÓÑÏÍËÊÈÄÁÂÁ¾º·³°¯«««««ªªª«­¯®¬«¬¯¯®­«ª©©©©©©©¨¦¤£¤¦ª¯µº¾ÀÂÅÊÍÎÑÕÙÚÖÒÑÐË»µ¸½ÄËÑÖØ×ØÚÚØ××ØÙØÖÕÖØÚÜØÚÜÝÛÛÛÜÞÝÜÚÚÚÛÜÜÜÝÝÝÛÚÙÓÐÐÑÍÇÆÉÎÑÕÖÖÔÔÔÖÔÒÐÍÌËÊËÏÒÓÐÍÊÉÈÆÄÂÁÂÂÃÂÀ¼·°ª¥¢ž™––”’”šœ›š› ¢£¥§«®°±²°¯¬¨¤£¥§°°²µµ¯£™‹‰ˆŠ’Ÿ¬´ºº¹º»»º¸ÇÇÆÅÃÂÁÁ¿¿¾½½¼»»¼¼¼»»»ºº¶¹¼¼»ºº»·¸¸¹º»¼½¿ÀÁ¿½»»½ÃÃÄÅÅÆÆÇÊÊÌÍÏÐÑÒÓÕØÙØØÚÛßàáâäåæççççèèéééëëëëëëëëêëëêèçèèèæãàßÜØÖ××××××××ÕÖÖÖ××××Ø××××ØÙÚØ×Ö×ØØÖÔÖÖ××ØØÙÙÖÖÖÖÕÕÕÔÕÓÔØÛÜàæåëîíïòòïòòòòòòòòòòòòòòòòòòòòòòòòññññññññòòòòòòòòððððððððîòóïîðñïîììíêäãæãääåææççççèééêëëêêëìíîïïîïïïîíììïïîííîîïññððððñòíîïðñòòóòðððòôôôòòòòòòòòòòòòòòòòóóóóóóóóóóóóóóóóòòòòòòòòòòòòòòòòóóóòòñññóóóóóóóóòòòññððïñññððïïîïïïïïïïïëëêêééééááàÞÛØÖÔÌÉÅÃľ»¸·¶·¸·µ³´³±®«¨¦¥¢£¥¦¨ª«¬¯²³²°¯±³¶¶µ´³³³´²³µ¶µ³±¯±±³µ¸»¾ÀÇÌÑÕ×ÛàåàÜØÖÕÐÇ¿½ÀÆÍÓØÛÝØÚÜÜÚÙÚÛØ×ÔÓÔÖÚÜÛÝßßÞÝÞßÜÛÚØØÙÚÚÛÛÛÛÚÙØ×ÕÑÏÎËÆÈÌÐÓÖÖÔÒÑÑÒÐÍÉÆÃÁÀÇËÏÑÎÊÆÄÅÃÂÀÀÀÁ¾»·±«¥¡Ÿ œšš™—›¡¤£¡ ¡£¥§£¥§«®°±²°­©¤ŸŸ¡¤©©«®¯¨›†……Š“¡®·º¸¶¸¼¾½ºÀÁÂÃÂÀ¾¼ººº»»¼¼½¼º¸¸º»»ººº»»»ºº¹»»ºº¹¹¹¹¾¾¾¿¿¿¿¿ÂÄÆÇÆÇÉËËËÍÎÏÑÒÓÓÕÖ×××ÙÛàßÞÞàäçéæååæçèéêêêêëëìììëëëëëëëëææææææææââââââââáâââããããââââââââääääääääææææçççèãäååååäããäåçèèèèìíîïñòóôñññòòóóóòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòññññññññððððððððîîíìëêêéëëëëëëëëëëëëëëëëííííííííîîïððïîîððððððððòòòòòòòòññññññññóóóóóóóóóóóóóóóóòòòòòòòòôôôóóòòòðððñññòòóòòòòòòòóóòññòòóòóóóóòññôôôòðððòöóðïðñðïïïïðòóòðîîíííìììîëæâàÝÚ×ÙÖÐÊÄÀ½¼´´²®ª¨©«¦¦§ª¬®­¬­¯°®ª¦¥¤¡£¦©¬¯°±µ¸ºº¸¸»¾À¿¾½½½½¾¿Âÿ¾¾¼····¹»½¿ÀÆËÒØÜÞàáããáÜÖÍÅÀÀÄÊÑ×ÚÛÛÜÜÝÝÝÜÛÚÙØ×Ö×ÙÜÞÝÝÝÝÝÝÞÞÜÛÙØØÙÜÝÞÝÜÜÜÛØÖÕÐÎÐÐËÈÈÏÐÒÓÒÏËÉÍËÇÀ»º¼¿ÂÈÏÑÍÈÅÅÁ¿½¼¼¼¹¸¸·¶³«¤£¥£¡ŸŸ¢¤¥¤§¤¢£¥¦¤¢ žž¡§®²µ²§Ÿ £¢¡¢ž«±­ª©Ÿ‘‡††Š”¢°¹¹¸¹»½½»¹´µ·¸¸¶´³³³³³³³³³µ´³´¶¸¸¸¹¹º¼¼¼¼¼¸¸¹ººº¹¹»»»¼¼¼¼½¾ÀÂÃÃÄÆÈÈÈÉÊÌÍÎÎÐÒÕÖ×ØÛÝáààáâåçèææææçèéêêêêëëëììëëëëëëëëèèèèèèèèèèèèèèèèèèèééêêêììììììììêêêêêêêêééééêêëëìííîîííììíîïððððíîîðñòóóñññòòóóóòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòññññññññðððððððððïïîîííìííííííííïïïïïïïïïïïïïïïïïïððððïïððððððððòòòòòòòòññññññññóóóóóóóóòòòòòòòòôôôôôôôôñññññðððööööõõõõóóóóòòòòñðïïïïðñòóôôôôóóòóóòññòóóòññòñïìñïíìììéçæäáÞÚØÖÕ×ÔÏÌÉÆ¿¶´°¬§¤¢¡œœ™•‘‘“• ¡£¦©««ª­¯±°¬¨¦¥¤¦ª®²¶¸º»¿ÂÄÄÅÈËÇÆÄÃÂÃÄÅÇÊËÇÆÆÿ½½¼¼¼½¾¿ÅÊÑÖÚÝàâåãßÚÓÌÆÃÂÆÌÓÙÜÝÝÜÝÝÝÝÜÛÛÙØ×Ö×ÙÜÝÜÜÜÜÜÜÜÜÛÚØ××ÙÛÝÝÜÚÚÛÚØÖÓÍËÌËÇÄÅÎÏÑÑÏÌÈÅÆÄÀ»··¹¼¿ÅÊËÇÁ¾½ººº¹¸··¸µ·¹¸³®¬¬©¦¤¤¦©ªª¯¬¨§¥¢™–––›¢ª¯²­¥ŸŸŸœ§±¶²¯¬ ˆ††‰’ž«´·¹»¼»º¹¸®¯°²²±°¯­¬¬«ª©©©¬«ª¬¯²²²²³µ·¸ººº¶¸º½¾¾¾¾¼½½½¾¿¿¿¿ÁÃÄÅÆÈÊÊÊËÌÍÎÏÏÐÒÖØÙÜßáààáâãääåææçèèéêêêêêêëëëìëëëëëëëëëëëëëëëëììììììììíííîîîïïîîîîîîîîîîîîîîîîìíííîîîîîîïïïïîîíîïñññññïïððñññòñññòòóóóòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòññññññññððððððððññññððððððððððððòòòòòòòòòòòòòòòòðññòòññðððððððððòòòòòòòòññññññññôôôôôôôôòòòòòòòòôôôôôôôôòóóóóóóóññðïîîííôôôôôôôôòññððññòòòóóôóóòðððððñññîîîïïìèåêçâßÝÚ×ÕÑÏÊÅÀ¼º¹»¸µ²°¬¨¤¦¥£¡Ÿ›š—•’Š‹“›ž¢§«­­­°³¶¶²­ª¨©¬°µ»ÀÄÆÇÊÍÏÐÑÔÕÏÍÉÇÆÈËÍÐÓÔÑÏÐÌÇÈÆÃÀ¾½½½ÂÆÌÑÕÙÝàáÞÙÓÎÉÆÄÅÈÏÖÛÞßßÝÝÞÞÝÜÛÛÙ×ÖÕÖØÛÝÛÛÛÛÛÛÛÛÚÙ×Ö×ÙÛÝÝÛÙØÙÙØ×ÓÌÈÇÆÁ¿ÀÈÉÊËÉÅÁ¿¾½º¶³³¶¹¼ÁÆÆÀº·¶³¶¸·´´·»º¾ÁÁ½¹¶³°­ª©«­¯¯´±­©¥ž–‘‘–ž¦«­§¢ ¡¡žž¢®µ¹·¶±£’‹‰‡‰›§®´¸¼¼¹¶¶·©ª¬­®®®®©©¨¦¤£¢¡¤¢¡¢¥§§§¦§©¬®°°±¯±µ¸»¼¼¼»»¼½¾¿ÀÀÁÃÅÆÇÈÊÍËËÌÍÎÐÐÑÎÑÔÖ×ÙÜßÞÞßáááááææçèéêêêééêêêëëëëëëëëëëëëëëëëëëëëëëëëëëëìììíííîîììììììììîîîîîîîîîîïïððððìíîîîîíììíîïððïïñññññññññññòòóóóòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòññññññññññññññññññññòòòòððððððððððððððððòòòòòòòòñòòóóòòñññññññññòòòòòòòòòòòòòòòòôôôôôôôôóóóóóóóóóóóóóóóóóóóóôôôôõõõôôôóóóóóóòòòòóòñðððññññññðïíìëêêêêêéçåãáßÞÛ×ÔÔÐËÆÄÁ¾»³°¬¨¥¤¤¤¥¤££¢ œ˜•••””“’’‘‹†„‡’¢©¯³µ·¸¸»¿¿»µ°®¯±¶¼ÃÊÏÒÔÖ×ØØ×××ÓÐËÇÇÊÎÑÕÚÛÙ××ÔÏÑÎÈþ»¹¹º½ÂÇËÏÔØÔÓÑÎÊÇÅÃÆÉÐÖÛÞßßÞÞÞÞÝÜÛÚØ×ÕÕÕØÚÜÚÚÚÙÙÙÙÙÙØÖÖÖØÛÝÞÜÙØÙÚÙØÕÍÆÿ¹·¸º»¾¿¿¼¹·¸¸¶²°°²µ¹¾Ãþ¹¶¶³·º¹¶¶¼ÂÆÊËÇÄÁ½¸·³®««­¯°²°­¨¡˜ŠŠ‹Ž•¤¨©£¡£¦¦¥§­°¶»¼¼¶§—‘Ž‹‹™¤«°¶»º¶³´· ¡¢£¤¥¦¦¥¥£¡Ÿœ›Ÿœšš››š™šœŸ¡¢¢¢Ÿ¡¥©­¯±±³´µ¶¸¹º»½¿ÂÃÄÅÈÊÇÈÉËÌÎÏÐÍÐÒÓÔÕØÚÞÞàáááááåæçééêéééééêêêëëëëëëëëëëëëëëëëëëëëëëëëëëêëëëììììîîîîîîîîîîîîîîîîîîïïïððððññòòññððñòóóóòòòòòññññðñññòòóóóòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòññññññññññññññññððññññññððððððððððððððððòòòòòòòòòòóóóóòòññññññññòòòòòòòòòòòòòòòòôôôôôôôôôôôôôôôôóóóóóóóóññññññññòòòòòóóóòòñðïîîíðïíìëëëëììëêèåãâáßÝÜÝÛ×ÔÒÍÇ¿½»¹µ²®«©§¤¡˜•‘Ž‘“—˜šœžžš—‘‘‘‘‘‘’’”‘‰‡‹“˜¡©²º¾ÀÂÄÃÇÊÉž¹¶´¶»ÁÉÑØÛÜÝÞßÞÝÛÙÔÐËÇÇÊÏÒØÝàÞÝÞÚÕÕÑÉ»¶³²°³¸¼¿ÃÈËÆÈÊÌËÉÆÄÅÉÏÕÚÝÞÞÝÝÝÝÜÛÙÙ×ÖÔÔÕ×ÙÛÚÚÙÙØØ××Ø×ÕÕÖØÛÜßÝÛÚÚÚØ×ÑÉÀ¼¶¯««©¬¯²´³±°³²±®¬¬®°µ»ÀÁ¾»º»º¾ÁÀ½¾ÄÊÏÒÑËÈÈĽ¹³¬§§¨ª«¯®«¤š†€‚ˆ‘œ¥ª«¥¤¥¨¨¦©®±·½À¿¶¦˜•’Ž‘™£©®³·¶±¯±µ›œœžŸ   Ÿ›™—–•š—”’’‘Ž’’“““’‘‘‘”˜œ £¤©ª«­¯±²³·¹¼¾¿ÀÃÅÃÄÆÈËÍÏÐÑÓÕ××ØÛÝßßààáâãäãäæèééèçèéééêêêêëëëëëëëëêêêêêêêêííííííííëìììííííîîîîîîîîððððððððíîîîïïïðññòòòòñññòòóóòòñòòòòòññññññòòóóóòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòññññññññòòòòòòòòññññððððïïïïïïïïòòòòòòòòñññññññññòòóóòòñòòòòòòòòòòòòòòòòóóóóóóóóóóóóóóóóóóóóóóóóôôôôôôôôóóóòòñññîîîíííììòñðîìêéèèçåãáàßßÝÜÛÚØÕÓÑÎËÈÈÈÆÀ»·±ª¤¡ŸŸž›™™˜—“‰†‚‚†‰’”˜ž¡¢Ÿœž›šššœ™—“”œ¡§°¼ÅÈÊÌÎÐÒÔÒÌÆÁ¾º¼ÀÆÎÖÝáààáãäãßÜÒÏÊÆÆÉÍÐÖÜßßßàÝØÓÎƽµ¯¬«¨«°´¶¹¼¿¿ÁÆÉÊÉÇÅÅÉÏÕÙÜÜÜÜÜÜÜÛÙ××ÖÕÔÓÔÖÙÚÚÚÙÙØ××ÖÖÕÔÔÕ×ÚÜßÝÛÛÚØÕÒÉÀ¹´®¦  ž¡¥ª¬­¬«¬­­«ªª­¯·¼ÂÄÃÁÂÃÅÇÈÆÅÆËÐÐÕÔÍÌÎȾ´®¦  ¢¥§¯­¨ž‘„{wrw€œ§­¯«¦£¤£Ÿ £¯·ÁÅÀ´¥š›—“’•§­±²²°¬ª¬¯››››œžžœœš˜–•““•’Œ‹‰‡‰‰ˆ†„‚~}~‚†‹’—˜šœž ¢¢§ª­®¯±´¶·¸»¾ÁÄÇÈËÍÐÒÔÖÙÛÜÜÛÜÝàâäáãåçèèçæèèéééêêêëëëëëëëëëëëëëëëëííííííííììííîîîîììììììììððððððððíîîîïïïðïïððððïïïïððððïïññòòòòòòñññòòóóóòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòññññññññòòòòòòòòóòòññððïððððððððòòòòòòòòòòòòòòòòññòòòòññòòòòòòòòòòòòòòòòóóóóóóóóòòòòòòòòññññññññññññññññòñðïîíììððîíëéèçáàÞÛØÖÓÒÒÐÍÊÇÅÃÃÁÁÁÀ¿½¼»¶³°±²°ª¤ œ—“‘Ž“““”•“Ž‹…‚~}~„ŠŽš¢¨¬¬©¥¤¢žš™šœ•”’•œ¡®¹ÆÏÓÔÖØÚÛÛ×ÑÊÅÃÁÂÆËÒÚáåãââääâÝÙÌÉÅÂÁÄÇÊÍÓØÙÚÜÙÔÏÊÁ·®©¦¥¤¨®±³´¶·»½¿ÂÃÃÂÂÆÉÏÕÚÜÜÜÛÛÛÚÙ×ÖÕÖÕÓÒÓÕØÚÛÛÚÙØ××ÖÕÔÓÓÔ×ÚÜÝÜÛÛÙÕÐÌÁº´±¬¤ž›ž£§ªª©¨©«¬­®°³¶ÀÅËÍÌËÌÎÏÎÌÊÊÌÏÑÐ×ØÒÐÏŶ«¥ž™šŸ¤¦«©¤™‹xuqv€¨®°­¤žœ™˜˜§²ÁÈöª¤¤¡œ ¨²¸¸´¯ª¦¥¥¦˜˜˜˜˜™ššœœš™—•”“‘‹Š‰ˆ†…‚}yurpiiikou{~‚ƒ…‡ŠŒŽ“•˜š› ¢¦§ª­±µ¸¹»¾ÂÅÇÊÎÑ××ÖÖØÛßáàâåçèçæäèèèééêêêëëëëëëëëììììììììëëëëëëëëìììíííîîïïïïïïïïïïïïïïïïîîîïïïðððññòòññððññòòñððñññòòóóóñññòòóóóòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòòññññññññòòòòòòòòõôóòñððïññññññññññññññññóóóóóóóóðññòòññðòòòòòòòòòòòòòòòòóóóóóóóóññññññññïïïïïïïïëëëëëëëëèèæåãâáàÜÛØÕÒÏÌËÇÆÃÀ¼¹¶µµ³°¬©¦¤£©©ªªªª©©¦£ ¢¥£—•“ŽŒŠ’“”–—”‹†ƒ…Œ”™¥¨­´¸·³¯²®¨¤¡¢¥§££¢ ¡¥¬±µÀÎ×ÚÛÝàßàÞÙÒËÇÅÅÆÉÎÔÜãççåãâáÝÖÐÅÿ¼¼¾ÁÃÄÊÐÑÓÕÓÎËƼ²ª¤¢¡¤¨®²³³³´¹¹¹¹º»¼½ÇÊÐÖÚÝÝÝÚÚÚÙØÖÔÓÕÔÓÒÓÕØÙÜÛÚÚÙØ××ÕÔÓÓÔ×ÚÜÚÚÚÚØÓÌǾ¸³³¯§¢¡ ¤¨ªª¨§ª¬¯±´·¼¿ËÐÕ×ÕÔÕ×ÔÑÍËÌÏÐÐÒÚÝÖÒξ«¥Ÿ˜•—ž¤§¥¤Ÿ•‰€{zx}†“ ©­®¬¡˜˜š˜––«¾Éź²°®«§¦ª³½Ã½·®§£¡ Ÿ’•——••—š˜™™™˜–”“”ŠŠŒ‹‡‚€}yslea^ZVX`glntuuuux|€€€ƒ†‰‹’–™›ž¢¥ªª¬°µº¿ÂÅÅÆÈËÎÒÔÖØÚÛÜÝßáââãäåççèèéêëëëëëéëìëêéêìììëëëìííîííííîïïñððïïîîîîïðñðïíìïððññññðòòòòññññòòòòòòòòòòòòòòòòóòññññòóóñïðòóóòòóôõôóñðòòòòòòòòððñòòóôôñññðððððññññòòòòððððññññòòòòòòòòòðïïññðîòñðñóôóñññòòòñðïññòòóôôôóòòññðððððððððððñððïððññóðîììëèæãâáßÝÛÚÙÛØÕÒÏÌÉÆÁ¿¼¸µ²°¯¬«©¦£ žš™—”’“–™™œŸ¢¢¤¦¨Ÿ¡¤¦¥¢žœ••”’‘’“˜™œ ¢Ÿ˜’Œˆ†‰‘›¢µºÀÄÅÃÁÀ»¹µ±¯¯°±ª¬­¬ª¬±¶¼Ê×ÚÜâåäåãáÜÖÐËÈÆÅÇÐÜäæäçåâßÛÖÏʽ·´¶¸¹¸ÃÇÍÐÐÏÎÍÊƾ¶¯©¦¥ ¨°µ¸»¸³µµ¶¶¶¶µ´¸ÁÏÙÜÝÝÝÙØØØÙ×ÔÑÐÏÍÏÒÕ××ÛÚØØÚÚÙ×ÓÒÒÒÓÕ×ØØÚÛÚÖÐÊƼµ°°¯©¤£ £«´³­®³·µ¶¹»½ÄÌÎÓÖÕÔ×Ù×ÕÐÊÅÀ½ÃÌÓÕ×ØÓƵ©š—“‘•œ¥«§§¢—‰||~€‡“ ª¬¬¥˜šœš›­¾ÅÅÄ¿»»º·µºÅËËŽ±§ œ›’•——••—š—˜™™˜—•””‹ŠŒŒ‡ƒ€~{wph`[SOJKRZ_a]^^]\]adjjjlnqsuwz~ƒ…‰‹’”™¢¦©°±²´¶º½¿ÀÂÅÆÇÈËÍÕÕÖØÙÚÛÜÞÞàâäååææçééèèéëêêêêêëìíìëëëëìííîîîîîîîîíîîïïïîîíîïïððïïïïïïïïïîóóóóóóóóòòòòññññóóòòòòóóôòðñóôôóôôôôôóòòòòòòòòòòõõôôóòòñòòòñññððññññññññïïïðððððïïïïïïïïñïîîððîíòñððòòñðïððñññðïðððïîîííððïîìëêêëëêéèèççæäâßÜÙØ×Ú×ÕÓÓÒÏÍÈÈÆÄÁ¾¼ºµ³±®«©¦¤ Ÿœ™–”“’ŒŠˆ†„‚„„„‚‚…ŠŽ“—œ ¢£¥§¤¦©«ª¨¥¢žžœœœžŸ¤££¤§¦£Ÿ™•š¥®ÃÈÎÒÒÐÏÎÍËÇÄÂÃÄŽ¼ºµ±²¸½ÀÍÙÜßãæååäâÞØÒËÈÆÇÉÐÙÞßÞÛÙØÖÔÐÊƼ·±¯²¶¸¹ÃÈÍÑÐÎÌËËÇÀ·°«§¦¤­µ¹¼¾»µ²³³³²±¯¯´½ÊÕÚÛÜÜÛÚÙÚÚÙÕÓÐÎÍÏÒÖ××ÚØ×ØÙØÖÔÒÑÐÐÑÓÕÖÛÜÜÚÔËý¹´±´³­¨¦ª­´¼¼¸¹¾Á¿ÁÅÇÇÍÓÑÕ×ÕÖØ×ÒÎƽ·³³¼ÇÒÓÔÓ̽¬Ÿ’ŒŒ’œ§®°®§™Š{{€‚‰”¡«®®¥—˜™–•• ±ÃÊÊÉÇÄÈÈÄÁÄÌÐÎû¯¦¢ žœ“•——––˜š–—˜˜˜—––”ŒŒŒ‰…ƒ}xqg]VIC==CKQSWWWUSRSURRSTVXZ[^aehiknpuw|†Š—˜™›ž¡¤¥¨«®°±³¶¸¿¿ÁÂÄÆÇÈÉÊÌÎÑÔÕÖÙÚÜÝÝÝßáààààáãäåèèèèèéêëëëìíîîïïîîîîïðñòïïðñòòññððððððððññññññññññññññññóòññññòóóñïðòóóòôóóòññòòññññððððôóóòñððïòòññððïïððððððððññññññññðððïïïïïóñððññïîòðïïðïîìëìííííìììëêèæäãâãâáßÝÛÙØÙØ×ÕÔÒÑÐÍËÈÄ¿»¸¶¶³±°¯®«©¦¦¥£ œ™—š™˜•“‘ŽŒŠ‰‡‡††…„„ƒ‚€€{|}~€…‹“˜Ÿ¥¨ª¬®°²µ··¶³±®®­¬¬­®¯¯ª¦¦©¬¬«¥¢š§´¾ËÐÕÙÙ×ÖÕÖÕÒÐÏÏÑÒÐÎÈ¿¹¸½ÃÆÑÛßáåçæååäáÛÔÌÈÇÉÌÐÓÔÕÔÏÏÎÎÎÌÇĸ´®­°¶»¾ÄÉÏÒÑÍÊÈËÇÀ¸²­ª©«³»¿Á¾·³²²±¯­«ª¯¸ÄÐÖÚÛÜÛÚÙÙÚØÕÒÏÎÍÏÓÖØØØ×××ØÖÓÐÍÍÍÎÐÓÖ×ÝÝÛ×Ïż¶·´¶»º´­¬´¸¿ÆÆÄÆÊÌËÎÒÒÐÓØÕ×Ø×ÙÙÓËø¬¥£¨¶ÃÓÓÓÏŵ£—Œ”Ÿª±¶²©š‹~~‚„‰”¡«¯¯£™šš—–˜§¹ËÑÏÏÐÑÕÕÒÎÏÔÔÐÅ»°©§¦£ ”•–———˜™––——————”’ŽŽ‹ˆŠ†‚|uj]SE>649BILMNMKGDCCDDDEEFGGJMQSTUWY]`flrvyzƒ„…‡‰ŒŽ’”˜š›ž¡¤¦§¨ª¬®¯°°±²´·¹¼½ÁÃÅÆÆÇÊÌÌÌÌÍÏÐÒÓÙÙÙÙÚÛÜÝÞÞàáãäåæææååçéëíêëìíîîîíííííîîîîííííííííðððððññññððïïððññïîîðòòñóòðïîïðñîîîîîíííìììííîîîîîíììëëêìììììëëëëëëêêééèéééèèèèçéèææççåããáßÞßÞÜÚÛÛÛÛÚØ×ÖÖÕÓÑÏÍËËÉÈÆÃÁ¾¼»º¹·µ³±°¯«ª¨¦¢Ÿ›•’ŽŽŠˆ‰ŠŠŠ‰†ƒ€€€~|zzz{{zz{{|}~~€€€‚„†ˆ‹‘™žž¥­´¸»¼¾ÁÃÅÈÈÇÅÄÁ¿¾½½¼º¸¯¨¡¡¦«­­ªª©¨«´ÀÉÍÒ×ÙÙØ××ÖÕÓÒÑÒÔÕ×ÕÐÇ¿¼¿ÃËÒÛàãåææåææäÞÖÍÈÇÊÌÍÌËËÌÌÌÌÍÎÌÈż¸³°²¹ÀÄÇËÑÓÑÌÈÆÇþ¸³°®®±¹ÁÄÆÆÁº·¶µ³°­ª©­µÀËÔÙÛÜÙØ×××ÕÒÏÎÌÌÎÒÖØÙØ××××ÔÐÍÉÊËÍÑÕÙÛÛÙÔÏÈÁ¼¹»»¾Äú³±º¿ÇËÌËÎÑÓÒÓÕÓÏÏÓ×ØØØÚÙÏ÷ª›•–¡´ÄÔÕÔÏò¡–“““–œ¤¬±µ°¦˜‹„ƒ„‚‡’ž¨­­¢ŸŸ¡¡Ÿ ¥±ÃÓÖÓÓÖØÙÚØÕÕ×ÕÏÊÀµ¯®­¨£–•–—˜™™™——————˜˜–”“’‘ŽŠ…€ym]RD<2/4>FJKLLID?=<>>=<;9877:>@A@ABEIOV]cfhqrsuvwxxy{ƒ…ˆ‹Ž’“•–—ššššœžŸ¡¥§ª««­¯±³³³´¶·¹º½½½¾¿ÀÁÂÅÅÇÉËÍÎÏÐÐÐÐÒÔ×ØÙÚÛÝÝÞÞÞßààááâââççççççççééêêëëììííììììííîìêëíîîíïîìëêëìíêêêééèèèåååæææææããâáàßßÞßßÞÞÝÝÜÜØ×ÖÖÔÔÓÒÒÒÑÑÐÐÐÏÎÌÊÊËËÉÇÄÂÀ¿¿¾¼º¼¼»º¸µ³²²±°¯­¬«ª©¨¦¤¡Ÿž™™—•“’‹‹‹Šˆ…ƒ‚|ywuutqoqsuwxyyyuwxwutuwyyz{|€‚‚ƒ„†‡ˆ‰ŒŽ‘•›¢§°¶¿ÆÊÌÍÎÏÐÒÔÕÔÓÒÐÎÌËÉž¹¨ ˜˜Ÿ¦¨¨©­±´¶½ÆÎÒÖÚÜÜÛÚÚÙØ×ÖÖ×ØÙÖÖÔÍÆÁÁÃÍÑØßãäåææççäßÖÎÉÇÈÉÈÆÅÅÆÍÍÍÎÏÍÉÆÁ¾¹µ¶»ÂÈËÏÔÕÑÌÇÅ¿»·´³³³¶¿ÇÊËÊļºº¸µ²®«©¯´¾ÉÓÙÛÜÙØ××ÖÔÑÎËÊÊÍÑÖØÙÙØÖÕÕÒÎËËËÌÍÐÓÖØÕÑËÅÁÀÀÁÂÂÆÊǽ¶µ¾ÅÍÐÐÑÓÔÕÒÑÐÌÆÅÉÔÖØØÚ×ʼ¬ž‹Ÿ´ÅÒÔÔα¡˜”•˜¢©®²´®£–‹†…†‚‡’ž§««§§©¬ª§ª±¾ÌØØÔÕØÚØÚÚ×ØÙÖÐÍÅ»´±®¨¤—–•–™šš™˜˜—–––—˜˜——•”“’‘ŽŠ†‚|p_RD;0,1=;84/,*-04665456:@HQX]`cdeffeedhjmopruxzz{|}~€…„ƒƒƒ„†‡‹Ž‘‘’•—™™™š›œžŸ££££¥¦¨©«¬­¯±³µ¶··¸¸º¼½¾ÂÃÄÆÇÈÈÈÌÌÌÍÎÎÏÏÕÕÕÕÕÕÕÕÔÕÕÖ××ØØÝÜÜÛÛÜÜÝÝÛÚÚÜÝÝÝÝÜÜÛÚÚÛÛÙÙØ××ÖÖÕÖÕÔÓÑÐÏÎÌËÊÉÈÇÆÆÃÃÂÁÁÀÀ¿¾½¼»¹¸·¶µ´´³²²±±®¬ªªªª¨¦¥£¡   žœžž›™–”“““’‘‘‹‹Šˆ‡…„„€€~}||wxxwtqnmmjhgfeb``beimruwwz}}zz}€‚ƒ„†ˆ‹Ž‘’”–˜šœš›Ÿ¢¨¯´ÂÆÍÒÕÖØÙ×ØÚÛÛÛÚÙÙ×ÖÕÒʾµ¡—•Ÿ££¦¬´¹»ÀÉÐÔ×ÛÜÜÛÚÛÜÛÛÚÚÚÚÛÕ××ÒËÆÆÇÎÐÖßããäççççäÞÖÏÊÅÄÂÁÂÃÅÆÍÍÍÎÏÍÉÆÃÁ½¹¸¼ÃÈÑÔÖÕÑËÇÅÁ¿»¸¶¶·¸»ÃÌÏÐÏÈÀ½½»¸´°­«²µ½ÇÑ×ÚÚÙØÖÖÖÔÐÍÉÈÈËÐÔ×ØÚ×ÔÒÐÎËÉÍÌËÊËÌÍÎÏËÅÀ¾ÀÄÇÅÅÇÉĺµµÁÊÓÕÔÕÕÔÑÌÇľº»ÀÌÒÖØØÒŸ¦™ŒŠ’¡µÄÎÐÑË¿¯¡™‘’•™ ¨¯³¶¯¤˜Ž‰‡†„†˜¥­¯®±³¶¸³¯²¹ÉÓÚØÖ×ÙÙÙÛÛÙÚÜÙÓÌÇÀ¹³®©¦˜–•–™›š˜š™—–••–—ššš™—•••Œˆ†ucUF<0,2>IOMOQPKFB@FDA;5.(%)-121//..17@JS[_``a`_^\[^aceegjljjkkllmmpnmllnpqvxzzz{}€€€€€‚ƒ‰‰‰Š‹Ž‘’”–˜™šššœžŸŸŸ£¤¦§©ªªª®¯¯°±²²³³³³³³³³³±²²³´µ¶¶º¹¸¸¸¸¹ºº¸¶·¹ºº¹¸¹¹¹¸¸·¶µµ´´³²±±²²±¯­¬«ª©©¨§¥¤££  ŸŸžœœžœš™—–•••”““’‘‘Ž‹‹‹‹ˆ‡ˆ†„„„„‚€€}|{}}|{yxwwsssrrrrrqqqqqqrrnoponkhfigdcba_\\]`dkrx{w|}}…‡‡‰‹Ž’”–›œž¡£¦§¨¬®°²µ»ÃÈÐÓ×ÚÛÜÝÞßßàààßÞÝÜÛÛÛØ;²‰–ž ¤«³¸ºÀÊÓÔ×ÚÜÛÚÚÚÜÜÛÛÚÚÙÙ×Ø×ÑËÇÈËÐÏÔßåäåéèèæâÜÕÏËÄÀ»»ÀÅÇÈÌÌÍÎÐÏÌÉÃÃÁ¾½¿ÆË×ØÙÖÑËÈÇÅ¿»¹¹¹º¿ÈÑÔÖÔÎÆÃÂÀ½¹µ²°´¶¼ÅÎÕÖÖÕÔÒÒÑÏËÈÆÅÅÉÎÓÖ×ÚÖÐÌÊÉÇÅÅÅÄÃÄÅÇÈËÈÄÀ¿ÀÂÄÂÁÁ¼´²´ÀËÕÖÕÕÓÏž·³®¬±¹ÃÌÕ×Õζ«Ÿ””œ©¹ÆÍÐÑ˽­ ™•“‘’˜¡«²¶°¦œ•‘Ž˜¤°·¸¶»¾ÃÅ¿º¿ÈÑÖÙ××ÛÛÙÙÛÛØÙÛÙÓÌËÇÀ¸²¯¯˜–”–šœš˜›š˜–•••–›œœ›˜——˜“ŒŠ‡{iZI?3.4AMS^acc^YUSPMIC:2+'$(,-,*)(&)/8CMV[cddca_\[WY[\]^`bbbbbbbbb_^]\]_bcgiklklnpooonnopprrrsuvxyxyz|}€€‚„„„ƒƒ†‡‰ŠŒ‘’’“”•––••••••••””•–—˜™™™™˜˜˜˜™™™˜–—™šš™—˜™™™˜–•••”“’‘ŽŽŽŽŽŽŒ‹Šˆ‡‡ˆ‡‡†…„ƒƒ€}{yxw|{{zyxwwxvtssrpnonllmlkiiijjjjihlkjhfdcbddeefggghiijklmmkmnponljkifeeca__`bgnv~‚Š““‘‘–š›œž £§ª«®¯±³¶¹º»¸º¼¿ÃÉÑÖÙÛÞßÞÞàáååååäãâáÛÛÜÞÛϾ±šŠxt~Ž™ž¤«²¶¸¿ËÖØÛÞßÞÝÝÞßßÞÝÜÜÛÛÙØÕÎÈÆÈÌÑÏÔßæåæëéèåàÛÔÏÌý¶·¿ÆÊÊËÌÍÐÒÒÏÍÄÅÄÂÁÄÊÏÛÛÚÖÐËÉÈÉÇþ»ºººÁËÔØÚØÑÉÈÇÅÿ»¸¶¶·»ÃÌÒÔÓÏÎÍÌÌÉÅÂÄÄÄÇÍÒÕÖÙÔÍÈÆÅÄúº»¼¿ÂÅÇÉÈÅÃÁÀ¿¿½»»»µ¯¯³½ÉÔÔÓÓÐÊ»³ª¥¢¢ª´½ÉÔÖÓËÀµ³¨žŸ§²¾ÉÐÓÓ̾®¡šž™‘‘›§¯³®¦ ›™˜—”˜¡®ºÀ¿½¿ÄËÎÊÆÌÖÔ×Ø×ÙÞÞÛÚÛÚ××Ù×ÑÍÏÎǾ··¹ \ No newline at end of file diff --git a/tutorial/bridge/opencv/tutorial-bridge-opencv-camera-param.cpp b/tutorial/bridge/opencv/tutorial-bridge-opencv-camera-param.cpp index c5fb8621e7..2bc7c8a295 100644 --- a/tutorial/bridge/opencv/tutorial-bridge-opencv-camera-param.cpp +++ b/tutorial/bridge/opencv/tutorial-bridge-opencv-camera-param.cpp @@ -1,12 +1,20 @@ //! \example tutorial-bridge-opencv-camera-param.cpp #include -#include + #include + +#if defined(HAVE_OPENCV_IMGPROC) \ + && (((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_CALIB3D)) || ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_3D))) + +#include #include #include -#if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_CALIB3D) && defined(HAVE_OPENCV_IMGPROC) +#if defined(HAVE_OPENCV_CALIB3D) #include +#elif defined(HAVE_OPENCV_3D) +#include +#endif #include #include @@ -32,7 +40,9 @@ int main() //! [Load ViSP image] vpImage I; - vpImageIo::read(I, "chessboard.pgm"); + std::string image_name = "chessboard.jpeg"; + std::cout << "Read image: " << image_name << std::endl; + vpImageIo::read(I, image_name); //! [Load ViSP image] //! [Convert ViSP 2 OpenCV image] @@ -51,14 +61,24 @@ int main() //! [Convert OpenCV 2 ViSP image] //! [Save image] - vpImageIo::write(IUndistorted, "chessboard-undistorted.pgm"); + image_name = "chessboard-undistorted.jpeg"; + std::cout << "Save undistorted image: " << image_name << std::endl; + vpImageIo::write(IUndistorted, image_name); //! [Save image] } #else int main() { - std::cout << "This tutorial required OpenCV imgproc module" << std::endl; +#if !defined(HAVE_OPENCV_IMGPROC) + std::cout << "This tutorial requires OpenCV imgproc module." << std::endl; +#endif +#if (VISP_HAVE_OPENCV_VERSION < 0x050000) && !defined(HAVE_OPENCV_CALIB3D) + std::cout << "This tutorial requires OpenCV calib3d module." << std::endl; +#endif +#if (VISP_HAVE_OPENCV_VERSION >= 0x050000) && !defined(HAVE_OPENCV_3D) + std::cout << "This tutorial requires OpenCV 3d module." << std::endl; +#endif return EXIT_SUCCESS; } #endif diff --git a/tutorial/bridge/opencv/tutorial-bridge-opencv-image.cpp b/tutorial/bridge/opencv/tutorial-bridge-opencv-image.cpp index aebd60ca44..79f3ef3c70 100644 --- a/tutorial/bridge/opencv/tutorial-bridge-opencv-image.cpp +++ b/tutorial/bridge/opencv/tutorial-bridge-opencv-image.cpp @@ -2,10 +2,12 @@ #include #include + +#if defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_IMGCODECS) + #include #include -#if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_IMGCODECS) #include #include #include @@ -19,38 +21,43 @@ int main() { //! [Load ViSP color image] vpImage Irgba; - vpImageIo::read(Irgba, "monkey.jpeg"); + std::string image_name = "monkey.jpeg"; + std::cout << "Read color image: " << image_name << std::endl; + vpImageIo::read(Irgba, image_name); //! [Load ViSP color image] - //! [Load ViSP grey image] - vpImage Igrey; - vpImageIo::read(Igrey, "monkey.jpeg"); - //! [Load ViSP grey image] + //! [Load ViSP gray image] + vpImage Igray; + std::cout << "Read gray image: " << image_name << std::endl; + vpImageIo::read(Igray, image_name); + //! [Load ViSP gray image] //! [Convert to OpenCV color image] cv::Mat cv_img_color; vpImageConvert::convert(Irgba, cv_img_color); //! [Convert to OpenCV color image] - //! [Convert to OpenCV grey image] - cv::Mat cv_img_grey; - vpImageConvert::convert(Igrey, cv_img_grey); - //! [Convert to OpenCV grey image] + //! [Convert to OpenCV gray image] + cv::Mat cv_img_gray; + vpImageConvert::convert(Igray, cv_img_gray); + //! [Convert to OpenCV gray image] std::cout << "Save converted images from vpImage to cv::Mat" << std::endl; std::cout << "- monkey-cv-color.jpeg" << std::endl; - std::cout << "- monkey-cv-grey.jpeg" << std::endl; + std::cout << "- monkey-cv-gray.jpeg" << std::endl; //! [Save OpenCV color image] cv::imwrite("monkey-cv-color.jpeg", cv_img_color); //! [Save OpenCV color image] - //! [Save OpenCV grey image] - cv::imwrite("monkey-cv-grey.jpeg", cv_img_grey); - //! [Save OpenCV grey image] + //! [Save OpenCV gray image] + cv::imwrite("monkey-cv-gray.jpeg", cv_img_gray); + //! [Save OpenCV gray image] } // From OpenCV to ViSP conversion { //! [Load OpenCV color image] + std::string image_name = "monkey.jpeg"; + std::cout << "Read color image: " << image_name << std::endl; #if VISP_HAVE_OPENCV_VERSION >= 0x030000 cv::Mat cv_img_color = cv::imread("monkey.jpeg", cv::IMREAD_COLOR); #else @@ -63,34 +70,40 @@ int main() vpImageConvert::convert(cv_img_color, Irgba); //! [Convert to ViSP color image] - //! [Load OpenCV grey image] + //! [Load OpenCV gray image] + std::cout << "Read gray image: " << image_name << std::endl; #if VISP_HAVE_OPENCV_VERSION >= 0x030000 - cv::Mat cv_img_grey = cv::imread("monkey.jpeg", cv::IMREAD_GRAYSCALE); + cv::Mat cv_img_gray = cv::imread("monkey.jpeg", cv::IMREAD_GRAYSCALE); #else - cv::Mat cv_img_grey = cv::imread("monkey.jpeg", CV_LOAD_IMAGE_GRAYSCALE); + cv::Mat cv_img_gray = cv::imread("monkey.jpeg", CV_LOAD_IMAGE_GRAYSCALE); #endif - //! [Load OpenCV grey image] + //! [Load OpenCV gray image] - //! [Convert to ViSP grey image] - vpImage Igrey; - vpImageConvert::convert(cv_img_grey, Igrey); - //! [Convert to ViSP grey image] + //! [Convert to ViSP gray image] + vpImage Igray; + vpImageConvert::convert(cv_img_gray, Igray); + //! [Convert to ViSP gray image] std::cout << "Save converted images from cv::Mat to vpImage" << std::endl; std::cout << "- monkey-vp-color.jpeg" << std::endl; - std::cout << "- monkey-vp-grey.jpeg" << std::endl; + std::cout << "- monkey-vp-gray.jpeg" << std::endl; //! [Save ViSP color image] vpImageIo::write(Irgba, "monkey-vp-color.jpeg"); //! [Save ViSP color image] - //! [Save ViSP grey image] - vpImageIo::write(Igrey, "monkey-vp-grey.jpeg"); - //! [Save ViSP grey image] + //! [Save ViSP gray image] + vpImageIo::write(Igray, "monkey-vp-gray.jpeg"); + //! [Save ViSP gray image] } } #else int main() { - std::cout << "This tutorial required OpenCV imgproc and imgcodecs modules." << std::endl; +#if !defined(HAVE_OPENCV_IMGPROC) + std::cout << "This tutorial requires OpenCV imgproc module." << std::endl; +#endif +#if !defined(HAVE_OPENCV_IMGPROC) + std::cout << "This tutorial requires OpenCV imgcodecs module." << std::endl; +#endif return EXIT_SUCCESS; } #endif diff --git a/tutorial/bridge/opencv/tutorial-bridge-opencv-matrix.cpp b/tutorial/bridge/opencv/tutorial-bridge-opencv-matrix.cpp index 698bf5f237..598333aef6 100644 --- a/tutorial/bridge/opencv/tutorial-bridge-opencv-matrix.cpp +++ b/tutorial/bridge/opencv/tutorial-bridge-opencv-matrix.cpp @@ -1,16 +1,16 @@ //! \example tutorial-bridge-opencv-matrix.cpp +#include #include + +#if defined(HAVE_OPENCV_CORE) + #include #include -#if defined(HAVE_OPENCV_IMGPROC) #include -#include -#endif int main() { -#if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) #ifdef ENABLE_VISP_NAMESPACE using namespace VISP_NAMESPACE_NAME; #endif @@ -52,6 +52,14 @@ int main() std::cout << "M: \n" << M << std::endl; std::cout << "M_cv: \n" << M_cv << std::endl; //! [Modify ViSP matrix] + } } +#else +int main() +{ +#if !defined(HAVE_OPENCV_CORE) + std::cout << "This tutorial requires OpenCV core module." << std::endl; #endif + return EXIT_SUCCESS; } +#endif diff --git a/tutorial/computer-vision/tutorial-pose-from-planar-object.cpp b/tutorial/computer-vision/tutorial-pose-from-planar-object.cpp index 146f625986..5f3eb452f6 100644 --- a/tutorial/computer-vision/tutorial-pose-from-planar-object.cpp +++ b/tutorial/computer-vision/tutorial-pose-from-planar-object.cpp @@ -135,7 +135,7 @@ inline Model::Model(const std::string &model_filename) data_curr_line++; } catch (...) { - // Line is empty or incomplete. We skeep it + // Line is empty or incomplete. We skeep it } } @@ -167,7 +167,7 @@ std::ostream &operator<<(std::ostream &os, const Model &model) << std::setw(6) << std::setfill(' ') << bound.get_X() << ", " << std::setw(6) << std::setfill(' ') << bound.get_Y() << ", " << std::setw(6) << std::setfill(' ') << bound.get_Z() << std::endl; - // clang-format on + // clang-format on } os << "-Keypoints:" << std::endl; @@ -177,7 +177,7 @@ std::ostream &operator<<(std::ostream &os, const Model &model) << std::setw(6) << std::setfill(' ') << keypoint.get_X() << ", " << std::setw(6) << std::setfill(' ') << keypoint.get_Y() << ", " << std::setw(6) << std::setfill(' ') << keypoint.get_Z() << std::endl; - // clang-format on + // clang-format on } return os; diff --git a/tutorial/computer-vision/tutorial-pose-from-points-live.cpp b/tutorial/computer-vision/tutorial-pose-from-points-live.cpp index 8710c9d118..0a5f356dca 100644 --- a/tutorial/computer-vision/tutorial-pose-from-points-live.cpp +++ b/tutorial/computer-vision/tutorial-pose-from-points-live.cpp @@ -1,5 +1,24 @@ /*! \example tutorial-pose-from-points-live.cpp */ +#include + #include + +//! [Undef grabber] +// Comment / uncomment following lines to use the specific 3rd party compatible with your camera +// #undef VISP_HAVE_V4L2 +// #undef VISP_HAVE_DC1394 +// #undef VISP_HAVE_CMU1394 +// #undef VISP_HAVE_FLYCAPTURE +// #undef VISP_HAVE_REALSENSE2 +// #undef HAVE_OPENCV_HIGHGUI +// #undef HAVE_OPENCV_VIDEOIO +//! [Undef grabber] + +#if (defined(VISP_HAVE_X11) || defined(VISP_HAVE_GDI) || defined(VISP_HAVE_OPENCV)) && defined(VISP_HAVE_PUGIXML) && \ + (defined(VISP_HAVE_V4L2) || defined(VISP_HAVE_DC1394) || defined(VISP_HAVE_CMU1394) || \ + defined(VISP_HAVE_FLYCAPTURE) || defined(VISP_HAVE_REALSENSE2)) || \ + ((VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI))|| ((VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO)) + #ifdef VISP_HAVE_MODULE_SENSOR #include #include @@ -12,27 +31,16 @@ #include #include -#if defined(HAVE_OPENCV_VIDEOIO) -#include +#if (VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI) +#include // for cv::VideoCapture +#elif (VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO) +#include // for cv::VideoCapture #endif #include "pose_helper.h" -// Comment / uncomment following lines to use the specific 3rd party compatible with your camera -//! [Undef grabber] -// #undef VISP_HAVE_V4L2 -// #undef VISP_HAVE_DC1394 -// #undef VISP_HAVE_CMU1394 -// #undef VISP_HAVE_FLYCAPTURE -// #undef VISP_HAVE_REALSENSE2 -// #undef HAVE_OPENCV_VIDEOIO -//! [Undef grabber] - int main(int argc, char **argv) { -#if (defined(VISP_HAVE_X11) || defined(VISP_HAVE_GDI) || defined(VISP_HAVE_OPENCV)) && defined(VISP_HAVE_PUGIXML) && \ - (defined(VISP_HAVE_V4L2) || defined(VISP_HAVE_DC1394) || defined(VISP_HAVE_CMU1394) || \ - defined(HAVE_OPENCV_VIDEOIO) || defined(VISP_HAVE_FLYCAPTURE) || defined(VISP_HAVE_REALSENSE2)) #ifdef ENABLE_VISP_NAMESPACE using namespace VISP_NAMESPACE_NAME; #endif @@ -42,25 +50,32 @@ int main(int argc, char **argv) double opt_square_width = 0.12; int opt_device = 0; // For OpenCV and V4l2 grabber to set the camera device - for (int i = 0; i < argc; i++) { + for (int i = 1; i < argc; i++) { if (std::string(argv[i]) == "--intrinsic" && i + 1 < argc) { - opt_intrinsic_file = std::string(argv[i + 1]); + opt_intrinsic_file = std::string(argv[++i]); + } + else if (std::string(argv[i]) == "--camera-name" && i + 1 < argc) { + opt_camera_name = std::string(argv[++i]); } - else if (std::string(argv[i]) == "--camera_name" && i + 1 < argc) { - opt_camera_name = std::string(argv[i + 1]); + else if (std::string(argv[i]) == "--camera-device" && i + 1 < argc) { + opt_device = atoi(argv[++i]); } - else if (std::string(argv[i]) == "--camera_device" && i + 1 < argc) { - opt_device = atoi(argv[i + 1]); + else if (std::string(argv[i]) == "--square-width" && i + 1 < argc) { + opt_device = atoi(argv[++i]); } else if (std::string(argv[i]) == "--help" || std::string(argv[i]) == "-h") { - std::cout << "\nUsage: " << argv[0] << " [--camera_device (default: 0)]" + std::cout << "\nUsage: " << argv[0] + << " [--camera-device (default: 0)]" << " [--intrinsic (default: empty)]" - " [--camera_name (default: empty)]" - " [--square_width (default: empty)]" + << " [--square-width I; - // Parameters of our camera - vpCameraParameters cam(840, 840, I.getWidth() / 2, I.getHeight() / 2); // Default parameters - vpXmlParserCamera parser; - if (!opt_intrinsic_file.empty() && !opt_camera_name.empty()) { - std::cout << "Intrinsic file: " << opt_intrinsic_file << std::endl; - std::cout << "Camera name : " << opt_camera_name << std::endl; - if (parser.parse(cam, opt_intrinsic_file, opt_camera_name, vpCameraParameters::perspectiveProjWithDistortion) == - vpXmlParserCamera::SEQUENCE_OK) { - std::cout << "Succeed to read camera parameters from xml file" << std::endl; - } - else { - std::cout << "Unable to read camera parameters from xml file" << std::endl; - } - } - //! [Grabber] #if defined(VISP_HAVE_V4L2) vpV4l2Grabber g; @@ -120,7 +120,7 @@ int main(int argc, char **argv) std::cout << "Read camera parameters from Realsense device" << std::endl; cam = g.getCameraParameters(RS2_STREAM_COLOR, vpCameraParameters::perspectiveProjWithoutDistortion); -#elif defined(HAVE_OPENCV_VIDEOIO) +#elif ((VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI))|| ((VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO)) std::cout << "Use OpenCV grabber on device " << opt_device << std::endl; cv::VideoCapture g(opt_device); // Open the default camera if (!g.isOpened()) { // Check if we succeeded @@ -133,6 +133,21 @@ int main(int argc, char **argv) #endif //! [Grabber] + // Parameters of our camera + vpCameraParameters cam(840, 840, I.getWidth() / 2, I.getHeight() / 2); // Default parameters + vpXmlParserCamera parser; + if (!opt_intrinsic_file.empty() && !opt_camera_name.empty()) { + std::cout << "Intrinsic file: " << opt_intrinsic_file << std::endl; + std::cout << "Camera name : " << opt_camera_name << std::endl; + if (parser.parse(cam, opt_intrinsic_file, opt_camera_name, vpCameraParameters::perspectiveProjWithDistortion) == + vpXmlParserCamera::SEQUENCE_OK) { + std::cout << "Succeed to read camera parameters from xml file" << std::endl; + } + else { + std::cout << "Unable to read camera parameters from xml file" << std::endl; + } + } + std::cout << "Square width : " << opt_square_width << std::endl; std::cout << cam << std::endl; @@ -166,7 +181,7 @@ int main(int argc, char **argv) #if defined(VISP_HAVE_V4L2) || defined(VISP_HAVE_DC1394) || defined(VISP_HAVE_CMU1394) || \ defined(VISP_HAVE_FLYCAPTURE) || defined(VISP_HAVE_REALSENSE2) g.acquire(I); -#elif defined(HAVE_OPENCV_VIDEOIO) +#elif ((VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI))|| ((VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO)) g >> frame; vpImageConvert::convert(frame, I); #endif @@ -223,17 +238,13 @@ int main(int argc, char **argv) catch (const vpException &e) { std::cout << "Catch an exception: " << e.getMessage() << std::endl; } -#elif (defined(VISP_HAVE_X11) || defined(VISP_HAVE_GDI) || defined(VISP_HAVE_OPENCV)) - (void)argc; - (void)argv; - std::cout << "Install a 3rd party dedicated to frame grabbing (dc1394, cmu1394, v4l2, OpenCV, FlyCapture, " - "Realsense2), configure and build ViSP again to use this example" - << std::endl; +} + #else - (void)argc; - (void)argv; - std::cout << "Install a 3rd party dedicated to image display (X11, GDI, OpenCV), configure and build ViSP again to " - "use this example" - << std::endl; + +int main() +{ + std::cout << "There are missing 3rd parties to run this tutorial" << std::endl; +} + #endif - } diff --git a/tutorial/computer-vision/tutorial-pose-from-points-realsense-T265.cpp b/tutorial/computer-vision/tutorial-pose-from-points-realsense-T265.cpp index ca624086c4..d6d5f008f0 100644 --- a/tutorial/computer-vision/tutorial-pose-from-points-realsense-T265.cpp +++ b/tutorial/computer-vision/tutorial-pose-from-points-realsense-T265.cpp @@ -20,16 +20,19 @@ int main(int argc, char **argv) double opt_square_width = 0.12; int opt_camera_index = 1; // camera index: 1. Left, 2.Right - for (int i = 0; i < argc; i++) { + for (int i = 1; i < argc; i++) { if (std::string(argv[i]) == "--camera_index" && i + 1 < argc) { - opt_camera_index = atoi(argv[i + 1]); + opt_camera_index = atoi(argv[++i]); } else if (std::string(argv[i]) == "--square_width" && i + 1 < argc) { - opt_square_width = atoi(argv[i + 1]); + opt_square_width = atoi(argv[++i]); } else if (std::string(argv[i]) == "--help" || std::string(argv[i]) == "-h") { - std::cout << "\nUsage: " << argv[0] << " [--camera_index <1.Left | 2.Right> (default: 1)]" - << " [--square_width (default: 1)]" + << " [--square_width + #include + +//! [Undef grabber] +// Comment / uncomment following lines to use the specific 3rd party compatible with your camera +// #undef VISP_HAVE_V4L2 +// #undef HAVE_OPENCV_HIGHGUI +// #undef HAVE_OPENCV_VIDEOIO +//! [Undef grabber] + +#if (defined(VISP_HAVE_ZBAR) || defined(VISP_HAVE_DMTX)) && (defined(VISP_HAVE_V4L2) || \ + ((VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI))|| ((VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO))) + #include #include #include @@ -10,28 +23,32 @@ #include #endif -#if defined(HAVE_OPENCV_VIDEOIO) -#include +#if (VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI) +#include // for cv::VideoCapture +#elif (VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO) +#include // for cv::VideoCapture #endif int main(int argc, const char **argv) { -#if (defined(VISP_HAVE_V4L2) || defined(HAVE_OPENCV_VIDEOIO)) && (defined(VISP_HAVE_ZBAR) || defined(VISP_HAVE_DMTX)) #ifdef ENABLE_VISP_NAMESPACE using namespace VISP_NAMESPACE_NAME; #endif int opt_device = 0; int opt_barcode = 0; // 0=QRCode, 1=DataMatrix - for (int i = 0; i < argc; i++) { - if (std::string(argv[i]) == "--device") - opt_device = atoi(argv[i + 1]); - else if (std::string(argv[i]) == "--code-type") - opt_barcode = atoi(argv[i + 1]); + for (int i = 1; i < argc; i++) { + if (std::string(argv[i]) == "--device" && i + 1 < argc) { + opt_device = atoi(argv[++i]); + } + else if (std::string(argv[i]) == "--code-type" && i + 1 < argc) { + opt_barcode = atoi(argv[++i]); + } else if (std::string(argv[i]) == "--help" || std::string(argv[i]) == "-h") { std::cout << "Usage: " << argv[0] - << " [--device ] [--code-type <0 for QR code | " - "1 for DataMatrix code>] [--help] [-h]" + << " [--device ]" + << " [--code-type <0 for QR code | 1 for DataMatrix code>]" + << " [--help] [-h]" << std::endl; return EXIT_SUCCESS; } @@ -49,7 +66,7 @@ int main(int argc, const char **argv) g.setDevice(device.str()); g.setScale(1); g.acquire(I); -#elif defined(HAVE_OPENCV_VIDEOIO) +#elif ((VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI))|| ((VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO)) cv::VideoCapture cap(opt_device); // open the default camera if (!cap.isOpened()) { // check if we succeeded std::cout << "Failed to open the camera" << std::endl; @@ -88,7 +105,7 @@ int main(int argc, const char **argv) //! [Acquisition] #if defined(VISP_HAVE_V4L2) g.acquire(I); -#elif defined(HAVE_OPENCV_VIDEOIO) +#elif ((VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI))|| ((VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO)) cap >> frame; // get a new frame from camera vpImageConvert::convert(frame, I); #endif @@ -126,8 +143,13 @@ int main(int argc, const char **argv) catch (const vpException &e) { std::cout << "Catch an exception: " << e << std::endl; } +} + #else - (void)argc; - (void)argv; -#endif + +int main() +{ + std::cout << "There are missing 3rd parties to run this tutorial" << std::endl; } + +#endif diff --git a/tutorial/detection/barcode/tutorial-barcode-detector.cpp b/tutorial/detection/barcode/tutorial-barcode-detector.cpp index 00bfb1dba3..d3905469b8 100644 --- a/tutorial/detection/barcode/tutorial-barcode-detector.cpp +++ b/tutorial/detection/barcode/tutorial-barcode-detector.cpp @@ -11,7 +11,7 @@ int main(int argc, const char **argv) { //! [Macro defined] -#if (defined(VISP_HAVE_ZBAR) || defined(VISP_HAVE_DMTX)) && \ +#if (defined(VISP_HAVE_ZBAR) || defined(VISP_HAVE_DMTX)) && \ (defined(VISP_HAVE_X11) || defined(VISP_HAVE_GDI) || defined(VISP_HAVE_OPENCV)) //! [Macro defined] #ifdef ENABLE_VISP_NAMESPACE @@ -36,9 +36,10 @@ int main(int argc, const char **argv) #if (defined(VISP_HAVE_ZBAR) && defined(VISP_HAVE_DMTX)) int opt_barcode = 0; // 0=QRCode, 1=DataMatrix - for (int i = 0; i < argc; i++) { - if (std::string(argv[i]) == "--code-type") - opt_barcode = atoi(argv[i + 1]); + for (int i = 1; i < argc; i++) { + if (std::string(argv[i]) == "--code-type" && i + 1 < argc) { + opt_barcode = atoi(argv[++i]); + } else if (std::string(argv[i]) == "--help" || std::string(argv[i]) == "-h") { std::cout << "Usage: " << argv[0] << " [--code-type <0 for QR code | 1 for DataMatrix code>] [--help] [-h]" << std::endl; @@ -96,7 +97,7 @@ int main(int argc, const char **argv) vpDisplay::getClick(I); } delete detector; -} + } catch (const vpException &e) { std::cout << "Catch an exception: " << e.getMessage() << std::endl; } diff --git a/tutorial/detection/dnn/tutorial-dnn-object-detection-live.cpp b/tutorial/detection/dnn/tutorial-dnn-object-detection-live.cpp index cbe4ddecf3..66a345465c 100644 --- a/tutorial/detection/dnn/tutorial-dnn-object-detection-live.cpp +++ b/tutorial/detection/dnn/tutorial-dnn-object-detection-live.cpp @@ -1,14 +1,19 @@ //! \example tutorial-dnn-object-detection-live.cpp +#include + #include + + // Check if std:c++17 or higher +#if defined(HAVE_OPENCV_DNN) && defined(HAVE_OPENCV_VIDEOIO) && \ + ((__cplusplus >= 201703L) || (defined(_MSVC_LANG) && (_MSVC_LANG >= 201703L))) + #include #include #include #include #include -#if defined(HAVE_OPENCV_VIDEOIO) #include -#endif #ifdef VISP_HAVE_NLOHMANN_JSON #include VISP_NLOHMANN_JSON(json.hpp) @@ -70,9 +75,6 @@ std::string getAvailableDetectionContainer() int main(int argc, const char *argv[]) { - // Check if std:c++17 or higher -#if defined(HAVE_OPENCV_DNN) && defined(HAVE_OPENCV_VIDEOIO) && \ - ((__cplusplus >= 201703L) || (defined(_MSVC_LANG) && (_MSVC_LANG >= 201703L))) try { std::string opt_device("0"); //! [OpenCV DNN face detector] @@ -455,9 +457,22 @@ int main(int argc, const char *argv[]) catch (const vpException &e) { std::cout << e.what() << std::endl; } +} + #else - (void)argc; - (void)argv; + +int main() +{ +#if !defined(HAVE_OPENCV_DNN) + std::cout << "This tutorial needs OpenCV dnn module that is missing." << std::endl; +#endif +#if !defined(HAVE_OPENCV_VIDEOIO) + std::cout << "This tutorial needs OpenCV videoio module that is missing." << std::endl; +#endif +#if (__cplusplus >= 201703L) || (defined(_MSVC_LANG) && (_MSVC_LANG >= 201703L)) + std::cout << "This tutorial needs std::c++17 standard enabled." << std::endl; #endif return EXIT_SUCCESS; } + +#endif diff --git a/tutorial/detection/dnn/tutorial-dnn-tensorrt-live.cpp b/tutorial/detection/dnn/tutorial-dnn-tensorrt-live.cpp index e5ba552623..6e62c43b2b 100644 --- a/tutorial/detection/dnn/tutorial-dnn-tensorrt-live.cpp +++ b/tutorial/detection/dnn/tutorial-dnn-tensorrt-live.cpp @@ -13,6 +13,7 @@ // #include + #include #if defined(VISP_HAVE_TENSORRT) && defined(VISP_HAVE_OPENCV) diff --git a/tutorial/detection/face/tutorial-face-detector-live-threaded.cpp b/tutorial/detection/face/tutorial-face-detector-live-threaded.cpp index 63bf19e8d6..88f3857b20 100644 --- a/tutorial/detection/face/tutorial-face-detector-live-threaded.cpp +++ b/tutorial/detection/face/tutorial-face-detector-live-threaded.cpp @@ -2,6 +2,21 @@ #include #include + +//! [Undef grabber] +// Comment / uncomment following lines to use the specific 3rd party compatible with your camera +// #undef VISP_HAVE_V4L2 +// #undef HAVE_OPENCV_HIGHGUI +// #undef HAVE_OPENCV_VIDEOIO +//! [Undef grabber] + +#if defined(VISP_HAVE_THREADS) && defined(HAVE_OPENCV_IMGPROC) \ + && (((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_OBJDETECT)) || ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_XOBJDETECT))) \ + && (defined(VISP_HAVE_V4L2) || (((VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI)) || ((VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO)))) + +#include +#include + #include #include #include @@ -9,13 +24,11 @@ #include #include -#if defined(HAVE_OPENCV_OBJDETECT) && defined(HAVE_OPENCV_HIGHGUI) && defined(HAVE_OPENCV_IMGPROC) \ - && defined(HAVE_OPENCV_VIDEOIO) && defined(VISP_HAVE_THREADS) - -#include -#include - -#include +#if (VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI) +#include // for cv::VideoCapture +#elif (VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO) +#include // for cv::VideoCapture +#endif #ifdef ENABLE_VISP_NAMESPACE using namespace VISP_NAMESPACE_NAME; @@ -33,7 +46,7 @@ void captureFunction(cv::VideoCapture &cap, std::mutex &mutex_capture, cv::Mat & // If the image is larger than 640 by 480, we subsample #if defined(VISP_HAVE_V4L2) vpImage frame_; -#elif defined(HAVE_OPENCV_VIDEOIO) +#elif ((VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI)) || ((VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO)) cv::Mat frame_; #endif bool stop_capture_ = false; @@ -63,7 +76,7 @@ void captureFunction(cv::VideoCapture &cap, std::mutex &mutex_capture, cv::Mat & #if defined(VISP_HAVE_V4L2) void displayFunction(std::mutex &mutex_capture, std::mutex &mutex_face, vpImage &frame, t_CaptureState &capture_state, vpRect &face_bbox, bool &face_available) -#elif defined(HAVE_OPENCV_VIDEOIO) +#elif ((VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI)) || ((VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO)) void displayFunction(std::mutex &mutex_capture, std::mutex &mutex_face, cv::Mat &frame, t_CaptureState &capture_state, vpRect &face_bbox, bool &face_available) #endif { @@ -92,7 +105,7 @@ void displayFunction(std::mutex &mutex_capture, std::mutex &mutex_face, cv::Mat std::lock_guard lock(mutex_capture); #if defined(VISP_HAVE_V4L2) I_ = frame; -#elif defined(VISP_HAVE_OPENCV) +#elif ((VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI)) || ((VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO)) vpImageConvert::convert(frame, I_); #endif } @@ -150,7 +163,7 @@ void displayFunction(std::mutex &mutex_capture, std::mutex &mutex_face, cv::Mat //! [face-detection-threaded detectionFunction] #if defined(VISP_HAVE_V4L2) void detectionFunction(std::mutex &mutex_capture, std::mutex &mutex_face, vpImage &frame, t_CaptureState &capture_state, vpRect &face_bbox, std::string &face_cascade_name, bool &face_available) -#elif defined(HAVE_OPENCV_VIDEOIO) +#elif ((VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI)) || ((VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO)) void detectionFunction(std::mutex &mutex_capture, std::mutex &mutex_face, cv::Mat &frame, t_CaptureState &capture_state, vpRect &face_bbox, std::string &face_cascade_name, bool &face_available) #endif { @@ -160,7 +173,7 @@ void detectionFunction(std::mutex &mutex_capture, std::mutex &mutex_face, cv::Ma t_CaptureState capture_state_; #if defined(VISP_HAVE_V4L2) vpImage frame_; -#elif defined(VISP_HAVE_OPENCV) +#elif ((VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI)) || ((VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO)) cv::Mat frame_; #endif do { @@ -200,17 +213,22 @@ int main(int argc, const char *argv[]) unsigned int opt_scale = 2; // Default value is 2 in the constructor. Turn // it to 1 to avoid subsampling - for (int i = 0; i < argc; i++) { - if (std::string(argv[i]) == "--haar") - opt_face_cascade_name = std::string(argv[i + 1]); - else if (std::string(argv[i]) == "--device") - opt_device = (unsigned int)atoi(argv[i + 1]); - else if (std::string(argv[i]) == "--scale") - opt_scale = (unsigned int)atoi(argv[i + 1]); - else if (std::string(argv[i]) == "--help") { + for (int i = 1; i < argc; i++) { + if (std::string(argv[i]) == "--haar" && i + 1 < argc) { + opt_face_cascade_name = std::string(argv[++i]); + } + else if (std::string(argv[i]) == "--device" && i + 1 < argc) { + opt_device = (unsigned int)atoi(argv[++i]); + } + else if (std::string(argv[i]) == "--scale" && i + 1 < argc) { + opt_scale = (unsigned int)atoi(argv[++i]); + } + else if ((std::string(argv[i]) == "--help") || (std::string(argv[i]) == "-h")) { std::cout << "Usage: " << argv[0] - << " [--haar ] [--device ] [--scale ] [--help]" + << " [--haar ]" + << " [--device ]" + << " [--scale ]" + << " [--help] [-h]" << std::endl; return EXIT_SUCCESS; } @@ -224,7 +242,7 @@ int main(int argc, const char *argv[]) device << "/dev/video" << opt_device; cap.setDevice(device.str()); cap.setScale(opt_scale); -#elif defined(HAVE_OPENCV_VIDEOIO) +#elif ((VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI)) || ((VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO)) cv::Mat frame; cv::VideoCapture cap; cap.open(opt_device); @@ -266,13 +284,25 @@ int main(int argc, const char *argv[]) #else int main() { -#ifndef VISP_HAVE_OPENCV - std::cout << "You should install OpenCV to make this example working..." << std::endl; -#elif !defined(_WIN32) && (defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__))) // UNIX - std::cout << "You should enable pthread usage and rebuild ViSP..." << std::endl; -#else - std::cout << "Multi-threading seems not supported on this platform" << std::endl; +#if !defined(VISP_HAVE_THREADS) + std::cout << "This tutorial needs std::threads that is missing." << std::endl; #endif +#if !defined(HAVE_OPENCV_HIGHGUI) + std::cout << "This tutorial needs OpenCV highgui module that is missing." << std::endl; +#endif +#if !defined(HAVE_OPENCV_VIDEOIO) + std::cout << "This tutorial needs OpenCV videoio module that is missing." << std::endl; +#endif +#if !defined(HAVE_OPENCV_IMGPROC) + std::cout << "This tutorial needs OpenCV imgproc module that is missing." << std::endl; +#endif +#if (VISP_HAVE_OPENCV_VERSION < 0x050000) && !defined(HAVE_OPENCV_OBJDETECT) + std::cout << "This tutorial needs OpenCV objdetect module that is missing." << std::endl; +#endif +#if ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && !defined(HAVE_OPENCV_XOBJDETECT)) + std::cout << "This tutorial needs OpenCV xobjdetect module that is missing." << std::endl; +#endif + return EXIT_SUCCESS; } diff --git a/tutorial/detection/face/tutorial-face-detector-live.cpp b/tutorial/detection/face/tutorial-face-detector-live.cpp index 7c6c3df58f..a3afa1633c 100644 --- a/tutorial/detection/face/tutorial-face-detector-live.cpp +++ b/tutorial/detection/face/tutorial-face-detector-live.cpp @@ -1,5 +1,19 @@ //! \example tutorial-face-detector-live.cpp +#include + #include + +//! [Undef grabber] +// Comment / uncomment following lines to use the specific 3rd party compatible with your camera +// #undef VISP_HAVE_V4L2 +// #undef HAVE_OPENCV_HIGHGUI +// #undef HAVE_OPENCV_VIDEOIO +//! [Undef grabber] + +#if defined(HAVE_OPENCV_IMGPROC) \ + && (((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_OBJDETECT)) || ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_XOBJDETECT))) \ + && (defined(VISP_HAVE_V4L2) || (((VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI)) || ((VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO)))) + #include #include #include @@ -8,13 +22,14 @@ #include #endif -#if defined(HAVE_OPENCV_VIDEOIO) -#include +#if (VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI) +#include // for cv::VideoCapture +#elif (VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO) +#include #endif int main(int argc, const char *argv[]) { -#if defined(HAVE_OPENCV_HIGHGUI) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_OBJDETECT) #ifdef ENABLE_VISP_NAMESPACE using namespace VISP_NAMESPACE_NAME; #endif @@ -24,17 +39,22 @@ int main(int argc, const char *argv[]) unsigned int opt_scale = 2; // Default value is 2 in the constructor. Turn // it to 1 to avoid subsampling - for (int i = 0; i < argc; i++) { - if (std::string(argv[i]) == "--haar") - opt_face_cascade_name = std::string(argv[i + 1]); - else if (std::string(argv[i]) == "--device") - opt_device = (unsigned int)atoi(argv[i + 1]); - else if (std::string(argv[i]) == "--scale") - opt_scale = (unsigned int)atoi(argv[i + 1]); - else if (std::string(argv[i]) == "--help") { + for (int i = 1; i < argc; i++) { + if (std::string(argv[i]) == "--haar" && i + 1 < argc) { + opt_face_cascade_name = std::string(argv[++i]); + } + else if (std::string(argv[i]) == "--device" && i + 1 < argc) { + opt_device = (unsigned int)atoi(argv[++i]); + } + else if (std::string(argv[i]) == "--scale" && i + 1 < argc) { + opt_scale = (unsigned int)atoi(argv[++i]); + } + else if ((std::string(argv[i]) == "--help") || (std::string(argv[i]) == "-h")) { std::cout << "Usage: " << argv[0] - << " [--haar ] [--device ] [--scale ] [--help]" + << " [--haar ]" + << " [--device ]" + << " [--scale ]" + << " [--help] [-h]" << std::endl; return EXIT_SUCCESS; } @@ -51,7 +71,7 @@ int main(int argc, const char *argv[]) g.setScale(opt_scale); // Default value is 2 in the constructor. Turn it // to 1 to avoid subsampling g.acquire(I); -#elif defined(HAVE_OPENCV_VIDEOIO) +#elif ((VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI))|| ((VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO)) cv::VideoCapture cap(opt_device); // open the default camera #if (VISP_HAVE_OPENCV_VERSION >= 0x030000) int width = (int)cap.get(cv::CAP_PROP_FRAME_WIDTH); @@ -92,7 +112,7 @@ int main(int argc, const char *argv[]) #if defined(VISP_HAVE_V4L2) g.acquire(I); bool face_found = face_detector.detect(I); -#else +#elif ((VISP_HAVE_OPENCV_VERSION < 0x030000) && defined(HAVE_OPENCV_HIGHGUI))|| ((VISP_HAVE_OPENCV_VERSION >= 0x030000) && defined(HAVE_OPENCV_VIDEOIO)) cap >> frame; // get a new frame from camera vpImageConvert::convert(frame, I); bool face_found = face_detector.detect(frame); // We pass frame to avoid an internal image conversion @@ -123,8 +143,21 @@ int main(int argc, const char *argv[]) catch (const vpException &e) { std::cout << e.getMessage() << std::endl; } +} + #else - (void)argc; - (void)argv; + +int main() +{ +#if !defined(HAVE_OPENCV_IMGPROC) + std::cout << "This tutorial needs OpenCV imgproc module that is missing." << std::endl; +#endif +#if (VISP_HAVE_OPENCV_VERSION < 0x050000) && !defined(HAVE_OPENCV_OBJDETECT) + std::cout << "This tutorial needs OpenCV objdetect module that is missing." << std::endl; +#endif +#if ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && !defined(HAVE_OPENCV_XOBJDETECT)) + std::cout << "This tutorial needs OpenCV xobjdetect module that is missing." << std::endl; #endif } + +#endif diff --git a/tutorial/detection/face/tutorial-face-detector.cpp b/tutorial/detection/face/tutorial-face-detector.cpp index bb02af1130..c48ccf5ebf 100644 --- a/tutorial/detection/face/tutorial-face-detector.cpp +++ b/tutorial/detection/face/tutorial-face-detector.cpp @@ -11,7 +11,8 @@ int main(int argc, const char *argv[]) { //! [Macro defined] -#if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_HIGHGUI) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_OBJDETECT) +#if defined(HAVE_OPENCV_HIGHGUI) && defined(HAVE_OPENCV_IMGPROC) && \ + (((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_OBJDETECT)) || ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_XOBJDETECT))) #ifdef ENABLE_VISP_NAMESPACE using namespace VISP_NAMESPACE_NAME; #endif @@ -22,13 +23,17 @@ int main(int argc, const char *argv[]) std::string opt_video = "video.mp4"; //! [Default settings] - for (int i = 0; i < argc; i++) { - if (std::string(argv[i]) == "--haar") - opt_face_cascade_name = std::string(argv[i + 1]); - else if (std::string(argv[i]) == "--video") - opt_video = std::string(argv[i + 1]); - else if (std::string(argv[i]) == "--help" || std::string(argv[i]) == "-h") { - std::cout << "Usage: " << argv[0] << " [--haar ] [--video ]" + for (int i = 1; i < argc; i++) { + if (std::string(argv[i]) == "--haar" && i + 1 < argc) { + opt_face_cascade_name = std::string(argv[++i]); + } + else if (std::string(argv[i]) == "--video" && i + 1 < argc) { + opt_video = std::string(argv[++i]); + } + else if ((std::string(argv[i]) == "--help") || (std::string(argv[i]) == "-h")) { + std::cout << "Usage: " << argv[0] + << " [--haar ]" + << " [--video ]" << " [--help] [-h]" << std::endl; return EXIT_SUCCESS; } @@ -90,8 +95,22 @@ int main(int argc, const char *argv[]) } catch (const vpException &e) { std::cout << e.getMessage() << std::endl; -} + } #else + +#if !defined(HAVE_OPENCV_HIGHGUI) + std::cout << "This tutorial needs OpenCV highgui module that is missing." << std::endl; +#endif +#if !defined(HAVE_OPENCV_IMGPROC) + std::cout << "This tutorial needs OpenCV imgproc module that is missing." << std::endl; +#endif +#if (VISP_HAVE_OPENCV_VERSION < 0x050000) && !defined(HAVE_OPENCV_OBJDETECT) + std::cout << "This tutorial needs OpenCV objdetect module that is missing." << std::endl; +#endif +#if ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && !defined(HAVE_OPENCV_XOBJDETECT)) + std::cout << "This tutorial needs OpenCV xobjdetect module that is missing." << std::endl; +#endif + (void)argc; (void)argv; #endif diff --git a/tutorial/detection/matching/tutorial-matching-keypoint-SIFT.cpp b/tutorial/detection/matching/tutorial-matching-keypoint-SIFT.cpp index c0ecfae1da..166a790ac4 100644 --- a/tutorial/detection/matching/tutorial-matching-keypoint-SIFT.cpp +++ b/tutorial/detection/matching/tutorial-matching-keypoint-SIFT.cpp @@ -10,9 +10,10 @@ int main() { //! [Define] -#if defined(HAVE_OPENCV_HIGHGUI) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_FEATURES2D) && \ - (defined(VISP_HAVE_OPENCV_NONFREE) || defined(VISP_HAVE_OPENCV_XFEATURES2D) || \ - (VISP_HAVE_OPENCV_VERSION >= 0x030411 && CV_MAJOR_VERSION < 4) || (VISP_HAVE_OPENCV_VERSION >= 0x040400)) +#if defined(HAVE_OPENCV_HIGHGUI) && defined(HAVE_OPENCV_IMGPROC) && \ + ((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_CALIB3D) && defined(HAVE_OPENCV_FEATURES2D) && defined(HAVE_OPENCV_XFEATURES2D)) || \ + ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_3D) && defined(HAVE_OPENCV_FEATURES)) + //! [Define] #ifdef ENABLE_VISP_NAMESPACE using namespace VISP_NAMESPACE_NAME; diff --git a/tutorial/detection/matching/tutorial-matching-keypoint-homography.cpp b/tutorial/detection/matching/tutorial-matching-keypoint-homography.cpp index 6d6841f033..c358fd8246 100644 --- a/tutorial/detection/matching/tutorial-matching-keypoint-homography.cpp +++ b/tutorial/detection/matching/tutorial-matching-keypoint-homography.cpp @@ -8,7 +8,10 @@ int main(int argc, const char **argv) { -#if defined(HAVE_OPENCV_HIGHGUI) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_FEATURES2D) +#if defined(HAVE_OPENCV_HIGHGUI) && defined(HAVE_OPENCV_IMGPROC) && \ + ((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_CALIB3D) && defined(HAVE_OPENCV_FEATURES2D)) || \ + ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_3D) && defined(HAVE_OPENCV_FEATURES)) + #ifdef ENABLE_VISP_NAMESPACE using namespace VISP_NAMESPACE_NAME; #endif @@ -79,9 +82,8 @@ int main(int argc, const char **argv) std::cout << "Nb matches: " << nbMatch << std::endl; //! [Matching] - std::vector iPref(nbMatch), - iPcur(nbMatch); // Coordinates in pixels (for display only) - //! [Allocation] + std::vector iPref(nbMatch), iPcur(nbMatch); // Coordinates in pixels (for display only) + //! [Allocation] std::vector mPref_x(nbMatch), mPref_y(nbMatch); std::vector mPcur_x(nbMatch), mPcur_y(nbMatch); std::vector inliers(nbMatch); @@ -137,7 +139,7 @@ int main(int argc, const char **argv) if (vpDisplay::getClick(Idisp, false)) break; -} + } vpDisplay::getClick(Idisp); #else diff --git a/tutorial/detection/matching/tutorial-matching-keypoint.cpp b/tutorial/detection/matching/tutorial-matching-keypoint.cpp index 35ba74a970..bde04da068 100644 --- a/tutorial/detection/matching/tutorial-matching-keypoint.cpp +++ b/tutorial/detection/matching/tutorial-matching-keypoint.cpp @@ -10,8 +10,10 @@ int main() { //! [Define] -#if defined(HAVE_OPENCV_HIGHGUI) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_FEATURES2D) - //! [Define] +#if defined(HAVE_OPENCV_HIGHGUI) && defined(HAVE_OPENCV_IMGPROC) && \ + ((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_CALIB3D) && defined(HAVE_OPENCV_FEATURES2D)) || \ + ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_3D) && defined(HAVE_OPENCV_FEATURES)) +//! [Define] #ifdef ENABLE_VISP_NAMESPACE using namespace VISP_NAMESPACE_NAME; #endif diff --git a/tutorial/detection/object/cube.cao b/tutorial/detection/object/cube.cao index 4408839f0f..eaf4f98964 100644 --- a/tutorial/detection/object/cube.cao +++ b/tutorial/detection/object/cube.cao @@ -1,19 +1,27 @@ -V1 +V1 +# 3D Points 8 - 0.000 0.000 0.000 --0.084 0.000 0.000 --0.084 0.084 0.000 - 0.000 0.084 0.000 - 0.000 0.000 0.084 + 0.000 0.000 0.000 +-0.084 0.000 0.000 +-0.084 0.084 0.000 + 0.000 0.084 0.000 + 0.000 0.000 0.084 -0.084 0.000 0.084 --0.084 0.084 0.084 - 0.000 0.084 0.084 -0 -0 -6 +-0.084 0.084 0.084 + 0.000 0.084 0.084 +# 3D Lines +0 # Number of lines +# Faces from 3D lines +0 # Number of faces +# Faces from 3D points +6 # Number of faces 4 0 4 5 1 4 1 5 6 2 4 6 7 3 2 4 3 7 4 0 4 0 1 2 3 -4 7 6 5 4 +4 7 6 5 4 +# 3D cylinders +0 # Number of cylinders +# 3D circles +0 # Number of circles diff --git a/tutorial/detection/object/tutorial-detection-object-mbt-deprecated.cpp b/tutorial/detection/object/tutorial-detection-object-mbt-deprecated.cpp index 08c453db35..0951013fa6 100644 --- a/tutorial/detection/object/tutorial-detection-object-mbt-deprecated.cpp +++ b/tutorial/detection/object/tutorial-detection-object-mbt-deprecated.cpp @@ -10,7 +10,10 @@ int main(int argc, char **argv) { -#if defined(VISP_HAVE_OPENCV) && defined(HAVE_OPENCV_IMGPROC) && defined(HAVE_OPENCV_FEATURES2D) +#if defined(HAVE_OPENCV_IMGPROC) && \ + (((VISP_HAVE_OPENCV_VERSION < 0x050000) && defined(HAVE_OPENCV_CALIB3D) && (defined(HAVE_OPENCV_FEATURES2D) || defined(HAVE_OPENCV_XFEATURES2D))) || \ + ((VISP_HAVE_OPENCV_VERSION >= 0x050000) && defined(HAVE_OPENCV_3D) && defined(HAVE_OPENCV_FEATURES))) + #ifdef ENABLE_VISP_NAMESPACE using namespace VISP_NAMESPACE_NAME; #endif @@ -18,11 +21,14 @@ int main(int argc, char **argv) try { std::string videoname = "teabox.mp4"; - for (int i = 0; i < argc; i++) { - if (std::string(argv[i]) == "--name") - videoname = std::string(argv[i + 1]); - else if (std::string(argv[i]) == "--help") { - std::cout << "\nUsage: " << argv[0] << " [--name