{
 "metadata": {
  "name": "",
  "signature": "sha256:3a9c5c69ab347d4cd1921c96b83afd9e14e05093da21ee1ce00532f92c990b15"
 },
 "nbformat": 3,
 "nbformat_minor": 0,
 "worksheets": [
  {
   "cells": [
    {
     "cell_type": "heading",
     "level": 1,
     "metadata": {},
     "source": [
      "K-Means Clustering"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Sometimes, an unsupervised learning technique is preferred.  Perhaps you do not have access to adequate training data, or perhaps the training data's labels are not completely clear.  Maybe you just want to quickly sort real-world, unseen, data into groups based on its feature similarity.\n",
      "\n",
      "In such cases, clustering is a great option!"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Let's try clustering with a familiar bunch of audio files and code.\n",
      "\n",
      "Download `simpleLoop.wav`, and play it."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "from urllib import urlretrieve\n",
      "urlretrieve('https://ccrma.stanford.edu/workshops/mir2014/audio/simpleLoop.wav', filename='simpleLoop.wav')\n",
      "\n",
      "from IPython.display import Audio\n",
      "Audio('simpleLoop.wav')"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "html": [
        "\n",
        "                <audio controls=\"controls\" >\n",
        "                    <source src=\"data:audio/x-wav;base64,[encoded data, 352860 characters]\" type=\"audio/x-wav\" />\n",
        "                    Your browser does not support the audio element.\n",
        "                </audio>\n",
        "              "
       ],
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 1,
       "text": [
        "<IPython.lib.display.Audio at 0x4176910>"
       ]
      }
     ],
     "prompt_number": 1
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Load the audio file into an array."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "from essentia.standard import MonoLoader\n",
      "simple_loop = MonoLoader(filename='simpleLoop.wav')()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 2
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Feature Extraction"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Let's compute the zero crossing rate and spectral centroid for each frame in the audio signal."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "from essentia.standard import ZeroCrossingRate, Centroid, Spectrum, Windowing, FrameGenerator, Energy\n",
      "hamming_window = Windowing(type='hamming')\n",
      "zcr = ZeroCrossingRate()\n",
      "centroid = Centroid()\n",
      "spectrum = Spectrum()\n",
      "energy = Energy()\n",
      "\n",
      "def compute_features(frame):\n",
      "    #return array( [zcr(frame), centroid(spectrum(hamming_window(frame)))] ) # Try this too!\n",
      "    return array( [zcr(frame), energy(frame)] )\n",
      "\n",
      "features = array([compute_features(frame) for frame in FrameGenerator(simple_loop, frameSize=1024, hopSize=500)])\n",
      "print features.shape"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "(266, 2)\n"
       ]
      }
     ],
     "prompt_number": 13
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Feature Scaling"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Scale the features (using the scale function) from -1 to 1."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "from sklearn import preprocessing\n",
      "min_max_scaler = preprocessing.MinMaxScaler(feature_range=(-1, 1))\n",
      "features_scaled = min_max_scaler.fit_transform(features)\n",
      "print features_scaled.shape\n",
      "print features_scaled.min(axis=0)\n",
      "print features_scaled.max(axis=0)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "(266, 2)\n",
        "[-1. -1.]\n",
        "[ 1.  1.]\n"
       ]
      }
     ],
     "prompt_number": 14
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Plot the features."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "scatter(features_scaled[:,0], features_scaled[:,1])\n",
      "xlabel('Zero Crossing Rate (scaled)')\n",
      "ylabel('Energy (scaled)')"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 16,
       "text": [
        "<matplotlib.text.Text at 0x5b6ac10>"
       ]
      },