├── .gitignore ├── LICENSE ├── README.md ├── media └── bear.png ├── slides └── _bd58fd3d1e6d020517f56b866226174c_slide01.pdf ├── week1.ipynb ├── week10.ipynb ├── week11.ipynb ├── week12.ipynb ├── week2.ipynb ├── week3.ipynb ├── week4.ipynb ├── week5.ipynb ├── week6.ipynb ├── week7.ipynb ├── week8.ipynb └── week9.ipynb /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | env/ 12 | build/ 13 | develop-eggs/ 14 | dist/ 15 | downloads/ 16 | eggs/ 17 | .eggs/ 18 | lib/ 19 | lib64/ 20 | parts/ 21 | sdist/ 22 | var/ 23 | *.egg-info/ 24 | .installed.cfg 25 | *.egg 26 | 27 | # PyInstaller 28 | # Usually these files are written by a python script from a template 29 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 30 | *.manifest 31 | *.spec 32 | 33 | # Installer logs 34 | pip-log.txt 35 | pip-delete-this-directory.txt 36 | 37 | # Unit test / coverage reports 38 | htmlcov/ 39 | .tox/ 40 | .coverage 41 | .coverage.* 42 | .cache 43 | nosetests.xml 44 | coverage.xml 45 | *,cover 46 | .hypothesis/ 47 | 48 | # Translations 49 | *.mo 50 | *.pot 51 | 52 | # Django stuff: 53 | *.log 54 | local_settings.py 55 | 56 | # Flask stuff: 57 | instance/ 58 | .webassets-cache 59 | 60 | # Scrapy stuff: 61 | .scrapy 62 | 63 | # Sphinx documentation 64 | docs/_build/ 65 | 66 | # PyBuilder 67 | target/ 68 | 69 | # IPython Notebook 70 | .ipynb_checkpoints 71 | 72 | # pyenv 73 | .python-version 74 | 75 | # celery beat schedule file 76 | celerybeat-schedule 77 | 78 | # dotenv 79 | .env 80 | 81 | # virtualenv 82 | venv/ 83 | ENV/ 84 | 85 | # Spyder project settings 86 | .spyderproject 87 | 88 | # Rope project settings 89 | .ropeproject 90 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2016 giosans 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Fundamentals-of-Digital-Image-and-Video-Processing-course 2 | This repository contains python notebooks taken from Coursera course "Fundamentals of Digital Image and Video Processing", taught at Northwestern University 3 | -------------------------------------------------------------------------------- /media/bear.png: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /slides/_bd58fd3d1e6d020517f56b866226174c_slide01.pdf: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /week1.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Week1" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "Difference between Analog and Digital, Images andf Video examples, Sampling (applies on time) and Quantization (applies on amplitude), EM spectrum (gamma to radio), Image classification (EM, Acoustic, Electronic, Syntetic), [Reflection, Emission, Absorption] Images. " 15 | ] 16 | }, 17 | { 18 | "cell_type": "code", 19 | "execution_count": null, 20 | "metadata": { 21 | "collapsed": true 22 | }, 23 | "outputs": [], 24 | "source": [] 25 | } 26 | ], 27 | "metadata": { 28 | "kernelspec": { 29 | "display_name": "Python 2", 30 | "language": "python", 31 | "name": "python2" 32 | }, 33 | "language_info": { 34 | "codemirror_mode": { 35 | "name": "ipython", 36 | "version": 2 37 | }, 38 | "file_extension": ".py", 39 | "mimetype": "text/x-python", 40 | "name": "python", 41 | "nbconvert_exporter": "python", 42 | "pygments_lexer": "ipython2", 43 | "version": "2.7.5" 44 | } 45 | }, 46 | "nbformat": 4, 47 | "nbformat_minor": 0 48 | } 49 | -------------------------------------------------------------------------------- /week10.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# week10" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "## Video Compression" 15 | ] 16 | }, 17 | { 18 | "cell_type": "markdown", 19 | "metadata": {}, 20 | "source": [ 21 | "When dealing with video compression the same three blocks of any data compression system apply. \n", 22 | "- Redundancy reduction needs to be accomplished first, \n", 23 | "- followed by quantization, \n", 24 | "- and finally entropy encoding (with Huffman, LZW, arithmetic,...). \n", 25 | "\n", 26 | "Towards redundancy reduction both a temporal predictor is used and a decorrelating transformation is applied to the unpredictable part of the prediction (or to the prediction error). The temporal prediction is carried out with the use of the motion vectors connecting the current frame with one or more past frames but also future frames. This is referred to as inter-frame coding. For Redundancy Removal, we'll use Predictor and Transform as a technique.\n", 27 | "\n", 28 | "If temporal prediction is not possible (due for example to scene cut or a new object appearing in the scene) then we treat the video frame of the macroblock of the frame as a still image and we utilize the technique of transform encoding that we learned in the last module applied directly to the intensity values. This is referred to as intra-frame coding.\n", 29 | "\n", 30 | "We will also discuss video compression standards." 31 | ] 32 | }, 33 | { 34 | "cell_type": "markdown", 35 | "metadata": {}, 36 | "source": [ 37 | "### Motion-Compensated Hybrid Video Encoding\n", 38 | "\n", 39 | "It is a scheme of choice for all standards. However, all Standards are a bit different. Applications are many, like security applications, capture stereo and multi-view video, DVDs, ...\n", 40 | "\n", 41 | "For Redundancy Removal, we'll use Predictor and Transform as a technique. The Decoder is part of the Encoder. The video frame arrives at the input of the sytstem, say we have aprediction already, then we evaluate en error by difference of predictor and frame. Error is unpredictable, so it needs to be sent to the decoder. Since there's still correlation in this image, we apply Transform coding (like JPEG), so DCT is taken and quantized. The DCTs are quantized and sent to the coder. In the meantime, DCT are inversed and an error is found in the spatial domain, so that prediction can be re-calculated through Motion Estimation and Compensation (as brightest constraint). To do that we need two frames at least: the current (forward) and the reconstructed frame (backward). This is refer to as Motion Compensation, because the motion vector is going backward in time. Again, the reason why we do not use the original frame for this, it is the Error drift we would encounter, since the decoder does not know anything about the original frame. The parameters (motion vectors) are entropy encoded and sent, producing code through DCT coefficients and Motion Vectors.\n", 42 | "\n", 43 | "This is called Inter-Frame Coding because correlation between frames is taken into account. In case there's no correlation (like change of scene), we have Intra-Frame Coding, in which we have switches. The frame will be saved and No Motion Estimation will be made, but just DCT coefficients. In any encoder there's a Rate Controller, useful for many reasons, and has an initial Rate as input... that will change parameters that conversely will change the Rate for the next step.\n" 44 | ] 45 | }, 46 | { 47 | "cell_type": "markdown", 48 | "metadata": {}, 49 | "source": [ 50 | "### On Video Compression Standards\n", 51 | "\n", 52 | "They come from ITU-T (mostly for Communication, H.263, H.261,...), MPEG (mostly for Entertainment, MPEG-1, MPEG-2, MPEG-4), JCT-VC (Joint Collaborative Team). All standards use the Motion-Compensated Hybrid Encoding. They deviate by encoding the shape. The standards are generic, do not specify the operation of the Encoder, how Motion Estimation is done. This does not provide quality garantee at the Decoder, but it provides flexibility. What is proprietary is the Pre-processor and Post-Processor, the Rate Control, the Motion Estimation, the Bitstream Encoder and Decoder. Also, the switches between Intra and Inter can be Proprietary as well. Furthermore, usually there's also Audio.\n", 53 | "\n", 54 | "How far can we go with Video Compression? They are used by industries and are spread all over the World. Rule of Thumb of a Standard: Same performance with previous standard at 1/2 the bit rate!\n" 55 | ] 56 | }, 57 | { 58 | "cell_type": "markdown", 59 | "metadata": {}, 60 | "source": [ 61 | "### H.261, H.263, MPEG-1 and MPEG-2\n", 62 | "\n", 63 | "H.261 was one of the first ones, from 1990. Rates are multiplies of 64kbps. It's progressive with fiwed aspect ratio 4:3.\n", 64 | "H.263 had wireless as application. Rates 56k. It uses unrestricted motion vectors. Advance MC, with no loop filter, progressive. I- intra, P- predictive, B- bidirectional and PB- bidirectionalpredictive frames are used. Same performance as H.261 at 1/2 bit rate.\n", 65 | "\n", 66 | "MPEG-1 was introduced in 1992. MPEG-2 in 1994. In 1999 came MPEG4. Then MPEG-7 and MPEG-21 standards are introduced but these last ones are not video compression standards. In MPEG-1 the base is the 8x8 block, and a Macro-block layer with Y (4blocks), Cb (1), Cr (1), therefore 6 blocks. Macroblocks are combined to form a Slice layer . Several Slices form a Picture Layer. Pictures are combined to form a Group of Pictures layer (GOP). With MPEG-1 the structure is fixed: IBBPBB...P type of frames in the GOP.\n", 67 | "\n", 68 | "Before encoding a Macroblock we have many options and decisions. With an Intraframe I picture, all pictures are MacroBlocks and we have to decide between change and no change MQuant (quantizer). With a P - predictive picture, we decide if the motion vector is zero or we can perform a motion compensation. Within that, we can choose to encode as Inter or Intra. Within Inter, we can still decide if the prediction error is Coded or Not Coded. The zero option is to set motion vector to zero, Inter, Not coded error. With a B picture, I have to decide if it's a Forward, Backward or Interpolated motion Compensation. In MPEG-1 on average we can have I,P,B in order of more to less bits used for a certain frame. When B are utilized, we see that P is predicted by I or another P. B, on the other hand, is predicted by B and P. This leads to some buffering, delay that comes in.\n", 69 | "\n", 70 | "MPEG-2 was introduced in 1994, and covers more applications. It handles same time of pictures, but now it encodes interlaced videos. MPEG-2 adopted a toolkit approach (Profiles and Levels) and a scalable bitstream. Interlaced signals are visible in certain displays only... MPEG-2 supprots Field and Frame Prediction (Motion Compensation).\n" 71 | ] 72 | }, 73 | { 74 | "cell_type": "markdown", 75 | "metadata": { 76 | "collapsed": true 77 | }, 78 | "source": [ 79 | "### MPEG-4\n", 80 | "\n", 81 | "Deviates from all other standards. One of the major differences is that it looks at the content of the video. We can access and manipulate individual frames that make a scene. It deals with both Audio and Video objects. Provides new tools, merge Natural and Syntethic Data. Robust bitstream and flexible. All possible additional application arise.\n", 82 | "\n", 83 | "Elementary objects are decomposed, recomposed and rendered. Coding of Visual Objects is done on frames, arbitrary shaped objects. sprites. Particular attention to Synthetic objects too. The video is divided in VOPs: Video Object Plane. VOPs are identified, encoded separately, multiplexed and sent through the network and to the Decoder.\n", 84 | "\n", 85 | "The revolution is coding the Shape, with BInary Alpha Block (BAB), wich bascally form a mask. Similar to Intra and Inter with the Texture of MPEG-2, we have Intra Shape and Inter Shape, using CAE (Context-Based Arithmetic Encoding). Sprites are manipulated by Motion parameters out of the object. With Face objects, three sets of Facial parameters and transform data can be used.\n" 86 | ] 87 | }, 88 | { 89 | "cell_type": "markdown", 90 | "metadata": { 91 | "collapsed": true 92 | }, 93 | "source": [ 94 | "### H.264\n", 95 | "\n", 96 | "No major differences, but as computer technology has advanced, much more computations can be preformed. Decoders are much lighter than Encoder because they miss Motion Estimation. It is same as MPEG4 Part 10, H.264/AVC, H.26L. New features still follow the main blocks, but more elaborate processing steps are taken along the way. These are: Motion compensation and intra-prediction, Image Transform, Deblocking filters (they're back!), Entropy coding, Frames and Slices.\n", 97 | "\n", 98 | "The Block-Size becomes variable, starting with 16x16 macroblock, and divides it in much smaller blocks based on the quad-tree structure so that great flexibility is provided. Arbitrary Reference Frames are used. Any frame may be used as a reference and it's specified as an index to the buffer. Works also in bi-predictive mode. We are allowed to see into 32 frames in the past. About intra-prediction: Intra-frames are Natural images, so they exhibit a strong spatial correlation. Macroblocks in intra-coded frames are predicted based on previously-coded ones. An encoded parameter specifies the features of this Macro-block. Intra-prediction can be vertical, horizontal, diagonal,... all modes will be evaluated in the prediction phase but only the best will be chosen.\n", 99 | "\n", 100 | "When it comes to the Image Transformation, DCT and IDCT can bring inaccuracies. In H.264 a matrix of integer is used and gives a big gain in implementation and only a minimal decrease of quality.\n", 101 | "\n", 102 | "Concerning Deblocking Filters, previous filters use to smudge edges between blocks. In H.264, each edge is adaptively chosen among 5 deblocking filters to apply. It also improve objective quality.\n", 103 | "\n", 104 | "About Entropy coding, we use CABAC, it binarize all syntax symbols that are translated to bit-strings.\n", 105 | "\n", 106 | "With H.264, each frame consists of one or more slices as continuous groups of macroblocks that can be independently encoded and decoded. Thus now we can have I, P, B -slices. \n" 107 | ] 108 | }, 109 | { 110 | "cell_type": "markdown", 111 | "metadata": {}, 112 | "source": [ 113 | "###H.265\n", 114 | "\n", 115 | "It has different names like HEVC and it followed the big revolution of the computational capacity. Supports resolution up to 8K and uses Parallel processing. It codes Tree Units (CTU) an dTree Blocks (CTB). CTU can be of sizes 16x16, 32x32 and 64x64. Bit rates gets bigger, encoding time decreases and decoding time increases with bigger CTU sizes. \n", 116 | "\n", 117 | "Concerning Improved Motion Compensation, it uses quarter pel precision and 7-8tap filters. Use Advanced Motion Vector Prediction. Support 33 directional modes in Intra-Prediction (vs 8 of H.264), it has Planar mode (2d fitting) and DC-flat mode. CABAC is still used, but it was improved as per throughput capacity, and it's No VLC. Better support of Parallel Processing. Sample Adaptive Offset... It supports Slices (as vectors) and Tiles (as blocks) for ease of use with Parallel Processing that runs Threads.\n" 118 | ] 119 | }, 120 | { 121 | "cell_type": "code", 122 | "execution_count": null, 123 | "metadata": { 124 | "collapsed": true 125 | }, 126 | "outputs": [], 127 | "source": [] 128 | } 129 | ], 130 | "metadata": { 131 | "kernelspec": { 132 | "display_name": "Python 2", 133 | "language": "python", 134 | "name": "python2" 135 | }, 136 | "language_info": { 137 | "codemirror_mode": { 138 | "name": "ipython", 139 | "version": 2 140 | }, 141 | "file_extension": ".py", 142 | "mimetype": "text/x-python", 143 | "name": "python", 144 | "nbconvert_exporter": "python", 145 | "pygments_lexer": "ipython2", 146 | "version": "2.7.5" 147 | } 148 | }, 149 | "nbformat": 4, 150 | "nbformat_minor": 0 151 | } 152 | -------------------------------------------------------------------------------- /week2.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Week2" 8 | ] 9 | }, 10 | { 11 | "cell_type": "markdown", 12 | "metadata": {}, 13 | "source": [ 14 | "## Signals and Systems" 15 | ] 16 | }, 17 | { 18 | "cell_type": "markdown", 19 | "metadata": {}, 20 | "source": [ 21 | "$x(n_1,n_2)$, $-\\infty < n_1 , n_2 < \\infty$, $n_1,n_2=0,\\pm 1, \\pm 2$" 22 | ] 23 | }, 24 | { 25 | "cell_type": "markdown", 26 | "metadata": {}, 27 | "source": [ 28 | "Orientation axes: $n_1$ is horizontal, $n_2$ is vertical coordinate. $n_1$ goes from $0$ to $N-1$. $m_1$ goes from $0$ to $M-1$. In case of RGB images, we have:\n", 29 | "\n", 30 | "$$\n", 31 | "X(n_1*,n_2*) = \\begin{bmatrix}\n", 32 | " X_R(n_1*,n_2*) \\\\[0.3em]\n", 33 | " X_G(n_1*,n_2*) \\\\[0.3em]\n", 34 | " X_B(n_1*,n_2*) \n", 35 | " \\end{bmatrix}\n", 36 | "$$\n", 37 | "\n", 38 | "Discrete Unit Impulse is:\n", 39 | "\n", 40 | "$$\n", 41 | "\\delta (n_1,n_2) = \\begin{cases}\n", 42 | " 1 & \\quad \\text{for } n_1=n_2=0 \\\\\n", 43 | " 0 & \\quad \\text{ otherwise}\\\\\n", 44 | " \\end{cases}\n", 45 | "$$\n", 46 | "\n", 47 | "therefore:\n", 48 | "\n", 49 | "$$\n", 50 | "\\delta (n_1-n_1',n_2-n_2') = \\begin{cases}\n", 51 | " 1 & \\quad \\text{for } n_1-n_1'=n_2-n_2'=0 \\\\\n", 52 | " 0 & \\quad \\text{ otherwise}\\\\\n", 53 | " \\end{cases}\n", 54 | "$$\n", 55 | "\n", 56 | "Also, there are Separable Signals (also means independent) if:\n", 57 | "\n", 58 | "$$\n", 59 | "g(n_1,n_2)=f_1(n_1) \\cdot f_2(n_2)\n", 60 | "$$\n", 61 | "\n", 62 | "Discrete impulse signal is separable. Another definition is Discrete Unit Step:\n", 63 | "\n", 64 | "$$\n", 65 | "u (n_1,n_2) = \\begin{cases}\n", 66 | " 1 & \\quad \\text{for } n_1 \\geq 0, n_2 \\geq 0 \\\\\n", 67 | " 0 & \\quad \\text{ otherwise}\\\\\n", 68 | " \\end{cases}\n", 69 | "$$\n", 70 | "\n", 71 | "Also $u$ is separable. In fact $u(n_1,n_2)=u(n_1) \\cdot u(n_2) $\n" 72 | ] 73 | }, 74 | { 75 | "cell_type": "markdown", 76 | "metadata": {}, 77 | "source": [ 78 | "## Complex Exponential Signals\n", 79 | "Very important in DSP. $x(n_1,n_2)=e^{j\\omega_1n_1} \\cdot e^{j\\omega_2n_2} $ . 1. They are Eigen-functions of LSI systems (a system that is linearly and spatial invariant: complex exponential goes through the LSI system). Therefore at the output we could have $Ae^{j\\omega_1n_1+j\\omega_2n_2}e^{j\\Phi}$ 2. They are the building blocks of any signal.\n", 80 | "\n", 81 | "$$\n", 82 | "x(n_1,n_2)=e^{j\\omega_1n_1} \\cdot e^{j\\omega_2n_2}=\\cos(\\omega_1n_1+\\omega_2n_2)+j \\sin(\\omega_1n_1+\\omega_2n_2)\n", 83 | "$$\n", 84 | "\n", 85 | "The module is 1:\n", 86 | "\n", 87 | "$$\n", 88 | "|e^{j\\omega_1n_1}| = |e^{j\\omega_2n_2}| = 1\n", 89 | "$$\n", 90 | "\n", 91 | "They are also periodic signals:\n", 92 | "\n", 93 | "$$\n", 94 | "e^{j(\\omega_1+2\\pi)n_1} e^{j(\\omega_2+2\\pi)n_2} = e^{j\\omega_1n_1} e^{j\\omega_2n_2} \n", 95 | "$$\n", 96 | "\n", 97 | "What describes holds for 1d and multidimensional systems. To analyse the periodicity of the signal with respect to $n_1$ and $n_2$, then $N_1$ and $N_2$ have to be:\n", 98 | "\n", 99 | "$$\n", 100 | "\\omega_1N_1=2\\pi k_1 , N_1 = k_1 \\frac{2\\pi }{\\omega_1}\n", 101 | "$$\n", 102 | "\n", 103 | "and\n", 104 | "\n", 105 | "$$\n", 106 | "\\omega_2N_2=2\\pi k_2 , N_2 = k_2 \\frac{2\\pi }{\\omega_2}\n", 107 | "$$\n", 108 | "\n", 109 | "with $k$ and $N$ integers. In summary, unlike the continuous time complex exponentials, which are always periodic in time or spatial domain (not in frequency), the discrete time complex exponential are always periodic in the frequency domain but may or may not be periodic in the time or spatial domain. " 110 | ] 111 | }, 112 | { 113 | "cell_type": "markdown", 114 | "metadata": {}, 115 | "source": [ 116 | "1D Discrete cosine goes like\n", 117 | "$$\n", 118 | "cos(\\omega n)\n", 119 | "$$\n" 120 | ] 121 | }, 122 | { 123 | "cell_type": "code", 124 | "execution_count": 1, 125 | "metadata": { 126 | "collapsed": false, 127 | "scrolled": true 128 | }, 129 | "outputs": [ 130 | { 131 | "data": { 132 | "image/png": [ 133 | "iVBORw0KGgoAAAANSUhEUgAAA9MAAAE1CAYAAADkj7PzAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\n", 134 | "AAALEgAACxIB0t1+/AAAIABJREFUeJzt3X+spUl+H+RvrccJ8WTGXiuOZzoQd7IOSsSQBAESs2tw\n", 135 | "y+wCCYQ1xlJsPAHkCLEkIH4lEUgNe8eMsIIlSADDisTBOG1EIpSwTrxE8dpukXgl7AiBNHHAzHgH\n", 136 | "A92bFVo74+nYECfFH+fc7dP33nPOW+d9662qc59HOuq+7633rXrr8/6ouvec96accwAAAADTva91\n", 137 | "AwAAAGA0JtMAAABQyGQaAAAACplMAwAAQCGTaQAAAChkMg0AAACFTKYBAACgkMk0AAAAFFptMp1S\n", 138 | "en9K6U+nlN5LKX02pfStS5Tds/47KaW/mlL6FTvLfndK6UdPbPu3pJR+ctue/z2l9KGU0i9LKf3R\n", 139 | "bV1/LaX0P6WU/rEr631NSukHU0pfSCk9Sin9Jyml9+18/4+nlB6nlH4upfS/ppR+9873fm9K6SdS\n", 140 | "Sr+YUvpjE9q4t66U0sOU0i+klN5NKf18SumvnNIPB+ouyXbvPm+//xtTSj+8/f5PpZS+saAdi+U+\n", 141 | "pf9vOi72lJt1PNdUmN3Pb4+hy+Pol1JKf3jn+71kd/C8u6F8t/lcVXJdOHbeH8vzyLYXvcZu1/8N\n", 142 | "2/Z+35FyQ+R17Fp3peykXKf20ZV1FskqTbjn3bBO91lN6dMJ176i+/WVba9637pS/tAYZPLxu7Zj\n", 143 | "17ZTy+5Zv0k+Na8JNRVmc2yM3MuYovS82nvdO3YtaS1NGNdOuRccy/ZIG7rM7pA1fzP9n0XEL0bE\n", 144 | "V0XEaxHxn6eUftMCZW+SY7Nv/9oNy4uklD4SEd8ZEf9czvlXRsQ/FBE/HRHPRcTPRMQ/mHP+8oj4\n", 145 | "dyLiT6aUfu2V/fh8RHx1RPzWiPj6iPg9O9//zoj4dTnnr4iIfzIi3kgp/T3b7/3fEfHvRcT3TGzq\n", 146 | "obpyRPyenPOLOecXcs4lfTm17ql57d3nlNKXRMQnI+IHIuL9EfEvRsSDlNLXTmzHYrnHkf4/cFzc\n", 147 | "ZO7xXNPktm2PnRdzzi9GxEsR8dcj4k9GdJfdsfPupvK95nNVyXXh4Hl/KM+J214qr0v/aUT8+IRy\n", 148 | "o+R16Pp+1dRcp/bRrqWymnLPu2qErI726YRzpfR+/czmY6X71g0OHaMlx+/aSsY0c8c/rfKpeU2o\n", 149 | "qaS/996rOxtTnDIev/G6N/O+W1XBuHaJ+c8hXWZ3yCqT6ZTSl0XEN0XE/ZzzL+Scfyw2J8nvmlP2\n", 150 | "iO+KiH8zpfTivNbHRUR8R875JyIics6Pt6+/nnP+jpzz/7ld/oMR8dmI+Ht31r0bEX8i5/w3cs6f\n", 151 | "j4g/FxF/1+U3c84/mXP+xe2XKTYHyge23/vvcs4/EBFfmNjOg3Vtt7+40rwO7XNE/MaIeDnn/Ifz\n", 152 | "xo9GxI/t29Yei+Q+of8v4obj4mqhBY/nxc1s2zdHxOe360R0lF0cPxe+qOd8bnLCdWHqeX81zymW\n", 153 | "yitSSt8SET8bET98pNwweR251l0tezTXqX20x+ysJt7zdtvbfVYn9um1c+WE8/Kqte5bV8sfGoNM\n", 154 | "Pn4bKRnTzB3/rJ7PCteEmqb2993Yf6/uZkxRklvhde+U+25NFzFhXLvE/GeC3rN7xuzJdErpz6SU\n", 155 | "fnb7q/yr//7AttjfGRF/I+f89s6q/0vc3LElZQ/5SxHxMCJ+/6nt3r4l4e+LiF+9fbvDz2zfqvDL\n", 156 | "b9jeV0fEb4iIv7yz+A9FxLeklH5FSunXRMRvi4j//sp6351SehIRfyUiHkXEpwr3c2pd35lS+nxK\n", 157 | "6S+klL5+ygYrZHu53ZJ9ThHxypT2bs3O/ZiS4yKWO56L1Mpuxz8bEcfeVtYqu6Pn3Y4m+Vy1xHG5\n", 158 | "x9TzfkqeVy2S1/Zm+XpE/BtxfBDWPK+SrJa6vhf20U0Wvy7uueft6vnaN6dPTzlXjql+39rn0DG6\n", 159 | "4PhkaltK9rNkTFM8/rmiWT77LHBNKK2vRjYl9+qIDseDNyi57tW4llwzZT9T2bj26vZPmv8c0Xt2\n", 160 | "z3juWIGU0pdHxIdyzp+6svzHI+KjOeffMaGBvzIi3r2y7N2IeGFm2WM+HhF/MaX0h65+Y2K7vzoi\n", 161 | "vjQi/umI+FBE/FJs3nJyPzZva4iIiJTScxHxICK+N+f8Uzvr/4XYvDXl3dj84OK/2v6EZLcdvzel\n", 162 | "9C9HxKsRcS8i/t+pO3fFobr+QET8ZET8fxHxrRHxZ1JKvyU2P6lZM9uIOLjP/1tEfD6l9PticyJ+\n", 163 | "Q2zeGvIjE9qxa27ux0w6LraWPJ6/qMF5uVvH18Tm7T/fvrO4p+yOnnc7quRz1UJ5lbrxvM85f/ZK\n", 164 | "G27Kc6ol8vqOiPgjOedHKR0dE1bPa8msFry+l/TRPotdFw/c83b1fO2LOKFPZ54rx9S+b93o0DG6\n", 165 | "4PEbEYtmN+nadkLZQ5rkc8AS14QvapTNoXt1T2OKEpOue0teSxbKrmRcu1vHyfOfCbrM7iZTfjP9\n", 166 | "D18GlFLa/RX+n4qIvzmxge9FxNVf1X95RPz8zLIH5Zz/ckT82Yj4t0vX3fqF7b//cc758znnL0TE\n", 167 | "fxgRv/2yQNpcxR7E5ibzr1xZ/uci4r+NiC+LiF8VEV+ZUvqDN7Qz55w/ExF/R0T8S6WNPFZXzvkn\n", 168 | "cs5Ptm+3+L7YvFXmt8f62X7RTfucc/6liPjGiPgnIuJxRPzrEfEnIuL/mtiWy23Pzf2Yo8fFjsWO\n", 169 | "5yuaZRebt7z8xZzz/3G5oJfsSs67rVr5XLVEXkUOnPdXXcuzoI65ef3WiPhwbAZLU6yR16JZLXB9\n", 170 | "L+2jfe1Y5Lq47553g26vfTP69ORz5ZgV7luH6t57jM49fq9Y5NwquLYVlT1SZ7N8rlrqmnDFqtlM\n", 171 | "GLd2MaY4wdTr3pLXkiWyKxnXxrau2fOfQzrO7popk+ndD3z/gZ3/fyHn/PmU0qfSs0+n23394Lbs\n", 172 | "T0XEcyml3c/b/Ja4+e1hJWWnuIiIfyEifs3uwintzjn/XFw/ca9+AP57YnOgfFPOefeg/crY3Hy+\n", 173 | "e3tR+dmI+C9j81aHfZ6L0z6TVFpXjqefgbq0RrY3eWafc85v5pzv5Zy/Kuf827bfO+XhGhdxYu7H\n", 174 | "TDwuLi19PN9U39rZ/a6I+N5rDeoju9JzoVY+Vy2R1xJtuOlXGDfmWeAiTs/r6yPiayLiZ1JKjyPi\n", 175 | "90XEN6eU/tKeutbIq1ZWp17fS/vokIuYf13cd8+7qudr36l9OvdcOeYiKt23Jjp0jJ56/O6qdW7t\n", 176 | "u7bNLXvVRbTN59KS14RLa2dz9F7dyZii1NTr3pLXktnZFY5rLy05/9nnIvrL7rqc88FXbD6MHhHx\n", 177 | "kYj4nu3/vzkifsexda9s57+OiO+PzU8pvi42D034TaeUjU0of+xAXZ+NiG/Y+fq/iIj/JyJ+pKTN\n", 178 | "23Vfj4j/MTZPdnt/RPwPEXGx/d4nIuIzEfFle9Z9Kzbv9/+SiPiK2PyU6I9vv/dVEfE7I+L52PxQ\n", 179 | "4x+NzU8//vHt978kIv62iPj3Y/OZil8eEV9yoJ031hWbn7L8I5frR8S3bev52rWzPbbP2zJ/97at\n", 180 | "XxabG8TbEfGlU7JfOPeD/X/ouJhz7Be0b/Xzclv+g9vMnr/he71kt/e8WyufinlNui7E5qepN573\n", 181 | "BXlWz2u7L7965/VdsXmy6Ve2ymuJrGLCtW5qrlP6aMVz6+A9b42sFsrnlOPu0Lly7H7RxX1r6jFa\n", 182 | "evyunN2ka9vUsoeyaZzPrGtC79lsy990r36w8/1exhSl4/Fjc5i915JW2W3XKRnXnjL/2c12yOz2\n", 183 | "rjehIRfbHfuDsfl1/tsR8a+esEPvj4g/HZtfo78TEb/zyvc/FRH/1sSyn46Ibz9Q109fCeJvj83j\n", 184 | "53/4hHY/FxHfve3QRxHxH0XEL4uIXxsRf2u73Z/fvt6NiG/dWfc3R8SPxuazyZ+PiP8mIr5q+71f\n", 185 | "FZsP138hIn4uNh9y//addT++3f7f3Hn9uzf116G6tvX8eET8te33PnPZN2tne2yft2X/g+33342I\n", 186 | "H4yIXz81+4VzP9b/Nx4XpxzPp7zWzm7n60/E5rMxN22rl+z2nnd79mnxfCrmNem6EAfO+yvbO5Tn\n", 187 | "KnndsH/fd+QYrJrXElnFtGvd7jXiYK4T+qh6VjHtnlc9q6XOpROOu0PnyrHzspf71u4xt/cYnXL8\n", 188 | "Nj63Dl7bouA6eCibNfO54XibdU3oPZvt/4/dq3sZU5SOx4+Nq/ZeS1plt93OpHFtzJz/jJzdvlfa\n", 189 | "rjyMlNKXRsT/HBG/OR9+ixlnRvbjkt1Y5DUOWfVNPv2SzbhkN65zzG64yTQAAAC0NvvvTAMAAMBt\n", 190 | "YzINAAAAhUymAQAAoNBzNTeeUvKB7JXknE/9u4lfJK91yGocshqLvMYhq7HMzUtW63FujUNWY9mb\n", 191 | "11KPZt/zSPJ8yiPee1yn13ad2s9LbKfzPuk13yZZnWE/rrEvZ53VGebbJK/O+6TXY6JJVp33Sc/r\n", 192 | "zM6r16zO8JiYndVaefWa1YrHxDBZrdgnXbbrWD97mzcAAAAUMpkGAACAQj1Oph92us4adZy6TisP\n", 193 | "z2idNepo7eEK66xRx5rrtPKw03XWqOPUdVp5eMvXOaWOlh6usM4aday5TisPz2idNepo7WHl8ue4\n", 194 | "TisPO11njTpOXWevtH0feBUppZwX+HA9hy3Vz/KqT1bjkNVY5DUOWY1liX6W1TqcW+OQ1VgO9XOP\n", 195 | "v5kGAACArplMAwAAQCGTaQAAAChkMg0AAACFTKYBAACgkMk0AAAAFDKZBgAAgEIm0wAAAFDIZBoA\n", 196 | "AAAKmUwDAABAIZNpAAAAKGQyDQAAAIVMpgEAAKCQyTQAAAAUMpkGAACAQibTAAAAUMhkGgAAAAqZ\n", 197 | "TAMAAEAhk2kAAAAoZDINAAAAhUymAQAAoJDJNAAAABQymQYAAIBCJtMAAABQyGQaAAAACplMAwAA\n", 198 | "QCGTaQAAAChkMg0AAACFTKYBAACg0HO1K0gpXex8+TDn/LB2necupXQvIu5V2vbFzpfymklW45DV\n", 199 | "WOQ1DlmNpVZeslqec2scshpLSV4p51yzITnnnKpVQEQs18/yqk9W45DVWOQ1DlmNZYl+ltU6nFvj\n", 200 | "kNVYDvWzt3kDAABAIZNpAAAAKGQyDQAAAIVMpgEAAKCQyTQAAAAUMpkGAACAQibTAAAAUMhkGgAA\n", 201 | "AAqZTAMAAEAhk2kAAAAoZDINAAAAhUymAQAAoJDJNAAAABQymQYAAIBCJtMAAABQyGQaAAAACplM\n", 202 | "AwAAQCGTaQAAAChkMg0AAACFTKYBAACgkMk0AAAAFDKZBgAAgEIm0wAAAFDIZBoAAAAKmUwDAABA\n", 203 | "IZNpAAAAKGQyDQAAAIVMpgEAAKCQyTQAAAAUMpkGAACAQs/VriClDz6IePN+zu++k9KLdyNeeSPi\n", 204 | "5TsRjx9FvHl/U+r4Muu/+06NfK7azWuN+jhd71nddLz32tbalsyqRr/WymrUY+BQXiX71Lps6/rX\n", 205 | "cBvPrZ76v4R71lh6z4unbuNcq1ZdJx3vOedqr4jIEe/liNfeinjh6zb/vpcj8nb5N74T8c+8c3yZ\n", 206 | "9SNeuHuonyvktbc+r3l9fBuyinjh7vXjvc+2jpRVjX6tldXax8AaeZXsU+uyretvnVUPx+so21wj\n", 207 | "L/estfZjflYj5HUOr0pZtZ6rrLR+rbr2H++H8qp+oDxt4Ks//bTBl6/7edoy60e8+mCdE/J4fV7z\n", 208 | "+vg2ZBXx6oPS47i3V49Z1ejXWlmtfQyskVfJPrUu27r+1ln1cLyOss018nLPWms/5mc1Ql7n8KqU\n", 209 | "Veu5ykrr16pr//F+KK/qb/OOuNj++4WXI34iIu7tfO99EfH8lfI3LXs+Il76imllz3b9O5dfpZTu\n", 210 | "xbMduaCL7b9/9UMppXs554d16rkdbm9WL985dhz3ZoysavRrrazqHgNt8irZp9ZlW9f/lHOr920+\n", 211 | "q15eF9t/3bOWMsa5RcRaWd2WuVatup6e8yV5rTSZfhIRf/5xxN//65793t/afu/5I8ueRMTnfi7i\n", 212 | "yfuPlz3b9R9dfrW9oD28/Dql9PFYzMW2vj//Yzm//fBwWY65vVk9fnTsOO7NGFnV6NdaWdU9Btrk\n", 213 | "VbJPrcu2rv8p51bv23xWvbwuwj1rWWOcW0SsltUtmWvVquvpOV+UV+23MIz3Pvxu17+7zltFdtv7\n", 214 | "6oOIb/qRzb8+M7O/3164O7WvKmXVXTbn8PmzHrMa6TOYPjPtM9Mts+rheB1lm2vk5Z611n7Mz+qG\n", 215 | "vIwHJ/db8/Fg67mKz0wvf1BF3j2Ynh5kf/azl8unLrP+4X5eOK+iA+w2v0pvwBWy6jaT0uO4t1ev\n", 216 | "WdXo11pZrXkMrJVXyT61Ltu6/tZZ9XC8jrLN2nm5Z621D/OzupKX8eDkPutjPNh6rrLW+rXqOuXc\n", 217 | "StsCVaSUcs45XV++qfuUZda/bl8/l7rczuYR+z/0bdff+vCR78/5M6/NreeclPbV0lnN3c4aph7H\n", 218 | "vek9qxr9WiurNY6BtfMq2afWZVvXf30951av27y5nvn97J61DuPBdnobD7aeq6y1fq26rpfZn9f7\n", 219 | "Dq3IbTXmgzja0FcAwDkyxplOX91WJtPc4PJBHLv6fxBHG/oKADhHxjjT6avbymSaG7x5P+Jjbz+9\n", 220 | "KDyJzddv3m/Zqj7pKwDgHBnjTKevbiuTaa7J+d13Ij754YiPfP9myUe+P+KTH94sZ5e+AgDOkTHO\n", 221 | "dPrq9lrh70zf6PUZy6y/gu3J/1pK8VbOn7lo1Y4R6Kujmh3HZ65Gv9bK6hyPgZJ9al22df2jGeXc\n", 222 | "Otf+b02/7jDGma6zvmo9V1lr/Vp1Tdbkad4sq/cno/KUrMYhq7HIaxyyGstte5r3yJxb45DVWDzN\n", 223 | "GwAAABZkMg0AAACFTKYBAACgkMk0AAAAFGoymU4pLk5dZv119dCGUeirm+mXOmr0a62szvEYKNmn\n", 224 | "1mVb1z+aUc6tc+3/1vTrzfTLdD30Veu5ylrr16qrRJOneacUOedIpyyz/nU1nwg4tQ1M66vb+PTG\n", 225 | "UY+h3rOq0a+1slrjGFg7r5J9al22df3X13Nu9brNm+u5XU/zHvWeFWE82IsexoOt5yprrV+rrutl\n", 226 | "9ufV6u9MM6CUXrwb8cobES/fiXj8KOLN+7ftj9H32Aet21RS/0htBaCO1tdi963zbddabvv+syPn\n", 227 | "XO212fxNy/O15VOXWX96Py+R12UbIl64G/HaWxHv5YicN/++9lbEC3eXqHuE17E+mJLX0lm1zmVK\n", 228 | "/b0cQ6X11zyvltluXny7NbZZc7st8yrZp9ZlW9ffOqvy7Z62X+ewzVr9vLuN3u8Fu/3ae1trZLVv\n", 229 | "Oz31S+tXj+PBQ3mVLhtp/Vp1leRV5SA7VvEoAfW6/tR+XiKvpxOhVx88vWhcvt7LEa8+WKLuEV7H\n", 230 | "+qDNZLptLlPq7+UYKq3fgL//7bbMq4cJqsn0MttZar/OYZu1+vnZyXTf94JnJ419t7VGVvu201O/\n", 231 | "tH71OB48lFfpspHWr1VXSV6e5s1EL9+JeP7Ksucj4qU7LVrTRo990LpNJfWP1FYA6mh9LXbfmq/X\n", 232 | "dq3ltu8/u1pNpl+fscz669q24fGjiCdXvvUkIj73aO0GtXO0Dxrk1TqXSfV3cgy1rn9xNY63Wsdw\n", 233 | "D9eypZXsU+uyresfzSjn1qD93/paXHIv776ta+qoX1rrcTx4Teu5ylrr16prurlvLzj1V+Je/fXz\n", 234 | "oe3c9s/HLNUHS2fVOpeS+kdqa42svGrnK69RXrIa67VEP+9uY6R7wUhtXSqrKdtp3S+tXz2OB71q\n", 235 | "Z76/n5v8aSyWtdafGXn65MKX7mx++nb7nlw4tw9qZNU6l5L6x2pr33++h2fJaxyyGkuNP4011r1g\n", 236 | "pLaud2617pfWehwPUs+hfjaZPgNOyHHIahyyGou8xiGrsdy2vzM9MufWOGQ1lkP97AFkAAAAUMhk\n", 237 | "GgAAAAo1mUynFBenLrP+unptV2s99kuv9eurOmrsQ61+OYf+vqpkn1qXbV3/aEY5t86h/1vvw9yx\n", 238 | "25p6rb91u1rrcYyzrw0jzXVa11WiyWemU9o8/OyUZda/rubnLua065yd2i9rZ7Wmucf7mlpntYQa\n", 239 | "fVgrlzXyXjuvkn1qXbZ1/dfXc271us2b66n3meke7wUl97I1tb5v9dovrfU4HixpV69zndZ1XS/j\n", 240 | "M9MAAACwGJNpAAAAKGQyDQAAAIVMpgEAAKBQq8n06zOWWX9dvbartR77pdf69VUdNfahVr+cQ39f\n", 241 | "VbJPrcu2rn80o5xb59D/rfdh7thtTb3W37pdrfU4xoloP1dZa/1adU1W/Wne8WwDH+acH1ar8JZI\n", 242 | "Kd2LiHs7iz6+1BMBQ16LktU4ZDUWeY1DVmOpkZes6nBujUNWYynJq8mfxmJZvf+ZEZ6S1ThkNRZ5\n", 243 | "jUNWY6n5p7FYlnNrHLIaiz+NBQAAAAsymQYAAIBCJtMAAABQqMlkOqW4OHWZ9dfVa7ta67Ffeq1f\n", 244 | "X9VRYx9q9cs59PdVJfvUumzr+kczyrl1Dv3feh/mjt3W1Gv9rdvVWo9jnH1tGGmu07quEk0eQJZS\n", 245 | "5JwjnbLM+tfVfIjBlHal9OLdiFfeiHj5TsTjRxFv3s/53XfmtqelY/t0al5rZ7Wmucf7mlpntYQa\n", 246 | "fVgrlzXyXjuvkn1qXbZ1/dfXc271us2b66n3ALIe7wUl97I1tb5vTekX48H9y65vt+51sPVcZa31\n", 247 | "a9V1vcz+vJ47tCIcs7nIfPTTEZ/4QMTzEfEkIj72D6T04odHvYCe4z4BANRyjmOnc9wnlucz08z0\n", 248 | "yhtPLzIRm38/8YHN8lGd4z4BANRyjmOnc9wnlmYyzUwv33l6kbn0fES8dKdFa5ZxjvsEAFDLOY6d\n", 249 | "znGfWJrJNDM9frR528uuJxHxuUctWrOMc9wnAIBaznHsdI77xNJaTaZfn7HM+us60q4370d87O2n\n", 250 | "F5snsfn6zfsrtK2SSfvUY1691q+v6qixD7X65Rz6+6qSfWpdtnX9oxnl3DqH/m+9D3PHbmvqtf7t\n", 251 | "cuPBI8vW1nqustb6teqarMnTvFlW6yejPn3S4Ut3Nj+tO6enNy67T62zYjpZjUVe45DVWGo+zZtl\n", 252 | "tT63jAdLtus6OJJD/WwyfQackOOQ1ThkNRZ5jUNWYzGZHodzaxyyGsuhfvaZaQAAAChkMg0AAACF\n", 253 | "TKYBAACgUJPJdEpxceoy669r7n6Nbm6Ga+q1fn1VR419qNUv59DfV5XsU+uyresfzSjn1jn0f+t9\n", 254 | "GGmM02v9Pd7jaxht/1vPVdZav1ZdJZo8gCylyDlHOmWZ9a+r+RCDufs1urkZXl9v3azWtHRf1dQ6\n", 255 | "qyXU6MNauayR99p5lexT67Kt67++nnOr123eXE+9B5D1eC/odYzT+r410j2+hpHGgyXt6nWu07qu\n", 256 | "62U8gAwAAAAWYzINAAAAhUymAQAAoJDJNAAAABRqNZl+fcYy669r7n6Nbm6Ga+q1fn1VR419qNUv\n", 257 | "59DfV5XsU+uyresfzSjn1jn0f+t9GGmM02v9Pd7jaxht/1vPVdZav1ZdkzV5mjfL6v3JqDwlq3HI\n", 258 | "aizyGoesxlLzad4sy7k1DlmNxdO8AQAAYEEm0wAAAFDIZBoAAAAKmUwDAABAoSaT6ZTi4tRl1l/X\n", 259 | "3P0a3dwM19Rr/fqqjhr7UKtfzqG/ryrZp9ZlW9c/mlHOrXPo/9b7MNIYp9f6e7zH1zDa/reeq6y1\n", 260 | "fq26SjR5mndKkXOOdMoy619X84mAc/drdHMzvL7eulmtaem+qql1Vkuo0Ye1clkj77XzKtmn1mVb\n", 261 | "1399PedWr9u8uZ56T/Pu8V7Q6xin9X1rpHt8DSONB0va1etcp3Vd18t4mjcAAAAs5rnWDeA8pfTi\n", 262 | "3YhX3oh4+U7E40cRb97P+d13WrfrJiO1tUSN/RplmzW3u1a7Strfumzr+qGHY3CU86XX82qke8Eo\n", 263 | "2+zBSPs1UlvpSM652muz+ZuW52vLpy6z/vR+XiKvU/Yr4oW7Ea+9FfFejsh58+9rb0W8cHeJdi75\n", 264 | "OtbWuRm2yqpGBjX6qtaxcmpba2c1dX+nlDulD0v6pfe2rpHX4XLHj6Feyrauv3ZWSx9XNc+tEc7X\n", 265 | "GnkdGw/2dC9oMcYpOS5P6ecl8urpHl/jdU7jwZJ29TrXaV1XSV6zQzyl4lEC6nX9qf28RF6n3Whe\n", 266 | "ffD0YnT5ei9HvPpgiXYu+TrW1pEuns8OrJbPoEZf1TpWTm1r7aym7u+Ucqf0YUm/9N7WNfI6XO74\n", 267 | "MdRL2db1185q6eOq5rk1wvlaI69j48Ge7gUtxjglx+Up/bxEXj3d42u8zmk8WNKuufvVev1adZXk\n", 268 | "Vf0BZNU2fkvkGx8qkO5FxL2dRR+/qVwpec13NQdZ9UtWo7nsxm/60Zz/1DfIq1/OrZE8e15F1MlL\n", 269 | "Vstwbo1DVmOZldexmficVyz0Uxevdfp5ue3U/enekuuv/VPTtbI695/Gr9HWGlmN8tur0dpaK69j\n", 270 | "x9uhY3Cpcj2UXXqbS2fV+rfNJdtt3dbefjN9Sr8cO95q3+N7fpfWaOPBU3M9pWyLMc5IWXmd3s/N\n", 271 | "Kvbqr5+X207dz50suf7an+dZbzJ93p8TW6OtdSbTY3yucrS21srr2PF26BhcqlwPZfufTHvGQI3z\n", 272 | "dcm85t6z9h1bLe7xPT8/ZLTx4Km5nlK2xRhnpKy8Tu/nJn9nmmX1+Dc7nz4R8aU7EZ975omIrf8m\n", 273 | "3dVlh9q6tDWzKs1gSr/W6Ktj22zV1lpZTc2lpP0lWdfYbh9t7eNvuI/0t59btbVGViXXkdbHa+u2\n", 274 | "ll4ba/6d6antv7oPJcvWvm+dOkZZop2jjQc3328z9rtp+bmOB5nvUD+bTJ+B0U7I3ibTa+olq6X/\n", 275 | "mH1NrdraIqsafV0rv97aajJdr+wIk+kl2lVev3Nr3W30f48/VP8abe1ljFFWVz+T6TWNmNVtdqif\n", 276 | "37d2YwAAAGB0JtO08HrB8qnLllj/Npnbr2saqa1z1Wh/rT4Zqa1zlbRratka26xVtlb9axrpeB2p\n", 277 | "rWsa5R4/d4xy27Qe+8mAWbzN+wx4q8g4ZDUOWY1FXuOQ1Vh6eZs3xzm3xiGrsXibNwAAACzIZBoA\n", 278 | "AAAKmUwnjjMmAAAOVklEQVQDAABAIZNpAAAAKGQyzepSioupy6cuW2L922Ruv65ppLbOVaP9tfpk\n", 279 | "pLbOVdKuqWVrbLNW2Vr1r2mk43Wktq5plHv83DHKbdN67CcD5vI07zMw2hMBU4qcc1yr56blU5ct\n", 280 | "sf4aeslqbr+uqVVbW2RVo69r5ddbW2vmVdKuqWVrbLNW2aW36dxaf7utz61lttH/Pf5Q/Wu0tZcx\n", 281 | "Rlldbcd+rY6XEbO6zTzNGwAAABZkMg0AAACFTKYBAACgkMk0AAAAFDKZpoXXC5ZPXbbE+rfJ3H5d\n", 282 | "00htnatG+2v1yUhtnaukXVPL1thmrbK16l/TSMfrSG1d0yj3+LljlNum9dhPBsziad5nwBMBxyGr\n", 283 | "cchqLPIah6zG0svTvDnOuTUOWY3F07wBAABgQSbTAAAAUMhkGgAAAAqZTAMAAEAhk2lWk9KLd1P6\n", 284 | "4IOUPvXZzb8v3n32+3FxfZ1py6aUPVb/bTK3X9c0UlvnqtH+Wn0yUlvnKmnX1LI1tlmrbK361zTS\n", 285 | "8TpSW9c0d4ywllPHKLfNoTHZkmO/fcuMCVmKp3mfgRGeCLi5SH300xGf+EDE8xHxJCI+9nbEJz+c\n", 286 | "87vvbMpEzjnSs+tNW3as7JT619BLVnP7dU2t2toiqxp9XSu/3tpaM6+Sdk0tW2ObtcouvU3n1vrb\n", 287 | "bX1uLbONeWOEtZwyRlmu7j7GGMe3f3hMttTYb9+yHsaEo2TFhqd504FX3nh60YrY/PuJD2yW34b6\n", 288 | "AQBoPyZrXT/nxGSalbx85+lF69LzEfHSndtRPwAA7cdkrevnnJhMs5LHjzZvo9n1JCI+9+h21A8A\n", 289 | "QPsxWev6OScm06zkzfubz6NcXrwuP5/y5v3bUT8AAO3HZK3r55w817oB3A6bB0q8+OGIt9/YvI3m\n", 290 | "c48i3rx/5UEPr9+w6tRlB8tOrP82mduvaxqprXPVaH+tPhmprXOVtGtq2RrbrFW2Vv1rGul4Hamt\n", 291 | "a5o7RlhL8RjltpkwJltk7LdvmTEhS/I07zPgiYDjkNU4ZDUWeY1DVmPp5WneHOfcGoesxuJp3gAA\n", 292 | "ALAgk2kAAAAoZDINAAAAhao/gCyldLHz5cOc88PadZ67lNK9iLhXadsXO1/KayZZjUNWY5HXOGQ1\n", 293 | "llp5yWp5zq1xyGosRXnlnKu9Npuvt32vZfu5dV4R+eLUZaVlb3tWc/u1x+Ni6ba2yKpGX9fKr7e2\n", 294 | "1syrpF1Ty9bY5ihtdW6N1dYl8lpmG/PGCGu9Wo5RehljrJX1SMfFuWZ1W16H+tnTvM/AuTwRMKXN\n", 295 | "MXnKstKyrfSS1dx+XVOrtrbIqkZf18qvt7bWzKukXVPL1thmrbJLb9O5tf52W59by2xj3hhhLS3H\n", 296 | "KL2MMebXv/zYr/VxcdW5ZHVbeJo3AAAALMhkGgAAAAqZTAMAAEAhk2kAAAAoZDJNT16fsay07G03\n", 297 | "t1/XNFJb56rR/lp9MlJb5ypp19SyNbZZq2yt+tc00vE6UlvXNHeMsBZjlPlqjP30NVV4mvcZ8ETA\n", 298 | "cchqHLIai7zGIaux9PI0b45zbo1DVmPxNG8AAABYkMk0AAAAFDKZBgAAgELPtW4ApPTi3YhX3oh4\n", 299 | "+U7E40cRb97P+d13etvmOSjpl9Z9OFJbAahj6vW99X3APWs+40GGlHOu9tpsvt72vZbt5xZ5Rbxw\n", 300 | "N+K1tyLeyxE5b/597a2IF+5uvp8vrq9zfdnu8mPbvK1ZlfR16z7soa0tstp3bM+rf/lt9tjWmnmV\n", 301 | "tGtq2RrbHKWtzq2x2rpEXqduY+q9oPd71lptvW3jwX3LezkuzjWr2/g61M/NKvbqr5/bXDxfffD0\n", 302 | "Ipd3LnavPth8P19r003Ldpcf2+Ztzaqkr1v3YQ9tbTTgX6TO2tvssa2VJ9OLZ1hjm6O01bk1Vlvb\n", 303 | "Tqan3Qt6v2et1dbbNh7ct7yX4+Jcs7qNr0P97DPTNPbynYjnryx7PiJeutPXNs9BSb+07sOR2gpA\n", 304 | "HVOv763vA+5Z8xkPMiaTaRp7/CjiyZVlTyLic4/62uY5KOmX1n04UlsBqGPq9b31fcA9az7jQQbV\n", 305 | "6lfiXv31c4u8JnxG5lqbjr/N22dk5vZ16z7soa0tsurt7Z0jtbVmXiO8dXqktjq3xmrrEnmduo2p\n", 306 | "94Le71lrtfW2jQf3Le/luDjXrG7j61A/p22BKlJKOeecqlVARCzXz63yevqkxZfubH5a+PRJiylt\n", 307 | "jtNny19fdnX5oW221Dqrkr5u3Yet29oiq33H9rz6l99mre3O2WbNvEraNbVsjW3WKrv0Np1b62+3\n", 308 | "9bk1ZxtT7wU937PWamvrMcb8esvGg/uW93Rc7DN6VrfNoX72p7FobntRe23Pt1+fuOyZ5Ue2eWuV\n", 309 | "9HXrPhyprQvad2z3ts1a263V1rlK2jW1bI1t1ipbq/41jXS8jtTW6qbeC1rfBybU301be3XCeHDf\n", 310 | "cn3Navxm+gz46dY4ZDUOWY1FXuOQ1Vha/2aa6Zxb45DVWA71sweQAQAAQCGTaQAAAChkMg0AAACF\n", 311 | "TKYBAACgkMk0XUspLqYsO7ScaUbqv5HaWqLGftXqq5HaOldJu6aWrbHNWmVr1b+mkY7Xkdra2kj7\n", 312 | "NVJbe1Qy9tPXrMnTvM/AOT8R8NS/M92rnrMaof8urdFWfwt3/e22/lu4+7Yzwt9urlnW35leb5u1\n", 313 | "ttv63Ko1vnDfulpHv2OMuU79O9O9OueszpGneTOclF68m9IHH2z+/8EHKb14d4myAACMwXiQ3plM\n", 314 | "053Nxe+jn474oW/bLPmhb4v46KdvuiiWlAUAYAzGg4zAZJoOvfJGxCc+EPH89uvnY/P1K2/MKwsA\n", 315 | "wBiMB+mfyTQdevnO04vhpecj4qU788oCADAG40H6ZzJNhx4/inhyZdmTiPjco+0XrxeUZbrXjxfp\n", 316 | "xkhtLVFjv2r11UhtnaukXVPL1thmrbK16l/TSMfrSG1tbaT9GqmtnZg0xnu9oCwsztO8z8C5PRHw\n", 317 | "6edeLt+u8yQiPvZ2xCf/+YhXPrb56ePjRxFv3t+scWPZD+f87juNdmGvHrPa9Pcrb+z2a499F7Fu\n", 318 | "W9fMqsZ+1eqrXttaI6+Sdk0tW2Ob47XVuTVSW3t8mrf71r66+htjzGvH3vHghzclnunXT0R89HuN\n", 319 | "B6nhYD/nnKu9Npuvt32vZfu5p7wiXrgb8eqDiH/qRzb/vvB1Ea+9FfFejsh58+9rb23KXSt7t3X7\n", 320 | "R8lq03c392vrvmrd1rWyqrFftfqq57YunVdJu6aWrbHN0dpaI6sRj9eR2rpEXkuOL9y36vdz5+PB\n", 321 | "uwf69euMB73WzqtZxV799XPPeW0uipcXzbxz8Xz1Qeu2jZzVSP26dlvXG/Avv1+1+qrnti4/mZ7e\n", 322 | "rqlla2xztLbWyGrE43WktvY3mXbfqt3PPY8HRzsGbntW5/I61M/PRWUppYudLx/mnB/WrvPcpZTu\n", 323 | "RcS9Stu+2Pmyo7zGfLBE/1mN1K9129ouqxr7Vauv+mlr/bx+/YcivmtbxWU1cx98U+thOjXKLrdN\n", 324 | "51ar7fZ1bi03vnDfutT/GKOWkY6Bjdub1ZhK8qo+mc45X9Su47bZniQPL79OKX18wW1fLLWtZV0+\n", 325 | "WGL34tn/gyX6z2qkfq3b1nZZ1divWn3VT1tr55XSB7824vffndauqftQsq+tyy63TedWq+32dW4t\n", 326 | "N75w37rU/xijlpGOgY3bm9WYivJq9Stxr/76uee8RvqM1EhZjdSv5/rZs54/KzlSW5fOa6TPIY/U\n", 327 | "1hpZjXi8jtTWJfJacnzhvlW/n3seD452DNz2rM7ldaifPc37DNyWJwI+fSLmS3c2P33s9+md+/SY\n", 328 | "1Uj9umZb2zxxeLn9qtVXvba17tO8j7dratka2xyvrc6tkdra99O83beerau/MUYtIx0DN7lNWZ2D\n", 329 | "Q/1sMn0GnJDjkNU4ZDUWeY1DVmPpcTLNzZxb45DVWA718/vWbgwAAACMzmQaAAAACplMAwAAQCGT\n", 330 | "aQAAAChkMg0AAACFTKYBAACgkMk0AAAAFDKZBgAAgEIm0wAAAFDIZBoAAAAKmUwDAABAIZNpAAAA\n", 331 | "KGQyDQAAAIVMpgEAAKCQyTQAAAAUMpkGAACAQibTAAAAUMhkGgAAAAqZTAMAAEAhk2kAAAAoZDIN\n", 332 | "AAAAhUymAQAAoJDJNAAAABQymQYAAIBCJtMAAABQyGQaAAAACplMAwAAQCGTaQAAAChkMg0AAACF\n", 333 | "TKYBAACg0HO1K0gpXex8+TDn/LB2necupXQvIu5V2vbFzpfymklW45DVWOQ1DlmNpVZeslqec2sc\n", 334 | "shpLSV4p51yzITnnnKpVQEQs18/yqk9W45DVWOQ1DlmNZYl+ltU6nFvjkNVYDvWzt3kDAABAIZNp\n", 335 | "AAAAKGQyDQAAAIVMpgEAAKCQyTQAAAAUMpkGAACAQibTAAAAUMhkGgAAAAqZTAMAAEAhk2kAAAAo\n", 336 | "ZDINAAAAhUymAQAAoJDJNAAAABQymQYAAIBCJtMAAABQyGQaAAAACplMAwAAQCGTaQAAAChkMg0A\n", 337 | "AACFTKYBAACgkMk0AAAAFDKZBgAAgEIm0wAAAFDIZBoAAAAKmUwDAABAIZNpAAAAKGQyDQAAAIVM\n", 338 | "pgEAAKCQyTQAAAAU6m4ynVK61+M6vbarpZ77pNd8Wzqnfjz3vHrtk17b1VLPfdLrMdFSr33S8zqt\n", 339 | "9NwnvR4TLfXaJz2v00qvfdJru47pbjIdEfc6XWeNOk5dp5V7Z7TOGnW0dm+FddaoY811WrnX6Tpr\n", 340 | "1HHqOq3cu+XrnFJHS/dWWGeNOtZcp5V7Z7TOGnW0dq9y+XNcp5V7na6zRh2nrrNXj5NpAAAA6JrJ\n", 341 | "NAAAABRKOed6G0+p3sZ5Rs45zd2GvNYhq3HIaizyGoesxjI3L1mtx7k1DlmNZV9eVSfTAAAAcI68\n", 342 | "zRsAAAAKmUwDAABAIZNpAAAAKGQyDQAAAIVMpgEAAKDQ/w96DfwgtyhM9wAAAABJRU5ErkJggg==\n" 343 | ], 344 | "text/plain": [ 345 | "" 346 | ] 347 | }, 348 | "metadata": {}, 349 | "output_type": "display_data" 350 | } 351 | ], 352 | "source": [ 353 | "%matplotlib inline\n", 354 | "import matplotlib.pyplot as plt\n", 355 | "import numpy as np\n", 356 | "\n", 357 | "plt.figure(figsize=(17,5))\n", 358 | "omega = [0.0001, 1./8*np.pi, 1./4*np.pi, 1./2*np.pi, np.pi, 3./2.*np.pi, 7./4.*np.pi, 15./8.*np.pi, 2*np.pi]\n", 359 | "num_steps = 16\n", 360 | "x = np.linspace(0, 2*np.pi, num_steps)\n", 361 | "\n", 362 | "for index, alpha in enumerate(omega):\n", 363 | " ax=plt.subplot(1, 9, index+1)\n", 364 | " markerline, stemlines, baseline = plt.stem(x, np.cos(alpha*x*(num_steps-1)/(2*np.pi)), '--')\n", 365 | " plt.setp(stemlines, 'color', 'b')\n", 366 | " plt.setp(baseline, 'color', 'k')\n", 367 | " plt.setp(ax.get_xticklabels(), visible=False)\n", 368 | " plt.setp(ax.get_yticklabels(), visible=False)\n", 369 | " plt.title('$\\omega$='+str(round(alpha,2))+', N='+str(round(2*np.pi/alpha,2)))\n", 370 | " plt.ylim([-2,2])\n" 371 | ] 372 | }, 373 | { 374 | "cell_type": "markdown", 375 | "metadata": {}, 376 | "source": [ 377 | "The 2D Discrete cosine goes like:\n", 378 | "$$\n", 379 | "cos(\\omega_1 n_1 + \\omega_2 n_2 )\n", 380 | "$$\n", 381 | "Also, to remember:\n", 382 | "$$\n", 383 | "cos(\\pi n_1) = (-1)^{n_1}\n", 384 | "$$" 385 | ] 386 | }, 387 | { 388 | "cell_type": "code", 389 | "execution_count": 2, 390 | "metadata": { 391 | "collapsed": false 392 | }, 393 | "outputs": [ 394 | { 395 | "data": { 396 | "image/png": [ 397 | "iVBORw0KGgoAAAANSUhEUgAAAkMAAAJMCAYAAAD5b6JOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\n", 398 | "AAALEgAACxIB0t1+/AAAIABJREFUeJzt3XtsXNd59/vfI1lwyKQxUtFF+lqBR8e0qkhiIiWnIE6S\n", 399 | "l5ba2kXdOFYCI41gOK3SFkjqAwUt/KY31RJTRQHaP5IIzgFeFI1aR7aq4s3F8RsVNZCSYpMCTNoj\n", 400 | "BbpYN0NsK8WFKlmBL6R7ZGmdP2Y4GY3mstfsvfbs2ev7AQhuDtesvdZ+OHse7ss85pwTAABArJb0\n", 401 | "ewAAAAD9RDIEAACiRjIEAACiRjIEAACiRjIEAACiRjIEAACiRjIEAACiVqhkyMzeZmbfMLNXzeyc\n", 402 | "mW3Jom2efMdV1Hn0ItL4fdXMXjSzH5vZSTP7zYbfrTaz79R+d9rMNoefQTYijeUrZvZy7esVM3vD\n", 403 | "zL5U+907BzWWUmni+aiZ/cDMXjezryRoP21mCw3xfL7hd21jXXQliWXb/Wab9l1jb2Z31+L9ZE+D\n", 404 | "cs4V5kvS/trXkKT3S/qxpHembVvUORR5HsQvcfzWSHpTbXmVpBclbZC0VNIpSZ+WZJI2SXpV0mi/\n", 405 | "50gsEz33zZJeqT1voGNZonhulvQhSV+W9JUE7ackbU0Y65clvb/fc4woli33m2liL+nvJR2S9GRP\n", 406 | "Y+r3RmmYyLCk/5J0V8Njfy1pd5q2RZ1DkedB/Hobl6Sfk/QjSQ9JWivp5abf/72kyX7Hilgmev6v\n", 407 | "SzpbWx7YWJYlnk1j/NN2b4hN7aYkfcIn1kX/Klssa2Oq7zd7jb2kj0n6G0mPq8dkKJfTZGb2rJld\n", 408 | "MbOXWnz/Vq3ZKklXnXMvNDz1h6ruiJr5tM1EgDn00r4viF/ncZnZl83sNUnPq/qiPtiuqaR1KaeS\n", 409 | "CrFMPK6PS+p0uL3vsZSiimevPm9mF83sH83snjZtusU6F7HF0mO/2W2db5U0Ken3VH1d9uSWHlZ8\n", 410 | "m6qHEw82Pf59SQ86515sfo5z7oEEXb9F1UOVjV6W9FMp296kIHPopX1qBZl7WeK32PejZvZ/S/q/\n", 411 | "JG1U9b+xU5Iumtljkr4o6Rck3SPpHxKMI5GCbIdSxbK27jslTUj6RO2h4LGsrbcI26Ko8ezFZySd\n", 412 | "kPT/Sdoi6Vkze7dz7lzDuJpjnQli2V2b/WYvPivpL5xzPzLrORfq6cjQLy5uHDN7b8PjX5d0zcw+\n", 413 | "YmZ/2EO/r0p6a9Njt6l63j5N21Y6zeEuM/uwmT1uZu9J2F+v40o7j14Qv/Z6Hper+idJ75D0Kefc\n", 414 | "G6qe5/6gqufDf1fSAUnnPcfUCbFsL824HpH0Xefcv0pSTrGUiGemnHM/cM695py76px7UtL3JN3f\n", 415 | "1OyGWGeIWCbQvN/0fb6ZrZf0S6r+k5JKL8lQY5n7zzQsv+ScuyjpXyQta3yCmR20G6/eb/z6dq3Z\n", 416 | "aUm3mNldDU99t6TjLcbg09ZnDlck/Z+SLkj6gqTHAs4hi3n0gvhlF79WbpF0lyQ554455zY65253\n", 417 | "zv1K7fHve/TVDbEME8tHJP3VDYMMH0uJeHaaQxacbj6NclOsM1zXImLZPZb1/aaneyTdKenfzOzF\n", 418 | "2lgeMrN/9u6ph4udPlv7fq+kv6wtPyTpgdrynZIe7+UCJklPS3pK1Qu/PqDqRm93lXzHtpL2qv1V\n", 419 | "5x3nUPv5nZI+F3IOvbRP+0X8Mp3D7ZJ+TdW7UZZI+mVV/+v61drvxyTdWuvrMUkvSFpGLIsXy4bn\n", 420 | "vK8Wwzc3PR40lsQz0RyWSnqTpN2qXuNzq6SlbdreJum+xTaSHq7FdbShTctYE8uwsVSX/aZP7GuP\n", 421 | "/UzD159L+ltJP+27XXs5MnTdzM6pemjqVjN7QdIdzrlne+ir2aOqBu2ipH2SPumca/xsiINm9gdJ\n", 422 | "2qp62O27KeawWdLnAs8hyTyyRvyym4NT9dDuv0t6SdKfSfq0c27xP6BHVD2t8h+q3o59r3Puag9j\n", 423 | "aodYZjeHRR+X9DXn3GtNj4eOpUQ8u9kuaV7S76ua3MxL+uM2c1gmaVdtDv9Zm9ODzrmzDf21i3UW\n", 424 | "iGV73fabrV6bLWPvnHvdOXdx8UvVU4OvO+de8hyTrJZ1ZcaqF6T9hnNuMtOO/cawTNIRSe9yzl3r\n", 425 | "4fkPSJqW9Hbn3JmMh1doxK88iGW5EM/yIJbFk+mt9Wb2FlUPo73XzPp2e7irXjC3tscAf1jSn0j6\n", 426 | "mqSPZj64AiN+5UEsy4V4lgexLKbMjwwBAAAMkkLVJgMAAMgbyRAAAIgayRAAAIhaonIcZsaFRX3m\n", 427 | "nOv9c8YbEMtiIJ7lQSzLI6tYSsSzCHzimfjIUKsPKdqxY4fXhxrRvrf2WSvS3MrannjG0Z5Ylqd9\n", 428 | "CEWaX2ztfXGaDAAARI1kCAAARC1VMrRx40ba97F9loo2t0Fv3+tzslK07RFb+ywVbW6xtc9a0eYX\n", 429 | "W/t2En3oopm5UOdU0Z2ZyWV4kSax7C/iWR7EsjyyjGWtP+LZR77xTHQ3mSTt3Lmzvrxx48a+Z9dl\n", 430 | "Nj09renp6WD9E8t8Ec/yIJblETqWEvHMU9p4cmRoAPDfZ7kQz/IgluXBkaFy8Y0nF1ADAICokQwB\n", 431 | "AICokQwBAICoJb6AGuWxsLDQ7yEgQ2fOnOn3EJCRycnJxG25HqX4zDK7BAmBcWQIAABEjWQIAABE\n", 432 | "jWQIAABEjWQIAABEjWQIAABEjWQIAABEjdpkBRS6Zs6uXbvqyxMTE5qYmAi2LkgzMzOamZkJ1v+e\n", 433 | "PXvqy+Pj4xofHw+2rtjNzs5qdnY2WP9TU1P15UqlopUrVwZbV+zm5uY0NzfX72GgIKhNNgCyrn80\n", 434 | "Pz+fRVfo0fDwcKbxPH36dBZdoQerVq3KNJaN/3R2wz45W5OTk5nXJsuqL/SG2mQAAAAJkQwBAICo\n", 435 | "kQwBAICoUZssQufPn+/3EJChp59+OnFbrjMpNp9rhlB8vN76x7cuHEeGAABA1EiGAABA1EiGAABA\n", 436 | "1EiGAABA1EiGAABA1EiGAABA1KhNVkCha5NRyypf1LMqD+pZwQfvm/lJ+75JbbIBkHVtMmpZ9Rf1\n", 437 | "rMojy3pW1LLqv6xrk/F66x/f901OkwEAgKiRDAEAgKiRDAEAgKhRmyxCJ06c6PcQkKF9+/b1ewjI\n", 438 | "yI4dOxK39a29hM5C1IUjRoODI0MAACBqJEMAACBqJEMAACBqJEMAACBqJEMAACBqJEMAACBq1CYr\n", 439 | "oNC1yfbv319fXrduncbGxoKtC9LRo0d17NixYP1fvny5vjw0NKTh4eFg64rd/Py8FhYWgvXf+Lqv\n", 440 | "VCqqVCrB1hW7c+fOUWcOddQmGwBZ1yb75je/mUVX6NHmzZszjefo6GgWXaEHZ8+ezTSWfM5Q/+zc\n", 441 | "uTPz2mRZ9YXeUJsMAAAgIZIhAAAQNZIhAAAQNZIhAAAQNS6gHgBZX0DtU5CQuGdvcnIy03hm0Q96\n", 442 | "l2Useb31T5b72Vp/xLOPfOPJkSEAABA1kiEAABA1kiEAABA1kiEAABA1kiEAABA1apMVUOjaZFNT\n", 443 | "U/XlSqWilStXBlsXpLm5OWogIRH2s/kJvZ+ViGee0saTW+sHALfWlwu31pcLt9aXA7fWlwu31gMA\n", 444 | "AHggGQIAAFEjGQIAAFEjGQIAAFFLfDcZyuPw4cPB+uaCwfyNjo72ewjROnv2bKb9TU5OJm7La634\n", 445 | "zDK7HhuBcWQIAABEjWQIAABEjWQIAABEjWQIAABEjWQIAABEjdpkBRS6Zs7JkyfryyMjIxoZGQm2\n", 446 | "LkiXLl3SpUuXgvV/+fLl+vLQ0JCGh4eDrSt28/PzWlhYCNY/dQPzQ81ANKI22QDIujbZgw8+mEVX\n", 447 | "LfF30t23vvWtTOPJrfX9c/bsWeoGlkSWNQMl6gYWAbXJAAAAEiIZAgAAUSMZAgAAUSMZAgAAUeMC\n", 448 | "6gGQ9QXUXHDbX1lfdLtjxw6f9lmsFjU7d+7MNJZZ9IPeZX0BNe+b/eP7vsmRIQAAEDWSIQAAEDWS\n", 449 | "IQAAEDWSIQAAEDWSIQAAEDVqkxVQ6Npk1LLKV+h6Vo1/K5VKRZVKJdi6Ynfu3DnqWSEx3jfzk/Z9\n", 450 | "k1vrBwC31pcLt9aXB7fWlwu31pcHt9YDAAB4IBkCAABRIxkCAABRIxkCAABR4wLqAZD1BdRDQ0NZ\n", 451 | "dIUeLSwsZBrP06dPZ9EVerBq1Souhi+JLC+Gl7ggvgi4gBoAACAhkiEAABA1kiEAABA1kiEAABA1\n", 452 | "kiEAABA1apMVUOjaZFevXq0vL1myREuXLg22LkjXrl3T9evXg/W/Z8+e+vL4+LjGx8eDrSt2s7Oz\n", 453 | "mp2dDdY/debyQ505NOLW+gHArfXlwq315cGt9eXBrfXlk9ut9b5HL2ifbfssXbt2jfYZtu/1OVnx\n", 454 | "PXpB+2zbZ8n36MW5c+don2F7xIFkaIDbZ8n3NA7twzwnK0VLDmJrnyXfZIj22bZHHLiAGgAARI1k\n", 455 | "CAAARC3xBdQ5jAUdZHmRZhb9IB3iWR7Esjy4gLpcfOKZKBkCAAAoK06TAQCAqJEMAQCAqJEMAQCA\n", 456 | "qPU1GTKzt5nZN8zsVTM7Z2ZbOrT9qpm9aGY/NrOTZvabTb9fbWbfqf3+tJltDj+D7jznmLhtERC/\n", 457 | "m9oO5BylOObpOcdXzOzl2tcrZvaGmX2p4feFnOOiSOL5qJn9wMxeN7OvdGk7bWYLDfF8vun3HePd\n", 458 | "T5HEsuO4m9omiruZ3V2L+ZOJBuGc69uXpP21ryFJ75f0Y0nvbNN2jaQ31ZZXSXpR0obaz0slnZL0\n", 459 | "aUkmaZOkVyWN9nN+PcwxcdsifBG/cswxlnn2+vqS9GZJL0t6f9HnGFk8N0v6kKQvS/pKl7ZTkrYm\n", 460 | "7PeGePf7K5JYth13r3GX9PeSDkl6MtEY+jj5YUn/Jemuhsf+WtLuBM/9OUk/kvRQ7ee1kl5usSEm\n", 461 | "+xzgxHNMsz2KPrcY4jeoc4xlninn+OuSzjb8XMg5xhTPpvH8aac3xVqbKUmfSNjfDfEmlrnP+YZx\n", 462 | "9xJ3SR+T9DeSHlfCZCjIaTIze9bMrpjZSy2+f6vWbJWkq865Fxqe+sNawNr1+2Uze03S86purIOd\n", 463 | "hiFpXcqptO88+zl6b49QiF855lgbT+nnGWqODT4uqduh9uCxlIhnwxx78Xkzu2hm/2hm93RolyTe\n", 464 | "qRHLG2PpOe5O63yrpElJv6fq/JJJkKXdJun+Fo9/X9LPpsj+PiDpR02P/Zakf+jyPJP0Pkl/JGlp\n", 465 | "7bFbJJ2V9Fht+T5Vs+m/69f8fOfY6/YgfsWIX8g5Esu+xvJOSVcl3dnwWOpYEs908WzqL8mRoZ9X\n", 466 | "9fTXMlWTnZclrUwSb2KZayxvGrdv3CV9UdJjteUdyvDI0C865w5Kkpm9t+Hxr0u6ZmYfMbM/TNBP\n", 467 | "s1clvbXpsdskvdLpSa7qnyS9Q9Knao+9oep5xA+qeq7xdyUdkHQ+wTi6zW/UzD5sZo+b2XsS9NfI\n", 468 | "Z449bY8EiF8+8asLMMdFxDLnWEp6RNJ3nXP/uvhARrGUiGeaeHpxzv3AOfeac+6qc+5JSd+TdH+L\n", 469 | "pjfFOyFimUEsW43bh5mtl/RLqiZEXpIkQ65h+TMNyy855y5K+hdVs+3GAR20G6/Ob/z6dq3ZaUm3\n", 470 | "mNldDU99t6TjCcd+i6T6c51zx5xzG51ztzvnfqX2u+9nML8HJF2Q9AVVM+pQc0y7PdohfvnEL+Qc\n", 471 | "6100LBPLfOb4iKS/ummg6WMpEc808UzLqfUplJbxTtjfImLpN8eu4/Zwj6pH9/7NzF6sjeUhM/vn\n", 472 | "rs9McNjqs7Xv90r6y9ryQ5IecD85rPh4ksNQLfp+WtJTql4k9gFJV9TiKnlJt0v6NVUPcy6R9Muq\n", 473 | "Zsa/2tBmTNKttb4ek/SCpGUNv9+r1ofUOs6vod07JX0u1Bx923qsn/jlEL8s5kgsixHLhvbvq83t\n", 474 | "zS1+lyqWxDOTeC6V9CZJu1W9xudWtTi1ouqRlPsWfy/p4docR5vatY03sQwXyyTjThr32uM/0/D1\n", 475 | "55L+VtJPdxtHkiND183snKqHnm41sxck3eGcezbBc7t5VNWgXJS0T9InnXP1z3+oZZV/oGpW+ilJ\n", 476 | "/y7pJUl/JunTzrnGzPIRVQ/9/Yeqtwze65y72vD7d0j6bor5bZb0uSzn2DC/rm1TIH5VoeOXxRy7\n", 477 | "IZZVebwWpeq1JV9zzr3Woq+0sZSI56Je47ld0ryk31c1wZmX9MdN85OqR2R2qbot/lPVbfOgc+5s\n", 478 | "U3+d4t0NsazqJZYdx93itdk27s65151zFxe/VD3N+Lpz7qVug0hdqNXM7pT0G865yVQdBWRmyyQd\n", 479 | "kfQu59y1Hp7/gKRpSW93zp3JeHh9RfzKg1iWC/EsD2JZfKlurTezt6h6qOy9Zpb7LeBJuepFc2t7\n", 480 | "DPCHJf2JpK9J+mjmg+sj4lcexLJciGd5EMvBkPrIEAAAwCCjUCsAAIgayRAAAIjaLUkamRnn0vrM\n", 481 | "OZf8Y8U7IJbFQDzLg1iWR1axlIhnEfjEM1EyVOv0psd27typnTt33vT4wsJCyz527dql7du33/T4\n", 482 | "+fOtPwBzz5492rZt202PnzhxomX7/fv3a8uWLTc9fuTIkZbtp6amtGnTppa/O3z48E2PnTx5UqtX\n", 483 | "r27Z/vjxmz8D6/Lly1q+fHnL9hcuXLjpsatXr2rZsmU3Pd5ue/aqSLGUWsezXSyl1vHsZywl4rmI\n", 484 | "12Y6xLI8sZSIpzQ48eQ0GQAAiBrJEAAAiFqqZGjjxo1e7ScmJrzaj4+Pe7Vft26dV/tKpeLVfmRk\n", 485 | "xKv90NCQV/slS/qXmxLLznxjKRHPRoMeT2L5E8QyHeLZWb/imehzhszM+Xweke+5unbnPttpd+6z\n", 486 | "nXbnPjtpde6zk1bnPjtpde6znYWFhUwv0ixSLKXw8QwdS4l4LuK12Tti2d2gxFIinkkUKZ6JL6Bu\n", 487 | "vOBr48aN3tktkrt27ZquX78erH9imS/iWR7EsjxCx1IinnlKG8+ekiGEtXTpUi1durT+8xtvvJFp\n", 488 | "/8QyX8SzPIhleYSOpUQ885Q2nlxADQAAokYyBAAAokYyBAAAopb4mqFB5nNFfwx87loIfceCVLy7\n", 489 | "w3zuWFgU4tNrkzpz5kzitrHduSf5x6aXj1HIyuTkZOK2RXsd9PIa8N3Wd9xxh1f7++67L3HbZ555\n", 490 | "xqvvJMyS35wWelusXbvWq/369eu92kvS1q1bvdqvWbPGq/2KFSsStx0eHvbqmyNDAAAgaiRDAAAg\n", 491 | "aiRDAAAgaiRDAAAgaiRDAAAgaiRDAAAgatQmK6DQNXN27dpVX56YmPCuioxi2bNnT315fHzcu2o1\n", 492 | "kgv92pyamqovVyoVrVy5Mti6Ynfp0iVdunSp38NARmZmZjQzM9Pz86lNVkCha+Zs37490/7QX9u2\n", 493 | "bev3EKIR+rW5adOmTPtDeyMjIxoZGan/fOrUqT6OBmk1/2O/e/dur+dzmgwAAESNZAgAAESNZAgA\n", 494 | "AEQtitpkvShzPTOfemOha1lJ8dVYyrqO2dNPP524bWzbWpJGR0e92vvUcMq6npXPtZlFqusl9VbL\n", 495 | "asOGDV7ti1TLKgmf9xHf10LoupG97Mv37t3r1T6PupFJcWQIAABEjWQIAABEjWQIAABEjWQIAABE\n", 496 | "jWQIAABEjWQIAABEjdpkBRS6/hG1rPJFPavyoJ5VeaStZZUE75v5SbufpTZZAYWuf0Qtq3xRz6o8\n", 497 | "qGdVHmlrWSXB+2Z+0u5nOU0GAACiRjIEAACiRjIEAACiRm2yCPnUqPGtT+Nb+0oqXv0r35pPkl/d\n", 498 | "p7Nnz3r338m+ffsSty3atvOtGyb51Q6T/Gtm+dTLyro22Y4dOxK3LVJdL6m3103oelzPPfecV/us\n", 499 | "mVnitqFrzYV+3UjS1q1bvdoXqdYcR4YAAEDUSIYAAEDUSIYAAEDUSIYAAEDUSIYAAEDUSIYAAEDU\n", 500 | "qE1WQKFrWe3fv7++vG7dOo2NjQVbF6T5+XnvW4h9XL58ub48NDTkfUspkjt69KiOHTsWrP/p6en6\n", 501 | "cqVSUaVSCbau2IWOJfKVttYctckKKHQtqy1btmTaHzobHh6+IUG5cuVKpv0vX7480/7Q3tjY2A3/\n", 502 | "PBw4cCDT/vknMz+hY4l8pa01x2kyAAAQNZIhAAAQNZIhAAAQNZIhAAAQNQq1Rsin+Kpv4VXfoqtS\n", 503 | "8YqH+hZAlPyKIGZdqNWnv9CFVPMoBlm0AqVZ8rlRpWhFTn2LOkvh9y+++5asOecStw0dT58C3VJv\n", 504 | "8dy7d69X+yLFkyNDAAAgaiRDAAAgaiRDAAAgaiRDAAAgaiRDAAAgatQmK6DQtcmmpqbqy5VKRStX\n", 505 | "rgy2LkiXLl3SpUuX+j0MZCBt/aNu2M/mJ/R+ViKeeUobT2qTFVDo2mSbNm3KtD90NjIyopGRkfrP\n", 506 | "p06d6uNokEba+kfdsJ/NT+j9rEQ885Q2npwmAwAAUSMZAgAAUSMZAgAAUSMZAgAAUaM2WYR86gHl\n", 507 | "UTumaLXGfOtrSX41tp555hnv/jvxqR8WunZY6Lphkn/tMN+/F9+/xyxNTk4mblu0ul69bLfQr+X7\n", 508 | "7rsvcdusX5eSZGaJ2xZtv9ZL3cCtW7d6tQ9ZN3B4eNirb44MAQCAqJEMAQCAqJEMAQCAqJEMAQCA\n", 509 | "qJEMAQCAqFGbrIBC18w5efJkfbm5VASyNzc3p7m5uWD9X758ub48NDTkfRcFkgtdm4y6gfmhZmC5\n", 510 | "pH1tUpusgELXzFm9enWm/aGzSqWiSqVS//nQoUOZ9r98+fJM+0N7oWuTUTcwP9QMLJe0r01OkwEA\n", 511 | "gKiRDAEAgKiRDAEAgKiRDAEAgKhRmyxCPjWKylCfKI+aPL41ubL08MMPJ24bunZY6Lphkv/f2Jkz\n", 512 | "Z7zanzhxwqt9lnxuVClSXS8pn9dNkWpZJeGcS9zW9+/6/PnzXu19/659a99J0t69e73a51H7MimO\n", 513 | "DAEAgKiRDAEAgKiRDAEAgKiRDAEAgKiRDAEAgKhRm6yAQtcmo5ZVvo4ePapjx44F6396erq+3Fz6\n", 514 | "A9kKHUvkJ3SdOYn3zTylfd+kNlkBha5NRi2rfI2NjWlsbKz+84EDBzLtnx1sfkLHEvkJXWdO4n0z\n", 515 | "T2nfNzlNBgAAokYyBAAAokYyBAAAokYyBAAAokZtsgj51HfxrZfTS62potUa66XOmG/NpCz51CYL\n", 516 | "XTssdN0wKXyNpSNHjni1z9KOHTsSty1SXS8pnzpzvvW4nnvuOa/2WTOzxG3LUKNx69atXu2LVGuO\n", 517 | "I0MAACBqJEMAACBqJEMAACBqJEMAACBqJEMAACBq1CYroNC1ya5evVpfXrJkyQ0fYY7szc7OanZ2\n", 518 | "Nlj/e/bsqS+Pj49rfHw82Lpid+nSJV26dClY/9SZyw915solba05apMVUOjaZMuWLcu0P3TWnKA8\n", 519 | "8cQTmfa/bdu2TPtDeyMjIxoZGan/fOrUqUz755/M/FBnrlzS1ppLdZqs8b+YJHyzNt//po8ePerV\n", 520 | "fm5uzqu973+E8/PzXu2vXbvm1T5Lodft27/vtvONjW/sff+2JP+/3yz5rtv3tclrPz+h/1b5Wym2\n", 521 | "2Padof8e2ylVMuR7yDP0DtH3A8VCnhrr97p9+/fddqFf0L0cTicZ6r3/QX/tZyn03yp/K8UW275z\n", 522 | "IJMhAACAQUcyBAAAombOue6NzLo3QlDOueRFbjoglsVAPMuDWJZHVrGUiGcR+MQzUTIEAABQVpwm\n", 523 | "AwAAUSMZAgAAUSMZAgAAUetrMmRmbzOzb5jZq2Z2zsy2dGj7ipm9XPt6xczeMLMvNfx+tZl9x8x+\n", 524 | "bGanzWxzPrPozHOOidsWAfG7qe1XzezF2hxOmtlvNv2+kHOUiGWLtgM5x0UxzNXMHjWzH5jZ62b2\n", 525 | "lS5tp81soWGOzzf9vuM26KdIYtlx39nUNlHczezuWsyfTDQI51zfviTtr30NSXq/pB9LemeC571Z\n", 526 | "0suS3l/7eamkU5I+LckkbZL0qqTRfs7Pd469bo9BmFsk8Vsj6U215VWSXpS0oehzJJblmWNMc5W0\n", 527 | "WdKHJH1Z0le6tJ2StDVhvzdsg35/RRLLtvvOXuMu6e8lHZL0ZKIx9HHyw5L+S9JdDY/9taTdCZ77\n", 528 | "65LONvy8VtLLLTbEZJ8DnHiOabZH0ecWQ/xaPPfnJP1I0kNFniOxLM8cY5xrbTx/2ulNsdZmStIn\n", 529 | "EvZ3wzYglrnP+YZ9Zy9xl/QxSX8j6XElTIaCnCYzs2fN7IqZvdTi+7dqzVZJuuqce6HhqT+sBayb\n", 530 | "j0vqdujLJK3zH30yAeaYZntkivj1Pkcz+7KZvSbpeVVf0Ac7DUMB51gbD7GsGug51lcSwVwTzrEX\n", 531 | "nzezi2b2j2Z2T4d2SbZBasTyxlh67js7rfOtkiYl/Z6q80smQZZ2m6T7Wzz+fUk/myL7+4CkHzU9\n", 532 | "9luS/qHL8+6UdFXSnQ2P3SLprKTHasv3qZpN/12/5uc7x163B/ErRvya2pik90n6I0lL086RWPY1\n", 533 | "lpnOkXhmE8+m/pIcGfp5VU8bLVM1SXhZ0sok24BY5hrLm/advnGX9EVJj9WWdyjDI0O/6Jw7KElm\n", 534 | "9t6Gx78u6ZqZfcTM/jBBP81elfTWpsduk/RKl+c9Ium7zrl/XXzAOfeGqucRP6jqucbflXRA0vkE\n", 535 | "4+g2v1Ez+7CZPW5m70nQXyOfOfa6PbohfvnEr85V/ZOkd0j6VO2xNHNcRCxzjqWyn2Mj4tl7PL04\n", 536 | "537gnHvNOXfVOfekpO9Jur9F05u2QULEMoNYttp3+jCz9ZJ+SdWEyEuSZMg1LH+mYfkl59xFSf+i\n", 537 | "arbdOKCDduNV7Y1f3641Oy3pFjO7q+Gp75Z0vMt4HpH0VzcN0rljzrmNzrnbnXO/IukuVbPWtPN7\n", 538 | "QNIFSV9QNaMONcdet0c3xC+f+LVyS20eaedY76JhmVgO5hxv6KZhmXj6zTEtp9anUFpug4T9LSKW\n", 539 | "fnNs5YZ9p4d7VD0q9m9m9mJtLA+Z2T93fWaCw1afrX2/V9Jf1pYfkvSA+8nhuMd7PCT2tKSnVL1I\n", 540 | "7AOSrqjDVfKqHj57RdKbW/xuTNKttb4ek/SCpGUNv9+r1ofUOs6vod07JX0u5Bx9t0fC9RO/HOIn\n", 541 | "6XZJv6bqofglkn65NtdfTTpHYlmMWGYxR+KZSzyXSnqTpN2qXhtzq1qcWlH1SMp9i7+X9HBtrqNN\n", 542 | "7dpuA2KmVns8AAAgAElEQVQZLpZKsO9MGvfa4z/T8PXnkv5W0k93G0eSI0PXzeycqoeebjWzFyTd\n", 543 | "4Zx7NsFzu3lU1aBclLRP0iedc/XPf6hllX/Q0P7jkr7mnHutRV+PqHro7z9UvWXwXufc1Ybfv0PS\n", 544 | "d1s8L+n8Nkv6nNfsqtrOscX8Om6PHhG/qtDxc6oe1v13SS9J+jNJn3bONf73022O3RDLqjxei1K6\n", 545 | "OSZBPKt6jed2SfOSfl/VBGde0h9LN81vmaRdqm6L/1R12zzonDvb1F+nbdANsazqJZYd950t5tc2\n", 546 | "7s65151zFxe/VD3N+Lpz7qVug0hdqNXM7pT0G865yVQdBWRmyyQdkfQu59y1Hp7/gKRpSW93zp3J\n", 547 | "eHh9RfzKg1iWC/EsD2JZfKlurTezt6h6qOy9Zpb7LeBJuepFc2t7DPCHJf2JpK9J+mjmg+sj4lce\n", 548 | "xLJciGd5EMvBkPrIEAAAwCCjUCsAAIgayRAAAIgayRAAAIjaLUkamRkXFvWZcy55jZUOiGUxEM/y\n", 549 | "IJblkVUsJeJZBD7xTJQM1Tq96bGdO3dq586dNz1+5kzru+r27Nmjbdu23fT4008/3bL91NSUNm3a\n", 550 | "dNPj+/bta9n+8uXLWr58+U2Pnz3b/HES3Y2OjibuX5Iefvjhmx6bnp7Wxo0bE7dvt31WrVrVZbR+\n", 551 | "ihRLqXU8O21r33iGjmW758QYT16b6RDL8sRSIp6d+peKFU9OkwEAgKiRDAEAgKilSoY6nTZoZXx8\n", 552 | "3Kt9pVLxaj80NOTV3pdv/77j990+WSKWnfmOXyKejQY9nsTyJ4hlOsSzs37Fs9DJ0MqVK73aDw8P\n", 553 | "e7X35dv/IL1IiWVnJEM3ii2exPIniGU6xLOzfsUz8QXUjRd8bdy40TugSG52dlazs7PB+ieW+SKe\n", 554 | "5UEsyyN0LCXimae08ewpGUJY4+PjN2S7TzzxRKb9E8t8Ec/yIJblETqWEvHMU9p4cgE1AACIGskQ\n", 555 | "AACIGskQAACIWuJrhkJq9Smdg8Yss09xD25hYSFx2xMnTnj1ffjwYd/h6MKFC17tfW/VXLt2rVf7\n", 556 | "DRs2eLWXpBUrVng/JyvtPrm2lXafWttOu0+tbSeLTwfvptWn0GbZ/u677/Zqn6XJycnEbYsWmx07\n", 557 | "dni1l8LHxue1EYLP+4Lv9vbddgcPHvRq38vrwHd7P/XUU17t77//fq/2PjgyBAAAokYyBAAAokYy\n", 558 | "BAAAokYyBAAAokYyBAAAokYyBAAAokZtsgIKXTNn165d9eWJiQlNTEwEWxekmZkZzczMBOt/z549\n", 559 | "9eXmj6RHtqanpzU9PR2s/6mpqfpypVLxLrqJ5PKoTYb8zM/Pe31sTDNqkxVQ6Jo527dvz7Q/dNac\n", 560 | "cO7evTvT/rdt25Zpf2iv+R9Bn88FSmLTpk2Z9of28qhNhvwMDw9reHi4/vOVK1e8ns9pMgAAEDWS\n", 561 | "IQAAEDWSIQAAELVC1CZDvs6fP5+47ZEjR7z6Pn78uO9wvC96863hs379eq/2a9as8Wov+ddLy5JP\n", 562 | "vbGi1bPyra/Uy3MGqZ6Vz7WZoWuH5VHTzXdb+1676lv7Kms+dTd9t4VvnUHful6+r32pWPXVVq1a\n", 563 | "5dU3R4YAAEDUSIYAAEDUSIYAAEDUSIYAAEDUSIYAAEDUSIYAAEDUqE1WQKFr5lDLKl/UsyoP6lmV\n", 564 | "R9paVknwvpmftK9NapMVUOiaOdSyyhf1rMqDelblkbaWVRK8b+Yn7WuT02QAACBqJEMAACBqJEMA\n", 565 | "ACBq1CaL0IkTJxK3PXz4sFffFy5c8B2Od12vtWvXerXfsGGDV/sVK1Z4tZf866tlyafeWNFqjfVS\n", 566 | "myx0rbF+1rPyqR9WtBptvVwf47utQ//9Zs3MErctUl0vKZ9ac6Hrq/ngyBAAAIgayRAAAIgayRAA\n", 567 | "AIgayRAAAIgayRAAAIgayRAAAIgatckKKHT9o/3799eX161bp7GxsWDrgjQzM6OZmZlg/V++fLm+\n", 568 | "PDQ0dEOJAWRrbm5Oc3NzwfpvrGFXqVRUqVSCrSt2edQmQ37SxpPaZAUUuv7Rli1bMu0PnU1MTGhi\n", 569 | "YqL+8+7duzPtf/ny5Zn2h/aaE5RDhw5l2j//ZOYnj9pkyE/aeHKaDAAARI1kCAAARI1kCAAARI1k\n", 570 | "CAAARI1CrRE6cuRI4rbHjx/36ruXq/l9CxSuX7/eq/2aNWu82vsWjpX8CxRmyad4ZdEKr+ZRDNK3\n", 571 | "GGg/C7X63Kjiux0mJye92vsUAJb8i6hK/n+PPoVsJb+/x1WrVnn1nYRzLnHbohU5zSOeIYvN+saT\n", 572 | "I0MAACBqJEMAACBqJEMAACBqJEMAACBqJEMAACBq1CYroNC1yaampurLlUpFK1euDLYuhI8n8hO6\n", 573 | "nhX72fzk8boknvlJG09qkxVQ6NpkmzZtyrQ/dBY6nshP6HpW7Gfzk8frknjmJ208OU0GAACiRjIE\n", 574 | "AACiRjIEAACiRjIEAACiRm2yCB0+fDhx2wsXLnj13Utdr7Vr13q137Bhg1f7FStWeLXv5W6hEydO\n", 575 | "eD8nKz71gIpWa6yXmm6+NZl8a431UpMpKz71w0LXDgtdN0wq5t9Xlswscdsi1fWS8qkbGLq+mg+O\n", 576 | "DAEAgKiRDAEAgKiRDAEAgKiRDAEAgKiRDAEAgKhRm6yAQtfMOXnyZH15ZGREIyMjwdYF6ejRozp2\n", 577 | "7Fiw/i9fvlxfHhoauqFcBAYLdQPzQ83AcklbN5DaZAUUumbO6tWrM+0PnY2NjWlsbKz+84EDBzLt\n", 578 | "f/ny5Zn2h/6hbmB+qBlYLmnrBnKaDAAARI1kCAAARI1kCAAARI1kCAAARI3aZBE6fvx44ra+V+f7\n", 579 | "1teRpPXr13u1X7NmjVd733ppvdQz8qn3ljWfGkVFqwXlWzesl+eErMmVdR0znxtVQtcOC/23Ivn/\n", 580 | "vfjUbpP867dlzTmXuG3o145vXa9e/raLVF9t1apVXn1zZAgAAESNZAgAAESNZAgAAESNZAgAAESN\n", 581 | "ZAgAAESN2mQFFLpmDrWs8jU3N6e5ublg/U9PT9eXK5WKKpVKsHXFLm39IxRHHrHkfTM/ad83qU1W\n", 582 | "QKFr5lDLKl/NCcqhQ4cy7Z8dbH7S1j9CceQRS94385P2fZPTZAAAIGokQwAAIGokQwAAIGokQwAA\n", 583 | "IGrUJovQhQsXErf1reu1du1a3+Fow4YNXu1XrFjh1d73jpETJ054tZekI0eOeD8nKz71fYpWa6yX\n", 584 | "2mQha41JftvTt1ZWNz71w4pWZ66XbeFbOyx07LNmZonbFqmul5RPrbnQ9dV8cGQIAABEjWQIAABE\n", 585 | "jWQIAABEjWQIAABEjWQIAABEjdpkBRS6NtnVq1fry0uWLNHSpUuDrQvSpUuXdOnSpWD979mzp77c\n", 586 | "/JH0yBZ15sqDOnPlkjae1CYroNC1yZYtW5Zpf+hsZGREIyMj9Z9PnTqVaf/btm3LtD+0R5258qDO\n", 587 | "XLmkjWeq02SN/8Uk4Xu0w/c/sPn5ea/2vnz7P3funFf7kEeDurl27VrQ9r5HRo4ePerVfmZmJmh7\n", 588 | "3/FI/nPOku/fEq/lzkIeDcp63UWLve9+sGix77fQf6tF+3vp176iVMlQ6EOevv2H/qPM0vXr14O2\n", 589 | "900Mjh075tU+dDLkOx6JZKhRbK/lLMX25la02Pdb0d53yvr3wgXUAAAgaiRDAAAgauac697IrHsj\n", 590 | "BOWcS17kpgNiWQzEszyIZXlkFUuJeBaBTzwTJUMAAABlxWkyAAAQNZIhAAAQNZIhAAAQtb4mQ2b2\n", 591 | "qJn9wMxeN7OvdGk7bWYLZvaymb1iZs83/f6V2u8Wf/+GmX0p7Ay6M7O3mdk3zOxVMztnZluyaFsE\n", 592 | "xO+mtl81sxfN7MdmdtLMfrPp96vN7Du13582s83hZ5AMsbypbcc5FDmWUjTxLP0cpTjm2W3f2dQ2\n", 593 | "0fYws7tr2+LJJGNIXI4jkAuS/lTSL0sa6tLWSfod59zelr907qcWl83szZJelPS3GY0zjf9H0uuS\n", 594 | "bpf0HknfNrMjzrnnU7YtAuJ3o89L+m3n3OtmtkrSITP7f51zh81sqaRnav39kqSNkp41s/XOubO5\n", 595 | "zKQzYtmg0xwGIJZSHPGMYY5SHPNsu+9s0Tbp9nhC0veTDqCvR4acc990zn1L0ksJn5L0NrmHJF10\n", 596 | "zn2vt5Flw8yGJX1E0nbn3EJtPM9IeiRN26Igfjdyzp1wzr2++HRVd0x31X5eLelnnXNfclVTkr7X\n", 597 | "rq+8EcuOmudQ6FhK5Y+nFMccpTjm2WXf2dy26/Yws49JuiLpO0nHECQZMrNnzeyKmb3U4vu3UnT9\n", 598 | "eTO7aGb/aGb3dGj3cUmJDo31KuEcV0m66px7oeGpP5S0tkWXPm2DIn49xW+x3y+b2WuSnpf0I0kH\n", 599 | "Ow1D0rqUU+mIWPYeywZJ5hA8lhLxLMscpTjm6TNHz31np3W+VdKkpN9T8sRQcs51/JJ0m6T7Wzz+\n", 600 | "fVX/O+raR4J1/Kmkr3Rp8/OS3ixpmapBfFnSyhbt7pR0VdKdCdcdbH6SPiDpR02P/Zakf0jT1nMM\n", 601 | "xC+H+DW1MUnvk/RHkpbWHrtF0llJj9WW75P0X5L+jlgWOpY3zSGLWBLPbObX7zkSy8xjedO+03d7\n", 602 | "SPqipMdqyzskPZlk3UmODP2ic+6gJJnZexse/7qka2b2ETP7wwT9pOKc+4Fz7jXn3FXn3JOqHpa+\n", 603 | "v0XTRyR91zn3rwm77ja/UTP7sJk9bmbv8Rz2q5Le2vTYbZJeSdnWB/HLJ351ruqfJL1D0qdqj70h\n", 604 | "abOkD6p6nv53JR2QdN5jPMQy51iqxRwyiqVEPNPE00vAOS4ilhnEstW+04eZrVf1Or4v+j43STLU\n", 605 | "+BHVn2lYfsk5d1HSv6iahTYO6KDdeNV649e3fQfZYVytDoE9IumvPPtZ1Gp+D6h6wdYXVP1PUFLi\n", 606 | "OZ6WdIuZNZ77fLek4y3G4dPWB/HLJ36t3KKG897OuWPOuY3Oududc79S+13iC/xELPsRy5ZzyCCW\n", 607 | "EvFME8+0sppjY3+LiGVNijnesO/0cI+qR73+zcxerI3lITP7525PTHI32QZJ3zCze1X970pm9pCq\n", 608 | "/xG15JxrlYnexKp3ZSyTtFTVHdWtkt5wzl1ranebpHFJhyS9Ieljkv67pG1N7d4n6b9J+l8t1rW3\n", 609 | "OjT3CZ/5Oee+UHvsnZLO+czROTdvZl+X9Fkz+21V72B5QNXDgD239UT8FD5+Zna7pF+Q9L8lLUi6\n", 610 | "tzbPjzW0GVP1TXmppN+R9Hb57ZCIpcLHMuEc0sZSIp49xzPvOSZALNVbLJPsO5vad9oe/1PS/obm\n", 611 | "/0PV5OiT3caR5MjQdTM7p+qhp1vN7AVJdzjnnk3w3G62S5qX9PuSHq4t//HiL2tZ5R+oOvFdki5K\n", 612 | "+k9Jj0p60N18G+vHJX3NOfdai3W9Q9J3WzyedH6bJX3Oc36qjXW4NvZ9kj7parfyNsyva9sUiF9V\n", 613 | "6Pg5VQ/r/ruqdzn8maRPO+ca//t5RNWdx39I2iTpXufcVY+xEMuqPF6L3eaQNpYS8VzUazzbzrEp\n", 614 | "nlnMsRtiWdVLLDvuO1u8NttuD+fc6865i4tfqiZurzvnut6Jl7pQq5ndKek3nHOTqToKyMyWSToi\n", 615 | "6V3N2XTC5z8gaVrS251zZzIeXl8Rv/IgluVCPMuDWBZfqlvrzewtqn5WwXvNLPdbwJOqXUy2tscA\n", 616 | "f1jSn0j6mqSPZj64PiJ+5UEsy4V4lgexHAypjwwBAAAMMgq1AgCAqJEMAQCAqCUq1GpmnEvrM+dc\n", 617 | "8o8V74BYFgPxLA9iWR5ZxVIinkXgE8/EVetbXVu0c+dO7dy586bHJydbXzA/NTWlTZs2tezHx44d\n", 618 | "O1o+Pj09rY0bNybuv934pdZzaDf+Tutop9Uc2o2/3fbsVZFiKflti3br6GcsJeK5iNdmOsSyPLGU\n", 619 | "iKc0OPHkNBkAAIgayRAAAIhaqmSo3WmMdiqVSprVZd7/oI8/S4O+LYo2/rzW0U7Rtsegx5NY9t7/\n", 620 | "oI8/a4O+PQZ9/O3kmgytXLkyzeq6Ch3Uoo0/S4O+LYo2fol4Nhr0eBLLnyCW6Qz69hj08beT+ALq\n", 621 | "xgudNm7c6L1BkNzc3Jzm5uaC9U8s80U8y4NYlkfoWErEM09p49lTMoSwKpXKDdnuoUOHMu2fWOaL\n", 622 | "eJYHsSyP0LGUiGee0saTC6gBAEDUSIYAAEDUSIYAAEDUEl8z5KPVp25mySyzT0xvqwxzaGdhYSFx\n", 623 | "28OHD3v1PTQ05Dscbdiwwau9z/ilYs4hS2fOnEncdt++fV59j46OerV/+OGHvdr7jH1RkeaQ9acW\n", 624 | "+/SX1ScQZ9V/L9uiSHMI8QnUPvt537n5vkf5bute3qNCzyFEjBZxZAgAAESNZAgAAESNZAgAAESN\n", 625 | "ZAgAAESNZAgAAESNZAgAAESN2mQFdO7cuaA1c3bt2lVfnpiY0MTERLB1QTp69KiOHTsWrP89e/bU\n", 626 | "l8fHxzU+Ph5sXbGbnZ3V7OxssP6npqbqy5VKJZeCwrGanp7W9PR0v4eBjKR936Q2WQGtXLnyhp1g\n", 627 | "1jVztm/fnml/6GxsbExjY2P1nw8cOJBp/9u2bcu0P7TXnGw+8cQTmfa/adOmTPtDe83/1If8DBuE\n", 628 | "l/Z9k9NkAAAgaiRDAAAgaiRDAAAgakFqk6HYzp8/n7jt8ePHvfq+4447fIejNWvWeLX3Gb9UzDlk\n", 629 | "6emnn07c9uzZs159+9Yauvvuu73a93KdRtHmkCWfazND1xrLozZZEeulZcmn9pbvWH1rh4WuGyYV\n", 630 | "bw4+ODIEAACiRjIEAACiRjIEAACiRjIEAACiRjIEAACiRjIEAACiRm2yAgpdm4xaVvminlV5UM+q\n", 631 | "PELvZyXeN/M0NzdHbbKyCV2bjFpW+aKeVXlQz6o8Qu9nJd4381SpVFSpVOo/U5sMAADAA8kQAACI\n", 632 | "GskQAACIGrXJInTixInEbS9cuODV93333ec7HK1YscKr/XPPPefVvohzyNK+ffsStx0dHfXq++GH\n", 633 | "H/Zqf+bMGa/2PmNfVLQ5ZMmn9lLRao31Ujcq9Jj6fc2OT+2t0LXDQtcNk4o3Bx8cGQIAAFEjGQIA\n", 634 | "AFEjGQIAAFEjGQIAAFEjGQIAAFEjGQIAAFGjNlkBha6Zs3///vryunXrNDY2FmxdkGZmZjQzMxOs\n", 635 | "/8uXL9eXh4aGNDw8HGxdsQtdZ66x7llzeQEA7aV936Q2WQGFrpmzZcuWTPtDZxMTE5qYmKj/vHv3\n", 636 | "7kz7X758eab9ob3Qdeb4JxPoTdr3TU6TAQCAqJEMAQCAqJEMAQCAqJEMAQCAqFGoNUJHjhxJ3HZh\n", 637 | "YcGr7/Xr1/sOR0NDQ17tfcYvFXMOWTp79mzitr6FFO+++26v9r43WviMfVHoOYQsBtmNz/bzHWfo\n", 638 | "wqu93GQTuvCqzxxCxN2nEGnoQqqhi6hKxZuDD44MAQCAqJEMAQCAqJEMAQCAqJEMAQCAqJEMAQCA\n", 639 | "qFGbrIBC1yabmpqqL1cqlRs+whzZm56evqHmFAZX6Ncm+9n8zM3NBY2lRDzzlDae1CYroNC1yTZt\n", 640 | "2pRpf+iseSfYz1u3kU7o1yb72fw0F8LNOpYS8cxT2nhymgwAAESNZAgAAESNZAgAAESNZAgAAESN\n", 641 | "2mQROnz4cOK2vjW3NmzY4Dsc79phPuOXijmHLI2OjiZu+/DDD3v1febMGa/2Tz31lFd7n7EvCj2H\n", 642 | "ffv2ebXPks/F9SHrdPXSfy83BhRpDiFubPCpvRW6dljoumFS8ebggyNDAAAgaiRDAAAgaiRDAAAg\n", 643 | "aiRDAAAgaiRDAAAgatQmK6DQ9Y9OnjxZXx4ZGdHIyEiwdUGamZnRzMxMsP4vX75cXx4aGtLw8HCw\n", 644 | "dcVufn4+6J2D1A3MDzUDyyXt+ya1yQoodP2j1atXZ9ofOpuYmNDExET95927d2fa//LlyzPtD+0N\n", 645 | "Dw/fkGxeuXIl0/6pG5gfagaWS9r3TU6TAQCAqJEMAQCAqJEMAQCAqJEMAQCAqFGbLELHjx9P3PaO\n", 646 | "O+7w6nvNmjW+w9H58+e92vuMXyrmHLLkU6vr7rvv9urb98aJs2fPerX3rWUk+c/B98JY3zlkyWd7\n", 647 | "F63WWC832RRtDlnzqb3lOzff2mGh64ZJ4ecQ8kYujgwBAICokQwBAICokQwBAICokQwBAICokQwB\n", 648 | "AICoUZusgELXJqOWVb5mZ2c1OzsbrP/G+kqVSkWVSiXYuoCyCL2flXjfzBO1yUoodG0yalnla3x8\n", 649 | "XOPj4/Wfn3jiiUz7ZwcL+Au9n5V438wTtckAAABSIBkCAABRIxkCAABRIxkCAABRozZZhC5cuJC4\n", 650 | "7X333efV94oVK3yHo+eee86rvc/4pWLOIUs+tcnOnDnj1fdTTz3l1X50dNSrvc/YF/nOYd++fV7t\n", 651 | "feaQdR0zn/pRRas11kuduaLNIWs+tbdC1w4LXTesl3WEnoMPjgwBAICokQwBAICokQwBAICokQwB\n", 652 | "AICokQwBAICoUZusgELXzLl69Wp9ecmSJVq6dGmwdUE6evSojh07Fqz/PXv21JebS38gW/Pz81pY\n", 653 | "WAjWP3XmgN7Mzc1Rm6xsQtfMWbZsWab9obOxsTGNjY3Vfz5w4ECm/W/bti3T/tDe8PDwDYWNr1y5\n", 654 | "kmn//JMJ9Kb5n4dca5M1/heTROgKwefOnfNqP+jjz9K1a9e82l+6dMmr/czMjFf7o0ePerUv2vgl\n", 655 | "/zlkaXZ2Nmj7+fn5oO0HffxZ8t3v+O7XQu93Bn38/RZ6+xXtfa1f4y9VMjTofzSh++/k+vXrXu1D\n", 656 | "JxO+p5WKNn7Jfw5ZCp1M+J4q8m0/6OPPUmz7taKNv98GffsNyvi5gBoAAESNZAgAAETNktQGMTO/\n", 657 | "AiLInHPOv1BMC8SyGIhneRDL8sgqlhLxLAKfeCZKhgAAAMqK02QAACBqJEMAACBqJEMAACBqfU2G\n", 658 | "zOyrZvaimf3YzE6a2W92aPuomf3AzF43s690aHe3mS2Y2ZNhRu3HzN5mZt8ws1fN7JyZbcmibREQ\n", 659 | "v5vadtweZrbazL5T+/1pM9scfgbJEMub2r5iZi/Xvl4xszfM7EsNvy9sLKVo4plo3LW207WxL8bz\n", 660 | "+abfd4x3P0USy/7P0TnXty9JayS9qba8StKLkja0abtZ0ockfVnSVzr0+feSDkl6sp9zaxjP/trX\n", 661 | "kKT3S/qxpHembVuEL+KXfHtIWirplKRPSzJJmyS9Kmm033Mkll2f92ZJL0t6/yDEMqJ4Jhp3re2U\n", 662 | "pK0J+70h3v3+iiSWfZ9jX48MOedOOOder/1okpyku9q0/aZz7luSXmrXn5l9TNIVSd/Jeqy9MLNh\n", 663 | "SR+RtN05t+Cc+56kZyQ9kqZtURC/G3XZHqsl/axz7kuuakrS99r1lTdi2dFDki7WniMVPJZS+eMp\n", 664 | "JRt3k6S3WTfHu68iiWXf5xgkGTKzZ83sipm91OL7t5raftnMXpP0vKQfSTrY4zrfKmlS0u8p+R99\n", 665 | "zxLOcZWkq865Fxqe+kNJa1t06dM2KOLXU/wW+/XZHiZpXcqpdEQse49lg49L6naoPXgsJeLZPEdP\n", 666 | "nzezi2b2j2Z2T4d2SeKdGrEs1hy7JkNmdpuZ3d/i8e+b2c+2eo5z7gHn3Nuccz/d4vuHmto+Kukt\n", 667 | "kj4g6euS/ivp4Jt8VtJfOOd+5POkXuYnJZ7jW1Q93NroZUk/1aJLn7aJEb/WAsRvsd922+OUpItm\n", 668 | "9piZ3WJm90m6R9Jw656ymSux7D2WtXXfKWlC0l83PJw6lrW+iWcLPnP08BlJ/4ekOyT9haRnzWxl\n", 669 | "i7G1indXxLK1QZpjkiNDv+icOyhJZvbehse/LumamX3EzP7QZ6XNaoea/0nSOyR9yvf5ZrZe0i9J\n", 670 | "+mIPq+82v1Ez+7CZPW5m7/Hs+1VJb2167DZJr6Rs64P45RO/ulbbwzn3hqrnuj+o6vnw35V0QNJ5\n", 671 | "j/EQy5xjqeqpr+865/518YGMYikRzzTx9OKc+4Fz7jXn3FXn3JOqnta86c1dLeKdELHMIJb9nGOS\n", 672 | "ZKjxI6o/07D8knPuoqR/kbSsaUAH7car8xu/vt1hXbeozXnCLu6RdKekfzOzFyU9JukhM/vnBM/t\n", 673 | "Nr8HJF2Q9IVav5ISz/G0pFvMrHFO75Z0vMU4fNr6IH75xK+VG7aHc+6Yc26jc+5259yv1H73/YR9\n", 674 | "ScSyH7F8RNJf3TTQ9LGUiGeaeKbl1PoUSst4J+xvEbGsGaQ53pKg8w2SvmFm96r635XM7CFV/yNq\n", 675 | "yTnXKuO+gZndLukXJP1vSQuS7pX0sdpXq/ZLVf1jWqrqTu1WSW84565J+p+q3iWy6H+oukE+2fD8\n", 676 | "vdWhuU/4zM8594XaY++UdM5njs65eTP7uqTPmtlvS3qPqn8070vT1hPxU/j4JdkeZjam6pvyUkm/\n", 677 | "I+nt8tvxEkuFj2XDON8n6b9J+l8tfpc2lhLx7DmeCcbd2O42SeOq3ln0Rm07/HdJ25ratY13AsRS\n", 678 | "vcUy7zm2k+TI0HUzO6fqoadbzewFSXc4555N8NxOnKqHwf5d1avC/0zSp51z9WyxllX+Qe3H7ZLm\n", 679 | "Jf2+pIdry38sSc65151zFxe/VA3W6865xqvN3yHpuynmt1nS53qY56OqXktwUdI+SZ90zj3fYn4d\n", 680 | "26ZA/KpCx6/r9lD1v84XJf2Hqrdj3+ucu+oxFmJZlcdrUapeSPs159xrLfpKG0uJeC7qNZ5tx900\n", 681 | "v2WSdqka9/9U9e/gQefc2ab+OsW7G2JZ1UssO86xxWsz7RxbSl2o1aoXnP2Gc24yVUcBmdkySUck\n", 682 | "vav5v4aEz39A0rSktzvnzmQ8vL4ifuVBLMuFeJYHsSy+VLfWm9lbVP1MhveaWe63gCflqhfNre0x\n", 683 | "wB+W9CeSvibpo5kPro+IX3kQy3IhnuVBLAdD6iNDAAAAg4xCrQAAIGokQwAAIGokQwAAIGpJPmdI\n", 684 | "ZsaFRX3mnMukjgyxLAbiWR7EsjyyiqVEPIvAJ56Jjwy5FiXvd+zY0fLxHgZcqP6zWkeW/WeJbZ1t\n", 685 | "/8Qz7r+XLBVpW4fuv+yx9B1vFn0Tz95xmgwAAESNZAgAAEQtVTK0cePGjIZB//026Nti0PvP2qBv\n", 686 | "j0gtASEAAAfHSURBVEHvP0uDvi0Gvf+sDfr2GPT+20n0oYtm5nzO15n5XYPmey4wdP95rKOH/jO7\n", 687 | "SLNIscxjHQWdQynjWdBtHbp/YtlD/3mso1+xrK2beGa8jpDxTHQ3mSTt3Lmzvrxx48aBy8bxE8Sy\n", 688 | "XIhneRDLciGeg4MjQ31aB/995reOgs6hlPEs6LYO3T+x7KH/PNbBkaH8+s9jHSHjyQXUAAAgaiRD\n", 689 | "AAAgaiRDAAAgalwz1Kd19PO6hPn5+cTtly9f7tX/5cuXfYcUfB1Fm8PCwkKm8Tx9+nTi9vfff79X\n", 690 | "/wcPHvRqH7r/PNbh0//Zs2czjWXjBbfdFG2/6dt/L+sIaXJyMvNrhnzaxxjPkHMwM64ZAgAASIpk\n", 691 | "CAAARI1kCAAARI1kCAAARI1kCAAARI1kCAAARI3aZBHatWtXfXliYkITExN9HE35Xbt2TdevXw/W\n", 692 | "/549e+rL4+PjGh8fD7au2M3Pz2thYSFY/1NTU/XlSqWilStXBltX7Obm5jQ3N9fvYSAj09PTmp6e\n", 693 | "7vn5PSVDGGzbt2/v9xCisnTpUi1durT+8xtvvJFp/9u2bcu0P7Q3PDys4eHh+s9XrlzJtP9NmzZl\n", 694 | "2h/aq1QqqlQq9Z8PHTrUv8EgteaDNJOTk17P5zQZAACIGskQAACIGskQAACIGrXJ+rSOftYmK1It\n", 695 | "qzzWUbQ5UM+q9/57WUdIWdazopZV9usIWcsqQX+8b2a8jpDvmxwZAgAAUSMZAgAAUSMZAgAAUSMZ\n", 696 | "AgAAUSMZAgAAUSMZAgAAUaM2WYSoZZUv6lmVB/WsyiNtLaskeN8cHNQmixC1rPJFPavyoJ5VeaSt\n", 697 | "ZZUE75uDg9NkAAAgaiRDAAAgaiRDAAAgatQm69M6+lmb7Jvf/Gbi9nv37vXqf+vWrb5DCr6Oos3h\n", 698 | "mWeeyTSeo6OjidsXra6bb/95rMOn/1WrVmUayx07dmTRVSbKsJ/1kWWdOYlacyHWEbLWHEeGAABA\n", 699 | "1EiGAABA1EiGAABA1EiGAABA1EiGAABA1EiGAABA1KhNFqH9+/fXl9etW6exsbE+jqb8Ll26pEuX\n", 700 | "LgXr//Lly/XloaGhG0p/IFuzs7OanZ0N1n9jrazm0h/IFnXmyiVtrTlqk0Voy5Yt/R5CVEZGRjQy\n", 701 | "MlL/+dSpU5n2v3z58kz7Q3vNhY2feOKJTPvnn8z8UGeuXNLWmuM0GQAAiBrJEAAAiBrJEAAAiBrJ\n", 702 | "EAAAiBqFWvu0jn4WavW5GD624n55yLIgJMUgs19HyGKQXfpiP5vxOvq1n62tm3hmvI6Q8eTIEAAA\n", 703 | "iBrJEAAAiBrJEAAAiBrJEAAAiBrJEAAAiBq1ySI0NTVVX65UKlq5cmUfR1N+1EAqj7T1j7phP1su\n", 704 | "xHNwcGt9n9bBrfX5rYNb63+iaNt60P9euLW+9/7zWAe31ufXfx7r4NZ6AACAQEiGAABA1EiGAABA\n", 705 | "1EiGAABA1LiAuk/r6OcF1A8++GDi9lu3bvXqf+/evb5DCr6Oos1h8+bNmcZzdHQ0cfuDBw969X//\n", 706 | "/fd7tQ/dfx7r8Ol/1apVpb25oYgXw/vyGdPOnTszv4Dap32M8SzSzQ0cGQIAAFEjGQIAAFEjGQIA\n", 707 | "AFEjGQIAAFEjGQIAAFGjNlmETp48WV8eGRnRyMhIH0dTfkePHtWxY8eC9X/58uX68tDQkIaHh4Ot\n", 708 | "K3azs7OanZ0N1j91A/Nz7tw5agaWSNq6gT0lQxhsq1ev7vcQojI2NqaxsbH6zwcOHMi0/+XLl2fa\n", 709 | "H9obHx/X+Ph4/ecnnngi0/43bdqUaX9ob+XKlTckm4cOHerjaJBW80GayclJr+dzmgwAAESNZAgA\n", 710 | "AESNZAgAAESNZAgAAESN2mR9Wkc/a5MVqZZVHuso2hyyrme1Y8eOLLrKRBlemz4mJyczjaVP+6Lt\n", 711 | "N2OrZZWgP943M15HyPdNjgwBAICokQwBAICokQwBAICokQwBAICokQwBAICoUZssQtSyylfoelaN\n", 712 | "9XgqlYoqlUqwdcVubm6OelYlkbaWVRK8bw4Obq3v0zq4tT6/dRRtDtxa/xNFfG364Nb63vvPYx3c\n", 713 | "Wp9f/3msg1vrAQAAAiEZAgAAUSMZAgAAUSMZAgAAUeMC6j6to58XUA8NDSVu33jnWRLLly/3HVLw\n", 714 | "dRRtDsPDw5nG8/Tp04nbF+3ic9/+81iHT/9nz57t28XwBdxHebXvZR2+fMaU5cXwEhfEh1hHyAvi\n", 715 | "OTIEAACiRjIEAACiRjIEAACiRjIEAACiRjIEAACiRm2yCF29erW+vGTJEi1durSPoym/mZkZzczM\n", 716 | "BOt/z5499eXx8XGNj48HW1fs5ufntbCwEKx/6szlhzpz5ZK21lxPyRAG27Jly/o9hKhMTExoYmKi\n", 717 | "/vPu3bsz7X/btm2Z9of2hoeHbyhsfOXKlUz755/M/DQnm4cOHerfYJBa80GayclJr+enOk0WuuIv\n", 718 | "/efn2rVrXu19j3TE1n8v68jS7OysV/v5+Xn6z7D/LPkevTh37lxU/YceT78N+vvUoPRPMjTA/Wfp\n", 719 | "+vXrXu193+hj67+XdWTJ983e99QP/efH982b9tm277dBf58alP65gBoAAESNZAgAAEQtcW2yHMaC\n", 720 | "DrKsf5RFP0iHeJYHsSyPftYmQ/Z84pkoGQIAACgrTpMBAICokQwBAICokQwBAICokQwBAICokQwB\n", 721 | "AICo/f/pfzEnwpmeHAAAAABJRU5ErkJggg==\n" 722 | ], 723 | "text/plain": [ 724 | "" 725 | ] 726 | }, 727 | "metadata": {}, 728 | "output_type": "display_data" 729 | } 730 | ], 731 | "source": [ 732 | "import matplotlib.pyplot as plt\n", 733 | "import numpy as np\n", 734 | "\n", 735 | "plt.figure(figsize=(10,10))\n", 736 | "omega1 = [0.0001, 1./8*np.pi, 1./4*np.pi, 1./2*np.pi, np.pi]\n", 737 | "omega2 = [0.0001, 1./8*np.pi, 1./4*np.pi, 1./2*np.pi, np.pi]\n", 738 | "num_steps = 8\n", 739 | "x = np.linspace(0, 2*np.pi, num_steps)\n", 740 | "y = np.linspace(0, 2*np.pi, num_steps)\n", 741 | "X, Y = np.meshgrid(x, y)\n", 742 | "\n", 743 | "i=0\n", 744 | "for index1, alpha1 in enumerate(omega1):\n", 745 | " for index2, alpha2 in enumerate(omega2):\n", 746 | " i+=1\n", 747 | " ax=plt.subplot(5, 5, i)\n", 748 | " grid = np.cos((alpha1*X+alpha2*Y)*(num_steps-1)/(2*np.pi))\n", 749 | " ax.imshow(grid, cmap=plt.cm.gray, interpolation='nearest', vmin=-1, vmax=1)\n", 750 | " plt.setp(ax.get_xticklabels(), visible=False)\n", 751 | " plt.setp(ax.get_yticklabels(), visible=False)\n", 752 | " plt.title('$\\omega_1$='+str(round(alpha1,2))+', $\\omega_2$='+str(round(alpha2,2)))\n" 753 | ] 754 | }, 755 | { 756 | "cell_type": "markdown", 757 | "metadata": { 758 | "collapsed": false 759 | }, 760 | "source": [ 761 | "## LSI Systems (Linear Shift-Invariant) \n", 762 | "\n", 763 | "$x(n_1,n_2) \\rightarrow T[ \\cdot ] \\rightarrow y(n_1,n_2)=T[x(n_1,n_2)]$ \n", 764 | "This is a system, which can have indipendent properties as stability, With/out Memory, Causality, $\\textbf{Linearity},\\textbf{Spatial Invariance}$. $T$ can be an average, median, ... filter. If:\n", 765 | "\n", 766 | "$$\n", 767 | "T[\\alpha_1 x_1 (n_1,n_2)+\\alpha_2 x_2 (n_1,n_2)] = \\alpha_1 T[x_1 (n_1,n_2)]+\\alpha_2 T[x_2 (n_1,n_2)]\n", 768 | "$$\n", 769 | "\n", 770 | "Then $T[\\cdot]$ is linear and have for example: $\\alpha_2=0 \\rightarrow T[\\alpha_1 x_1 (n_1,n_2)]=\\alpha_1 T [x_1 (n_1,n_2)]$ and $\\alpha_1=-\\alpha_2 \\rightarrow T[0]=0$\n", 771 | "\n", 772 | "An example of a non-linear system is finding the negative of an image:\n", 773 | "\n", 774 | "$$\n", 775 | "y(n_1,n_2) = T[x(n_1,n_2)] = 255-x(n_1,n_2)\n", 776 | "$$\n", 777 | "\n", 778 | "If I shift the input and find the shift in the output, then the system is Spatially Invariant:\n", 779 | "\n", 780 | "$$\n", 781 | "T[x(n_1-k_1,n_2-k_2)]=y(n_1-k_1,n_2-k_2)\n", 782 | "$$\n", 783 | "\n", 784 | "Finding the negative of an image is Spatially Invariant (or Spatially Varying).\n", 785 | "\n", 786 | "LSI are Systems that have both fore-mentioned properties.\n", 787 | "\n", 788 | "$$\n", 789 | "\\delta(n_1,n_2) \\rightarrow LSI \\rightarrow h(n_1,n_2)=\\texttt{impulse respone}\n", 790 | "$$\n", 791 | "\n", 792 | "and\n", 793 | "\n", 794 | "$$\n", 795 | "x(n_1,n_2) \\rightarrow h(n_1,n_2) \\rightarrow y(n_1,n_2)=x(n_1,n_2) ** h(n_1,n_2)\n", 796 | "$$\n", 797 | "\n", 798 | "The $**$ is 2D Discrete Convolution:\n", 799 | "\n", 800 | "$$\n", 801 | "y(n_1,n_2)=x(n_1,n_2)**h(n_1,n_2) = \\sum^{\\infty}_{k_1=-\\infty} \\sum^{\\infty}_{k_2=-\\infty} x(k_1,k_2) \\cdot h(n_1-k_1,n_2-k_2)\n", 802 | "$$\n", 803 | "\n", 804 | "Convolution is commutative." 805 | ] 806 | }, 807 | { 808 | "cell_type": "markdown", 809 | "metadata": { 810 | "collapsed": false 811 | }, 812 | "source": [ 813 | "## 2D convolution\n", 814 | "\n", 815 | "This is one of the most important operations in signal processing. LSI are uniquely defined by their 2d input. The output is the convolution of the input with the impulse response of the system. The impulse response might have to be identified.\n", 816 | "\n", 817 | "$$\n", 818 | "x(n_1,n_2) = \\sum^{\\infty}_{k_1=-\\infty} \\sum^{\\infty}_{k_2=-\\infty} x(k_1,k_2) \\delta(n_1-k_1,n_2-k_2)\n", 819 | "$$\n", 820 | "\n", 821 | "$$\n", 822 | "y(n_1,n_2) = T\\left[ x(n_1,n_2)\\right] = T \\left[ \\sum^{\\infty}_{k_1=-\\infty} \\sum^{\\infty}_{k_2=-\\infty} x(k_1,k_2) \\delta(n_1-k_1,n_2-k_2) \\right]\n", 823 | "$$\n", 824 | "\n", 825 | "with x(k_1,k_2) that acts as a weight, a costant. If I'm working with a linear and spatially invariant system:\n", 826 | "\n", 827 | "$$\n", 828 | "y(n_1,n_2) = \\sum^{\\infty}_{k_1=-\\infty} \\sum^{\\infty}_{k_2=-\\infty} x(k_1,k_2) \\cdot h(n_1-k_1,n_2-k_2)=x(n_1,n_2)**h(n_1,n_2) \n", 829 | "$$\n", 830 | "\n", 831 | "Convolution is made of Reflection, Shift and Summing.\n" 832 | ] 833 | }, 834 | { 835 | "cell_type": "code", 836 | "execution_count": 3, 837 | "metadata": { 838 | "collapsed": false, 839 | "scrolled": true 840 | }, 841 | "outputs": [ 842 | { 843 | "data": { 844 | "text/plain": [ 845 | "" 846 | ] 847 | }, 848 | "execution_count": 3, 849 | "metadata": {}, 850 | "output_type": "execute_result" 851 | }, 852 | { 853 | "data": { 854 | "image/png": [ 855 | "iVBORw0KGgoAAAANSUhEUgAAAlcAAAEOCAYAAACkUjImAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\n", 856 | "AAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xe8HFX9//HXZ+/d3dtSCSRACAgaEcREQRKaRhGiUbBR\n", 857 | "BJWABQsI+FX4fQGRiNhFEPSLfi0IIkgREDEoxW9QKZFQBMTQhNB76m27d/fz++PMJZvLLVtm7+7m\n", 858 | "vp+PRyC7O/M5Z2dOZj575swZc3dEREREJB6JWldAREREZGOi5EpEREQkRkquRERERGKk5EpEREQk\n", 859 | "RkquRERERGKk5EpEREQkRkquRERERGKk5EpEREQkRkquhmBmr6l1HaTxqR01Nu2/9bQtRIqn5GoQ\n", 860 | "0UFkTo3rMMPMDq5lHaQyakeNTftvg3rUdFvUy3boZ2ZrzWybUSzvz2Z2yCiU82sz+2q1y4mDmf3N\n", 861 | "zA4b5TKbzCxvZjNGWlbJ1eA+6+6/rWUF3P1xoM3MdqhlPaQiakeNTftvvZpuizraDgC4+zh3f2wU\n", 862 | "y5vv7hePVnljhZmlzewXZrbCzFab2TIz23eE1Yp6ZqCSqwHM7E3AE7WuR+Qi4OhaV0KGZmYzzWyJ\n", 863 | "mX1ywPtqRw1srO2/odpx9Fm9bAu1Y4lbCngU2MPdJwCnAZeb2ZbDrGPFBFZy9Wr7Af9X60oAuHsv\n", 864 | "kDKzjlrXRQbn7g8CvcCSAR+pHTW2MbX/hmnHUCfboprbwcz+n5k9aWZrzOzfZvYOM0uY2Ulm9nDU\n", 865 | "q3F7/0k3ujS0bfT388zsXDO7Llr//8xsq+izH5nZ9weU9XszO3aQOrSa2W/M7EUzW2lmt5nZ5Oiz\n", 866 | "Vy6BRfU6K1ruYTM72szyBXH+ZmaLzOzmqD6LzWxi9JmZ2WVm9oyZvWxmfzGz7YvcRk1mdkrB9viH\n", 867 | "mU2LPtsz2j799d61yPpcZ2ZHDijnXjN730hxC5Zvieozs+C9qWbWZWaTotf7m9ndUZy/mtmOAO6+\n", 868 | "1t1Pd/cno9dXE35IvKUg1n9H2+sJYCHquSrbW4H7a12JAv8Edq91JWRwZpYCtnH3RwZ8pHbU2Bpm\n", 869 | "/5nZB81sr5ECDLfcMO0Y6mtbxN6Oo5PyUcDO7j4emA88BnwJOBh4d9Sr8QmgK1pt4An2UOBrwCZR\n", 870 | "HS+K3j8f+EhBWZsAewO/GaQqRwCtwBbAZODzQM8gy30eeCfwRmAX4EOD1OcQ4OPAZkAH8F8Fn/0B\n", 871 | "2A6YBtwH/HqQMgZzQlTWvtH2+BTQE32na4DvEb7/j4DFZjahiPpcTNh2AJjZrKhefzKzKUXExd17\n", 872 | "gCujMvodDNzg7ivN7K3ATwn7bzLwS+D3ZtY88Aua2ebAtkTtPUryvgDMA2YS2kZRXhV8rDCz/YEc\n", 873 | "sBdwL2GjfRNodXcvWO4twFxCg7+dsM3e6+6fKLG8cuM8DbwOuK6U8mTU7A6sNLP5wPZAn7v/GGhT\n", 874 | "O6p/jXwciHoNfghcCzSb2WXA4e7eOaDMYpYbqh1Dwbaox+0Qgxzh8tAbzeylaHwXFi6RftndHwZw\n", 875 | "93sLv8KAGH9095uj9U4GVpvZlu5+e9Srsre730hItJa4+4uD1CMLTAFmuvt9wJ1D1PdA4Ex3fzYq\n", 876 | "7zvA2wcs8wt3/0/0+WXAPtF3cOCCV76E2WnA82bW6u7dQ26h4JPA0f1x3f2eKMbhwH3ufmm03IVm\n", 877 | "dgzwXtYnmYPWB/gdcI6ZbeHuTxMSpN+5e1+U2IwUt9/FwNmEBBdCwnZm9PdPA//j7v3b81dm9hXC\n", 878 | "j4ZbC7ZFkpD0/qzgR8aBUd0fiJZZBBwwwnYCxmjPlYWR/ve7+x8JO/mPwCXA40DTgMU3BZYDO7j7\n", 879 | "7939d0QN2cwmmNmHzOzEIoodLs5ro1+VX40OOoVWAePL+6YyCvYmHAz+DNxG+IUDakd1r9GPA9HJ\n", 880 | "9UjgY4ST9scHJlYlLDdUO2bAthiy/iVui7ppx9GJ9DhgESHRuCjqwdgK+E+RYV4ZkxZt25cJiSOE\n", 881 | "ZOZj0d8/xtA9RecBNwCXmtkTZvYtMxvsHL0FG46BG2w83LMFf+8i9Bb1X1L8rpk9YmargIcIvV5T\n", 882 | "hvtykaG2xxbAigHvrQAKxy0NWh93XwP8mdDTBKF9XlhC3H43ABPM7M0WLte+Abg6+mxr4P9ZuAz6\n", 883 | "spmtJPSOvRIn2s4XAWsIbaHwuxVu3xVozNXQ3P1xd3/YzDYD1rj7Knf/o7t3AX0Dlv0z4cB7IYCZ\n", 884 | "7Ubo9sXdVwN3AMkiyhwYZ/f+OIQxDU8RMu0vD1i1FXjVAVPqxjuBX0V/fxfwt+jv2cKF1I7qT6Mf\n", 885 | "B6IE4FzCSfnXwAU2yHikIpcbqh1DwbYYbjtEnxe1LeqtHbv7b919L6D/FvvvEJLs7YoMsVX/X6Jt\n", 886 | "O5nQywbhO77fwo0B2wNXDVGHPnc/zd13APYEPgh8dJBFnwGmF7wecVqAAguBdwPz3H0i8FpCslBM\n", 887 | "wjDU9nga2GbAezMI+7AYFwOHmtmegLn730uN6+454DJCj9WhwNUFPXFPAF9z98nRn0nu3uHul0MY\n", 888 | "h0b4tzEeOMDd8wWhn6Fg3xISNY25GoqZbR9d210A/DV6733Rx8+ZWfuAVd4J3Bj9fSHh4PQ+hhD9\n", 889 | "8hqssRbGOSyKs5+7n+nu/yD8g3l0wDqT2TDrlzphZuOBlLu/EL11KHCRmS1A7ajuNfpxwN2fcfdD\n", 890 | "gW7gJXc/yN3XDSxspOWGacfvGWJblLQdhtkWddGOLdwp+Q4L484yhO2UA34OnG5mr42W28miAdKD\n", 891 | "WGBmu0cxvg7c6u5PAUT/X0ZIbH/nYWD+YPV4h5ntGG2ndYQfaLlBFr0UOM7MNo/qMzABHU4H4caF\n", 892 | "ldE+/SZFJgvALwjbo38g/ywLA9OvAXYwswMtDHo/lJCE/bHIuH8gXOr9KlA43UepcS8m9IAdwoaX\n", 893 | "DX8GHGVmu0T17jCz95lZa/T5/xLGWX3A3Tf4UUXY1p8ws9dH26voOcDGZHIF7Eu4bmtAi5l9AHgu\n", 894 | "+uwmoPBOh1ZgZfSLDEKjn1iw/GD+QPj194ph4hQeKD4AfGNArDcBNxf3tWSUvYVwAOj3COGEcSeh\n", 895 | "Hb0y6aLaUV3aKI4D7n6Fu/9tsM+KXG6odnxX9PqVtlzmdoAB26LO2nEa+DbwAqG3ZFPgRELP2SXA\n", 896 | "dWa2mpBs9Z+QByYkFxEuK74EvJn1lwH7nU8YgH5B4ZsWJgftT462AK4AVhPG/11HSBgGlncu4a7O\n", 897 | "ewnj1a4hJIUMsuxA5xF6Y56O1v/7gM8Lxxm+xsLdfdOit75H6HW7MdoePwVaovFj+wP/DbwIHEsY\n", 898 | "P7d6YMzBRMnmVYRL0xcVvF9SXHe/hdDLOoWCMXnuvhT4HHCumb1MuBz90eg7bksYS/YWwiXhtdF3\n", 899 | "PjBa9xrgx4R/A8spZayfu+tPwR9gEvCNEpbfGjh1wHsJ4B0llrsfMA543YD3f17rbaI/pf9RO2rs\n", 900 | "P9p/td0W9bgdhqnrecBpIyyzF/BYlcp/H/BQrbeD/mz4Z6z2XA3J3VcCL1m4vXRY0bX1A4CdLZo3\n", 901 | "I3IAYVBoUczsg8AphDsnDip4/63A9cXGkfqhdtTYtP/WG+1tUa/boVwW7kI7lnB5Ko54bWY2P7pU\n", 902 | "Np1wqeqKOGJLfCzKfKWAhTsHPu3uPy1z/XYf5K6dEmM0EW4D/k4lcaR21I4am/bfBvWo6baol+0w\n", 903 | "GDP7JfCku79qPI6FCTqXES6xvscHGRNXRnnthMtUMwmD+/8AfLHStibxUnJVp6Lr3Kt95LlHRIak\n", 904 | "dtTYtP8CbQdpNFVNrsxMmdsY4O5FzftRDrWhsUPtSCpVzTYEakdjRSztqJoDuogmhK1i/EWNHH9j\n", 905 | "+A6jsI+rGn8j2QdVjT9K36Gq+7nRj0WjtA8aPX5V9/FolLER7IOqxh+l7xDLPtaAdhEREZEYKbkS\n", 906 | "ERERiVGjJ1dLGjz+aJRR7fgbgyWKXxdlNLIlG0EZjR5/Y7BE8euijIpVfUC7V3mAodRWtfex2tDY\n", 907 | "oHYklRqNfax2tPGLax83es+ViIiISF1RciUiIiISIyVXIiIiIjFSciUiIiISIyVXIiIiIjFSciUi\n", 908 | "IiISIyVXIiIiIjFSciUiIiISIyVXIiIiIjFSciUiIiISIyVXIiIiIjFSciUiIiISIyVXIiIiIjFS\n", 909 | "ciUiIiISIyVXIiIiIjFSciUiIiISIyVXIiIiIjFSciUiIiISIyVXIiIiIjFSciUiIiISIyVXIiIi\n", 910 | "IjFSciUiIiISo+ZqF2BmiwpeLnH3JdUuU6rHzOYB80a5zEUFL9WGNgJqR1KpWrShqNxFBS/Vjhpc\n", 911 | "tdqRuXvcMdcHN3N3t6oVIDVX7X2sNjQ2qB1JpUZjH6sdbfzi2se6LCgiIiISIyVXIiIiIjFSciUi\n", 912 | "IiISIyVXIiIiIjFSciUiIiISIyVXIiIiIjFSciUiIiISIyVXIiIiIjFSciUiIiISIyVXIiIiIjFS\n", 913 | "ciUiIiISIyVXIiIiIjFSciUiIiISo+ZaV0BEREafmU0GdgZmA5OAPuAJ4A7gPnfP1LB6Ig1NyZWI\n", 914 | "SB0ysySwA7AT0A50A/8G7nH33jJjJoAFwAnAnChmK5CKFukEckCTmf0KOMvdH67ga4iMSebu1Qtu\n", 915 | "5u5uVStAaq7a+1htaGxQO1rPzGYDXwYOAPp7j5qAfPSnFbgW+J67/72EuNsAvwV2BDqKWCVL6M36\n", 916 | "PvB1d88WW1YtjMY+bqR2JOWJax8ruZKK6KQocVA7AjPrAM4EDgXShIRqKA50AdcBn3b3l0aI/W7g\n", 917 | "8ihuqVcsuoD/AO9w9xdLWTG69Dgf2JQwxvdl4C/u/mSJdSimLCVXUjElV1IXdFKUOIz1dmRmWwB/\n", 918 | "B6YReqaK1QusAfZy9weGiD0fuLLEuANlgMeBXd195UgLm9kuwJeADxB6wJKARX9vBv4KfA+40WM6\n", 919 | "CSm5kjgouZK6MNZPihKPRmtHZmbA24D/IgwITwOrCJfdfuLuz5YQayLwT2ALyhsHmwdWAm929ycG\n", 920 | "xN4SWE5xlwFH0gtc7+77DbWAmTUB5wIfZfjeNyeM77oV+IC7d1VaOSVXEgclV1IXGu2kKPWpkdqR\n", 921 | "me0MXEa41NVO6JHp1xP9/zLC5boRB56b2SXA+wnJSLn6gKWEHiyP4hpwI7AnoecoDp3AEe5+2cAP\n", 922 | "osHylwHvBtqKjNcD3A/s6e7dlVRMyZXEIa59rHmuRESKZGZ7AjcBryH0Bg08CLdEfw4AlpjZsAmT\n", 923 | "mb0TeC+VJVYQerxmE3qM+u0G7Ep8iRWEZPKsKJEaaBFhfFWxiRWEbfUG4MLKqyZSP5RciYgUwcym\n", 924 | "AosJCcZIWoFZwM9GWO4rRcYrRjvw1ajHCuB4KhtnNZRxwDsL34gG43+Z8r5LK/AeM9suhrqJ1AUl\n", 925 | "VyIixfkspfUCtQIHRknZq0Tv7x5HxQpsAbzJzJoJ81lV4xjfARw24L1DCWO/ytUMfKGC9UXqipIr\n", 926 | "EZERRMnKMYTLWKVw4MghPtuVMEg8TgbMJUw+GnfswjIGJoUnUFkPXBL4pJmVun1F6pKSKxGRkb2J\n", 927 | "8sYutQKHDPHZm4nvkmC/NkJytVPMcQfapv/yY5R4bhtDTAe2iSGOSM0puRIRGdkkyr/sNXGI9ycz\n", 928 | "/ESh5dqUMC6q2o836x+EP571M8lXIs/Q20qkoVT92YJmtqjg5RJ3X1LtMqV6zGweMG+Uy1xU8FJt\n", 929 | "aCPQgO2oZ+RFSl63WpfteglTM1QyBmokiagMCM8njONcYlGs4hauQRuKyl1U8FLHowZXrXakea6k\n", 930 | "Io00P5HUr3pvR2Y2BXiS0qdMyANXufuHB4n5CeBs4r00mAW+DtwMXAFMiDF2oZfdfZP+F2bWSWlT\n", 931 | "MAymF5jh7s+Xs7LmuZI4aJ4rEZFREj1T70+U3hvUDZwxxGfLCOOM4tQdxb2TypOd4dw14PUFhMSu\n", 932 | "EkvLTaxE6o2SKxGR4nyf0i4POvAs4REvg7kPWFtppQZIEC5VrQIeizl2vy7g6gHvncX6y4TlWAt8\n", 933 | "t4L1ReqKkisRkSK4+9+BXxIeAVOMTuDDQz2Y2N3zhF6tip+rF8kAvyp4jMz3gHUxxS6UIPRUvSJ6\n", 934 | "aPTdlJ9gdRJ6BkU2CkquRESKdyzwC0JCNNQlwm5gNbCPu/9zhHjnEh66HIdu4LSC1xdR+aW6gXqA\n", 935 | "X0c9YwMdRPjepV7q7ALe6+65SisnUi+UXImIFMnd8+5+LLAP8HvCIOzV0Z91wAuEAeWvc/fbiojX\n", 936 | "BRxM5b1XXcAn3P2FgtidwOExxC60lvCYm1dx9yeBvQjboJikzqN4C9z9zthqKFIHdLegVKTe7/KS\n", 937 | "xtCo7cjMNgFeR5gs9GXgvnJ6YMzsY8D/Ut6zALuARe7+vSFin094kHSlA9z7e5iWDLeQmU0jjJ86\n", 938 | "EMjx6rshewjTLtwAfNndl1dYr/5ydbegVCyufazkSirSqCdFqS9qR2BmC4DfEBKsYqZ86CMkKp9z\n", 939 | "9wuHidsMXAbsS/kJVjdwqLtfVewKZjYBWBj9mUK4UrIK+B3wU3d/psy6DFWekiupmJIrqQs6KUoc\n", 940 | "1I4CM5tM6PU5lNDr0zHIYp2Emd2vAY5z96eKiNsEnAScSEjcih0S0k0YE3aQu99c5Do1oeRK4qDk\n", 941 | "SuqCTooSB7WjDZnZeOCDhDFMuxAurfUQ5pf6O3Bl4fiqEuLuCPwQ2INwaW6oHrK10ef/A3wtGhtW\n", 942 | "15RcSRyUXEld0ElR4qB2NLrMbGvgI4THfswm9JDlgOeAW4DrgSvcvZLH/owqJVcSByVXUhd0UpQ4\n", 943 | "qB1JpZRcSRz0+BsRERGROqTkSkRERCRGSq5EREREYqTkSkRERCRGSq5EREREYqTkSkRERCRGSq5E\n", 944 | "REREYqTkSkRERCRGSq5EREREYqTkSkRERCRGSq5EREREYqTkSkRERCRGSq5EREREYqTkSkRERCRG\n", 945 | "Sq5EREREYtRc7QLMbFHByyXuvqTaZUr1mNk8YN4ol7mo4KXa0EZA7UgqVYs2FJW7qOCl2lGDq1Y7\n", 946 | "MnePO+b64Gbu7la1AqTmqr2P1YbGBrUjqdRo7GO1o41fXPtYlwVFREREYqTkSkRERCRGSq5ERERE\n", 947 | "YqTkSkRERCRGSq5EREREYqTkSkRERCRGSq5EREREYqTkSkRERCRGSq5EREREYqTkSkRERCRGVX+2\n", 948 | "oIiI1CczM2Aq0A7kgJfcfW1tayWNxsxagM2AJNADPOvuudrWqraUXImIjCFmNgP4FDAf2BFoAvoA\n", 949 | "A1Jm9iJwB3ApcJm799SqrlKfzCwB7JtOpw8zs7mJRGKrdDqdMbN8Lpdr6uvrS7S1tT3U19e3JJvN\n", 950 | "/tzd/1nrOo82PbhZKqIH7koc1I4GZ2YTgNcDrUAv8JC7v1RmrDcD3wX2JCRS6RFW6e/B+ilwWr33\n", 951 | "aOnBzYOLeie3BaYRhgKtApa7e7aMWE2JROLo5ubmE8eNG9f+1re+tWP69OlMnTqVZDL5ynLd3d08\n", 952 | "88wzPPbYY7nbb7+9190f7unpOdHdF8f1vaolrn2s5EoqopOixEHtaD0zeyNwLPBeYArQVfBxK7AG\n", 953 | "uAE4093/UUS8FHAq8EWghZBYlaInKvMQd/9LieuOGiVX60X7/MMtLS1fyGazs1OpVH7cuHFZM7Pu\n", 954 | "7u7EunXrWlKp1CO9vb0/d/fz3P3lImK+IZVKXTp16tTXzJ8/v33LLbck5G3Dy+VyPPDAAyxevLgr\n", 955 | "k8kszmQyR7r7yji+ZzUouZK6oJOixEHtCMxsG+ACYBfC2JXhhm3kgW7gEeCj7n7fEDEnA0uA7YC2\n", 956 | "CqvYRej5Os2LOHGY2Xhgd8L3eS2h1+RxYBlws7u/UGF9BpY35pOrqJfqY83NzedMmzYtsdtuu43b\n", 957 | "ZpttaG9v32C53t5ennrqKZYtW9b14IMPJszsnGw2e4q79w4R90PJZPLX++67b8vOO++cSCRKvxcu\n", 958 | "k8lw3XXX9f7zn/9ck81m3+7u/y7rS1aZkiupCzopShzGejsys08AZxMu1ZUyFtYJPUunA98qTHrM\n", 959 | "bCLwD2BrIBVTVTuBH7r7yUMtYGbbAl8FDgKyhN62/mtGOWAd4XteDyxy9zvjqNhYT67MbHI6nb60\n", 960 | "vb197gEHHNC+xRZbFLXemjVruPrqq7sef/zx5zOZzH4DE/VEIvHhVCp1wcKFC9uKjTmcu+++26+5\n", 961 | "5po1fX19c9z9gYoDxkzJVYMys3awQ6BjD0huArlO6HoYsr9y90dqXb9SjfWTosRjLLcjMzsZOInK\n", 962 | "epY6gQuBz7m7Rz0YfyP0Go00tqpUXcCn3f2iwjejQc7HAN+IymwaIU5/Yvg/wMlD9ZoUaywnV2Y2\n", 963 | "JZVK3TZr1qyt5s+fn2puLu1eNXfn7rvv9sWLF6/LZrPvdPdlUdzZqVTq5iOOOKJt8803j62+d911\n", 964 | "V37x4sXPZ7PZmfU2lm/MJ1fRrZ9JYF0xXdRFxkwA+8LEL0F+R8i1QnMn+K2w5gxgabllhV9z7cdD\n", 965 | "7jB4Wx7264CJhJ79f2Xhl33QdAes+lYjDPrrN5ZPihKfRmtH0ZiWDwDHEQYLpwg9Mn8GznL3fxUZ\n", 966 | "ZyEhuaj0kh2EBOvb7n66mX0GOIMwxUI1rAVe7+7PwCvHzl8D7y+jzC7gbmAfd+8aaeGhNGJyZWYz\n", 967 | "mpubP9/c3HxQLpebYGa5RCLxTE9Pz4+Bi9x9XRExkqlU6s5ddtll5j777JMqZhzUUJYvX87ll1++\n", 968 | "pq+vbyfg2VQqdf+CBQu2nT17duzb9Yorruhevnz5b3t7ez8Rd+xKjMnkysy2gPTnoenz0Dsemhzy\n", 969 | "Dm2/rzz5SRwI7efAFm1w/LhwQ007sBq4Ng8/6Iaup2HNEe5+c4n13hvaroKj03BUEmYMslQPcBlw\n", 970 | "UiesugDWfcEbYJ6QRjspSn1qlHYU9QgdA3yNMIZo3IBF+giXwv4FHDbcuJJoSoT7iTcB6gb2B66K\n", 971 | "Oe5AWeAGd18AYGZnA5+k/CSxB/g7sG8FP2AbJrkys6npdPqCfD7/ttmzZ9usWbPSHR0d5PN5Xnzx\n", 972 | "Rf7xj3+se+yxxxKJROLHmUzmJHfvGypWMpk8bfr06V9auHBhWyWJVb+bbrqp75Zbblmay+WunzFj\n", 973 | "xgkf//jHY4k7UHd3N2effXZXd3f3e9z9r7EXUKYxlVyFA1rLiWCnwEeBY1rgjYSbXl4EzutPfpbB\n", 974 | "mv3dfU1p8Vu/DOO+Ble0wR4MfjNNHrgCOKILuj7qnruqyLq/HToWwzVt8PYi1lgJzO+Cf18M6z4d\n", 975 | "V69ctTTKSVHqWyO0oyixOhf4GCMnLk7oydrX3W8bIt71wDzinW/QgZcISV/clwMH6iEciKcD1xLG\n", 976 | "VlWiEzjW3X9RzsqNklyZ2bbJZPKWuXPnTt5rr72SqdTgw+FWr17N7373u65nn3321kwms8DdM4PE\n", 977 | "mplMJu8++uijWydMmFBJtV6Ry+U499xzO1etWtX02c9+tmXKlCmxxB3MHXfcwfXXX/+X7u7uvatW\n", 978 | "SIniakcN8vibttNh+snwYAv8rAV2Yn0CNAU4PgFPtMOBc2HczWFcU3HMmg+F8V+DO9vWT/8ymARw\n", 979 | "ALCkDVovMrPdRo5tU6D1D3BVkYkVwCTg+jaY9hGww4pcSUSq7xSKS6wgHEjGAX82s+1e9aHZawkH\n", 980 | "nLgncjbCQbHaiRWEg+IXgPOpPLGCsF1/aGYdMcSqS2Y2KZlM3rT33ntvuvfeew+ZWAFMmDCBhQsX\n", 981 | "tm211Va7pVKp8wdbJplM/tecOXOScSVWAE1NTcycObN92rRpqWomVgA77bQTuVxudzPbuqoF1UDd\n", 982 | "J1dm9i7oOA5ubgs/kIbSDPwsDQteC+POKTJ2EtI/hj+OELvQzsBPWmHij0detvmT8MFmKDUpnwD8\n", 983 | "pB3GnWrV6I8VzKzZzD7QbPZNM/uymW1ZhTLemjD7WpPZIjPbOe74MnrCDyVOpPRLbe3ANwd5/ws0\n", 984 | "wPF3BCnCpcBNYozphMsTG6WmpqYvzJw5c8rcuXOL2vdNTU0cfPDBbc3Nzfub2VsKPzOzNnf/+C67\n", 985 | "7BL7k1ZeeOEF5syZU/X2mUql2GmnnQw4uNpljbaiN15/b1B0UhrFg8LEk+CbbeGxRSMx4KwWyB4S\n", 986 | "3YY8kvfDDk3hhppSHAzY6y1M9jd4TcwS0PJfcFyZv+jeCUzYlHCdcqNQuzb0qnpM74AHZ8EFp8KJ\n", 987 | "h8PprfBwi9nnY4qfnGB29WbwfyfAV74EX5kCfx1vdrmZ6ZFTFapRO/okYWxAqZqA/c1sYAKyH/FN\n", 988 | "j1BLrcQ7tqsDiOXf4UhGux1ZmN38mD322KOllPVSqRRz5sxJp1KpLw746K2TJk3KTpxYzKmueO7O\n", 989 | "008/zYwZg40Njt/WW2+dbmlpmTcqhY2iohqUmZ0AnGpm3yfqVqlqrdaXuzVkd4NDSlhrGvDuPCQO\n", 990 | "H3nZicfDlwcOSC1CEjg6BR3HDrPQ3jC9Fd5aenggJIpfbIcJx5UZoK7Uqg0NZgJcdQJsdTeMOwU4\n", 991 | "D9L/gpY2+J6ZlbvDXtEKX9kZ9n4c2r8Nie9C0+PQ9iZ4TwpOiOErjFm1aEdR7/EXKX+wdh44oiBe\n", 992 | "C7BVDFWrBwmGHktRru3NbKRpHCpSo+PRgkmTJqXKmSvqLW95S1M+nz/AwuOQ+u08Y8aMkhK1YqxZ\n", 993 | "swZ3Z/z48XGHHtQWW2xBPp/f6Hr2i83WlxLGG5xAuMY1Wr8Wd4d52dKPaQe1waR3j7xcz47wjrIq\n", 994 | "Bu9qhvScYRaYCbtX2Esxx6Bph8pi1I1ataENmNkOTfCGEweMdXkNcCK0jA8n0Urim8Ex50Bb4aCX\n", 995 | "VuAcaEtWGF9q0o46qOzSVxthpvJ+ryHc1bcxqMawhSywTRXiFqpFO5o1c+bMsnr5xo0bx/jx4zOE\n", 996 | "mfYBSKfTs6ZOnRr72LrVq1czefLkoh5tE4fJkyeTyWQ2HZXCRlGxJ/9O4HB3/ylwaSmXNsxsUcHL\n", 997 | "Je6+pPjqMQ4ml/ELZsIr/xleNv3qO6mLNQ7IDTfwsgMmJYf5vMgy8nU1uNPM5hHucCpVrdrQQNvu\n", 998 | "BNnBCt8ZEknYvoLYAC0ZGLfjIB/MBrpgipk1NcI0G9XUYO1oHJChssHnhcejNGFskQwuRxED5Cto\n", 999 | "Q1CDdtTU1DQxnU6XncSlUimn4IRlZq2FD0uOSy6Xo9RJSCvR1NQE4XdpTY6LFbajIRW1BaPZWpeZ\n", 1000 | "2R7A0wNZXN37AAAdM0lEQVRn5h1h3UVl1g1gLbxcxsZe/cp/hpfshbXN5d3oshZoGm6Ct3WwMktF\n", 1001 | "B+S1QGLESeRGU3QgWdL/2sxOLXK9WrWhgf5zLyT7ePWOuQPyWVheYfyeFKz9F0wcmGDdDbTBi+vG\n", 1002 | "eGIFDdeO1lL5+KjC41Ev1enx2Vg0UUTPXrltKFp31NtRLpdb1dvbm6fMXrJMJmOEtthfj+5sNltO\n", 1003 | "qGE1NTXR1zfktFqxy+VyAF6rH5yVtKPhjLiTzewrZvYrM/sfwjwBC+IouEi3wJJk+JFRiku7YOW1\n", 1004 | "Iy/X8i/4v7IqBjf0Qe/SYRZ4EG7uq+wH6lKH3P0VBKgLNW5DG3D3+3Pw72+FyR5f8SjwLehZA2dW\n", 1005 | "GN/zcPbR0FX4LI9u4AvQlYUfVBJ/LKthO1pHmDuqXF3ALQWvHyWeqQvqQTV64JLAY1WIC9S0Hf3z\n", 1006 | "wQcfLPVkBsDatWtZs2ZNCni4/73e3t5/PvfccxU9MmgwEyZM4OWXX2a0plh8+eWXSaVSsT7Eux4U\n", 1007 | "k0H/y90PB/6bMPZgRVVrVMDdV0DyVvhtCWs9C/wpAflB5wXZ0KrvwvfLeK5RFvhRBtb9cJiFboSn\n", 1008 | "uuH20sMD4Zj1gy5YfVaZAepJzdrQYFbDB74LT8yCtacBR0DvjtDTBce7e7k77BU9cPqdcMMM6Pxv\n", 1009 | "yB8PuRnQdQ9cm4HvxfAVxqqatKNoIt8zCUlSORLAeQXxeoAnYqhaPcgTf4K1vMq9GLU6Hi1euXJl\n", 1010 | "79NPP13yinfeeWcukUhcNmCC7Dsef/zxnviqF4wfPx4zY82akubiLtvTTz9NIpG4Y1QKG0XFJFdu\n", 1011 | "Zm919zXu/lt3v6bqtdrAqm/ASV3wXBHLOnBsNyQvdvdVRaxwNdzfB8tKrNMlgD/gA54evkFN3PPQ\n", 1012 | "8wP4YZkDV/8CrHkeKOlRO3Wqxm1oQGXcn1wHM++Bj58G3/oVnNwN2/W4/09M8bOr3d//PMz7Lpz+\n", 1013 | "Azj9RdhrjfsBwz3GQkZUy3b0C8q7nJMDfu/uA3u+riaM42p03ZR+aWE46wjPWqymmrQjd8/l8/mz\n", 1014 | "b7755pISokwmw9KlS3szmczAXu/bV65cmVy1qphTXfHMjC222ILHH3881rhDWbFiRW9PT8+SUSls\n", 1015 | "FBVzsJgHfNTMrjGzS83s6CrXaQPufiOsOwv27IInh1myD/h0D1z7CKwtqo7unoXeo2BBV/E/JJcB\n", 1016 | "n+2CVUXMxdL3C7iyD24sMna/1cBnOmHt1+r98TdFmkcN29Bg3L3P3X/f536Su5/h7qX/nBy5jGV5\n", 1017 | "91Nz7ovc/c64449B86hRO3L3FwmTgZaaSKwDTh7k/R8REq9GliEknS/GHPc3MccbaB41ake5XO6c\n", 1018 | "hx566IXbbrutqDnT+vr6uOSSS7r6+vqudve7Cz9z9y4zu2DZsmWxD7zadNNNWbp0aTnzupUkk8lw\n", 1019 | "7733OqHHYqNSTHJ1GXCZu78PWAgM+pys6ur6Cjz5DZjZA5/qgXtY3xP9IvDdPGzVCZcthbV7eAlP\n", 1020 | "VnfvuxjWfhXe0gV/Y+ge7jxwOfCOLug+dKjnhW0Y21+E7vfBB7rgpiJrtBLYpwueuxj8giJXqnd1\n", 1021 | "0IZkI1DrdnQ68GuKS7CcMPh4vrs/8qoP3R8m9ErH3ZPphINi7GNxBpEHziHsizimlugEjnP3at/E\n", 1022 | "U7N25O6rMpnM22+88cYXbrjhhmxv79C7adWqVVxwwQVdTzzxxC2ZTGbhYMtks9kzly5d2rd6dRH3\n", 1023 | "bxUpl8vx4IMPdj777LOZF1+MO2/e0L333uuJROLmMARo49IQD24uiLcFpD8LzUdBz0RoyoV/321X\n", 1024 | "wpozgNvLf6J60wHQdg5s0Q7HjwsTo7cDa4DFeTizG7qegjWfcPeSLtWZ2d7QdhUclYajkjDYY5S6\n", 1025 | "gUuBkzth1a+g89hGuF2/2g9LHY2HsUrtNUo7iiYU/QLwNcJdbQPncukjDMr8F3CYu/97mFhbAf8m\n", 1026 | "3hnOu4H3ES47xhl3oCxwg7svADCzs4BPVVBmD+HX7fzyj+GN8eDmKM7UdDp9fj6ff/usWbNs1qxZ\n", 1027 | "6Y6ODvL5PC+99BJLly5dt2LFikQikfhxJpM5cbhzQTKZPG369On/tXDhwvY45qa66aab+m655Zbb\n", 1028 | "crncDVtttdUJhx12WFs15rzq7u7m7LPP7uru7n63u/8t9gLKFNs+bqTkakDsNOH26HVxXTqLHoGw\n", 1029 | "D0z8EviOkGuF5k7I31J58mbbQvvxkDsM9szD/h0wkXAsvC8D5+Wh+XZY9W13XxzH9xkNjXJSlPrW\n", 1030 | "aO3IzJLAB4DjgG0Jc1etBf4MnOXuRd3la2YLCWOMyp39vVAX8C13P93MPgOcQfUSrLXA6939GXjl\n", 1031 | "2HkBYZuUWmYXcBewbylXHQZqpOSqIN5Wzc3Nn29ubj4on89PBPoSicQzPT09PwIudvcRe0nNLJlK\n", 1032 | "pe7cZZddZu6zzz6pShKhf//731xxxRWrs9nsm4BnU6nUvxYsWLDd7NmzY9+uV1xxRffy5csv7u3t\n", 1033 | "/WTcsSsx5pOrRhWeZ2UfgY7doXkK5NdB1yOQPX+wywf1rtFOilKfxnI7MrOTCOOyKkmwOgmXLD/v\n", 1034 | "7h71sN0E7EpI/OLUBXzaB8wNVdCr9y3CD9+R5vhzQo/Vj4GvuHtFlzIbMbmKi5lNSaVSt82aNWur\n", 1035 | "+fPnp0qdBNTdufvuu33x4sXrstnsO9z9jiju7FQqdfMRRxzRtvnmm8dW37vuuiu/ePHi57PZ7Ex3\n", 1036 | "L+OO/epRciV1YSyfFCU+Y70dmdkngLMJiVApZ8Y8YXzV14FvF/asW3h4/T8I4xDiekh0F3Cmu39l\n", 1037 | "qAVCLz1fAT5CGPTeRpi7CsIg/nWE7/ln4LS4bvYYy8kVgJlNSqfTl7W3t8/98Ic/3L7lllsWtd6a\n", 1038 | "NWu4+uqrux5//PHnM5nMfj7gLvhEIvHhVCr164ULF7aW81zEge666y5fvHjx6mw2O9fdH6g4YMyU\n", 1039 | "XEldGOsnRYmH2hGY2TaES2u7EJKR4ZKsHKHX52HgYwNPiAUxJxNmn96Oyi89dgHfAb5ezPAIMxsH\n", 1040 | "7EZ4ev12hDFqjxMm/7vV3WOdOHKsJ1fwSu/hR5ubm380derUxG677TZum222oaNjw6eo9fb28uST\n", 1041 | "T7Js2bKuBx98MGFm5/T19Z0yVO+hmX0wmUz+Zp999knvsssuiUSi9FlJent7ue6663ruueeetdls\n", 1042 | "9m3uXunTMKpCyZXUBZ0UJQ5qR+uZ2Y6EsVzvBaaw4eSlrYS5Wm4g9CCNOOmtmaWAUwkPDW+h9Efv\n", 1043 | "9BDu7DnE3f9S4rqjRsnVetE+/1BLS8sXstnsm1OplHd0dGTNjO7u7kRnZ2dLKpV6uLe39+fufp67\n", 1044 | "rywi5htSqdSlm2222Wvmz5/fPn369KIe7pzL5Vi+fDnXXnttVyaTuSaTyXy2mPJqRcmV1AWdFCUO\n", 1045 | "akeDM7PxwOsJSVEGeNhfPSFpsbFmE3qe3kZIsEYai9U/FuYnhMt3dfWc04GUXA0u6s16DTCNMP3S\n", 1046 | "SuBBdy95fiwza0okEkc1Nzef2NHR0b7rrruOmz59OlOnTqXwIdLd3d0888wzPProo7lly5b1uvtD\n", 1047 | "PT09J7p7EY+lqy0lV1IXdFKUOKgdjZ5oCohPAfsCOxEu1/Xf6p8CXiDMlnwpcHmlA81Hi5Kr0dN/\n", 1048 | "Z306nT7MzHbLZDLTU6lUNpFI5HO5XFM2m02k0+kH+/r6lmSz2Z+7+z21rnOxlFxJXdBJUeKgdlQb\n", 1049 | "Ua/GZoTxWDlgZb3dvVUsJVe1Y2YthEvYKcJl5Oe8AeZpHExc+7i0+zVFRGSjEQ1ML+bBrSJD8vAw\n", 1050 | "8uGeTzfmlPMgUhEREREZgpIrERERkRgpuRIRERGJkZIrERERkRgpuRIRERGJkZIrERERkRgpuRIR\n", 1051 | "ERGJkZIrERERkRgpuRIRERGJkZIrERERkRgpuRIRERGJUdWfLWhmiwpeLnH3JdUuU6rHzOYB80a5\n", 1052 | "zEUFL9WGNgJqR1KpWrShqNxFBS/VjhpctdqRhed2VoeeIL7xq/Y+VhsaG9SOpFKjsY/VjjZ+ce1j\n", 1053 | "XRYUERERiZGSKxEREZEYKbkSERERiZGSKxEREZEYKbkSERERiZGSKxEREZEYKbkSERERiZGSKxER\n", 1054 | "EZEYKbkSERERiZGSKxEREZEYKbkSERERiZGSKxEREZEYKbkSERERiZGSKxEREZEYKbkSERERiZGS\n", 1055 | "KxEREZEYKbkSERERiVFzrSsgIiK1Y2YpYCKQBVa7e77GVZIGY2YGdADthDbUXeMq1Zx6rkRExhgz\n", 1056 | "azazD5nZUqAbWAE8C3Sa2c/N7I21raE0AjOb3tzcfHoymXypqanppVQq9R8zW9vS0vKImX3GzDpq\n", 1057 | "XcdaMXevXnAzd3erWgENysyagDnApoQD2zJ3f7m2tSpPtfex2tDYoHY0ODNLA3OBScBa4DZ376ww\n", 1058 | "5p7AVUAKGDfIIn2EXqxbgA+5+5oKy9sW2B5oAv7j7v+qJN4w5VR9HzdwO9oa2JFwteox4F6v4ORv\n", 1059 | "Zs2pVOqcfD5/xKxZs9h1113TU6dOBSCfz/Poo49y6623rnvssccSuVzuqHw+/6sYvsaoiGsfK7ka\n", 1060 | "gpltQ+gqf87dn4kpZhskvwipY2FqC2yTD8fLe9OQ/D2sPc3d74+jrNGik6LEQe1oQ2Y2BTgB+Czg\n", 1061 | "0R+AJHAB8E13f6KMuPOBK4C2IhbvBR4HdnX3VWWW9VXgzUAmejtJ6CX7BnBRJSf4QcpTcjWAmb0z\n", 1062 | "nU6fms/nd502bVpvU1MTL7zwQnNfX9/Tvb293wLOL/UysJk1pdPp30+dOnXeIYcc0t7a2jrkss8/\n", 1063 | "/zznn39+V29v71ez2ewZlX6f0aDkqgqi68YfgQmnAjNgchaeS0PqTlh1irvfWEHsSTDub/C2bWFR\n", 1064 | "K+xS8OkLwP/m4Ju90PV+d7+h0u8yWnRSlDioHa0X/bC7BZgMpAdZJAt0Am9393tKiPt64A7CuJhi\n", 1065 | "9QLLgL1KSYTM7GTgJIZO4jqBK4GFcY3xUnK1oebm5i+mUqnT991337Ydd9yRVCoFhJ6lRx55hOuv\n", 1066 | "v75z1apVf85kMge5e67YuOl0+qzNNtvs04cffnhbc/PIw7ZXr17NT37yk67u7u6D3f2a8r/R6Biz\n", 1067 | "yZWZNQMfgkmfgMR4WHMNZP/X3V+sPHbHGbDZZ+Ccdng3oRe7F7gMOKYL1h7jnv1FGXU2GH8bfGw2\n", 1068 | "/CgFQ22SvwHv7oSuXdx9efnfZPQ06knRzKa3wlFtMC8HL6yCnwDXxvVL2szaDT4+GQ5x8JVwkcOF\n", 1069 | "7t4VR/yNTSO2o+jH2HxC79JUwj/gc8rpUSqI2QosB7YkHICG4sBKYHt3f6HI2L8GDhkh7mA6gX3d\n", 1070 | "/ZYiy/kY8FNG7h3rBM5295NKrM9Q5TZkcmVmmyQSiU+n0+n9gM7u7u5fApe7e1+5MROJxAdaW1sv\n", 1071 | "OvLII1snTpw46DLZbJYLLrig67nnnvtFb2/vMcXWtbm5+cnjjjuupaOj+OFUDzzwAFdcccUDPT09\n", 1072 | "2xe9Uo2MyeTKzJIw7k+w9a5wfEcYhvDbbriqC7p2d/cHK4i9ALa8FO5pDz8YB3oIeHM3dM4utRwz\n", 1073 | "exvM+CM82jHyPQRfz8H3f+u++mOllFErDXpSnNMKNyyE5H6QfgL4NnS+BFesDb+kK/pHYWabdMDS\n", 1074 | "uTDtM9DuwLnQeTs8uQ7mlnOJZWPXaO0oSqx+DhzM+p6gTPRnfrGJyCBxDwfOIdx5NZJu4Fvu/vUi\n", 1075 | "4k4EngFayqhWHvi9u3+oiHISwBPAFkXG7gamuvvaMuo1sOyGS67MbLtkMnnbzJkz23faaafW3t5e\n", 1076 | "brnllnUrV668M5PJ7OPumZGjvCqmpdPphw444IDtXve61w27bGdnJ2eeeWZPX1/fdHd/aaTYTU1N\n", 1077 | "J+ywww6nHnDAAcVcVn5FPp/njDPO6Ozs7HyHu99eyrqjLa593GB3CyaOhJ3mwl0dcBiwH/CbVvjG\n", 1078 | "JJhwQWWxJ54E3xoisQJ4HXBUM7QfV3rsCcfDl9uL29yfaYLMh6ODocTMwu0rl18IHedCegHwGeA+\n", 1079 | "aN8UPgi8t9IyOuC7h8JW10H7AcCBwI3h79u0h7Em0vjezYaJFYQB4h3A5VGSUY7/R3GJFUArcGx0\n", 1080 | "g8xIPkJIksqRABYUeUx6J4MPkh9KHvh4WbXaCLS0tJw/b968yQceeGDr9ttvz6xZszjyyCM7Nt98\n", 1081 | "813M7HNlhp2bSqWmbbfddiMu2N7ezvbbb59PJBKfKiZwc3PzMXPmzCkpsQJIJBLMnTu3JZ1OH13q\n", 1082 | "uo2qwZKrCUfBorZXT8/1uQT0zTKz6eVEDXfkrJ0bToPDOSwJiQ+XXkLfHrB/kZnwZsAbegmDQCV+\n", 1083 | "czaBCR8c8GY7cDJ0TIKjKgluZokMfPRUSBXucAMWQboPDo96PaSxfY6hxy51ALuXGjCab2pmiau1\n", 1084 | "AlsVsdzrKW4Q+1AyhEuVI9mT4pNDCNtwflk1anBmNi2Xy+2y6667bnAebmpqYt68eW3pdLrcY9Ge\n", 1085 | "b3jDG1KJRHGn9x122KEtnU6/u4j6Wjab3XzzzTcvq1Kbb755UyKR2KGslRtQ1ScRNbNFBS+XuPuS\n", 1086 | "8qPlJsPWg7yfBqZkoHMy8GQZgVshmYOWEX4BTgJyZXSr51KlHdfaozrVHzObB8wb5TIXFbyssA2x\n", 1087 | "yQzID5bdbA0kwtiZSqRykBzs8LMVkAkNIQEUPYB0Y7QRtKPh2kkemFJGzBZCuyjlR2+O4o4Vlc43\n", 1088 | "lC+ynHaGHlQ63Dolq0UbispdVPCyknY0qaWlJZNMJl9108KECRPI5/OTyozbkk6niz63J5NJKO4E\n", 1089 | "1eTu1tRU6pC9Dcqpu/NatdpR1ZMrd18UXzRbBn9eADMH/ON9HHiuGXikzMBrgCw8moLXDLPYPUDq\n", 1090 | "qdLDp1bCivYwrdVIHFiRAJ4vvZzqiw4kS/pfm9mpo1DmohjD/fMOSK/j1WebayHTHQYlV6K3DZ76\n", 1091 | "K2z19gEf3ACMh0dWlXBnzsZqI2hHfwdmEy4FDpQG7ioj5roy1kkTbjceSaXHk2agmLGCzxDuAhrs\n", 1092 | "LsfBOOX9IK5JG4rKXRRTqMe6u7sTK1euZNKkDfOoRx55xM3szjLjPv/SSy91U+Qv+lWrVuHuI+4D\n", 1093 | "d+9ramrK9PT0pIebfmEo3d3dEG7CqCvVakcNdllw9dfhK91QOB5uJXBIFzSf62VOrhduBU6cBz/K\n", 1094 | "Dr/kGetg9Zmll9DzS/hJT3HL3gqsWguU+w9LhuHuTybhjwuhp/C2vT8D50K2C35YYXzvglMPh64V\n", 1095 | "Be//B/gUdK2BUyqJL3XjbMKUCAP1ANe5+4pBPhtWNCXBlZQ2NuqOIu+U/j/KS9769QCPFrHc5ayf\n", 1096 | "k6sYncB5ZdWowbl7t5mdffnll3d1da0/Gj399NPceOON3b29vaeVGfrKBx98sClKZka0dOnStT09\n", 1097 | "PUXdBZ9KpW5dvry8G9nvu+++rt7e3rqfiiEuDXW3YIjZdACkfxEGmE8Glqag+dew9vOV3LpqZjOg\n", 1098 | "7V64cHwY1zzQd3Nw2tPQ+YZSkzgz2xxa/wP3t8A2wyyZB/bthiWnuPeNqQnXRjO+mbVNgAv74D1z\n", 1099 | "IfME8BT0dsKB7n5TDPGtFf7b4ZQ3Q9aBu8Pkiad0uzfEfh1tDdqO9iLM09JGSChSwPXAIeX+0DOz\n", 1100 | "XQmJUDG9Dp3Ax939yiLilnoXX6Gi70qMyroeeAfFTfmwAnhNHFOgNOjdgk39M51Pnz4909PTw4sv\n", 1101 | "vkhfX9+R7n5JuXFbWlqu3HXXXd+39957D3t16uGHH+aSSy55LpvNblnMXFdm9p4pU6ZccvTRR5dy\n", 1102 | "0wJdXV384Ac/KPquxFoak1MxFMRNAW8nXKu/1d2fiynuztB6PeyehM93wObAw8CZa+Ghl2DdvHJ+\n", 1103 | "kYbY6WNhs2/CX9sGv/TYBxzZA5ffD2v3cPcie7pqqxFPigWxtwbeQuj+/FspE+kVGX88oZ06cFMc\n", 1104 | "t5tvrBq1HUV36u0BbALc7e7F9O6MFPNHwBEMn2B1Ea40f9CLnITTzL5IuFu11Gs6PcDW7l7UpUUz\n", 1105 | "ew1hstIJDH91pAvY291vK7E+Q5XbcMlVQdzNCDdBdBGOFb0VxtsymUze/a53vWvynDlzBt0HK1as\n", 1106 | "4De/+U1XJpN5b7HjxswskUwmnzrooIOmjTTNQ6Hrr7++b9myZVf29PQcVPRKNTKmk6tqMrN24CMw\n", 1107 | "+ZOEEexPw8s/Bv7g7iNcNhwpdvoYSHwHDnL4bGsYQt0JXJWHH3RD1zJYs79X+Cyv0dSoJ0WpL2pH\n", 1108 | "60W9TN8n3JGYYMNxXf3P/bsKOLyUeZDCXdHcDOzE4GPFBtMFnODuPy62nKis1wN/IUzLMLCXYx1h\n", 1109 | "IP5+7l7pGMfCMhs2uaoGM9s2lUrdOGHChE322GOPcVtvvTWJRILnn3+e2267rXPFihXe19f3IXe/\n", 1110 | "vsS4b0ulUn9auHBh65ZbjnwD6R133OF/+tOfXshms7M9pkfJVZOSqwZlZtMgdSS0fgKyk6CpF+wm\n", 1111 | "WHMGsDSO7vHRpJOixEHt6NWiHqCjCXNUdRASnWuAs7zMhx+b2SRC0vN6Ru7B6gK+4e7fLLOsZsJk\n", 1112 | "hMdH5fVfmjwTuMRjflqBkqtXi3pWF7S0tHw5n8+/0d2bmpqanurp6fkh4dmOZY3DM7P9k8nkxfvs\n", 1113 | "s0/rrFmzLJ1+9f0Lq1ev5pZbbum78847X85ms29z9wcq/DqjQsmV1AWdFCUOakejJwwJ5GTCnG5N\n", 1114 | "bNizlCPc7fcQcLK7/3H0a1geJVejy8ze0tLS8u1cLrfXrFmzbMaMGelkMklPTw/3339/56OPPppI\n", 1115 | "JBIXZzKZk9392VrXt1hKrqQu6KQocVA7Gn1mlgTeDxxAmCemlzCdzc+8hAdC1wslV7VhZls1NTUd\n", 1116 | "mUqlZgMd7v5yT0/PDYRnqTbcOFMlV1IXdFKUOKgdSaWUXEkcxuizBUVERETqm5IrERERkRgpuRIR\n", 1117 | "ERGJkZIrERERkRgpuRIRERGJkZIrERERkRgpuRIRERGJkZIrERERkRgpuRIRERGJkZIrERERkRgp\n", 1118 | "uRIRERGJkZIrERERkRgpuRIRERGJkZIrERERkRgpuRIRERGJkZIrERERkRgpuRIRERGJkZIrERER\n", 1119 | "kRg1V7sAM1tU8HKJuy+pdplSPWY2D5g3ymUuKnipNrQRUDuSStWiDUXlLip4qXbU4KrVjszd4465\n", 1120 | "PriZu7tVrQCpuWrvY7WhsUHtSCo1GvtY7WjjF9c+1mVBERERkRgpuRIRERGJkZIrERERkRgpuRIR\n", 1121 | "ERGJkZIrERERkRgpuRIRERGJkZIrERERkRgpuRIRERGJkZIrERERkRgpuRIRERGJkZIrERERkRgp\n", 1122 | "uRIRERGJkZIrERERkRgpuRIRERGJkZIrERERkRgpuRIRERGJkZIrERERkRgpuRIRERGJkZIrERER\n", 1123 | "kRgpuRIRERGJkZIrERERkRgpuRIRERGJUUMnV2Y2r5Hjj0YZo/EdGl2j74ONoZ02uo1hHzR6/I1B\n", 1124 | "o++DjeHfQVwaOrkC5jV4/NEoo9rxNwbzFL8uymhk8zaCMho9/sZgnuLXRRkVa/TkSkRERKSuKLkS\n", 1125 | "ERERiZG5e/WCm1UvuNQNd7dqxVYbGjvUjqRS1WxDoHY0VsTRjqqaXImIiIiMNbosKCIiIhIjJVci\n", 1126 | "IiIiMVJyJSIiIhIjJVciIiIiMVJyJSIiIhKj5lpXoJGZ2R7AgcASwIAd3f30mlZKGo7akVRKbUji\n", 1127 | "oHYUH/VcxeMpd78SeG3/G2a2v5ltXsM6SeNRO5JKqQ1JHNSOKqTkqgLufjPwWne/3czGA10AZjYV\n", 1128 | "OJyQ+YsMS+1IKqU2JHFQO4qPkqsKmFkrUeMDFgCLzWwPd38OuLt2NZNGonYklVIbkjioHcVHyVVl\n", 1129 | "dgT+Gv19HbA18HT0Whm+FEvtSCqlNiRxUDuKiR5/UwVmthlwJnCtu19Y6/pIY1I7kkqpDUkc1I5K\n", 1130 | "p+RKREREJEa6LCgiIiISIyVXIiIiIjFSciUiIiISIyVXIiIiIjFSciUiIiISIyVXIiIiIjFSciUi\n", 1131 | "IiISIyVXIiIiIjFSciUiIiISo/8PcOLM3HH8Q7gAAAAASUVORK5CYII=\n" 1132 | ], 1133 | "text/plain": [ 1134 | "" 1135 | ] 1136 | }, 1137 | "metadata": {}, 1138 | "output_type": "display_data" 1139 | } 1140 | ], 1141 | "source": [ 1142 | "# x(n1,n2)\n", 1143 | "x1 = [0, 1, 2, 0, 1, 2]\n", 1144 | "x2 = [0, 0, 0, 1, 1, 1]\n", 1145 | "x3 = [1, 2, 3, 4, 5, 6]\n", 1146 | "# h(n1,n2)\n", 1147 | "h1 = [0, 1, 0, 1]\n", 1148 | "h2 = [0, 0, 1, 1]\n", 1149 | "h3 = [1, 1, 1, 1]\n", 1150 | "# x(n1,n2)**h(n1,n2)\n", 1151 | "y1 = [0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3]\n", 1152 | "y2 = [0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2]\n", 1153 | "y3 = [1, 3, 5, 3, 5, 12, 16, 9, 4, 9, 11, 6]\n", 1154 | "\n", 1155 | "from scipy import signal\n", 1156 | "import numpy as np\n", 1157 | "yy = signal.convolve2d(np.reshape(x3,(2,3)), np.reshape(h3,(2,2)), mode='same')\n", 1158 | "\n", 1159 | "plt.figure(figsize=(10,4))\n", 1160 | "ax=plt.subplot(1, 4, 1)\n", 1161 | "ax.scatter(x1,x2, c='b',s=[x*50 for x in x3] )\n", 1162 | "plt.setp(ax.get_xticklabels(), visible=False); plt.setp(ax.get_yticklabels(), visible=False)\n", 1163 | "plt.xlabel('$n_1$'); plt.ylabel('$n_2$')\n", 1164 | "plt.xlim([-1,4]); plt.ylim([-1,3]);\n", 1165 | "plt.title('$x(n_1,n_2)$')\n", 1166 | "ax=plt.subplot(1, 4, 2)\n", 1167 | "ax.scatter(h1,h2, c='r',s=[x*50 for x in h3] )\n", 1168 | "plt.setp(ax.get_xticklabels(), visible=False); plt.setp(ax.get_yticklabels(), visible=False)\n", 1169 | "plt.xlabel('$n_1$'); plt.ylabel('$n_2$')\n", 1170 | "plt.xlim([-1,4]); plt.ylim([-1,3]);\n", 1171 | "plt.title('$h(n_1,n_2)$')\n", 1172 | "ax=plt.subplot(1, 4, 3)\n", 1173 | "ax.scatter(y1,y2, c='k',s=[x*50 for x in y3] )\n", 1174 | "plt.setp(ax.get_xticklabels(), visible=False); plt.setp(ax.get_yticklabels(), visible=False)\n", 1175 | "plt.xlabel('$n_1$'); plt.ylabel('$n_2$')\n", 1176 | "plt.xlim([-1,4]); plt.ylim([-1,3]);\n", 1177 | "plt.title('$x(n_1,n_2)**h(n_1,n_2)$')\n", 1178 | "ax=plt.subplot(1, 4, 4)\n", 1179 | "ax.scatter(x1,x2, c='grey',s=[x*50 for x in yy] )\n", 1180 | "plt.setp(ax.get_xticklabels(), visible=False); plt.setp(ax.get_yticklabels(), visible=False)\n", 1181 | "plt.xlabel('$n_1$'); plt.ylabel('$n_2$')\n", 1182 | "plt.xlim([-1,4]); plt.ylim([-1,3]);\n", 1183 | "plt.title(\"scipy.signal.convolve2d\")\n" 1184 | ] 1185 | }, 1186 | { 1187 | "cell_type": "markdown", 1188 | "metadata": { 1189 | "collapsed": false 1190 | }, 1191 | "source": [ 1192 | "## Filtering in the Spatial Domain\n", 1193 | "\n", 1194 | "We are studying $\\bf{Boundary Effects}$. We could get for example zero-padding, symmetric, circular filter. Also, we can apply $\\bf{Spatial Filtering}$, like LPF (Low pass filter) which generates a blurry image.. or HPF (High pass filter), which accentuates the edges of the image. LPF is also used for $\\bf{Noise Reduction}$. Median Filtering helps a lot for Noise Reduction noise." 1195 | ] 1196 | }, 1197 | { 1198 | "cell_type": "code", 1199 | "execution_count": null, 1200 | "metadata": { 1201 | "collapsed": true 1202 | }, 1203 | "outputs": [], 1204 | "source": [] 1205 | } 1206 | ], 1207 | "metadata": { 1208 | "kernelspec": { 1209 | "display_name": "Python 2", 1210 | "language": "python", 1211 | "name": "python2" 1212 | }, 1213 | "language_info": { 1214 | "codemirror_mode": { 1215 | "name": "ipython", 1216 | "version": 2 1217 | }, 1218 | "file_extension": ".py", 1219 | "mimetype": "text/x-python", 1220 | "name": "python", 1221 | "nbconvert_exporter": "python", 1222 | "pygments_lexer": "ipython2", 1223 | "version": "2.7.5" 1224 | } 1225 | }, 1226 | "nbformat": 4, 1227 | "nbformat_minor": 0 1228 | } 1229 | --------------------------------------------------------------------------------