{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "%matplotlib inline\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Integration" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "from scipy import integrate" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Q1: integrating an analytic function\n", "\n", "Numerical integration methods work differently depending on whether you have the analytic function available (in which case you can evaluate it freely at any point you please) or if it is sampled for you.\n", "\n", "Consider the function $f(x) = e^{-x^2}$. We want to integrate this from $[-5, 5]$. The\n", "analytic integral is not easily obtained. Use `integrate.quad` to do the integration." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1.7724538509027912 4.6261378229003154e-14\n" ] } ], "source": [ "def f1(x):\n", " return np.exp(-x**2)\n", "f1(5)\n", "(Ia, Err) = integrate.quad(f1, -5,5) #analytic integral\n", "print(Ia, Err)\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1.7724538509027912 4.6261378229003154e-14\n" ] } ], "source": [ "import numpy as np\n", "from scipy import integrate as ig\n", "def func(x):\n", " y = np.exp(-x ** 2)\n", " return y\n", "Result,Error = ig.quad(func,-5,5)\n", "print(Result,Error)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Q2: integrating a sampled function\n", "\n", "Consider now that you have data that represents a function sampled a `N` points, but you don't know the analytic form of the function. Here, we create the sampling here for a Gaussian and we will do the same integral as in Q1." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "N = 64\n", "x = np.linspace(-5, 5, N, endpoint=True)\n", "f = np.exp(-x**2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Compute the integral of this sampled function using Simpson's method (`integrate.simps`). Now, vary the number of sample points (try 64, 128, ...) and see how the answer changes. Simpson's method is 4-th order accurate, which means that the error should decrease by $2^4$ when we double the number of sample points" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1.7724538509168974\n", "1.7724538509036147\n", "1.772453850902865\n", "1.7724538509027987\n" ] }, { "data": { "text/plain": [ "array([1.41062717e-11, 8.23563440e-13, 7.37188088e-14, 7.54951657e-15])" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "grid = np.array([32,64,128,256])\n", "Err = np.array([])\n", "for N in grid:\n", " x = np.linspace(-5, 5, N, endpoint=True)\n", " f = np.exp(-x**2)\n", " In = integrate.simps(f, x) # Numerical integral\n", " print(In)\n", " Err = np.append(Err, (In-Ia)) \n", "Err \n", " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Optional: Make a plot of the error (compared to the analytic integral from Q1) vs. N" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(grid,Err)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/marivi/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:12: DeprecationWarning: object of type cannot be safely interpreted as an integer.\n", " if sys.path[0] == '':\n" ] }, { "data": { "text/plain": [ "Text(0, 0.5, 'Residual')" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "from scipy import integrate as ig\n", "import matplotlib.pyplot as plt\n", "def func(x):\n", " y = np.exp( -x ** 2)\n", " return y\n", "Result,Error = ig.quad(func,-5,5)\n", "ResolutionArray = np.linspace(32,256,8)\n", "ErrorArray = np.zeros_like(ResolutionArray)\n", "for Idx in range(len(ResolutionArray)):\n", " Resolution = ResolutionArray[Idx]\n", " x = np.linspace(-5,5,Resolution)\n", " ResultSimps = ig.simps(func(x),x)\n", " ErrorArray[Idx] = ResultSimps - Result\n", "Q2Fig = plt.figure()\n", "ax = Q2Fig.add_subplot(111)\n", "ax.plot(ResolutionArray,ErrorArray)\n", "ax.set_xlabel('Resolution Step')\n", "ax.set_ylabel('Residual')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Interpolation" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "from scipy import interpolate" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Q3: interpolation error\n", "\n", "There are a large number of different interpolation schemes available through scipy. Let's test them out.\n", "\n", "Create a python function, $f(x)$, that is your true function. Now create $N$ samples of it (either regularly spaced or irregularly spaced).\n", "\n", "Try some of the different interolation routines. `interpolate.interp1d` takes a `kind` argument that let's you choose the order of the interpolation. Measure the error in the method, by comparing the interpolated result with the actual function value. Also, try using cubic splines (look at `CubicSpline`)\n", "\n", "Try plotting the resulting interpolant." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# We will use the previously defined f1 function (unnormalized gaussian)\n", "\n", "N = 10\n", "x1 = np.random.uniform(-2,2,N)\n", "set1 = f1(x1)\n", "x2 = np.linspace(-2, 2, N)\n", "set2 = f1(x2)\n", "N = 100\n", "# use finer points when we plot\n", "xgrid = np.linspace(-2, 2, N)\n", "yexact = f1(xgrid)\n", "\n", "set1_intpl = interpolate.interp1d(x1, set1, kind=3)\n", "set2_intpl = interpolate.interp1d(x2, set2, kind=3)\n", "\n", "plt.plot(x1, set1, \"ro\", label=\"irregular grid\")\n", "plt.plot(x2, set2, \"kx\", label=\"regular grid\")\n", "plt.plot(xgrid, yexact, \"b:\", label=\"exact function\")\n", "#plt.plot(xgrid, set1_intpl(xgrid), \"r-\", label=\"interpolant irregular\")\n", "plt.plot(xgrid, set2_intpl(xgrid), \"r--\", label=\"interpolant regular\")\n", "\n", "plt.legend(frameon=False, loc=\"best\")\n", "\n" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/marivi/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:12: DeprecationWarning: object of type cannot be safely interpreted as an integer.\n", " if sys.path[0] == '':\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX8AAAD8CAYAAACfF6SlAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzs3Xl4lNX58PHvmZlM9j0hhOwBAoSQBAghhEUosqrgxia2WlttrZS2+qu1m7VWW9u6VF+t+1KsC2pdqIIoGvYQCBC2QCAQyE42smf28/4xIQ0QtjBkJsn5XBfXxcw885x7YOaeM+c55z5CSomiKIrSv2icHYCiKIrS81TyVxRF6YdU8lcURemHVPJXFEXph1TyVxRF6YdU8lcURemHVPJXFEXph1TyVxRF6YdU8lcURemHdM4O4HxCQkJkbGyss8NQFEXpVXbu3FkjpQy92HEum/xjY2PJzc11dhiKoii9ihDixKUcp4Z9FEVR+iGV/BVFUfohlfwVRVH6IZcd81eU/sZsNlNaWorBYHB2KEov4OHhQWRkJG5ubt16vkOSvxDiDeB6oEpKmdTF4wJ4FpgLtAJ3Sil3OaJtRekrSktL8fX1JTY2FvtHRlG6JqWktraW0tJS4uLiunUORw37vAXMvsDjc4Ch7X/uAV50ULuK0mcYDAaCg4NV4lcuSghBcHDwFf1KdEjyl1JuBOoucMh8YIW02wYECCHCHdG2ovQlKvErl+pK3ys9NeYfAZR0ul3afl9FD7WvKFesoqGND3NLsVhtAAR561maEYObVs2bUHqfnkr+XX1FnbN5sBDiHuzDQkRHR1/tmBTlktU2G7nt1RyKalo43eGSEvaVNfLkguQ+02PXarWMGjWq4/bixYt56KGHHHLuvLw8ysvLmTt37jmPrV+/nvnz53eMX4eEhLBu3TqHtNtV26tWrSI/P99hr6036qnkXwpEdbodCZSffZCU8hXgFYC0tDS1s7ziElqMFu56awfl9W38594JjI0JAuDZdUd4Zt1hBvi586vZw50cpWN4enqSl5d3Vc6dl5dHbm5ul8kfYPLkyXz++ec90va8efOYN2/eVWmrt+ip36urgO8JuwygQUqphnwUl2e22vjJO7vYV9bA87eN6Uj8AMunD2Hp+GheXH+UN7cUOTHKq6uhoYFhw4ZRUFAAwJIlS3j11VcBuPfee0lLS2PkyJH84Q9/6HjOjh07yMzMJCUlhfT0dBoaGnj44YdZuXIlqamprFy58pLavvPOO/noo486bvv4+AD2XwpTp07l1ltvZfjw4SxduhQp5SW3/dZbb7Fs2TIATpw4wfTp00lOTmb69OkUFxd3tL18+XIyMzOJj48/I46+wFFTPd8DpgIhQohS4A+AG4CU8iVgNfZpnoXYp3p+3xHtKsrV9v++LWTD4WqeuHkUMxLDznhMCMGj85OobjLy6Of5jI4OJDUqwCHt/vG/B8gvb3TIuU5LHOTHH24YecFj2traSE1N7bj961//mkWLFvH8889z55138rOf/YxTp05x9913A/D4448TFBSE1Wpl+vTp7N27l+HDh7No0SJWrlzJuHHjaGxsxMvLi0cffZTc3Fyef/75LtvetGlTR9sLFizgt7/97QVj3b17NwcOHGDQoEFMnDiRLVu2kJ6efkltv/XWWx3nWbZsGd/73ve44447eOONN1i+fDmffvopABUVFWzevJlDhw4xb948br311gv/I/ciDkn+UsolF3lcAvc5oi1F6SnNRgtvbSli9siBLE7v+hqUViN4elEqE5/4lhfXF/Lyd9N6OErHOt+wz4wZM/jwww+577772LNnT8f9H3zwAa+88goWi4WKigry8/MRQhAeHs64ceMA8PPzu6S2L3fYJz09ncjISABSU1M5fvw4/v7+l912dnY2H3/8MQDf/e53efDBBzseu/HGG9FoNCQmJnLy5MlLjq03UCt8FeU83sspptFg4d6pgy94nI+7ju9NiOH5rEKOVjczONTnitu+WA+9p9lsNg4ePIinpyd1dXVERkZSVFTEk08+yY4dOwgMDOTOO+/EYDAgpXTYBXCdTofNZp9dJaXEZDJ1PObu7t7xd61Wi8VicUjbnZ/fuY3Tw0p9hZqjpihdMFlsvL65iIz4IFIuYSjnjsxY9FoNr2w41gPR9bxnnnmGESNG8N5773HXXXdhNptpbGzE29sbf39/Tp48yZo1awAYPnw45eXl7NixA4CmpiYsFgu+vr40NTVdVruxsbHs3LkTgM8++wyz2XzB47vTdmZmJu+//z4A77zzDpMmTbqsGHsrlfwVpQuf5ZVR2Wjgx9dcuNd/WoiPOwvSIvlkdxknG3tvbZ7TY/6n/zz00EMcPnyY1157jaee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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "from scipy import interpolate as interp\n", "import matplotlib.pyplot as plt\n", "def func(x):\n", " y = np.exp( -x ** 2)\n", " return y\n", "Resolution = 10\n", "x = np.linspace(-5,5,Resolution)\n", "y = func(x)\n", "InterpFunc = interp.interp1d(x,y,kind = 5)\n", "CubicSplineFunc = interp.CubicSpline(x,y)\n", "xHighResol = np.linspace(-5,5,1e2)\n", "FigQ3 = plt.figure()\n", "ax = FigQ3.add_subplot(111)\n", "ax.plot(xHighResol,func(xHighResol), label = 'Exact Function')\n", "ax.plot(xHighResol,InterpFunc(xHighResol), label = 'Interp Function')\n", "ax.plot(xHighResol,CubicSplineFunc(xHighResol), label = 'CubicSpline Function')\n", "ax.legend(loc = 'best')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Root Finding" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Q4: scalar function roots\n", "\n", "Consider the function\n", "$$q(x) = x^3 - 2x^2 - 11x + 12$$\n", "This has 3 roots, but is known to cause problems for some root-finding methods (it exhibits basis of attraction: https://en.wikipedia.org/wiki/Newton%27s_method#Basins_of_attraction -- very closely spaced initial guesses leave to very different roots)\n", "\n", "Use the SciPy `optimize.brentq` method to find the roots. You might need to play around with the intervals to find all 3 roots (try plotting the function to help)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "from scipy import optimize" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Root convergence: True True True\n", "Roots: -3.0 1.0 4.0\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def func4(x):\n", " return x**3 - 2*x**2-11*x+12\n", "\n", "plot4x = np.linspace(-4, 5, 100)\n", "plot4y = func4(plot4x)\n", "\n", "f4 = plt.figure()\n", "ax4 = f4.add_subplot(111)\n", "ax4.scatter(plot4x, plot4y)\n", "\n", "root1, r1 = optimize.brentq(func4, -4, -2, full_output=True)\n", "root2, r2 = optimize.brentq(func4, 1, 2, full_output=True)\n", "root3, r3 = optimize.brentq(func4, 4, 5, full_output=True)\n", "\n", "print('Root convergence: ', r1.converged, r2.converged, r3.converged)\n", "print('Roots: ', root1, root2, root3)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/marivi/anaconda3/lib/python3.7/site-packages/ipykernel_launcher.py:7: DeprecationWarning: object of type cannot be safely interpreted as an integer.\n", " import sys\n" ] }, { "data": { "text/plain": [ "Text(4.0, 0.0, '<- 4.0')" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAD8CAYAAAB6paOMAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzt3Xl8VPW9//HXJxthDTsEQkjYNyNLQBYJbigIau3VSl1wqVK9Xrfqr9Vae69d7m1ta9XWVtGitdpaV8SdRUA2QSKbQICwhGwEEiAr2b+/PxJtqkGWZOZMZt7Px8OHM+ecmfOZDDPv+S7nHHPOISIioSvM6wJERMRbCgIRkRCnIBARCXEKAhGREKcgEBEJcQoCEZEQpyAQEQlxCgIRkRCnIBARCXERXhdwMrp27eoSEhK8LkNEpEVJTU3Nd851O9F2LSIIEhISWL9+vddliIi0KGaWcTLbqWtIRCTEKQhEREKcgkBEJMQpCEREQpyCQEQkxCkIRERCnIJARCTEtYjjCEREQtGbG7JwDi4f1Rsz89l+1CIQEQlA5VU1/O97abyWmuXTEAAFgYhIQPrHuv0cKq7gzvMH+nxfCgIRkQBzrLKGJ5fu5qzEzozv18Xn+1MQiIgEmBfW7CO/pIL7Lhrsl/0pCEREAkhxeRVPLd/NlEHdGJvQ2S/7VBCIiASQ51bt40hZFfdeOMhv+1QQiIgEiKNllTzz8R6mDutBUlxHv+1XQSAiEiCeWbGH4opqfjDVf60BUBCIiASEg8XlPLdqHzOSYhka28Gv+1YQiIgEgMcW76Kyupb7LvTPTKGGFAQiIh7blVfMy+v2c+34viR2bev3/SsIREQ89qv302gbFeGXo4gboyAQEfHQ6t35LEk7yO3nDaBz2yhPalAQiIh4pLbW8b/vbad3x9bcMDHBszp8GgRm1sfMlprZdjPbamZ31S/vbGaLzGxX/f87+bIOEZFANH9jNp9nF/H/LhpMdGS4Z3X4+noE1cC9zrnPzKw9kGpmi4AbgCXOuV+Z2f3A/cCPfFyLBJjqmlqyjhwj43AZ+cUVHCmr5HBpJWWVNdTUOmqcwzlH68gI2rUKp22rCDq3jSI2pjWxHaPpFdOa1lHefXhEmqK4vIr/ez+NM/t05NIze3lai0+DwDmXC+TW3y42s+1Ab+Ay4Jz6zf4KLENBENQqq2vZkl3IxsyjbMw8ytacQvYXlFFd6/5tu4gwo3VUOBFhRnhYXYP1WGU1pZU1jT5vr5hoBvVsz+Ae7Rncsz2j4juR0KWNz8/fLtJUTyzZRX5JBc/OTiYszNt/r367QpmZJQCjgLVAj/qQwDmXa2bdG9l+DjAHID4+3l9lSjM6UFjOkrQ8lu04xOr0/C+/zGNjokmKi2Ha8J4kdG1LQpe29OjQik5to2jfKqLRL/HaWkdZVQ0FJRXkFpaTW3iM7CPHSD9Ywo68ElanF1BZUwtA13ZRjI7vxNiEzqQM6sagHu0UDBJQduUV89yqfcwa24cz+/jvVBLHY865E2/V1J2YtQOWA790zr1hZkedcx0brD/inDvuOEFycrJbv369z+uUpisur+KDzw/w5oZs1uwpwDno3bE15wzuxuSBXRkV34keHaKbfb/VNbXsPlRKasYR1mccJjXjCBkFZUBd8EwZ1I1zBndnyqBu6k4STznnuObZtWzNKWLpfef4dKaQmaU655JPtJ3PWwRmFgm8DrzknHujfnGemcXWtwZigYO+rkN8a8+hEp5fvY/XUrMoq6yhb5c23HneQGYkxTKwu+9/kUeEhzG4Z1330NVn1bUgcwuPsXzHIZbtOMS7m3N5+dNM2kSFc/7QHsxMimXKoG6eDtBJaHpvywFW7y7g598a4dl00a/yaYvA6j79fwUOO+fubrD8N0BBg8Hizs65Hx7vedQiCFybMo/yxJJdLEk7SFR4GJec2Yurz4pndHzHgOqOqaqpZd3ew7y7JZcPPj/A4dJK2rWKYNqInswa24cxfTsFVL0SnIrLq5j66Md0bhvF23ecTbiPxwZOtkXg6yA4G1gBbAFq6xf/mLpxgleAeGA/cKVz7vDxnkdBEHi25RTx6KKdLN6eR6c2kVw/MYFrzupLt/atvC7thKpralmzp4C3N+Xw7uZcSitr6N+tLVeN7cO3R8fRtV3gvwZpmX4yfwt/X7ufN/5zEiP9MDYQEEHQXBQEgaOgpIJHPtjBP9dn0j46gu+n9OOGSYm0a+W3eQfNqrSimne35PLPTzNJzThCRJgxIymWGycl+uWDKqHj032HufKpNXzv7EQemjnML/tUEEizqql1/H1tBr/5cAdllTXcdHYit58zgJg2kV6X1mzSDxbz97WZvLI+k5KKakbHd+SmsxOZNrwnEeE6CF9OX3lVDTOeWEFFdS0L70mhTZR/fjgpCKTZ7Msv5d5XN5GacYSJ/bvw8KXDGdijvddl+UxxeRWvpWbx/Op9ZBSU0SsmmpvOTuTqs+L99gGW4PK7hTv4w0fp/PWmcUwZ1M1v+1UQSJM553jxkwz+9700IsKNhy8dzuWjeofMoGpNrWNp2kGeWbGHtXsP07ltFDdNSuC6CQnEtA6elpD41racIi7940ouPbMXj1410q/7VhBIkxwtq+QHr2zio7SDpAzqxq//4wxiY1p7XZZnUjMO88eP0lm64xDtW0Uwe2JfbpqUSBcNLMs3KK+q4bI/ruJwWSUf3p3i9+miAXMcgbQ8W7IKue2lVPKKynn40uHMntA3ZFoBxzOmb2eeu3Ecn2cX8udlu/nTst3MW7mPGyYl8P2UfnRsExjzwSWw/G7hDnbkFfPcjWMD5piBxigI5N/889P9PDR/K13bRfHqrRM1c+YrRvSO4clrRpN+sIQnluziqeW7efGTDOZM7seNZ7fc2VPS/NbsLuDZlXu55qx4zh38tbPoBBR1DQlQdy6fX3+YxtPL9zB5YFcenzUqoH/BBIq0A0X8buFOFm3Lo3PbKP7znP5cO76vjlgOcUXlVUx/bAWR4cZ7d032bJLByXYNaU6cUF5Vwx3/2MDTy/dwzVnxPHdDYDdjA8mQnh14ZnYy82+fxPBeHfjFu9uZ8pul/GPdfqprak/8BBJ0nHP85M3POVBUzu+vGtkiZpopCEJc4bEqrnl2Le9uyeXHFw/hF98aoTnzp2Fkn4787Xtn8fKc8cR1asMDb2xh+uMrWJp2kJbQ6pbm8/d1+1mwKYd7LhjIqPiWcc0tfeJD2OHSSq5+5hM2Zx3lyatHMyelf8gPCjfV+H5deO3WCTx17Wiqamq58flPuebZtXyeXeh1aeIHW3MKefjtbaQM6sZ/njPA63JOmoIgRB0sKueqp9eQfrCEubOTmZEU63VJQcPMmDYiloX3TOF/LhnG9twiZv5hJff8cyPZR495XZ74SHF5Fbe/9Bmd20Tx+++c6fnFZk6FgiAEHSgs5ztPryH76DGeu3FswM9oaKmiIsK4YVIiy394LrdO6c+7W3I597fL+NX7aRSVV3ldnjQj5xz3v76FzCPH+MPVo1rc8SUKghBzuLSSa/+ylkPFFfzte+OY2L+r1yUFvQ7Rkdw/fQhL7zuHmWfE8tTy3Zzzm2W8sGYfVRpQDgpPLk3n3S25/PCiwYxN6Ox1OadMQRBCisqrmD1vLZmHy3j2+rGM6dvy/sG2ZL07tubRq0byzh1nM6hHO3761lYueuxjFm/L04ByC7Zw6wF+u3Anl4/qzZyUfl6Xc1oUBCHiWGUN33v+U9Jyi3nq2jFM6N/F65JC1ojeMfzjlvE8MzsZHNz8wnqufkYDyi1R2oEi7vnnRs6Mi+H/vn1Gi51soSAIATW1jjtf3kBqxhEemzWSc4ec2pjAW2+9RVJSEiNHjiQ5OZmVK1c2ul1qaipnnHEGAwYM4M4779Sv3G9gZkwd1oMP70nh4UuHk3agiEv+uJL7Xt3EgcJyv9Rw00030b17d0aMGHHcbZxz3HnnnQwYMICkpCQ+++wzv9TWEhwqruCWF9bTtlUET1+XfFIHEdbU1DBq1ChmzpzZ6PqKigquuuoqBgwYwFlnncW+ffuauerGKQhCwP++t51F2/L470uGc+GQrpSWlp7S488//3w2bdrExo0bmTdvHjfffHOj2912223MnTuXXbt2sWvXLj744IPmKD+oRYaHcf3EBJb9v3O5ZXI/FmzM4dzfLuPRRTsprag+reesrKw8qff4hhtuOOF79P7773/5fs6dO5fbbrvttGoKNiUV1dz4/Dryiyt5clYS7SNqTupxjz/+OEOHDj3u+r/85S906tSJ9PR07rnnHn70ox81V8nfSEEQ5F5Ys4+/rNzLzPgaNr/+BwYPHszOnTtP6TnatfvXxedLS0sbbf7m5uZSVFTEhAkTMDNmz57N/Pnzm+MlhISY1pH8+OKhLP7BFM4b2p0nluzi3N8u45VPM6mpPbmW1fbt27n33ntP+j1OSUmhc+dvHid66623mD17NmbG+PHjOXr0KLm5uSdVT7CqrK7lthdT2bRlK2dkvcV3LjjrpP7eWVlZvPvuu8f9IQV1f+/rr78egCuuuIIlS5b4pWWtIAhi7322l3t/8RjlbzzIZy/9mqFDh7J582ZGjRp1ys/15ptvMmTIEGbMmMG8efO+tj47O5u4uLgv78fFxZGdnd2k+kNRfJc2PHn1aF6/bQK9O7Xmh69vZsYTK1i5K7/R7UtLS3nuuec4++yzufnmm5v0HjcmOzubPn36fHk/1N/X4uISZt7xc17975tos/ZZLpw05qT/3nfffTePPPIIYWHH/9pt+PeOiIggJiaGgoKCZqv/eDw7CYaZTQMeB8KBZ51zv/KqlmC051AJl0wYQUxcfxa++XdGJR2/H/hkXH755Vx++eV8/PHHPPTQQyxevPjf1jf2q6WlDpwFgjF9O/PGbRN5Z3Muv/4gjWv/spZzB3fjxxcP/berw8XGxpKUlMSzzz7LkCFDmr0Ova//4pyja4+eWOe+3Pfz3/GLG6ed9GPfeecdunfvzpgxY1i2bNk37uOr/PH39qRFYGbhwJPAdGAY8F0z88/VnENAaUU1t76YSuKsn3D2mYO4+qor+dnPfkZGRsaX26xdu5aRI0cycuRIFixY8G+Pf/LJJ79cl5OT82/rUlJS2L17N/n5//4LNS4ujqysrC/vZ2Vl0atXLx+8utBhZlxyZi8W/2AKD0wfwvp9R5j2+Ap+Mn8L+SUVALz22mv07t2byy+//JTe45MVFxdHZmbml/dD9X11zvHw29voeMmPGNQvntcfueeU/t6rVq1iwYIFJCQkMGvWLD766COuvfbar+2n4d+7urqawsLCE3bfNQdPTkNtZhOA/3HOXVR//wEA59z/NbZ9k05D/f79cGDLaVba8jgcuw6WcLi0kqE9OxDTOpKCkkpeXJPNcyuz6NouimdvPIOErm1O+jnT80rp370NZsZnGYVc8vh6sn533td+qYz92Sr+cM0wzurXkYt/v547LujLxUk6arm5VNXUknX0GHlF5YSb0atja2JjogkzO+33eF9+GTMfX8/nP09pdP27mw7yxyUZvHdPMmv3HOXOv29j3UOTmvulBTSHI6OgjANF5cR2iCa+SxsOl1Sd9mdqWVoBv/1gD+/cPfZr655cso8t2cU8NfsMXl6bwxupB3jlZ9fD9NPrMAn0K5T1BjIb3M8Czmq4gZnNAeYAxMfH+6+yFi63sJzDpZX06dTmy+vqdmkXxV1TE7lraiLr9hwl/BTPgfJ66gFeWJ1NZLjROiqcf9466ssQGPnfK9j48GQA/nzdcG6Yt5ljlbVMP6Mb08/w30W6Q0FkeBiJXdrSs0M0+w+XknmkjLyicuI7tzmt9/i7T21g2Y7D5JdUEnfvRzx82UC+l9KHp5bW/cq99dy+XJzUjfc2H2TA/ctpExXGczcl+fplBhSHY19B3d+5Z30IGNbkz1RDP31zJ8kJMVw6qgffS+nDdc9sYsD9y+jcNpKXv988Yz0n4lWL4ErgIufczfX3rwPGOefuaGx7XZjm5KRmHOE7T69h6tAe/Pna0SHblxsqVqfn84t3t7Mtt4gz+3TkoRlDSW6BpzcIVJXVtdz36iYWbMrhlsmJ/PjioS3uMxXoF6bJAvo0uB8H5BxnWzkJReVV3PXyBmJjonnkyqQW9w9WTt3EAV15+46z+c0VSRwoPMYVT63hthdTySg4teNE5OvKKqu55YX1LNiUw/3Th/DgjGFB/ZnyqmvoU2CgmSUC2cAs4GqPamnxnHM8+Obn5BaW8+qtE+gQHel1SeIn4WHGlcl9mJEUyzMf7+Wp5btZvD2P2RMSuPO8gcS00b+FU5VbeIxbXljPtpwifv0fZ3DV2ODvmvYkCJxz1Wb2X8CH1E0fneec2+pFLcHgtdQs3t6Uw30XDmJ0C7kikjSvNlER3HXBQGaN68PvFu5g3qq9vJaaxZyUflw/MYF2rQL/comBYMP+I8z5WyrHKmt49vpkzhvSw+uS/EIXr2/h9uaXMuOJFSTFxfDSzeObNGglwWNbThG/+TCNpTsO0alNJLek9OP6CQm0VSAc16vrM3lw/uf07BDNs9cnM6jB8Rot1cmOESgIWrCaWsdVT69hZ14xH96TQmxMa69LkgCzMfMojy3eybL6QJiT0p/ZE/oqEBoorajmofmf88aGbCb068KfrhlNp7ZRXpfVLAJ9+qg0g+dW7WV9xhEe/c6ZCgFp1Mg+HXn+xnFs2H+Exxbv4tcfpPHMij187+xErj2rb8iPIWzNKeSOv29gX0Epd18wkDvOGxiSrWq1CFqovfmlTHvsYyYP7Mozs5ODekaDNJ/P9h/h8cW7WL7zEG2iwpk1Np7vTU6kd8fQ+iFRUV3Dkx+l86dlu+ncNorHZ40Kymt0qGsoiDXsElr0gyn06BDtdUnSwmzLKeKZFXt4e1MODrgkKZZbUvoxvFeM16X53Ib9R/jR65vZmVfC5aN689OZw4KmK+ir1DUUxJ5fvY/1GUf43ZVnKgTktAzr1YHfXzWS+y4azLyVe3l53X7mb8xhbEInrh3fl2kjetIq4sQXWmlJDhSW88iHabzxWTaxMdE8d8PYU75IU7BSi6CFyTpSxtRHP2Z8v87Mu2GsuoSkWRSWVfHK+kxeWpvBvoIyurSN4srkPlw9Lp74Lid/XqpAVFRexbyVe3l6+R5qah03nZ3I7ef2p30IHG+jrqEgdcsL61m5K59FP0ghrlPL/oBK4KmtdaxMz+fFTzJYvD2PWgfjEjvz7VG9mX5G7Jfnr2oJCsuqmLdqL/NW7aW4vJrpI3rywPShLT7YToW6hoLQwq0HWLQtj/unD1EIiE+EhRkpg7qRMqgbuYXHeHV9FvM3ZHP/G1v46VtbOX9ody45sxcpg7oF7EFqaQeKePGTDN78LJvSyhouGt6DO84byIjewT/+cbrUImghyiqrmfrox7RtFc67d04mMlwXlxP/cM6xJbuQNzdk8/amHPJLKokKD2NC/y5MHdaD84d293z6cn5JBR98foD5G7JZn3GEVhFhzEzqxc2TExka28HT2rykrqEg83/vb+fp5Xt49dYJjNUZJsUj1TW1rM84wuJteSzankdGQRkA/bq1ZXy/LnX/JXamu48nMTjnSDtQzKr0fJbtOMTq3fnUOujfrS2zxsZzxZi4oJ0JdCoUBEFkZ14xFz++gm+P7s0jV5zpdTkiQN2X8e5DJSxNO8QnewpYt/cwxRXVAPTo0IrhvWIY3qsDw2I7EN+lDX06tzmtEyJW19SSW1jOzrxiPs8uYmtOIZ/tP0J+SSVQF0IXj4hlRlIsQ3q21wSKBjRGECScc/z8nW20iQrn/ulDvS5H5EtmxoDu7RnQvT23pPSjuqaWbblFrNt7mK05dV/Yy3ceoqb2Xz82O7aJJDamNZ3aRNKxTSQxrSOJCg/DzDCrG6wuLq+mqLyaomNV5BQeI7ew/MvnMIPErm2ZPLAbE/t3YdKArvQKsYPhfEFBEOCW7jjIil35PDRzGJ3V1JUAFhEeRlJcR5LiOn65rLyqhvSDJew/XMb+w2VkHi7jQGE5hceq2JlXwtGyKqpra6mtdTggzIz20RG0j46kQ3QEYxM6E9epNXGdWtOvWzuGxnYI2EHqlkx/0QBWVVPLL97ZTr+ubblufF+vyxE5ZdGR4YzoHaMZOwFOU08C2N/WZLAnv5QHZwwlKkJvlYj4hr5dAtSR0koeW7yTyQO7cp4OgxcRH1IQBKjHFu+kpKKanwT5tVJFxHsKggCUUVDKS2v3M2tcPIN7tvyrJIlIYFMQBKDfL9pJRLhx1/kDvS5FREKAz4LAzH5jZmlmttnM3jSzjg3WPWBm6Wa2w8wu8lUNLdH23CLe2pTDjZMSdYppEfELX7YIFgEjnHNJwE7gAQAzGwbMAoYD04A/mVlwnfi8CX774Q7at4rg1pT+XpciIiHCZ0HgnFvonKuuv/sJEFd/+zLgZedchXNuL5AOjPNVHS3Jp/sOsyTtILee0z/kryUrIv7jrzGCm4D362/3BjIbrMuqXxbSnHM88kEa3dq34saJiV6XIyIhpElHFpvZYqBnI6sedM69Vb/Ng0A18NIXD2tk+6+d+c7M5gBzAOLj45tSZouwbOchPt13hJ9/awSto9RTJiL+06QgcM5d8E3rzex6YCZwvvvXaU6zgD4NNosDchp57rnAXKg7+2hT6gx0zjkeX7yL3h1bc1VynxM/QESkGfly1tA04EfApc65sgarFgCzzKyVmSUCA4F1vqqjJVixK5+NmUf5z3P761QSIuJ3vjzp3B+BVsCi+iNjP3HO3eqc22pmrwDbqOsyut05V+PDOgKac47Hl+yiV0w0V4yJO/EDRESamc+CwDk34BvW/RL4pa/23ZKs2V1AasYRfn7ZcFpFaGxARPxP/RAee2zJLnp0aMWVGhsQEY8oCDz0xeX9bp3Sn+hItQZExBsKAg89sWQX3dq34rvjgn96rIgELgWBRzZmHmX17gLmTO6n1oCIeEpB4JG5H++mfXQE3z1LrQER8ZaCwAP78kt5//MDXDe+ry7ELSKeUxB44JkVe4gMC+OGSQlelyIioiDwt0PFFbyamsV/jOlN9/a63oCIeE9B4GcvrNlHVU0tN0/u53UpIiKAgsCvSiuqeWFNBlOH9qB/t3ZelyMiAigI/OqV9ZkUHqvi+1N09TERCRwKAj+pqXU8t2ofY/p2YkzfTl6XIyLyJQWBnyxNO8j+w2XcqJlCIhJgFAR+8vzqffTsEM1Fwxu7oJuIiHcUBH6wK6+Ylen5XDehL5Hh+pOLSGDRt5IfPL96H1ERYcwaq1NNi0jgURD4WGFZFW98ls23RvaiS7tWXpcjIvI1CgIfe2V9Jseqarh+YoLXpYiINEpB4EM1tY6/rtnHuMTODO8V43U5IiKN8nkQmNl9ZubMrGv9fTOzJ8ws3cw2m9loX9fglSXb88g6cowb1RoQkQDm0yAwsz7AVGB/g8XTgYH1/80B/uzLGrz00tr99OjQiqnDenhdiojIcfm6RfB74IeAa7DsMuAFV+cToKOZxfq4Dr/LPFzGx7sOcVVyHyI0ZVREApjPvqHM7FIg2zm36SuregOZDe5n1S8LKi9/uh8DrtL1iEUkwDXp8lhmthho7FDZB4EfAxc29rBGlrmvbWQ2h7quI+LjW9aXaVVNLa+sz+Lcwd3p3bG11+WIiHyjJgWBc+6Cxpab2RlAIrDJzADigM/MbBx1LYCGR1bFATmNPPdcYC5AcnLy14IikC3elseh4gqu1vWIRaQF8EnXkHNui3Ouu3MuwTmXQN2X/2jn3AFgATC7fvbQeKDQOZfrizq88vd1++kVE805g7t7XYqIyAl5ceX094CLgXSgDLjRgxp8JqOglBW78rnngkGEhzXWCyYiElj8EgT1rYIvbjvgdn/s1wv/WJdJeJhxlc4rJCIthOY1NqPK6lpeS83kvCHd6RmjC9OLSMugIGhGH6XlkV9SydWaMioiLYiCoBm9uj6L7u1bMXlgV69LERE5aQqCZnKwuJxlOw/x7dFxOpJYRFoUfWM1k/kbsqmpdVwxJs7rUkRETomCoBk453gtNYtR8R0Z0L2d1+WIiJwSBUEz2JxVyM68Eq4coymjItLyKAiawaupmbSKCGPmmUF3ElURCQEKgiYqr6phwcYcpo3oSYfoSK/LERE5ZQqCJlq0LY+i8mp1C4lIi6UgaKJXU7PoFRPNhP5dvC5FROS0KAia4GBROSt31R07oBPMiUhLpSBogrc351Lr4FujenldiojIaVMQNMFbG7MZ3qsDA7q397oUEZHTpiA4TXsOlbA5q5BvjQy6yy2LSIhREJymtzbmYAaXnKluIRFp2RQEp8E5x1sbsxmf2EXXHRCRFk9BcBo2ZRWyr6BMg8QiEhQUBKdh/oZsosLDmDZCp5QQkZbPp0FgZneY2Q4z22pmjzRY/oCZpdevu8iXNTS36ppa3tmcy7lDuhHTWqeUEJGWz2cXrzezc4HLgCTnXIWZda9fPgyYBQwHegGLzWyQc67GV7U0p9W7C8gvqdBsIREJGr5sEdwG/Mo5VwHgnDtYv/wy4GXnXIVzbi+QDozzYR3Nav7GbNpHR3DukO5elyIi0ix8GQSDgMlmttbMlpvZ2PrlvYHMBttl1S8LeOVVNSzcmsdFw3sSHRnudTkiIs2iSV1DZrYY6NnIqgfrn7sTMB4YC7xiZv2Axk7K4xp57jnAHID4+PimlNlsVuzKp6SimplJGiQWkeDRpCBwzl1wvHVmdhvwhnPOAevMrBboSl0LoOE5m+OAnEaeey4wFyA5OflrQeGF97bkEtM6kkkDunpdiohIs/Fl19B84DwAMxsERAH5wAJglpm1MrNEYCCwzod1NIvyqhoWbcvjwmE9iAzXrFsRCR4+mzUEzAPmmdnnQCVwfX3rYKuZvQJsA6qB21vCjKEvuoVmqFtIRIKMz4LAOVcJXHucdb8EfumrffuCuoVEJFipj+MkqFtIRIKZvtVOgrqFRCSYKQhOgrqFRCSYKQhOQN1CIhLs9M12AuoWEpFgpyA4AXULiUiwUxB8g8rqWhZvz2OquoVEJIjp2+0brN1bQHF5NRcNb+x0SiIiwUFB8A0+3HoaLSMBAAAI20lEQVSA1pHhTB6obiERCV4KguOorXUs2pbHlEHddMppEQlqCoLj2JxdSF5RBRcO7+F1KSIiPqUgOI4Ptx4gPMw4T1ciE5EgpyA4joVbDzC+X2c6tonyuhQREZ9SEDQi/WAJuw+VcuEwzRYSkeCnIGjEwm0HAJg6TOMDIhL8FASNWLg1j6S4GHp1bO11KSIiPqcg+IoDheVszDzKhWoNiEiIUBB8xaLteQBcqKOJRSREKAi+YuHWAyR0acPA7u28LkVExC8UBA2UVFSzds9hpg7rgZl5XY6IiF/4LAjMbKSZfWJmG81svZmNq19uZvaEmaWb2WYzG+2rGk7Vyl35VNbUct4QjQ+ISOjwZYvgEeBh59xI4Kf19wGmAwPr/5sD/NmHNZySj9LyaB8dQXJCJ69LERHxG18GgQM61N+OAXLqb18GvODqfAJ0NDPPL/9VW+tYuuMQKYO66doDIhJSInz43HcDH5rZb6kLnIn1y3sDmQ22y6pfltvwwWY2h7oWA/Hx8T4ss87nOYUcKq7gfJ1bSERCTJOCwMwWA43Ns3wQOB+4xzn3upl9B/gLcAHQ2Cis+9oC5+YCcwGSk5O/tr65Ldl+EDM4Z7CCQERCS5OCwDl3wfHWmdkLwF31d18Fnq2/nQX0abBpHP/qNvLMR2kHGR3fic5tdZI5EQktvuwMzwGm1N8+D9hVf3sBMLt+9tB4oNA5l9vYE/jLwaJytmQX6pTTIhKSfDlGcAvwuJlFAOXU9/cD7wEXA+lAGXCjD2s4KUt3HARQEIhISPJZEDjnVgJjGlnugNt9td/TsWT7QXrFRDOkZ3uvSxER8buQnydZUV3DyvR8zhvaXUcTi0hICvkgWLvnMGWVNZyvo4lFJESFfBB8lHaQ6MgwJvTv4nUpIiKeCPkgWLrjIBP7dyU6MtzrUkREPBHSQbAvv5SMgjLOGdzN61JERDwT0kGwfOchAFIGKghEJHSFdBB8vPMQfbu0IaFrW69LERHxTMgGQUV1Dat3F6g1ICIhL2SDIHXfEY5V1TBlkIJAREJbyAbB8p2HiAw3TRsVkZAX0kGQ3LczbVv58nRLIiKBLySDIK+onLQDxaSoW0hEJDSD4OP6aaMaHxARCdEgWL7zEN3at2JorM42KiISckFQU+tYmZ5PysBuOtuoiAghGASbs45ytKyKlEFdvS5FRCQghFwQfLwzHzOYrAPJRESAEAyC5TsPktQ7RhepFxGpF1JBUFRexcbMo2oNiIg00KQgMLMrzWyrmdWaWfJX1j1gZulmtsPMLmqwfFr9snQzu78p+z9Vn+wuoNbB2QM1PiAi8oWmtgg+B74NfNxwoZkNA2YBw4FpwJ/MLNzMwoEngenAMOC79dv6xerdBURHhjEqvqO/dikiEvCadH4F59x2oLFpmJcBLzvnKoC9ZpYOjKtfl+6c21P/uJfrt93WlDpO1sr0fMYldqFVhK5GJiLyBV+NEfQGMhvcz6pfdrzlPpdXVE76wRIm6SRzIiL/5oQtAjNbDPRsZNWDzrm3jvewRpY5Gg8ed5z9zgHmAMTHx5+ozBNalZ4PwKQBGh8QEWnohEHgnLvgNJ43C+jT4H4ckFN/+3jLv7rfucBcgOTk5EbD4lSsSi+gU5tIhsV2aOpTiYgEFV91DS0AZplZKzNLBAYC64BPgYFmlmhmUdQNKC/wUQ1fcs6xKj2fif27Eham00qIiDTUpMFiM7sc+APQDXjXzDY65y5yzm01s1eoGwSuBm53ztXUP+a/gA+BcGCec25rk17BSdh9qJQDReXqFhIRaURTZw29Cbx5nHW/BH7ZyPL3gPeast9TtXr3F+MDGigWEfmqkDiyeOWufOI6tSa+cxuvSxERCThBHwQ1tY41ewqY1L+rTjstItKIoA+CLdmFFJdXM0mnlRARaVTQB8EXxw9M1IFkIiKNCokgGNKzPV3btfK6FBGRgBTUQVBeVcP6jCOaNioi8g2COgiKjlUxfURPzh/S3etSREQCVpOOIwh03TtE8/isUV6XISIS0IK6RSAiIiemIBARCXEKAhGREKcgEBEJcQoCEZEQpyAQEQlxCgIRkRCnIBARCXHmXJMvB+xzZnYIyPC6jtPQFcj3ugg/02sODXrNLUNf51y3E23UIoKgpTKz9c65ZK/r8Ce95tCg1xxc1DUkIhLiFAQiIiFOQeBbc70uwAN6zaFBrzmIaIxARCTEqUUgIhLiFAR+Ymb3mZkzs6C/XJqZ/cbM0sxss5m9aWYdva7JF8xsmpntMLN0M7vf63p8zcz6mNlSM9tuZlvN7C6va/IXMws3sw1m9o7XtfiCgsAPzKwPMBXY73UtfrIIGOGcSwJ2Ag94XE+zM7Nw4ElgOjAM+K6ZDfO2Kp+rBu51zg0FxgO3h8Br/sJdwHavi/AVBYF//B74IRASAzLOuYXOuer6u58AcV7W4yPjgHTn3B7nXCXwMnCZxzX5lHMu1zn3Wf3tYuq+GHt7W5XvmVkcMAN41utafEVB4GNmdimQ7Zzb5HUtHrkJeN/rInygN5DZ4H4WIfCl+AUzSwBGAWu9rcQvHqPuh1yt14X4SlBfs9hfzGwx0LORVQ8CPwYu9G9FvvdNr9k591b9Ng9S153wkj9r8xNrZFlItPjMrB3wOnC3c67I63p8ycxmAgedc6lmdo7X9fiKgqAZOOcuaGy5mZ0BJAKbzAzqukg+M7NxzrkDfiyx2R3vNX/BzK4HZgLnu+Cco5wF9GlwPw7I8agWvzGzSOpC4CXn3Bte1+MHk4BLzexiIBroYGYvOueu9biuZqXjCPzIzPYByc65lnbiqlNiZtOAR4EpzrlDXtfjC2YWQd1A+PlANvApcLVzbqunhfmQ1f2a+Stw2Dl3t9f1+Ft9i+A+59xMr2tpbhojEF/4I9AeWGRmG83sKa8Lam71g+H/BXxI3aDpK8EcAvUmAdcB59W/rxvrfylLC6cWgYhIiFOLQEQkxCkIRERCnIJARCTEKQhEREKcgkBEJMQpCEREQpyCQEQkxCkIRERC3P8HWiMi4/fS6YkAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from scipy import optimize as opt\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "def func4(x):\n", " y = x**3 - 2 * x**2 - 11 * x + 12\n", " return y\n", "x = np.linspace(-5,5,1e4)\n", "y = func4(x)\n", "FigQ4 = plt.figure()\n", "ax = FigQ4.add_subplot(111)\n", "ax.plot(x,y)\n", "ax.plot([-5, 5],[0, 0])\n", "root1 = opt.brentq(func4, -5, -2 )\n", "root2 = opt.brentq(func4, 0, 2 )\n", "root3 = opt.brentq(func4, 4, 5 )\n", "ax.text(root1,func4(root1), '<- {:.1f}'.format(root1) )\n", "ax.text(root2,func4(root2), '<- {:.1f}'.format(root2) )\n", "ax.text(root3,func4(root3), '<- {:.1f}'.format(root3) )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# ODEs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Q5: orbits\n", "\n", "We want to consider planetary orbits. To do this, we need to solve Newton's second law together with Newton's law of gravity. If we restrict ourselves to the x-y plane, then there are 4 quantities we need to solve for: $x$, $y$, $v_x$, and $v_y$. These evolve according to:\n", "\\begin{align*}\n", "\\frac{dx}{dt} &= v_x \\\\\n", "\\frac{dy}{dt} &= v_y \\\\\n", "\\frac{dv_x}{dt} &= a_x = -\\frac{GM_\\star x}{r^3} \\\\\n", "\\frac{dv_y}{dt} &= a_y = -\\frac{GM_\\star y}{r^3}\n", "\\end{align*}\n", "\n", "To integrate these forward in time, we need an initial condition for each quantity. We'll setup our system such that the Sun is at the origin (that will be one focus), and the planet begins at perihelion and orbits counterclockwise. \n", "\n", "![geometry](orbit_setup.png)\n", "\n", "The distance of perihelion from the focus is:\n", "$$r_p = a (1 - e)$$\n", "where $a$ is the semi-major axis and $e$ is the eccentricity. The perihelion velocity is all in the $y$ direction and is:\n", "$$v_y = v_p = \\sqrt{\\frac{GM_\\star}{a} \\frac{1+e}{1-e}}$$\n", "\n", "We'll work in units of AU, years, and solar masses, in which case, $GM_\\star = 4\\pi^2$ (for the Sun). \n", "\n", "Your initial conditions should be:\n", " * $x(t=0) = r_p$\n", " * $y(t=0) = 0$\n", " * $v_x(t=0) = 0$\n", " * $v_y(t=0) = v_p$\n", "\n", "Here's a righthand side function for the ODEs:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "def rhs(t, Y, GM=4*np.pi**2):\n", " \"\"\"RHS for orbits, Y is the solution vector, containing\n", " x, y, v_x, and v_y\"\"\"\n", "\n", " x, y, vx, vy = Y\n", " f = np.zeros_like(Y)\n", "\n", " # dx/dt = vx\n", " f[0] = vx\n", "\n", " # dy/dt = vy\n", " f[1] = vy\n", "\n", " # d(vx)/dt = -GMx/r**3\n", " r = np.sqrt(x**2 + y**2)\n", " f[2] = -GM*x/r**3\n", "\n", " # d(vy)/dt = -GMy/r**3\n", " f[3] = -GM*y/r**3\n", "\n", " return f" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Use the SciPy ODE integration methods to integrate an orbit and plot it" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Q6: damped driven pendulum and chaos" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There are a large class of ODE integration methods available through the `scipy.integrate.ode()` function. Not all of them provide _dense output_ -- most will just give you the value at the end of the integration. \n", "\n", "The explicit Runge-Kutta integrator will give you access to the solution at intermediate points and provides methods to interpolate to any value. You enable this via `dense_output=True` (see the example in our out-of-class notebook).\n", "\n", "The damped driven pendulum obeys the following equations:\n", "$$\\dot{\\theta} = \\omega$$\n", "$$\\dot{\\omega} = -q \\omega - \\sin \\theta + b \\cos \\omega_d t$$\n", "here, $\\theta$ is the angle of the pendulum from vertical and $\\omega$ is the angular velocity. $q$ is a damping coefficient, $b$ is a forcing amplitude, and $\\omega_d$ is a driving frequency.\n", "\n", "Choose $q = 0.5$ and $\\omega_d = 2/3$.\n", "\n", "Integrate the system for different values of $b$ (start with $b = 0.9$ and increase by $0.05$, and plot the results ($\\theta$ vs. $t$). Here's a RHS function to get you started:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "def rhs(t, Y, q, omega_d, b):\n", " \"\"\" damped driven pendulum system derivatives. Here, Y = (theta, omega) are\n", " the solution variables. \"\"\"\n", " f = np.zeros_like(Y)\n", "\n", " \n", " f[0] = Y[1]\n", " f[1] = -q*Y[1] - np.sin(Y[0]) + b*np.cos(omega_d*t)\n", "\n", " return f" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that the pendulum can flip over, giving values of $\\theta$ outside of $[-\\pi, \\pi]$. The following function can be used to restrict it back to $[-\\pi, \\pi]$ for plotting." ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "def restrict_theta(theta):\n", " \"\"\" convert theta to be restricted to lie between -pi and pi\"\"\"\n", " tnew = theta + np.pi\n", " tnew += -2.0*np.pi*np.floor(tnew/(2.0*np.pi))\n", " tnew -= np.pi\n", " return tnew" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Write a function that takes an initial angle, $\\theta_0$, and integrates the system and returns the solution.\n", "\n", "Note, the righthand side function, `rhs`, takes additional arguments that you need to pass through the integrator. The preferred method to do this with the `solve_ivp()` interface appears to be to use `functools.partial()`, as:\n", "```\n", "from functools import partial\n", "\n", "r = solve_ivp(partial(rhs, q=q, omega_d=omega_d, b=b), ...)\n", "```\n", "\n", "Some values of $b$ will show very non-periodic behavior. To see chaos, integrate two different pendula that are the same except for $\\theta_0$, with only a small difference between then (like 60 degrees and 60.0001 degrees. You'll see the solutions track for a while, but then diverge." ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXYAAAD8CAYAAABjAo9vAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzsvXmwbdlZH/Zbezzn3vuG7tevWy21hEAoGhBIlAXIQ8IQqixwkfxhUxUccCplBydOuUKgCBQpx2EoYgwBF0QgUwbLhNEYwiAwQmBJmEECCSEhqTV1t9R6Pb35vjucs/deQ/5Y61t7rbXXns677z319fmqut+95+5hnT1867d+3+/7PqaUwta2trWtbe30WHKvB7C1rW1ta1s7Wds69q1tbWtbO2W2dexb29rWtnbKbOvYt7a1rW3tlNnWsW9ta1vb2imzrWPf2ta2trVTZlvHvrWtbW1rp8y2jn1rW9va1k6ZbR371ra2ta2dMsvuxUkfeOAB9dKXvvRenHprW9va1p639r73ve+qUuri2Hb3xLG/9KUvxXvf+957ceqtbW1rW3veGmPs01O221IxW9va1rZ2ymzr2Le2ta1t7ZTZ1rFvbWtb29ops61j39rWtra1U2Zbx761rW1ta6fMto59a1vb2tZOmW0d+9a2trWtnTL7T9axr48P7/UQPHv0T34bj3/wj+/1MCbZo8/cQsXFvR7GuCkFXHrfvR6Fb4IDH/9dPbaZxoW8AwO6u/bRZ2/hA5+52b/B4WXgI7/Rf31EA3zk1ze6fidpt9YNnrh6BCEV1s1n37vwn6Rjf/Q9b8Pin78IH/qPvz5rv5tXnsEzn/roHRnTq972Dfi8X/0afPqjviO6eeVpfOz7/zquPTMpL+GO22q1wqv+5Yvx1jd9e/zvj78b1du/9y6Pqsf+4ueBf/VV2lF8tti/+i+Bn/964H1vmbXbHz92FZ//v/97/Mt3PQYpN3Nqv/mBp3FY8Y32PSn7Zz/6o/j9N38bsH9JO+nA1r/+rcC//SbgiXf5nzcC//D/fS9uvvX/AP7t3+v8/W7bf/Vjf4j/9of+Hf7Xn3kXXvlPfueejiVmt+3YGWMLxtifMsY+wBj7MGPsu09iYHfSbn7grQCAg8f+ZNZ+i//nC/HwW77sTgzJ2pXH/tz7/dHf+lG8ov4QPv6b//cdPe9U4/UKAPC3b/wUfvcDn+r8ffkzfxPlH/3QrGN+8vIhnrh6dBLD8+3oiv73M+/RSDDiSO6qNWvgmb/QP3/idzt/fsfHLuPX3v8U/vATVzt/e+sHnwEA/F///qN40zs+OfvUH3/uAP/4F96Pb//lD8ze9yTtLcUP4lvzfwf8yBdAvP2fdv6+elyvWp/60B94n//5kzdw/SPvwvn3/7j+gN1bTPr0tX28vfx2/NMnvhEAoNwVhBR6ZXYP7SSuTgXgq5RSrwXwOgBvZIy94QSOe8csXV0HACS7D8zab8HunGOQigEAWPjA1sf632Lnjp17jrlY8TW/+pW929XPPorja09NOuZX//C78JU/9M7bG1jMzj2i/73yMeCHXg78znfe1uGUUvjBt30UH3pqf7MDXH+s/fnmk50///f/+s/wLb/0F/jGn3qP2f5xveoAcOWgstv96aeuTz7lJy8f4Jf+7ElI43geu/LZQ0E+92hAPUqBPa5pmsOnP+796YG9Er9cfk/7QXn2zg1s/5KehAfsryQfxy6rcIEd4EHc8FdCP/Ia4J9/7p0b3wS7bceutNHTkpv/7hkB9synP4YP/9FvDW6TVzf0v2fmOfa7YgF3yLhGyCz/7HDsrr2Q9TuY4s1vwM6PvfrOnfxNbwB+8OXD2xR7+t8n363/ffyd0479xB9EufmKS7zpHY/h6988b6Vn7frj7c/7l8a3/4m/Afza/wTAd+zuz2P21T/8B/iOX/lL7OS6LNRRdWf44N//yDP4qu/616NUz8fUi+3Pz+aPeH+rbzyFnOnxZYdPe39LGPN+vyMrPLIf+QLgl/+7wU1eztr79/nJU9hfOaDv4GmgunWnRjfJTmQ9wxhLGWN/AeAygLcrpd5zEsfdxC789F/DF7z97w5us2g0KsjKPbz7zf8Ij33v6+7G0DaypNGInX22IHZn4rmcPHjvBnLlUeDo8shGZqz1gf73zMPTjv1vvk5z84E1JniZJqzzt0l2+Fz787obQOwct2md19XDyvm5Hj9XfQw0K/trYt7043qcIvj/3n8Jv/b+aastsku/8X34D8W34JnHhqmeZ3Ze0f5y4fO9v1199jMAAK4SFNXwquQH3vaxWeObbR8f5s0/jz1jf34hu4abx/eY5gvsRBy7UkoopV4H4BEAX8oYe024DWPsmxlj72WMvffKlSsncdqoFWz8wd0R7Wz6hmd/Di8TT9yx8dyuJUIvCdNy1372xLt/A1cev7dcKQBcT/0Vj9pQqVCixqvZp05gRCN25gW3tXvNtWPP04hj/+k3At/30PABDoef+1c8dAYAcGbRLbrqovRb6wlO5PsfBv75yzofH9XjiP3n3/MkfuFPu1TRkL220bGDnaobH3CNJan9OU1893NwU1+fx9ULscdvBHsqvEe+0v52bpHiXplSCi9gN/C41M/Tw7iGW6tT6NjJlFI3AbwTwBsjf/tJpdTrlVKvv3hxtJzwHbWl1EhI3TvGqNfCMWVcI/a0bBH75/7ON+Hiz/wXd3Vc1hxFRnj1jiNOQ0xQcPxw/uP47fK7gFX4Mt+mhRPNfS+1P379m/8YX/b9vzfrcI3QxyuyyGvz5J8AfJiX7awwvICbxD8++lF8Qc8EV/FW6ljzibJHB/HTqabsW4v5b0Ym9SoiK5aj2+5jj0blfb66dQ0AcLl4Mc6qW4OSxvt2i5kjPDk7qgUusH08oy7gkO3ifnYwacK8m3YSqpiLjLHz5uclgK8GcGc0gTNMiv4Lvae6/JySn50a4dQg9iQff2HutoW49ajqUgRHE5b+fy35iP7hTt+DrLQ//tmnbuC5W9O5asBF7PNem+//7UfxOx96tlXpkK2dIOzRFXxN/bt4S/ED9zBCpa2ZOnE4limNWJO8HNyODTjr+kCj/fXeI0ghgboN9Ia7veDMYtrAPv67wCfePm3b2Ikidv2wxgXcwjWcxWFyFvexgzjFdQ99ykkg9ocBvIMx9kEAfwbNsb/1BI57W1ZXq96/7TDzQjs3sa5H0NbdsuDByqQZF5vO6/Kmwbt+9vuxOr4TAab+h3V12A0YHU8I1pUwy9jkpJfX5lqef8mJHK02YCGK2AfsJ//gcfyPP/u+LhWzcnjkTCPQs7iDQcGJ9uWr38PF5tlZ+2TQjk2l40haESQIfKg4Nis2s7KqD/tXcHvlxB5BP//1wM/9nWnbAtMc+3GNB9g+rqmzOE7P4j4cYhVD7CY+di/sJFQxH1RKfbFS6ouUUq9RSn3P+F533qpqnqNeHx2c+BiODm7i0ne/Eo++520bHyOX3UlozP7sN34CX/7JH8D7f6GrEz5Z88e0PuwGBI+qYe5RKYUFJgQDHZtC73j2d95iTjZvt9CIDilmInZrIRVTOc+cub8l451hbpqQtJFJie9Y/wt87/VvnbVbbhC7YmMOV7WOPbBkfRNHqkR+VgflD2/5AVTmXZl7t6zZv3WAs2yFq+ocVtk5nGeHURrSXXHcbTu1madNNWW2bNHn6vjkHfuN5y7hEfUMDi49OrptwuIPain7Vx59pg61A0n49H2Pbl3Hpe95FT7x5+8cPvaAk6mPu/ru1fHwfaiFdL77tJd1MsdMk+GGIpa+886lYqyFiL2a9swdn0DK+mRcIDSQOCPnyfVys+qaws7TFizYNq/3ccD2kC7PAwCqg+udfbpHOWkbP+56X6ubruIcquwszuMQq9g9qu/d6uvUOfZG6eV800PFhFw6JQbVq5OfXZuaxjDjIQzewFLNp4gYBfGyiTwkgGvPfBqPyKdx48kPTz9R8LXqoy5iX49MmNUGfO782hzk2W/PGQyqYnqMVhcl6lZ2SVbFnzmllM5eNHYUUcHcMRQv9OqJs3zWbrmhYsZnEAW6H+EkkNf7OGRnkO1qxx5SMeFEcK+MH+gJ+po6izrbxS5bxzn2LWI/OWtMf27ew5mvV75SYA3NCY459qFgbJ/xAZ5/qpWgAN8MB2gcO8unO/aGqKuRF9N9GcMXjR93UV41cl099D0RVk6fDAixbwjZg/EMqmLIglRy+n7nYtz5EGJ3ElxiST9RhHgSxo1jn9nnviDEPsGv91ExZXMLR+kZlEutmqnWXVWPdyDXPvrbwI//VS/x68bRPIqv50RdO2wde5XuYA+rOBXTM3HfDTt9jp0NO/ajfZ+3WzHt/MYc+1Awts+orsrtVKJbqPkP5yaInde3H+gRq65jH7uumyD2+ZUlKVg38z5wXzVDwdNBKkYE+5jvd4ZFrm/d5ditrdtrGYtTzHXskwWMFrHPdew0+Qyfh7kce/CdF+IAVbqHxY527HzdT2V0buWfvAm4/BHg420867mDOyOIYMfasR9m51AnO1iwBlXl3PfErHa2VMzJWQN9UXkdl7IdHTjLO6VQMS3P4mMOaGYwFgDEJkqbkIphE5GQY+TY2QRNMVk71hHE7lFZ/rZy3XXszXoGYp9o65GArDU1AbEfD2Q4BjEKGms5hNiDyYAmoTOIAIMexK4AD7HHygBEVRj2AMP3cHBiNBMTxzwqhhD7mA2NrJAr8GwHy12dqNW4iD3A+R1ahqSkV9qMVO8yTH6BxrdLKh1LuokzWCc6v0S4z3lhkglD6u0u2qlz7LSE7HOq6wP/Ra6NYxcjs2sfZz9kwqR0b5qRuanZbNUZVIxdXdyORepj1Kvh67qJY58vTfU5duK9X8c+qYs1/fnPxHcLCkFVU4Knwl9h0T5no4jdvTaB4mPVxitiHPsgYhfdVZ77CA5KUE0FzLmIPaUA+MizzgAoFpc7FqqCzJbYMY5dVDMQ74GRZx72yDT5xJyFKe+qmZCPsUBlHLtaO06cahRtEfvJGQV9eE91turQR+xNop3f0LIP6Kd2hmwqCp5kMyaHxKCuZEZ9GTvW2+DYWQSBjr2cmzj2ZvLqKY7Y6Zz/efJB/cGjvxnfvQexD3LsHcSu97kvjYy5iU+mS7X2kpmO665jj3K6ZBHH7lo90LBDmPemmcmxWxt9TPvljqVaA/kOyoVGvMq5PkoNBE/rI8CgaBw85+1j7QQ15Ul9gGNVgqvUOnbWuI6dEHvw7PNKxwDknc9SPbWOvQ+xN8e+cqM2jl2OOKBmA8cuN0p6mu7A+7JlU9K+T0gWscdqNlDwdI7RfXn4mGN3g9ITJ6/58Y64Y39pYpzAUU99kwAckEOch9j19zsXc+xuCQLnu5/HoefYo8HTIcfOI4jdHVPT79gJwMxF7O15pqhiYh8rLFSlHXtZoFLZoDP2VsHu/esrDNcziU4en2MZP8QhNM1ZJfpf5Trx0iD2kJp89kO6cuTHN89rmWqn17E38aWXcLTWSklw49jVyLJpE8Qum2koeJJFjlH3aPUzMS9VHnDGOjqMge8SOQYbCcrWfP61aXriJx0LOXbze2Umk4swk/xhjzPoQeyDjj2oF0P73JdEHEuPs7kfN70xxYOnA6UaRhF7/6RA781cVUxrI/dTxX8RTaXpnHwHZZZgjaIVAYwZyQp3L3plGrxJZuqxJljeHOFAaYfOmQZPyn32E3Pt1kFex76uXmn7BNxBO3WOXRjHLntuZBjgEynNuMMOaBPHrjZ4mObw8et13DFkchPHPj/DNbTYi8jEMFLyaYFp5+4LjPebj9gJsT7IjGM/uhL/3iFit5mnA8FY3sexjyB2xx7EDQ95HlVdhL2qByiskYl9PYjY9b7NTB072djjw9DKHd1Nj0y+Q1rugDGGNUrbi4COy/poQKIAz75IO9PovZxIxUx4/gtxhEMsoQDUScSx0zH6HPv5F+NO26lz7NxIjVQPYg8duKKORSNLNbFBcLG92Zs5S94MI6+mJzCZK/ruM2idiZOQUv1OgYn2GOQYkpHruhHHPnmSDb+//p0mkweYefFEFW+MECB2qsce5dhJ4ibiHPvZ5LgNqtkDusdvx/oQu+7RCzHEPlhXPUbFOA5rSGLaIvbNHPt4jKZ17G5BsOMDff2pPPWalYOZ095pyLGfewSQ3Dpxn2PfQBzQ810W8giHBrE3RnwR7bgU1Ny/cumTOFRL/MfP3PkSv6fOsUtC7D2O3S1l6lrS8znZ3ULsrrlccsyh1us4Csk3QOw0Ec4p2BoGs1LHsdcmPyAZQ+wbJCiNTXgdiwZPlS64tWdqqK+6WbN9iD2sIw6grRwZat9Jx461384tLXuVGhdxw6NiYnz6YPZtTBXj/Dwkd6Tg6eYc+7CxnszT9bGmU1ITOK1ZidR5f7ohVxexm0mZKI6I7HZ68LQ9roxMkACwkMeaY1dAY6gYf7UaR+zpwVN4Sl1AEnt+TthOnWMXtDTqeWkS5wYrpaxzYiPL1z7OftD4BvSGs+2YxLLpUfLklNQ057wTJ6GekjYAfApIMl3aIR2pVzPE9/bZ5Ek2/P7m95pLLFCjYEIv3wEfsZuxh9ekGlCTICXEHg+enmHHQHmm/UO+7A2ePoTrHhVT8S46H1bFdJ9V91IMrZLImW2siplVK6Y1epZTo+Sq2QKp7N7nGI3jUTGA51CFKRkyGbG7719klS6kwo5a4RAauBBiTyJjDcFCcXgJT6kHhvMgTshOnWOXxrH38Yx9yzsmh5dHvSuAAWNTtbM9Vo/I+vocfzGzWiKA1snM4tj9bWPcfjqG2D3kOe3cogdJ9RuD60YqLnEGZoInlOdKNSljt4kHT6OWxhE78fm7OAYWDmLPl73O5gW47sn2Yucd1rEPP8uTqJgZiN2LC43q2FXUOZN6ihrK1KxEJibKHene0erLAW8rlJ3Pplrs/TqqOfbYCiu2AwWFJtHHL1TdVh3t4djLo6fxlHpgdtnnTewUOnbi2ONOMeXtDWbQS3IASOSws5iqGnGtXZ5txrHXPcFRsqYn4FtaxD6nvsy01cVQcNengPR2mRiZnObSKpizeurh2LlsE4bOmUCWu3ynxK4ehUuUriJpaYDYic/fUwFizxbB8dtjvo59QgOT858DIC5PHJY7xq7PNI6dnvM5qhjuddUa59hj5TYFIXYjFWySBfIoOIuUI6CaLLumVaO5rm4tqE3kjjH11eGqwR5WqFNNGREVU6LpTsCuY68OkNf7eFo9gDK78239Tp1jV9SsoUfylYoVatW9sMmIRGwjxC42oGKcB8vNBo05VN4jd7SIfcZ52cj3j1pw+Nypa0OBsTHHLlzHPnG8YhOO3eHZayFwtoPYHce+CWI3jTI69I1B1jvq2OfYexD7NXWmbQRz4WV2vGFVhCkJSi4r7fnBAbQvGyoCNj14Ws2IkzDH9bvBU8r8zgxi5+kCeYyKiZWHqA50YJqC0w46n+/YW4sV8VutDpEzgSbbg1KwiH2B2nk+zPeq9ttkJFOcbEvF3Kb10SCZWNnCX0opew/GEHsfZz9kyQZ6ctfGOHbZR8Ww+bx1MnEScieYcGlcRAqWJWqYFhAbrITkpunhDsdui3Kdi3DsNhAaT1CKglJC7D2Zp0t13CauAF3Ebsb2l/Lz2s9e+MXmGAKLAOUNTjLGsQtHsugOeSjzVAmSO05H7O5YJiSe2knW3Vaa1Wdmgqc8WSDvlKxuA6/+THULdbaLH3mnacBtnikFhbUixz5f7sgjVGhtuoQ1mR6nQAauEixYbfMjPKPn6qaWOl7aUjGbmUUBPQi0kGus0C2OlY44IHLsNhgzwRJDTczRprvbuoidRcr2ihHt/Zx1QrKBkia0Au0xyOmnYxRX3aVvxqxPrdBvXY59F+al3TWN1WMJJrM49h4qxuyzUGtf7pjvRFHkO+Vr8VH1EuBL/gdL3dSNQJn7r2ozFMjlXZ7cR+wDjt0i9umOvXLv4YRb2K4kHArHPMu5cewiW6BQA1SMN4ADPHmU4jcfNcFK57q2iH0+gIiVJalM5jrP9+zoK+RxKgZo6RijYX9aXdgi9tsx1uNQCrm2acDu0z7mgMix1zOWqGP0zpiJkUScjZQ6PUaIfZwj7f97GUHsqRpuZi1ndHlq99FjlRu2Rqq4xJImoZ0L+l93HPRc9Dj26BXokTtWRlpZyJV25mT5ItjWZMUix9fxfwb8rR9yzis6zmBQoRNF7BM5dpoUZjj2eh2PFfRbF3UTYs9NLXaRLvVkiHZT5uzqyx0PcKiWWCk/UKqU84xsIHeMUTHclKYW+Z7ZWmGNwqdi3FmUlDH7n4FkGS7jPpT5lmPfwEwwtMeplnJt68O422ejiN0UR5qxRG0ni82Cp2NJUWoMuc5YKaSTaaP4MZVSukuQscmI3Z2cJo6XvreYei+YjxBrLrFkZlyLcwBL4oguLCkwKHfsD57mEEghAbcoW77Uxw++s/JWF/rfiiss8vlUTB9iH9pXRfj5MWu8leUMjt393Dj2YmFWNWnRdmVyxxdphK2qAxyoJdYEuih46g1yk+qs3WdCrjQCl/kZu7q2jt19PiiecnxN/3vzMzgoH4JEsnnP3Bl2Ch27tr5g4AIr1FS4x7nz6YjckZEzmYFkxpxa3JyAUuMilu4LE+P9+wqDjRmNlY1y7PHPay6wQO1QVRMnzA2WyIrrYwqMIB93sG7w1EXs+Q6QLeMKlZ4EpSi1RhnMHbmjwJJoHxexZ0utWopIE8PD1w3vIPZBx27G0KdFH6zHzmnlNt3captjc7PqkTuS4y0XplpiVurJ0AQfh1aKYn2AYyyi0kY70WzAscdWxGJlpJUUL1FApXKUrPGDp0TxUTG3/UvYL14Axua1VtzUTq1jT3s446WqwNOWY6cbn400ClBi/gOfbZIo5FifxJL6tMZkba58UM1op5dO7dTUEzytal3EiThNenRHHbuYz7GrCNUwbP7SvxaBY88XcUQ3B7GTRUoKLGklE1Ix7jmikwUhdtlB7IMcO9VURw/HPmFSmNNf1K/lP4bYez7nKxyr0tIULOsGoxmUE3h1+PlmjTUKVITYY30QNpA7qsg+0hQcY8Wuw7EHVAwA7D2o/7WO/TPYzx9CkSZgm7ZqnGG37dgZYy9mjL2DMfYoY+zDjLH/5SQGtrGpfl264Bwla8AzesHaGzHmgGgFMOeW5Bsh9tZkrLAQWiSmIquS9Uhjiz7LJtJGfX+tV/olsKhJTZsw5QY6dpjV1TgV447WCZ42EjusQo0MSLMuYrccex9iHzgX7wZPrXyR6nQD+pyRc8QokFrIeYhddONBPse+eXJTzNxM4GlCAVMrxr0/fI0KOTJDUzATs7CASvn7uqb4GpXKoZCgZoXnxO3WG1ExEcRuvmvqdCeLcuzlGZ20dnhZX9ODZ3A9f+iuBE6Bk0HsHMC3KaVeBeANAP5nxtirT+C4t2UxGuT4yAQ+HMROT0w+0bHPMYvY59RfUT4SiRknCiLCsXv1Y2asFGisYy+mj+ScycZo6q0KwViuOKTsP6ZXymHqeIlDnkqLhRy70LRRRZPQRMTOxcD4aOyhjp1L7NjVgfPchYjdRYrtwPUxGuEh9iJNhlcPtixAu89Ujr1dccxB7NOpGEBZLbq3rWi8+0mI3c2+duvMuO8J4xUq5EgTpu8pIXb3rBtQMbH3j1B8vtgBqaUraCrGD2gzjdoPLwM3nwSUxOXshXclcAqcgGNXSj2jlPpz8/MBgEcBvOh2j7uptUG7rqOujjQ/JnODnJybmI8gy9axT3/gN6rZ4pir1/aytgmHRCavpidpaczyiVRMn+OnWh+V0iiR7kMBPuKENsjoFRMR+wjHvqbKfBM59kYOqGLIIrViFi7tQ0Y/dxB75JBSetmKRZZM07Gr+Os9RMXQtZ3DObrIdpTCUT2/yMYL9qbk2GufAo0lKDGh0f4Lzy80sODdYO5kx+5YLF9CGtpJZQ5iVwXKWILS2RcBt54Crn0SAPBM9sK7EjgFTphjZ4y9FMAXA3jPSR53E4vp0tem5rNyXzByQCOIfSyBKWab1GzxecERpxdB7F6BrBkvp12xjEa/4hy7RezkLOm6smZQNx37DmNGUlbJZj6+ToLSDquwNoWcpiL2QV7b7tPl2ONUTD/Hbp8Bx4m5OvYyG0Hslr5wEodcjn3ofmywMnUpwzG5rIu6vQdU1J4wgZkVjVtWo5efF7V27OeWWKFwOPZ2GzW57LZzH2KJcAYACJNxqhTJHQMdO2M6q/nmk8C1xwAAl9IXdfIR7pSd2FkYY3sAfgXAtyilOnUzGWPfzBh7L2PsvVeuXOke4MTMcLsRR1ytTE2JSC/QmLTKtcRy7NO9ZTtZbIbYO4Gj4OdYRcpNygsD0yehvm9C5Q1q69jpuDyekUfm3adp14lN5oF7OHYT0LS0UU8WaDixEhUzOPdFmlkvY1QM6d6F/9zFOHYG5WWejiP2ZnCcQxw720CiO6cshOo5MpPcW4ElBrF3ee4geCoFUsVRqQIvPL/EsYpz7LFA6JhFezo0K3AkUEk7Vp2gVLcTP12D8y/WiP3qx4DFOdyQe3elTgxwQo6dMZZDO/WfU0r9amwbpdRPKqVer5R6/cWLF0/itHEbCNo1RqrEija5gCxnAnLAAfWpbIZsoyqLjrmKkRgSilWkdLsLDTXFCG3yJORzQu15jWO39anN5zn4IELcpAKmLVMw1fdEdOwlalQ0CfVVWgxoomYSxx5TxZBjdxB7p8xvP8cO+Ig9T6dRMe7qz31+htD+Jkl1PmIfNm/acpkyUXuOnYKnnPoE9E0Y5npXyPHgmRIr6Tp2d/W7AcceeTYZX6N24kgKQM0KLFiYecqA+1+mG3984veA+1+GSqi7Uk4AOBlVDAPwUwAeVUr98O0P6WQsi2Q8NmuN2JNyt/M3AKgH0G5inOhUxC44b2u2bFgErM/ptYg9ovypw2DTNCtGYgzxcbjnpRoj9NATx96MOJL5wdPJ96KHY6+ERMmaVufdV2kxcPbccuwD5w1WUY1LxbiIvSehKWYM8NQUZZaMyB0NVeXRO+2fh1rjJRsgdq/Ew6TdWCvZbQ8CmcQQe/A8B/1r6b7JtMBemeFYFZARHTvbBLHH7g2vULOp9/aoAAAgAElEQVTSG4ZgOpmqfc7N2B5+rf731iXg4dei5mK4reIJ2klMH38dwDcB+CrG2F+Y/772BI67kVldeoQz5ybAZx174EiG6p+PFbMKrR4p4DXFxhQjSRSxb1DFrqmRsUg69KxjmDT/JAieMoFqoI3bJmqjNjA+GbJ7v2nE3qAhOeBExD6oiumTOwpHx+5SgNaxD8Q2nMnIU8VMpGLiqwCAD0wKTA5TkjGbU7unT1WVyMbLS2AmBiHq2tuyQ1VReYm0xLJIsUJh+XRvXu8pXfHpa0cDq4FIiQyx1pJK5xvIJNcigZBjv/jK9vfP+wpwoYYboZ+gnYQq5g+VUkwp9UVKqdeZ/377JAZ3OxbjzKloVuZU2fMDgP1OMVXCbD/N/LZ1mznLsa5OUa1+41Ix085bV9PH6h+y/YWaX4SOHRjuUZrM5NiVUkhG6s/0Hs8MvuJSc//k2Hs59njwNHpZbfG5bmu8OBUTR+wKrHN8BuUh9nxM7uhw7FlC0kKXium/zkTvDXXKCs117FPoPxVZayWKe7x1mut74ytu2v+3E6lB7Il27GsUAZ+ut0si5Rt+9t2fxpf/4DvxHz562dncWTFH3r9EVOBJCYb2usok15Sj1bGbjbMC+G9+HvjSbwZe9XVopLI6/TttpzDzVF/VmC6duMC0MIqE4EYPOaCx6o+hbYzYnTElIxx7TKu/SWEwSi6aZD2TBQXQVESC2JzgSqgRyk7akxe1zK/uWHOBAo1tuK0Re2SMSngJO5NUMUFgVytw1hBIWl4daB37YCmLOGLXVIzqzw9wAv1Z6qfvJ2z4eyQbIHYVKWY2sLXjm13Ezm2/YgBIDMdOkkO7aSh3pL9nJZZ5igaZrSXUGUnAs7/tw88CAP70U9ejI42tJjO5Bk9agYACoJJMUzEhxw4Ar/xbwNf+IJCk4EIiT54/VMxnpUULCJFjL50l8Uj9ZbIWJU5EwW73ow3pjRjVArRoOPZ32dOVZ8j8ptkTXsyIEWJX5LBUW/qAD0w2qZiuqACoqNbEe9E5Xhs8LdCgVi5i70mLN85ASoWBPKt2nyAu0hgqpk6WvlMKqZjB76KwcBA7BeCavrpAjnOmpT9diiJLhqmYmc85AK8Y3bRHnXUolUQ1UInj2I3ccbRePxX8ShfYKVI0KvNWQd5Zaj8r+6kb+p5/7FmnLaKnrY9QMbKCSEovHs9ZjoxJ1Hz42nHRTrR32k6fYzfXtGRNpyAWOfacHHvwFA49RGPlZ0PzuhttWI+dSY5aZb3HiKHdqERrxOYlNbmaDYeKIcTuUDG1CU7KgSSkuSuhqhGj0tSu+R2UGqFQMO4jdlG33W5cM/RdrxMNrYeKqdjC3y7roWLcoKKnY/czT+nY8TG05S/ChJg8SQbVPXPvh3s+bXMnWzovh3RWNFmhr4/k7cTnauDte0ITaVZiYRB7r9zT1HkBdFPqJ6/re3v5Vo9IIYLYc1lBpC5iVzZj1pN9RhKpGiGfPxz7Z5853G5Yh4Qc+6JF7D4XPIAsiWOf6KSHaJ2plijelg9wbCi7dpMyuM0MJU3fISW9BGmriqFaJRQAi5nPl09F7FM7RMU59kYYxO6qYgCnoTdgsZ5B7G7gNLqqsY4m0LELiSWrOvr+Dsc+cK86qph8zLG3z0WLEA1FOaKoISpmjqIqqh6Ztqf9KVW8bXACIDWIvSM57FAx5p5lC+wUGWpkXi8G73s4iP36UW17tV47ikuEY9LPTNWQ6cJjk1rHPgyqGrl17CdiHefK15CKIc397Ej75yHEPhMlev1KZ+3ZGlN8sFt8TPmjNkjRH2vBF5wh+rPlNaOIfWjCnHddq6alYqZOsiHHzqXqqmIAn2enLFETiBtWxDgm/OB1bWrF1Eno2ClByb+HytnXHbOrf7aIvc9Bi1YOGlIxecqGHfvM+wHAlrQGxu+JTfEPqJgUHHCoGHpHQ/6+o/PxEHuiHbtF7HqbA2Xur+PYrx7q/T73gV1cO6zttsrh22LihMI4dtc40+DLFrTruQZcKBvMvtN26hy7r3LpOvYKuY1oa3PohAHETrr4qbdlE9lhOJ5UOlprL5WfxhRZNvP5qhivoceEzMHo5/QyOaiLEHtf+WEgcOwTxltxiZxNdD69L5hWxdhEk06PU+XUculSMfGjkirGDbbqzxaoUYdUTGqu04QaRAwKWRLh2Plw8BRwOHbn96FJyt6POXEhOY9jb5tltBvniltFFQBkBrGT4qa3uqO5ZyxfoMw0FeMm7jEoHFHpCIeKuXKg35NXPHQGXCrsr7rvUpgAqJvJVJDZwvmsRexjss9GbFUxJ2I8cNRMVKjddmHBUzjogCYv/7UJr2bLZs0vNBUzF7HP59jFHMQemWAA2IAdaZEZYDnsoU5PcxFibaSKZjAT9/I5ds4FciZaKiamUCkCxz6miIlkntI+JWucxC3454zIHe3hnDG7zRnIsdd9mdJOQJb2s8HTEankJhy7W+JhrFYMLGIPzgvuqYaywiD2jtzRHIUOYK53ki+0Wkhl+pmS0p7jSBlHXLWOnRD75z+opc/k2JUHrPx70wiFBRqo1ElQggI3z7ngw5M0l/KuNNkATqNjd/W6ARXDRIUaBVjPcmiII2sldlNR8O1z7KlLxUSKb0UR+5xAFu0yo4hT7yqgU3FRgYMce/y6CqmQeRPmFMQ+J3gaPx417rZUTCxZiDTndYxjHzilbACD7okDLzHk2MeLr7mUCgAUqV7691ZpdCaokNPN02GOvQUwMxD77GfO5/2V0hJWVxVDwdO2VR/tGtRyN4g9yZco86Rd4coGSukztYi9pWJuGUf+yH2apjlYd5+pMIZVmS5hmILYY8FTvuXYR+1g/zo+8I5fHmwFF6pcNGJ3XjClAKWs8mQoCBQrUTBkMpIkMclcba8Sg6Vps5iD2wSxz6Bier+LcVC0nE6gLGLvW6I2Qsa/w4BVXM6eZMM0dEKYthFFp24L5iN2dyzmOISMS9T+cwcALAFYGuHYXd25i9i7VMwUVUzLsVPwlEEqPanGbG7MAwi46JFbQg2pVRDzyCA8jj2nRhad5zkoAmYd+0KvRsixO/sdRTj2w0p/z4fOaSd9ZH53/UnYVawyNYZUvrRdkBScFoQjgXCdoLRF7IP21I99LV77rn+AR9/ztuAv7UUNKx2mYm2Qk/+16caIAcqAkOVUZzJE60y1VHEI2wWnG7SM1ZDfpPbK5mN1pZkNJJjXh9TKCXsmGy6Vr3CZomPncjpi947XvlDMIPaaBVSMy3dbjn1lx2oPO/YMUAejIcTOmD7vxFoxRdalYnpli6Kd+IoIx673jUwKSs1+zoGAi570zPnOjQv9HCiHisnzXPfPdaSLfqMN2llf67RcoszT1rGLBspIJA8jHPtBxVFkCS7s6vtCjt61ME+kajhKxm25AxqXBV/eJN114DpBaYvYe403NV7JHwUA7H/wrYPbuZaIGtx7wZThgg1i5/38YjaTY3e7r8xJz3YtBYdg/WU+ozXkHUcx9bSeRHIiRxo5SEeaSdxjn/PiQs6+rpXhx+eZv/Snks42QYmQovtiWlWMj9jvwy28cv8Pu5OV69BoReBw7Dx07IBx7HFVjB526xzc4Gk5EbEDrdyxVcXofXkMsW/QFg/wHeDoM+dVB9U/U9IZcxy7Rt9599npkTumxLGH6Bm68qNE6iP2NceZMsNeqbcnx+5O2iHVWa1MvodbzM3RsQ8FwoVJcNsi9gF78mPvtz8vbn2qd7uQ506lqfMQPBx0Y/qCfIJzJDO9s/J46znBU1/bS8FIFQlaxpCrq72dKgfcFLF7NeJNazOv4iOjJJM4Ym9EyLGPW+UET8dRpfN3557TNeqlYlRXFUMc+/+W/RK+8YnvBD7wC/2n5V3E3qFi6Lw9k54KYiquQ2jljn3B07akQKuKUd6+TWxSGCxv0G8+sh1/5jSccoPZXBehS9trlKfMJBv5mvRQUUPPblGUyBLmO1kH5VfJskPF7C0y7C309pZjV/2OvTH1nxLHsSuFNg7mXofAxxAwuFsc+8SmkZ9ddvMzHwEAXMF9OLt+2vub+7KHuvRM1uCJU5lNKXhBvh7E0jRVJE1o2DbRk4eWjnDsKVMQvEGaOanYssZa5ViwZjIVo2IFsPq27eFmmdQKHjdx0iL2ngmTyznJRtqqOVSMHZzvDBLDnVqFVEyhQj1JKXhquNcvSh7Xnz/zweAkLmL3HfsCdZeKQUDFDAVPGZAmXSqmF7F7JQWsfMP7PZpJuyFi99Qjs2I0+ueGEtgcxK77l2Y2+zPWVQrQ77hSORZFCsZYS+cIfxVRJUssHSrmcM3xV9LHcPaaVsVYxO4ML4yrNZWeGFixdFQxsP4jGbiXtELaqmIGrLr8CQDAp859CS6Iy73byYCKyVQNkRTdh4MNB08pI7VTQ3rI+HyuO9w2h1+jmoxBoVapGZs/gSSy9iSdk2yDMgSAvyJgqoFgqYfYZQzJuKflarom3Zjv2Eeua4RjF1IhNy9sR+4o3OMyjdoNYq+5QgKJl7NLepPLj/afi4fB0z7EnkWoGL9oF6CdgZt70fLkfRx7JHg6ZV9nLJOTvxAGXKdx7O5WRJmytH3WGdPom/W0pKT9RVOjQWo7E6mknaTdc6zZwuPYV+tj/PCtb8PiLV+NBWtwuPafqUrlHcROZUJsEUHoCSeK2DtxBP0sZFuOvd/SG0/gKs6Dn/0cnFVHPpfuPJAycFi5rCASN1HEIHbW5eVcoxoQDbLpQSW+RqNurw2W5tiNkw4rURqUUFURx442rX+SzSocNoLYnQfaxi5E3Hk3MlDFnHTwtB0dncCWEwAcjj2mimHMq9POpcSDuNE2Tzl8tv905jgNl0ihYwJNWFKgEzyNfHcDQMKKgETL8D5FWCRByf6enTwVk87g2HWzDNpYby0MCGKpf40a5G0WKXxXSe+h4DqJb0EdpiKrLwWGNfOpmEcOP2x//uL8SawbYbY1jh1ZR5zATb5HUux4Ey3FlpKBPgE0kW4R+4CdOfo0LuePgO3cj4Qp3Lrh91Al+WLI7eo6D0U3/sJIMxt/sLlBYLG6LX3GeNVyuBtapoSXjWePDWVReZjhmsraLg0nm5hOxfSZbpTgry7sOHqDp2o+FdNwu884qnQ5dnNOqQuAAS7H3lO3Jd/1OPYXsmsAgKvFI8DR1f5zmeNUQjf08M7lWlQV4wc7AXTS0FuePPL9pQAlxMVKChQ2eDpGxcxB7I5jn0r/uY4xgtgBDQy67R99uaNsKnAHsbfF1UjHrrdbsYXn2F9UPWZ//s+y57Bq/G5nNfJOVzF619LC4djRrvjZAMdO13ubeTpgF5uncLj7EmRnHgAAHFx/zv5N1yihVHbfses6Dy0qYEqBKQVJypM+x06InU1H7ExUqGLL71Fzgjdwmw/EETuv/O+YyrrN+JzqpLnm5SeNjoJWAS2VKN2M2EUy5Oj7mk83HVXM+Hgb3swOZLscOxdaiwzEgqfBUjpfeqqYFzHtzC/tvAqobnVruNOz5QRP6Vxdjt2cV3aDdt4YYKgY53JbOmUCT04ySXKEhBjr6KQwX8MO6P7CRGuN3Rrm/J+MyjpTn1Mygdxq5K2TpgQlcx6N2NMWsVuFk/teMBxj6VExF3jrMx5OblrHTsOvkeln07nG0sRb8nLHb41nniPr2CP3kibhbYJSjx3euoEHcBPivs9DeVY3xT666fPsNjEmQEO5TQf2v7ZECq6SXscuGv35UHp/aInJcgWwMQrOILzmA2Ruun7IsWcqopkeMT9xayri8i0xXeYV6y5RVc8Sn3cyT8eNO5UiRxe1EY69FhKloXL6g6cEb3ec4KnCg+wmAODpxefrvx85K0Wl2pozwnXsBrGPBU/9M3sWInZyztGaL0GdFOJ0u3LH2KQwP2sZ0By7zeKdpIrxf6L3K8mCFR/LOlrysHiYEg0alTmIne5BbXXsacJ09qmD2C+K53B18VJgeR9eyK5bKoYGV6nuapMS+TKnn4NC+y4mAxw7TcJbKqbHnn1Cc2PlQy/H8px27NUtd1msrJY1rE1eqhrKraXsNtlA2tt/kzjAUM43ZImMKSGmm5ISGZM2zTpE30RzhGUQMtk4yp9pL6eehCbSN1QFD8xbvSSygWT+9SFVTF8fTW70yw1RXBMmQL/+z1Tn40w2Qtkltn15Y6oYRsFT/TI3QuICu4VGpbhWPqK3WQWdd+g4hrprhMSCDSF2V8fufxfloNMs9cvWWZ48lmQUgJP+4OnJqGKUUsgUbxVQE2I0DL6DppV1yLELh4ohJ90exfwranCkbfXLSE5CkjAcqdLWiqm4wMO4gqPlC4EzD+Miu4FV7QOMikCZg/ylcex5ueOECZTNNWmf84gqxkzC2+Bpj+1f+igA4Pwjr8Ji9zwAgB/vtxuoNpU9VLkUaKCyRcB/GckVst7gEQVPh0rohpaIyklKma+KaWzjiu45E9YWHgq7E6UqTMKaNlaLKDfgSAGiYvzJQSKBBOulYmohkTHhZauO2VAJ4Ngow9+1Y9cvoE1mCakYC2+XQKNRXiMU7sctXMcZrBOTvFQFnXcoI5F08kOInbGojr3TrBlA0cexR5UtwSo1QIhDWatujGkq5aizh3kbp5qwW6tFN8cwE2GS+c+PYHm3S1ggXYXQwVO7qnEmadokZQn21S6w1iuuo0rgEXYF690XAcv7cQ6HHY69LWDnVEs1k7zbzwFoV/JeAbUeHfs2QanHaiN1fPhzX43lGe3YpfeCtcFQr9JeXekkiDxUxQBgDJxlvciSSg0Ilk9+4FNZo0k2p2LIYas0PjnwhBB7MHmpRks6Z5xX8/Ll+Ibo5+0TxXWswpMuME3H9FExJnhqHeyEa0srFIFkXq0Y1uq3SWLZdezutfQROxcSF9gBrquzWKemGfr6Vru5R8W0csfWsUeu74COXf+qx5ymIRWzAWKnWjGkY4/sO9TCsM9qLlGyxiv+NmTMVOZSzrbSOnZ/8pMsi1T/DKkYLXekVUy4+mIAkgS4Lne1+qs+xtGtfdzPDlHvvQhYnscZdYhVQ42o9ZhoRew233Eduzu/WB37QIyCrnfY0epO2fPOsWc3H8dzuIDl7hnsnr0PACCdF0zzz35lOACoTNYYyxZe5ik5B+4kQ4RGznMOsqQs17mmOog9TpEIWyo0oGLQQMw8byqrliqYjNh9VJcqHo0HCPRPmDpBiUPMiF1Y6ekUrX74XZQyk0no2Ps49l3LyzZS4QLbx3WcxYoZxFY5jh1w6rq3HPsCA+NN8l4du2t54gdP00TPU9HepUGmZh8VE+Pnfdlw99Axawyd5ib+jZv/HemepqFjTxzHbsfjl4eA0DJbW4Mla1dftEuSJNqxA8DqBqprT+jjn3sJsDiPPXmAde3LHe2K2IlhUTZ5uXA5dmVlvclA8JQSlLaIvcfOHj2p5WYAynKpE3UCxC5ZCqmY19mlJsfuInbV4gY+4IAklaRNckx94nWWa7xT0xSzXHKEigFaxy6DmvMFGogelN9nqTfWYWvLI/h4OVWUTNVN/kpUfMKkkgKx0sR9Jq30dPq9gJPC3jit9ax8lSZP9/4zBpRnrfPmQuJ+HOAGHMQeUjGpz8tWBs0CcHILnDENlBSwY0A3eAow5EmCeiDJSJpXO8982iO35Qi6k8JQEbw+o7yCWOmLuKnOz9TXNMkjiD18J0OtstSKHPqelqd3yiqkjOGqNPdsdR3i+qf1386/GFiex450qJgBx9429Vha9ZdbttfvQdxDxTyfOHbG2E8zxi4zxj50Esfrs6au8JLmcRycf4U+b5LgiO0gcWRMLmeunMBHbZILNGLvfm0R1cyavxEVMwNZ2izXDU2Yh52oGNJsU1lROjYPEHuumjb7bqKlXqmF6Ry7h9hBHXCYs80IYjdUzJzYBXHsfG52rRmRVuIYVQw1Ck8SPYGGtEh5Rjtvg/QvsFu4yc5hnRgd83rfP3zmt7trxJAqBoPBU++wqV9bBdCUShSxy7Z8MoOySLZTKybm2Jv5HDvV7pGz6D/mB0+pQmMEsVNWa7hCdEswc5Vah8k8jl1vkyQMV4RB2asbUPs6ezi7/3OA5XmUam27rdl+KUnXsTPbX9WvFUMZ1jk4pFQYCp4+31QxbwHwxhM6Vq+97xe/D0tWo3zZ37CfrdgOkubQ206Beb0PgbavZ5L76cDamEGWccdOVR9FMl0Vkzua+Tnp2RYx0LI4jTswepHcsglKacUHnXeqjl1PQqV7+n6TKrpZqjgUy7zPGZguM9Dj2KkeO58jlROE2KffC5dj5zHEDkSkh0w7diWB+giCr3GGrbCfnNerm7TwqRiFKBWzmxgn31u2d6C6o6NjD3fN+hpmCIoHaWfTre7YL5Uca8YcM6rMOB3EqM6PJEvuOHaWd+vDB4idmaqiNGExQv3cQewJw1VhqJjj60huXUKtUizuexgozwEACmF8CHHsJibixh0YX+tnJs28DkpgDIJlWuFFMtLTkKCklPoDANdHN7zd8zQrfHDxerz6y7/efrZmS2RNF7FzloM5iJ3qPCRFwLFTWvNA8JQevBiH3Ge5rCGTcl59Gcfssjj1l7g2QYhkkM7ymfMGKVOOpHOaY89dxz7RFHwJXqZ0MpX7PCvo+xB2oiFrOEfKVFtTZsp55yiUIhx7I1Q3eAoYWiQY5+Ks/rc6QG6kjbeSs/qwDv/eHqOrY99JKMt1pLpjNHiqLSwpAJhOSNHSu22LwoR1svdtkHGcipn27NSNQMmcfqUTwIQKEDsBpzSgYlSS2SbynVtp/mUhFZM5iN1sk7AENxVRMTeQHz6NZ9QF7C0KW545F0fecWkF6/ZBZnzdkQVTlyaZ5JpWFCp6DWqboHR3EPvzqrrjX/37P9T5rEkWSKVz8ZVetIVNbQmxuwV82tg8gxhwQLREpeXtFMvRQBoEN94HsmvSplnHJxOiaFw5Vr0+1sxzOo+KyU2pBXPmwW3pmY11mZdJ7n3OoJeprKcrD3Grszh2Quwst6uHcWupDC51tqtA4qOqWN2WsnXsRaXLCewzjfB0uYGgS1agY6+FxE7KARXTsfclKDljcjj2kFrOUxav9+JcHwbVKVE9FDzdiGOnID89jyPb+6SSASlmzFnEsSdKOPu2ZXvpPSTETlRM6pQUoPOlCcNNtBz74vhpfEo9gNcuMqDUnxeC7iUBJ0N1OlRMKtaoWAlX7EjfV7JcB5HtdY0j9lOXecoY+2bG2HsZY++9cuXK+A4TrUkXyEW3RG7Dcq82ObeOfSfAmi1i76ViLGKfPg8W0MlQs106LQWp6UcQCA0Ru6vrtjwh6aknUjGFaiDTxfiGA5YpAZXkHXpERCVr2igQOue62uSfSQlVca4zN/SPR1WFTpYZKgYwjv0GAOBmcl4ftdjxEbtSDr1ieqoKiV0TPK1iqz0veBogduf3UEnBoB1EvFmGI81loQsd5tjdFoZTn1tyfGpGjEYFckdYxO4/gyopkKuwybRPLTHJ0SCz3ytNc0gwUD12QKtiKhRQ2RJY3cDu6hk8jQtY5qlF7Eu1AhcSytTZoffLVZ0lYWtN8xUY09sXlorp59i7gfA7Y3fNsSulflIp9Xql1OsvXrx4YscVSYlM+tmICkwjFgeB23Rgp4BP+3SweASeNuPzEXupGqh0noN1TdqKd8OI3X0ZbXmBbB6tkqN2JoPhbUkVQ/mDZClEN5nKXNe0Nz+ArusMKkYQyp9+L1q4q6wqhoedqRKnhK4NnhJi30dZayrmJsxnTh0Zz9LSHqfiEjt9HHt4TjtCLxEAgEHswa5ZyqJ0Cil7uKlr1OqtiQoYcuykqGGTry2pt+wqcWQ3t72dPS9x7HlAcySZ01zb7MW6iL1Baie/PEt1UJxKCjAFAslicR44vIK9+gquphf1xFfoyXuXrb3rSStYt96UlgWbuFmwEpJJ5iP2e9xo43kndwxNpAsUKgj6MO3Y3Sa71E0pK5dAZNYUSSRQY4zkjrEs0JgpaWRuWdlxgBP21uMx9I+N8luO3TjWxJd1AS1it5LOGYhdpfM5dtdyNEBSdD6XgyshU+d+cjo6HKphQkE29/tT8NTUpxHwA729wVMAqA6wNI79BjuvD5vv2joy3tizwgueLonPD4usEbqXpiHKwL2Kobw8SQZ17Dwo70BHbxOUuueTdjU0faK1slxLO87pFkYH0c9HXvjPoEqySLPzIONZcnCVWYeZZ9R5yS0pYOin8j7guQ8hgcSN7AX6jwax72KtG5fYFbEei2h8KiZM5KOVhEpyZExoB35adOyMsV8A8CcAXsEYu8QY+/sncdwpJtIFcsex2zrNQTqyoKyxwu9XaBeFLPNTgr2TELIsJikxKkP7zEXO3ikpqp/F+XJFn3vZtea8M5y0khIL1kDZdl/TnKUrP5PGWao0DJ4yT7IWmnBWQpONEHtIxXzqj4AP/cro2CmhptOZKiY9dBz7ormBBhkOiWEtdrqInTGD2B3HnjSokUNFJLZW8SRbVEpXX4eKDAoNtM+MMe3ABkoKcORaDOQeD8N1Zuh+zFEcNZ0M6TFzKBWK15jrnmUhx57bInFhdUfamSlda4gmrDxJdKVJt6SAmRjr3RcBz2lF9n7xkP6j4dh3mXbsNoYUQeyZk3ToXlfGNG1UoHHosXuL2E8keKqU+oaTOM4mJrMlygCxK2jH7jpq6VVmY53tZZIjVfFKg/TgqR5aJLRqvcICGjkrsA2pGIPYszAKbx5oUsU4yIR3JJ3j563rNUqgU4BpzBRrX8yGWtwFwVOAJGtxGR0hRDFDUcFkA7BAxy4l8Jav1T+/5m+7o3T31GMVCjnTLQeV69tCVQxjrSpmfQvL5gZu4CxYokN4utzAJedULmJ3i4Dpapvdr8ba5DPZYOhe5Wl36Z8lfXJHUvzkwcvdcrx9WauulHTqM0uI1gIQdz/lOmLHAudM2vs0D55BcuyRKp3WaZs+AHR98lQ3tJBAanEAACAASURBVHZjT4mZVI/3XkJEGm4tTSE3omKwRsUllgT0SDLsHCeXFUQeInbzb5Jpik/EOXbbaOP5lKB0L01lSywijkMkudeL0Ta9XfgcOz1ikmVI0UcZmOMk+aRa4HXVli/YNHgaans7mvQ001JKV+5Y00s2PRBarQ3Kpwd27IV2tP907SggydIu0pPJwHWlJKwZwVMq++Cl6K9utD9Xh+iY40i40c53Araxui1Fi9h3mhvYZ2fb7fOdgIoBQqVL7Tj20H7/o8/114GHxaN6aBEqphjRsXeoGKJ+B7JWSTo7J2HM1iqyORv612c+8HvAd5/HwWc+7G3PnBWfPS9liaYhx94tDxCarlHUjjfPdH0i5TTaoOt3cOZldrvDnRfrHwq9AttBpTl2mmvM93EniFzVECZu5sYuGJihjUS7igp17NsiYPNMZQuUqG1GpjYjX3QoAGUd+24H/QBML/t6KANYjn0aYifkzGYg59DI6bFgies29Q0rUlKCSVJM59gbZxIKx/qxn/i7+Muf/Afx8bnH4EKXGO4sx/V1HYtdtI5keLxSKsvXC5djd+ui33zSGWSXY28MbSRZFlHFBA42zbQDr25hl9/AfnJOH0YhQsUQhCy96o4L0+80lLx+56/8ZRuzGWlwEQZPGbSDGKrH3hCdEkHMWU/WqrQa+BmOvcOxa7v6Oz8AAPjke34rsleA2Om6h88PrVYlSRfbwCvd+1Q17YoPesKrVeaJCohjf+YFXwnku3hr/jextzT7mOd+wWpUjcOPE6ByjqMdexyxIzFyRymjj/HzkmO/l8byHWRM2qJZhAhkkiNzEDstqcpFwLE72/c5IFreTqVibJZrsUBI+7z7J/4h3v3mfzR6DELsbcU7/2lh0FwicxAFLYtD2dikseYLL5mKV8d4xXO/hS98+pc9BxnLZm0czX2nEUKSIRuhuKY6EspyBALEfuzU4zelWX2z8Apc6BR4EU7SfdLD8iyw3sdZfg3Xk/vbz/PAsRPtEARPF0z3oO0m2DAcNGZcoulMwsqhMWLOIO9F7I5jd1aX7tGzhMWlkrzWDWdmqGII0YbPqT4OIG48GdvNUJT6Z5shHtwTlrRN5m2CHnNWNEqZ4nMOYk8Tjdh5beNAhNgPs/uAb/8Evpd9M86UZh/GINIFFgaxK3eCBryeDrmqLGK334M49jT3EXvwHtQm52BLxUw148TWK9IUKxO0K2zWGgBbwKcol3HEnuaRCLw5IiGGiYid1CkpBSTNvV6vjvCG534Rb3j25wb2JiqGusqEHHv7Moc9IQk9tUlYUxB7sLowL9C1Z9sXcv/q05FRtmofm4qe5pHg6cB1pVINPQ27Q6ucRtZ6nwhi9+q3dLlZLhzE7h48pmMHgN2LwNEVnOPXcSO90Lq8fKmfqZD/dRC7rqPS39HqgG7dSDPoeObpcPC0Nog9DJ4ypmuyxyYFaloBNllIaoOLSU5lLPTnS6HLLSSra5G9gu8jG50wFjq9lEpTN529GJQNOrvBd+3YM/v+AC2VVXEBFLs4XHPsle1kILMllqit8wXaicqtEFuq2uZ7dO5IkiFj/Rw7lxJpwpCcNh37nTJmOLL6OKgXk+Q2uQEAwNeoVYYkdfTLyunKMuCAIBpwlVhlg+rrDk+novIFeekh2GvPfMr+fPPqQJd7wHLnaQ/3rZhRhjhOQZrJK5mF2M0kVPjxgJvPtmO9ceUp98zm/w66J8QeCZ4iyf0J1jF6+aYmKFVc2DovboKSPG459oObkeQ3V8duMk870lU3eOpeiL0HgcuPIgPHfnpB/5lqryvp0CiqPQ5vE5RKS8X4pgAc1g5ijzgD+iQLep4yNgGxqzSQO7bH7w28mmQfPSFMROx2ZUnPnD7uLtcrp6zyV1D+cU0kQTbxtpOGmuFN1e5FiF3BTmI+YmeoLceuTOapfm+rRkJIhaNaYG8ROvbKqGIMxZMmqFTmlSUpUUNlQ1SMaFdCHY5d3bXkJOAUOPbEOPZqTY5dr41kWiBzHDvja1TUdDaQninGzETQ49hN2nI0wh8xCmK2yFk/7Def/bTdZt9zlu5gjOOkUqahBMxx8Jz5NeQlafXNeacUAbOd10nBYx7V1fUWpa/246jL1rInx5515aAUVJLRLMl5HHvNJQqjC5cstec/PGyLcR3fckoWxXTsQqGg2ibu6ToldM032XsQuKnv263sQvsIkCPjTtYzY9rhu402VNWL2G81FKlzYkFO8JR8bxblyfsyT6lMcAYwN8jXfqs+fl4Jnewz9TkHnNIXgVrkjNL3pGj2O/so5teKYZL7Bdnoc6qwGDSTcU6u/3U59kwjdpcbJ8e+bgSOan2tXcSusqWmzERLGWZJomWqlB0tlW5MboOn7YVlAGBW/NEJE0aNdZekjsApcOyp0aVTvXVAvxTKBDPIWCQd2HV8Q1QMEz6iGHOYbparQsv7r2+0zvLY69PaNUKzrQQsPCcDh6/VpziCbbY7xbFXrWN3rVm1L2R12Dp2FanuSIGqTpYsA5AWukvSQPPkqcXViIrRNEobUFwftau19UGsFp2zuhDSUjGexWrFAMCZF9gfr+YPt3+1jt0gOqu/K7zgaU5UTORWHLiInWSsjk8lv617nvrOVlMxPdeUJRAq8fbI6ls4jwOzb18Bsdo853M49lYxBuh3Q0mBs0pTowt+EOwRQeyijitxMkrrN88Xa4OngHLyS9p9s0Rz7KSkYVA2RnFUCxyu9Tt+ZuE69gUWhoqxiD1hepKje9k0KBlvM7SDb8PS4SJgXMq7FjgFToNjL3XmWLPWD5K97WnpIfaEV7bCns+xm4cryVEwEaVZmGxMCvq0GxMtXwBArFpkWd2KoWBnVJS0ERRGQoDY3exaCmRlxXQqhsaaFktPc6/W7QvZHHadpU/FmPIHWd5BeypMtXb/5pQHCL9bzKrGOPYgw7VeH6NRKQ7VAvWhI30MnZNSaKSuAd9x7EnebbQBABdebj+6UrykPast+OXWKTKI3QmeFj2IXYFhxc3r53HsLdUgqAxA8JaSZDFOpzRAWkAo92lVeONvvQFvK79DH6+vlruD2CenXhiqQjkry6PjIysL3pOhY9ffQAc/zW+SR6mYJHUQu/WgzvMVUavlKUOjUhsXA4CEMWQJw3HNcVgRYnfARK6pmMrh2LNUI3ZaEa8JOJq4mbcSMv1rNRXTNqJxrRFyi9jnWFrqC92sXemZDoYWDgJPZNX2ILXmI3bAKb7lWvDgjSF20szn5dJzQG4Lv/qwz7HT8twg9qwHzbKkk11LiD0vJ2aRoi21kAb7uI5dHrWO3S3GZLN8iTaKZR+65UzDryBbWmWK1QZtKwrSUsG06ghrFFihhAxL6QLmLSQqRpoEpTwInkZqxQDAC15jfxT5TvvnELFH5I6NUMhVHZU7AsCRpCImLcfuuoNWItd9TfOsR+4oGiDJIRUVx2W4HwdgUHiI3QSUGOTYueHmp2JLS1U4RcDWx6adoEqxxMrbPrYSYCqSCQzYpCe/r6+D2GXEsWeJLSlAOnbGgN0yw1ElcGAQu8uxs3wHS2aCp0acwJjv2KMd2NC+Dyx1dezd79gIFQ2C3yl73jv23CB2XpkXmpa0aYmSNRaBJ6JFTn7PU/OvDdR0+TyLKCZyj61j3/Ecu3Jaqcnj4fL1ykgs00Ct4k4qfY7dS8KaPNal/zjWB1gpowxY3+rs524rLMfud1ACEoNkeJyKkYEqZmQiqhqBAhwqCNIKcuyqAGrHkXQmYF2PXXPsQ1QM2u/xgi8CvuK78H/u/hNkSdI+O7apRsCxO1x9zSXynkbh55Y5jrkbPKUROkCAOPak++hlSRIvAiZqIM01jWP2ucjaAGaxvtKrqNEFtaY/5wBskN/WGlJAvdLU2A12DktVde9DkHmayDranYyoPcHrdmJsO1xEEXuRtlRMawl2ixSHlYvYnfMVS03FONeTMS0ZpRVxTYwAIXb6BmZlxNICOeMtYg8uIRfyrjXZAE6BYy+W2rFLkwVISQy0NCQEnsoKvFNy01F4mIeorrtZrIlsIDxUOQ2xF4SCCQVUBzhWRhYWy5B0radGNRkDIJKgvg0hdkMBTencJBzHrgdmXrb6EIdsF0eqDPTabnVHcwzqMh/T+ZNjj8rr5qliSMeu0sJTbsj6GCulEbuKVVx0oojclD8QYYKSR8UEQdev+A78Ufolth6Jz7Ebx24TWzQVo5TS41U6thPeip0ywxHp2KXDsduLA3DzWdgnkySLvYjdOPbEbHuRtfGSvLppAq8RylFokYDzLUdNSb8eO6BQG+nxQXIOCVNoKre8Mf3TPj+J7EHsVu7YdkOKcexIfR17A+ra1Z5lt8w0FRPh2JNcO/aqaTl2WyGWVl9ratTjgyYblDZUTNPDsTdSbTn2OUaIXVT+C00InHqdZm5fT1cVQy+UXfZ1HXu4VByjYijLNV/seJ8n9QEO2S5WqgCLUQbOeMjJtFQMIfb2hRSs6Dj2RqW+pHPElLO6cGFG2hxixXawZgskTXesfs/KMJnKGNMPfMoUOO8mKZEGf2qjjaqRuvtRmAjVrLBCiSYpkfCg+YU/aNtntUP/uFQM0EGtxJHaT4M2eCCnY5A/ob/MlHoNv9lukeIwgtjd87qIPbQs6Queuhy7PutFtIg9W9/o18AbB9uRrA4Ys4i9jZPURqF2nJ0HAKyOQp49QOw9VAyV0xBOQS8PCseomJSqO/o5CTtlhsNK4LDS++w6iD0pdrBkJkHJmWC1OMGUWViTyGBpj0nfgDHtP7KhRhtC3rXkJOAUOPZyR1dnax270tlp5sWjsqKZrCLt35ybMCCtYpLPamQdz3IFMn6IVbKDFVuARZyld05Ray1y37KY6eQft+sTE7VXcnUK5rKriyCpKeNHqJIFKrbwnKU7qZHjsNLMvOw4REJdTayfpiCOfZ4qBmnhVS5M+AoVSjTJAokXzKRBtKxxY+radDj2xMkJiCEuoZz+oWpY7sgry7VmskIdoWKWZY5DWiAYdOmagrLB01itGGq00QEZUiN210GdZS3oyesbvRp4pho7yU5OUSLEnrQlBSiPoyrvAwCsj1oqzz4zTuZpoiKZwGifHenGvdxLYWvMtICCEpSY5G1FSAB7ZYqjirccu+vY8wUKcC9BCYzpZj3m+zUGiCVliNjN5ESqmJ5GG41Qtn3f3bDnvWMvFhqxh0twutmUgJNJp6+nx7H7iJ33UjHTEbub5eqin5SvUCdLjYJ5jDKAh9i9utj2nO25w2a/WtKZg81BBpxWF8FYZYXGOPZUdMcao2LSKBUTC4CZ8SqiYqYGTzXHHpYuSMUaVVKCpwukYoxjH5A7KumV0HWNS4O4rI49QOyu3FEJ1HWDEtRkI+88Mzt5ioPaDZ4ac55NIeOqGGCgrrqogST3VDF7TgAzr27okgIRxJ7IZhaAAWDLAbSNNhS44aP5QpdgWIfJg7Sv+SmVTZSOox6oMSpGKWWBgUvFFFmiAZH0r+lukeGoh2NP8qVOJOMSbj157sSwuE3k2zFj8S1xqRhzTtcaITuU2p20571jL5dGqUDlQ83nlDDRENXg9fU05tSfSGygJuLYFdfOZ2pQqZPlalCwXBtnuUTW59jJhJZYdpKpHI5SprmfhCVqv2WciidLeMezq4sdi6UAIJdr8GSBOlkg40POEjbtWi+d3WvEbNlhXncde0JFp5KpwdMWsbvbp2KNmpUQ6RKZjCD2gGOn6o7eVyHn0JMFyg1iZ/TXGGInKgZUDtmgvUij8J0yw2GkpACZljvqn3XQ1v+77V0acuVCXx8h28d1j7X3L2mOkPUhdo/rnojYRa1b0TnBaG7iXWrnAQBAddxF7O4ZwgqNdqxZ2yXMfe7dcwPwiodlSdvv2H2ed8sMRzXH/qrBXpn5q6CsQBkETwFmKsSaAL9ZheQdxG6Cpxmpv3oabQh11xpZA6fBsdOFdjg1BWald5QFWqiqrfMQ07ETdRNBlpoDbB3mGGJnvLZZrq42PDeF+uskQJaxYwToyZ7TSWSRSYHMKYnLZI2G5Z1kluGxrsFV0gnSZrKCSEs06RJ5xFkqR+4oLRXTDfTaCVN0r2tXFTNsRMWwYAJJzYQp0gWKoE2iP2itiskgukt/+p2cbA/Hbi3KsbefN9UaC3NvYiUFlnmKI8uxc7t7XO7o78tYK4FseASxpzRpaanfHlao8nOQiiFrjrRyJJKglEgz4c1QxSSyDhRjCpJKauzqFphhuY8Q72aqiTZboTpJttIp2neXOXJHNzGOioAxJyeBgWG3THFUCeyvGpxbBufKFiiYQNM0cKty6wb3pmeA7eegGYJWnKPsWHNbK6b7HbncIvZZxhJdpjNUJ1BRInLUBRpbY7m1dlFID1GMMqAHnk28XEysu01vYQr1pws06dLpit4zIpNmHXLsLSHTLTWcispvQDEly4RXqKOTUA2eLtCkO8hlLCDpBk9Jcx+2xmOWEotSMeTYCe2NDLfiAjkTdtKmiSUXenUh0qXXTas9ka9jt4jdPaFbGz2aOahMkwrDDfdx7BZQrLBgRioX4diLLGnljpEEJcApKWBllgp/L30bFlc/jIKomA5ir6GCBKVdtkaTn8ERFkj4UW/ZXhc5T+XYNU3pggll0W1xTjv2Zu069m6MJlEiWpO/DZ423nPfflf97LuOvci0KiZRjUXTAOnYOW6tGpztOHZqg+c8O4x54gRpqN4shthZCyR1Tkf32tVC2e5Vd8Oe944dACrktnwt8XCJDZ7qF69Ule5SjhCxa0sGVDGp4q3zga9MiZmmRIwG3Pl/odbGse+giPDW3jF6A7ZtUEylQdkEqdPX2YxECCYqVN4kpI9fqjVkqp3lQnYnIeUEL6l3aZrnHcqADU2YZlKSE3ndqtEldykeYh27rMDTEjJd+N20okvitiyBZ52mFxHE7r6Y1rEHzTkIsdcVFkTFsLIzlCJLcSRcVQzd11ZtISl4ajb7QvYEvif/N3j4D7+rReyhg5bcqkSYOd4ZrMDTHRxhgZQfmQSlHo6dZZ3vPmSJbAyYaPXlylAxxdkH9UehtNfUiqERZIgj9pRqvDv0qDeyCBVDHZQSyT3t+26RoeIS145qnFsG997cS9msvX4HMmmpTqrDVCyIY/dFoQQMbaA30mhjm6A002pWeFXYgBaxi3qtm0uj7tR5cKs70kQgRZfvTBSHYhnUxPuik6EMCnZucKFqyGwBke2gUDEuuDWmuCljYAdLQ6YtgKTwEbusJ9Ma9iiisry8i4YK1JDZ0rQebMfq6nwtiqJkqojc0aIuHl8JAa6OfYRjN1RMkhXBdV1DpGasiCTEuGhStOf0NvOomEChYiicPCGOXUUSlExgz6EAFw7HHo6ozFMcN92SAq7nIpEGOfGXMV1raOfy+22lwE4QVNRQiV+SeIk1eLaDI7VA2hz11plJlZO4NbGmACF2V4BPQobleePYHWmvt56jeLMS3YQxAElO7R+5qdSo2ndQtVSMm52dp7qDUqK4936TvPHpmyucX4YNPWgCWcMFTrrBvbk3pmdyUfoSZqogSc+PFHUvx77Vsc+0xkn9hZE7Jk5EvWlqpEzZ2u2xeuwtFdNF7FkQ3Bnj2FMZ1Acx25eoII0DWvQ5drMaIPTUGatTpi9E7KmswVlhKaMpr6Y7CbnHX6gKyBaQ+W609SAcjp2Cp7rLfBg8bQNgnSMoDh7WRR+wiguURsfunqUwDRBUtkAG6aBu58i0g6A+qyOIPaJO8TIHOyUF4FExoq4cVUyXliuzFMcuYo802nBVMQzAS9hlALptW2FWD53sU9GiX938GShZA5GUOMTSOPYejt0+5/MQu0hajl0pAEawsGOoGJLU2u8Gqu5oViTgUJ1yH0Cex54dl4rpdl7K0wSNCjtTMZw1CUnP3aqiHDsAqHrlixOStkKsMhN4ufQ5dmsdaWaw4pPbzNPZ1rACSYDYM+PERbO2TTgoHbi19uEmaZWMUQbgpn73tAc+EVWbDOXss1AVVL6ETBco0FOKlI4hG5+isEiZjAGmbAL9LZX6paaHbkrmaSLqjuNRUvfqRLbUJU3RpTfcIytO5Q9iwdMBxG4cCXNR2IBVXNd5Qepw+aLR9WOyJRTd3zD71KnYpJz2b97ZLGLnnXG4bc0YhSHSDGCpE9sxG9sg/Npy7Lq6o3/MMktbOasnd2xfSQLjqUF69zGd6JOIygaJu4i9gWJ5sPrSOvFjtUDaHCIbQOwujTPFdGs6t1yzAvgx1ipHudQ5Jspz7MrfFkCueLc+Ppx+v06lxpbyUfa6uYlxlHkK6HeIwMcDe22c4+KZIOZBiF20qz3GAJkWtqeDIsRuHLv/DWBVQRrk9KhitlTMPOOsQCp9jp3K3Uped+s8RAKSdvsIFaOXqNODkl6WqxmT4BwFE8ZZlihV9zyuEZoFC2+RIxezEk1TCVLVEEnhwIlxuaNbaoFeucpWslsA2QIZkxF9v3MNpd942zu+5R77g9JTMx01xy4sQmNQ1onLbKnb1QEQ1GTau080EZiEmpCyGuDYyQl2MgezRUTuaJ6jxufYQytN02WzMVwKAOY3D7Ez4Dxrueo9fs0bmzVRW1qDQsYFtPM9xMIi9phjT6ApkTmqmFQ1kCz33qmkWWHNSiyME1SBhNil8QCD2CM5ELZkdayzFWBLUrilLNKEtZnMhNgZcGGvfTYfPBs6drP6aiq4Re5UUthS3oyv0ajUPs8O86SHlBJtNFFVdYftRM7EGHsjY+xjjLFPMsa+8ySOOcd4knvlawGGrKAXbI16RZXZAsTucHCppQxiVIzQSKbjZOOmuW43eApUNLlkJZAtvAJlwaAAtE4v/NxdKhLN0VCDDUVJWDNeTFmDBzprWy8nW1j6qjb1PlyOPcw8zYvSO7UCa1dCkaqZFrEH37HPtCpGUzH2xTFICvnC3l8qQtWa4y7dPquedyHH3kVchIqpLrqdL5wSvXYfiik4HHuddOWOZZ45iN1ptOEyDYTYzXN3H9rvteD6527wVDd3Vmij24UpdbxGgUSsexOUMtU46fnTCLJQqqiUAuMr1ChQFoXufdr0S3uV0pnAYb9ToK2TRKssBviyyk6/VfMX894kits7f8FF7HtxxK4FGA5wop4OUppGPbHyy8bS/hU/QJnLzyPHzhhLAbwJwNcAeDWAb2CMvfp2jzvHNGL3LyjVJJe8trXaqSlHh7dmbBixw18qjnHsWdjNXCmbAQvj2AEHGUfM1s/ooKd2qUhSworKJqjGT8Ka8G6mzupCgYEpZZtvsLRoHfvKH6uHsm0Qqz94GkPsmaLU/omInbsJSmZiIcScLds2iU7/23YsvrSwE6xzqRh3eziIPXwxQ8Tucuy8dqgYE8h3eO0iSyCR6O8eKwLmbE+nPc8OUSk9zoU4MGPrUjGhZLFkGlWvlRYZZD3lCFIlZnPsqZ0M2n1SsdalKBKm8zmEq2rxzymkMq0K+x07emrF0EqVBc8dlaiwcTeW4AVnW+HESx/w6RR6H5lYO48Ma9vgidpImNsxtuyeaflCVIzsxksAk7n8PAuefimATyqlHldK1QB+EcB/fQLHnWw8KZA5jl1TK+TYK9RGV0vpwO2Gyt6EjCLwkRmXHryptyVXta1PTUEicuwsK21N58oUFnKROykFEhWUlm2hOm3Zlho2yRO5aiCTeXJHS9+0J7LZuiwvkRh6w9a7d6Se9ixul3lvVdMGsVUwYSqlkEJ/x1kcu5d5Co9nTWw3raAOj9sVQYRKHGNu5mkwDuo2lBPHbtG5g9jdkgLQK8U2eKrljuumLVewyI0jSHKfY6fAt2q5/dysFHaxxlNK910thEbsHT260E6c2GjGmOXYK+RI+Npq4MMAagZuVy6eA64OvVUFmZQabauApkzF2sZtahRgYf0e1gIDLpXumxChYvIsh1QMSnbPDTilLILYjqWiJLdh2jRh+LLP1SUOXnZxzz+QdewOFcNYWyZBVEj4GjW6lFqL2AMqJvAWuufp8wixA3gRgM84v18yn901k0mL2OmBpKJWite2KBE1kwjT9F1OHpEMyQxNgNiHues8ROxoSxskWQFmHqRmALGnNrA44KSDQmc5Gqd8KjAFsmfSnYS0ibotrsQsFRMgdrfejlUnRFAXBcACxM4Jqc1AiBUXWt7p1IqhssNpvrArssasOPyv72rGEUlQMtdNdl9Mcp6dF9ND7MaVZi3HHpYUcB17aQrAqCTzOjd5DYIoaGsm6vL/Z+/dYm1LruuwUbWee5/HvX27b3ezyW6SIiVR0NMR7TgWHCewZTuJEsEvwAYCGHYAwR8G4o8AzgsB4gRIDOcngD8s5WUgyI8TWUiAyLEkIIIQOzYkBZYpihIpSjTZFNndZPe957H3elVVPqpm1axatfZe+9zuJvviTqD7nrPPetRae61Zo8acc0wMeAtWMbFxLefmWTHDTBaAOHZPxSzkwBe5Jt9aAf/1a8BP/2WkNihbV6CLGvBgwrimNvaaB1HNUpEBd3dN0O7JUTFVSe3pbAwi1YqhZyqtmqaJRlLg0+3z3/3FT+PX/rM/7jOKwoXb/SUPniKsiKFGSNVjiOJmLAtIIIxfzQXdAKqDeP8Q+2mKP3nLjXZ2ZUKInwDwEwDw2muvvQunDaZkg8qwQhEROHYz9d6xl2kOKsJEQA9HjoopjXvwVgaVKjP4xgMemQwBsUtpg2aps+QmTUaoCogQsy+qco64MqPTKl8/X1eGi6PBvmxuBSCrJuRlO2eZnSq0balWiXlvzkBxxahrUsZWgMp5HGHJuFaMVXc0GIYOBSxqK1PH7o0T/wsa8HKZYx8Zxw5ggWN3p6Hg6RQkBUZRw0ChY+qBTckce0afxqo72p8LaVcKrRjxlraOvR6tY59x5ZH0rnDB0yl27BSe4PtqhQIaSCZ5vPFZwCjgN/53pGYdO4EJWhW5jC53P0dRQ87iVjK8F5NCKXQeFEiJAXHDivLF8gAAIABJREFU9kjWeKFzl5EVoOOsGAC4bBdqPBzQkgnlI5hsROHkl1Pz4CCK0WDmK8YPoGzv6wBeZb9/BMDvpRsZY37KGPNpY8ynHz58+C6cNpguapQmRoRV4zg1NUCRJrtz7POsGIGqoolggYop4gDRIasRHDsSxy6rBrKKEXvUVNtlshSzFLDknIIFT13ufYMRpmBFWCtEwKw4WjoJUVCq8fRG1CzBb+vGpCeoTJd5uxJy9y15uW3TDIcQV06Y4zhCQnuOHQh0Vlm3vtx78l2U0u/J+NXFsgjYnGMnoa2DHLuJX3Az9WjFACMkNMoZFdNUhR9HXKDE8+fdaRwabjHgm+bCjsUFT+ciYAGx+9UrbBFRZ2oIo9FIu09E43iVRmoU7q7nnS+FbYYYiAyTReymaNiErlHo0dN7o6ghmX5PnIJrgpxzjopxxUbGSfD6VZHbV089JiNnpfqGUTH2hyPPl3PgNrOOqBgmSzJ0KFUXO3bG7gFg6Y7zdFmtDbTBB65A6ZcBfKcQ4uNCiBrAnwfwf7wLx11tWoZ8U1quVZ6K6X36W1o1xh0fIfxUac9olzt9AmKvzcgcuz0PadbIkjn2YTlboDRjlorhkwBVy6qhc+mUk80OOYFjrzP0DRVpyar29Mbk6Y2QDubHocdsM2IAKGnC1Cli1/PYxZEJ0ytvOicgYXwGT1k1GcdOQxX+u6OX/aAIWJrHTojdacX4v5Z1MmExKmYabFZMufHfRz8yxO6UPzUh9sy1++CpC7w0GLFHC122KJ0kxcBRtzGAGjC5gLTlly0iJsQOwGfrRBw7CWrRfaA/3bwRtnnMGVdy7Fb/nT+n9OwCVGMSgyUjGO1HMa1Mv1whhBP0WmhEMtlWfumESyDMcuwrzCH2Qvd+YAbCO/Z+2KPSXVal0+vRFOz5sWf324xLwOA9tCc+kzFmAvBXAfxDAJ8D8PeMMZ990uOeNIaytQ8Y/Q7hq9bENHhltsppt+cctOfpkrQ839y64Bz7sgOy8gVjqGZznyuG2Gnl4OmNzPEKqCO587y6tkfvaB2RyiYcscqMTGpBRGMtqtaPVSX0BqexoEefkx3JLgigqvJ57J5jl+vz2P0xWBbG6HWyW9cFKuh6zO4ZK2rRSdn9oTx24rFnIk4zjh3BQU0DWjH6GIUxMafd1Byx80kvUBok3FhKYZG2GNGhgi63KJU9b4S6nZY81xiSPguo8o7dc/8ZxE6ppP7qr78WttnFDdiHiTpacRDjctvds6tkqDGxV5dkxZDWek7LH7BNM9Q0J+mMDVSOKGYOU3jEnqdFZuYRe6DhBAIo6bvOOvYipEvPjnhAkoIDg/fL3g2OHcaYnwXws+/Gse50/qJBnVAxpPpo1Miqxrbpnm5jRsUkiH0arfahSFK6lmwcR9TChKIHf5zgLKkRxpTj2KmK1FUBHkLsxF+rqcew32ELWMR+Qroap42M+79ire5Kl0lE6nYhcMyCp3oKRSGJCXdskaSjjo6KgdysHq3OoDtaXZRV7XvMqtlKSPjxkvDYTE2QBcqWXsxKSgpDWJtx7AGxm6nH1lXv+klIzRG7Qsyx83tBiFoA/jy9qWGqLQqn5x87Z4fERegD4GVnZe2lpBtXSRxz7NS0InGwvOn67TeiPw1K4xwThrKOnKct6HOxGVGj0im9GeiU0TdCz/f2JW31sBdD7GqEQTGjOAix2+96BWxw7yrPrIMQjDLdozEdpiKtXPebJnr+iO7HYrrse2hPReWpKRtUmC/XBtiIPJU0U7cl7iy9CFhR2GKKZNk4emeyjmP3AdEq5q3JKRVV7SkDNRJiz5R3zzIU4nMKIYLA1tj7AijJi7COUhtUDRtPQqTtUdYtKtfeTw8pYg88bNx5J8044NkCwSZlUIkjcYTENKdifFq6U5asW+/Y9Zjn2A2Md+zzZtZUrTh/MX1WTMqRZjl2N5GpHls5+joAA0St11qXFaNkNeslQNvzvHfhEDohdmpXGDtn1+0HlLIovGOfHMcOwIMgjvapOtQiZ8ax91duckIWsdcYQ5AR9h5XZvTaL0o2KDMa+dQaj+g1kcmKAQAllqkYoywFWKdUDMkiuGfuqGt34y/NEKk7Fk57fRp2aJwya2p+exnon1m6LAGDDxjH/q23okEtFNQ0RUu9UbjZ3jmqNtF5oJxx+uJHlCF1z5nPZinWcexDl6NETOSAKo8slxUeS0yAzHHsLCuGEPvYY3RBRMFWBMeSHanRN72YpMfu84PrJtAb4zLHHnfe4VfNCjfS++o6GZmixtqKXn+MCLFTGmmDZktjTfOmLceutfEl4rO0vgN67Gkeu7+zZQM1ds4Bu8CeLAAImGnEVgxA2frHhqcm1hUh9iLSp8mlO9qgr0PsqGGqzQJiJ8de+OC2ZIh9TsWE61RTfG/9X7rHeLT5iP15N0fsDSagbMJzaly2ExVqFXXIWPNG2NsEKmYBsatZ/9IQpMU0YEA5m3CFm1SkGV0uf/bQbAeBSdSoMUbB6KIJNRyN6aFKRsXwZtYQB/PY6ZgfqMrTbwcjx2QdlWGOuoKYOphpD2UY7x45kvBwTyhmwdP0gQeOIfYFZ0mUQR14a0LBueN5GYNw0uSihecA9TT4rJWiDtTGsWYJNAmh5EEhExB71aKi1oMpYmcvizShJyx/iewD7+554tiHyaCC8nxo9hoT09F3Yb9DPYbgadvEbRJzioklLA+tD4mAudGTLeWxX08FHl9f4z/++59xuwhPxwjVYyNYrMWYCLFTuuMkSsQFSiGlkjdHoiKfzsSIPUp3VFTpGuIWvrWbCI69dmqd3Il5+q0IgVcAMN0VPvOoQW9K7G8eR9c/jAqNGF0QP9yvCkGaQBdt3L7R/UtZ6T5QXy4h9tL3xo0OAIfYTTGvLyhixL6GQlVFjQYjJvcdCQjfLUn1t2jRQxUplcuzYhz9823CsT8Vjj3omcRIzTZi7iDGPXrUsybPJhHJmkQV58wCmNyDZxtGrODYiRKpk04rU+CCK08Z3AWxc46dySa4CcVmsaS5WHnzk5CnC2LaqKob1A01C4/pDcOYfMkQ+2zZO8sWsGYRO2UbHRym3V7poI1dVH5iIXqmqBu0dYXelDCp9LLroKSNnUyAXOXpujx2r+4I4Gu3NlPlf/3Vr8T3umwhlU13RBUmWo6Qmwixj2Elxu6FJsRujHfsFrFvIUbKiskhdjfJGhOaMcs5FcPR/rgQxFS7R7jCFjfY4OpRTMWMPi22jqqHKxOqg3Um/gWeHOkrhxeCp6KE1KODawGxC2NgXNC+Tgp/6BqEmY6CG3+dskGDEaMKKamUbKH3j21qbjkPnqZ57LkUy2cc+x2N0PHY7aI82UE2kKpzXYICKo04drb96JZ93NQ4V5A7iNidTgnxc4BFzt6x1y2alpxlNz8eSRwkufNzS4uwgmNfm+44dJSpE9NGZgq0UeM6xmA2CbF0R4bYZ+a56/i+Uu/ROFh34L66zkduYP5zzVZCTSltgDDNVKHfUsTO/3xAj51ezJTLfbu35fqFJPfh9qm2KNUuyo7ix7FbCjSltE5YZbJiALDsSN8hjDh2cuwxYncFUaaw4xFA4ZyqEiErpjJzKoaajcuqBgQjPLor3BjbpKO/DU2p7ekI9DT+fhk4mQGidIoGFZOo5o5WsNRaMWtb6c4hSt+QxW7IuSqbFZMiduraJTKph0umnQS2TwEVwsfkKLZgqjxi5+qOlmOPtwkc+zPHfpJJj9hjumAULUq1h5g639czsoQvVmnOLMISdS3HPiZVrh4FuxezajaoXUDSLKjeaeWq8TJUDJ8ESqYhn6+uPYxWqJt8cOzu5aSx1i2aqkBnKkDFkxAvUOJKlLM7JESU2eDPTY565X2ltngAogIlsLFKKTCgjkSn+DiMsQFbAIk+DpJ0tdg4R8rCirgaJSqhoJSKJ+fapiO2GGyWkkP5nIqBEGirAqMhxO4/BmAdZMyxU/A0IHYpEo5dU/NsykU3Poecc+zUF5ZPCt7BSuqm5cYz7bFDgxtsMe1jKiYU3YXJyxhjewQwx14nEtWGWuMZVj26gNg1StvBLM1cBQBl+wLPgtoRx25WlZ9o2aDBgHEKiN1rr7vYgqk4x87GAbDg6bLs8wetQOlbbqHgp4tSoqbCRuQL1UUNheOsmGCTqOaIPffgHUDsEylJcgfLdC2qqvEomBxomhXDq/Hmujb+IpIiLKqu3RzWl+Hn6Uk6ILyYwpjQEalpURYSXU7IiZnEgeApbOwi5dhHZVAKFS/9D9xXLwAGxBlKblx0LwZRhRL2tALQYAUVM+dlxwWO9PFgf68x2v6kdN8r2wB8gz1QX3jiIdV1aStp4zoL6Y5RVgxRMaaCrjbAcIuykHEza0p3NNJTZZQVY2V77TVWLkuF7zsRgCnjrBg57bBHg2tsIIa4+pgmg6IKwVNfa0DB0LK1wVoTJil/TQjvhcw0aQEcYjdMtpf9X+gBYyYrxiP2tVkxAAxx7GqO2M2tReyyOZ/v5xE70V9zrRgu5vZ+2VPl2H1euHvIJtmi0j0kU5vLmtteicJzkmRhqchQ4gGjMRA/Z1Jk2bQoq9oitayzNL5KlTs9k/nJV3WqwadOVsmEcnCsA9E3cTEVjZWE1Hru2HPFVJo1IuGTpvtRZRD7qF0ee1FizWPotdjtgMPSf+qhjfCFUANqj27dKPxPxhzIihEugycjAjexpbRF3/b3R4Mdd40RmjvY+gy17rA1e8A5A4M4eApQFyWH2P2nc3VHzrF3qGHKM2DcoS4kRh5h9VQML1CapztS+uHIxkPZKZH0sppQ6BF7U2OQGxRjrHNPtRkRYifHTnRZ2aAQ4Zn22/lT5PVeyLR0WTH0AQct2laeptkm0uexj6trJExhOfbBc+wCTdtgMAWKzjr2iF71B47THWWGY18UkXsP7alw7EVUos+Wl0WL2nRWwEdyxJ6/bCUqrwjnP2PFOt4OaLDk5QsCCqZc68Fl7ABzzn4aQ5BwGX2LoIczjT5rxQd8VnTeJsdO4lk+h1qxxhkABmFjFdyMED4+Ubhm30tmc5ETjn2ywVOZyBksWYzY2T4u5a0ubTAybpPIj5cPnsa57CynPKMVky6lH4/2nA1Gd5yA2Gu9R6t3QH0eeoJEiF2grSQGU9hVQlZSgG09hXRHXW0ANaCROtaKcd9bbwr/XXrHLivfKIIcO5cUIAdLjp13p9qjgWkuUakEsZOcQ93AT0iUl07vi5eo3oXjejO+SUuurSJgv6fSI3Z2j422VIwpZispOvdqrRjAdjUTo/+OBIC2KtChQeMce9mezfczlP2VUjHBhmfB07sZ6ZmoobfLO+K1yw1q3aNSHSaZKbU3lH9sbRaoQcIBrnhAFCH2DVu2OQ0PbQQKt2QbxAK9YUzIxIloCvcCs5fRUzFq8Bk2xN+7nQ6PlaQDal4SbnOmB1OgcNWRg6ghZ5NQuBdWV72afe6pmMyEOTktb1Guy4qJOXaWoaR6DKi8FOskE20SkSJ259gzPTZRVLMgL8CCX1R56j6/nuw5G+E4YDpXvcWFvrbnIsRu5jK5TRk4dj9Gxt0qRl8Il97YoYIpLWi4KIZs5anvzASTTXf0iJ3tq1n2F/Hf1PlIlxuY+hxN4ti1eyYKni47xcFQmTh2+0fJQES+C5I/B6Ni7L5sReizYhIqhhC7U3dcg9oJsVO6I6TApipwjQ0uB9tEvDq7H86RHtVLBWd65j4rULqbkWNKS8l1uUGDHo26xVAGR5tTdwSIz4sdkM4g9oNaMSRf0MYRdDH1VoLULcd61CG1Mjmez50/JDwmLP2gjQCmjp2XKKDjRnn0tMQMtNHAnINF7IWOA5I83bE0vI3ffLxZxO4kBQRH3wc5duXRNufYhXKIvaC8cDZWfjwXPC2XOHYgoWIy6WplPEk8HgMVE8VJqjM8Z96xPzeXoUBpFjwlxJ7voMSzVqhAqXOSAgBwKYds5engdHsEYipmgM1vLzONsNOmFRyxi3oL1OfYmOT9cvRKWbfhnUoQOxXq+dRaxEbAqSzzWTFalnZFmHk2hJ5cVkx8VFp1yEwV8aKVrXXsmqU7FhI3ZotL/chusn1utlsIntqOWAXULFryrEDpjlbWXCMkLNdMucHWdGjNDlM1D3zA58Za06I6jNjXBGEcFdNuiVulhOsxaq01ihqFygckPcceZQpQNgp72aVN7xNTF6pr2/VZMbS6oGAuJawJPWJkY51EjSJLb1ibSwzTAN3KKUVdoHTHCbKo5ugnY3MqxgXRVO+oGCrRT9skhmNrHbJiAhXDL6Re4NgZRyosmt0NCnttj3FeJC9zc46N02NBTc9BosQIi9gHI+MCJS7by+ONPo+9gnaO/XyG2J1j1yWktKk4XCsGEDBl6587TuNQPnnBdV/IsVdboLmw18RSM32qadOygIp7dqsYsc818u11EUXp5Z0T06JCgQwVA3LsGY6dgqcn5LGjdFkx/qbb89yK8D41Z8GxR63x6BUXpQMf8TmXgu/vpT0Vjn2p4Mc0F2jEiHv6CrpaRuw+3VGWoQjGWfTArzBCzr5Du3dAQyRtO0VccHSEqArwEMcOAJ1oXHVtZ4OIdaxRc8j0QIHe4HzsWPt4rDO9D0LsjmPnujaZ0ypReUrAH3OaUAiTpLkdQeyCUTEi3NcRJQr30qiCt0mMOXZC7EYU+ThLwdrURXns8xfzqht9Cu2DJukfumHIrjn3E1dKxbSVRK8peEpTg5tejclnxSAg9nPRZ/PYe1NAiphjVyJUgtJzxyeagJwJscNTMUVzBtFYHfhpH3LZKSPJdx8DPGKnFS4F5kO3sNhxUjxnKStGy8pz7HY3gh8kF13MsmJKR3HJTBXxkonKNpifkgD3TgRevbm4n+4WPWFali44bxAHT5/lsd/JCLHrsbdfobunor0HADgTHbR7MCNLOHYtKhQmRewupWslFYNxj8EUUbsuAeMcEEPsDFmmx9M+3THTFT3ZdnBdccTU2bREHnk/VqKfTEK0j1BjNNZJNj5FLsexl5i86FPObFl4mkbKKK475bG7UST3VckGpUkUF53Z4OkUySFHd0im5f3WJq1RSgEphefYb7rJqyU+3+qYY48cu33uUkkBQKCpCvRExYSP2Xk5x07B08Cxn8shqTy193Qw0gECA0nVqM6xm7JFoeeSvypKO4wRe9meodhcAgBurh/5fYxPkQxUDKl4Ft6xzzXyA+hg7e0WqBgjS4bY+f8NhCHEHj8/VSG9jvtqjOyoGD/5uol/X9h3ozMVzs7y6Y7+Z1Faqm8mAkbB02eI/SSjgGFA7PYGFpt7YaPm0v+YSgv4QLvj87h5xM5ydQ+ZmDqffcAPLvUQ0xuy8S9YaqEpB+OSEx9NYxkcYhdT3EU9JpkWzL1sKW00G2uROMtwWQAsx+671mQ20mJ+X3MVvevz2IPzkXqIJIPzJezwHHvlZAyyX2VRLXDsZuY8doPC4NIK79cmypQyLXvuzh4Cwk4G8+CpRK8loCeYpLG0MWlWTGcLxSA8FXMmxmwXpN6UFrEb42NGE0fs05xjD/1DnToljO+YVG/OUDrHfnv1DttnDkAobkQUDCF2qoymTCr/fzfmcoGKgSxRGMVqCRPEnsmKqaQtivPNQ1a8t7JqExEw936VdmK+whm29bxLGAdaWpa2o1SyzTNJgTsapRDapSHL896GF0y2GcSeEBZ22ZdUyU3zB+9QM2sx7SP5ArcDpB78chiw2RulR+ys1NwYVhRVzyiDWTGT4+rl1NuqSz6WI67duEwLXzDl6BWhx2isSjZZTW3fL5bJH+QoIC2qGcd+CLHvhilqIwcA+1GFZirMkUjVe5lawDr2qP8tv14Tmnvwz7wVdRaxj0r7l5Ly2HeD8lTMvdo4KsXRQQ1bsp+96O9IGjxtyhxiD993lMeuOp/VQpolZ7LLBk87LS3HDkTqjgCgy9anrvICJeMdbB1AASH25gy1e5f2NxyxO8fO1B3JsQfE7prK8MQGIcK8qUMANmdGVr72gMfPYCxiz3UZq0rJmmCvM1FR8DSkOwLAdfMSAODKbHFWh+cmUnekn2WVRez0PT6rPD3RQj63owvc11KzYEfRXs72C+aQpaxQIHYoyAWVDliROHb6iqUePWoCiDLIIEuwTJyoQCmZTNxYRmmzQKSOi7AMcJSKEeMeezMXRyv0EI+1aFEjzjThDtwKls0Rl393M7GLwK3O9/tL/9Mv44f+xs9Fzn0/qEDFMDXBIrmvpmiiblphFML2ncQUt+PjxrNi2AbcsfvxjIGKuaxURMWMzfNhw+0DN7B55WlA7IFj5xa1rps6fz5TW3pgK/LpjoMpPBVTqMFpxzjnUzQ+dZUXNwWO3d4bnhUjmzO053PH7u8Ve05pIpHOUZPDpoy1QMIQxz758+bMFNyxI3oH5YJcdCnFrKL3mBVVi1aMmEhSwJ3mdvOKOyb8ZBkPkP0oK5SC9ucc+7MCpTtZQOx9hFKb84Ccmvsfmu0nUkQnyhliJyqmXMmxS5XrZm5mjl0XDeoZb22zXriMwSF1RwAYZYtS95Cqj2QTVgWMpj36WUWuzaRQ0VjbPL0BW/ZeccfOEKchJCPscjraj8rRyybKfH/7dsA//d230Y0an/29oE2ydxKxRkjrgN1OdiXEXu5orHPEHqpdM1ss5bFPxvOjNFaO2C9LHU2i++e+K+wsC/8dzqiYSqJT0tI47v7wby3Sipk6XzlKHPsZ+tj5OyfZ6QIFC54OCIJnpmwhpg5SpFkxgYrx6b9OCrpsztC6d2nYMSEw79gDYifHTpQO0aRx7wFC3QzhVwscu6hQQmdWyQaFmaAy2VhVISMqZg0go94GadP1x/e+BwDwC82PRp+HCYqNSJaOLsxnxTzj2E80XqIvmGbH8698h9/m8uFHon1CZSZzqkW9jNh5UOmAFWqPgRVDGUJOqbOUjW/AnZpmVEw4UDqZ2LHYwGaHQvXZZruHzMYDMrSRmaJmz4brfSSIfZwUaqFgiuXKU52JXXjE7vS/yX73G6EI5jOvM8c+KKuWWFglQbobhRljQa+ysU29yWmlBUriAMcuFzh2PUfsnGM/L+25yMf2xRa/qV/F5z/6F8K5gXnwtCzQaXfcjK5JxNxMvUfsxLFvRJ9F7L0u7CrMUYBcAE+XLTDtrc4M59gJOdcNICxiJ43/qj3D2YVF7BN37IyK8TGPxFGH1opzxU0B4ydSsSApEDRYKBDKEHtUPxGsKqT1B2p9gZKX2aZrcg9I/9wn8d3d38XPPfgL2f2MYaFgomKScT7j2J/ARpQ+c4Ds/vMvhZ9fem22Dy1//VfjZ1y2TeTY3WcHEHupe0wZB1voMXKWugxyprOsGBWCp7PAT1rMVNiMlVJ3mCIqZgVKScTRQnOGYebYJQyghnDPhOXYRzcJkSpgLnga86TuGn3TDFZ5agy+/HZw7F9+O/Cy+1HhrFCh8IVRMXzCJJlcNXbxvRJMUiBqTM4GFQVPg43KMI7d5rHvB+WD5BelRWlEtQyTxp8c/iY+8wP/aXRPxlkeu/RNwAlAsFsRELsxwLT3HDu1qtuij4/pxt5pyRD06AqT3KGKFhg7VFJEgVdCzhV7zpWToC7bM5xdWFqTpzt6Fc2iDt+HieUogpJpjNj986lG25JyiaZIm2aw96FYcOxlIWwT7BMQO8mSUFopXc/Hnj9Dj3q22pqpO8Ii9mcc+7tsvah9dZ5PiZISXxUv4THOcO/Bw2j7kLTHUEuaM4vg2GtehHHAKp3KF1hNFdu5nTneokWTozcM0884kDvv1fSKFpUZLC+ealof4dgL1WHITUJmguaTBGmKj3t2v9yKYYhFn3ITipHl7L7S5GX12sM+v/fIvlivPtjg9XdCGfpuUNhI5XuK0nlKM8TyAL6zPO2bIHafFZP5Lhfy2CelZ8vo/agwuFz/s8KitN5x1r2D2k3FaKk03dHJ9vp6AQpO8/z5qOdpHxx7UQGyQosEsetAxUhKd9QDBlNFVExA7HHwdDISVVUgfLe36EyFTV1h6xC77q7D+bySYwPIAAqAkA1DFdiE2GPleptaG5pvZ4yV6vN3VRoFCR2lrpLVPt1xWp3uSOOlyYqer0+9bJMufvi1edUpADCCAJBVqI7ONdp4Hzn25fXzB8xG17g6tcu/9k8WAzOpCPYsUAN4FFRFHOCyw6z0gNtiHjwtzRjnT5cN6gXEblju/LGsGF1sUJselemxkyFotyZkVKo9pgxiL02M2H17t3E/myumqAlyfu4zmaC0YYhdsKyHx/sRbSXxyYfneP2dgNi7UWEjp9DGz52nMCM0Q+zCaWYP3Q7btEAJsPo0UVCabSOZY2c2Ku0DX8LtsxuUp0a2hYIA0DPEDoTGHMKlO+aCp+MSYocrUJL2N4wdesO+k2qLDfok3XEARIFRh0BfoQfsUPrr1ITYCxlNHLYxdMGcj4Ee7CphWxcQZWOR/3Adnw+IspQoRuU59ihjzRlRaQaAsTUT+ZwYLDZA8TGbDMdeFgIDSmxOaLQh3CqIAsv0HP++157D3/1Lvx9/6BMvxNv7qYlnVZUo0c8RuzKQYiH4+h7ZU4PYR1FBqgFcBAwALu49wOZsnuroK0KTdLdaKJhE43oyEkUZI8slq7LdzI1z7JwLbn0D7tRUhv6ZjZ8Qe7XBBh0a3UEVm2Sr5bRMAKhUhyHt42jiLvMAfOs82yM10FdRM+KCWuNxi6mYKEhML6qMOfZHuwH3NzU+/NwGX33EqJghduy0R2mmiGMPTVdiCWcAMBToPcTnZjj2QRlUidDUfpg8j7wRFk0OHrFbp0Pt7wIVM3fsnoqZ5og95thDuqMQAOotGpNSMbbBxah0yGNXlmNPEXtViFkO/IgyChKrwWbitC5/e59osvsKZSH8VRJiJ8nntANXkgoAqUbbHnDBaBL2Ou8J5RPRcM5KyQuUzJrXNjxXDhxymYt/7btfnAmN+Svgh5cVKpHtH0DcAAAgAElEQVTn2N9Pfh14QscuhPhzQojPCiG0EOLT79ag7mKjqCF1HPhYbwT/7EMyTQy1qSG8fGR6GQ+3poMqg7MMKDh27F4cqdsliN2w3Pl58DRFzLq5hzN0uDDXUHWYwNZw7I3eYyq5Y6eXJnSZB2IUHM7vluteYviA5EJRocIUlch7x16U4esywKPdiPvbCi9ftni8H33K425UaMU0o2IqM0YtBGkSGruUY7foqkTc3CO6nwuIfVIaNTk86y8tNVQ7SkTayZkoGE/FlJyKyQRPqyKIrVEQkTJSNMOCxgAqpDvaC9+gRTfXiikqjMpEeew959hLi9jLQkQFSkLbNnOFFP790W6VsHETVCe3kSZ7mukFAKVLNaW2jaIondAZX00zjl1PkXzFzNx3pSbnpNkzCiCrUVSXNt3xFEkBWpWSjs6x9yfHsaOg4Ok8K+YD5dgB/DqAPw3gl96FsTyRWe2VeSPiw5bgS0c/jCw1SzgkY385/oBszR6mmus2V4gdUKpTHY2K5c4f04oh2YRL3ELXSa7+kVvRmNixExbnXeYBQLiMgbG/DVSBsC5IRc2+Y6Tjs9pctsAUOfaQKsft0X7E5abCixf2/rx17VQNB4VGTL4zD92WEjHFRSXsoy+I4Yhd265N5VLlKRMBSzjSQMXYz/eDwqYubCk6IXYVO3ZCeYvpjqXL3gCC43OnnXSc2S7GpKK5OkOjU47dOvZJ65hjRxWAQdkCqkctYg4farQBRyo0gu19O6DyFZd9sUUxBsQu1eBXS7QfxVLqJqxaY4nq+KFMK4dTo3dSJyuaQ469lBKDKZkI2BrHbp9DUgZdjQ1NuHZRsKyYRM///QycAk/o2I0xnzPG/Na7NZgnsUlY7ZW1am58RvY/O6cxjgG1iQwqoVfuG1/7Ej7zi/+b/1xNE7aih4l0adwDn+ipcDnTGceuYtRDZ7X/xNuShgcAgBVhrUHsG7OHLtkkJOwLzZsRA4B0iH3sdlGyGgDWE7aOPo8HaYNKQyYLA0mjjce7Efc3FV68tNf+5rV1CLfDlEXsBXR0X33TFUYb0bioNV6kcx+Nk+U+MxsTKsYj9qoAytoHwX3wdJw3vzYwMW0iWDNrYJY/H6N7A6je57ELCKDaoDFdIgI2ALLCpIyPzdjgKZNccM/dWTFFHZSgJ0+JkB67Ge0qgRD7WGxRqQBEZJI9BcCn8PK89CGNf/lHxKXWHqJiqK/vNNjdaHFNcZlM8JS0YooTZXsBLAjzZcaV+7Cw6o6pBxqVeV+Lk4CniGOfy7WuMBMrqtALP0WInWuTx1/n9JN/FN//i/8evvjP/xEA4PbG5l2LVHDMGNRmjJ2lR8G72baEZstyWZ+GPi+YRrTg2jj2YP6n/+vXvoz/6u/93xGvujF7mHpOG6X0RigLjyUbAHiO3VfJRsN1v0hLxUTaJIqlO7KdHu8tFUOI/Y0r+6Ld9JNtkszVB+lYbKxlQ6JT7jvkImAAKqEg5IJUcETFJBwpBb7cP7tRWSRbNChdjvXguHWijwjp0pH6TGu8OcduX8lB6WhyFtM+pmLqLWrTJSJglmMflLaUCstjj9IdAWzlGBUoWQDDSuZhfLVr6xy7Ks/Q6PC82lRT9324+1PDVroKGZz1yDLW6H0LukRz4MRNuEnbJN8LOe0cYq9cuqPNpFlHsRNiDyqm6xC2SfxHhWlW+JjLqnqv7ahjF0L8ghDi1zP//fgpJxJC/IQQ4leEEL/y1ltv3X3ECzbJGqUZiKA4un106/1Syj5E1MEImD/wgM1i2d08xsuw3cvf+uWfAQDsrq1AEteloSDjEgoeut2cOCfHXuc49njb+iw483IbKm35VlobPPjpP4v/4LN/Br/ymc+6axzQihGY6dRTgDEgrsI5S9XfRmMVMKEJcpVD7ASvbH5vlDetA2IPHLvBo/2A+9saLxFiv7IO+qabbIESZehwp8ezMngJ+ywgQX1WlxD7Uh57HPwyMNgPk6NiGgjVQ4iA2HcDOfY4Xz5XeeqzYjzH7s7JJwFjgImlOwJAZfuqTgmdgqJyWRjOcapxHjwFsJFT3MhDc+TsRqEG9Kb2E5Sqz227P9jnsDCDj8UIBgrGhDMfEUtUU5MW4c6rD6Q7irJ0l0ar8ZiKyX2XZSExoJjpEx004tgzaafZcRHNyIKnomhYVt23Nnh6NN3RGPPH3o0TGWN+CsBPAcCnP/3pU4jwVaYl1+FePar4V/eQKkbFSD1CudvE0fPrn/9noMLxzTd+DQDQO8RepIJjRttoOZMmnetUszFNochjpkTpzY6lOQ+IvdomiN29zb/7e2/gD0jLmF3/fz8N/ND34/b2GvcAoOHxAAGhNUqhY8dO0qv9HqDlOgXYqPNOMUfS9IsobLZArikEito76UFpdKPGvU2F57Y1SinwhuPYr/sJVR0yWvh7x+MBVOlIvWfDIBwVI1SUIrfYaCPR0yYqhj7dDQovXbbA2ABOyoLSHfcOsROFQTsNk0bwnQItR+yU7ui2HRXL7jIKQg0+3VEIANUGle6gtIHWLliqBufYtQuemiApQEiZqBgx4p0ZYo+dJHX92pCqYX2OLTp0o4IQsEqGCRVSY8KNiDOtRlmjoAYcDLEb2PqOQ4idFE5NQqtQWmV6fiAg9sKMkKks6pK5d7MycazjmEVkX1GyrJhgo56rg77X9tRQMUHVz3inc9hYKoYzeogmViUn9DTn2I3G469Y5Pv58rvwof1vAwD2t9RCK3awvkUXQ5ae3kipGISHOJ87H6O+zUVw7PUlz7UVfp+3Pv9P/afbb34GANDdukmoiRE7aX2g5M7SOn81pBx7aApCwdNsD2133ePAVkKMiiG0d9vbz+5vK0gp8OJFgzevegyTxjBpK+7lJ0d2InZfqemKGueSyMYYKyRWLEkK5HHOwKkYwFeeburCTwYCwiP2/WBR24bJvC4j9qRAyVm0rasViBB7vUWlE5VGba9t1AaSc+wRYidlyCESAZN6hCLk7ALjUlkZg9Y1CkdzjjPscdWN6EaNBkNI7aUsHGEifXyA4l8ZrRgQYj8QPKWYyhTfH5lpk0hGHLs8oZl1oGLm6a6HjHdQEkWdD54q/b4WJwFPnu74p4QQrwP4VwD8n0KIf/juDOt0s459fUECgBlgJ20WxdIdpRmDyBT/sh5/DQDwzYd/EC/ibexvrjA6Z1lvWRBTCL+8E6yStGqZY08FjpwinywOVOS5sTx4+aP+oxc/+r3s0sJY+7d+BwDwtfJVPNx9EQDQOV1tyXh5A+bYGWKvSO8+ojfs8Q9VyfotfcpaeDk5FUPXctvbl+Lexm7/8LLFm9cdbnunY2LGWRaN/QMbK3XTmnHsVlKghIomgrjAhDuJBLGzYiPAFUxVNisGU2ezYhx9shsUSilCVgysFvyUpMk2pcRkYsROFnHnriFKnO64RaXt555SccHTUWlfoS/1GAVPPRUjhki2N+dgrS5/HYqd2gucocPVbkQ/KrRiCFXJzFLqcpI1Ss+xB7MV2VM2F92PoaSsGMpJj6mYXCC8KmxWDBXFrWm9SFQMCcgd38c9/8lYc+mOU0bP/722J82K+RljzEeMMY0x5iVjzJ94twZ2qumiRolxFrhYMl+glAmeKsaxy1SLBG6Wvv4abswG9Ud+EADwtS/9BvqbbwIAtvdi+YLg2IMDKhuiDJJekAZximU67sQ5nJ8H2ufBCy8lG7tl76PXoY3Amy/9CD6qX8f1bo/9lR1rff4gO1YuQEYNsnXSBUeAqzTOqZjAPdJKKDj2sIoJ93Y32M8uW/vZSw6x35Bj14MPnvJVGX+5Q9OVOcceGm2U+dc2s6wHXLojezENbCC0raSdVKYBQhgfHN2T06fxiXnVKZAET31lpQueco7dpQrGHPsWpUo6IU09ULaOY3eIXQ2RVowmnRkxxnnsTHeF4kJS9VHtRdFeoBAG19dXuB0UWgyAixUJ5krSvPRJNoHicDfEuPto5SuWAQw9V2nw1Kuw5jh2J9vrefgTEHu1oGK6ZPYRc6sVFzzl4wQsFfNBy2P/tjGrw70+eGot7pZC0p2KOaBYvCsct96/ibeLB7j3ESvr+egrn4Nyjv3sfnDsBsJXyXHHXrWM3sgET1PUk05YnO//+e/9m/gHr/616DO+dXXzVbwtn4N4+fvRiBFf+/IX0N28DQBoLrhjFz7bgI+13pDex362yiExr4J6rUZjcPe1nAelfXofEwHrHTd91thrf/GywRvXHR7v3TnM4JFVtJzPTEJmTLIbXAelUkyRM5iJgPmDhuMPvNGGO143KjQlUTE9AIGOHDvRNMzSjBggDZ7GiH3kWTEOsVO6IwCg2qIwE0pMYdKYeqBsXOWp/UjqPkvFpMqQVts8FnKzYnBslekoxt3NI9z2EzbMsXNLqcu4UUtM5kkzZfVe/LiIElRO3TFB7LnJuHYVvak+0UFzK8EGpwVPo8/KfKONcXr/s2KeGq0YK6o1YnciC8M3lxQ8ZZSBNONcrdEYbPpv4Lp8gI99h6U/hje+AKMdlfDgxWhzj9gL7oCchkaK2OECWSy3VxvuLOcrkh/9c38ld4mgq9wOb+Fx+TzOP2TDvY9e/y2IW0vFbJhjt5PQfKxt00Ib4Rp1u1WAe7IV6dr4lmrM4VK2UZkLSs/z2INjt9f+0kWLR7sRX3/smibrIVvhKhg907QkvzpPzTTGoDRHWuNlbFImLik31lE3pXRUTA8uKbCnVEgaH9K8dDdWnsfutWJcIDmD2ImKIUkBANhgCMh72sNsH9h0x4Jz7Dx4So59iKghaUZoGWoEBIDS9FD83p5ZinF/8wjVvQ/hHgaf3cVBRbrCVUUbI3aWhFia8SDHTkF5k9wfQuw5KqaUViuGqmBXIfaihEJhVyF3tGKJY8/IPr/X9tQgdpQ1GjFCQK/7IhFQMDkp0mbRDFlyaVD+8G7VFfrqOZxd3MebeIDi0RchurdxYzZestSdxT+EkgVDPb0xpgVKGkINs+Xs3KEfvkbOsW+mK3Tlfbz40U8BALo3fhtqZwO95/djcSPq6iTYWNuqtDTAyJ2lXa77zjtVJqjpTGY4dh/YYv1LCdVuK3vtL11adP6bX7+yV6SGbPCU00ZNQ4Jlc47dqzsuNdqQeY7dVp4Kf7hJa0za2PzusnaO3S65h0k7uYH4+8tRMXUhg7Jh0rlpVBqGJnRC7BEV4xw0V3icepiihTHw6Y7CaAym8hdqcvvBImeTIPZUBqN1saP+9soVjPUQVAdxwLHbRi1xHrsbDSSOIHZKo01WNCQCltNxL13wdCbod8RGWfvuW8f6pEaUIy0KS1uIlxZJDtMzx353o6j2yi+Td0onk77KLTxERaLKCNismHN9hdH1tnyr/jAubr+MsnsHV3IuOBYcewg0NRuiDOaIPS3aiB6TA/1WU6MH7ExdYajv4fyFV9Ghhnzni9B7i9gv7sWIPTcJtVWBDpVHjnR0AP6zMtMBx8cxZkJOjGNnmSgknrV1iP2hy2X/3NevrcYLTDZ4yqkYIaVt+qzmKnvGGFuxuFSglGkWQkFP/mJ2I9OCKRpHxdhzXXUjdsMUI3YxT6m3n4ugiplwyFGVaoLYAQAVtcdjfU+nDtrdn4JlYUR67N6xD9GqQOrQkNwIQAqN2gz+eACwce3xht0Vdr1Ci9Fnd/G7OSXviy5br2RKNyRoKB2jYlzsxrW58yCMHHCZ0Yop7EqoBPUvXQf0JlGjFXdH7JAVpKCiR07lmUURsffKnhrHTiX6jRlWldMnewMIgRrugEoTcnV9qzcDXJob6NY69tvzj+Gl8XVsujfwuIwRsEEIyHBk2XrH3s2aWQszzfUzUs9wbFXC/n5hrqGb+4AQ+HrxCjbXX4bcvYUrnM2aCPuScMaxN6W0aHEKAUlqtBG622coEvev59jZffX5y0L4sVIpPjUNfslVn37ua1fYCOf46B6y65PJuftIm4Rx7CDEzjl2nhXDjiNiB1sxETCv3lhS8LT3yaVX+xHX3YSLdh3LSfRfCJ7af2zlqTPXe9RLCgjBEPsQIXaiTrhErOXY7dF0GbovccdeYIqqOCkIaJhjp4bW084hdgy+0jdC7DL+PnTReNmF6Kk19H4t3yvfklLHSJoQu8widhFlAq21STa2CM6e6OC2HNH7nxa6iA2TiuQl3g97ihy7039eyZHlZHvJOWkVO6AUUfS3j2xpumtUrB98As/hCq8OX8RtO++tWmGun+Hb+S0gdgWO2BnHvjLrx22Mrh9wiR30xua7X21fxfPD66h3b+Ed+WC2CyH2gtFJUgr0qCGnlCcNk2DZUPCUnZ72pwkzyYoJvUqJirGFL61rUPHR560T+p23bvHhC4eAM+l1Mkm1HEAl7PG98vTPodZ4ieXamhFit1RME/XJvOom59iZiNoBoCFTx0WInXPsIyH2OI8dgNNkzyF27tgZ9eTyzlPEzgEMILyD44gdta15mPpr7Pd7VEKhbOeCdzpNXyw32IghgIIwGt9cfMmK2oEqFQt6+XTHTK8F38yabCU1q2Ttr/sYFZM1fh2RiJz59pMU+KAY0Rx1pvJr0UySFeMmhxSxB57Rbrd7ZKUE5NY2tti8YjNjLnGL8fzDyUlEcOwJOu5hkWXqrGVGxmCWjnLkwaOtHz/6JqQwkG4SGu99DB/Sb2Dbfx031fOz/Wissowpj0E0ECpw7P4VU1QlS2lv8yEWWYprnoXRjwrbKjR/PmtKfOievWcfve/uR0ZsrKji+8q1SfiAZKYMPbqrmTz2ySP2kBUT9NY5YreVohaxjzhv1iHGokoaSTiLtGIm4tjjPHbAZbdQPvoY2iNKRsX0LCuGd1/qI8c+QvNVGiFXjohdMZvurr0qaeXSdnlDmBm14ibjabAduARjoQuow47d66Tn9dhlJngqhIi7aq00JZuQFXPEcs/5UvB9VPoZFXNXE/zlvstsi8AT8yq3ElMstwtguLGOvXI54B/7wX/d/6360PdG2xoINBnFO4Aogzxi55kCMWJffz0AcPPoTXvuMzvW6pXvQyMmfEp9AV0bZ+8YIVCb/CQ0itprVVtztBR1mCKEn7n3tBJSUVA6rIQMQ+zbxCF+7HmLCD9Ojr2cc+xpQ5JRVChmHLs4qC8CIFt5OnjEHq4rcOwF49jtdVx1I666CZeMijn0OPr8/6RkPi5QihG7ALxj36K36N4YQPWeBil4uqYJHLuVI9iiMQMGpaFdZkyNgalkisA18xWSQ+zob9DvXD/UJmnUgoxj9xLV9lnnNSRHqRj33fpm1mmB0kL7yGjVsNIfaFkzYHgH1xhdB7v/z4KndzeZCd6tMf6VE3oyDD1VGP0Sy+tqu07tlcsSuPf8S/jN8nugjcDH/+Ufm52jEeTYY2c5oIZUGcRuxpkc6nzg67Ji9m510ZxbdP7wE7/fb6Oe/67ZPoTY02DoKBpI1Yex0umpK32u1J8CZNWcYy9ZSzu6lH5UOEvyv//sD38EAPDHv9tJJxRzjr2cIfYmpFNyZJ/JfZ5pxSRGCoi88pTUG32BktEQjvN969py1xerHXuM2GnTcWJ5UG7yT1vjAS7dURtPBymXslgUPHhaxddZbdDAbu8nLjMGPl0wxF7OqRgx3qJ374Cgz3j9QnofveDdLQAqwbfb14k4Xmp+0k7kAQofC1pw7HdA7PrAOFJb1PPP2PAtQOxPTR57jDCPz9BRgJWEhTKIvTJzDlB39qFuzoKa4if/+i/h7W9+HS+89JHkTMwBJSh4kE2Cgt21mAmjTLhkX2GyPisGRqO7co79nnXsL3/yB/yf739i3vSKEEusBQ+MskGpb9gnwgoseV315YmoqmKOXWnLrc5iF6OOFBEB4M/88EfwBz7+AK/2X7AfZCaQdCU0idoidk60iFAoZrs25bJi5iiP9FRK5igp/7spi8jxGQBf+oZFspxjP2RFwrHzdEdvY6bytGZBUKV95szoHLvkiJ3lsVu0b7XcAXvP26pwyplzKoanvaIoMYgGcrjBsHvsNkzVQRHp49tjBD1/wH0rwv5UHeHYK3d/ZKJXfwyxG1H6r38tX655vcoJi34fQ1kqcJv0+x48fXoce6YC7rhRYbO1yjlejtjLCFE4+sE79qAJU1Y1Xnj5tYNny6HgmQMyGoWZ0MsFHtiPZB1iH301rKVdRFHhiz/yt6C++mv4zj+Yri44Co7vp5K11apOtGKEGjGaAhXLF0/NS+m6CXNUGlXk2ImKmXxxErdXH2yBr8TUAD9LOglF2vzsBQsNkNkLGIt9zM6do2LIfLqjs01Z4PNv2Mnv/jafE5+az/rwz5x1AFHlaSIpQHQKAGzhmm04xD46jr1IsmIiq7Y+U6ufFKbRoBSa6b6E4KlIgtVDsUU53WLqXFNromcixB6fz/ce6HaQ7m4YCEg9QQoTZd7M7k9VQRkBqfOt8YqlRvWyAk4ItwFJoPiIrQ2+A9+msr0fFIsQ+4oZOtdBqfSBLPvQG60tgk2WWKK3D/WWSeYunydY1cQvySQb34qLW6HHeWaBrzA5jWRXOysdcM5kDj7xoz9xdL+yia95ki1KxpF76QA1YhSVdx3xrXfLbed4ybEPSqOGmjn2btTYXCw8khQMzVIxc8e+mR7NOHZfiVhUeVebC57qeTckMl+g5GzTlPiNr9lJ/+H5OifR1oVvvMxOG1eejnsYiCA/AERUzKj0Ycdu5lRM7UTS+klj6HuUQFTsQ/ShTGiuvrzEpr/GtHeO3TWVOUTFEOga+x0ahPfNt7c7QIGQBK+YUTHk2JeoGObYVyJ2w1Ysp2TFhODp/NlV2kAbPAue3tXK+g6IPemgRIgdyj4045iU11M1n2vou7kIVMwaq+rUsTvVu0TYq5jRFJmHbM2DZwyws4VI28t5auNscz7W5IVWRYPaMI6dMol0HwmW5WoIaMIk1cx+1K6ZR8yxD9OcY/dGKYWZ4GmVIvaiycqveoGmJf4142BSKoa/8F5SwNm2LryuzcML7iTyp7PHcEJgXq88BE8jxF5tomtB2cBABM0X79jtPU0LlMJYhNdyB5xjd0FNCnLy7zB17Kp9gAe4xtUj+1x5xM4tuY+Sulr1uwh152QlUqsKq6cjEsROhYhyAbGbhZzyQ8ZXDkebWef+nnlnaYJ+Fjy9o/lCCRz/Uuw2cyMumDI9qKl1urQshhsoI7A9m1eZzs7DkWXigCaZami47TK58x6wZ0eeOS+9PP0j3GCz3OdzwdLVhZ7pfVgTrgmy/z36o5sIi7jwq5+U41ZjpcZ+mnPs3ijf36E//h2nsQuuzc/HUmbTHdk23OETx64PUTFF5JTubcLP3LEfsqZyejHqEMe+jyY0AQEIAVNtnTSACRy7T3eMqZgoQF9tUXrHrvxzLnIZR8m9xdnzeE5cozHu+3Ace+ToEo591ntA2O+vWOHYKSddJkqNpRmhjEB1iIoBnW4l+maT9N0Q+3wsROU9Q+x3tPJEKsZa0vNUuq7xzrFPrjFE6hSr6Qa3YnOgu1He6iZFwUuOPQ4o5SeqNec2KMZb7MQ8JS1vDN3OnGXrqgcpj9057SNd5gH4B954x65RilABSmdd4tgB+OpLKqXnliJ2LZsgv8onVt+coc4/IpkXc0wQF9/NZ8U4e+4s/Eya8uk+qTWlbbYhEsQ+KhMCtlMHlPMVqam22KK3sr0OsZPsQBHlsbN0RwCoNl7yt580xt46ac+nR1W98Xmri4d4XlzhDC7oX8+/DyT0SJCo3vn3TQBeSTQtMONWSEtBpW3uCihMKBeR8CGZgiUz0cR2xIdkX8k5MCDEXj8rULqbVc1pVEzUZYkrsaHwfN7oOGWKvNMsXk232GPt+cKx64yzrPWQoHCTzZ33LcVO1Jsvxlt04nSaqk6cpSlbJ5DkUw0AzHVt8g98aJYAWCrGdjKKg9L9qGdyt968Y9/wXexYkwnTlA0qhEpHwP7odYSW0h0zS2mSFCjl/MJsVkw4N4mWvXKvjUvO11AxnkO2/wxTEB6ziH1ecYtq67RiQlbMgFzlacqxb302Vj9qjH3nLv84Yr948DKewzUu4L6P2nHs/P4kCLya9R6wTzMpiR5KVRYitLkTCBNfhQkjisUGFmIhQ+WgccS+bo/YcsAgU7n8fthTEzytI8e+8mvJOMlRlAGxpxy7s0bfYi/XoWDfz9MUqBOEb8WR+lnwvnRCVeEYcwpmzbMqYFCpW/Qyg6qOjTXt3uQe+iArEHjSpZ6VfqVBiN3RDUTFoGRZHrCT1tkSFUM9TOv4vmsjUFfJ+cvGF4X5TCYwjr1YaLSRXUpTznoRjRVwlafs2fjwc1v8h//Gp/D7Xl0fe2lKWiU61MwKlJpC2oGPe+A8NFHx96u5wDn2eJtlxdgMGBNz7IalOwoA1SY49klhcvc2oPPllVt5/gIgNF6Tb8A09yAyXHZK6RBi18M+zmbK9CnI2YTSpjuKAMgkDCYUy6X6d8hjj8Zxiroj/XaAY3+Wx35HOxWxLzl/G4G3D5xKEDvts9E7XBXHM2K4jaiQLjhNaemN22SCyeXOh53W5bGTU63VDkNxGhWTGyshZZ93zxC7EvmKO2/esQcqZovJT5j86rd1AXRXluLgL5pH7HQtLi0QJepyPgnVGKGN8UtSAyY3sZRKmkF5vsq0mr+YXgSM2V/5I5+YbXeI493WBQa2SiQblcZWSpvZMe29KmN03PYeLsQ3LSokaV9RARiOpDtuIKnoadKYHMee1gMAmaSEMyty92Ov3ECMQZKCd1BKqZWKSVTbjQNPbrfPrEaYKVGg0ApSmmglNKJAuUCH8kwbLndwyER1eBxH7dsIsT81VEzTrnVewUTMPAKIHTtx7OmDujE7jKudpbUhg2pN2c61KYxJcufdCE9Vd3THavQOY7kOsZONOc7cPfTk2D3Vk7QOjJyYF4uhXO3g2CtMM4pLwGBbSeB//BPAf/uDsUDauAMEC1YSskU5Q22i2qASymbhkCIn30sdhNUAACAASURBVKBs8sGxzGQalBwdYnef16W0xziBly0ydE5bF7bvaaKFElExbswzay5wgX1UedrrOcc+opxRMdax23Z+ihx7GigFULaJY3f6SM07XwQ2LNOKjTVF4HXLEXuI0ZD2f1EfRuwKpZVbtkePrmvJYZ6aLGDHvT54Gv2dfow4dvvPs+DpE1pV1VGnoWMWXHrsMCcRcmY9FUMPKolTmR3GMpPmdcDSxhkAgLJFKXTUCxQws9z5J9GKafUOKhNwzBkdOu0yD8BXDwZn6xy7iXPus4HekiYF53xGhVpMbMIM+7x69avAm78BXH8N+N1fCscY9xatJy/chHkVqaSCKNadKsoo5dWikWxvxrF7Jcf4VWnpRV1R1ELDy+XCb6oCA6ooqAhQn1W2PQueej/SXuIcO7vc90VM9hrmlae0rwCqDQQMGowYIsc+XxWkcSFy7Biuw8/p9SaOnXoPYIifHS8RnZF85jYJ1kuUXVdvqkUq5i4cuzyxen1mmeyeEDx95tjvZELKkK+7cunlvSTXkkbpm0AoV8qd5srWQp3gLB29kUHsvtR6H0r1fcOFI3m469KxDLZmD71yrD5tOjMJEf+qE5nhwoxQkudJZ44rC+uAWSZGhSmbDfHw+nPhly/9P+Hn4Tbi170DPDjWzm8ZTThFszDO+bFIF8YjdrdjQ82qT+Blc05oWxdxAw1nozKR3ksueCraS1yIvS2iSqpTy0grZo7YAaDFgH5S7j6xdFx2HWlgGmesUftZ6D3An8c0GLrdtJiMdM9OmGIqn4t+jIopbbA9sQFVPPlxuwNijxRNT0iK8T9Hjj0Ovj+jYp7ABrFexIcrzHFTIlAxpG3heUY+AVQnIvYDjt2KI1mTmf6od9Fjp3222MPkikgO7JObhKgs3HPdzvJVsmQMNXr9Fu7Ym9nW929+Gzh/GXjp+4C3fjP8cdxlGyfnxkqpr5oh9ui+lfze8ouZN9ogadsmWUr731dQMYG+mWf8tFURFRARKJlRMTn+t7nEOfY2JdNRMZ0TCqM8di0r2EhDHDwFrJZ7P+rQtzZB7J2p0FTJZHfJZKmfn8cTgAzHXkg7eU2xuiM59rI+hthrXwnLLUfDLY1hjZ2qNzWzzDm/VcHTJzqbEOJvCSF+Uwjxz4UQPyOEOK0U8122WZDoqMU52YB1wJQzq1xBRa6ZgKmPFycB8A5C5egNr6ERHDuiXqD8hHHQ1Kz56qYBtVDrx+os7Vlph+P01h0ypOyEalZMlX8hrIgYOXaFCip0PmIT5tnNvwBe+E7g4aeAN5lj7298+TrfJ5dDTyXsZuz8dhEVUzSzUWpt8lRM4thpP8qSWUPFkKWTA2CpGK7aGFExcgGx+0FcohIKZtp7p7lLOHYtMw7Oa7kP6CftJ8CQgEDxi2o+ZikB1zkML3x3GBLX5MlQK72ogalzKYvxO3dM52nkOulsNd6j9iup1Pgqe222I8/ZP7ZL9pjsO6LeJ+MBraH30p50Gvl5AN9njPkBAJ8H8B89+ZDubgGxH7+JS9WpWhSeipn8Az9v2CsyqnaHLO0DCQQU7CvywBD7EuI4ISumnCzFI9q1jp2cZcaxu5deJBx7iUyVbHI8wAqeecfu8thTAScBg3r/JnD5CvDip4DHX7YOHQD6K6C5RGoqQ8VQFbJhWvdp8NR/boB/9NvfwA//lz+PX/zC27Ox95NCKcVsyZ9F7AuPna9/yFIxZYLYQ7pjwbfP0RVuoiuGK3ufZIXe2BRAOicF4VOtGMAh9knBUN/aJLOsRxUmMG4//reBH/jzwMf/cPZ6U3lqwObXp6DAX1omaMtNyQYt4vRVwKZx5iZLO4YTio1oH75iOanyNEkSgNWIAT6gwVNjzM8Z40vC/gmAVLP2fbWlfOqjxikWhti1y++tMhk3a52lOeQsq5xjd7m9R7Sh13Ds5eSaIax27NZyWvCUiyyTdMe0k/1S/HqSTShjHxUaMTIHEGixqvuG5XEf2q5UeOu37L+pY3fILXdfPfKcen9swwdW1NF3/pO/9Dt4Zzfi7/zS78yO1Y06ch60W56KOWy5l3tTy4hj94h9ihF7lLFBWzW2B2k53toYRHOOMWnqQN9NzrFfFCP6ScO4tF4fKCUaKofYAeB7/m3gT/8k0N4LY2JIOofYB1FDTh1EBlKllcOpqaJG6xA7f+6zKwoaQ0bQ7ZjFQoKHt82msLJnwUkMPRXB078M4B+8i8c72UgnY91sm+fYtSh9qTMtUWtHxfAvU+ZKqQ9YjocOhRuHHftde562yjr2YjNHujmj8+SomMoFLmXSJDrtWcnvEf8aJtmg0iTVYK+3aOJ7eCY6e/zzl4AXXBOQb/62/be/jqkYZypDxdBELFk8QEcce3iBDQw+8/ojAMCvfeVx2MZz7CqLWgMVMw+YLVnOsbcuKyY9byQpAGTjC3Q/yvEaGG6A+oK1YUsQO3/OHRVzWY7YD8onCWy2MYDpTbVIdRyyHAIfZeNBgUneujIN0CamZMM4dpYVg2oRCUeTy0r0Xd6lyJFvyWg5aqn4bZvHLoT4BSHEr2f++3G2zX8CYALwvxw4zk8IIX5FCPErb7311rsz+sSmE4KnAJD2PAUsWqWGDGYkxz5H7EWmJdghSzu382Nwx07CSCKtpjzRDARa7RD75lTEnun87u5BoWPHbjvvLN13dl+ZLg5l1hCnSSjsIayDxfmLwHMfs6icHHt3BbQZKiazuqg3liaT045x7C6eImRUefr1xx3e2Y34/g/fw36cC3j3CWKna/KfrXAatEnu5d7WJYYMxz7MOPYMqnX3oxxv3MR3jkGZg4hdCPjsouecY9cOsbfuefQVyKiyhVn5a+Sc+Xysk+s9IKiDEo8LH+l+povGI3a+34DygGPnomnrLC7GugMnzr4vasbybVt5aoz5Y4f+LoT4iwB+DMAfNQfgpDHmpwD8FAB8+tOfPjEbe52RQ7qruiPgEDvpRDuH6/Nw+cPbnpZpknNAviIv49jnKWAm+fe4bZwCX3N278iWseU4c0LBlNniHXuqa7Pg6Kzsr0XEuo9lYsleFMyxlzVw/6PWsRszR+zksDOrC3LsxbQDXPYSBU+NrKOn4/V37Fj+1e96AZ/5KkPsbqtu0iG1kVmEZKnv6REnv5TH3mcQO4BFxO43cdRUPd24dNCz0K2H7k+mupf2e1B2+MowwYwdlBGzmMciFZMx7thziH0qGitRDXonwvapkmhqkWOPEHu9SHGUJ6ShhnGvd+wLUlM2RmeUd+zftoj9kAkh/iSAvw7g3zHG7I5t/17blMsAOGKzdEeGLCmo1G7mTrxa6djJctkJNSHpPmTFUDUef8hyE9WxMmkDga37SurtOsd+iIohOooCoDSkOtG1WTIr+2uvzefCl3Ea6UPhHCvpojz/SevYx71tHZcJnuYmodb1oi3V3g/UO3bqeu/G//o79h79yCdsTrZOqJ1+VFmOPSpYyvZ7DUb0VJZjT9MdOd23ovIUsGqjloo5d916GHU3Q+zCc+PPF3vs+gl66m3aKF0cBXBFfZJ8rR9qhjNXskWp++wdao44dluhHcsaA7aQbimPvc4FfY8YD56uLYVJje43UTGD+/cDFTwF8LcBXAD4eSHEPxNC/J13YUx3Nmrku2aGXkL1qtyi1c7xjB0GU6Ao6cULt6vKpEDmLUZO3Dbn9gUzw3U4rnOcM6qHqIQTOPYz0UfnWTnUbIuwzfbMjS9JdxQqoWJE9mfjUFc/KaatHr/QDwmxn9k2ftaxfxG4ddQdL45x30WONqIJs2BSr5R+lqaREmL/odfuo61kSJ9keezHEfs6QJFNd6xjjp0/lxyNihzHvrF6RZvJZcU05zOOPdug2U2Q9+Qet72CmDoMc3Wgk5IRONCoMhWsqmhRm0DjRdd5hIoxRWv76wLg7+Chhu91hj47auV6+mbp77R6nVExHyR1R2PMJ9+tgbwbZpJWayv2mOczV2donda0mPboRJN55MNyf/XYMs6ydT1T5RAqT2u3WuCZOFlXfgKS2pyvLS+IA27ctm1re5vqmIoBEDk2kffrEFWLVgy47ZWPXRBi9xy7eASIAtg6DZLnPwGMt8Abv25/jxy7tZxYmuRBWUr7owkx+R7evOpx2ZbY1iU+9vwZxqsKNWmNwwZPI8Tu/o2454yOObdDHHtViMix80NEBU05SdnmAgMqbMZ3gOkdoL2PsYuzYjxi509RUQLVGe6JPW6HyTp2MZ+cT45Z0VBziL3cojE2K4Y/F72prIrlwQPmaZVD46szq6yjFgXV7xA8RXh35lTMHTj7J7CnqvJUnVAsEn1xDG2Y+gwb08NoDaliJBO9dJvTJAXSzu0AcOaQNM/e8I59plZ5t56nALBdi9jpTJn7eOZK32szd+zLVX4sQ6baoMGA235aROwv4Mrqj0jn0J53uOHL/68bBHPstLrIobZqHthWlO5IwmPuAG/d9HjBdTv6yHNb9IacqePYR304KwZYnfKYW44LIaL7zV//7OQR74zr4j7Op7eB/dvA9oGt6s1w7F5G31/AJS7FDrf9hHLaoZcZXvwEapNTNqmWPwCo6gxb080+z0lCpGai4qxwnmzxlbOmkJgM3b+VTjUCKEfzHbNG3yU59m7M10G81/ZUOXb/gqydoo1VOucmqjNUQmEYbOrdIPIvLfG4Ry0pFOFWlCX2pkYxBY69cY6zZKgzLejgx10ymlA6Uy32hVzaJ0fFlIW0wapUjRIpTZAfl6y3aDHipp98oUoQtrL7bEXv6QUAwbH/i39s/2XaJH7MOccupddMCRy7K6lPJpNv3PR4wTWefuV+i84kHPt0JI8dYE53iWO3trQcj56NJcS+UJ15Uz6HF6Y3rDrk5gG6UVnp4+TYMzjQWAGx20GhUHuMUX8BCvjfDbGnGu6AXQlv4RA7C54Ox7pvAVEOf5xpdRixTziRZ184zzGLJoEi5tj3o8LmDnz/k9rT5djv+CBG5hzq/uYKUvXxEpV9gZsV/U6jsS0IHe3EBhV37M5x1qlcKh3nRMTeiTtoTC+8MIOoWdpZjMazFj3vG7RHEDuAqOgFlx+2L9tXf9VSKFynhA6+IPa0T7pGUfBUJMHTt657PHSO/UP3Nuh1EV3fnIqxn8eI/Vgxmf23WgigxYg9z7FH/C+797vyObyqvmJ/2T7AfqS8+3ilSM+N37W9xNY4xK72mIoML37K+8Sfh8zzY+pzVEK5ICijU1bIgPDJOMpAkcsrpdq1HJztdMiKyivEHgfsC5M4OXb3vHWjQrvUFew9tKfLsR9BTqmJWakEUDipgP3tY4tkFhD7Wv13QbnyC8v1TrSoFaNiXDOIJg3OJg792INHKH9/gmP392JhrHz1EnWyX1GKXTRWI/1233klwpRjBxA7dimBF10F6vOfjBQvfRehxUko5r09Yk9WI7tB4cGZPcYr99uZ3lC/QMVEiH3lSnExgLbAIVcRx56fPG+bF/AALpto8wD7IUaI2XRHAGgusdW32A0KldpDl/Pv8JDjTC269FzzC1fQ14oRQjCJ6BUB2qUV4SEqpi4CYl+NvYVgqad349jpuyRuPf0+3i97yhz7HTl27qRcGuOwu0ape0wyj5TWNrKmYqcliYBObtHoeaZoE3H4UXhm1XnJhhMcO411ybGP0YsexrRcrMWclNtmv7s9gtgTiuvjf8T++/C7o4/TtnupDQlnrKgWzXPswajx9IfubVjq4QJiz1IxR9IdSep3AbGLCI2Hz/PniO1q81r45f5rISZwSCsGsIjdFbDVOi/tnKPk7mqC1SDwoeS0flKTC52NzIGVUl1yGe/1Tto79qONNhY+L4ljt79/q6iYp6Y1HoDVaWfezByxk65Kv79BqXsMxWnSAalRXnrWiQEY5AbPjfNK3HRFkI7z+JzsHJNc3zKQWpUtKRYq2cA3aI0KUub8LBBPnpWjuPr9bsaxR5NsmwR6f+Tft8U3f+ivRh/7pfDCdz4VG1sLneSx564tOPYWb2YQe66svrlD8HSx28+CYNUSx859yvX5x8Iv919DN74R5dinqDvozFyiUTYbayt6XFfz7/AUavNQ+z8AECxmJNj/16RURg0w2HNnjlAxg6kAcXxs3HLa+Ectyv4ix+4Q+6ifUTFPap6LW1FdEGfFMAfkcqCH3RUq3WMqeArU6bfrWMPesTjDBjFi700FyZpJc5du9Dp1x3D89Y698j0o82OdFl4kjtiXkEy9sdt03S2EIsSeGVvq2LcPgH/rv7ESA3wsC+mL/u9l2vQ6ppn4OC83Ft+8fK+d8bLdpKLslIOIfanqVh8uUik5hxw59iNaMQCu7n0q/LK5zxBigtjTHdtLVJOtn9igjyupKePohBXwMeNCdPzdS1dWOSuWKkIPjK8u5Wr0zY0klI+2xlv4nDLESJ2iGxQ2K2UZ3k17uhz7kU4sc5vTGpXLT5/2N6jMAF3cIfjIj3fEsU/lZpYG1ufyc0/seUpb54JiS+abCy8UjET3gk2eqdxrbogUMxj2t5AkS+C+r+glylSX5oyWukuIXZNjJye1UKAEBMReFTL6+6g0RmWwPVagdOS5G49It/KSei5CGXHsmRROAJjufRT/xfjv4uZP/c8wxthgHRsvZQ3NgqfNPRSqR4UJ59ijzmV5nUDFHPOdXIiOb3uqY+fPyrJGkeXYT+/PYGUKnsREkSL2Zxz7E9uS8zy4T/J7s7XIYuqu0ZgOquAReZeiZdZ/USW1/1rQnJ5Kmy3ALX24InXHlRy7lws+oel25cq2l7q164UAXlyFm6diSMny9vYGjRlscYmPUxygYhaMULBYSOU0FQlaue09YneTCTvn5SYcI0xqwmbwADhrWNDWZ8Ws59iP6YXwmgV+hGYBsXPHuKkK/A/q38TVR38Ug9LQxlazHtSKAXws4wU8RiMmtBcP0i1OkiQ+ZvRe2bGEytNxhWNfktdYek4Be+/SeMkaC03nj3HsbBxR+perPOXpjs+omCezQ1901qhMn30xrRPM0v0tNmYPnWkrd0oKITnLpb6OJoPExmxFnYHRYQJYyxvq8gTH7krwlxB71A6QF6QsyCtEI3RZEbc3j9BgiIrJou1WOnYqAFmijVDFSoVp8JTbPebYOS1yO9j7fd7MQ1EzEbADNkyHqZioGI2thJYqT7mR09iPCt1AjbfneeyzAiW3MvqwsPGdBw94Va84eM6cHXsauayFYDuoNYg9ovoOp1WSRVTMCZaTVjjJ3PPYu+98P+Rln99re6ocO8nAZgt6EgvOPMYyVOavuyucoQMybeU6nNBcwXdiX6A3MhNH2rvVQODy6gvY/Y1XsPvH//3KMzvEtrCEz5mfhBYmSFXnedJI1njp3juEuLt6By2GKK8/+r7WOnZF6Yv5F5E6XGlNGjvuDz41MWx72QYHQE0fDOAR+7ZhLyZx7FnEnl9NEWJfKp1v2iXEzs+bv6/kNPaDQjcp9xmXFKDrScbmCsH+8z9sv7v6nBWGuXOdApSOcdLb80DFcMSuVkwesfojR+zHgqenZ8VQ+qWQxxB7/md6vqilYvcsK+bJbcl5HjX2zWyp8OjmTSs8lOk+tFSNmjNq2Fsstf/KNOzI5c5/z/AZAMC/9PbPzsZ8yHIrgiWjHPpcazMA0NEkxxz7krwCH6Lrk9nfPEIrEsfO91nr2J2nlpluPUBohEIO3YuA5RD7Njh2crL73lbJAjEV44dZZrJipn62HcComHLBObf54PNSQRNfrW0ZYt+7FcamKgB1JN3x3CL0763fdIMI9502XWzPeAfbMr0inse+RO9xq3g6LXeoh4Knxd0Q+yhqN7j1k0Fk7p6RY3/Gsb8LFpzn+qwYkTzxZVWjNxXK3Rv2SJn2X6c49sKp0pULzlJmugItZZ+cYj5//sROT8DyBCm402UeKCdrPDO39Bf9Y7sSYnnT/aRn2x0z4tiLBedTOHrIUDcsXyhGHHuw8zo4bpKQfXx76xH7ecSxu+04Yi/WOfa6yL/g7Saf9bGme9GGIXZqFLLJUTHp4UlB8xufd4O4N9vkJMR+5O9n23Ov12P41LSCKoyeL07F1Mv72jz20x27Wil8JhZ+puD7MCkYY55x7O+GFRm50EMWcsPjx3InNth21rHn2soNJ+SGh7HlX5JcU+y5Y5+/NseWvi2ck7mLY18aK89siLZfomI4xWL3vcAO59hHhUgD71yU6ZKUM9plCbWVzhmIwRbhUFu+3P3guufUHu765ha3vT3JWZ3j2DNUjMo79v5IF52mzXPIa7oXeSpmVOhGxT5LgqcpYidBNVLOPH9xdmy5Ak2vNVlI3IIfz1FkB5wz2XbDqSoeUF4GFFGB0glGwmfH+h0smnsWzNTbfrIGzzj2JzWPNFetoniZRGxX8h5eHKz+RnX23Ozv0x0q8pZSAqtMmtmUpFgWriroc+X3rD7fxqVQyuZ0x14uvGzFAmLPlpDbjdhBG4yixqXY4VzsUbHmH51iXicTc8iZR+wLq4tqY5f+5WiLcLwWuFspkANN58cz50Rubm9x3Vm0HyF2QVkxmcDmMSpmQbp1s81f8xLC57eV0GA3BsQepzvGsr0eK1ctsHkAvPMl+/v5y7MTLNKHuSGteOd2CJIfXiV0SWeI2Vlb+fzyyA6AlrqQUcvBtbZW0XLxep1v0NPgJ9pnVMwTWum5uJX8WNQIMthteR8vuP6b2+deZpvbF/SU3HA/toWXpD6fKxampdyXsKjz0YMfCB8eQ+yu+W+RiREcs5yeNgCU28CT+uCXicdxaCUxlhe4xA4XYo+Sof+Iilm5whgpK2bBsTcuGCjgMkXIsSeTVprxsnGFVLf7PR7v7T28fzZ3EFnEvujYD2fFbLmgHLt99QrEThz7blDoR8qKCbK9ixw7ADz4Dvtvcy9bGb0Ua7mrdSTMJsIKSqyIATWlxC0lLPCK5wNdzIQQd0LspzTrCediv5BkxdQFauwZFfNkdqx3IrdD2eBdFVD65Quv+J+V602q7lC0lJMyBf7/9s41SI7qOsDf2Znd2dn3SiutVu8VAgkwRpJXPI14BgHGAhJiC7siIifGpEzFlAM2FLGtVOJKHBJSSVUSyglOsItXuRInqrjiwiEkhIp5CCyQMAgEli0JSYuQdrXPee3Nj7490z3TPdM9u+rZndyvamt6bvd0n719+/S55557LiQ7vRS797HxpRtCXzdehcVemgtel7c6F+ywWrPnZKr8Ie6HQyXaLYudCdf6pbZCAgq52Ctg/8QvF3yivSBrKpvzdU0Vu1ns802MTzA0niHWILR7+dirGDz1yxXT1uLtakj4WewOPH3sZdL2um6Jrdjn9btPqg+KhXiegiyhV0hvIfn01EEWhReRgrXvGtspL1/ex54rTTXth53RMpOrNMPb5/+1x3Byqbwrz1js0yQ/kSHw27Y0VwxAJllQtp3ze/PbUylbsYe32P2UZVt3qW/TKyETQMcSx/TxgLcuHnKlJ4AmH1lbOpwhcdZHmLjfRPs8umMTdMUmXS4Xl8UekKx+8OI+FnvSEb43OpmlxVbstitG73OFMkJ+8GsyNcHJ8TRdycYSpdUgRW6VvCumdCEJKCyP5jdByStOHqDBx8UlHq6YsVTWHRVTnFLAy5JZdoH12bnU8zrxkGNWlZiMFe65/aKNBTQ8RpU7dz94j304yUfF+LxwvbAt9kyunOnnxjWnRLeFZtIMjljtoaUGFntdhTv65TD3QvkN8gGqux+O62W7HANbU9pi98utXg4/xd7RXbrc25RH7Dx4vwQqXjcZ3hXj1/Np63TOTrQjhIoVu/8LJ57s5JLeQeRYqrD8HTBZjWLXP/HzsTckCz78sVSO3rzF7rYQS5SDPcFkcoKhiYwrFBIspZqIxzwXV6gYFeNnsTsVe8jFoxPxGMnGGMMTGbp0+mF32t4EMIFnH/Wjn7Z87Bd+oWiHJYOf+7BaJuMdWFMlJLRiH/dwxVRycaSrUOy2GzRdQbH73iatGxJkeH/IUuzOCXBRUVcWe2NYH7uPxZ5cbA1SjhUt1qB0hIWqIlqgyUdZNnsNnHmEQAK0zSv0HoI+/00zqNg7uuYXvtjpFUKEftLcgZw4YG23FHpF1Vjsw6qVKSU0tM73PqC54IoZTWVJ6DEHe0aqXX8l1pQdrpZOcXwkxfzW0h5Jc7Hv237R+0TF5H3sPha783yu22oLWdTeim99V0sjQxOZ/GBve3NjwcdeNBjonuXbAZu/CV3L8cJvwL9aJhutl60IJPWCLfGAi8KPqdI2WdFityco+dwXL6by4YrB26TrWdSDwQnJ8P6Qleyuwyj26ZEI4RMsp/zPvmQLr7RdzqHL/8L9C51HXFURQpgI8ZA0eIRAAnR0lEboVMLzxVGBJp8uuNc4QUmuj3IvnJb51uLU9ramGov9RXUuV6QfQrpXeB/geDmOpbOF8qKom5LJR/rBjk9l2Ht4mMVdpUq1JL486AQlv7S9rmmMxVejYuRIZ7KR4YkMI5NZ4g3innmqLdBQC29pefxccuXIlIkdzzQVXrYNen6HXzqKYuxQSWdVlbjRiihY7MF97HZ9ZaYqWOx+OxwW+5Hh2in2+nLFJML52IsnJxXOk+Bj9+ws3aEXnfZdCq7ctcoszDGlJN/QwTt23j7HuEpYa4MG/B/tFAlhiDcGaIi2xV4mX31JLHBHYSDauTB1OhNesaenFB+oXt8BSecCHKd0dAtQ4oopsdi1km6ULGPpHH2d7nvd3drEwo6E52+qHTx14pkDqEJ762ppZHg8w+hklvbmuH5RFPnY7fOHcPX4uQ/9GL7xEZqXr/Pdn0tYFnvMsXh7Y5nIFif5qBiPWbd+5KNiQljso029TKgmJjx6CIFw+NgPntCKvTl6NVtXFntDLMYLZ93Doks+U/FYl0oPOBmha+BWABYN3FSFdP4Mi7txlwtRHJPgKQIAklUo9mBoxR5v9Sj1ocMxSOfo/t86sCz01SsNSDo5IqWrRwAADORJREFUOe5Q7NoVY7t/Srrz+oXQpPPmLJ/nru97N6/h0e0XuH8zzQlKTmy9a7lt3BkpC8e4a7kz2cjQRJqRyYzlhgFYsBZ61pDVgQDh1sqtzmLvHLiVxMLV/gfo/DQNqaF8UcIvHUUR46o0KqaSK6YaH/vHt2zntrZHuOy8VWWPcyUjc7litMUuGfYPjhJvkIpyng6mpdhF5A9F5HUR2S0iT4vI4sq/Or1c9Jmv0X/OxorHCYqBUz+2rN+ArN14DewYZuXZH5uOiCWMiluRN7V5pFDVjDfoByGg5VVNdzoQ+vrZeLHFVUaunrMK222F8YIbzusLffnPXmi9GLzyuBRjRycAhSyTXgm+ADqt876nLJk2rnS7v1qa4nQX+93tsMELigchLSq5Ylzoem1JxBxLCFaw2JNNDI1brpj8QOzyC+Gul/K5gp7dV7pKlx8NDUJKxWlPzlyuGIB4q9WuY6nhfJkznW85xuxwR0eG04oWe97HHtwVs7q3g3+5d0t+HdzQOCz2o6cm6WlLuGY2R8V0XyUPKqW+BiAivwt8Hbhz2lJFwGI1WGsR8kzE2vQybhYtXaWRMvljG9ogjOciZJRFUGwXpFd2SpsSG7Hvo9C+2Aqz83JNSfCwsHs3r+H3rl1DLMBD8+7gWOGLdk2Mp33SBSzbCNt/xLqJlfzl5BRn9gZQPM2dsGPYd3elCUpupCCXHT4ZwBUzNJHhxHi6okIK0hr6OpOowWZ6O2Y2Kqap3RpXaco4FHuHvxHjxB48tVNEgPWSLUc1Fnt1OONPLUPgqFg9pQXtM5fTPgzTUuxKqVOOr62EXWl5tqBylY85jUw0drkUe3tXaVjjB3SxAEjF2yELU+mJ6AT0YCpjKR1VnK+j3Isk1gh37/GYhGT7H4IP9IoIPjP0S3j72EiJfPaAqucA3IqL2RRYksr8/bYB/uF/DxAPYrlp+dqb45DTLqSku9dQfJbOlkbS2SkOn5zgolXuKKEwPnWbWIP4rtE7HRIdlrJrzhbURmvAwf18npl04V6WRCcVkapiglJQnLWadU5mmn8G3PYUf/NvCj6Yord4PCYipu38EZFvAtuAYeDKMsfdAdwBsHy5d3hVrUiM/LKm108le61QY02HY1IUwKFtL9KuQw0zjW0wCZmxIWrBBE1WqFrKysEiRUm7cg5frmdkQcyjydkv1gAJocIwPu9cWk68wZ7Dw1Ckp8bLJPiaaa5cu5Ar15afg5AjRowcozpksTPZaLlTNt3r6+Kx6dIuk8GRFPPbKljsQfMoVTFXoxItepZ1S66g2IP0uACW9PXBcZCJkwAcUj0srfDPFCx274ljM8Vz7xS5udZcR89PXoYPBjljQfiotJmgYt9QRP5DRPZ6/N0EoJR6QCm1DHgMuMvvPEqpbyulBpRSAwsW+LsaakF76lhNr59rXeT6XhzzvnTVWjr1Cje5RkuR5sZro9iPN1kDoK0py5VVHEd+ZLjQ7T10MmCvQk/8qiYTZTkmtz/DGZPf89yXt9hrMCvQi4xOI3HYOamloQGu+v187nQ/FnUWrMKeNreFmCta/DzQjMq2hdC5JIjYoViz0hokb1ejoX/7G1etB6Bhcojt6Xu5JfUHFX+Tj4oJEe4YlBNjhXMeO1Xq6rn8LOueXbq6NGVIFFQ0V5RS1wQ81+PAD4FvTEuiiHjr+u8zOfIh656/k47cydN2nT1XfZfs5AjryxzT1HcOHAx2vkzrIjhR1P2LkJ4v7OSXP3mCzBvPAdDY7m64p0YKD+3J0YCWkp0y9tIvzYiMNvPak7Q0JxiZzPKLtnWsyP48v88OPexumdkBwmrJxZKQG+PgyXGgg64W/5DTYkPVGblTHMVzfNRSQGf1tnHdR/roqWDRA3DNjoIbaAZpTLTA2hthwzZ4/FOhftvUpg2I8RM8O1XuaSrw9pSOwtqwLdS1grBuWRf9Pa2Mp7Pcc+2akv3bLl7Bpat7WL2wNhb7tPqhInKmUuod/XUL8Nb0RYqGtRdey+ipk/A8zFenT7Gft6lyaOSG636Tl3NpNr7y1YrHrt/6DZ55PMYlN8+sEgTYd8uPmMqmKZccODl/Gctv/ArDu604/+ZOtzX56SvWgzaSu9NHg1042VV28HE6nL+0i+f3H+dnm59khSP65v4bzmZVTxtXVXCRRIWKJyEN2ZSt2IO/cJZ2F5R5f4+717NQD9597tJ+tl4Q0AUaT8zoQtYutj4GwOWph4gxxX8G/Z398veZvOfFh3SycvJxDpz/iXAyBqC7tYln77nCd7+I1Eypw/R97H8iImuw4jR+wRyJiLFp1QvsvrTiDi6uoRzS0MDGT97JyK4dvN02QLlgytbWVq7+/B9XPOfR+BKGk0sptSX8WXN+8FroW7oSDuxh2Qp33PKiM86HTzwEP/wym/ujn3FXzB/d/BH+a98g157rdnd1NDfy+U3lY5WjpKVrAYwf5Int6/mznzbwxSv848HjRRFFzY0xbl63mPeOj3F2n3vMY/3ybv7nK1eybN7Mjl9Ml9/ecnW4GZnz+uHmh2H11fzOwhMMjc+8e6WekHATF2aGgYEBtWvXrsiva5hBJk/BwRfhzF8p3ZfLwnMPWsmlWoKFs/2/4djP4MR7cPaN7vLhw/Dqo3DF/b4jnEophsYzpXH0Bk/2HR3h9UND/HoVE+BmKyLyilJqoOJxRrEbDAbD3CCoYq+rlAIGg8FgMIrdYDAY6g6j2A0Gg6HOMIrdYDAY6gyj2A0Gg6HOMIrdYDAY6gyj2A0Gg6HOMIrdYDAY6oyaTFASkQ+wUhBUQw9wfAbFmSmMXOEwcoXDyBWO2SoXTE+2FUqpiulxa6LYp4OI7Aoy8ypqjFzhMHKFw8gVjtkqF0Qjm3HFGAwGQ51hFLvBYDDUGXNRsX+71gL4YOQKh5ErHEaucMxWuSAC2eacj91gMBgM5ZmLFrvBYDAYyjCnFLuIXCci+0Rkv4jcV0M5lonIsyLypoi8ISJf0uU7ROSwiOzWfzfUQLYDIrJHX3+XLpsnIj8WkXf0Z3fEMq1x1MluETklInfXor5E5DsiMigiex1lnvUjFn+l29vrIrIhYrkeFJG39LV/ICJdunyliEw46u3hiOXyvW8icr+ur30isjliuZ5yyHRARHbr8ijry083RNvGlFJz4g+IAe8Cq4Am4DXgnBrJ0gds0NvtwNvAOcAO4J4a19MBoKeo7E+B+/T2fcC3anwfjwIralFfwCZgA7C3Uv0ANwD/DghwEfBixHJdC8T19rcccq10HleD+vK8b/oZeA1IAP36eY1FJVfR/j8Hvl6D+vLTDZG2sblksV8A7FdKvaeUSgNPApVXij4NKKWOKKVe1dsjwJvAklrIEpCbgEf19qPAzTWU5WrgXaVUtRPUpoVS6jngRFGxX/3cBHxXWbwAdIlIH6cBL7mUUk8rpbL66wvA0tNx7bByleEm4EmlVEop9XNgP9ZzG6lcIiLAp4AnTse1y1FGN0TaxuaSYl8CHHR8P8QsUKYishJYD7yoi+7SXarvRO3y0CjgaRF5RUTu0GW9SqkjYDU8YGEN5LLZivuBq3V9gX/9zKY29zksy86mX0R+KiL/LSKX1UAer/s2W+rrMuCYUuodR1nk9VWkGyJtY3NJsXut8FvTkB4RaQP+CbhbKXUK+FvgDGAdcASrOxg1lyqlNgDXA18UkU01kMETEWkCtgDf10Wzob7KMSvanIg8AGSBx3TREWC5Umo98GXgcRHpiFAkv/s2K+oLuA238RB5fXnoBt9DPcqmXWdzSbEfApzLjS8F3q+RLIhII9aNe0wp9c8ASqljSqmcUmoK+DtOUze0HEqp9/XnIPADLcMxu3unPwejlktzPfCqUuqYlrHm9aXxq5+atzkRuR24Efis0k5Z7er4UG+/guXLPisqmcrct9lQX3HgV4Gn7LKo68tLNxBxG5tLiv1l4EwR6deW31ZgZy0E0T68R4A3lVIPOcqdvrFbgL3Fvz3NcrWKSLu9jTX4thernm7Xh90O/GuUcjlwWVK1ri8HfvWzE9imIxcuAobt7nQUiMh1wFeBLUqpcUf5AhGJ6e1VwJnAexHK5XffdgJbRSQhIv1arpeikktzDfCWUuqQXRBlffnpBqJuY1GMFM/UH9YI8ttYb9wHaijHx7G6S68Du/XfDcD3gD26fCfQF7Fcq7CiEl4D3rDrCJgPPAO8oz/n1aDOWoAPgU5HWeT1hfViOQJksKyl3/KrH6xu8l/r9rYHGIhYrv1Y/le7jT2sj/01fX9fA14FPhmxXL73DXhA19c+4Poo5dLl/wjcWXRslPXlpxsibWNm5qnBYDDUGXPJFWMwGAyGABjFbjAYDHWGUewGg8FQZxjFbjAYDHWGUewGg8FQZxjFbjAYDHWGUewGg8FQZxjFbjAYDHXG/wHgwsJLgNnu7gAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from scipy.integrate import ode\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "def rhs(t, Y, q, omega_d, b):\n", " \"\"\" damped driven pendulum system derivatives. Here, Y = (theta, omega) are\n", " the solution variables. \"\"\"\n", " f = np.zeros_like(Y)\n", " \n", " f[0] = Y[1]\n", " f[1] = -q*Y[1] - np.sin(Y[0]) + b*np.cos(omega_d*t)\n", "\n", " return f\n", "\n", "def restrict_theta(theta):\n", " \"\"\" convert theta to be restricted to lie between -pi and pi\"\"\"\n", " tnew = theta + np.pi\n", " tnew += -2.0*np.pi*np.floor(tnew/(2.0*np.pi))\n", " tnew -= np.pi\n", " return tnew\n", "\n", "\n", "def int_pendulum(theta0, q, omega_d, b, tend):\n", " r = ode(rhs)\n", " r.set_integrator(\"dopri5\", nsteps=150000)\n", "\n", " sol = []\n", " r.set_solout(lambda t, y: sol.append([t, *y]))\n", "\n", " t0 = 0.0\n", " omega0 = 0.0\n", " r.set_initial_value((theta0, omega0), t0)\n", "\n", " r.set_f_params(q, omega_d, b)\n", "\n", " r.integrate(tend)\n", " return np.array(sol)\n", "\n", "\n", "s = int_pendulum(np.radians(60), 0.5, 0.6666, 1.5, 200.0)\n", "q = int_pendulum(np.radians(60.001), 0.5, 0.6666, 1.5, 200.0)\n", "\n", "plt.plot(s[:,0], restrict_theta(s[:,1]))\n", "plt.plot(q[:,0], restrict_theta(q[:,1]))\n", "\n", "plt.show()\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "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.7.3" } }, "nbformat": 4, "nbformat_minor": 2 }