
      {
       "metadata": {},
       "output_type": "display_data",
       "png": "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\nwoS8HajASUMppUpKuUoaxUmThlJK3TydsFAppVSJ06ShlFLKZpo0lFJK2UyThlJKKZtp0lBKKWUz\nTRpKKaVspklDKaWUzTRpKKWUspkmDaWUUjbTpKGUUspmmjSUUkrZTJOGUkopm2nSUEopZTNNGkop\npWymSUMppZTNNGkopZSymSYNpZRSNtOkoZRSymaaNJRSStlMk4ZSSimbadJQSillM00aSimlbKZJ\nQymllM00aSillLKZJg2llFI206ShlFLKZpo0lFJK2UyTRhkXFxdn7xBKTEXuG2j/yruK3r+iskvS\nWLJkCYGBgTg6OrJjx44Cy9WrV4/g4GDCwsIIDw8vxQjLjor8D7ci9w20f+VdRe9fUTnZo9GgoCCW\nL19OdHT0DcsZDAbi4uLw8vIqpciUUkrdiF2SRpMmTWwuKyIlGIlSSqmbYRA77pU7duzIm2++SYsW\nLfJ9v379+nh6euLo6Eh0dDQjR47MU8ZgMJR0mEopVSEVZfdfYkcaUVFRJCYm5ln/6quv0rt3b5vq\n2LhxI7Vq1eLcuXNERUXRpEkTIiIicpXRIxGllCo9JZY01q5de8t11KpVC4AaNWrQr18/tm3blidp\nKKWUKj12v+S2oCOFlJQUrl69CkBycjJr1qwhKCioNENTSin1N3ZJGsuXL8ff358tW7bQs2dPunfv\nDsDp06fp2bMnAImJiURERBAaGkqbNm3o1asXXbt2tUe4Siml/iLlzOLFi6VZs2bi4OAg27dvL7Bc\n3bp1JSgoSEJDQ6V169alGOGtsbV/q1atksaNG0tAQIBMnz69FCO8NRcuXJAuXbpIw4YNJSoqSv78\n8898y5Wn7WfLthg7dqwEBARIcHCw7Nixo5QjvDWF9S82NlY8PDwkNDRUQkNDZcqUKXaIsmiGDRsm\n3t7e0rx58wLLlOdtV1j/irLtyl3S2L9/vxw8eFAiIyNvuFOtV6+eXLhwoRQjKx629C8rK0saNGgg\nx44dk4yMDAkJCZF9+/aVcqRF8/TTT8uMGTNERGT69Ony7LPP5luuvGw/W7bF999/L927dxcRkS1b\ntkibNm3sEWqR2NK/2NhY6d27t50ivDU//fST7Nixo8CdannediKF968o287uYxo3q0mTJjRq1Mim\nslIOr6yypX/btm0jICCAevXq4ezszKBBg/j2229LKcJbExMTw9ChQwEYOnQo33zzTYFly8P2s2Vb\nXN/nNm3acOnSJZKSkuwR7k2z9d9aedhW+YmIiKB69eoFvl+etx0U3j+4+W1X7pKGrQwGA126dKFV\nq1Z8/PHH9g6nWJ06dQp/f3/rsp+fH6dOnbJjRLZLSkrCx8cHAB8fnwL/Bywv28+WbZFfmYSEhFKL\n8VbY0j+DwcCmTZsICQmhR48e7Nu3r7TDLDHledvZoijbzi53hBemtO7xsJdb7V9Zv6GxoP5NmzYt\n17LBYCiwL2V5+13P1m3x919zZX0b/sWWOFu0aEF8fDwmk4lVq1bRt29fDh06VArRlY7yuu1sUZRt\nVyaTRkW/x+NW++fr60t8fLx1OT4+Hj8/v1sNq9jcqH8+Pj4kJiZSs2ZNzpw5g7e3d77lyvL2u54t\n2+LvZRISEvD19S21GG+FLf1zd3e3vu7evTujR4/m4sWLFWLOuPK87WxRlG1Xrk9PFXQurqLc41FQ\n/1q1asXhw4c5fvw4GRkZLFq0iD59+pRydEXTp08f5s2bB8C8efPo27dvnjLlafvZsi369OnD/Pnz\nAdiyZQvVqlWznqIr62zpX1JSkvXf6rZt2xCRCpEwoHxvO1sUadsVdVTeXpYtWyZ+fn7i6uoqPj4+\ncs8994iIyKlTp6RHjx4iInL06FEJCQmRkJAQCQwMlFdffdWeId8UW/onIrJy5Upp1KiRNGjQoFz1\n78KFC9K5c+c8l9yW5+2X37aYPXu2zJ4921rmiSeekAYNGkhwcPANr/oriwrr36xZsyQwMFBCQkKk\nbdu2snnzZnuGe1MGDRoktWrVEmdnZ/Hz85NPPvmkQm27wvpXlG1n1wkLlVJKlS/l+vSUUkqp0qVJ\nQymllM00aSillLKZJg2llFI206Shis3y5csJCwvL9efo6MgPP/xQ7G0lJiYyaNAgAgICaNWqFT17\n9uTw4cPF3g7AyJEj2b9/f7HU5ejoSFhYGMHBwfTv359r167dsPyuXbtYtWrVTbdz9uxZ64zRxeGz\nzz5j7NixN/WZevXqcfHiRdLT02nfvj0Wi6XY4lH2o0lDFZt+/fqxc+dO69/jjz9O+/bt6datm02f\nl+wJNG0q169fPzp16sSRI0f49ddfee211/JMSZKVlVWkfvzdxx9/TNOmTYulLpPJxM6dO9m9ezce\nHh7MmTPnhuV37tzJypUrb7qdWbNm8cgjjxQxyryKchf0X59xcXEhIiLihvOMqfJDk4YqEYcOHWLK\n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\nHDC6AAAAAElFTkSuQmCC\n",
       "text": [
        "<matplotlib.figure.Figure at 0x565a950>"
       ]
      }
     ],
     "prompt_number": 16
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Using K-Means"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Time to cluster! Let's initialize the algorithm to find three clusters."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "from sklearn.cluster import KMeans\n",
      "kmeans = KMeans(n_clusters=3)\n",
      "labels = kmeans.fit_predict(features_scaled)\n",
      "features_scaled.shape\n",
      "print labels"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "[2 2 2 0 0 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n",
        " 0 0 0 0 0 0 0 0 2 2 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n",
        " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 2 0 0 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2\n",
        " 2 2 0 0 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 1 1 1 1 1 1 1 1 1 1 1 1 0\n",
        " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n",
        " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n",
        " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n",
        " 0 0 0 0 0 0 0]\n"
       ]
      }
     ],
     "prompt_number": 17
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Plot the results."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "scatter(features_scaled[labels==1,0], features_scaled[labels==1,1], c='r')\n",
      "scatter(features_scaled[labels==2,0], features_scaled[labels==2,1], c='y')\n",
      "scatter(features_scaled[labels==0,0], features_scaled[labels==0,1], c='k')\n",
      "xlabel('Zero Crossing Rate (scaled)')\n",
      "ylabel('Energy (scaled)')"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 26,
       "text": [
        "<matplotlib.text.Text at 0x6bad790>"
       ]
      },