{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Linear Regression" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The objective of linear regression is to minimize the cost function" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$J(\\theta) = \\frac{1}{2m} \\sum_{i=1}^{m} (h_\\theta(x^{(i)}) - y^{(i)})^2 $ (vectorial form $J(\\theta) = \\frac{1}{2m} (X\\theta - y)^T (X\\theta - y)$)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "where the hypothesis $h_\\theta$ is given by the linear model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$ h_\\theta = \\theta^T x = \\theta_0 + \\theta_1 x_1 $$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The model's parameters are the $\\theta_j$ values. These are the values that need to be adjusted to minimize cost $J(\\theta)$. One way to do this is to use the batch gradient descent algorithm. In batch gradient descent, each iteration performs the update" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$\\theta_j := \\theta_j - \\frac{\\alpha}{m} \\sum_{i=1}^{m} (h_\\theta(x^{(i)}) - y^{(i)}) x_j^{(i)}$ (simultaneously update $\\theta_j$ for all $j$); vectorial form $\\theta := \\theta - \\alpha \\nabla J(\\theta)$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "With each step of gradient descent, the parameters $\\theta_j$ come closer to the optimal values that will achieve the lowest cost $J(\\theta)$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Linear Regression with One Variable " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Predicting Profits of restaurant chain based on population of city." ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "plt.style.use('ggplot')\n", "%matplotlib inline\n", "plt.rcParams['figure.figsize'] = (10, 6)\n", "\n", "data = np.loadtxt('C:\\\\Users\\\\pochetti\\Machine_Learning\\\\mlclass-ex1-005\\\\mlclass-ex1\\ex1data1.txt', delimiter=',')\n", "X = data[:,0]\n", "y = data[:,1]" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig = plt.figure()\n", "ax = fig.add_subplot(1, 1, 1)\n", "ax.plot(X, y, 'o', label='Raw Data')\n", "plt.ylabel('Profit in $10Ks')\n", "plt.xlabel('Population of City in 10Ks')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Functions " ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def computeCost(X, y, theta):\n", " # X = (97, 2); theta = (2,1)\n", " # X * theta = (97, 1)\n", " # (X * theta)' = (1, 97)\n", " residual = np.dot(X, theta) - y\n", " m = y.shape[0]\n", " return 1/(2*m) * np.dot(residual.transpose(), residual) \n", "\n", "def gradientDescent(X, y, theta, alpha, num_iters):\n", " m = y.shape[0]\n", " J_history = np.zeros((num_iters, 1))\n", " for iter in range(num_iters):\n", " residual = np.dot(X, theta) - y\n", " temp = theta - (alpha/m) * np.dot(X.transpose(), residual)\n", " theta = temp\n", " \n", " J_history[iter,0] = computeCost(X, y, theta)\n", " return theta, J_history" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Running Linear Model" ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "collapsed": true }, "outputs": [], "source": [ "data = np.loadtxt('C:\\\\Users\\\\pochetti\\Machine_Learning\\\\mlclass-ex1-005\\\\mlclass-ex1\\ex1data1.txt', delimiter=',')\n", "X = data[:,0]\n", "y = data[:,1]\n", "y = y.reshape(y.shape[0], 1)\n", "X = np.c_[np.ones(X.shape[0]), X] # adding column of ones to X to account for theta_0 (the intercept)" ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 32.07273388]])" ] }, "execution_count": 47, "metadata": {}, "output_type": "execute_result" } ], "source": [ "theta = np.zeros((2, 1))\n", "computeCost(X, y, theta) # cost at the very beginning with coefficients initialized at zero " ] }, { "cell_type": "code", "execution_count": 51, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Theta found by gradient descent: intercept=[-3.63029144], slope=[ 1.16636235]\n" ] } ], "source": [ "iterations =1500\n", "alpha = 0.01\n", "\n", "optimal_theta, J_history = gradientDescent(X, y, theta, alpha, iterations)\n", "print(\"Theta found by gradient descent: intercept={0}, slope={1}\".format(optimal_theta[0],optimal_theta[1]))" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\njYJhN/whAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig = plt.figure()\n", "ax = fig.add_subplot(1, 1, 1)\n", "ax.scatter(range(iterations), J_history)\n", "plt.ylabel('Cost Value')\n", "plt.xlabel('Iteration of Gradient Descent')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Plotting Results" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nP/3pT/nss8/a+79LmigrLWXBnNnMmzKJBXNmR1WT3k827WT80lXeoDZ3TH+WTcxVUHOIwpqIuF7z\ny3YvvPACjz/+OO+88w4rV67EWgvA559/zuzZs5k3bx5ffPEFl1xyCZMmTWLfvn0ADBw4kOeee46S\nkhJmzpzJNddcw9atW73P+/HHHzNw4ED++9//Mn162ysJ9+7dy1NPPUX37t1JT09v9/X37dvH5Zdf\nzoUXXsgXX3zBOeec4xMWAbZu3cq3337Le++9x5133tnm861du5YHH3yQl156iZKSEh577DH69+8P\nwE033cTll1/OqlWrePvttxk3bpzfn+WVV15J3759+eSTT7j33nv54x//yNtvv+29/dVXX+Xcc89l\n1apVnHrqqdxwww0B/38W76J1V4XX1lYxfukqbn69DIDCswaxbGIuIzQ3zVEKayISdS6//HJ69erF\nQQcdxGmnncYXX3wBwNKlS7n00ks54ogjSEhI4Pzzz6dTp0589NFHAJx11ln06tULgHHjxjFo0CA+\n/vhj7/P26dOHX/3qVyQmJtK5c2e/r/38888zfPhwfvSjH/H444+zePFiEhMT2339jz76iNraWiZN\nmkRSUhJnnHEGI0aM8HnupKQkZs+eTUpKCp07d27z+ZKSkti3bx+rVq2ipqaGvn37kt2w+rFTp06s\nW7eObdu20bVrV4488sgW72Pjxo18+OGH/O53vyMlJYXhw4dz0UUX8fTTT3vvM3LkSEaPHu197aZn\n9aRt0bSrgsfjYemnWxm/dBV3r9hMj67JLDn3UJZNzGVAuv//DiSyNGdNRLzGL10VkudZNjE3JM/T\nmp49e3q/7tq1K1u2bAHqL/M9/fTTPPDAA0D9L6F9+/axefNmAJ566inuu+8+NmzYAEB1dTXbt2/3\nPldWVla7rz1u3DgKCwvZvn07V1xxBZ9++imjRo0K6PX79Onj81zNX69Hjx6kpKR4v2/r+Y477jjm\nzp1LQUEBq1evZvTo0dx000307t2b+fPnM2/ePE4++WQGDBjAtddey6mnnurzWhUVFaSnp9O1a1fv\nsX79+vlc6mwMto0/5z179lBXV+cNp9K6aNhVoabOw8J3NvHGuu8AGNarK78/pR+pKZor6TYKayLi\nFe6QFW5ZWVlMnz6da665psVtGzduZM6cOVhrvXPgTj/9dDwej/c+wayS7N69O3fccQdnnnkm5513\nHr169Wrz9VesWOENbY3Ky8sZOHBgq6/f1vMBjB8/nvHjx7Nz506uv/56brvtNhYuXMjAgQMpKioC\n4O9//ztTp07l888/93ls7969qaqqorq6mtTU+lV9GzdubBEopWMSu2dQXVHhE9iqa2pJzHR+V4X6\n9htllHyzG4BTBh3INaMOJilRq4TdSn8eiYhr7Nu3jz179nj/1dbWtv+gJiZOnMgjjzzivbRZXV3N\nP//5T6qrq6muriYhIYEePXpQV1fHk08+SUlJyX7Ve+ihhzJ69GhvMGrr9Y8++miSkpJ48MEHqa2t\n5eWXX+aTTz7p8PtZu3Yt//nPf9i7dy8pKSl06dLFe8brmWee8S56SEtLA/De1hhOs7KyOOaYY7j9\n9tvZs2cPK1eu5IknnuAXv/hFq/U0DbbSNjfuqlBZvY/LvO03dnPRj3vy3MU5XPs/WQpqLqczayLi\nGpdddhlQHwoSEhKYPn06J554os992jr7dfjhhzNv3jxuvPFG1q1bR5cuXTj22GM5/vjjGTx4MFOn\nTmXcuHEkJSVx/vnnc+yxx+53zXl5eVxwwQVMnz69zddPSUnh/vvvZ9asWdx+++2ccsopnHrqqXTq\n1KlD72fv3r3cfvvtfPnllyQnJ3PMMcdw5513AvCvf/2LuXPnsnv3bvr168df/vIX7xy8pj+/oqIi\n5syZw1FHHUV6ejrXXXcdJ5xwQqv1qD9b4Ny0q4Lab0S/hBj4S8lTXl7udA0SBdLS0tixY4fTZTgm\n3t+/G5199tlcdtllGGOcLmW/7d69mxdffJHU1FTGjh3rdDkR5db/tj7ZtNO7qhPg1p/254g+WtXp\ntIa5qkH95aMzayIiEbJixQoOPfRQevTowV//+ldWrVrFKaec4nRZEmNeW1vF3St+mB9ZeNYgreqM\ncgprIiIRsnbtWvLy8ti1axfZ2dncd999PisuJTaVlZZiiwqp215JYvcMzLTQXw71eDyc89gPczB7\ndE1m/s8GkJGa0sajJFoorImIRMjEiROZOHGi02VIBDU2x23suVZdUUHBjDwmL1wUksC2p6YO8+Rq\nn2MPnvcjunfVr/dYov83RUREwsR/c9xaFhcVMuuO+R1+3m+q9/HrZ9f6HHv6wiGkJKnJQyxSWBMR\nEQmTUDfHLflmF9e/vN77fWICPHNRjlbqxjiFNRERkTAJVXPc17/6loXvbPJ+f3ifVP7fTyPfBkSc\nobAmIiISJmbadApm5JGfXls/Z62hOe7kuYE1x13y4RaWrfphS7QJwzO4ZIQWpcQbhTWROOHxeEhL\nS2Pbtm1B7wwQjxITE6mrq3O6jKjhxj5jbtDR5rjXv7yekm92eb+/7sQsThxwYLjLFZdSWBOJE99/\n/z0Ar7/+OtXV1Q5X436dO3dmz549TpchMaB/dnZAiwmat98AKDhjIIf26BKu0iRKKKyJxJnu3bs7\nXUJU6Ny5M0lJSe3fUXxofAVP7TekPREfCcaYfsDDQG+gDrjPWltojOkOPAkMANYBxlr7baTrE4l1\nI0eOdLqEqODWLYQkdqj9hgTKiRFRA+Rba4cDxwPTjDG5wG+A16y1OcDrwG8dqE1ERCSsSr7Zxfil\nq7xBLTkRnrs4h2UTcxXUxK+In1mz1m4GNjd8/b0xphjoB4wHTm6420PAcuoDnIiISNRr3n5jRJ9U\n5qr9hgTA0QvixpiBwAhgBdDbWrsF6gOdMSbTydpERERCYdrzX7Hhu73e781hGUw8Qu03JHCOhTVj\nzAHA08CMhjNsnmZ3af69iIhI1Bi/dJXP91OO6c1ZOVqAIcFzJKwZY5KpD2qPWGuXNRzeYozpba3d\nYozpA1S08tjRwOjG7621pKWlhbliiQWdOnXSWJGAabxIoJqOlTqPh1Pv/cDn9t+OGcRpQ3o6UZq4\nlDHmlibfLrfWLm/r/k6dWVsCrLTWLmxy7G/Ar4A7gF8Cy/w8joY3tLzJoZu1YksCodV9EgyNFwlU\nWloaG7du59K/fulzfOGZAxnYvb5HmsaSNEpLS8Nae0swj0nweCJ7tdEYcwLwBvAZ9Zc6PcANwHuA\nBfoD66lv3VEVwFN6ysvLw1StxBL98pVgaLxIIFZt3cWcV9b7HHvcDCY1RT36xL+srCyAhGAeE/Gw\nFgYKaxIQ/fKVYGi8SFuWFW9jyUe+s3WeuziHhISgfgdLHOpIWFN7ZBERkQD97tX1fF6xy+fY63nH\nKthLWCmsiYiItKP5yk6AZRNzHahE4pHCmoiISCuah7SfDDiQWSdmOVSNxCuFNRERkSbqPB7OfazE\n59iM4w9mzCEHOVSRxDuFNREREeDb3TVc1qz9RuFZgxiQ3tmhikTqKayJiEhcK66o5jevlvocU/sN\ncROFNRERiUvPrqzkwY+3+hxT+w1xI4U1ERGJK799ZT0rt/q239DKTnEzhTUREYkLzVd2JgDPKaRJ\nFFBYExGRmNY8pJ088EDyT1D7DYkeCmsiIhJzaus8nPe42m9IbFBYExGRmFG1u4ZfNmu/cffZg8g+\nSO03JHoprImISNT799ffUvD2Jp9jT5ghdE1JdKgikdBRWBMRkaj1h+UbeH/j9z7H1H5DYo3CmoiI\nRB1trC7xRGFNRESihkKaxCOFNRERcb3mIa1rciJPXDDEoWrcqay0FFtUSN32ShK7Z2CmTad/drbT\nZUkIKKyJiIgr+Wu/cd6wHvzyyEyHKnKvstJSlszIIz89gdTkJKorKiiYkcfkhYsU2GKAwpqIiLjK\n5h17mfq3r3yO3XZqNsN7pzpUkfvZokJvUANITU4iP72WxUWFzLpjvsPVyf5SWBMREVdY/vW33NWs\n/cbS8wdzQOckhyqKHnXbK71BrVFqchJ1VZUOVSShpLDWAZoXICISOrf+q4wPy3f6HFP7jeAkds+g\nuqLCJ7BV19SSmJnhYFUSKgkej8fpGvaXp7y8PGIv1mJeQE0tBVUezQuIAmlpaezYscPpMiRKaLyE\nX6ys7HTDWNHvpuiRlZUFENRfIgprQVowZzZTKopb/PWyOHOo5gW4nBs+UCV6aLyET6yEtEZuGSve\nqz5VlSSm66qPW3UkrOkyaJA0L0BEpGOah7RuKYk8ZtR+I1T6Z2frpEGMUlgLkuYFiIgErqbOwy+a\ntd/4xbAeXKb2GyIBU1gLkpk2nYIZeeSn1/rOC5g73enSRERcY9OOveQ1a79x+2nZDMtU+w2RYCms\nBal/djaTFy5iceO8gMwMJs/VvAAREYDXv/qWhe80a78xYTAHdApv+w2t0pdYpgUGEjfcMglYooPG\nS3Dmvl7GR5t8229EatGA0yshNVYkGFpgICIiEeWGlZ3q3i+xTmFNRESC5oaQ1kir9CXWKayJiEjA\nmoe0tM5JPHr+YIeqqadV+hLrFNZERKRN/tpvTBiewSUjejlUkS+t0pdYp7AmIiJ++Wu/8cfTshnq\nsvYbWqUvsU6rQSVuaMWWBCOex8tra6u4e8Vmn2OPTRhMtzC334hW8TxWJHhaDSoiIh120z9L+XRz\ntc+xaN6zUyRWKKyJiMQ5N63sFJGWFNZEROKUQppIdFBYExGJM81DWnqXJB76hbPtN0SkdQprIiJx\nwF/7DXNYBhOPcEf7DRFpncKaiEgM2/jdXq563rf9xh2nDyC3V1eHKhKRYCmsiYjEoFe/rOKed33b\nbzxuBpOaovYbItFGYU1EJIbc+Fopn21R+w2RWKKwJiISA7SyUyR2KayJSNQpKy3FFhVSt72SxO4Z\nmGnxu7WQQppI7FNYE5GoUlZaypIZeeSnJ9Rv2l1RQcGMPCYvXBRXga15SMvomsyS837kUDUiEk4K\nayISVWxRoTeoAaQmJ5GfXsviokJm3THf4erCa1+th/Of8G2/cdGPe3Lh4T0dqkhEIkFhTUSiSt32\nSm9Qa5SanERdVaVDFYXfhu/2MO35r32O3Tl2ADk91X5DJB5EPKwZY/4POBvYYq09vOHYzcAVQEXD\n3W6w1r4U6dpExP0Su2dQXVHhE9iqa2pJzMxwsKrweOXLKorUfkMk7jlxZu0B4G7g4WbHC6y1BQ7U\nIyJRxEybTsGMPPLTa+vnrNXUUlDlYfLc6U6XFjI3vLqeLyp2+RzTogGR+BXxsGatfcsYM8DPTQmR\nrkVEok//7GwmL1zE4qJC6qoqSczMYPLc2FgNqpWdIuKPm+asTTPGXAp8AMyy1n7rdEEi4k79s7Nj\najGBQpqItCXR6QIa/Bk41Fo7AtgM6HKoiMS88UtX+QS1nqnJLJuYq6AmIj5ccWbNWru1ybf3Ac+3\ndl9jzGhgdJPHkpaWFrbaJHZ06tRJYyVM1q9bx6N3zaNm2zck9+jJJTOvY8DAgU6XtV/CNV721dYx\n9r4PfY5NOrYvlx6dFfLXksjQZ4sEyxhzS5Nvl1trl7d1f6fCWgJN5qgZY/pYaxuXPJ0HfN7aAxve\n0PImh27esWNHGEqUWJOWlobGSui1aFK7cRMFl18a9U1qQz1eNny7h2kv+LbfmDd2AEMa2m9obEYv\nfbZIMNLS0rDW3hLMYxI8Hk+YyvHPGPMY9WfGMoAtwM3AKcAIoA5YB0y11m4J8Ck95eXloS9UYo4+\nUMNjwZzZTKkobtFKY3Hm0KieVxaq8fLSmu385T3fj7MnzBC6prhlForsL322SDCysrIgyEWVTqwG\nvdjP4QciXYeIhEY8NqkNxG9eWU/xVrXfEJH954o5ayISveKpSW0gtLJTREJNYU1E9ks8NKkNhEKa\niISLwpqI7JdYblIbiOYhrfcBKSwef6hD1YhILIr4AoMw0AIDCYgmAUsw2hov+2rrOP+J1T7HJh7R\nE3NYz0iUJi6jzxYJRlQsMBARiVZl3+7h6mbtN+b/bACDM7o6VJGIxAOFNRGRdvxj9XbufV/tN0TE\nGQprIiKtuP7l9ZR8o/YbIuIshTURkWa0slNE3ERhTfZLWWkptqiQuu2VJHbPwEyLn1WAEnsU0kTE\njQIKa8aYU4B11tqvjTEHA3+kfmuo3zbZ01PiTIs9ISsqKJiRF/V7QsoP4iWMNw9pB6elsHTiCK3w\nExFXCHR27J+B2oavFwAp1Ie1xeEoSqKDLSr0BjWo32IoPz0BW1TocGUSCo1hfEpFMfmeSqZUFLNk\nRh5lpaVOlxYS+2o9jF+6yieoTTuuD8sm5rLo5+qTJiLuEehl0L7W2lJjTDIwFhgA7AXU4CyOaU/I\n2OY/jNeyuKgwqjdo37RjL3l/+8rn2N1nDSI7vbNDFYmItC3QsPadMaY3cBiw0lr7vTGmE/Vn2CRO\naU/I2BZrYfyNdd+x4D++f1/aC4bQOVntN0TE3QINa3cD7wOdgGsbjp0AtJyNK3FDe0LGtlgJ4/Pf\n2sib633nnmnRgIhEk4C3mzLGDAFqrbVrm3zf2Vr7WRjrC4S2m3KQdwJ6VSWJ6e6egK4tYYLTYgFJ\nYxiPkgUk+7uyU+NFAqWxIsHoyHZTbYY1Y0y+tbagldtSgb9Za08N5gXDQGFNAqIP1OBFUxhvFKr2\nGxovEiiNFQlGOPYGnW2MqbbWLmp60BhzAPAisMv/w0QkFvTPzo6axQTNQ9oxWd34/Sn9HapGRCR0\n2gtrpwGvG2P2WGsfADDGHAS8AnwDnBfm+kREWrWvto7zn1jtc+zq4/pw2o/SHapIRCT02p2zZow5\nkvpwNgN4CXgNKAUmWGv3hb3C9ukyqARElypiR2nVHq75+9c+x+45exD9Dwpd+w2NFwmUxooEIxyX\nQbHWfmyMOZP6oFYFfABcbK2tbfuRIiKh9ULJNu77oMLnmNpviEisazOsGWNubfLtB8Ao4EvgZmMM\nANbam8JWnYgIkP/iOtZu2+1zTO03RCRetHdmrens3HLgGSCrybHA+n6IiHSANlYXEWknrFlrJ0Wq\nEBGRRgppIiI/aHfOWsN+oGOA4UAasAP4HPiXtbYmvOWJSDxpHtL6HdiJonGHOFSNiIg7tDdn7Qhg\nGfWrFv4LfAscSP3KUI8x5hxr7adhr1JEYtaemjrMk77tN355ZC/OGxZd21qJiIRLe2fW7gcWWGvv\nbn6DMeZq4P+AY8JRmMQnb8f87ZUkdo+OjvnSMeu272bGP9b5HLvrjIEc0qNLxGvxN+6GDR8e8TpE\nRPxpL6wNAxa1ctti4I7QliPRKhQhq8VelBUVFMzIi5q9KCUwz6/axv0fuqf9Rmvj7pr7H6FHhs7u\niYjz2gsBcnHKAAAgAElEQVRrxcCVQKGf26Y23C5xxF8oA0ISsmxRofc5AFKTk8hPr2VxUWHUbHkk\nrZv5j6/5avsen2NuWDTQ2rh74K55TP/DHx2uTkSk/bB2OfCcMeY6fOesHQ7UAueEt7z45cbLga2d\ngUjsOyAkIatue6X3ORqlJidRV1UZ0vchkeX2lZ2tjbuabRp3IuIObV53sNZ+AgwGJgOvAiup327q\n18AQLS4Ij8ZQNKWimHxPJVMqilkyI4+y0lJH6/J/BiKBras+D0nISuyeQXWN78YY1TW1JKbrUlQ0\nGr90VYugtmxirquCGrQ+7pJ7aNyJiDsEst3UPuqD2qvhL0fAvZcDWzsDsbOmjuqaWp/bqmtqScwM\n7pedmTadghl55KfXP1d1TS0FVR4mz50ekvolMpoHtM5JCdgLcxyqpn2tjbtr5l/ndGkiIkAAYa01\nDf3XFltrJ4ewHsG9lwMTu2dQXVHRIpT1G/ZjCjaV7nfI6p+dzeSFi1hcVEhdVSWJmRlMnuv85V9p\n3+6aOi5o1n7j/OEZXDqil0MVBa61cTdg4EBtzi0irtDhsAYkAb+k/hKphFBroSjYM1Wh1toZiMvn\n3gAQkpDVPztbiwmiyOpvdnHdy+t9js0bO4AhPbs6VFHHaNyJiJsleDytb+9pjHm9jccmASdaa5Pa\nuE8keMrLyx0uIbRaTORvPFPlghYW3oUPVZUkprtj4UOg0tLSdKYkRB75ZCtPf+F7pvfJC4bQxaH2\nG+Gg8SKB0liRYGRlZUH9ZgMBa+/M2nHA7cAmP7elACcG82ISGDdfDtQZiPhmnihhT63vH3huWzAg\nIhJr2gtrnwCrrLVPN7/BGNMZ+HNYqhKFInEVt7ffEBGJZe2FtT8B21q5bR8wKbTliIibKKSJiDiv\nzTlrUSLm5qxJeGheSeAU0jReJHAaKxKMcMxZ88sY0wPY0dCDTURiQPW+Wi6ya3yOnTE4nbyRfRyq\nSEREIICwZoy5HPivtfa9hu8fBy4AdhpjLrHWLgtzjSISRp9t2cmNr5X5HLvttGyGZ6Y6VJGIiDQV\nyJm13wInARhjRlO/QvRg4AjgbkBhTSQK3bNiE6+u/dbn2BNmCF1TYqf9hohILGh1zpox5oGGLy8G\nllJ/fXUYkA78p+F7AzwJ4OBOBpqzJgHRvJJ6mo8WGI0XCZTGigSjI3PW2l1gYIwpA0ZaazcZY94A\nbrPWvtRw23pr7YAO1hsqCmsSkHj/QFVIC068jxcJnMaKBCNcCwyeAf5tjPka6Au8DmCMGQooJYm4\nnEKaiEh0CySsXQusADIBa63d23C8D/D7cBUmIvtHIU1EJDaoz5rEjXi4VOGv/cZZQ9KZcqzabwQr\nHsaLhIbGigQjYn3WRMRd/rt5J7//p2/7jT+ens3QXmq/ISIS7SIe1owx/wecDWyx1h7ecKw79atK\nBwDrAGOt/bbVJxERABa+s4nXv/L9T+XJC4bQJTl07TfKSkuxRYXUba8ksXsGZtp0+mdnh+z5RUSk\nbU40VHoAGNvs2G+A16y1OdQvYPhtxKsSiSLjl65i/NJVPkFt2cRclk3MDXlQWzIjjykVxeR7KplS\nUcySGXmUlZaG7DVERKRtEQ9r1tq3gO3NDo8HHmr4+iHgnIgWJRIlGkNaU40hLRxsUSH56QmkJicB\nkJqcRH56AraoMCyvJyIiLQV0GdQY0wn4FTACOKDpbdbay0JQR6a1dkvD8202xmSG4DlFYoZTKzvr\ntld6g1qj1OQk6qoqw/7aIiJSL9A5aw9Rv73U88CW8JXj1eoS1YYtr0Y3fm+tJS0tLQIlSbTr1KlT\n1I2VMYveb3Hs9bxjI/b6nTN7U72xwiewVdfU0rlv76j7WQYrGseLOENjRYJljLmlybfLrbXL27p/\noGHtZ8Aga21VB+tqzxZjTG9r7RZjTB+gorU7Nryh5U0O3awl0xKIaFle/92eWi592rf9xrF9u3Hj\n6P4AEX0P5065ioIZeeSn15KanER1TS0FVR4mz70qKn6W+yNaxos4T2NFgpGWloa19pZgHhNoWCsF\nOgddUesS8O0x8jfqL7PeAfwSbQ4vceg/67/jzrd8ewbefEo/jso6oJVHhF//7GwmL1zE4qJC6qoq\nSczMYPJcrQYVEYmkgJriGmNmAROAhTS7DGqtfT2YFzTGPEb9ZcyMhue6GXgOeAroD6ynvnVHoGfx\n1BRXAuLWv36ve2kdqyt3+xx73AwmNSWplUdIJLh1vIj7aKxIMMLZFPfqhv+9rdlxD3BIMC9orb24\nlZtODeZ5RKKdtoMSEZFABBTWrLWDwl2ISLxQSBMRkWBouymRCFFIExGRjmg1rBljiq21Qxu+LqOV\ndhrW2qibaaztcySSFNJERGR/tHVm7YomX18S7kIipXH7nMau7NUVFRTMyGPywkUKbBIy/tpvHNfv\nAG44uZ9DFTlDfxiJiOy/gFaDulxQq0EXzJnNlIriFk0+F2cOZdYd88NRn7hEJFZsvbthB7f9e6PP\nsblj+jPi4G5hfV03avGHUWOPtij5w0gr/CRQGisSjHCuBo0Z2j5HwmHu62V8tGmnz7EnLxgS0k3V\no43/fUVrWVxUqD+MRESCEHdhLbF7BtUVLbfPSczMcLAqiVaaj9Y6/WEkIhIacfdnv5k2nYIqD9U1\ntQDeSzNm2nSHK5NoMn7pqhZBbdnEXAW1JhK7Z3j/O2tUXVNLYrr+MBIRCUZAYc0YM7uV4/mhLSf8\nvNvnZA6lIDGDxZlDo2YOjThPIS1w+sNIRCQ0Ar0MehPgb5LJjUBB6MqJjP7Z2ZozI0HR5c7gaV9R\nEZHQaDOsGWPGNHyZZIw5Bd/VC4cAWv4iMctf+43Tf3QQ04472KGKoo/+MBIR2X/tnVn7v4b/7QIs\naXLcA2wGrglHUSJOeqdsB398w7f9xu2nZTMsM9WhikREJJ61GdYa9wQ1xjxsrb0sMiWJOOOmf5by\n6eZqn2P2giF0juP2GyIi4rxAN3JXUJOYpfloIiLiZnG5N6gIKKSJiEh0iLu9QUWiLaRpf00RkfjW\nVlibD4xq+Hq0tXZuBOoRCZsxi95vcczNIQ387K9ZUUHBjDz1BhQRiSNtzZweYozp0vD1rEgUIxJq\n23fVtGhke+TB3byNbMtKS1kwZzbzpkxiwZzZlJWWOlhtS/7310zAFhU6XJmIiERKW2fWlgGrjTHr\ngK7GmDf83cla+5NwFCayP15eU8Wf39vsc+yOs4aQm/7D3yfRcNZK+2uKiEirYc1aO8kYcyIwEDiW\nH3quibjWhU+uZldNnc+xJy8YQpfkRNLS0tix44c+zv7PWtWyuKjQNY1cE7tnUF1R4RPYqmtqSczU\n/poiIvGivT5rbwFvGWM6WWsfilBNIkHzt2jgnpNS2zxDFg1nrcy06RTMyCM/vbb+7F/D/pqT52p/\nTRGReBFon7UlxpjRwGVAX2Aj8Ii19l9hrE2kXf5C2jPLr68PNU972rykGQ1nrbS/poiIJHg8ftun\n+TDGXA7cBtwPrAeygV8Dv7fW3hfWCtvnKS8vd7gEiTR/Ie3R12a1CF6LM4d6L2k2vwzaYs5a41kr\nF81ZE+c0Hy8irdFYkWBkZWWB717r7QrozBpwPXCatfbTxgPGmCeBvwJOhzWJMCf7frXWI23elElB\nX9LUWSsREYkGgYa1DGBls2MlQI/QluMeakTqnxMrKLfu3Mflz631OZbbsyt3jB3g/b6jlzT7Z2e7\nZjGBiIiIP4HuUP0WUGCMSQUwxnQD5gFvh6swJzUGkikVxeR7KplSUcySGXmu68HlhEj2/bKffcP4\npat8gtpvftKXZRNzfYIaNEzEr/JQXVML4L2kaaZFdiK+2/u2iYhI9An0zFoe8ATwrTFmG/Vn1N4G\nLgpXYU6KhpYOTonECkp/lzqfMEPomtL63xZuuKQZDX3bREQk+rQb1owxCUBX4KdAHyALKLfWbghz\nbY6JhpYOTgnnCsr93bPT6UuaCvkiIhIO7V4GtdZ6gM+AOmvtBmvte7Ec1KAhkDRcTmtUXVNLYrp7\nWjo4JRyXG5tvBwXwk//ezz0npe5XrZGmkC8iIuEQ6GXQj4EhQMtTHzHopHPP58aZV/KH3CxvS4cb\nV5UzcervnS4tIO0tjtifxROhvNzYVvuN6prasF1CbP7+Tzr3fN589un9XkwSDX3bREQk+gTaZ+0P\nwCXAg0AZ4H2QtXZJuIoLUMj7rC2YM5uz1n/KC5u3U+eBxAQ4u093/j7giKAuZzmxorS93mFu6C3m\nL6T95L/3M6WiuM0+afsrLS2NlV984fP+1+zYxV/Wf+MTzDv683DDz1ZCR72zJFAaKxKMcPZZOwH4\nGji52XEP4HRYC7m67ZUMTuvKzLSuvseDuJzl1GTz9uZNBTuvKlSBc9OOveT97SufY91SEnnMDAFg\n3r8jcwmx+ft/YfN2b1BrfM2OzjNzwyIHERGJPYFuN3VKuAtxk1BcznJqsnl786aCmVcVisC5+P3N\n/H11lc+xmf9zMKMHHeRzLFKXEJu//zoPIQ2JTi9yEBGR2NNmWGvoq3YjcBjwEXC7tXZPJApzUig2\nz3Zqsnl7oSeYULQ/gTPY9huR2rC8+ftPTKh//5pnJiIibtXeatAiYBz1CwvOB+LilIH3clbmUAoS\nM1icOTToy5dOrShtb7VmMKs5OxI4/a3sXDYxl2UTcwPrk7YfP/NANH//Z/fpzo2ryh1vpisiItKa\nNhcYGGM2AUdZazcZY/oDb1hrB0WsusC4ciN3Jyebe+eZVVWSmN7GatBWbm+0YM7sgCf972+PtEho\nnATc/P17V4O28/OQ+KJJ4xIojRUJRkcWGLQX1r6z1h7Y5Ptt1lq37QfqyrAGgYcitwokcEZDSGuk\nD1QJhsaLBEpjRYIRjrBWDZzV5EmfA8Y3fRFr7evBFhpirg1rTUXrxvD+Ame//v0557GSFvd1a0hr\npA9UCYbGiwRKY0WCEY6wto4mPdX88FhrDwnmBcPA9WEtVvpvfbVtNzNfXNfiuNtDWiN9oEowNF4k\nUBorEoyQh7Uo4fqwFszcLzf63avr+bxil8+xy4/OZFyu266It00fqBIMjRcJlMaKBCOcTXFdbd6U\nSa6+tBite0b6m4826q276HRgGiNOmg5EV1gTERGJRu1u5B4N8j2VTKkoZsmMPMpKS50up4Vo2xje\nX/uNo57O59HXZnF9zSZX/6xFRERiTUyENWhs2JqALSp0upQWgult5qTWeqT95L/3+2mO686ftYiI\nSKyJicugjdxwabG1VZ9u3jOyvfYb0XoZV0REJBbEVFhzepsgf3tpzs2bzEGHDKbL3t0kds/gwt/N\nDSqkhavlh8fjCbj9RqT27WxLtLY+CYV4fu8iIhIjq0HLzjrGFe0wmq/63LBrD0u+rmD2kKwOtewI\nR8uPVVt3MeeV9S2Ot9V+w+nWI6F6/WhcseX0zz6eReN4EWdorEgwor51R0Nft2+BOmCftXZkAA/z\nzBw31hU7BPz+wvO4Ja3G+/1da8qZOqh3h1t2hLLlx7Tnv2LDd3t9jv366Ex+HmD7jf3ZjWF/zwyF\n6ucQjR+o0d72JZpF43gRZ2isSDBioXVHHTDaWrs9mAclpmdQt70SW1ToWGArKy1l7erVVB8xwPuL\ntc7Dfs31CsVcMX/z0R43g0lNSfJz79b1z87uUDjwd2m4YEZeUGeG4nnOXDy/dxERqee21aAJdKCm\nKRXFjrfvsEWF3DTkYArWbPKu+qzzeParZcf+tPzwt7LznpNSWTYxN+igtj9sUeF+rySNttYnoRTP\n711EROq5Lax5gJeNMe8bY64I9EFuaClRt72SwWld+dXAXtz79RYWrC6nuraW331R2uGWHf5afszd\nsofqnTuZN2USC+bMbhFM/YW0Z5Zfz6OvzXIkyIbizFC0tD4Jh3h+7yIiUs9tl0FPsNZuMsb0Al41\nxhRba98K5gmcukTUuGKyX9fOzBycBdT/Yr38s438qVs2XfbtDrplR/OWH9937UzXpK+4dmdpi0uK\nV79Z3eLxj742q1mQrWVxUWFE5zqFYiWp21ufhFM8v3cREannqgUGTRljbgZ2WGsLmh0fDYxu/N5a\ne3PZWcd4b6+uqeWBvj/mdwuLIlRpvfXr1nHPlF8y80CPd9XezV99w+TCxRx/4okheY3/nTGNSRs/\n8wYfD/CL0Xe2uN/reccy99ILmLGvosVtC1N6c/MjT4SknkD4+7nc9V0CVy9+iAEDB0asDoBOnTqx\nd+/e9u8ogsaLBE5jRYKRlpaGMWZuk0PLrbXL23qMa86sGWNSgURr7ffGmG7A6cDc5vdreEPLmxy6\nubqm1retwdyrIr4yp0dGBpPu+rPPGZCZDWdAQlXLnootpCYn8Un3wdx6RMurxI3tN3bs2IEnLZ3q\nik0tzmh5ehwU0Z+Nv5/LpLnT6ZGREfH/j7RiS4Kh8SKB0liRYKSlpWGtvSWYx7jmzJoxZhDwLPUn\njJKBpdbaPwbwUM+sSy/uUEsJiK6Go+MfLYYE39W+5371CpXfl7a4tBlof65oev/7Sx+oEgyNFwmU\nxooEI+r7rHWQp7y8vEMPjJaGo/7abzz65u9hT3Wb9bbXGy1a3n+o6ANVgqHxIoHSWJFgKKwFye0N\nR/2FtHtOSm01gAV7lszt7z/U9IEqwdB4kUBprEgwYqEpbtg1DTRlX31J6qDuPre7oeFoexur+wtS\n761YQdG108jtBCmJCZzVpztLZuRxxpybePPZp/0GODVcFRERcb+4CmvNL/vN21tNdc2Bjm5Q3lR7\nIa01ZaWlPH79DO4Z2ueHy5lrNjG6ZxqPXz+DWw/t6Xf3gFC01YinOW8iIiJOiKvLoKHeaD0UPB4P\n5zxW0uJ4ICGtUWuXM6/9dB1/OmJgq5c5/c1Zm7tlDwcdMpgue3e3G76ibc6bLlVIMDReJFAaKxIM\nXQZtR/PLfv26dmbyoEyu/bqK3JwhEW04+sHG7/l/yze0OB5MSGs8q7VuxVvcm1DDhH4Z9OvaGai/\nnNk1KbHNy5zBNN319zPxv5VU5BvvioiIxLK4Cmv+Lvv1SElm2HHHRyxc+LvUeeGPMzgxfRe2qJB5\n/w7scqLPWa0hmd5Ln78a2It+XTtTXVPLpn21NPaga9T8MmfTDdoXzJnNlJ4pAYevcM550+VVERGR\nem7bG7RDWtsnszkn91n0t2fnE2YIyybmcmL6LpbMyAtqQ3q/Z7UGH8xTGypZs2MXUz9dT/bAgdy0\n9puA32+w4Stcm4w3BtFgfh4iIiKxKibCWqC/0L2X/TKHUpCYweLMoWGfX+UvpC2bmMuyibl0Tan/\n8fu/nNj2hvStBavifXBv+Xfce8QA5vdKZmrWgVxdvJnb9nZr9/0GG77CFX478vMQERGJVTFzGTTQ\n+VJNL/uFUzArOztyObG1lZwJ3dK4tW+q9/jgtK7cM7QPizP7tvu+zbTpFMzIIz+9+fZd/sNXuDYZ\nV0sRERGRH8RMWAN3/EL3u9vAa7MoqPJQdpL/s1odaaHRWrAacHAfUpN3+tw30J9LR8JXOMJvKFqK\niIiIxIqYCmut/UIP92T1Oo+Hc/2033hm+fX1X7Rz1i/YM1rQerCyRYVU+2njEWjQidSZx7Z05Och\nIiISq2Kiz1rZWce0uVF5a73AgP0Kce+W7eC2Nza2OH7iv+8g39PyTFZBYgbX3fuA3+dqbx/PQEVb\n77PWhOrn0ZR6IUkwNF4kUBorEoy43Rt05rixrf5Cb61h7Pyu/UncVNqhUOPvUucFP87g4sN7tfma\nodhzM5CzhOEIOrFAH6gSDI0XCZTGigQjbsNaWzsYzJsyye9ZrilrKvnToPSWXf+/rmLYccf7DTj+\nQtqTFwyhS7Lvotpwnd2KlbNmTtEHqgRD40UCpbEiwdAOBn60Nlm9W7L/7v6pO79j3zv/YuFnnzBj\n0RL6Z2e3urKzrLSUot9d3+IsV7hWSWrHABERkfgT82GttcnqBww4hOqab1qEuAHdOjN1UG/mry7n\n6jergZY90sDPWa5mWzOFY6K+WlqIiIjEn5hoitsWf41wz5hzE3s3bWT+6nKfhq53rt7IhH4ZXHLq\nAj656nGf52lsZNvIicat4doxQERERNwr5s+sQct2FAvmzObm3p3Z1iOTe7/eQp0Haj3w36ueoHlz\niFA2st1famkhIiISf2IirC2YMzuo9huNQSs1OYkxI3/C3COmtLjPo6/N4k/dsmHiX/w+hxONW8M1\nF05ERETcKyZWg5aMPTKo1ZEL5sxm3aAzKE3r63P8kDfuZ37d6vpLot/sY0rR/a0+j1ZmRh+t2JJg\naLxIoDRWJBhx27qj7KxjvN+018/M38rOJa/P4U8Vu0jsfwgH1O4JuDeZ+plFF32gSjA0XiRQGisS\nDLXuoPV5Y/5C2k/+ez91VZU82HMwU24OPmg1nQsX7i2tREREJD7FXFhrPm+stR5pAExsefatI6Gr\nvTYeIiIiIh0VE607mrbfKKjyYKZNZ/zSVS2CWvP2G801hq4pFcXkeyqZUlHMkhl5lJWWtvn6TrTx\nEBERkfgQE2fWFmcOpa6qkoTMDD469XI+erPa5/a2AlpTHd0hQM1qRUREJFxiIqxNufUOLnl6jc+x\niw/vyQU/7hnU83Q0dDnRxkNERETiQ0xcBm0a1I4tfoJ7TkoNOqhBx3cIMNOmU1Dl8Xs5VkRERGR/\nxETrjmPnvc7Dr83mgOREb1A6Y85NvPns0/u3UCCI3mlq4+F+Wl4vwdB4kUBprEgw4rbPWmNT3EZr\nduzi3vLvuPXQnt7QddPab7jozoWMHDXK75M0hq2q9V+x6su1HNg5hdrOqfToP4CDOyerHUcM0Aeq\nBEPjRQKlsSLB6EhYi4nLoM3nmb2webs3qDXefuuhPSm6dprflZ1NV4HeklbDkh/3Izuhjt9kdibt\ny88x1eUBrwwVERERCaWYCGvN55ntq/P4XSiQ2wm/7TT8rgIdfDAvbN7O7CFZPLWhUu04RERExBEx\nEdaaT+5ftbdlgKuuqSUlMcHvys5WV4F6fvhf7zG14xAREZEIiomwNnnhIhZnDqUgMYPFmUOZ9qci\nblr7je/qzDWbOLtPd78rO1tdBZrww/96j7WzMlREREQklGJigUF5eXmLg++tWEHRtdPI7QQpiQmc\n3ac7T+5J8buy0+8q0DWbuKBfBo+XfcPkQZn0SElud2Wo9gd1N00ClmBovEigNFYkGHG7GtRfWIPg\n2mk03rd680bWb9rMwZmZdErvQU2dhwNq9wT0+I62/ZDI0AeqBEPjRQKlsSLBUFgLo/bOmi2YM5sp\nFcUtdjFYnDm0za2qJHL0gSrB0HiRQGmsSDDitnVHuAWywbv2BxUREZFwUFgLgP8N3n3beHR0q6r2\nlJWWsmDObOZNmcSCObPV501ERCTOxF1YKyst5f9dfSXTTz2JX48+gZuvar/RbSBnzcKxP2ggZ/RE\nREQktsVVWCsrLWXxtMu5dmcpdw3qzp8GpcOn77Iwb3KbASixewZrduzirjXlLFhdzl1rylmzY5fP\nWbP+2dktWojs7+KCQM7oiYiISGxLdrqASLJFhVzfM8Un/MwekkXR2s3YosJWFwKcdO75/GXmP/lD\nbpZ3peeNq8qZeO35Pvfrn50d0sUEmgcnIiIicXVmrbXwk5iQwLoVb7U6J+zNZ5/2BrXGx/whN4s3\nn326xX1DOccsXPPgREREJHrETVgrKy2lZN067izZyF1rytmwaw9QH37qPB4GJNS0Oics0DNcoZ5j\nFo55cCIiIhJdYiastXVG670VKyi4ZAJ39U3l+py+TB3UmwfXbWXNjl3MX13ON3tqmNAvo9U5YYGe\n4Qr1HLNwzIMTERGR6BITc9Za7B5QUUHBjDwmL1wEQNG107hnaB/fEDX4YC77YC0/PrAL1wzuA8Bd\na8qp80DJ11WUlZZ6Q5GZNp2CGXnkp9f67k4w1/cMVzjmmIV6HpyIiIhEl5gIa/7PaNWyuOGMVm4n\n/Iaofr17cV3/A9m2r4YH120lf/DBP4SxhrDXPzv7hzNcjVtXZWYweW7LracSu2dQXVHRYheDxEzN\nMRMREZGOiYntpmaePZZ8T8uzVwWJGeCBhNWfMXVQ7xYh6k/dsqnbuJ7OlVuYdmifFrcHu1VUa/uD\nnjHnJt589mlt8O4wbQkjwdB4kUBprEgwOrLdlKvOrBljfgb8ifq5dP9nrb0jkMc1ntHatq+GpzZU\nUueBOo+HXYdlcWDaAZzVpzsFazb5nDn77coNZBzdn7Pm3MSjN14XksuX/s7AnTH1fF6841a/l2ij\nKbC1tzeqiIiIhIdrzqwZYxKB1cBPgXLgfeBCa+2qdh7qeXfFChbmTabbt5XMHvJDL7Q7v9nHuN/d\nyot33MoFnfdhN1SyefdeslM7c1F2T3qkJFNQ5aHu4Gxm7yoLyybssbDBe2tnDKMtcOqvXwmGxosE\nSmNFghHtG7mPBNZYa9dba/cBTwDjA3lg/+xsDjpksDeoQf2Zset7pvDms08zeeEi/j7gCNYnd+WO\nHw/gupy+9Ova2btaMzkxIWwtMmKhsa12UhAREXGOm8JaX6CsyfcbGo4FpMve3a2GosYVlblDhvi9\nT5d9u8PWIiMWGtvGQuAUERGJVq6as7Y/AlmJ2dZ9wtUiI9C2H26mVa4iIiLOcVNY2wg0PZXVr+GY\nD2PMaGB04/fWWtLS0ph0/W+5a8ovmXngD6Horu8SuHr+b0lLSwMI6D6hNmz4cK65/xEeuGseNdsq\nSe6dwTXzr2PAwIFheb1wcOLnFg6dOnWKqnrFWRovEiiNFQmWMeaWJt8ut9Yub+v+blpgkASUUL/A\nYBPwHnCRtba4nYd6ysvLgSYrFqsqSUz3v2IxkPtIS7Hwc9MkYAmGxosESmNFgtGRBQauCWvgbd2x\nkB9ad/wxgId5w5pIW/SBKsHQeJFAaaxIMKK+z5q19iUgx+k6RERERNzCTatBRURERKQZV51Z21/q\nsoOckosAAA1RSURBVC8iIiKxJmbOrDV22Z9SUUy+p5IpFcUsmZFHWWmp06WJiIiIdFjMhDV12RcR\nEZFYFDNhTV32RUREJBbFTFiLhW2dRERERJqLmbBmpk0P22bsIiIiIk6JmbDWPzvbuxn7bXu7MXNj\nNTXd0rBFhVpkICIiIlErZsIa1Ac2M206dd99y119U7ml6y6tChUREZGoFlNhDZxfFVpWWsqCObOZ\nN2USC+bMVkgUERGR/RJzYc3JVaHq9SYiIiKhFnNhzclVoU6f1RMREZHYE3NhzclVoer1JiIiIqEW\nc2Gt6arQgsQMFmcOZfLCRRHZI1S93kRERCTUEjwej9M17C9PeXm50zUAP8xZa7wU2nhWL1JhUdqW\nlpbGjh07nC5DooTGiwRKY0WCkZWVBZAQzGOSw1NKfPKe1SsqpK6qksTMDCbPna6gJiIiIh2mM2sS\nN/TXrwRD40UCpbEiwejImbWYm7MmIiIiEksU1kRERERcTGFNRERExMUU1kRERERcTGFNRERExMUU\n1kRERERcLCb6rM2bMonE7hmYaeppJiIiIrElJs6s5XsqmVJRzJIZeZSVljpdjoiIiEjIxERYg/oN\n0/PTE7BFhU6XIiIiIhIyMRPWoD6w1VVVOl2GiIiISMjEVFirrqklMT3D6TJEREREQiZmwlp1TS0F\nVR7MtOlOlyIiIiISMjGxGrQgMYPEzAwmz9VqUBEREYktMRHWrrv3AadLEBEREQmLmLkMKiIiIhKL\nFNZEREREXExhTURERMTFFNZEREREXExhTURERMTFFNZEREREXExhTURERMTFFNZEREREXExhTURE\nRMTFFNZEREREXExhTURERMTFFNZEREREXExhTURERMTFFNZEREREXExhTURERMTFFNZEREREXCzZ\n6QIAjDE3A1cAFQ2HbrDWvuRgSSIiIiKu4Iqw1qDAWlvgdBEiIiIibuKmy6AJThcgIiIi4jZuOrM2\nzRhzKfABMMta+63TBYmIiIg4LWJhzRjzKtC7yaEEwAP8DvgzcKu11mOM+QNQAPw6UrWJiIiIuFXE\nwpq19rQA73of8HxrNxpjRgOjmzwvWVlZ+1WbxI+0tDSnS5AoovEigdJYkWAYY25p8u1ya+3yNh/g\n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\n1fKowoNPAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots()\n", "ax.plot(X[:,1], y[:,0], 'o', label='Raw Data')\n", "ax.plot(X[:,1], np.dot(X, optimal_theta), linestyle='-', label='Linear Regression')\n", "plt.ylabel('Profit in $10Ks')\n", "plt.xlabel('Population of City in 10Ks')\n", "legend = ax.legend(loc='upper center', shadow=True)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Linear Regression with Multiple Variables" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Predicting House Prices based on Size (feet squared) and number of bedrooms." ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "collapsed": false }, "outputs": [], "source": [ "dataMulti = np.loadtxt('C:\\\\Users\\\\pochetti\\Machine_Learning\\\\mlclass-ex1-005\\\\mlclass-ex1\\ex1data2.txt', delimiter=',')\n", "X = dataMulti[:,0:2]\n", "y = dataMulti[:,2]\n", "y = y.reshape(y.shape[0], 1)" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAogAAAGGCAYAAAD4q3BXAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3X2cXVV97/HPTEKA6DEPQyeYhwEFgoHaFlSgetUURIit\nhPZVf4gVEoIGJJpgCCbAlSRFlEgSICUSIk8JVeGnVqHKhUhhWm1rBCq3VgIJFpjJ40DITEdGuUnm\n3D/2Osl52GfmTOY8zTnf9+s1rzlnzd57rf07e5LfrL3XWg3JZBIRERERkZTGSjdARERERKqLEkQR\nERERyaAEUUREREQyKEEUERERkQxKEEVEREQkgxJEEREREckwvFwVmdlk4EEgCTQA7wS+DNwfyo8B\nXgbM3bvCPquAacAbwEx3fzaUzwCuC8e60d3Xh/JTgfuAI4BH3P3KUD4mXx0iIiIikqlsPYjuvtnd\nT3H3U4H3ECV9PwAWAY+7+4nAE8A1AGY2DTjO3U8ALgPWhPIxwPXA+4DTgcVmNipUcwdwqbtPBiab\n2TmhPLaO/pjZ1MGddW1SXHIpJvEUl3iKSzzFJZdiEk9xiVfMuFTqFvNHgN+4ezswHVgXyteF94Tv\n6wHcfSMwyszGAecAG9y9y907gQ3AuWZ2NJBw96fC/uuB89OOlV5Hqrw/Uw/h3OrB1Eo3oApNrXQD\nqtTUSjegSk2tdAOq1NRKN6AKTa10A6rU1Eo3oEpNLdaBKpUgXgB8O7we5+67ANx9JzAulE8A2tP2\n2RrKssu3pZVvjdk+ro7mop2JiIiISI0pe4JoZocB5wHfDUXZa/3lW/uvoYjN0PqCIiIiInmUbZBK\nmmnAM+7+Wni/y8zGufuucJu4I5RvAyal7TcxlG0jswt1IvBkH9sD7MxTR4Zw7/7Asd19MbB4oCdY\n69wdFJcMikk8xSWe4hJPccmlmMRTXOK5O2aWXtTq7q2HcqxKJIgXAt9Je/8wMBNYFr4/lFY+B3jQ\nzM4AOkOC9xhwYxiY0gicDSxy904z6zKz04CngIuBVTF1zEirI0MIYmta0eLt27cP4lRrUyKRoLu7\nu9LNqCqKSTzFJZ7iEk9xyaWYxKv3uKxYuIDZHZsYOXzYgbKeffs58bFf4u5LilFHWW8xm9lIogEq\n/5BWvAw428xeAM4EbgJw90eAl8zsReBO4IpQvge4AXga2AgsDYNVIEoo7wY2A1vc/dGYOs5K1SEi\nIiIy1NicuazsTNKzbz8QJYcrO4v79FxDMqnH8fqQVA9irnr/yy2OYhJPcYmnuMRTXHIpJvEUF2hv\na8NXr6K3czeNo5uwOXM5/YwzoEhjNipxi1lEREREBmFSSwtXLVtesuNrqT0RERERyaAEUUREREQy\nKEEUERERkQxKEEVEREQkgxJEEREREcmgBFFEREREMihBFBEREZEMShBFREREJIMSRBERERHJoARR\nRERERDIoQRQRERGRDEoQRURERCSDEkQRERERyTC8nJWZ2SjgLuAPgV5gFrAZeBA4BngZMHfvCtuv\nAqYBbwAz3f3ZUD4DuA5IAje6+/pQfipwH3AE8Ii7XxnKx+SrQ0REREQylbsH8TaixG0K8MfA88Ai\n4HF3PxF4ArgGwMymAce5+wnAZcCaUD4GuB54H3A6sDgkngB3AJe6+2RgspmdE8pj6xARERGRXGVL\nEM3sbcAH3f1eAHffF3rxpgPrwmbrwnvC9/Vh243AKDMbB5wDbHD3LnfvBDYA55rZ0UDC3Z8K+68H\nzk87VnodqXIREaky7W1trFi4gJtnX8KKhQtob2urdJNE6k45bzG/A3jNzO4l6j18GrgSGOfuuwDc\nfWdIAgEmAO1p+28NZdnl29LKt8ZsT0wdzcU8MRERKY72tjbumXc580c3MHL4MHo6Olg573Jm3baG\nSS0tlW6eSN0o5y3m4cCpwGp3P5XoucJFRM8Rpst+n9JQxLbkq0NERCrIV686kBwCjBw+jPmjG/DV\nqyrcMpH6Us4exK1Au7s/Hd5/nyhB3GVm49x9V7hN3BF+vg2YlLb/xFC2DZiaVf5kH9sD7MxTRwYz\nm5p+bHcnkUgM8DRr34gRIxSXLIpJPMUlnuISb8SIETR0dx5IDlNGDh9GQ3dXXcZM10o8xSU/M1uS\n9rbV3VsP5ThlSxBDctZuZpPdfTNwFvDr8DUTWBa+PxR2eRiYAzxoZmcAneEYjwE3hoEpjcDZwCJ3\n7zSzLjM7DXgKuBhYlXasVB0z0urIbmMr0JpWtLi7u3vwJ19jEokEiksmxSSe4hJPcYmXSCRIJkbT\n07EjI0ns2bef5NhRdRkzXSvxFJd4iUQCd19SjGOVexTzXOBbZvYs0XOIXyVK2s42sxeAM4GbANz9\nEeAlM3sRuBO4IpTvAW4geoZxI7A0DFaBKKG8m2jqnC3u/mgoT6/jrFQdIiJSXWzOXFZ2JunZtx+I\nksOVnUlsztyC9tcAF5HiaEgm9TheH5Lbt2+vdBuqjv5yy6WYxFNc4iku8VJxaW9rw1evordzN42j\nm7A5cwsaoJIzwCUkl0N5gEstXisHPt89u2kcU/jnm64W41IM48ePhyKN2VCC2DcliDH0i5lLMYmn\nuMRTXOINNi4rFi5gdsemnNvTa5uncNWy5cVoYtnV2rVSrCS+1uJSLMVMELXUnoiI1ITePbtjB7j0\ndu6uUIskm0apDx1KEEVEpCY0jmk68OxiSs++/TSObqpQiySbkvihQwmiiIjUhMEOcJHSUxI/dChB\nFBGRmjCppYVZt61hbfMUVjY2sbZ5ypAeoFKLlMQPHRqk0jcNUomhh4NzKSbxFJd4iks8xSVXLcbk\nUEeppyt3XIox8rocijlIpZwrqYiIiEidm9TSMqRGldfr+uC6xSwiIhWVmtx66UUXaHJrqTr1OvJ6\nQAmimU0Ky96JiIgMWqp3ZnbHJubt7WB2xybumXe5kkSpGvU68rqgBNHMWszsX4HngcdD2V+b2V2l\nbJyIiNS2eu2dkaGjXkdeF9qDeCfwYyAB7A1lPwHOLkWjRESkPtRr74wMHfU68rrQBPE04CZ37wWS\nAO7eBYwqVcNERKT21WvvjAwd9Tp9UqGjmHcBxwObUwVmdhKgh0REROSQ2Zy5rJx3OfNH789cm3dp\nbffOyNAy1EZeF0OhCeJy4Edm9jVguJldCFwL3FSylomISM070DuzehUN3V0kx45i1tLqnGNOpJ4U\nPFG2mU0HLgOOIeo5vNPdf1jCtlUDTZQdoxYnbh0sxSSe4hJPcYmnuORSTOIpLvEqMlG2uz8EPDSY\nyszsZaAL6AX2uvtpZjYGeJAo8XwZsPB8I2a2CpgGvAHMdPdnQ/kM4Dqi5yFvdPf1ofxU4D7gCOAR\nd78ylOetQ0REREQyFTrNzSoze39W2fvN7NYB1tcLTHX3U9z9tFC2CHjc3U8EngCuCcefBhzn7icQ\n9VyuCeVjgOuB9wGnA4vNLDVY5g7gUnefDEw2s3P6qkNEREREchU6ivlC4OmssmeATw2wvoaYOqcD\n68LrdeF9qnw9gLtvBEaZ2TjgHGCDu3e5eyewATjXzI4GEu7+VNh/PXB+njpS5SIiQ0JqtZGbZ1+i\n1UZEpOQKTRCTMdsOG8D+6cd5zMyeMrPPhLJx7r4LwN13AuNC+QSgPW3fraEsu3xbWvnWmO3j6mge\nYLtFRComfbWR+cndWm1EREqu0GcQfwp8xcy+5O69ZtYILAnlA/EBd99hZn8AbDCzFwjzKqbJN2qm\nKA9d9lWHmU0FpqbeuzuJRKKI1daGESNGKC5ZFJN4iku8gcblB2u/EbPayH7uXfsNrrttdamaWXa6\nXnIpJvEUl/zMbEna21Z3bz2U4xSaIM4DfgTsMLNXgBZgB/DxgVTm7jvC91fN7IdEE3DvMrNx7r4r\n3CbuCJtvAyal7T4xlG0jLYkL5U/2sT3Azjx1ZLevFWhNK1qsUVK5NHosl2IST3GJN9C4vNmxK3a1\nkTdf3VVT8dX1kksxiae4xEskErj7kmIcq6BbxO6+FTiV6Nm9m8P394TygpjZSDN7a3j9FuCjwK+A\nh4GZYbOZHBwp/TBwcdj+DKAz3CZ+DDjbzEaFAStnA4+FW8ddZnaamTWEfdOPlapjBoMcjS0iUk5a\nbUREym0g09z0Av8+iLrGAT8ws2So91vuvsHMngbczGYBrwAW6nvEzD5mZi8STXNzSSjfY2Y3EA2a\nSQJLw2AVgDlkTnPzaChfFleHiNSG9rY2fPUqevfspnFMEzantiZa1mojIlJueSfKNrNN7j4lvG4n\nz3N77l47/wrn0kTZMdS1n0sxiVeOuKQGcKSe0TuQPFXxWqmHEpcDSXDnbhpH114SDPo9iqOYxFNc\n4pVrouzPpr3+dDEqExEpNl+9KnYAx9rVq6p67dSB9nrW41qwIlI5eRNEd/8ZgJkNA2YBs939zXI1\nTKSa1PotzKGsd8/u2AEcvZ27K9Si/r3y8suZvZ4dHaycd3lV93qKSH3pd5CKu+8nGlDSW/rmiFQf\nzUFX3YbiAI6/v+XmmF7PBnz1qgq3TEQkUuhE17cAS83ssFI2RqQaxd/C1H/m1cLmzGVlZ/JAkph6\nBtHmVO8Ajn2vvzbkej1FpL4UOor5C8DRwHwze5W0ASs1PkhFZEjewqwnk1pamHXbGtamBnA0NzFr\naWGPAFTq0YHhY4+iZ9uOjOuqZ99+Gpurt9dTROpLoQmiBqlI3Woc00RPR4f+M69ihzKAI2f0cxmf\nA/z0F69m5Wcu0rQ1IlK18k5zk2Jmo4DjgC3uXm9jyjXNTYx6m16gkGlU6i0mharmuKxYuIDZHZty\nEv+1zVNKPlo4kUjw3K9/XfPT1gxUNV8vlaKYxFNc4pVrmhvM7M8BB44Eus3sfHd/shgViwwVg7mF\nKdWr0o8OaNoaEalm/d1ivgFYCNxDNC/ijcD7S90okWqj/8xrjx4dEBHJr79RzO9099vdvQdYDRxf\nhjaJiJTcUBz9LCJSLv0liAd+7u77GMDazSIi1ezAowPNU1jZ2MTa5imaqFpEJOgv4RtpZv+S9j6R\n9R53/1DxmyUiUnp6dEBEJF5/CeKlWe/vLlVDRERERKQ69Jkguvu6cjVERERERKpD2Z8pNLNG4Glg\nq7ufZ2bHAg8AY4FngIvcfZ+ZjQDWA+8BXgMucPe2cIxrgFnAPmCeu28I5ecCtxI9O3m3uy8L5bF1\nlOeMRURERIaWQtdiLqZ5wHNp75cBK9x9MtDJwdvalwKvu/sJREnf1wHM7CTAgCnANOAbZtYQEs/b\ngXOAk4ELzexd/dQhIiIiIlnKmiCa2UTgY8BdacVnAt8Pr9cB54fX08N7gO+F7QDOAx5w933u/jKw\nBTgtfG1x91fcfS9Rj+H0PHX8ZRFPS0SKqL2tjRULF3Dz7EtYsXAB7W1tlW6SiEjdKXcP4i3A1UAS\nwMyagD3u3ht+vhWYEF5PANoB3H0/0GVmY9PLg22hLLt8KzAhTx3ji3xeIlIEqWUNZ3dsYn5yN7M7\nNnHPvMuVJIqIlFlBCaKZHW5mN5rZf5tZVyj7qJl9vtCKwrJ9u9z9WTLXCSx0zcDBrC1YlHUJRaS0\nfPWqA2teQ7T03fzRDfjqVRVumYhIfSl0kMotRD10fwP8n1D261B+e4HH+ABwnpl9jGht5wRwGzDK\nzBpDD99Eoh5BwvdJwHYzGwa8zd1fN7NUeUpqnwagJbvc3Xeb2eg8dWQws6nA1NR7dyeRSBR4evVj\nxIgRiksWxSTeQOPS0N0Zuz5yQ3dXTcVX10s8xSWXYhJPccnPzJakvW1199ZDOU6hCeJfAse7+xtm\n1gvg7tvMbEI/+x3g7tcC1wKY2YeBq9z902b2IPAJ4EFgBvBQ2OXh8H5j+PkTaeXfMrNU0no88Aui\n3tDjzewYYAfwyfBF2Deujuw2tgKtaUWLu7u7Cz3FupFIJFBcMikm8QYal2RiND0dO3LWR06OHVVT\n8dX1Ek9xyaWYxFNc4iUSCdx9STGOVegziP+PrGTSzP4A2F2ENiwC5pvZZqJpaFKTcd8NHGVmW4Ar\nw3a4+3OAE42EfgS4wt2T4TnFzwMbiHo3H3D35/upQ0SqiNZHFhGpDg3JZLLfjcxsOVFP3ReJ5hE8\nmWjqmRfd/bqStrCyktu3b690G6qO/nLLpZjEO5S4tLe14atX0du5m8bRTdicuTW3PrKul3iKSy7F\nJJ7iEm/8+PFQpHEXhd5ivpZoLsFfASOJppb5JrC0GI0QkVwHEqU9u2kcU5uJUpyhsD5yvX42IlI/\nCupBTBduLb/m7gPbcWhSD2IM/eWWq9gxSU33khrRm7rVOuu2NUMqEanFa6UYn00txqUYFJdcikk8\nxSVeMXsQC53m5iQzGxfe/g5YYmaLzWxkMRohIpk03Uv10mcjIvWg0EEq3wFGh9fLgQ8BZwB3lqJR\nIvWud8/u2OleejuLMS5MBkOfjYjUg0KfQTzW3V8wswbgr4CTiHoSXypZy0TqWOOYJno6OnKme2ls\nbipqPXqWbuDK9dmIiFRSoT2IvzezBNF6x23u/hrwJnBEyVomUsfKMd1LKZe1S62nvPSiC2puPWVN\nxSMi9aDQHsRvE002neDgyimnoh5EkZKY1NLCrNvWsDY13UtzE7OWFrd3L/5Zuv2sXb1qUKOIcwZx\ndOxg5bzLD2mATTX2cJbjsxERqbSCEkR3/6KZfRTY6+5PhuJeonkRRaQESj3dS6mepStW4pmbaHYc\ncqJZbENhKh4RkcEotAcRd9+Q9f7p4jdHRMqlVM/SFSvxLFUPp4iI9K+gBNHMfgrEznvo7h8qaotE\n6kA13Dq1OXNZOe9y5o/enzmf39K5g2pjsRLPwSaa1RBjEZGhqtBBKncRrV+c+voxcDTweInaJVKz\nSjk4ZCAOPEvXPIWVjU2sbZ5y4PbtYNpYrEEcjWOaDhwjpWfffhpH959oVkuMRUSGqgGvpJJiZscD\n97r7B4vbpKqilVRiaAb7XAOJyYqFC5jdsSmnh21t85SquXU62Dameu8aurtIJkYdUu/dYFYsqfYY\n63conuKSSzGJp7jEq8RazHG2AX9UjEaI1JOhMNHyYNuYGsQxmH/EBzNaeCjEWESkmhX6DOKsrKKR\nRBNm/7zoLRIZ4vp79m0oTLRcqjYO9LnAQx0tPBRinI+enRSRalBoD+JFWe/fAP4NuKXQiszscOBf\ngBGh3u+5+1IzOxZ4ABgLPANc5O77zGwEsB54D/AacIG7t4VjXQPMAvYB81IjrM3sXOBWomcr73b3\nZaE8to5C2y5SqEKmZulvcEg1KEUbyzltzVCIcZxqntpHROrLIT+DeCjMbKS795jZMOBfgXnAfKJk\n8btmdgfwrLvfaWafA97t7leY2QXAX7r7J83sJOBbwPuAiUQDZU4guue+GTgL2A48BXzS3Z83swfj\n6iigyXoGMYae/ciVikmhz74d6CXq3E3j6OrsJSpGG9OvlXI/F1jNMc73O1Ttz06Wmv5tyaWYxFNc\n4lXkGUQzOwG4EJhA9Pzhd9x9y0Aqc/ee8PLwUHcS+LNwXIB1wGLgTmB6eA3wPeDvwuvzgAdCD+DL\nZraFaAnABmCLu78S2vtAOMbzwJlZdSwJdUiVKsZttkrcqiv02bdqmmg5X5wOpY3Zx7rkS9cwtim6\nrVvu5wKrKcaFGkiMdCtaREqpoGluzOzjRLdm3wW8DpwIPG1m5w2kMjNrNLNfAjuBnwC/ATrdvTds\nspUoASV8bwdw9/1Al5mNTS8PtoWy7PKtwAQzawL2ZNUxfiDtlvIqxhQllZrmZDBTs1RCMeMUd6zb\nZ884cKyhFptKKDRGmsZHREqt0HkQvwpMd/dPufs17v43RL1zXx1IZe7e6+6nEN0aPo0o4SzUYLpM\ni9LdKuURv4JGA756VVmPcSiKNQdguRQzTnHH+uLbkgeONdRiUwmFxqhS17eI1I9CbzFPBH6aVfaz\nUD5g7v4/ZtYK/Ckw2swaQw/fRKIeQcL3ScD28Mzi29z9dTNLlae3bRtREtiSXe7uu80sXx0ZzGwq\nMDWtnSQSiUM5xZo2YsSIksalobsz9jZbQ3dXwfUW4xgDkYrJSSefzBfuup97b7mZfa/vZvi4Jr6w\n/GqOOfbYotd5KF55+WX+/pab2ff6awwfexRvduwsWpz6i3mxYpN9Dp/+YvXEt1D5focKjVG5r+9y\nKfW/LUORYhJPccnPzJakvW1199ZDOU6hCeKzwFXAsrSy+aG8IGZ2FLDX3bvM7EjgbOAm4EngE8CD\nwAzgobDLw+H9xvDzJ9LKv2VmtxDdVj4e+AVRb+jxZnYMsAP4ZPgi7BtXR4YQxNa0osV6CDZXqR8O\nTiZG09OxI+dB/eTYUQXXW4xjDER6TMY2NTH3Kzdl/LwarqOcEbLbdvD5TTvpmXJ0UeJUSMwHG5u4\nc1j5mYuG3Cjfvn6HColRua/vctHAg1yKSTzFJV4ikcDdlxTjWIXeYv4c8Bkz225mG81sOzA7lBfq\n7cCTZvYsUdL3mLs/AiwC5pvZZqJpaO4O298NHBUGoVwZtsPdnwMceA54BLjC3ZPhOcXPAxuAXxMN\nZHk+HCtfHVKFinErUrczc8Xdlrzm2LFc/5vXihKnuJjf8j8NRY25bq1GdH2LSKkVPM2NmQ0nuiX8\ndqJpZDa6+94Stq0aaJqbGOX4y60YU5SUc5qTofDX7M2zL2F+Mnc07JLfHcnoCZOKEqfsmKePYi6G\nfOewsrGJq++8t2j1lFoxrpdqnsbnUA2F36NyU0ziKS7xijnNTVnnQRyClCDG0C9mrqEQk0rMsVfs\nuNTKPIFD4XqpBMUll2IST3GJV7Z5EM3sp0RzFebl7h8qRkNEpLSG6uoi6WrhHEREhoL+Bqnclfa6\nAVgNXFG65ogMjCYLLtyklhZm3baGtanbks1NzFo6+HiV8zMo1TmIiEimAd1iNrPX3X1sCdtTbXSL\nOUa1dO3njGhN9SZVYERrtcSkWApN+vr7DGotLsWiuMRTXHIpJvEUl3jFvMVc6ChmkaqjEa35tbe1\nsWLhAm6efQkrFi4o2So0+gxERGpTwWsxixyqUt2CLMfavkPxFnZOr15HByvnXV5wz2p80reftatX\n5QwEKff6yiIiUh79DVI5M3t7M/sz0rov3f0JRPIYbLLSl8YxTfR0dOSMaG1sLs60Kv21PT15PLx5\nHH85+4oBnVOpks+BJHhxBpL0lfozEBGRyujvFvPdWV+7gXvS3t+Vf1eRwd2C7O82aaknC+6r7dm3\nYS/Z9qu8t2HznVuht3EHarC9eo1jmg7ENKVn334aRx9M+lKfTee29qJNtC0iItWjzx5Ed39HuRoi\ntelQk5VCeh5LPaK1r7YPtpdusPv3ZbC9ev1NJZPx2Rw5jC3j38bnN+3k+BMnM/LoCRpVLCJSA/QM\nopTUoSYr+RKoW7/+NUa+5S0Zt2WLPUFy6tbv85s30/OO0bFtH2wvXSmf3RvsXIH9Jd7Zn80JiSO5\nfcrRrG2eMKQmqxYRkfw0illK6lBvA+dLoHb8x8aS3JZNSb/1e/3Et7J88/bYthdyG7Yvg92/LwcS\nvOYprGxsYm3zlAE/8zmppYWrli3n6jvv5aplyzP21cAUEZHapwRRSupQk5V8CVTL8NJOqZLeOzbx\nyMOZ9Y5mVv9mJ1e+tCej7YN9/rHUz0/2leANVimTWxERqQ5ai7lvmig7RjkmKI2bgPnLW3bxxWOb\nmHjk4Rnbrmxs4uo77y1KvTfPvoT5ydyesLg6DoxC7tzN4X8wiFHMnbtpHD00ptCBgU1Qrsls4yku\n8RSXXIpJPMUlXtnWYhaplLjn4EYdOYmxv2vP2G6wU6pkTzXz2+GH0/O7/QU9M5nqpYND+8cqff+h\nRMvdiYjUvrL1IJrZRGA9MA7oBb7p7qvMbAzwIHAM8DJg7t4V9lkFTAPeAGa6+7OhfAZwHZAEbnT3\n9aH8VOA+4AjgEXe/MpTnraMf6kGMUam/3Iq9tF7c8b7+2l5+t7+XxeMOH1Ad+ms2nuIST3GJp7jk\nUkziKS7xhupSe/uA+e5+MvCnwBwzexewCHjc3U8EngCuATCzacBx7n4CcBmwJpSPAa4H3gecDiw2\ns1GhjjuAS919MjDZzM4J5bF1yNBSjMEX6eJGSn/pqMMY9c4TilaHiIjIUFS2BNHdd6Z6AN39t8Am\nYCIwHVgXNlsX3hO+rw/bbwRGmdk44Bxgg7t3uXsnsAE418yOBhLu/lTYfz1wftqx0utIlcsQknE7\nuAjP7OUbjXvE3t9HI5VHR9PZpCbGFhERqRcVGcVsZscCfwL8HBjn7rsgSiKJbkEDTADSHzjbGsqy\ny7ellW+N2Z6YOpqLeDpSBqVYeSTfaNzfH3ZEyVY5ERERGQrKniCa2VuB7wHzQk9i9kOQ+R6KLMo9\n9X7qkCo1mCX78sk31cy+3mTR6xIRERlKyjqK2cyGEyWH97v7Q6F4l5mNc/dd4TZxRyjfBkxK231i\nKNsGTM0qf7KP7QF25qkju31T04/t7iQSiYGeZs0bMWJE2ePS0N0Zezu4obvrkNty0skn84W77ufe\nW25m3+u7GT6uiS8sv5r7vrxwwHVVIiZDgeIST3GJp7jkUkziKS75mdmStLet7t56KMcp9zQ39wDP\nufttaWUPAzOBZeH7Q2nlc4AHzewMoDMkeI8BN4aBKY3A2cAid+80sy4zOw14CrgYWBVTx4y0OjKE\nILamFS3WKKlclRg9lkyMpqdjR870M8mxowbVlrFNTcz9yk2Drksj6uIpLvEUl3iKSy7FJJ7iEi+R\nSODuS4pxrLLdYjazDwB/A5xpZr80s/8ws3OJkrazzewF4EzgJgB3fwR4ycxeBO4Ergjle4AbgKeB\njcDSMFgFooTybmAzsMXdHw3l6XWclaqjlrW3tbFi4QJunn0JKxYuGPLPz5V65ZFK1SUiIlKNtJJK\n34bkPIjFni8wWyXnQSzXyiMDrUt/zcZTXOIpLvEUl1yKSTzFJV4x50FUgti3IZkgrli4gNkdm3Ju\nka5tnjKolTtSSVNDdyfJxOghszRcOegfq3iKSzzFJZ7ikksxiae4xBuqE2VLmeSb36+3M3eN4UKl\nTzMzb28athf6AAAgAElEQVSHpn4RERGpYUoQa1C++f0aRx/6msWlmGZGREREqpMSxBpUikEWpeiV\nFBERkeqkBLEGFXvNYihNr6SIiIhUp3LPgyhlMqmlZVADUrLZnLmsnHc580fvzxwZvVRTv4iIiNQa\nJYhSkAO9kqtX0dDdRXLsKGYt1ShmERGRWqQEUQqW6pXU9AIiIiK1Tc8gioiIiEgGJYgiIiIikkEJ\nooiIiIhkUIIoIiIiIhmUIIqIiIhIBiWIIiIiIpJBCaKIiIiIZCjbPIhmdjfwF8Aud/+jUDYGeBA4\nBngZMHfvCj9bBUwD3gBmuvuzoXwGcB2QBG509/Wh/FTgPuAI4BF3v7K/OkREREQkVzl7EO8Fzskq\nWwQ87u4nAk8A1wCY2TTgOHc/AbgMWBPKxwDXA+8DTgcWm9mocKw7gEvdfTIw2czO6asOEREREYlX\ntgTR3X8G7Mkqng6sC6/Xhfep8vVhv43AKDMbR5RgbnD3LnfvBDYA55rZ0UDC3Z8K+68Hzs9TR6pc\nRERERGJU+hnEZnffBeDuO4FxoXwC0J623dZQll2+La18a8z2AOOy6mgu8jmIiIiI1JRqW4s5mae8\noQx1YGZTgamp9+7O+PHji1h17UgkEpVuQtVRTOIpLvEUl3iKSy7FJJ7iEs/MlqS9bXX31kM5TqV7\nEHeFW8eE28QdoXwbMCltu4mhbBvQkqc8bnuAnXnqyOHure6+JPVlZkuJklN9pX0pLoqJ4qK4KC6K\nieJSfV9mtjQ9jznU5BDKnyCmTiLlYWBmeD0TeCit/GIAMzsD6Ay3iR8DzjazUWHAytnAY+HWcZeZ\nnWZmDWHfh2LqmJFWLiIiIiIxypYgmtm3gX8jGmHcZmaXADcRJXwvAGeG97j7I8BLZvYicCdwRSjf\nA9wAPA1sBJaGwSoAc4C7gc3AFnd/NJQvS6vjrFQdIiIiIhKvbM8guvun8vzoI3m2/3ye8vuI5jvM\nLn8GeHdM+ev56ihA6yHuV+taK92AKtRa6QZUqdZKN6BKtVa6AVWqtdINqEKtlW5AlWqtdAOqVGux\nDtSQTOYdsyEiIiIidajSg1REREREpMooQRQRERGRDEoQRURERCRDtU2UXVZm9jLQBfQCe939tDB9\nzoPAMcDLgLl7V9h+FTANeAOY6e7PVqLdxWZmdwN/Aexy9z8KZQOOg5nNAK4jmoz8RndfX+ZTKao8\ncVkMfJaD82lemxoxb2bXALOAfcA8d98Qys8FbiX6g+xud19W1hMpIjObSLSU5Tii35tvuvuqer9e\nYuKy1t3/TteLHQ78CzCC6P+b77n7UjM7FngAGAs8A1zk7vvMbARRHN8DvAZc4O5t4Vix8Rpq+ojJ\nvcCHif5PShL9rvxn2Kfmf4dSzKyRaKaSre5+Xj1fK+lCXJ4B2kNc7gM+RAmvl3rvQewFprr7Ke5+\nWihbBDzu7icCTwDXAJjZNOA4dz8BuAxYU4kGl8i9ROtcpxtQHEKCcD3wPuB0YLGZjSpP80smLi4A\nK9391PCV+s9+CmDAFKJfzG+YWUP4pb49HOdk4EIze1d5ml8S+4D57n4y8KfAnHA+9X69ZMfl82mf\nc91eL+7+JvBn7n4K8CfANDM7nWj6sRXuPhnoBC4Nu1wKvB6ul1uBrwOY2UnExKusJ1MkfcQEYEH4\n/+jUtP/s6+V3KGUe8Fza+7q9VrLMA36d9j4JXFXK66XeE8QGcmMwHVgXXq8L71Pl6wHcfSMwKrVC\ny1Dn7j8D9mQVDzQO5wAb3L0rzE25ATi31G0vpTxxgczJ3lOmAw+4+z53fxnYApwWvra4+yvuvpfo\nL+HpMfsPCe6+M/XXqLv/FthEtHJRXV8veeKSWg++bq8XAHfvCS8PJ+oxSwJ/Bnw/lK8Dzg+v06+j\n7xHNjwtwHvHxGpJiYtIb3ue7Vmr+dwgO9MR/DLgrrfhM6vhagbxxgfgcrmjXS70niEngMTN7ysw+\nE8rGhVVbCCu0pJLACUB72r7bOPgfQC1qLjAOW0NZPcVnjpk9a2Z3pf0Flu/888VryAu3fv4E+DmF\n/97U/PWSFpeNoaiurxczazSzXwI7gZ8AvyFaHSuVFKWf44Hzd/f9RCtkjaXGrpfsmLj7U+FHXwnX\nygozOyyU1dPv0C3A1UT/N2NmTcCeer5Wgoy4pCnp9VLvCeIH3P29RJn5HDP7ILkfgCaKjOSLQy10\n3Q/EN4i67/+E6B/3FRVuT0WY2VuJ/mqfF3rMCv29qenrJSYudX+9uHtvuJ06kagnZyC3zGvyesmO\nSbgtusjdpxDdAmwCFubZvSZjYmZ/TvS897NknmOh51tvcSn59VLXCaK77wjfXwV+SPSP167UrWMz\nO5qDD5dvAyal7T4xlNWqgcZhG9ASU15T3P1Vd08lP9/k4K2LuomLmQ0nSoLud/fU2uZ1f73ExUXX\ny0Hu/j9Eqzz8KTA6PG8Jmed4IC5mNgx4m0erYdXkv79pMTk3rQd+L9Hzz/V2rXwAOM/M/hv4DtEt\n49uIbpHW87WSExczW1+O66VuE0QzGxn+2sfM3gJ8FPgV8DAwM2w2E0j9B/gwcHHY/gyiWyS7ytjk\nUmsg8y+NgcbhMaI1r0eFh2HPDmVDXUZcQvKT8lfAf4XXDwOfNLMRZvYO4HjgF8BTwPFmdkwYdffJ\nsO1Qdg/wnLvfllam6yUmLvV+vZjZUanb6mZ2JNHn/BzwJPCJsNkMMq+XGeH1J4gGPKXK4+I15OSJ\nyfOpayUMqDifzGul5n+H3P1ad29x93cSXfdPuPunqeNrBfLG5eJyXC91u9ReuHB+QHQrbDjwLXe/\nKTzD4EQZ+CtE03V0hn1uJ3qo8w3gEnf/j4o0vsjM7NvAVKJu6l3AYqIe1e8ygDiY2UwODqH/Sn9D\n6Ktdnrj8GdHzZb1E07lclvpDwaKpFS4F9pI7bcltHJy25KaynkgRmdkHiKbo+BXR55wEriX6B3hA\nvze1dL30EZdPUd/Xy7uJBhI0hq8H3f3G8O/vA8AY4JfAp919r0VTwNwPnALsBj4ZBhrkjddQ00dM\n/gk4iugP0meBy1ODWerhdyidmX2YaITuefV8rWTLikvJr5e6TRBFREREJF7d3mIWERERkXhKEEVE\nREQkgxJEEREREcmgBFFEREREMihBFBEREZEMShBFREREJIMSRBGpe2b2X2b2oRIc99tmdl7a+6+Y\n2atmtr3YddUKM+s1s3eG18vN7PJKt0mkHg2vdANEZGgzs5eAS939ibSyGcBn3P2DlWvZQWEh+5sA\nA0YBrwE/dPf5AO7+hyWo893AH7n7p8L7ScB8YJK77x7ksasqvkWWPjnvcuAXZnaXu++rVINE6pF6\nEEWkVKppFv5rgVOB97r724hWyCn1SkiXAd9Ke38M8Npgk8OggeqKb6y0NXQH4sDSlu6+E9gEnJd/\ncxEpBfUgikjJmdm7gDuIlp3bClzr7v8YfvYkcL+73xPeZ/SOmdktREvWHUG0XN2F7v5cWKv4q0Tr\nsI4gWjrzi+7+ZkwT3gv8IG2B+zbg79Pad6AX1Mz2AMPCjxqBkcCx7t5mZn8B3AAcC/wa+Jy7/yrP\naU8DLgrHPwv4R2CEmf0P8D13nxXWSl0BnBTO7Up3/+ewz9uAlcDHgP3AfcD1wIkhlsPNrBvY6+5j\nY2I+E/gy8AfAq8D/dvfvhKTt60Tr2HaFOm4Hhrt7b3aPsJktBo5399S5OPDB8Hn8X+AKd38u/Oxe\n4HdEyfCHgOlm9jP6+JzM7Grgi0TLEX6Z3MT3n4E/B/4hT5xFpATUgygipXCgF8jMhhMlR48SJStz\ngW+Z2Ql97J8M+34U+F9ECcooolvEqR64ZcDxwB+F7xOIEqg4PweuMrPPmVmft5PdfYy7vy30NN5G\nlKBsM7NTgLuBzwJjgTuBh8Pt6wxmNhJ4B/BCOOY/ESWM28OxZ5nZeOBHwN+6+xhgAfB9M2sKh1kH\n/D/gnUTrzZ5NlDg/D1wO/Lu7J/IkhyND288J5/F+ovVaAWYTJZ1/TJQ4/zX990am//wR4DigmagX\n9ltZ214I3ODuCeBf6eNzCutOzwfOAk4APhJT96bQVhEpI/Ugikgx/NDM0p8ROxx4Jrz+U+At7r4s\nvH/SzH5ElEj8bT/H3QskgJPM7Bfu/kLazz4LvNvduwDM7CaiZOW6mON8FXidqCdypZntJurFzLtY\nvZldENr4Xnffb2afBda4+9Nhk/vN7DrgDOCnWbuPJkqquvs4t08DP3b3xyBKIs3saeBjZvYYUUI5\nKvS0/d7MbiVK7r7ZxzHT7QfebWZbQ8/prlD+CeBWd98ezvNrwIcLPCbufl/qtZn9LXClmSXcPXWu\nD7n7z8O2b4a45fucPgHc6+6bws+WAJ/MqrKbKJ4iUkZKEEWkGKa7+5OpN+E28aXh7duB9qztXyHq\nSeqTuz9pZrcDq4EWM/sHop62I4lu/T5jZqnNG0nrucw6TpLotuwdZnZ4aNs9ZrYxK+lMtf8U4O+A\nj7j766H4GOBiM/tCeN8AHAaMj6myM3xPcLDHM9sxUVX28bTjDQeeCD87DNgRzq8hfLXlOVb2+faE\nBPfqcJ4/A65y982hvemfxyuFHBMOPFP4VaJex6OIkuBkeJ1KENvTtv8D+v6cxgOphDvVluzPMMHB\neIpImShBFJFiiE3Mgu3ApKyyFsLtV+ANoiQi5ej0Dd39duB2MzsK+C5R0rME6AFOdvcdA2lo6JH7\nhpktJXr2LyNBNLNmoufkPufu/5n2o3bgRnf/WgF19JjZb4DJwL/n2awdWO/ul2X/wMyOBn4PNIXk\nNlu/A1Tc/SfAT0JCfCNRz+OHgR1kfh7HZO3a1+fxN8DHgTPDM5mjgD1kfv7pbXuNvj+nuLZkn9sU\nomcdRaSMlCCKSKltBHrM7EtEAyL+F/AXREkeRM/G/ZWZ3U3Uq3gpsBPAzN5L1OP0H0SDH34P9Lp7\n0sy+CdxqZp9391fNbAJRIrIhuwFmNi/Us5HotvWngbeSNZLZzIYB3yMaNPP9rMN8E/gHM/snd/+F\nmb2FKOH6Z3d/I+a8Hwk/z5cg/j3RFC7fBx4nGsBxOrDF3beb2QbgFjP7MvBbomcaJ7r7vxDdLp5o\nZoe5+96Y820muvX9eIjZb4kGgQA4MNfMfkyUvC3M2v1Z4JNm9ijRoKK/Bv5P+NlbgTeBPeH8v0Yf\nyWoBn5MT9XDeT9R7GPcM6Ycp/La6iBSJBqmIyGD12ZsVEpiPEw2MeI1oxOxF7r4lbHILUdK2E7iX\ntNHFwNuIkoPXgZfC/jeHny0EXgR+bmadwAaiHrs4PUSjhXcQjej9HPBX7p66vZo6h4nAB4ieq/sf\nM+sO3ye6+zNEzz3ebmavA5uJRgLn802iRDRfXLYC04mm4HmVKEFawMF/ly8mShqfC+f/XQ725j1B\nNIp6p5l1xBy+kWjwxzaimH0onHOqXY8R9co9DWQnwl8mGkzyOrCYzEEo64luc28D/gv4t3znlybv\n5+TujwK3hvPZDPxT+o5m9naiHsQfFlCPiBRRQzJZ9VNpiYgMSWb294C7+8OVbks+ZnYM8N/AYe7e\n29/25WRmy4EX3X1NpdsiUm+UIIqI1LGQIL5EmAex0u0RkeqgW8wiIqKeAhHJoB5EEREREcmgHkQR\nERERyaAEUUREREQyKEEUERERkQxKEEVEREQkgxJEEREREcmgBFFEREREMihBFBEREZEMShBFRERE\nJIMSRBERERHJoARRRERERDIoQRQRERGRDEoQRURERCSDEkQRERERyTC8XBWZ2WTgQSAJNADvBL4M\n3B/KjwFeBszdu8I+q4BpwBvATHd/NpTPAK4Lx7rR3deH8lOB+4AjgEfc/cpQPiZfHSIiIiKSqWw9\niO6+2d1PcfdTgfcQJX0/ABYBj7v7icATwDUAZjYNOM7dTwAuA9aE8jHA9cD7gNOBxWY2KlRzB3Cp\nu08GJpvZOaE8to7+mNnUwZ11bVJccikm8RSXeIpLPMUll2IST3GJV8y4VOoW80eA37h7OzAdWBfK\n14X3hO/rAdx9IzDKzMYB5wAb3L3L3TuBDcC5ZnY0kHD3p8L+64Hz046VXkeqvD9TD+Hc6sHUSjeg\nCk2tdAOq1NRKN6BKTa10A6rU1Eo3oApNrXQDqtTUSjegSk0t1oEqlSBeAHw7vB7n7rsA3H0nMC6U\nTwDa0/bZGsqyy7ellW+N2T6ujuainYmIiIhIjSl7gmhmhwHnAd8NRcmsTbLfpzQUsRn56hARERGp\ne2UbpJJmGvCMu78W3u8ys3HuvivcJu4I5duASWn7TQxl28jsQp0IPNnH9gA789SRIdy7P3Bsd18M\nLB7oCdY6dwfFJYNiEk9xiae4xFNccikm8RSXeO6OmaUXtbp766EcqxIJ4oXAd9LePwzMBJaF7w+l\nlc8BHjSzM4DOkOA9BtwYBqY0AmcDi9y908y6zOw04CngYmBVTB0z0urIEILYmla0ePv27YM41dqU\nSCTo7u6udDOqimIST3GJp7jEU1xyKSbxFJeDVixcwOyOTYwcPoxJP34ad19SjOOW9RazmY0kGqDy\nD2nFy4CzzewF4EzgJgB3fwR4ycxeBO4Ergjle4AbgKeBjcDSMFgFooTybmAzsMXdH42p46xUHSIi\nIiJDmc2Zy8rOJD379hf1uA3JpB7H60NSPYi59JdbLsUknuIST3GJp7jkUkziKS6Z2tva8NWrWHH/\nt6FIYza0koqIiIjIEDappYWrli0v6jGVIIqIiIhIBiWIIiIiIpJBCaKIiIiIZFCCKCIiIiIZlCCK\niIiISAYliCIiIiKSQQmiiIiIiGRQgigiIiIiGZQgioiIiEgGJYgiIiIikkEJooiIiIhkUIIoIiIi\nIhmUIIqIiIhIBiWIIiIiIpJheDkrM7NRwF3AHwK9wCxgM/AgcAzwMmDu3hW2XwVMA94AZrr7s6F8\nBnAdkARudPf1ofxU4D7gCOARd78ylI/JV4eIiIiIZCp3D+JtRInbFOCPgeeBRcDj7n4i8ARwDYCZ\nTQOOc/cTgMuANaF8DHA98D7gdGBxSDwB7gAudffJwGQzOyeUx9YhIiIiIrnKliCa2duAD7r7vQDu\nvi/04k0H1oXN1oX3hO/rw7YbgVFmNg44B9jg7l3u3glsAM41s6OBhLs/FfZfD5yfdqz0OlLlIiIi\nVae9rY0VCxew9KILWLFwAe1tbZVuktSZct5ifgfwmpndS9R7+DRwJTDO3XcBuPvOkAQCTADa0/bf\nGsqyy7ellW+N2Z6YOpqLeWIiIiLF0t7Wxj3zLmf+6AZGDh9GT8cOVs67nFm3rWFSS0ulmyd1opy3\nmIcDpwKr3f1UoucKFxE9R5gu+31KQxHbkq8OERGRivLVqw4khwAjhw9j/ugGfPWqCrdM6kk5exC3\nAu3u/nR4/32iBHGXmY1z913hNnFH+Pk2YFLa/hND2TZgalb5k31sD7AzTx0ZzGxq+rHdnUQiMcDT\nrH0jRoxQXLIoJvEUl3iKSzzFJdLQ3XkgOUwZOXwYDd1dik+gayU/M1uS9rbV3VsP5ThlSxBDctZu\nZpPdfTNwFvDr8DUTWBa+PxR2eRiYAzxoZmcAneEYjwE3hoEpjcDZwCJ37zSzLjM7DXgKuBhYlXas\nVB0z0urIbmMr0JpWtLi7u3vwJ19jEokEiksmxSSe4pKpva0NX72Khu5OkonR2Jy5umWYRtdLJJkY\nTU/HjowksWfffpJjRyk+ga6VeIlEAndfUoxjlXsU81zgW2b2LNFziF8lStrONrMXgDOBmwDc/RHg\nJTN7EbgTuCKU7wFuIHqGcSOwNAxWgSihvJto6pwt7v5oKE+v46xUHSIi5ZJ6rmx2xybm7e1gdscm\n7pl3uQYfSA6bM5eVnUl69u0HouRwZWcSmzO3wi2TetKQTOpxvD4kt2/fXuk2VB395ZZLMYmnuBy0\nYuECZndsyukVWts8hauWLa9gy6qHrpeDDvY2d5FMjFJvcxZdK/HGjx8PRRqzUdaJskVE6lXPzm2M\nHJH7XFnPzm159pB6NqmlhauWLVciJBWjpfZERMrglR07D9wyTOnZt59XduysUItERPJTgigiUgZv\nb25m5ZYdmc+VbdnB25s1LauIVB/dYhYRKYPREybx5/te586XdtGbhMYGuGBiEz+eMKn/nUVEykwJ\noohIGdicudHqGO8YFz17GEamztLIVImhKZGk0jSKuW8axRxDD03nUkziKS6ZNDK1b7peIjlL7aX+\nmNBSewfoWolXzFHMShD7pgQxhn4xcykm8RSXeIpLPMUloimR+qdrJV4xE0QNUhEREakivXt2xy61\n19u5u0Itkno0oATRzCaFZe9ERESkBH4/4ojYKZF+f9gRFWqR1KOCEkQzazGzfwWeBx4PZX9tZneV\nsnEiIiL1Zl9vkuWbt2dMibR883b29eqRMCmfQkcx3wn8GPggkOrj/gmwohSNEhERqVdv3fcm9o7m\njCmRZr2jGd//ZqWbJnWk0FvMpwE3uXsvkARw9y5gVKkaJiIiUo8axzQx9rDhfPGE8Vw1eTxfPGE8\nYw8bTuPopko3TepIoQniLuD49AIzOwloK3qLRERE6pjNmcvKzmTmqjudSUxzZkoZFXqLeTnwIzP7\nGjDczC4ErgVuKlnLRERE6tCklhZm3baGtak5M8eOYtZSzZkp5VXwPIhmNh24DDiGqOfwTnf/4UAq\nM7OXgS6gF9jr7qeZ2RjgwXDclwELt68xs1XANOANYKa7PxvKZwDXEd3uvtHd14fyU4H7gCOAR9z9\nylCet45+aB7EGJp/KpdiEk9xiae4xFNccikm8RSXeBWZB9HdH3L3j7n7ye4+baDJYdALTHX3U9z9\ntFC2CHjc3U8EngCuATCzacBx7n4CUWK6JpSPAa4H3gecDiw2s9SzkHcAl7r7ZGCymZ3TVx0iIiIi\nkqvQaW5Wmdn7s8reb2a3DrC+hpg6pwPrwut14X2qfD2Au28ERpnZOOAcYIO7d7l7J7ABONfMjgYS\n7v5U2H89cH6eOlLlIiIiVae9rY0VCxew9KILWLFwAe1teuRfyqvQHsQLgaezyp4BPjXA+pLAY2b2\nlJl9JpSNc/ddAO6+ExgXyicA7Wn7bg1l2eXb0sq3xmwfV0fzANstIiJSFqm1mGd3bGLe3g5md2zi\nnnmXK0mUsio0QUzGbDtsAPunfMDd3wt8DJhjZh8Mx86uK05R7qn3U4eIiEhF+epVzB/dcGC5vZHD\nhzF/dAO+elWFWyb1pNBRzD8FvmJmX3L3XjNrBJaE8oK5+47w/VUz+yHR/Iq7zGycu+8Kt4k7wubb\ngElpu08MZduAqVnlT/axPcDOPHVkMLOp6cd2dxKJxEBOsS6MGDFCccmimMRTXOIpLvEUl0hDd2fs\nWswN3V2KT6BrJT8zW5L2ttXdWw/lOIUmiPOAHwE7zOwVoAXYAXy80IrMbCTQ6O6/NbO3AB8FlgIP\nAzOBZeH7Q2GXh4E5wINh/efOkOA9BtwYBqY0AmcDi9y908y6zOw04CngYmBV2rFSdcxIqyNDCGJr\nWtFijZLKpdFjuRSTeIpLPMUlnuISSSZG09OxIyNJ7Nm3n+TYUYpPoGslXiKRwN2XFONYBd0idvet\nwKlEgztuDt/fE8oLNQ74mZn9Evg58I/uvoEoaTvbzF4AziTMrejujwAvmdmLREv9XRHK9wA3ED0T\nuRFYGgarQJRQ3g1sBra4+6OhPL2Os9D8jSIiUqU0UbZUg4LnQaxTmgcxhv5yy6WYxFNcMrW3teGr\nV9HQ3UkyMRqbo8mP0+l6OejgtdJFMjFK10oWXSvxijkPYt4E0cw2ufuU8LqdPAM73L2Wr1gliDH0\ni5lLMYmnuBzU3tbG2jmf4UtHHcbI4cPo2befr7+2l9mr79J//IGul1yKSTzFJV4xE8S+nkH8bNrr\nTxejMhGRenXf1792IDmEaNDBl46CW7/+Nb58+x0Vbp2ISKa8CaK7/wzAzIYBs4DZ7v5muRomIlJL\ndv76/zLy+KMyykYOH8bOX/9nhVokIpJfv4NU3H0/0Yjj3tI3R0SkNr3e/dsDgw5SevbtZ7duk4lI\nFSp0outbgKVmdlgpGyMiUqsaDz+S5Zu3Z4xMXb55O8MOP7LCLZNqpKX2pNIKnQfxC8DRwHwze5W0\nASs1PkhFRKQojv/jU+h+5t9Y/ZudNDY00JtM0r1vP8e/55RKN02qTGqpvdRqKj0dO1g573Jm3bZG\nA5qkbArtQfw08BHgnPD6orQvERHpx2cWXUtjU+Yy8I1NzXxm0bUVapFUKy21J9Wg3x7EsGJJN9HE\n03pYRkTkEExqaWHemnsy5rabp7ntJEbvnt2xS+31du6uUIukHvWZIJrZnwMOHAl0m9n57v5kWVom\nIlJjJrW0cNWy5ZrDTfrUOKaJno6OnKX2GpubKtgqqTf93WK+AVgIvBW4Hrix5C0SERGpY1pqT6pB\nfwniO939dnfvAVYDx5ehTSIiInVrUksLs25bw9rmKdx22DjWNk/RABUpu/6eQTyQQLr7PjMrdNSz\niIiIHCI9jiCV1l/CN9LM/iXtfSLrPe7+oeI3S0REREQqpb8E8dKs93eXqiEiIiIiUh36TBDdfV2x\nKzSzRuBpYKu7n2dmxwIPAGOBZ4CLwu3sEcB64D3Aa8AF7t4WjnEN0frQ+4B57r4hlJ8L3Ep0a/xu\nd18WymPrKPa5iYiIiNSCQifKLqZ5wHNp75cBK9x9MtDJwV7LS4HX3f0EoqTv6wBmdhJgwBRgGvAN\nM2sIieftRJN5nwxcaGbv6qcOEREREclS1gTRzCYCHwPuSis+E/h+eL0OOD+8nh7eA3wvbAdwHvCA\nu+9z95eBLcBp4WuLu7/i7nuJegyn56njL4t4WiIiBdH6uiIyVJS7B/EW4GrCWs5m1gTscffe8POt\nwITwegLQDuDu+4EuMxubXh5sC2XZ5VuBCXnqGF/k8xIR6VNqfd3ZHZv4/+3de5SU1Znv8W81yE3a\n5iexeKAAABx4SURBVDaAzU28ADpGo04IOc5J0BwnmpPRzJz4aOJEHcwg2FkgYIwYFTDG20EEJkQl\nSgRPEnxkxqMTnUhc2ktNRkSjOTMBBCOmgQZaLt2KjUp31/nj3d1dt6aroakqun6ftXp1vbveet+n\n9tqr6qn9vnvv6QdqmFyznmXTpyhJFJGClLMEMazKstPd3wJiCU/F2nhJqmz36+zXiogcNq2vKyJH\nk6zmNTSznkQrqXwTGOjuZWb2N8AYd/9xluc6F7jYzL5KtHRfKbAIKDOzktDDN5yoR5DwfwRQbWbd\ngOPcfY+ZNZc3a35NDBiZWu7uu82sXxvnSH2fE4GJzdvuTmlpaZZvr3j06NFD9ZJCdZKZ6qVV7MPa\njOvrxj6sUx0Fai/pVCeZqV7aZmZzEzYr3b3yUI6T7cTX9xNdwr0C+PdQ9sdQnlWC6O43AzcDmNmX\ngFnu/g9m9jhwKfA4cBXwVHjJ02F7TXj+hYTyn5tZc0wnA68R9YaebGajgO3A5eGP8NpM50iNsRKo\nTCiaowlK02ni1nSqk8xUL63ipf2or9metr5ufECZ6ihQe0mnOslM9ZJZaWkp7j63M46V7SXmvwO+\n5e7/ATQBuHvzvX+H6yZgppltJJqGpnmuxUeAQWa2Cbg+7Ie7rwOcaCT0s8B17h4P9yl+F1hNlLyu\ndPcN7ZxDRCQntL6uiBxNYvF4vN2dzOzPwBnuXmdme9x9gJn9BfCqu590xKPMn3h1dXW+Yyg4+uWW\nTnWSmeol2ZaqKnzJYmIf1hEvLcMqpml93QRqL+lUJ5mpXjIrLy+HThp3ke0l5ieA5WY2A8DMjiea\nm3BlZwQhcrRq/cKvJV7aT1/4kqX2f5iLiORTtpeYbwY2A/8J9COae7AamHeE4hIpeJq2RDpC7UVE\njiZZXWJOFC4t73L3YvgJrEvMGahrP3Lf929gcs36tEEHSwefyqx75ucxssKhttJK7aV9ai/pVCeZ\nqV4y68xLzFn1IJrZaWY2JGzuB+aa2Rwz69MZQYgcjZr27s44bUlT7e48RSSFTO1FRI4m2V5i/iXR\npWWA+cAXgQnAQ0ciKJGjQUn/gS0jUpvVNzRS0m9gniKSQqb2IiJHk2wHqZzg7m+bWQz4e+A0op7E\nzUcsMpECZxXTuLfiO9w4KOoJqm9o5N5dB5g8T9OWSDqrmMa8KZMYtG8vJbEYTfE4u/r2Z7rai4gU\noGwTxI/NrJQoMaxy911m1h3odeRCEyl8+xubWPKnHS1f+Pv79s93SFLAencroeKkoUk/KEQy0QwJ\nkm/ZXmL+BdFqJMuBR0PZ2agHUYqYL1nMnCE9+d7YYcwaU873xg5jzpCeWltXMvIli7lx0DFJazHf\nOOgYtRdJoxHvUgiyShDdfQbwA2BqwtrLTcCMIxWYSKHToAPpCLUXyZYvWczMfrGkHxMz+8X0Y0Jy\nKttLzLj76pTt1zs/HJGjR0n/gdTX1KRNW1IyWIMOJF1J/4G88va7rKjaRZ9uJdQ3NnHlyEGUjB2T\n79CkwOjHhBSCrBJEM3uZNqb+d/cvdmpEIkcJq5jGgulTmNmvseWesgW1cSZp0IFkMGjsaTzxwnMs\nPPOElvYy+7+q+NzFp+U7NCkw+vEphSDbexAfBh5J+HsGGAo8f4TiEil4I0aOZNKiB1k6+FQWHTOE\npYNPZdKiB3UjuWT0q58s4q7TRyZdNrzr9JH86ieL8hyZFBqrmMaC2njLtEjNPz6tQj8+JXey6kF0\n9+WpZWb2L8DPgNs7OyiRo8WIkSOZdc98zeov7eoXi2e8bNgvVgyLUklHtPz4XLKY2Id1xAeUMWme\nRjFLbmV9D2IG24AzOisQEZGurDYeo76hMe2yYW28U1bFki5me3U16998gz6ffkx9j15sr65Wgig5\nle09iJNSivoQTZj9aqdHJCLSBX3tuunMfuD+lsvMzfcgfu06TQYhyV579VV+PmMq948rp0/3Uuob\nGrllxlS4/wHGT5iQ7/CkSGTbg/jtlO2PgN8B92d7IjPrCbwE9AjnXeXu88zsBGAlMAB4A/i2uzeY\nWQ9gBXAOsAu4zN2rwrFmA5OABmB68whrM7sQWEh0b+Uj7n5PKM94jmxjFxE5XLveXselwwZw/R/e\nSxrF/Prb6/IdmhSYpbfNDslh6/2qd4wrZ8Ztsxm/+sU8RyfFItt7EM873BO5+ydmdp6715tZN+C3\nZvZrYCZwn7s/YWYPANcQrfF8DbDH3U8xs8uAe4HLzew0wIBTgeHA82Z2ChADfgx8GagG1prZU+6+\nAbinjXOIHBatdiDZatq7mxP69uLU43rTFIeSGJzQtxevaeoSSdH7k/3sOdCDhzbvbGkrlw4fSO9P\n9+c7NCkiWd+DGJKwbwLDiO4//KW7b+rIydy9PjzsGc4dB84Lx4VopZY5RMnbJeExwCrgn8Pji4GV\noQfwPTPbBIwnShA3ufufQ7wrwzE2AOennGMuShDlMDWvdtA8oW19zXYWTJ+ikcyS0b7uPVm0aTuD\nex5DSSxGQ1OcRZu2U3rO6HyHJgXm/aYYyzbXcMOY8pbbEeZvrOb9Eq1uK7mT1TQ3Zva3RJdmxwF7\ngLHA62Z2cUdOZmYlZvYmsAP4DfAnoNbdm8IuW4kSUML/LQDu3gjUmdmAxPJgWyhLLd8KDDOzgcDe\nlHOUdyRukUy02oF0xP799ZR270bFSUOZNaacipOGUtq9G/v317f/YikqJdCSHEL02XLDmPKs56UT\n6QzZ9iDeCVzi7i03P5jZRKJLuk9ne7KQpJ1lZscBTxIlnNk6nKF+Wb02vKeJzdvuTmlp6WGctmvq\n0aOH6gWIfVibcdqS2Id1qp9AbaXVnvfe5f4MX/oz3ntXdRSovUQGdSPjZ8ugbqh+ArWVtpnZ3ITN\nSnevPJTjZJsgDgdeTil7JZR3mLt/YGaVwBeAfmZWEpLH4UQ9goT/I4DqcM/ice6+x8yayxNj20aU\nBI5MLXf33WbW1jlS46oEKhOK5mhuu3Sa8y8SL+1Hfc32tGlL4gPKVD+B2kqrPt1iGb/0e3eLqY4C\ntZdIXax7ximR6mLdVT+B2kpmpaWluPvczjhWtj3WbwGzUspmhvKsmNkgMysLj3sDFwDrgBeBS8Nu\nVwFPhcdPh23C8y8klF9uZj3MbDRwMvAasBY42cxGhRHQlycc64U2ziFyyLTagXTEX4w7vaWtNKtv\naGTwuNPzFJEUqn7HD2X+xuqkz5b5G6vpd/zQPEcmxSTbHsSpwL+Z2XSi+/xGAPXA33bgXMcDy82s\nhCgxfdzdnzWz9cBKM/sh8CbRUn6E/4+FQSi7iRI+3H2dmTlRcnkAuM7d40CjmX0XWE3rNDcbwrFu\nauMcIodMqx1IR1x942zurfgONw6iZeDBvbsOMHne7HyHJgUmXrODSaMHJ41injR6MPN37Mh3aFJE\nYvF4dss8mVl3okvCxxNNI7PG3Q8cwdgKQby6ujrfMRQcde2nU51kpnpJ1jotUh3x0jJNi5RC7SVy\nzcRzWTi6X9ol5us31/JI5W/zGFnhUFvJrLy8HA5vzEaLrKe5CdPKpN6HKCIiWdLa3ZKN4ad9hvl/\nWJM2zc3wMz+f79CkiBw0QTSzl4nmKmyTu3+xUyMSEREpYt+56WYWTZnEkj/toCQWoyke56OygUy/\n6eZ8hyZFpL0exIcTHseAJcB1Ry4cEZGuSyvvSDZGjByJ3XYHS2+bTZ9PP6a+Zy8m33aH2orkVNb3\nIAKY2R53H3AE4yk0ugcxA10ea6Uv/INTW2m1paqKRVMmMWjf3pZeoV19+zP9wWVqM4HaSyRtlaYw\nQ4JWaWqltpJZZ96DqInZRQ5R84f45Jr1TD9Qw+Sa9SybPoUtVVX5Dk0K0MN338m+ndvZuG8/W+o/\nYeO+/ezbuZ2H774z36FJgdEqTVIIlCCKHCJ9iEtH/PGNtfTsVsKiM0ez8LOjWXTmaHp2K+GPb6zN\nd2hSYJr27s44qXpT7e48RSTFqL1BKuen7m9m55HQfenuLyBShPQhLh3RuL+eqacNT5rbbuqJQ5m9\nbmu+Q5MCU9J/IPU1NWnT3JQMHpjHqKTYtDdIJXVC6d3AsoTtOHBip0YkcpTQh7h0xLElMR7fupuZ\npxzfel/Zpu30KemU24WkC/nvf/cNbpkxlTvGtU5zc8uGaq649tZ8hyZF5KAJoruPzlUgIkcbq5jW\nxsoYWmpP0n3Q0NiSHEK4JeGU47li7Tt5jkwKzctPrmLqqEHJvc2jBvHMk6sYP2FCvsOTIpH1RNki\nkm5/Y1PSXGX7+/bPd0hSoAb2PCbjLQkDeh6Tp4ikUDXt3c0ppb2ZUdo7uVy3r0gOKUEUOUS+ZDFz\nhvSkz7BhLWX1DY0sXbKYWffMz2NkUojq4iXUNzSm3ZLwQVxjBSWZbl+RQqBPJpFDpEEq0hEjxo1l\n/sZq6hsaAVqWTxsxbmyeI5NCYxXTWFAbT2orC2rjWIVuX5HcUQ+iyCHSr3zpiOF9+2KjByfdVzZp\n9GD82L75Dk0KzIiRI5m06EGWLllM7MM64gPKmDRPk/BLbilBFDlEVjGNBdOnMLNfY/JqBxqkIhmU\n9B/IgAM1zDilvKWsvqGRkn76QSHpRowcyax75mvFEMmbnCWIZjYcWAEMAZqAn7r7YjPrDzwOjALe\nA8zd68JrFgMXAR8BV7v7W6H8KuAHRNPs/MjdV4Tys4FHgV7As+5+fShv8xwih0q/8qUjNHWJiBxN\ncnkPYgMw093/EvgCUGFm44CbgOfdfSzwAjAbwMwuAk5y91OAa4EHQ3l/4Dbgc8DngTlmVhbO8QBw\njbuPAcaY2VdCecZziByu5l/5cx5byax75is5lDYlTl1y38ZqHtq8k6mjBvHyk6vyHZqISJqcJYju\nvqO5B9Dd9wHrgeHAJcDysNvysE34vyLsvwYoM7MhwFeA1e5e5+61wGrgQjMbCpS6e/O6VSuArycc\nK/EczeUiIjnRtHc3vbsnf+T27l6iQU0iUpDyMorZzE4APgu8Cgxx950QJZFEl6ABhgFbEl62NZSl\nlm9LKN+aYX8ynGNwJ74dEZF2vX+gkWWba7h29BBmjSnn2tFDWLa5hvc/bcx3aCIiaXKeIJpZX2AV\nMD30JMZTdkndbtaZ61G1dQ4RkSNi53ubuWFMedJKKjeMKWfne5vzHJmISLqcjmI2s+5EyeFj7v5U\nKN5pZkPcfWe4TFwTyrcBIxJePjyUbQMmppS/eJD9AXa0cY7U+CYmHtvdKS0t7ejb7PJ69Oihekmh\nOslM9dKqLN6Qcd7MsniD6ihQe0mnOslM9dI2M5ubsFnp7pWHcpxcT3OzDFjn7osSyp4GrgbuCf+f\nSiivAB43swlAbUjwngN+FAamlAAXADe5e62Z1ZnZeGAtcCWwOMM5rko4R5JQiZUJRXM0vUA6TbvQ\naktVFb5kMbEPa4mX9sMqNIo5kdpKq/oevTKupFLfo5fqKFB7Sac6yUz1kllpaSnuPrczjpWzS8xm\ndi5wBXC+mb1pZr83swuJkrYLzOxt4HzgbgB3fxbYbGbvAA8B14XyvcAPgdeBNcC8MFgFooTyEWAj\nsMndfx3KE8/x5eZziByOLVVVLJs+hck165l+oIbJNetZNn0KW6qq8h2aFKDJt9/FLRuSV1K5ZUM1\nk2+/K8+RiYiki8Xjuh3vIOLV1dX5jqHg6Jdb5L7v38DkmvVpPUJLB5+qtZgDtZVkr736Kktvm02f\nTz+mvkcvJt9+F+MnTMh3WAVD7SWd6iQz1Utm5eXl0EljNrSSSjvu+/4NumwoGWktZumo8RMmMH71\ni/pyE5GCl5dpbo4mumwobSnpP7DlcmEzLZ0mIiJdgRLEdvTp3o2Z/WL4ksXt7yxFxSqmsaA2nnRP\n2YLaOFahtZhFROTopkvMWdBlQ8lEazGLiEhXpQQxC/UNjZQM1mVDSde8FrPuKRMRka5El5jbocuG\nIiIiUmyUILZj6eBTmbToQV02FBERkaKhS8zt0Hx2IiIiUmzUgygiIiIiSZQgioiIiEgSJYgiIiIi\nkkQJooiIiIgkUYIoIiIiIkmUIIqIiIhIkpxNc2NmjwBfA3a6+xmhrD/wODAKeA8wd68Lzy0GLgI+\nAq5297dC+VXAD4A48CN3XxHKzwYeBXoBz7r79e2dQ0RERETS5bIH8WfAV1LKbgKed/exwAvAbAAz\nuwg4yd1PAa4FHgzl/YHbgM8BnwfmmFlZONYDwDXuPgYYY2ZfOdg5RERERCSznCWI7v4KsDel+BJg\neXi8PGw3l68Ir1sDlJnZEKIEc7W717l7LbAauNDMhgKl7r42vH4F8PU2ztFcLiIiIiIZ5PsexMHu\nvhPA3XcAQ0L5MGBLwn5bQ1lq+baE8q0Z9gcYknKOwZ38HkRERES6lHwniKnibZTHcnAOERERESH/\nazHvNLMh7r4zXCauCeXbgBEJ+w0PZduAiSnlLx5kf4AdbZwjjZlNTDy+u1NeXn4Ib6vrKy0tzXcI\nBUd1kpnqJTPVS2aql3Sqk8xUL5mZ2dyEzUp3rzyU4+S6BzFGcm/g08DV4fHVwFMJ5VcCmNkEoDZc\nJn4OuMDMysKAlQuA58Kl4zozG29msfDapzKc46qE8jTuXunuc5v/zGxeQsz6C3+qF9WJ6kX1onpR\nnaheCu/PzOYl5jGHmhxCDhNEM/sF8DuiEcZVZvaPwN1ECd/bwPlhG3d/FthsZu8ADwHXhfK9wA+B\n14E1wLwwWAWgAngE2Ahscvdfh/J7Es7x5eZziIiIiEhmObvE7O7fauOp/9HG/t9to/xRovkOU8vf\nAD6ToXxPW+cQERERkXSFNkil0FTmO4ACVZnvAApQZb4DKFCV+Q6gQFXmO4ACVZnvAApQZb4DKFCV\n+Q6gQFV21oFi8bgG9YqIiIhIK/UgioiIiEgSJYgiIiIikiTf8yDmnZk9AnwN2OnuZ7Sxz2LgIuAj\n4Gp3fyuHIeZFe/ViZl8imjLo3VD0r+5+Rw5DzDkzG060jOMQoAn4qbsvzrBfUbWXbOqlSNtLT+Al\noAfRZ+0qd5+Xsk8Poro7B9gFXObuVbmONVeyrJOrgP9N6+pYP3b3ZTkNNE/MrIRolo6t7n5xynNF\n1VYStVMvRdlezOw9oI7oM/eAu4/PsM9hfRepBxF+RrTGc0ZmdhFwkrufAlwLPJirwPLsoPUSvOTu\nZ4e/Lv1lHzQAM939L4EvABVmNi5xhyJtL+3WS1BU7cXdPwHOc/ezgM8CF5lZ6of4NcCe0F4WAvfm\nOMycyrJOAFYmtJUu/2WfYDqwro3niqqtpDhYvUBxtpcmYKK7n9VGcnjY30VFnyC6+yvA3oPscgnR\nrzbcfQ1QZmZDDrJ/l5BFvUA0MWfRcPcdzb/A3H0fsJ7WNb+bFV17ybJeoMjaC4C714eHPYl6zFJH\nBV4CLA+PVxHN1dqlZVEnUIRtJfTEfxV4uI1diq6tQFb1AkXYXoje88FyuMP+Lir6BDELw4AtCdvb\nyPzlV4wmmNmbZvaMmZ2W72ByycxOIOoBWZPyVFG3l4PUCxRhezGzEjN7E9gB/Mbd16bs0tJe3L0R\nqDWzATkOM6eyqBOAvzezt8zMQ4JQDO4HvkfmhBmKsK0E7dULFGd7iQPPmdlaM/unDM8f9neREkQ5\nVG8Ao8Kloh8D/zfP8eSMmfUl+gU/PfSYCe3WS1G2F3dvCu95OPD5LBLjLt8TkkWdPA2c4O6fBZ6n\ntdesyzKz/0l0v/dbtC6b1p4u31ayrJeiay/Bue7+V0S9qxVm9tedfQIliO3bBoxI2B4eyoqau+9r\nvlTk7v8OHFMMv2bNrDtREvSYu2da17so20t79VKs7aWZu38AvAhcmPLUVkJ7MbNuwHFh9acur606\ncfe97n4gbD5MNCijqzsXuNjM3gV+CZxnZitS9inGttJuvRRpe8Hdt4f/7wNPAqn3IR72d5ESxMjB\nfrE9DVwJYGYTgFp335mrwPKszXpJvJch3GQeK4IPK4BlwDp3X9TG88XaXg5aL8XYXsxskJmVhce9\ngQuADSm7/RtwVXh8KfBC7iLMvWzqxMyGJmxewsEHJ3QJ7n6zu4909xOBy4EX3P3KlN2Kqq1AdvVS\njO3FzPqEKzaY2bHA3wD/lbLbYX8XaZobs18AE4GBZlYFzCGagiHu7kvd/Vkz+6qZvUM0VPwf8xdt\n7rRXL8A3zGwqcADYD1yWr1hzxczOBa4A/jPcQxUHbgZGUcTtJZt6oQjbC3A8sDxM0VECPB7axzxg\nrbv/CngEeMzMNgG7ib4Eu7Js6mSamV1M1Fb2AFfnLdo8K/K20ia1F4YAT5pZnCiP+7m7rzaza+nE\n7yIttSciIiIiSXSJWURERESSKEEUERERkSRKEEVEREQkiRJEEREREUmiBFFEREREkihBFBEREZEk\nRT8PoojIkWZmo4DNQHd3b8p3PCIi7VGCKCJFw8zWEE3q3Qiscvc2l+UysyaiCWbjwMfAb4CpYYm4\nQ6FJZ0XkqKFLzCJSFMJ60SPd/R2i9VrfaOclceAMdz8OOBEYAMw9QrG1tdSniEheqAdRRIrFZ2hd\np/WvgDfb2b9lLXJ332dmTxOt9QqAmR0HLAC+StQj+Shwm7vHw1Jy9xKtnVsX9iPhtS8CvyVazvIs\n4DNmth94EPhroqXU7nX3h8P+PcLxLiVKXJ8AbnT3A2b2JeD/AIuBG4AG4DrgU2AhMBC4z93vCsf6\nHPATYAxQT7RM1w3t1p6IFBX1IIpIl2ZmV5vZXuAV4AtmtgeYBdxtZnvC/YHtHaM/8HXgPxKKlxMl\nYScSJXkXAN8Jz00mShzPJEpGv5HhsP8Q9i8FqoCV4f9QokTwTjObGPa9BRgPnBGOOT6UNRtKtFZ6\nOdG66T8lupR+FvBF4NaE97kIWOjuZcBJgLf3/kWk+KgHUUS6NHd/FHjUzF4CvgvsBZ5y97OzePnv\nzSwO9AU2AUsBzGwwcBFQ5u6fAB+b2ULgn4iSs0uJkrDqsP9dwJdSjv2ou28Iz5cD/w24yN0PAH8w\ns4eBK4FK4FtAhbvvDvvPI+ptnBOO9SlwZ+i9XBniXOju9cA6M1tHlFj+Oex7spkNDMd7LZt6FJHi\nogRRRLqs0PP3LtGl4mOJkq1eQDz0JM5198UHOcRZ7r7ZzLoBFcArZnYqMAo4BthuZtB6OboqvK4c\n2JJwnD9nOHbi8+XAnpDQJb7mnITnq1KeK0/Y3u3uzYNg9of/NQnP7ydKcgGuAX4IbDCzd4Hb3f2Z\nDPGJSBFTgigiXZa77wX6m9llwER3n2pm/wr8s7u/mMUhmu9BbAw9eguB04mSu4+BgQmJWaLtwIiE\n7UyXsRNfVw0MMLNj3f2jUDYS2Jbw/ChgfcLxqrOIP427/4moRxIz+1/AKjMb4O77D/5KESkmShBF\npBicA/w+PD4r4XFWwqCTSUSDOt5191ozWw3cb2a3AvuA0cBwd3+J6L6+aWb2THjN9w92fHffama/\nA+4ys+8BY4l6+r4ZdvklcIuZvR62bwUe68h7SHgvVwDPufsuogE0cUBzM4pIEg1SEZFicDbR/YQD\ngAZ3r8viNXGiewE/APYA3wa+7u614fkriQaGrAvPP0E0WASi+xCfA/4AvA78S4Zjp/omUZJZHfa/\nNaGX845wnP+XcMwftRN7W9sXAn8M7+t+4LJwH6WISItYPK65W0VERESklXoQRURERCSJEkQRERER\nSaIEUURERESSKEEUERERkSRKEEVEREQkiRJEEREREUmiBFFEREREkihBFBEREZEkShBFREREJMn/\nB5dcXMJf3+ZAAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig = plt.figure()\n", "plt.subplots_adjust(hspace=0.4)\n", "ax1 = fig.add_subplot(2, 1, 1)\n", "ax1.plot(X[:,0], y, 'o', label='Raw Data')\n", "plt.ylabel('House Price')\n", "plt.xlabel('House Size (feet squared)')\n", "ax2 = fig.add_subplot(2, 1, 2)\n", "ax2.plot(X[:,1], y, 'o', label='Raw Data')\n", "plt.ylabel('House Price')\n", "plt.xlabel('# Bedrooms')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Functions" ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def featureNormalize(X):\n", " average = np.mean(X, axis=0)\n", " sigma = np.std(X, axis= 0)\n", " X = (X-average)/sigma\n", " return X, average, sigma" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "collapsed": false }, "outputs": [], "source": [ "X, average, sigma = featureNormalize(X) # scaling the dataset (mean = 0, std = 1)\n", "X = np.c_[np.ones(X.shape[0]), X] # adding column of zeros to X to account for theta_0 (the intercept)" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 340412.56301439],\n", " [ 109370.05670466],\n", " [ -6500.61509507]])" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "theta = np.zeros((3, 1))\n", "iterations = 1500\n", "alpha = 0.01\n", "\n", "optimal_theta, J_history = gradientDescent(X, y, theta, alpha, iterations)\n", "optimal_theta" ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n4EwvW7IvM5M8eHyiN/P23o4N+l+snttze27PPWjn3rWrnBoz3RO3YsUkVeacuIqq65y4XrZ7ZpHF\noSR+s/XDWkHAAAAQ5ElEQVQYz+25Pbfn9twHfszYWIPR0YIHHnBOnFQr7UugzDWT9nqx3fViu3Wo\n+iqJi4jzgKso93S9OjPf0+OQJEmS+tKhlenNgohoAH8OvARYCbwyIs7obVSSJEn9qW+SOOC5wO2Z\neXdmjgOfAV7W45gkSZL6Uj8lcccDG9pu39M6JkmSpBn6KYmTJElSh/qpsGEjcGLb7RNax/YQEauA\nVdO3M5Ph4eHZjq3vLFiwwHbXiO2uF9tdL7a7fiLiirabazJzzaG8Tt+sExcRQ8CtwIuAHwLfAl6Z\nmWsP8FTXiasR210vtrtebHe91LXd3Vwnrm+GUzNzEngj8FXgB8BnOkjgJEmSaqmfhlPJzBuA03sd\nhyRJUr/rm544SZIkdc4kTpIkqYJM4iRJkirIJE6SJKmCTOIkSZIqyCROkiSpgkziJEmSKsgkTpIk\nqYJM4iRJkirIJE6SJKmCTOIkSZIqyCROkiSpgkziJEmSKsgkTpIkqYJM4iRJkirIJE6SJKmCTOIk\nSZIqyCROkiSpgkziJEmSKsgkTpIkqYJM4iRJkirIJE6SJKmCTOIkSZIqyCROkiSpgkziJEmSKsgk\nTpIkqYJM4iRJkirIJE6SJKmCTOIkSZIqyCROkiSpgkziJEmSKsgkTpIkqYJM4iRJkipoXq8DAIiI\nlwNXAGcC52bmt3sbkSRJUn/rl5647wP/Bfh6rwORJEmqgr7oicvMWwEiouh1LJIkSVXQLz1xkiRJ\nOghz1hMXEX8HHNt2qACawKWZ+aW5ikOSJGkQzFkSl5kv7sbrRMQqYFXb67Js2bJuvHTlDA8P9zqE\nnrDd9WK768V210td2x0RV7TdXJOZaw7phZrNZt98XXjhhV+78MILzznI51zR67h79F7Z7hp92e56\nfdnuen3Z7np9dbPdfTEnLiJ+PiI2AM8D/mdE/K9exyRJktTP+qU69QvAF3odhyRJUlX0RU/cYVrT\n6wB6ZE2vA+iRNb0OoEfW9DqAHlnT6wB6ZE2vA+iRNb0OoEfW9DqAHlnT6wB6ZE23XqhoNpvdei1J\nkiTNkUHoiZMkSaodkzhJkqQK6ovChk5ExHuBnwMeBe4AfjUzt7Xuezvwa8AE8KbM/Grr+HnAVZTJ\n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\nklRB/z/g/fXOAC3oigAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig = plt.figure()\n", "ax = fig.add_subplot(1, 1, 1)\n", "ax.scatter(range(iterations), J_history)\n", "plt.ylabel('Cost Value')\n", "plt.xlabel('Iteration of Gradient Descent')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Finding Theta using the Normal Equations" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It is possible to show that the same optimized parameters found implemenating Gradient Descent can be calculated in an elegant, efficient and closed form, using linear algebra. Specifically:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\\theta = (X^T X)^{-1} X^Ty$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Using this formula does not require any feature scaling, and you will get an exact solution in one calculation: there is no \"loop until convergence\" like in gradient descent." ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def normalEquation(X, y):\n", " return np.dot(np.dot(np.linalg.inv(np.dot(X.transpose(), X)), X.transpose()), y)" ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 340412.65957447],\n", " [ 109447.79646964],\n", " [ -6578.35485416]])" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "normalEquation(X, y)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 0 }