{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "*This notebook contains an excerpt from the [Python Data Science Handbook](http://shop.oreilly.com/product/0636920034919.do) by Jake VanderPlas; the content is available [on GitHub](https://github.com/jakevdp/PythonDataScienceHandbook).*\n", "\n", "*The text is released under the [CC-BY-NC-ND license](https://creativecommons.org/licenses/by-nc-nd/3.0/us/legalcode), and code is released under the [MIT license](https://opensource.org/licenses/MIT). If you find this content useful, please consider supporting the work by [buying the book](http://shop.oreilly.com/product/0636920034919.do)!*\n", "\n", "*No changes were made to the contents of this notebook from the original.*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "< [Density and Contour Plots](04.04-Density-and-Contour-Plots.ipynb) | [Contents](Index.ipynb) | [Customizing Plot Legends](04.06-Customizing-Legends.ipynb) >" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Histograms, Binnings, and Density" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A simple histogram can be a great first step in understanding a dataset.\n", "Earlier, we saw a preview of Matplotlib's histogram function (see [Comparisons, Masks, and Boolean Logic](02.06-Boolean-Arrays-and-Masks.ipynb)), which creates a basic histogram in one line, once the normal boiler-plate imports are done:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "%matplotlib inline\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "plt.style.use('seaborn-white')\n", "\n", "data = np.random.randn(1000)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.hist(data);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The ``hist()`` function has many options to tune both the calculation and the display; \n", "here's an example of a more customized histogram:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n5VI0eu69UWKxmC677LKMNWeNjp75Rcjx48cvuPmUYUjxD03nfXQipaOKZZyTSKamdK4PTkhHRzOv\n8IeGk1M6F4CLy7GjR2XL85772cw8m6GTMQ33mpoa7d+/XzfddJNCoZCqqqrSY1deeaWOHDmikydP\nqqioSK+++qoaGxsladKasyKRiCRp/fr1U39VAJBH/5HvBs4TiURUXl4+6bjNMIyMFwqdf+WLJPn9\nfv3jH/9QPB6X1+vVX//6V+3cuVOGYWjNmjVau3bthDWVlZVjznv69GmFw2GVlJRo1qxL7xpUALgQ\no6OjikQiWrJkiYqKiiadZxruAICLD28cBgAWNCPC/eDBg1q2bJkSiUS+WxknHo/rBz/4gerr63XH\nHXfovffey3dLE4pGo/re976nhoYG1dXVKRQK5buljF544QU1NTXlu41xDMPQtm3bVFdXpw0bNuid\nd97Jd0uT6u3tVUNDQ77bmFQymdQ999yj9evX69vf/rb27duX75YmlEql9JOf/ERr167V+vXr9dZb\nb+W7pYzef/99ffWrX9WhQ4cyzst7uEejUT344IMqLMx8qWK+/OEPf9CSJUv05JNP6pvf/KZ27dqV\n75Ym9Pvf/17XXXednnjiCfn9fj3wwAP5bmlSLS0t+uUvf5nvNiZ0/k17TU1N8vv9+W5pQo8++qh+\n+tOfamQk8+eM5tOf//xnfeYzn9FTTz2lXbt26Wc/+1m+W5rQvn37ZLPZ9Mwzz+iuu+7Sjh078t3S\npJLJpLZt25Zxr/2svIf71q1btXnz5ik1mw+33367vv/970uS3n33XV122WV57mhi3/3ud1VXVyfp\nzF+AmfrNUjpzBZbP58t3GxPKdNPeTFJeXq5HHnkk321kdPPNN+uuu+6SdGZ17HDMzLeyuuGGG9Lf\neI4dOzZj/41L0s9//nOtXbtWCxaY3ymbsz/tZ599Vo8//viY5z772c/qG9/4hhYvXqyZ8HvdiXr0\n+/1asmSJbr/9dr355pv63e9+l6fuzsnUZyQS0T333KP77rsvT92dM1mfN998s1555ZU8dZVZppv2\nZhKPx6Njx47lu42MZs+eLenMn+ldd92lH/3oR3nuaHJ2u10//vGP1dnZqYcffjjf7Uyovb1d8+fP\n1/XXX69f//rX5gVGHt14441GQ0ODUV9fb1x99dVGfX19PtsxdfDgQeOGG27IdxuT6uvrM1asWGH8\n7W9/y3crpl5++WVj8+bN+W5jHL/fb+zZsyd9/JWvfCV/zZg4evSo8Z3vfCffbWT07rvvGqtXrzba\n29vz3cqUnDhxwvja175mxOPxfLcyzvr16436+nqjvr7eWLZsmeH1eo0TJ05MOj+vPyft3bs3/fjr\nX//6jFgVf9xvf/tbLVy4UKtWrdKcOXNm7DX5b731ln74wx/qV7/6lRYvXpzvdi5amW7am4mMGfAT\n72ROnDihxsZGbd26VV/+8pfz3c6k/vSnP2lgYEB33nmnCgsLZbfbZ9xPapL05JNPph83NDTogQce\n0Pz58yedP2M2wWw224z8i3rbbbfp3nvv1bPPPivDMGbsL9h27NihRCKhlpYWGYahefPmzfg92ZnI\n4/Gou7s7/fuLmfr1Pivft8Jn8pvf/EYnT55UIBDQI488IpvNpkcffVRO58x6b6Ybb7xRW7ZsUX19\nvZLJpO67774Z1+PHTeXrzk1MAGBBM+9nDwDAp0a4A4AFEe4AYEGEOwBYEOEOABZEuAOABRHuAGBB\nhDsAWND/AL5epc4Uw0TUAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.hist(data, bins=30, normed=True, alpha=0.5,\n", " histtype='stepfilled', color='steelblue',\n", " edgecolor='none');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The ``plt.hist`` docstring has more information on other customization options available.\n", "I find this combination of ``histtype='stepfilled'`` along with some transparency ``alpha`` to be very useful when comparing histograms of several distributions:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x1 = np.random.normal(0, 0.8, 1000)\n", "x2 = np.random.normal(-2, 1, 1000)\n", "x3 = np.random.normal(3, 2, 1000)\n", "\n", "kwargs = dict(histtype='stepfilled', alpha=0.3, normed=True, bins=40)\n", "\n", "plt.hist(x1, **kwargs)\n", "plt.hist(x2, **kwargs)\n", "plt.hist(x3, **kwargs);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If you would like to simply compute the histogram (that is, count the number of points in a given bin) and not display it, the ``np.histogram()`` function is available:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 12 190 468 301 29]\n" ] } ], "source": [ "counts, bin_edges = np.histogram(data, bins=5)\n", "print(counts)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Two-Dimensional Histograms and Binnings\n", "\n", "Just as we create histograms in one dimension by dividing the number-line into bins, we can also create histograms in two-dimensions by dividing points among two-dimensional bins.\n", "We'll take a brief look at several ways to do this here.\n", "We'll start by defining some data—an ``x`` and ``y`` array drawn from a multivariate Gaussian distribution:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [], "source": [ "mean = [0, 0]\n", "cov = [[1, 1], [1, 2]]\n", "x, y = np.random.multivariate_normal(mean, cov, 10000).T" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### ``plt.hist2d``: Two-dimensional histogram\n", "\n", "One straightforward way to plot a two-dimensional histogram is to use Matplotlib's ``plt.hist2d`` function:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.hist2d(x, y, bins=30, cmap='Blues')\n", "cb = plt.colorbar()\n", "cb.set_label('counts in bin')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Just as with ``plt.hist``, ``plt.hist2d`` has a number of extra options to fine-tune the plot and the binning, which are nicely outlined in the function docstring.\n", "Further, just as ``plt.hist`` has a counterpart in ``np.histogram``, ``plt.hist2d`` has a counterpart in ``np.histogram2d``, which can be used as follows:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [], "source": [ "counts, xedges, yedges = np.histogram2d(x, y, bins=30)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For the generalization of this histogram binning in dimensions higher than two, see the ``np.histogramdd`` function." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### ``plt.hexbin``: Hexagonal binnings\n", "\n", "The two-dimensional histogram creates a tesselation of squares across the axes.\n", "Another natural shape for such a tesselation is the regular hexagon.\n", "For this purpose, Matplotlib provides the ``plt.hexbin`` routine, which will represents a two-dimensional dataset binned within a grid of hexagons:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAWgAAAD6CAYAAACMPN0pAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsvX2QJVV9Pv6c02/3dd5nWfaFXViBCCJRVkI0UiYFv0KT\nqkiAKCqIYJWaaMWgERCFQIkbU9GYsiCKJiQuRogRi1QqqUoRg36DxNcILm+CvC37Prvzcl/75Zzz\n++N09+17b7/NzJ3ZO7PnoWaZuf3p06dv33763M95zvMhQggBBQUFBYWhAz3eHVBQUFBQiIciaAUF\nBYUhhSJoBQUFhSGFImgFBQWFIYUiaAUFBYUhhb5SDbfbbezZswfT09PQNG2lDqOgoLAOwBjDkSNH\n8JrXvAaFQmFJbczNzaFer+eKrVQqGBsbW9JxVhMrRtB79uzBu9/97pVqXkFBYR3iG9/4Bnbu3Lno\n/ebm5rDzN94EDV6u+NHRUfznf/7n0JP0ihH09PQ0AOCer38DJ23cuFKHUVBY1xBCAFkrFUj4T3pY\ndshxw6GDB/G+q98d8sZiUa/XocHDocL58Ej6CFwXbWD+R6jX6ycuQQdpjZM2bsTmzVtW6jAKCuse\nwVqy3iVlAeESAgiRzL45+XsosNx0qEcLYLSUHsSXdYhVxYoRtIKCwmBAwqGvSHi9Q9ZREh/mEfOK\ngVD5kxWzRqAIWkFhjUASskDacPiEJOUoqCZ/UrF2RAuKoBUU1hROdAbOAsnxlFo776EiaAUFhfUD\nQnKkOBRBKygoKKw+SI4RtCJoBYWVhRCrdJ/5Kre0YwUTc8uNGRRW81iDwsBMj9UkoYLC8UP0Rl5J\nIuoljLhjDSpmUFjNYw0KA3ejVyNoBYXVRdZNPEgiynusQcUst895jzVMWugVLRGiRtAKCgprDeni\nvHUESrNldkIRtIKCgsJxQI4R9Boy8Vw7PVVQUFDIAiX5flLw2GOP4aqrrgIAPPXUU3j3u9+Nq6++\nGu9///tx7NgxAMA///M/47LLLsM73/lOPPzwwyt2OmoEraDgQwjRs1R6aUmBaB3mrDbS1ChCCHAh\n+WSpfcnTn6jXB1nmsY47lpmD/trXvoYHH3wQ5XIZAPDZz34Wt9xyC84880zcf//9+OpXv4rrrrsO\nu3fvxne+8x20221ceeWVeNOb3gTDMAZ5JgDUCFphDYAgO3+6HE4RQoBzEaOCEFhM0fu4+DxtCNGr\nThFgTIBx+TrjAGPd7fTuk6c/QsA/T9G1PdpWb8xKIM/1XHrjJN9PArZt24Y777wz/Puv//qvceaZ\nZwIAPM+DaZp4/PHHcd5550HXdVQqFWzfvh3PPPPMipyOImiF4Yd/R8fdW3lUVUlIIua4uKztg4jh\nXMALiLl3f0ii9tjyj9Uh4WSSX1GiTrmey2+bdEbRiT/JB7344ou7HPWmpqYAAD/72c/wT//0T7jm\nmmtQr9dRrVbDmFKphFqtNuATkVApDoU1h7X6DTyr23mocDXPfbXSHQMl6hXQQf/7v/87vvKVr+Du\nu+/G+Pg4KpVKV+WWRqOBkZGRpfQ2E2oEraCQgYFR1PA1tP5AtI6jXdIPye9m9+CDD+Ib3/gGdu/e\njc2bNwMAXvva1+KnP/0pHMdBrVbD888/j9NPP31FTkeNoBUUFNYPBrhQhXOOz372s9i0aRP++I//\nGIQQnH/++fjwhz+Mq666Cu9617sghMD1118P0zQH0Pl+LIugjx49issuuwz33HMPTj311EH1SUFB\nQWFpIMiR4kjfvHnzZtx3330AgB/+8IexMVdccQWuuOKKJXRwcVgyQXueh1tvvXXJFXgVFNYK5Cq8\n5a3Fk5NtBIQsc02fAATE6knhVs2VakBYZ0u9l9zTz33uc7jyyiuxYcOGQfZHQWFVIMUJ+YlHKh4E\n4qby0sgyUFQwIRUYnKe0g8w1FKvPlWuJnIFly+yGDUsi6AceeACTk5N405vetKJ6SQWFQSKQlfUu\nRlnMaFTu202whACUElBKIrUBfWLmgOfrmQUAz5fSxRF10BeNkj6ipgTQKMnV36yYYHtSTHA+a3LB\nSqbELs9S8OHBkgn6kUcewVVXXYWnn34aN9xwA44ePTrovikorBoWS9QyXRGny5ZE7QXEHLNnQNRB\nO0n9CYhaWyJZ9p5T3DlGXyNYw8QcYJ0R9JJy0Pfee2/4+1VXXYXbb78dk5OTA+uUgsKwY7U4bBBk\nmacNQsj6EO+RHG52652go1jTT1sFBYX1BWXY342vf/3rg+iHwgmK7nxw3PbuJEG82U96G0E7HZP8\n+CCZMxYyB5sSI4S0HU5rJw+CfHZaO4HmIzVmACZHizF4GmqsMxWHWqiicFwQx2HRKiNRh7WeKD+G\npLaR1k7wWkBEATF38sJSVqdrJCTq0FTI386ZACGiKz8ctMN4+rkHUl0BASEIIESXY13gYtd1xnEx\nXHRy3EL2ebE55C4zJf8fIcTadbVTI2gFhaUjz+CS8+QgEWWkjKxpWjtyO5eEGkf0AFwmQCBJOKkv\nHusoMTIOJ7kDAT90t8kFMt8cLgDBk9lfGiqJXESdz2Fv7RF1XpXLWoEiaIU1iaz1E3nSDAKIJefe\nGElUaWSXbXREkJ6qGCQkSQ2inTU12ASQL9Wzls5JEbSCwiphdYlhYPZwA2pndUAoAclY7ZO1fZig\nCFpBQWHdgCBHimMNPXQUQSsoKKwbqBy0gsKKYjHWAXmMh5JjBnebpq8KDKMyfYfytZPdm0B6N4gz\nzHiPl+n9NGgoglZQWBFkl57q2yPUEQMdluiUcuK+NK0/RoIQAoPKZddJh067lYOJSOaXh9Jop92+\n2O5/emJ6zz2mv74mOpiQ7KhB+vvjMqk8MfwOdR1LJJ9r/Dkm6dO7uusfZxENrxSC2dismDUCRdAK\nq4qOmVDwyuKJuRciQnwBMQcIpG/UP1YveVJKYFICLqSJUXQMm1RNOyTmHomexwUIkEjUAcGS8K98\n5xT83cuJwtc+B38z3tFPcybgMgZdIzC1xS3MCLrd1/8sxcswEHUeT5WheJLkgyJoheOCfqJeHliW\n5jlYbZewnRICUyfw/FUmaTe5xwSS1MiBEZKeohSIEnUWV2Rpq7mQ554U5jEBxhgKBs3pybG2UgC9\nUCkOBYV1jDw374CeKQPDoPqz1skZkN+IQNO/MVAls1NQUFA4Tlgm/z722GP4q7/6K+zevRsvv/wy\nbrzxRlBKcfrpp+PWW28FANxxxx342c9+hnK5DAC46667UKlUltvzPiiCVlgx9HpexMfkXxWY1k6W\nyVEQA5I+gnI9DkpJyvJu6YGBlNFmYNSvZRgqMQHoWTE8ORcegGBwo+hBVLg6nlWylpvi+NrXvoYH\nH3wwJN5du3bh+uuvx86dO3HrrbfioYcewkUXXYQnnngCf/d3f4exsbGB9r8Xa8fWSWHNIDTyCdQU\nXPQtvRZCgDE5qSXg+0z0sAwXAi7jcJiAw+TvvCfI4wL1toemw9CwGVoO6/Pg8BhHre1hoeVhtumi\n3va6ctZCCLRdhkPzbczUHRxesDHfdPtiXMZRtxlsJmB7Aq7Hu82G/PN2mYDtcTQdBsdjfTEu42jY\nDE2HYaHN0Hb7YxyPo+lwOB5H2+V9xwpACWBoBKbWX4UFkNuKprZIA6Xlzw0Moo2lIFotJu0nCdu2\nbcOdd94Z/v3EE09g586dAIALL7wQjz76KIQQeOmll3DLLbfgyiuvxLe//e0VOx81glYYGKKWnv3b\nup3l4sJEJI73OLoBksS5b2BECNB2ed/koMcFPIdBowQ6JbC9/hjb47A9DlMn0AhBre11KTgAoOlI\nAi2aGoqGBofxvv4wATBPgBIBjcT7eri+mkLzR8Eu65/Qsz0B22MwNQKNAG7MDKTnu+3plMDQAqIB\not/nddqJXYzMLk6C6IdGtnePivOS72orO5Y7gr744ouxb9++8O/oQ7FcLqNWq6HVauGqq67C+973\nPnieh6uvvhrnnHMOzjjjjOWfQA8UQSsMDLmc6nLEeJmKDIG2k+7p6TEOx0s/TtvlsOPYsCuGAUi/\nqfOdk1xAkgaXCfAsHwmSbGIU9NHUpU1qbJ8J6ZH5Lc1YaNAqnIFhwDpoGplwbDQaGBkZQbFYxFVX\nXQXLsmBZFi644AI8/fTTK0LQKsWhcOIiB7kM43x/Hq+J7JRGHiZbe1huiqMXZ511Fn784x8DAL7/\n/e/jvPPOw/PPP48rr7xSpqtcFz/96U9x9tlnr8j5qBG0goLCugGhtGvUmxSTFzfccAM+/elPw3Vd\n7NixA5dccgkIIXj729+OK664AoZh4NJLL8WOHTuW2/VYKIJWUFBYNyBIyP/0xqRg8+bNuO+++wAA\n27dvx+7du/tirr32Wlx77bVL72hOqBSHwomLAX7Dz1uHMEdLyz6WNEsatuTwKoHk/FkjUCNohUz0\n3utJJj1R+4i+mMi25ONI5YbjMWiUxup/w/qBTOqV5XLp/hiPC7QdBsvQEtvxGIfHuKwrGNNpIQRc\nDnjcQ8nUY1baibDsFRcCBSNGNRFBll45kBuSlEKyLpMGUBqVDUZHg6FZkiegaQkqjkXieGqalwKS\nY/38WjofRdAKfQh8IpLIpNfIJ07D3LtzclvCb0Og5TC4oVZNSuUCRQIgF5o0HebXAQTgk5Wh0fCm\n85hA3fbCmLbLYWgEJUsPdcIek+0E8ruO+1unX4xL7XVwXi3HQcGgKFt6eCyXCdguC1UcbZfD0ikK\nJu16cBB0FscED6Gk96Nj7iT6Hj7Bg8bjHb8PjXZaclmn8K3LpRbb0umSiTpPeB41x2oSIkmSuPTG\nrBEoglaIRdYX5GAhQiLx5jyO48nFGHHSOsYFWo5P4D1VtwNwIXXNcjQcH+MygfmmC0MjoblQ3LGC\n1YixDxxIAm67DkomBUuICTTW4yUjdnRPiNQ6BysJkxB00Qhldf2k4vmLYiglseckhOyz43GUrfy3\n+lL4K46ojwcPKoJWUPAxiCxn4P6WhoA80+AlEHgUbhojhsfKDJHVvnM5w6UszyYkl4g4j4FR1nuT\n9zolrFdZFI479w1YB328oQhaQUFh3YBSCjFAmd3xhiLodYS85kQyZjDtLL8/+VQLQuQbtaaBi/68\nbi88zqFlLGZYjHnTcvuc51hZk49BO8s9p7WBvIt01gYUQa8DRD0ugr97yaGXB+OIOvDSCL8x+yWj\nutsRqbnnIMaLpCUoAXSNdjnNSYMiDttLbokLAceVZkkAoBEBXSN9/eEC0H3vjbg8NPfNkFz/dUuj\nsPRuA3uHMRxp2qg5HighmCyYGC2YfX2WlVfk34ZGoGu0vz9c4FjDASVApWDEmuVTApiafM3j/b4j\nAVwuVR3S9a5/0lD3J0i5gG8m1b2/5nt3SB8TX7HS09/wdwBiQA+W44U8Oejjn4fJD0XQaxi9xNy9\nrUPUEvEfyiAuMCrqBfc3BHsvhpijbTge9+VhBI4nFQZhz0hH4SDju4k5QGBOpBGpuohuDdowdALd\n74fjcrS9DjEHcBiHzTgsjQJE4GjLQT1i3MGFwNGWjaNtGxMFC6OWAcQ8lAIjJEOT9qS9Dy4ugFrL\nRb0tibpo0FDNESXAwOQozkgJkG26kXJaOgUMvVspohEBSmhI1IT4pko9x5LXRiTaqQLdn501R9Qq\nB60wLMiXZsgeMOQx+8kz0eQwntonLoBWmyUXaPU72mh5qcdjAiApX9kJIdAoUEtwSwrabroMh1vt\n+L76gQu2i6qhp6dFWHJ6IHjwOR5D2Yq3/QxeoyRd2SEgi4WYelz5KulupxGAkmxZnSyom4Op1pgQ\nWo2gFdYgVucDmeuBkaedZfckp7OerzVOC6UEYRXtROQYaeYaieZQduQxQsqlMMnuTadPawh5Fqqo\nEbSCgoLCcQBRKQ4FBQWF4YQsGpvBwKporMJwIfNL+iq1MXzIlKflbWcAMsC8WM1jrTXkcbNbS5/j\ntaPYVohgcW5lnXJTvfvkaUeExUu5iI8Pdcr+73F51CCGcZ7aDvf7Gd/fTpzrJcdw/zg2Y/JYMTEE\ngEkJxiwjceKfQOqi7Z66gn3H85UraTFtt1N7MOncSY5ryjj3Jx6Xl6nnIruN8HMziEmB1QIJ5IjJ\nP2uIn5c2gvY8D5/85Cexb98+uK6LD37wg/id3/mdQfdNoReiQzVLuT97TY6SpHXRG7fXu4IQv1p1\nJN71C7pGQXuO03IY2g4PX9UpgWnQjnxPALW2i6bNwv2kWVKgSECXcxwAOMwvmOrHcAEwwbF3voWj\nLUfuB6Bq6BixDHmDQhZXLRg6DEowSgg2lKWs7ljL7vSfEJQNDQalcIWA53owNQqTdhQUUeMjxgQI\nE6HkLmqUFMjVFloe6m2GSkFDIeLMFLzHaZdUo4CpSZlemqESIn8nEXBWlfC+dsJ/hn/OkFICkpHC\nEJQgx4r+ocCSCPpf//VfMT4+jr/8y7/E/Pw83v72tyuCXgXkkcNlIVzMkhYDOSqMO15AkvDHpV6C\nLowLWRfQZXJBSi88LuDZLLQPbTmsLyZ4XfcJr7eiN9DRIjdcFzWX4ZhPzNFzWXA91FwPW6sllE09\nbC+ARgk2lAuYLFo4UGuAEAqjd0EHANvXT5d0DXHDMAFI7TYTKJnxNqdcCJ+oPYyVzcxFPzqVbn00\nhnSC66P7m7KIerHEHIshz3TlUdkNc/97sSSCfutb34pLLrkEAMA5h66rVPZaQh6ez3oYJLnC9cZk\nFWV1WXbhVsYFsuwTFmwPs7abuD3QEAfWm3HQKEHFNPoWtvSCi+x5pqxFHsH7l0WY8ZrnuOMlxxBC\nwpF8ahvIETTkyFVzMGG74zi46aab8Morr6BSqeDWW28FANx4442glOL0008PX1stLIlZi8UiAKBe\nr+NP/uRP8Kd/+qcD7ZSCgoLCUpA3xRGHb33rWyiXy7j//vvx4osv4rbbboNpmrj++uuxc+dO3Hrr\nrXjooYdw0UUXrUTXY7HkScIDBw7gve99Ly699FK87W1vG2SfFBIwqDJGeQ2KsrYPLia7L6vbn+yY\nQWDY2lkfyFPRO56gn3vuOVx44YUAZC3C559/Hk8++SR27twJALjwwgvx6KOPrtaJAFjiCHpmZgbX\nXXcdbrnlFlxwwQWD7pNCD4I8rfBn9fLmEnshjX6En0YUfcY5gPza7QZLthPMkmRFEg9cdCbpemNa\nDsNswwXjAqZOY2NkRZKOD0jv13AuBGaaNvbV5XLsrdUipstW1xJlxgX2LrTwy2MNAAJjRQPlHnMi\nxgX2zdt45IV5lE0NbzxlHDsmSn0xwURhdIKwzygKQJMxUM5hUdrnfEfgpyVSrgOB9NLwOEA4h6aR\nvmXXBPK9BeKNraJgIt4IKdrWwFY/D3kGZDkrvV/96lfj4YcfxkUXXYSf//znOHToECYnJ8Pt5XIZ\ntVptgL3NxpII+itf+QoWFhZw11134c477wQhBF/72tdgmuag+3dCo4uYI+AJ5Cl/lYuXo/tEiTls\nG3KijkD4y5kJXI/35ac7ZkkCHgdaPjEHiBoGGRpB2+WY84k5CAuqppg6haHJkk1SctZzvuhIu2Za\nkpi56ExWvrTQxMu1FrZUC5gqWthba+FXs01Eq5PMtlzMtYDRgo6CTrF/3sbeORsg0ox/vu3hoedm\n8D8GxRtPGcep4yXMtu1wclEAYEKErnYln6iDbdH3tMUYKABL06BTAkvXpEFRkkcIJDFHiTSYaCWQ\ndQQ1SmBSIr+qh9fTf39SiDp6PYP2g7A0wgq2RY8VNyDv6crQIk8OOmn7ZZddhl/96ld497vfjde/\n/vU4++yzceTIkXB7o9HAyMjIQPubhSUR9M0334ybb7550H1RiCDQ1qYhmFDvvZED4xxAwPV4pgGP\n48VrhaNoRGsBxsBlAkfrDliCIxsgibqdPI8XYs/MAlzeb53JfAZ/ab6Jxw/XQILXIgj2OdZy8fIx\nuxMTfahwAddm+H8vHoPDPeg9znhAh6ibroeqaSTe1ByAJzjGLCuVGCghsGJsR6PHIwAKOo25ngnB\nCZtEjm9ZHWKOGXH7LwXfatYCMQdYzgj6F7/4BX7zN38TN910E/bs2YP9+/djamoKP/rRj3D++efj\n+9///qpnDJT8YkiRJ6uYbZzTTzxLBc+h8eMZWt68cFj/SL7rOCJbZeJxSTBp+hBCfEJLi5Gls1OR\nZt0ZPVYWcXTSHHnkFmnHymNan8fgKbOJoUOWeiaIicO2bdvwN3/zN/jyl7+MkZER3HHHHWg0Gvj0\npz8N13WxY8eOUL22WlAErXBCYw1ykEIKljOCHh8fxz333NP12vT0NHbv3j2g3i0eiqAVFBTWDaif\nv08PWjuPZUXQCusWAxOfDWr13JCvwlsfWF81CZVZ0jBC5PsIBcZCSY0IkV7aCOhIx5K0tIEumJJ0\njbAQsl5gYm+EABMCdUcqPOKWbQdmSVVTjhuSes65gMd4bBsBiJB1/AITp15QAjQdjrm2l9qOyzkc\nzhPPm0DmzLPMksKl82nH8uWNae3kyQsHfUm+FgDnWdez87OWkGWUlGsp+BBBjaCHCRFfhqBsU+CL\n0QstRoYVNBLcVHI34hOVVCVEY4SQ0qxQviX8OnTo9MN2ORbabqjg0DUCq8fAyPE4mjYLFRUCnW+R\ngaHQkZaNF+daaDNZNXtzpYCtI8Wu4x1p2thXb4VLrSmifhKyrSN1B/sXHHhcQKPAZNlAtaCHE2xB\nwdaZugsuOrpk6kvPqN9nU6OwDIoXZm3sX3CwZdTCaEEL2xFCwOECnhBothzolGDMNGBFisQSSImd\nSSlsT4ASqfnuVVDovs5ZKkM6RlLddQnl9Wz7tRtNvxhseCyCsO3g2vbKIgn8r/j+saIbg2sVfZlx\n+XqnP4AQ/eyVpcMeJixHZjeMUAQ9JIjVnvpaVqoRBNWiA31s74cscKrjMaMe+aEFiJCjbteLd08L\nBnjBYpVG2+urkO0xAY+xkIRaDotVVHAB1B0XNcfDywtt2BG3OyYEXq618Eq9hc2VAiyd4kCj3V+N\n2z+xuu2hYTMcrDmImuYxDhyuuThadzFa1OFxgdmG29UfAcD2OAiASkGHofdX9LaZwK+OtWFqBKdP\nFkApgdfzJnpcYKbtQCcEm8oFWFr/QhYugLYrCbZkatC0frIO4gBpcqTFXE8uOkRdtjS/Inp3jEYA\nalAwLjXuATH3QkR+iRsMywd3QNTpEGL4SXo5k4TDCEXQawSEEGgaSfxwBSOktK+khBAQIT2O08CF\nwELTTc3hxlmM9qLpcTw/14qM3HuPA+yrS2JMO1atzXBgwUnczgQwU+8m714IyBGoFbH57IXDBJoe\nR8FIpipPCJiaBlNLbocLSFLNSC/pKYtagnbSzJKCb1l5EmJZmYrAVS+TvIY8j65G0AoKCgpDCjWC\nVlBQUBhSUEpBM7xpRZZ37RBBEfQKIj6v3Bsjl3QzLifW4gxvgpjAhzjuqzEXAo7L4DI54RQbwwVa\nLvM9G+IN3D3GMd904TCp3IiLqTsefjlTx7zj4dTREjb0GBgBwP75Fv51zwEcrts44+QqTh4r9LUz\ns2DjFy/OwvE4XnfaOLZMFvvMiV4+VMd//Ww/bI/jVdsnMDHWH1Nrujh0tAlKCKbGiygVuj/WQcxL\n+xdQtDTs2DSCaqnfN8bUCGptBtvlfu63u78EwJhlhN4cSZB+IwJUxBtSBTHhRGpCO6ZO4fiTj3HX\nM/h8BROfSe0Ee6WlOWhedcMaGH2upRFyFhRBrwDS8sAiMmsTEHMALgDO5A0ZyOMCYo7GRG9aAcBx\nZeWSAB4X8LgIiVoIoOWyrphAUUB8CZ3HZaWPaGWTYEk1JTKm7jD88mgdMy0nJIRfHmvgV7MNnDpW\nwsZKAfvm2/iPJw/ipWNNqRAB8PjL83hq3wJ+bdMINo0XcGTBxuMvzIZudwDw/548gqKp4fU7xrF1\nsoiXDtXxvf87gGM1G64n36THnjyIUsHAq06dxMRYAfWmh4PHmnA9HipdXjlUg2VqmB4vomjpqDVc\nHJlrhd4mbYfhp88exWjZwGknj2C0bMLSCEomDdUPNhOwmx5MjaBsaTA1gjHLxIaifBDFTcYBUWe/\n+OtJCAlNpboUOBF1BYE0VDIjD4feax7nu0JIR5kTKoGC/5PO371EHhAziQQmfX7XAvGpHLRCKvLo\nRgN3ueTt8sZOb0PW+UubGPO4QNtlmWZJ8y0X9XZ/yanosZ6ZqWNvrdV3gzPfSe652SYeeGw/Dsy3\n+5zzggfGL/bO44e/nAFnok+x4TIBt+XhkadmMHOkBs/jITGHx2ICtYaDx586iMmpKgxD6zOU4gJo\n2Qx7D9YBIv0tojECgOACszUHT7SP4f973cmJE4cOE4DNcfamMegpNz7xVRuJhkpCKmiqVrwRUrCb\nRkg4QRnXFhfyfdJp3PZ+oo7rTkjGwe8p/VlL8roAKgetsGwMSvyfp508h3K87KjZthsrpwvAhMBM\n3ekapffC49JdL63fLhNotb3UvjAmQChJdfsLdMBJChIAMHUtcyFPUaegGavTkkbUUXQqbSXHBjFZ\nx8oyyAJELpJSZknDD0XQCgoDwFq66dcz1AhaQUFBYUiRNkcQjVkrUAStgDyJkDypklyZmwGld1YX\n2asz1sIquxMBJIebXVZR2WHC2hEEriNkfz5ExMgmntGEyM4zCn9GL80Uh3GpDOAiuaqKxwUmCkZq\n7phxgemqlK4ldYtzDkBA8HgDo6DPluWbJSVNchGA+ROIce0Q2VBqkl6aJXl+6a34OAJf/ZJg7hSA\np5xP0A7LmPQFEObUU02XMj4XeZFlyrRWQYFQHpr4c7w7uQioEfSAETWlSY4hMDQ5K9890SX6VBKy\n7JAIZ9uDm6pXfoeufeS2pu3B9oksKNwaHJ9xDpcLvDzbwNGmA0qAUdPEiGX4ZbQIPM7RcjkeP1zD\ngbosH1XUSVfdPcZlgdhnD9Ux23RhGtR3m5PSPC4kMdttF/v3zqLZsKEbGqamqiiUpe+FCPrMBBpN\nB6AaDItAMAbP411EXS6bGBsvw7R0eRyX+TX9oucuNeFyVEtgmVrI9hqRHh+TowVsnCrjSJOh5ghM\nlvTwvIK7rObFAAAgAElEQVS2KibFSEHHvkYTJV3DZMGCTqUcT07FAUWDomhpIJDnGlWwBO2ULQ3l\ngu7HiNiJ1EAD73F5rQNdSXTCKyCY4HOByOciCkJITvIla1KpkYZhlNk98sgjuOeee+A4HbuCr3/9\n67n2VQS9AuiVKcXHEGl4Q4IbO7nMkwja8sknjZg9X+tr90jUgsKtGiVgQmD/QisslArIPszaDuZs\nByVdByUUT8/UcbDRiREAmp4A8WRxUsY4XphpYq7ZKTQYeIZQKtBsOmi3XBzcP4dWs9OO5zIcPDAH\nXdcwuWEEhmWg1XK7RpmUUoBSEI2DQsAwKMYmyjBNPRJDYFo6dC7QbrtgjMPrUYkIIdC2PRBCMDZi\noVI0cPJUGWZEWtf2OPYtOLB0gq2jFkomxYildyk8mh5Ds95EUdewpVKCZVAUTa0rnxm9ngBQMChK\nlt4TQ0CJCKWWhPQvThJCen4QAuiEJC4YCmIlUfeTdHD+vUhqJ4br1xyGcZJw165d+OQnP4mNGzcu\nel9F0CuIxRC1myxDDtGrHe6FADDfTK/K2nIZnjtWSyZ5AIebNp492krUT8vjeHjxSD2xT4QQ2C0X\nr7w406dnDuB5DLPHGqiMlBL7QylFtWpiZKSQeE5UliWH6yaLwoUQ2DRVxnhKO7YnULU0jBSSb4uW\nx1C0NBQTtNPB9RwtGom5UBlDQEjG9RRI0Dznx1palDEIEP+/rJg4fOc738EDDzwgP7u2jaeffhr3\n3XcfPvCBD2D79u0AgCuvvBJvfetbF9Wnk08+GW984xsXtU8ARdAKCgrrBtE0UFpMHC699FJceuml\nAIDbb78dl19+Ofbs2YNrr70W11xzzZL7NDk5iVtuuQVnnXVW+MB8xzvekWvftZQvV1BQUEiHn4NO\n+8nKcfziF7/Ac889hyuuuAJPPPEEHn74YbznPe/BzTffjGazuegubdmyBRs2bMDMzAyOHDmCI0eO\n5N5XjaCXiCC3F51kiTM5isbIuPgYjZJwci/uWI4nl21LL4d+j2AuBA4vtHGw1sZowUDF1PuNkDjH\nMzN1PHe0iemKiVGrf3myyziePdzAS7MtjFes2CXMjsfw0sEaZuZbKJVMmGb/133PZViYb4NoGgiX\nyo1ecMbQmpuDvTCPytQEDMuKacfDwb01HDUoTt46iUKx3+TI8zicjBxRtWRgomrC0AhcFq9XKRoU\nLY8DtodKT345QEHT0Gh7YEygZMXHEAK0PQadxl+r4Dozf0IwKb+ctcoxejwFCY2SzPcta/vdd9+N\nj3zkIwCAc889F3/4h3+Is846C1/+8pfxpS99CTfccEOuvhw8eBAbN27E7/7u7+brfAwUQS8ScaQb\n/N0rfYvLPUcnbUQkJjDqkZNMQWUUAdvjaDudCUTbE3A8BlOXN78QwKFaG/vmW+F+Tt3GDHUwWTJR\nNWWlkWdmGnjicA0CAh4HWnNt6JRgU1WWenKZwDOHG3jmcAOAzHfbcy0YGsVExULZ0uB4HC/sX8DL\nfgzjAo7bhqFTlMsmDIPC8zhmDtdw7Jh0l6OaBkuTNbds24XgApwxcLsJt2375y1gN5oolIsoT07C\nKFjwXA/N+TpazTYAmTecO1bH2HgZG7dOoliy4HlSHWI7TCpP/Pc0OlE3Wjbxa9vGUS0b0CgFAaBT\n+T7ZfsmookFxUsWAoctr0HI5mi5HyaAoG3I5eFHXMGFZ0CkJfVBaDkPR7EwEEiKdBINrL4sadB6q\nQL9yp1PRRIRErVESmiWl5ZBDXw1CEiumBJuDD1xmzBrHcicJa7UaXnzxRbzhDW8AAFx00UWoVqsA\ngIsvvhif+cxncvflnnvuwU033YRbbrmla9KWEKJUHCsBqSfOisnTTvyNElxECoBxjvmmF1+mCJKo\njzVt7J1tQqDH8Q4AuMCRuo1ftup4brYFoHuSkQtpBvTyfBsLB10cmG+DgPTF2B7HofkW5hdsHJlt\n+RK9boJxXA53vo1m3Uaj3pak2+WDIe8aq2CiOTsLu9GM1NYLYgTa9SbajRZooQThT+UEm4XPLnPH\n6pibbWDT9g0wTaPrPYn2iRDgDb+2ASMVE1rEHlSgM5FXMiimq4Zv/Un62mq5HI4ncM70CEyNxsc4\nHLbnYsOIlTgS7hB1ckYx+EyUzGSzpABdxBy+GOi/I252vU3kiVnjIDmqeqdNIv74xz/GBRdcEP59\n3XXX4dOf/jTOOeccPProozj77LNz9+Wmm24CAOzevRvHjh3Dvn37sG3bNoyMjORuQxH0EIIQ0ucI\nF4e67aaaAQkAR1tuqvqDC2Cu6fquePFxXADzdSe1KrUQQKvp9BBzLwicVjtsM66/EAKcAyDxvQn6\noBt6qizR1ClGKlbq11ldk7aeSTe0HF3L2oNJy4MFENqHZpFq1opEPe+oOY2ASNoRFhGzRrHcEfQL\nL7yArVu3hn/fdtttuP3222EYBqanp3H77bcvuk/f/va38dWvfhU7duzA888/j4985CN429velmtf\nRdAKmbIkIN9Ia/hGY+mEOEjkzBavcC8UZE4/a6FK8rbrrruu6+9Xv/rV+OY3v7msPn3zm9/Egw8+\nCMuy0Gw28d73vlcRtIKCwomHYC4iK2Y1MTY2Bl2XVFsoFFSKQ2FxyE6m5PSwzhNzQmP1RvQnKgah\n4hgUrr/+ehBCcOzYMfzBH/wBzj33XDz55JMoFJIXS/VCEbSPPJ4E2STVPYkYv6RWdKk3kmJoUGgu\nKfcphFRHZKBsapjxVxcmdd/SNdRtFqogYg4G06Ro+Uum40AAaDqFl1LihQgOTdfg2SzxvDSNQhAB\nQmlYxqoXlBJ4rgfTNJLz0BxwPQ7NTJuYk9eCIvm9cRnLTN3kMUKSB0hvKK06TthMwtJuBYlh8uJ4\n5zvf2ffa7/3e7y2qjROeoOPkckC3L0GUTONNaDplhoJ7Vbpmib79ZFURSQyyZmB32wJAve2F9fpM\nnXbVsAti5lsujjVc6EQ60fXe20IIMCEwVtRRNEo4VHcw2/L83kpwLjDXdFGzPei+DpuJjlxNcAHG\nOV7eO4sDBxdANYqxsTJ0Uw9lgQRScdKo21KLTCThRbmVCAbueWi8/By8o4cBswA6tgFcMwAiCVTT\nKDRdx9TWk1AZq6LVaGPm4Bwc2w2JmlIC3dAxOjkCQjV4TEDTSNeDhVKCkqVj80kVNBwGj6NPr0x9\nBcfGERMlg8L2OFq+h0dwToQAE0UTZ0xWMGLqsD0O219KHv0EFA2K0ZKZetPrGkFB10CINFOKm7Q1\nNALL6NdMx2P9mRwNCsPkxXH++ecvu40TlqAz5XLhP93oNaEJpHe9g6hOwVVIY6EIMQeIFnclRKBh\nM19R0YmSJkdSlUCJwELbxbGmG8rTAl8H6hMy9//vRU7Q0ilOGStgY5Vj/4KNmYaL+aaL+VZHxheu\ntBICrsfguBx7X5nFwUO18Fw5Z5g5sgBd1zA6VoJm6Gg2bNjtbrMkEbyDrgvmuWi98jzcY4c7J+60\nwA+/BBgF6Bu2QCsUMbVFEnPw/parJZQqRTTrbRw5MAshBEYnR1AoWV0kFoxeC6YGy9Kw5aQqquXO\nYhaHcThNDkMjGCsaKBoUJ4+YKEUW1xQMDZZO4TDpNDdi6ThzsoKqZfTF2H6tRNPQMFoy+qRzwXtF\nAGg+MUc9OQydQPeNkgKrV8tIVolEkWyWpIg6wDCNoAeBJRG0EAJ//ud/jmeeeQamaeKOO+7okqac\nCAgucloNPsDXG6eY+ACSqA/OtVNTuI7HsX+hldofDUCLJa+oMzWK6ZKJx16ppZoctdseHvvFvlST\no2NH6zBNPdHkiBACe+EY7Jeegecm1Bh026iYHCe/ZgcE6U9FEEJQrhZhFkx4CX0JsGlDGRsmy4nb\nXSZw8oiByXL/SsTgWJZO8LqNVVQi+uremIKhYbJipRohAdJiNIl0CSEwdIJiTiOktUQoxxsE2V4c\na+ndXBJBP/TQQ3AcB/fddx8ee+wx7Nq1C3fdddeg+6agoKCwKAzjCPqpp57C/fffD9u2w9d27dqV\na98lEfRPf/pTvPnNbwYg16rv2bNnKc0oKCgoDBTDKLO78cYb8Z73vGf1/KDr9Xq4Ph0AdF0H51ya\nrK8TCCHk5BRJLnUvhPRPSFlgl1oqKYDHOHSNpFZJsT0GJkRoPxhnwFNzPMy0HFQtHQW9/1oIIbBv\nvoVa24Wp064l0GEMFzi87zDqhw9Dr45AM/pTAkIIuLMzsN02CtMnQ7NiZEMEGN0wATJyDg4/9TTc\nVkx6hlB4RgmzxxqojpWhJahSDINC0whsOz59Y+gUEyMFmDqFk5AKKegUJ5UtmDpF04tvx9IoiobW\n5eXRi6DyCUjyNc9jeSknIgezQAhIFfycUBgmmV2AqakpXHHFFUvad0kEXalU0Gg0wr/XIjkTf+q/\n9x4LiDl83V+6LM1sSJ+SI3ChA5EThcEmLgRYxnJtj8mSUnKyiEKjMt71eMcsiXHMtZwwZxzQD430\noeYwHGzYcLncr+k6MDWC8aKBgk4hhMCLx1r4yUvzaPs19hxPTpyZugZdo+CcY9+LB/HUz5+F53rw\nPAanUYdZLEIfGYdmmhCcw52bgXPkAIgQEJzDnjmMwvgErJPkZB8hQKVawOhYMTTSn9xxGhb27sW+\nx/fAbTYBqsGc3gRtajOgUdRrLdQWmqiOFFEdLUPzpS26JguAEr8dy9LhOgxt24MQgGlQ7Ng8ik3T\nlbAqiaVLM6mgokzJoHjtxiq2jRclaRKgauqoOx6aHoOAJO9toyVMlqyQOIUQXQ9MjRIUTdo9Kdhz\nzSmRVVQCwyRC+n1XCIIKKp2RXNxnJCDbROljDNSE4XCmODZv3oy7774br371q8Nj/9Zv/VaufZdE\n0K9//evx3//937jkkkvw85//HGecccZSmjn+iNwknPcQcw8CjwlKkssLaZCFV9tuOjFzLtBwWE89\nQv/DBanYsBnHwfk2vIQ+cUhLy1cW2vB6bEoFAJsJHKo7qNse9ryyAMeTNQijcJmAxzzMHTmGJ3/8\nNDhjcLtsOwXcVhNOqwWNCPD6vNQMM9bVJ2fuGNqzs9hw5unYeOZp0CjtbCcA1TSMb9+Gka1bcfD5\nfajZgEYpOEho7AQAjVobtYUWTto0jnKlAM13jovKHAuWDsPUsGWqjJOnytAiuioRxBg6TF3gnJPK\n2Dpa6DMxIgQYsaQl61TZwqhl9HlcEEKga5KoCwaFrtFQ6hiFTnxNuk5D4o3GBEQsRISYe2MgAwQi\nxEx6tiPnYiGc4ESdQ2a32jkO13Xxwgsv4IUXXghfW1GCvvjii/HII4+EQuy8Ce9hBiHLXwgnnd6y\nV+a5XPSRc287TYf1EWov5m0PTkqMAPDS0SYaTrKyQwB4+ZevwG478dt9vSFvLEAwhriWpE5ZYOqU\nTaBRcu46jrQebXIdhPbrtoGODWe5XAAhJDbNwCFTTpunK6kmRwVfWpgmX7N0DaMFIzVGo8Qn5xSd\ns/+1Oi2G0gyjI//hTJCcqwhG5HlwQpIz5GcjS7KYR9I4CHieB13Xcdttty25jSURNCFkWQdVWD3k\nWvaQI6ijb06Pye5Pji/tA7p/RLDqZEiQqysnKrMOCMO0UOWGG27A5z//eVxyySVd6ycIIfiv//qv\nXG2csAtVFBQU1h/yTL6u1iPw85//PADgu9/97pLbUAStkBPLTQApDNmAfl2CIrvQ6lqSM6ylvg4R\nUvLHOYgsPkvbDSOHFMik2U7OBUPL/EpnloqpKhxKCTgoSGoMRatWh+ApZkkAdF1LlaAZGoXnMqT5\nQBkaAWMCWtp5+cve0xBXJ7EvJjMCsfn05IYy+jSg5+Cg2llroP58QNpP0irQYYQiaB/BrH0WmQUe\nG1Jq17kLAnle8sSe8KVbHA4TicQqhIDLODgHxiwDZgIpEgCTRROnjZVQMbS+9rgQWGi5aHsClYIs\n69QXwwVqC22QyjhGtmyFWSx0kbDU+xLopQqKp54Ja9N2aFZPjCZnv+jIOPa+soB9Lx+F53hdRE0g\npZizR2vwPAZfXt5F1IZGoesUp502hdO3jWNitNCnaTU1goJB8cbTJ/Ebp1SwddSERtBF1Lpfz++0\niaL0OmG8z+CK+HETZTPzAacRAseTUsg4oyxK5IRkXpN4EfPZiYvLaicLJ2oqO9CgZ/2sJr71rW91\n/Z23HiGgUhxdiEqreMqikS7XM78eoMt4GB+9GeX/pWrD9m/0IIZE2hK+gU4zIr/TKcWIReFxjqbL\n4HAerpQK8mwlQ8OpYyW0PIaDdRs1x8N8y8P++TYcT7ZjaBRG0YTHOJq2B5dx1BZsHDrSCD0urEoF\nZrkMt9lE4/BBOK029HIVVmUEVPM/JtUxaJVRsMYC3MP7wBwbpDoJY2QSxI9ZmGtiYa6J6mgRGzdP\nQNMp5o42MDvbCEeslNLQlU+jAKEEO06bxrat4+FiFdPQMFaxMF93MFezoRHgjadP4Owto6HOePOo\nho1VE4fqDvbOO9AIwasmi9hYMUPCZAL+aFtqzXVKMFmyUI6pVh6FTrvLWDEuwPz+apSAEkSkdZ12\neiuzJ9UplAtLQquqRRFq7+crbtuJimHSQf/bv/0bvvvd7+KHP/wh/vd//xcAwBjDs88+i6uvvjpX\nG4qgY0AIgaYR8AyDHiE6laHj25H/r7Xii78GMQTA0bqbGBMQ9bGWnfjhKuoaNlcL+NbjBxIfLLIG\nH8WTTx+JlfkRQmCWy9BO2Q67EW/eRAiBXhkFKVQgGEs8Vm2+hUbtAKyCkXgsANi8eRRnn3lSbPqE\nEIKxqoWd20dx5oZy7LlrlGDTiIVtowXoNFkOxwRwcslEtWCk3qAaTV45CkiirlgUuqbFbg8K0gaz\n9VlYDllEifpEJ+YAeUbIadvvvvtufPe734XrunjXu96FN7zhDbjxxhtBKcXpp5+OW2+9NXdf3vzm\nN2N6ehpzc3N4xzveIY9N6aKM5VSKIwXD9plfzRVQeUYhg+hP3hHPsMVkYXWv1aodaugRyOyyfuLw\nox/9CP/3f/+H++67D7t378aBAwewa9cuXH/99bj33nvBOcdDDz2Uuy+jo6P4jd/4Dfz93/89duzY\ngS1btmDTpk1gKY6TvVAjaAUFhXUDkmOhStLD83/+539wxhln4I/+6I/QaDTwZ3/2Z/jWt76FnTt3\nAgAuvPBC/OAHP8BFF120qD7ddttt+N73vocNGzaE36zuu+++XPuekAQd5AmD9EJyjhCxfh3RdhgX\nqSvEGBdou8z32oiP8RhHy/Ng0HgDI0Aaz9ccF0Vdg54QUwtKUqVM4S8stFCbq8EqF6ElfE3nnGeu\nhrQKBnTdwsJ8M1ENYRYMGJYB1opfpQgA1YrlTxrGpwQIgKoV389ozIi/XDtp1SSBXEKftUxG9z8U\naQIPLgAixLJXpKnyVYPHcmR2s7Oz2L9/P77yla9g7969+NCHPgQemewul8uo1WqL7tNjjz2Ghx56\naEl+RScUQQfE3Jm8k/+nVERMcjrxlHb+jvp0BEqLIEUtJ+VFmNuSS74FFpouGrb0rbA9KR2zDC2c\n5HIZx2xL+mUIADbn0AlBQdNCorYZw+FWGzVHmt7XPA9FjaJqGCFRz7dd/OJgHYfqNgzfdAlCknqA\n2dkGnnxiH2aO1iGEQH2+jlKlhGK1Y07EGANzXHiMhwZFBOiqDWgVDIxPVqDpUjkyPj2Chdk65o7W\nwziraGJ0ogrNXyJdqhTRarbRatohO27cUMUZr5qGaWrhZCl806nAk2TzqIVXn1QO369eEMiyVCdV\nOku6OReYaTqo++8XIcBkycJJVStst/d6ApK8rYgDoIB8cIYTv36MqVPpy8IBDgFK45cOZz0IwuOI\nIF+9ummR9QqN5HCzS3ifx8bGsGPHDui6jlNPPRWWZeHQoUPh9kajsaiK3AG2bdsG27ZRLBYXve8J\nQdC9xNyL4CEpiTp68Tqz65TKdtouQ9LcoZTgCdSabuxIjnGgaTMQCDRcD02X9d3EnhCoex6IAGYd\nFw23u44gALQYR4vZEFzguSNtzDQceX5Br/1RoEkoFhZa+PFPXsCx2aYcGUcaajdaaNSbKFVKMAsm\nOOORh1DQllRZmKbeIebIB5wSgvHJEYyMV1BfaIFqWii9C/pNKEGlUkSxXEDJINixfQKGoYUjiui5\nCQFsHjFx9smV0OMiDhNFExt9Yu6qN6gRbKhYmBImHM4xXrRASD+Japo8lk4JTJ+Yew2KDI2GBkam\n1h8jIK8pg4Dha/3kZoLOvyLtC03XeSuiXj6Ws9T7vPPOw+7du3HNNdfg0KFDaLVauOCCC/CjH/0I\n559/Pr7//e/jggsuWHSfDhw4gN/+7d/Gtm3b/OOrFEcfcgn3U5Z6BaPiDGEHHJejmWJOBAAtj6Ph\npscsuC7qSaWifLw028ahenL6gBCCp54+gCMz9djtUXUFSygpHYSMTpShG/EfFwE5O20WzOSHoN+f\nM3ZMQ4/xqg7aAYBzN1dTR0EEwOZqMZHIAtJOV2xIqZypJys/CCGggK+PT+lP5JtT3HEI6dQqVFhZ\nkBwqjqRL+Za3vAU/+clPcPnll4dl/TZv3oxPfepTcF0XO3bswCWXXLLoPgVLvpeCE4aghwtiUT6/\nya1kI89YLI+BedLXwq5jpae/c3do1caPQzhQVYPn5WG5bnYf//jH+17bvXv3svr0ne98p++1D3/4\nw7n2VQStoKCwbrCcFMdKYWpqCoD8FvXkk092TTxmQRG0goLCusFyF6qsBALf/ADvf//7c+879AQ9\nkFVSi8olLM9zjNDsw5Eclkp5zln3lxynScIMU4fmmwslwWUclq4ltkMgy3DpZnIKI5gWoyR5iTwl\ngOdxmDpNjXG5gJVxFy3vKkUaGQQGmF5WqwKXB+L/lxWzmohWUjly5Aj279+fe9+hJegoESy1hE8w\nMZP3/ukcU3TNxgftMF9KF0sugbcEIRgt6Wi0WVhHsCcQBiUYMQ00XQ9eD+MFHhWCAxalss5gzHkx\nAZRMiumqiWMNt6/gLBcCrscxuXEcLQYc2DsDzng4GUgAUI1iZKSAU1+1ER4TeOWVWQgh5WUAQkXB\naLWATSdVIEAwX7PDCdMgBgAqRQNbNlZQqzs4dLQJCoTnH/hRbJos4eSxAjiAhZYHEnkvA8OjHZMl\njBg6CAXajHfl6oPLP2IZaNoeCoaWWMnE1IlfLzL5+hcMCtOgYCz5oWJoxC/om9xO6udSZCnKc7aj\nkAsaARLmoLtiVhO33HJL+LtlWbjhhhty7ztUBJ01wZSXqENiFumjywAkps1gEQEg9cQeCwip47XQ\ncbVDF0EaGsVYmcJlHE2bwWUCUbkVIdJxzdRMuIyj4UkDIw6g5XqhI55OCTRCwQTgcg7mE/NC24Pt\nGyFVLA1lk6LpcBxtuHA8DsdlOHishaYtVSAT0yMYn6pi7mgNB/bOwHU8jI+XseOMkzE2Xg7PeXq6\nipmZGva+MgfPYxgfK2Hr1nGUy1YYU62YqDcczNUcCC5QLRmYGC3CMqWWulQwMDVRwtHZJg7NNCGE\nwNYNFfzatjFUikbYzkjRQK3tSqIG8KqpMn59UxVls/ORLAmBluuh7T8wRi0D4wUz1H+7TMBlwidR\n+ZqlU1hGtzJDLijqjLoLBkUxYpak084DLbiGpk5gREpdUT9GutrJGI1IrXxSxfe8SFeBKCwGw2SW\nFGD37t2YnZ3F3r17sWXLFkxMTOTed6gIelDgKaOdKOKIOYq2m2wGFBB120k2SzI0itESxUzNTnz4\nGBrFmGbiV7O1WF9hQgh0AmiE4oW5dmx/CCEoWxoMDfjvPYfhev1BhBCMT41gYnoEZZOiWLL6Yigl\n2LBhBNPTVTCPw7T6Px6EEFQrFkYqJnRCocUMVzRKsGGyjG0bq5gomyiY/SsBNUowVjLxa9MVnDpe\nQDFGwkcJQdk0ME4JCrqeqDZxmYClA+WCHr8akRDoGmAZ0iwqLoYSAsvQAIhEsyRKCKjWqeo+GC8S\nRcyDxDDmoP/jP/4DX/ziF7Fjxw48++yz+PCHP4zf//3fz7XvuiToPMgi50EfK+uBkZ2Tji+i2hvj\npeSag5hC0cyMsSw9tU+EEOh6eukBjZJYcu6L0dNjaI7VYXlGTmkudYuJGRShKnIePIZRxfEP//AP\neOCBB1Aul1Gv1/He975XEbSCgsKJh7hVo3ExqwlCCMplmUqsVCqwrP5vr0lYdwSdN/cXpJiTLpYQ\n2Ut085glCb/0kpydT/5klA0dTY8llmniIt/ilpNGCziyYMd6MAf9abU9FBPSAYAc1VqGhnbKakdD\nIyiaWuqqSUunMDUCJ2VUX/K9SdIG/nnUKnm/tubxac7r5awwfBjGFMfWrVvxF3/xF9i5cyd+8pOf\n4JRTTsm977oh6OjEIIkwWRqhRfx5QqIOSNdlybPvQgg4HoftdvLPhAi/CkdH+dG0mTRCCiYHU7wW\nNpYLEADmbRezbQfM34kLgZrNsGAz6Q3hT06yCJEL32eEEopzt4+DC4HnD9Xx4uFGSNRCCAguq7a4\nDsN8zUa1bKJUMsIRh0YJxsoGCv5EnRDAQstB0+6QsKlTbByxZL4XcnL0aMNFvd1Zll4yKbZPFjFS\n0EOlRs1m4cQmAIwXDLz2pCrGC4ZPvgJNr1v5YmkUY0UDhj8ByIWA44muh4+pU1SLeqKhUnBepiad\n7Lh/0eMqnQQfGwIsO88c3S2p8on/ScFQLmlco9AIyVz1mmdV7CCxa9cu3H///fjBD36AHTt24GMf\n+1jufYeKoLvetxh51GJGu2HsIoiace4rLpKP00vMnW1ysopAbm84rO8cwgdCDFEHTmtjBQOjloG5\ntoPn55pYsBlAuo2QdAJQIQnLY77Phb+dUgIKgtNPruK0kyp47sACnj9Qh8s6bnsBv9WbDhYaDiZG\nLGyerqDQUwaKEGCsbGGkKNCyPYyVDJQsresrpK4RbKiamKqYqLc9bBwxULH0rsKcGgFGCzq4ENBA\ncC1Ef9wAAB4ySURBVNZ0FSOWIctd+T3XCEHFkHl2T3BULR261l3rTyMEBUP46hyBSkFPlNkBEWKO\nIeOAqDUS5K9jm+gi6riYxM8dej6A6AweSHegwgAxjDnoJ554Aowx3HLLLfjYxz6G173udTjrrLNy\n7Tu8FVVI581Oe9OzUhF5LwYXIpWcgcDbOVm1AQC2J1C3War+VvYrvmME0kug7spRc0DqUQgE5k2d\nitL9DzMpPWvZHYlgb4qAcdn25GgBRSs55UEpwcZRC5WCHm+t6U/inTZVxEjRiK2aTIgkzPM3j2O8\nYMhvGz0jx6CdiZIJU9cSj0UpwWjJgJ6gyAhg6TRRBhftV54bOikm+zNKQnIPR+2KnFcMBNkFY1f7\n3b/99tvxlre8BQDw0Y9+FHfccUfufYdqBL1ekCdXnIXBmZ9lL5RIKgAQRR5z+jy8I9NJK3+LDB8F\nHgdmOAGxXLOklYBhGGHeeevWrYsy7lcEraCgsG4wjCmOTZs24Qtf+AJ+/dd/HY8//jg2bNiQe9/h\nTXEoKCgoLBLBCDrrZzWxa9cuTExM4Hvf+x4mJiawa9eu3Pse3xF0ngnsVZvkzs4p5KrmnKulbORN\nKZCMXLf8QKZL1NwEs/4oggm+1MnWHCeeJCMcNFbnKArDhmEcQVuWhWuuuWZJ+x6XEXQgCxOR35ca\nk8Xe2XwgQulaVjsE8D0ckmKkOsMy6JKfKYHfA6UCJVNOo/W2FUx2bKpYOLlixmo/g/3O2zGOc04Z\nha6RsCxTAJ0SmH5faWS/KDQCFHWKU0YLmCoZ4SRMbztVU8P20RKmi2ZinyuGBpfzxPeGQMrmipG6\njXGwdBoaJSUhMEpKQ5zUTmFtg/oyu7Sf1R5BLwerNoLOa4S0lJio9rg3Lk3LDEhlBuPxE2n9EipJ\ncjol8LiA7Xt1hNpkn+UNjYYxjtepAxiscurtL4BwMcuhZhszLRscQMHQYOlSOdJyZSwlwFTJ9PXD\nsp2TKhYONxwcrNthtfKiTmD55ZzO2zGBc7aN4cm983j85XlZi0+j2LaxiqnRQtgfIkTopkcJUNAp\nzpgsYbrcKR21ecTCgZqNI00XBEDZ1HH2dAUbSmYYs7XK8Eq9hSNNB4QAFUPHqWNljBU6ZkmB+ib4\ngmTqFKMlw/fDgH9tOFoOC9U1BYNipGiENQQB6ZjXdjr66UBaF6ckCUBJdxmruM9NcL0Uga8txA0O\n4mLWCtbVJGFwM+X5Gu0xnrp6Les4AVHPNd3YVXvRmLbLw9fi+iuEwAvzddRjisgSIlfsFQyBim6g\nZPTLzygh2FixMFUy8MJcCzrtP5apU/z6qeM4fXMVTx5oolrsr9cX+FlUDYpXTRYxUeyX3hkaxSlj\nRWwfK8KiGsZj2rF0DTvGKjhlRDr0Vc140yVCJOlWLB2mEWeoRFEpUBAI6BqBGePZoVOCSkGH43II\nkp4a0ihiddPhA4osf4GKwvHFIFQcR48exWWXXYZ77rkH7XYbH/jAB7B9+3YAwJVXXom3vvWtg+pu\nJtYVQS8Gg8hR5spJk3zmOw2vn5x7Y8qGltoWJf1pjF5IK1QzY9k0wVjKUvCgnfHUoqxyJWBgA5p4\nLEpgZBj46hrNPC9K8xRBGD4rSoXBYrkjaM/zcOutt6JQKAAA9uzZg2uvvXbJOeTlQqk4FBQU1g16\nFw4l/SThc5/7HK688spQCvfEE0/g4Ycfxnve8x7cfPPNaDabq3QmEksi6Hq9jg9+8IO46qqr8M53\nvhM///nPB92vZUH4udT0mOx2pDl7eiDPiAn6khVjDmCxSF6jqIKRMaqNmXTsRR61ilyUkhGTc8A6\nKPHHKolIFI4bSPhNKeknaQz9wAMPYHJyEm9605vCe/bcc8/FJz7xCdx7773YunUrvvSlL63q2Swp\nxXHPPffgjW98I66++mq88MIL+NjHPoYHHnhg0H1bNIQQ4JHv7nH5RLmkO325tsc42i4Pc8umRmBG\ncr+BJ8dCyw0nsCgRXfnNoIqHwyKThD0eHEIIfyKRYXO5CC6Ao7aNmuN19a9q6JgsmNCI/BpvM95l\nKiSEQM3xMGe7qe+PoRGUTR1jRR2OJ/DKvIP5dscISacEp40XcPpkSVaNAdD2eJcxE4Gc9CsbOgDp\nndFLxDK3rIUPAiYEHJd3pVU0SjBa1FEudIyZetMuBICmSZmggHxg9iovwolG0nlo9E32+cfz33UI\n0ck5K6wvUGSPOpO2P/DAAyCE4JFHHsHTTz+NG2+8EX/7t3+LyclJAMDFF1+Mz3zmM4PsbiaWRNDv\ne9/7YJrS9N3zvFz+ptGbYdCjmICY0xQb3CfDtGP3EnMAhwk4zAvzoLW2B9bjdscFwH2zJBAi3fBi\nPDSEAOCXr3JY1A1PVmiZLliYLFg41nYghMCET8zhRBaAoq5J21CPYbbthsScVlfP1LrbKBgEp01a\ncJnAgQUH0yUTOyZK/ug5eixpym97HCVdQ8nQ/WsZIUkEbnpAydT8klOdGJ0QaCbxzZ0ERoo6Sn61\nlugEHRGdeoy6T8y9xwpMjnpf75yb34bfMfnQ7G8H6HwOFVGvHyxnkvDee+8Nf7/66qtx22234UMf\n+hA+9alP4bWvfS0effRRnH322QPtbxYyCfpf/uVf8I//+I9dr+3atQuvec1rcOTIEXziE5/AzTff\nvKiDBu/PIIg6sAfNiskyQuJcoGEnexsDkHK3FP9jAGACqRW0AcDzyTkOhBBoAKYKZvh3Ulzd8TDb\ndlO/DZga6ZKlRUEJgaUTvO7kKoop5kQE8GsBpk/BjBST3eWIr0GdqOiJVUuCY2l6PKFGETjD9cMn\nZAjfKCm9HYX1hTzSyMU8kG+77TbcfvvtMAwD09PTuP3225fZw8Uhk6Avv/xyXH755X2vP/PMM/j4\nxz+OG264ATt37lyRzq0mVjs1mZXDzaMm4BmrCIF85uR6rlEHkEV0eVUS+ZQSyyVV0vP/lTmKwnBh\nOSmOKL7+9a+Hv3/zm99cTpeWhSWlOJ577jl89KMfxRe/+EWceeaZg+6TgoKCwtKQZwCwhnJaSyLo\nL3zhC3AcB3fccQeEEBgZGcGdd9456L4pKCgoLArL1UEPG5ZE0Hfdddeg+5GCVXNLWlWsVkolz3Fy\nxeS4DCJXUHbIamLIuqOwTGTpnIOYtYKhXagS6BA5T9E1i44/RVo7QPZNSInUB6fF6VSqFNKe0gYl\nYTtpMZY/cZcUY2mdmCRMlUyMW3qqodK4ZWLU1GOPE8QYOoWZsOIvaFvTCJIWBQYyu8BQKi2G82zn\nvDyUuZYMbxRWDxQk189awXFd6h3c1B10pGnRklHBazRhrEcICbfxcP/O3wL+UuBAxhXTDCGykrWp\n0766g5QApt5xT6sUdDRtL1R9CEgpW8HUoPkLTsoFgZbN0HI6S7g1Auh6p85eyRRoOR7aHg8nDQsG\nRdk0wmNxLtBwPLRiKmzrlGLLSAknMY7DTRuzbTccHWyqFLFlpBgWXLU9hgONFuYiMRvLBWwoF8KK\nKh7jqDkubK/jOFe1DJStTqkrFjEnCki3WtRRjpTM4lzA4x39NyVA2dLlg4t0rkOv+EYjJJyFT1p0\n05HNRdrp4fzggT3I2XyFtYFhrKiyHBx3L47oe8V5um8xj9zw/e3IFymk3jmunUDGJZBsLxolatvl\nCOrk9caUCwZKlo6G7YFS2hdDCUG5oKNkaVhouiC0/4NDCUHZMlA0BTzGux4CYQwlqBYkSc7U7dg+\nGxrF5moRG0oWGASmSlZfGStL17B9tAKnwtFwXYwXrL5j6RrFeNGCx6UWvBjj/aFReV5CyIU5RbM/\nhlICk2pydE6Jr4vu1iwTyOso/GE3AemLAToWrsEClbh2CBURTXP2zbeG7k+FRWK9pTiOO0EPGvIG\nTc+qkv6he2xMltEPIdJhLUsup2tJY38JSggKOYyQsmBoFFMZBkamRlE0LKSlEXRKYenpx9M1Go6I\nk6DFkHMvOtWyk/XeAUEn3VmLMThaSzenwuJBcqQweosVDzPWHUErKCicuFAj6CVivS6rDfKgaaO4\nvIoN+XU+bRSdngIClCJB4cRGyhetrpi1ghUn6N5yVXFEHW4nUlaSOJGH9Dc/qGxCICfkklbaUUKg\n+1/hPd6/VDxQj6SBCwHX65j+EwSTZp0OMr+iShaipxRn8ET8XO7msSIcxjHXlBN5UVg6xXjJgKFR\nOZHXY04ESH+LgiFzw0Hf+mKoXBouFRdyiXzve1g0KKpFA5QAHhOw///2zi80jqoN4885s5ttmrSp\nF71RSlBRoQYKtVeiFUNSU6wXatBIk1SbG/GmmmJMTTC1NUREoigRTEOltCVVgxBvilrjP6wYEFqs\nWLHFC2342kQ+0NR+Jrt7voszZ2Z2dv5ld3Zndvv+dDW7e/acd3Zn3zl7znOeYzGEssazOiUVL9II\nqTBhoTm8UdDLiesMpv/jV6ZSiGyIwzkBM33CyDS8UdKtfMMbq+Ijd9JPJTeNCcMlTcDcQNVaT4LD\n2J4qnclKWZ9H3FnhnNjM7ZukcZM1ebshPSOcEUI6tyU1nuMvkEpoWL+GI53J4r//SEXGDbU1uuub\nfkwaQx1nyAhhTHTKCT+znoQmJz9VoubM3J/QeP80Bs7148kKrEpqWLMqoSdNVQ+Q0DQjUacSXE4c\nWuphTIAJlpeovceeg6sxzLrUe+f9PFG9BLHKDWJ/EBdiOgZtGt4oK8n8LzLTZXr5ydJeRmPC+Nte\nj6H+YNIe1IusEMb2VW5kMiKvd+scmXenUONydxSn5MT1ycn1a3her92onzEkGEMixY37jmU0U6Xi\nanKkMayp5frFwvn9S2pAbU3SxaxGSeMERFZN4npNLubWvVLUy9wNlYhqhQWQ2VXSrjkxTdAKFuAL\n5q/aMJOBh5ogwM+eQBvb+heR7QUYJ/M7kYLqOcPY5om7uNRZKnFJzjmFEHTtXhhfogr6HhIhQUMc\nBEEQMYWGOAiCIGKKHDr060FXDpSgY02MrHzKbZhNEAVQbTro2JolBcHq1+A1PqykfrJ8fkH1uM/C\nQXAmVR9eaFzuYuJXj32ZtZ1sAGe4IJpP5W/hF4/fOSu38HJ+/xR+G+gCwS43tLErUSgs4K1SiJlZ\nUhBMeV3G5rlhleSp+9bqhQCY0GVfyDVjEtCXbeubytoVHWqpcUJLGFI76zZanAGpJEdCn0zLZAUW\n/5fOUX1I74rcMv9bziCdV4/pySGd/HKPQ8nvuMVQaTmTq2ZJcJZTTzor8O9yxrZxK1CjmzcJIZAR\nwFI6V9Oc1ORybc6YRfaYuyeguuAEmdjTNGbIIvM2d2Wm5wZBFAJncms1vzJOZLNZDA4O4rfffgPn\nHC+//DJqamrQ398Pzjluu+02DA0NlSJsV0qeoJ3eC+tj1mQaBGmo5G525LbIxf48s9zPjc1M1FJD\nbD6uUN4ZNQmpd1ZSNWsZjTM0rE6iXk/UCY0ZznLWMnWpBDJ68kxo+aZLyotCCHlRSVgSsxEPZ0hx\nDdms3BzXyXQpwRkSqQTS+o7gCS1XjiRleYCW5HID3KxATZI7nsyqb7+SxJz7mcsNcq0XH0rMRCgE\n6SK7PD8zMwPGGCYnJzE7O4vR0VEIIdDb24stW7ZgaGgIp06dQktLS9hRu1KWHnSQ713Q3rSTTWUh\n+ArzmEy6QUyOvE4I5fjmhab3dv3icdNFG/Fwhhrub2BkT/D2djQG37ZUXcVYeppGSQQRDsXI7Fpa\nWtDc3AwAmJubQ0NDA06fPm3subp161acPn26rAm6osegCYIgrKhJQr+bG5xz9Pf345VXXsGOHTty\n5lTq6urw999/l+EoTEjFQRBE1VDECIfBq6++ij///BPt7e3491/Tg/3q1atYu3ZtsSGuiFj0oNWW\nVvabvYzycfBSHTCm/DU8yiCYoD2hMX1Cz/l5OcnGkOTOP5qEbqiUVX4gLuMlSY2hLqXp/srOx7Qq\nybEqqSGhObfFmDQoqknkj2MbZfRjSiXkRKVjGX0CMqk5jz+rMvYNAdwwFTSBihNE8RQo4Ziensb4\n+DgAIJVKgXOOpqYmzM7OAgC+/vpr3HXXXSUN3U6kPWiVhN2+vGoSCbbxaWXKz2AxKWLSwc58HtC4\nfFFGuJsu2bfKsqLGSJneRiYr40lwluMXwZhAkkkzoLQ+UZfOiDyzJOsEJWewTC7KeBIaoHHNMDAS\nkOZISf3AjIk8xow2wKQJv6YuEoxBYwKcMWSFjJnBulWUbEvjMMyS0lmpykhynluGCXDB9AuM0GWG\nPO89DEq1Ws4S8aGYMeht27Zh37596OzsRDqdxuDgIG655RYMDg5ieXkZt956K9ra2koRtisRJ+gA\nZYz/5GI4pRmSr3wVgHUbLPMzcS7DRL6tprUMA8C4m8OaaQbEBXBt2UcLzKDvNGKPR9ajErXqwTq1\npekKCs7MxJxfRljqyG3LvIiZmmy3eDQmkECuq15RxGj9DVFdFLPUu7a2Fm+++Wbe40ePHg0hssKo\n/DHonATkUgTeagz1er8Lhr/qQPnveWMOHbgPwvj3UoOZE/mvqgqSKYO0tQIoOROlIoxB6BhR+Qma\nIAjCwH+Io5IyNCVogiCqBj8ZnSpTKVCCXiFkAk8Q8aXKRjjiIbMLg+JkXCLA63X5H7wMgUSgSYps\nGEsh4W0AFTbCbba24LoIogT4SeyCZPAYEWkPmnNmSulc0LhpruOGsP1h7+FKEx6nekSO9Msq27NW\naGh5LW1oXG0SayacrG66VFujOW7KygCkEnJTVlWV03GZOm+We3zWY7IehR6YfVKRW7Tgam9Gx7aY\n+Tk4taVxVcbhSWtMgSZavZ8niGKgHVVCxmoGlK91Nv9W5jqBEjXMxORaT9ZZb2FN1FlhT9gmyu1O\nYzA2uLWiPDgy+ma0cvFHrneF0kMbu5EzpdW2nUDC/J95XA7Hr9ehErN9Z3BmcZGzmxM5fQ6c59eh\n2rG/ZyspQxClgnZUKRHBHNGkYC7IT2Sv+tRCF+/XA8Jnh29ALoLxCl3jDDWa5huPl4W0ofP2iUW2\n537sjDE5puXZFjMuFG7lgiRbSshEJFTZIHRsEjRBEESx0BAHQRBETCGZXQE4DUnkDbM6TBbaf6or\n9YTfAIU5teb+ScgJShgGTE4kE7qfRcZ5vFrj0kwpK6SfhRMaY0ho3m1xJuNRRvmOx6RPdGY9JlXt\n47/577Hz65ywTohW0glNENV0upY8QbsbIRl/eZol2THGRi0TZwrTJ8M/LmVyxIRcBq4So1JmGGUg\noOmJOq0nao0zw1WOMQYmdOMhIYxkrpJ3XluWRK0SsyrDIcC13EStErNZRgZpTdTcOm5sOT3DkrOR\nyRFRUVTReVqUDvrixYvYsmULlpaWCnq9n8TOC/VTRikhlCpB9rqDih1lebV1k5HomKm2UH8ra9FV\nSanG4E5lmJTQKTtPaz1GW9xM8NxWRv1tdbpT7Ti1pXFVRv+1UeIMSvplIu6wgP9UCgX3oBcXF/Ha\na68hlUqFGc+KsfZ2i6gFTjpiexm/tszHvYZXVG/XXf6hNMeMedTDlAVU+U426kETcafaZHYF96Bf\neukl9Pb2YtWqVWHGE3uCfbZh6dCqSC9EEOWABbxVCL496KmpKRw5ciTnsRtvvBEPPvgg7rjjDo9l\nzwRBEOVF5l8/mV3l4Jug29vb0d7envPYAw88gKmpKXz44YdYWFhAT09PpKbW1y/kfE8QVkhmB+CT\nTz4x/m5ubsbhw4dDC6hQhPAbQ/Z89YpKhvH5Fu+KpyZYiznuFbZITn5EzKmyhYTFu9kpo51CX+v1\nhWe6DC1oUsh1d/OLSZZZiZJEKTzCoPCrfH7M5XK1o+RMxJ4QxqDPnj2Lrq4uAMDPP/+MrVu3oru7\nG93d3Th58mTpYnegaB30559/7vm825fafDzfpMeeCN0MldwI0tNbyTXFKTEXIw9caVnVlt+F0K78\nCLJQpZAyBBFXil3qPTExgenpadTV1QEAzp07h927d+PJJ58MM8zAlMUP2tAsW275ZaQuWGmDnesJ\n3psO44eM2YPPr2ulsuNiZMphtRXsc/AvQxBxhTFTaud28zqnGxsbMTY2Ztz/6aef8OWXX6KzsxMD\nAwP4559/ynAUJlVj2E8QBFHsEEdrays0TTPub9q0CX19fTh27Bg2bNiAt99+u3SxO0AJmiCIqiHs\nlYQtLS3YuHEjAJm8z58/X6rQHanIBB3kZ7ccry5+0qyY5ei59RS/VJqGGwjCG6chumKG7Xp6evDj\njz8CAL777jvceeedJYrcmYqzG2UMOVo3v6RnOODZPhX7BJwfboZBYdUTBOtGA247loSlMiGISiRs\nmd3+/ftx8OBBJJNJrF+/HgcOHCgiupVTcQkaYOpfBNvsVSJ10taPxqp0sG+3ZT6fX4/75Jp6Plg8\nxSRpwCqpY9YACOI6hiGAhNWnjptuugknTpwAAGzcuBGTk5OhxFYIFZigrUgbz+KHIJiRqMslYy+2\nFWb/KUEQBKptqUqFJ+iw8f/gQvtoQ6mock40gigH1eZmRwmaIIjqIcgkICVogiCI8kObxl7nxMcs\niSCIPKprCLryE7SX9MwsE2Z7/s+XQ3JHEEQ+VZafKz9BA/nSM3vis8rrymEYVE5tNEEQJuQHHWPM\njVW9ygSpJ6x45P9p0xmCKA+5GzW7l6kUqipBEwRxfUNDHARBEDGFhjgIAzc/DIIgooFkdoTrmLKX\noZLfODQld4IIAVqocv1SjBGSVWginB4nCIKwQQm6BHjmXFZRF3CCqCjCcLOLE5SgS0ElnQEEUUVw\nxsB9MrTf83GCEjRBEFUDyewIf8immSCiocoyNCXoEkD5mSCiQeZnP5ld5UAJegWQERJBxJtiFqoI\nIbB//3788ssvqKmpwfDwMDZs2BB+kCugInf1jpKV7gocxm7eBEEEgwW8OXHq1CksLS3hxIkT2Lt3\nL0ZGRsoRsifUgy4QMkIiiBhSxBj0Dz/8gHvvvRcAsGnTJpw7dy7U0AqhZAk6k8kAAC7/5z+laiIW\nBE3QNNRBEO6oPKHyRqFcuXzZ163uyuXLjo8vLi5izZo1xv1EIoFsNgvOoxtoKFmCnp+fBwA81b2z\nVE0QBFFlzM/Po7GxccWvq6+vR0NDQ+B809DQgPr6+rw6rl69atyPOjkDJUzQTU1NOH78ONavXw9N\n00rVDEEQVUAmk8H8/DyampoKev26devw6aefYnFxMVD5+vp6rFu3LuexzZs344svvkBbWxvOnDmD\n22+/vaBYwoQJQaOoBEEQVhUHAIyMjODmm2+ONCZK0ARBEDGlomR2165dwzPPPIPOzk7s3r0bV65c\niTSexcVFPP300+jq6kJHRwfOnDkTaTyKzz77DHv37o2sfSEEhoaG0NHRge7ubvz++++RxWLl7Nmz\n6OrqijoMpNNp9PX1YefOnXjssccwMzMTdUjIZrN48cUX8cQTT2Dnzp24cOFC1CERqLAE/cEHH6Cp\nqQnHjh3DQw89hEOHDkUaz3vvvYe7774bR48excjICA4cOBBpPAAwPDyMN954I9IY4qgnnZiYwODg\nIJaXl6MOBR9//DFuuOEGHD9+HIcOHcLBgwejDgkzMzNgjGFychJ79uzB6Oho1CERqDAd9K5du6BG\nZObm5tDQ0BBpPE899RRqamoAyF5RKpWKNB5ATnS0trbi/fffjyyGOOpJGxsbMTY2hr6+vqhDwfbt\n29HW1gZA9lwTiei/hi0tLWhubgYAXLp0KfLvFiGJ/sxwYWpqCkeOHMl5bGRkBE1NTdi1axd+/fVX\nHD58OBbxzM/Po6+vDwMDA5HHs337dszOzpYtDifiqCdtbW3FpUuXImvfSm1tLQD5Pu3ZswfPPfdc\nxBFJOOfo7+/HqVOn8NZbb0UdDgEAokK5ePGiaGlpiToMcf78ebFjxw7xzTffRB2Kwffffy96e3sj\na39kZEScPHnSuH/fffdFFouVP/74Qzz++ONRhyGEEGJubk488sgj4qOPPoo6lDwWFhbE/fffL65d\nuxZ1KNc9FTUGPT4+junpaQDA6tWrI9dXX7hwAc8++yxef/113HPPPZHGEic2b96Mr776CgBioydV\niBiIlhYWFtDT04Pnn38eDz/8cNThAACmp6cxPj4OAEilUuCcR75Ig4jxEIcTjz76KF544QVMTU1B\nCBH55NPo6CiWlpYwPDwMIQTWrl2LsbGxSGOKA62trfj222/R0dEBAJF/Tlb8lgGXg3fffRd//fUX\n3nnnHYyNjYExhomJCWM+Iwq2bduGffv2obOzE+l0GgMDA5HGQ0hIB00QBBFT6DcMQRBETKEETRAE\nEVMoQRMEQcQUStAEQRAxhRI0QRBETKEETRAEEVMoQRMEQcQUStAEQRAx5f9oa9yCOGHRQgAAAABJ\nRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.hexbin(x, y, gridsize=30, cmap='Blues')\n", "cb = plt.colorbar(label='count in bin')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "``plt.hexbin`` has a number of interesting options, including the ability to specify weights for each point, and to change the output in each bin to any NumPy aggregate (mean of weights, standard deviation of weights, etc.)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Kernel density estimation\n", "\n", "Another common method of evaluating densities in multiple dimensions is *kernel density estimation* (KDE).\n", "This will be discussed more fully in [In-Depth: Kernel Density Estimation](05.13-Kernel-Density-Estimation.ipynb), but for now we'll simply mention that KDE can be thought of as a way to \"smear out\" the points in space and add up the result to obtain a smooth function.\n", "One extremely quick and simple KDE implementation exists in the ``scipy.stats`` package.\n", "Here is a quick example of using the KDE on this data:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nRK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from scipy.stats import gaussian_kde\n", "\n", "# fit an array of size [Ndim, Nsamples]\n", "data = np.vstack([x, y])\n", "kde = gaussian_kde(data)\n", "\n", "# evaluate on a regular grid\n", "xgrid = np.linspace(-3.5, 3.5, 40)\n", "ygrid = np.linspace(-6, 6, 40)\n", "Xgrid, Ygrid = np.meshgrid(xgrid, ygrid)\n", "Z = kde.evaluate(np.vstack([Xgrid.ravel(), Ygrid.ravel()]))\n", "\n", "# Plot the result as an image\n", "plt.imshow(Z.reshape(Xgrid.shape),\n", " origin='lower', aspect='auto',\n", " extent=[-3.5, 3.5, -6, 6],\n", " cmap='Blues')\n", "cb = plt.colorbar()\n", "cb.set_label(\"density\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "KDE has a smoothing length that effectively slides the knob between detail and smoothness (one example of the ubiquitous bias–variance trade-off).\n", "The literature on choosing an appropriate smoothing length is vast: ``gaussian_kde`` uses a rule-of-thumb to attempt to find a nearly optimal smoothing length for the input data.\n", "\n", "Other KDE implementations are available within the SciPy ecosystem, each with its own strengths and weaknesses; see, for example, ``sklearn.neighbors.KernelDensity`` and ``statsmodels.nonparametric.kernel_density.KDEMultivariate``.\n", "For visualizations based on KDE, using Matplotlib tends to be overly verbose.\n", "The Seaborn library, discussed in [Visualization With Seaborn](04.14-Visualization-With-Seaborn.ipynb), provides a much more terse API for creating KDE-based visualizations." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "< [Density and Contour Plots](04.04-Density-and-Contour-Plots.ipynb) | [Contents](Index.ipynb) | [Customizing Plot Legends](04.06-Customizing-Legends.ipynb) >" ] } ], "metadata": { "anaconda-cloud": {}, "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.4.3" } }, "nbformat": 4, "nbformat_minor": 0 }