
      {
       "metadata": {},
       "output_type": "display_data",
       "png": "iVBORw0KGgoAAAANSUhEUgAAAY0AAAEMCAYAAAA4S+qsAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XlcVFX/B/DPsM+wqaUoi5IiqMiqghuKKJr7lgu2kBai\nJlZP5qNlhZqmj2ZlVlpPbr9KBZXEElMTMvcUXHFB3EAFVxRZZ4bz+wOdRwTkgsAd4PN+vXy9uDNn\nzv2euXi/3HPuOVchhBAgIiKSwEDuAIiIqOZg0iAiIsmYNIiISDImDSIikoxJg4iIJGPSICIiyWRL\nGuPGjYONjQ3c3NxKfD8uLg7W1tbw8vKCl5cXPv3002qOkIiInmQk147Hjh2LsLAwvPbaa6WW6d69\nO6Kjo6sxKiIiehrZrjT8/PxQv379p5bhvEMiIv0i25VGWRQKBfbt2wcPDw/Y2dlh0aJFaNOmTYnl\niIio/Cryh7neDoR7e3sjJSUFx44dQ1hYGIYMGVJqWSFErf33ySefyB4D28b2sX21719F6W3SsLS0\nhEqlAgD07dsXarUad+7ckTkqIqK6TW+TRnp6ui4bHjp0CEIINGjQQOaoiIjqNtnGNIKCgvDXX3/h\n1q1bcHBwwKxZs6BWqwEAoaGh2LBhA7777jsYGRlBpVJh3bp1coUqK39/f7lDqDK1uW0A21fT1fb2\nVZRCPEvnlh5QKBTP1D9HRFQXVfTcqbfdU0REpH+YNIiISDImDSIikoxJg4iIJGPSICIiyZg0iIhI\nMiYNIiKSjEmDiIgkY9IgIiLJmDSIiEgyJg0iIpKMSYOIiCRj0iAiIsmYNIiISDImDSIikoxJg4iI\nJGPSICIiyZg0iIhIMiYNIiKSjEmDiIgkY9IgIiLJmDSIiEgyJg0iIpKMSYOIiCRj0iAiIsmYNIiI\nSDImDSIikoxJg4iIJJMtaYwbNw42NjZwc3MrtcyUKVPQsmVLeHh4ICEhoRqjIyKiksiWNMaOHYtt\n27aV+v7WrVtx/vx5JCUl4fvvv8fEiROrMTr9tGvXLrRt2xw2NvUwatQQZGRkyB0SEdUxsiUNPz8/\n1K9fv9T3o6OjERwcDADw9fVFRkYG0tPTqys8vXPu3DmMGDEQr7xyEUuX3kNWVgxefXWE3GERUR1j\nJHcApbl69SocHBx02/b29khNTYWNjU2xsuHh4bqf/f394e/vXw0RVq9du3ahc2eBjh0Lt8PC8jFw\nYCwKCgpgYMChKSJ6uri4OMTFxT1zPXqbNABACFFkW6FQlFju8aRRW1lZWSEtzQBCAAoFkJYGmJub\nlvqdEBE97sk/qGfNmlWhevT2T1Q7OzukpKTotlNTU2FnZydjRPIaNmwYgBfwySdKrFihwPTpKixY\n8DmTBhFVK71NGoMGDcKaNWsAAAcOHEC9evVK7JqqK8zMzLB79yGMGrUQL7wwE7/88hvGj58gd1hE\nVMfI1j0VFBSEv/76C7du3YKDgwNmzZoFtVoNAAgNDUW/fv2wdetWODk5wdzcHCtXrpQrVL2RlZWF\nlJSLSEu7itTUlhBC8EqDiKqVQjw5cFDDKBSKYmMftdG9e/fQvn1btG2bjubN1YiOVuHVV6fi448r\n1i9JRHVbRc+dTBo1xOrVq/Hjj29h9uwsAMCNG8C4cabIzMzh1QYRlVtFz516O6ZBReXl5cHc/H8H\n2Nwc0Gi0dSJhEpH+YNKoIfr27YvDhw0RHQ0kJgKffabEqFHDOUeDiKoVu6dqkOPHj2PatMlIT09D\nz559MXfuf2Bqaip3WERUA3FMg4iIJOOYBhERVTkmDSIikoxJg4iIJGPSICIiyZg0iIhIMiYNIiKS\njEmDiIgkY9IgIiLJmDSIiEgyJg0iIpKMSYOIiCRj0iAiIsmYNIiISDImDSIikoxJg4iIJGPSqAFi\nY2MREvIaJk8OxZkzZ+QOh4jqMCYNPRcdHY1Ro/rDzOz/kJ39A7p27cDEQUSy4ZP79Fznzh7o3/84\nunQp3F69WgFLywlYsuRbeQMjohqNT+6rpfLy8mBu/r9tlUpg48ZfMH36e8jPz5cvMCKqk5g09Fxw\ncCi++UaFhATg77+Bn34CXnrpHnbv/g4TJoyVOzwiqmPYPaXnhBBYuvQrLFnyHzx4kIa33xbo2BF4\n8AB46SUjZGfnwcCAuZ+Iyqei506jKoiFKpFCoUBY2DuwtKyHVasmo2PHLABATg5gZGQIhUIhc4RE\nVJfwSqOGyMjIQLt2rvDyuonmzdX49VcVgoLewaxZc+UOjYhqoBo5EL5t2za0atUKLVu2xIIFC4q9\nHxcXB2tra3h5ecHLywuffvqpDFHqh3r16mH//gQ4Ok7CtWvDMWPGUoSH193vg4jkIduVhlarhYuL\nC3bu3Ak7Ozt06NABa9euRevWrXVl4uLisHjxYkRHR5daT1250iAiqkw17krj0KFDcHJygqOjI4yN\njTF69Ghs3ry5WDkmBCIi/SFpIPz06dO4dOkSDAwM0KxZM7Rq1eqZd3z16lU4ODjotu3t7XHw4MEi\nZRQKBfbt2wcPDw/Y2dlh0aJFaNOmTbG6wsPDdT/7+/vD39//meMjIqpN4uLiEBcX98z1lJo0Ll68\niC+++AJbt26FnZ0dbG1tIYTA9evXkZqaigEDBuDdd9+Fo6NjhXYs5a4fb29vpKSkQKVSISYmBkOG\nDMG5c+eKlXs8aRARUXFP/kE9a9asCtVTatL497//jZCQEHz++ecwNjYu8p5arUZsbCymTZuGiIiI\nCu3Yzs4OKSkpuu2UlBTY29sXKWNpaan7uW/fvpg0aRLu3LmDBg0aVGifRET0bGQbCNdoNHBxccGf\nf/4JW1tb+Pj4FBsIT09PR6NGjaBQKHDo0CGMHDkSly5dKlIPB8KJiMqv0if3bdy4UVfp45U/6lYa\nNmxYBUN9uGMjIyxduhR9+vSBVqvFG2+8gdatW2P58uUAgNDQUGzYsAHfffcdjIyMoFKpsG7dumfa\nJxERPZtSrzRef/11KBQK3LhxA/v27UNAQACAwmc7dO7cGb/99lu1BloaXmkQEZVfpV9prFq1CgAQ\nGBiIxMRENGnSBABw/fp1BAcHVyxKIiKq0cqcp5GSkoLGjRvrtm1sbHDlypUqDYqIiPRTmfM0evXq\nhT59+mDMmDEQQmD9+vUIDAysjtiIiEjPlHn3lBACUVFR+PvvvwEA3bp1w9ChQ6slOCk4pkFEVH5V\ntjS6QqGAt7c3LC0tERgYiOzsbGRmZhaZQ0FERHVDmWMa33//PUaMGIEJEyYAAFJTUzFkyJAqD4yI\niPRPmUnjm2++wZ49e2BlZQUAcHZ2xo0bN6o8MCIi0j9lJg1TU1OYmprqtjUaDZ8WR0RUR5WZNLp3\n7465c+ciOzsbO3bswIgRIzBw4MDqiI2IiPRMmXdPabVa/Pjjj9i+fTsAoE+fPnjzzTf15mqDd08R\nEZVfRc+dfEY4EVEdVOm33Lq5uT11Z8ePHy/3zoiIqGYr9UrjySXIn1TRhy9VNl5pEBGVH7uniIhI\nsoqeO8u8e2r//v3o0KEDzM3NYWxsDAMDA92cDSIiqlvKTBqTJ0/GL7/8AmdnZ+Tm5uLHH3/EpEmT\nqiM2emjLli0YNWoQXnttFBISEuQOh4jqsDKTBgC0bNkSWq0WhoaGGDt2LLZt21bVcdFD69evx/jx\no+HouAUWFhHo1cuPNyEQkWzKXLDQ3NwceXl58PDwwLRp09C4cWOOIVSjL7/8FO+8kw1f38LtvLws\nfP/9N1i6dLm8gRFRnVTmlcaaNWtQUFCApUuXQqVSITU1FRs3bqyO2AiAWq3B7t3A2LFAaChw+TKg\n1WrkDouI6qgyrzSef/55mJiYQKlUIjw8HFqtFnl5edURGwFwdHTBkSNnMH06kJUFhIcDAwe6yx0W\nEdVRZV5p9OzZEzk5Obrt7Oxs9OrVq0qDov+5cOE0/vUvwMUF8PYGgoOBxEQOhhORPMpMGnl5ebCw\nsNBtW1paIjs7u0qDov8xNzfH3bv/287IMIBKxQdgEZE8JA2EHzlyBO3atQMAHD58GEqlssoDo0If\nf7wAo0cPxuXLOcjKMsCuXZY4cOBducMiojqqzBnh//zzD0aPHo0mTZoAAK5fv47169ejffv21RJg\nWerCjPCDBw8iMnItTE2VCAkJ1ZslXIio5qrSZUTy8/Nx9uxZKBQKuLi4wNjYuEJBVoW6kDSIiCpb\nlS0jEhERgdzcXLi5uSEqKgqjRo1CfHx8hYIkIqKarcykMWfOHFhZWWHPnj34888/MW7cOEyYMKE6\nYiMiIj1TZtIwNDQEAPz2228ICQnBgAEDoFarqzwwIiLSP2UmDTs7O4wfPx7r169H//79kZubi4KC\ngkrZ+bZt29CqVSu0bNkSCxYsKLHMlClT0LJlS3h4eHCxPiIimUka0+jTpw+2b9+OevXq4e7du1i4\ncOEz71ir1WLy5MnYtm0bEhMTsXbtWpw+fbpIma1bt+L8+fNISkrC999/j4kTJz7zfomIqOJKTRqZ\nmZkACudpDB8+HC1btgQANGnSBL179y5SpiIOHToEJycnODo6wtjYGKNHj8bmzZuLlImOjkZwcDAA\nwNfXFxkZGUhPT6/wPqlqqdVqXLhwAffv35c7FCKqIqVO7hs6dChcXFwwePBgtG/fHg0aNAAA3Llz\nB//88w9+/fVXJCUlYefOnRXa8dWrV+Hg4KDbtre3x8GDB8ssk5qaChsbmyLlwsPDdT/7+/vD39+/\nQjFRxZ08eRL9+/eERpOF+/c1mDdvPsLC3pE7LCJ6KC4uDnFxcc9cT6lJY+fOndi1axd++eUXvP32\n27h27RoAwNbWFl27dsXLL7/8TCdnhUIhqdyT9xGX9LnHk0ZtdfDgQSxePBd5eTl45ZVQvPTSS3KH\nVMTw4f0QFHQDL74IpKUBb7/9ITp16qo3k0CJ6ron/6CeNWtWhep56jIiAQEBCAgIqFDFZbGzs0NK\nSopuOyUlBfb29k8tk5qaCjs7uyqJR5/Fx8ejX78AvPpqNiwsgLff3oecnBy8+uqrcocGAMjNzcWF\nC1fRp0/hduPGQPv2Chw7doxJg6iWkfTkvqrQvn17JCUl4dKlS8jPz8f69esxaNCgImUGDRqENWvW\nAAAOHDiAevXqFeuaqgv++99vMXx4NoYMAXr1At55JxtLl5Z8t5kcTE1N8dxz1nh0c1tWFnDqFNC8\neXN5AyOiSlfmgoVVtmMjIyxduhR9+vSBVqvFG2+8gdatW2P58sIn0oWGhqJfv37YunUrnJycYG5u\njpUrV8oVrqxycnKRkgLs3Qu0bw8oFMW77eSkUCjwyy8bMGLEIDg5GeHKFTVGjnyVY0tEtZCktaf0\nWW1fe+rs2bPo2rUD7O0zkZ8P3LsHCKHE3Lnf4vXXX5c7vCLS0tJw7NgxNG7cGB4eHnKHQ0RPUWUL\nFv7rX//CG2+8AVdX1woHV5Vqe9Lo168HWrT4C8OHCwgBzJ2rQL16g7FhQ5TcoRFRDVZlCxa2bt0a\n48ePh4+PD5YtW4Z79+5VKECqmKtXU+DqWnhgFQrA3V3Aykolc1REVFeVmTRCQkKwd+9erFmzBpcu\nXYKbmxvGjBmD2NjY6oivzuvSpTs2bTKDWg3cvw/88Yc5unSpmjvaiIjKIunuKa1WizNnzuD06dNo\n2LAhPDw8sHjxYowaNaqq46vzFi5cAlNTPwwcaIQRI4wQGBiMIUOG1OouOSLSX2WOabz77rvYsmUL\nAgIC8Oabb8LHx0f3nouLC86ePVvlQT5NbR/TeCQrKwurVq3AtGlTYWAAODo6YMuWnXyKHxFVSJUN\nhK9cuRIjR46Eubl5sfcyMjJQr169cu+0MtWVpPHPP/9gwAB/LF6cDVtbYN06AyQktMGhQyfkDo2I\naqAqGwh3d3fH2bNnER8fr/uXnJwMjUYje8KoSw4dOoROnQpgZ1c4ID5iRAHi4xMrbZn6yhQREQEf\nH1d4ezvj66+/qhNJnaiuKHNy31tvvYUjR47A3d0dAHDixAm4urri3r17+O6779Dn0doRVKUcHBxw\n9qwR8vMBExPg5EmgceP6MDCQbVJ/ibZt24YpU8bi3XezYWYGfPnlBzAyMsbEiZPkDo2IKkGZZxxb\nW1scPXoUR44cwZEjR3D06FE0b94cO3bswLRp06ojxjpv79692L59KwwNbRAaqsLs2ZaYM0eFH3/8\nWe7Qivn55x/x8svZ8PUFPDyACROy8dNP38sdFhFVkjKTxtmzZ4tM7GvTpg3OnDmDFi1aSF6pliou\nJiYGgwb1QkrKctjbJ+P27QIMHjwHR46c0surPKXSHPfv/+/3IjMTUCqVMkZERJWpzO4pV1dXTJw4\nEaNHj4YQAhEREWjTpg3y8vJgbGxcHTHWaR9/PBXGxrk4cwbIzgbq1ctFUtJpODq+LXdoJXr77ffR\nrdsG5OdnQakEIiOVWL9+jtxhEVElKfPuqZycHHzzzTfYu3cvAKBLly6YNGkSzMzMkJWVBUtLy2oJ\ntDS1/e6pRo1UePHFHIwbB2i1wIcfAlqtB/7556jcoZXq9OnTWL78G6jV+XjllbHo1KmT3CER0ROq\n5JZbjUaDwMBAvZ79XduTRoMGJpg3T41WrQq3t2wBYmJeQGLiBXkDI6IarUpuuTUyMoKBgQEyMjIq\nHBg9G2NjY2zbBggB5OcDO3YAVla81ZmI5FHmmIa5uTnc3NwQGBiom+CnUCiwZMmSKg+OgO7de2Hb\ntmjExgJqNWBiokB4uH48sY+I6p4yk8awYcMwbNgw3Z1SQgjeNVWNnnvuebRuDYSEABoNMG+eAvXr\nN5A7LCKqoyQ9hCk7OxtXrlxBq0cd63qkto9peHo6ITQ0Ga1bF25HRwMZGWOwYoX+zdGoTmfOnMGC\nBZ/iyJF/YGPTCKNHv45x48bxDxoiiapsGZHo6Gh4eXnhxRdfBAAkJCQUe5Y3VR0bmyZISvrfifD8\neRPY2jaVMSL5JSUloUuXDtiy5Wc0bXoOnp57MH/+W5g+farcoRHVemVeaXh7e2PXrl3o0aMHEhIS\nAABt27bFyZMnqyXAstT2K40TJ06gZ8+u8PTU4sEDBe7ceQ779sWjQYO620U1bdp72LdvMfLygIUL\nC1/LyABGjzZCVlYuDA0N5Q2QqAao6LmzzDENY2PjYgsT6tt6R7WZm5sbjh49je3bt8PU1BQDBgyQ\nfW6M3NTqfBgZAUaP/fYqlYXjbQUFBUwaRFWozLO/q6srfv75Z2g0GiQlJSEsLAydO3eujtjoobS0\nNKxZsxLjxr2Ghg0bYNy4l5GXlyd3WLIJCnoVx44pcfQosGFD4eKNs2cbYejQAVylgKiKlZk0vv76\na5w6dQqmpqYICgqClZUVvvzyy+qIjQDExcUhIKATbG13o08fDczNNTh2bCNmzvy33KHJxsfHBxs3\n/obWrT2wcaM5Fi9uBB+fUKxatU7u0IhqPUl3T+mz2j6m0b17e/j7H0GPHoXby5cDN28Ct2454ejR\nJHmDI6Iaq8rGNM6ePYtFixbh0qVL0Gg0up3t2rWr/FFSuWVmZqJhw/9tN2oEnD0LNGzYSL6giKjO\nKjNpjBgxAhMnTsSbb76pG2DkvfDVZ+jQIHz//X/w7rs5ePAA+OknQK02w48/LpU7NCKqg8rsnmrX\nrh2OHDlSXfGUW23vntJqtQgP/xA//bQSGo0GAQH9MXv2HDRr1kzu0IioBquSVW4BIDw8HA0bNsSw\nYcNgamqqe11f5gnU9qRBRFQVqixpODo6ltgddfHixXLvrCowaRARlV+VJY2qcOfOHYwaNQqXL1+G\no6MjIiIiik0gBAoTlpWVFQwNDWFsbIxDhw4VK8OkQURUfpW+9tR//vMf3c+RkZFF3vvggw/KvaPH\nzZ8/H4GBgTh37hx69uyJ+fPnl1hOoVAgLi4OCQkJJSYMIiKqXqUmjbVr1+p+njdvXpH3YmJinmmn\n0dHRCA4OBgAEBwfj119/LbUsryKIiPRHmbfcVoX09HTY2NgAAGxsbJCenl5iOYVCgV69esHQ0BCh\noaEICQkpsVx4eLjuZ39/f/j7+1d2yERENVpcXBzi4uKeuZ4qSxqBgYFIS0sr9vrcuXOLbCsUilLn\nfezduxdNmjTBzZs3ERgYiFatWsHPz69YuceTBhERFffkH9SzZs2qUD2lJo3jx4/rVlPNyckpsrJq\nTk5OmRXv2LGj1PdsbGyQlpaGxo0b4/r162jUqOTZzU2aNAEANGzYEEOHDsWhQ4dKTBr0bLRaLcLC\nwrBixQoYGBhgypQp+OyzzziJk4iKKXVMQ6vVIjMzE5mZmdBoNLqfH20/i0GDBmH16tUAgNWrV2PI\nkCHFymRnZyMzMxMAkJWVhe3bt8PNze2Z9kslmzdvHlavXo28vDzk5OTg66+/xrJly+QOi4j0kCwP\nxpg+fTp27NgBZ2dn7Nq1C9OnTwcAXLt2Df379wdQuBy4n58fPD094evriwEDBqB3795yhFvrRUdH\nIzs7W7ednZ2NzZs3yxgREekrWQbCGzRogJ07dxZ73dbWFr///jsAoHnz5jh69Gh1h1YnNW7cuMg9\n24aGhrquQSKix3FpdD2n0WiQkpKCBg0awNraukr2cebMGXTs2BF5eXlQKBRQqVSIj49H06Z1+1nk\nRLVZjZoRXplqc9I4c+YMAgICcO/ePWg0GsyZMwfTpk2rkn1du3YNmzdvhoGBAYYNG4aGj6/HTkS1\nDpNGLeTs7Izz58/r2qdSqbB9+3Z06dJF5siIqKar9GVESF4FBQVFEgYA5ObmYsuWLTJGRUR1Ha80\n9Fjjxo2LzZY3NTXFwYMH4eHhIVNURFQb8EqjFoqMjISBQdFDlJeXh2+//bZS9xMbG4v3338f8+fP\nx927dyu1biKqXWS55Zak8fPzQ4sWLZCUlFTk9WedXPm4NWvWYOLEicjOzoaJiQm+/fZbHD9+vMSl\n6omIeKWhx9LS0qBWq4u8plKpMH78+Erbx9SpU3UT+/Lz83Hr1i38/PPPlVY/EdUuTBp6bPDgwUhN\nTS3yWmhoKLy8vCptH0+uI6ZWq3XLtxARPYlJQ08VFBTg8OHDxbqivvjiCzg7O5e6nHx5DR48GGZm\nZrptExMT9OvXr1LqJqLah0lDTxkYGMDCwqLE91JSUhAaGlop+/nhhx8QFBSEhg0bwsnJCZs2bYK7\nu3ul1E1EtQ9vudVjkZGRGDVqVInta968OZKTk2WIiohqA95yWwuNGDECoaGhxW67NTQ05DLxRCQL\nXmnoOa1WixkzZuCrr76CWq2GiYkJHBwcsGfPHt0jc4mIyotrT9VyQgjs378fDx48gL+/P0xMTOQO\niWqJ/fv348yZM2jTpg18fX3lDoeqCbunajGtVosxY8bA398fAwcOROfOnZGRkSF3WFQLzPrgAwT1\n6oXYsDCMCAjA/Dlz5A6J9ByvNGqAL774AlOnTkVBQYHutSFDhiAqKkrGqKimu3z5Mtq1aoXTublo\nCCANQBszM5xMToatra3c4VEV45VGLbZq1aoiCQMAtm/fLlM0VFukpaXB0cQEj56c0hiAjUKBTZs2\nIT8/X87QSI8xadQATyYMALX+6oqqXqtWrZAK4DcAAkAUgGs5OVg9Ywa6t2+PrKwseQMkvcSkoeeE\nELC3ty/2evfu3WWIhmoTa2trbIqJwaTnn4cJgAkAdgA49OABHJKS8PVXX8kcIekjJg099/HHH2Pb\ntm1FXrOzs8OaNWtkiohqk86dO+PyjRtwsrXFDgA+ABQAuuTmIvXCBZmjI33EpKHnFi9eXOy15557\njs/wpkqjUCjQuVs3fGliAg2A2wBWm5vDl1ezVAImDT335NLoAHRLmRNVlsXLluGajw/qGRvD3sgI\ngSEheOWVV+QOi/QQk4aeK+mKgkuIUGWztrbGtr//xtWbN3Hn/n0s+OILKBQKucOqsMiICLRs0gQ2\nVlZ4IyiIf2hVIs7T0HMmJibFrjZatGiB8+fPyxQRkX7bv38/hvXqhcjsbLwAYIqZGRoMH44ffvpJ\nch1JSUnYv38/GjVqhN69exdb/602qOi5k4971XMldU8lJyfj8OHDaN++vQwREem3P7Ztw7icHHR9\nuL04Nxedf/9d8ud///13vD5yJAINDHAawPdduiDy999haGhYJfHWNEwaNVRQUFCxZ4cTEaAtKMBZ\nQ0Pg4QPMkgHUs7Qstfzx48ex/pdfYGxiguCxYxH62muIys5GVwBqAF327kV0dDSGDh1aLfHrOyaN\nGurKlStyh0BU5Q4cOIBNERFQWVjgzfHjS5yzBBRekf9n7lzEbt2KfxISYKrRYCiAFgDWmJnhv0uX\nlvi5vXv3Ykjv3gjNyUGmgQE6fvklbj14AJ+H7xsD8NZocO3atapoXo1U+zrqapnSLonNzc2rORKi\n6rV161YMDgiA5RdfIG3uXHi1bo3t27cjNze3WNlxQUH4e+FCTPznH7hpNMgHsAfAfwGoNRpErFyJ\nO3fuFPvcvBkzsDA7G58Kgc+1WryVlQWH+vUxz9AQAsBpAJsVCnTs2LGKW1tzyJI0IiMj4erqCkND\nQ8THx5dabtu2bWjVqhVatmyJBQsWVGOE+kGhUECr1Zb43qP/OAUFBYiNjUVMTIxuvaAHDx7g119/\nxZ49e55a/82bN3Hs2DFkZmYCKJx9fvHiRZw8eVLS2kNCCJw7dw4nTpwocezlypUrOHr0aJXfuXLj\nxg0cOHAAaWlpKCgoQHx8PPbv34+cnBxkZmbi8OHDSElJqXD9sbGx+PLLL3Hy5MkKfV6r1eLIkSPY\nt28fcnJyKhxHbm4udu3ahV27diE3NxeXL1/G1q1bkZiYKLmOEydOYNmyZdi0aVOx58+XVn7FihX4\n448/JA2aCiHw9RdfoG/nzhgzeDASExMhhMC6devwwfTpWLFiBbRaLVJSUjAuKAj9unTBvFmzoNFo\nkJaWhoULF+LTOXNw8uRJfDptGpbn5OAKgJ8KCpD94AHefPFFuDRtWqTN9+/fR1R0NDZlZ+MOgPso\nTBhxAOwAvK3RwHrrVgzt3btYG7IyM2H32LZdQQE6+PhgW+vWUBoawtfMDPO/+Qbt2rUr+8utK4QM\nTp8+Lc5P7bRHAAAX70lEQVSePSv8/f3FkSNHSiyj0WhEixYtxMWLF0V+fr7w8PAQiYmJxcrJ1IQq\nh8LlgJ767/XXXxcNGjTQbZuZmYmNGzcKQ0ND3WvNmjUTarW6WP1LliwRZmZmwtLSUlhaWorY2Fgx\nevRooVQqhYWFhWjWrJm4cuVKqfHl5+eLPn36CJVKJSwsLISzs7NIT08XQghRUFAgpkyZIszMzISV\nlZV4/vnnxcmTJ6vke1q3bp1QKpXC2tpaKJVK4ezsLMzNzYWVlZWwsbERlpaWwsrKSpiZmYmZM2eW\nu/6+PXoIC0C4A0IFiNmzZ5fr8zk5OaJ3ly6ipYWF8LayEi4ODiI1NbXccdy6dUu4t2ghfCwthY+l\npWjaqJF4XqkUva2sRGOlUnz68cdl1rFxwwbRUKkUbyiVoqOFhejbvXuJvxuP/PzTT6KRUileMzcX\nbS0sxKsvvSQKCgqeuo9PPvhAtFOpxGZAfK5QiEaWlmLcmDHC09xczAaEn0olBgUGimaNGomZhoYi\nGhABKpV4+aWXhP1zz4k3jI3FVAMD8bxKJVo0bizeA4QbIJwBcQsQAhDLANHOxUW3z4yMDGFubCxy\nADEIEBselhOA2ASI/oDQAqKeqam4ceNGkXi/WLhQeKlUIgEQewHhqFKJTRs3CiGEyMrKElqttszv\ntaaq6LlT1jPu05LGvn37RJ8+fXTbn332mfjss8+KlauNSUNKwijtn0KhKPbauHHjitR/6tQpoVQq\ni5RRKpVCpVLptg0NDYW/v3+pMS5cuLBIHcbGxmLIkCFCCCG2bt0qzM3Ni9Tv7Oxc6d/T7du3i7Xj\naf9UKpXYu3ev5Po3bNgg6gHi2sMT0B5AmAEiKytLch3z584Vg5RKoX5Yx0eGhmJEv37lbuvkN98U\nbxkbiwJAPHiYwI49rDMdEI2VyjITc2Nra3Hw4Wc0gOhkYSEiIyNLLKvRaISlmZk4+bB8DiBam5uL\nXbt2PXUfTaytxbnHTtrBRkbC0tBQZDzczgVEI1NT0U+l0pW5BwgTQPzL0FD32s+AaNWkiWhqYCBG\nA2LKY3U+AISJoWGR/Y4cMEAMVCpFL0D857GyiwAxBhC3AaEyNhb3798v8rmCggLx2ezZwsXWVrg2\nbSr++/33Eo5G7VDRc6feDoRfvXoVDg4Oum17e3scPHiwxLLh4eG6n/39/eHv71/F0ekvUUIXwpNd\ngGfOnIGxsXGRrpL8/PwiXWFarfap3THx8fFFPq9Wq3H8+HEAQGJiYrHuqgtVsI7R5cuXi7XjaRQK\nBU6fPo3OnTtLKn/w4EG0B9Dk4XYXFA6Mnjt3Dp6enpLqSDp5Ev1ycnR3nAzUarHlzBlJn33cxTNn\nEKJWQwHgJgBrAO4P32sEwN3YGJcuXYKrq2uJny8oKMCtzEw8itoQgJtWi/T09BLLZ2VlQavRoM3D\nbTMAbgYGZQ4IKxQKPL4mc65CAUsDA1g9/N0yBVDPwKDI76lA4R05Lzz2+9ccheN2Nh064OrBgzgB\nIBOAJYDNAFyaNi2y3zUbNuDTjz/GrpgYfHr6NK4IgQKtFmsATATQS6XChLFjYfnEXVQKhQLTP/oI\n0z/66Kntqg3i4uIQFxf3zPVUWdIIDAxEWlpasdfnzZuHgQMHlvn58sxGfTxp1HUlTdh5cgZ5y5Yt\ni/VnGxkZwcTERHcCNjAwgIuLS6n78fT0xK+//qorb2RkhLZt2wIoXHLb2Ni4yLiIo6NjhdtUGkdH\nxxLHUkojhEDr1q0ll+/RoweWLVyICyg8icUA0CoU5arDrUMHRGzejNeys2EG4P9MTODu7S358494\nd+mClUeO4MWcHDwP4AGALQAGAjgOIF6jKTVhAIXHs1v79vg4Ph5zNBqcAPArgEldu5ZY3tLSEi2a\nNsUXFy/iXSFwGECsVotPfXxKLP/IpLffxshFizAzKwtJBgaINTPDc/XrY/bVq3hdq8VWhQJZSiUS\nDQ3xgVqNDhoNlqhU6NapEz7fvx++2dloAODfKhUGjBiBf02fjgBfX9xLTkYztRqNFQrcsbREzMaN\nRfZramqKOQsWYM6CBbh48SLWrV0LtVqNKXl5eHD3Lv7VpQtefvllyd93bfTkH9SzZs2qWEWVeLVT\nbk/rntq/f3+R7ql58+aJ+fPnFysncxOqDCR0t4SEhAgLCwvdtpGRkVi5cqUwMDDQvWZjYyPy8vKK\n1f/ZZ58JMzMzYW1tLczNzUVMTIwYOHCgUKlUwsrKSjRp0kQkJyeXGl9eXp4ICAgQ5ubmwtLSUjRv\n3lxcv35dCFF4yT9hwgShVCqFlZWVaNCggTh27FiVfE8bNmzQxaxUKoW3t7dQKpXC3NxcODo6Cisr\nq2ca03gtKEiYAcL+YZfQt99+W67Pq9VqETRkiGhoZiaampsLH1dXcfPmzXLHkZOTI4b26SPqm5qK\n+qamopuPj2hSr56wV6mEtVIp1q1dW2Yd169fFz06dBCGBgaioaWlWL9u3VPLnz9/Xng5OwtjAwPx\nnIWFiNq0qcx9FBQUiOXffiuGBASI10eOFGfPnhUpKSmiX7duwq5+fdG9XTuRmJgoUlNTRcgrr4gB\n3bqJBXPnCo1GI35Yvly0sLER9vXri/enTNGNt+Tm5oodO3aI5cuXiz/++ENkZGRI+9LoqSp67pR1\nGZEePXpg0aJFJd6ZoNFo4OLigj///BO2trbw8fHB2rVri/2VV5uXEXn8asvV1RUWFhZ48cUXcePG\nDUyaNAlt27ZFfn4+IiMjkZ+fj+HDh8PKygq3bt1CdHQ0nnvuOQwcOLDUJRAuX76M1NRUtGrVCs89\n9xyEEEhMTMSDBw/g5uYGlUr11PgKCgpw+vRp5OXlwdXVFaampkXeT05Oxu3bt9GmTRtYWFg8+xdS\nijt37uDixYtwdHREgwYNcOXKFeTl5aFFixbIzs7G2bNnYWNjU6S7szwuXLiAU6dOoWPHjhVaXVgI\ngZSUFOTl5aF58+YVnlkshMCNGzcghICNjQ3UajWuXbuGRo0alXmsHqfVassVQ25uLkxNTWv0WlRU\nXEXPnbIkjaioKEyZMgW3bt2CtbU1vLy8EBMTg2vXriEkJAS/P5zyHxMTg3feeQdarRZvvPEGZsyY\nUbwBtThpEBFVlRqVNCoTkwYRUflV9NzJGeFERCQZkwYREUnGpEFERJIxaRARkWRMGkREJBmTBhER\nScakQUREkjFpEBGRZEwaREQkGZMGERFJxqRBRESSMWkQEZFkTBpERCQZkwYREUnGpEFERJIxaRAR\nkWRMGkREJBmTBhERScakQUREkjFpEBGRZEwaREQkGZMGERFJxqRBRESSMWkQEZFkTBpERCQZkwYR\nEUnGpEFERJIxaei5uLg4uUOoMrW5bQDbV9PV9vZVlCxJIzIyEq6urjA0NER8fHyp5RwdHeHu7g4v\nLy/4+PhUY4T6ozb/4tbmtgFsX01X29tXUUZy7NTNzQ1RUVEIDQ19ajmFQoG4uDg0aNCgmiIjIqKn\nkSVptGrVSnJZIUQVRkJEROWhEDKelXv06IHPP/8c3t7eJb7fvHlzWFtbw9DQEKGhoQgJCSlWRqFQ\nVHWYRES1UkVO/1V2pREYGIi0tLRir8+bNw8DBw6UVMfevXvRpEkT3Lx5E4GBgWjVqhX8/PyKlOGV\nCBFR9amypLFjx45nrqNJkyYAgIYNG2Lo0KE4dOhQsaRBRETVR/Zbbku7UsjOzkZmZiYAICsrC9u3\nb4ebm1t1hkZERE+QJWlERUXBwcEBBw4cQP/+/dG3b18AwLVr19C/f38AQFpaGvz8/ODp6QlfX18M\nGDAAvXv3liNcIiJ6RNQwERERok2bNsLAwEAcOXKk1HLNmjUTbm5uwtPTU3To0KEaI3w2UtsXExMj\nXFxchJOTk5g/f341Rvhsbt++LXr16iVatmwpAgMDxd27d0ssV5OOn5RjERYWJpycnIS7u7uIj4+v\n5gifTVnti42NFVZWVsLT01N4enqKOXPmyBBlxYwdO1Y0atRItG3bttQyNfnYldW+ihy7Gpc0Tp8+\nLc6ePSv8/f2felJ1dHQUt2/frsbIKoeU9mk0GtGiRQtx8eJFkZ+fLzw8PERiYmI1R1ox77//vliw\nYIEQQoj58+eLf//73yWWqynHT8qx+P3330Xfvn2FEEIcOHBA+Pr6yhFqhUhpX2xsrBg4cKBMET6b\n3bt3i/j4+FJPqjX52AlRdvsqcuxkH9Mor1atWsHZ2VlSWVED76yS0r5Dhw7ByckJjo6OMDY2xujR\no7F58+ZqivDZREdHIzg4GAAQHByMX3/9tdSyNeH4STkWj7fZ19cXGRkZSE9PlyPccpP6u1YTjlVJ\n/Pz8UL9+/VLfr8nHDii7fUD5j12NSxpSKRQK9OrVC+3bt8cPP/wgdziV6urVq3BwcNBt29vb4+rV\nqzJGJF16ejpsbGwAADY2NqX+B6wpx0/KsSipTGpqarXF+CyktE+hUGDfvn3w8PBAv379kJiYWN1h\nVpmafOykqMixk2VGeFmqa46HXJ61ffo+obG09s2dO7fItkKhKLUt+nz8Hif1WDz515y+H8NHpMTp\n7e2NlJQUqFQqxMTEYMiQITh37lw1RFc9auqxk6Iix04vk0Ztn+PxrO2zs7NDSkqKbjslJQX29vbP\nGlaleVr7bGxskJaWhsaNG+P69eto1KhRieX0+fg9TsqxeLJMamoq7Ozsqi3GZyGlfZaWlrqf+/bt\ni0mTJuHOnTu1Ys24mnzspKjIsavR3VOl9cXVljkepbWvffv2SEpKwqVLl5Cfn4/169dj0KBB1Rxd\nxQwaNAirV68GAKxevRpDhgwpVqYmHT8px2LQoEFYs2YNAODAgQOoV6+erotO30lpX3p6uu539dCh\nQxBC1IqEAdTsYydFhY5dRUfl5bJp0yZhb28vzMzMhI2NjXjxxReFEEJcvXpV9OvXTwghRHJysvDw\n8BAeHh7C1dVVzJs3T86Qy0VK+4QQYuvWrcLZ2Vm0aNGiRrXv9u3bomfPnsVuua3Jx6+kY7Fs2TKx\nbNkyXZm33npLtGjRQri7uz/1rj99VFb7li5dKlxdXYWHh4fo1KmT2L9/v5zhlsvo0aNFkyZNhLGx\nsbC3txc//vhjrTp2ZbWvIsdO1gULiYioZqnR3VNERFS9mDSIiEgyJg0iIpKMSYOIiCRj0qBKExUV\nBS8vryL/DA0N8ccff1T6vtLS0jB69Gg4OTmhffv26N+/P5KSkip9PwAQEhKC06dPV0pdhoaG8PLy\ngru7O4YNG4YHDx48tfyxY8cQExNT7v3cuHFDt2J0ZVi1ahXCwsLK9RlHR0fcuXMHeXl56NatGwoK\nCiotHpIPkwZVmqFDhyIhIUH3b+LEiejWrRv69Okj6fOicAFNSeWGDh2KgIAAnD9/HocPH8Znn31W\nbEkSjUZToXY86YcffkDr1q0rpS6VSoWEhAQcP34cVlZWWL58+VPLJyQkYOvWreXez9KlS/H6669X\nMMriKjIL+tFnTE1N4efn99R1xqjmYNKgKnHu3DnMmTMH//d//6d7beHChfDx8YGHhwfCw8MBAJcu\nXYKLiwuCg4Ph5uaGlJQUvP/++3Bzc4O7uzsiIiKK1R0bGwsTExOMHz9e95q7uzu6du2KuLg4+Pn5\nYfDgwWjbti3y8vIwduxYuLu7w9vbG3FxcQCAU6dOwdfXF15eXvDw8EBycjKysrLQv39/eHp6ws3N\nDZGRkQAAf39/xMfHAwAsLCwwc+ZMeHp6olOnTrhx4wYAIDk5GR07doS7uztmzpxZZKZtaTp16oTk\n5GQAhROrOnfuDG9vb3Tp0gXnzp1Dfn4+Pv74Y6xfvx5eXl6IjIxEVlYWxo0bB19fX3h7eyM6OrrE\nujds2KC70iiprQCwZs0aeHh4wNPTU7co35YtW9CxY0d4e3sjMDBQ177H3bx5Ey+99BJ8fHzg4+OD\nffv2AQBu376N3r17o23btggJCSnyB8CgQYOwdu3aMr8TqgGqbloJ1VX5+fmiXbt2IiIiQvfaH3/8\nIcaPHy+EEEKr1YoBAwaI3bt3i4sXLwoDAwNx8OBBIYQQGzZsEIGBgaKgoECkp6eLpk2biuvXrxep\n/6uvvhLvvvtuifuOjY0V5ubm4tKlS0IIIRYtWiTeeOMNIYQQZ86cEU2bNhW5ubli8uTJ4ueffxZC\nCKFWq0VOTo7YsGGDCAkJ0dV17949IYQosky9QqEQv/32mxBCiGnTpolPP/1UCCFE//79xbp164QQ\nhRPfLCwsSozv0esajUYMGzZMfPPNN0IIIe7fvy80Go0QQogdO3aI4cOHCyGEWLVqlQgLC9N9fsaM\nGeKnn34SQghx9+5d4ezsLLKysors4/r160WWwg4LCyvW1pMnTwpnZ2fd8vN37tzR1fnIDz/8IN57\n7z0hhBArV64UkydPFkIIERQUJPbs2SOEEOLy5cuidevWuv08eh7D77//LhQKha7+3NxcYWtrW+J3\nQjWLXq49RTXbRx99BDc3N4wYMUL32vbt27F9+3Z4eXkBKFwe5Pz583BwcECzZs3g4+MDoHChwjFj\nxkChUKBRo0bo3r07/vnnnyILOZbVVeLj44NmzZrp6psyZQoAwMXFBc2aNcO5c+fQuXNnzJ07F6mp\nqRg2bBicnJzg7u6OqVOnYvr06RgwYAC6du1arG4TExPdX/Dt2rXTrbN14MAB3V/9QUFBmDp1aomx\n5eTkwMvLC1evXoWjoyMmTJgAAMjIyMBrr72G8+fPQ6FQ6LrWxBNddtu3b8eWLVuwaNEiAEBeXh5S\nUlLg4uKiK3P58mXd2l1A4RXNk23dtWsXRo4cqVsy4tHy2SkpKRg5ciTS0tKQn5+P5s2bF2vDzp07\ni4zxZGZmIisrC3///TeioqIAAP369SuyJLepqSkKCgqQm5sLMzOzEr8bqhnYPUWVKi4uDlFRUVi6\ndGmx92bMmKEb7zh37hzGjh0LADA3Ny9STpSxqqirqyuOHDlSagxS6gsKCsKWLVugVCrRr18/xMbG\nomXLlkhISICbmxtmzpyJOXPmFKvb2NhY97OBgUG5x02USiUSEhJw+fJlmJmZ6Z5N8dFHH6Fnz544\nceIEtmzZgpycnFLr2LRpk+57fNS996TH21xSWxUKRYnjR2FhYZgyZQqOHz+O5cuXlxiHEAIHDx7U\nxZCSkqL7zkuq8/HP1aYVYusqJg2qNHfv3sXYsWOxZs2aYifuPn36YMWKFcjKygJQ+JyCmzdvFqvD\nz88P69evR0FBAW7evIndu3frrkIeCQgIQF5eXpHnbBw/fhx79uwpdlLy8/PDzz//DKBwnOXKlStw\ncXHBhQsX8MILLyAsLAyDBw/G8ePHcf36dZiZmeHll1/G1KlTkZCQILntHTt2xIYNGwAA69atK7O8\nUqnEkiVL8OGHH0IIgfv378PW1hYAsHLlSl05Kysr3eKNQOH3uGTJEt12STE2a9asyNL0Fy9eLNLW\nEydOICAgAJGRkbhz5w6AwmMHoEgcq1atKjH23r17F4nh2LFjAIBu3brhl19+AQDExMTo6gQKr4gM\nDQ1hampa5ndD+o1JgyrNsmXLcPPmTUyYMKHIbbeRkZEIDAzEmDFj0KlTJ7i7u2PkyJG6200fP9EP\nHToU7u7u8PDwQM+ePbFw4cISl0+PiorCzp074eTkhLZt2+LDDz/Udck8Xt+kSZNQUFAAd3d3jB49\nGqtXr4axsTEiIyPRtm1beHl54dSpUwgODsaJEyd0A8azZ8/GzJkzi+338boffx7Il19+icWLF8PT\n0xPJycmwtrYu8Tt6/POenp5wcnJCREQEpk2bhhkzZsDb2xtarVZXrkePHkhMTNR9jx999BHUajXc\n3d3Rtm1bfPLJJ8X20bhxY2g0GmRnZwMAIiIiirT1tddeQ5s2bfDhhx+ie/fu8PT0xHvvvQcACA8P\nx4gRI9C+fXs0bNhQF8fjbV2yZAkOHz4MDw8PuLq66u4A++STT7B79260bdsWUVFRui5CoDC5derU\nqcTvhGoWLlhIVAlycnKgVCoBFF5prF+/Xte/L4fw8HC0bt0ao0aNki2Gx33wwQfo0KEDhg4dKnco\n9IyYNIgqwZ49ezB58mQIIVC/fn2sWLGixEHk6nLz5k0EBwdXaI5HZcvLy0NgYCD++usvjmnUAkwa\nREQkGcc0iIhIMiYNIiKSjEmDiIgkY9IgIiLJmDSIiEgyJg0iIpLs/wH3LeDbXu98igAAAABJRU5E\nrkJggg==\n",
       "text": [
        "<matplotlib.figure.Figure at 0x6bb64d0>"
       ]
      }
     ],
     "prompt_number": 26
    }
   ],
   "metadata": {}
  }
 ]
}