From b19fe7a90be0dde57177b1131eb30e22aa56679e Mon Sep 17 00:00:00 2001 From: fannymonori Date: Thu, 15 Aug 2019 18:10:52 +0200 Subject: [PATCH 01/12] Adding dnn based super resolution module. --- modules/dnn_superres/CMakeLists.txt | 5 + modules/dnn_superres/README.md | 93 ++++ .../include/opencv2/dnn_superres.hpp | 159 +++++++ .../include/opencv2/dnn_superres_quality.hpp | 111 +++++ modules/dnn_superres/samples/butterfly.png | Bin 0 -> 127529 bytes .../samples/dnn_superres_benchmark.cpp | 68 +++ .../dnn_superres_benchmark_individual.cpp | 101 +++++ .../samples/dnn_superres_multioutput.cpp | 73 ++++ .../samples/dnn_superres_video.cpp | 69 +++ modules/dnn_superres/src/dnn_superres.cpp | 385 +++++++++++++++++ .../dnn_superres/src/dnn_superres_quality.cpp | 401 ++++++++++++++++++ modules/dnn_superres/src/precomp.hpp | 17 + .../dnn_superres/test/test_dnn_superres.cpp | 286 +++++++++++++ modules/dnn_superres/test/test_main.cpp | 6 + modules/dnn_superres/test/test_precomp.hpp | 16 + .../benchmark/images/bicubic_butterfly.jpg | Bin 0 -> 14614 bytes .../benchmark/images/bicubic_comic.jpg | Bin 0 -> 19073 bytes .../benchmark/images/bicubic_div2k.jpg | Bin 0 -> 10155 bytes .../benchmark/images/bicubic_urban.jpg | Bin 0 -> 9306 bytes .../benchmark/images/edsr_butterfly.jpg | Bin 0 -> 17231 bytes .../tutorials/benchmark/images/edsr_comic.jpg | Bin 0 -> 21001 bytes .../tutorials/benchmark/images/edsr_urban.jpg | Bin 0 -> 10518 bytes .../benchmark/images/espcn_butterfly.jpg | Bin 0 -> 15099 bytes .../benchmark/images/espcn_comic.jpg | Bin 0 -> 19152 bytes .../benchmark/images/espcn_urban.jpg | Bin 0 -> 9561 bytes .../benchmark/images/fsrcnn_butterfly.jpg | Bin 0 -> 17143 bytes .../benchmark/images/fsrcnn_comic.jpg | Bin 0 -> 19800 bytes .../benchmark/images/fsrcnn_urban.jpg | Bin 0 -> 9968 bytes .../benchmark/images/lanczos_butterfly.jpg | Bin 0 -> 14766 bytes .../benchmark/images/lanczos_comic.jpg | Bin 0 -> 19395 bytes .../benchmark/images/lanczos_div2k.jpg | Bin 0 -> 10454 bytes .../benchmark/images/lanczos_urban.jpg | Bin 0 -> 9526 bytes .../benchmark/images/lapsrn_butterfly.jpg | Bin 0 -> 15555 bytes .../benchmark/images/lapsrn_comic.jpg | Bin 0 -> 19444 bytes .../benchmark/images/lapsrn_div2k.jpg | Bin 0 -> 9998 bytes .../benchmark/images/nearest_butterfly.jpg | Bin 0 -> 17924 bytes .../benchmark/images/nearest_comic.jpg | Bin 0 -> 23823 bytes .../benchmark/images/nearest_div2k.jpg | Bin 0 -> 16398 bytes .../benchmark/images/nearest_urban.jpg | Bin 0 -> 12891 bytes .../benchmark/images/orig_butterfly.jpg | Bin 0 -> 18825 bytes .../tutorials/benchmark/images/orig_comic.jpg | Bin 0 -> 26465 bytes .../tutorials/benchmark/images/orig_div2k.jpg | Bin 0 -> 14703 bytes .../tutorials/benchmark/images/orig_urban.jpg | Bin 0 -> 13603 bytes .../tutorials/benchmark/sr_benchmark.markdown | 155 +++++++ .../table_of_content_dnn_superres.markdown | 20 + .../upscale_image_multi.markdown | 85 ++++ .../upscale_video/upscale_video.markdown | 52 +++ 47 files changed, 2102 insertions(+) create mode 100644 modules/dnn_superres/CMakeLists.txt create mode 100644 modules/dnn_superres/README.md create mode 100644 modules/dnn_superres/include/opencv2/dnn_superres.hpp create mode 100644 modules/dnn_superres/include/opencv2/dnn_superres_quality.hpp create mode 100644 modules/dnn_superres/samples/butterfly.png create mode 100644 modules/dnn_superres/samples/dnn_superres_benchmark.cpp create mode 100644 modules/dnn_superres/samples/dnn_superres_benchmark_individual.cpp create mode 100644 modules/dnn_superres/samples/dnn_superres_multioutput.cpp create mode 100644 modules/dnn_superres/samples/dnn_superres_video.cpp create mode 100644 modules/dnn_superres/src/dnn_superres.cpp create mode 100644 modules/dnn_superres/src/dnn_superres_quality.cpp create mode 100644 modules/dnn_superres/src/precomp.hpp create mode 100644 modules/dnn_superres/test/test_dnn_superres.cpp create mode 100644 modules/dnn_superres/test/test_main.cpp create mode 100644 modules/dnn_superres/test/test_precomp.hpp create mode 100644 modules/dnn_superres/tutorials/benchmark/images/bicubic_butterfly.jpg create mode 100644 modules/dnn_superres/tutorials/benchmark/images/bicubic_comic.jpg create mode 100644 modules/dnn_superres/tutorials/benchmark/images/bicubic_div2k.jpg create mode 100644 modules/dnn_superres/tutorials/benchmark/images/bicubic_urban.jpg create mode 100644 modules/dnn_superres/tutorials/benchmark/images/edsr_butterfly.jpg create mode 100644 modules/dnn_superres/tutorials/benchmark/images/edsr_comic.jpg create mode 100644 modules/dnn_superres/tutorials/benchmark/images/edsr_urban.jpg create mode 100644 modules/dnn_superres/tutorials/benchmark/images/espcn_butterfly.jpg create mode 100644 modules/dnn_superres/tutorials/benchmark/images/espcn_comic.jpg create mode 100644 modules/dnn_superres/tutorials/benchmark/images/espcn_urban.jpg create mode 100644 modules/dnn_superres/tutorials/benchmark/images/fsrcnn_butterfly.jpg create mode 100644 modules/dnn_superres/tutorials/benchmark/images/fsrcnn_comic.jpg create mode 100644 modules/dnn_superres/tutorials/benchmark/images/fsrcnn_urban.jpg create mode 100644 modules/dnn_superres/tutorials/benchmark/images/lanczos_butterfly.jpg create mode 100644 modules/dnn_superres/tutorials/benchmark/images/lanczos_comic.jpg create mode 100644 modules/dnn_superres/tutorials/benchmark/images/lanczos_div2k.jpg create mode 100644 modules/dnn_superres/tutorials/benchmark/images/lanczos_urban.jpg create mode 100644 modules/dnn_superres/tutorials/benchmark/images/lapsrn_butterfly.jpg create mode 100644 modules/dnn_superres/tutorials/benchmark/images/lapsrn_comic.jpg create mode 100644 modules/dnn_superres/tutorials/benchmark/images/lapsrn_div2k.jpg create mode 100644 modules/dnn_superres/tutorials/benchmark/images/nearest_butterfly.jpg create mode 100644 modules/dnn_superres/tutorials/benchmark/images/nearest_comic.jpg create mode 100644 modules/dnn_superres/tutorials/benchmark/images/nearest_div2k.jpg create mode 100644 modules/dnn_superres/tutorials/benchmark/images/nearest_urban.jpg create mode 100644 modules/dnn_superres/tutorials/benchmark/images/orig_butterfly.jpg create mode 100644 modules/dnn_superres/tutorials/benchmark/images/orig_comic.jpg create mode 100644 modules/dnn_superres/tutorials/benchmark/images/orig_div2k.jpg create mode 100644 modules/dnn_superres/tutorials/benchmark/images/orig_urban.jpg create mode 100644 modules/dnn_superres/tutorials/benchmark/sr_benchmark.markdown create mode 100644 modules/dnn_superres/tutorials/table_of_content_dnn_superres.markdown create mode 100644 modules/dnn_superres/tutorials/upscale_image_multi/upscale_image_multi.markdown create mode 100644 modules/dnn_superres/tutorials/upscale_video/upscale_video.markdown diff --git a/modules/dnn_superres/CMakeLists.txt b/modules/dnn_superres/CMakeLists.txt new file mode 100644 index 00000000000..8448a2160d8 --- /dev/null +++ b/modules/dnn_superres/CMakeLists.txt @@ -0,0 +1,5 @@ +set(the_description "Super Resolution using CNNs") + +ocv_define_module(dnn_superres opencv_core opencv_imgproc opencv_dnn + OPTIONAL opencv_highgui opencv_imgcodecs opencv_datasets # samples +) diff --git a/modules/dnn_superres/README.md b/modules/dnn_superres/README.md new file mode 100644 index 00000000000..1e71f938197 --- /dev/null +++ b/modules/dnn_superres/README.md @@ -0,0 +1,93 @@ +# Super Resolution using Convolutional Neural Networks + +This module contains several learning-based algorithms for upscaling an image. + +## Usage + +Run the following command to build this module: + +```make +cmake -DOPENCV_EXTRA_MODULES_PATH=/modules -Dopencv_dnn_superres=ON +``` + +Refer to the tutorials to understand how to use this module. + +## Models + +There are four models which are trained. + +#### EDSR + +Trained models can be downloaded from [here](https://github.com/Saafke/EDSR_Tensorflow/tree/master/models). + +- Size of the model: ~38.5MB. This is a quantized version, so that it can be uploaded to GitHub. (Original was 150MB.) +- This model was trained for 3 days with a batch size of 16 +- Link to implementation code: https://github.com/Saafke/EDSR_Tensorflow +- x2, x3, x4 trained models available +- Advantage: Highly accurate +- Disadvantage: Slow and large filesize +- Speed: < 3 sec for every scaling factor on 256x256 images on an Intel i7-9700K CPU. +- Original paper: [Enhanced Deep Residual Networks for Single Image Super-Resolution](https://arxiv.org/pdf/1707.02921.pdf) [1] + +#### ESPCN + +Trained models can be downloaded from [here](https://github.com/fannymonori/TF-ESPCN/tree/master/export). + +- Size of the model: ~100kb +- This model was trained for ~100 iterations with a batch size of 32 +- Link to implementation code: https://github.com/fannymonori/TF-ESPCN +- x2, x3, x4 trained models available +- Advantage: It is tiny and fast, and still performs well. +- Disadvantage: Perform worse visually than newer, more robust models. +- Speed: < 0.01 sec for every scaling factor on 256x256 images on an Intel i7-9700K CPU. +- Original paper: [Real-Time Single Image and Video Super-Resolution Using an Efficient Sub-Pixel Convolutional Neural Network]() [2] + +#### FSRCNN + +Trained models can be downloaded from [here](https://github.com/Saafke/FSRCNN_Tensorflow/tree/master/models). + +- Size of the model: ~40KB (~9kb for FSRCNN-small) +- This model was trained for ~30 iterations with a batch size of 1 +- Link to implementation code: https://github.com/Saafke/FSRCNN_Tensorflow +- Advantage: Fast, small and accurate +- Disadvantage: Not state-of-the-art accuracy +- Speed: < 0.01 sec for every scaling factor on 256x256 images on an Intel i7-9700K CPU. +- Notes: FSRCNN-small has fewer parameters, thus less accurate but faster. +- Original paper: [Accelerating the Super-Resolution Convolutional Neural Network](http://mmlab.ie.cuhk.edu.hk/projects/FSRCNN.html) [3] + +#### LapSRN + +Trained models can be downloaded from [here](https://github.com/fannymonori/TF-LapSRN/tree/master/export). + +- Size of the model: between 1-5Mb +- This model was trained for ~50 iterations with a batch size of 32 +- Link to implementation code: https://github.com/fannymonori/TF-LAPSRN +- x2, x4, x8 trained models available +- Advantage: The model can do multi-scale super-resolution with one forward pass. It can now support 2x, 4x, 8x, and [2x, 4x] and [2x, 4x, 8x] super-resolution. +- Disadvantage: It is slower than ESPCN and FSRCNN, and the accuracy is worse than EDSR. +- Speed: < 0.1 sec for every scaling factor on 256x256 images on an Intel i7-9700K CPU. +- Original paper: [Deep laplacian pyramid networks for fast and accurate super-resolution]() [4] + +### Benchmarks + +Comparing different algorithms. Scale x4 on monarch.png. + +| | Inference time in seconds (CPU)| PSNR | SSIM | +| ------------- |:-------------------:| ---------:|--------:| +| ESPCN |0.01159 | 26.5471 | 0.88116 | +| EDSR |3.26758 |**29.2404** |**0.92112** | +| FSRCNN | 0.01298 | 26.5646 | 0.88064 | +| LapSRN |0.28257 |26.7330 |0.88622 | +| Bicubic |0.00031 |26.0635 |0.87537 | +| Nearest neighbor |**0.00014** |23.5628 |0.81741 | +| Lanczos |0.00101 |25.9115 |0.87057 | + +### References +[1] Bee Lim, Sanghyun Son, Heewon Kim, Seungjun Nah, and Kyoung Mu Lee, **"Enhanced Deep Residual Networks for Single Image Super-Resolution"**, 2nd NTIRE: New Trends in Image Restoration and Enhancement workshop and challenge on image super-resolution in conjunction with **CVPR 2017**. [[PDF](http://openaccess.thecvf.com/content_cvpr_2017_workshops/w12/papers/Lim_Enhanced_Deep_Residual_CVPR_2017_paper.pdf)] [[arXiv](https://arxiv.org/abs/1707.02921)] [[Slide](https://cv.snu.ac.kr/research/EDSR/Presentation_v3(release).pptx)] + +[2] Shi, W., Caballero, J., Huszár, F., Totz, J., Aitken, A., Bishop, R., Rueckert, D. and Wang, Z., **"Real-Time Single Image and Video Super-Resolution Using an Efficient Sub-Pixel Convolutional Neural Network"**, Proceedings of the IEEE conference on computer vision and pattern recognition **CVPR 2016**. [[PDF](http://openaccess.thecvf.com/content_cvpr_2016/papers/Shi_Real-Time_Single_Image_CVPR_2016_paper.pdf)] [[arXiv](https://arxiv.org/abs/1609.05158)] + +[3] Chao Dong, Chen Change Loy, Xiaoou Tang. **"Accelerating the Super-Resolution Convolutional Neural Network"**, in Proceedings of European Conference on Computer Vision **ECCV 2016**. [[PDF](http://personal.ie.cuhk.edu.hk/~ccloy/files/eccv_2016_accelerating.pdf)] +[[arXiv](https://arxiv.org/abs/1608.00367)] [[Project Page](http://mmlab.ie.cuhk.edu.hk/projects/FSRCNN.html)] + +[4] Lai, W. S., Huang, J. B., Ahuja, N., and Yang, M. H., **"Deep laplacian pyramid networks for fast and accurate super-resolution"**, In Proceedings of the IEEE conference on computer vision and pattern recognition **CVPR 2017**. [[PDF](http://openaccess.thecvf.com/content_cvpr_2017/papers/Lai_Deep_Laplacian_Pyramid_CVPR_2017_paper.pdf)] [[arXiv](https://arxiv.org/abs/1710.01992)] [[Project Page](http://vllab.ucmerced.edu/wlai24/LapSRN/)] \ No newline at end of file diff --git a/modules/dnn_superres/include/opencv2/dnn_superres.hpp b/modules/dnn_superres/include/opencv2/dnn_superres.hpp new file mode 100644 index 00000000000..1ad9063e185 --- /dev/null +++ b/modules/dnn_superres/include/opencv2/dnn_superres.hpp @@ -0,0 +1,159 @@ +// This file is part of OpenCV project. +// It is subject to the license terms in the LICENSE file found in the top-level directory +// of this distribution and at http://opencv.org/license.html. + +#ifndef _OPENCV_DNN_SUPERRES_DNNSUPERRESIMPL_HPP_ +#define _OPENCV_DNN_SUPERRES_DNNSUPERRESIMPL_HPP_ + +#include +#include +#include "opencv2/dnn.hpp" + +/** @defgroup dnn_superres DNN used for super resolution + +This module contains functionality for upscaling an image via convolutional neural networks. +The following four models are implemented: + +- EDSR +- ESPCN +- FSRCNN +- LapSRN + +*/ + +namespace cv +{ +namespace dnn_superres +{ + //! @addtogroup dnn_superres + //! @{ + + /** @brief A class to upscale images via convolutional neural networks. + The following four models are implemented: + + - edsr + - espcn + - fsrcnn + - lapsrn + */ + class CV_EXPORTS DnnSuperResImpl + { + private: + + /** @brief Net which holds the desired neural network + */ + dnn::Net net; + + std::string alg; //algorithm + + int sc; //scale factor + + /// @private + static int layer_loaded; + + void registerLayers(); + + void preprocess(const Mat inpImg, Mat &outpImg); + + void reconstruct_YCrCb(const Mat inpImg, const Mat origImg, Mat &outpImg, int scale); + + void reconstruct_YCrCb(const Mat inpImg, const Mat origImg, Mat &outpImg); + + void preprocess_YCrCb(const Mat inpImg, Mat &outpImg); + + public: + + /** @brief Empty constructor + */ + DnnSuperResImpl(); + + /** @brief Constructor which immediately sets the desired model + @param algo String containing one of the desired models: + - __edsr__ + - __espcn__ + - __fsrcnn__ + - __lapsrn__ + @param scale Integer specifying the upscale factor + */ + DnnSuperResImpl(std::string algo, int scale); + + /** @brief Read the model from the given path + @param path Path to the model file. + */ + void readModel(std::string path); + + /** @brief Read the model from the given path + @param weights Path to the model weights file. + @param definition Path to the model definition file. + */ + void readModel(std::string weights, std::string definition); + + /** @brief Set desired model + @param algo String containing one of the desired models: + - __edsr__ + - __espcn__ + - __fsrcnn__ + - __lapsrn__ + @param scale Integer specifying the upscale factor + */ + void setModel(std::string algo, int scale); + + /** @brief Upsample via neural network + @param img Image to upscale + @param img_new Destination upscaled image + */ + void upsample(Mat img, Mat &img_new); + + /** @brief Upsample via neural network of multiple outputs + @param img Image to upscale + @param imgs_new Destination upscaled images + @param scale_factors Scaling factors of the output nodes + @param node_names Names of the output nodes in the neural network + */ + void upsampleMultioutput(Mat img, std::vector &imgs_new, std::vector scale_factors, std::vector node_names); + + /** @brief Upsamples videos via neural network and saves it into the given path. + @param inputPath Path to video to upscale + @param outputPath Destination upscaled video + */ + void upsampleVideo(String inputPath, String outputPath); + + /** @brief Returns the scale factor of the model: + @return Current scale factor. + */ + int getScale(); + + /** @brief Returns the scale factor of the model: + @return Current algorithm. + */ + std::string getAlgorithm(); + + private: + /** @brief Class for importing DepthToSpace layer from the ESPCN model + */ + class DepthToSpace CV_FINAL : public cv::dnn::Layer + { + public: + + /// @private + DepthToSpace(const cv::dnn::LayerParams ¶ms); + + /// @private + static cv::Ptr create(cv::dnn::LayerParams& params); + + /// @private + virtual bool getMemoryShapes(const std::vector > &inputs, + const int, + std::vector > &outputs, + std::vector > &) const CV_OVERRIDE; + + /// @private + virtual void forward(cv::InputArrayOfArrays inputs_arr, + cv::OutputArrayOfArrays outputs_arr, + cv::OutputArrayOfArrays) CV_OVERRIDE; + }; + }; + //! @} +} +} +#endif \ No newline at end of file diff --git a/modules/dnn_superres/include/opencv2/dnn_superres_quality.hpp b/modules/dnn_superres/include/opencv2/dnn_superres_quality.hpp new file mode 100644 index 00000000000..27d8df55943 --- /dev/null +++ b/modules/dnn_superres/include/opencv2/dnn_superres_quality.hpp @@ -0,0 +1,111 @@ +// This file is part of OpenCV project. +// It is subject to the license terms in the LICENSE file found in the top-level directory +// of this distribution and at http://opencv.org/license.html. + +#ifndef OPENCV_CONTRIB_DNN_SUPERRES_QUALITY_HPP +#define OPENCV_CONTRIB_DNN_SUPERRES_QUALITY_HPP + +#include +#include +#include +#include +#include +#include +#include "opencv2/dnn.hpp" + +namespace cv +{ + namespace dnn_superres + { + + //! @addtogroup dnn_superres + //! @{ + + /** @brief A class benchmarking the dnn based super resolution algorithms. + */ + class CV_EXPORTS DnnSuperResQuality + { + private: + + static int fontFace; + + static double fontScale; + + static cv::Scalar fontColor; + + public: + + /** @brief Sets the font face used for drawing measures on images drawn by showBenchmark(). + @param fontface font face + */ + static void setFontFace(int fontface); + + /** @brief Sets the font scale used for drawing measures on images drawn by showBenchmark(). + @param fontscale font scale + */ + static void setFontScale(double fontscale); + + /** @brief Sets the font color used for drawing measures on images drawn by showBenchmark(). + @param fontcolor font color + */ + static void setFontColor(cv::Scalar fontcolor); + + /** @brief Returns the PSNR of two given image. + @param img Upscaled image + @param orig Original image + @return PSNR value. + */ + static double psnr(Mat img, Mat orig); + + /** @brief Returns the SSIM of two given image. + @param img Upscaled image + @param orig Original image + @return SSIM value. + */ + static double ssim(Mat img, Mat orig); + + /** @brief Gives a benchmark for the given super resolution algorithm. It compares it to + * bicubic, nearest neighbor, and lanczos interpolation methods. + @param sr DnnSuperRes object + @param img Image to upscale + @param showImg Displays the images if set to true + */ + static void benchmark(DnnSuperResImpl sr, Mat img, bool showImg = false); + + /** @brief Gives a benchmark for the given super resolution algorithm. It compares it to + * bicubic, nearest neighbor, and lanczos interpolation methods. + @param sr DnnSuperRes object + @param img Image to upscale + @param psnrValues Output container of the PSNR values + @param ssimValues Output container of the SSIM values + @param perfValues Output container of the Performance values + @param showImg Displays the images if set to true + @param showOutput Writes benchmarking to standard output if set to true + */ + static void benchmark(DnnSuperResImpl sr, Mat img, + std::vector& psnrValues, + std::vector& ssimValues, + std::vector& perfValues, + bool showImg = false, + bool showOutput = false); + + /** @brief Displays benchmarking for given images. + @param orig Original image + @param images Upscaled images + @param title Title to window + @param imageSize Display size of images + @param imageTitles Titles of images values to display (optional) + @param psnrValues PSNR values to display (optional) + @param ssimValues SSIM values to display (optional) + @param perfValues Speed values to display (optional) + */ + static void showBenchmark(Mat orig, std::vector images, std::string title, Size imageSize, + const std::vector imageTitles = std::vector(), + const std::vector psnrValues = std::vector(), + const std::vector ssimValues = std::vector(), + const std::vector perfValues = std::vector()); + }; + //! @} + } +} +#endif //OPENCV_CONTRIB_DNN_SUPERRES_QUALITY_HPP diff --git a/modules/dnn_superres/samples/butterfly.png b/modules/dnn_superres/samples/butterfly.png new file mode 100644 index 0000000000000000000000000000000000000000..90c31f1759c01e22427003fce25e6a0a4b9def93 GIT binary patch literal 127529 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

;{Dn)2e6h6g> z0FHfY>E+k!RskuQBA{h% z`gAWKcjLw_>~{f7t;MV!w{=y}{$q#g$@u2_W&$$6q~eJMK}eARVzbzDCr>=`=)(`s z^ag`o|J?bj|K-1Yc_IL)O1vFqr`cx49#}Hlx6u8WAANU(YW?nA3NqjGPd~Bm$KQ8| zXE+ukW^aZ-1cW*GCnF_L$eJiA0Ri_YkIVoP00NRKkSnLhsHx?79U@f#botN}19qjw zHkoE%6CeqhmT0EF6N8+pAoVxxq|Xg-*B6 zCB!%um;g|yy3>eA6?7~j(#EpvCY1+>KXs);=Ts%f9;zT%24|2jDzk)SrY6!LVuoO+ z)Ufl23`T7;K_W9vZA_9FSv59IoeT7)o#a`^eC}&@Xh}jscFsh`qgo_-UnEIt%FeSV zjRKim;#eet0}q^mfg%Y2ybqbw(6kfpf|-e^_jy(rrWr?sDdl=UC2axF6oJ5qu&T>$ z(X4LAoz>FX<^JH-aE#;tEz7rzB$B3}0W`DxhHR*U}jD12Weu9)IFkZ(nFJ zDv1%Q8Y7t|1JcxTEDG#wt?u5ucJJQ$)zeR&Sg3ktLe8lvAc5t6yn&jjsVF&y4Bkb2 z=hA{W#ncgVE>!_gr$ghKRGBG)nrH}xsQQ_(IOvl>y}MhhK~bGJ`q15*H+P2ZrHi+a ze19-IzckyO-CG7?YRnpu8ZDxzCnJj>3<^0;%CRRSA_SwHC&`S6MU0Uc%q&JjbOsVa z2a(KBRlq!R8QavhV}~yIGBz@tZO4amR@;6d14eulwdnh1fMQllz?=+fI~ z-g@JEE>y=)o_ONvCr_O|z5l@Bs@FxtHq|M%fHA8;`JJZ$S*EI1%`8g7(PT{3Y(^5~ z`iI$Z=7)p1h>=*y)S>k_&COIF{=ko&Jbvhv7yjzntu1LIQNhlOCN%KuVY0j2<6r!R zpL^d=e4vRm7Dh7_t7hkx78eg5Iy7mU@4WQN-O(_FP<0A6Wt2OstKWRC2G^-mf_h`n z@%;ssa;yf#4hhgGV|C1w31uP|&Rx3j#*OoDUGL5}?|%1b0&t!cE$3qb5+SN46jM`X zkDSMJ1ku3*mr~wSMHLwhb1nvD^M*qC+qv#27_#2nm3h5rT@8olc5P zQo#@aln7Olh$6VD&JD!mR5T`Y6eOxCdRKXJDG3;63r*WLF}5KTz{nU7DW&9m5J{8q zh@DqSM#kg-l^BphlIUFsWr(p=jXne-oJ<-ra)zqW`H-8KSxL`wkQpL?cfOrc9yqJO zs)i{6IMC@8B%chE$yh{?yhK4%Kn;PG_s-MBn;Z9TB(923Ma!M`M2O`4G_dFaq9P~l z0fHh32uSP|zTb78-OlzT#pcq5vlq{u`|@Ds_{m2XmsgG)JNEAPzNbGs6Qwpav4n&v zMo9?~k=T2G@!XkLUVEKfFn~NHm~BYNx#{~!O+uN*jV zaJ0Si=U@5Mv)?&mogNV62~;GMI9Z;X`^Eq6V;}yhpB+v_j1+(bF}R0Lo{GRPzx?XL z+)S_AE$WeJ8cl#81*TD(>ib(Bwo_~lE|#YrJJg>I0%J1*00IY7xmPe{X`Ekr>HMoN zT@r;4zxS!K3Mn?~5Xm7RfJa8l<$6v(n^F}CG>?oMA_0mi8yEqBrU&H_niyD)n=0rzkr#e-KiCFU-x`C=V7n~zPmq3xwk<&yFxD&cf+fYCZ`slk( zo-CKY^Tykw)h*y|tK^8XRW?iemgSusacl5SveA#c?|nbJv)o&(We761WdVgX}G zDrsS1<QpnN8)4=hZ9-c9B2nGa61x!1$z4yHT{muILFTeci zSD$;Mnq8F88MUg_K@MHi)NXFx+?*WT6S@nB>#gy{E7xbcp;yt;!eDkL_#(tKa=s94 zwQX~^l8KoZKy#ucJ7=abwq%e=VJRkdE;TVhG&OJxq5vcbz?j%gCXGQ()#e!G2Z3u$ z%oGKfIh%#l5_uvb<{~G!s3{^65EDsCIjn`qrP!JY5ob$w2&HH%0)!}%obx%n(Rl`( zj)}Kzvoq{R=S<;fx`#)A38Xg?H@XL;9Fn&`kAwDk?+J@PCm$4oL2XQOe`Yq zv6DxxUA_6{nKS+VU|8F=>zjA(UU~D)^Xn7fs%&GLdM)w@0mF?OcW&R_IPsp@5XYkC zo$q#Lp8Lwze(!gGuWd$;9@y7|b`n!qXfM^H^=<+(<(YPh5SF}$Yt+5BIjm1fE3=Line3ti~+VcR-5hUV$qE2rNxB_ zhOKr2=!E_5codj{;Mk*&{l-83&6VTFChNC%H&?G+JpcCDSFc~+lJ?&6{7kQ+g+XU- zc8NpF*dnM%LkuyFO~D1n%wSARscEuFAS3qk#lVND;A1LzXrhe~a@-n#NCL=z1O-4s zCz7(hp4u8R&X}D%h$f*BL{U|PFLRfTvM)-F$mLf#c9g;XzG$16TN#LNhoY-WVoFm7wV%>s zRgh3bm^mf=&;R*L2aX&Ol-SljAo*&3rL(l}fNFf|nIF4#?dsbXF1`Blt2b}l9`D>8 zZ{hmA>xAK@7fHb878m-1{`H&Jyek#aL=b_IOcjY@jG4%ipFsZdpM9zxH|H*2-i^sp zjI}H-9en-l<*z^c98@I`D?v`8cAT@FWTw|Ydh}RtcA@ZPYSOt^-uTR)eD>z8YszVF zzq7CM{Z2XPRKjk3G$Me0zwewMPR34}5_Dw__sr8^&zzNJ;E)0WnJI{hB#%LBd+zx+ z&tJH2u4n;IJ+k-osr?vOokBLl8W2-9g_tT%nuMYf%MLa`GVhs~ zfGMUXFHJLWpEEtgEsF9pQnj*pg6e!nL z`k-43E(Ac3)FRP?VkQ}&8EnU}aOm{DcfEhab4}A8Kk?8^w}0vUnWkyc2Lv*r?5NB& z27qCXLnI7<&8Rv3#OcMoD=CQrC|Ck*k_bXk`o(?ACm%Wf*y$7d5A1v5@kdSCL9d$B zlks?jOxwfJ-FvHTN{XCJWvZ6g6zzvoBdQsK8UM?F`Ogm?IQs1K-`n0Dwrx6d?)+mc56XKOCm;dTJFWtGly1BmjxqtWX|KET2xtn)xAtp`D49Q~0 ziE7mwjH9e>ZL!MY?5qJcO&csZkd=9S{Na85r5SNz#)b$6IpCVvS+YRE;rxZOw?|DQ zK>aG7JigqY>nSHNMdB=jGI0(&GgXtQDKa7;5~8V~AX8ur(rEDWgP9|aXS@CVz5c$c zTrw%z387Zo8M!g&GQ0QSfrn2YedOuE zp2O5%*_Ci>eRA>Y-Hol}{H$7su@BNAtF$G?z(5bi?98!8=InfTjx!Ao&#bPFM&w3X(uQrnJ40RKw@ZSX6k(aB9){m5ukxFa*~9G%wE;lF+wha4FN$lw*{Hm zIhP5SM63qH>_ZvbXhzNzj=idy0TD5l>^s=qH-Gr4Vs?L>e2U_H`S7EsF28;L?F$#G zqKkk=WZ9&NnC+j4Q#C)3Pf;#kx_tVPNA?~(+%#jDGPfBq-^5iEs=>^$6OSH0_4u)) zhv%1SR<@Mb$9{D>~}^S`@IFilAVk z0t%3SLx5z8K*?<9>eY*vu7si^QP4RG9@`Wg^aq_muZ&oXnr3Tj-IG=!*krqj(*%(S zwmaHwW7L#1MhKiSFvOrjYR1SZHoLo9CNcOh9=G+RZX19=ij(-{k9~%cI}EL5yqa4ajvF8ch)D&B5&#%M z%n#$7Uzp#w=fq)DsYg26zVPz*?p!+i=7r16&RQ?Po~8Nuxo*E#_`qUg0wYobN*a+E z83~ApR1+{{P7^ysr@{NwG*cm6lc6#*02_*8B2O{4A(Uo0kC~W5?iHwN9u7__D&|~C z1~E>u6(YtacLSXBF}7w_Roy72YQ)GyVCH<7I;RV-iP~0NHbQ$A!^M&7eU{V&~3Z`1Jqt*^hqgr;ndH z4wj-xrrjXBO#EqEnZz+-J+p7mQ~Ot*e%}vm-e0|c``$Oc^^G@Qduu!z$0qrr!#+R~ z0jw?M8GM`Cv=jiGbJfnq?$-LI4*>uOpzu5evl%cDA%Yr%o6m&U1D-gEfu*^8r{kxkW+{H(YTf`e%T#eri4w1NOyN#oHN z(M=k)c1WR61GF5`te{A~?0060VzwTwCDUmReXh~7O~cU4T1Y8b1IplBcj@$pKKjIu z|E zq?F7Qka%hU*OZcyA%Y`LAhDHhuhVLS2w;Vpm7S%cGoR8_k4{k|wd>ce zpTBUq=nNze?EE!qFXMFL$g%klp8w8wcShU)%fI;TvfGiE3!lGkQe-m)$b<+XgTd0C zm4nCj9XodB^|#KSKMO$DuU~)Twb#f6#}y-sVGA0OR1za90{^pr`agf|FTeWj=bk0! z00cqXx;Bl>j6`IZg%&12Rg;9AT^D2sN|;d9L@kkM#jtm2A&`Fm?1d}$Hz7}8_0q;> zT;Hy5USCBHq3m$soeNwRt|-ts%VaYoLofvP9?1hcC5KfHLKzW>3qWw}jEu=MGNX%a zy}P?R=u`_Udpo@u_Kb)b%Z`8wW~zt;z=o*EN z&W9wzj*zHn$9bWnnS!FrJblff1{~NGAvbG*z=vR9hUT0zKm#kv3Mn@>^Ra6HCK3Tj z5ZQY}Gf_ko>+bI2+<_-%4n5u^Qv(E0HBqRWdN4b4;@H6}m#%EC-)9#DG7$?+=ocO>8KPVanGOI+v;K6n<9h($YL^O1Q*tF4C<)Nd8-u2WI?|tT(LwlD9 z6jI#T-h$kJLqH@T%0evv@+Uw3uYUhu4Tl@dLb}`K@uSBNFU<6|Hn)*{mZu6-PLr;K zrG99KLsDg!wylyXAt4fpiQ0H~r)eXFYE+LDnveYCM;>|d>Ct3dmHlqny|=n{`_5|5 z$?{xxW`5u+i%l9&#%1;YbM;h7b>wkep_Z$$lj0Z|bRI6A6)HFDeQ^7@$@|Mb%9KY8`t)tylu zxfG(Loi#fy$&kQ#HjQMFEU*TQLz0pt2dT)SGX)iriZqZ0&>}$rsTg8PL}s2`>V1-U zCg+oE@z%o6e)6-ml~o9F<>o@C(U_X(YFQ;NZD!4c9GZ~=A-fuEYTyY?AgaZx1fNumh}K1 zBsNry!L$~H@tE}|3JO+x!Ng(}YFeIIJqJUH0R$zAMsd#9n46k%Wkz5oqD0KjIrjC% z=cv|=y4vLB*&`t#ril;bn9eDhE-tTk_nqnuKtwgF z8dp`A-aGgB)6YElF{s;`mg-{@BPk+ zBL^>BxVX79sFiw&RZ|W6$WxDf@$;YRG_%e1l_Jjp8QIG(th8O~ z^83H-8m)d=CG4!K&b;}~;_?RMJ5yP*cYZ2qfg-v_!p<8S7>Yy?smj~}?r!v6J#%hr zghjCnASdrSFg@c`1sTUhoT0=>W)KvD8*PD9pp=dxX=&9cb?VGQQK(8ROOXI|7loLl z2^uY4yZPqNUp@2M>o>1nUAT7rXFvSm!i{Sgv&E{>YNlz!IhXjfkv2BhmQ6xuavI6G zv=P;UaU_rAjO^l-rAyb=hT0n7RKG};H{$a0;Kt3()z#hYjgeG>z@(5Q&N&C9A`uAK zc{QQh5A0m6=@*k)Y6buzA`-n%7|BEt>TLkk_|q6`v5=HSZb058A(Sx$c5bYic3v!m zP$WrKOVP+-l!_45qKT3tFa-icGzAggn3&aUZ#I39Tw+FugpLuQ?vjIq`T4m=9=K;? zV{_rwb!H~#MXiR>ni<9N$p;^d(RTa&UT@d?^nr&Sj9MTfalL)gTJ&cIhKh9^3}dQ0 zAQ_S&2|y67V$qyze&F7d2lwsqjQ!qrRTfasUJ%@mfBH(Jk%n^Z_>t~^_q)IM$divS zWe-gqeDbXum;dq~T}o;YM}vnSee4hZ_>a1KXYYILiRXXi6YrkC^7XI%&C2e8(v}&D zjTHyE$abEOM!S$ETZ!h24JlUCS%(NgSi3U+Y zkfK2Zj!r{%`ReM88!L~#@YDj9tG6$2tqt7CN#%fM0Azw%LBdU~{IDO^ZjWAl^{sa= zEv)a9=vzsvX-HgKqD0iHvg(_ZXu)(upnIm11M{M{JV|r$~*_tdz`R&csjPd@v zANqd#hrQtjd8b5>a4AKvsy1&|msWn-O!m_>;(mJBYIK~=~n zB7#6Q+#$q@$9rd|DlsZhm}s+Qg5@?68)P)L-EckUQL$3x)I(4Hhy6$Y@BjFJzV_Og zG8UeEsBM^p;Ip5-`BqfIgv&DCy15X_%DF6tSZkB07CXMLdox0yJKKCyQ04^gs8P&p zI4m2D?ngfP*$+PV;*D$9-g@)wx4-?({_Y?lcF0i1Ubh8b`O;^e{^+yAQUJ1rtJmLs z?^2R@Bv!C2qdn8Dw3U>o>16BSrykuux9{BRr+e>S99UEVWd~+J5QuW1sv6yW>cq+W z?iv;&MPSDo`P<+6=DGLILFS8CIXBVY&WoKa>$GwkLLfwk5jE&wd(cc;y+MBQ>S7Tg zTI}xGzp!|7ad~5VrPJEeP>T7eWcJNuYGHQvbb6iyOPLQ@W6~2|YR|5P2`5O%%rQhH^C=aBg9xlb zDtB#f?MzHg4103<@{OC>2x#u*4O_YnMe8X#EBD#Zhd2OXLExcs={u6U_Kq0IOZUX+(K-#7#Zx80)xS= zjk0m6Kh;>7n@$cNoSdI)bh}Bbm1J2~iG?Z{#9H+rp_Vy-3Ye)xB}Zma4cSOdVhn)j zed1lBv1E1t8bamL)F){%8u%n5LXlYKnAWywQvpPu__8RR_YO%_5J3b~OwAkzk*&e@ z&E448d*orBm^Y2JJdu!$(7?oavsZLyXaDej`2FRj|MlJXE+?JIpa|p;DF9Sea7hZF zj<7p9$w^kl0K{gsz)P`?x&gCVP_1?cB%xqh+fB_3P!T-<6bhr!kO@!SfA3xQo_ge= zlV{(4_vP<>&mkzp^25))@XU+9T2v4;O_Fw!wEMk$yrTuklIH#QKV%_R!+~Sp-`pPc zN1yuD&sg@Omw)~S(wzYJu?E#Z<;dX!srSX8$Ltx%BW`W=iZVc&3@W^`x;=MjqTHpt zVLaK9LI=ZA184w-?r@09Yooy3fSd1Ky1I9II+#E6`o)v;drol6Hz;${W{ri#!Amcn zKKstKQ6#`DX--1wJ!c?-Dj-FyMwvGY`Rr`_xz9c~({0Smv<@HHpJbLK6v~lc%*z7V zOAyc2m}siiTOMLZA(Rr7TPYYhcAz>xz28)`N!)Yz(GPx@Zrxl`rIppqK|dcA)!Db- zX|_6GZgX>`%wvq`nE{b%tOI0?q~S0fY^@D|oNpMp*M9bj7^)F6$Ep;8y>t5n%Y2ka z)jAN#h!jB)z=+cJ2qa(}jPm7S{@&6~cf#%8+dZ(qJ3rU$cIFZ2IMo;s z9e^>{aVO-Q6IE1joT^4MixQpl0HBIyH84N2^JXv_jk2tjCO(wGxs;HiMiHsBWasPH zPsg03&7vy6teG`KaE<2F`esB|rk<-aZoco>M`Q5L6^{ZEI zEnp4K4$b%b+c4g^)h}bHRnTK~G}S|4s8#><{qajK8bWVs zqr76YyB~Vu-iJT~8D~=WeVX?4-_5R@=kvjee}mBHq5e#;%bU;ll0h)uBethE>(*PPt}hv%hxw^tGvp zso5DC7S+P-wU=Hwb7iq#aX0vs*{SnEBWQG>8e%7Pd*=4XV)f+FpKh-0?YhJB6Ne9W zrl(Wp#5+(TC2t_L9H5L9drveL@De)$SA~&hHmqfEg5xJTrCBD?n3$c5B0(ZioqtDW zpa9ISo|`E`&@je5AQ{5e_V4WF4m+v-jZ3M}%$*2d24-udRlRKGvSTCGN-8DqkP ziuUX$KYRAAH_u(XtaIW-#fMZ#F_f(BCi zF_ehF#<^hiF*Uvu0N*#%6A>^1P!&Vj8>JqP-+#YT@Eg0MuYK(w|K;aCwfEq$ENP^^ z(W|y&R3jEML>Ddn=0E>*C&%N*4<9*nbTAnG)61{C^2)1&N}<^>fLdw9i~tZqY@`zh z=T9zQzIEx!#ZG%FFXMmy)30B?xy+3$f>!7NZE?H0x&`M~uP?6L9OaRG!km^x+3yV+ zt%;pNZ}$e2H2Q-_C0d)x0`zHxnFd1qu5Wr7K^2f$E8Rv{D# zxyJnSzx9<5+;jNK#n+yE;@-6F2g8-D-F?{1(CD6hCr&+hA_fJ;B2?{G+bn|mTQ_c>dGoC& zpZ;*KH@JN1%B`DA+dKVcHrX2v*H&*%bf-;mFdC?$GXhG8Q-!385g-vj6A%ywPE<>X z(NQbS)Y6ezE>(Z0T-qJIx3sz14uMx zNVo+`02nJFY9@{mEyNfL1;I`>BOxkc%54#0AV*#iAgMtCk`RkX0$J8bV_wBvn@Km6 z`7||lE?&O%=9MF-9@@RVo}|qfR+cVYqa^LKuMBoa15a@M#^=brz>&t5?J~0|B7UjysWT;}Ok50AP-AQJMcdls!XQ1^Gx<)*T z3KNP6fHIMY5D}t*qM50HYHcJJBqSnT(vL?bDgVihW6N|FSTVu%u>L}2f-MyjZ&7=r?Es33Kz3OLuQD#?dgzt5MiE&FuZ zwI&CZ?5wSavYJ13*VV=43K`|Oh1xZ?fsL1>H=-SGI$c*H{#Y!ex?I%C@ z#Blru&52f{-H5Tu^By81nyS>c<+;JG#srgt`7%QmE+FV@bcxQg{AfFLW65WV?jp* zW-HCLj-Rd;cYB)?tTa64bOioTBNq?u` zXtao-D2CncbicRj*|pmfySv+?(XiEOXRT~?buCHK0|$;QE!@hBvfG_u#?i3fXmqxA z2F>Qga4;J53vwRJhsw(6cSpL>EAohl+#8G*e-G;1VU3|=MtYpDbc_aQrT-c`GY_HUlPHrdWR z$Ej{NYQD9$0Y=j^Q{CBCKFG^a70VDq%!}c^g9kbj?W!8Bt*)rRiMu|qzPY}&zL}+y zopuXJR#!HMd1yALMtQNd)pJQRin4D+bh}kK0vJSX`YiP>YqvMIHcLTa?t}GJO4Uk2 z1QS!nJE9u~5Om(FNL>rmE=NUR^oTX-(Fk0crVl;*@E3mb3-br&T*6VxGL8_jcI~JI zw6SA_oUh%2nL-A7MC2+OPM zfjBSANI-~4Mh1k&U=E?#XeLBuRg`5Jqar(Fjs&&Zn+ymvbL>=Xr%gl^E9rg8WbKL+y|Z;8HKQ7f1@%n=%r2Hyh-H#w=v+OSMvXC6VC1t# zIT|_d0kqbs#Sj39H~})#Xj0E55DAIA#Av4VUk8kJ29$}7hZ2Mu0+Jz+)sGUDI=niC zOp3U_O77`;OHCi2J zsLCOrPm-h(8x*5{uO1C0%~oS~Fxu=5fY@iPeqIJM_KmU%y&^Z~(Wk?rh*jvcnx;C) zN14x~=V1%wc(RuWt2lwya zcl6ld2OoVXgbEMKR7=&!tjKmpOiF|zQZKMo z)zBIZSM_%vdE|jlefn2kd-aX!nLX#vo*NB^z14+oiog2@fAsp9GhcoEe1EVzHQmKq z|n)oD3yg{m=SwjyQSS)b~88BnUj1p3+okB@b z7KMm1Ns{)eYFDLiCWeNlKtNz-z1{5}y!?Goo!ztd?ho93>g1^xKlzD9J1a^C#3~k} z;mA;#oy5qTn3<^72G1B3A3wDhFp2=Oi%2qt0z#85f%5rhKlF(gUwHlW>6iZNORK9p zkYt%}9z1w#ScMzQi_C0Q}`t!f;8|@H7)X1`44Q`oidDmAJsL2uaolt|QBqBK`5(Q9W zPR99sWB?$sgc{U@etbEqydmfGW|D$q|K6I${$kwsWs^@%+Z=*REftkTKpepOawrNB|5s47#bq9Fo6nx?@tmX-HDWn_~C zC_(hhiD#AiX)cMk%n_(&NrGe!lNf`ANPz8DQ>`S#l+&^t37B`Ss8AvI@^YsLg9zZ$ zV2~^12!hVo)e(E5nwLep)4BKF`|i2-t|vbDc)QbSwwqbj==FCDl$l}-08lSI7|lC! zQtWnGZhG(hZf`h>I8sy7#3c-?;_~9n zO2ns09Ws*=gOwce>2?BI6r+6a#1uNWv6ENC0TfW3BSQnRG)=J>+<)@a%w#K6!%zN; z=MSDZ2EMa77&fwrQf>a!-3RYF>3jkN`DhS=?B91_Y325<#ak}%=$#>GP$sk((gZ&F z>Cb%j^Pf#7r+cHo=u`^}Iamo=sfOD80I2VC#niO+gqs;*Js1WRt&tq{^g!=;Q~?l- z!Gekr69UyM7P|wyH$yWJ)q1X~Cga1dW`mmp20%>HhStU=9Fx@m#{;?g_tXLwMMGvV zV0KB8S|N`-`JppsHw@@kcAs0RGOv7J@=vMl(f_M&>{D z`CpS__Zxrv?NS(!17IG5O7KW3<`B&{*rR7sM`9_(st{F#UZ_&hiS}epWeAmboMfG% zs)ivJB7$Oo#smOKqlGS#it{cpZ8_&9OlQet;@a$+h#IRT^~9hWoVPvm-HZ{Sk}677 zbvoU=4E^n$C~Y*KUEAeMy{Bhc!z zzwvMO9@w9@CaM@CFte*9A~*pH3L#cZG+5nQT3-LrPk+2K>`{^`C;&?ggbYyY*X^Er z9&C5#ws&^XH^8jELRCyvFa$(KN44u0#*HwK2L-ACHFdRys@^Gq%m@j=)l^U&L!lF^ z6V2|thHIY@j5(gniAa=aN#aFo(J-iKeUUIFV4@PJ4j30@VpGNOtriIh3@s`#fdDG> zH+z@gy|i@u&CAzTvSxQw|33g65FvVySPf2|dgkOq4-boS%(MK(7ZI@uQ$r$2htI7RYiQey#B#0Wh?sQOX`^_&ojNxvwJn3KfFZ{~eAAfQ?}R1`rFyz{`$ z1z}TXnpFjd*zuGBHq)e&`qXK&fvqM$_Y<0G70WVKRpK-9 zZrDrJY;tk}$ciHO-tSHJhpLQ~wdQ8`2dhe5UEMAN8oiVY!(2nxa!qO7?Mw-P605l?@s1;@D zP?gMk6dC7!6ORiSggR=G7W=t%=b&Fgt0&43fn2IXbj6p+G zVq|c2ms<3ZF21O<9X6v~Zo;&mNSM#U}R%Pp9mz!1+!KCB3%iIFl zzjtqkkVG(+SrS_foSE-T?9IwiR#ruKW&$`inpre1%~`flh5{0FO?H54Jws}>>nF)} zP)%AMuo5gH7m#v_zJ&>>OPd*rOMQFLYxK5sdm~@%S6!DDoNVS*A8`m82`Z;CD7*SY zgi&68^UWN zoW6bT^1El=K5^IaBTFKD001BWNkl*D9 z(RuI9H-GYzA8+=yDM=c>)o5g9DpdpmQzIZCN51jWOE0%u?H6A7Xk&5$h?N-Hds)iS z&aG$_*x3072+nz}*&8ON#>{o#go=#0PbTcVV68eQw6WH_-V%%-{7{$g2*6w~<3+$o zxmNum0*i?SAtL9JD3OQ}R7HtV1OVAN03Si%z7kPnB1KhWq7a0L7#v0@cB?DzUF)rn z=J%ec3WuB&!$L4c0whWRSfn%2`SS04>FMV_GN>xKgGT&s?g6Nkl89B%^^J{IyH)Jg zlp(A)Xaoo$BI4(M;|mWz^K{YQu0oz>jsEubd*{wyzVO~_KmGa2(jt3pwz|{pPKy!L zMx)Wn_LhY*<794fdQX~kLGLdNs>{cr15vKI!f3o__7;r(b{L-09Ox*KZs@eyq2% z-I?e%8x7Tv`b0t=qnPR#dtFmTYEy`z84#mNM5>2HSUZOBeJVP@7(NABmrpfQKupYZ zykWqaHGqf+P?G}y5mgKj5LqSGFGfH`FwwFo95X;|Bu7<4L{F}_wcFrHEBz0@_p=+9 zH~JOdTH7oX#U=HFJw?=F@Yn|*`SS1mb`U5P;r;Ue7wmky^9=@yh(`__*xlH;c=?)f zT7!=m5fN%A%8|Q{A3kwt6k=po#NZm~;o~PBeDuLb9=tbWSh#+z91PPKCLPT+(tU|< zCy57xvec^RBF%aS#lUNsB;ml(sXYf<-Gd1>suBn4BDcs~8K7@2a%z?4z`_m{1jzs+ z5GsgBKvwpsC}t`e4HOuG6&)B0CZ&n8mfpMagKvH7;B>cNm9{Y&hB7io zH2|nY&!2y9dvkMY|K7ZczzG^47@0I16QKC_fBDyc@fUx#v%QtHn!!v&v>LsCvSTe{ zpm9*8&paAmzqNSn`gQm7*WNn!?x?r|Zso&x^zi*3OklLNwWD|b)oR&2068D>{N}amHLtT0L*r6nRgFC3z7uzU z=?{-iOz-*bH~(RId2<-@wccQ=*`91q9Bs9WBHvtJUt3v$nc2CCX2(&I__C1Mw5dE) zi;Y%8MUd5#t3pj*jZ8?)V9Erd5eXTo_V)m&h^PkUgdIyXk>H$9oi~FR0x>zyA`#78 zi!Dl)BuTqTn9ZG>s&eQqZ?|sQ&OrLYH&=HnWNWlbgNmq-C@~UwLoh`HQx!nqfA{;J zF3N%coJ()tT0ejG(!%OmE`mf6L4hw{xq0RK(%N=ky$=XMf+2XaP~^S-?&FU??3$C6 z^0*DNK&0i??%(~{pI5IVNUK8_db=+qVb1qx0u4 z{Ol*EfB4GlKYit=QrXeNC%4wtQFUTs!aENJq5=pZNC+hp8-S`A)Nl?mt@8(J&(xie zJOmR})p7Y?bwm|f?aRB<5Z7dVLuPh0=tF947NTfGpgQ$%oG{Bs=)kbb%gwcoVz;<- z_Wah$aP4-l-;W26-mPit`pRl$2<(Z-Kv}Cj)7{T~;n!PJ-7*T`|G$9zZ%ZIVH0ND8 z9DeKX{%*TJ6mrpY3<^g81MhrZ3=iy`otr-p>h}N%$tiFiN@Kj|{`($!_`bsI>f++| zXfza+yl5kI8|^)lod~qNy%WkRP0}dCG(q1+*B0Yw9MxhSH0C@b0WxS!N%sf{CgYKU zOOtv5rV*Z5Y)_NoBq zE7umbR(B3g9%_gL35tNK&dks)E^llM%au_9mAa&P@X)b^%^m6QI#aEx0mS7Ss}DWw z8m?{VOw_9IkKg>8Z~XN)Hnz4n%{XOI0S$!8suUwR)A7;}0l@B1g+(JEkb(0FilvP< z8Wd7oTU{;6tzx)&-#vH#+NWP!T)2@WwEw_dccvAfk{CcGO73V3CI*L4 z;{$7&8nJ?c8lXc|vj9L~ObikOjLV2|*`c+qxefx8T8&8Fp=tyJQ#L?i3V9AhE=yG- z8Jd^{)Ka%Lw~inA!2bFB);E5%wtHi6;p%pwN=bbskFRM?*48&KUA%Vi_{rR2y~(TD zop<0O^vm}E1F?bwclgN3OV@838vzN38j>O)g-~@`olbiKpbj-1SEcojs-h{_fx903 z*ME47oI8K!?cw^?nrgpq%~3Ty(aC0Jr`YF%-nFfrebY_e(cSY)CuQIC{^?Nkkp-|a zG4j4fR54PTwNwNh8cC?CIzYS@r$vFZktozwW|2ygBvFeoMCTYxC02D#vqA(=pCnL4 zBt=#Nb*N2t?U||O-Z(Lr-CpT!_bb{SVyWs{Wq^K+lqO18h-5AiQ2x!2KAa?&_yhnK zZm#_EOFvxS*%jy1G^zoy5h;=Yh(sblV9TG697+9U%#Zp?8mkhjj@7!Q>bm8ok z{t#a~b8c~KxU^es3`XD+Bdjs-gyaCLqExeIo_!{5w#qmrrqo||@KV3%2NL44zw^q= zubg@9jbT|SVKh}lCeE_dL=COg%AS4ZsmZyyGKTlLBX@2CGIT`z2t>4Vc+;7_(S7gkYed zD(fs@CiZEHgkoYU%~B=Fjqt$9JtvRNhS4HRKe3_Hk=M#e?!z#V!f9ZH7$QK;7BdB{A7y6XT$-gB zF^OS+G^&jHMYwe1)`cs#&Rw|v!ymt~u()x1rJvBm?sk>XgmW#aI7?b6EP`a7z%#Jv zIGYo#?w(P_5Q%^oGsMJ%031=G;4BiE8x2M#$c7Rk2sv;N8O=9*Hx{&cyKg0*fAiAf zjrF4k@40n#DTdDCYVpcz?+i5E8O4CiNfztwnZ}P~0%qsd*Eb}DL-U6xCubT-BXKTu zK6OdzQxtVbiA%^VW7lp^z5MO({N-Q#)lP3<#7aOwX23uyih$m`?Tz*2g~dl6c_eE! zRAk)f*WLLzKgNl~B+X`K_D)T-Zr->#?Dq+sx}-GQDT>abOSryKC z0|m4s$!b&qkpmzjNV2pwkeG<#jb|>Rz%5l&OyL~pxd}@aH#If1QRx-P1-^S|t zdM^)20_1`T0}+TP4WnVkaByyBdhfxdwT;`G+nV}%P(lEXK+E7vJ-cR_blM#e+3f8G zq$JG)*t&;;>P+&ka= z$Yb{)4x3Fqdg|nMztv7`#XNMyic z+59hcifSU!qIxEdB}sK)eukl%otm26GjaU*!2^f(G}`H&1A8TufGQG#769rzo7OF_ zDMX3lop(M{Wf2J`HA^t>kG%7lPuQVJ%=2Lg(YrM9O_yZ5>;2`0H4j`2i|f~JUB7lJz=*#tar&v*SUqomge_;+&z-*f?v*!xe){6&#mEg)P!m@5gdQkVqprk5?bck| zO<=L__{7nBW(9`gb96wCh-|$5sH3^jY8Ws8kS7rfRpq?*oub{R;}3%fKpDsrfSQS* z)@CaQh@Do4h=zGl#E77dV1902MsRCsIX7TV#uyAWg2-ry6jjVjOb>QDUDo?gw0`A< z2Y`$2zLrl@*KQ*E7yuya^~&D%cGgG{{l@y{*Z=09E?n6_1~EsjWtl>s@PR|~qtReyW~w{U28`2_-RP5nZd<8IJm^8@&p=AXf@lM@SgSotngx0{}H8q!b;3qN-|@ zHCoMPcBg8``yYBBN?2Q6o9<5CUS7U=^?I5$3@D&Q6Rn}J0EkRLjL42zA?EoPzw(9O z`u*P<4tB~|qaqB6|v`{4d&r-R+O)MZfVC_?E{1^^^ejb<@PQyA+?qSQ)E5q3;e?;pW2#X8RdkR8;j zWoBRGIWfC5A;enM8-kdkbIt_JEaZa74igQA;t8`sUpLnWYunY$#qH(Ya;X>asbhy7 zScy1@5ffJr=0s$wnH<}rxm93CTcI zJTj7LRg!5tZG^Him#9lXg&=ks*}gqfo4tH_b5juj(Q_@^il8DgHop>cSIYUeJ9UCS z_vuHb4$oLq49V_jZxDQ%w9(W;ZqWc}u*=_n>Gj(yn_F9h)s5lK&?2z8EUK~dhVD)} z`8cf>fEA#&$AZ>#RaS{;U}iBN9h%>_e|GNDg>zs6WbMp9`^;0b(=+d$KVOW7Cr+F^ zbSuA0FnS_vb)KaTDGi6YNfk1lq6TlkyNTUwp``p zk4U*vl`pCILsW^AR1}xvM6%14+_5#KyWMO~%?1eq#5`O8cb?9)hqd1K&4+csHa^`i zs5_j!*LsKN`8^@3J$&$}tRiQ5EgGUlf)w^EVv2z5fjDVY3E2n+qn|t79WNP3-j&Y_aTA`-V_SuEm z<=i?m@#Lxb14n0T-Z!kVFy}IWC>jl#JkOChhA0x9bHLNJcwQ7CMo@E}LI_W9Z&9%< z%M$b5F)JowGA9p)il_;pC+2E2$%_sEgwPOrBG>Fit+5(WQ)NHCw*L8pUHrAT-UbQx z*H$NB<|r9l0HEjn!c6|lzwk5P{`Su^6(aCY|LA}FzyI}jU8fZY(&ack8Pe@+%EV3^ zlE4-Vh6A%p$BrKR;{N0H{SgsS<{Vh7aO_)KySrkNBnN~bu{nM6L9=SyRAt=RDnGk==kC4x zD^FHL+}>ak#kry*(TtoS8m8V3%+xTYk^^GOsPih3(Ihk`l4n`UmeSZ9I(T3(*l%?@ z2j&){!~;u{u0~ttYvdmq2`Q`b=x&8g&nKNfEz4FSTXO6OSs-bS`s7*Tf z5(Bl9=L~S=M<0Cm&;I<%PreZFVkk%%Q0B8tLNnZ*13BF5%(Zm36%QvU z7&MB}d7kRC99xJALYVe49srzkhG0>|o|a6BXiY!OG*LCqJP0&RLsNyXA_KEWbg_vN zqj#Bt5^&RqG}_L(+IVT)leO`kyIc6%Z@)br4DN4kG?@d>5!4|8NRC<%oPOr`v*%8% zukEPO-A7Lz?`#lA(Q^R+3rhyldrA)DUc%M%fTSugJC^-u_?yr$7Giy-y;y8b}#|l>02t9F-Ft?;b=u z()Rs!JaQmEcllT`AB`HN(s>3piRSY*Bh+hjEM7OEIWR1b^~FzoGZD4GJX8Jj>k zaj}AEK)klOdF8XuR~|invbI_^BZm>2(rJ@fbW&?oJ4&ia#3-neY5C^mi@*Q-zu%jk z9qf*o+t+T~z4vehnS!aBm;nJ0fJY>$W()Vs@&T+SgPpbYl~q7u<{;W-I<_#^4AvLA z#lgc%KoJDVO>0dA&?txra>^=}hJZ1~5F&Z*^}BORv$IQc{rTCKUVr6`kb z7|3PDte8mjj*yF@Q{*iohs;kSxJe|25P~$xK5sENB+}p!IEpn*$NQGUf{mqi);Mc& zjIkWBOq@=flupMvOb#v<^Zkr;-*nWIKmYLk57r;8F3m3t zwsz~$xaBf7Xyt7OM25Zjg-aJ-`s|ZW*EcrI<)Vo}Dxy}j+ss;Uje%mfJiOx|hb zo!k|mAQm%M0AP|sB$>LY0%FEqM4Bc{V*w;0k;It%T8`b+tD&IL0EyVAtz{FMw523u z0CbsS?@?hIi)4b3F!9!z>A1P2{tJgrt!PeXe{<*2pE-*3Tqca(bq zhmv-(20O?> z8s``ZRkUtG9cm;t6#!`!omxs&WOga>n4JS@K(#D~v)zSuuQ%S?k+SJ_@=m68T{)jI z%isCN&$V(|d2k0bwu{_*`r6mu&WgNgsvm#&{`|sXuRH(UKl^v>PUpz+V}rfjdQx4w zba8&RJsOvQw6U>XbXup5pSXAT&d%KscG2vMR?#;NvW=KxTm zI)|o+;LI%VbjY#B232E>&bb6>5DmbjAjoK-B9XoK#!XXmP7blEcU==L&)c3$jB&0* z&p&(O?Kj^(bm-vcw;zA^ufD&sx<>87L1=OF)t~?RH^2Eyr_P)WBBa=AwSWB4wg2wF z{~w2IPn`3PP|Eu7;iJzz`<%~O{h7tl=-TZE57Fn#hYqf+t~N2SDvIT7xykau#ozj^ z@APMijnzk&Uw--d7tY?hv-Z93y}!dQs71~m>L?kLE(F{Nxd8ZmeSrg=Yn=74OPXWLhS47{5hmZGv`|Ph}txmT$x4E|U zum0rUZfxz`x%a>s0>G%8FnM3JEC~k;ESXmj07ylUC?hYzW=hOY2N7rpA%wE2MB@hYd1rI|y&wGL`3ujTJ9~0&VJ5_wdEYeh z*1PXiqv6i>vzg;OqdHWrZb67mO<(_8Z}<8$&K1kY`gxvp`!m(B6p?Pf4J1jh$NVf2 zN{EL}^vQce7s`^^jR()=d2!>5`&U1|v9NexZg%$O%{${^{rJh|U|2_S;95-1hzs9t z>LDVJ#MZYqMdkC)ul@OVzZ;sS+nbS~TbtW1pLrVmJGIdn!lbGrq9X{c?v908pc%%= zy>a_-bLi;I@sso9)o7w%F^DQ6BfHE{B_`x7Bccj$mNR0A6@v5Lr9nWlYN!YTFgZkG z&P_uIQ6%~-S5Ohj*eihdS;F2W20{v^acgTEE!IwdF3)hT%fIo>Z=5=LCU3X9z4`C{ z`@b>?Ou5D3o3Fn3U;j6Mn9p|0vLYxt*-W{!`=@{Ur;}0XeO{}mO6IAm#z7^9xV5oc z2Zg*t9`{GPjiiO8B4C@zOL*h8i(mQrtKPeNH;YN!zxeXmJa1k3_>(L{t0egB$)x(= zC)e}y$7g0+d7(4y78;R(62=&k4Bq9LbKVfd1Q5hxGL{n~kr@U81WE~WQpFgBz__uI z5*|3(1#?lF)%ClbZubxV!S6hIu=-E_+kdjXGw_*z<@|GlasA-YV{+ah0GgR7Cf;(I zqBwq<`00rOpejdZ20)2oFja*ju>qhsu-G&?X|J6hKYBDTvc>s@g@w7hw{Ko}{`mt- z^Dn<~DUA0%`QZC6{@%AvojppdN=;F;3?Lfq4{pV#$~$IKD`S>(#1Sf+6E0*DCeHlQ z(LBbc3ah@CWk|tx4GkE8K~%uR7zNa`M?}{)(a@R$)XBvc=U;sB-Qi%bKRfs8rNdPj zKKsd?n>Sa`&D_4fG8|4!vvM>tVpVTkkjsb}k#~270Jyii5k%R0K}-`T13_j(icyHL z6lLV~sx71Cng9SG07*naRPJOMv==rvAMFq2a3{l9W4&|q%p!Muv`9oL+gwdu?m?-U zlte_tz%j-=&qIjO z#28$oq^{jxSQfs!J1D_-`-e{a)nEMOzx@y2Tif3Ats+)cukgS0i@#j7JA1oZ2sscM z*cYGOzIEfyaI|koXzIPsoGXXn;qA4Z4gK?f|2IE)@BQ7$kesjf%AmlWJ(>qKi7&kL z!Y_X7TiBZ2-B^9Rves_r-A?b!>C->=x4&`wpZy;Nvxu6@wyNfn2OGsgH_ztVvrHu- zAUdSTE_Z^d*YN;g5|I!QpF&&|(Vh~C0nnn9&djj`1JeltnWz~%E|v~SQ`dW10f4YRT~pAyJR^{ zagIOzr^*PZVWFEJJ%0RG{_|hzcl*mn5BK|X05IHHWs+8lVw{Yt?Q<`jEOL%vT!n@S zMJEao(TND4de6jJ2vura)r8p*auX^5NC~Hem?Gc-fSr#`L4i5g=2`pk>iV5q_W&G1HXIDLwgxK?SBJwfvJW)_v?F>Z zpEGg>?MEw*>R^6K*OV`Z!v{mjhl zqdSlO>HqLYPgb8SA34V42E%>F#Li*Fax}hv88WUVssge@1ZUD~xp%+z z_OJiOw+@{=T^SR=aBKUEYuEEEKXUxU((>Y9R9(Mu8<+ziIKNkh$?kS9%etL5S}hXD z5fP(f_FgST|CvZ222&s+Gck*Rsu~h9TP+eJJ5mrNRjG&spi!v|8kHt$rCK%3@bIyv zORro!f8klxcwljMzTdfc;rzMNCr#q&5((l z&wZZJQ(z_{F`<#EnIb3=H#=5 zcW*!VtH1c(?HhM4z4Xe~&ft6B`=QS=cA2Rf(r7RkR}C`HwtIx6p-%8eLRJ%tY9eVX zgodeMMWPU*nKC&r6ip-7L}>;zO;i$qv>+0-NDw8~p)S>;YJ(KoZ8y_(r_Y{z?uGMj zeC6%0y!+1CXU}YHtq%8gq$(X6C#~gFq|FJ#m$5JM!cFzQ#)KB6+v@zIKm14U{MW<7Fb!B8f)S%x;tDc*PTP4*N@}1O1id%L5Gu9M>9?1T9b7)P z)b0AZ9#`c~meog=`e%+E8LU5vO%>Hb69j+|THY7VXKC3d!6CV67P=4sGBdjnb*9(f z-5>1k4rhCd4l-8FC=*kOLhQ`IXU@5d95b>+(U|aRP7@${sznDAF;I3cEkHzt091l! zucD!gb`Q+WU3~6rIjK3%2W4F$1_ba-d2WcB@_S7Hv`zN%#dBZz znRl~ZHyR@PSPqBV8+Y$L{_NA+AHDbf?%r^3P(6J7h<#>c=s1X&&vr)5=Ho|g=Z_p( zBCAzJR5ao52o!8OhG%B)VCwo+CL(4_J66Z0VkQX6&J&|(Od-3@p<`8z#EPhfLA6mW zn=o*NOzM%Mwz^#-T3VWa>&;h=96Tg-RhOgja0r@0nAwp-AV3n0&iPi6gPN)!F{2S^ zr_+A!*|T}4Kd$R20%pVj7EFer+D5F1D)xyIC)1fcp=r9ONi7%{a{8zh35a1D8iy&Z zf>oobAWsqE#He6QXrM{kXpktti9VDRO^O6eY%0^+6%i3c1ql_+kbqDu7>YSXuS$*R zxN7#hGyKZS=jVIbbElS{KYb!sD_ZUSs;NU$o1&_QI@Cjl>H*MdM<^O8dF22F$k;>P zy71!52JZG3w`5|{)C=9NnF&TlCdU9KD&$xsnyNGbz`S!rBoYwOyG&F3fe2@g5MzuY z(NGfuGluvSl#cAYf;sOMp=knn=0n}ttjGXCqmW@jZjxg#ODmihL_+jMzP7&cH~;ZR zAN=^rU{Yh2MIb<=EE^0aYPhkpw>{V;a?H*-Psqt}gQf_U0(}n6&HdcZynFQcF$MLU zA(NJq%_onV%AP#g8jS{3S&c`d@n}fIWz!TcGl^(u%o5_`_4PW$<)!7B&P-?~VDL2K z);acI3J5A9AtDhXvvVm_%u@U*&@=~yAbEnB7!XC0b;^*yG}*o^C2u3BN>q!Et*Z7z zHSigne)i<~^QR}{{ja_AwrLZZF{;KUc&0RnXhIW%wA!saFJcpz7|cGqa-}ZAnbT)y z=N2+{1b|>sqJ>JOa;OLmsDg=UdP~_Pnh8#`fJ8){b3{Hl9ZiiA)|`lt%u*(F>c~>` zG$L^d2uo4hL^!p}GbOSHCxEz!svx3c2LKWyP6JiR`(iR0Ym`=dhLC-hGdl$Kd0uqd zzVORO4)y!pa@drkXjrUm?p0OoTOG34ZM9CHedg$ih7?2*!S z7SvYPHns=DaUc%A0LLeqnuM?4IkPyHOpHh^qnT!YfbMvzY4=#4P{UDJb zR^#C(pL}-b_DWrry%kOEMMb0YtR`QkF9RbQibcZ2g+M?PHReBfwQHeFiQ4FIP z$4wYX7}e$8x#v#3ctEwtsLO^7SA~6UNJLgm+8nlYe&FeR= zU%kFKH|Gi1Arc^gLG7Gsn23xBfe45}HCl>#M}X;69f_I9n`+93OPO3mUz+61K++dU zoF$?uM$ix(`$T|Gd)Ab)W>0As)2I>= zIeA`50)=Y1pIth4yxiMuh7%-GKs7Kx08-IZF|y0l3>8QvL&&so<*0AvEL+DKs{?p1 zF|Kc{dzZcT>g&!qvPhz+di~0^JJ+vgaqO#|i)RkMcy8G{*x%lfAP0{e&s&}0U|&>& z7$QG>^kk;nxqRtzdfb^@6oK>uAtfeE@{U-HW{CXMt!~JU0Z@|ghA2h>Ge<5ZUV;iE z15v6o2sq0;Aef4&5Go-O1A!tNfHcjx)9cI~SU7Uz@W%R+t&P>X9D+ulQWVW%-Jqd& zKE0p{u)DYO!TTS4^wEa|`0Uwd+wC3`nVQC0Vx2s{CJLa845m{@B_6%IuK{5yg}+k?h2K zHyKY-2p)E9t=p~{Dljb-~MVuiqRC^{J|sr z1BahEb@Gj`yaj5HR_>@8AS0jvAUbqD%UZ2oZ{_jo_Rb*7yRp=nnK@=~oGBO@nJE+Z z=jL4IecnQVAc2UTqx34LBfz^X)OB4q5`~z|1d&|sz>t~ERMDLG5(7Wm>Jx=S^Q{-3 zJ@M|_Zyhk2jUlq*yww8l)u4$o*xgxu^avD>A3NSu zRneJ2(7G9$idjGaA~s892|4G|qdyI%O%dNyWCgNgqN$cC{jw<+9@(i)gNmO%Ul>+lcT$;z=gwbv;nmkBAx0zts-xCXfT%m)zj*QaLklxsT)!TpIiE+fpcV|k zXAQVse=!7Jxw}&DmwDm)-NJbm2$;04XiBPTO^i*5MY{!HmPpV91Yn>NL{-d`9Resb zCmx8JAfkeD=7`7$_>Ioea=-oaUwivke&HL>o;q=GVSctd_he;dI4YH$voPcF^%tK% zee}TT6DQ7{IZ>6P)klws$dFZ&G7AxqQCT&Q^(@Cjv+nZq$G`gK3$MO(_VD6DL9o6v zSl=BXGi7;MmDjF+vAezb^{>6Nzq#}1?!)zmt6OX9XO1jhII}cAUjSA!y_wm$nbnmC z<#1wV(a@0tGgZklUzXLKdk+VL@v$Q(7Uq{XS06i{CGsvY`z%YwL<4i2C6+&>LtBi< zdG86G#7IEo9HapqBj6N(Vo?pIn#6KEa*hB2REQh`NDQVCR8<2Ss5X=Fu-(p%pFZ{6 z3l}e5yx_cRs&aRGgVD&e)9$HS2;ws5h}FOmPs+*l>$l!}??)eh@Zn;A?%2swX27lm z;6hM|ijWE)U~(W}YK)9P=}c$mEzv~{h=_<(Q-bc(5LuXZKRk7g8UU!6h|$xuMnsjU zU{jej0#8XQ30HxPW)_XfCA+%mQ+SLam@)#Rp<2egza6f8@`Yf5d2e$#9@R1P`Dipc zb?WrO(t#M`bgBekW=#{A{OJoX#1Mb{!F$2XwK|NfqM->@6@tXh+}vO=8cmuQ$#bif z_dMsQnAmBCCSoZxl^iC_P4jz9zK3}>vp?n z-?(;lt{u*wS|q3x$L)?kvfMA)-SMCt*G+|)skVxu+wIj&W0(yBJ-B;sw!4^nH`v|G zJQqcVL_i9N!4jAex$5B!sjtj4?1X`y2^Xg_y|klq5$W zrX~SQkc8QYj7SJ2Y8gU^CaszF%dfxw>dTjp99p(0TN`WMWk4KbsAB^N~1`Hw6VJS;tMa$9$3<7d8?ac1tNr|7O4Tq)M6B74}hu>(GfY-bh=N`Mfg-hmgp7J zpdbZiXQnE_&{DjEsy21)vlNLJ5sAG=m zRqwotgctw}k%I_(cFuvBp|WEmh#=&Mzw^vXr;Z=?j$_?eZRNP!+Zh(V*xoN!_x31M zN0twM?e*7kisNcx4to9BVuCKX>TR z(r~o5xwf9UOo6j3j}n6@vuAWyuV26a;QlZE;#u+Q>6NYZ)jZFcoQNbyxMMceH0Pe5Kd`&EuVM>xOOyR-v{x2+ccwEN zDhst^KO+rEL3EPXEF6W zU}{mO)4!*e#`Ktg=`AtMPa{G=Q&Wx7L{zZax3anGx9_d*O(-uSxU_#guzc{+YpQl75xdM2JO17CU+w08G8)%)(^SoH zcdwp=(O~#sV`HbT*rf3G%#p>Vek*Thz4=~I_#*fH{(;+fSN8UX;2nXW=`4lwN9W&p z>&3U;yhx-gPaf3euqfCQ4|aCHxWD>%dm_%s^zUd)10VIz_7)ZOnD4 zKihVBj2aahfabtLtKXd)4ThUrJAsR$D2OR&3Fy`mB3O4p_!$4B7`)hL2`fy z%!n2ZO0_1&NnMA!2?q`?9Xb9?zu)T=*~a=>)imB^W?*WH2FzlLM0poooBpHdxz3|_{o)V*#J>6YeEPb6^y(C z_Efa;ZolzG)!1Mp*k~TO-|MzJSyh$j01%LnJ*TVyHDknN8*`awW@L;}Q`!)$GRfv<+x__l?ADXjwZYgSFyh(chfgdYY_~g6C6v(- z@9x(h{p5?mWP;weK#DLqv)ucIpLz4b`7;P%e`m8C?G`!a8EDjYyS-D<^Erdu&j-8@`P1hto%T!e?naI+l8`G`M-#+n*NOOC84u-4feMj z2IrMCYZWaqc(hsGyuTTcj58gNj?8yoe(|Nho3oKv^yaL2@RqFk2)g3!x8FRnG{3s`csSTqL?ExGLB%r{twPk$XUI;F$>)MuS;c#Io_u=s z#%EV=eD>L`k3YD6?em+rZav)D*l)S^?(Q%&cKFzFB2ZD)Xrcz1dY&%_ng*t7CW>fj z)PtB9cvIAhfgvW|3n7t!Oxbu*05w%Q00|q+p=nHw*cn>dA{dycA;J9YLOB{=yMBYI zP~?c2nX${(9zB|$ojrU0d>xx9xyT?@Zva+!clXBi_ul_V!2^<@i3&0ilYurd1`$Rk zqIR!uJ{ye7{W8{L9c=Dvqa@Pn&2X+wQ-{zHl1dCsjm+MA1r-(N-IQEIXaxGxuq>O7 zgMQ=KWoW{9IMyb3z`=01vhw8q`o{LSYzRn!&E}8}X6;^grqwBCI`dK7k3PBf>CFcz zQnq8`zx~x$-+Aj5jbo6wx3@tcGrgkSZE+5cJsZFOlbg3!cB$2FkX$o({=~tzUVr)i zjjO{^X<3Vj0l|gI(rjn>V82xa_8B=U%Zc}%$wvtX7MIE3{{2UaIU)%lv6CtAksZ6; z{bAk6p`|0^;iTPeXL-@Y;2f(omg)op12scYB_eh{>0Ss)Rf!mpo@#G?%3C%AO5QU7 zG&E6AL-!P=n;dG>4J*MEzL`V@ij*OGqzsVRXD6RK|H`FT?%cYy_GFEmHvk2Qu_>}V z%kwV-v2Cg#^L4C%9eQVgwFGdyxxIVq?)^_byZ-(MSFV0>r`KKH-KjR$c9s?n5ja&$ z&|3|lQ9%LF2#^pH2RmsqlO8JlHfaNHl0ZO;W*U{AV&oBt$eF2XbS@iDMvlG9yqT)$ zG-Sk3%rf?iOAF7Qy|6I9xVbaj9|cfE;uymI_Ri~XywT})n-GxFC18j^02t&)-~ayS z*KQgY1~i2Xryq_8lX@XWkccL^XJS`YW!(gDK8S5?>@3VLwOnoy95W~)pmRA9shCau zcaj8DX2zcB%NyLLNMZi=!SmL{%(?!|%uKKEJFUj$yAUf=n`#YVDQhia*6Fsh7Wd~4 zeR}Qgzxj*59w<207Q~m%9RB&QUCP<^_czP&zIW1YyQ1s!Hd6+ughsbkcJ4mf5q1GF zZwAK~{8wLlB~Er9K6(;d3z3Y7!YGG$^3=h_1=Mf zXaE{SGgC~SbV#;~sqD;DHQfx;$eA>95sB0K)&$Yep@AYQk_Ti!ub4%(MrCp7U?+DU zfAm3m3I&l9J=gJgGQw1en<1eg0((U?A|*EG%w@nWrFPjsBia5S{P@S8fBezad$;bM zdggSm*Dq$;gpAB!7*lvJC1!8p+hIbHObh*V9~wI6l5RpJrfo4YB69*UAQ9L!RNOhw zZkpL>sfs`VG-4c2hGn_m>&~t{So!Sgjlsx}y|HuT_V)Jr^RpK&y%<86-cAUJP~?8~ z!NWiK7yn{7sniwGOj4NyDasHXv14!qCQV%q%gKJ$YPaVX8ioB3LnTrp1Z(z&?5Nvo ztB56WE?N4xnR%M%17=`pJESrN=}A-t;NLv)IuZ6377i>g_xp1#&Y+G^2N#vhyn%*r zaHh9ByEq7OH_F=1D8}%#PEF4}r0W6!nH{DAng{?*QDu!T59|eGB z4nz(eIlQ&L{qX*MMFJ!PNKxAasAi(c{GO8X(pjB8K4Zg#pD|=cN8SsV8hqlIX#fBq z07*naRF1~gjT^T%w@1vK{oSV5T?!Q=w7cy&i>T^UlY0GgLojl$7H z4NJOOB(|w$WV&i2;`GDN^sq?1hoMM}O}pLOSlj&kv+MoNq9NCkDD$@R;Qpy+o;h^n zXsR#)kijy~fBD`2_r34`fLtdSB`OAE68{6Itl3zhR!htCzxo@$dj7@pk00F&)v(v? zkIPWjbt$s5ySF?h15(sLhRg&8F^Z{8+W-?4P18Jynq|4mJpaK9KRbWm z!2E&5g#(Mrvx|j#8CM-7k4{yya ze0hF`nT=Q!8U%3#xf~3lNpMg+d9?Y1A76jC-GKK>(01|I!TvL64lf;_fAVL%1xoflo80s&hy?X4%PpZ@q`BsO$_(5L`_ zfT>18PE3b{01!d%z6=9{#Dk#3x(6V~KwyNCkX;cGiCe=-TwUG$Ex8@X;KKQBm_Z1_UKc9 zZjx1_nK5&#)2b&8BOF*bGTZ7u+1wn}2E^!TJQ&}(dF%BzURzjRPWJ#pV2Af_-M)I| zN&v3YRgwxIiHO9^8N%Y+%(uVu&ENUGzx(Q2Z@l>0%a<=cd-M9$2M-?=y?OK52(+vX zu<+{Qpms=k?wFXIr5$h+LgLq_x^x;3M=91#Fs;7-@i%_GyS(6gUDxfl`+fF)u)p7o zC*DCX_uVYZjApsSP87x}0V@g;+FI zRbgnC6CVmDTYCfJ79m!#sfQbxrNXZ&zfXL2ei3LpwkpjRpos>_Rl|TTXs?07a>ku?e)V~ofl zAwWbURV9}r7YJCE6`E~6S=-v))-=Z>_RK+qfXKk1kp+^vl~YEVv1(O%R0dON(2NZb zNhJ~Q3;;OG)ikJ9B5RwQo7;PLAFN!xe(UzVC#&m&b}=_UyWD9nFmxQZn=%3-r1VUM zL>e+xNT};+m28AakWhxHGfs-66m>jp51!Ie5!8||r{9~+(0k54`N`EFM9e{fnTLbH z%Hzk2{r>XOa=U2f&U@y$PWSyEzPC3T8)s3>R6X%*uZLnNnmhil{=wh>-#&K3k&l_)*cUb6?8P2Yz@avBoQL>ZC_ZlP}Sb$#GC?8RE?O_ zOrkRTvaxtC&i0C&yw%O9s`qO{=0+1l zz^jQNssS)Na-&g+%Aslw9Y4)^I~uBiiV%o%o`?WQG%}NdnZ)!EBEFBO`i!bEB@4H#4HPRvQ5#zY1ZV+BZnhM1FU+yBqhdwtoJWM_WcM8rAQrB7r6 znLxsO6sihUU6$2dWV2~B63G!c)Qq@98IDG4D2-n9F#nF0^bd??^d@P zAYl^71k(Gw?wE+!TMuzjWG*bcV8JBrJ#l02@B4lqu%f+q`C8RI`uQ*ZzdUb6Pyrw! zA8VsznJ^Yo4mwTu`@jGBpZ>{zcKzxl3s4UGD#048hJ8ta0R#y(5T%=9BoekjPHh&z zqG=6F*xMhju55nw<%7MQelr^@2YzjJefHFRv)uy3I(QXT6=q5{Y2=hZ7a~?k?omqd z14tHxbSD!aHYsbG#(x176#^=U{Xutdu(c(c^?Oz6YvC;27dO{lfAz(0R+gXkPmTxO zMqh_KIX>=-sw%6c^XLBZul@@#+$+mSCIVE|VCM9xi%W~& z{`QMRBNrvr`KK`|NOTP`r07F3fiFXyFdQ;+U=`FbwWZK{ewqO3!e^GhH8i^ z=gyuQZ-dQ@v1u+-l~Gk)kdQZ8S1w()d28*(tDqXt#2~85Y(XL_AP_Nz5T8DM_T^XK z6#e0qOINIMN+iiao?uge5+fl;2?!WPnA0bwCZPFf$pb`eh&XlU5fZ8pQcR3*GQ^}R zBFUD+pny7>tQA0%jBPTv0dvF7WUZ6!?ZfSzg~f|&Yp*I_X^JJNGNLbsZ{5EAhkx+X zpZ(DvefZgD7p`7ix^(G-k3T+r`t;qm?|$;xXQxlk=ea3{UGXJ^U{OdV#()Apu-|x; z5F=!R#C3=-Uc7kl@X?pQ{qD)LSMAo^iI z*gy=#Q40=?;+~=s5l8gZ)T+jYExC51ec}8~P}dvQCuIa6MI<(*4=byyUw!@cZ+`RT z*WY~efBoP8asS{L$az2!NYCL(uTOvyC^y(Lwrwa!U~4iIjy@X9tj&BO;EmR{>P7zB zpZ+;C9ayLoODxZTn|`^s_d{gT1XR zcUi--Lm;)80hACuGZRr!<$H(z>qo0Y%>hYKEtF@^OkcXZXqp(xVtS&rwtnzxZI^B4 zi3p@FtJBlX#n~p11gOa%TSkzo9FoJVor46>s@-h7naD5&;_vL{S3B2oQ&WF-B$s3dtCp`geWs zL};8NB+&>8h>|AhH;Gk@5~DS$e$2*fEzKLU^?X*q2(VHEen(S3{{Ggd?R{{G|rt>eS)upb~wjD{nSATnD;j!`x@ zHoL<@$O;-ENL^AY34^;Ow$7J}46#o)l3-eJlA)9?QU zCM^)iqKQ?xyZY*AXFJ52NK!JD5nIg`wwouh-a0z;jFS-Fy>j8|!rbs+M)qNl5QSBxJXtu^eEaR2HWLZHG1kc4#P{Dlu0j;bSfQ$F zBg3WnS(iHm@A8Z+0bpu0a9IP9Vvsy*O7O2t5*$SRoAJeh>#GYst`iT%SwzfN{Yp$^eQvOn2dxNqcU?0F;yxVYXKpIAS#50 zFx{9zH8QhC6#-&r$f{rzCbDcYiJV*We0llb{rmp|(M03`K*U}=3+Gu@mHqQ)7pCXt z%DMsoi5?|{dH`C-*bmhSaWysBx_;y0sZ;H9OVj5rEZ(_&lUa9nHY8RIG1jG2Lqb9_ zm^!^v;hD)*F=|BS{-Ahp|KY1wTho&ZYcIBrkLtt2;?kA3tZA10p|3=vkQ#{^W3+4t zNP{5Kn>N9um|+U{ChA1;&ym7#(6gq!{P^jM^<8!2g6I=o7t(zV5WpD2WOcM~(vheR zpa2$4;$Oah@7L2cOT21FTN^Kkxt8=Up z(EyRP&aH11|M3^!9oOP*6E#|txoP*a&p$qU;Z#|50fWt;l}|i-^kQpoFWROeMYb|H zJTo~lJw1+85d%6kY@$dVqG3nKilP#i7SGgm9V)G==!J>MO9X&~q!m&HB_?YdgMRhR zS6_yrcb1l zF=R%3xRm>1BxG_iiU=9g$eb&Cy@wAUS3x4A70k$*Ln34C#^=BL+4#(?mk279?tN1F z`Z)L_?|Z|+F0%(LiHq4&&2vi&SFc}v@7=fGdHbEZ==-ww*{7c_oL%ho`orM>l9G#* z0D5c;JBP*rWz4OE!~R#lef03b({I0fwDD^9aJTzLOK)F9l;Dw7qhw9nZcM9~mzxK@nt)jdRYe&_L0JSzjfae&kOZnE-2oy3 zDX0Pc?30gAomnXBGD&zpHA(3WOrW7`;M7B;zca&ZFg(oui&+ zV-WrH#Moc_=^x*^a@IO6%0o*cQd`@$wz2%|WmypdMF5sSfY#Au$0;Z=AhU6fk*d06 zG|t)>1XSnd=H7evo#Ak}zV;f4m92yrB&1eWi8?hom1T{(t`OkK^72@F?AGnKBzQnz zV-&P5YfvDvF-8I=OCagEN~0k%SwM)XtwDofgQ$q;-6sVV}rHh;4GET}{UMgxghEx|DV=-$2g#igpQQB*ZXKTzL|;lx*mAVY#u zrHZixsl6|P4@lA;ADde|edGG&ci(&W$3Of0!%yDd-B^3|;)!F5Qj-WP5}>L`khF0p z%S5)0Rfus|`;+eA+Xvr2efoT2@{G$S?|=8);FzHfp+$)?grq2g$Y?PNNI=P*ih_^^ zOaY0pE~{p9yxnMi|M=O-QK3kRb|fqUS|kQl-zTj#mIlNT6QF4Fwh;m{V)S8ieYJpq%6zg-FM$zJUw6b4_~dWhGCVt+++A&9D^Vl%0$-RTVL~e9W^-J8^>s5jHUw-;e5`IxbjAgO2_IiEwd8h}3LWy39ib&&= zlLy{E-rA@kdaW-`wcowGBz2{sw3ckf)-gMTMA~LxgKUiwWX&ngJFB~gM};tfhN5A^ zjcaE+W47|gfB~s?u6gd<#V5~RufIBAYa$VY+1lD`*l=ZWj*SE;*&5TZ*4nZvQw)$8 zVyGmP^E2bKv!|CIJsDQDnx>)xVR}(eRAY=$3SRB;y*^ z4%XM#U%%Q|d-X~LH0AU`P@{r2v;4}XOXsg#i4qh7l1SB6IWaV39uU+79x)(z zz{sr3>f_LdvM2{+U}AP$LgDM4MS1)7%|H6XKbV=C+~3|B_6I;3B*YlfS}=+zAv=R6 zQ+KUFmgai`eD3$_ByXuipFPqBj5^A=D=ayDwipJwDhKs7QoVH3B1x zV7oouReip>86gV9vz^vQw{J*Y`f`|!Dmp^ev}q`0<}7ziTvip)*tHw)J$bqHd}A-O zHcC9$dNDQDx^VGqlwp+07-e=g%U?cQf3dR8#-VWsM?2L6LI?$O#n8$aM(5uG@LuZjWh<<)FC#;Ne7PVs7q~ z_rYcjCKG&2_g4|Y)S(UO-Oq>wqNt)OX+e~fB1}!Y$teU1D#0ht3Xi%ZlKqU*g-Q|F z7!!R6b?IDw_WV^=^W9h9Rv`cx8DXP<*{aCeiV5&g{Fr;Za zk>b&$^m7F8#qcQBeT{=bZ+~`X^1`(X^Gj#1-@bAE>ZK5iZg+oTY;0z7a&U4;fP@62 zN}lvRryoGz0-r1e72tZI_fZOf(LYu^JN7 z<_V}EMm;+25tAU3f!e0(CadGvLnp&8WKsqrUIUL5Qm1Ru9|_HUj)eQN1+v9(j~u8-%f`lKhm zHZCVLq8Jno`orU4u{#*N+&y}Aa14!3=hSKbt7|{@gJGzOdeGh3-q_q;^M1fA8Uw0Y z!;QSrYK*ly<2}Wv8yf-wtmnqtixW*>4WloNF$yZ;0V7-D%ouA_#fQjjRNMdI|NMV` z`|wH44OLX6@ti-rcYAJrBI>|qq~KK{#(J_d|7`i?aes(eBLtx=tNKSd!otD~!cYOo zQ7TaI!Ap$BI5cFPMb>_=d+q9_$?3U+{o}*q6JV=IiplQFDAH*+FJHNGcy#2093Gu) zyk7tG<4>mN=If}SP*){DL=X@mh7orSQ{G&n1_BX{gqmc6wEK_|pg|EK#+a5r1S1E{21R97m=WM(=F*`MXc42Am^y1X?TrIe@wNsXZKswjTrW=+-+6{}K5&|=(RIba6 zvnEJDWak>kU0B`duJ4@;l$l6Da;iT3(OZ|VUy51>Uov?@)EMXIFK(~zJ$~{uasz;( z0>!wqvpYXCacZ&?B@!zUvm<8U>LBjjAG%vsqCN zH@CKY^nhq>J}ibrv~=#``1q7FHq>>fDnzl)0YD7Vuu)Y3QBXn(K~lM>!szp1WHU?o zGBSjSXp*lc0uYW=1t8P}u^&Ai0wRW-0JIzJqNsLvx2vjTV*w~#atY8{*Xy1vEuKAh z;bIH{)iZ1KeS|&}q@hEivazTTLja6KjGzz&F^WWFLWK}3jXs1jRQ(tSlhd7v*>Q&Q z)>~J~VYh$0dunDf)V-pA=vb|a`nqA0n=+;&z!<~KF~;?+?bY?oXV2G;j!S1JB)YNI ztTRoBmcSUY8azn)NaW~)c&Uqe=k=b$hHKA8*I8TNRGS&($+3xd-g~dnX?gFXs;{cK z#idT8`Q5j_2@wEH+AIHHNJZq6Uibck`(OU%tKRX+M7y(a=Bz<5Xs23}Uw{2|uU7)Q zgM-~`moDG^vCr1VSi}HTDdXM4zq*su59CBLFBwBqdUb9zfsxs!xz+z`71Y9|lEn)b7~R zi<7r+Udb)}$)Eh;#6;`z`K8>N{_+0g_;@uef)6oxfk;XMAVA6nOaojSskOb=`~Knc zr%zLXeRQpiLB$IQIA!(D*KhxvElOZPTMdQy+JtMYc=fbG$i}FGwQh57_}j0Sk4y0;LjXo}P`!Qo`svd%Mcp&xRZFDgy2Yl; zU#;)0Zyp(T0>lJCq(OT2)U36TTO~*A3?ZpPsDs4dYz_p5nTYB-i1^O<_?g9pr^`?F z_V#n*6pg5esWcdp-@J$=S2AUlmJq8hvcCx9kss(>dZ zL&gF?i~^#>>BuJ$75Tv-GjdX-pAAv+qNH{c0JTgASXYB;FzAd=ES_E%YfpUj)o)dl zMr_29nz6aD(e3pvo?UFUazyauiAafxpg~2`{VZ+Okx50<6r<_M1Ykx*R261Jpb{%0 z00gme*Z+`pW_3ML$(-+4(r-mmLipy<7D#=YF6j1iVcgwF{?++>O zcz{^fAAk7KkAL>F%9kUdO;IGa^2S)6{rWdw7nNru1xm>KM6F1RYJ+TD)*lSN`R=>N zkDoqTe)90qGkf{Yow>2jvuEE+?dK*YqteOA@!`=CHQH#n^mUN< z#`UNC)47GdbbF!K^*zTl)gEhN);7&d4OALRAInhoih5W@?^&STY&4y#hrO(2=cXr` z86rZI;DdL0#)eF0ysv`P&gDwrnx~$v?ra^MMAuB=!3^rzsrJ>Im)XX;?lO5|Kmzq4 zvwYYMj~}fmnMjmaXB_LXMsuv4O?22g8?=rJc{5j#x~_~dCbJq4 zsxbi6gb~532Gsx<(Z-_O_i|DU4_ae9e`ac8BD;9u+#meW@BR2EACuPS7tihO?hO0G zL4mPF}ZQ$k=iHy(Cy>a#{S;+QSWegymzwsdS`xi&Y~fNwHKRPuXhV*Y<7z} zSu_2 zW<1o@`s?-a$h3s-J{uYHJV!bN3~m@u9xTa?B< zNZls@8U+wXYS%yVkVf(8%*P*WbppmvU8R%}ARvy;X`Psyx^U&%nfZmy&7H&j!;vvL zH8CL|>dEoZu&8d`xY-#Ss|LML6@)3Ct^h>HAw&d8tj~m`7D>3iQEVAUtY<_-00D*c zl!`=S7(kG;u7*`Ha2cPPp9S)4WZ~SrGrG66GBIw(notk-9aSu))_sOZ2nG!%;)cuF zy6wHA$IC0vUaY@-wf$sev)6}bE89D}{X2I*hUV1M*IT8pksU_4bpFD7AN?poqWq_L z3S@>)_P2lj^IuhkS7e{0$#hD;`GSNxQcYxc9utq9kW*Lx@iwKi%Kl zo|-;2Ge7U^D)@>B0fkKpi-aU9zlppkDiV<~3;^B-L?z+~iXfPlKBJs*s!keB0m+C@ zl#E|utkzM=I!@2d-@I|_o3Fp!-`RC}28L7v5D{>Y`1J9k;qghQkORFHEfD)-lKteJAFp7w&3WBl$<0xuX`#}{3QL4OcrzRV7 zQ;mD?-hA)f8|M~h7v`sKUcGqs%v`^B((4ZZKvaXMM^wtyG{KIQ(e*3Z+B#W&`g-}v z`sUVgA@I$kr^kann>->(C>inXdv}`?oe+H58zF*4@KyikfA_0le*kQ1ed9(QJ-2|P zS`q*NLu?d7s6-+eW+pO@kOY*J4tEb6#~VMo*O2h=n_uPDjpx}>zc}iZLZ%XoQJSr$ zuj-(YKRI_=Kw6T||Q6)?-Pb62jN93Fi8 z)ptaYSqs3aTfwHFV^mZD5H{}c@ZiCN@200_?%ckO0Aw9=9#Rf6`qWWt*a{#KibQ8YA>Ma0RRnSo#yV= z&XY%vfwPc4I`JPuO8@|(&R7Fd_m4q}x%uhwR%6&ZBn46>(4=tJKCZ4lpJ?PaZ{Ga= z>))2W;dtI`G&+;*wy#4Fs6*uyTaBiO@Mjm!Ai+4dX6$6n4JH?Y*O;7KDXxKR3^B3c z#G1?VjIC1wB&lOj*G1Ht7!j2$kpbJVCNst`u=-%OwvSgfb_$aN5i!Q$L2l&wjis_Y zAPCk78y4^gsu~IMnVI=Vk6*l6-OsW-5(+{@v`E82ab|9Es!0M-F(84mHnLn1>!K#a ztkEFL0BDG!NL>xfe*eP7rSlig_q*lB>kR=i)(L8&oPL#_1cRZ`P%I} z2glvK)kI=O@S#8iGxD({poSP`01Yu1V^TICA%Yn>v1&#%TZK3Hwv?bsv6A$XMNtnD zqLf8Bw2l1grK_{kbI+eW-`m|aE<-kH&J`qM8@{N&{>|5&R_E@$_tlrx;K&EBfX=!> zzi$kaA;cdxn2_!^X?u%_?UrUALSmzmv#-k zG;Fu*%v9^zrLz~#oxXT>VQMV5456-zVW9w`5`mO6a5>m!GkUS2td* zPEJqXzIz8zt5^d9F&k83eelhLr%#?Jv7lw5gfZqfEGfeTQKrY5pMLcIk3akLumAd= z|MaJyZ@gaF-&q%5#-K#3fB`XTIo0umEZ;z6rQ6t&hW;_lYw(f+=K&}!sFDiEwO zL}&~FDiTKZV-pL5QonkJ6z4vSLR zCA+bTcwb*wI(>2RR2>W88WD)dTAMW+A~G2C36PnLHBnCga6rg{FzEGnwzscbx_18JMF0#zRm3n8v9GJ-+Crd2 zI!hHmh7G_dMHxkK%K^INauo7_;kr;^?093>n3n}~?yfwD2iq6>h)Xenw1^4SYl&)$6N^6fj<&Yhn@ z9ajBah5|wlssYE^Ax(}?LJ$IVCa=qKbA1DuAAkR-ndLWczh#XzN}y^qH1cfu!J`M? zeh-{QKtYu^ID+&o7+_!4Kl%J8|I5Gqx3}MUw>duEo|wFS_pKYZ-@bhHnu_oD4t?+` z0DaW$t-o9|WcD|=X2-`SCZ{H+C!syDH}nVHUQG@_nVA3b`dv|JNIsU0HEat6LsbHT zO2S1&MKH|7=<9m)pQK`)Gsc#^LGPsJ%fe)o_VmOULM`gqp+Gd-Cm*7bP_X zK}oIF*Ds&HdhM*?LZt-qiL6G(h^j{MVR-B2yOtaGAAav4OUZFijKuwety2?YlQW&n zMzV%13j&ZjHf2$k<kX<1%fzt`N84g?)L75bLZP*6Ry#U5+FeqNi>X5R-?T?3L!;J7=A!v(U6Y#m{5v5 zDmEIyszN|!M8P-MO@Wjx24?WSUkry{s)aL)AAR)c_U6{}r_VC$*c#9nAx1?suHWr{ z@yoB4A3yu_lb?)6I-7H7uW403XK z&}z1QRr|WiTuzo1PzX_B`Qi6ZzJGY>;`ynW88)0}xi5OZ`1voMK3g%a86d5I;D;|n zWFQs2e&gD`AH7#p5=~|MiUzn|ZT|jU1iDjL?FpL?44!6+%Q+#}0uc1c(wP zT4%C61BAL7hEV&uK$d3H84DtT4KZ_+kU5K}sQJ#$;iHxHk~_oNLF_(nYtfi#~mF@U62?NpQm z3L=roSYsr5!iX9W!i}3ZoU^ZAuld>=b^uCffCxkrj`->Gm%E$0*RQ?R%-SI8Tn6dr zQ#5E%NhH1LM>sGxEF$>EX_GvCpg00WrG-FhTu*k76fqM)P|%nl(g>sgAPOi5H2Qu? zK{du`ET2AmW^Qrr?4>ie?p!^8VJ^#J?`S=@<#-Fq-XV*3#t@M;CWiR(<%{LVPaZ#b z`1JWh291PxYG(SQk3LWYK}Db_;_FcR%4N-& z*_q`>Pj`2Ah^<#0Z?-z^v4*wPu;`a@81%{Z$;+c&w9SyFZ)5nsz5bC!$}vMQgvQzo zK!bRZhzOzf1V{)Hf`%Z$189uV<&G>D#h|Q)QEEiVnhq&=32eaSRxknz8)n-qituD@ z`y?1(R76KobdN7xKD~IlUHgG`h^PVqG40erB~(S#Xf^it2g}Q^$XGBeqy7^GFc&T? zoIO3`LlHy4h6E!Z*vvY%MXw(v8f%$tj1r?K!Wiqi?pJjk!7nbHD|+Sq2lq|Z1|}ht z(cPRBMpa72xTC|PM-RVq#@@brhYTZ8R8@%~lo}%&hE$tPl!9+*r$hvzBe+^jj`@+F zg;W9&DntMQPy|wi7=pDnnOjA?F#=E)MK8qS)co9?x881K&6Q^_y4@~Wi^!r8jRiI$ zcyMs?{OQXF-z?`gJ9lm=RE5h>WMuzOL;}%B%&GwqG+i!}PA968aKC^fZd6RwNh#tR zya!Nb1^|(WsK#VScI5qo2oP}8RGA_VEEttyz#>AWR3et+lYI5k+4Bq2Z{NA{qkA_E zs!=@H-&0^Fi_YYYM)#!mdgbMVZ@&KGm%mwG--y5gsTL6gBs641=*rj>)qlYs=7Sl2rkTj zbK^5nAaI5=B34C>!Pj1*fM_UuBC^NIOD(bX>LaMyW+P^1?{M#=>HYukqh50L&&V;&9N{w-3h*dlY5J3#sYu+h)A+k6H_XWW3&>2Ng9I4h#uc8k=4u(Fh>1u4AY*3e*vzhSGHMr2T}MT3GMqbP~U+}zUccJIZj zb+9c_h^P@r*j9u7=BxG7vz^&-R)}Pgn3T{MqfrO_zF}i?M~>5W+!{lO61`&;!B(f; z$UBd}e>x~@Fb-04qJki@aWNH<8U*BCfADnqQO5Sv%xqa!?XfY_XoxBiiUvqMlc{ip zDaM#u=%U25p(i$=DhixB@nCd*qQ($>>P-`gNTfJweMN*kcOqp~^n#S^%+*_WKKtay zgX6)g*K4&zBI6+fa)6*nuF>Av+kd&bd9>eubpOeVr_b)*zB{+D*y|o3r8+AV0V0FQ zB1+6L2qF-13<*=EKOC_tn)JTJfBDC>9za!;Hy>ZBqKGW0s4=C(h)`mD^9ZTNfCi8; zu&?7lxi(ptpKo8ed~SZGJvTkEaC+wKnZ@$uNt&@XGS@xW`Tp@!Q3j-<@+$uAcWy?PJ>A?W$VTIUNI{#e zMqL;D-`)HPvrz?Rc3IBO5pt9mW7O2kRmE6`P*wNw7cOg0^(vc?wEt^o+xyAEmPC4i5I7A}jECI4*kyw=#vteVH46_9Vi7|Mu zs>bH7(Kvm2v8?=y7cW!{F-KGc)&$HTCe#G+v(_T;!QtV-{!zO%cJAV3AEYd6kw}25 z0fAw}4+I1di7`sLJfyawB=aB>AjT*NK*VXo5`BabUsMT=BsD$Rh8Thm#!yvM!~V(4 zsrl>IZ)|UD@9yj{ava&UK|!NNLN?Zt;XzRrWgVmGoeU<%W+$i5_*%r=wI{R18X0N7-sHZo#1 zmW>4k(WofX^V3&uUb=K`X=64Yi{X;|(6^nlN_ka3(fA%l_*^3tsU#_mPZ6Hw; z9rOpxhX4CJKlMR^h{-G(5`#cM)>vzqI1I{IR&`lP@XQ=T0M^d**sw(pc3vIzj~f$t zo>7y@WoR52$HdM8#3pNI$0dHhvR*3$!;Bcc@1JbnyL)?LvNISQ5rMIkIin=- zrVUP12;9ufsj|cuE1OvAaIBSiuULzB7~wf*-3A>^89)4@Z`+G;;F?& zNZWLcY%oNRObDD{;>79gL^xu~YFerg5s0Q65~Kx;v4|uf##&H~B7}?x%p9Uu4Mc#f zY*4fcwLdsGx^excdU*8cF}pmS!)c9=ND(nvn?&uC<(Ch?eH3b}O22S!sXaNv&JjU5 z>@k6=2TIr$MMO!}V*qJ|if@bsaiju)M0wLFk_;fpT$GeGOl@Uvwof`*zb4ool7a#u zF%ol#q8gQ>aa7BYY$RJ5u5Mgg{L#C&mrhT2j}9&2Nw;4o+c|RPET#EGbo3{tH-@h+ zUbyh1k3aU}-z1FFGmyMdq0wr*TzRqnd==0{G$5hb%0Kx0lc|pWzd!$ZRI7-BY>i=L z{+nB$*SKQ#2Q8A%XG z7&VX~w&Ze49Gh+X>1RI*b$PP8SN8i-dr&l4K0Y>4*R@1JNt`C62zj1=@czBA@v-2& z{-7}?y+T5sH#&Lan=gMe9F|Ikq8=U|UAwS&0Tm8@w^g9(!pU1F?( z(B{@;PEcDD3r}8bZ110l&5$)pnCzGj-oM*ua#0?zQH2UXnUmlh5eZSe7nkP;2j!Pv zJn(>#oxFL@BLUQ9J98J8&SbV?XYy87*EOZqcE_Mp^$RqH5}=O37)C(vD}cbnWj(O2 zd3NFa)8%JJhkazyQA;p_3KBB207#5V2u$o6$A^c#ZV#eNOpNEvMo|u}%K_3oUm#tg z5RoXoiPJprMhl=+YsySaHg%sWVMrDUjS>SQym3zxGyA%XQ9xp-hRr4oj!te~y;gd7 zy!?WUlk}z>{YW#0ih^<~VzY|*)2C}+{Q9fk{PNq!4}`54^m*(zG24p)BEGG_<|HX(EAU0$m zK>}p>U;_yxMMAe)-CYxlRmI{^oOyW%-ucY$u=idoANFB)2!0?5ez?=S-?g9hJiiB` zu}(D=sE#w}=_;uzK)-mFHHkcesb@em{sMfI)@h<5fC8YZ5rBvclT8R+WEM!89w`Kg z0T5DPI;l*lYYYgKMZlX}mX~K5t$23zq>B{22ef5f4!w^d0$?M{oa6LJ8e@)*4({K( zd+FSnr4uKMx<~@o_@baH0JH6>ClBwfZ)^Zr1RC^5mG6G<2j87+G(Z07k9{PyO{OPtuSP{~9S{Z|fGMg(M(12P?6+pxd9yXBOU=#P z>QYoG1_R^RItv6Yv&`(J&Res42mL3{)u)g?bL(25BCqdXeN+Y($AY>YK=Vq)|pc$j@5M~QZu1~NK|9F-JFb3d)-cEGHWwt zW6&^D%4Ruh6}7HmdG*wp(-*tl!T!!JF~itKi3mahCK09(K{U~z9zTBa@y~uT-JZUB z{f1#{IS(N*l2Ij&+g3mjF$$=vF$N?dwiskg&H^MAAk+{&rfDpw|77O^s|#EFPvIE zceFQXH79-0x=uV`g{Trd0n@lX3`IPomPJ4uw*{wP3~8$zBOAu_iKH?vA|j)|l|0%JXKZYXAU( z-RZq{-(&&aYMk~L%qm~5W8Ms5X$osM|lo^1L$0At?DZNsuL4R%4K zA1d2!9v1!m{^8=IKwf z7Re|=sOoB1**qshA&Mdxn?(r$WGtejZ8@K#aOK49?V{5!QfN@tZnuN4QYc1|fSsaI z&dB6dZMHY}UOajA_|fCsHC9fn*+#Q2>y&kl(KDOz5&=OZX``4*)d?Asu_;a5sHy?R z31CVPfb=j#Q9@8iiIb?PjQr-RKmaN+s76F2<`_c?9Ys}Q1QN%*`TS|`pvMuPZESgN z36e5KiDgwv2zev7&IAxc_F#AC&h6W8ojtR1YOVBDdN32y$v~WLH=aFyQVoYi9XwK~ z%Tp`MZ(YCEKX~=|oqNbF0J(MReg4O%-h~L6vFWsC!;bAltCaymRS$NLMu#0EXo$3H2m>$^nQVV& zYj0hLRbnEhDGd`WF?DW)^ykEsMih-fV?;zI1{I0Ih5=N>)0^8iu~88q zV&oJriXqfRy|TP=>eRW>pxoT=9F8I~D>Gqw#cA}VWoS5Si3zdS?d=~NzJKdhyFD4| zI_9FiKdCEdx7t7aoxjI_uzaPndpH>M zy)Q+Rz9HU+@@R1QYHM$Ov+DMo%h=f3`>1dx2u}b2AOJ~3K~y1cHS$(I8WtpACtDp~ zKkMx6Iv64JBsK_7%+DAE2sIIqL7R;m1&=S!wdYqJJXx<}2y6@}fnI#;S}-( z5W%LdUlfF>5EE1+c(pETwH7vB9u#F+Nt|dj-@EzlU|4oWBg1xg@9^!*m(HI$7Ge$T z2_#C*Oh}w(IVul&UCW$1D;QI-kC+srNK~mu!`^7vd-wehF1~g7-dFbz_KpCNts~J8 zd{LHl8ZlE{2Y{k+jpo+I`o@bFr&dn|UmKT0T7OUi5DTIu8W--?RfUMgu*AsBND#+5 z52agd3|^ubHf(GZAxh1bm~sowIi#e0Y0v-=@&+y~oqYEA<|UO2JyIAf_?(YIFav+pocpDk6{+S1+H<8@BdC>nxyxs;{aTqe(nU0Ew98 z&GQ%Eee`(!$@6Dun}{}w92_2n7#U5BvM|$r>)h$89wK^UY=|DoC@7(^SyqmUSbAff z&74SrfG6<3GH3|Fuz&mJv=;m z_UM7NMioF5G<9$>02{JC`0k*0=gYgd?|gax{)3ELr_WwMr4U#Y4Y9;D2SIuxrOZvb zY^%td7j+tqfZ2j#8imqDG?k0NI5jceFd%`-FRBIz5nGw!Zk{D~xjH^r=>> zjUph?GIPY+AAdS5s(^&RRZ%xueB=FhOvEp4e|qEQ`|p4FA^-EYzt_x~2FVeXgW;$% z=RRKjo*;0b*M3JZ= zYfOUJ`wt)2(fSbfJ4Xr#On?CFwl|(F&d#izUaft{FtQ~PKms6ic?MAj{k}-Z8hO;H zDlX3x%Ssc@$Y@ph%9pDrPkraR-!o*ty7PqqX_n#mARkkUlY31O1qiM6r5x@Zc00X6 zr*r1)1#~%}C6keIj6oHUfsG3>zPVguj5VPlrX-e%#3VSTt3LvwVM*n4ApjyXON`!o zwpLNBu|dRS&9w{XuU@+P_`%cH+dG)G2(i~6ym)$VZFO<&{F(mn@XV>T-L2O<+dHZW z&t(BIrgk$!01V{FGzHzDTTV|dmHo0Vsxxn0R#1siHTvM$n6ZSZLX0ZEXdKgV6-d&v z$f!y})W8_D8Ud8~m)<)>{6#Y?r290XNJyp(&SFzJ2xF(!$(}XOECfQTWe3`RLg<4^JFho}8Y{^V~J^ zP!>P=(U1DWB65~&6|E-Tdhcy5>MuU~`44{cch6n9!hibSZ#CQP_RQ48%v5u7k{yR2 z8g-)8o|&DTTUcndTa7$dfU2wz5eGVhBZ9Fmh%y0U;nF z3L%K9A;Zie0svT>4~L`k7cR6~?K^jFTa%@?5RHBLNMw>p9Yhq!7zXC2PoF%v_h4c1 z_}ZzpEN_IeX0}Y$*FhCUQI%8yR0&XIJWc_y#B{o)%>fZ{j3JTa#(4G=#~@2+#->hY zL=HiR{o(Z7@kT!R)xG<5Es5VEq277DGda~hdHVRmv19MPd!yB!==FQUUJs+U_*W~_&Izxo={u(i+EH$ML4v#&n?GPADbvcLR){`!kA?|ETC zn+hMDpPUN*|m4x zIXvjxzxU8uCroMmrmB*bIw`P<8Wok;+AK!A{pszE=j*dmGjodz*5;KLGK2`kIhzbX z*`W8qSPR6Wf-1&?A!0WbLH~oYj0oecaPRzzOdFIVp>^9@`55N@F;``cK>Mf z^Pk^-aPR4hXY0dm>5OepPqHz_S~l!`^~U&s$w}%%NQOUEVPnz-6vknian(}Vk&nkG z0*PtKKmx!Bh#JMK1R_F}oTvZpZ$1*3IC1LY(~XTnlOV{U8h!g)AN=m`{hmjOqJk(u zRfrJEvu9WC-Fxuz*T%^b%|Fb=~V971hxDN>S^oQiQ3Q zSxUlD=4NN-V&yxB2Nh}TcF&zzBNgyv<_r=T%O*n+Y_%Hen};u79kR2LSgPLJmoBcJ zJU$%kvmv5!HKK?Z9=o3i5lN$`81(wJ4`Q^>pFcyis))>EF%Gcye$?H2=h_uxpep;; zFkrxOCAeDW2+UwGh;_*G1``93MiCWbU5F8hjWH6G5y==d_QKh>UcK6Qx&BOIuxt|B zHGTV?%aBlIteGev8>6C6Up)Kb&gUnNpE$m};e$%iF#NfE+0|Zgyg7d24g;n+K2BW=VPs0y{f<2F&5X zQ8Qy_d2+73cJ|EGx39J*TQ8qKDtf)#pko6XK@-gd5E+1xOpMy;^j^Q-d-(9_*4F;q z?DFn*r{UVI#w0|oiki}KBtpoKKi?_es=rouFv`vR04=h00!aIsZ;N~e@h9+9M$x~k>GOodVBZ5*Y^auii$`k zZv@f9URTHf85x@$QA98X3I6)!a|;X8`+G-Bj{mFcKVZX1hOI?QoLd$gb^FDjKv5JZ z21S1`7!G?yG4NV}0bq4`7DE`0`YyN58WCtW8jDjiono-vJ0hvu)2$5ENdSyl&L$^v zLWC0QKoc*v4hB`FHivq&wz_ih@|hTWfI+oJ99QK4s%jih-3TE{U6;pK&o9j#d-&+- z!Ql{1+TD(MwrK3Azqc?mbMD+)2t8&HsF8pS#wcK@nKi0nG#U*v>ypO`5Y?bDHmy;} zfJ&^2fs#?8%(#WQ`7>*$Gwb#b4}y{+#N=%@mXM-|B(F275FuJ*>#O?9&ptbQ?!t+a zYrUgR)|hZv6UYK`5LBQj<6Q?JL2=bF4L0i^b?$s}+vWJ)tt+*RD&H9lx~=KSYd5YfOif*W>q0de z9qjIS?=zDjn>2t6KvH&;GoVJ+m_9ljeR2Ei?N_hc6En{rKbo7Ko}Qlxp-@pU@Fx9( zY*R_ef+|M9D%6L)-u7O1doPSih>FB2vELhbt@7y%0aVlw z8^gi-ItCx2v4)sid9&SaLx`R2ojUsCiwhV%qgV!)S=X>kjF#q>P9JuP_3iCo^PG5h zdwX`Ob^7#)svICi9UCH4A*Rzkwe*M(vo)L#I>XQJ+&eldG0|h*d~t~k#?bHfPM=;| zUYswhp=xcNQBYzNeIQ~srYy?nh1eu1o|8TUfXpyPW@%m3d6ot5732p${Ck(qU;Ox! z+nvtP5G4`N2d@B`%QOa!lKRD9Y%0UrhsRHzfBxwgo0~hQPM+x=4xDk##*_k+5|SOK zTt#CHggj1Wu>nW}I*3F60r@?bY^09X72voyDv93*fx?I zfRT*NPMtdW{s*^)!`@)nVJ2%S)`R8aa~Ch4f9t~OykV!N+THGcG3Xj51_FgV&lMnw zFq;@9##jeG7}bxSy!i6Y-B+7?3$w@OXOAIR6;L6F!fEbTKql2OwU?NP3;=;9kh&tL z#pXCsts+RMAb`q9KrlG$AMJEnjpd2f^7F03UM-3i*dPD_X3qZbw|{uz%$d?xs_+Zn z14?M*Sv@R&_LH9v$~urq--{Sy1YpBR7*gXqfT~(0XUy5tCzfU>?%ck+v~-;R$(dW4 zK8UDV`QGk9XXABeeP?*s^=0MqyxD9ZqnCPE^}%VR`D^|#?oo-Do zwx`SJpYLvEObv&mk}=vQb4F;{H4WN{^;fT7Y;1emw9Nh9!27|w*RCLoYQY9YYa|u< zC5{{kjWr5Vm$5xD`QpXv=g)W0n7|0gK*>Z0hHS4teEIB~sb+I}b^@S81|R{25WE6r z&D@e34Mvs;5STc|T0z;F6!Kz3fItXk(F2u*cy+S`G5b$dmxjVPSQqHll#qD z!^}|xa6Fr$wMU2jSFc`eZNC2evpawLfABVZO6}*f}`xbuiXmxO8b)42yDvfJ)%<99>q{Ix3<- z_WJeF{jctyIDT?|VUZXqEw&6t@c>9BMIaaeBu3&Szov9D!Z=-kZ-7^#8pfwMDnM-7 ziF)8SUUi>6+kWtJ)7uFF6eI?O5Wn;NU-|9d{T*ct8q&`nAgXF+7`6W7=bzmE?2Z?T z#F!Z0qJkP#0MS_X(JP=LCfdJS*qme}j);7y3-uvdUrzRjM)2P4SZe^>hOCb&bBo!McM?sv(KNb_xnRdim2d&A9F8$Q%*tfUY|gb-rp8q?FWqfs$Fk3>Z^0x=om zoR8A!4F<#V$+M@AA3uHn-S?(v<}^lT3u*u?fJHULPSu1UhzMzQ1sX-!Fer#hS}I}E zU<5=o2FzSD*8YF_^Z#(LbI@*0-M;-*RYzhH5EUX~4Pkq85?E3nX!@V7?YeS4FIF`D{IutZ(qIjtq+34_>0uFDr0EntuKE5^FR9^{->f=K@-QPg{JTkM3EQ?h$*== zkwjUs8uq{S-g}p?T>C%%&;OPGX!UwsRfEG$XXkb2^-j_0gu#duoim9}>T+jt>n0jN zSd=9)M2N+xD2hTs*;;a3M;|rD;Oo&S6vb4tdGh#bRh7G)L-n=PrE1J_lQpc#f!JBg zTSvX4LGY?#T|GRSYUDR=UJ0Q~491Xx5^36r0tk)0$x$>`zBqa6tp+z9J$+sWihxN* zjtS&Kj3Hvgx!Lw)D<=-XwY5ees)|T-nYGT2dILZ5>?}J5L;(enq{@d7tRcXt7z{(G z!ot$h%^SC3#7?JQmL(Di5-5n00@U7DRSigF93U%bR1m~K5Q)(`HW?b%J?IR2{WEK) zTa%MOCIX2NXDuKjN`@^NPD$LfI3h!k>LSM8QXyg_QUyXV)`dDyMDX%I|M`FT=Hb&I z=+h+~Ra3UXhgNIyw|@9rE;mQ}Th`VDzOFhF3xFz0?PXLKy+(`QyLIc@wYN_kKdzyE z`Ro}XGF!9;K!f*!DyVE67!%bFig<7^eDrAjo39^t4h9Qzi?d7fqhVhl&@ZmMKq9IV z$D_x1SHP-KM8;)Okp4wegs)y47NdMn!$?_?HIX1Xuz1QUaR%P(* zR^#Iz{rKPg+5dRdAA*|*KoK;)X#&kw=&Z?*!%tuzTfX1@^7rH z9uCwFe;_)0w(R=vI>iwGoY9J`DJpglQJdHdwas|X~cIWWuh>c5S#OWFg z05L`c0DPnENF-GhP1F$qMds(vpFjHMk=CJ+HI5xWt`QWN(Gpw3HooyoLW-h9O`aKe zbDAok2C+6%P+!#{){SQC#HqDbvt3nwV{3~jivV6?I$teORh65YTW40+mX?npLtRw> z0gG%0^jTG)kPmQzPX}+iYN#HT9*@Z6e#PsvHkkX zukZJ}<<%?iwI>%XHzlG(PzlNYoQ`~y6!9Hr$3T-qFhN&2?Z^$-a#-|_s-5-C?y&Tb zA(A4YVhHi#rHj|!z2Rd}0Muwm+Kool@BaIL_va5EKDF6Yr5Hg%y3W2au8;x~89>KI zB@#j_YqpxL+*&DXfcWCYWB%UhV+Gepp*88ICnuXGo1U4TXiStvmHc~2IQvpnGbYx~lWkSF>9E}Bag zGKScs9y>-JjH+tbJHK{j`S^T@14Jbji7|u##AvXQH|x3{cKenLBCtWkRAWRkCXBPF zMvXDXteJz!Ox|c^t?l*Ao!z}63Lt3;cQGSTj4?e4oTPOmpfNcsB1BRoLre!dyWPEg zMrt@`jhmR7kqALCjxn(;B18%VK?E6?%vc3MN=XSqK&BWyV)Rjf`TDyb%(UAdee`Kr z2V{x}03;eMXCk`!^5v*sTz&gW-fC9$(B)v6h$RMZED}l7s;&oR-5m`(t#)?x`ju;! z&reOX4t8D}wmwK2tA05a5g{8T111w{4hQwt#$LZ4hP^s74T;g^Rvy64l)Xd%RVDI1m z*}whdlg~JxDOEi{1Qi_nuo1}++eGb?$Z6>YnkH&evBwYYOf@Gm zbvfi2Wpz;pAB;09Dk^NPvlcZW52n?Yv=;A`t|ML<9)qCZaSq3W`J! zQopB=RW=H&am)+>EuIV1_b~L#b{=F>f*(72EA%v3ke-QjwUg&GokY3s6-@V ztSShkA^}Nw9F6IeH%LS#BeEJ{c543q!$;jt->?&fq?u$kOJO}2+k8^ps!czLstS}K ziO6iao$jN@Pk#KjKY8-_#mcec$BwU9YeAIR5oc_3qD&&GFdHYTsXLSzRfG`fjgd(~ zV;v;Kswg_W?y0r2o3FNe{Q;1rachAPv19Y(@uRXT-g)PG?zpOpx-6m}v9$ni@D-{O zeIvJkVbD2fPUI)oR^GmLd2w;!tGl^RQD@!91&Fj8877;w%Ksm&R+N6U{J>Bfzxqb z40@+doV;-9YQq_d;jjMh|M+kI&A+|-^}|3}02UxX9-CMJna}|lRf;u)s$q;Z0I?#i z()QED@woK1$tcSG!iR@RDD08An8;A23MD6y;yA8I0G!^FnA%r%^A zIO7~=1^^YYu0yXs7*&;RH~OJ|y170W4eC0GmbpcfVcs&Fqi~&N&1SRl?A3Os1Y=AU z#bEubAAVpRL@X5|Kp;*qMP;H?&61MZhFM9hooKY$pM7@s^=^kv7T!<;L_moEba!uO zer95AWhul$q%h8sNrk=wM7H4=%y2MLfXwEQT2(|uWW24%6bCmUmTa=9IMJLgi~8mI z*3Q5v zDHv7G8cmUy;f@kCJVD_}l;YW2$X_aEQ?=Ha79E}Kx0F$FGtJP~Fl zCvM%mVKWx+qhXK9lObaARVfnKAW;MeB9)@A{V+-~H9v9Y{OPII#KPRd$rGz{Q*9LA z=^UlDa3u;+gb>J}am+b#t1QCy=E0YD9vsU)p=PsrxV!UmeQz`j-BB4iQ&2PnuQq>M($iHA%c9$$~1+&n*lJeENKgm;=&82H(DQvpM0)s*40f zklJIJSklg3$9dM|#)@7g$i}PPm(RC>QX`m*V}YPdREPNd**CqT&Y9C|&LtxkfWp{# zrjWTD5juyRP=`Ek1n~q34(Ag6MOBP35`CyVsuJ3%nfXC)_~g;!s;(n&iWY*1b6HCJ zLfUr%l8(1sgviMRuabmK24k#|=$}4*^w}q${_N*J9}ddJ*||oeWt~GXB0ywABngmA z`9PEq)Dj_zAR0slA>*7gjk@-RTnu{u?$^Gmjj==q6ug9#gX{PD8!tCjSB^KD&RSLw zRWi;Yq!K4K#sGlC0HQ>IpyjaVtK!1d^Y7fce(B1&o40OUyMB3LVG%?}qkgPwLkUtc zCJiYlaaQ>_DvI@utzNf3-JY6gwn!757Y&c!IVzf{bd*e0F{M}#B>H~9ir&5Py@s9q z>h9M;4H0_UpC;#Oi z{^Ngi_R^J=(`VN%T)c7f+S4b`HeWoq#?_e5R+oMEQYGA zvOJrcUVi#`v)3P}ap}Jzse&qzkoCi&>JKknxi~x12;z}K5}woT!dN!e7K5SGkT)8N zKxD{Llw@)c;*{SIRH@5RQP%9CJ`~ab03ZNKL_t)tm6en2=HwS&-3@F2LDE%^DY=Bl z`9Ou#stcH!O%Ri>Q&l7aVMH#6!)sTsEi9~j^XTdB*7o7v{11|m(A2{Nka%er6HohT!+GP^u~&0LgLKF~d zGDJ+3!%7Tn1)YG|c=7Vf+h4Zw{H=@Um`M>tC8m)M1rpT-(!LmhP$e2;WCVZtAOB)+ z`)H~;Synozv<$vRh#-*=h(c84JfiW6G4*yM;5c6ZL}US2!m*{ffBmoj<@bK`x5Vd9C_2`wy8ZgeL z7)N_%dGBzz{(2j-RwxH`SzSE8)@-2n6-b?Yk-udF| zVWC9)CeaHZY274C3rpYm_O0p3W?2`2!kj89I0+lUQL;w<-S|R?*cfNaU^#rpaWM9{*>Bd+C3dx8HkR*Y` zN8%7_RAJN*eF!zGw%X0hm(HC&vobx^!dUHYzjDT4N^eFXVkQC*LN2O$XLmnFGwel% z+(OpO8=>|@|34=PApuDAj8qpTMRun7;^qF``>&=}&K*^9(CMqSgl0_a0~DcT+(?bt zl&-y+I_Nn=9Q8WyfBRei`9J!jvMRiU1WZ99iSgLtvGu12#J-BC1UVaW$CAkB&9 zuo#xUpjNZCT9;)J>x-vPHnld6vxYHDz2Q+~VqSp0`ubsTlNhD0%FCC|&d)T0);4b zx>qMJiX!AD3$^!kg-DDLV@;5Rogf+sP$Y_iahx@p3efKi?|%7^$Zc(GBa<2<3K5iy zNx7#G;&dzfZ~o+uPn|fq_3Bk!*TAd*L1H?rlH6$sA3V7K&9i5&*+e!z#M__U{_^wB zv#c@MnrKf<<`ZpZ7ttEmj8OnA8y6xO*EH56@j~Xv28YO6uN7s-QkJT8*rc zhq^*Q=bUL+%n_!{z|~c(N~tOdrBnf>lDdjsNHtaENgXu+;B?9w4+-+wx#Nq=Cthv5J~-+CJBb=qOcJdWth2-J z(bVL`pZ<6M{X5s+zWc?U*RNhWW@n7XH{UZdqFVaE)!wpvE&3PJ%*|x5>UdpL_eA||m9^6+pFe&eb!`w4Sb_kOv6%u7%c?sn_YV$x-O<{~vlGpxDiSlN zW+zD<%tS!3!lF|>_-5zsgUy;ujZT3CLE^Zu`IqLfWaWAzRv;np~t!8c=dmj+7 zIoZG_2iDNWVO|B&0_swHjiJ&yU{s2=j3Rgei5j8^h^Y6uqgHN}1Lx8!%blXYYIJ(# zI7u)Vj5DrbeT-9+t;vPeFYiANfYCG#UvHM(&iul}B&IXPi`Jw)|H#Fh{-#E`l_V-<#-LDtCF zkOH7FDiT8tM8*;brj-{F31;&rPMvw{YO^u<(I=nQL4YxVp#g!7Z8UOU6`?M_^Wldl z&!24=nxCHXF&rKoI%|__4v7Sf8mq)XLPQM!5mAtkxQ=n-<@((_pSPNgoA2I~C|P3y z(FI{ZC(6VYkcgTJnSw)dm>N3NlF8?0X16vrH@CNitbhurXapia0+ZEM9V@x{{;j#? z1yxZA=_^b`f&o&}Ai>`?r21h<&j5+4N2n1!PzYLz7Hnj8rg`n=^>gP=kNW-2&TEMp z$KE&)g@A;n5jiV{{`JP55B1vWabtK4!ayZNO-&0yhWmq}TYY|aeZNn`h~Bs`mPkQC z5J?1xFwHYQ`qa}iek4L%T3q;7|LuR>oShsDyTFMrf`}=G4@?@X@{_;&>F& z`sTHZ{14Aup}-pAxB{Z^jMQi~m^u1@h^~=EgEfb$A(iuG^hyv!yvC>+Q0o|K2@xPb z2&%v+7!|bwUus!km0Blv_73Yo@6@T&?M4RmD9@eE3=@OIVJQzDKC65Xo3Z%r;r_XE zYm4*kC_=1E6eSW-n#SLhF^VcN8)8@2etG3gzdQQ;&KF1-AS#f6BrBPUWXAORz3Iu; z+gC1yx{RTs6pqyxV*n*%Oy=^kEPU-vT0Q`X3MgjQxhyM2g{U;LrV>{HjcqjYb~&s* zzw_mAR3fk@JSd{7)K$%Z7~_TW7Zw+1j;}0VzIOTYNwS0NE$f;bQ(k6k!p zKeIrpAV7?xQP<_>@|6o`POn;rM~B<>sLK#d0wTpg#D;8C-FUV6^x4+q$FE}KmE~29 z9-@*61XY0sO<2h9J>1&ZDFTuQGDsFleT~suWJ3gsB5Ih8vE!`*F#upxXUxr;H|7@R zg0BVM7_JqNkR cmK|pfBhGK6>Aj0?|%5+2e;nlKUljel?Gpzeq_*S6*Wq`-9m(_ zEYTX9=h13yB(`y6t6G8>1jZ`X$R?6T5M`{S_9%*iEQ(QB0!LwqCRVYqjpiu&ey7(j zinW#F6AXZnj2cpvveB5?e!aK7cNFp#fx0~Z?)PpTTbQit5gJLtp-3bGV+@dj2%x?( zdr;Ki%tWiv-rCyV+3BLOkHr_T@fdl$~0nQR#e9w3O18Y63755luo zoz4G`sW*GBEW6G-*Rc0Fcft&00?0%H$V4K?npv!36^kM%kxf~)Day2D*^;6qw;t>V zKXp4g!v9A1L%(%&%N@}QOAbr2)oQ9KN}N=4Wo1_7h@2{c#5~>M412G&`e9$te#@5( z0Qa7=hi`q~@7wMdV&-xN1gYCuo;eG3#V!*S8S3Kri(o+d%wtuoUb%Sj@};t>0KtYW zIAm%W1H{4K{`HSOz419wW`@_Vp1*SC9RKFr%O+68QZP7mQbdc=YB!Ovu4+JRwwnPZ zI*~S%d2Ij@#7^jKiG?;K;}e>u5sVpGz-SHxV}zJBo8#kShX)5+`v=!At;|i0^?FB% z#V8h=?a|K2*xHjPgFv1rgm`Xl^7@sfy6(l;_l}vi+$;Zf}4t)1XkA~qxH@xsCQ4Zh zx}#&ASHAS>nT0b&zkln-ClVs4dCpF9UY_KZ#dt~>KM+QoekK! z_wX4aSE8Z6b8c?3)5*p9h-RobbY!VP8rCLvi~yj4MO8(eo}9n=$(<+9p1Hhbsl5xy zXc*x}qr?4ftozrltmL^kuBT-Ca6&?$VWu zl@3%a)fTBlH31WaM39CAktSw1X`javd}YdVrU~EB46Zd&R49e3vh4d-_Toz~zxL`Y zW22+T2fMxQAp!zAXIncPJEN`1{q6nZeOY_3dH>n&Vc@73Lip-C zU;DTJ^Z&HGa^cMR#mg&8fB)0JJL(>zZzzId%G$t?Zwdf_yPNBsMt1#`R{$+aeX>hf z2Jpe({oO|&eQMk`(Zz)`-}{Y!;Ihd7`r5ZDkzRdVLf=Oo^=%VLeZX}cT*Eh7%>wG+ zRNL6aJ|gO{BT>nc^AU3P9vO`g2+h3nh+stM2oMzwkeI2{89(fH57yUPBV*(37RI94 zY;XpmAQH|juHLzG|G3+;tQiM~FI~MdH8m2YhbK_yJa+(UrjCbMVMA0ka*jD8@*<9@ zwYzh4e9%Xx6Y@6_Go;b1%ewnpE9aLN7S7bwF%Rt?3TVkf)yVU*91QwJ?(;0qVhltM z5mhCI8i1V75eb7O3k!QYI|n;E>4xWkql8wg?Y)m7jX{PjORC1+BfBrw*B?K9a{KOs zey?cwJoEXV{po*taBppXX4WJ9(f|H`5HLo2^61gMwa0hX9;OFQL;)$eeh`V6$slvt ztFOK`HFK)j=$NsJg_yEh#NYtTG{sZXC34tRI@}sC8T&0QeRfhZoUA*kh9HJgG)_!U zT)c9AdTL~1yyda#9_?6+4B$9xWLY$Nw*LIl7n`5ofAa3fw;!!{4@-Q!by%1KWbd+n z@jJhJ@r9R;kN2X6hT~7(dv9ZN*Ej=UBM^-VH;IUh-Z2y5ts6J`het2H^kS>oiFHjH z+s(YUv->Ci_n++T_XHiATwY!N=C|Lud*faH!_{y0>p?Ge``FC_W)aCS%d!|_6-s0z zM-|nT3o-&_R)tWj4GGw3<95abpg|lbAwryEV?t7LBp~3D%QCt~106qK-`YFwUcRt6 zmIHbqQf4#^jn?Q9gxETox_MqE8ro=2DQ)K!`AFG>X9>RN^zI z7!g1;LL7R8P8j)?n4MW;q&+ry=d=6w?>!=yDWjPvD7&lyMx8Z0#7NegIdMMIGv7!b2cc0kc&0BE;ZwB|11bynXZL z-~asG58nIW)~C1jcJ|(X_uVHC*F^A#fBn}#`kTM~`Md9av9VPfC}C8M>9pXSm>?!L zkkwUv>EdeW4W2z+AD=qq8#%FOA_GkmcQ6IE1a`;7$ptuZ^P8z6=`WgwO*K_-K#K5@ z5{qcn9~_11cxqZRqy`RTeC^o|aTenH5JPJHfK6E!q)=`nsCe?;;gC~A%o#fsyLIE^Fc_?^u5?C6^2|Z3 z{{F{5{qc`}TGgWDO#0va#yi(uy8Ql6{y+ZjFTUN2$NTZ<2>LlXr~(4zE(nxl) zRhIo`gV`aFD)>{UXFt1h|F}?(aCCU^!i!gCXC^{jI>!j6!;S(nH8pe2110;@klbWK zS>DLA*4n)%2Zvo`pH}viMnYsW)KGVtt!tN8TN#D2ix8MlLCh3XiCnAQky?)ryIGdy zKF7rP2V`bI78OMDJ~N{bMZ`B+BXwoBZ{4k86k?ThsZE=UW{$Tuo-Qq%o1dSn>b}+$ zVU$>V2ViyCJD8iFxp?uynX~hQ-tq3%rYFo?CT2qe1wig|?|ofYW@czKKUjP8_`;=Y2i^YD&F4jwGDbxfL!;q>!6%|2qA~iaENI?^69KeI83+??WMy^MIt^7{rxIwdVtBoPKl!ppeB~?gQ!SqTDL~C)ypfZ zSC;b}_qLz(yN9OA;ED4*YXFiV6MIEY9E91^v)}s8x3fkjQ4uj`y7|$2_tqYpYl@j6 z@NhFqAtFRTkIc^HS>yh_yC1&yA%e}#oVs)K*8lRq{%`#v5PLA28gG98H-2@r-MIPQ zd;HtyUq7r4cjLi69(%#u&>=NB3!yG!P0Yj?b1A7VGU?(VJ=>`W$bvGWh6wgwUw}r| z0K!z1tq`1Zz?Nu}VCp>?H=ge79c^#SO;2??4bPDsqf?2}$g{1z!PCtn?_IB~&di=V zJ2zF9JqEa9hGf2y}0w83}v5vii z-RZH;*mx_%E-{iza~}ah0n2@}ENcnky(cChF;z`^Ig-RED(V0Dtkr0beeq=L!}o6l z(Z~z{F$w~(8}@&74-T$eTz%>FR|owAgupIZ97yPb6;*X)7N_Q>UwHAw)$`{k#>RR_ zz3uHS=bKCnL$)oXrz)C?4O4`GRGTV$b3PKQ^WZWe|KQ1!A_Vh!WGBd~W`v-cLJMXo zuVyKr1?2kOI zY-TFNU{){4T6Rc)g+0Eo|!y3?;IsyxWX_6O6b{}YNORDtLo_a0XdqP7;CYRbChAK zThH55_Z~cpiZ!}N_il|go6E}!b=^e&$2+}up4jsetAY?$;#L~6EMna}q2cGx)2vf+sjfRPDVLQI9b zOq^vMBwSp)*dNGeckZ%pszTyB&@kkVj(C56e|mCk;oSW3;cg72_gvS7#lR3_tg33D zA&gFrU%P%iYh*h+yZz$>5^+dOoOsbLg%%)*T4qs^*uW&IV+aPRoQt9a0B1m8fb55T zI>4$C0fuy~gxNsKe2$3w`}>2cdi?Oo!v||GT)mE_p$>+`L_W(zhIkI%Cb;YL})e|1%*CU1F8xa z5}+?}7Bs4ff|80c5j*zmn2?Y>(~vh0mQDl)z)UKUm|N}6!QsySaqq&}`B9JT!8gf3 z^M)UtIP=M;clWzR%-UAHXzPi;Wfyimvy_OeuDws>ql%d|lN2qkf)e&XJlDftU=Z zj)rN>S%(l*$0uedrsjYC?)&|L0FiM@jR-pzC3<$-+go2ee)z)G%VT35pjcIdcFQ5v zh;@uLXieT#F~nFcEiZoU?RUmU$M4_0+wFEmls%zgw3s|?2xKs9LmK*FQtZ`0!34yJ zhlDuFG1`6BDC_WKZEfS}v%~$pSHJYq$oQlogPDkkC_5kk zWD^x~1ZpZVWzk=YRSq51*_n=PJVn!UWJH;s$$+vEguhq*;}N zsG^4Gy>GTDYeWGtV2LwRW8eGr?_^y6@Gt*rv^~ymkI(f(uQoBpyt0Pzgd1x_7sbTH zdFPlbCk537RXwT*F-k?du)8HJ@fg^wf+5l_8A)L@QoQlSW)F@|FCCDcZT3%kdeECwA`=^f{25+V|-3A1NrOw~+CxoddNR6<%Zh5{xcA?LnP#d>RNi_Mk&y3=eo^G;nw z1O$Xo2QWh!P*LXc{*unbGJ?Z5uod;&yKLNGLTJTfu5yt1^gc$$5D z=bbO@?`~{9d&q{3to7O}ua)KC{=K_*?%ZV&27UkU-}{sQ@TbNN0Y4m8BM~5>bIcTF zdSdi{_`^T=t>69anW?G%(Lq&KAw-pA=gM-QOW9vpTKdP|`-fHU_@nnfD{J6ypIgyP z(UZ%)57Ktc5o$KoN3a+J0XpwP4t*^994a5uqOM|qq-u3tgMo^mLgq8?JSUeE6Mzi? z;Hi575e-wDAOWyzY#kkk-tqj*OuLmeb4Ws*Ds@^TpRYX{Xhy`{GVE-uEzV7yo}H>< zFY{T{a6%k2FiVB(Oax|tMvQd`QDuB=ZhL+I?)`g69tcx+g@LB|E};t%21na3Tv;6* zZ&u|Yq9KFCkQ7#6^gai$qk{vF-Vg-L`&?o$Ln0IvW;QXfK%6&6$M<%+pM3CHFjMA4 z_DyYbfS?As<14EdmzI`_Q24|+ste~WmEjR-sCuF5idJT^tc!)kv#-7R#)WeW+Z$Wm zqwb*JLmnFGg%rI203ZNKL_t(+f<*-MK0{!c#joCSeM4ZZAiI6OF4iSjSu|t3; z(Nwc6bL>RIFgOMvDF*5?h_ZHP?c)#LkCnXqe!*gpSegtgo~8GgD(t z7GffAVCb0-4hQScHqo} zCIbKoC4idNOjcLDW~=$u+ixx|p6hjc-R@!4?`7=MFx<>MXQE~r>7>dR08^?9O&|t` z1gZ{+hCLMMh6kkDA>}?t`vqhzJ-R^12CAZ4+q(<%i{oRHp|)0Q6u<#`c9}?xkkb08 zID^296p&IF9ckDej7X?r%#`K=C%1*+W|dCIh)8I4sGW02HZeW^@@p?-nS1o$_U_Je z6>Bs*$eEb+i$NKJky8U5PQ8Y|J1b(;)2C;C@ArPUHQMP8`WEBt!oudp#%DJ_PF0*C z1ST47H8bYVZr}ds#wXi{gRSE}|Bv7JrxUHQ$=2vZvoq;C4P~myqKTH(` zINxyS1i>0DI=i&e?bXk>cS6=A(^$u;nUS$JddI+`D#M+WQnen43L^o6S^z*%t%9Ci zIlpx7;`=}UaPRQQe1=57sE#v0BZN?*$jdKXV+utzU{YdAAgTl}QI31{x?*)w1L>RT3de|PWTVBfLx>;=F~meI`7m#kdS;)*0(;rb?eiccW>XD znw*$z-DO1 zB39%rou8eB5UQfAOQ}Kx-&A%bn4ymVLMcp{y2%g#GDHjETi^QSuYc!TgQ`%1s7l@~ zFD}G#u)VWgmz85*gh&eG?at(>*(clEy$IrS{x@&`L($q1gjm(xzLYhTYPFPuBF0Ee z?5Lm`I$$}OA397uI|7CihB-S{P+&?hQ!^6{F!YCLQZBq>hs1znM1~SHryS93?d(sE zw=XO&B7!6F&PR(QqmvgeUb=nn;bFJRn0Iz|n;u@gwkjy9ffF$r_~fHhB2JJ{L~!KI zPz9K<(P(de@qBIV5xRz+G(bwiXBaxb}Mlmo1m-!rkG%;=& z(U6FXy4+abeEj(F((=XYFTLv7YaK;R#S*|P{b+!MCnf~elbgU0Ybk0fM3lnsV2X)) zWDLKskfn_S3>2BT4wcWcix1w?;HxE0s}k4tljC>_1^Zz-280r!C8$S$ytbTY_#)aWBcjGA-g;po}Hh1@%qKO z?jtJ=l^Ky z3eqP~;-s@0Fbarwo}D{BJVJ$Ly9K1GO2~3jp{@q(oJn+f%eO{|@=rgxEog#6@;Ecc zsy^-=n-b3l%9dExB$zxUl=|L(8-@;BZ&zr6VNTVMXxH^0`(`RzB~ zn3^2ZI>w@``UN}Z*h2~snK3haCUzlK3K{``yvv)J^RbF|Z{Bi9b7#-C$HpbrF_fyx zY^e@C?U{)QJv`?Vrb@zuBoh-Nj3FdRT8G7wX-NVDNofkB)EOHnkCWs1;@o)exPR~V z{SZyqH=9ipsY3vlTJwfyDhBijufG1u#jBU9x=2zlAchzXZDnO;`{{#EZ`}lLc*J(I z6;-wl_K-N5@^`OY?degsKI~~1EtK8v;Hax*Oe8X51i+BjHinj?HV}ack;x$;5GZH_ zF$QvssTU1R&5(edQ#D3Hg0xz2I<13aqYOPMXTFhhbN%U~!$EIyY-FtEv&2IayC@DWA~_-oH@}P3oE*rrO|?kabKd zG1-s7BAA3ws0e!^qlvNc@$u=0Yis@fK#3hO5t*unI6E`*JHPc?zx~hu>8oFP{nXr4 zXT&Wn&7Yo|P_0(4F0Wi#e)UT)y#4lD^9u`E!|!gb$EwJjN2E@Bq^>H7A@@GdGL0aj zgq%kE+dJD2*B;%ubANYhcVcw>)Tz@|Sz@x;4rjzRbOB+Sof)PSB4R3wAO1ODiCs;| ziC~Hd>FhL&t{|o2j#!tWs#U`H*d(j%?;Z5}QO&?*GAu<&jRU}hIWQBx@#Y&BE?ta6 zd}3m08h}|0&mGG_L4yJISuAvWaZq7`={iK` z*t?!9VS>5sl~c1Puy^FhQYZpc$s&l50U8WJu4)MEP{E?aL`v}N5s-{Mc?XV-NL)Mb z9GArxJG&Ro&CN}<423g5M+ouMsdHxT>BdIwT19VrYGPz*`D|4k5~s+Dg%}cTX}HzU z$y^ZCF`~s_n6+9L&R_2y#kGe|j2###g7eIdBuN;eP;0a4I&Dv^M!{vQT1!+UQcy)` zWUby&FT^^}ymLO8fmD=;B?gIR#OPb<-2B|4DgVunei)2h=8XUu#nd}*W(?Nr9<^He zi!WVMi*+b0)QAz#$RRU12QdahRE>!0Jvs+~N-W8XCP8M;E$(ja{O|{VjqE7Phiye7 zV8&AY{_p$e=aSIJdm?##i1rH8r(%|9;Wy zftkx1s?jVxT;iN(b|>a`L?rh4U{Kxt{PvxjcUsNX#Vc1DoslR}MG$L|=rd=-;tVqg z$*PE!O0F>VYXTSm5qlV-3k1Q`1W|uM%mqdOF{=U9SlT}CIDYnQb5NKP4Wj0GQvggX zVJI1y4Ls2sZ@;;8@q88PbTUb&b7sUk{NzVJ{NmX*x<>BEp+$>zC{+!a_?uVG1Xn9m z=(KG2U~)v100#+*k3;~HGK*>Cp4Ni&Fgj*pRuLpX zLr`FFD8}drn2nph;TnydoxP=n*@>}E)aV@mn38om6P?z`jhnYC&12C!K0dm5excJa zkbq=h#*B#_iok}$o9!=Jw+w)}4b*72W(K|R(T5+Ikn_2sIr4^RDgeM@$4AHK&!2hm zg{u-vl`4_L#DJYk-p0)30MN@XS&F0EXe)MXCSoE()FzY98oT>@=a*K-IwPCwo3nFgLRo|u9CJF# zC-F~Jz>tYm)0cvj5(O61Y$O##f+&E3CKoZMzY&wEIJx`@P>{@K=Py>J+uA)C2pFQz zvh+R?A~TbMNxXXf%IcL%62%bVB$kpn?(ZM`&0qdtZ|BHo?VR*izVX)T#pQc`XKUvKpqS>~M!v2xAK%wnu%#N2dl8HiVA=Q2k`0zw4o)=Qo+X>3di z8l@WIuT8*I(>)1?#W-wChGdjhy&SkRGTtqUji+mqQ{#=Ca<9PVG60}{w|8gl*JTOcEOGO@Z2%;cCgNoHz}9lGYZ z^DA$?{m#*0_wIxHMm|l9h$zpp7zM~-)Z3rlm^(9f<%O#R=<)`85~)Q5K|O;)bO}q5 zDvA++fB;NNQL9x)$EM!=`Y-Qn?cBWaX`|WJA&}8L@zckTc6K%|ES{MhYlU!>Wu~!5 zP%{N40jMMfg9s#LHJF$ly?XiLt8cu%xG+C6Gqb$39O|ljeCW_;xlf&@F7v>2k}U@I zesgo@;oY^npWQycbiOq@f}R|s!~#x$%)^%%A$@d1*hHcjNW>&YCq5hiF~?A=D0wze z#9`VC2?32%^NbJotF85eN6)tl%A=YBc$djZu`DCiRdHeE!ppC|9AZqEE&yQDJa-R1 zzxR_L{Rp_h+-zp?4}SkQFDx(q;IIC??X#70i~OBe7LkCFG9uT7xLru48WcP?Mw+3j z(9k-Noo>3O6B16wvmtwGm=QrnO%7QwHS;bbLKQKvqzESy6=Rye12el6rUOU7NUoK) zo<4ri7;8_AwLHhXksB!j<_+H&o85T6J1B~%etaaqva$>&L?O)r04-gx5&=ie(xU=K z0Ek8sV^xHy)2HWWm+s$tdUVuNazhxCB_BB>yS<%_?dRL`r%z3e#}u z_hfW@bR2_ZoKxbK@4Z(6 z=lzpMYd3G)xUjrDH9hSZn2Z^t)CA(lR3%x+L*3K592p%6RWUN&Sy^2jYt8U|ouKKGf+q^?CHldsBRduOLC%hRXkE?&Omy|1gXDhG(foZOiNN~)4N znL&n&5&&SDR6s(~0GK)U2ZskL)@+U-q{GsQ-91JrtN|nMzjyb&cRwF!Ca#%SV5a7r zOM!_D*#yQWM&Ew>EdvOeU}ZpHdFDQO|DzAz{djC-DpYcIZt~mT`I^t%kN@^>tSB!o zp674Bbk;CtKn!GiLH2@(R(0JPYcxljRZ*gXv}1lc7t+Yl5etZ#A)}fZ31+ZlR0FYt)Djko z2~-UM*(69E>vKyNI*s-E@qBn+WWCc3g57$Kp3q%)$FVfB%yY zK8`^UU~)2l=j*R+uRs5*zx<2Qym4lFmVfP)3xvqZIe0q~*{(!IP(~+5*>TY?P|?N- zr?UvEY>>=Y3TB#SN}_52j(B(iF_kzZAE`)^f<1dcGR3HZ=^#X&0W}&CTQmljwL1^i z9=ALB{Ml1=UFJD@$3|x6W~OKEKmOvNAGI7jd-`Pc^2+3xFN#4L$ekdM(z0(%1nAP8 zWT@2wn`)kqs?gng4~l+`NIIk>m2XY7)HF{#_e2n6}+u7ROc((rf z>#unS7Au3A34x4<<5EbIctm1ERYgNWWOhuXU|?Eyi~0G5vkOc2?yQx?K!7~EAc2v{ z$UA!J+7+LHL5&sx0-yi{M-GY15^fL`gir~ih>$bHSPqV_Tz}z}S6}b-d(YP&sfu&1 z>~$}%u3o&by8gveGelqjIyyRBTYGSP*j>G_JUZ4cddF(D|8Gzwh&Y7I$6#he$V9`6 zK*Si834j<9_#nLyzd#WPIF~hP`oU+L_aE*b58O_-tbjuhG-EX_`+%K3J zT>jdtSEol#iQ;HK#3ZtFQ$mrPa_BQ*hRwd_L)+qYrgS+>p zC&%Yc&sa)3Xbd4Z=hP(q6iC0bo%91R5t3O132EeJr~m-z&I<^jYU(N1S~s5ze)i+f zA8&N``r41NP9lLy%kjB0r!B-#^x1heBf|Zy&C_!;m#<)p5P%)`>Ss^43^;#uR(auOcr~wTX9eWi45Q{0|ua2D=0x~ia zk%-0^&{9n&0w{u}L<=Z%@`?V|;E(?3Kiz(?*R83qPACI%q&PM*@>~D>w}0;s|KRPn z-Z<_aY_31gya$mGy z=9qMHV(##8@O*E-qSo%_({pokGp8qjN@9!>5Y2m^m<4z;2#hMuX9+KkXsVpI+7lzE z@7;Z}xxIxhOSO80WMDB0I12s4rG>@il|`R3qev`J6;RTF6u{84M^@4PaUYQh83|Q1 zvGS1(kqDuVp+D%Jnp-$?X6fF8we6jKpJgduA)!7sIqg)-qQ{OwL#L51uP(Ev7%SB> zjaise01^_I$}}dzN2&{8=K)F7LJW<(Gd4Q;-h1y4`UB(?3aJ(4bZ$fzP~1L=-VC%Kq%xGhcfBOBYvGOyrBFU!YkO0Ve0Y zfQ48CI|Sa}?QT4IRvq`|=H{{{n;I|@#5Cv9P=O|jA+dKzoRm(mn1+wUY?uT?NRaw! zzl=TT4O*Yx+bqnLG`?x@ZgXC{r~m+`7Zdj17d`W7w2DoVrbMHB?YR*`98Xk4*IUdojeQnoYN0ln_zLG-}i|;xH98LNJunONnTz1PEdXXi*6% znGj7(R1#s54cI6H@6l(FIphqp1~y2@p=-2TkDosEPR1ukvdsBxI7!X3&Y8349zA(> zG!T#~&l{I6T|gKR6EZk@6{3+bJTA(~3&b08}EeTbIjdFnDG<`5$TBC#Umc~cGQ zTIUy+TCI_Lx9^4+6^WVaI?PW`pPinWnwpL=JbScuVP)mgm6h(%u4y2OOz6F#0YVa2 zl@Xa4X;>hx3Wz-D4VZnFWu`DPHny|5w|4JQmNlcAcV0|W6e0Kg%FC~ejJ4~!=nr~? z(R&Y&S{Kwby%J<9qQNl`F@U0}X{}P3Rubwg&&Q`GmRHVSzH)hCX}Rc^JKLLP&}_Cc z&g-%OBtW;bv%B{2@yO`dwHIEBb){BP^?qS>K&j2l&|wHirzh#krDcpk!9PFff$sn| zVr@wRDyu3j9|^aLh$3~Yt5i3SXr|?0up`>N{KAFv7Z)Xz>2FGhdvvT|=JNIJ!za&n zx<_SQS%_$cMBWrlB=a5s%2>LV8yO$1LyVy!0-rfZRe7oa3aFtTFq8;`UhnzWzwwoS z_M6|2p@h_>$Mp2kgYMzZ*|`~zy4h@fvA%h@*JYQTTn($bE=6hp@LA@v%!mX;O@ULM zOTi*wD61oYvMhELdf)x-cNQ0BW8L>mBErO?piD+t@3UmBo zI%`ZERqg-$pMUb_|KSHkFQTNc#uR}aD*zKj2^wpWplL<)nagt#t?Sxi02N3Uy{L8I zM~{wfe*Q$L3Fr|S%t+!_zxK|`mDNExFeD|{tLpg+ON&c$gZ`mw9PygM& z{da%*Cx2E%j+n)?Mr&}6%A>tcKmDYUH%40{B+9>W{l$al2L~H_u@p?8Rxk4x7odW} z%|k_CPkyo~O^ha$L_$)77*$nt*xH(meu<<6iIi??Ol%@3W@^JIc2q{r$!E$QGY>9< zoCP!R49>&|2$>P+i)W9{T{=H8)&eQK&kc=`>QEar*4MYos_YhVYP@w}`D~1}NllRa zb3cSH001BWNkleUdY~DaCO}|DL4Ys_1SqTs$s#N%9N{-V*bk1d!x4_K!?tX|!bWBY zkc9xzf@Z4j>aKyBGOKc)^UlLJopbhHYx!Y++4YnU6;+vezweyA*ZTi|zxhrvbM4(5 zbse2KAA=CdQW9b{+unS|RdvhW;AqgaO|R@~vbwIB zSeP9d08=y~RzL~@%J01O-bWwba4tOqGSpn5>h_;JeXMGO;b?7r<;1iNn)J55|L|Prvp_q#UI8 z*fb)9NN$#cgNQ;TV4jB*;0eLOT!K8~LaU_)plK!pw{+qBbDK|}JbnBiAe(8o+vgy4 zUAv{E7b`tlu+6Q;{ z_eQDZUZzek(GUFK5B&X~|M_yJ-=qeK@~UgRclam&_79(I?Is9B3`hVpnoOL_ghV8S z6x;*)%P(KJ^x|`0`}41FKHPe4^?cC~fB)G_oA)<$l(aPmZ?rAuiq$h~I`Z+}IJK=8 z&{^p>mDVvjLQ3lBs_Nioc@bgLN(5?l6d`~xfq5PyA^=TSnHV?(5OxnB6$QaiU=Sz* zm-z+fhTXDvP#-zAaUNKQh8Hb1{^7VbQHGO}X#>HU)%E6XcOZ5$#RuoEM= zN#Ji`bVbC#-OM2ofohwghY%{B`QUGFZtd@RD9xXJjq?G6sh!kM9z48y>D=+P+41Or zSP>`Gh$7hFhB6lMqUtf@QAt12jH#< zsyaf5gc@V*YzqsEm!H45^>llDGz?Mq*H22<`B44g>H!#&uvHn(Hj6aPnbn% zI;HwKxTb^z#E6W9p4u7#iI|khd9d&AzH?(|7`5yZa9h`3{L**-qkr;Gu;5WM0(2lJ zuwJ)(>uX>C4}bK>2|@%i_nGngvl{E zDhg16f(ao)fzl0~j#LE}J?ZzP+oNs;g*aDIRr&4CMeb3=7^fE?gRT^(*UlVmPIkBJ zgnfrfBUp>zsA>GlOXrTSEU?;WSQE_!?s%H+eKn7m)ZCp#+|<=TJvU!%O1#tYaJ#Md zPoG|y?Umdb8vp10fr&>_RXw)YMi^#lk~+`jYR{@ty`l~ZN0 zz+nctgIFN4s;U_iU65n(P0o4gWwb>0Li$uH@@~} zoL~rZh4f19Kmtn!=Ah4@q?t9$M1VQ}1E!uLfuThvV@hTtqB^y^2fMds7UdUy<){9u z|N39N`r6fYa=_MD6K7^-0!uP5?)=s3Z~yy0dSg5a;$@&RP@&0VRPbqD$W>EnT$8pD zNs6iuTudglH?_qk0PJt=9$!1RdTb;2$ot*?XTJS2z&IX{hy)1{wAZQbfB62t{sYh#0lh`PF$Y zsNNphVG9gU;8@xbHjTE?Q`<%Zk1;hd60*C2ITJDwxDhY{m0Y5_aDj$s$S4dPhzpW{ zRFDv0Ng+rPpg;vQDl$(q=gZus*FCJ8d-p#s`eAKtB?NbbXiA8){m%X{-hH_1*6#1` z&-8ev1C%Y5nHMzu1!fHll3_Lh<>I148|$T|6ASaJ@4kC|G>j+`F|%ItH3xu*Bs_g^ zn>4MiE|f(ia`VXfl*6paGVpdB;S?=uw2taMy#-xs3RQ5ur`iG;!3Momp5v)=tI`@7|l_?6+a3)2Z85fxzMMgUz$&PMkQg&`w4f<`M#l zNXE=CNnkOH4vE7;ct9be1*^Sj%2V-_&0s1pIlc>I0BLkI86Lj;(xv&C(kwY7huj3EENBqnN;*e}hpsLX0DzgB zre$PsXxj*gMNz0je`a=YRKM{z-!v!V@Qf@w?UAZ^CzMYgKN*dNuf6uFrb#n7MACx6 zG&xQ`lgxn$UDcCf_DWdR^NFf~V;gm4?bMl*=ih(-!_m>9gaU|7-OU*3&YjyU%PVJ2 zpR5ALc3_r>Jaa{Inh+2ilu+EA0o{}U^Lz{drrP)EEkqD8w#{gGu)co$)la|H>Gf`Y z^pUoW8+5wewv7NVX<}?A=TDspML=ws3DF6e5mTG;3ppP@-4zK!2nd+!hO8S0{ui%b zfA6E6v9d}Po95+j`^4Y*;uj()cw*FkS$0DBt>5^+{@uU(BMAKjqG|?4kgNLMDN8T_ zHBu9VekuKmzwi6M>+aoafB5@<(djH4UpN+`^MCR8eyJ?Ws;Iot{lNj2I2jI~K6uzk zMbEI|rvw6&UNE)_Tm5hNGLA7x}i0%v4KW@mCLrXp1qVgf9=%&Z6zK?inX zMn=wDF(hCiAqrCD9BH@g3^m=_-fTvPYfJMSaBiVjlw3E1UVmX{=ittrC!>f9^VLgN z&rRwf7tX@&DXC@rYo5%4yFV*P;4}Wc8C5eg-E#Kst%o~@hl+?SfUW?UH)DW;P=@kT zue{JJeKb5IR*~sy4Vlf%$&0en)J@woowA!OVJ3uRzNQ+Yhd{&}ExHz`Pd~r8ceuSj z073=God%YWObL)B?C)(~x_IIE$<^U_7rbFfZVm)Fi5Y})x)v$F&LGA#JQ@{Mhl4etP#g+bWxD$kc6u>3Ol<|hsW+F;8o@v+Qkc-u?L2nKLIASNbW| zj_PVLwmI$bO!)1{=(z?3L+V*7iEZEI0t7othf^Al7vyv zkf#rOCg*}nHfAgX6$O`p16oeDuy7zGLS!O$W0HaejD!Tik;u#hnS15V;o;%d6E5+@ z$@PA(0B~VUie`=!qJ`n!btY;@M;FgOcj5B+!^2$!08j29fn~~n zH2`B|5kWvrEt8a0Nl2!OSq$8|B|ouovfrQo@Wc02jfs(1Rf)Ks49DZi3ol;j^*e3b zxFtkJa6kh$LIQ^zF9$aQCqgsLjSsiHVI#~`L~tS&Cf5|}F)_aU=~p|Yy!ZAu+NNbL zSvaPa+;{i(3xO-=&jC7M)RYjM0Js!%_hbZ2Ko%8^0&(C#u}TAf^Mm`FhvrlaCiN?? zy!;P-;pg2GL7b^N@4oT%|Ng)GAHM#^Ta&~tr2+wEIj-Xr@rP>OEjtBqPr~Zr97A+V zD=RBs{mZ|;b^ZRz?E0z2l}ep|^{0P9-J!8Ks`n4~jt=%YYQHGNNYEQf*e|FoYl~zk z#05&1%MvAE(UGcPDM<(~s z{?)IJM-8B$2p}d;jHt=J^u1r|=b#5B@PwF%z$_sk60wN6O@ld@c@gShNSH$(295wg zU^XRWsZQ!?<3%jZYK z-7*A3u&DiBcki%y=k065@xdthi!WSWT9gH|lkJ ztH(|r?2jLBZbm@LyhT8FM+f524vz*0hbNA&&dyYAGeNYRkpM?`MP>=1lP(dooU96L@@Qx002;rxVnk*41Fo4)$PsPd5+X_TycY07bdG zyYu0P*ABP0U;oR$`t9HOy{+9t5B(M}nHc~Qsu?-BIXj4>ka#py@01}RcdCx7AvzYt zqwO84@znB(<=(7B>-J`?3!`&TknvPH?!lbQhOZ}zUaoyByv$48S z0#{fT6bdRkp;J~LUCK)qR zQG^Pez{nlV%siH*v~2I)zP@^FVZK)Ycn~yI^R{X5{SR*pqiqdqOT#M{PdDwDSTjG< z!NJkoIdERQKkJD)7vi2sK-EJT&OiU+-qzu}*RB~>xiJi23I+&9sIeU!9$vY8VPU>Z zaqL#RJ93^Ln!8h=KwMA8b=~l@b&{z9A`44dIABUi9Z3YC?Dgm0d;dcW9W(RX+hAl8 zHxt6qaP;``gI8XDd1kh%+d)b-QevKBz&!s$m?u@*(4h{r_Xo`pr?%q7PvAVIoTsMc{Q39GJ<|$gsJsW-U)%#n-(Ue2WNCe*^9D)($ z<55yeh!NS7)k_OYaa>=!ejTWw5DXa127}4MT=(qhH3U!Aph2t~t5Iuy_sx%Py#Ms* zAbou8{=vS#^Y+cZ`TG0UZf@?5ZO~fn9?1(Swzi(W`OUYkU%ReYrBF4FMripV;s5{y zNRT0Z(UXP{n9#xdz210qG#U+7kF8X*3m<-bt7pZjmE-Gki@}_K_3!@ucr+Sr?F@Hz zclS1T4tC5VcPN3?P3?jS?dWK5;^fJhs#juBQCUjWEBXN?P*qB&;3@+)go9-NC4|6% zQGyhhMGr_0AX10~$hmgnY%eT02!=w6in|QLF8TT5W`>qLNvGU7+IjNe_N6PAJDp%Q zX2wuSuRlK;*N?Zh8>~kAo5vOw=jM7$5daKLP_pIHb3O-*a(k1|$uUC=cvLSQM1!O=({lvSBxbR`5f zbq*{NRNJ;q<~}#SeEQsl4?eiIyS>K}43H4bO*mwrE;;o&)u%u8%G_*kaI`06!iEk2 z%EXofWe)lGkH8K&s;5&^A_{`?qI%b89Q>nA-Yqe7LhOwDi{7cWyr%-P>-i-FouD?Z@xkcyw=Tuyqs<8yrNh zogGCT-NAv00*WZIBAJ3e(^m#$1}K5WtrPh2mFJh2mv*B4>{MV; zaz`)(mLima0#m4pj<96$P9C@9J~g2r33G;N5du->$%6wy?m7t)5ra{u>=n{s5(Xx~ z6g8$~WXW192`j#P_eM3>Ute1+LjnR2N1(OUV-L3Wp6=DwPRdYRym(5aksu@#W6Od? z*->-iY`IbvP>skrHKE7?;AA2g?%mtm-WeftqABzxpC<_*neJ{rIDh)&{6e>F1}vG$ zsYn^jVG=}2(Iy@3AC{p+L`%*jI*s+CgT@r42>scml{06m(0k{bZzpr$0uX)rsbg1< zrpFfNUVia~Zm)2PrW3?Avo(o{@*9I(RUL`4kj51~qoWz~E&|XI%4+8H>2n{xf9+s* z--!(g2-TA|ZNEGF-Cz3dV;ifclgVf=!*CS+@( zOannDFhsLBSy-s9Tz>JvorhbS+bA6_s|2APH8-!_>=e8@-|KZ|#pTh%$?M;^dGo<= zNDI3)O~Py|b2W9N^jj_`&JjT!&A}W@B!^N`1}_pnBdH*{2c+@fVEx$2Kl^9@`H%n9 zkA3kwKHmv=^W&T9E+WJtWwpD%|9Er9kdJj{FRz~>Gcf0W`0AJUpFY`o`tb4Q!=w60 z3v=+c9isy>6(L-_cwu2-5u5^7EE2e27U8lest_t-K|m4-AuutaumnUQ3d}`jTs$Mj z(Pwm|`Ytnqg9it;eD(gYode)5ovA`pK%pF*Za_NG#Bw zJ$CQ@W;-4YCe0^aesO8G)3g(ZBoYwO3|N9NJ2*3`YrZ7q<4`_$#739a*B9oGee}V{ z!|@oXa5o~+q`CTxB;&)qrTO_6u3k-Er_>N?hTl)`3=T-pExVKPC?yq=7#l*KUORFw z10{%1C`{wx{Nl#?#^%=c-u?iQ08usNFjFDr;okP}VE_Dub2GD@dOQSBo~A3DFdxBz zMY0;sEV&uF5^@M3^ZyCO9aB;X#ia{ZA3faM+}UyvA~H>o6r2|3XV0HM3)&8k_JRa} zY)Ak%qijoc1TbV|L?Y0(%~`!Xy_*vGk%SA+eSKAT%di4OFUsQL#ph;bx)1K&Y9_Um zU16TI@yXN8sM$R234Dup3ljJnMLO`~UBY0JYCK+P0#Dg>A?2!&EAaIj>W%s?H?*&@^}w8jam;=#`L z!t&g67tc2Jm@pOvH}zoS_}R9l+jk#~Gz5&tS7tc?1!WO~%(EA8$7xL_L5^2v@Kq+e zxf|N4GndAP?X~M4gH#CQ)3B-ok|D8~weixW3#-SEwaqxiAv0xwzA&jr11pP?h!6J< z0|h1lbayaSHIt$!%E~-7u~m=4{QUFh50A$0yz`-iA_wvifsvD^SWhV#<*P&Gwp{WOhKbm{L&`j~{K{_~;gp z7>S!zoo=t&9gjyP%i!R^%+8)Y)$bMVwWS6;5)pusFiWuf-<&QH908LmIss%v3?m}4 zFtSB!o4B>Tv%j~Gh+LHD5VhUed^#Eo|IX(=Q5{?db zwT+!l&&}MGFyPdKmdC}3iI_1zrt=lT&6>%mEQ<5boq71+@%ED)LZqVWX8XhO;_`ZT zcK*Ga5BElGr$2Y)r5Atv@BR2s{LD{%@w>kGg)e^L$)m@2ZhjQXGC8?g=AQ!kl--Sl zh)lwO3^W-YzWnk_|NOuFm(^TvQXe=vk_&<$zWw@}cW&G+imGj5a;w|AowQ_lc7Emj z(ptenj(oM6-5l;5#!;%Efpjz(9a~=U*p3d5f)uM8Yb&cu1{uEv#9WqD9_m;wXfp$% zgXOs~OK>oEm=fv>nz~B>kSL{O84v_6#Ch*1oCQhD$l#b_0yTG4Otm!;V}w-OB$1ah zz3sgx6si|4J>O1_5Ihu)ZZqAg(cKr>GcmS?Y_6apFz zMy6SvVr?6?rrKut4&p^e_G6e{|yPDJmVzTVC4mwDc_MZM zo|3CoG4ta90m%&VZVm_u@>#Z{N>3l}?QI>^F)1?SOcCWt2)TPV0BbBu?)6JVL&{nS zm+!^s3kOrvY)~W;A|z%hBrt{mBt^BbvUKv=N4F1#H6cYyF~+hiwM`Nj z&G)vq&YV8JygaY%7@=XBPJMuoh$wT{+;g&$S@K)g%!LJV%+1oI)=qEc`SVxbfA`wa zU_clEvTD=Yran5{`P^r}9ldoQ7ZQjdrG(6c?3n=TgaA?qb8z)cMWe|W001BWNklSnaEdYszkFaGLpA_(LkggHHPSOGc$k)fan@~`~zFMZ*AzH~S|AWE?v zrg~Hao9)hi?a%+>kN)kSgfMHG=K8≺guyaEHgXRL)-7IJLkXG+-nea61vLSsTzc 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 S8dVSg0000 + +#include +#include + +using namespace std; +using namespace cv; +using namespace dnn_superres; + +int main(int argc, char *argv[]) +{ + // Check for valid command line arguments, print usage + // if insufficient arguments were given. + if (argc < 4) { + cout << "usage: Arg 1: image path | Path to image" << endl; + cout << "\t Arg 2: algorithm 1 | edsr, espcn, fsrcnn or lapsrn" << endl; + cout << "\t Arg 3: path to model file 1 \n"; + cout << "\t Arg 4: scale | 2, 3 ,4 or 8 \n"; + return -1; + } + + string path = string(argv[1]); + string algorithm = string(argv[2]); + string model = string(argv[3]); + int scale = atoi(argv[4]); + + Mat img = cv::imread(path); + if (img.empty()) + { + std::cerr << "Couldn't load image: " << img << "\n"; + return -2; + } + + std::cout << "Image loaded." << std::endl; + + //Crop the image so the images will be aligned + int width = img.cols - (img.cols % scale); + int height = img.rows - (img.rows % scale); + Mat cropped = img(Rect(0, 0, width, height)); + + //Downscale the image for benchmarking + Mat img_downscaled; + cv::resize(cropped, img_downscaled, cv::Size(), 1.0/scale, 1.0/scale); + + //Make dnn super resolution instance + DnnSuperResImpl sr; + + Mat img_new; + + //Read and set the dnn model + sr.readModel(model); + sr.setModel(algorithm, scale); + sr.upsample(img_downscaled, img_new); + + //Perform and display benchmarking + std::vector psnrs, ssims, perfs; + + DnnSuperResQuality::setFontColor(cv::Scalar(255,0,0)); + DnnSuperResQuality::setFontScale(1.0); + DnnSuperResQuality::setFontFace(cv::FONT_HERSHEY_COMPLEX_SMALL); + DnnSuperResQuality::benchmark(sr, cropped, psnrs, ssims, perfs, 1, 1); + + return 0; +} \ No newline at end of file diff --git a/modules/dnn_superres/samples/dnn_superres_benchmark_individual.cpp b/modules/dnn_superres/samples/dnn_superres_benchmark_individual.cpp new file mode 100644 index 00000000000..c62462f84c2 --- /dev/null +++ b/modules/dnn_superres/samples/dnn_superres_benchmark_individual.cpp @@ -0,0 +1,101 @@ +// This file is part of OpenCV project. +// It is subject to the license terms in the LICENSE file found in the top-level directory +// of this distribution and at http://opencv.org/license.html. + +#include + +#include +#include + +using namespace std; +using namespace cv; +using namespace dnn_superres; + +int main(int argc, char *argv[]) +{ + // Check for valid command line arguments, print usage + // if insufficient arguments were given. + if (argc < 4) { + cout << "usage: Arg 1: image path | Path to image" << endl; + cout << "\t Arg 2: algorithm | edsr, espcn, fsrcnn or lapsrn" << endl; + cout << "\t Arg 3: path to model file 2 \n"; + cout << "\t Arg 4: scale | 2, 3, 4 or 8 \n"; + return -1; + } + + string path = string(argv[1]); + string algorithm = string(argv[2]); + string model = string(argv[3]); + int scale = atoi(argv[4]); + + Mat img = cv::imread(path); + if (img.empty()) + { + std::cerr << "Couldn't load image: " << img << "\n"; + return -2; + } + + std::cout << "Image loaded." << std::endl; + + //Crop the image so the images will be aligned + int width = img.cols - (img.cols % scale); + int height = img.rows - (img.rows % scale); + Mat cropped = img(Rect(0, 0, width, height)); + + //Downscale the image for benchmarking + Mat img_downscaled; + cv::resize(cropped, img_downscaled, cv::Size(), 1.0/scale, 1.0/scale); + + //Make dnn super resolution instance + DnnSuperResImpl sr; + + std::vector allImages; + Mat img_new; + + //Read and set the dnn model + sr.readModel(model); + sr.setModel(algorithm, scale); + sr.upsample(img_downscaled, img_new); + + double ps = DnnSuperResQuality::psnr(img_new, cropped); + double ssim = DnnSuperResQuality::ssim(img_new, cropped); + + if ( img_new.empty() ) + { + std::cerr << "Upsampling failed. \n"; + return -3; + } + cout << "Upsampling succeeded. \n"; + + std::cout << algorithm << " | PSNR: " << ps << " SSIM: " << ssim << std::endl; + + Mat bicubic; + cv::resize(img_downscaled, bicubic, cv::Size(), scale, scale, cv::INTER_CUBIC ); + double ps_bicubic = DnnSuperResQuality::psnr(bicubic, cropped); + double ssim_bicubic = DnnSuperResQuality::ssim(bicubic, cropped); + std::cout << "Bicubic" << " | PSNR: " << ps_bicubic << " SSIM: " << ssim_bicubic << std::endl; + + Mat nearest; + cv::resize(img_downscaled, nearest, cv::Size(), scale, scale, cv::INTER_NEAREST ); + double ps_nearest = DnnSuperResQuality::psnr(nearest, cropped); + double ssim_nearest = DnnSuperResQuality::ssim(nearest, cropped); + std::cout << "Nearest neighbor" << " | PSNR: " << ps_nearest << " SSIM: " << ssim_nearest << std::endl; + + Mat lanczos; + cv::resize(img_downscaled, lanczos, cv::Size(), scale, scale, cv::INTER_LANCZOS4 ); + double ps_lanczos = DnnSuperResQuality::psnr(lanczos, cropped); + double ssim_lanczos = DnnSuperResQuality::ssim(lanczos, cropped); + std::cout << "Lanczos" << " | PSNR: " << ps_lanczos << " SSIM: " << ssim_lanczos << std::endl; + + allImages.push_back(img_new); + allImages.push_back(bicubic); + allImages.push_back(nearest); + allImages.push_back(lanczos); + + std::vector titles{algorithm, "bicubic", "nearest", "lanczos"}; + DnnSuperResQuality::showBenchmark(cropped, allImages, "Image", cv::Size(bicubic.cols, bicubic.rows), titles); + + cv::waitKey(0); + + return 0; +} \ No newline at end of file diff --git a/modules/dnn_superres/samples/dnn_superres_multioutput.cpp b/modules/dnn_superres/samples/dnn_superres_multioutput.cpp new file mode 100644 index 00000000000..69f8ed615e3 --- /dev/null +++ b/modules/dnn_superres/samples/dnn_superres_multioutput.cpp @@ -0,0 +1,73 @@ +// This file is part of OpenCV project. +// It is subject to the license terms in the LICENSE file found in the top-level directory +// of this distribution and at http://opencv.org/license.html. + +#include +#include +#include + +using namespace std; +using namespace cv; +using namespace dnn_superres; + +int main(int argc, char *argv[]) +{ + // Check for valid command line arguments, print usage + // if insufficient arguments were given. + if (argc < 4) { + cout << "usage: Arg 1: image | Path to image" << endl; + cout << "\t Arg 2: scales in a format of 2,4,8\n"; + cout << "\t Arg 3: output node names in a format of nchw_output_0,nchw_output_1\n"; + cout << "\t Arg 4: path to model file \n"; + return -1; + } + + string img_path = string(argv[1]); + string scales_str = string(argv[2]); + string output_names_str = string(argv[3]); + std::string path = string(argv[4]); + + //Parse the scaling factors + std::stringstream ss(scales_str); + std::vector scales; + std::string token; + char delim = ','; + while (std::getline(ss, token, delim)) { + scales.push_back(atoi(token.c_str())); + } + + //Parse the output node names + ss = std::stringstream(output_names_str); + std::vector node_names; + while (std::getline(ss, token, delim)) { + node_names.push_back(token); + } + + // Load the image + Mat img = cv::imread(img_path); + Mat original_img(img); + if (img.empty()) + { + std::cerr << "Couldn't load image: " << img << "\n"; + return -2; + } + + //Make dnn super resolution instance + DnnSuperResImpl sr; + int scale = *max_element(scales.begin(), scales.end()); + std::vector outputs; + sr.readModel(path); + sr.setModel("lapsrn", scale); + + sr.upsampleMultioutput(img, outputs, scales, node_names); + + for(unsigned int i = 0; i < outputs.size(); i++) + { + cv::namedWindow("Upsampled image", WINDOW_AUTOSIZE); + cv::imshow("Upsampled image", outputs[i]); + //cv::imwrite("./saved.jpg", img_new); + cv::waitKey(0); + } + + return 0; +} \ No newline at end of file diff --git a/modules/dnn_superres/samples/dnn_superres_video.cpp b/modules/dnn_superres/samples/dnn_superres_video.cpp new file mode 100644 index 00000000000..aeda8820730 --- /dev/null +++ b/modules/dnn_superres/samples/dnn_superres_video.cpp @@ -0,0 +1,69 @@ +// This file is part of OpenCV project. +// It is subject to the license terms in the LICENSE file found in the top-level directory +// of this distribution and at http://opencv.org/license.html. + +#include + +#include + +using namespace std; +using namespace cv; +using namespace dnn_superres; + +int main(int argc, char *argv[]) +{ + // Check for valid command line arguments, print usage + // if insufficient arguments were given. + if (argc < 4) { + cout << "usage: Arg 1: input video path" << endl; + cout << "\t Arg 2: output video path" << endl; + cout << "\t Arg 3: algorithm | edsr, espcn, fsrcnn or lapsrn" << endl; + cout << "\t Arg 4: scale | 2, 3, 4 or 8 \n"; + cout << "\t Arg 5: path to model file \n"; + return -1; + } + + string input_path = string(argv[1]); + string output_path = string(argv[2]); + string algorithm = string(argv[3]); + int scale = atoi(argv[4]); + string path = string(argv[5]); + + //Make dnn super resolution instance + DnnSuperResImpl sr; + + //Set model, algorithm, scale, and do the upsampling + sr.readModel(path); + sr.setModel(algorithm, scale); + sr.upsampleVideo(input_path, output_path); + + cout << "Upsampling succeeded. \n"; + + //Show the result + VideoCapture video(output_path); + + if (!video.isOpened()) + { + std::cout << "Could not open the video." << std::endl; + return -1; + } + + Mat frame; + for(;;) + { + video >> frame; + + if ( frame.empty() ) + break; + + char c=(char)waitKey(25); + if(c==27) + break; + + imshow( "Frame", frame ); + } + + video.release(); + + return 0; +} \ No newline at end of file diff --git a/modules/dnn_superres/src/dnn_superres.cpp b/modules/dnn_superres/src/dnn_superres.cpp new file mode 100644 index 00000000000..3cdab976e45 --- /dev/null +++ b/modules/dnn_superres/src/dnn_superres.cpp @@ -0,0 +1,385 @@ +// This file is part of OpenCV project. +// It is subject to the license terms in the LICENSE file found in the top-level directory +// of this distribution and at http://opencv.org/license.html. + +#include "precomp.hpp" + +#include "opencv2/dnn_superres.hpp" + +namespace cv +{ + namespace dnn_superres + { + + int DnnSuperResImpl::layer_loaded = 0; + + DnnSuperResImpl::DnnSuperResImpl() + { + if( !this->layer_loaded ) + { + layer_loaded = true; + registerLayers(); + } + } + + DnnSuperResImpl::DnnSuperResImpl(std::string algo, int scale) : alg(algo), sc(scale) + { + if( !this->layer_loaded ) + { + layer_loaded = true; + registerLayers(); + } + } + + void DnnSuperResImpl::registerLayers() + { + //Register custom layer that implements pixel shuffling + std::string name = "DepthToSpace"; + dnn::LayerParams layerParams = dnn::LayerParams(); + cv::dnn::LayerFactory::registerLayer("DepthToSpace", DepthToSpace::create); + } + + void DnnSuperResImpl::readModel(std::string path) + { + if ( path.size() ) + { + this->net = dnn::readNetFromTensorflow(path); + std::cout << "Successfully loaded model. \n"; + } + else + { + std::cout << "Could not load model. \n"; + } + } + + void DnnSuperResImpl::readModel(std::string weights, std::string definition) + { + if ( weights.size() && definition.size() ) + { + this->net = dnn::readNetFromTensorflow(weights, definition); + std::cout << "Successfully loaded model. \n"; + } + else + { + std::cout << "Could not load model. \n"; + } + } + + void DnnSuperResImpl::setModel(std::string algo, int scale) + { + this->sc = scale; + this->alg = algo; + } + + void DnnSuperResImpl::upsample(Mat img, Mat &img_new) + { + if( !net.empty() ) + { + if ( this->alg == "espcn" || this->alg == "lapsrn" || this->alg == "fsrcnn" ) + { + //Preprocess the image: convert to YCrCb float image and normalize + Mat preproc_img; + preprocess_YCrCb(img, preproc_img); + + //Split the image: only the Y channel is used for inference + Mat ycbcr_channels[3]; + split(preproc_img, ycbcr_channels); + + Mat Y = ycbcr_channels[0]; + + //Create blob from image so it has size 1,1,Width,Height + cv::Mat blob; + dnn::blobFromImage(Y, blob, 1.0); + + //Get the HR output + this->net.setInput(blob); + + Mat blob_output = this->net.forward(); + + //Convert from blob + std::vector model_outs; + dnn::imagesFromBlob(blob_output, model_outs); + Mat out_img = model_outs[0]; + + //Reconstruct: upscale the Cr and Cb space and merge the three layer + reconstruct_YCrCb(out_img, preproc_img, img_new, this->sc); + } + else if( this->alg == "edsr" ) + { + //BGR mean of the Div2K dataset + Scalar mean = Scalar(103.1545782, 111.561547, 114.35629928); + + //Convert to float + Mat float_img; + img.convertTo(float_img, CV_32F, 1.0); + + //Create blob from image so it has size [1,3,Width,Height] and subtract dataset mean + cv::Mat blob; + dnn::blobFromImage(float_img, blob, 1.0, Size(), mean); + + //Get the HR output + this->net.setInput(blob); + Mat blob_output = this->net.forward(); + + //Convert from blob + std::vector model_outs; + dnn::imagesFromBlob(blob_output, model_outs); + img_new = model_outs[0]; + + //Post-process: add mean. + img_new = img_new + Scalar(103.1545782, 111.561547, 114.35629928); + + img_new.convertTo(img_new, CV_8U); + } + else + { + // + } + } + else + { + std::cout << "Model not specified. Please set model via setModel(). \n"; + } + } + + void DnnSuperResImpl::upsampleMultioutput(Mat img, std::vector &imgs_new, std::vector scale_factors, std::vector node_names) + { + CV_Assert(scale_factors.size() == node_names.size()); + CV_Assert(!scale_factors.empty()); + CV_Assert(!node_names.empty()); + + if ( this->alg != "lapsrn" ) + { + std::cout << "Only LapSRN support multiscale upsampling for now!" << std::endl; + return; + } + + if( !net.empty() ) + { + if ( this->alg == "lapsrn" ) + { + Mat orig = img; + + //Preprocess the image: convert to YCrCb float image and normalize + Mat preproc_img; + preprocess_YCrCb(orig, preproc_img); + + //Split the image: only the Y channel is used for inference + Mat ycbcr_channels[3]; + split(preproc_img, ycbcr_channels); + + Mat Y = ycbcr_channels[0]; + + //Create blob from image so it has size 1,1,Width,Height + cv::Mat blob; + dnn::blobFromImage(Y, blob, 1.0); + + //Get the HR outputs + std::vector outputs_blobs; + this->net.setInput(blob); + this->net.forward(outputs_blobs, node_names); + + for(unsigned int i = 0; i < scale_factors.size(); i++) + { + std::vector model_outs; + dnn::imagesFromBlob(outputs_blobs[i], model_outs); + Mat out_img = model_outs[0]; + Mat reconstructed; + + reconstruct_YCrCb(out_img, preproc_img, reconstructed, scale_factors[i]); + + imgs_new.push_back(reconstructed); + } + } + } + else + { + std::cout << "Model not specified. Please set model via setModel(). \n"; + } + } + + + void DnnSuperResImpl::upsampleVideo(String inputPath, String outputPath) + { + VideoCapture inputVideo(inputPath); + int ex = static_cast(inputVideo.get(CAP_PROP_FOURCC)); + Size S = Size((int) inputVideo.get(CAP_PROP_FRAME_WIDTH) * this->sc, + (int) inputVideo.get(CAP_PROP_FRAME_HEIGHT) * this->sc); + + VideoWriter outputVideo; + outputVideo.open(outputPath, ex, inputVideo.get(CAP_PROP_FPS), S, true); + + if (!inputVideo.isOpened()) + { + std::cout << "Could not open the video." << std::endl; + return; + } + + for(;;) + { + Mat frame, outputFrame; + inputVideo >> frame; + + if ( frame.empty() ) + break; + + upsample(frame, outputFrame); + outputVideo << outputFrame; + } + + inputVideo.release(); + outputVideo.release(); + } + + int DnnSuperResImpl::getScale() + { + return this->sc; + } + + std::string DnnSuperResImpl::getAlgorithm() + { + return this->alg; + } + + void DnnSuperResImpl::preprocess_YCrCb(const Mat inpImg, Mat &outImg) + { + if ( inpImg.type() == CV_8UC1 ) + { + Mat ycrcb; + inpImg.convertTo(outImg, CV_32F, 1.0 / 255.0); + } + else if ( inpImg.type() == CV_32FC1 ) + { + Mat ycrcb; + inpImg.convertTo(outImg, CV_32F, 1.0 / 255.0); + } + else if ( inpImg.type() == CV_32FC3 ) + { + Mat img_float; + inpImg.convertTo(img_float, CV_32F, 1.0 / 255.0); + cvtColor(img_float, outImg, COLOR_BGR2YCrCb); + } + else if ( inpImg.type() == CV_8UC3 ) + { + Mat ycrcb; + cvtColor(inpImg, ycrcb, COLOR_BGR2YCrCb); + ycrcb.convertTo(outImg, CV_32F, 1.0 / 255.0); + } + else + { + std::cout << "Not supported image type!" << std::endl; + } + } + + void DnnSuperResImpl::reconstruct_YCrCb(const Mat inpImg, const Mat origImg, Mat &outImg, int scale) + { + if ( origImg.type() == CV_32FC3 ) + { + Mat orig_channels[3]; + split(origImg, orig_channels); + + Mat Cr, Cb; + cv::resize(orig_channels[1], Cr, cv::Size(), scale, scale); + cv::resize(orig_channels[2], Cb, cv::Size(), scale, scale); + + std::vector channels; + channels.push_back(inpImg); + channels.push_back(Cr); + channels.push_back(Cb); + + Mat merged_img; + merge(channels, merged_img); + + Mat merged_8u_img; + merged_img.convertTo(merged_8u_img, CV_8U, 255.0); + + cvtColor(merged_8u_img, outImg, COLOR_YCrCb2BGR); + } + else if ( origImg.type() == CV_32FC1 ) + { + inpImg.convertTo(outImg, CV_8U, 255.0); + } + else + { + std::cout << "Not supported image type!" << std::endl; + } + } + + DnnSuperResImpl::DepthToSpace::DepthToSpace(const cv::dnn::LayerParams ¶ms) : Layer(params) + { + + } + + cv::Ptr DnnSuperResImpl::DepthToSpace::create(cv::dnn::LayerParams ¶ms) + { + return cv::Ptr(new DepthToSpace(params)); + } + + bool DnnSuperResImpl::DepthToSpace::getMemoryShapes(const std::vector > &inputs, + const int, + std::vector > &outputs, + std::vector > &) const + { + std::vector outShape(4); + + int scale; + if( inputs[0][1] == 4 || inputs[0][1] == 9 || inputs[0][1] == 16 ) //Only one image channel + { + scale = static_cast(sqrt(inputs[0][1])); + } + else // Three image channels + { + scale = static_cast(sqrt(inputs[0][1]/3)); + } + + outShape[0] = inputs[0][0]; + outShape[1] = static_cast(inputs[0][1] / pow(scale,2)); + outShape[2] = static_cast(scale * inputs[0][2]); + outShape[3] = static_cast(scale * inputs[0][3]); + + outputs.assign(4, outShape); + + return false; + } + + void DnnSuperResImpl::DepthToSpace::forward(cv::InputArrayOfArrays inputs_arr, + cv::OutputArrayOfArrays outputs_arr, + cv::OutputArrayOfArrays) + { + std::vector inputs, outputs; + inputs_arr.getMatVector(inputs); + outputs_arr.getMatVector(outputs); + cv::Mat &inp = inputs[0]; + cv::Mat &out = outputs[0]; + const float *inpData = (float *) inp.data; + float *outData = (float *) out.data; + + const int inpHeight = inp.size[2]; + const int inpWidth = inp.size[3]; + + const int numChannels = out.size[1]; + const int outHeight = out.size[2]; + const int outWidth = out.size[3]; + + int scale = int(outHeight / inpHeight); + int count = 0; + + for (int ch = 0; ch < numChannels; ch++) + { + for (int y = 0; y < outHeight; y++) + { + for (int x = 0; x < outWidth; x++) + { + int x_coord = static_cast(floor((y / scale))); + int y_coord = static_cast(floor((x / scale))); + int c_coord = numChannels * scale * (y % scale) + numChannels * (x % scale) + ch; + + int index = (((c_coord * inpHeight) + x_coord) * inpWidth) + y_coord; + + outData[count++] = inpData[index]; + } + } + } + } + } +} diff --git a/modules/dnn_superres/src/dnn_superres_quality.cpp b/modules/dnn_superres/src/dnn_superres_quality.cpp new file mode 100644 index 00000000000..50698e27ceb --- /dev/null +++ b/modules/dnn_superres/src/dnn_superres_quality.cpp @@ -0,0 +1,401 @@ +// This file is part of OpenCV project. +// It is subject to the license terms in the LICENSE file found in the top-level directory +// of this distribution and at http://opencv.org/license.html. + +#include "precomp.hpp" + +#include "opencv2/dnn_superres_quality.hpp" + +namespace cv +{ + namespace dnn_superres + { + + int DnnSuperResQuality::fontFace = cv::FONT_HERSHEY_COMPLEX_SMALL; + + double DnnSuperResQuality::fontScale = 1.0; + + Scalar DnnSuperResQuality::fontColor = Scalar(255,255,255); + + void DnnSuperResQuality::setFontFace(int fontface) + { + fontFace = fontface; + } + + void DnnSuperResQuality::setFontScale(double fontscale) + { + fontScale = fontscale; + } + + void DnnSuperResQuality::setFontColor(cv::Scalar fontcolor) + { + fontColor = fontcolor; + } + + double DnnSuperResQuality::psnr(Mat img, Mat orig) + { + CV_Assert(!img.empty()); + CV_Assert(!orig.empty()); + CV_Assert(img.type() == CV_8UC3); + CV_Assert(img.type() == orig.type()); + + Mat img_float; + img.convertTo(img_float, CV_32F); + + Mat orig_float; + orig.convertTo(orig_float, CV_32F); + + Mat img_diff; + absdiff(orig_float, img_float, img_diff); + + Mat img_mul = img_diff.mul(img_diff); + + Scalar sum = cv::sum(img_mul); + + double rgb_sum = 0.0; + for(int i = 0; i < 4; i++){ + rgb_sum += sum[i]; + } + + double mse = rgb_sum / (double) (3.0 * img_float.total()); + + double max = 255 * 255; + double psnr = 10 * log10(max / (double) mse); + + return psnr; + } + + double DnnSuperResQuality::ssim(Mat img, Mat orig) + { + CV_Assert(!img.empty()); + CV_Assert(!orig.empty()); + CV_Assert(img.type() == CV_8UC3); + CV_Assert(img.type() == orig.type()); + + Mat ycrcb_img, ycrcb_orig; + cvtColor(img, ycrcb_img, COLOR_BGR2YCrCb); + cvtColor(orig, ycrcb_orig, COLOR_BGR2YCrCb); + + Mat img_channels[3], orig_channels[3]; + split(img, img_channels); + split(orig, orig_channels); + + Mat img_float; + img_channels[0].convertTo(img_float, CV_32F); + + Mat orig_float; + orig_channels[0].convertTo(orig_float, CV_32F); + + Mat mu_img, mu_orig; + GaussianBlur( img_float, mu_img, Size(11, 11), 0, 0 ); + GaussianBlur( orig_float, mu_orig, Size(11, 11), 0, 0 ); + Mat mu_mul = mu_img.mul(mu_orig); + mu_img = mu_img.mul(mu_img); + mu_orig = mu_orig.mul(mu_orig); + + Mat sigma_img, sigma_orig; + GaussianBlur( img_float.mul(img_float), sigma_img, Size(11, 11), 0, 0 ); + GaussianBlur( orig_float.mul(orig_float), sigma_orig, Size(11, 11), 0, 0 ); + sigma_img = sigma_img - mu_img; + sigma_orig = sigma_orig - mu_orig; + + Mat sigma_mul; + GaussianBlur( img_float.mul(orig_float), sigma_mul, Size(11, 11), 0, 0 ); + sigma_mul = sigma_mul - mu_mul; + + double c1 = (0.01 * 255) * (0.01 * 255); + double c2 = (0.03 * 255) * (0.03 * 255); + + Mat nom1 = (2 * mu_mul + c1); + Mat nom2 = (2 * sigma_mul + c2); + + Mat nominator = nom1.mul(nom2); + + Mat denom1 = mu_img + mu_orig + c1; + Mat denom2 = sigma_img + sigma_orig + c2; + + Mat denominator = denom1.mul(denom2); + + Mat ssim = nominator / denominator; + + Scalar mssim = mean(ssim); + + return mssim[0]; + } + + void DnnSuperResQuality::benchmark(DnnSuperResImpl sr, Mat img, + std::vector& psnrValues, + std::vector& ssimValues, + std::vector& perfValues, + bool showImg, + bool showOutput) + { + CV_Assert(!img.empty()); + + psnrValues = std::vector(); + ssimValues = std::vector(); + perfValues = std::vector(); + + if(showOutput) + std::cout << "Start benchmarking" << std::endl; + + int scale = sr.getScale(); + + int width = img.cols - (img.cols % scale); + int height = img.rows - (img.rows % scale); + Mat cropped = img(Rect(0, 0, width, height)); + Mat imgDownscaled; + + resize(cropped, imgDownscaled, Size(), 1.0/scale, 1.0/scale); + + timespec ts_beg, ts_end; + + Mat imgUpscaled; + + clock_gettime(CLOCK_REALTIME, &ts_beg); + sr.upsample(imgDownscaled, imgUpscaled); + clock_gettime(CLOCK_REALTIME, &ts_end); + + double elapsed = (ts_end.tv_sec - ts_beg.tv_sec) + (ts_end.tv_nsec - ts_beg.tv_nsec) / 1e9; + double psnr_value = psnr(imgUpscaled, cropped); + double ssim_value = ssim(imgUpscaled, cropped); + + psnrValues.push_back(psnr_value); + ssimValues.push_back(ssim_value); + perfValues.push_back(elapsed); + + if( showOutput ) + { + std::cout << sr.getAlgorithm() << ":" << std::endl; + std::cout << "Upsampling time: " << elapsed << std::endl; + std::cout << "PSNR: " << psnr_value << std::endl; + std::cout << "SSIM: " << ssim_value << std::endl; + std::cout << "----------------------" << std::endl; + } + + //BICUBIC + Mat bicubic; + clock_gettime(CLOCK_REALTIME, &ts_beg); + resize(imgDownscaled, bicubic, Size(), scale, scale, INTER_CUBIC ); + clock_gettime(CLOCK_REALTIME, &ts_end); + + elapsed = (ts_end.tv_sec - ts_beg.tv_sec) + (ts_end.tv_nsec - ts_beg.tv_nsec) / 1e9; + psnr_value = psnr(bicubic, cropped); + ssim_value = ssim(bicubic, cropped); + + psnrValues.push_back(psnr_value); + ssimValues.push_back(ssim_value); + perfValues.push_back(elapsed); + + if( showOutput ) + { + std::cout << "Bicubic \n" << "Upsampling time: " << elapsed << std::endl; + std::cout << "PSNR: " << psnr_value << std::endl; + std::cout << "SSIM: " << ssim_value << std::endl; + std::cout << "----------------------" << std::endl; + } + + //NEAREST NEIGHBOR + Mat nearest; + clock_gettime(CLOCK_REALTIME, &ts_beg); + resize(imgDownscaled, nearest, Size(), scale, scale, INTER_NEAREST ); + clock_gettime(CLOCK_REALTIME, &ts_end); + + elapsed = (ts_end.tv_sec - ts_beg.tv_sec) + (ts_end.tv_nsec - ts_beg.tv_nsec) / 1e9; + psnr_value = psnr(nearest, cropped); + ssim_value = ssim(nearest, cropped); + + psnrValues.push_back(psnr_value); + ssimValues.push_back(ssim_value); + perfValues.push_back(elapsed); + + if( showOutput ) + { + std::cout << "Nearest neighbor \n" << "Upsampling time: " << elapsed << std::endl; + std::cout << "PSNR: " << psnr_value << std::endl; + std::cout << "SSIM: " << ssim_value << std::endl; + std::cout << "----------------------" << std::endl; + } + + //LANCZOS + Mat lanczos; + clock_gettime(CLOCK_REALTIME, &ts_beg); + resize(imgDownscaled, lanczos, Size(), scale, scale, INTER_LANCZOS4 ); + clock_gettime(CLOCK_REALTIME, &ts_end); + + elapsed = (ts_end.tv_sec - ts_beg.tv_sec) + (ts_end.tv_nsec - ts_beg.tv_nsec) / 1e9; + psnr_value = psnr(lanczos, cropped); + ssim_value = ssim(lanczos, cropped); + + psnrValues.push_back(psnr_value); + ssimValues.push_back(ssim_value); + perfValues.push_back(elapsed); + + if( showOutput ) + { + std::cout << "Lanczos \n" << "Upsampling time: " << elapsed << std::endl; + std::cout << "PSNR: " << psnr_value << std::endl; + std::cout << "SSIM: " << ssim_value << std::endl; + + std::cout << "-----------------------------------------------" << std::endl; + } + + if( showImg ) + { + std::vector imgs{ imgUpscaled, bicubic, nearest, lanczos }; + std::vector titles{ sr.getAlgorithm(), "Bicubic", "Nearest neighbor", "Lanczos" }; + showBenchmark(cropped, imgs, "Benchmarking", Size(imgUpscaled.cols, imgUpscaled.rows), titles, psnrValues, ssimValues, perfValues); + } + } + + void DnnSuperResQuality::showBenchmark(Mat orig, std::vector images, std::string title, Size imageSize, + const std::vector imageTitles, + const std::vector psnrValues, + const std::vector ssimValues, + const std::vector perfValues) + { + CV_Assert(images.size() > 0); + CV_Assert(!orig.empty()); + + int len = images.size(); + + if ( len > 9 ) + { + std::cout << "showBenchmark() supports up to 9 images" << std::endl; + return; + } + + bool showTitles = false; + bool showPSNR = false; + bool showSSIM = false; + bool showPerf = false; + + if( imageTitles.size() == images.size() ) + showTitles = true; + + if( psnrValues.size() == images.size() ) + showPSNR = true; + + if( psnrValues.size() == images.size() ) + showSSIM = true; + + if( psnrValues.size() == images.size() ) + showPerf = true; + + int cols, rows; + + if ( len == 1 ) + { + cols = 1; + rows = 1; + } + else if ( len == 2 ) + { + cols = 2; + rows = 1; + } + else if ( len == 3 || len == 4 ) + { + cols = 2; + rows = 2; + } + else if ( len == 5 || len == 6 ) + { + cols = 3; + rows = 2; + } + else + { + cols = 3; + rows = 3; + } + + Mat fullImage = Mat::zeros(Size((cols * 10) + imageSize.width * cols, (rows * 10) + imageSize.height * rows), images[0].type()); + + std::stringstream ss; + int h_ = -1; + for (int i = 0; i < len; i++) + { + CV_Assert(!images[i].empty()); + + int fontStart = 15; + int w_ = i % cols; + if(i % cols == 0) + h_++; + + Rect ROI((w_ * (10 + imageSize.width)), (h_ * (10 + imageSize.height)), imageSize.width, imageSize.height); + Mat tmp; + resize(images[i], tmp, Size(ROI.width, ROI.height)); + + if( showTitles ) + { + ss << imageTitles[i]; + putText(tmp, + ss.str(), + Point(5,fontStart), + fontFace, + fontScale, + fontColor, + 1, + 16); + + ss.str(""); + fontStart += 20; + } + + if( showPSNR ) + { + ss << "PSNR: " << psnrValues[i]; + putText(tmp, + ss.str(), + Point(5,fontStart), + fontFace, + fontScale, + fontColor, + 1, + 16); + + ss.str(""); + fontStart += 20; + } + + if( showSSIM ) + { + ss << "SSIM: " << ssimValues[i]; + putText(tmp, + ss.str(), + Point(5,fontStart), + fontFace, + fontScale, + fontColor, + 1, + 16); + + ss.str(""); + fontStart += 20; + } + + if( showPerf ) + { + ss << "Speed: " << perfValues[i]; + putText(tmp, + ss.str(), + Point(5,fontStart), + fontFace, + fontScale, + fontColor, + 1, + 16); + + ss.str(""); + } + + tmp.copyTo(fullImage(ROI)); + } + + namedWindow(title, 1); + imshow(title, fullImage); + waitKey(); + } + } +} \ No newline at end of file diff --git a/modules/dnn_superres/src/precomp.hpp b/modules/dnn_superres/src/precomp.hpp new file mode 100644 index 00000000000..f82eb2eaf1b --- /dev/null +++ b/modules/dnn_superres/src/precomp.hpp @@ -0,0 +1,17 @@ +// This file is part of OpenCV project. +// It is subject to the license terms in the LICENSE file found in the top-level directory +// of this distribution and at http://opencv.org/license.html. +#ifndef __OPENCV_DNN_SUPERRES_PRECOMP_HPP__ +#define __OPENCV_DNN_SUPERRES_PRECOMP_HPP__ + +#include +#include +#include +#include +#include +#include +#include + +#include "opencv2/core.hpp" + +#endif // __OPENCV_DNN_SUPERRES_PRECOMP_HPP__ diff --git a/modules/dnn_superres/test/test_dnn_superres.cpp b/modules/dnn_superres/test/test_dnn_superres.cpp new file mode 100644 index 00000000000..8fe16f078d5 --- /dev/null +++ b/modules/dnn_superres/test/test_dnn_superres.cpp @@ -0,0 +1,286 @@ +// This file is part of OpenCV project. +// It is subject to the license terms in the LICENSE file found in the top-level directory +// of this distribution and at http://opencv.org/license.html. + +#include "test_precomp.hpp" + +namespace opencv_test +{ + namespace + { + + const std::string DNN_SUPERRES_DIR = "dnn_superres"; + const std::string IMAGE_FILENAME = "butterfly.png"; + + /****************************************************************************************\ + * Test single output models * + \****************************************************************************************/ + + class CV_DnnSuperResSingleOutputTest : public cvtest::BaseTest + { + public: + CV_DnnSuperResSingleOutputTest(); + + protected: + Ptr dnn_sr; + + virtual void run(int); + + void runOneModel(std::string algorithm, int scale, std::string model_filename); + }; + + void CV_DnnSuperResSingleOutputTest::runOneModel(std::string algorithm, int scale, std::string model_filename) + { + std::string path = std::string(ts->get_data_path()) + DNN_SUPERRES_DIR + "/" + IMAGE_FILENAME; + + Mat img = imread(path); + if (img.empty()) + { + ts->printf(cvtest::TS::LOG, "Test image not found!\n"); + ts->set_failed_test_info(cvtest::TS::FAIL_INVALID_TEST_DATA); + return; + } + + std::string pb_path = std::string(ts->get_data_path()) + DNN_SUPERRES_DIR + "/" + model_filename; + + this->dnn_sr->readModel(pb_path); + + this->dnn_sr->setModel(algorithm, scale); + + if (this->dnn_sr->getScale() != scale) + { + ts->printf(cvtest::TS::LOG, + "Scale factor could not be set for scale algorithm %s and scale factor %d!\n", + algorithm.c_str(), scale); + ts->set_failed_test_info(cvtest::TS::FAIL_BAD_ACCURACY); + return; + } + + if (this->dnn_sr->getAlgorithm() != algorithm) + { + ts->printf(cvtest::TS::LOG, "Algorithm could not be set for scale algorithm %s and scale factor %d!\n", + algorithm.c_str(), scale); + ts->set_failed_test_info(cvtest::TS::FAIL_BAD_ACCURACY); + return; + } + + Mat img_new; + this->dnn_sr->upsample(img, img_new); + + if (img_new.empty()) + { + ts->printf(cvtest::TS::LOG, + "Could not perform upsampling for scale algorithm %s and scale factor %d!\n", + algorithm.c_str(), scale); + ts->set_failed_test_info(cvtest::TS::FAIL_BAD_ACCURACY); + return; + } + + int new_cols = img.cols * scale; + int new_rows = img.rows * scale; + if (img_new.cols != new_cols || img_new.rows != new_rows) + { + ts->printf(cvtest::TS::LOG, "Dimensions are not correct for scale algorithm %s and scale factor %d!\n", + algorithm.c_str(), scale); + ts->set_failed_test_info(cvtest::TS::FAIL_BAD_ACCURACY); + return; + } + } + + CV_DnnSuperResSingleOutputTest::CV_DnnSuperResSingleOutputTest() + { + dnn_sr = makePtr(); + } + + void CV_DnnSuperResSingleOutputTest::run(int) + { + //x2 + runOneModel("espcn", 2, "ESPCN_x2.pb"); + + } + + TEST(CV_DnnSuperResSingleOutputTest, accuracy) + { + CV_DnnSuperResSingleOutputTest test; + test.safe_run(); + } + + /****************************************************************************************\ + * Test multi output models * + \****************************************************************************************/ + + class CV_DnnSuperResMultiOutputTest : public cvtest::BaseTest + { + public: + CV_DnnSuperResMultiOutputTest(); + + protected: + Ptr dnn_sr; + + virtual void run(int); + + void runOneModel(std::string algorithm, int scale, std::string model_filename, + std::vector scales, std::vector node_names); + }; + + void CV_DnnSuperResMultiOutputTest::runOneModel(std::string algorithm, int scale, std::string model_filename, + std::vector scales, std::vector node_names) + { + std::string path = std::string(ts->get_data_path()) + DNN_SUPERRES_DIR + "/" + IMAGE_FILENAME; + + Mat img = imread(path); + if ( img.empty() ) + { + ts->printf(cvtest::TS::LOG, "Test image not found!\n"); + ts->set_failed_test_info(cvtest::TS::FAIL_INVALID_TEST_DATA); + return; + } + + std::string pb_path = std::string(ts->get_data_path()) + DNN_SUPERRES_DIR + "/" + model_filename; + + this->dnn_sr->readModel(pb_path); + + this->dnn_sr->setModel(algorithm, scale); + + if ( this->dnn_sr->getScale() != scale ) + { + ts->printf(cvtest::TS::LOG, + "Scale factor could not be set for scale algorithm %s and scale factor %d!\n", + algorithm.c_str(), scale); + ts->set_failed_test_info(cvtest::TS::FAIL_BAD_ACCURACY); + return; + } + + if ( this->dnn_sr->getAlgorithm() != algorithm ) + { + ts->printf(cvtest::TS::LOG, "Algorithm could not be set for scale algorithm %s and scale factor %d!\n", + algorithm.c_str(), scale); + ts->set_failed_test_info(cvtest::TS::FAIL_BAD_ACCURACY); + return; + } + + std::vector outputs; + this->dnn_sr->upsampleMultioutput(img, outputs, scales, node_names); + + for(unsigned int i = 0; i < outputs.size(); i++) + { + if( outputs[i].empty() ) + { + ts->printf(cvtest::TS::LOG, + "Could not perform upsampling for scale algorithm %s and scale factor %d!\n", + algorithm.c_str(), scale); + ts->set_failed_test_info(cvtest::TS::FAIL_BAD_ACCURACY); + return; + } + + int new_cols = img.cols * scales[i]; + int new_rows = img.rows * scales[i]; + + if ( outputs[i].cols != new_cols || outputs[i].rows != new_rows ) + { + ts->printf(cvtest::TS::LOG, "Dimensions are not correct for scale algorithm %s and scale factor %d!\n", + algorithm.c_str(), scale); + ts->set_failed_test_info(cvtest::TS::FAIL_BAD_ACCURACY); + return; + } + } + } + + CV_DnnSuperResMultiOutputTest::CV_DnnSuperResMultiOutputTest() + { + dnn_sr = makePtr(); + } + + void CV_DnnSuperResMultiOutputTest::run(int) + { + //LAPSRN + //x4 + std::vector names_4x {"NCHW_output_2x", "NCHW_output_4x"}; + std::vector scales_4x {2, 4}; + runOneModel("lapsrn", 4, "LapSRN_x4.pb", scales_4x, names_4x); + } + + TEST(CV_DnnSuperResMultiOutputTest, accuracy) + { + CV_DnnSuperResMultiOutputTest test; + test.safe_run(); + } + + /****************************************************************************************\ + * Test benchmarking * + \****************************************************************************************/ + + class CV_DnnSuperResBenchmarkingTest : public cvtest::BaseTest + { + + protected: + virtual void run(int); + + void runBenchmark(std::string algorithm, int scale, std::string model_filename); + }; + + void CV_DnnSuperResBenchmarkingTest::runBenchmark(std::string algorithm, int scale, std::string model_filename) + { + DnnSuperResImpl dnn_sr; + + std::string path = std::string(ts->get_data_path()) + DNN_SUPERRES_DIR + "/" + IMAGE_FILENAME; + + Mat img = imread(path); + if ( img.empty() ) + { + ts->printf(cvtest::TS::LOG, "Test image not found!\n"); + ts->set_failed_test_info(cvtest::TS::FAIL_INVALID_TEST_DATA); + return; + } + + std::string pb_path = std::string(ts->get_data_path()) + DNN_SUPERRES_DIR + "/" + model_filename; + + dnn_sr.readModel(pb_path); + + dnn_sr.setModel(algorithm, scale); + + ASSERT_EQ(dnn_sr.getScale(), scale); + + ASSERT_EQ(dnn_sr.getAlgorithm(), algorithm); + + int width = img.cols - (img.cols % scale); + int height = img.rows - (img.rows % scale); + Mat cropped = img(Rect(0, 0, width, height)); + + Mat img_downscaled; + cv::resize(cropped, img_downscaled, cv::Size(), 1.0/scale, 1.0/scale); + + std::vector psnrs, ssims, perfs; + + DnnSuperResQuality::benchmark(dnn_sr, cropped, psnrs, ssims, perfs, 0, 0); + + ASSERT_EQ(psnrs.size(), 4); + ASSERT_EQ(ssims.size(), 4); + ASSERT_EQ(perfs.size(), 4); + + ASSERT_EQ(psnrs.size(), ssims.size()); + ASSERT_EQ(psnrs.size(), perfs.size()); + + for(unsigned int i = 0; i < psnrs.size(); i++) + { + ASSERT_GT(psnrs[i], 0.0); + + ASSERT_GE(ssims[i], 0.0); + ASSERT_LE(ssims[i], 1.0); + + ASSERT_GT(perfs[i], 0.0); + } + } + + void CV_DnnSuperResBenchmarkingTest::run(int) + { + runBenchmark("espcn", 2, "ESPCN_x2.pb"); + } + + TEST(CV_DnnSuperResBenchmarkingTest, accuracy) + { + CV_DnnSuperResBenchmarkingTest test; + test.safe_run(); + } + +}} \ No newline at end of file diff --git a/modules/dnn_superres/test/test_main.cpp b/modules/dnn_superres/test/test_main.cpp new file mode 100644 index 00000000000..0e51ddfd050 --- /dev/null +++ b/modules/dnn_superres/test/test_main.cpp @@ -0,0 +1,6 @@ +// This file is part of OpenCV project. +// It is subject to the license terms in the LICENSE file found in the top-level directory +// of this distribution and at http://opencv.org/license.html. +#include "test_precomp.hpp" + +CV_TEST_MAIN("cv") diff --git a/modules/dnn_superres/test/test_precomp.hpp b/modules/dnn_superres/test/test_precomp.hpp new file mode 100644 index 00000000000..18cf1c253cb --- /dev/null +++ b/modules/dnn_superres/test/test_precomp.hpp @@ -0,0 +1,16 @@ +// This file is part of OpenCV project. +// It is subject to the license terms in the LICENSE file found in the top-level directory +// of this distribution and at http://opencv.org/license.html. + +#ifndef __OPENCV_TEST_PRECOMP_HPP__ +#define __OPENCV_TEST_PRECOMP_HPP__ + +#include "opencv2/ts.hpp" +#include "opencv2/dnn_superres.hpp" +#include "opencv2/dnn_superres_quality.hpp" + +namespace opencv_test { + using namespace cv::dnn_superres; +} + +#endif diff --git a/modules/dnn_superres/tutorials/benchmark/images/bicubic_butterfly.jpg b/modules/dnn_superres/tutorials/benchmark/images/bicubic_butterfly.jpg new file mode 100644 index 0000000000000000000000000000000000000000..91d28245de58f46ab3e9a9aa3493f347792f07ce GIT binary patch literal 14614 zcmbWec|4SF^glcjq9kO?GD%Vi30Y#MQVF4`lx?zaN%p~*sceNvLJ5P;$AlM z(a(y?s%mUaZCy)iTYE?6udeQ);gLV1gui3sBr@gS?A-jq;u39Rb8DNv1MKeoCl?op z`+vpajQ@{v33KE+@ShI&{*#OAKnUmL7Cy)$ug)uS?H-?_pXjMeFAp8Ro}5$O%&(wf zNfmSQ9~2Njtw~a({U_T0NcR6uuvh=TB>TSv`@iKH2OZ(&;wX<>7z70|S**{95XwI2 zMYe2wCk{f5CQ&bA)W!lE18?1sL*03X`MTBX-3iedaG~+0P%)3vZ(!|*fVYlN*Ur+l zk8?O*V3ig^fyF{yd%!mh<{i|c=}ltNNU zK3554gT^S8tgIci}Q<}~4 zT^b)f7@hMeNoCe(e<5qJR^8?Eoh`l$a{HEM0wGx%Aj zpFK8dALNA|r`Ws)^DPs_RD*g|BzoRJeqD84On7NyaUpQR+^h2;SX$Sr@?3R)9?H#P z4BvtmU4L(8M1MsceNpZ>6(k*Psk7K0#^5$$r82olt4FoVS)~mUv33fq!snC0b9lwr zX4sp3kQg+Ggpb*IqaR=UNijJjg%~$k#d?GC?x>8k*at;P+=HjEY$A#*(zi>!;0+Zj zS+jAkkk6oVVSk@mi(1-Mo;6mZ;zw9uTKYzg^>3LGvH)i{lyhGsA;08e(mk%B#NCQqsFxd$L*=Wth)k!&UA@Uut;8R3E!Sd7Uf0IiY;W1HVGBa_dM5>9e z_{}5JAql0UkB}>FWQ&X_&I~q8%ON?9e0X(4#hFKGPS>`&j(_*FK6G=+$%$o*K1y@F zZF4`J%>&*v2xs$eGA^@wp;f5(ASf5&8qEhE>sE%n^w#QL`cn-VcdwM`#&t53d90IU z-~N6YFr;TtJJJs>-Lclj3J5oKQ8IulZNzf$sv?y()Hk%YGS2%upyT%?Vze()0N`WX zXa6BeXeN#I&3C5LJeQSH1K`7Y@$$>>BbEs*bB}`|1(!vSq2Hr&=ExiR^L*DvFvfZK z76LIKomGhA2aM>RKpaHIh{k75gWO*q(fq`HybTQdXe#UL&FErI;AC#o+00K}m z#jv+NdA0kXxIfPiOrC2sO4I|-!mi0Yur^9X*!O>=CkLr1t?k9O;(;^&>X4sZ!)aGY zx3H%P>hA|T#RW3`U|I-wfSZ;?N^1K|6m-z@6yLbhpFcr7DfExti~PY<;i!X(aAkd^ zWG|DfnWDYhf6DIInaVs8PH--L9&SDF&OBa0e+lF=t}~y(q~M#Rto|rWiL=MBx%f)( z5oZ|zO6#BEBSz~=;ahdgx97XFOswx#)!Whd_2p^r$5rThth{+0;ad$UclSXp1`MO% zfq(lT{DUF(?~Gfi6rs3rw`7_$*_hh*LG?p_;hor7hxvoni$VC6U5=s7U0#5(1&j)K z|6YRpZjeFM+o#erz7a0?Zd}Sep{3A!t_ytG2Gx8ADFUF`0@5gk2lELa<{3hY?=?`F z!Q#sIL59;ceWMDV`qus6N*kb zX)uyvdMrYr$oBQq(rrO`=h|As;isSdEhu&ui;JKC^l8){JbM4@T<(>P(t5AH_)akO zQBpi!ntj+4|1&lLcf><4D=N6hDWiep5UQx)Rlc4{ZUoZ}Iogp2QpoNv$v9SCK1^_N z!<61*VBVIRe2?vVaQ=mI8&jUa2Pa%-Wocq2O4o0rZ&F9I$hKFEhPThsR47s)k#C{O zy~tYRAWo+`o_+yWKhSVf@WVcc8r3#%OR`ua)Q~G;dDB6qKj27FDVRTv5my}Y-lia^ zfE;1Y$8BEZpE2h-&d96JmLyWIuaAZ84O`RC7!~<%_Cx!^z+5w2A+`jNHQObtC#J2j-tTcC~1}ctf zehPK#7i5}zCRs=8A1;D-upUII<<#r=>j}p(Y5O4G`MN{J28LL*xa{eVg&e$FHU+ z!)_Mb8dMgXoH-KQ>xUQgqNwXvsV66)p_dy=0>kdtR9AePwGrwbNAfLZHO}UD|40k_ zpm7cyrrXNBdq2cFpyS_}i&vhJ^I1vyh7A5?lwc)V2>$tQJ@p&Lr{G{C3wGieW<8mezMR90SZ-NNtyN(=;o3s@Rb{8p49 zdSfNeOVn9Mryo+a0+FUk#5CMpK}e95Bks$$8st6`+jyLK?~|+lzYfdH6Km-C@@>r} z6785}ftK1WPrFv}BAZcqhpqzmtkA%T?s(Ep?1gFDq$A~nYTr)wL^y8zx~;ox>+oRa z0RIzLUCL~JlKH#t8?guX2y#M~+Go6qK87W#c>UU%}Ja z42{yuDXTRN7F~XBR!#P3VRm;G_97JlMpNC+%c@4h7QKc8g15WmYXmOZTn`Ocv(REx zxjGRfj!j&XNqFB^euwY5xu74OYPk-aQj5ZAAryQQz&|_Q=*wLxtC9$7@RdA8SLIJs zXHj574w8Psq3F7@j$ZSNrVe$h%X3KE4qbDr$kyh8*bD!rO0Ze`pzA`wX$j_W4f?e~ zBrjl1_o}9rv}50jh>GWae>DC+MVtFljSNz2=W;PMoPLj%oj(ucHnETXSzqINDB3UG z+b`7-kipd8tl~R}tF)x1r15cZ6!e&8JWOcZi{K;lW~Hk5xoXb8v*WkBQ{q_BjT}li zLXtZFrWA6CdFc<+P_8zp&gV>c@y_Lmx}0%y^$eDkNRHGwTcZ&m!%H>8KjjWHo^ufi z**ARz;9)#;&~9a28XY#NtL|Q;9eH{>F?i3q?S|*>T%Q_a#(ELW6fruEHf>GBknQ$bAsxR{h1)!lK~DzNa^o zb*Ha{$`u5WEP%7BSTakEev|bD0rSfN3)+|FlUBupxPR3t$u}E>7VU$M zGVjFml{P;4%052zV_DmUXWKh^i9gb zP&~9!u9#+J0i-bQEu_JIs6> z5#EdxYs^;BBkwwTh|m26fi7JA)$acw-!M(1DD~^-G3_PXTI?OyH__%c8r~TM8%#Q- zcHRL*<4c5GLbz12-ml@HJ?=9;mg~QKo~qw}VBNg99LFjKI8prII_m@8&0e&%4%>?7 z@!Zk-Q=Rc0cUt@GYDm(q=c{l+m!3BBm?+(egF4M8+94pI`G>*3cW+c&-hBMxUtgn; zSoN=No+*lF3vA91k99?mFmXGCF!3x^&6?Rp{g#H8355CDZ{F|y&ImlZb5vo>xW2yB zcDaN(ws1X0TM(9ks~!%YU`w)|+B+;u%h2S}|aRSo(u-f06K-m4r{+36YV#VX)SH5THtkLfc@gfx$1hWN-9V z)kcd6nku3J6S8_)@ypx%ymy_)^4=e5X7Kg^L#PAw6Sgu-6Q^MsT&ZhUKIJhs_yycI zN{#U|pP^-W>82{3&5~1*?w_$8D2R7E`!t6Kf4rNrkM?iiN`PNPK<2^vyIgXU)~}gY zIm?NH9D48NKaS7^1Vh5VX@JM`wj}n8~Vq2IM4iq`44@{#EY7*lhhgg_r`UaOV zxe++Q3kTYXQjd0J`^9#L$@`#V2ox&^a?Xwkqp7{n3a+z_PF#!WOj?@$6!=79ytQZ#n6AR5`^fK>*0x;S2Zcx46FSt! zHR#Q(3^h##c$|C2Z0>DPQNrIFq|d)4fBg%@2(faJYV1EKDZKYvD4jryZK?mCy2JYR>lE&+Ud?`rfP2~BnCLx zn~Tgao#ygyeNMLx*_E3E$LqxMx!wyfWS-v#DLHTM2?1yMR+VXTYqn}JNKlrXRJDe( zvp0R+A(Dhn;Gmg@t5-W!lW2$U4Q5^SuyuTTw3V0h#C_Dpl-i)>%n)$p&dM;QSkSP^ z(u-?-b#6pr)mxkIfd2fmh~iPG3v^<+86^|=T3?$idrKL5%;><6I}YFXR>Yy_`wJO*8}sOmE=5i@KBo3*6C96s#EfIed~L<+Z*jUb z!FEF2vwtG}-(Qw>x4wJMR}xNK*#~jdC&y~QJJ~vVGp@n~7@am+MZ3ZAXLVxKfj#Sy z>S>p5SMS!-@a`_@S&M;TUrn>aZTCJyk1gJFXu2OM+w@C|_EAkzV_eH8u0X1@s$@s_ z4e1%U#H>TJ792=i4h)1=V431r`cr4w*HG4>~^H%=Vt+pr%*4@C99dXYT~s z2A#RQ#l$25rW&o`CRGL>>e}}~Xe&xNLh7Ss@ly?}q!PSF6iq1_>H!miTaeJvinM|l z)s+HTm|E;tTNjO+fwnOpDRUOiHvdKG1UwenCKR^^ZWbE%Z5qF^GcB#&N&3{FoqvJ< zyUP=?ao!bfhnI|J$lv2iElI+F&1MTuS17=_`1C0K^_Y5@!dwBe7bc7dW!yjx6TIdh?x1!J&{?*E^f3*&0 z^L?6N_tovJ&?rfKh!9rk^!#ILw}r2QXWVRFrTokBrY-Io%vaRRSFjlK9!Gr_X}?iN zpl(XkZS*UBDbg>sA1a#lnx?g`5BS_>xKvCzB$fnM+K1^Az|Dfc7lxPhvg#eUUVd=9 z+qqE`29B&00+e8@o8QJ3Y=lxtNuog5khE!sV)C;ri4X_93?MA?T6~8K(WXFbb@kj$ z+go2pv#V?8^|9R1y<$?Zlp9mqX4_2R05(5{bEo?>z801xbPP{VPhFu@r~E1l@04Gu zJW{>JsOf(;l_bFH=JlO|*xxAu+RmyJF zqDlTp;%@`Mt9Aub=!t@{?Q+Swlx6~5GKmpvPjH_@em5wHDVSj8&rHcJ-PGMw4crRu zuRVo}046vNF`pF&(O=d}N@T)jb}0n4OWjZJS&BWCLF87Og>RLa9ZGyWX3~G4_u10S zn^TUd&kSyA_dVwwZeCKJD;pd2Nj2-x@bg=6Jb!$y3MvcrLIVmGt6U77e(g3jfsX7m zL#G-f#4{XHL@EcbHZcEgVao6`nRu!dYz*cAg!(cx;rk%cTzrmqn2FkiR+hVkS;Ez3 z`?ern+$0rOekSXA-%BYsxjPFBlA30%YLKt^Q>d9*;?IH?5J9F-I(fde-m$==uFb_X z?`r!4x6|T?gdnXw{89J#xQiM&uZKJzSAApM`$uT~p)B}}D_j*R=eAX9g<7`mwDQ*3o(#$^CT&jpMa z_a+}tFFl;|f!OLH(iQ252SGPsPptV zK#>-035&_rtNx?#4!N58Ctx>YR|aX8| z8Y-@@QnIYxz4uD7z3R`Vw0(ipu0{e|tk;7`HHwGE!^(@0f6x_53B2f#Z#EGH_vD@l zHgR8w3mC-#tRIjA95D9*P%dJs(-cl7Omtl^tC6`ak@yMIhvAf(s8&QUs@VX-2Vm$& zMb{9rPGrh%hqtp|lX}H&`&;Mdn)hzk z_OdzUn0vm*fJ>JFZ`zQhBQ`)VIrTNXYyueoSWmL~Y3LZ-sl|)%*yiyD?a?1E>TNTl zATjt0&>1vdKoc`=L?=@5t@t+tC%=;EE_y0@2kB;hD_~d(Q;mcm+tJdTtTY>6IRS7& zF)eReBhm_+Vg(U2z9^5q`#6!4g6mtOJ0LPo%4zT)2mXEE_Floxj#VuDgs9Mm_Hf$B z_xm8|()^I+O@oo_8&``c2}iexz|AVFUmw{)WY_`D>|apaxHF!Y+R19i+H;qyEh{C) z@5DzQk8eF{p>wL92zY}d!CMepwlmY4y2R8)J9_JxN2NHxlIiy{mx_lxF$$ZbJ^}3+ zX;nTnXvYsi2+o7wGZ=X-kvY2F`dNj$X&)r4rjHU_>$Ps%;Jy5dc>0F(OM5~amPQ}IZj@yUy;>OCG~C_T=vt!PSii;+;#5puC3uJZMvEfB@K-~N*FjYiWB(;p7ulozW- zrl%e+rxAoT?Z`YqN?VvA*cg#)@dEW!Xsp7*RyovZph{3qQ0;DX*QCi8L1r;EvtPpY zd{5b<8qCbd2bYF=Xlj3Z#qU#(8$Gt(n?W5qU!j^g*`6orC~|Ng#I=f03BvS1Uk6Is zs2KLXbA7#wId3NNj++E3yj>M?bmHf6>^Vlu|o|%y1ywz zRxHd(N+1k^ey5uS`E9Q}H%!0Wtfz%LyTF)w%68`fYpN+4IOiJ&0TajBedwy}@&Nid zHDvQwukm;%%Ie{bsEEne&Fir5)@dTPCzV5ay7hRCS5FH`AJAw$DrCc~=IEdh)eLPg zBWK;*2YH~Q!u%XBgu4%K{cY(w)_)142M#Obxc2{2*^Ktr*RxV$U(c=D!O-PuQ_Y>uCfr&u(CI7rKu2Z7J$qw3# zAY{k%QC1!D5C=WBguO5$1%;DXxenq`)BA4^w z#4d#`z|9cn)Pmapvr{+oC&uB}+fiAEE#t%JNm7nBQK{s;-0gIF zBr6i-h8mY{=_N%tllro9yZao>ZuJpG>P1shVCsk)oJW3P8GN+z5tx1-=r3swp6r+S z_^Ui~o*SJXybt<`W{UHX_}YDi(NQp|3&a-onV(Uzx7Hu{C#Q4INkX>ie9;ZpNc*4@ zW3ui|C;r(qez9W}wPVkyFT<|Dq}uHa)Z8EUr1w9nD3a^;qE$cylgNBbu@L$-!2ZJY zIUpc^dGF?zjf{<3o2s%`s&#cSJghVvlxaZQ2QiOJnA3Jvji?>)3tGiBt3HH#WiHsw zq`SXcxdLFN+R|z=6JFI_e!`4_N!4xU+vocrX{ej;E3h0>7aY|PG*fIE{)iZ6=NbIw z_^$}VBgec8lqfQ1UyK0N#S>-s$0$5e-3PrnZA9P^KFr>i4+M88Ev8bH4 z6kiIsa5XY3|JuQaD5h8vofkkcF8%e$J`IGBd#~Fn=YEnOUAOU+)@`zEBMhLZ*DMk> z*!?JhAk-Lv6As;f03kPMDWBtECzj7!n{C*kr`GgcB0ER%?%fsoaz1HB!m%M{jf0z# znU@v#Y;ou?h&-!MQ;pNQktlTqk{Je_ys4oD6T6&v`T2E1g_1~FpSJo*La!jX(N8jm z5OgFmG8!|$DOX@-tXEJ4>@k!uM0BBUv4+}+iG^8F3x`!Ns%k0iR{sNkblJj0Jwr+( zhdl#M*)mUz+;RMsz=|)Lk6UUAKXU2A`6}-zSpJ^N^t<0%oz(vp6u(+R#~Ek*8e zZJ-T#;ouuEu4HLtTYq>Aqm|$>Znk)6N@R(r398nqq{WdW zZM}->=`gu?#yL2)DZbPj&!wh1Y*|$|Jb(FwZK4Xy^H3xtR%{E;6j30nQ`27tS&SLB z*TMcGjPsW&h@q;)i`dht>%)?m_^sI*Dj}hAJ;CAVkYl`cTwo%+sijVQ_6;WRPlHtm zm5-iG#jaZAcnRB~WsP~05jVbc9=&=nZ9yHD;&=IIj20osIJ_#AvJZkOu)Q~+=lk3Z zr5Q^m(_Itn$#5us&A^I%_!{Gc2k`{^kWy#8Y@lZfa7JC_Po8J*?!SZ?w;DWf+IKa{ zn^r)Y!fI)Q+mfY9zTn7?+sM3=hptbbV3q(b105 znDonHOo%O@Oq-|Q3aq4}Uze65)HI8=I$mh&WJaRx2+Qd!>Hp;$taPYX(t$;5+!>l8 zHVWbR-K4r4{(x3z)H&T{u)GmVe-=3tva-VnUz!#H_CY!J+ON`RTjAUxUe|p775(~> z==UzbVTWPQDe#CvPBKsbdB(oP{$=w4yC)NjpAaVg78?Izz1x%!^ouW!RjsSW=QwRwHUU*}bG>Cu-?Ydukd$XU3jJszG3$_};lOL!s`DdW zR!Q3YLn=C4Hc0(l2~SDJmDLdXIaWM=CI@vOa3AyUbni~Xr`&ypUhuJpQ;*uw}i&~nhS>R zPAhAX#@DnIR?CLQj2)(}^~$QwIm!3RO3{o~I4FQ89`L4^86zc;gL?ARXXSZ16}YYN zFu|$zrkc;T!(UhoL0F$ z5xU41rFcWkdbreFt#=hGw%ieR>`|Nt1wT{A7NPa!lP&nXLVi}(9n?NFEb>?QEMjzr zd3>EMaD}1IvIUMzS{n+2kpgm*XIGFHPCTUN^BHrh68!z zaL3vG#f3}R(%S2%k@6Dd9~G|W)Mxr-0B8!TIYOK6$NH|ymj2|kw$(2LFVY$J4i=&p z!zab1Wc_)N*yg`><`VL`vF%1_CVQ#`{R> zv8_F;hRtCQ_N23dZ#}=Pbobi7MCCOAI+FuF;4@QW(ig2#~_w8X1Cic{hkt`(J2Sb>oK z?nlNGN(cnEz2cnv5~Epu!q##2eW7_~Wh2pQ*5Y+GnCerIP{KSnQ~a1L-Rzq6b0k{} zuqgKUDtl|(via)iu!p{Fwy+aSeSmTpaeXMG(^48SA)$L7SG5p=KIWrus$etG+ISn3 z)u@Bf&@G9Nt$2Hz(RF1k2bX0(x^KDB5Q&Do-0YaH=q>1q3`$?DtV7UtgFL3qApfBX2U)0e(HHwF=M z0Bt*(QY6uYW}ZrZI4nO@DjxB0<_zLjdQrv(JKy?ZbFYyxCJai3&6oe1l??lvZz-1R z?%N1UGHuUeMeionO>Wx1)+05p0OKajKqiaLB zr2#D+UzKMUeC%zMCql3xO(#1jd|Q}K8jvvwZM$EgC(v!a8oH{3&te-zzipoWP-yH^ z&{Hsj z&D`mB%w+*)1BdMw%yU0kaj0j15%wfODNaQMJiHFAoE3gAK6ic0m_Id-cz`x9EPX$ZrY9Qu+xJMhaAwAzWhx(oqTYsdk5^KBOk@KZVMZSUt&I3R( z`|vp`%$~-*fUm;6&}7Iewc5(3P3t^3VVepnMmzYy9&uP#g8F1x(F*~2?-`=p(p?z5 z-}og@oA3tO<-x9@+I96fYy^o@TE9X~tEFPebBP&!AI1aM#qt^je;Jms0^*pPtVlK# zh^3!om3(d@paiEUENPeP6(jGg7^S*BiqcQ+P=`HuPo}grs9ey*#~XX>?P~P)KKEAr z&H4%`?V|JdK~#lBNrp~F9v=yaQyt#J6@zmvO-H{^^-lTOv z#djs81aW7$5;~#KT1PPsov9^Tk?Moa6O`rno$kAAZI?b1A}83k^{BS@Pmimtp`BA? zUlwQ%u%^nb?r8&vk3{fe zMCG_$LQ0?V2t*#C4&0-C^*)5ugv(9XoN)TNm_RGqb$O-HG+*Lt6|ZP0p^w-8meGiL zmc^eaeDmDUz%0tWf82_cw0eb zs>ZGOBRF*gWCVE!g>)w7B;iM$9K+MyAp zYMNr5y@T;(QqaYB{`^aVNKV4sd>5kXfPk`6v{seO8g65PbdoP51e{Z;nc0GDZ@8~Y zFfOpWVC51_QSa-cOlQg!3t@yGEz)+m4!q8lF$9s831~;YA$?PleciqEpji8?!=Odb zbbtAr``v_yOt&A?*o{qtE9}DrhBiVLxH5x2z#f9}SJDa)*Tbc6WOPs6c%CP3{q!Xt zh(Va&;P7(;>hpT!77m)pBgwt0W*_p34PicEm2793-US$x-Ks-@EGfs~@!8u=4_dzP z4U0AP%q+_*bMeu@Buq`mb^N8+Q>pdKwK$7(eFxcY4exCOu;mcsGJ6axT!QkzANTO_ z@x1U#D*0VZ6P>BNU?4=2hzbO53_SiWf6GvnpIm2q8+j5qFE+f5K7?{#d{@o(X({}% z3TvmrdKFhQU7e91WvmC>MlJ#-nSWeEE9m2ul-L5vZZDsp#SQt9hI2U+k2QnKI@9dP zwOQ6CLl>Cp1|{u9#xhMm28CPCty(QPoXSi)<@;+?WwcmvL^WZ|E>LS@xO1>|bS@!S zKdxr)kx8QWLtn%(LREh}N(ga{p>1w;T@-{9t1Wx-^UM%`hwh5^ve4hplru>b^Z{&S z6A0^lf{}XgS9s5saGkFVB zi~}T8uLOe*IZczpY^&g7xx6xc^URm+MCiq<@(KVjtM9ZcJ< zQT*QT#?^J-lnI&vlr0d?P*~t>U0Z1mEu8QioR|h2B=Bh)ima8TqroykVjI>>VK60+ z@Erb`)Zb=t+&up2szj{j@~4ZU2alXb=Oe!WZYqa6*fRFgR=ZmzPCT}$;7;x%Y<+7A zp&cC~g6u+5@AvqG`J7+AO1(OQ^-LF?({Z<)o;&};;8Tk$j{TEb_gV|!h zAmh?Pwgi?Y*ik^XKT7m{?UscVdkWIUK!>JB40UsnmA2&p%A} z2SjnLpOEW%H~+l<^WAL156=vVBz?v38DH^58qqVoOkewQ#m0-WW<*#VvySx@B8(h_ zQcZ|&PGsj(weLk(kviXwtyb1xV29oP=ih(X>Ifq&Hqxu|7Y;1jqVL}R;qxREBfEDX z_jH8!CYp`|7&MNh`qHG0S*a*DFwb-WEpER4`Kty&w@c>SWd8dJutJZL@1RyJ@VskHlJ(Fbq z>=6$rtEz`XcM0k$%_%=xtlrE6wCT~nn+U%z9>ETQ+Q?_iuN4wfW>t0hUpl}T#>g%( z7;>0BOhEmFzCm334$o~1mQZhh_U4ModvOJb<@>8m2F1(1ap0duot#ZNG-}eS0Rsx} zCYXgKeD~kC_qZ-)1@h7eCLR-t-DLE0H1#T- zsY8wBn9qcHXA7$0&KV0n+ozQoO9O7YvWFf{wkB-%2E9Y*QOlzb+qA#Wg{B77&9~wC zz3S}b#DM47!Jkx`M^xt;S^xGyPv5Pj90{GM$rN}8kA1`~rA16LdGI~pzRmP>^%9cU zynFoY>{{OTe8m>@I@AO6mdL9gN z3ZmXg4VSzvW(aY<2-HmbV=e8}KV28a`}j(gpRKo;NOls-EZ zavAP5hFEg^z8ZqV`<;NtTq#hj>DMU=!@L%Dbcvct{u@+~b>Mb>N1uV8wLG;!%p(GHK~1(Mc7!jk|%TmBK+J<4je4+)+p04 zwmlV>Qv`Vbda@4gj^J^%dwkkO;Rf$fXB|dCx!m^M=KG11+|&`z=K3?p1mrLL34Loa zhU;1g1#=kX2)i(MCF1xm$#xHo@*3z=`*Rr8Mrce6?`1L8MgFv-LMc zFnok^(hcXz%4jgARm>!{DJLcPkRJ#2%FRvQEHo^%NcI8AeCU6!yxIt*mjV_()CsmI zRCZx!M^11=Wg@6&JVoNXkxIf*?@j%O)|t;cMK3%PNXfcVuvVOxO>^hH!Y4qi|6EyJ zu{@Xb2{rSP<49&Z+hLId3vBtJ-h^rJn1{;bMw47aCSl;j+ZMPHIjf-k&|1r5yPusr zHH!__^F}TBHx^VY`rx0E)%6k|rUKa;+c4Bn`$EoEv>KNWP#8}T$En&a3$aQ1cZ>a8 z%sR5uQk0(|n+V!sRQmb!W9Mu1d^+mPyF!R-?uDuM-`?TVa!ZLOUD*v{CW_Mg0oxp8 zHy&H?0_AP*4l~W8xz418+qbg7*~(k>O>!EsoetpG_RHNzPQ0znm@>L9WWsy~5UHK? z2^OAx)DAf`ij(1Pnm#mf$*wMI?&4T?7|r2N4yxIs5);jF`weO{7B7&J^)!jsmA#O& zzCYxMzu!5pAN%4y+Q?QQ{a{Fcm?`X#8>+NQC>ac_X9^`pKNYGj&DH#xH5>*TU|p<; zH%o6#ug=!vpp%M=s7gv|6R+HEFVZ3@5qAMlX21aA%syyEJFmJTh*FGKyHQ=8a^UY; zt8=CRn*M^b1e4+Q^sW(o1*)&%A2p^@DG>j_RK~XX-8~whop>&Af$jL7l*3 z>yKEaY%qJo4fUFRyu!Br(aQD*pP{lN_Z@#)KvId#nG$bX9E(gf9agsJzV7bzyP0D# z?uJ5&Cqx>uvPKJG1)s?1YGTtmaL#?Do$3IK1B+UNp~m`nO~{B9o1gwrKU&9Zuz`V*ma%&>2Y}>ON?-kamkmFCON!we~?G z4wFkb`SJ#hVhgV(Y;Pu_RaOU6hC9P?vW8W@6Dbtl&kPIr`b<}3>xnawXHpA2@9cvV z+k4L4yR4BYq_qUYCbi=uQB}ld6|;SiBcAgYhrL^G91pw=w;Wl0IKC&=`RKz7<3*Sd zLXApz%@m%YQ}a7=_LojncRi? zPLr*(&d)!3_+Lg648_tNJRYP%u%)t%*3AX{}H?F_xqF{34uO@8iq5yJyW!hHfWqYyEln!OqCxT+`@4&_}ff zwQ!Pj&#+9$JIR+*32rr*I5ZZvTDlK9B+ce$&7g%Id1XsCz)npo+a4nXl%igiXO6sh zm&?}}ro93^qQTiVi4!?puFTu`G{!EnH}oUY<`Fh1sIgJ#75Thy+g*R(M=PP}Eox(g z8FUg-WQuu!m7}j)g17<;J~c&vghWp)q_>0IrH|RE-!xZFZ}(rNB9G!1{3#$RtusIO(8k?_aWnZ^z<>RrPigwkrSw8tVE*cYagVo81S>+w6+m%T zMnO_DtV|HQ5;U`ZX!pbi@wYw(6vL>`MYA=n)_ELjJzVAcH;EMUi3}c(r6<-7bte7D zYA-4M5;xETI{mXq?vfFA9J6Hro?O0cl(1I%r19m+n&jgz-z8qvB3N;oe}4XL9Ea6^ zSw(>DnHWEFBw|RgrFOXLL)IM#7DjtuR&G8DUGm zy83;P!a87jw#AtS!&w_UbjniJ2sk>|I0-HFa9W4Y8Xn h*1+A>K3BzC59Bv(iEYBi-@o++D}3xK+5_*8{T~jyMWg@# literal 0 HcmV?d00001 diff --git a/modules/dnn_superres/tutorials/benchmark/images/bicubic_comic.jpg b/modules/dnn_superres/tutorials/benchmark/images/bicubic_comic.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e179379b3df4072f717fd7db052df7fe19ee61c8 GIT binary patch literal 19073 zcmbTdc{r3`{69P;2}#JlOdFCdA+pR=iV#BCnIwtHmYp$E*6c+nYjzStwrn$YN%mzJ z>&z6{XDs8+EPg)U?{z)TKhGb}^PIWvbIo$@`+mR9nRCBi=kPkX&{+dreO=J8 zV<6D6qZjCK2BZTze(b;UUw!<)a)RZ*n)Sp9mJ=sgPoDgrgN^;vNj7%2lP6Dco?_?t zuN=KQ&B<~4zYqUi^RE_){|^UW^f)gs5^UPJ`2l{(X2-nAGHoW`W{NJ>dxk-4g(dP7b9riRYld%Ak} z^$pA)J+`p4vbJ%0=KS2{g{zy7ub+QFU{G*)L}XO-+nCtoln<$C=^sC3UQ=^ z%4TH#r>{mh1TL!(Bq{$v`yXWg?|_B<|3dbE0sFsk;X$WajvWmi3l9hiI+!bIxG|{_ zSwS>9v47!W>P^=2eyp1(pFPmq+aOYv1M{7qZakS07LotlBu5+-j$BlrTv^Ty?! zm2DSzUx_vZkCUU@OoRi&Mu&(|c_f#(M-#^ao{RM!Sl%_W&2lLY4Ctx3S5T34R%P3D zp)t1~+#?%4t_oiQ(B4EYv+0JRv-e3X@6G9AWK`_Z_whCg=jDeE;Mxaz2R&>RzDPB4 zi;|m2KuqK!Z|G;a*W4IZ^O~!JI8_Anvs=TD{gewj4Oi~d3ix-DHdtxC2rwW+VWDxc zW18Rc+-!K||3gz`6}wn~s>4*%)Dg0Aoe=OCy+Wt^>_#=le4x6W4O@rcBS-fhf=;Ny zA~oisdql5nYFUQ*J15zEig{w<0Z$janw1vUko!+u=*7r~JJxHk@pH@zG0|G0$5 zN~0DtoZ67;j5?Jh*1&~Z5b4O>Ly*R>kt}QM6XVYBS%X1o8?J0(>$`^qy zed4duKm|96b5s8TP-59d9OgQpF+Ztxp}{ce1JZA0w9F!lH@Ahh?lpKVbKh4l3?T+M zv&Hyv*`WArw5vzujDC6dwO{5~*_F59^0}9|trUrf972d$PB@$c4neeYbcdQIlM{da z?`^ubl*jEli{ix4Hanhp6RMvEByVv5wRkUi;jgs|j`!q=TQ{{xf3kbyU)H)C2u*K{?zQcJ#LH8FBpL(=U)*p1q-9?L>=^7umTHRW9)MQ{ zD$37Dv2U1uTdvXkmEJ>ToT_of{lU>GtTTJhnh#+sEY~HLNpzKZ_;c20zY$#kIgL08 zgi~^frzK8A-_JF)jWhQa$P19T=Ryc*gHA6KhQbjhc@Ds;ILvlD(N}Ng7u!uD zCWeuPRCL3f1RnDw01?r}VdCHDpkK*eE5hg$I z)02ILd173(lyC@2pE>0tihN`_i_u`@Ap{BX)^e&_;xm66cyE1cjei?aNysUV{XSVr ztfdPVdB^~9B+=TtOmZ0{3<`vo=U{G>|S$%i-Os>wcf*OTj`Rh)k9 zX@HL*z~smx!iewM8oI{KOSHV#??STYX3|TXB5^A+N0IOAR_RJiiItu3W$Vqtb_TXN# zpPsgtH_SE=OVt6=Db40aXSmLUz_X_`vb#_hcP3&EaD{*q^Asf?agHpCxD7DMr4!`Y zew}#}B~Zd>kx-g%a{HNT2fm!0t8-ej!ccICKkwfm=rho?W;*^XT7N`g^Y{JjVO!gD zKZ(LKx6lS;T>H>jHwXSqA~Z2=!I(VJv^j1==nA-inlkT0m(_w}U{&es(nKyb;%0aW zJ}}ynqP;k#D(ZXts&!|Ub9xrfEG`R)hn|6m1WszBh?C`%^84c|nMJ&Tww+DlKXe;@ z^jVvlXouj2COQT=bIkYb-|v2?u1@)FiYqB2*=%ii5>Oz7W+uU9eM7ij(3~CDbL%BG zTr9$3l{M&3dN(Qw%CBX8x&g|wH(>ebDX-z=yFRIfSDKcRg3MJWDe9hfcS!X5 z3MG9pIu;{jkAERpUp=>GsxWPSZ1Mc*#XbJN;B#~q8Wh-ROM{3&E`A&JYd&ZDJ_xZG zT3CFh&BSb~JNTwHf?vUv=r+CKG5?a#Lr?Y7&z+ zxF{LRJ$UI(dGlK%wVd~KL;f0c2Ub%W*+Qp&9E{JO1XN3yqs)twzV4a^nEJGlYFUAc z>fSi7eRM(Iy7!}01M{UM`x~_Npy^8MPtO8}zL3gZJ^JR~6s&FDVhc;anJ++i5w0Ux zR~Yx|aNr&4(vV*6Bih~l%kD20w64-D%i$WnP(hVeH9}G%9i~Wq91%Ooz3gllOF^GP zT%p*ZY6MDiYf|6VjMp03yVt=5}>HNoG|3&cuBHzVy%bo?{Bbg zvz;=BAl=rsS-S(4jLi~VpHXdY$m4TnOSU;f1e4P+0NO2aeL}T#cd~{&&1T{%3DfXq zwyiEi1_^eVBx3?}EKSNnoU=r`M1|BQMQ-?k9 zUOKq7#eDarOy639n`ZF>RtN3nj*%g8i`uA0{+#MPtu*zl;BEm&ulSF(d!diX%Wb*B zS}ug|=!J*XZwQS3UcXZc!hzZ^Dhd))Rr{Uu!aHR&n{#gWsl&B`32LfU!ow}4?0t>8k zo<(g%i%Iz<-dTIQQq5ti^k|DRF{vZz?8<`Z`4NcpO7#@V)iB}e;4kD7w4?|bnt+b= zD=>?1otZI8*9*YW`%0IGe0QfBiO>Wn|6YRmy=oj?|6q2~}=RH>Tnz_Y==eYTCUXC`5nOBGz?I{IYi~GxxTaI0Pw=|GfTjN%g8m9mz0l za*1a7H*wSikW0%WFTGHqfg?C8W-iEj9e=azzeh!%Vw4?%7R#ZcOzHW)5(KX@a7m{n zGX2poiM8ujCtFsQg=HAZrNUu{z6~PU&r&w6JB5>?SG>OZHq2 z-!+-urQc)ZsFqity2f~*(+U%xSgZbIq8}J=D9QPk}^&M8ee zndDm4{+npJG1>cDyfTw0?mo|H$Qe`E__6Q8zbQed(ka#Ut$KoFnJYEvYhx&3P~`o&PG>LjWi0$t2P zN;2Z1ZVBdhfX2mE%`Ob@q=yOp;z3%a8o%A|P3aOHJHM*B@>lJ2MY8rw$unY|j%$y~ z&0duo{Y}j;si*Lw93v0<0{gZKp$hmcHuq!tdHl)86>^!lNP2W;&ZG?w7W(}!}b&ug<8EbXpNEW)H20FGD78xuRS9)Y9$5==db_-AmrY5ptFNNyojf!`LSOFGr9Xp5Pw1hI zY?=U|Na|gmCM2*BcCw*e!K`yNtHHAm+T-6>NnK~NBk}J^M1}+rwGAHw3B&{`Nxvr^ z&Mf<1)WP!pUVvxEK|r^>=oGWsUbu%gi(l!+x_W-v{`lpamkAt3 zncc$%uWi7Z+LFoQw?u|#mOD)Q66`XX)_?~RqoIJjz z=0|Uuf1h-2@IgNnOzw@uKFkH=HHGFg$!qfLLGUMU<+{pDt!ma@WddxmOP*MgFJ zA1C$rODF?xGX(Nv!;7r@c0@-{sS6LvZrWnwV1nzroVpDSs57qA8z*~dq2>XbKiU!8 z9`Nk|f?{GNQvw+6@5MXE3kKZa4L_$QgrB~MHN!q1!bi7hxO7hAh&?f=K)+_efcoY- zDZF?aV^mlD>)Q1An0dacpk|zlcs|{In0ZD=F>===-ko$e`FW0!{e?@*PRUupBC@Rj zcMwhTuLEC>xaR%QO*8mEXL-nMnNyajy;&*^35BT>5C<=e*KtC zNPLCqY1+c;k&Gir{}76mf741fnmmj;)#P(RaP~9^f{QGW>FiF-6`3m;-{dUV?2DSjs6hmi_X#byyu$Ahb*-~s_2uSn?xIhR zGf&vNLG)tQf5Tm$K3SUf8Mmwf*o=o;{EDVK(JNuvW^HABO6?!c#5pW*KYy&WyDXBp zc>{-I3RxYkp%dlHrGl5E_t23J7Xil-x&noL*rTq|k~_rnWsZB}s#=517LtcKjMN6a zLlh%wlUN;EBWzx#naFqDOSAg<&OWrfqlJ4B9SM;HDg+vfnq2u@U$Io;|K(D4L!M*e zfk@h2x+Wk@u3zrP7gwD8Tyo9k^Fu_DV+XTty(yM!s@+G`|0#1&0~?OyRNegK9z0?b z7)8D9B%E@(LBZH(BW1L;<{_mgk|L!E4Qm>T@HI6{xmU|V6y-!K6zc! z9W4&Lq1~a|;w0-Rdf_cxL52Dy58mlhf1GlOgWj0ec>1jc4vs>w615dOkt~$6Bby3S zhagwC^UFc2*RN^^kY*vrt5B@WG3?nV!@IPYa950EiX*S0bK4$iC;#y!W3^zB;XGTO z$L0lsGKP1Pn~^adAq!D;o>5@F%cFj4z!s@7qG$BtgWEe^*G=l-+j>k+9U}Ja{53|A zf{Le5oXNWF&DSGbEw`Ut%Eg4>W)4a=!WYH47CNA;1rir0CeIT-vwc|qCsB~`&xKmX zNJ8E~;sd;ae!_!ow}biIw8`2C!q*{nHe4w>d(iExzu>gvjJxJa1D$VlK;2fQ!`YKB z#$o933qw-C_DXS6?peTxnA;6Kg@AkqRP%u3`v}#5(uzObO}})6AN`ild|n4RABgV8 z3M?C0c4tiNEl<0rsT1K*FCJZ4jMQT3enJldEGcj*jB*#r1`JGtCFu5m>EZUn}MU8POwRhD5^go`uV0vA@CO)ST-6IXa^5Pozgx_6% z@T!b4zgLgtW6A?Ih~&EFnKRZD>-KZUqLT%;SdjrccLX7yhn!>t1O z9!>n_Te%TwcBx6dgIqFhnHPv6Xb&YUhBNtOj&nLPs~S{YI@BiL+i-?zTGtM4>iO6- zO;+Jmzvo&sq}|UfXm11CFcDFg_&7X1JReP4YpsXcRrFhYNx$0SAL=*T*$6<3t?l~Y z1ZUgNueh_<9M~z;ovwvbbzP$#704kkFv9GvQghBHbm^Aog;8HCgv)0uqaa>VXsuSG zDgjJ>$aNPeA=pW%kI`j)oJ(zQEW;ycZ4#-Q?RSOm2UMnsLHdp3x9{-d2r2!dw!H9W^OBgmr|}kZy{5S+Vu9YSQMVnryT$f-wUpvRCAZ0PmwLWP;Y%f}{L zavd10%yT6XbS0V&Ld%n9?!|ua-#5Oraw*=6QLE-+r!6P3To8^IxdL?EmsqGmJxZisXT=h!3SXlTkT{Tz#rsSBB85aF%N3k0QT(R6xJo>-%B9+MK z4&7>ULuA;gI`)_GukMS2_1{``waV))eglf0T#5brWfQt zt+;T6HbHYnTmv8C^@rLuWBp3Qx5OfWWA`bAAEW-aW#Qi?d^?2|kyxSstT8xZrSImA z#@eWux%Jt~xhB^oME@b^$LSYS6YNk)d9P(ixBXTb}#nmPE_lCA}pq12nbpVu73e5RcLxs{wMF};yI zGg9&|7ux;7`#ar)nt0X2VOlDin*P`$#&;X?kWmYLc?gOJlg$o6=l;U@Fw%78I31kI zj1t_%#Zmahv~9D9XQ$${U^lgb^=M?D@Ho7_e7{Z8OOO9=4hX2rx4x}3f?;*D$+zi` zc~)C9_vif-r8`(K><|P;zj2TmFCj0-)`}*unAXQB^8dTib*2LYRUZJtjLk}-;QumQ zv5lHcwx5pIABbB9Pxz(xGmkAXFXSExgAwvkxkSz8k9(4K?)ba681SLJg#;8=Ev>$~ zwNc?XFUMKk&52!XtotFzWh*{dhCEn6$o%MpF}pbaa}n${v9sT00!T+p%4#o%(c#aj z)nQIMVoGgdrw?#v?#1R!p%C78e@iPtbUuC9|Wr*~$pP>h$jA^4kPf zGWH(*J6C;*t;9_>2d851(uV(l0Z%wO$|>mT3Ge4)eLA0d^>gzJOI5Uv?4-IHXY277 zHGx0Fjv*csO+;P{&jGoe6?tlzF_Mbe;ghX21Hc*$^y&xF)hJ+^?zny=0`YBwnuFrun8uNAFNS-$E_0VbgvuBC2BRltQnAj+Sx z{-nyPRzD@yo$+VW1HwUn7y=c7GgT-?sdFE0+i-FQDE%bmUFKNR0=uA*D)MTI-Lh_FfogJ^PTW^9LLW`=%J~ z$jIMQOoRwbIFYIEKO0|e3V$(!V3)|p4CE}g2?qbEFCvJZx>rQa>aZ@j*Z%%ZI}w9o zd{G^W6tT$mqh0PJ>eY^`nq6!i-~GfA^h}~C+BkJ3w>l}pPc#XHdWv^T!yQDudFfvJ zwlItD)g$pr(k$*T3a>(*^h&xO0*ThOeMj7R`(-L4k>lqa-X3XxCes4Yq41(2k>cd7 zXoLm+anE}qODXI=o7zKxp)?f7ZYXzG#skb1k+e@Qs|HDYpO=GrlpUlA=(DKy2MAA6 z^C2i2#g7ztVPhFR`^|P$1M#}=k4t#gUUx_=T_}z~O~@ZASuphRa~U8R(w`kn`uUu` zCtTKd%pp#B?ZSu>S`WuBjSI({VWA?W>Iv+ju!c8$bUoaX^8DfSTL*s4cJS|4GfUo|=FT8(M+B(kH?7aV`Ye9T&8 zz-J(GM#`WQqi#X0*^hc=cfNiIUG+ltR$IF3FB0)Ob>3+_z z$8Cj?96bbX9$Eu?!|-*GR)2C1x%tuSqJ zQ=S6Rd|FSv^?TA{6^m%Oe8@pO|NgX=brJB0>jqzWmFt7^o6ED7@0c^F>dm-vOn4cm zIisS&Eo?s2`q)WT=}Hi~OcJOrL|gz!-Ual>ZPK?Q%6wJ^4M!~i)G_41LETac@k*x~_*nxhOCd_>K?o6(67BP= zA))GeP=t1>f!k*Oh)RR!9`*+zOUYWx(efB1_?7>|^xsW6e~7SYk*%(#f>nw0WERn+ zrd~&FNLcJ&*y4=l71-MyH^P{Wu(=4#=`jWfjmbt^S;M$Y1j_~leA8t{3|)SQ*p+I z)_sun9vxaKd%}^Cn|faNq;`3f-=+0OuH%;V4GptjUs)txZ*}4LvZ|?&G*rC@ZaV~p zrz1f%bLc5oufQO6sqGQNX8-d!69g#PTwJytbDX@@I~m!N9JEARa`BPf+Q!o3dnSUDQ+mmW0<+)PW$jHqR4* z{awuKNoI-uiM^e_Yn$G`OyYCN?G$FnhV=N`lvQCTwRDc#;k$J%%9$$ZM| z2BYJy)~_EPlMAuzMpf_A&zZC{*_cCs5@p8P_VRlkm5NuS&Don`_xd(QF+VA+>l(R{ zIr|1NiiC`7PO&$S?HrTn!I<#q7E2iO>a7JiXhb<1@ULh~FimRY0)2XOxl`J{X#kaj z@V`;K1Cl52AXBBowM=d_7KPR`r}KO+Jk}EUZSNlW?KIS4lV0VzrwZjjRlxGYXnQ zTT+|AmWEz2XYo_gMNff#qEtFLg|Jyo0mJIwf8F@%Y~jlkzy}RDyJ~d*sD(AmJ<~0$ zjrY#kBQMkWIjQ7EazK>SaBcr!KRWz(Ttxlc zjHRdK-0r=h=wRp@h$iABrD4Nxu}1^@wm{I3wF!LP1#f)LC1>J*=SViLN$--UoewnW zf+&#x^n5B^9me94VOeMHZr&a%Y%Ie1KnsYhHG>jMKSf^EWceT z4T>`2loXiH8mf*v)?H=pk|DWfdHn)gx)9683DPB&;+ypHt!uj%-b7p}lac=x#cJ&@ekewD?Js>Q zPbPU)j4{s|w0v}P{BoDqykaNzgq^iiQaaw3N_vY3le$L2A4?bO=BV6aD8|T|A zwIz$o@piCqPd4q9Ru#pxN{-Uee`-c?o1qZXF0UM(C)F#D!T=}L0prybpL^?jqwq%? z!$%~RI)WX8$k<}a2%?Rjn`c$UuT!sYHwcLyTXB#l>)fRT9OXJJ);tU(G5H5JvkUtQ zhO}hlF(b9d{fS@NiS{mpp}3TGFppo4#Fd&?^*QI0FLHGvt*B^A;AR=!4fsUzrL4je zT&3Pcf-QMoTeCULokIWgZjm+1M)*Wu%?>t;7jxHMW}zxG@{yPA1J{TR>wk#eWK}@=-sSH_ zCS1mo>$|kwVVWYzWrLI4OAQ{a{7vrCcuara_AbxiQ34htwYVQP{Szm z$<%UBacZ<=PO4VKRh2oA`Fzt>?7Rw)M=3$p5RLo^^PIXIPFZgnJcGBf(ct592vq*m zTF#}`L|aj=M|~dkf!4{lf*Zx&!|tU_bWDCA8CmN+t^UXLQbI)4P1dV+%Vh@qqGi^HmJjcOIpGd+jO>@ijrZKm=#sy39GQ^s zkcsV*URWHM2XdY{m0{U20Ppf|$bjVfR!`gFa~`>Xp%tM6#JS^!ijk8TQSt|O>VAam zhriYPkXg&&$Hp9LbE}A!!sQ#&J3|}#WKL2;FD$$o4?sIL5W&4+K4or#XVd1Q%BN}rt=+wdielP;?b&gnr0hqGOSX!<4jKNfy`agdRKrB zKFajTxhP{&@@HlXf{om%dsAS^CUfOWqWq0ovnGfA{UFbh5O4vQ6C%U>2_u^gMUUD~ z1Bs%dH1-IMWP5|^pVEKtK3S|9DhhGwL`~y5V5e)ud z$VqJ|p*rrj7WjtF+}MXJ!2>CBNk#3x4?7+$^X6yqYA&^|5n=Rm3)I#YKIYIo6nI}e zOZ=syP*AL7-yiRO8XDX3{h6wg>Oa@%U`&qv(5Ny*I_h}z#9yNQeM$cU!A-1Y;b^G% zM&m9w{Tz+SvFAi~={BQtF*4-~Ch9n!KBcIV7JEJ4>21#BZNPYuzp$Lhi^y51pn{*` zTaBU}SA_(*!NpYF<#-&Ac?nh!*z}I zR|``Wt;dp7IV}IUJB)s*tWb1;7lk?xZ$TZwXJ(LHxu+FWTTwk7s55TKs>RVI({|B8 z9=f{IXP-r)oq$l9Hn7zN=B-VN5wWLBSkx#m^o)Y4>N{^9V?7F=CxtJtLAV1k?uvwy zDPLEUU%Z}Otr@tPhPP&0;3-pQySW0hVs_vKqcAGAGYB(R1;=FEM_-c6K%ebv0n!$&`703VrqSi- z(+%|lb;GZXkD-4;fy;*=I{zVvq_$ob8ba>xtx~A_{Av2aq+*uvvrAA}umR)N5k-rj z2Pk$90aCp&b)_)4e#p7=Nz`w${|?BK*^6Y;>QAq8)<0>r-4u=TIl#3>6$tmtoiVuf zSkY%+nv~v|xq#Os$f0T-suvkop=@*Q)C60z5sKtqe&X!}%bY@_AL$TunyIiRagzLU zfoCtUq-I#INCcVw?5731--0ywo?EjD{`n9Tb_zLclaxT04kat0wKkylBgf3^#;1Oy z& z5`tQr!H+w?|GNImwNs*T5g+lPF0Mpg1Ws!%^Zo0c%RAO~Gy#LiSY!AAWaaLVd>8cE z`$orqBafJT2v>4WLEdcK5O=eR;C4qz|0@66e2fdrduQt?UZE`aDntUOi zvD*->J|KlZtdHO1i+Sdwip#i*fM3(fZ(pzglLa{i;U2ZM1hO6FsVOgtbxLbV@gXcW zxi!%CBrfKd|EL}j6=RrhYa3pd3C8r|<{Pni-K}nk^R+kTS%JN;YZg{e_p!p3d0|b0 zPhaIBhzbQ9$+63XiLE5Iw{`BCro)21HXeCAF&c0B0OIk$XL(W z+N2xIy$Rt*JZPlcqvlK=_--qW6~BBZC0!9LxL!w*k)}8_5bd4r&`#z$rVyb#JgF>V z&cR~4XcR?nea3~--!|$tdA)E$ydm@4v4#^bUE%}K;$vgXb8~yq?QvTihSw;!pN$LH zI{kqtC;Vo}iZ;qhJjhROB%*4!)=Qwho-AwFdXsf+@U+uZCb^7^tX&{umrcXvd#2JNtYvowJl?J0y?FewI)w`@H zp~0(;1MCfK)q5Wmu2jfrc}G-^?(&oU@|#Jn14M93wD9?!7gsWlJ&% zE9e#J`u%ZUkHhyXPt>yT;&TihFn2BwTp$b#^&Tx|qnW%(=T<7HLeogg(TiH5-fM}U zDrJe59pLaPWPdtT93zIfKT(iC(jAwp4Nz1UW;q@AgYLGON6d{r1l3@}5YiO$whT;u zlR$alMSHyKDf?oq_jb@~>lvbQhF3{JYU|Qo=)$Kz%ff@oYL%^ptv?D2#DktD8;qEE z;{1ctkHYYVWDi*t3V-Qj9XF3d5Z~X59o0sUN)#Uqg*YPnZu|da!#e^wXHm7c zMpC>+8S7X2djHs;vo8*$XZ--;m}hK&@Y4Y zES0CAhz=*MlVpclL-mhtkw=MPs5_j9$0C}bo-%Bo7g-Ak*!eNftp>oCSlsN5sfA~_ zRHeq(6g8es}>>+(S9=)fG`=!rcyHJa14GO5t zyd^1Nlqu7V8&h36`YM-{BpSFqN+UdvlcrXrj(!N-d3OxmkSA$r@}5XJ1G9+|xRzqn zlX~-~*~0wvJzF3-4BiC*Ha6gMXAci2at-fsUG&#I}oH9g(~BH~GkE zlsM#~o!y$oU3o}R!LR!_X0wiS`8y`RiVHsfAwT;)Wg(XCSqVS8n#;Er#NTq8C>tK| zrCLlSVZWYcIgI+2z8+9<)ZL;k6yJH>D*L&Q19>b#TDV`>lMrz_j8Vaqd2tA0W3m9c zp)R(V?S1^6gtr7~E*bS+7HKkiJON7ep&VJly=bJkI25ny6v~@#$93zhzj5bM9LsPP zl7A=X;&Z#(>CY(WRD0FSg`=$n2lg}OL%+Ne6NJ7u2Mb|O9_4^#5+pvM;EU5zRYumR zF~jVy$Oy}Ou4E+V=dm>j8N+n*9m( zc94Qi@Yqx22R!60VWDh>le^u`O%v&I^0V>l>gX<)NRq?({p!@qqfD2EzUfTIKu_&o zD?LS8^7`FnD$Bn3SThgKpud|R%&|I?SmNZ1l6AGF2R(PyB~Kp9$6RC-Bd-AaohaVo zF^DMLAl-V*;=;FWRduI(aAqN?X@Wj9OqMuFk#YbU=-x>L{jBm0l&o2G)Xx86?nIWJQwr=jo9L{Dk zCR4e%g5bxF9`H_XO7l|Y3PzZk@JD62I#OgTqo+26U(RO-dsZ%ea*%&|wJA9~9)|by zZ-8C;y#-upXdmK02v4kQi7u|K_`UFOxh-p;cFiYtiFuBGfg*-ISAl?*!Cy`572~^u z#G5de5U+2kt{u4`GbkUx*`~1-o%3^0ziz|H#Qu&;=91O-J~Qs%qit1(pt_^flyktR zJ@D~EP(iKNTW7H-%|LqjE`+6&eMRrR&s=(=SNmx|RkyVu>#YuA(!%XC@nMw_>5E>7rlzDSFmTfn4Dq zi(_XBa+c>Yx>!m;Hz(tc(bN0rNqG3D48cn%++;4C!q>Is?~4}r8z6Xt?~aqzIp++s zYuJiV#5MJwX0P<&SUSrx{5f6e(-Q%XB7^sTlH_k1sJS)-`TRWSZcS~SkDe6i4Z{c{ zM;ru>!bh%(C*f+>W;0JF3YzYCfSF&mO{R|)3~P*Xs8fT+Zc}B^SG-mN^}b?^()qa= zsKGcRi+e-wGaUlvsD-_;*`6BGG*lMViFxw!onVr|UM?P`OIC|UJ)3Ekcj}BOSgo%r zjU7BVUn3)()3UER<}4g?Q??lC?jmlwzHr3u7h53m6j&z?h@|+mPY$o7CBOaC-0)aZ zR9iWAmvab^$92p=Pue1^f;_O_Ho-sRf4r8h+Q@p^!bc5cq(VSPY+tL6>;$iW%Jp>G zQ&s5qlV>~LQwNr|WE@qGk&d~D0Ou}(<2@@XRTB8|OTzMAA~*J&R?OF{(wj|CZIfAr zlV5kCcupp#bQ$6%85RXOkB}l)w07l43y01Bd2~Tr{l`*^4|ST6cVukgygC5N1tT82 zI}^CMe&$(_bQ(D|J;Y9P?1B@HC?D}5WY7)Tuna)aH?zDH`RN0SOe)LvGR;1^)S7*sBxPfn}RF)IYHe*gA=7^^cG76az z^lOZdGemTPdjc-8I5pzi+-E_xvhc_!K~Lb57?oVSIrYa80ppHFa*?0ecu}@b)Hl56 z&^sR9=ebEqu@ld2TZlNQ&m?bA-;!bBThGUeC!UOX$h)WSTck+w|4!8teRT#t4fR}@ zNkBP!o^TU!PM8bhoN=}lmUo(7qJLzJh(kFhv(?8-S2y^}Jxku17uoVTs0Z^bWzFTM zTONW~%F+p3veYL>f&dEoY@EE@;a^Sh?3wcz*ZxEL`K|wj)$x(M-;u(X__w1wU^8$M zu6rS#DFx(GJWXism1R%+-Ah(stL}C?tv+ox(I2(Ilr=kwUg8!85=f=e92!{*zKs-p zDo)9XcHOXrhyqwjbWhHua9xUVyh`?^M~&N+m#+QusH$EM^>*-3R<>;MDA;E#uYZD` z)M39<$??c_A~SaR!(48Fke==KOh|bvw=^McA7o-!p@U_b<&L6a{9TPR+Sm&;?s?Gph8cpV@}^9i!sxT_Mn;?T)e)0@g*Q!K>VT z;4)R}$xmcOk{wcZO!P5Od+4_YKs5c_7S)|%*$IwlSP-R~kcuZND-VYAw#=n#qwy|thtNSJyJRYzIS|ns}mzO`IMZUb=xIbd$_0I52uxjHNDJeI8Qzp zyH>sVY!*^|F7>7J`oy?DHgmltDJN-NnS$+b5Y9C_+Vgrzdnp&5tAQHwhl$SPrDH1#^(n9r~)i@Arh8&w`oM~}6?YLH^asBrn2X|=dK2(~?N@p3x zus~`SJ^38!OFZy)8-=rJ>QiSoE`A43HFO{^Hi2Uf9S#Tequ)0H6L@m{s0aTH@@!kb(IDa8h;t>*_#S7um2P5Nem% zDdM;Ez%n9@@AOVP|6X((43G{(oM|0bO$Xkpie}P+E`9fpK<;>*Pt4wNX!SWBc;>#` zZok#W*BPd^d;vjk*dj5U7&qt7s3mE)ez)q^O6QFLo%t@^8dTl8Wc9Pp%pXhG(QazF znNILR;%7$;Ekj}bSR?M^WXpA|T1Q+^i)`WAmyEmnL)yL3gQrAeB-<}xLM(sx()r^S zr8jOX_9W<8Q2f(6*c3`=a#cGUh=@qW`sU#%MRr&I7 zKb^$<78ErVfU#|u(6mdgeX2Lj^FJ!eLlJ4{dG zA7paMFLf7jIit%3H_K(qzbpJ?gw*`oB9CLv1MWmkMVoP>uns&>m;O&rD$w^`#<3$LBXa7hEMzv^)_MQ^{{-F$A@^SKk1C3CPpy^PS~qk&?O{51HL`#$)J!^55{_@OS5Z6(0nr#cb{ z{HyE#0F7P(ZxehK-zScSpQA|v{jXA9fMbKly?q96h``FU8j?|d>TplteJr=~vE}7> zTynv;UXxN@_q@~9dEZZ&@{jG^@t;fh>F~Py;r{@Jyc>CI_GykUBtjx(1FH7Ld>`O{ zhx&((e1D~UD%0ipwcFukZVx0#c+GyN{0RM(wQVoPQQG*kULGj$#-*dl9g%gy?qwlg zr)-M+{r#vu5qOLCJN>3EygP5Il+?8Ax74)DvDV)$mB-K;`z{L1a(GI4Rtj3B&Yj!6 z^n2=>vbufrK6iC1^5`nZ}dROXxi}5Nc{1yKI30K5V2(FU^X}a4>XU_a|92&)WjY(Z6 z?=|Px`@AfrQ!S@bgc|2g$?s*NUo@|N$4996s@)V}!b0Z^dSrW6-i54qb2j$TN~L5U zBt!4N_}7DKe-pJ|5*poHPEyEp)-Lm<5=D#=nuG?ORt@zeo3Xh2~{7CT* zpq3hTpBaI^&~SIw)`#Q07ss>3r)ZZ0$`A5fgYuDH5wG~t)Vz;B+KcKk(m0@ppmkq_FX)jAUJ2bt1{!oZk{VS2e3? zJ~;4Jov3Jc*3#QUt6dlW0EClqJ0xz9W8Crh*RrYPI64lLW31Nv+dj?ozf^cJTu)mQ z8t!Q-aHL>$C26-?O%veel1*mmVeYzP2?jBHh?L(LUusxdgR!dUms6;`!gk zJ{m=RD((qQr0^~gfJV+M^I!f79sd9Y6ZoO~7yK>pC+y>?cn;#!6v*H@tfi%v-Yb?O)_V>mP4HGQ;hy~<>0c};pzKnZuCpb z<}M@6X=8DGkd^s$f7ah|`2F!OUA3F`)A8?zG<9XRlU$hGD|dXJYSxi4u+(JHuE=aL zVY`rhs~^JFUk&~*{?ooH_>rpoPE7*aSJmF;(3Qw_W5BCF7PW5*cn`;IV`1VIy-4E> zvybB*wf8t_a?#hJ^3-P)2H$g?_>H7!{uq@akPp zZ-Z?cz6)URYvK69P{LswH7MY4^WeLslUl^pTjisF1F;9nJgW5*VV?`Lfv$rK};DCtFi zEY!@fN~63ZC*AJ-Pp6(69nS4p$H_Y-FBS6=Z4jr8BxhsEF90cH|I7}BG5$Rlv;MHTh9RrM**rw4T!t}6QIq>c>QtfiG= zW8OcSZ1qc@7RT^=_CxS*i)`GsuP&Pd$q7Fy4hhA6a{k{^*nZHzwKkcm+TTk0kBCHe zE{=Fy;)*NkygH{CW|PFPjr&D^EA99nn`fAswQ149N#38ir{I3Re#IZMr-ArgubE77lVy>08*ZvRWd;Y1RFORSMG4Tc<4W5@1OCvYl`=pFl&fl_^{1j8d zKeQjkj~@IO_>EwrRPgSjJlcJbP-A;&vV6n-&;vA4UOoz(aTrRSI=-T|7@T{6?hs{n0LCsVbM9A{`F zkEMG*?V0f3z~2GC;E+G?to{P{j_+CUB${#l$ka72_0ESUkZ7X5-km6_RN>Jieoa!e ztJkSgNnPFkC*miE(KH0Kxt0WduqjQ$H184XQ|niM+PaAOm~2WYuBpmNS$8;_ddHzp z4Io|Tfz^8&`Y-+oYvIG=uiDbzM7`B!vbVI-q`C&&;IT}ceK?|u`Q9&X950NL-BXd> zls2N2d?KE>N LN3&P6^+*5N{yKkb literal 0 HcmV?d00001 diff --git a/modules/dnn_superres/tutorials/benchmark/images/bicubic_div2k.jpg b/modules/dnn_superres/tutorials/benchmark/images/bicubic_div2k.jpg new file mode 100644 index 0000000000000000000000000000000000000000..56e82efe1ef7a796b389dd97da724a64d5fcb404 GIT binary patch literal 10155 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 jYk}iJG}Lo&B~5YB6#Tyelx8eO>>5vO>gW literal 0 HcmV?d00001 diff --git a/modules/dnn_superres/tutorials/benchmark/images/bicubic_urban.jpg b/modules/dnn_superres/tutorials/benchmark/images/bicubic_urban.jpg new file mode 100644 index 0000000000000000000000000000000000000000..506919f536cc99be66986be36daba278ead6db58 GIT binary patch literal 9306 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 literal 0 HcmV?d00001 diff --git a/modules/dnn_superres/tutorials/benchmark/images/edsr_butterfly.jpg b/modules/dnn_superres/tutorials/benchmark/images/edsr_butterfly.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a34d64fd1a8f3434fa8a1251da7dd8383193fc29 GIT binary patch literal 17231 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 PCjF~ELo%N&eGmWH@Vp~e literal 0 HcmV?d00001 diff --git a/modules/dnn_superres/tutorials/benchmark/images/edsr_comic.jpg b/modules/dnn_superres/tutorials/benchmark/images/edsr_comic.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bd2e1bfc385342aa756585e2b4513a87d9719a99 GIT binary patch literal 21001 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