{ "cells": [ { "cell_type": "markdown", "metadata": { "nbsphinx": "hidden" }, "source": [ "# Quantization of Signals\n", "\n", "*This jupyter notebook is part of a [collection of notebooks](../index.ipynb) on various topics of Digital Signal Processing. Please direct questions and suggestions to [Sascha.Spors@uni-rostock.de](mailto:Sascha.Spors@uni-rostock.de).*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Introduction\n", "\n", "[Digital signal processors](https://en.wikipedia.org/wiki/Digital_signal_processor) and general purpose processors can only perform arithmetic operations within a limited number range. So far we considered discrete signals with continuous amplitude values. These cannot be handled by processors in a straightforward manner. [Quantization](https://en.wikipedia.org/wiki/Quantization_%28signal_processing%29) is the process of mapping a continuous amplitude to a countable set of amplitude values. This refers also to the *requantization* of a signal from a large set of countable amplitude values to a smaller set. Scalar quantization is an instantaneous and memoryless operation. It can be applied to the continuous amplitude signal, also referred to as *analog signal* or to the (time-)discrete signal. The quantized discrete signal is termed as *digital signal*. The connections between the different domains are illustrated in the following.\n", "\n", "![Interrelations between analog, discrete and digital signals](analog_discrete_digital.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Model of the Quantization Process\n", "\n", "In order to discuss the effects of quantizing a continuous amplitude signal, a mathematical model of the quantization process is required. We restrict our considerations to a discrete real-valued signal $x[k]$. The following mapping is used in order to quantize the continuous amplitude signal $x[k]$\n", "\n", "\\begin{equation}\n", "x_Q[k] = g( \\; \\lfloor \\, f(x[k]) \\, \\rfloor \\; )\n", "\\end{equation}\n", "\n", "where $g(\\cdot)$ and $f(\\cdot)$ denote real-valued mapping functions, and $\\lfloor \\cdot \\rfloor$ a rounding operation. The quantization process can be split into two stages\n", "\n", "1. **Forward quantization**\n", " The mapping $f(x[k])$ maps the signal $x[k]$ such that it is suitable for the rounding operation. This may be a scaling of the signal or a non-linear mapping. The result of the rounding operation is an integer number $\\lfloor \\, f(x[k]) \\, \\rfloor \\in \\mathbb{Z}$, which is termed as *quantization index*.\n", " \n", "2. **Inverse quantization**\n", " The mapping $g(\\cdot)$, maps the quantization index to the quantized value $x_Q[k]$ such that it constitutes an approximation of $x[k]$. This may be a simple scaling or non-linear operation.\n", "\n", "The quantization error (quantization noise) $e[k]$ is defined as\n", "\n", "\\begin{equation}\n", "e[k] = x_Q[k] - x[k]\n", "\\end{equation}\n", "\n", "Rearranging yields that the quantization process can be modeled by adding the quantization error to the discrete signal\n", "\n", "![Model of the quantization process](model_quantization.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Example - Quantization of a sine signal\n", "\n", "In order to illustrate the introduced model, the quantization of one period of a sine signal is considered\n", "\n", "\\begin{equation}\n", "x[k] = \\sin[\\Omega_0 k]\n", "\\end{equation}\n", "\n", "using \n", "\n", "\\begin{align}\n", "f(x[k]) &= 3 \\cdot x[k] \\\\\n", "i &= \\lfloor \\, f(x[k]) \\, \\rfloor \\\\\n", "g(i) &= \\frac{1}{3} \\cdot i\n", "\\end{align}\n", "\n", "where $\\lfloor \\cdot \\rfloor$ denotes the [nearest integer function](https://en.wikipedia.org/wiki/Nearest_integer_function) and $i$ the quantization index. The quantized signal is then given as\n", "\n", "\\begin{equation}\n", "x_Q[k] = \\frac{1}{3} \\cdot \\lfloor \\, 3 \\cdot \\sin[\\Omega_0 k] \\, \\rfloor\n", "\\end{equation}\n", "\n", "The discrete signals are not shown by stem plots for ease of illustration." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAApIAAAEKCAYAAAChVbXVAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAIABJREFUeJzs3XdcU9f/+PHXASJDcKHgrCAuBAW1\n7sUQV52t1TqxrVo77betVfuro7b9VKufro9d2taFVqutddYN7j1wgNaF1bpBUZkJnN8flyDICggk\nyHk+HvehSe69552Q5L5zppBSoiiKoiiKoij5ZWXuABRFURRFUZSSSSWSiqIoiqIoSoGoRFJRFEVR\nFEUpEJVIKoqiKIqiKAWiEklFURRFURSlQFQiqSiKoiiKohSISiQVRVEURVGUAlGJpKIoiqIoilIg\nKpFUFEVRFEVRCsTG3AEUFysrK2lvb2/uMBRFURRFUfIUHx8vpZQWX+FXahJJe3t74uLizB2GoiiK\noihKnoQQCeaOwRQWn+kqiqIoiqIolkklkoqiKIqiKEqBqERSURRFURRFKZBS00dSURRFUR6HXq/n\nypUrJCYmmjsU5QliZ2dHzZo10el05g6lQFQiqSiKoigmuHLlCk5OTri5uSGEMHc4yhNASkl0dDRX\nrlzB3d3d3OEUiGraVhRFURQTJCYm4uzsrJJIpdAIIXB2di7RtdwqkVQURVEUE6kkUilsJf09pRJJ\nRVEURVEUpUBUIqkoiqIoiqIUiEokFUVRFEVRlAJRiaSiKIqilHBt27Yt9HM6OjqavG9UVBT29vb4\n+vqm37d161aGDRuWab+EhAR8fX0pU6YMt2/fLrRYFfNRiaSiKIqilHB79uwxdwh4eHhw7Nix9Nvh\n4eE0bdo00z729vYcO3aM6tWrF3d4ShFRiaSiKIqilBBxcXE888wz+Pj44O3tzbJly4CHtYcff/wx\nDRo0oH379gwaNIhZs2YBWo2hp6cno0aNwsvLiy5dupCQkABA3759ad68OV5eXsyZMyfPGPz9/dm8\neTMAH374IW+++Wa2+xkTyaSkJEaMGMEHH3yAlPKxXwPFsljchORCiF+AnsBNKaV3No8L4GugBxAP\njJBSHineKBVFUZRS7e23IUPtW6Hw9YWvvsp1lw0bNlC9enXWrVsHQGxsbPpjBw8e5Pfffyc8PBy9\nXk+zZs1o3rx5+uNnz57l119/Ze7cuQwYMIDff/+doUOH8ssvv1CpUiUSEhJo0aIFzz33HM7OzjnG\n8NFHHzF58mRu3rzJ0aNHWb16NZcvX86y3/Hjx3FxcaFr166MHDmSoUOH5vcVUXIghLADdgC2aLnc\nCinlFHPEYok1kvOBbrk83h2ol7aNBr4vhpgURVEUxewaN27M5s2bGT9+PDt37qR8+fLpj+3evZs+\nffpgZ2eHk5MTvXr1ynSsu7t7eh/G5s2bExUVBcA333yDj48PrVu35vLly5w9ezbXGDp27IiUki++\n+IKlS5dibW2dZR+9Xs+FCxcYNGgQn332mUoiC18SECCl9AF8gW5CiNbmCMTiaiSllDuEEG657NIH\nWCi1+vF9QogKQohqUsprxRKgkklSEuzZAwaDuSPJp5QUuHcPEhK0J5GUBMnJ2v3W1mBlpW02NuDo\nqG1ly2qPlSBCQOvWWviKohSiPGoOi0r9+vU5cuQI69ev58MPPyQwMJDJkyebdKytrW36/62trUlI\nSCAsLIwtW7awd+9eHBwc8PPzy3OVlRMnTnDt2jWcnZ1xcnLKdp/IyEhatGhBTExMtomm8njScqAH\naTd1aZtZ+g0IS+yvkJZIrs2haXstMF1KuSvt9lZgvJTyUDb7jkartaRGjRrNQ0JCijLsUunmTcim\nRUOxIFWrQo0a5o5CUUq+xMRE7OzszBqDXq/HxsYGIQSxsbHcvn0bDw8Pjh49SoMGDbh06RINGzZE\nSklERARVqlTB1dWV5ORkzp07R6NGjQC4ceMGqampODg4cOvWLerWrUtiYiIRERHUr18fR0dHjh49\nmmWwjF6v5+zZs9SpU4fLly/j6upKuXLlspw/JiYmfUnJc+fO0aBBA2xsHtZdnThxAk9Pz0z3lWbZ\nvbf8/f2TgRMZ7pojpUzvxCqEsAYOA3WBb6WU44sj1kc90YlkRmXLlpVxcXFFEG3pNm0aTJkC27eb\nsbIuJgZOnoS//4azZ+HcObhxPfM+latAtWpQqRJUrKj9W6EC2NuDnR3Y2mqblRWkpkJqCqSkgl4P\nDx483O7dg+houHFDy6Jv3waZ+rAc58rg7g6eDcGzETRqBJUrF+/rkUHPnjBoEHz3ndlCUJQnRmRk\nJJ6enmaNYePGjYwbNw4rKyt0Oh3ff/89Tz/9NI6Ojjx48ICpU6eyZMkSXF1dcXFxoVu3bowaNYqo\nqCh69uzJyZMnAZg1axYPHjxg4sSJ9O3bl6ioKBo0aMDdu3eZOnUqfn5+6ec0io+PJzAwkGnTphEU\nFMSOHTsYP348e/fuzXL+9957j5YtWzJgwADWrl3LzJkz2bJlCzqdDgA3NzcOHTpEZTN+P1qS7N5b\nQoh4KWXZvI4VQlQAVgJvSilPFlGIOZdfAhPJH4EwKeWvabfPAH55NW2rRLJoTJ4MH3+s5V7Ftlzo\npUuwbRvs3Am7dmnJI2hJYIMGWod1Hx8tifPw0BI7e/uiicVg0OKJiIDISO3fEyfg+PGH7f01akCH\nDhAYCAEBUKdO0cSSjerVtWTShIGYiqLkwRISybw8ePAAR0dH4uPj6dixI3PmzKFZs2ZFXu6jiWRe\nVCKZ2eMkkmn7TgbipZSziiK+3JTEOuXVwBtCiKVAKyBW9Y80H70edLoiTiITE2HHDtiwAf76C06f\n1u6vVAnat4dRo7R/fXzAwaEIA8mGjY2WrHp4QMaO7YmJ2ojOAwdg3z4IC4OlS7XH3NwgKAh699aS\ny6JKctH+Nnp9kZ1eURQLM3r0aCIiIkhMTCQ4OLhYkkjQ+lzGxsbi6+ubaS7JRyUkJNCmTRv0ej1W\nVpY43rdkEEJUAfRSyrtCCHsgCJhhjlgsLpEUQvwK+AGVhRBXgClonUiRUv4ArEeb+ucc2vQ/L5on\nUgW0Srci6eKSmKgljr/9BmvWaM3KtrbQqROMHg1duoCnp1YLaYns7LRRLq1bw1tvgZRw5gxs3apt\nS5fC3Lla4tu1K/TpA337QoYRmIXBxqYEDoRSFKXAlixZYpZya9Wqle0UQI8yTkiuPLZqwIK0fpJW\nwG9SyrXmCMTiEkkp5aA8HpfA68UUjpIHY41koTAYtORx6VJYvRru3wdnZ62TX58+4OenjZwuiYSA\nhg217fXXtVHiYWGwapX2XFeu1BLl3r1h6FDo1g3KlHnsYlWNpKIoypNHSnkcaJrnjsXA4hJJpWQp\nlETy7Fn45RdYsACuXdOarAcOhAEDtOSx0DJVC2Jrq9VEdu0K334L+/fDkiVaEr18+cPXYPRorc9n\nAalEUlEURSlKFtouqJQUBW7aTk7WEqdOnaB+ffj8c2jeXKuZu35da/YNCnoyk8hHGSd7/OYb+Pdf\nWLdOSzDnzYOmTaFNG1i4UGvuzyfVtK0oiqIUJZVIKo8l3zWS0dHw2WfaSOohQ7TE6T//0SajXLNG\n6ydYGpLHnOh00KOHlmRfvQpffqlNbxQcrI3+HjcOrlzJ1+lUjaSiKIpSVFQiqTwWvd7EGskzZ2DM\nGKhVCz74ALy8YP16be7HiRO1eWqUzCpW1NbzPX1aG6ATEKAllu7uMGKENndmHmxsVCKpKIqiFB2V\nSCqPxWDIowLx5El44QVthPX8+Vot5IkTsGkTdO9uuaOuLYkQWhK5fLk22fprr2n/b9xYmyRy584c\nD9XpVNO2oiiKUnTUVVx5LDk2bR89Cs89pyU769bB+PHwzz9a30fvLPPMK6Zyc4Ovv9Zey2nTtEE6\nHTtC586wd2+W3VXTtqIoilKUVCKpPJYsg21On4Znn4VmzbTm2EmTtJVfPvsMXFzMFucTx9n54Wv7\n3/9qK+m0bav1rzz0cLVQNdhGUZT8unv3Lt89sq5q27ZtH/u8U6dOZdYs0xZeKYzysuPo6PjY54iK\nisLe3h7fDDNqbN26lWHDhqXfTkhIwNfXlzJlynD79u3HLtOSqURSeSzpNZL//qutMOPlBVu2wEcf\nQVSUVmtWqZK5w3xyOTjAO+/AhQswfbpWQ9miBfTrB3//rWokFUXJt+wSyT179hRrDMVdXn55eHhk\nmlg9PDycpk0fTutonHi9eino/68SSeWx6BP02Fz7B+rW1eaBfOstOH9eW4S7QgVzh1d6ODpq3Qcu\nXtSS+C1bwMsLm4hw9ImqSlJRniSffvop9evXp3379gwaNIhZs2YRFRWFd4ZuQ7NmzWLq1KkA9O3b\nl+bNm+Pl5cWcOXMArVbN09OTUaNG4eXlRZcuXUhISABgwoQJnD9/Hl9fX8aNGwdoNXk//PADvr6+\n+Pr64u7ujr+/f3p5ISEhtGzZEl9fX1555RVSUlKyxHrmzJkszyUuLo5nnnkGHx8fvL29WbZsWXp5\nRh9//DENGjTI9Hzzeg7ZPefc+Pv7s3nzZgA+/PBD3nzzTRP+Eg8ZE8mkpCRGjBjBBx98gLZ+Sikg\npSwVm4ODg1QKUUqKlD//LP11O2V7dkg5bJiUFy+aOyrF6Pp1KV95RT7Pb9LTKlLKmTOlTEw0d1SK\nUqJFRESYOwR56NAh6e3tLePi4mRsbKz08PCQM2fOlBcvXpReXl7p+82cOVNOmTJFSilldHS0lFLK\n+Ph46eXlJW/fvi0vXrwora2t5dGjR6WUUj7//PNy0aJFUkqZ5VxSSlm2bNn0/ycnJ8v27dvL1atX\nSym116Vnz54yOTlZSinlq6++KhcsWJBjrBmtWLFCjhw5Mv323bt3M5V34MAB6ePjIxMSEuS9e/dk\n3bp108+R23PI7jk/+jwy2r59u+zUqZMMCQmRPXr0kAaDIce/QXavj6+vrzx58qTs1KlTegxSSlm7\ndm1569atHM9llN17C4iTFpA/5bWplW2U/Nu/H958Ew4eRF/uGDqfOtqE2YrlcHWFH35Ad+Uu+tA4\nbf7JH36A2bO15RcVRXksb78Nhb1ktK8vfPVV7vvs3LmTfv364eDgAEDv3r3zPO8333zDypUrAbh8\n+TJnz56latWquLu7p/fza968OVFRUSbFOXbsWAICAujVqxeg9Q88fPgwLVq0ALT+gS4uLsTExOQZ\na+PGjXn33XcZP348PXv2pEOHDpke3717N3369MHOzg47O7v0Mo1yeg7ZPWdnZ+ccn1PHjh2RUvLF\nF18QFhaGtbU1AAsWLGDXrl2UKVOGChUq8Omnn2Y5Vq/Xc+HCBQYNGsSPP/5ImzZt8nwNnySqaVsx\n3fXr8OKL2iosV65ASAiGRk2wqehk7siUHNg4V8DgUgM2bgRra23Kpf79tQngFUV5YtjY2JCampp+\nOzFtJaywsDC2bNnC3r1705tfjY/Z2tqm729tbY3BhJF58+fP59KlS0yZMiX9PiklwcHBHDt2jGPH\njnHmzJn0ZvW81K9fnyNHjtC4cWM+/PBDpk2bZtJxRtk9h9yec05OnDjBtWvXKFOmDE5O2jVt9+7d\nREREMHfuXL799luio6OzbZ6PjIykRYsW2NjYpCegpYlKJJW8pabCjz9Cw4aweLHWF+/MGRgyBL1e\nlOqFaCxd+mCbLl20kd2ffqpNBO/pCTNnqpE4ilJAX30FYWGFu+VVGwlazdmff/5JQkIC9+/fZ82a\nNQC4urpy8+ZNoqOjSUpKYu3atQDExsZSsWJFHBwcOH36NPv27cuzDCcnJ+7fv5/l/sOHDzNr1ixC\nQkKwyjAHcGBgICtWrODmzZsAxMTEcOnSpRxjzejq1as4ODgwdOhQxo0bx5EjRzI93q5dO9asWUNi\nYiIPHjxIf165ye9zvnbtGkOGDGHVqlU4OjqyYcMGAH7++ecsfSWtspn7ODw8nLZt27J06VJefPFF\nbty4kWeMTxKVSCq5O30a/Py0VWmaNdMmGJ8+HdJ+seV7iUSlWGUatW1rq60qFBEBgYHw/vvaWt7Z\nzD+pKIplatasGQMHDsTHx4fu3bunNyfrdDomT55My5YtCQoKomHDhgB069YNg8GAp6cnEyZMoHXr\n1nmW4ezsTLt27fD29k4fbAMwe/ZsYmJi8Pf3x9fXl5EjRwLQqFEjPvnkE7p06UKTJk0ICgri2rVr\nOcaa0YkTJ9IH6Xz00Ud8+OGHmR5v0aIFvXv3pkmTJnTv3p3GjRtTvnz5XOPPz3OOj4/n2Wef5b//\n/S+enp5MmjSJjz76CNCarIUQAFy8eJFr165Rr169LOcIDw/H29ub+vXrM2PGDAYMGIC+FP1IF7KU\njCoqW7asjIuLM3cYJUdyspYwfvoplC2rzVU4YoS2ykoGXl5a5daKFeYJU8ndm29qy3ZHR2fz4Jo1\n8PrrWjeFt9+GTz7RphNSFCVbkZGReHp6mjuMTKZOnYqjoyPvvfeeuUMpMg8ePMDR0ZH4+Hg6duzI\nnDlzaNasWZGXe+rUKT799FPKlStHcnIy06dPx8XFhaioKHr27MlJE5apdXNz49ChQ1SuXDnX/bJ7\nbwkh4qWUZR/rSRQDVSOpZHXggFZTNWWKNh9hZKTWN/KRJBJUjaSly3UeyV69tBrmMWO0NbybNIHt\n24s1PkVRlLyMHj0aX19fmjVrxnPPPVcsSSSAl5cXS5YsYcyYMTg6OuKStqiGtbU1sbGxmSYkf5Rx\nQnK9Xp9tc/iTRNVIKg8lJ2u1Uv/5D1Srpo3yfeaZXA9xd4f27WHRomKKUcmX99+H//0P0qZWy1lo\nKIwcqU1s/tprmbovKIqiscQaSeXJoGoklZLv5EltNPbHH8OQIXDiRJ5JJGjL76kaScul05m4RKK/\nvzYY5+234fvvtXlILHxlCUVRFMX8VCJZ2qWkaKN3mzfX+sr98Ye2Qo2Jq9Kopm3LZkwkTWp4KFtW\na+LesUMbqd+hg7ZCUSnqNK4oiqLkj0okS7PLlyEgQGv/7NFDq5Xs1y9fpzAYwEZNa2+xjH+btNXK\nTNO+PYSHw7BhWg11u3bw999FEp+iKIpSsqlEsrRatUprvjx8GObN02oi0zoS54eqkbRsxr9NvisV\ny5WD+fNh+XI4d04bfDVnjolVm4qiKEppoRLJ0iYxUZsTpm9fqF0bjhzJdlofU+n1qkbSkhn/NgVu\nne7fX+sv27YtvPIKvPAC3LtXaPEpiqIo+SeEqCWECBVCRAghTgkhxporFpVIliZnzmgDambP1gZV\n7N0L9es/1inVYBvLZvzbmDTgJic10pZYnDEDfv9dm5j+6NFCiU9RFEUpEAPwrpSyEdAaeF0I0cgc\ngai6JAt3/34hjXX49VcYNw7s7GDJBujaFeLQtsegmrYtm/Fvc+vW457JCka+D407wcsvQ6vu2mT1\nL71U4NpsIxsbrSVdURRFMY2U8hpwLe3/94UQkUANIKK4Y1GJpAXbtQs6diysbmmDtC0BGFwY53vI\n3r5wz6cUHuPfJm21tELQCkhbzeH9tK0QLF+utaIriqIo+SOEcAOaAvvNUn5pmZC8Vq1aclEJmzU7\nJgYuXtTmBi9QP8SUFLh9W5to3KkcVMh9fdKCEAIqVlT9JC1Vaqq2PGKRfMzv34e7d7U/fuXKBaqa\nllKbdapmTXB1LYIYFaUQJSYmYmdnZ+4wlCdQdu8tf3//ZOBEhrvmSCnnZNxHCOEIbAc+lVL+UeSB\nZqPUJJIlcWWbBQu0cTAXLmgryOTLpk0waJDWOW7BAm1wjaIUtt274fnnITYWfv5ZG4yTDwkJ2vLe\nn30GEyYUUYyKUkjUyjZKUSnIyjZCCB2wFtgopfyiiEPMkRpsY8GMfSPzVdGTmqotc9itG1SvDocO\nqSRSKTrt2mlTSDVtqv1wee+9fI3sKfD0RIqiFJm7d+/y3XffZbqvbdu2ZjuPpYqKisLe3j7Tmttb\nt25l2LBhmfYzrrtdpkwZbt++XShlCyEE8DMQac4kElQiadGM12OTm43v3dOSxkmTYPBg2LcP6tUr\nsvgUBdD6XmzbBq+/Dv/9rzaQy8TRPdbW2r+PNapcUZRClV0CuKcAS6YW1nkKQkpJampqjrfzc2xu\nPDw8OHbsWPrt8PBwmjZtmmkfe3t7jh07RvXq1U06p4naAcOAACHEsbStR2EWYCqVSFqwfNVInj8P\nbdrA+vXwzTewaJG25J2iFIcyZbRppebN05q7n35aq6nMgxDaDyVVI6kopvv000+pX78+7du3Z9Cg\nQcyaNYuoqCi8vb3T95k1axZTp04FoG/fvjRv3hwvLy/mzNG62EVFReHp6cmoUaPw8vKiS5cuJCQk\nADBhwgTOnz+Pr68v48aNA8DR0ZEffvgBX19ffH19cXd3x9/fP7287MrI6TwAX3zxBd7e3nh7e/PV\nV1+lnye3uDIKCQmhZcuW+Pr68sorr5CSkkJUVBQNGjRg+PDheHt7s3Pnzky3L1++nGu5j+6b0cWL\nF+nTpw9PP/00LVu25MyZM9n+bYyJZFJSEiNGjOCDDz6gKLoQSil3SSmFlLKJlNI3bVtf6AWZQA2R\nsGAmJ5Lbtmn91EDrGxkQUKRxKUqORowAb2949lltqcV58/LsN6nTqURSKXne3vA2x64fy3vHfPCt\n6stX3b7KdZ/Dhw+zdOlSjh07hsFgoFmzZjRv3jzXY3755RcqVapEQkICLVq04LnnngPg7Nmz/Prr\nr8ydO5cBAwbw+++/M3ToUKZPn87Jkycz1bQBjBkzhjFjxqDX6wkICOCdd97JtYycznP48GHmzZvH\n/v37kVLSqlUrOnXqlF6Tl1NcRpGRkSxbtozdu3ej0+l47bXXWLx4MR07duTs2bMsWLCA1q1bExUV\nlem2KeUa981Ir9czcuRI5syZg4eHB+vXr2f69OlMmTIly2t9/PhxXFxc6Nq1KyNHjswU95NKJZIW\nzKSm7e++g7feggYNYPVq8PAoltgUJUfG2shnn9X6TUZGwpQpYJV9A4iNjWraVhRT7dy5k379+uHg\n4ABA79698zzmm2++YeXKlQBcvnyZs2fPUrVqVdzd3dP79zVv3pyoqCiTYhg7diwBAQH06tUrzzKy\ns2vXLvr160fZtFazZ599lp07d6YndHnFtXXrVg4fPkyLFi0ArQ+ii4sLHTt2pHbt2pkSwYy38yr3\n0WON/vzzT06dOpWegBsMBjp06JBlP71ez4ULFxg0aBA//vgjbdq0ye1lfGKoRNKC5VojqddrCeQP\nP0DPnrB4sZrVWbEcVarAli3asorTpsHp01rtZNrFLyNVI6mURHnVHBY3GxubTP36EhMTAQgLC2PL\nli3s3bsXBwcH/Pz80h+ztbVN39/a2jrbJuRHzZ8/n0uXLjF79uz0+3IroyDyiktKSXBwMJ999lmm\n+6OiotKTRKNHb+cmp33Dw8P59NNPefnll7OUl1FkZCQtWrQgJiYGa2MH8FJA9ZG0YMaLa5Yayeho\nCArSksjx4+HPP1USqVgeW1steZwxQ5tx3M8Prl7NspvqI6kopuvYsSN//vknCQkJ3L9/nzVr1gDg\n6urKzZs3iY6OJikpibVr1wIQGxtLxYoVcXBw4PTp0+zbty/PMpycnLh//36W+w8fPsysWbMICQnB\nKkMLQ05l5HSeDh068OeffxIfH09cXBwrV67MtoYvJ4GBgaxYsYKbN28CEBMTw6VLl/I8rqDlVqtW\njY0bN6Yn6idOnMi232N4eDht27Zl6dKlvPjii9y4ccPk51SSqUTSghkM2qjWTCvQnTunDarZtw9C\nQmD69IdDXxXF0ggB778PK1dCRAS0bAlHjmTaRadTTduKYqpmzZoxcOBAfHx86N69e3rzrk6nY/Lk\nybRs2ZKgoCAapi1n1a1bNwwGA56enkyYMCHbpttHOTs7065dO7y9vdMHyQDMnj2bmJgY/P398fX1\nZeTIkbmWkdN5mjVrxogRI2jZsiWtWrVi5MiRWUY656ZRo0Z88skndOnShSZNmhAUFMS1a9dMeu0K\nUu5LL71Eamoqnp6e+Pr6MmPGDEQ2S8OGh4fj7e1N/fr1mTFjBgMGDEBfCn4lqwnJLdj48doA7PRa\n/T17wNgfZvVqeILm41JKgfBw6NVLq1EPCYF+/QBtsv0OHWDhQjPHpyh5sMQJyadOnYqjoyPvvfee\nuUMpdaKioujZsycnT540aX83NzcOHTpE5cqVszxWkAnJLYXF1UgKIboJIc4IIc4JIbKsdSGEGCGE\nuJVh3qSR5oizOBgMGZq1f/tNG41dqZJWG6mSSKWk8fGBAwegcWN47jntVxJqsI2iKCWTtbU1sbGx\nmSYkz45xQnK9Xp+pS8CTwqIG2wghrIFvgSDgCnBQCLFaShnxyK7LpJRvFHuAxUyvB51OwuczterJ\ndu1g1SpwdjZ3aIpSMFWratNVDR4MY8fCpUvodLPQ67M2EymKkjfjXJFK8atVq1aW+SazY5yQ/Ell\naalxS+CclPKClDIZWAr0MXNMZqNPSkWXeF9LIgcO1EbBqiRSKekcHOD33+GNN+CLL9BdvYQ+McXc\nUSmKoigFYGmJZA0gY3p/Je2+Rz0nhDguhFghhKhVPKEVs/v3MazfiE3CfZgwAZYsATs7c0elKIXD\n2lpr2p45E5vYaAy790NMjLmjUhRFUfLJ0hJJU6wB3KSUTYDNwIKcdhRCjBZCHBJCHDKUpE5YN2+C\nvz/6f2+icy4Hn32W42TOilJiCQHvvYeurhv6u3Fa1w0TJ0RWFHMpLQNUleJj7veUEOLlR25bCyGy\nLtuTA0vLTv4FMtYw1ky7L52UMlpKmZR28ycgx7WhpJRzpJRPSymftsl1eRgLcvGidkGNiEDfsTM2\nFZzMHZGiFCkbV2f0vi3g+nVo3dqkNboVxRzs7OyIjo42+4VfeXJIKYmOjsbOvC2OgUKI9UKIakII\nL2AfYHLyYWnZ1UGgnhDCHS2BfAEYnHEHIUQ1KaVxwqjeQGTxhliEwsOhWzdISoKtWzF8VQNd6ZjP\nVCnFdDowOFaA3buhe3dt4vJVq9Sa8YrFqVmzJleuXOHWrVvmDkV5gtjZ2VGzZk2zlS+lHCyEGAic\nAOKAwVLK3aYeb1GJpJTSIIRNesDGAAAgAElEQVR4A9gIWAO/SClPCSGmAYeklKuBt4QQvQEDEAOM\nMFvAhWn7dm2OyHLlYOtWaNQI/cwclkdUlCeITgeJiUCjRtpcqV27agnlkiXaNEGKYiF0Oh3u7u7m\nDkNRCpUQoh4wFvgd8ASGCSGOSinjTTq+tFTRW/SE5H/8oU2HUqcObNwItbTW/d694cqVLAuBKMoT\npUcPuHULDh5MuyMmRls/fv9+bRnQUaPMGp+iKIo5FNeE5EKI08AbUsotQluy5x3gJSmllynHW1of\nydLnxx/h+eehaVPYuTM9iQTjPJJmjE1RioFO98ha25UqwebNWs3k6NHaYLNS8oNXURTFDFpKKbcA\nSM1/gX6mHqwSSXOREj7+GMaM0fpFZjNHpF6fYWUbRXlC2dg8kkgClC2r9ZMcPBg++ADefRdSU80S\nn6IoyhPOIISYJISYC+lN3fVNPVilKeYgpXZh/PJLGD4cfvop26pHg0HVSCpPPp0uhyUSdTpYtEj7\ngfXll9oa3Tl8VhRFUZQCmwccBtqk3f4XWA6sNeXgXBNJIUQlE86RKqW8a0phCpCSotVC/vQTvPWW\ndoHMYY5IvV5bBERRnmRZmrYzsrKCr7+GKlVg8mSt/+Rvv4G9fbHGqCiK8gTzkFIOFEIMApBSxqf1\nlTRJXjWSV9O23E5oDTxlaoGlml6v1UAuXQoffgjTpmmTMufAYFBN28qTz8YmhxpJIyFg0iSoXBle\nf10bnbN6NTipOVYVRVEKQbIQwh6QAEIIDyAp90MeyitNiZRSNs1tByHEUVMLK9USE2HAAFizBmbM\ngPffz/MQNdhGKQ1yrZHM6NVXtemxgoOhSxf46y+oUKHI41MURXnCTQE2ALWEEIuBduRjasW8Esk2\neTxu6j6l24MH0KcPbNsG332nXRBNoBJJpTQwOZEEGDJE6+8xcCD4+8OmTVqzt6IoSikjhPgF6Anc\nlFJ6F/Q8UsrNQogjQGu0FuixUsrbph6f66htKWViWrCfPPqYEMI64z5KDu7cgaAgCAuDhQtNTiJB\nNW0rpUOeTduP6tdPa9o+fVpbBefq1aIKTVEUxZLNB7oV9GAhRDPjBtQGrqF1Z3wq7T6TmDr9Tw1j\nJ8y0wl2ALfkJuFS6eVNb5u3wYVi+HIYNy9fhqkZSKQ3yVSNp1K2b1rR96RJ07Kj9qyiKUopIKXeg\nrfBXUP9N274F9gNzgLlp///W1JOYWt/1CrBRCHEerTPmPGB8fqItqQYOhAMHCnBgigGuJ4NhJbi4\nwLsO8G7+TnH5MrRvX4CyFaUE0ekgPh7yv/KcH5S7DRdugIeAanqwyf8vrzp1tBZya+t8H6ooilJi\nSSn9AYQQfwDNpJQn0m57A1NNPU+uSyQKIRYCR4CjwC1gCdoa1y9IKc8VNHhzqFWrlly0aFG+jzt6\nFMqU0eZHNllKKty7BzIVnMqBruDt05Urg6NjgQ9XFIuXkAA3bjzGCQwp2ucNoHy5fGWECQlaEtu0\naY6zcCmKopiFv79/MnAiw11zpJRzMu4jhHAD1j5OH0khxKlHl0PM7r4cj88jkQwAfNK2JkAd4CCw\nGzgppVxR0MCLW0HX2ra1hXfe0VZpM8mFC9oggHv3tGqOFi3yXaaiKPkUEQGdO0Nysva5a2Za956v\nv4a339bmOq9kyqy5iqIoxcSUtbYLKZH8FYgDQtLuGgI4SikH5XzUQ3kNttkmpfxSSjlCStkMqIy2\nmPc5oFVBgy5J8tVP8dw56NRJG6W9datKIhWluDRqBDt2aE0HAQGwf79Jhxk/2/nuo6koivLkeBE4\nBYxN2yLS7jNJvhpzpJQGKeUJKWWIlHJcvsIsgVJStNUMTRo5feaMlkQmJmrT/JhYI6IoSiGpWxd2\n7tSWVAwKgr178zzE+NlWiaSiKCVNWk3iXqCBEOKKEOLlgpxHSpmYVmnYL237Mj8z8uSaSKbNK5Qr\nU/YpqYxTkuRZIxkRoU1DYjBAaCj4+BR1aIqiZOepp2D7dnB11SYt3707192Nn+18TT+kKIpiAaSU\ng6SU1aSUOillTSnlzwU5jxCinRBisxDibyHEBeNm6vF51bV5CiGO51Y+UN7UwkoaYy1FronkyZMQ\nGKj11A8LA0/P4ghNUZSc1KypfRYDAqBrV22aoA4dst1VNW0riqLwM/B/wGEgJb8H55VINjThHPku\ntKQw1lLk2LQdHq518C9TRmvObtCg2GJTFCUXNWpoyaS/P3TvDuvWaV1PHmH8bKsaSUVRSrFYKeVf\nBT0410RSSnkJQAhRD5gIxEsp3yhoYSVNrjWSR45o/bAcHLTm7Lp1izU2RVHyUK3aw5rJHj1g7Vot\nscxA1UgqiqIQKoSYCfwBJBnvlFKa1HXR1ME2i4DlQEfQJqtMm2PyiZZjInnwoNac7eio9cdSSaSi\nWKaqVbUfeu7u8Mwz2mwKGahEUlEUhVbA08B/eLjazSxTDzY1kbRKq/ZMAZBSngQKPGdRSZFt0/a+\nfVpzdsWKWhJZp45ZYlMUxUSurlrXk7p1oWdP2Lw5/SHVtK0oSmknpfTPZgsw9XhTl1y5KoRwR1se\nESGEAOwLEG+JkqVGct8+bSSoi4tWy1GrltliUxQlH1xctGQyMBB69YJVq6BrV1UjqShKqSWEGCql\nDBFCvJPd41LKL0w5j6k1km+jLeRdVQjxIrAUOGnisSWW8eJiY4O24HbXrlrtxvbtKolUlJKmcmUt\nmfT0hD594K+/1DySiqKUZsZVc5xy2ExiUo2klDJKCNEN6Iu2XOJ24Jf8RFsSpc8j+c95eLWLdiEK\nDdVGhCqKUvI4O2v9JIOCoG9fdB+HAm1V07aiKKWOlPLHtH8/epzzmNq0jZTSAKxI20qF9KbtjyeB\nSyUtiaxZ07xBKYryeCpVgi1bICgI3f97H9ilaiQVRVEKKF9LJJY2hlNnoMZ+7ldO0ZLIp54q1vLj\nkuNYcmIJySnJxVpufpyPOc+U0Clcjr1s7lCUR9yOv80nOz7h2PVj5g4lR6kyleWnlhMdH128BVes\nCJs2Ed+wGtTejuHg0WIt/si1I3yx16TuR4UuVabyv/3/Y8/lPWYp3xTR8dHM2DWDC3dMXlxDKWa3\n4m7xyY5PuHr/qrlDydHJmyeZvms6+hTz/FKce3guYVFhZim7OKlEMifh4ehfGwtDnuHdkbu5WC61\n2EP469xfDPljCN0Xd+du4t1iL98Uy04tY9qOadT7Xz3e3/w+MQkx5g6p1EvQJzB913Q8vvFgUugk\nfjlqmb1QEvQJvLDiBQasGMCSE0uKvfxbtimMDj4FwQE8mPEfrZayGBz89yD+C/x5d9O7xX6BS05J\nZvjK4by14S3mHplbrGWbwpBq4LuD31Hvf/WYsHUCIcdDzB2SkoNVZ1YxKXQSDWY3YObumRZZ4bH4\n+GImbp1I32V9iUuOK/byJ26dSLeQbmw8t7HYyy5OBUokhRDVhBC2hR2MxThxAgID0ds5gS6Omyn/\n0ml+p2L/dZygTwBg28VttP25LRfvXCzW8k1hvBAO8BrArD2z8PjGgxm7ZqTHrhSfJEMSsw/MxuMb\nDyZunUin2p1wKuNktl/jubkVd4vAhYEsj1gOQIKheN8vN+NuErAwgHNxkWCVSkL1atC7tzYYpwgd\nvnqYLiFduJd0D9ASp+JyP+k+zyx5hsUnFmNjZWNx74sdl3bQfE5zXl//Ok2rNUUgLC5G5SFj4tii\negve3/I+Tb5vwqbzm8wcVWb6VD0CwYZzG+i8qHOxt3zoU/UkpSTRd1lftlwonh+qBSGEsBVCDBZC\nfCCEmGzcTD2+oDWSi4DTQgiTJ6wsMU6d0qYIsbPDMOsrsNbTtnIv4vRxdJrfifMx54stFONFZn6f\n+Vx7cI3WP7dm/5X9xVa+KYwf1IX9FhI+Jpz2T7VnwtYJeHzjwVf7viJeH2/uEJ94+hQ9cw7Pod7/\n6vHmX2/iUcmDsOAwVg9ajZOtE/pUy7oY/x39N21+bsPR60dZ8qxWE1mcCdXNuJsELgzkfMx5utXq\nD0DS229rc8L27KnNylAEjl47StCiICrYVWBsq7EAxfa3uRV3C/8F/oRFhbGg7wLqVqprMe+L6Pho\nXlr1Ep3mdyI2MZYVz69gy7At6Kx1FhOjkpUxyV8xYAXrBq8jRabQNaQr/Zb149LdS2aOTqNP0eNk\n68SK51dw9NpR2s9rzz+x/xRr+SN8R1CvUj16/9qbbReL9ofqY1gF9AEMQFyGzSQFSiSllJ2BOsC8\nghxvsSIjteXUbGwgNJTkKtXBKgXP8s3YNnwbCfoEOs3vxNnos8USjvFLNMgjiL0v76Wsrix+C/z4\nPeL3YinfFPoUPTprbTK+xq6NWTNoDTtG7KBh5Yb838b/w/1rdz7f/Tn3k+6bOdInT6IhkZ+O/ESD\n2Q14Ze0rVHeqzqahm9gxYged3LR1pXVWlnUx3nlpJ21+bsO9pHuEBocy0HsgQLHVPN2Mu0nAggDO\nx5xn7eC1dKjRGYBEWzttNLebm7YCzs6dhVpu+PVwOi/qjJOtE6HBoXhU9ACK53lfunuJ9vPaE3Er\nglUvrGK4z3CLqJGUUhJyPISG3zZk0fFFTGg3gYjXI3iu0XMIIbT3rqqRtFjG7xWdlY4e9Xpw8tWT\n/CfgP2w6vwmv77z4et/XpKSmmD1GnZWOfp792DRsE9fuX6Ptz205ebN4Zi/Up+qpWrYqW4dvpU7F\nOvT6tRfbo4rmh+pjqimlHCil/FxK+V/jZurBuSaSQohKOW1AReCaEKLC4z4Di3DmjJZEWllpA2vq\n1SMpbU4QnbUNPlV9CA0OJSklCb8Ffvwd/XeRh2T8ErWxsqFh5YbsH7kf36q+9F/en5m7ZyKlLPIY\n8mJINaCzyryGZIfaHdgWvI2dL+7Et6ov47eMx+1rN6Ztn8atuFtmivTJcTfxLtN3Tcf9a3dGrRmF\ns4Mz6wavY+/LewnyCEJbL0Cjs9YVa21fbhYfX0znRZ2p4lCFfSP30bpma6yEldaEWQzJrjGJvHDn\nAmsHryXAPYAyaRNJJhsMD1fAqVVLW5t79+5CKffkzZN0XtQZB50DocGhuFVww8ZKK7eon/epm6do\n+0tbbsbdZPOwzfSo1wPQLv7mfF+cizlHl5AuDFs5jLqV6nJk9BE+6/wZDjqH9H1srGws5r2rZGX8\n2xjfy7Y2tkzsMJGI1yLoWLsjb298m3a/tOPUzVNmjdFY0dGxdkd2vriTVJlKh3kd2PXPriItW0qZ\nXn6VslXYOnwrtcvX5pklzxR52QWwRwjRuKAH51UjeRU4BBzOZTte0MItxt9/g78/pKZqF5IGDQBI\nTNa+5G1tHta4hQaHok/R4zffjzO3zxRpWMYPqjFRq1K2CtuGb+P5Rs/z/pb3GbN2jNl/setTH9ZI\nPqr9U+3ZOHQj+17eR9tabZkSNoVaX9Zi5OqRnLhxopgjLfku3b3Ee5veo9aXtZi4dSJNXJuwZdgW\nDow8QI96PTIlkEaWUPOUKlOZuGUiQ1cOpU3NNux5eQ91Kj5cWrQ4kt2MSeS6wesIcNdW/7JNW9om\nyZD2GlWtqn0HVK8O3btrq1k9hohbEQQsCKCMdRlCg0PTn7fxM1OUz3vv5b10mNcBKSU7Ruyg3VPt\n0h8zV7NxSmoKs/bMovH3jTnw7wG+7fEtu1/aTWPXrNcw1bRt2YzfK49+/9euUJt1g9ex+NnFnL9z\nnqY/NmVK6BSSDEnFH2NajaRRY9fG7Hl5Dy5lXQhaFMTqM6uLrOwUqdXGGst3dXRlW/A2aparSffF\n3dl7eW+RlV0A7YHDQogzQojjQogTQgiTc7u8EslIKWUdKaV7ThtQzPN2FLJz57Qk0mB4uOpFGmMi\nWUb38I3o7eJNaHAoKTIFvwV+nL59ushCS286yPBBtdfZs7T/Uia2n8icI3PoGtKV2/G3iyyGvOhT\n9Om/SHPSqmYr1gxaQ8RrEYzwHcGSE0to8kOT9A+yqnXIWUpqCuvPrqfXr71w/9qdr/Z9Re8GvTn6\nylE2Dt1IYJ3AbBNII3M3bd9Puk+/Zf2Yvns6o5uNZtOwTVSyr5Rpn6Juwrx2/xp+8/3Sk0h/d//0\nx+zKpCWSGSeSrFZN+y5wddVWszpwoEDlnr59moAFAdhY2RAaHErdSnXTHzNeXIrqeRsHFzg7OGeb\nqJnjB8bZ6LN0mt+JcZvH0dWjK5GvR/Jai9ewEtlfhlTTtmUzfq9YC+ssjwkhGNx4MJGvRzLQeyDT\ndkyj2ZxmHL56uHhjzOb65FbBjd0v7aaJaxP6LevHz0d+LrKyIfP1u6pjVbYFb6OaYzW6hnS1pDEP\n3YF6QBegF9Az7V+T5JVItjHhHKbsY5nOn9eSyORkrX+Ul1emh41N28YaSSMvFy9Cg0ORUuI334/I\nW5FFEl7Gpu2MrIQV/wn8Dwv6LmDP5T20mNvCbDV82TVt58Sziic/9PyBy/93mc8CPyPyViR9lvbR\nati2TCy2vqclwdX7V5m+azp1/1eXZ5Y8w8F/D/JBhw+4MPYCi59djG9VX5POY86m7Yt3LtL2l7as\n+3sd/+v+P37o+QNlrMtk2c/GyqbIkt0r967QaX4n/on9h7+G/JUpiQQyN21nVKOG1sWlcmXo0gUO\nHcpXuX9H/03AAq3Wc1vwNuo718/0eFE2bS85sYRev/aigXMDdr24C/eK7ln2Kc6mbeO8lT4/+HDq\n1ikW9VvEyoErqe5UPdfjbKxsMEj1I9NSGb/7c/shW9mhMov6LWL94PXEJsbS+ufWTNs+rdjeexmb\nth+Na9vwbQTVCWLkmpF8uffLIikbsl6/qztVZ1vwNqqUrULXkK4cupq/75aiIKW8BFRASx57ARXS\n7jNJromklDIRQAjxyaOPCaH9DDHuU+JcvKglkfHx2vxxjbM2raTXSNpkrXFrVKURYSPCEELgt8Cv\nSPqBPNq0/ajhPsPZPmI7SYYk2vzchj8i/yj0GPKSW9N2TpwdnJnQfgIXx17kz4F/0qJ6C2bumUn9\n2fXpNL8Tvxz9pVTOR3kv6R4Lji0gaFEQNb+oycStE3Gv4M6y/sv45//+4ZOAT3iqfP4mxTdXrc72\nqO20mNuCK/eusGHoBt5o+UaOF5yiSnYv3b1Ep/mduP7gOhuHbkwfgJSRsUYy2ZDNa1SzppZMVqqk\nLal45IhJ5Z6LOYf/An8MqQa2BW+jYeWGWfYpqqbtb/Z/w5A/htCuVjtCg0NxdXTNdr/iajaOuhtF\n54WdeWvDW/i5+XHy1ZMMbTI01+QjU4yqRtJimdIaZdS9XndOvHqCAV4DmBI2hXa/tCvyrmGQtWk7\no7JlyrJ60Gqe83yOdza9w0dhHxXquIOMg5EeVbNcTUKDQ6loX5GgRUEcuWbad0tREUKMBRYDLmlb\niBDiTVOPN3XUdg0hxKAMhboAljspUl6iorQk8sEDrSbSxyfb3YzNXY/WSBo1rNyQsOAwrIU1/gv8\nC30kmHFqHWurrE0HRq1qtuLQ6EN4uXjx3G/PMTVsKqmy+CZPN6QaTP4yeZTOWkefhn1YPWg1//zf\nP3wW+BlX71/l5dUv4zrLle6LuzPv6DzuJNwp5Kgtx72ke/x26jdeWPECVWdVZcSqEVy4c4FJHSdx\n5o0zbAvexgCvAdnW5JmiKGv7cjL38Fw6L+pMZYfKHBh5gM51Oue6f1EkuxfvXKTT/E5Ex0ezedjm\nTP0DM7J7tI/ko556Sksmy5eHzp3hWO6rBF24cwH/Bf4kpySzLXgbjao0yna/wm7allLy8faPGbth\nLH0b9mXD0A2Utyuf4/7F0bT964lf8fnBh0NXD/FTr59YN3gdNcrVMPl4c3fLUHKX30qEivYVWfzs\nYpb1X8a5mHM0/bEpsw/MLtLrVV7JbhnrMiztv5QRviOYun0q7256t9CSyZz6kBo9Vf4pQoNDKWdb\njqBFQYRfDy+UcgvoZaCVlHKylHIy0BoYZerBpiaSrwCjhRAthRAtgG1AyZxD8p9/tNHZsbFaTaRv\nzk2ExouLnS7nD0uDyg0IGxGGzlqH/wL/Qm1iNvUXX3Wn6mwfsZ3hPsP5aPtH9P+tPw+SHxRaHLnJ\n7RdfflR3qs6E9hP4+42/OTTqEO+0fofTt0/z0uqXcJnlQueFnZm1Zxanbp6yiNHqj+PS3Ut8f/B7\nuoV0o/LnlRm4YiBbL27lpaYvsfflvZx78xwf+X+UpTm0IIqzVifJkMQra15h9NrRBLoHsm/kPuo5\n18vzuMJOds/FnKPj/I7cS7rH1uFbaVWzVY772hqbtnN7jWrX1pJJR0ctmTyefR/0qLtR+C/wJ14f\nz5ZhW/B28c7xlIXZtC2lZMKWCUwOm8xwn+Esf345djZ2uR5TlEnag+QHvLjqRQb/MRivKl4cf/U4\nLzd72aRayIzUqG3Llp9uTRkN8BrAiVdP4Ofmx5t/vUnPJT2LbDYPU5JdGysbfu79M2+2fJMv933J\n6DWjC2XaIuPnK7druFsFN0KDQ3HQORC4MNCcg1AFkPFJp6TdZ5K8pv9ZKIR4G60f5OvAHOB7oK+U\ncl3+Y82bEKJb2sihc0KICdk8biuEWJb2+H4hhJvJJ79yRauJjImBzZuhWbNcdzf2myqjyz2Zq+9c\nn7DgMGytbfFf4F9o1dT5+cVnZ2PH/D7z+aLLF6w6s4rWP7UunqaDlPw3bedGCEHz6s2ZETSDC29d\n4OCog7zT+h2uP7jOuM3j8P7eG7ev3Ri1ehQLwxdy4c4Fi08sbzy4wdKTSxm9ZjQe33jg9rUbr61/\njQt3LjC21Vh2vriT6+9eZ3aP2bSu2TrfF9zcFFdfuH9i/6HDvA7MOTKHie0nsm7wOirYmTYzWGE2\ns56+fZqO8zqSaEgkNDiU5tWb57p/mbTWBv2jfSQf5e6uJZP29tqCBScyf+FfunsJ/wX+3E+6z5Zh\nW/Cpmn0rh5HxM/O4SX6qTOWtv97i8z2fM6b5GOb1mWfSj8+i6k5w+Ophmv3YjIXhC5nUcRI7XtyB\nWwW3Ap1LNW1btvw0bT+qulN11g1ex+zus9l2cRs+P/gQejG0kCM0Pdm1ElZ83e1rPuzwIT8d/Ykh\nfwx57CUf8+qaZlSnYh1Cg0OxtbElcGFgvrrJ5ZUv5cM8YL8QYqoQYiqwDzB5FFJe74L5gA/wItAE\ncAMOAkOFECellCsKEHCO0vpdfgsEAVeAg0KI1VLKiAy7vQzckVLWFUK8AMwABuZ5cim1JPL2bS2J\nfPrpPA9JNqFG0qiecz22j9hOwMIAAhYE8NeQv2hT6/HGIeX3F58Qgv9r8380dm3MoN8H0WJuC37p\n8wv9G/V/rDjyirGgXyZ5EULwdPWnebr608wImsHl2MtsOLeBv879xe+Rv/PT0Z8A7UupXa12NK/W\nHJ+qPvhW9aWqY9UiiSkvMQkxnLx5kgP/HkjfLsVqfZbL25bHz82Psa3GElQniIaVGxZq0pid4mja\n3nJhCy+seAF9qp6VA1fSt2HffB1fWMnuqZunCFwYCEBYcBheLl55HPHwSz7XGkkjDw8tmezUSUsm\nw8KgUSMux14mYGEAdxLusHX4VppWa2pyuY/zvFNSUxi1ZhTzjs3jndbvMKvLLJPfT4XdnSBVpvLF\n3i/4YOsHuDq6EhocSsfaHR/rnKpp27IVpH98RkIIXm/5Ou2fas/AFQMJXBjIpI6TmNRpUqFdU/KT\n7Aoh+DjgY5xsnRi/ZTwPkh+w/Pnl2OvsC1w25Ny0nVHdSnUJDQ7Fb74fAQsDCAsOw7OKZ67HmJgv\nmURK+YUQIgxtGiCAF6WUR009PtdXWEq5Da0Z2xi4DeCJlly2Ago1kQRaAueklBfSyluKtmxPxhem\nDzA17f8rgNlCCCHzqpZKTIQbN2DTJmjZ0qRgTGnazsijkgc7X9xJ4MJAghYFsWbQmiyjRPOjoLV9\nnet05sjoIzy//HmeX/48b7d6m8+DPi/UmsP0GAupadsUtcrXYlTzUYxqPopUmUrErQh2/bOLXf/s\nYvfl3enrNgO4lnXFs4onHhU9tK2SB+4V3HF1dMWlrEueTX85SUlN4fqD61y5d4XL9y5zOfYy52LO\nEXk7kohbEdyIu5G+r1sFN1rVbMUbLd+gY+2ONKvWrMiS7pwUZa2OlJIZu2fw/7b9Pzwre/LHwD8K\n1BxfGDEaV47RWelyHOCSHePfw6REEqBuXS2Z9PODgAD+Xb+MgN0juR1/m83DNudZA2qUXiNZwERJ\nn6Jn+J/DWXpyKZM7Tmaq39R8/SgpzB8Yt+NvM2zlMDac28Czns8yt9fcLFM8FYRq2rZsBW3afpRP\nVR8OjT7Em3+9ybQd0wiNCmXJc0uoWa7mY59bn6rP93f9++3ep5xtOV5b9xrdF3dnzaA1ONk6Fahs\nyLtG0qi+c322BW/LlEzmwZR8KVdCiHJSyntpi8xEpW3GxypJKU0a9Zqvq5qU0gCcSNtC8nOsiWoA\nlzPcvoKWsGa7j5TSIISIBZyBXCdTTJQ6+je/CLOcTQ7m6A0DdH44abEpnir/FDtG7KDzos70WNKD\nPwb8Qfd63U0+PiN9asGbDmqVr8WOF3fw3qb3+Gr/Vxy8epBl/Zflq7O7STEWctO2qayEFd4u3ni7\neDPm6TEA3Em4w/Ebxzl2/RjHbhzjzO0zrPl7DTfjbmY5vpxtOao4VMHJ1gl7G3scdA446BywElak\nyBRSUlNIkSkkGZKITYrlbuJd7ibeJTYxFonMcq5GVRrxTL1n8KziiVcVL56u/jRVylYpltciN0XV\ntH0n4Q4vrX6JP0//yUCvgfzU+yccyzgW6FyPm9QcuXaEoEVBOOgc2DZ8m0n9Mo2M7939Bw30N7ni\nvj40Pk3CoT/ZMX8IieXv0T5qE5+PNe0HKkC0gw14FKxpO8mQxMAVA1l1ZhXTA6czvv34fJ+jsJq2\nD/x7gP6/9edG3A2+6/EdY54eU2i17CWlaTtBn8CVe1e4EXeDGw9ucDPuJrfib/Eg+QEJ+gTi9fEk\nGBJIkSlYC2usrayxFiEkDbMAACAASURBVNaUsS5DBbsK6VtFu4pUc6pGzXI1qVmuZoF/7BaXx7k+\nPcqxjCPz+swj0D2QMWvH4PODDyH9Qgp87TQqaLI75ukxlLMtx/CVw+m8qDMbh240uatOxrIBvvrC\nhuX3TD2qIU1st7HD3Y9O3zyf186m5Et5WYI2Z+RhyHRhE2m362R30KNEbhV5QogjUspcOxKaso+p\nhBD9gW5SypFpt4ehjSR6I8M+J9P2uZJ2+3zaPlkSSSHEaGA0QLXq1Zp/MGk+Vqmmj35NtY4jqdxp\n6lWqRznbcvl6LoZUA2djzpKgT6BOxTr5fhMCXIq9xL2kezR2KfDKRQDcSbxD1N0orIQVdSrWwalM\n/n9d5eTv6L+RSBo4Nyi0cxa2VJlKUkoSySnJ6FP0GFIN6FO1f1NSU5BIUmUqqTIVKWX6hVAgEEJg\nLayxsbJJvwDorHWUsS6TvmU3Ia+luHDnAgmGBLyq5N3Ma6o4fRwX7lxAn6KnZrmauJR1eazznb59\nGmsra+pVMj0BTI8lOY6zMWextrKmgXODfI9uTzAkEHErgjIPPLDWm/4ZlcJAktMZpFUyttG1sRIV\nwcr0BCqZeFIqRuJRsS4Vchld/ahUmcr5O+e5l3SPp8o/RRWHgv1YuRR7idjEWJq4NinQ8QC34m9x\nOfYyOmsdHhU9Mi1vWBgs7bvFkGogXh9PvD6epJQkEg2JJBmScvwRJITACiushLYJIdL7c0uktoSe\nNOTYx9vGygZba1vsdHbY29hjZ6P9W9AZHApbUXy3ACSlJHE+5jwJhgSqO1WnmmO1Ap8r8nYkOitd\npsUA8iM2MZbzd85jr7OnvnP9fH3Xx+vjibwdidXduthK0z/jSEhNicXeKpmRbw5IRqu4M5ojpZwD\npuVLxSWvRDIByG2WaAGUl1Lmb3K7nMtrA0yVUnZNuz0RQEr5WYZ9Nqbtszetqf06UCWvpm1RRsin\nPn+K7SO2m9z5e8elHXSa34ktw7YQWCcw38/nbuJdeizuwYF/D7Cg7wKGNBmSr+OHrRzGnst7OP/W\n+XyX/aiIWxH0/60/p2+fZkL7CXzk91Gh1CS2+6Ud9jb2bBlecmeDepINWzmM3f/s5sLYC499rlSZ\nyue7P+fDbR/yVPmnWNp/KS1rmF4Ll5OCvoc2n99M32V9qVmuJpuHbc73HJugfS68vvNi6XNLGeid\nd1dr0JZb9F/gT9TdKP5q8y0dB4wDW1vYvl3rR2mCsZ8d45vkpiztt5KBTUzrU3o/6T49f+3Jzks7\n+an3T7zU9CWTjsvOa+teY3nEcm6Ny/9o2bjkOEavHc2SE0voXrc7Ic+GFEpT9qO6hXTjTuId9o8s\n/tU/4vXx7L+yn13/7GLPlT0cvXY0U7eVqo5V07vMeFT0wK2CG1Udq+JS1gXXsq5Udqhs8vdroiGR\n2MRYYhJiuHr/auZuM3fOEXErgusPrqfv72zvTMsaLWlRvQUta7Skba22VLSvWOivQV76Lu1L1N0o\njo3JfUqsgojXx/PquldZGL6QHvV6sKjfogK9xxp/35i6leqycuDKAsey/ux6nl32LA0rN2TzsM0m\ntzTtu7KPNj+3oc/99fw5y8Sa1du3tVllzp2Dv/5C+P3/9u47PKpqe/j4d4UE0KBiRQSkKCgoioBI\nEwKEKlIEpIkIChYsV1+9FqzXn/XaUK4FESlKU3oHKQoqSBFEOgJSROktISQh6/1jz4QAKZNJpiRZ\nn+eZJ5mZc+bs5ORM1qxdVky8qkant6kv8ZKvRGSuqjbJ6rGMZJWXTm+gUREgBfB+DMv5PPlTlgIV\nRaQ8sAvoAnQ7Y5vJQE/gZ6AjMC/L8ZG4Wc1HThyh0bBGfH/P9z7900mddeVnwFW8aHFm95hNm1Ft\n6DGhB/FJ8fSp4fPSTDmaFXemKpdWYWmfpTw28zHeWPQG87bOY2SHkafVPPZH0smkbGdrTfDkVtf2\nP8f+4e6JdzP7j9l0qtKJz2//PNN1CrPDn67tCesm0GVcFypfUplZd83KcOFtX44Nvk962Re/j9jh\nsWw9uJXp3afToFwMzKvhJvI1auQm4FTI+poqHBkJiaeKHmTl4PGDtPi6Bcv/Ws7IDiPpcn0Xn/bL\niL9/Fxv2baDD2A6s3buWVxu9ynO3PpdhicOcCmbXdnJKMj/v+JmZm2cyd+tclu9eTnJKMoJw/WXX\n07JiS24s4Sby3VDihlwNnItGFqVosaKUKFYiwwkWB48fZP2+9azeszp1Et+sP2aRoilESATVS1an\ncbnGNKnQhPpX1s/17HB6crNr+0znRp3L0LZDqV2qNo/NfIyag2oyvvN4nyt6eeXGOM5WFVsxuetk\n2o5uS6NhjZh791yf3m9S44d0Cpqka/9+t7zYpk0wdaqb1Jc5X+KlTIlIUeBc4BIRuZBTS/6cj+s6\n90lWk21OK5EjIq/ixiMKcDnQJ70uZX95xjw+DMwCCgFDVHWNiPwHWKaqk3FT0keIyGbgAO6Xl6UI\niWBOjznEDo9NDSazGsybOusqB3+IxQoXY1q3aXT8piN9p/YlLimOf9X+l0/75tZgZq/owtEMbjOY\nZlc1o++UvlT7tBqftv6UblWz9bd3VhuDPYHE+C43JlV8t+U77hp/F4dPHOaz1p/Rp3qfXF+iKD4p\n3uftR6waQa9Jvbi51M1M7zY9R9mY1IXBffgdHTh+gNjhsWw6sImpXacSUy7GPVG1qits0LixCya/\n/x7Klcv0tbzjrn0JJL3HXbN3DePuHEfba9tmuU9W/AnSpm2cRrfx3ShcqDCze8zOcqH5nAr0igMH\njh9g0vpJTN88nTl/zOHwicMUkkLULl2bp+o+Rf0r61OndJ2QZPvOdOE5F1KnTB3qlKlD3xp9Abde\n57K/lrFg2wLmbZ3H+4vf5+2f3qZoZFFiK8TS7pp2tK7U2u8PWVkJ9Ph4EeHBmx/kppI30XFsR+p8\nUYfPWn/G3TfeHfQ2NruqGdO6TeP2UbcTMyyGuXfPzbLEp/f6KuzL8Q8ccNWz1q+HyZPdqhBZyChe\nyvpgp7kf+BdwBW6cpPeN/Qgw0NcXyW4EUFxVHwLwrN/4logcVVXfIiMfqOp0YPoZj72Y5vsEIMtR\nqOmpeUVNZveYTdMRTVODycz+GHxZUNQX50Sdw4TOE+g6riuPz3qcuMQ4+jfon+V+OV1eISN3Xncn\nt5S6hW7ju9F9fHdm/TGLgS0H+j0zLViztk325WSZl+NJx+k/rz/vL36fypdUZk6POVQtkbPxuumJ\nKhRF8gnfsmMfL/2YftP70bh8YyZ1meT3BJ+0x4asJ70cPH6QpiOasn7feiZ3nXz2UJcbb3TLijVp\nciozWbZshq/nrZaVYUUdj/3x+4kdEcu6veuY1GUSLa5ukfUP5YPsBGne2fnPzX2OapdXY2KXiX4N\nI8iuQEwUO3j8IBPXT+Sbtd8wZ8scklOSKXVeKTpW6UjLq1sSWyE21zLtgVascDFiysUQUy6Gl2Ne\nJi4xjoXbFzJj0wwmbZjE1I1TEYQ6ZerQ9fqudL6uc65OAMztREdGapeuzYr7V9D52870nNiTZX8t\n473m7/n0fzk3s6aNyzdmZveZtBrZioZDGzLv7nmUuaBMhtsn+hpIHjoEzZrBmjUwaZL73kfpxUvZ\noaoDgAEi8oiqfuTv62S3T6JImgZsAxJxC1nmGbVK1WJm95n8fexvGg1rxO6juzPcNjvrQGWlcKHC\njOk4hrtuuIvn5z/PU7OfynIh7dzs2j5T2eJl+f6e73mxwYt89dtXVPusGj/8+UO2XydUs7aNb/yd\nnbti9wpqfl6T9xe/T7+b+7G0z9KABJHge1Dz5qI36Te9H22uacO0btNyHER6jw2ZZyQPJRyi2VfN\n+H3P74zvPJ5mV2XwRl+9uquWdfCgy07u2JH+dni6toHEpIzPzb74fTQZ3iTXg0jwPUiLT4qn+/ju\nPDv3We687k4W9V4UlCAScq9rO+lkEhPXT+T2UbdT4p0S9J7cm3X71vFE7SdY2mcpOx7fweA2g+lQ\npUOeCSLTE104mhZXt2BAywFsfWwrK+9fycsxL3Ms8RiPzHiEku+W5LaRtzFq9ahs9QBkJJBd22e6\nLPoy5vSYwxO1n+CjXz6i5dctfSqdm9vB7q1lb2XWXbPYE7eHhkMbsu3Qtgy39ZZYzrRr+/BhFzj+\n9huMHw8tcu8azw5V/UhErheRO0Xkbu/N1/2zG0guEpE3ROQKEbkCOF9VQ1og0h91ytRhRvcZ7Dqy\niybDm/DPsX/S3c7Xlel9FRkRybB2w3io5kO88/M79J7cO9M380Bn+yIjInml0St8f8/3AMQMjeHx\nmY9zPOm4z69hXdvhLbvdg8kpyfzfD//HLYNv4XDCYWbdNYuBrQYSXTjd8d65Iqusqary7HfP8uzc\nZ+lWtRvfdvo215ZGyWph8CMnjtDiqxas+nsV33b6llYVW2X+gjVquMzkvn0uM7lrV7qbeTOSCUnp\n/9x74/bSeFhjNuzfwOSuk2l+dXMffyLfRBWKSl2pICM7Du/g1i9vZfTvo3m98euM6jAqKGPvvHLa\ntb1h3wb+PefflHm/DO3HtGf5X8t57JbHWNpnKVse3cJbTd+i5hU1A14UIBREhBsvv5EXG77IqgdW\nsfrB1TxV9ylW/7OabuO7UeKdEjw49UF++yf9cp++CHYSITIiknebv8uQNkP4ftv33DL4FtbvW5/p\nPkknc/9/aN0ydZnTYw4HEw7ScGhDthxMfyJjgudDYoYZySNHXOC4ciWMGwe33Zar7cwOEXkJ+Mhz\nawS8DbTxdf9sBZKqOhyYArwKvAG8lp39w0n9K+szvft0/jz8J02GN0l3rcHc6tpOK0IiGNhqIC83\nfJmhK4fSYWyHDAO35JTkoFyo9a+sz6oHVvFgzQf5YMkHVPusGot3LvZpX+vaDm/Z6dresG8D9YfU\n54X5L6TWw80w+5aLMsuankw5ycPTH+bNH9+kb/W+DG83PFevicy6to+eOErLr1uyfPdyxnYay+3X\n3O7bi958M8yaBXv2uGDyr7/O2qRo4Yy7tvfE7aHx8MZsOrCJKV2nBOQcpGZiM/jb+HH7j9T8vCab\n9m9ictfJPHvrs0EPuPzp2j6ZcpKJ6ycSMzSGa/93Le8vfp86ZeowpesUtj++nf82+2++DR4zc/1l\n1/NG7Bts+9c2FvRcQIfKHRi6aig3fnoj9YbU46vfviIhOSFbrxmsru0z9bqpF/N7zudQwiFqD67N\nrM2zMtw2UFnTWqVqMffuuRxLPEaDLxuwaf/Zi9t4M5LprkN99Ci0bAnLlsHYsXC7j+8tgdMRaAL8\nraq9cEVnfE7P+xRIisgA8Vx5qvqTqt6rqj39KcUTThqUbcDUrlPZcnALscNj2Rd/+ryh3OzaTktE\neCnmJQa2HMiUDVNo8XULDiccPmu7QHZtn6lY4WL877b/MafHHBKSE6g3pB7PfPdMlm8ugfjEZ3KP\nL13biScTee2H17jh0xvYuH8jYzqO4es7vg7aJIOMMk8nkk/QdVxXPl72MU/VfYpPW39KoYjcXbMz\no67tY4nHaDWyFUt2LmF0h9HZLvtI7dowcybs3u26uXefPoTGWy0r8Ywa3/8c+4dGwxrxx4E/mNZt\nWsAmtGQ2yWjYymE0GtaI84ucz5L7ltC6UuuAtCEr2fkQdOTEEQYsHkClgZVoP6Y92w5t480mb7Lj\n8R1M6DyB1pVaW88JLpHRsFxDhrYbyq4ndvFus3fZG7eXHhN6cOX7V/Lq96+yP36/T68VzK7tM9W7\nsh5L+yylXPFytBrZig8Wf5DuULFAZk2rl6zO/J7zOXHyBA2HNmTDvg2nPe/tbfD2PqQ6dgxatYIl\nS2D0aGiXzfeWwDiuqilAsoicD+wBMh4AegZfM5JHgckiEg0gIs1E5MdsNzUMNSrfiMldJ7PpwCZi\nh8dy4PipikC53bV9pn61+jGyw0h+3vEzMcNizupiD0W2L7ZCLKsfXE2var1468e3uOGTG5i3dV6G\n21vXdniLjIhEUU6mpL9K19JdS6k5qCbPz3+edte2Y12/ddx53Z1BbWN6AcORE0doNbIV36z9hv82\n/S9vN307IFmk9Lq24xLjaD2yNT/t+ImRHUbSoUoH/168bl2YMQN27nSTcP45dX0XjvKMkUyTkfSO\n2952aBvTu0+ncfnG/h3XB95/rml/blXlxfkvcs+ke7i17K38ct8vWdb7DSRfurb/PvY3T81+itLv\nleZfs/5FyWIl+abTN2x+dDNP13+ay4tdHqTW5j0XnXMRT9R5gvUPr2dOjznUKlWLFxe8yJUfXMlj\nMx7jz0N/Zrp/qMfHly1elkW9F9H2mrY8Putx+kzpQ+LJxNO2CXTW9IYSN7Cg5wJO6klihsWcFkx6\nxz8XTjtGMi4OWreGn3+GkSOhg5/vLblvmYgUBz7Hzd5egVti0Sc+BZKq+jwwCljgCSD/H/BM9tsa\nnmIrxDKx80TW7VtH0xFNUwfxptbKDODF0uX6LkztNpWN+zdSb0i908ZbBKtr+0znFzmfwW0GM/uu\n2aRoCk2GN6HnxJ5nZWwhcDPLTe7IKPMUlxjHE7OeoPYXtdl/fD+TukxiTMcxAVsqJKs2pg1o/j72\nNw2HNuSHP39geLvhPFn3yYAd+8wu3uNJx2kzug0Lty9kRPsROQ+q69eH6dPhzz9dMLnHDaHxZiS9\nXdu7j+6m0bBG/Hn4T6Z3m35qaaEASf278PzcCckJ3DXhLl794VV6V+vNjO4zQr7sTWbZ9F1HdvHY\njMcoP6A87y1+j9sq3cYv9/3Cot6L6Filo324zYYIiSC2QixTu01l9YOr6VSlEx8v+5irPryKHhN6\nsHH/xnT3C1XXdlrFChfj2zu/5flbn+eLX7+g1detOJRwKPX5YPx/uu6y65jfcz4pmkLMsJjUcZtn\nZSTj410X9sKFMGIE3BncD+yZUdWHVPWQqn4KNAV6erq4feJr13YToA8QB1wCPKqqC/1pcLhqfnVz\nJnSewOp/VtPsq2YcSjiU+iYb6DelZlc1Y97d8ziYcJB6Q+qlDoAOdbdx06uasvrB1TxX/zlGrh7J\ntQOvZdjKYad1IYS6jSZzZ2aeVJUJ6yZw3cfX8f7i9+lbvS9rH1pLm2t8HlcdkDZ6A93NBzZTb0g9\nNu7fyJSuU+hxY4+AHltEUjNfCckJtBvTjvlb5zO07dAcra96mgYN3ALDW7a4BYf37aNImoykN4jc\ncXgHM7rPoGG5LBcizrG0Xfr74vfRdERTRq4eyeuNX2dwm8FhUYYvvUz1jsM7eGjaQ1T4sAIfL/uY\nrtd3ZX2/9YzqMIqbS90copbmH9dfdj1D2w1ly6NbeOyWxxi/bjyV/1eZXpN6nTWpJFySCBESwauN\nX2Vo26H88OcP1B9Snz8P/Zk6mSwYHyqqXFqF+T3no6o0GtaI9fvWp46RLBwVBcePQ9u2blmwYcOg\na9eAtyk7RGSuiLQCtyKPqv4mIoN83d/Xru3+wAuqGoMblDlGRALX7xIirSq2Ytyd41j19ypafNUi\ntZs7GIHSLaVvYWGvhURGRNLgywYs/HNhSMegeJ0TdQ6vNXmNlfev5JpLruGeSfcQMyyGVX+7yfrW\ntR3e0mbcNuzbQIuvW3DH2Ds4r8h5fH/P93zS+pOQL3kSGRFJ0skkVuxeQb0h9TiccJh5d8/L1eVu\nsjp+XGIcd4y5gzl/zGFI2yG5H8A2agRTpriqFbGxFEk4BikR7I7fTsywGHYd3cXMu2bSoGyD3D1u\nBrwBwLq966jzRR2W7lrK6A6jQzKpJiNpu7YPHD/AU7OfouJHFRm8YjC9qvVi0yObGNJ2CBUvzn6N\ndpO5MheU4d3m76YGlKN/H801A6+h75S+bD+8HfCM4Zfwee/vWa0ns+6axc4jO6n9Re3UCaPBSnRU\nubQK83rOOxVMHvgdgKKkQPv2rmjBl1/CXXcFpT3ZVB542jN726umrzv72rXdWFUXeb5fDbQE/i87\nrcwrbr/mdsZ2Gsvy3ct5baGblB6sT11VLq3Cj71/pOR5JWk6oinbD28Pi0984NL3C3st5LPWn7Fm\nzxqqD6pOv2n9wuZTqUmf9030me+eoeonVVmycwkDWgzg1/t/DVrQkpWoiCiOJR6j4dCGnBN5Dj/2\n/pFbSt8S1ON/suwTZmyewaDbB3FPtXsCc6AmTdyCw+vXE/X0E5ASxfTdX7L76G5mdp9J/SvrB+a4\n6fD+XbQe1ZpDCYeY13Oez7XGg8W7RNEbC9+gwoAKvPvzu3St2pXNj27m09afUq54uVA3Md8rUawE\n7zV/jz8e/YP7a9zPsFXDqPRRJf4959/EJ8WH3Xt/o/KN+PnenykaWZQmw13RgGC2MW1mcsRGVxim\nyOefu1UcBg+Gnj2D1pZsOoSbtV1CRKaISLayC34VSVXV3Z6D5kvtrm3H6A6jU9dYC2bX7ZUXXMmi\nXouocUUNd6GGUbdxhETQt0ZfNj6ykX439+Oz5Z+Roilh1UZzOu+b6KAVg+hxQw82PrKRR295NKyy\nyFGFojipJylfvDw/3fsT11xyTdCPn5SSxKe3fcp91e8L7MGaNYOJE4ncthmSi3BuxHnMumsW9a6s\nF9jjnsH7d1H2grIsvncxdcvUDerxfeF9X3lu3nM0KNuA3x78jS/bfhm0BdHNKVecdwUDWw1k0yOb\n6HJ9F9756R0OJhwMy/f+ypdWZvG9i6l6mSugEOw2Vr60MvN7zufiIm68edGVq2DQIOjdO6jtyCZR\n1WRP5cJxwCLgMp/3VtUCcTv33HM1uyasm6B9JvfRlJSUbO+bU/GJ8frg1Ad13NpxQT+2r377+zft\nOaGnLt21NNRNMRnYvH+zdh/XXRfvWBzqpmRo/tb52nNCTz14/GBIjv/v2f/WISuGBPWYS95dqFw/\nUj+s1U31YPB/7j3H9ujzc5/X/fH7g35sX/2y8xftNLaT/rDth1A3xZxh5e6V2n1cd525aWaom5Kh\nuMQ4fWXBK7rlwJbgH/zECZ3YopdS/XOd+MAMv18GiNMgxEfA/Wfcr4Gr3e3T/qJZlOnLL6KjozUu\nLi7UzTDGGH791VVUnFioA21r7oLZs+H880PdLGNMTiUmQufOLJn4F7VZwrRpbtlIf4hIvKoGrKyY\niJyvqkdE5KL0nlfVA+k9fia/uraNMcb4z7u0XPL/exqWL3dVLo4eDW2jjDE5k5gInTrBxIkk/+sp\n4NS1HqZGer4uB5Z5vi5Pc98nfgWSIlJSRIr4s68xxhR03qppSTfVgjFjXJWLVq1c1QtjTN5z4oRb\nYHzyZBg4kKS2HYFT13o4UtXWnq/lVbWC56v3VsHX1/E3IzkCWC8i7/i5vzHGFFjeLEVSEnDHHTBq\nlKt20aqVZSaNyWsSEtx1PHUqfPIJ9OuHZxnJcM9IAm4dSV8ey4hfP6Kqxnpqb1fxZ39jjCnIvFmK\n1FLbnTpBSgp07w4tWrjSijZm0pjwl5Dg1omcORM++wz69gVOXdvhnJEUkaLAucAlInIh4F1E9nyg\nlK+vk2kgmdEAzDR2i0hxVT2UxXbGGGM8Uru20xZu6dwZChVyVS+aNXP/mIoXD0n7jDE+OH4c2rWD\nOXPcOpH33pv6lPfaDudAErgf+BdwBW5cpDeQPAIM9PVFsspI/uW5ZVbqoBBgC3sZY4yPUifbnFlK\numNH95+nUydo2tQtZHxRVp/njTFBFx/vyh7OnQtffAG9Ti9N7b22w7lrW1UHAANE5BFV/cjf18nq\nR1ynqjdltoGI/OrvwY0xpiBKNyPp1bYtjB/vBu43aQLffQcXXxzU9hljMhEfD7ffDvPnu7KH6VSs\nySMZSQBU9SMRqQuUI01cqKrDfdk/q8k2dQBE5KxyiCJSKO02xhhjfHPaZJv0tG7tyimuW+fqdO/d\nG7S2GWMyERcHt90GCxbAsGEZlj3MY5NtRgDvAPWBmz03n2ttZ/ojqmqC59tSItJNVUd6DnoZMAZo\nlGYbY4wxPjhrsk16WrRws0DbtHHB5Ny5UKJEUNpnjEnHsWMuiFy0CEaMgG7dMtw0L0y2SaMmUEX9\nrFDj6/I/9wN9RKSWiNwMzMNFr8YYY7Ip067ttGJjYfp02LYNYmJg9+4At8wYk64jR1zhgEWL4Ouv\nMw0iIW91bQO/A5f7u3NWs7aHAyuAX4F+uFXQk4F2qrrZ34MaY0xBFuH5CJ9pRtIrJsbN4G7ZEho2\nhHnzoHTpQDbPGJPWgQPu+luxwq35euedWe4S6sk2ItIJeBmoDNRS1cwq1VwCrBWRX4AT3gdVtY0v\nx8rqRxwK3Aj0Am7ADcRcCtwlIr+r6re+HMQYY8wpIi5TkWVG0qt+fVePu0WLU8Fk2bIBbaMxBtiz\nx62gsH69mwR3++0+7RYGGcnfgTuAz3zY9uWcHEiy0yUuIpG46PZG4EZVfSonBw+m6OhojYuLC3Uz\njDEGgOhoqFHDFbPx2Y4dMGQIFC0Kfe6Di/yfzX3HHVCpkt+7GxP2du6EkSPdWv9+OXwYvhgMBw/B\n3XdDxYo+77pwoRuVcviw/7UFRCReVaP92zv1NRYAT2aRkcyRbAWSeVmZMmV0xIgRoW6GMcYAbkJ2\nfHzojn/JJZbUNPnbX3+Fdlhx4cJQtar/+zdq1CgRWJ3moUGqOig7r+FLICkitYGPcInCwrj1weNU\n1acQONNAUkRWqGr1LBqZ5TbhwDKSxphwkpICiYl+7rxmjZs9mpQEU6ZA9ey9BVepAnXrwldf+Xl8\nY/KAJ5+Ejz92QxyzZfNmNyby6FF3fd18s1/Hj4pyxar8lVVGUkS+I/1JMv1VdZJnmwVkHUguA7oA\n3+BmcN8NVFLVZ31pZ1ZjJCuLyG+ZPC/ABb4cyBhjzCkREa6H2i81roNF37lZ3S0buWWCbr3V590L\nF/Zxoo8xeVhysgvmsnWdrVkDTWPdzgvmQLVqAWtfTqlqbC6+1mYRKaSqJ4EvPcVmciWQvNaH1zjp\ny4GMMcbkoquvgAn4cAAAGF1JREFUdkuRxMZC8+YwYYL76oNsTfQxJo9KSsrmZJcVK1yd+8KF4Ycf\noHLlgLUtzMSLSGFgpYi8DezG9+UhM99QVf9U1T+BJ4Dt3vtn3HbmqPnGGGP8U7q0+4d3zTVuNum4\ncT7tFhlpGUmT/yUnZ2P5nZ9/hsaN3Sy4fBBEikh7EdmJqz44TURmZbJ5D9y4yIeBOKAM0MHXY/ka\ncR4FJotItKeBzUXkR18PYowxJkAuu8zV/K1Z061vN2xYlrtYRtIUBD5nJGfNcpn9Sy91062vvjrg\nbQs0VZ2gqqVVtYiqllDVDLsrPEnB46p6RFVfUdUnsrNWuE+xuqo+LyLdgAUikggcA57x9SDGGGMC\nqHhxt85ku3Zwzz1uksDDD2e4eWSkBZIm/0tK8iEjOXq0W9rnuuvcwv8FsAypiGwFzpp5raoVfNnf\np0BSRJoAfXApz5JAb1XdkI12GmOMCaRixdykmy5d4JFHXEm3Z591q5+fISrKurZN/uedbJOhjz92\nH7huvRUmT4YLCuzc4Zppvi8KdAIu8nVnX7u2+wMvqGoM0BEYIyKNfT2IMcaYIChaFL75Brp3h/79\n4fHH012N2bq2TUGQYde2KvznP9CvH7Ru7TKRBTeIRFX3p7ntUtUPgNt83d/Xru3Gab5fLSItgXFA\n3Wy32BhjTOBERcHw4W7F8QEDXIm3oUPdTFQPm2xjCoJ0J9ukpLgPWB9+6Lq0v/gidAWxw4SIpF2I\nNgKXofT5l+LXb09Vd3u6u40xxoSbiAh4/30oWRKeeQb27XMzus87D7CMpCkYzspIJiVBr17w9dcu\nmHznHXetmHfTfJ8MbAPu9HVnv8NwVT3u777GGGMCTASeftrN6u7TBxo1csV/L7vMAklTIJwWSMbH\nu1UNpk2D1193H7DSGT9cEKlqo5zsHzb5XBG5CBgDlMMTDavqwXS2O8mp2pPbVbVNsNpojDF5Tq9e\nblmTO++EevVg9mwiI8tb17bJ91K7tvfudeus/vILfPop3H9/qJsWVkTkicyeV9X3Mns+nHK6zwBz\nVbUiMJeMlxc6rqrVPDcLIo0xJiutW8PcubB/P9StS9SxA5aRNPleUhJEJce7wvKrVsH48RZEpq8m\n8CBQynN7AKgOnOe5ZSpsMpJAWyDG8/0wYAHwdKgaY4wx+UqdOq6kYvPmRH43k6SL2gPnhLpVxgRM\n0sFjnLNxKVxwyC3aX7t2qJsUrkoD1VX1KICIvAxMU9W7fNk5nDKSJVR1t+f7v4GMVgUtKiLLRGSx\niLTL7AVFpK9n22XJ1o9jjCnoqlSBn34iKrowyf/sd7O7jcmPJk8mee1GN0byp58siMxcCSAxzf1E\nMo7BzhLUjKSIfAdcns5T/dPeUVUVkbNWWfcoq6q7RKQCME9EVqvqH+ltqKqDgEEA0dHRGb2eMcYU\nHGXKENX+MpK+ioeePWHLFnjpJZt4YPKPTz6Bhx8mqeh6ohpcBxWLhLpF4W448IuITPDcbwcM9XXn\noAaSqhqb0XMi8o+IlPQsLVQS2JPBa+zyfN0iIguAm4B0A0ljjDFni4wuQvJ5haHNPfDKKy6Y/Pxz\nKGL/cE0epgrPPQdvvgmtW5O8+Soio8Op4zU8qeprIjIDuNXzUC9V/dXX/cNpjORkoCfwpufrpDM3\nEJELgXhVPSEilwD1gLeD2kpjjMnj3PI/AkOGwFVXwQsvwPbtMGECXHhhqJtnTPYdP+7qzI8d6ybU\nDBxIUpWIzEskmlSqugJY4c++4RSqvwk0FZFNQKznPiJSU0QGe7apDCwTkVXAfOBNVV0bktYaY0we\nFRnpWUdSBJ5/3i3Q/PPPbkLOli2hbp4x2bN7N8TEuPKgb7/turYjI0lKKvBFa4IibH7FqrofOKta\njqouA+7zfP8TUDXITTPGmHwlKuqMEondukHp0tC+vZuUMGmSCyqNCXcrV7o1Ig8ccBn1tm1Tn0pO\nzqDWtslV4ZSRNMYYEwTeQFLTTkFs0MBlJc8/31XBsRndJtxNmgT167vvf/zxtCAS0imRaALCAklj\njClgvN19J0+e8USlSrBkiVvAuWdPePLJdDYyJsRUXRd2+/ZuSatffoFq1c7aLLWyjQkoCySNMaaA\n8WZp0q1uc/HFMGsWPPwwvPuuq4pz6FBQ22dMhhISoHdvV0e+Uyf4/nsoWTLdTS0jGRwWSBpjTAGT\naSDp3eCjj2DQIFda8ZZbYMOGoLXPmHTt3AkNG8LQofDiizBqFJyTcXUmCySDwwJJY4wpYLzdfVkW\n/OrTxwWSBw+6YHLGjIC3zZh0LVwINWrA2rWuZvYrr0BE5iGMdW0HhwWSxhhTwGSZkUzr1lth6VIo\nX951c7/+OqSkBLR9xqRShf/9Dxo3huLF3Rje9u192s0yksFhgaQxxhQw3iyNT4EkQNmysGgRdO4M\n/ftDu3YuS2lMICUkwL33uvG6LVq4STVVqvi0q3eOWEHNSIrIf0VkvYj8JiITRKR4oI5lgaQxxhQw\n3ixNll3baUVHu4XLP/oIZs6EmjXdGn7GBMLWrW5pny+/dOMhJ02CCy7weXfv33YBzkjOAa5X1RuA\njcCzgTpQAY3VjTGm4PL+c12wAEqVys6eAtc8DP9tDK++CrX6w6OPQvPmud7GQoXcKkRFi+b6S5tc\nkJzslm5MTAzAiy9aBO+8A5SGlz90fwhzs/cSx4+7rwU1kFTV2WnuLgY6BupYoqetSJt/lSlTRkeM\nGBHqZhhjTMgdOQKbNoW6FVkrXRpKlAh1K0x6Dh7MG9U0y5aFSy4JdSv806hRo0RgdZqHBqnqoOy+\njohMAcao6le51ri0r19QAsno6GiNi4sLdTOMMSbkUlJcr7Q3a+O3kydh8GAYMRzKV3AzaStUyJU2\n1q8PL7wA//lPrrycyWWffAIPPQSTJ8NFF+XCC/79t+vCXrsGOnSEfv2gcOEcvWRUFFSvnnfHSYpI\nvKpGZ/L8d8Dl6TzVX1UnebbpD9QE7tAABXx59NdrjDHGXxER7h9szhWCBvdD93Jw993Q91v44APo\n2xdEcvTKkZHZHMNpgsp7burWdWvY58iUKdCnp/tg8s0X0DFgvbD5iqrGZva8iNwDtAaaBCqIBJts\nY4wxJqeaN4dVq9xSQQ884CqO5HBWd1RUNmaVm6DznpscjUGMj3dpzTZtoFw5WLHCgshcIiItgH8D\nbVQ1PpDHskDSGGNMzl1+uZvN/fbbbobtjTe6SRN+soxkePOeG7+7jVescAuMf/KJq+n+889w1VW5\n1j7DQOA8YI6IrBSRTwN1IAskjTHG5I6ICHjqKfjpJze+rWFDt+6kH1N7LSMZ3vzOSJ48CW+9BbVr\nw9Gj8N138N//QpEiud7GgkxVr1bVMqpazXN7IFDHskDSGGNM7rr5Zpdx6tnTVcK5+WbX9Z0NFkiG\nN++5yVZGcts2iI2FZ56Btm3ht9+gSZNANM8EkQWSxhhjct/558OQIW5a7z//uGDy9dd97q+2ru3w\nlpzs1vr0aU5VSorrwq5aFZYtc4uMjx2bS9O9TahZIGmMMSZwbr8d1qxx9ZH794d69WD9+ix3s4xk\nePO5jvWWLS7r+NBDUKcO/P473HNPjmf1m/BhgaQxxpjAuvhiGDMGRo+GzZvdRJxXX8107GRkpAWS\n4SwpKYtu7ZQUV06zalVYvhw+/xxmzXIrhJt8xQJJY4wxwdG5M6xdC3fc4RafvukmV2cvHVFR1rUd\nzpKTM8lI/v67m2j16KPQoIHLSN93n2Uh8ykLJI0xxgRPiRIwahRMmwbHjrkSNg8+CIcOnbaZdW2H\nt3S7to8dc7P2q1WDdevcWMjp06FMmZC00QSHBZLGGGOCr1Url6l64gkYNAgqV4bhw12XKDbZJtwl\nJ6fp2laFCROgShV45x3o1Qs2bLCxkAWEBZLGGGNCo1gxePdd+OUXuPJKt1xQvXqwdKllJMNcakZy\n0yY3oeqOO+DCC91Qhc8/z4W6iSavsEDSGGNMaNWo4SqbDB0KW7dCrVpEbt1IUtyJULfMZCAp7gSR\nh/a6LOT337sPBMuXu+LbpkCxQNIYY0zoRUS4jOTGjfDUU0Tt/YvkxcvgjTdcTWYTHpKSYMAAkidN\nJ+rwPteNvXmzG6Lgd71Ek5eJqoa6DUERHR2tcXFxoW6GMcYYHzSrH8fRtTv4+WBlKFnSzfK+914/\navKZXJGSAt98Ay+8AJs2ccelC9lcvAa/bTwn1C3Lt0QkXlWjQ92OrFhG0hhjTNiJPD+a5KuuhR9+\ngAoV3MzuKlXcepSeCTkmCFRh0iQ3E7tLF1dDfepUkmvXI7KYBZHGAkljjDFhKHWyza23wsKFMGUK\nFC3qgpkbb3SLm588Gepm5l+qMHMm1KoF7dpBQgKMHOlqpt92G0lJYslhA1ggaYwxJgydNmtbBFq3\nhpUr4auvXADZtatbMujLL216d246edJlfWvUgJYtYe9eVzN97Vr3Oy9UCMhGiUST71kgaYwxJuyk\nu45koULQvburnPLtt275oN69oWJFeP99OHw4JG3NFxIS4LPP4JprXNY3Lg4GD3brQfbqddZEmtPW\nkTQFmgWSxhhjwk6m60hGRECHDm65mWnTXOWUJ56A0qXhkUfc2obGN9u3Q//+bh3PBx6Aiy6CceNc\nBvLee6FIkXR3s4yk8bJA0hhjTNiJjPShx1rEVchZuBCWLYP27V1WrVIluO02N0nEur3PlpICc+a4\nsY/ly8Obb0KdOjB3LixZ4hYX93RhZyQpyTKSxrFA0hhjTNiJispmicQaNVyJxe3b4eWXYcUKFyiV\nLu3qP69dG6im5h1//OF+N5UqQbNm8NNP8PTTsGWLC7obN/a5pGFysmUkjWOBpDHGmLDjd4nEyy+H\nl16CHTvcTO969eCDD+C666B2bTeWcvv2XG9v2Nq/Hz791P0err4a/vMfKFfOTVrasQNefx3Kls32\ny1rXtvGyQNIYY0zYSXeyTXZfoHVrGD8edu1yJfwSEtxYyrJlXVD5zjsuG5ffbN8OH33kMowlSrg1\nOA8fdl3Y27fDd9+5SUsZjH/0hU22MV5W2cYYY0zYefJJ+OQTN3k4V23e7CaTfPutG1cJbqZy8+bu\n1rAhRId9MZHTHT8OP/7oAsTZs+HXX93jVaq47v2OHd2C4j52W/vi6qtdLP7VV7n2kuYMeaWyTdh8\nnhCRTsDLQGWglqouy2C7FsAAoBAwWFXfDFojjTHGBIVPk238cfXVblzg00/D1q0weTLMmgWffw4f\nfugqt9SqBXXruu7gunXhkksC0JAcOHAAfvkFFi+GRYvc7cQJ90urUwfeessFkJUqBawJNtkmvInI\nq0BbIAXYA9yjqn8F5FjhkpEUkcq4H/gz4Mn0AkkRKQRsBJoCO4GlQFdVzXIUtWUkjTEm73jhBXjt\ntSBWQ0xIcLO/Z892gdny5aci2auuctV0brjB3apWdd3jgR4kePKkC3bXrDl1W7YMNm50z4u4tjRp\nArGx0KCBW1szCEqVchPmP/88KIcrkHKSkRSR81X1iOf7R4EqqvpArjbQI2w+T6jqOgDJPPVeC9is\nqls8247GRdw2Hc8YY/KRqChXpW/v3ixXosklRaFGU3cD1128cqVbDmfVKli1BsYvADzJl4hCLpoq\nW9ZNXilRAi6+2GUvL74Yihd3JR2LFHG3woVdYJic7G5JSXDsGBw8CIcOudvevbBzp7vt2OG+Jp44\n1cRSpaFqTbjzATdL/aab4LzzTj2fCBwIxu8KEhNtsk048waRHtGk/uHmvrAJJH1UCtiR5v5O4JYQ\ntcUYY0yAnHOO+3rZZSFrAVDHc0tHCu6/0Q5gUZCatMtzmxmk42XBe45MeBKR14C7gcNAo0AdJ6iB\npIh8B1yezlP9VXVSAI7XF+gLUKpUKRYsWJDbhzDGGBMA1avD2LEuK5lnpKTAyRRIOQkp6hrvvXkT\nQt5eNxF3i4hw2c0IcV9zbz5MwF14Idi/1YCKFJG0w/wGqeog752sYipV7Q/0F5FngYeBlwLRyLAZ\nI+klIgvIeIxkHeBlVW3uuf8sgKq+kdXr2hhJY4wxxuQVuTVrW0SuBKar6vW50Kyz5LV1JJcCFUWk\nvIgUBroAk0PcJmOMMcaYsCEiFdPcbQusD9SxwiaQFJH2IrITNyBlmojM8jx+hYhMB1DVZFx6dhaw\nDhirqmtC1WZjjDHGmDD0poj8LiK/Ac2AxwJ1oLDr2g4U69o2xhhjTF6RVxYkD5uMpDHGGGOMyVss\nkDTGGGOMMX6xQNIYY4wxxvjFAkljjDHGGOMXCySNMcYYY4xfLJA0xhhjjDF+sUDSGGOMMcb4xQJJ\nY4wxxhjjFwskjTHGGGOMXyyQNMYYY4wxfrFA0hhjjDHG+MUCSWOMMcYY4xcLJI0xxhhjjF9EVUPd\nhqAQkRTgeKjbYbIlEkgOdSNMttg5y3vsnOUtdr7yHn/P2TmqGvYJv8hQNyCIVqhqzVA3wvhORJbZ\nOctb7JzlPXbO8hY7X3lPfj9nYR/pGmOMMcaY8GSBpDHGGGOM8UtBCiQHhboBJtvsnOU9ds7yHjtn\neYudr7wnX5+zAjPZxhhjjDHG5K6ClJE0xhhjjDG5KN8HkiLSQkQ2iMhmEXkm1O0xjoiUEZH5IrJW\nRNaIyGOexy8SkTkissnz9ULP4yIiH3rO428iUj20P0HBJSKFRORXEZnquV9eRJZ4zs0YESnsebyI\n5/5mz/PlQtnugkpEiovItyKyXkTWiUgdu87Cm4g87nlf/F1ERolIUbvOwouIDBGRPSLye5rHsn1d\niUhPz/abRKRnKH6WnMrXgaSIFAL+B7QEqgBdRaRKaFtlPJKB/6eqVYDaQD/PuXkGmKuqFYG5nvvg\nzmFFz60v8Enwm2w8HgPWpbn/FvC+ql4NHATu9Tx+L3DQ8/j7nu1M8A0AZqrqtcCNuHNn11mYEpFS\nwKNATVW9HigEdMGus3AzFGhxxmPZuq5E5CLgJeAWoBbwkjf4zEvydSCJOzGbVXWLqiYCo4G2IW6T\nAVR1t6qu8Hx/FPfPrRTu/AzzbDYMaOf5vi0wXJ3FQHERKRnkZhd4IlIauA0Y7LkvQGPgW88mZ54z\n77n8Fmji2d4EiYhcADQAvgBQ1URVPYRdZ+EuEjhHRCKBc4Hd2HUWVlT1B+DAGQ9n97pqDsxR1QOq\nehCYw9nBadjL74FkKWBHmvs7PY+ZMOLpirkJWAKUUNXdnqf+Bkp4vrdzGR4+AP4NpHjuXwwcUlVv\n1Ya05yX1nHmeP+zZ3gRPeWAv8KVnOMJgEYnGrrOwpaq7gHeA7bgA8jCwHLvO8oLsXlf54nrL74Gk\nCXMiUgwYB/xLVY+kfU7dkgK2rECYEJHWwB5VXR7qthifRQLVgU9U9SYgjlPdbYBdZ+HG07XZFvch\n4AogmjyYpSroCtJ1ld8DyV1AmTT3S3seM2FARKJwQeTXqjre8/A/3q40z9c9nsftXIZePaCNiGzD\nDRNpjBt/V9zTBQenn5fUc+Z5/gJgfzAbbNgJ7FTVJZ773+ICS7vOwlcssFVV96pqEjAed+3ZdRb+\nsntd5YvrLb8HkkuBip7ZboVxA5Ynh7hNhtSxdV8A61T1vTRPTQa8M9d6ApPSPH63Z/ZbbeBwmi4E\nEwSq+qyqllbVcrhraZ6qdgfmAx09m515zrznsqNn+wLxCT1cqOrfwA4RucbzUBNgLXadhbPtQG0R\nOdfzPuk9Z3adhb/sXlezgGYicqEnE93M81ieku8XJBeRVrhxXYWAIar6WoibZAARqQ8sBFZzarzd\nc7hxkmOBK4E/gTtV9YDnDXUgrosnHuilqsuC3nADgIjEAE+qamsRqYDLUF4E/ArcpaonRKQoMAI3\n/vUA0EVVt4SqzQWViFTDTY4qDGwBeuGSCHadhSkReQXojFvd4lfgPtzYObvOwoSIjAJigEuAf3Cz\nryeSzetKRHrj/vcBvKaqXwbz58gN+T6QNMYYY4wxgZHfu7aNMcYYY0yAWCBpjDHGGGP8YoGkMcYY\nY4zxiwWSxhhjjDHGLxZIGmOMMcYYv1ggaYwxfhCRciLye6jbYYwxoWSBpDHGGGOM8YsFksYYk0Mi\nUkFEfhWRm0PdFmOMCabIrDcxxhiTEU/5wdHAPaq6KtTtMcaYYLJA0hhj/Hcprp7uHaq6NtSNMcaY\nYLOubWOM8d9hYDtQP9QNMcaYULCMpDHG+C8RaA/MEpFjqjoy1A0yxphgskDSGGNyQFXjRKQ1MMcT\nTE4OdZuMMSZYRFVD3QZjjDHGGJMH2RhJY4wxxhjjFwskjTHGGGOMXyyQNMYYY4wxfrFA0hhjjDHG\n+MUCSWOMMcYY4xcLJI0xxhhjjF8skDTGGGOMMX6xQNIYY4wxxvjl/wNvyP8HJ8XAqAAAAABJRU5E\nrkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "N = 1024 # length of signal\n", "\n", "# generate signal\n", "x = np.sin(2*np.pi/N * np.arange(N))\n", "# quantize signal\n", "xi = np.round(3 * x)\n", "xQ = 1/3 * xi\n", "e = xQ - x\n", "\n", "# plot (quantized) signals\n", "fig, ax1 = plt.subplots(figsize=(10,4))\n", "ax2 = ax1.twinx()\n", "\n", "ax1.plot(x, 'r', label=r'signal $x[k]$')\n", "ax1.plot(xQ, 'b', label=r'quantized signal $x_Q[k]$')\n", "ax1.plot(e, 'g', label=r'quantization error $e[k]$')\n", "ax1.set_xlabel('k')\n", "ax1.set_ylabel(r'$x[k]$, $x_Q[k]$, $e[k]$')\n", "ax1.axis([0, N, -1.2, 1.2])\n", "ax1.legend()\n", "\n", "ax2.set_ylim([-3.6, 3.6])\n", "ax2.set_ylabel('quantization index')\n", "ax2.grid()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Exercise**\n", "\n", "* Investigate the quantization error $e[k]$. Is its amplitude bounded?\n", "* If you would represent the quantization index (shown on the right side) by a binary number, how much bits would you need?\n", "* Try out other rounding operations like `np.floor()` and `np.ceil()` instead of `np.round()`. What changes?\n", "\n", "Solution: It can be concluded from the illustration that the quantization error is bounded as $|e[k]| < \\frac{1}{3}$. There are in total 7 quantization indexes needing 3 bits in a binary representation. The properties of the quantization error are different for different rounding operations." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Properties\n", "\n", "Without knowledge of the quantization error $e[k]$, the signal $x[k]$ cannot be reconstructed exactly from its quantization index or quantized representation $x_Q[k]$. The quantization error $e[k]$ itself depends on the signal $x[k]$. Therefore, quantization is in general an irreversible process. The mapping from $x[k]$ to $x_Q[k]$ is furthermore non-linear, since the superposition principle does not hold in general. Summarizing, quantization is an inherently irreversible and non-linear process. It potentially removes information from the signal." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Applications\n", "\n", "Quantization has widespread applications in Digital Signal Processing. For instance\n", "\n", "* [Analog-to-Digital conversion](https://en.wikipedia.org/wiki/Analog-to-digital_converter)\n", "* [Lossy compression](https://en.wikipedia.org/wiki/Lossy_compression) of signals (speech, music, video, ...)\n", "* Storage and transmission ([Pulse-Code Modulation](https://en.wikipedia.org/wiki/Pulse-code_modulation), ...)" ] }, { "cell_type": "markdown", "metadata": { "nbsphinx": "hidden" }, "source": [ "\n", "**Copyright**\n", "\n", "This notebook is provided as [Open Educational Resource](https://en.wikipedia.org/wiki/Open_educational_resources). Feel free to use the notebook for your own purposes. The text is licensed under [Creative Commons Attribution 4.0](https://creativecommons.org/licenses/by/4.0/), the code of the IPython examples under the [MIT license](https://opensource.org/licenses/MIT). Please attribute the work as follows: *Sascha Spors, Digital Signal Processing - Lecture notes featuring computational examples, 2016-2017*." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 1 }