{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "[Table of Contents](table_of_contents.ipynb)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Topic 21: The Matrix Exponential\n", "Author: Thane Downing thanedowning@gmail.com" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Introduction \n", "The matrix exponential is a useful tool in solving systems of linear differential equations, helping to describe the behavior of linear systems, as well as having several other intersting uses. The matrix exponential works much like the scalar exponential and has many of the same properties. While perhaps initially unfamiliar, the matrix exponential developes readily from very familiar concepts and contributes to a straightforward understanding of how matrix math fits into a larger framework." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Explanation of the theory\n", "The eponential of any square matrix A can be writen as $e^A$, and can be understood in a similar way that we understand the scalar equivalent exponential $e^x$. From calculus, we know that $$\\frac{d}{dx}e^x = xe^x$$ The same is true of the matrix exponential $$\\frac{d}{dx}e^A = Ae^A$$ The scalar exponential has the property $(e^x)^{-1} = e^{-x}$ which follows directly from algebra. The matrix exponential shares this property such that $(e^A)^{-1} = e^{-A}$. The Taylor series can be use to define $e^x$. $$e^x = 1 + x + \\frac{x^2}{2!} + \\frac{x^3}{3!} + \\ldots + \\frac{n^2}{n!} + \\ldots$$ The matrix exponential can also be defined this way. $$e^A = I + A + \\frac{A^2}{2!} + \\frac{A^3}{3!} + \\ldots + \\frac{A^2}{n!} + \\ldots$$ In fact, this is the most general way to define the matrix exponential, and it works for any square matrix. Therefore, in general we will define the matrix exponential as $$e^A = \\sum_{n=0}^{\\infty} \\frac{1}{n!}A^n$$\n", "\n", "One classic property of scalar exponentials that doesn't translate generally to matrix exponentials is the property $$e^ae^b = e^{a+b}$$ For the matrix exponential case, in general $$e^Ae^B \\neq e^{A+B}$$ This is because $A$ and $B$ must be able to commute in order for these to be equal, i.e. $AB = BA$. This can be seen using the definition given above; $e^Ae^B$ can only be rearranged into $e^{A+B}$ (by multiplying to instances of the Taylor series definition above) if, in the following product $(A+B)(A+B) = A^2 + AB + BA + B^2$, the sum of $AB + BA$ can be writen $2AB$ or $2BA$. In general this is not the case, therefore in general $e^Ae^B \\neq e^{A+B}$.\n", "\n", "An expanded form to represent the matrix exponential, that only works for diagonalizable matrices, is given as $e^A = X e^{\\Lambda} X^{-1}$, where $\\Lambda$ is the diagonal matrix of the eigenvalues of $A$ and $X$ is an invertable matrix made up of the eigenvectors of $A$. Taking this one step futher we can find that $$e^\\Lambda = \\begin{pmatrix}\n", " e^{\\lambda_{1}} & & & \\\\\n", " & e^{\\lambda_{2}} & & \\\\\n", " & & \\ddots & \\\\\n", " & & & e^{\\lambda_{n}}\n", "\\end{pmatrix}$$ which makes computation quite straightforward.\n", "\n", "The matrix exponential is handy in solving systems of linear differential equations, such as those encountered in continuous time state space equations. Given some linear ordinary differential equation $\\frac{dx}{dt} = ax$, we can determine that the solution is $x(t) = e^{at}$. Now suppose we have a system of linear differential equations such that $\\frac{d\\textbf{x}}{dt} = A\\textbf{x}$. The solution to this system is $\\textbf{x}(t) = e^{At}\\textbf{x}(0)$. Using the expanded form given above, this solution can be rewriten $\\textbf{x}(t) = e^{At}\\textbf{x}(0) = Xe^{\\Lambda t}X^{-1}\\textbf{x}(0)$. We can use the eigenvalues of A to determine the behavior of the solution similar to the way we can determine system dynamics in other settings. The solution will decay if Re$(\\lambda_i) < 0$, it will just oscillate if Re$(\\lambda_i) = 0$ ($\\lambda_i$ is purley imaginary), and it blow up if Re$(\\lambda_i) > 0$, where $\\lambda_i$ is the eigen value associated with a given eigenvector in the system.\n", "\n", "Occasionally, this solution using the matrix exponential will be represented in terms of the Laplace transform as in $$e^{At} = \\mathcal{L}^{-1}(sI - A)^{-1}$$ However, using the Neumann expansion $(sI - A)^{-1} = \\frac{1}{s}(I + A/s + A^2/s^2 + \\ldots)$, then taking the inverse Laplace transform produces the same Taylor series form of the matrix exponential as that given above.\n", "\n", "In the context of continuous time LTI system defined by the state space equations $$\\dot{\\textbf{x}} = A\\textbf{x}(t) + B\\textbf{f}(t)\\\\\n", "\\textbf{y}(t) = C\\textbf{x}(t)+D\\textbf{f}(t)$$\n", "the matrix exponential is used in the solution $$\\textbf{x}(t) = e^{At}\\textbf{x}(0) + \\int_{0}^{t} e^{A(t-\\lambda)}B\\textbf{f}(t)d\\lambda$$ If instead of starting at $t = 0$, we start at some arbitrary time $\\tau$, then the solution to the state at $t$ will be of the form $$\\textbf{x}(t) = e^{A(t-\\tau)}\\textbf{x}(\\tau) + \\int_{\\tau}^{t} e^{A(t-\\tau)}B\\textbf{f}(t)d\\lambda$$ The matrix $e^A(t-\\tau)$ can be seen as a method of moving from some arbitrary state $\\textbf{x}(\\tau)$ to another $\\textbf{x}(t)$, and is therefore sometimes refered to as the propagation matrix or the state-transition matrix denoted $\\Phi(t,\\tau)$. This matrix has a couple interesting propeties: $$ \n", "\\begin{matrix} \n", " \\Phi(t,t) = I \\\\ \n", " \\frac{\\partial \\Phi(t,\\tau)}{\\partial t} = A \\Phi(t,\\tau) \\\\ \n", " \\Phi(t,\\tau) = (\\Phi(\\tau,t))^{-1} \\\\ \n", "\\end{matrix}$$\n", "\n", "Although there are contrived examples where the solution to the matrix exponential is nice and tidy, in general the solution will be rather complex. For instance, the general solution to a $e^A$, where $A$ is a 2x2 matrix $$A = \\begin{pmatrix}\n", " a & b\\\\\n", " c & d\n", "\\end{pmatrix}$$ is given by \n", "$$\\begin{matrix} \n", " e^A = \\frac{1}{\\Delta}\n", " \\begin{pmatrix}\n", " e^{\\frac{a+d}{2}}(\\Delta cosh(\\frac{1}{2}\\Delta)+(a-d)sinh(\\frac{1}{2}\\Delta)) & 2b e^{\\frac{a+d}{2}}sinh(\\frac{1}{2}\\Delta)\\\\\n", " 2c e^{\\frac{a+d}{2}}sinh(\\frac{1}{2}\\Delta) & e^{\\frac{a+d}{2}}(\\Delta cosh(\\frac{1}{2}\\Delta)+(d-a)sinh(\\frac{1}{2}\\Delta))\n", " \\end{pmatrix} \\\\ \n", " \\Delta = \\sqrt{(a-d)^2+4bc}\n", "\\end{matrix}$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Simple Numerical Examples\n", "There are several examples we can use to verify the results of the preceeding section. First, we generate a random square matrix and use the matrix exonential function from the scipy.linalg library to calculate the matrix exponential." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "from scipy.linalg import expm\n", "from math import factorial, sinh, cosh, exp, sqrt, cos, ceil\n", "import random\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "A =\n", "[[ 0.41777503 0.53103038 0.04252436 0.41216531]\n", " [ 0.69812543 0.79625546 0.76295725 0.41021156]\n", " [ 0.53157639 0.82114634 0.18914389 0.5079495 ]\n", " [ 0.16940129 0.18442986 0.58999039 0.67698445]]\n", "e^A =\n", "[[ 2.11211077 1.38598808 0.72110255 1.16504324]\n", " [ 2.09831048 3.57898164 1.9539366 1.83430856]\n", " [ 1.59212573 2.1362369 2.19697908 1.61725546]\n", " [ 0.88873006 1.12036052 1.30709399 2.58273717]]\n" ] } ], "source": [ "A = np.array([[random.random(),random.random(),random.random(),random.random()],\n", " [random.random(),random.random(),random.random(),random.random()],\n", " [random.random(),random.random(),random.random(),random.random()],\n", " [random.random(),random.random(),random.random(),random.random()]])\n", "print \"A =\\n\", A\n", "print \"e^A =\\n\", expm(A)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next, we can test our Taylor series expansion method (making sure to use enough iterations to get a good approximation) to verify that this approach will give us the same thing as the library function does. " ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 2.11211077 1.38598808 0.72110255 1.16504324]\n", " [ 2.09831048 3.57898164 1.9539366 1.83430856]\n", " [ 1.59212573 2.1362369 2.19697908 1.61725546]\n", " [ 0.88873006 1.12036052 1.30709399 2.58273717]]\n" ] } ], "source": [ "taylor_estimate = np.eye(4) + A\n", "add = A\n", "for i in range(2,200):\n", " add = np.matmul(add,A)/i\n", " taylor_estimate = taylor_estimate + add\n", "print taylor_estimate" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can also test the expanded form of the matrix exponential by using the scipy.linalg library to find the eigenvalues and eigenvectors of $A$ to verify that this method also produces what we expect to see." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 2.11211077 1.38598808 0.72110255 1.16504324]\n", " [ 2.09831048 3.57898164 1.9539366 1.83430856]\n", " [ 1.59212573 2.1362369 2.19697908 1.61725546]\n", " [ 0.88873006 1.12036052 1.30709399 2.58273717]]\n" ] } ], "source": [ "lam, X = np.linalg.eig(A)\n", "eigen_decomp = np.matmul(np.matmul(X,expm(np.diag(lam))),np.linalg.inv(X))\n", "print eigen_decomp" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can check the basic property $(e^A)^{-1} = e^{-A}$" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "e^-A =\n", "[[ 0.76307929 -0.33076492 0.17330506 -0.21782085]\n", " [-0.30979663 0.71708154 -0.50396241 -0.05396847]\n", " [-0.25085094 -0.497817 1.11972926 -0.23443581]\n", " [-0.0012397 0.05469565 -0.40770436 0.60419532]]\n", "(e^A)^-1 =\n", "[[ 0.76307929 -0.33076492 0.17330506 -0.21782085]\n", " [-0.30979663 0.71708154 -0.50396241 -0.05396847]\n", " [-0.25085094 -0.497817 1.11972926 -0.23443581]\n", " [-0.0012397 0.05469565 -0.40770436 0.60419532]]\n" ] } ], "source": [ "print \"e^-A =\\n\", expm(-A)\n", "print \"(e^A)^-1 =\\n\", np.linalg.inv(expm(A))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A quick check will show that indeed, in general $e^Ae^B \\neq e^{A+B}$" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(e^A)*(e^B) =\n", "[[ 2.89313406 0.6620096 0.70024447 0.35380883]\n", " [ 4.2540861 12.28011182 5.30642275 3.5365327 ]\n", " [ 2.72511048 4.51514568 6.84983879 2.1878806 ]\n", " [ 1.759763 2.07105209 2.90330633 5.14254724]]\n", "e^(A+B) =\n", "[[ 7.49914959 7.82533417 7.16019721 5.87058551]\n", " [ 17.40289883 21.92329833 19.12141699 15.75151267]\n", " [ 14.0086614 17.02401286 15.89451394 12.54361878]\n", " [ 12.57003962 14.49902883 13.63391563 12.01335549]]\n" ] } ], "source": [ "B = np.array([[random.random(),random.random(),random.random(),random.random()],\n", " [random.random(),random.random(),random.random(),random.random()],\n", " [random.random(),random.random(),random.random(),random.random()],\n", " [random.random(),random.random(),random.random(),random.random()]])\n", "C = expm(A)*expm(B)\n", "D = expm(A+B)\n", "print \"(e^A)*(e^B) =\\n\",C \n", "print \"e^(A+B) =\\n\",D" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can even test the formula for computing a 2x2 matrix $\\begin{pmatrix}\n", " a & b\\\\\n", " c & d\n", "\\end{pmatrix}$ using the terms a, b, c, and d." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "H =\n", "[[ 1.76853665 1.72718204]\n", " [ 1.81716025 3.22362205]]\n", "G =\n", "[[ 1.76853665 1.72718204]\n", " [ 1.81716025 3.22362205]]\n" ] } ], "source": [ "a = random.random()\n", "b = random.random()\n", "c = random.random()\n", "d = random.random()\n", "\n", "H = expm(np.array([[a,b],[c,d]]))\n", "G = (1/sqrt((a-d)**2+4*b*c))*np.array([\n", " [exp((a+d)/2)*(sqrt((a-d)**2+4*b*c)*cosh(.5*sqrt((a-d)**2+4*b*c))+(a-d)*sinh(.5*sqrt((a-d)**2+4*b*c))),\n", " 2*b*exp(((a+d)/2))*sinh(.5*sqrt((a-d)**2+4*b*c))],\n", " [2*c*exp(((a+d)/2))*sinh(.5*sqrt((a-d)**2+4*b*c)),\n", " exp(((a+d)/2))*(sqrt((a-d)**2+4*b*c)*cosh(.5*sqrt((a-d)**2+4*b*c))+(d-a)*sinh(.5*sqrt((a-d)**2+4*b*c)))]])\n", "print \"H =\\n\", H\n", "print \"G =\\n\", G" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Engineering Application \n", "One of the most applicable uses of the matrix exponential is in propagating the states of a system described by state space equations. We can choose from thousands of examples of physical systems that have well defined state space representations to use as the basis for this exercise. The following code is flexible enough to implement any LTI constant coefficient system. Only the A, B, C, and D matrices need to be changed (along with the corresponding dimensions of u, x, and y)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The following example models an RLC circuit with two capacitors in parallel, where the input is an AC voltage source with an amplitude of five volts, the intermidiary states are the voltages over the two capcitors, and the output is the current through the first resistor, as shown in the picture below. " ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "c1 = 10*10**-6 # In Farads\n", "c2 = 20*10**-6 # In Farads\n", "r1 = 200 # In Ohms\n", "r2 = 100 # In Ohms\n", "\n", "A = np.array([[-1/(c1*r1)-1/(c1*r2),1/(c1*r2)],\n", " [1/(c2*r2),-1/(c2*r2)]])\n", "B = np.array([[1/(c1*r1)],[0]])\n", "C = np.array([[-1/r1,0]])\n", "D = np.array([[1/r1]])\n", "\n", "x_0 = np.array([[0],[4]])\n", "\n", "t_step = 0.001\n", "t_start = 0\n", "t_end = 15\n", "\n", "bins = int(ceil((t_end-t_start)/t_step))\n", "\n", "u_vals = np.zeros((bins,1))\n", "x_vals = np.zeros((bins,2))\n", "y_vals = np.zeros((bins,1))\n", "\n", "\n", "P = expm(A*t_step) # This is the propagation matrix\n", "\n", "x_val = x_0\n", "\n", "for i in range(bins):\n", " u_val = 5*cos(i*t_step)\n", " y_val = np.matmul(C,x_val)+D*u_val\n", " u_vals[i] = u_val\n", " x_vals[i,0] = x_val[0]\n", " x_vals[i,1] = x_val[1]\n", " y_vals[i] = y_val\n", " x_val = np.matmul(P,x_val)+np.matmul(P,B)*u_val*t_step " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the following plots, the red line shows the voltage of the input signal u(t) (AC voltage source), the blue and black dashed lines show the voltage on capacitors 1 and 2 respectively, and the green line shows the current through resistor 1 in amps. The x axis is the number of time samples." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "<function matplotlib.pyplot.show>" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYQAAAEICAYAAABfz4NwAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvIxREBQAAIABJREFUeJzsnXd4FFUXh9+TnkAIvYQWele6IEUsKAiKXVFAmoiKoiBgQarYaEpRmiCCAioCAsKnICrSpEiR3ntI6Oltz/fHDBIgCYHsZnbDvM9zn92p9zd3yrn1XFFVbGxsbGxsvKwWYGNjY2PjHtgGwcbGxsYGsA2CjY2NjY2JbRBsbGxsbADbINjY2NjYmNgGwcbGxsYGsA2Cjc01iMh2EWmWTXGJiEwTkXMi8nd2xOkuuCqdReQ5EfnF2ee9FbANggcgIo1FZLWIXBCRsyKySkTqZfGch0TkPmdpvE5cYSKiIhJthlMiskhEmmdH/DeKqlZT1d+zKbrGQHOghKrWd2VEItJRRFLMe3BRRLaISOtU2y/dJ590jq8oIt+LyGnzWdwqIr1ExDud/fOIyKcicsSMc7+5XBBcl86q+o2q3p9Kh4pIeWfHkxOxDYKbIyJ5gEXAWCA/UBwYDCRYqesmyauquYHbgV+BeSLS0VpJllMaOKSqMdkU3xrzHuQFPgdmi0je6x0kIuWAdcBRoIaqhgBPAnWB4DT29wOWA9WAFkAeoCFwBriu4UvPKNm4GFW1gxsHjBfufDrb/ICzGC/opXWFgVigEFAQw5icN/dbiZEJmAE4gDggGuhrHtsAWG3uvwVoluq8vwPvm9ujgYVAAeAb4CKwHghLR2cYoIDPVevfBE6ZmvoAc6/aPgb4LFX8Q4FVQBTwC1Aw1b7fA+HABeBPoFqqbV9hfPyWmNpXAUWBT4FzwC6gVqr9DwH3mf+9gXeA/Wa8G4GSgACjgQjz+rcB1dO5/lDgJ/Me7ANeMNd3AeKBFFPX4DSOLQf8hvEhPW2md96rtL4JbDWvfQ4QkI6OjsBfqZaDzPtSL6P7ZG6bCSy+gee2q3lvc2ewT+p0HgT8YMZz0Tw+vbS/Rqf5fHS9+jrNZ0GBGDONn7b6nXbnYLkAO1znBhk5qzPAdKAlkO+q7Z8DH6da7gksNP9/CEwAfM3QBBBz238vo7lc3IznQYwPdHNzuZC5/XfzY1YOCAF2AHuA+wAf4GtgWjrXkOaHBihrrq8CFDNf2rzmNh+Mj22dVPHvByoCgebyR6nO1Rkjp+qP8aHfnGrbVxgf0zpAAMYH9iDQwfzovA+sSLV/6g9VH4yPfSUMI3A7hiF8wPxA5TXXVwGKpXP9f5r3KQCoCUQC95jb/vt4pXNsefNe+GMY+T+BT6/S+jeG0ckP7AS6p3Ou/+Iyr/sVIBEonNF9MreFA51u4LmdDUy/zj6p03kQkAQ8gvH8BWaQ9tfoJB2DYC4rUN7qd9kTgl1l5Oao6kWMemYFJgORIvKTiBQxd5kOtBURMZfbY5QAwHjBigGlVTVJVVeq+YakQTvgZ1X9WVUdqvorsAHDQFximqruV9ULGLnt/aq6TFWTMXLotW7w8k6Yv/lV9STGx+5Jc10L4LSqbrwq/j2qGgd8h/FxBUBVp6pqlKomYHxcbheRkFTHzlPVjaoaD8wD4lX1a1VNwchVp6e9K9BfVXerwRZVPYORtsFAZQwju9O8hisQkZJAI6Cfqsar6mZgCoYxui6quk9Vf1XVBFWNBEYBd1212xhVPaGqZzFKbjWvOdFlGojIeYySyQignapGZEJKAeCa63Pi/mBUZ803n7840k97GxdhGwQPwPzYdFTVEkB1jNzgp+a2dRhVRM1EpDJGjvIn89DhGLn6X0TkgIi8lUE0pYEnReT8pYBhiIql2udUqv9xaSznvsFLK27+njV/p2MYJszfGVftH57qf+yl+ETEW0Q+MhstL2LkPMGoMsuq9pIYJZMrUNXfgHHAeCBCRCaZ7T1XEwqcVdWoVOsOc/naM0REiojIbBE5bl7bTK68LkgnXdJhrarmBfJhPCdNMqMDo7RY7Lp73fz+YLRPpCbNtLdxHbZB8DBUdRdGFUj1VKsvfUjbAz+YuWDMHHNvVS0LPAz0EpF7L53qqlMfBWaoat5UIZeqfuTCy3kUo1pot7k8H7hNRKoDrTHqyzPDs0AbjOqrEIwqBTCqGbLKUYxqsmtQ1TGqWgeoilGV1SeN3U4A+UUkdcNrKeB4JuP/AONe1VDVPBj3OcvXparRwEtAexHJTMluGfD4DUSxDHhARHLdiKyrltNL+0sN8EGp1hW9gXhs0sE2CG6OiFQWkd4iUsJcLgm0Bdam2m0mxse1HUZd/qVjW4tIebM66QJG46XD3HwKow4/9TkeEpEHzBx3gIg0uxSvk6+piIj0AAYCb6uqA8A0ZD8A3wJ/q+qRTJ4yGKPX1RmMj8QHTpQ7BRgqIhXMMQO3iUgBEaknIneIiC/GByqey2n7H6p6FKMh/kMzTW/DaEyemcn4gzEaQy+ISHHSNjo3hVnFNAUYcNUmf1PrpeCFca/uFJHhIlIUwHy2ZqbTS2kGxgd9rvkMe5np9o6IPJjG/mmRZtqbVWfHgXbms9qZdIy2ydXPuk062AbB/YkC7gDWiUgMhiH4F+h9aQfzo7MJI4e1MtWxFTByatHAGuBzVV1hbvsQ6G9WD71pnqMNRq+OSIyXuQ/OfUbOm9ewDaNt4klVnXrVPtOBGlxbXZQRX2NUwxzHaOxem/HuN8QojPaKXzB6v3yJ0eCZB6NN55wZ9xmMKrq0aItRajmB0X4xUFWXZTL+wUBtDIO+GPjxZi4iAz4FHjQN1SWiMarRLoV7VHU/RrfRMGC7iFwA5mK0M0VxFWZbzn0YPbh+xUi7vzGqu9ZlUlt6aQ/wAsbzeQaja+vqDM4zCJhuPutPZTLuW5JLPU5sPBwRmQqcUNX+VmvJCiJSCuMjUtRsULexsckm7MEfOQARCQMe48Z7+bgVZtVEL2C2bQxsbLIf2yB4OCIyFHgD+FBVD1qt52YxGx9PYVS/tLBYjo3NLYldZWRjY2NjA9iNyjY2NjY2Jh5VZVSwYEENCwuzWoaNjY2NR7Fx48bTqlroevt5lEEICwtjw4YNVsuwsbGx8ShE5HBm9rPUIIjIIYw+zClAsqrWtVKPjY2Nza2MO5QQ7lbV01aLsLGxsbnVcQeDkHm2bYMGDaBmTWjaFB5+GHLfqD81mxxJYiIsXQrLlsGmTRARAQkJkD8/VK4MjRrBY49BaKjVSm3cAVVYtw4WLoSNG+HwYYiJgZAQKF0a7rwTWreG2267/rlyEJZ2OxWRgxhD/xWYqKqT0tinG9ANIKRgyTplO4ykzJlj3HFwMy2ObKJG62bIW29B8Uw5j7TJaZw7B59+StTEKSwtVIU/K9Rne8nKHAvISzJCoCOZsAvh1Dz8L/ce2EDTqsXwGfAe1KljtXIbK0hMhBkzSPr4E/50hLC8wh1sCbuNQ8GFiBMffDSFErHnqH5kO00O/kPLoFhyv9UHHnkExBm+Eq1BRDZmpkreaoNQXFWPi0hhDH8nr6rqn+nt71+sgj4xdAZxiSlsPXqeZIVqp/bz2t8/cH+7B5E3e4Ovb/ZdgI11qML06Zx+ZxDjqj7A97VbEOPlR6HcftQNy0/J/EH4+3gRFZ/M/shoNh48Q2yyUiz6DJ3/nk+HqnnxHzXCKEHY3BqsWkX8iy/xda7yTG34BOEBIeTy86ZOWH7KFsxFcIAP8UkpHD0bx4aDZzgdm0SupHie3PILrybtp8CEsVClitVXcVN4hEFIjYgMAqJVdUR6+/gXq6CHd22jaEgAF+KS+GnLCab9vocD5xOpf2Qbw4+voPSMyVCqVPYJt8l+zp3D0b490055M/qu54n39adNrRK0a1CKmiXzImnk5BKSU/hjdyTT/tzHmsMXKH3uJEPXz6Lp6AFw19XzzdjkKFJSYMAAfp+1lAEtX+VIcCEali1A58ZlaFqxIP4+3tccoqr8c/Q8M1cfYsHm4wQmxvPmqm/o8Nw9eL3aw+NKC25vEExXBV6qGmX+/xUYoqpL0zvGv1gFvXh01xU3MDnFwZwNR/nop22kxCcwaM1Mnvrwdfslz6ns3EnEU+3oXe0xVobV5O5KhejfuirlCmW+LenPPZEM/mET+y8m03XDfPq2uR2/V3u4ULSNZZw/T2LbZ/kosThT6z1C+YJBDH6kBo3KXz3HUPrsi4hmyNx/+PPwRZoc3MToPCcpOG40+Pu7ULhzcZpBEJG6GLMqhWK4wv0X+FVVz2VRYFkMV8BgNG5/q6rDMjrGv1gFjT+xJ80c4MkLcbz51RpWnYyj86aFvNujFd4PP5QViTbuxoYN7HymC51bvsm54PwMaFODtvVLpvk8XI/4pBQ+mL+Frzee5I4j25hULoGQIQM8LudnkwGRkZxv9QhdKz3KhuJV6HhnGG8/WDnNEsH1UFW+XXuYoQu2UuDCaaaeXEalWV9CYOD1D3YDsmwQRKQT8CrGZOQbMWa2CsCYGaoRhmF47wYmMckygaEVNe7EnnS3J6c4GPbjP0zbGE6LPWsY80xN/J56Irvk2biStWtZ3fkNurXsTa6QYKZ2bUC10JDrH3cd5m88Sp/vNlP6zDFm5D1GseHv20YhJxAezokHH6VDnec5UrAkI5+pxUO3Z72H2dZj5+n6xZ/ExiYw7cBP1Pt2AuS6kUnhrMEZBuEVYKo52XVa22sCBVR1eZaU3gBBxStq7PH0DcIlvly2k6HLDtB83zrGd2uC3/3Ns0Gdjcv491/WPtmVjq36UapwMNNfbESxEOflzNbsi6Tb5FUUPBfBnFLnKdy/r9PObWMBFy8Sfn9rnqzVkfMFijCpUwMalivgtNOfvBDHcyN/JTw6ka+OLKH+rAlu35nF7dsQboZcxSvpinm7qV//+vt+vXwHA349SKt9axj71iN41bUHQXskx4+zsXVb2t/Tk9DCIcx+pQkFc6dfdxsTA/v3G+/npQ4h+/cb/Qwyemc3HjxD+y9WEnr2JHPq+VPgxc5OvhCbbCExkTMPP87TJVsRXrgk33RvxO0l05rh80rOnoVVq8DHB0qUgHLlICgo/f0jLsbTdvhSTsYkMytmLbdPGO7WJcvMGoTrejsVkU9EJI+I+IrIchGJFJF2zpF5YyQ7HPRJNaPs4MHw00+QnHztvh3urcq7jUNZXL4hHwyZCeHh2SfUxjnExHD4iXZ0bfoyhfPl4tuXGqdpDA4dMp6FO+6APHng9tthwoT/TkH58kbv0pYtYcoUuJjG1Dt1yhRg2gsNOZo/lG5/nSX+t99demk2riHu5VfpVOQejhYswZddGqRpDM6fhy++gAceMMalAezaZYxzffBBYyxaSIgxNu2PP9KOp3CeAGb1bUEBP6GLX02ODhvpwqvKPjLj/vp+c/aq1sAhoDxOnOj7RnnzTeM3KQkmTYI2bSAsDMaNMwampqZrq5p0rJibKVWbM/3VD41BKTaegSoXXnqVztWfRoODmda9CYXzBFyzm8MBTZoYBsHHB955B777Dl57zdguAtOmQYcORknhhRegWDFYsODaKO+oUITRj1dnY/Eq9PtiGXr0qIsv0saZ6KTJ9InMy7ZiFRjXvh53lL2ymig8HF591Ris/vLLcPQoxMcb2267DdavN0oJs2cb3xmHwygtAGzfboTUFA4OYNob95MUEETHw7m5sPh/2XCVLkZVMwzAdvN3CtDC/L/lese5IvgVLa+xsfofiYmq8+apNm2qCqphYaobNugVJKc4tMuweVruzfn692v91cYzSB7/ubZ/crCW7/eTrtl/+optZ8+qDhyompRkLC9frnr48PXP6XCorl2r2rGj6okTxrqICNXk5Cv3GzdnlZbut0jHPfGGanx81i/GxvWsW6fjGrXV0v0W6ee/7blmc1KSapkyqt7eql26qG7ceGOnf/hhVRHVl19WvXDhym1rtx/T8n3ma5dnhmrKwYM3fw0uBNigmfjGZsYgfIQx6fk/gC9QCFiXmZM7O/gVLa8Ox7UX63CoLl2q2qiRanj4tdsvxCXqXX2/03ovT9dTcxfeTHraZCfr1+uYxsbL/c2ag1dsWrxYtWhR48X+/fesRZOSotqwoRFSv8cOh0N7fLxAy/RZoGv7vJ+1SGxcz/nz+scdD2jpfov0ta/WqCPVR2LfvssZh5UrVffuvbkoTp9WffVVwygUL666YsWV26f+uE5L91uk45/sdTlCN8KZBsEfyA94m8u5gCKZObmzg1/R8pm6+KQk1ZdeUt2TKqOw41CkVnrzR32qwwhNPn4is+lok93ExuraRg9qmT4/ac/pa/97uVNSjFIBqN52m+qmTVmPyuFQnTFDNSRENV8+1Z9/vrwtKj5J735zttZ7ZbpGLlme9chsXEZkp25ap8cMve/9JRqbcLm4N2+eanCw6ogRzotr7VrVSpVUvbyufF4cDoe+/OE8LdNnga4aONp5ETqJzBqEzLQhrFHVs6qaYlYxxQBLnFNh5Rr27zfqkevVu9woVKV0QYY2CWVdscpMfmus4QvHxu04+85AXrv9aUrn8uL9p+v8N+js5ZeNdoKOHWHtWqhVK+txiUC7doazy1KloFUrGDvW2Jbb34fxLzXjQmAeen+7Hj17NusR2jgdxw9zeTMqlIu5Qhjb5U4C/bxRhWHD4NFHDUe3Tz/tvPjuuMNoa+jXD+6++/J6EeHjN1oTlhJD78h8XFj9t/MizUbSNQgiUlRE6gCBIlJLRGqboRmQQYcs15FRd8PUVKpkvOShoUZPgvnzjfVPPFSfFoExjCxSnx1ffO1CpTY3xYoVvHfQi3O58zHuhcbk9r/snb1HDxg/HqZOdf7g0HLlYM0aw6Hl559DbKyxvkrZIvSvW4A/Qqsz6+0xzo3UJuuEh/PV2B/4vVxd+reuSuWieXA4oFcv6N8f2reHP/+83DDsLIKD4YMPICDA6LHUowdERRmZiNFdGhGRKx+Dxi+BuDSHcLk36RUdgOeBFRgzmq1IFX4CHstM8cPZoVixOjdUTDp9WvWOO4zi3ezZxrozF+O07huz9YGun2vckWM3dD4bFxIdrYsaP2I05i7drqpG4/Ho0Zpmu5ErSE5WPXXq8n+HQzUlxaHPvvWNVn39Oz0yb0n2CLHJFAfbdtaKvedq57G//Ve1uHWrqq+vas+eRjWjq1m40GjPatxYNTraWDdqwhIt3W+RLn57pOsFZBKyWmWkqtNV9W6go6renSo8rKo/utxSpcG5G/SeVKAALF9udE0tV85Ylz84gE9aV2JXgVKMHTrd+SJtboozgz9gQM0nqBHixYv3VSY62qjC6dcP9u3LHg3e3lC4sDGu5bnn4O23jaqAT3o+iHh50WfBThzR0dkjxiZDHIsW048K+Pn48EGHhv9VLdaoAZs3w+jR4JWZCvEs0ro1fPstrF5tjGOIi4MeXe/ntqSzvBtTjDPrN7tehBPJqMqol4j0Akpf+p86ZKPGVJpu/JhcueDHH+HSQOWjR+Hue2rymO85JoZUY/fMeRmfwMb1bN3KwD0pRAUFM6JTY1KSvXj0UWNCq9mzoUKF7JXj7Q358sHHHxt10cWL5uW92nlZW6Qi3wy+Zg4nm+wmJoZZo75lXakavNumOkXyBDBoEMycaWyuWjV7Bw0/9RRMnw4rVsATT4CoFyNeuItovyCGjV9iDGjwEDKyocHXCR7HxIlQrRr8+y/07/0owSkJvL3iqJ3rsxKHg9/eHs6iyk14rUkYFYsE07GjMRPm1KlGw2B2I2K0V7RrB++9B998A089ew93Jp/mk6TiRK7ZkP2ibP7j5KAP+fD2R7izgDdPNyjDuHFGh4OVK63T1K6dMfp51y44dQoqVi7Fi0WS+LHobaz69CvrhN0gHuXLKCiorsbG3vzLePSo0UvAz8/Iff61YgW9N8cyVPbT/sPXnKjUJrPET5hE883e+BcuyM8DHmLrZi8aNDBy5v36WastIcHolLBmjWGgQkNP0HLC3zx4ZjefftnXrX3X5Fi2buWlQXNYUaE+v/Rtzq6NQbRsaVTd/PijUbqzktjYyz6Q4hOTadF3NiQksHRAawKKFbFMlzN9GZUQkXkiEmGGuSLi5Hb7zJHVm12ypOH7KCLCaFd4sE0zGsWH80l8USK27XaOSJvMc+4cX8z9m6N5izKkw534+XhRt65RB9zXDRyO+vsbH5natY1eyuXKhdK9YDzzC1dn9eTvrZZ366HKygGjWVLxTno0LUPc6SCeesoo9c+cab0xAMMYJCUZLlJ+/Z8Pwx6qwqGQooz/+FurpWWKzDS7TMPoWRRqhoXmumynUqWsn6NuXePhWbcOevYUhr5wN/E+/gwftyjrJ7e5IQ4PGc4Xt7fioVKBBEUX+q97cPXq7pP5zp/faDBs2tRYfum1xygVe5b+m6NIOJ+Glzwbl5E4/ycGFbqD0t5JdL2/Gj//bJT2f/rJ6ArqLiQnwz//GN1ei5SuwyPJJ5joU4YjqzZaLe26ZMYgFFLVaaqabIavMNxXeCyPPQaDBhlO0cpWK0unXOf5Pl9ltsz52Wpptwy6ezeDjvvj6y30bHMnTz1lOB675GzMnbhknN5/H15/3Y/BzUpyIE9Rpn88w1phtxIJCUyftIj9BUoysG19Any9eeMN2LHDcG7pTgQGwg8/GCWWxx+Hni88hI+m8MH0P91+QGxmDMIZEWknIt5maAeccbWwtDh+3HnnGjjQsOAAL7/+JAXjoxi8/CCalOS8SGzSZcWQsawoW5fXm5ahf+8A9u83uu8FXOvQ1G2IizM87B4834y7408wNr4QZ3ZmU5/YW5yIz77g08r3c08B4cTmUNatM9YXzPzUyNlKWJjRGWHbNhj8YVFeKhjP0vwVWf3VfKulZUhmDEJn4CkgHDgJPAF0cqWo9EjLj31WmT0bmjUL4rXyudiUP4wF4+Y4PxKbK0hetpwPAqtRxiuBpKM1mDPHyH03aWK1sowZMgTuuw9eeQWevuc+Yn0DGD3ermp0ORERfLL6BEm+/jxe/y66dIEPP7Ra1PVp0QIGDIC5c+G+R56kROxZhqyLJDnODYvBJhmNQ6gHoKqHzcFohVS1sKo+otk4j7KrKVYMtm6Fv7a2okbUST48CLHn7Lphl5GSwuzP5rCvYCk63VWPXq978cAD1vcoygze3jBjhlFf/daAMrQlgm+DyrL79/VWS8vR7B06ih8rNuaZSgV4vWsuChUyJjryBN57z+jmXqWKH+/WK8iuvMWZ/dlsq2WlS0YlhEkisldEhopIlWxTlAGuaGi86y6jR8vkyV7cG1qHU0H5+HL0d86PyAaAqG9m82lYU+rnSqZd8xJMnmx8ZLNjVKkzKFrUGB+xYwfUv+NxcifF8/536/Gk7tsexZEjjDrhQ5A4OLimHgcOwKxZ7ltVdDXe3lC6tNF0EBPwAHdcOMrI8AAuRt6g24VsIiPXFbUwZklLBuaKyBYReUtEwrJJW7YxZAjUrAnDPq3FXeePMzE6hDOHT1gtK+eRnMyEH9dzOlc+ej7eBC8voX17KORhXRRatzbcaTz8eD56FohhZZ7S/D7nF6tl5Ui2fTSOJRUacm+xUsz80o++fd2/ajEt/vgDnnzKiyJyL+cCgpn86Q9WS0qTDPNlqrpbVQeralWgAxACLBeRVdmi7ioymiQ9K/j5GQ1AMTFQpVhz4nz8GTvGvRt/PJETX81iSrmm3Onjw4MN86c7X60nUKqU8Vuw6rOUjDrDxyuP4UhOsVZUTuPgQUacyU1eTWRQ1xpMmGD0DvREmjUzRjN/PqkCd56JZEp8fiL2u98UrZkqqIuIF1AYKIIxQU6EK0WlxyUHda6galXYuxfeGliGp5KO8Y1XKEc273JdhLcaSUmMWLYX9fJm3U+NKVDAGPDlyRw5Ao8/5U/wyRrsCi7KwomW+HzMsaz/6HP+KFOHTnXDyJfblxdfNAYLeirjxxttlv+sb0OSlw+ffe5+HRIyNAgi0kREPgeOAW8CK4FKqmqBhxnXU7y48XtXkzZ4OZQR01ZYKygHsXvyt8wrXY/iZ4pw8N9cTJ/uXoOJboZSpYz2pyXzalLi3AVG7owlMT7Ralk5At2zh+HRhQhOcvBBz9vYlQPyZnnywOTJsGtLPsoe92G2d3EObNxptawryKiX0VHgQ2AHUFNVHzAHqF3INnVXceyY6+M4fx6efL44efYW4qfAUmxbtcX1keZ0EhMZufoYAckp/DmrNr16eWY9cFoMGABVqgiH1zXlSO6CzP7cLiU4gz+HT+HvktWIXFedsqW9KV/eakXOoUULo0ddp+Z18E9OYsTX7lVvmlEJobGqNlbVcapqSRXR1cTEuD6OvHkNz4kb/3cHQXEJfPS93aUwq2z5Yia/lKhJ5biihIX6MWSI1YqcR0CA0evoxLZQ8p10MOawEhMVa7Usj0Z37mREUij+sd6c3VCaqVPBx+f6x3kKH30EbTsV5QWfk/wcWJLNf7lPpjOjXkaHs1OIO9GzJ9Sv5cu59VVZFVCM1ctsd8c3TXw8IzeeJl9SLF+PrM3mzZe9QeYUGjSAAQO8eKRAMU4H5mHa53aHhKzwv+HT2Fa0AsdXVOetvl5UcYtO785FFc5KOwJik/j4B/f5vnhI72+D7HJ45u0NX34JZzeXxzdKGbVwq93P/Cb5e/wM/gytRuuCBQkO9PP4doP0GDgQBo6sQ/PTu5l4yo9zZ6OsluSRpGzdxkivMuSO8aJofHHeecdqRa5BBA4ez0v42hqsCSjK6t/cw/GdRxmE7KRaNXh/sA93nPFlQ2AR/lyy1mpJHofGxjL832i8Y7z4fHSTbKnysxQRSgXfR5RvABM+/8lqNR7JgtEz2VuwFB+3Lc/aNeLWvq2yyujR4H2wFN5Rwsif3CPTmZn5EAqJyDsiMklEpl4K2SHuavz8sje+Pn1g6uf1KR4Vycj/7XKLG+ZJ/Dl2JuuLVCRiVRU+GOpDrlxWK3I9B87XIHZHKF+dCyIy4rzVcjyKxI3/MNyvKuVT4mnZoLzHjEa+WQoVghGf+BKxpiobAwrz5//+tlpSpkoICzAGpC0DFqcK2Y4Vbm798uejcVJetgYWZtl8C+fo8zBdMHU9AAAgAElEQVQ0OpqP9zhwXPCnemApXnjBakXZw/Dhgm4tS4K3H198vtBqOR7FnDHfcTJfQXb/3ojkZDeZEMPFdOwItYKK4bjgx4gl1mc6M2MQglS1n6p+p6pzLwWXK3MjIuJbknQ2iGHLj+Fw2KWEzPDLZzPZUagkF9ZUZNIEL4/xVZRVChaEEUPyEr29BF9Hh3DqpCWe4j2O+HXr+SR3HeKP5WNQ9yLZXhtgFSIwZao/r/qGsy2wIMsXr7FUT2Ze00Ui8qDLlWSCoxaN9B4x2p+UDaU5lDuEn7//3RoRHkTKxShGHYaQqGR6tilBjRpWK8peOnSAyheKkiQ+fDpuidVyPIIvxiwhKjiQ0mfL07nzrVE6uETFivD6oNaUvnCKEb/utzTTmRmD0BPDKMSJyEURiRIRS/xDWzWbVoEC8FH3UBJP52bgH+dIsUsJGbJo9Ex25y/J+3fnZcjgW6RokAoR+PLLItwVfpK5ibk5cSzSakluTfTKNYwvUIv4gwX4amRht5k+NTvxzZ+PEqdLsyswPwt/sMRVHJAJg6CqwarqpaqBqprHXM6THeLciedfCKDEvvycyePPN1N/t1qO25J8/gKDThQkNCqOVo81tVqOZVSqBB90qYYCn31hlxIy4stJi0kO8uKJsuVy5JiDzNKx3R0kncnFgBVnLct0ZuS6orL5Wzut4IzIRaSFiOwWkX0i8pYzzukqRGD6p+UpdvoiX247TpLt2TJNPh8yn3P5gshz+na8vG7BrF4qSjRrQNWjicxJLMC+3aesluOWnF/+J1MK3sYDflGM/cDD/KA7meZtclPjWAAXQryZMMGabu4ZlRB6mb8j0wgjshqxiHgD44GWQFWgrYhUzfiYrMaaNarUDGRopVgOB+bjh2+WWyvGDUk4fZYxcYVIDg/mq89yiPOZLNKhSXVUvXjxY/dxT+BOvDj+MNF+QfTufK/l77c7MH18NVIighi99SKJSY5sjz8j1xXdzN+70wj3OCHu+sA+VT2gqonAbKBNRge4wyCVe3s8S/GIC7y7TrlwMdlqOW5F794rSQ5RnitRgKJF7bcb4PFXqlJinxf7Cibz6y/hVstxK/6avIY1ZQpS6FQwFcNu7dLBJYqUDaatI47kvMl8MTH7exxlVGXUOKMDRSSPiFTPQtzFgdT9ho6Z666Op5uIbBCRDf7+1jfOSWAgT4fkxpEnmRf6bLZajttwau8ZfsoVhN8pfz4YnGFB75ZjSveikCL0/HI/juzP9LkljhSl+/wExEuZ+OYt1g3tOnw0timVI4/x/f7DJCZn7wOTUZXR4yKyWkQGiEgrEakvIk1FpLOIzAAWAYGuFqiqk1S1rqrWLeQmcy2++uH95DnuYI3vOTZtsUsJAEunfotXnkQGNCuIt7ddOkhNlRa3c+eJc8SUPs/CxSetluMWjO6zhaiqsdSJ96ZW9fxWy3ErvIJz06+ccsw/hA9GZG9bQkZVRm9gzKl8EngSGIrRrlABmKiqTVU1K76hjwMlUy2XMNe5PRIQwPBq0XjnTqTTe7tu+Vxf7PEIxkfnpX78KZ7rcLvVctySsb2qEZicwLLV/7NaiuVERigjdychqozr38BqOW5Js57tKXHyPFOOxrLkl+zrwHK9OZXPqupkVe1oTpDziKq+rap/OSHu9UAFESkjIn7AM4DHeAR7oPcTlD1+lrNhJ1n+e5LVciwjPh7qtj9ORK789GpTE7FbBtOkYL3b6Ry7h0WOAvy0MBtmenJjzq5Ygn+1UzwakERokRCr5bglkisX71eIwSc4gR6f7Mu2MViWjRpS1WSgB/A/YCfwnaput0rPDePry4gG4B2UyJ5dS61WYxmD37lAVLXTVL4QTYO7PXySZBfTrXtr/BKT6To1nGXLrFZjDepQxizZRlBKAv3fbG61HLemWe/2VD5+ksQqRxjyQfZUTVs6jFRVf1bViqpaTlWHWanlZqj9YlvuO7GNifsT2Lbz1ptLd8cOmLgmAu9ciQx77hYeUZRJ8tasTre4vQRVOsWL/c5YNvLeKmJjoX7DYywuWp3ORVMokPcWcH+bFQIDGXZ7Ct65Epmw/GC2zCt96/kVcCY+PrzRuBQXfQNp+uLBWyrX53BA1y4x5K53gIZxkdRpfJvVkjyCbj0eIndsHNHl9vPBB1aryV6GDlEOlwwnV0ICXbs/ZLUcj6BOj+dpdHQXIfX2ceSE6zOdmZkPIUhE3hORyeZyBRFp7XJlHkK1zk/R4thWQuoeoHvPBOLirFaUPaxcCdvlBF5ByfR7pq7VcjyG4OpVeC15D4FlIxk14ww7d1qtKHvYtg3GfHuWoPIRvFLKQUiwyzso5gwCAnirbh40wMH2vb+5PLrMlBCmAQlAQ3P5OPC+yxR5Gj4+9L6nDOKbwpnCB26ZXF+tYgcoUX8L9yaGU7NhVoaj3Hp0eO0JCkWdo1DTf9m/P+c7SkxJga5dHeRvsp0C8dF0tEsHN0SNlzvQ4sgmpuyNZcD7CUS6cDhWZgxCOVX9BEgCUNVYwO5KkooKzz/JI8c2ka/2foaPjWfHDqsVuZb9+2HKuHnEBATyRrsmVsvxOAIqV+Q1DqHFosmVPxsqhi3m559ha+QZvEtG8VpFP4IC/a2W5Fn4+9PrjmLEevsyfvkB+vRxXVSZMQiJIhIIKICIlMMoMdhcwtubng9UQbwdFG68m805eADzokVQuWY8E33K0ir5JNVrV7Rakkfy9BvPUvJ8OCPmbWbiRHVprs9qHmyeSP17l1Ii9hxtu9qlg5uhYvf2tDm8gbx19jPjh3hWrHBNPJkxCAOBpUBJEfkGWA70dY0czyWs3eM8eWwj/lUO0eyBaKvluIQLF+DllyGs6WaSfbzp3fleqyV5LH7ly/K6zwm2e+ehz5iTvP661YqcjyocOQJLvpjD4QL56VUzH35+PlbL8kz8/enZpBR4OSh1z25efBGXtFdmZj6EX4HHgI7ALKCuqv7ufCkejpcXrz50O6LK2Cm/MHcuHDxotSjn0rs3hEfH4KgawdNyirJVy1gtyaN5pHd7yp85Stl7NvHtLGXePKsVOZevv4ZKVVIYtseLStERtHm+pdWSPJoyL7TniYNr8a50mAPhcfTv7/w4MtPLqDZQGsOFxQmglIiUExHb1F9F8acfoe3xDXx3xocuPaPp0oUc49Zi6VL48kto2PI3fB3J9HypldWSPB7vMmH0DjjF+VxC1eaH6N4dTp+2WpVzOH4cevaEyg23czIkL282Ko63t93LPUv4+fHqvRUQHNzf6W86dHB+FJm5Q58Da4FJwGRgDfA9sFtE7ne+JA/Gy4tXHquHf3IiDZ9YzYoV8MUXVotyDkeOQI36ERwpAZ38T1MkLNRqSTmCFn06Uf3UfnJV/4dzF1N45RWrFWUdVejWDRJTkvGqsp3aUce57+n7rJaVIyjRpR3PHVjFroCLBBYxZjJ2ZqYzMwbhBFDL9DhaB6gFHACaA584T0rOoPATD9Pt6Bp2BiTR5NEz9O1r9MrxdLp1g1p15hKcGEf31x6zWk6OQUqVol+es0T4+tOuz3a6dbNaUdb5+mujZ9Hjjy/jTK489L2/IuJllw6cgq8vr7WsTq6EWD6a9judOxslMWeRmbtUMbWPIVXdAVRW1QPOk5GDEKFb+3soHHWGPFX/wtdX6dTJc6uOli6FH3+EtT/8yh95SvFSvmhCiha0WlaOokm/bjQ7uIkN8fup3cAYjeqpzwvAoUPQqEkMm/Nd5K6owzRo08xqSTmK/J3a8crBP/ntgjcJwRGMGwe/OWnMWmYMwnYR+UJE7jLD58AOEfHHHJtgcyVBDz1IrxOr+TfZh5eHHOXll8ETM0gnT0L79jB4iIOhvx2iWMw5Or7+tNWych6hobxTMolovPlszhoGDYI2bTzXKAwcCM3qzSDWN4B3n214/QNsbgxvbzq+8CDFL0RwNngVFSoqHTvC2bNZP3VmPlMdgX3A62Y4YK5LAu7OuoQciAhPvt6WSpGHWHVyA489YbzZSR5kPh0O6NABYmKgy+M/sz1PKP0q+RGYx3ZI5goqvvsGT+/+g5m7L+CTN4pFi+DTT61WdWOMHQt//QX7NuxglncobRMPU7FRLatl5UgCWj1In9Pr2ZnsR/eBBwgPhy5djPabrJCZbqdxqjpSVR81wwhVjVVVh6rmzA73TsD7rrt4K2E3h9Wfmb9u45tvoEYNOHfOamWZY8QIWLYMRgyPY8bpi9Q8f5SHuz9utaycS7589LqrDP6JCRxJ+pNHH4W33oING6wWljn++gtefx2mTIEPvl5JUFICb/R42GpZORcRHu7Xmerh+/hh6xaGfZTCihVZb6/MTLfTCiLyg4jsEJEDl0LWor01aDagB40Pb2bMigMULZXI/v3wwgtZt+Ku5uBBePddeOIJiDn9HZGBIQxoXhYvH2+rpeVoCvXoxkt7V/DLGXjp3QiKFoVnnoGLF61WljFnzsBzz0GZMtC21Sp+CypBj6DTFChf2mppORqvunV5x+sQJ/AnoMxmduyA8uWzeM5M7DMN+AJIxqgi+hqYmbVobw2kYkXeC40nCm+W7V7NsGEwd65RtHZnypSB6dNh0DsnmBKVhzZnd1P7cbuHscvx86Nrx/sIvRjBqAWrmPmNgxMn4O+/rRaWPikp0LYthIfDzJkpjPpzDyWjIun45rNWS7sluHNAT1ruXcP4tcdwBMaiCpMmGV4FbobMGIRAVV0OiKoeVtVBgD0qKZNUevcNOv77C7P3RtP86XM8/DD06oXLfJFkhaQk/nPH/OyzMH7GYkSVfl1tFxXZRcDjj9L/5Gp2JvqxP3E3Bw/CfW7chX/mTPj1V/j8c/h33Tx25yrMu+W98c9nT42ZLYSF0b+8F5KUzPtfr2LnTnjlFaPElnITUzFnxiAkiIgXsFdEeojIo0DuG4/qFiV/fl5vXpGCMecY+PUqvpquVKoE69dbLexa+vSBOnXg8GFYsXAVP/uF8oocI7T+7VZLu3UQoeXbL9D0wEZG/rIHCTSmVfvuO1i82GJtadC+PSxcCK1anGb0EaHZ6b088Gpbq2XdUhTv34ce239m6clEIr3CGTvWeFbee+/Gz5UZg9ATCAJeA+oA7QAXDJrOuQT3eIl39/7C1hhhybZ9bNgAfd3MPeDEifDZZ0YbR+EiSQxYdpBy50/Q7e32Vku75ZD69Rlc4DyJKcqwb9aQnAwff2xUzbiLa/VNm4zxBl5e0Lo1DB2zkGSEIc/WR3xsrzbZSnAwXZ9vTpmzxxk0cy2duqbw4ovw4Ycwe/aNnSozBiFMVaNV9ZiqdlLVx4FSN6P7lsXXlzb9u1H/yDY+WbydmBTDe/jq1fD005Bo8XTMCxcaXkwffBBGjoRxY+dzNDAfw24Lwr9APmvF3aKUef9dum9dzILDsfx9MJJ58yAoCFq0gKNHrdV24AC0bGlUK6rCH8s3sVgK80rifkrdc6e14m5R/Ns+zaBTqzmY7MvEJf8yZgw0aWJ0Rb0R1+qZMQhvZ3KdTQZIkyYMCzpBbDIMnLEGgH37jKqA55+3bhDS7t2GUapdG+bMgYP7jzIpwo/Hw7fQoLtd9LeMAgV4+amGlDp3kne+Xk2hoiksWQLnzxtGwRmDkG6GyEjDGCQnw7RpEJeYxHsLd1Lm/EletEuT1iHCXcPepPWulYz76zCHzkUxfz7Mnw+FCmX+NOkaBBFpKSJjgeIiMiZV+Aqjx5HNDVLhw/d47Z/5LD4cw9JtJ+nQwagKmD3baAiywiiULw9vvGFMfBMQ6ODNiSvInRjLOy+18Mzh1TmIgM4d+ejobxxK8mH4gs3UqgULFhgZie+/z349kZFw771GCWXBAqhUCT4ZNY8jAXn5sLI3/qFFs1+UzWWqV2dweSF3XDR9pv5FnhAHzZvf2CkyeuNPABuBePP3UvgJeODmFN/iFCrEi083olr4PvrPWs+5mET69IF+/WDCBMOB3M30DLgZNm0yPJh6e8OwYVCkCEyYspQtfgV4P3c4Be6onT1CbNLHy4s7P3qL9pt/ZtqGk/x98Cx33w3bt8OLLxq7ZOeYlnfegb17jSrGxo1hzd+7+epCLjqe3EiD157PPiE26VJgyHsM3jqPLRccTPlt9w0fn65BUNUtqvoVxpzK01OFH1XVQ8bbuh++Xbsw/OxazicpA79dh4jR+DNggFEdkB0v+C+/QLNm0Lnz5XXb957ks31JPHTsH1oNeNn1Imwyx2238dadoZS4cIq+X60iNjH5v8FHmzfD3XcbPqeyg1GjYPlyo5QQE59E39mbKH3+JH3fesYuTboLQUG0HvQKD+xezahle9l7KuqGDs+oymibiGwFNonI1qtDVnXfsnh5UXXcx7y2cR4/7b/I3A1HEYHBg406fB8fI+ceEeGa6L/8Elq1MgafffWVsS4+KYXeE1eQN+4iQ7o2A397EnR3Itfbfflk/xIOJXgx9PtN/60/c8bovlyvHmzc6Jq4162DRx81pmsMDoY7zTbjQZ8u5JhvboaXTiCoij2vtjshzZoxtHgswbFRvPrlX8QnZb7aISOz3hp4KINgc7OUKsUr7e6iweGtvDd3M/sjDZdQ3t5GCeGpp4yXfNUq50UZG2uUCLp2NXKVK1dCiRLGtsFjFrHLJ4RPcp8kX7PGzovUxjn4+tJw9CBe+nsus7ZFsuCfY4CRU1+92nhuGjeGqVOdV8JUNZzrNWkCW7bAqVOXt/24dBPfn/enx7E11O/zonMitHEqhT8ayogN37LrooMP5m3J9HEZVRkdvhQw2hFqmCHOXGeTBbw7deSzhC0ExETxypRV/1lxERg/3njJmzaFt992zmTa3t7w77/Qv78xeUmePMb6ecu2MivSh5cO/cXdQ9/IekQ2rqF6dXq3rErdY9t557t/OGBmIm6/3SglNGxodDGcMSPrUR04YHRBfuMNo0fRhg0QFmZs23fiPP2XHab+iZ30HPaiUaS1cT9y5+buUf15Yf08vt6U+TrFzDi3ewr4G3gSeApYJyJP3LRQGwMRikwez8i/Z7LrQjJvz96Imtm7OnWMXFnnzvDRR1Cx4mWXEjfCzp1GQ/XZs0Yt0F9/wdChl9/hXUfP8s7/9lP/+E56D+kMvr5OvEAbZ+PTuxdjozfiFxvNS5NXEZ1gdPYrXNjwTDttmuEMD4z2hZv1Z/P888azMmaM0W0xf35j/cX4JLp/9gsBiXGMeSAMnzDbeZ1b07Ahfe4pR+ND/2T+GFXNMABbgMKplgsBW653nCtCnTp1NMexbp2ObdRWS/dbpOOW77lm8x9/qD75pGpCgrG8YoXqP/+oOhxpn+7cOdVvv1Vt1UpVRDUwUHXBgmv3O3UxTu/s873We3m6hn/1rfOux8a1nD6tK+s217J9FmjHiX9pUnLKNbskJqqWKqWaK5dq9+6qv/12+fm5mrg41WXLVLt2VT150li3Y4fq0aNX7peUnKLt35+v5d6cr6teecfJF2XjMpKT1fHccwps0Ex8YzNjELZdtex19brsCjnSIKiqY8xYfa31m1q63yJdvPVEuvulpKiWKGHctfz5VRs3Vn3iCdVJk4ztMTGqPj7G9uLFVfv3V42IuPY8sQnJ+vCAH7XyGz/o1t4DXXNRNq5jzRqdWae1lu63SAf+uEUdaeQONm5U7dRJNSDAeB6CglRHjDC2nT6t+vDDqrVrq/r5Gdtz51b9/vu0o3M4HNp/8m9aut8infXYy+lbFxu3JbMGITMVgEtF5H/ALHP5aeDnzJdBbK6H9HiFj3f04NixHfT8RgnsWJ+7Kxe+Zj8vL6O+eMkSWLPGqBLavh0KFDB8EAUFGa61q1WDRo3S7gkYn5RCt9H/Y2u8DxOPLqbGrHHZcIU2TqVBA57r/SwHpsznSx4hb+4AXm9+ZU+f2rWNRubPPjPm2/39d6ha1dgWFWW0E4SGGhO0N2oE998PgYFpRzfi+/XM2BdLtx2/8szkAeDn59rrs7EM0Ux0SxCRx4BL3U9Wquo8l6pKh7p16+oGT5lC6kZJTubCo0/yXIFm7ClWjqmdG9C4gnMns09ITqH72OWsOJXEJ9vm8tS3oyHEdlPsqTiGvk/ftaf5oUZzejevyKv3VnDq+VWVsQu3MGr1cdru/I0PhnRAbrc933oiIrJRVeteb7+MxiGMF5FGAGoMRutlBkuMQY7Hx4eQWTOYsX8BZSMO03nqWhZsPu6001+ITeL5T5ex4lQSH26czVNTP7SNgYfj1f9dPi6TzGP//sbIX/fw/qIdpDic0+80xaEMnrOeUauP89jOPxjW9zHbGNwCZNTLaA8wQkQOicgnIlIzu0TdsuTOTb7F85mz70dqHfmXnrM389myvVl+yfdFRPPYiF/YdCqOT9d9TdvJQw1fFTaejQjeY8cyvHQ8z29cyJS/DvLSjA1cjE/K0mkvxCbRfdJKvtocSZd/FjGiR3O8GjVykmgbd+a6VUYiUhp4xgyBGG0Js1R1j+vlXUmOrjJKTVQUCY8/ydt+1fix+j00KJOPkU/XonjedCp508HhUGavP8LQeVsJiI3mi21zaDBrAhS1nZDlKFThrbeYtnwnQ+99gWIhgYxuW5v6ZfLf8KnWHThDr6/Xcio2mXfXzKLT8NehQQMXiLbJTjJbZZSpNoRUJ60FTAVuU9Vsn3H9ljEIAElJaK9e/PD7TgY+8AoOf3+6NStPl8ZlCAnMeLyAqvL3wbN8uGArm0/F0ujQZkal7KTIlPF2NVFOZto0Ng4axRute3EkuDBtaobSu3klShUIuu6hB0/HMHrpDn76N4KS58MZ++/31PzyM8OlqY3H4zSDICI+QEuMEsK9wO8YJYQFWRA3CHgBuDR1wzuqet2eS7eUQbjEnDkc6/seH9d6jIWVmxDo48VDNUO5p3IRapXKS+Fgf0SE+KQU9kdG89fe0/y06SjbT8VQOOYcfVfN5LFnm+PVu5cxDNomZ/PPP8R07MLnIdWZ0uBxEr18aFapEC1rFKN+WH6K5wvE19uL5BQHR87GsuHQOZZsO8HveyLxTUmm+9ofeKliEIFjRkOuXFZfjY2TyLJBEJHmQFvgQYyRyrOBBaoa4wRxg4BoVR1xI8fdkgYBIDwc+vdn++I/+Lp2KxZXvYtob6Prn6+X4O0lJCQ7uHQnq0YepN3GRTxSOoigUcOhXDnrtNtkP/HxMGoUp8ZO5JvyjfmubmvC/Q1fJV4C/j5eJCQ7uNQ0FRpzlse3/EL7uAMUHj7McIVrk6NwhkH4DfgWmKtOdndtG4SbZO9emDSJpG9n849XCLsLleZ4nkKoeJErMY6wcyeoF32cYi3ugZdeglq1rFZsYyVnz8K0aehXX7E3/CKbQitzIk8h4nz9CUhOpNS5k1Q/d5TKdasgXbsabnDtUmSOxCVtCM7CNAgdgYvABqB3ekZHRLoB3QBKlSpV5/Bh268eqsa0WZs3G36yVQ2HMzVqQJUqtsMxm2sJDzdGNZ44YZQg8uSBypXhttvsqqFbAMsNgogsA9LqzvIusBY4DSgwFCimqp3T2PcKbvkSgo2Njc1NkFmD4LKspKrel5n9RGQysMhVOmxsbGxsMocl896JSLFUi48C/1qhw8bGxsbmMla1IcwAamJUGR0CXlTV687iICJRwI3PHG0tBTGqxzwFT9MLtubswNP0gudpdqXe0qpa6Ho7WWIQbhYR2ZCZejB3wtM0e5pesDVnB56mFzxPszvotaTKyMbGxsbG/bANgo2NjY0N4HkGYZLVAm4CT9PsaXrB1pwdeJpe8DzNluv1qDYEGxsbGxvX4WklBBsbGxsbF2EbBBsbGxsbwEMMgoi0EJHdIrJPRN6yWEtJEVkhIjtEZLuI9DTX5xeRX0Vkr/mbz1wvIjLG1L5VRGqnOtfz5v57ReR5F+v2FpF/RGSRuVxGRNaZuuaIiJ+53t9c3mduD0t1jrfN9btF5AEX680rIj+IyC4R2SkiDT0gjd8wn4l/RWSWiAS4WzqLyFQRiRCRf1Otc1q6ikgdEdlmHjNGJGve8tLRO9x8LraKyDwRyZtqW5ppl943JL3742zNqbb1FhEVkYLmsuVpfAWq6tYB8Ab2A2UBP2ALUNVCPcWA2ub/YIypRqsCnwBvmevfAj42/z8ILAEEaACsM9fnBw6Yv/nM//lcqLsXhvfaRebyd8Az5v8JwEvm/5eBCeb/Z4A55v+qZtr7A2XMe+LtQr3Tga7mfz8grzunMVAcOAgEpkrfju6WzkBToDbwb6p1TktXDFf5DcxjlgAtXaD3fsDH/P9xKr1pph0ZfEPSuz/O1myuLwn8DzgMFHSXNL5CoyteDmcGoCHwv1TLbwNvW60rlZ4FQHOMEdTFzHXFgN3m/4lA21T77za3twUmplp/xX5O1lgCWA7cg+E3SjBGRF56qf5LY/OBbWj+9zH3k6vTPfV+LtAbgvFxlavWu3MaFweOmi+wj5nOD7hjOgNhXPmBdUq6mtt2pVp/xX7O0nvVtkeBb8z/aaYd6XxDMnoPXKEZ+AG4HcM7wyWD4BZpfCl4QpXRpRftEsfMdZZjFvNrAeuAInrZ/UY4cGkW+/T0Z+d1fQr0BRzmcgHgvKompxH3f7rM7RfM/bNTbxmM2fSmiVHNNUVEcuHGaayqx4ERwBHgJEa6bcS90/kSzkrX4ub/q9e7ks4YuWSuoyut9Rm9B05FRNoAx1V1y1Wb3CqNPcEguCUikhuYC7yuqhdTb1PDdLtFf14RaQ1EqOpGq7XcAD4YRe4vVLUWEINRlfEf7pTGAGa9exsMYxYK5AJaWCrqJnC3dM0IEXkXSAa+sVpLRohIEPAOMMBqLdfDEwzCcYy6t0uUMNdZhoj4YhiDb1T1R3P1KTG9uJq/Eeb69PRn13U1Ah4WkUMY06DeA3wG5BVjvuyr4/5Pl7k9BDiTjXrByPUcU9V15vIPGAbCXdMY4D7goKpGqmoS8CNG2rtzOl/CWel63Px/9XqnIxkI/78AACAASURBVCIdgdbAc6YRuxm9Z0j//jiTchgZhS3me1gC2CQiRW9Cs2vT2Jl1k64IGLnFA2aCXmoQqmahHgG+Bj69av1wrmyY+8T834orG43+Ntfnx6gnz2eGg0B+F2tvxuVG5e+5sjHtZfP/K1zZ2Pmd+b8aVzbYHcC1jcorgUrm/0Fm+rptGgN3ANuBIFPHdOBVd0xnrm1DcFq6cm2D54Mu0NsC2AEUumq/NNOODL4h6d0fZ2u+atshLrchuEUa/6fNFS+HswNGS/wejJ4C71qspTFGkXorsNkMD2LURy4H9gLLUt08Acab2rcBdVOdqzOwzwydskF7My4bhLLmg7XPfCn8zfUB5vI+c3vZVMe/a17HbpzYsyEdrTUxplfdCsw3Xwq3TmNgMLALY36PGeaHya3SGZiF0caRhFES6+LMdAXqmte/HxjHVR0DnKR3H0b9+qX3b8L10o50viHp3R9na75q+yEuGwTL0zh1sF1X2NjY2NgAntGGYGNjY2OTDdgGwcbGxsYGsA2CjY2NjY2Jz/V3cR8KFiyoYWFhVsuwsbGx8Sg2btx4WjMxp7KlBsHskxsFpADJep35RMPCwtiwYUN2SLOxsbHJMYjI4czs5w4lhLtV9bTVImxsbGxudew2BBsbGxsbwHqDoMAvIrJRRLqltYOIdBORDSKyITIyMpvl2djY2Nw6WG0QGqtqbf7f3nmHR1Wsf/wzKSShE0Ckl4i0iIZyvTQpCgREaQoiAldAQNSroqKISlDUCwiIP4EEpCMdAelIV0AgFEOH0CShlxAgJCTZ9/fHnnADlySbZHfPbjKf55kn58w5Z+a7s9l9d8r7DrQC3lJKPfPgDSIyUUTqiEid4sUznBPRaDQaTRYx1SCINWQwInIJWAz8w0w9Go1Gk5vJ0CAopTyUUkFKqeeVUs2UUo/Yo2KlVD6lVIGUY6y7IP3PlnMajUajcQ5prjJSSgUAH2MN63sc64YlvsDjSqk4rDv4TBcRS1plZEAJYLGxHagXMFtEVmexLI1Go9Fkk/SWnQ4DJgB95YEIeEYv4VWgG9Ywv5lGRE5i3U5Oo9FoNC5AmgZBRLqkc+0S1m0ZNRqNRpNDsGUO4eVUY/2fK6V+UUrVcrw0jUaj0TgTWzyVPxeRBUqphsCzWHdXmoB1hyiNk0m2JLPr3C62nd3G4cuHuXrnKgnJCRTxLUKZgmWoU6oOjco1okT+EhkXpsnxiAjHrh5j0+lNHL5ymKjYKOKT4vHz9qNU/lI8+eiTNCzXkMeLPm62VI0LYItBSDb+Pg9MFJEVSqlhDtSkeQjHrh5j/K7x/Lz/Z67EWSN9FMtbjJL5S+Lt6c3hy4eJvhnN3eS7KBRNKjShV1AvOgd2xsvDFSKUaJzJlbgrTNk7hUl7JhF5LRKAfN75KFeoHH7efty6e4tVx1dxO/E2AIGPBNK9Znf61O5DId9CZkrXmEiGO6YppZZj3cS5OdaNzu9g3ffT6RPCderUkdwW3O7vG38zeMNgZkXMwtvDm/bV2tO+anuaVWzGI/nuXwF8N/ku+y7sY8WxFcw+MJvIa5FULFyRr5p+xatPvIqxokuTg7l19xYjt47ku+3fEZcYR+PyjelcozMtAlpQqUil+/4HLGLh6JWjrD+1njkH5rDt7DYK+RRiQL0BfFT/I/y8/Ux8JRp7opTanVHwUCDjPZWxbhreAahsnJcEWthzn1dbU+3atSW3kGxJlu+2fic+X/mI7zBf+eS3T+TCzQuZen7pkaVSO6y2EII0ntpYjl055kDFGrNZeWyllBpVSghBOi3oJAcuHsjU87vP7Zb2c9sLIUjF7yvKmsg1DlKqcTZAuNiyH7RNN1l7Bv8G3gFq2fKMI1JuMQhRN6Kk8dTGQgjSdk5bORNzJstlJVuSJSw8TIr8p4jk/ya/zPxrph2ValyBO4l3pN+yfkIIUmNcDdl+dnu2ylt/cr1U/bGqEIIMXDtQ7ibdtZNSjVnYahBsWWX0BVZfg6JAMWCqUuqzLPRaNDawM3ondSfVZff53UxtO5XFnRdTrlC5LJfnoTzoU7sPEW9GEPRoEN0Wd+OtFW+RZEmyo2qNWVy4dYGm05sSujuUD+t9SHifcP5Z5p/ZKrNZxWbs6bOHvrX7MmLbCJrNaMbVuKt2UqxxZWyZQzgKPCki8ca5H7BPRKo4Qd995PQ5hEWHFvHa4td4NP+jLOuyjMBHAu1afpIliU/WfcKo7aN4vvLzzH1pLvnz5LdrHRrncejyIVrOasm1O9eY0W4GHat3tHsdc/bP4fWlr1O+cHlWdV1FpSKV7F6HxvHYOodgS3C7c1hDVqTgg3WSWWNHZkXMotPCTgQ9GsTO3jvtbgwAvDy8+K7Fd4xrPY5VkatoPrM5sQmxdq9H43j2XdhH42mNSbIksbXnVocYA4AuT3Rhfff1XIm7Qv3J9Tl0+ZBD6tG4BrYYhBvAQaXUNKXUVKwB6GKUUj8opX5wrLzcweQ9k+m+uDuNyzdmbbe1FM/n2DDf/ev2Z8HLCwg/F07wrGBtFNyM8HPhNJ3eFD8vP7b8awtPPfqUQ+trUK4BW3tuRSlFs+nNOHz5sEPr09iXZEtyxjcZ2GIQFgOfAhuBTcBgYCmw20iabLDg4ALeWPYGLQJasOLVFU4bwulQrQPzXprHrnO7aPVzK+IS45xSryZ7HLlyhOBZwRTxLcKW17dQuWhlp9RbtVhVNvbYCEDT6U3v+TZoXJsb8TeoN7mezfdnOIfgSuS0OYQNpzbQ6udW1C1Vl7Xd1pLXO6/TNSw8tJBOCzrRtmpbFr68EE8PT6dr0NhGVGwU9SfXJyE5gW09txHgH+B0DYcvH6bR1EYU9i3M9l7bHd6b1WSdhKQEWs9uzZYzW0j6Isk+cwhKqTZKqb1KqWtKqVil1E2llB5jyCYRFyNoN7cdlf0rs6zLMlOMAcBL1V9ibPBYlhxZwrur38WdfiDkJm7E3yB4VjAx8TGs7rraFGMAUK14NZZ1WUb0zWhemPOC7lm6KCJCz197suHUBqa8OMXm52wZMvoe6AEUFZGCIlJARApmVajGGlbgxTkvUtCnIGteW0MRvyKm6nnn6Xf4sN6HjNs1jrE7xpqqRfO/JFuS6fpLV45ePcrizosJKhlkqp56Zesxu8NsdkbvpNvibvpHhAsyYusIZu+fzdfNvqbbk91sfs4Wg3AWOCD6XbcLicmJdFrQiQu3LrDklSWULljabEkADG8+nHZV2/Hh2g/ZdHqT2XI0qfhi4xesOL6CscFjebbSs2bLAaB9tfaMbD6SXw7/wvCtw82Wo0nFyuMrGbR+EJ1rdGZQw0GZetYWP4S6wFfAZiAhJV9ERmdBa7bICXMI7656lx92/sCMdjMyZbmdQWxCLE//9DRX466yu89uyhYqa7akXM+CgwvotLATvYN6M/GFiS4Vj0pEePWXV5l/cD6ruq6iRUALsyXleo5dPcY/Jv2DSkUq8UfPP+4NRdvTD+FrIA6rL0KBVEmTSebsn8MPO3/g/X++73LGAKCgT0EWd15MfFI8HeZ3ICEpIeOHNA7j2NVjvL70deqXrc+PrX90KWMAoJTipxd+okbxGnRZ1IVT10+ZLSlXcyfxDh3nd8Tb05vFnRdnaV7SFoNQSkQ6iMgQERmakjIvN3dz4toJ+i7vS/2y9Rn+nOt2sasWq8qM9jMIPxfOoPWZ625q7EdCUgKvLHwFXy9f5r00Dx8vH7MlPZR8efKxuPNiki3JdFnUhcTkRLMl5VoGrBnAgUsHmNl+JuULl89SGbYYhJVKKd0XzAZ3k+/SZVEXPD08md1hNt6e3mZLSpd2VdvxVt23GPPnGFZHrjZbTq7k43Ufs/fCXqa2nUqZgmXMlpMuAf4BTHxhIjuidzB0s/6taAYLDy0kdHcoH9X/iODHgrNeUEbR74CbgAXrPgixxnmsLZHz7J3cNdrpR2s/EkKQhQcXmi3FZuLuxkng+EB5ZOQjmQq7rck+S48sFUKQd1e9a7aUTNFzSU9RIUo2ntpotpRcxanrp6TQt4XkH5P+IQlJCQ+9B3tFOxXrMlMPEfETvew006w7uY6R20bSt3Zfh8WbcQR+3n7M7TiX2IRYeizpgUUsZkvKFZy/eZ7Xl75O0KNBLj20+DDGthpL5aKVee2X13R0VCeRsiRZEOZ0nEMezzzZKs+WIaN7KKUClFKfKaUOZqvWXMKN+Bv0XNqTqsWqMqblGLPlZJoaj9RgdIvRrDmxhtDwULPl5HhEhL7L+xKXGMfsjrNddt4gLfLnyc+cjnO4dPsS/Vf2N1tOrmDMn2PYdnYb41qPs0skWls8lUsppQYopXYBBwFP4JVs15wL+GDtB0TfjGZa22luux1hvzr9aBHQgoG/DeTk9ZNmy8nRzIyYybJjy/im2TdULVbVbDlZolbJWgxpPIT5B+ez8NBCs+XkaA5dPsRnGz6jXdV2dH2iq13KTNMgKKX6KKVSAtr5A72A82JdZbTfLrXnYFYdX8XkvZMZWH8gT5d52mw5WSZlaaGnhyc9l/bUQ0cOIjo2mn+v+jcNyzXk30//22w52eLjhh9Tu2Rt+q/oz+Xbl82WkyNJsiTxryX/In+e/IQ+H2q3Jcnp9RB+NK6/KiKfiUgEoL2VbSAmPobey3pTo3gNQpqEmC0n25QtVJbRLUaz+cxmxu8ab7acHIeI0HtZbxItiUxtO9XtAwx6eXgxrd00biTc4K2Vb5ktJ0cyYusIdp3bxfjnx1Mifwm7lZueQSgJzAFGKaWOKqW+Alx7vaSL8P6a97l46yLT2k1zu3HgtOgZ1JPgx4L5eN3HnLh2wmw5OYope6ewOnI1w58bzmP+j5ktxy4EPhLIkMZDWHBoAQsOLjBbTo5i/8X9hGwKoVONTnSq0cmuZadpEETkqoiEikhj4FkgBriolDqslPrGripyEKsjVzNt3zQGNRxEnVIZeoq7DUopJr0wCW8Pb3r92ksHNLMT526eY8DaATSp0IT+dXPWROzABgOtQ0cr+3Ml7orZcnIEyZZkei/rTWHfwoxrPc7u5du0ykhEokRklFhjYbQF4u2uJAcQlxjHmyvepGqxqnz2zGdmy7E7ZQqWYWTzkWw+s5mp+6aaLSdH8N7q90hISmDSC5PwUJla9OfyeHl4MbXtVGLiY/hw7Ydmy8kRhIaHsjN6J2ODx1IsbzG7l5/p/0AROSYiX9pdSQ7gy81fcjrmNGFtwnLMUNGD9KrVi0blGvHh2g+5dPuS2XLcmpXHV7Lg0AI+f+bzHDNU9CBPlHiCj+p/xPS/prP+5Hqz5bg1526eY9D6QTSv1JxXAh2z0DNn/SQxkf0X9zNq+yh6BfXimfLPmC3HYXgoD8LahHHr7i3eX/O+2XLcltt3b9N/RX+qFavGRw0+MluOQ/n8mc8JKBJAvxX9uJN4x2w5bsu7q98l0ZLIhOcnOCzQoTYIdsAiFvos70MR3yKMaD7CbDkOp1rxanza6FNm75+tYx1lkS83f8mZG2cIbROabe9SV8fP24+wNmFEXovk69+/NluOW7Li2AoWHlpoNa4O3C3PJoOglCqtlKqvlHomJTlMkRsycfdE/oz6k1EtRuHv52+2HKcwqOEgqhStwpsr3uT23dtmy3ErIi5G5IreZGqerfQs3Wp2Y/jW4Ry8pAMdZIbbd2/z1sq3qF68Oh/Wd+xcjC2eysOBrcBnwEdG0jNEBudvnueTdZ/QrGIzXqv5mtlynIaPlw9hbcI4HXNaR7jMBBax0Hd5X/z9/HNFbzI1o1qMopBPIfos76MdHDPB0M1DOXPjDGFtwhzem7Slh9AOqCIirUXkBSO96FBVbsT7a94nPineoeN6rkrjCo3pFdSL0dtHs+/CPrPluAUpvcnRLUfnmt5kCsXzFWdUi1FsO7uNSbsnmS3HLfjrwl+M3j6a3kG9aViuocPrs8UgnEQ7pD2UVcdXMe/gPAY3GszjRR83W44pjGg+gqJ5i9JnWR+SLclmy3FpUnqTz1Z81m6xZ9yN7k92p1nFZny87mPO3zxvthyXJnVvcnhz50S+tcUgxAH7lFJhSqkfUpI9KldKBRte0JFKqU/sUaaziEuMo//K/lQtVpWBDQaaLcc0/P38GdNyDLvO7WJC+ASz5bg0Kb3J8c+Pz3W9yRSUUkx4fgLxSfF6lVoGhIWHsSN6B2NajnFab9IWg/Ar8BWwDdidKmULpZQnMA5oBVQHuiilqme3XGeRG3wObKVLYBdaBLTg0/WfEh0bbbYcl2R15Opc35tM4fGijzO40WDmHZzHquOrzJbjkpy/eZ5P1n/Cc5We49UnXnVavcqsEARKqXpAiIi0NM4HAYjIt2k9U+WJKnJ0/1EnKUyb/Rf3U2tiLbrX7M7ktpPNluMSnLh2gsAJgTxf+XkWdtJhj1MTlxhH4PhAfLx82Nd3X67/AQHWPaOfCnuK+KR4DvY/mKUN4XMynRd2ZumRpRzof8AuTotKqd1GpIl0SS/89Xzj736lVMSDKdsKoTRwNtV5lJH3oI4+SqlwpVT42etnH7zsdFLG9Qr7Fs51q0TSI8A/gC+e+YJFhxex7Ogys+W4FF9t/opTMacIfT5UGwOD1KvUvtysAx+kZtXxVcw/OJ/PnvnM6R7safYQlFIlReS8Uqr8w66LyJlsVazUS0CwiPQ2zrsBT4vI22k9U7hSYYk5GZOdarNNWHgY/Vb0Y3q76XR/srupWlyNu8l3qRVWi5t3b3Kw/0Hy58lvtiTTOXDpAEFhQXSr2Y0pbaeYLcfl6LW0FzMiZrCnzx6eKPGE2XJMJy4xjhrja+Dn5cfevnvt9gMi2z0E4AJYv/gfloxKsjMzFg2UTXVexshLEzF5O4YLty7w8bqPaVqhKd1qdjNViyuSxzMPYW3C+PvG3wzZOMRsOaZjEQt9lvWhkE8h3ZtMgxHNR1DYt7D2TTBImZsMbWNObzI9g7BRKfWOUqpc6kylVB6lVDOl1HSgRzbq3gVUVkpVVErlwbot56/ZKM/hDFgzgDtJd3Klz4GtNCjXgL61+/L9ju/Ze36v2XJMZdLuSWyP2s6oFqMcEpkyJ1A0b1FGtxjNn1F/MnH3RLPlmIorxENLb8jIF+gJdAUqYt0PwRfrnsprgfEikq1PvFKqNfC9UeYUEUk30EmhSoXkxskb2akyy6w9sZaWs1oypPGQHLELmiO5fuc61cZVo2yhsvzZ60+33wEsK1y4dYFq46rx1KNPsaH7Bv0DIh1EhOdmPsfuc7s5/NZhShYoabYkp2MRCw2mNODEtRMcefuI3ZeZZnvISETiRWS8iDQAymPdJKeWiJQXkTeyawyMOlaKyOMiEpCRMTCTO4l36L+iP5X9K/NJQ7dylzCFIn5F+D74e8LPhefaLTcHrBlAXGKcXfe7zalo3wTXiYdm6wY5iSJyXkRMndE1a4nsN79/w4nrJwhtE4qvl68pGtyNzjU60zKgJYM3DCYqNspsOU5l7Ym1zDkwh08bfkqVYlXMluMW5GbfhAu3LrhMPDTT/BCyQsGKBSX2VKxT6zx8+TBPhj5J58DOzGw/06l1uzsnr58kcHwgwY8F80vnX8yW4xTuJN4hcEIgXh5eRPSL0MtMM0FCUgJBYUHcSbqTq3wTuizqwuLDi4l4M8JhTov2WGWU6xER+q3oR/48+RnVYpTZctyOSkUqMaTxEBYfWczSI0vNluMUhm0ZxsnrJ7XPQRbw8fIhtE1orvJNWB25mrkH5rqMB7ut4a8zzMuJTN03lS1ntjD8ueE8ku8Rs+W4JQPqDSDwkUDeXvU2NxNumi3HoRy8dJAR20bQ48keNK3Y1Gw5bskz5Z+hV1AvRm0fxf6L+82W41DiEuPov6I/VYpWcZl4aLb0EJo/JK+VvYW4GudunuODtR/QqFwjetXqZbYct8Xb05uJbSYSFRvFkE051zch2ZLMG8veoKBPQUY2H2m2HLdmRPMRFPEtkuN9E4ZuGsqpmFMuFQ8tvdAVbyql9gNVHghbcQqwR+iKTOMsxzQRof+K/sQnxTP5xcl4KD2ylh3qla1Hv9r9GLtjLHvO7zFbjkP4YccPbI/aztjgsRTPV9xsOW6Nv58/o1vmbN+EndE7+W77d/QO6k3jCo3NlnOP9PwQCgFFgG+B1Gstb4rINSdo+x8KVCwgN085fthh3oF5vLLoFUY2H+nwLetyCzHxMVQbV43SBUrzZ+8/8fLwMluS3Yi8FknNCTVpVrEZy7os08tM7YCI0Hxmc8LPhec434SEpARqTaxFbEIsB948QCHfQg6v0x5+CDdE5LSIdMEaeC4RECD/g97LOYnLty/zzqp3qFuqLu/98z2z5eQYCvsWZmzwWHaf380PO+yynYZLYBELvX7tdS9shzYG9iG1b0L/lf1NW3LuCL7a8hWHLh9iYpuJTjEGmcGWSeW3gYvAb8AKIy13sK6H44T/iXdXv0tMfAxT2k7JUb9iXYGXq7/MC4+/wOANgzl8+bDZcuzChF0T2HJmC6NbjqZ0wf8J1qvJBpWLVmZYs2EsObKEWRGzzJZjF/ac38N//vgPPZ7sQavKrjcVm6EfglIqEmsU0qvOkZQ2+Svkl1unbzms/CVHltB+Xnu+bPIlnzf+3GH15GYu3LpA4PhAKhapyLae2/D2dN/dWU/HnCZwfCANyjVgddfVunfgAJItyTSZ3oSIixEcePMAZQuVzfghF+Vu8l3qTqrL5duXOdj/IEX8ijitbnv6IZwFzAkg5ETO3zxP7197U6tkLT5u+LHZcnIsj+Z/lLA2YYSfC+eb378xW06WSbYk031xdzyUBxPbTNTGwEF4engyre00ki3J9Py1p1uvOhq6aSgRFyMIbRPqVGOQGWwxCCeBTUqpQUqpASnJ0cKciYjQ89eexCXG8XOHn8njmcdsSTmajtU70vWJrgz7fRjh58LNlpMlhm8dzu9//86PrX+kfOGHbhmisRMB/gF81+I71p1cx4Rd7rlv95YzW/j2j2/pHdSbF6u8aLacNLHFIPyNdf4gD1AgVcoxjN81ntWRqxnVYhRVi1U1W06u4P9a/R8l8pWg++Lu3Em8Y7acTLErehdDNg2hc43Oel8MJ9G3dl9aBrTko98+4siVI2bLyRQx8TG89strBPgHMCZ4jNly0sXmWEZKqbwiEudgPeniiDmEw5cPU2tiLZpVbMbyLst119+J/HbiN1rMasEbtd5g4gvusd781t1b1AqrRXxSPH/1+8tlu/45kejYaJ4MfZJSBUqxo/cO/Lz9zJaUISJCl0VdWHR4Edt6bqNu6bqm6LDbHIJSqp5S6hBwxDh/UillSkxjezum3b57m5cXvEyBPAWY/OJkbQycTPOA5gxqOIhJeybxc8TPZsvJEBHhnVXvEHktkhntZ2hj4GRKFyzNzPYz2X9pP++tdo8l4dP2TWPewXkMbTLUNGOQKUQk3QTswLrV5d5UeQcyes4RKW/5vGIvLBaLvPbLa6JClPx24je7lavJHInJidJwSkPJ93U+OXL5iNly0mVi+EQhBPl8w+dmS8nVDFw7UAhB5uyfY7aUdNl7fq/4DvOVZtObSVJykqlagHCx4TvW1v0Qzj6QlWxPo2QGYbvDmBUxi6FNhvJcpefMlpNr8fLwYk7HOfh5+/HygpeJSzR1VDJNws+F8/aqt2kR0IIhjXNuTCZ3YFizYdQvW583lr3B0StHzZbzUK7fuU6HeR0o6leUOR3nuM2ugTYtO1VK1QdEKeWtlPoQMMeryE4jRjuidvDu6ndp9VgrBj8z2D6FarJMmYJlmNl+JgcuHeD1pa+7nFfq1birvDT/JUrkK8HPHX52mw93TsXb05s5Hefg6+XLi3Nf5Pqd62ZLug+LWOi+pDtRsVEs7LTQrSIl22IQ+gFvAaWBaOAp49zp2GMO4UzMGdrObUvpAtbxSB24zjUIfiyY4c8NZ/7B+S4VCz8hKYEO8ztw/tZ5FnZaSLG8xcyWpAHKFSrHL51+4dT1U3Re2JkkS5LZku4xaN0glh9bzuiWo/lnmX+aLSdzpDeeBHgC79sy9uSM5FfOL1vjaDfib0jg+EAp9G0hOXTpULbK0tgfi8UiPRb3EEKQeQfmmS3n3jwTIcjsiNlmy9E8hJ92/ySEIO+sfMdsKSIiEhYeJoQgby5/UywWi9ly7oGNcwi2TCrvsqUgZ6TsGISEpARpObOleA711JPILkx8Yrw0mNxAfIf5ysZTG03VMmTjECEE+XLTl6bq0KTPe6veE0KQ4X8MN1XH6uOrxXOopwTPCpbE5ERTtTyIPQ3CGOBHoBFQKyXZUri9U1YNQmJyonSc11EIQX7a/VOWytA4j8u3L0v1cdUl/zf5ZWfUTlM0jN42WghBeizu4VK/9DT/S1JyknRe0FkIQcLCw0zRsPn0ZvEb5ic1J9SUG/E3TNGQHrYaBFuC2218+EiTNLPTqJXN5C2fV+LOZG4VSkoMlBl/zWBMyzE6pLWbEB0bTaOpjbiRcIONPTZSs0RNp9UdGh7KmyvepGO1jsx9aa6OeusG3E2+S7u57VgduZqZ7WfStWZXp9X9Z9SfNJ/ZnDIFy7CpxyZK5C/htLptxVbHtIx6Bx5AJ1ssizOSbznfTFnFhKSEe78cdLff/Thx7YSUHlVaCv+nsGz9e6tT6hyzfYwQgrSZ3UYSkhKcUqfGPty+e1uaTGsiKkTJhF0TnFLnxlMbpeC3BSVgbIBEx0Y7pc6sgB2HjGwqyBkpMwYhNj5Wms9oLoQgI/4YYfNzGtfi1PVT8tgPj0ner/PKymMrHVaPxWK55/DUYV4HuZN4x2F1aRxH3N04aTO7jRCCDNs8zKHDffMPzJc8X+WRaj9Wk79j/nZYPfbAngbhP8CHWL2V/VOSLYXbO/mU9bHpxR+5fESq/VhNPId6ypQ9UzLdeBrX4sLNC/JU6FPiMdRDvv39W7t/yGPuxEi7ue3urQ4x26tUkz3uJt29tzqsgLP75AAAClZJREFU84LOcivhll3LT0pOkiEbh4gKUdJgcgO5GnfVruU7AnsahFMPSSdtKdzeyauMV7ov2mKxyIx9M6TANwWk+Ijisv7k+iw3oMa1uJVw697wX9s5beXCzQt2KXdH1A557IfHxOtLLxmzfYyeQM4hWCwWGf7HcPEY6iE1xtWQPef22KXcqBtR90Yeui/uLnF34+xSrqOxm0FwpaRKqTRfcOTVSGk1q5UQgtSfXN/lu3CazGOxWGT0ttHi85WP+A/3lyl7pmT513zMnRh5b9V7okKUlBldRv4484ed1WpcgTWRa+TR7x4Vz6GeMmjdIImNj81SOYnJiTJ+53gp+G1B8R3mKxPDJ7rVjwdbDYItq4y6pzEZPSPDGWs7o0opSTibcN8GNocvH2bsjrFM3juZPJ55+PbZb3mr7ls6vEAO5siVI/T6tRfbzm6jevHqfP7M57Sv2h4fL58Mn718+zITd09k1PZRXI+/Tv86/fn2uW8p6FPQCco1ZnD9znXeX/M+0/+aTvG8xRnYYCA9g3ri7+ef4bN3Eu8w/+B8vv79a45fO86zFZ8lrE0YAf4BTlBuP2xdZWSLQfi/VKe+wLPAHhF5KXsSM48qpWTL9i0kWZLYenYrK4+vZHvUdrw9vOlTuw+DGw2mZIGSzpalMQGLWFh0aBFfbPqCI1eOUNSvKO2qtqNphabULFGTsoXK4u3hze3E25y6foqd0Tv57eRvrIpcRZIliTaPt2Fok6HUKlnL7JeicRI7o3cyeMNg1p1ch4+nD60rt6Z5pebUKVWHCoUr4OftR2JyIn/f+Ju/Lv7FhlMbWHJkCTcSblCzRE1CGofQrmo7twyTbzeD8JCCCwNzRSQ4q+KyiiqlhL7GMYqgkkG8UuMVejzVw60CSGnsR7IlmfWn1jNl7xTWnFhDTHxMmvdWKFyBDlU70DOoJzUeqeFElRpXIuJiBD/t+YmlR5fy942/07zP38+fVo+14vWnXqdpxaZuHffMkQbBG+t+CFWyKi6rVHmiinww7QMqFq5IUMkgHWhMcx/JlmT2X9rPsavHiIqNItmSjK+XLxUKV+CJEk9QoXAFsyVqXAgR4eT1kxy8fJDTMadJSErA08OTsgXLUqVYFQIfCXRrI5Aaew4ZLeO/gac9gOrAfBH5JNsqM0mdOnUkPNw9N2XXaDQas7DVINjik/9dquMk4IyIRGVZmUaj0WhckjQNglLqMaCEiGx+IL+BUspHRE44XJ1Go9FonEZ6A2TfA7EPyY81rmk0Go0mB5GeQSghIvsfzDTyKmSnUqVUiFIqWim1z0its1OeRqPRaLJPenMIhdO55meHuseIyHcZ36bRaDQaZ5BeDyFcKfXGg5lKqd7AbsdJ0mg0Go0ZpNdDeA9YrJTqyn8NQB0gD9DeDnW/bYTFCAc+EJHrD7tJKdUH6ANQrlw5O1Sr0Wg0modhix9CUyDQOD0oIhtsKlipdcCjD7k0GPgTuILVv+EroKSI9MyoTO2HoNFoNJnHbn4IIrIReNg2mhk995wt9ymlJgHLM1u+RqPRaOyLKX7ZSqnUEejaAwfM0KHRaDSa/2LW7uEjlFJPYR0yOg0pIes0Go1GYxaZDm5nJkqpm8BRs3VkkmJY50vcBXfTC1qzM3A3veB+mh2pt7yIFM/oJrN6CFnlqC0TI66EUircnTS7m17Qmp2Bu+kF99PsCnpzRmxXjUaj0WQbbRA0Go1GA7ifQZhotoAs4G6a3U0vaM3OwN30gvtpNl2vW00qazQajcZxuFsPQaPRaDQOQhsEjUaj0QBuYhCUUsFKqaNKqUillNP3cn5AS1ml1Eal1CGl1EGl1LtGvr9S6jel1HHjbxEjXymlfjC0RyilaqUqq4dx/3GlVA8H6/ZUSu1VSi03zisqpXYYuuYppfIY+T7GeaRxvUKqMgYZ+UeVUi0drLewUmqhUuqIUuqwUqqeG7Tx+8b/xAGl1ByllK+rtbNSaopS6pJS6kCqPLu1q1KqtlJqv/HMD0op5QC9I43/iwil1GKlVOFU1x7adml9h6T1/thbc6prHyilRClVzDg3vY3vQ0RcOgGewAmgEtZIq38B1U3UUxKoZRwXAI4B1YERwCdG/ifAcOO4NbAKUMA/gR1Gvj9w0vhbxDgu4kDdA4DZwHLjfD7winEcCrxpHPcHQo3jV4B5xnF1o+19gIrGe+LpQL3Tgd7GcR6s+3O4bBsDpYFTgF+q9v2Xq7Uz8AxQCziQKs9u7QrsNO5VxrOtHKC3BeBlHA9PpfehbUc63yFpvT/21mzklwXWAGeAYq7SxvdpdMSHw54JqAesSXU+CBhktq5UepYCzbF6UJc08kpidaIDCAO6pLr/qHG9CxCWKv++++yssQywHmiGNZCgwuoRmfKhutfGxj9sPePYy7hPPdjuqe9zgN5CWL9c1QP5rtzGpYGzxgfYy2jnlq7Yzlh3PEz9BWuXdjWuHUmVf9999tL7wLX2wM/G8UPbjjS+Q9L7HDhCM7AQeBJruJ4Ug+ASbZyS3GHIKOWDlkKUkWc6Rjc/CNiBdcvR88alC0AJ4zgt/c58Xd8DAwGLcV4UiBGRpIfUfU+Xcf2Gcb8z9VYELgNTlXWY6yelVD5cuI1FJBr4DvgbOI+13Xbj2u2cgr3atbRx/GC+I+mJ9VcyGeh6WH56nwO7opRqC0SLyF8PXHKpNnYHg+CSKKXyA4uA90QkNvU1sZpul1jPq5RqA1wSEXfa5c4La5d7gogEAbexDmXcw5XaGMAYd2+L1ZiVAvIBwaaKygKu1q7poZQaDCQBP5utJT2UUnmBT4EvzNaSEe5gEKKxjr2lUMbIMw2llDdWY/CziPxiZF9URlhv4+8lIz8t/c56XQ2AF5VSp4G5WIeNxgKFlVIpsaxS131Pl3G9EHDViXrB+qsnSkR2GOcLsRoIV21jgOeAUyJyWUQSgV+wtr0rt3MK9mrXaOP4wXy7o5T6F9AG6GoYsazovUra7489CcD6Q+Ev43NYBtijlHo0C5od28b2HJt0RML6a/Gk0aApE0I1TNSjgBnA9w/kj+T+ibkRxvHz3D9ptNPI98c6Tl7ESKcAfwdrb8J/J5UXcP9kWn/j+C3un+ycbxzX4P4Ju5M4dlL5d6CKcRxitK/LtjHwNHAQyGvomA6844rtzP/OIditXfnfCc/WDtAbDBwCij9w30PbjnS+Q9J6f+yt+YFrp/nvHIJLtPE9bY74cNg7YZ2JP4Z1pcBgk7U0xNqljgD2Gak11vHI9cBxYF2qN08B4wzt+4E6qcrqCUQa6XUnaG/Cfw1CJeMfK9L4UPgY+b7GeaRxvVKq5wcbr+ModlzZkIbWp7Dutx0BLDE+FC7dxsBQ4AjWDZ9mGl9MLtXOwByscxyJWHtivezZrlj3XT9gPPMjDywMsJPeSKzj6ymfv9CM2o40vkPSen/srfmB66f5r0EwvY1TJx26QqPRaDSAe8whaDQajcYJaIOg0Wg0GkAbBI1Go9EYaIOg0Wg0GkAbBI1Go9EYaIOg0Wg0GkAbBI1Go9EY/D+9MGovh2ulmwAAAABJRU5ErkJggg==\n", "text/plain": [ "<Figure size 432x288 with 2 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.figure(1)\n", "plt.title(\"System Dynamics of an RLC Circuit\")\n", "\n", "plt.subplot(211)\n", "plt.plot(u_vals, 'r-', x_vals[:,0], 'b--', x_vals[:,1])\n", "plt.title(\"System Dynamics of an RLC Circuit\")\n", "plt.ylabel('Voltage (in Volts)')\n", "plt.axis([0, 15000, -5.5, 5.5])\n", "\n", "plt.subplot(212)\n", "plt.plot( y_vals, 'g-')\n", "plt.ylabel('Current (in Amps)')\n", "plt.axis([0, 15000, -5.5, 5.5])\n", "\n", "plt.show" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Sources\n", "\"Mathematical Methods and Algorithms for Signal Processing\" by Todd K. Moon and Wynn C. Stirling\n", "\n", "http://mathworld.wolfram.com/MatrixExponential.html\n", "\n", "http://web.mit.edu/18.06/www/Spring17/Matrix-Exponentials.pdf\n", "\n", "http://web.mit.edu/16.unified/www/FALL/signalssystems/Lecture11_12.pdf" ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.15" } }, "nbformat": 4, "nbformat_minor": 2 }