{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# In Phase (I) and Quadrature (Q) Signals of Image Reject Mixers\n",
    "In radios (and other electronics) it is often desired to shift a signal's frequency.  This is the job of the mixer circuit.  The mixer is represented by a circle with a multiply symbol inside it, as shown below.  ![mixer block diagram](Mixer.png) \n",
    "\n",
    "If we multiply $cos(\\omega_{lo}t)$ with $cos(\\omega_{rf}t)$ we get ${cos[\\pm(\\omega_{lo}-\\omega_{rf})t] + cos[\\pm(\\omega_{lo}+\\omega_{rf})t]}/2$. This contains the desired term, $cos[\\pm(\\omega_{lo}-\\omega_{rf}]t]$, which does the frequency shift. The $\\pm$ is because $cos(-x) = cos(x)$. Negative frequencies are indistinguishable from positive frequencies from the cosine's point of view. This brings up the question of what we mean by negative frequencies, but put that aside for now as we examine how a mixer would work in a software defined radio receiver.  To be clear, both $\\omega_{rf}$ and $\\omega_{lo}$ are positive numbers (so, for example, $-\\omega_{rf} < 0$) in this discussion.\n",
    "\n",
    "The block diagram of a simple software defined receiver is shown below. ![Simple SDR](Simple_SDR.png)\n",
    "\n",
    "In order to tune in stations at their different frequencies, the frequency shift needs to be adjustable.  Generally the frequency to be shifted is the frequency of an adjustable oscillator, called the local oscillator.  The frequency of the local oscillator is $f_{lo} = \\omega_{lo}/(2\\pi)$ and is set by some type of control on the local oscillator.  The low pass filter just after the mixer removes the $cos[\\pm(\\omega_{lo}+\\omega_{rf})t]$ term from the signals impinging on the sound card, which converts these low frequencies to digital samples.  There is still a problem though, because there are actually still two signals in $cos[\\pm(\\omega_{lo}-\\omega_{rf}]t]$ that make it to the data stream from the sound card, one for the \"+\" and one for the \"-\" from the $\\pm$.  When we are listening to the receiver, we cannot tell if it was the \"+\" or the \"-\" term that caused what we are listening to, and sometimes two different radio stations will end up getting shifted right on top of one another, one from the \"+\" term and one from the \"-\" term.  The \"+\" term and the \"-\" term are known as images of each other.  It would be very nice if we could send enough data to the computer so it could distinguish between these two signals.  This is actually twice as much data as we are sending with the simple SDR above.  Fortunately sound cards often have stereo inputs.\n",
    "\n",
    "To understand how to solve the image problem above, we need to understand what we mean by negative frequency, and get a more intuitive idea how we can tell the images apart.  For a moment, consider a propeller, of unit length, spinning in the counterclockwise direction at 100 revolutions or cycles per second.  See the figure below. ![Propeller](Propeller.png)  \n",
    "\n",
    "\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's call that a positive frequency of 100 Hz.  What would a negative frequency of 100 Hz be?  It seems obvious that it would be the propeller spinning the opposite direction (clockwise).  If you look at the propeller from the bottom perspective you would see the tip going back and forth like a cosine wave in time.  Looking only from the bottom, you could not tell if it was spinning clockwise or counterclockwise.  However, if you could look from the bottom and from the right side ($90^{\\circ}$ from the bottom), you could tell which way it was turning.  Remember that the parametric equation describing the tip of the propeller spinning counterclockwise at frequency $\\omega$ is $\\vec v = cos(\\omega t) \\hat {\\mathbf i} + sin(\\omega t)\\hat {\\mathbf j}$.  If you spin in the clockwise direction (change $\\omega$ to $-\\omega$), and the $sin(\\omega t)\\hat {\\mathbf j}$ becomes $-sin(\\omega t)\\hat {\\mathbf j}$, because $sin(-x) = -sin(x)$.  Another way to represent this circular rotation is in the complex plane, where the real part of the number is in the $\\hat{\\mathbf i}$ direction and the imaginary number is in the $\\hat{\\mathbf j}$ direction.  Euler's identity which says $e^{j\\omega t} = cos(\\omega t) + jsin(\\omega t)$ shows that $e^{j\\omega t}$ represents a counter clockwise spin of the propeller, and $e^{-j\\omega t}$ represents a clockwise spin of the propeller.  The animation below shows this.  \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "jupyter": {
     "source_hidden": true
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<video width=\"576\" height=\"576\" controls autoplay loop>\n",
       "  <source type=\"video/mp4\" src=\"data:video/mp4;base64,AAAAHGZ0eXBNNFYgAAACAGlzb21pc28yYXZjMQAAAAhmcmVlAABJf21kYXQAAAKtBgX//6ncRem9\n",
       "5tlIt5Ys2CDZI+7veDI2NCAtIGNvcmUgMTU1IHIyOTE3IDBhODRkOTggLSBILjI2NC9NUEVHLTQg\n",
       "QVZDIGNvZGVjIC0gQ29weWxlZnQgMjAwMy0yMDE4IC0gaHR0cDovL3d3dy52aWRlb2xhbi5vcmcv\n",
       "eDI2NC5odG1sIC0gb3B0aW9uczogY2FiYWM9MSByZWY9MyBkZWJsb2NrPTE6MDowIGFuYWx5c2U9\n",
       "MHgzOjB4MTEzIG1lPWhleCBzdWJtZT03IHBzeT0xIHBzeV9yZD0xLjAwOjAuMDAgbWl4ZWRfcmVm\n",
       "PTEgbWVfcmFuZ2U9MTYgY2hyb21hX21lPTEgdHJlbGxpcz0xIDh4OGRjdD0xIGNxbT0wIGRlYWR6\n",
       "b25lPTIxLDExIGZhc3RfcHNraXA9MSBjaHJvbWFfcXBfb2Zmc2V0PS0yIHRocmVhZHM9NiBsb29r\n",
       "YWhlYWRfdGhyZWFkcz0xIHNsaWNlZF90aHJlYWRzPTAgbnI9MCBkZWNpbWF0ZT0xIGludGVybGFj\n",
       "ZWQ9MCBibHVyYXlfY29tcGF0PTAgY29uc3RyYWluZWRfaW50cmE9MCBiZnJhbWVzPTMgYl9weXJh\n",
       "bWlkPTIgYl9hZGFwdD0xIGJfYmlhcz0wIGRpcmVjdD0xIHdlaWdodGI9MSBvcGVuX2dvcD0wIHdl\n",
       "aWdodHA9MiBrZXlpbnQ9MjUwIGtleWludF9taW49NSBzY2VuZWN1dD00MCBpbnRyYV9yZWZyZXNo\n",
       "PTAgcmNfbG9va2FoZWFkPTQwIHJjPWNyZiBtYnRyZWU9MSBjcmY9MjMuMCBxY29tcD0wLjYwIHFw\n",
       "bWluPTAgcXBtYXg9NjkgcXBzdGVwPTQgaXBfcmF0aW89MS40MCBhcT0xOjEuMDAAgAAAEx1liIQA\n",
       "E//+97GPgU3IAA2XOop6H+EVsfSQUXqx2aBk6gAAAwAAAwAAThap3vm/XOW/et5u8C14AE6Qarnu\n",
       "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\n",
       "YXRhAAAAAQAAAABMYXZmNTguMjkuMTAw\n",
       "\">\n",
       "  Your browser does not support the video tag.\n",
       "</video>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import matplotlib.animation\n",
    "import matplotlib.ticker as plticker\n",
    "import numpy as np\n",
    "from IPython.display import HTML\n",
    "\n",
    "t = np.linspace(0, 2)\n",
    "x = np.cos(np.pi*t)\n",
    "y = np.sin(np.pi*t)\n",
    "fig, ax = plt.subplots(nrows=2, ncols=2,\n",
    "                       gridspec_kw={'hspace': 0.3, 'wspace': 0.2}, figsize=(8, 8));\n",
    "plt.close();\n",
    "ax[0][0].set_aspect(1)\n",
    "ax[0][0].axis([-1, 1, -1, 1])\n",
    "ax[0][1].set_aspect(1)\n",
    "ax[1][0].set_aspect(1)\n",
    "ax[0][1].axis([0, 2, -1, 1])\n",
    "ax[1][0].axis([-1, 1, 0, 2])\n",
    "ax[1][1].axis('off')\n",
    "x_title = '$\\mathscr {Re}[e^{j\\omega t}]$'\n",
    "y_title = '$\\mathscr {Im}[e^{j\\omega t}]$'\n",
    "x_label = '$\\mathscr {Im}$'\n",
    "y_label = '$\\mathscr {Re}$'\n",
    "t_label = 't (s)'\n",
    "ax[0][0].set_xlabel(x_label)\n",
    "ax[0][1].set_xlabel(t_label)\n",
    "ax[1][0].set_xlabel(x_label)\n",
    "ax[0][0].set_ylabel(y_label)\n",
    "ax[0][0].xaxis.set_label_position(\"top\")\n",
    "ax[0][0].xaxis.tick_top()\n",
    "ax[0][1].yaxis.set_label_position(\"right\")\n",
    "ax[0][1].yaxis.tick_right()\n",
    "ax[1][0].yaxis.set_label_position(\"right\")\n",
    "ax[1][0].yaxis.tick_right()\n",
    "axis_linewidth = 0.75\n",
    "real_color = 'cyan'\n",
    "im_color = 'magenta'\n",
    "complex_color = 'green'\n",
    "ax[0][0].axhline(0, color=real_color, linewidth=axis_linewidth)\n",
    "ax[0][0].axvline(0, color=im_color, linewidth=axis_linewidth)\n",
    "ax[0][1].axhline(0, color='black', linewidth=axis_linewidth)\n",
    "ax[1][0].axvline(0, color='black', linewidth=axis_linewidth)\n",
    "ax[0][0].set_title('$e^{j\\omega t}$')\n",
    "ax[0][1].set_title(y_title)\n",
    "ax[1][0].set_title(x_title)\n",
    "loc = plticker.MultipleLocator(base=1.0)\n",
    "for i in range(len(ax)):\n",
    "    for j in range(len(ax[0])):\n",
    "        ax[i, j].xaxis.set_major_locator(loc)\n",
    "        ax[j, i].yaxis.set_major_locator(loc)\n",
    "l1, = ax[0][0].plot([], [], '.', color=complex_color)\n",
    "l2, = ax[0][1].plot([], [], '.', color=im_color)\n",
    "l3, = ax[1][0].plot([], [], '.', color=real_color)\n",
    "ax[0][1].legend([l2],[y_title])\n",
    "ax[1][0].legend([l3],[x_title])\n",
    "\n",
    "def animate(i):\n",
    "    l1.set_data(x[:i], y[:i])\n",
    "    l2.set_data(t[:i], y[:i])\n",
    "    l3.set_data(x[:i], t[:i])\n",
    "\n",
    "ani = matplotlib.animation.FuncAnimation(fig, animate, frames=len(t), interval=200);\n",
    "\n",
    "HTML(ani.to_html5_video())  # For just the animation, no controls.\n",
    "#HTML(ani.to_jshtml())  # Animation with controls."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The phasor above has positive frequency and advances in the counterclockwise direction.  The phasor below has negative frequency and advances in the clockwise direction.  The difference between them is seen in the sign of the imaginary component.  This is how you tell if the frequency is positive or negative."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "jupyter": {
     "source_hidden": true
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<video width=\"576\" height=\"576\" controls autoplay loop>\n",
       "  <source type=\"video/mp4\" src=\"data:video/mp4;base64,AAAAHGZ0eXBNNFYgAAACAGlzb21pc28yYXZjMQAAAAhmcmVlAABNy21kYXQAAAKtBgX//6ncRem9\n",
       "5tlIt5Ys2CDZI+7veDI2NCAtIGNvcmUgMTU1IHIyOTE3IDBhODRkOTggLSBILjI2NC9NUEVHLTQg\n",
       "QVZDIGNvZGVjIC0gQ29weWxlZnQgMjAwMy0yMDE4IC0gaHR0cDovL3d3dy52aWRlb2xhbi5vcmcv\n",
       "eDI2NC5odG1sIC0gb3B0aW9uczogY2FiYWM9MSByZWY9MyBkZWJsb2NrPTE6MDowIGFuYWx5c2U9\n",
       "MHgzOjB4MTEzIG1lPWhleCBzdWJtZT03IHBzeT0xIHBzeV9yZD0xLjAwOjAuMDAgbWl4ZWRfcmVm\n",
       "PTEgbWVfcmFuZ2U9MTYgY2hyb21hX21lPTEgdHJlbGxpcz0xIDh4OGRjdD0xIGNxbT0wIGRlYWR6\n",
       "b25lPTIxLDExIGZhc3RfcHNraXA9MSBjaHJvbWFfcXBfb2Zmc2V0PS0yIHRocmVhZHM9NiBsb29r\n",
       "YWhlYWRfdGhyZWFkcz0xIHNsaWNlZF90aHJlYWRzPTAgbnI9MCBkZWNpbWF0ZT0xIGludGVybGFj\n",
       "ZWQ9MCBibHVyYXlfY29tcGF0PTAgY29uc3RyYWluZWRfaW50cmE9MCBiZnJhbWVzPTMgYl9weXJh\n",
       "bWlkPTIgYl9hZGFwdD0xIGJfYmlhcz0wIGRpcmVjdD0xIHdlaWdodGI9MSBvcGVuX2dvcD0wIHdl\n",
       "aWdodHA9MiBrZXlpbnQ9MjUwIGtleWludF9taW49NSBzY2VuZWN1dD00MCBpbnRyYV9yZWZyZXNo\n",
       "PTAgcmNfbG9va2FoZWFkPTQwIHJjPWNyZiBtYnRyZWU9MSBjcmY9MjMuMCBxY29tcD0wLjYwIHFw\n",
       "bWluPTAgcXBtYXg9NjkgcXBzdGVwPTQgaXBfcmF0aW89MS40MCBhcT0xOjEuMDAAgAAAE35liIQA\n",
       "Ev/+963fgU3AQO1rulc4tMurlDQ9UfaUpni2SAAAAwAAAwACEXCk3XMfROI/UTbDULGYBtRkJ93g\n",
       "nhake1xNKV9RMFBt+VduzMaeOzp314U6MwnsCpJrlykKuN/zLvF0263jDDohnRY192oXaL9N77/M\n",
       "hi2ItLKteXNBP9pVO5+SdUgOZXiF1fO8s3bjFqAUUuF4hhXAJb4CUjqb7vOF7aMTRmcrhZX2wq5q\n",
       "uuSYI9pG09/yvBVAzfjB91mxBgNxT3JoQpLrop+ATV+zSPSUadr1HIyYYyyY8MEY5xGD3cFp1iug\n",
       "AtPDzbMeBKw419KsjOx6AAADAd8/hY3SpsJh7uTbj+QqGOrmhaRFrzV102sqkQqtuE05x+EOaA9g\n",
       "4b1gqNk1Scsg8Ev+Mou/3me84469YjisRVMXcxUkiaQVzQorunkzsX4uwu/l95loaZPxbqAxR8hs\n",
       "ZElUcckOtF5rKjqBchnXlpglb8pB7+AD6gECqOQw0NmyFpQ5YLSHW0dJkPlG/tL83txXXchuirlk\n",
       "I/+nHT06ei6NNaw9dilWqQ7XeBzkXot7ZkIvJoZAVs6FO8MG5vDpPA8i+wwOzuyaCPNRhyXp2VmU\n",
       "1EeHVST6r2r+Hf2EP34dBbiHM0ru+DaL2l/qO1lw4IAOOJFVwBFPHO00dd/BUXZm7F7DT6PsBVAW\n",
       "XanlvpC1Ueh02i8pzHqO8GZZne3RfLlytlzPwAVj/Z/QAoaBdgVsnvhaiY+Emx3Jyxyd+NqXEwK9\n",
       "yZej1X8araWM1+uPY2bSnc5Vc40HJmxBs/SKxe5nuaZK24qk6BbL+l040uOY70MguIYZf/b3OV1q\n",
       "cu3dJCqT9nqgVWgEbKbkc7pU7QeTHIT/alUAB0uJpJQpdIaGqJ+/CQHZB6hyNYWqT02UgLsBHMvb\n",
       "WmeykE0lRRA/NvxlXM+E0lczW3rVK/hotAm8nP7kjpcSQtosLf5Ywrd4Au2yDlsIjcSB3hHlOMjZ\n",
       "t3Ss0saIhBVz0FuaecOq1tK5Tp2uuEg8GB+dEc8F88V+R91OS0NikIG75LrnP/DmOACT7uD/DcJd\n",
       "TlBWZC4DPhoBVD1/IlBw8434J3Dbx2zKL/hOkcUf9QxPjnAfoERYVQyWDmyHxxgZSMW02RqeL23p\n",
       "8oPxBmF8RR38G6euxXr5KbxgH3rvvGLKJeB0uC7kamGZCjMLCvbHDTFM8SzVoFalfNxu7ljrp8gE\n",
       "BrtcfiNkXJh73CU1nRlUdMOobBNm8bYP9TGXLk/zWXVZMLoiSXkXXeCoP2MnvRaYvtyIqyL8oeTk\n",
       "oucKOXMwSY8JPRfv080Wm+zDe7vCjP7X84691qodjgcSb0X+pmdcj9TMNp0sOoi+CFxcPlYPAjpZ\n",
       "3PPV6GbTTZCRbxFZi+jhwH6QUPlhjy3zzOd6m03FmL13R1lYkK1Jnfsuf5cCbIvVAVoLMTLUGZJt\n",
       "QfsLmrnCPI0MMpJ/BGxRddJz2ng0V5YePv54/TSedyj1a246ofeKNyqPmm0P//xg8qsbTfLqPl3P\n",
       "CTeOX64w9J6PgPhmwGOOzGISRkRfZOHeLTdnG8+qzXTIrBF49D8AWtrmA/2aNumLBDfuE8u2QsEi\n",
       "Pt3s5OQ4J1Ndm3ZkRqX5YIAQozcKPDg5X7uLCgphIv6VXQKvRAsWqR8QRLGj7Jum8y99pEzUpjS0\n",
       "f71Fw0/K7kiE9i62UAfr4QlZg/0ebhTt2hJsbcXg7atKAikJyc8vwpsXOFX0mD1WCF17Vge8r/57\n",
       "aNMOPPvFgwa3gqV4xp4wJk4P0nSaBSguXuchrShCQ4EUS+0sLL2/8PWFm2gMkLxRVKfJ0bQKeVuK\n",
       "l1AgdH8nRaia2H8oO3qwpG9tBbH6iuV1ZLCmWoXuS+/dKC3BoS2gPN7uez9jEWZFi+aiDfb+s+uv\n",
       "Je4OINMrwLbT9N4BictIdDYUZSdtgfUBip5LfTGS9i8bk8wsBCTdusH/TVtH3ryPl3bmf3r9Zv62\n",
       "9T6qD+Xv9PcOcOPdjdwN6asPMYLbhRbgW7TrOdXMZ5WEp1hdQpy5C6c7NNT4XapHEvblA4ibErIv\n",
       "UkRk1j4lRMWRNtkumoHo9dTZPEtkal04v5ecEtWRD6nYQ0dvazYPnMG5jL4bbT8Fhsd7AWhFv+lX\n",
       "WZNcFztW4mIsuP3NcAVHZtlOI3r61pdUkfI+Irg9Yht3rhLQqu6dNdPHF1vlwR2xpKORTIv+tPBo\n",
       "il6Ks2BeCxze4ukFPfGxk1D4siIuhV5Hgp78f5ea4qFWoY87CW+l079fMujzuRk+WOJyEW86dzes\n",
       "AcqUoSzJZesznEFtRw4UzisxYNZ1clzw3Br1BVUsRgW1VM0OVcpFeKDYrrJdkcc0K1hi5mJ7slht\n",
       "Jdghp92LH2wHAgXYpTs7Y6B68dmSk7mm6tDmsi8RHVHeTpj+hHXUDpUAI2BnVKsiNFlzJK/7MAeV\n",
       "qJ9Z7mZkaZIdbJHsuX4FqpRNABCwxNq0uvKS+FJ4fCQliDx/nvxYr0g43iF8mVSVkz9cw1GgUnC/\n",
       "dkYPp4qeh7bw5ufJNcVh8R22pfRph+0M6YIZGbS58L1mZ56DMRKNWkC9RoSzPCrC2U9ZTlapBrxS\n",
       "G0O4tDELaEM3qNWTtGoKi3ItDlm80dP9jo+VhnjuGv98xINuMcHc8fd56t8uNXvw8aIExuKuwhlE\n",
       "ytqHaTRbRXbYHu0+a2N5tZHaFLxCmk2clyvaVfUuanMG+YgdrrfQ7AxG09xOCllULRnfp3xdM+mQ\n",
       "NkeFwWKDnWT0rNbT3twyM0Rgv9GUB8pv6dss+Dc2TkrqkD99N0yka15lJ5wzrgIGJmA5IjxJZx+h\n",
       "X6yKRVA3KuYw+MXVoRRi+/iQQeXTlxa4Fa///7FY1TDsRTpDJUqICuMrr/LBBUvrWSMLcygVZt+R\n",
       "y/U6w+DhC03T+GQRleh8K1vtJwHasKu7XkE6lM2zurcD0qOMk7/NDFef4aepBrIkZTeiENZ7z/EO\n",
       "4bBwhN2HT172TOWr8SKGbM5WdRV2mpTqe2H0EUk6/ULuVf2LG6E+JyfwNaiZwhVvSHmRqTlfLRMk\n",
       "wpX+f84raO7BYPyDc13o5Jhf71XuejpcSSNiN8GN1UmGnUQJ1BqeS6KIJVLnKoC27Yo1ZfUG7VsJ\n",
       "K5hlnXONdrfKH9HoLlwFzdkIF+9eO40gQae5BYFw9Ji2cRuY9FSdjXh2V1NvvP/yNq0oDeF39MN/\n",
       "50EdL2Ij9j53pVtnv+vxx9UAsSLfIx/Y7hSqjrkosKUa2Qto1LhBF22AGQotQyh2i7O21QHXBYjo\n",
       "ME3rGLqxhAxM376iZsp7NKQcVyyBnCemTGXqrmpT9+BtaZB3y/Mlq2J3+fANt/lhvRq+nRzu1ale\n",
       "VRqjtPinl+uUbAXo/LVJftzf5NLI2z21mNdeSirpnbOr/CcRn7tLwYC7KLS7nA5QBcWUXLmJHadk\n",
       "HYP/+87rx9oQ+/6sTHDILU1HVGfdu2Bq7Vi+S0DmfjwRhZmRD5jYwPkYbZH9LI5mEb5Gs6y6Rc83\n",
       "W1C7qcsHC8Rehj6Hx77cPZ2edzhLu5SCL1kfVJwJwTQx0L3U5N8d5B+NF2DwHwKhQNpNLO3hrCko\n",
       "/xay5qhnlHq33Y1uxmIpzSGw9u7yTHLWw4F5m6BTvakXXtsK9AywzxhPqf8MWLZTdYByVXp8P1Ud\n",
       "7Qixb9p3YLL80yJ1jOI2EL2UvwCxRcQRJmYpZyZ9t2pBUCwOViRG8bAOoHCiwfljaartyexAIFiN\n",
       "t0VvdvqRE/KSmS4ZAci1rTSCqeMXcN1xCHRY8UjAJQ/QHcM9QGkUJT6QK0YPGYMnvCpU57T+cwJ7\n",
       "tCbGbEmfX53jmNNVum6J1ZNv2iseqsDrCkaMhEViKv/NrCPSWWaaDmnDcPgcXt7DWW9pvHsSyCMG\n",
       "V+GxX/iUL7JGYt9bz72H10ovyLVGHJtXoQAU6mY8iitLHv68bfBzqIG9AH6iFolSFX6YdZqwFkNy\n",
       "gICdtx8J8XPvLic+Aiaeh6zktf8CUOyAXt6Y/PfZcx4WSoJgNdctn2reL7adfuqxrtw+eVeqxE30\n",
       "ZcTNDWWYv0qU1IYp0ekye3i7bChqUjWpfUtFZekFA496h3ixK45Dq/hUChWkKS2xS8pXCQ0VN0hD\n",
       "vEWgUd4kT92dzJj/XlaTijvAmS3OJONi2SejtrkHt0XWP571pyJL/MS63BU6bS6wgGBmjVTddZy0\n",
       "Va1CEJFn/FAbbbuDZvlSOZ82nRNTTIhfcn4fCKe31wLvP8KOdQ/DKh2XgPyQTmrqDV/TPqJv6QVQ\n",
       "XMmKoDiajCtA3I1HUMixLwMGS8C40LtX5jsAf9TJPVAQR4dKg3rJTmKHto8uuxeHWXm48snM+O7o\n",
       "QzJ70px1rY4y94X74G/zHcLnpFmQ6N+yhdU58VrpW7LOx4/5311tREqDWiNUYMyEUQA0crRJcCX2\n",
       "WySoA86lMQm26Smk9ydFg7bb0AAwUzdXnhqlna+ZZjCqmOxIIGYL+I4l7u+p13EBShphanhivFPO\n",
       "PzTxFmOy0xC4xTfhUiLdUB8TWF00C9tGrkIjikKk6rAAfqApyzRZC/P4DY+DuolG4+1Op5+ACX9P\n",
       "PezmvaD/hk7kEgDuqHOQSmfzwAM61ICTa70Wo8GI3+LHmKa4nrs6PANTGJ176/cfYYb/y068uvPz\n",
       "SWEVhymTUsjo5+1IYhuWPGv7wE60BbTe3pv//k9q4ONiXc760bKv8YsKlEHpScbE1DDtFOUWMApK\n",
       "Vb5PBVDwNE5eU7YdAGwu/8DFdE/VG2PKeucuX6UaIyHZ1flSrvc9nkBpioSWviulGyDlK1uew5Dk\n",
       "0OSGqegtNPrXmLiEj3hD23b1BcuQ/z60d77uAvBCBdlU10klv6wVwzy+gadNu7rL/2ieu13KISnE\n",
       "+nWDtG7KkkqaT3hjHenUafowjxyXjpwtN4V5VQmbxnkpsU29bwvch6JhsVP7i/7ViO1mc/5E2RQR\n",
       "oAnHtZkeuF/BNYgH2S23K+S5rqGvc55cOdw3R1/7uXdlvc1Gr/YBDF28MM4mMCwG0zNR8SSAoeAF\n",
       "CqxjT20E49H/4X2ySxAUbBz9CL/CgfzZ/olkAavD/os5meMAAAMABohtrKaaWFgmFWp/fKW6ChNu\n",
       "kTz6dpH/WQ9DxHiTEoe4dAIWgSh9I1wKrpVdPmjVOzZswbeCXtGEe5BeUUS3TvLxJLf84Ya11Sy+\n",
       "HU3v7CXL3GsRtW28QB7WJI1xXvx+PgyuFpbK6kgIa4vZGr/zGtK3K3fEXEuzcsNiPdTdkHTa0GVl\n",
       "UUnojO0RhxSrtPtbOgoMSxRbuRsSdq2qPJ0HJddj1DWpsH91G6VXjMSSsCeoapEFN7Jw4ExBMxUL\n",
       "ENiesKvMmP9z+e6CKBQLxbpv4DFV2pPLP/Jw91rqeZt1No3vhuVK09EZKn/NWW+NvwRZYTOE4yUB\n",
       "nEUsBrXOGs0JY1rzg4kZXgigEzdeZgD3gsVz4GTnWTtHqCtLFOLv7OiRyDlk5I4Ve5KpUDxPdDYd\n",
       "Lk3lvXnD9w3gHMeQASFtUNPPXBztbdUrabbT01kSxwf3EO4K0aOfaeAWBbpO8k7kR7VpjBWdjpBJ\n",
       "bg2ne3cv0wgFuKkXrph2NtWbkJksyoRWGR7CeYCYegSB354qY4Ud3Ixd9sOz7I8Du8pQmcCzALKC\n",
       "wwBOZGdwv6pCWVuIAAADAPl6JB7l2X3ihzXEYK/bJHvxP8sBLeQJ+zp0TKF3C6pzt8S74JVhPDyi\n",
       "eu9pbV5E/SRyy1INf1qYgGg4ELPFwr0goVWRurIze31pV/sK+uLhRv/6QP+GwMchyUnqumIARQmQ\n",
       "x0AAAAMAAAMDBD89WW/2dn7qtEFRQ5BaMzGqW1kdvx9v7hCEGun3v5ULUT51JacRoyAAqFQ0qWy2\n",
       "uJvo1aTme3n+9F/stppdhUTOG3sqkDjSIVMgNh6X4AYAAAMAAAMAAD7r/ESzk/w61zYSH19VGBAO\n",
       "5j+c+qrbVucf/7QVEGBT8m8MpNcAxQLvNin2/4MCUnnCOZ83YD/r04ZFGkYJwzmNt1sNjVmdtDrz\n",
       "z59J4TeNJSWpNQ2wl+LYHJXGasalKilgb3nsMhjIlMQQ+qGOKZkoSYOMRdP8dMNoiLpjFynh7m2Q\n",
       "b5SJqWL0O8Izkn3pPhB2qnZCY9oR26ENe7xw11b9d/9tbbtM/NLZ7gCwKWBp/KQVFm/WM05F2bwb\n",
       "ovSAzhBn+iJFoS/Szk5zV3OAMKmVUWQiAFczzFVv3XJ0EXdULlQHbUwxu3Eh9rrCoLvmhYSNFGTg\n",
       "z2aNVwsvNsCsrVmgokUlz4BLAQok2psEpa4IUVtp+BXWhO/fTUcnIJ+M+dl3xD9ixzceNsyysNJn\n",
       "5RBrD8+9osv1NpEaGK9+CiFZNxzRfiDPCVoWJ0cdhxyzUCPwdOHlwwOE+6M7Oyn4rdPY3qeoVVOq\n",
       "8YTqOyCCReohFGSLVlt3W602PvOefVUYvZ5cjYjgBH83/3Irto9KWaqxa4uBVr351XByzfVnXfT3\n",
       "Q+4acI+0LWc6AJ6qu8fuzDRHZoVimMj3QKFX4Zsl4VwFVidy0nfzUzDHBtdekZUT44LhHX9LF0ob\n",
       "dpz6OgEeNQ/ot7AWEHC3GsTvfmgg6r2sG8jgTpRAR8bGuEpo9o3nZ9WIN5yUyopFpyxSwmSCq8hd\n",
       "jncHH0mEi5CkEDZqc5FX3QLPCaIAAAMAADUhAAABY0GaIWxBL/61KoAO64s0A+Tf7r/bd3TSunMq\n",
       "S7HSB9vhMyu70bDi+L5CJ7nMmfEgMKm0Yr8HB3joLNts4oUWE6LZhU8yg9SRCRPrVNyIk2vIafyi\n",
       "zhAVjAlPBYkbgy5wdAedzMT7XkyfbZWOr6bSffJ5Dd7Lk+M+kol6w2/BypARDZU8fkS8FrOZrNiI\n",
       "WKjJdcGWTsWLQctVDUKI/b1cbcahhCkU5IBug0KSc52FKgeCGta5QZ2aZlnRJmEyWZBlTbtDwxnm\n",
       "8AHXd6KCV9rcMDXUR9Lj5o/+6fn6ZLH5x9yoc4RPu7rCRX3ge0lcCx/SQf2gdYW8Mjua7X5ZSPrh\n",
       "GA66Xk/wBa2DiBsEwlR9kQucFHkBv2lLo/SA7xVjAsQN3Y5NSUbGfAjqdHX6xCWQ184ZzY5jXr6+\n",
       "yIec+5EQIDrlboWmDwoSxRqUe5LYE5ZOMeDULMkUH7X88F0usww1iaJ1j4AAAAE+QZpCPCGTKYQT\n",
       "//61KoAAAgDhroBanCTnJOxDyaV73SWhClMwYXtny3XWlczI5xY7f8/RMbZciLpf9vHPeKn6e5bb\n",
       "fCpcw9drFTHws1yhjoo0Mz43VjBdJjuYeJ6/AR7bRqrXX/1u/UB6KxhpRCUng+jgEsDBJMsFmTp2\n",
       "eltdfXXp6iWkhIAnOOp8nm6WR/FY0mul8eyn+Dtd1Tn2jVP1mzYY04smmsC2ZgBzPPVcaSfIzNfU\n",
       "2INtGRl7XdqJAzegBgY2lGFYOuYxwzOoYvpYLWr1RlzAgt73+l7oUWJ+tXdAWgB/KF6+1x7haI97\n",
       "z+iHF5YWuNleSw0OMxnRJ132UDnvUOkBk5dN32Au35N69luFIgZQhbl+iRoIBcKKLd2gSS2ACG7u\n",
       "43o0CzuP0tMisS5spI2+tNlIhV1t2fezAAAC2kGaZUnhDyZTAgn//rUqgAAAz23XACCrzObMV1/j\n",
       "2m30mYOhGF6QmpDCMow8YVR+G6GXrnpIrsPnFl1vzfoD2gVxFUvjnPhRHlvGljHWLPW7BJfZZE2R\n",
       "+3ylQtGnN+14/lsAJ5Gt2GiEo4xVnkvCuPdzJdjZYZkzv0Z6rwoQIx8MljqAdJhdRwSsjOGKWPyj\n",
       "+tG7UCa5U0AmoBgRguFfxRGQRCzsdz1ODisjEeDvSpR/+m0s3t2WqsMgU7sz6ycTi4cTajmyfO/c\n",
       "zvptpbeYFe4REi1wIUgmdC5TnvLFLFemdmra1thpLOco/Dgm5GPpRIRfLdZQEDyXgydX5mawpGI6\n",
       "+sJstZLEnh2iAddbse9PfWSZnTUUzzVomj45yj70eIfNnD1Za3O6B6gMmD4thC0dgf9FscjiQ9be\n",
       "DI9GuvkUtA0xYUKoVlkuM3iFFvMeGHe72iEYTYS53UY8pmADpAAHTqrXi775GddkB9Tjc13qRxk0\n",
       "AxeeCA9VvD0pA6vUrJwSNxLURQUpsKdvnsQSzyb5W7KWQvZhrWBbQ/pA/BOlSOkjMAerqHwl6GtP\n",
       "j3lcNnGkYITZEQl/tTfcIdykxp541PS7jQLz/IDHTwm5AiR81rH/Hkj6lpi6OP81hkuQpJdfmMei\n",
       "2N9cnjXKA2c1n4BHHsqD0FxfpIw2KJ9m+CAFijtId80RQ5NCqcE1wvgrQDKq1keAAmsqaLflSL0E\n",
       "c4TySRUAthszR+OgQl9QJunMUr6DgVRvO29ofoCDnEpik/0gcYzDwZvEd5ifd2cnoSZ/R/9kAY7i\n",
       "4xgw1702BV2KWRFo+WSVp18nHXo7LdRmSBkbeoO8PCA5v632DLFsrUqoLxAOwuQSmXzO9c7zkd23\n",
       "X52FXD5RFb+nkOYUHE29ao495023OIeS2LDMLpz21w1gvNAI6QuBmyFMW79/PoPZt7DbKgRGBs7X\n",
       "j1rSNRm5oRfPpk6Whs77oMAAAABBQZ6DRRE8EP8AAAMCfEZ1+pDv9LSuSShZ7k7+tJ+NYWAAAKce\n",
       "auvV84ASo29kfINH/bD+ELN7gidzE8n1b40/P8EAAAA9AZ6kakP/AAAFQR+CQ62/wTxstfy/1iaY\n",
       "YeFAADhUwTye3iQAS5Yn8B1Hxvym3bYnyh65fzhhd7mFXQgj4QAAAipBmqdJqEFomUwU8E///rUq\n",
       "gAAAUoxjCAFpPBrfqC88av/j/pnIxF9VZ/KfwROidyFQqtxSSzoJC7wB4vhLH6JeFVYo87xBPK7t\n",
       "jF2A3NDM/p4G5DxKYPocbKGJv9NJpOuZagO8BDQ53E2XfoAYe8AuA+h2et2CS+yyJrDjwqU4YKO7\n",
       "Y7BmBFZ3LJdaK57Q61hNRDhJDfJtdIc0/AWFANols2tlZM8hSG4+uLR+7JqzAwTJUk1NguOOU+Jn\n",
       "Pg3G/68u27kOvw4GJhg6RdeM+bYzoX2mUraVadBfxjbY7Yt7/xZeRo+juxZTqCjBEZiceik/Gq2W\n",
       "hOOpm7CSVkWY1wLz4v7dci2/JC39P5+juDcFAXoqviZWzpQPx6+koIhEhIqKZ10qpp3AV4Bd+vBZ\n",
       "zmCOvWuG7lyV5YxSALf2X3CWrpHLDDPtFE1gV9ZxouMfeCUBp4twPh/vFrIrfM07ifEcKapy2f2m\n",
       "DlII3NVcANTKNGZc0p1sFonyOtEtIAAwy8JdzBn6Rn75IJjbC/BlhM2zjN5IO6IPQ2rfMK6xlW9E\n",
       "Mgpm2el/5NSz1gYTXGH7LKFbAhAmZZI0Ierx3MThCRzSypUY+2CsuU+UyEH6l1jhQytyv6/BXlf9\n",
       "cpzILxk2VkpqHhCxDPuB4H/AeHpfAUNgbtN5KlDS3kFPMRwMw/wfDHBYCZ8dkMfJPKXRXA/P0Zqb\n",
       "YMoGSipZixehmbRiLyEI1s90549Wy/ihBwAAADMBnsZqQ/8AAAWJdOwjBg5ohnfVm9AkL46Wulio\n",
       "JPAAAR8E2eYt/iIARlXnDgimDLwwcEEAAAIxQZrJSeEKUmUwUsE//rUqgAAADZbdcAQredgm+qxa\n",
       "2D1fiaWuADCC7uVrI70vOe/IfGvhUVjO9wK7phLiTFencpXwa+JL3rGHKarAt+hUJ6echZ1ZyqmG\n",
       "lVQv3EwZRqvT33eOw0NFJDru/B2h/O66z/vJqcPp+s/Iw4xP5uKsTAQd/Wua9dlpaQ3Nk972gHDZ\n",
       "063/JC7OMV/4v0ohnByVv9iAUK8qUtQpo3n7IwxmtC458LvH3NVVp9czt14XLSvyVjlDtepTR9iG\n",
       "GUEpAU7JgL8abRgZA9u3ZkF7WRjV1/v9KY4sq4D65/VFXzibklk0SlAQzMX8qYlnTzgdCkq/IyxT\n",
       "KF7Lvvis9lfiKNaCH1+fz4rApI4K5yRkodxAKPpPBTVLwlO7GyBriuSf0h0KO0x3MY0Hgq/2kJLk\n",
       "b/Avzegoyym4ISDAlYRSXYxW6+wEpj6Imee2mVcdA5S/u9s+0NFS5ZZuYgebusvJL4VVtbRQlgq+\n",
       "OEhX5tHzxRhpsbXWgH/i2obD6ltwk0wkAVnwZ7zeAfxSIiTwvyr/pfZTInob8Htw5YFyKcfTxYHu\n",
       "0LRucPnASmkkkovG7SVbFZGZEgpEFF/UqDigoEhSrDVEdu4GheFzVZcwV7D2lpttIBbevGaBxeSY\n",
       "Fkp1GZrDmJK7muB+oncCKxcvROxokRNsi3XQh0lHs48hIhFnOm/XXumkeJS3D8eFv9zDMVyOBjJS\n",
       "eryEAMStHCq8wlHSj0eAkpDAAAAANgGe6GpD/wAABTLCgCJntEQ9ymgzDKyOwwVa8Ar9pkY11+nU\n",
       "U35SAMkAxjN3hNEueeWAVelZQAAAAtNBmuxJ4Q6JlMCCf/61KoAAAAXcq2wRilmc5VOraZ/5/8Qt\n",
       "KORzHfAHVf8/Q9qvAR3jGAqleP9nx44/4cXwPQa38PFVlwu1XcSaPDD4Az1LTVP7XMZ49cctLW6S\n",
       "RXljo8LLvDlTHT+rlgIt3/KeXoEZIlZNMq6LQPJ8iSjvgXNTihJw5+jal3QAHjlYqN8Bv+EscaAO\n",
       "bzvA91rOb2kAkdyUrrvW86QhX/tzmUEK2NwNVJ4SW+x3shNhuGhccGDcqf3ep/uM568J6qVd/e4S\n",
       "eK8ZlxQeshcPjKL+aglhObtaPG9JLBZ0zy+sQBpL/RjbWAoD7tp0fxESAYOXBnMnU0FoWEeLMSYb\n",
       "jNCUbO2GutjzxrcrqcUpGcAclqfXkMrW5/b+5XPs0BY6TAI9PaTJm3IdCIDD4Xrrlu92USznrJwT\n",
       "BHcqQfwqS7+0HZQY0ZONhMS2QmWAOlijLDoYm1NPBT6+u33XaSEF5EbWB/5J2MTgcXurytD63gva\n",
       "Uctg5KvJ8wMlHUMECLnFJWjss3YxoCmv9T6a1GlJ1HPU23Sdit6OTrXs7cM7ymHvDoFrCvY3dBoi\n",
       "DFMLIZVxIHu5dde/qrKeON6lxA70A318ye0wCHDz39X0nlKvxi/mN5FhBfCuP10xLlBtYdUNVKLw\n",
       "NQGXXo6p8eA2ohz3QapIlYIHTY0egLwW3Nd/IHCPFjjtGKWPnPjBq3oT8sdFRYCLKZFsFqFjGpNe\n",
       "Bf9C3OAnoOeOSL6TngamC8XFD4ue2pPwDde+CfvG+ZRNHVLiCQ6t7Fh/pYNa6jEFAhePxHfUqdRF\n",
       "fQSZ01oINcglYkIqTdyJBpNXB9b2cyWiMcDxTtCAYHZvvpFF+Klc/3SQzq81Y7/g6uu0MpQT4j2C\n",
       "P2+/5Ni7v5gNCfqVIIpcYpXq5NMkvJc+MhTN0NQvdE38OI66HFz8KBxNMwlycv+QG5h2lwzJyYxs\n",
       "LjCd6NkAAAAvQZ8KRRU8EP8AAAMCVNyFA4jNZXBfjTxgQAmr57aVUapEEkXU/aEAXwpMJZuQcLgA\n",
       "AAAwAZ8rakP/AAAFQR97U+erbtjLHb4AS1dgkM5HwtIQgsafAA4GHf4KAG5JZxxdBjLwAAADW0Gb\n",
       "MEmoQWiZTAgn//61KoAAAZThv/dxqh73n8wuLywtcaiBjSf9x/4z+vj4jUdibQ/xP9K6kiYXubmw\n",
       "m4LV6wsNkMC6eFLjH3M1dd6K8MpPiKGsSZV7PSgmXs5B5o7FHBCPfpfsrKqL/n6JMwFgGaCRb9tf\n",
       "GMBJGm2XOwu27PJWK+hM/4RalZW35ZzmkC9achn/JO13wlNYujygtymMnzXq8d48MuneL2pkPHyV\n",
       "M7Oc+BvxJ1HxBlLWI1/AgeiIrm6+Kuo++84tTuOJI5oK0GOB2bzNgosWj4K0CFPConi4sHzTxjJG\n",
       "m/842B8K6RktkqDYgw7FlHk8KU5FLNuGe1C0nsZbOlp8F7jnlawFGImC3MXqtWrXobrEPww6syCC\n",
       "DIA0GrfixfOUG5xzn+5SPw666NIJ3jny788xNwOp/3QBKVju5OHmW+mhO6wbpVm0ufVMEwkORo09\n",
       "p/ZRz8Cogmm2SkAxbzpuLFALoNqFn7Dx8RwKQJGCQjySlHkMt+kh9SGOF54ZJxqamQYVtpIA30EK\n",
       "PvDBEdc3Io0Xd0OnY9VVkyY/9mtHsiNVKmT6pkxnmKYTmAudht3yy4zDQfdVRfvhvhgVVP9KaSuw\n",
       "2w5WkueaQ1DkrxFkov4f+gR2SbIeVJWu07QNDL0hHNlIcdOE9Tgk8bdJB+71VCorl+cWLFAhSi/5\n",
       "IXwLpDwmtlNs9hL+3oOYZI2ABw0lQIr32nGodScJ2dkYNL/el1hj7EkgzgkCjRNgq0QAEEu5ON1X\n",
       "KpLf8uQC4ImwSXVwYWEgnMGU8hPYf6B/pPJA2VoBTn4sc3X04eAO5wB9GxSgTkGWizZ82n40q4d/\n",
       "XkzSNLGPbvnUzd5sF3BMCBXeAU38RL/1kwOK5S76ZFnkZb360y6YPfurK1kpqYi4y1GCQqJdNCqu\n",
       "jGBYkLk6qN5YGNPUAWBhOnqeHFV20Z37sRestrVrshhNuKS3OsatXat/lekeJy+5wwbKQP78xyNh\n",
       "o+MhbjxXengwOd6XUfFZaPLQzzO+ETeeXsjJ4WbYV8zUAzeRq/auBqY06tgaW7jSbHpz6i6nwhIk\n",
       "0eSApdhM/7wmLkT66DPZi740tX2YeuPM2IXJIH6kErbrT4jQES02rlF/I55lMZgWM9rcZSdys6/o\n",
       "JmEAAAA9QZ9ORREsEP8AAAMCWtsifivSF5zCA1bW/GZTS+HAAuUrFPNkQBAMnkh58hJez/89NtZW\n",
       "68EdA2xko5gP8QAAAB4Bn210Q/8AAAVAW/oDmiCFxdB1JQICzNc24n/p66sAAABAAZ9vakP/AAAF\n",
       "QR97IV6clsDQ5gCPEJZoBevunpfGJ6PYveD3DUyVroSpAznRMdXK6ZDquYdG3gNzgsqqL6EB/gAA\n",
       "Av5Bm3NJqEFsmUwIJ//+tSqAAaDq8oJHEi4BpEWiB56O/hBLzCXmN3vE0uQK6c1IMXrRQ5UDBudL\n",
       "KHAUAHEhpRMhHvomNRHOwkYPrPdzAxwPtX38o+OqQEXzMCPNLsH6J+ZaYiL5ye42i6Rdl2X96GQX\n",
       "tAkmN7JGG7DsXYWOvMPZYnlMIRTGhwQw1zd38wFL1Za/FIBoHhJzuPnCilUFgEl4/eFaSiquKuYh\n",
       "A1DSePfc4Hun77ijoOaN/QLa6I7FuuE4dj0DVvdI5H0t67aKf/v2BlZ8kdoetkOoDaVcSXntW5ut\n",
       "KH7Q5IRh5JXoZnIJnoJxuYtGjwg6joZFvHf6EI4cDn7oF/KmSmdVtUQzE8hIuvky38VPIH6nJUQd\n",
       "kzuP71UkFFVgQ+vPOTK1V+W8SsbaUap03Gn8no5t7sa0Calix8589qS/ddcx92dGZtIjgWujrbdU\n",
       "fu8PYXIx6ABN3guJH7GfDLPdFmBuUDB1802JWo1bH8+dyZwxDERewDY9qPUeqN7vEMtKBVgYe3La\n",
       "P3NVz5ECts0G7XYWFHKSU+fgj6c1z7CKO7tcSVcehRn9sE0kMABTd99DyNtBEz7q9dEKr2KQaDfg\n",
       "84aP0/TCvWLUMlGdva4OR6sp3cTJwr28QX0EN9VDfPmN4+RRMsK60REoDogjPnlJhWy3WgYToSZ6\n",
       "FBbotN/suLco9PdbuzVQyWAkorP0FZOzq4AmbZtlCJ+aORaub2QAuu+7kc1ulMrLuBiQLurz88L3\n",
       "xbIxE1NiCSaIExZQ4C2Pexbe4jcl6T5/nt0N2THjCtmeGEsKeuxgkFQGM8wwcwcCHpKoMHJEPWKY\n",
       "ZDrkWjj2YirpMtHtx3RtlRUFbSW4HqrMen9WwvtKQVYhV9sEVHuEkyfXfnGLMHf75RU7oAhDx8Iy\n",
       "ncWwyBSaSj5WXZ1IyjHAgwPMw+IIIH99YtadLQuRzi/mlBcrVMJplTykqBWtP6yqVCpBe9sERfNi\n",
       "R9TUj4moM/+c2klEKILcHqBvje38i8cUcM+AAAAAR0GfkUUVLBD/AAADAlrbIowjpx+1zkQbbfWg\n",
       "pHjIAOLbZJCZgd2PG6c/xrm2cw88JR4xrprltNTHGcDbXDthM0ADyqk2QKFTAAAATQGfsmpD/wAA\n",
       "BUEfe5EjLyg+j4Ba7spCkgmwb52Un1/cQ9xPGWpxVPrBZCLtoeSKwQo/oAjd4qGOaX9OANz78VAK\n",
       "9pb2lMHplxCKsD5gAAADJUGbtkmoQWyZTAgn//61KoACcO1T8AHwGwITxNWHv/4hNIcZe9ueYupG\n",
       "iYxDMna8TY6HUSvMKgVZLkHkRTeJ64UsyGSApbjtRJHpp2gmP6356EWgJJvTfLhsyR9oWBaJTqTP\n",
       "8pdZCHptPe3N4nPeKX+y8qpA/8nqvJ9wddmqXBVcFPCKaYjsXdF76Xlp3XZXFgq/OOr+NJLzmuyi\n",
       "SEotTYI60H+YIJIu5NGgsFzGijYyQmFlWNaU1b5avl5kpcGN5OdXa/aODimTARFnC5/PrHPC3vsX\n",
       "YHLGT6tA5QoCkehBXHQn0sCriWlOdR/o+1TrRQo+GXXDvOB61ygCSsq658YOg6oRWBxwtveYLVFC\n",
       "CDFKBXHBCfOoogYi4nnOAIoM6ZuMyapm9qZAPTh7K26yqBAXS8ZqKHJ8kUccheRhZlMytanHJTZ8\n",
       "dpy75WU64tqmNOZ+74p0Jrjqo7MxNRsanxKjOImjZc+pBcg+VV658azmhMyI31tx8Jt98ekfPZ3f\n",
       "J9auePXR8ZMA9xDSKK7CSLMWd6YLHMEFxqzyG50c+fXMHJaSTkcG8uas9IBFqc3oiO0tbcpO+aP1\n",
       "L0KN4IK9yccjGUVf3wo5UFm1rSFUchwAHeaoFIgLMKrIdNvjTi8QYAkteANvmI1H1i4WaMPRROnV\n",
       "Avrvt2+HIx9igrYXsQGX8i/8nqWh3col53jjxG2Gkn68IUqL5cjE8sFoe4AR2e+3WMK6wrSkrfU/\n",
       "f+rQjbiYy/K/FK5SHmULEVfMu1iakJ/7MQFDHooOrbzMN0s4GB1QROHg2aENlU724t9goPlRWt3S\n",
       "YrybmkflplFzwqmpyZ6pg2fbY1NkkvY9XVcpGyOm+zM8ZTIzrGCIDYkBRWZsdEiJSW7B4KAa6ICT\n",
       "Vz2Wj2Uongrm7gDmFbhpD9aNy4yNUlSLphQldKInHV7Rr0JARhzKIAV0DjTdUggWYySuiFiw9e5Q\n",
       "XYU7aFBU1cr9fvlviL0mibFcYySX52z8/MXaqiGK/1tuxCmYHooUQK/5jwn++LWIMrAbQnJXv4zC\n",
       "jG0hf35wfXcIef+23AvaTGm/oOkjCRMAAABSQZ/URRUsEP8AAFz+fYmiGZ6n5qFvlha1BgAPr2Sn\n",
       "GBVTKv0v38I7jNd/n3IY2Uwno817WP2gcjpI67rhM7eANM4QGbXsYW9iJ3H205E2s9ArYQAAAEAB\n",
       "n/VqQ/8AAAVBH39V6u439ERDmvpy6bSbbQF4ktfYx1AFT1X9VL3O8L2oCF906EWYgljYTd1xlsJl\n",
       "qQ0zsCggAAADAUGb+kmoQWyZTAgn//61KoAABvNslAA5m86ak36fLa53/4RP1w03peO4tjjtLLOI\n",
       "MulxUPmFSJCROl9Fmmi994Pl74iBThpcTZ9bfQDc/b5FsMCzJoNSssEWyiHzAr/ny8vCMjTcoCXg\n",
       "IyWlpvwyXZQKcNwq2wH+NyZqRNCLQmNIcP1IT7ZRy6GzzbAHvRMknQrJnWzwmQ1axJdiLkFgfpfC\n",
       "ZZey1a4Eo5gGBt6bgU4K3hbAo7HVIpGVkLnehKSX46gx2a4zjhKvxcO36szB6Pc6PsoRmKtUdNnb\n",
       "3ya0tH/+sIzYOScRc+rMZRaPUneWof2iZIAL6O8dBb4/Z9kBMnVjRRzj0qtHnGHxHXCuz6Sz0PPL\n",
       "V6wfIJn8Xb5rtwkrCpk7ZbRyO5kClCqDASifnothfYlQjoigKYr20jXd+FZpoPHZeG8u6Pg+JhnQ\n",
       "BjWPlUUlmfB5KMi5n75/NkDMPHI16xlReVPIuKroY7Y6eDRwh2JSCR+Vsrzm3nW7yXjqBUHmiR3E\n",
       "QWTpw1iO5pfHm9wB1FuW/w+hHJPcUeKHHdKy8jz1JvhlHzZ8g2YqHMLWN1htdy/yOEjlO91mxb1c\n",
       "46vSM5atTM0QpEw6qU8kaH8YXREoswj5kMuJraQ5Y3y87JsNZ9upLIKVMXyC0mllllS4UOhzSqS5\n",
       "tRpyO57KYT7zebYXy/l6hVadT1UW5kQ+xu3UvkBBkvVEgvwbiAF9vPMt+AFyUX3AV0RiXQa36lIf\n",
       "COAoxwk3+uY02f3nkBn/428p35FhBaScwkWV9UspwovGWGczk8kYfdS1sI7wlDpRijYigM+Vk4A4\n",
       "U7JSpg8GBWxakmeIb/eGzsn+kUn3ejGDsXtyaIbU3IZz2WaoW/SeHOSaegNm0KEMnjVedk3NJlTa\n",
       "gNKeBbemZQfOBxgTamoGpoUvx/COVVIEFshtVioV+ntzAAA7NQjs9Iz+4WJUMcA54dUJgjrNG8+n\n",
       "pmJxgBa3EQmNaKwnpyvBvdwdA3HL4krYbCBcEFJRaczAMYXQH+EAAAAzQZ4YRRUsEP8AAAiq2urP\n",
       "7W20R64R9Tjwz7Fd/m0Da8QVQ8ysvPlQAn1vLTYIcPFugAZ9AAAATwGeN3RD/wAABUBcFvqz/jhj\n",
       "iAG2RErpuZc18fzJ5wi8AvK11EYtLPKly/RfrqGxGoE04J8iozWERCLTQXHvXOZCCz4T4Us4qzc3\n",
       "VS9wC7gAAAA8AZ45akP/AAATWDW5yUzqLF6UveIpavUK4SzoAHCLuriAFT5v2LhD6Va/qFBrvL+k\n",
       "WClJI4hyMoIBABJxAAACn0GaPUmoQWyZTAgn//61KoACc9/QhNy1c4RDalZf+QMChvUiu5yQYR79\n",
       "HwbM3tJ0sXxsnmBVgmVeTxQ91VugxT3dSE3W50evADYbTTfz+mM6T+0LAtEmM8zvozLUpLqTxDxj\n",
       "Z6IMvg1TJIo1oLWrDHlx1Vzvp0I7FxkW6T9GOWPQdhR6flbHCjL4vwQ1aw6Za+zeWHxaRSo78TlR\n",
       "uXX/AnBzdQBR40/nez5fpvn5b5sMQc7lFnU+Z/g1G3yUtXmVK8qOhndEAd11et+hbNnGWrc/9jxN\n",
       "YVl6P4we8fG9fmfez1R2v8Qcpuu/xnYSJ/d4EWxLvdWeuVQy5rvtITUV0w5027R2FICx7h8/jHu9\n",
       "jWj5EphxqD+/03Zi/+J95Ox8ihwz1Uq8L4xv7IqNU+XhGyda1S4LjlOzej9Thw8cNPTIYGvc6wRv\n",
       "9/N3HH2rA+6aVBeRH2e4SOqYuIHplJKzhWvjGplNoDnznnsvgCcucOki0hRxxRFIiGyGACVgXWuX\n",
       "5JNWj0XGQO2AbuJdCloTa+8JwzVihDV5XClj1gYkZs6JxhkacgFnDhLB+xag9zJf4ob/80fSmIq4\n",
       "KV7vrzA3W5h4Td/effItEZHoZGIoyZz58rTfvX33yOVDgf7Er91wohCMdj0l0lAKH0kiI1tRJeWf\n",
       "BsfuLp978EC5bRagGt7ocx1dAQEpxZA58jhZUkoBq00Uq3laetbtwrWVwUz54AzQsGxfh6EgOPlW\n",
       "HXz1ifhvp+4ekv2PzTK5eM64iXQPbm+2IUfVZwolBndCku+WzFJODzqz6YvStDbJk2ZWsOCRojU+\n",
       "aOKvyxac+84//6a7cEFwjeZgSKcuShlFTau1ji3flr8AB96Hg5Rr4CUoWVS5d19RD7gsiHV9WKvB\n",
       "0MGAAAAAREGeW0UVLBD/AAA19/fbYApGM8/mvWaBXo4h2Wxi9iVwBC+Cv/yJACLaxRVkrVooQQ9Q\n",
       "Cc6XnaTBjwBtYsfUP+hSgDxhAAAAOwGefGpD/wAAdrshoRoVo3kGfP9F9MK7kY0w5dG2bwCAN/oO\n",
       "h7C8dAGRP4UcHLdd6CCIacYr4RXhALSBAAAFHkGaYEmoQWyZTAgl//61KoACQ9/ghEwlczQeQj54\n",
       "w/fga6iXa39a/JcHMwqatMnxG5Yv++izx9OVu34j3TDU3+Q/umBGYDBW4jtkzya0xh4NSsRp+LO0\n",
       "sSnQ6pn39Uy7eDJjB9sRyUqegv5ciI0ujqqH7NQoSpSZE2jR/eUo1DAjypQ4SN9j3y+IpdC4YZzF\n",
       "GadJ/N3dRkWkFWggZBwmovZfJ208hSrt8abQrxDvv5YUQT7ImSp/rtEwLsZYe4tx96FmCwTRd3B8\n",
       "V8+KOYx9oad6eE7BhV4UmpsL2PfS5crqJ3I59kb8+0VM2/qRs/KH0TDlRh2Oy0ZfqZSv/+HG6jKY\n",
       "Flgk+RsecOSYkSFlqoy+Ao6Se0i8W07WYsNfR7KnBjTO+QPnOwAD1yPxoqRt9qjN3/otezbn0QQe\n",
       "7ZeskC56eSAQa699kYrL2q3m2Lo/WSLxRDomfX3CdU/VZ7n5SotEsxGDsRCm8gYz+MVa+59Bm7XX\n",
       "DkzQin/txXivJVZSWcuMlciaS2n3HywzTC3XyrcLj64HCZl16geJ0zq4AjYC1tYJG9dxXJgTu2Tr\n",
       "vdiovVQemJcT2srXXUbEeoG0nZUqdAFkIASiikd943CtK6hGO8EKBJF46ves8wzMPjNzNQqdShbF\n",
       "QazkT9lDrnQwsKvGh8YRKgDN9mRfzOE5WCl1XUwfMUfaUuZhTE02tVQg/zD6jBNcMkmSnxNpfoW6\n",
       "xNsDffy3yJjjbPIG/Mf7m2/J+kZIsAHqYfCV8u45H+ZINAZ8Xzc/I+KBCNGdu3Y2+ZLXgFwsfBvl\n",
       "ims7GgnxqDf9Q9WsHXacrnCShTIz1oTXtZkayMjT3mxZQC0RZjal7v7GXRSEf1md2NQhgFD6Twbg\n",
       "wf7PQTk83RYSz89B6j6iVNJG0RtA4LU0ut9W2hxKfxxMv3neVIEcKazSB7r9Xf6triTJy5p7N/6l\n",
       "Q9l46GYK5vnYpYsjkCgH6h7XRE5qaFl4ev93jxca1+aSqVlnresncxR/DQ80UBVNumue7yZyuIUz\n",
       "OwkOzNORsv9u4szN3opWQlyJccED9MuLmXE0ILN/aFPD/m2fIQJ1KiauL5cWP7r/7kHvgbZkE4Op\n",
       "84xaTJwWQ/faYXIG0NG3O+6pEVNHi2pqI8NyALbGaXG+GcG7mBtBX6Z4Ts6voZwshztr/0f4Atri\n",
       "HWIRvF64+i/jUuWZm3qOlYle2koc2Wc+1inbU6DgbUPbUhYdfH2Kir3DUkCOY+MJBsDlj8dS9kGI\n",
       "gxv5NVkbA1dwCr7KB2MGS/9yDN183EWIoiSPrTypjWzfboLt41zaBFOwdnYR/P4+uXYjnGww7CbA\n",
       "eYgCpIHwjsOykg8Z/rR/4DF3xSjRR+NB6FAtmWnWGDBMoWYbgv1EJKySsHl9pxos0iywKv+1XQfV\n",
       "pRx8wMMb68YzTkG/9N9+2jW+H0k8EgaIHwNJglJ8b1CczGj2vLqaNepTCFjeDwEMh7qScPOH+Dwt\n",
       "EBVeYw21qnEFs9gLGLuwJwex8GzcDcFakEQ4QubnVT2xG//BjUz4buP3nm9eEE8uQiTdu1I4tip9\n",
       "ZiCsG8/tRBUvYWvLhkTzxRDiTyPBHCjNBKtsHa1y1vvTRJMiFKIG3T+gsWNFbFxKH+VzeXNG7jqA\n",
       "wVVQnyGfg+oaXzlEAZjuo1V9tfKnmEz0+CMsaxcE+kI4ox1eKCcyu1+OhkcPdGgUm7rPmZIQERfh\n",
       "rXHMh5j7Uu7uhQAkWgR8hzpXdA5mwJDnwAe0AAAAWEGenkUVLBD/AAJKtrqu11ggpSpjIMAWH9Ze\n",
       "qNaU6Wf9g424gKEjs3DS/UoSPaEPoJsHa2OGNd84RTuErOdYQZ3lfYvhj/Qxw4AaC4345yNPv0wG\n",
       "jXgACZgAAABIAZ6/akP/AAUdHzUBO3K6WSm1kycrmop1RohVnCsU01iADaQ57d7I79gJf2d649+I\n",
       "qncH2+e32D/RqAOf0iEd7AWal07gAD0hAAACDUGaokmoQWyZTBRMEv/+tSqAAoXDmr249qDAF+cc\n",
       "zNUdkrDMjeSkjmVKOQXg0w/xY5liCUYSGuhP9i0wFRXAR6uwA+Ghu7G1hjnxbyVFcqFLvo5FsY6U\n",
       "VHcL3M7lBM55rdhZvXQWa2BkJcarFrxuhcxrfG0qyTUCpjii2mnIqJ/fJe/OnV9EZhgDXV1JiqnE\n",
       "3L+6K7RTesPO5P6ofdOTlyrVObQlGQpyh6gfKdxBZkZzQsWDwzsTdUcJjKnSo2fOyxwFLCc+Cy7D\n",
       "73zvqwANdkEw3Fo4zNfwQfH8Pz4brvB7wXR87cicAkb0UXFlgnM6QcBONE1EqhijLWoQ2idKpIk4\n",
       "1JopK4Rx8jxB7oXIFNuil7auB89HgGNEC92eyHmQbvkCeWAtbZuJcov8mFJ+WR/lzTAvq01HaA7L\n",
       "+oeQ8ch9ZryNSCfPBPOIwPKPLxyrMP9aVxayc9vBwD6SfZ+qUx64fPiqfrDkz3KU8pauJ/DurxUj\n",
       "1yRFPdcvVwFczBytR0S7rzSCLAq4A/iiIGi/iNoOTgK+nAZpju0mIDdHSjcvczfAIubD0Og18hXu\n",
       "BbFNZpihLeIkDq3LkNyj2oFFuIWkEnhCza2X2Yg7SHG6ZBpekL/Kvb3FEbxdgYJptouXSE+/KrN1\n",
       "B9iymlNX5ULzerppT8RuqzcFhMailLbCHexwll+yaerbv1eJ9HABswAAADcBnsFqQ/8ABufHk11x\n",
       "NHdHQZsf2mrwC1IiV15HabtdFR4xpJStDThqvQIG7ClIqAAAbgB0AALvAAABBEGaw0nhClJlMCCX\n",
       "//61KoACglCuAAzRjTihZjztDTNq530oLkoJzeO0entTAfJ08W0y/OOfcKPlEazf73x+h2uYOvjm\n",
       "sZz5T+J4QqWy2LxULJPyfG5oDCfR8foTDxj41xQLfnKc6OM3W5H5idIFwsgRg0Y0lh/to93gNPC8\n",
       "CeqqBkenfumnLGZNL/U+/rken3+sXxRXZRT4tDdHzo14XGPCbaKcEIpfaCbOwINAnqNfJC9Q871j\n",
       "BXwGWV0T+oPme7jCOAHDVkygVthowTrmMUAJ7jVuAyJAztIiqaTFuqf99zaIRtX568JWnvQRr75q\n",
       "A0IwhCCiQkDQs5WaNuu9RmNKsgI+AAAB10Ga5UnhDomUwU0TBL/+tSqAAoJOlAAVP2Im7G2nk1rw\n",
       "1x/l89eVdLwfW9a6xvY+KpocjbAexm3U/DRDE0uw7i6HoQu9B8MpHYAmSf5tccp3flBeMHUY5W/h\n",
       "NVdx6b+THm3Pb7wLQa3tCa/Jgq/c+t1sCFI7JwEe9m3N2d5kAlqTouygzy1GxtTUBCUY1BZ0wyau\n",
       "ZVJAp1MGKwcBwPcFooNSWTmxWHqkHk4XcZwa1puI3iuEojcPleD5wfOt57KMtqffnF1EQVvsfWXd\n",
       "8n2B3kXAORyXKZULxH0u73nmYtZFtia2/k1u32LaN0q8YXzo+NdN2O509Ur1G46aDdeKQmtJRwde\n",
       "oqS+sC6JK7nt58g7ujxhxhYvYRf5/CD0SU+6JVAA2hkfhwEONC4vfgAFO9+KLCCTB5hG2DUzlPeu\n",
       "B+QUYKCfgtfxC7uiN5wIdFxAwBfBsckQlsWGPA2rn0cyirOLBS7NSAD2V4q1Bg7KOZaV8iLUIv0I\n",
       "rwkK/so8g1+KIokRlzhhs++Y5Zh3b43q5SM7Uf96ylfEUjaF91AImYE2GbpMXQ/Grk+DHsVus9Mn\n",
       "8LgKcahCSRiSJDA6DD2YKHLirUvLb2mGYDCnxhkqw9Vx3SMFQmAE3QAAADABnwRqQ/8ABr8zujA+\n",
       "NVi8E/eACaUECtj6w9d9mtZOyfAclo2L6qYA152GpNFAA1cAAAC/QZsGSeEPJlMCCf/+tSqAAmDl\n",
       "rxAEZbzsTknO563eijbauAThxgC4iljkg8w76HnJNftTesffgzzTkT9ceuNnvANPf39nX0/5oLPx\n",
       "EApdhleLUVMXSgjCltAAEv6x04vk1F96GE80iziwHJqZ4UBF1CZKoFiNlCkBM/d9TD9jVdVoPtTy\n",
       "fhLHZbOmcqNn4Dfz2qUlXKUlF5siOFEYGH4o0G88wBu0X/FySKGum+hnvef0czJecjMJ8391fTwA\n",
       "a0EAAALXQZsqSeEPJlMCCX/+tSqAAlDh5QAjFxyQXfNr++8dOlzK5b9+SvKB/wF7Btf2bT+UUDRh\n",
       "MouiY+IzqMVUSiw6Nh7KGOV23y0h2OJUWpOjdRryvv7cA5iA/DX1d4dpxlGvACfVYV5FgoeDGql7\n",
       "OUUD9xsieTtPy/qgCMj9MDgGAmHTahMMku6vBfjUOsEW7ZmNev3s8sD9tQKTzhSUhNgS2a7k6eRP\n",
       "6wB7JvnpgJ8aZ7aW6ICToOU5YDtGog5wDZdkhNb3LB/WG5/x1jlyy8n4diJOvuJ6FNIFuAOIGLsS\n",
       "qGVctzjkyHHwoNv0Wt23Hn3oxNXm30ANKYJ5OxF/CWpF2g2Adf6/0zaMoALmkobrq6ZVJOd/V+IU\n",
       "zIHHgBYRRbA6mbN2kPnmu7HZkKtmP5fugvIUs4bW+RpicVBOprLXionfOMREgBDmmskoakgnqPBL\n",
       "mE/t/1eq7I+lHszXo1oGA10hnodhXbtk4TMOvMJQVaMIbU4tUMpHG6vFG3bpIq+VWaIP7vqphF7w\n",
       "poP8IHiU3ZREMfFwNIoVt5UWslSmNicvTH16iNbJr9RFc6qC6ZFXu5gI/zzoxu5yW07aHVEN3qps\n",
       "1G6lg/xdloc4kd5F+MZkNTVkLZHHmYk4xuGXIvycsbMHC7HGQACpLk+vBj1B36clbRJ/DpihhHxu\n",
       "cfUfQuUjxi6Nezr8EnIPogdj7emE4zNMf4nAR+2tvhxoaj0yOcErHln80+8q9Gc1jD7tsgT46UyA\n",
       "QP0zCqpxzUkRbaqAE9djbRlpgdF1Qq0a2qO9thmn+V68VgeAubMhafhER/2tY3l2Xd8qXytwEs5T\n",
       "9dYGsXT+AkN5V5DEbZZrgWKtek9TKmS2HghNekwkt02zkaMX+iSODwJhOKjuKAYIye+tyD25AQ46\n",
       "dMy/Cqkh0fDMrkWElFzGtKzFPTgTkSHS4PPWuVfAVzcNKVllBr7ueeCvC90eiQAk4QAAAFBBn0hF\n",
       "ETwQ/wAC5/OmO+9hzXrAvlABA3oR1ZPdggG5oHyDX1RiIp8x8wBThNePqf22UVC5brSmOBt3RtJZ\n",
       "RLfgk3bjMALME91rVHjoAABWwAAAACYBn2d0Q/8ABm7o5DEOLzw+PgA+1CpZc4798R3+CGAg+u0G\n",
       "yoAMCAAAAB8Bn2lqQ/8ABh80u5/Pdej6mp9CykqOBmEBrQE2QBZxAAAC6UGba0moQWiZTAgl//61\n",
       "KoAA2mANP9rKAxjgBVHaL7dh7jQvH/Pi7WQoL9+ZJSJPazsKe4iIZlYukps9NSQ4rTOB3bO7Rnj0\n",
       "889IOkpLDabkJeeaxvQKXMf9OK4NC+O/7wZ28tl6PvayENyf49NSVTFB6O23JDbSd6H7BASLLpKy\n",
       "wqOWAVJIweM131XvIJr3OsM24/OAeWCfCSa0CL2T5V6YPoCsHazfTSTVPhjfT9pjIgAOisTBlbq9\n",
       "+WG8l53NEFoMIjqOiq9r6pMI209fiRc3lkaS8C7k/xf2fZ3zuT34ol50huqM+KECh0T/EUh0zTXh\n",
       "ha9PbcO8QaBFp1yVd+Ivr+4BTOoL2VYhgzxYXKZht5pj4xT5sg9ZXLzQoFxWZVfGlR8CwgvytPYf\n",
       "NI6gHjEj6u167+s3YcQCpmEMdCPUWNLa2P/9kOM0U+YYOWkC8qd7l0BgsSn0P4096xCzsREkZ8IB\n",
       "VG0gZVUGV1bIHFA8RqEQyfYa0JDJr+Ea/x72JZgJXyDrl2eLjOEkPOWQbiptGx+uJBWxpmswMtr+\n",
       "PpsYrJdz+w9SNxXpkpkM9IItdXR4lBQhSDx0AJizRykLd0KLYjCTNNFrfwO6nQ5aQKMevRm0d1/Q\n",
       "0t2hQDdONzuGd1e+FTcqlrcniFNny191SNMJzgwvrKbd9lDV+Bwm3xIOQCSNpj9NdyxgVT/9wm6O\n",
       "aqPe/ARVf45kUPh9gbeXDeuMH7HzeYYe2NU3/OfllxNDIV/VE9OG0PX8dXJK1cuyZ7ZE9BatT6Na\n",
       "Rk71WrHI+CsVGHjubxVSDbmYXxhEG4jGJmY+RyaQhO3P+J3KMp5ewfwzJU3AY024nUKKnQmxTHuQ\n",
       "SB93E3yNM0id4fpbGIkPQi3mNSGs4YwBKhfnNeczlRzZKJ5w3XFqiCj+iu+wAfZQYKj2TdAsCgcR\n",
       "oogfiguM5xzNjWMhn9ZgX4jbx/TYwQJAvA5aM+9Y96TxKHtd0oadDP5E7zRAF5AAAACzQZuMSeEK\n",
       "UmUwIJf//rUqgABW/HxmAey3JBeT3tQIOytNxCclCxARfOfG/4+JjpYuOS4ml9DNHz22Mjc2fS1A\n",
       "n41R8wgoR7e7QKJnkm6SK6SgDcPLbVDYKmORQiag7NnAElOrz+7zvrk/GhMdJuJGwaOfCwqGGtw6\n",
       "lNseTWpXfHmDYThGcWQ1ZcfbdF3PBJTIDtuzTA+cxKPV/3Ht5PsCZJNevwPgIF3YeV7+nQX7K1AA\n",
       "+YAAAAGZQZuuSeEOiZTBTRMEf/61KoAAVMpHIAcI5iMy+l41/AO7z9pzTkbsLnAyPvVpujJdGSeq\n",
       "Qhod7hLKdtc4Z+4H8TIyjQER9VcSaqeqxxjxzBwFwHUbb7OOob4OvJHhjsN23GsVlbFfYU7Pe15I\n",
       "dGoBHl5UmOARXoo/XW5u+Qzh0shg/TIa8pt46kSizWUfsgibTmIsXgBuE2oLIv6SV8r7O3GfBljD\n",
       "6Yd2HUCqre7vdvVpWucbWhDyWF4s0HLVbuypSon+gAgns/dTdLgjLSLvTYG7FR/lcQtYyjB4UmYQ\n",
       "B7Gtus489kBfq1tAXRHpgysTDiNwpxaj+u6l5hshT8mnr16KBcR+rAeEsxYohfFgeS2XLDAjY5qe\n",
       "rrwPFhJaZk1DZwpspE6GuYb9AbwAC3z+5Y2UA+PKiTMVYh1H9f45WzH3PXiYtNAlq+z9U2Rxb9kw\n",
       "1pjN9RsirRQZJrftgmR5iztpUe7fLaan6VGnEHxPesXtESboz9jhREA2L1/HWAxQIP6OhegZGN1Z\n",
       "r0yURRFmC3UZ7OdT1wAUkQAAAEIBn81qQ/8AAOfhPRKLUXpA4diAHXBQcagNTAkwiuK4kbsoAK6o\n",
       "JZNgiBe+tYZXX50uE78IiN2IAF7qY6X3VMQAPSEAAADZQZvPSeEPJlMCCP/+tSqAACAOR1gBch7/\n",
       "64OsxY80nh83l1jOCUUXCRhz9iUDJZOFsPq/Gv6oWDEpsrTxAAzb/a+nQyl0bnHEb1OFiOo37xed\n",
       "qswfuXv/YdtbUxKiYBfeKg5W4ulw0mRB09/gxoLRK4FcIGXcgSCQi4iUCHCaM/Epjuv+m4ir3hdc\n",
       "JRiHs7WXmnEjrZ7XepRh6XjHNHOb4/kk5VjybfOtVcHqi96kAWaWtha7+BMrbmBVav3FqtcabsYq\n",
       "oGRMWBgTTKvEFr867653H8qdxoACrwAAAQFBm/FJ4Q8mUwURPD///qmWAAD0LonxGFsACdvVb2GT\n",
       "r8OOWCPVpoGT64dymQ+G/PbUTJuc62NImp4nFm0wcLXoVOhwMu62MjYAgbqCdhE+PONK00Wq1MI2\n",
       "/I+p9OHyoUKcuYGMM+NyruBE9LcQdv6WGFHwElwqGzLvFCQLX+M5RchT5tRAuVsLwwm78zxucrjY\n",
       "MjEyQq4kh7QR6AKcy3J5l2Wr5LudznfSYRm6Npmk0FyZJ44B8o/8kd0z1dnw5WitBpMh5xdQAfrB\n",
       "4EYY3lNG5p7H4WZZPCo6ApF6aYmKwuDmcp+r+B0DQ7UgSwAYNN+iLZzpLM+FlNEDED/bIAAJGAAA\n",
       "ADgBnhBqQ/8AACM5kRboE1ZgoOOpzl86fZN/7B54gmgVkXeOEwAJon5qQXuvtWs5r76rRRvIsAAE\n",
       "XAAABT9tb292AAAAbG12aGQAAAAAAAAAAAAAAAAAAAPoAAAnEAABAAABAAAAAAAAAAAAAAAAAQAA\n",
       "AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n",
       "AAACAAAEaXRyYWsAAABcdGtoZAAAAAMAAAAAAAAAAAAAAAEAAAAAAAAnEAAAAAAAAAAAAAAAAAAA\n",
       "AAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAACQAAAAkAAAAAAACRlZHRzAAAA\n",
       "HGVsc3QAAAAAAAAAAQAAJxAAABAAAAEAAAAAA+FtZGlhAAAAIG1kaGQAAAAAAAAAAAAAAAAAACgA\n",
       "AAGQAFXEAAAAAAAtaGRscgAAAAAAAAAAdmlkZQAAAAAAAAAAAAAAAFZpZGVvSGFuZGxlcgAAAAOM\n",
       "bWluZgAAABR2bWhkAAAAAQAAAAAAAAAAAAAAJGRpbmYAAAAcZHJlZgAAAAAAAAABAAAADHVybCAA\n",
       "AAABAAADTHN0YmwAAAC0c3RzZAAAAAAAAAABAAAApGF2YzEAAAAAAAAAAQAAAAAAAAAAAAAAAAAA\n",
       "AAACQAJAAEgAAABIAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY//8A\n",
       "AAAyYXZjQwFkABb/4QAZZ2QAFqzZQJASaEAAAAMAQAAAAwKDxYtlgAEABmjr48siwAAAABx1dWlk\n",
       "a2hA8l8kT8W6OaUbzwMj8wAAAAAAAAAYc3R0cwAAAAAAAAABAAAAMgAACAAAAAAUc3RzcwAAAAAA\n",
       "AAABAAAAAQAAAVhjdHRzAAAAAAAAACkAAAADAAAQAAAAAAEAACAAAAAAAgAACAAAAAABAAAYAAAA\n",
       "AAEAAAgAAAAAAQAAGAAAAAABAAAIAAAAAAEAACAAAAAAAgAACAAAAAABAAAoAAAAAAEAABAAAAAA\n",
       "AQAAAAAAAAABAAAIAAAAAAEAACAAAAAAAgAACAAAAAABAAAgAAAAAAIAAAgAAAAAAQAAKAAAAAAB\n",
       "AAAQAAAAAAEAAAAAAAAAAQAACAAAAAABAAAgAAAAAAIAAAgAAAAAAQAAIAAAAAACAAAIAAAAAAEA\n",
       "ABgAAAAAAQAACAAAAAABAAAQAAAAAAEAABgAAAAAAQAACAAAAAABAAAQAAAAAAEAACgAAAAAAQAA\n",
       "EAAAAAABAAAAAAAAAAEAAAgAAAAAAgAAEAAAAAABAAAYAAAAAAEAAAgAAAAAAQAAEAAAAAABAAAY\n",
       "AAAAAAEAAAgAAAAAHHN0c2MAAAAAAAAAAQAAAAEAAAAyAAAAAQAAANxzdHN6AAAAAAAAAAAAAAAy\n",
       "AAAWMwAAAWcAAAFCAAAC3gAAAEUAAABBAAACLgAAADcAAAI1AAAAOgAAAtcAAAAzAAAANAAAA18A\n",
       "AABBAAAAIgAAAEQAAAMCAAAASwAAAFEAAAMpAAAAVgAAAEQAAAMFAAAANwAAAFMAAABAAAACowAA\n",
       "AEgAAAA/AAAFIgAAAFwAAABMAAACEQAAADsAAAEIAAAB2wAAADQAAADDAAAC2wAAAFQAAAAqAAAA\n",
       "IwAAAu0AAAC3AAABnQAAAEYAAADdAAABBQAAADwAAAAUc3RjbwAAAAAAAAABAAAALAAAAGJ1ZHRh\n",
       "AAAAWm1ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAG1kaXJhcHBsAAAAAAAAAAAAAAAALWlsc3QAAAAl\n",
       "qXRvbwAAAB1kYXRhAAAAAQAAAABMYXZmNTguMjkuMTAw\n",
       "\">\n",
       "  Your browser does not support the video tag.\n",
       "</video>"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "t = np.linspace(0, 2)\n",
    "x = np.cos(-np.pi*t)\n",
    "y = np.sin(-np.pi*t)\n",
    "fig, ax = plt.subplots(nrows=2, ncols=2,\n",
    "                       gridspec_kw={'hspace': 0.3, 'wspace': 0.2}, figsize=(8, 8));\n",
    "plt.close();\n",
    "ax[0][0].set_aspect(1)\n",
    "ax[0][0].axis([-1, 1, -1, 1])\n",
    "ax[0][1].set_aspect(1)\n",
    "ax[1][0].set_aspect(1)\n",
    "ax[0][1].axis([0, 2, -1, 1])\n",
    "ax[1][0].axis([-1, 1, 0, 2])\n",
    "ax[1][1].axis('off')\n",
    "x_title = '$\\mathscr {Re}[e^{-j\\omega t}]$'\n",
    "y_title = '$\\mathscr {Im}[e^{-j\\omega t}]$'\n",
    "x_label = '$\\mathscr {Im}$'\n",
    "y_label = '$\\mathscr {Re}$'\n",
    "t_label = 't (s)'\n",
    "ax[0][0].set_xlabel(x_label)\n",
    "ax[0][1].set_xlabel(t_label)\n",
    "ax[1][0].set_xlabel(x_label)\n",
    "ax[0][0].set_ylabel(y_label)\n",
    "ax[0][0].xaxis.set_label_position(\"top\")\n",
    "ax[0][0].xaxis.tick_top()\n",
    "ax[0][1].yaxis.set_label_position(\"right\")\n",
    "ax[0][1].yaxis.tick_right()\n",
    "ax[1][0].yaxis.set_label_position(\"right\")\n",
    "ax[1][0].yaxis.tick_right()\n",
    "axis_linewidth = 0.75\n",
    "real_color = 'cyan'\n",
    "im_color = 'magenta'\n",
    "complex_color = 'green'\n",
    "ax[0][0].axhline(0, color=real_color, linewidth=axis_linewidth)\n",
    "ax[0][0].axvline(0, color=im_color, linewidth=axis_linewidth)\n",
    "ax[0][1].axhline(0, color='black', linewidth=axis_linewidth)\n",
    "ax[1][0].axvline(0, color='black', linewidth=axis_linewidth)\n",
    "ax[0][0].set_title('$e^{-j\\omega t}$')\n",
    "ax[0][1].set_title(y_title)\n",
    "ax[1][0].set_title(x_title)\n",
    "loc = plticker.MultipleLocator(base=1.0)\n",
    "for i in range(len(ax)):\n",
    "    for j in range(len(ax[0])):\n",
    "        ax[i, j].xaxis.set_major_locator(loc)\n",
    "        ax[j, i].yaxis.set_major_locator(loc)\n",
    "l1, = ax[0][0].plot([], [], '.', color=complex_color)\n",
    "l2, = ax[0][1].plot([], [], '.', color=im_color)\n",
    "l3, = ax[1][0].plot([], [], '.', color=real_color)\n",
    "ax[0][1].legend([l2],[y_title])\n",
    "ax[1][0].legend([l3],[x_title])\n",
    "\n",
    "def animate(i):\n",
    "    l1.set_data(x[:i], y[:i])\n",
    "    l2.set_data(t[:i], y[:i])\n",
    "    l3.set_data(x[:i], t[:i])\n",
    "\n",
    "ani = matplotlib.animation.FuncAnimation(fig, animate, frames=len(t), interval=200);\n",
    "\n",
    "HTML(ani.to_html5_video())  # For just the animation, no controls.\n",
    "#HTML(ani.to_jshtml())  # Animation with controls."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Suppose we were to observe the wave from orthogonal perspectives as described above, and passed the data from those perspectives into the left and right channels respectively, then we could tell which way the vector was spinning, and so would have enough information to listen to only the signals spinning in one way or the other.  The block diagram for this receiver is shown below.  ![SDR Receiver](SDR_Receiver.png)\n",
    "\n",
    "This mixer system for this is known as an image reject mixer, and the signal shifted by the $cos(\\omega_{lo}t)$ is known as the in phase signal (I), and the signal shifted by $sin(\\omega_{lo}t)$ (or in some receivers by $-sin(\\omega_{lo}t)$) is known as the quadrature signal (Q)."
   ]
  }
 ],
 "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.8.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
