{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# SciPy - Library of scientific algorithms for Python" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "最新的[IPython notebook](http://ipython.org/notebook.html) 课程可以在这里找到: [http://github.com/jrjohansson/scientific-python-lectures](http://github.com/jrjohansson/scientific-python-lectures).\n", "\n", "其他的这个课程系列的笔记在这里[http://jrjohansson.github.io](http://jrjohansson.github.io)." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "# 这一行的作用会在第四节讲到\n", "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "from IPython.display import Image" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1. 简介" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "SciPy框架建立在用于多维数组的低级NumPy框架之上,并提供了大量的高级科学算法。SciPy涵盖的一些主题是:\n", "\n", "* Special functions ([scipy.special](http://docs.scipy.org/doc/scipy/reference/special.html))\n", "* Integration ([scipy.integrate](http://docs.scipy.org/doc/scipy/reference/integrate.html))\n", "* Optimization ([scipy.optimize](http://docs.scipy.org/doc/scipy/reference/optimize.html))\n", "* Interpolation ([scipy.interpolate](http://docs.scipy.org/doc/scipy/reference/interpolate.html))\n", "* Fourier Transforms ([scipy.fftpack](http://docs.scipy.org/doc/scipy/reference/fftpack.html))\n", "* Signal Processing ([scipy.signal](http://docs.scipy.org/doc/scipy/reference/signal.html))\n", "* Linear Algebra ([scipy.linalg](http://docs.scipy.org/doc/scipy/reference/linalg.html))\n", "* Sparse Eigenvalue Problems ([scipy.sparse](http://docs.scipy.org/doc/scipy/reference/sparse.html))\n", "* Statistics ([scipy.stats](http://docs.scipy.org/doc/scipy/reference/stats.html))\n", "* Multi-dimensional image processing ([scipy.ndimage](http://docs.scipy.org/doc/scipy/reference/ndimage.html))\n", "* File IO ([scipy.io](http://docs.scipy.org/doc/scipy/reference/io.html))\n", "\n", "这些子模块中的每一个都提供了许多可用于解决各自主题中的问题的函数和类。\n", "\n", "在这节课中,我们将看看如何使用这些子包。\n", "\n", "为了在Python程序中获得这些SciPy程序包,我们首先从调用`scipy`模块开始。" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "如果我们只使用SciPy框架的一部分,我们可以选择性地包含那些我们感兴趣的模块。例如,为了将线性代数包包含在`la`名词下,我们可以这样做:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "import scipy.linalg as la" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2. 特殊功能" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "有很多数学的特殊函数对于很多计算物理问题都很重要。SciPy提供了一组非常广泛的特殊函数的实现。有关具体的细节,参见参考文档中的函数列表http://docs.scipy.org/doc/scipy/reference/special.html#module-scipy.special. \n", "\n", "为了演示特殊函数的典型用法我们将会将会更多的讲到贝塞尔函数的细节:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "# scipy.special模块包含了一系列的贝塞尔函数\n", "# 在这里我们将会运用函数jn和yn,它们是第一类和第二类实值阶的贝塞尔函数。 \n", "# 我们同样包含了函数jn_zeros和yn_zeros,它们给出了函数jn和yn的零点\n", "#\n", "from scipy.special import jn, yn, jn_zeros, yn_zeros\n", "import numpy as np" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "J_0(0.000000) = 1.000000\n", "Y_0(1.000000) = 0.088257\n" ] } ], "source": [ "n = 0 # order\n", "x = 0.0\n", "\n", "# 第一类贝塞尔函数\n", "print(\"J_%d(%f) = %f\" % (n, x, jn(n, x)))\n", "\n", "x = 1.0\n", "# 第二类贝塞尔函数\n", "print(\"Y_%d(%f) = %f\" % (n, x, yn(n, x)))" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "x = np.linspace(0, 10, 100)\n", "\n", "fig, ax = plt.subplots()\n", "for n in range(4):\n", " ax.plot(x, jn(n, x), label=r\"$J_%d(x)$\" % n)\n", "ax.legend();" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 2.40482556, 5.52007811, 8.65372791, 11.79153444])" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 贝塞尔函数的零点\n", "n = 0 # 阶数\n", "m = 4 # 需要计算的根的数量\n", "jn_zeros(n, m)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3. 积分" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3.1 数值积分:求积" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "该类型函数的数值计算\n", "\n", "$\\displaystyle \\int_a^b f(x) dx$\n", "\n", "被称做*数值求积*,或者简单的讲*求积*。SciPy为不同形式的求积提供了一系列的函数,例如`quad`, `dblquad`和`tplquad`分别针对单,二重,三重积分。\n" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "from scipy.integrate import quad, dblquad, tplquad" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`quad` 函数提供了很多的可选参数,这可以被用作调整函数的行为(尝试用`help(quad)`来查看更多细节)\n", "\n", "常用的方法如下:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "# 定义一个简单的被积函数\n", "def f(x):\n", " return x" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "integral value = 0.5 , absolute error = 5.551115123125783e-15\n" ] } ], "source": [ "x_lower = 0 # x的下限\n", "x_upper = 1 # x的上限\n", "\n", "val, abserr = quad(f, x_lower, x_upper)\n", "\n", "print(\"integral value =\", val, \", absolute error =\", abserr)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "如果我们需要去传递额外的参数到被积函数中我们可以用`args`关键字参数:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.7366751370811073 9.389126882496403e-13\n" ] } ], "source": [ "def integrand(x, n):\n", " \"\"\"\n", " 一阶n的贝塞尔函数\n", " \"\"\"\n", " return jn(n, x)\n", "\n", "\n", "x_lower = 0 # x的下限\n", "x_upper = 10 # x的上限\n", "\n", "val, abserr = quad(integrand, x_lower, x_upper, args=(3,))\n", "\n", "print(val, abserr)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "对于简单的函数,我们可以使用lambda函数(没有名称的函数)而不是显式地为被积函数定义函数:" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "numerical = 1.7724538509055159 1.4202636780944923e-08\n", "analytical = 1.7724538509055159\n" ] } ], "source": [ "val, abserr = quad(lambda x: np.exp(-x ** 2), -Inf, Inf)\n", "\n", "print(\"numerical =\", val, abserr)\n", "\n", "analytical = np.sqrt(pi)\n", "print(\"analytical =\", analytical)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "正如下面的例子所示,我们也可以用'Inf'和'-Inf'作为积分限制\n", "\n", "高维积分的工作方式相同:" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.7853981633974476 1.3753098510218528e-08\n" ] } ], "source": [ "def integrand(x, y):\n", " return np.exp(-x**2-y**2)\n", "\n", "x_lower = 0 \n", "x_upper = 10\n", "y_lower = 0\n", "y_upper = 10\n", "\n", "val, abserr = dblquad(integrand, x_lower, x_upper, lambda x : y_lower, lambda x: y_upper)\n", "\n", "print(val, abserr)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "注意我们是如何通过函数来求y积分的极限的,因为这些可以是关于x的函数。" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 4. 常微分方程 (ODEs)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "SciPy提供了两个不同的方式去求解ODE方程:一个基于方程`odeint`的API和面向对象的API基于类`ode`。\n", "\n", "通常`odeint`更容易上手,但是`ode`类提供了一些更好级别的控制。\n", "\n", "在这里我们将会用`odeint`方程。对于更多关于`ode`类的信息,尝试`help(ode)`。它和`odeint`所做的事情基本相同,但是以面向对象的方式。\n", "\n", "为了使用`odeint`,首先从`scipy.integrate`模块中导入它。" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "from scipy.integrate import odeint, ode" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "常微分方程系统通常在受到数值攻击之前以标准形式形成。标准的形式是:\n", "\n", "$y' = f(y, t)$\n", "\n", "在这里\n", "\n", "$y = [y_1(t), y_2(t), ..., y_n(t)]$ \n", "\n", "而且$f$是一些给出方程$y_i(t)$导数的方程。为了求解一个常微分方程我们需要知道方程$f$和一个初始条件$y(0)$。\n", "\n", "注意,通过为中间导数引入新的变量,高阶ode总是可以写成这种形式。\n", "\n", "一旦我们定义了Python函数`f`和数组`y_0`(也就是$f$和$y(0)$的数学表示),我们可以这样运用`odeint`函数:\n", "\n", " y_t = odeint(f, y_0, t)\n", "\n", "在这里`t`是一个具有时间坐标的数组,用来解决偏微分问题。`y_t`是仅有一行的数组对于每一个点在时间`t`,每一列对应于在那个时间点上的解`y_i(t)`。\n", "\n", "我们将会在下面的例子中看到如何将`f`和`y_0`应用在我们的Python代码中。\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 例子:双摆" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "我们来考虑一个物理问题:双摆问题,具体的描述如下:http://en.wikipedia.org/wiki/Double_pendulum" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Image(url='http://upload.wikimedia.org/wikipedia/commons/c/c9/Double-compound-pendulum-dimensioned.svg')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "在维基上给出的双摆运动方程如下:\n", "\n", "${\\dot \\theta_1} = \\frac{6}{m\\ell^2} \\frac{ 2 p_{\\theta_1} - 3 \\cos(\\theta_1-\\theta_2) p_{\\theta_2}}{16 - 9 \\cos^2(\\theta_1-\\theta_2)}$\n", "\n", "${\\dot \\theta_2} = \\frac{6}{m\\ell^2} \\frac{ 8 p_{\\theta_2} - 3 \\cos(\\theta_1-\\theta_2) p_{\\theta_1}}{16 - 9 \\cos^2(\\theta_1-\\theta_2)}.$\n", "\n", "${\\dot p_{\\theta_1}} = -\\frac{1}{2} m \\ell^2 \\left [ {\\dot \\theta_1} {\\dot \\theta_2} \\sin (\\theta_1-\\theta_2) + 3 \\frac{g}{\\ell} \\sin \\theta_1 \\right ]$\n", "\n", "${\\dot p_{\\theta_2}} = -\\frac{1}{2} m \\ell^2 \\left [ -{\\dot \\theta_1} {\\dot \\theta_2} \\sin (\\theta_1-\\theta_2) + \\frac{g}{\\ell} \\sin \\theta_2 \\right]$\n", "\n", "为了让Python代码更加简单容易理解,我们建立新的变量名字和向量标记: $x = [\\theta_1, \\theta_2, p_{\\theta_1}, p_{\\theta_2}]$\n", "\n", "${\\dot x_1} = \\frac{6}{m\\ell^2} \\frac{ 2 x_3 - 3 \\cos(x_1-x_2) x_4}{16 - 9 \\cos^2(x_1-x_2)}$\n", "\n", "${\\dot x_2} = \\frac{6}{m\\ell^2} \\frac{ 8 x_4 - 3 \\cos(x_1-x_2) x_3}{16 - 9 \\cos^2(x_1-x_2)}$\n", "\n", "${\\dot x_3} = -\\frac{1}{2} m \\ell^2 \\left [ {\\dot x_1} {\\dot x_2} \\sin (x_1-x_2) + 3 \\frac{g}{\\ell} \\sin x_1 \\right ]$\n", "\n", "${\\dot x_4} = -\\frac{1}{2} m \\ell^2 \\left [ -{\\dot x_1} {\\dot x_2} \\sin (x_1-x_2) + \\frac{g}{\\ell} \\sin x_2 \\right]$" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "g = 9.82\n", "L = 0.5\n", "m = 0.1\n", "\n", "def dx(x, t):\n", " \"\"\"\n", " 双摆常微分方程的右侧\n", " \"\"\"\n", " x1, x2, x3, x4 = x[0], x[1], x[2], x[3]\n", " \n", " dx1 = 6.0/(m*L**2) * (2 * x3 - 3 * cos(x1-x2) * x4)/(16 - 9 * cos(x1-x2)**2)\n", " dx2 = 6.0/(m*L**2) * (8 * x4 - 3 * cos(x1-x2) * x3)/(16 - 9 * cos(x1-x2)**2)\n", " dx3 = -0.5 * m * L**2 * ( dx1 * dx2 * sin(x1-x2) + 3 * (g/L) * sin(x1))\n", " dx4 = -0.5 * m * L**2 * (-dx1 * dx2 * sin(x1-x2) + (g/L) * sin(x2))\n", " \n", " return [dx1, dx2, dx3, dx4]" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [], "source": [ "# 选择一个初始状态\n", "x0 = [pi/4, pi/2, 0, 0]" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [], "source": [ "# 解决常微分方程的坐标:从0到10秒\n", "t = np.linspace(0, 10, 250)" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/bushuhui/virtualenv/dl/lib/python3.6/site-packages/ipykernel_launcher.py:11: DeprecationWarning: scipy.cos is deprecated and will be removed in SciPy 2.0.0, use numpy.cos instead\n", " # This is added back by InteractiveShellApp.init_path()\n", "/home/bushuhui/virtualenv/dl/lib/python3.6/site-packages/ipykernel_launcher.py:12: DeprecationWarning: scipy.cos is deprecated and will be removed in SciPy 2.0.0, use numpy.cos instead\n", " if sys.path[0] == '':\n", "/home/bushuhui/virtualenv/dl/lib/python3.6/site-packages/ipykernel_launcher.py:13: DeprecationWarning: scipy.sin is deprecated and will be removed in SciPy 2.0.0, use numpy.sin instead\n", " del sys.path[0]\n", "/home/bushuhui/virtualenv/dl/lib/python3.6/site-packages/ipykernel_launcher.py:14: DeprecationWarning: scipy.sin is deprecated and will be removed in SciPy 2.0.0, use numpy.sin instead\n", " \n" ] } ], "source": [ "# 解决常微分方程\n", "x = odeint(dx, x0, t)" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/bushuhui/virtualenv/dl/lib/python3.6/site-packages/ipykernel_launcher.py:8: DeprecationWarning: scipy.sin is deprecated and will be removed in SciPy 2.0.0, use numpy.sin instead\n", " \n", "/home/bushuhui/virtualenv/dl/lib/python3.6/site-packages/ipykernel_launcher.py:9: DeprecationWarning: scipy.cos is deprecated and will be removed in SciPy 2.0.0, use numpy.cos instead\n", " if __name__ == '__main__':\n", "/home/bushuhui/virtualenv/dl/lib/python3.6/site-packages/ipykernel_launcher.py:11: DeprecationWarning: scipy.sin is deprecated and will be removed in SciPy 2.0.0, use numpy.sin instead\n", " # This is added back by InteractiveShellApp.init_path()\n", "/home/bushuhui/virtualenv/dl/lib/python3.6/site-packages/ipykernel_launcher.py:12: DeprecationWarning: scipy.cos is deprecated and will be removed in SciPy 2.0.0, use numpy.cos instead\n", " if sys.path[0] == '':\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtoAAAD8CAYAAABJhAMxAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy86wFpkAAAACXBIWXMAAAsTAAALEwEAmpwYAACoyklEQVR4nO2dd3xTVR/Gn9NCWWW2ZbXsjWwQBAcqw4mIoqI4cO/xqq/i3utV3HvhFhQHqCCCC5SNsneZpayW0ZbVdd4/nnt6b5KbNEmT3CQ9388nn5vc3Nyc3Nx77nN+5zeElBIajUaj0Wg0Go0mtCQ43QCNRqPRaDQajSYe0UJbo9FoNBqNRqMJA1poazQajUaj0Wg0YUALbY1Go9FoNBqNJgxooa3RaDQajUaj0YQBLbQ1Go1Go9FoNJowoIW2RqPRVEKEEKcLIdYKITYIIcbavF9NCDHReH++EKKlA83UaDSamEYLbY1Go6lkCCESAbwB4AwAnQFcLITo7LbZ1QD2SSnbAngJwHORbaVGo9HEPlpoazQaTeWjL4ANUsqNUspCABMADHfbZjiAj43nkwAMEkKICLZRo9FoYp4qTjfAF6mpqbJly5ZON0Oj0WgCZvHixTlSyjSn2+GFdADbLK+zAPTzto2UslgIcQBACoAc60ZCiOsAXAcAtWrV6t2xY8dwtVmj0WjCRrj67KgW2i1btsSiRYucboZGo9EEjBBii9NtiARSyncBvAsAffr0kbrP1mg0sUi4+mztOqLRaDSVj+0AmlleZxjrbLcRQlQBUBdAbkRap9FoNHGCFtoajUZT+VgIoJ0QopUQIgnAKABT3LaZAuAK4/lIAL9JKWUE26jRaDQxT1S7jmg0Go0m9Bg+17cAmA4gEcCHUsqVQojHASySUk4B8AGAT4UQGwDsBcW4RqPRaAJAC22NRqOphEgppwKY6rbuYcvzIwAuiHS7NBqNJp6osOuIEKKZEOJ3IcQqIcRKIcTtNtsIIcSrRuGDZUKIXhX9Xo1Go9FoNBqNJpoJhUW7GMBdUsp/hBC1ASwWQsyQUq6ybHMGgHbGox+At+CZSkqj0Wg0Go1Go4kbKmzRllLukFL+YzzPB7AazL9qZTiATySZB6CeEKJJRb9bo9FoNBqNRqOJVkKadUQI0RJATwDz3d6yK47gLsbVPq4TQiwSQizas2dPKJun0ZTLlCnADz8AJSVOt0Sj0Wg0Gk2sEzKhLYRIBvANgDuklHnB7kdK+a6Uso+Usk9aWrQWVdPEI3/9BZx7LnDOOcCllzrdGo1Go9FoNLFOSIS2EKIqKLI/l1J+a7OJP8URNBrHKC0FrrwSaNkSuPFGYMIEYP16p1ul0Wg0Go0mlglF1hEB5ltdLaV80ctmUwBcbmQfOQ7AASnljop+t0YTKhYuBDZsAJ54AnjoIaBqVeD1151ulUaj0Wg0mlgmFBbt4wFcBuBUIcQS43GmEOIGIcQNxjZTAWwEsAHAewBuCsH3ajQh46efgIQE4IwzgCZNgBEjgIkTAV0HT6PRaDQaTbBUOL2flPIvAKKcbSSAmyv6XRpNuPjxR2DAAKBBA74eNAj46isgMxNo29bZtmk0Go1Go4lNQpp1RKOJRXbvBv79FzjzTHPd8cdz+ddfzrRJo9FoNBpN7KOFtqbSs2QJl/37m+s6dQLq19dCW6PRaDQaTfBooa2p9CxdymW3bua6hARatbXQ1mg0Go1GEyxaaGsqPUuXAhkZpn+24thjgXXrgEOHnGmXRqPRaDSa2EYLbU2lZ+lSoHt3z/WdOjHryLp1kW+TRqPRaDSa2EcLbU2l5uhRYM0aV7cRRceOXK5ZE9k2aTQajUajiQ+00NaEhcJC4PHHgd69gS1bnG6Nd9asAYqL7YV2u3aAEFpoazQajUajCQ4ttDVh4X//Ax55hG4Z99zjdGu8s2EDlx06eL5XvTrQqlX0C+0jR4CNG51uhUaj0Wg0Gne00NaEHCmB8eNZ9OXBB1n45Z9/nG6VPZs2cdmqlf37HTtGt9CeOZNBnG3aALNmOd0ajUaj0Wg0VrTQ1oScv/6ihfWKK4CbjXqgv/zibJu8sWkTUK8eH3Z07AisXQuUlkayVf7zwgsU2o0aAY895nRrNBqNRqPRWNFCWxNyJk0CatYEzjsPSEujW8bffzvdKns2bfJuzQbop33kCJCdHbk2+cuuXbRoX3453XN++w1YuNDpVmk0Go1Go1Fooa0JOXPnAn37ArVq8fXxxwNz5kSnVbg8od28OZfbtkWmPYHw9ddASQkwejQwZgzXRevMgUaj0Wg0lREttDUh5cgRljTv189cd/zxwN69dMGIJqQENm/2LbSbNeNy69aINCkg/v4baNECOOYYuo906aL9tDUajUajiSa00NaElCVLgKIiV6E9YACX8+Y50iSv7NzJgYE/QjsaLdrLl7umJTzpJM4cFBc71yaNRqPRaDQmWmhrQsr8+VxahXbbtkCVKsD69c60yRvlZRwBgLp1gdq1o09o2xXaOekkoKCAgx2NRqPRaDTOE1dC++hR+q1K6XRLKi8LFwLp6UDTpua6KlUoZlXO6mhBFdJp2dL7NkLQqh1tQnv1avpnd+1qrjv+eC7nznWmTRqNRqPRaFyJK6H90UfAhRcCI0YABw863ZrKyapV9BV2p23b6BPaO3ZwaR0U2NG8efT5aC9fzqXVop2ezjSFq1Y50iSNRqPRaDRuhERoCyE+FELsFkKs8PL+yUKIA0KIJcbj4VB8rzvXXsu8wpMnA6++Go5v0PhCSmDdOvsqi0poR9Nsw44drP5Yt67v7aLRor1sGVCtGtMPKoQAOnemtVuj0Wg0Go3zhMqi/RGA08vZZraUsofxeDxE3+tCQgJw113A6acDL78MHD4cjm/ReGP7ds4keBPa+fnAnj2Rb5c3duwAGjemQPVFs2bA7t0MnIwW1q4F2renW46VTp20RVuj0Wg0mmghJEJbSjkLwN5Q7CsU3HsvhdFXXzndksqFSt/nTWgD0eU+snMn0KRJ+dupXNpZWeFtTyBs3crUfu507szBTE5O5Nuk0Wg0Go3GlUj6aPcXQiwVQkwTQhzjbSMhxHVCiEVCiEV7gjR/DhxIS+XPPwfdVk0QxJrQ3rHDP6Gtttm5M7ztCYRt28zUg1Y6d+ZSu49oNBqNRuM8kRLa/wBoIaXsDuA1AN9721BK+a6Uso+Usk9aWlpQXyYEMGQIy1NHYzXCeGXtWlaDTE/3fK9lS/4vmZkRb5ZX/BXaDRtyuXt3eNvjLwcPsgCQsrRb6dSJS+0+otFoNBqN80REaEsp86SUBcbzqQCqCiFSw/mdQ4Zw+lznFI4cym/Yzuc5KQlISwOysyPfLjuOHAH27fNPaDdqxOWuXeFtk7+owEw7od2sGVCjBoNSNRqNRqPROEtEhLYQorEQlF9CiL7G9+aG8zuHDOHy11/D+S0aK5s2AW3aeH+/SRMzpZ7TKDcQf4R2qjEkjBaLtko1aOc6kpBA322VI1yj0Wg0Go1zVCl/k/IRQnwJ4GQAqUKILACPAKgKAFLKtwGMBHCjEKIYwGEAo6QMb6K3xo0pOP75J5zfolFISQE4bJj3bZo2jR6hrdrhj9CuWhVISYkei7YS2nYWbYBuOps3R6o1Go1Go9FovBESoS2lvLic918H8HoovisQuncHli6N9LdWTnJy6I7hTfwBFLXR4sqjhHbjxv5t37Bh9Fi0t22je463QjstW7JCp0aj0Wg0GmeJq8qQ7nTrRr/haMp/HK8oV4XyhPauXSwd7jSBuI4A0SW0t26lyK5a1f79Fi2A3FygoCCy7dLEBkKIBkKIGUKI9cayvs02PYQQc4UQK4UQy4QQFznRVo1Go4l14lpod+/OrCMrVzrdkvhHuTPY5XZWNGnC/yMaitaoNqT6GZLbqFH0uI54S+2naNmSS+2nrfHCWAC/SinbAfjVeO3OIQCXSymPAYuRvSyEqBe5Jmo0Gk18EPdCG9DuI5GgPL9hwLQeR4Ofdm4uUK+eZ2VFb0STRbu8QjtKaMeTn/b27cBff+l0nSFiOICPjecfAzjXfQMp5Top5XrjeTaA3QCCy7eq0Wg0lZi4Ftpt2jCv87JlTrck/tm6FahZE2jQwPs20Sa0U1L8375RI2D/fuDo0bA1yW/27DFze9sRjxbtK68ETjyRxajCG0ZdKWgkpVRX4U4AjXxtbGSKSgJgmwU/FEXGNG7s3g0UFzvdCk20c+QIsGaN063QlENIgiGjlYQEoF276KpGGK9s3Uprtl0ObUUsC20lbPfsATIywtMmfygtZeCpr1pODRsC1arFj0V7zx6m6WzRglbttWuBjh2dblV0I4SYCcAu1PcB6wsppRRCeB26CCGaAPgUwBVSStv5BCnluwDeBYA+ffroYVAoaNQIqF0byMtzuiWaaKZGDS619SGqiWuLNgC0bh1d1QjjlS1bfPtnA2aGj2goWpOTE5zQdtp9ZO9eim1fFu2EBPpwq8I2sc633/I3v/giX//+u7PtiQWklIOllF1sHpMB7DIEtBLStme1EKIOgJ8APCClnBe51msAAPn50TGFpolODh50ugUaP4l7od2mDQupaN/O8JKVVb6lt3p1upbEskXb6YBIJfR9WbSB6CoOVFG++44VR0eM4DmmhXaFmQLgCuP5FQAmu28ghEgC8B2AT6SUkyLYNg0AXHYZlw884Hs7TeUlOdnpFmj8JO6FduvWNArEi+iIRkpKKAD9SZWXlkZrstMEKrTVtvv2hac9/qJcYH1ZtIH4EtpLlgAnnEC3pFNOAf74Q8+UVpBnAQwRQqwHMNh4DSFEHyHE+8Y2FwI4CcAYIcQS49HDkdaGiLw84KabgAMHnG6JH7xulJ0YN87ZdmiiHz1lH/VUCqENABs3OtuOeCYnhzMG/hR/SUmhyHWSwkLOyvqb2g8A6huZhvfuDU+b/KWyWbRzczmL0LkzXw8YwMFGvLjFOIGUMldKOUhK2c5wMdlrrF8kpbzGeP6ZlLKqlLKH5bHE0YZXkMceA956C/jsM6db4gd16pjPVUonjUaxfr35XIkcTdSihbamwqjiL7EitJVYDsSirYR2LFm08/Nj341v9WouldBu25bLTZucaY8mdlGxIfXqOdqMwCkv+EVT+Wjf3ukWaAIg7oV28+YMDoum2ZVoqIwYSgIR2g0aOC+01fcHIrSrVqVLnNNCW1m0y2u7+i9i3aq9ahWXSmi3asWlHjhrAkX1u/7mznecWB8la8KPLnsdE8S90E5KYgaGaLkxr1zJjDw9e0aX+K8IKkCwkc9svCQlxXn3C+UjHojQBmjVdrrte/aw3eWJhWhKpVgRVq1iLnxVCVMNnKPletbEDkpox0xgfM2a5vN333WuHZro4tlnzefVqjnXDo3fxL3QBljAI1qKd3z3HVBUBKxYAbz/vs0GS5cC990XIxE7JFDXkUOHnB2IB2PRBii0o8GiXZ5/NmAKbfXfxCqrVgGdOlFcA5xZaNZMu45oAkfVfyksdLYdAXHzzVxef72z7dBED/fdx+UjjzjbDo3fVAqhnZ4ePZa96dOB3r2Bvn2ZPcGFLVuA007jiLVv35gR2zt30uroT7YhJW6ddB8JVmg3aBAdQrs8/2wgfizaa9Z4Fqdp3VpbtDWBoyzaMSW0VfYRgBYKTeXGeg48+qhjzdAERqUQ2k2bAtu3O58S7MABYO5caumBA4FFi9zc8B59lCtefx1Ytw748kunmhoQO3f6Z80GYltoR4NFe88e/yzaKSm0/saU0F67FrjrrjL/nKIiXrfKL1vRurW2aGsCJyYt2lZq1XK6BRqn0edATFJphPaRI8D+/c62Y9YsWlWU0C4uBubMMd4sLgamTAHOPZfJXrt0AT7+2Mnm+s2uXf75ZwO0CgPO+jrn5rJ4jtUF0h+iwUfb3/zfQnDwEzNCe+1a4MQTWf5x2DDgyBFkZdGf1j3pQqtWHNxpA58mEBITuYw5oa1SDWk0CqdLFGsCotIIbcD50t9r13LZvTtw/PH0Oy0T2n//TRU3fDhV0hVXAPPm0bId5cSaRTsvL7gUX067jkjJwaJKNVgeMSW0X3yRyvm553hRTJhQFldhJ7QBYPPmiLZQE+OouLGYE9rWhP9XXulcOzTOcu655nN/pjU1UUNIhLYQ4kMhxG4hxAov7wshxKtCiA1CiGVCiF6h+F5/SU/n0mmhvXEjxVrduvRnbtbMknd+8mSmSDntNL4+7zwuPRy5o49YFNq1awf+ufr1gcOHnQvkPHyYIsHfQULMFK0pKgImTQLOOQf4739ZZ33KlLI6He5CWw2cYz3QUxNZkpK4jDmhDQATJnD50UeONkPjIJMnc/nDD862QxMwobJofwTgdB/vnwGgnfG4DsBbIfpev1A35u3bI/mtnmzc6FrEqU0bYMMG48WcOcBxx5kKsFUrWjLmz494OwOhsJCG+FgS2vn5roXX/MXpojXK9clfi3bMCO1ff+VJdNFFnM0ZNgyYPh1bMosAmKn9FCoYVKWV1Gj8IWZdRwBeGwqd6q/ycckl5vOzz3auHZqgCInQllLOAuDLe3U4gE8kmQegnhCiSSi+2x9UBoZosGi3aWO+btvWyKVdUgIsXw706GG+KQQzjyxYEOlmBoRyFfPXR7tGDT6c9HUO1qKt/MudFtqBWLRzcmJAWPz4I4N8TjfG6uecAxw6hC3zdqJxY/rTW1HnmnZT1ARD1F8P3rjnHi51qr/Kh0qMcNJJzrZDExSR8tFOB7DN8jrLWBcRatSgFdBJoV1SQp9Sd4t2Tg5wYMkm+qd27+76ob59WeEmPz+ibQ2EQHJoK5wuw56XF5sWbfW9gQhtIAYsv4sWMeelcqIdOBBITMSW9Udtq0/Xr0/rpBbammCIWaH93HPm85kznWuHJrI88ID5/M8/nWuHJmiiLhhSCHGdEGKREGLRnhBGW6enOyu0t2+nK6q70AaAzJlGrjI7oS0lsHhxZBoZBMEIbafLsOfnB++jDThnjQ/GdQSIcveRoiIWaerTx1xXowbQoQO27K5hK7QTEug+EvUDCE1Ucviw0y2oAIMHczlkiLPt0ESOp5/m0t+OXxN1REpobwdg9bTMMNZ5IKV8V0rZR0rZJy2EkbUql7ZTqAIbVqHdti2XmQtyaaI75hjXD/XuzeXSpeFvYJAEI7Tr13c21WKwFu1Ycx1R/0lUBw2uWsXoUnWuG5R274mtB1NshTZAoa0t2ppgcKldEGvMmGE+19bN+OeZZ8znTueW1QRNpIT2FACXG9lHjgNwQEoZUTtb48bOWsDshLZ6vmFVIdChg6czaloaU5SUpSaJPpSI89dHG+BPyssLT3v8IdhgSCVwnSrYGazrSFRbtNVsjdWiDWB32wE4iupokVpg+7FGjbRFWxMcBfanVOxw/PFcnnyyo83QRID773e6BRHl99/pOfjf/wL/+Q9w9KjTLQoNVUKxEyHElwBOBpAqhMgC8AiAqgAgpXwbwFQAZwLYAOAQgIgnA01Lczbvf1YWl+kWz/TatWmZy8yuAQzp5PkhIYB27aI6l/auXRR+yr3WH+rUcU6sHj3KRzCuI+ozTg0SArVoN2rEUyiqhfaiRTywanrHYEsqLdwtijIBdPf4WMOGUX1ZaKKYmLZoA8Ds2fSfApj2b9QoZ9ujCQ93320+d7qsdQQoKADGjAG2bmVxP4D2xxtucLRZISFUWUcullI2kVJWlVJmSCk/kFK+bYhsGNlGbpZStpFSdpVSLgrF9wZCWhrjDZ3qZHftoutB1aqu61u2lNiS38CzzrSiXbuot2gH4jYCUGg7JVZVXGkwFu2kJA4onBTaNWua+YDLo2pVZoiMaqG9Zg1dphJcu6ItNToCAJrvs3ebUhbtSnD/0YSYmLdoC2GK64svdrYtmvAxbhyXlcQ3++GHUVY7QXHjjc60JdREXTBkuFC5d52yau/ebe9e0bLREWyWzX0L7a1bo3YOJRihrVxHnBBJSmgHY9EGnB0k7NsXeEXLqM+lvWEDz3E3tuyvCwBoscd+TN6wIYPaYt46qYkYVYz527g4Z1S6NwA46yzn2qEJD0KYzyuBb/aiRcArr9CCDbimilcVtWOZSiO0VVylUwFUu3ebYt9Ki9p7sRXNUdq8pf0H27UDSktNJ+8oI1iLdlGRMxUWlUgOxqKtPuekRTsg40ZxMRrvWY4dM1YAn38ermYFz+HDwLZtHm4jAMeWdRPzUXfTEtuPqkGr9tPW+EtyMpcxb9FWfP01l1OnxnDOQo0HRUXm8379nGtHBLnpJvbp/foxVO2SSzh7C2ihHVMooe2URXvXLnuh3TIpG4Wohl21PcUGANPaZ7iPvPcecMcd0TNlvmtXYIGQAC3agDOCtSKuI+pzTgrtgCzat9+OJjsWY0dRCnDZZUzkHk1sMtJaWqs4GWzZArSos99rL6uuJZ15ROMvSmjHhUUbAEaONJ8HEiSjiW6svoHz5jnXjgixahWwcCEwdiyDIYcOZf2yYcP4vtOFBkNBpRHaTt+YvbmOtCihpXpzaXP7D1qEdmkp8PjjnGJR7ltOcjD7APLzgca5K2l19xMlcp0IiFQiOe5dRxYuBN58E036ZGCXaIxSJERf6eYNG7i0sWhv2QK0aHyUF45NLkinB86a6GPlSmDECGYtmDvX8/1atbh0KhA7LFhHDb//7lw7NKFh0iTz+T//ONeOCDJpEj1lWrXiBOeIEVyvPKKmT3eubaGi0ghtJ2/MhYUUSbauIwdXAQC27Kru+SbACMo6dYCtW7FwIbOXNGwIPPIIq006RkEBdg29DADQ+LPngauu8tvMroS2E4I1FK4jThXq9Nt1REpGrDdsiCYXnIDiYoGc00YD77/vOi3pNOUJ7VZG92STXsTpKp2a6CEri91Pt27UmpmZzIB3ww2u54eyaB85EpBdILpR8+sAcOqpzrVDExouuMB83rOnc+2IIJMm8XqdP58x8cqSffrpXP70k3NtCxXxJbQXLmQ+3vHjPVRorVr0/XFCaKvvtBXae/8FUM6sfkYGkJWFb75hQM999zGDitIpjjBhAnauzAEANL74FODjj4Enn/Tro9HgOhKLFm2/XUf++ov5kR58EE1acQC389RLeCJGU/GjzEz+IFUJyODAAT5adDZMkDbuI0poO1n4SOM8r73GSb/PP6dLXWYmsHo1n7/3HtCxI/DFFxx7Kos2EOPVId2x+mcHa0HQOI81ALK42Ll2RJC1a4Hly+kF9d13wEknASkpfC81lctosg0FS3wJ7fx8miuuugq4916Xt4Rwrpqc+k4715Ha21ahQVI+tmzxsQNDaM+cyWnRk07i6uXLQ95U/5kwAbsa9wAANLr7cmD0aOCxx+znbN2IBteRWPPRlpLHSw1SfPLMM5zCufpqs2hNk158Ek0+fxs20D/beoOBOYBs07cBK6baWLTVcdAW7crLrl2cuDnhBN6wx43jTbp2beDFF5nJoEULdk13321atIE48tMGmMfzqqv4PD9fjz5jkTVrzOeDBrHfqwR88w2X3brRV1u5jQAet4WYJr6E9qmnUn3efDN73e+/d3nbqaI1KjOCh0W7pATYuhUt6x8oiwuzJSMDpdu2Y80aoHt3oFMnTrE4JrR37gR+/x07e3Jup3ETAbzxBgcEV19d7hA0Giza1ptuIDgltA8d4nR3uQOEdeuAadOA224DatY0hXZRKtC0aXQJ7W3bYFdjXaWNb9epKh33bCzaiYk8FlpTVF7efpvG3NdfB7Zv5xTzDz8AkyfTOpabC8yZA1xzDfDSS7R0K+Im84jigw/M55Uk73Jc0clSsG7mTOfaEWG+/hro398cZ5x5prPtCRfxJbQBDoNeeolFMO6912UKJi3NWYu2h9DesQMoKkK7Zkd8V7nLyMDWHVVx+DCnQmvU4HTpsmXhanE5TJ8OlJZiZ/N+EMLwf69bl1Gaq1eXG3TntI92crJHfRS/qVPHrC4ZSZQwKHeA8O679C+65hoAljLsOwVw3HF+zThEjOxsin831q3jZdymDZhY1Uvmkfr1tUW7snL0KPDmm7wxf/klrdpnnw2ccw5w7rnAeecBQ4bwMnjuOaYgfeop8/NxJ7QBV6toly7OtUMTGFbTbSVKo7RhA7BkCd1GZs3ircAmAVVcEH9CG+BU2lNP8Y79ySdlqxs2dMai7dV1xDBjd+hAH22v4i0jA2vATO4dWTAP3bo5aNFetAhITsbO0oZISzMLQeCcc4BTTmFqFB9Jsp12HamIG6P6bKQDIv3yLT96FPjoI2D48LLk5jVrss07doBCe+NGxzrz3bsZ9zhlCjh3f+CAV6HdvDkHlGjfniZum+i1evW0RbsyMGkSbSdWJk7k+dSuHT3WRo8GFixgmM7ixcC//wIPPcTQkZtuAp5/3vXzTsVZhBVV7QNgCpZKUOgk5llkKchVs6aZtaESoNxGzj8fmD0bOPHE+HIXsRKfQhug6OvWjS4NBk65juzezTSnHtZIIwKyQ4+akNJHcGNGBtaAClvNMHXtSs106FBYmuybRYuAnj2xa7dwLVYjBPDAA/zBPgqkVK1KEeWU60iwgZCA+dlIt90vi/b06Zwvv/pql9Vl1SF7GX7aDo3QXn6ZwWoPPwzIbKNcpRehXVYsskMHRq5lZXlspy3alYOpU2k3UUmNpOS5VL06x5U9ezLw8dhjGQvfqxfQowfH+88/T1H+1VdmkBUQx4ZDa+anlJQ4Sq8Sh5SW8qRVxFXgQPlMmgT07UsP2u3bzdizeCR+hbYQwHXXMRfl4sUA2O8cPhx5cbp3L7/bY7RmCO32/XkH8FoBKSMDq9EJKbWPlkXitmzJPjXiydyLi5m5ondv7NxpY6U/9VQ6kr/4os90f3XqxLZFO9JC2y+L9sSJzOAxeLDL6jKhrSxePv2UwkNeHse8jRrx9JkxxUj7kJ7usp2UbF779sYK1Wabi0NbtCsH/ftz/KgMEbNn02J95AhdwL75xpj9sOHuu3neTZniauDduTP87XaM7dvN55UkqC4msf43kfZFdJicHNrrhg3j9QzQoh2vxK/QBoBLL2UP/M47AMx0Mbm5kW3Gvn1e4lM2bQKaNEH7rqzq5Utor0FHdEzJKVulDIERF9qrV3O0Yghtj/LrQgC33MIQYuu0mBtOBRVW1KLtlNAu16J9+DDVxHnnccrAQpMmhrBIT+f0pAM1befO5TEbP57H8LufjbzxbhbtPXs4ACsT2uqJlxR/2qId//Tvz6UKL3j5ZfO9L75gvKwvbrqJ55113G/xKIw/mjZ1TZk5erRzbdHYY815ftddrtUgKwG//cblkCH0z65fn2F1VuIhrZ8ivoV23brAqFHsjfPzHRPaXvMfb94MtGyJOnUohrwaGuvVwxp0QqfkrWWrlD6xGi8igjE7IHt5EdoAoxuSkny6j9St61wwZFxatGfOpBq3FjwwaNKEAzIJQeHqgNBWcVq9e/OxeK0xYnAT2iozRJnQbtKEowubi0NbtCsHnTvzups7l+PJ777j+scfN4talMeYMcCHH5qv58+Ps1za7lhvcl98EV1B0JWdOXNcq3i+8IJzbXGIX3/lNd27Ny3aJ5zgmaAgniq4xrfQBug+cvAg8OWXZT56OTm+PxJqfAptwxzToYNr0LiVvfsEdqMhOiaaTtyOWrSTknCgUXscPepFaNerxxQAX37pNfG+dh0JjHIt2tOmsSLHwIEebzVrRlGxdy94ojngOrJmDa0WaWn0oV2WnYqi6rU9EoP/y/pNZlE0IbxmHqlfn8clniwfGk8SEujLOXcuXOoN3HdfYPsZM8b19XPPVbhp0Y3VhD9gQJxGgMYY+fksg6jws5pyvDFzJnDyydRi69fb+2fH0+ka/0K7Xz8GRb79NlJTeFJHhdAuLga2bqWzNdjEZcvsdakS4B2LzSC2OnXoBRBxob1hA9C6NXbl0L/MrggPAOCiixhx5CVvc926zgjtWHUd8WnRlpJCe9AgRt260awZl9u2wY8UN+FhzRpmzBGCVoyjJVWxMnWgR+DCP//QiO0ygPNihVfXVDxZPjT29O/PGN4VK/i6Th1LtiM/EcJ1hv7ll+Pcqg24OqPXrVtphV1U4F4IIe5PPns2b2Yih8GDfftnx1O/Hv9CWwjghhuAf/9FypZ/AESJj/b27Qy3NYR2v34M0lQ3EitlQjvf9HkWglZtR4R227YMroMXizYADB3KYI+ffrJ9Ozk58kHWUpZj0T54kLnXL7iABSBsbkpRadFes4a91xln2H62eXMut24FhXZpqY8UN+FhzRozY07v3lwurnGCx3b//GMmRymjQwc23u3GpK4p7acd//Tvz9P2zTf5+vLLg9uPNfPIgQMsmBHXNGrESrGKYAsIaCqONfjxn3+YNqcS8uuvXA4aRP/smjU9+/yCAmDChMi3LVxUjqvu0kuB5GQ0mMBeOpIW7dJSdugeFm0j44hyHTnuOL6cP99zH2vWANUSi9By9wIX8Rdxoa1yELZtW5ZtTVlLPahXj8NUH0I70kUjjh7ljIGtVbiggNOrzz/PZLzXXAPccYfHZjVr8l7lhNBOSvISM6P8/YYOtf2si0Vb5c1T5RcjwP79NKypHPBt2wK1RQH+kT1ctjt0iJ5JtkLbJv+luqa0n3ZgCCEaCCFmCCHWG0uvpQSFEHWEEFlCiNcj2UZ3+vXjUp3qF18c3H7cs0lWCvfYsWNdq6XFa7LiaMb9mJf5xlU+Zs7krGWnTrRo9+9vxu9v2AD85z+M2//f/5xtZygJidAWQpwuhFgrhNgghBhr8/4YIcQeIcQS43FNKL7Xb2rXBi69FFW//gL16pZG1KJdUECx7SG0Vc11w6LdqhWzongT2u0b7kfikYMu8ykRF9o7dlANtWtXJrTdsrO5ctZZnO/dts3jrVq1Ii+0lTi2tWjffTfbOnky57VuvRV49VXg229dNhPCmYwp+fk+/LPnzGHP5SX9QsOG7Mi2boVZ8tzmPwkXyutDCe0EIdFL/IPFBR1dtlu2jNeKh9D2knlEW7SDZiyAX6WU7QD8arz2xhMAZkWkVT5o0MC1Hos1/XAgZGS4vl6+nNXp4p5du1xf28RyaMKEu8iuxO47paW0aA8aRCmzbBntcT//TLnQvj3w+ut8bp2g/c9/YtvTpsJCWwiRCOANAGcA6AzgYiFEZ5tNJ0opexiP9yv6vQFzww3AkSNIqZIXUYu2srZ5uI5s3swL0DA3CkGrjZ1L8+rVQMfmxllmUdZKaEfsulUWRcOiXb8+BbNXVD7nP//0eCs5mRdOSUnom+kNJY49LNqLFzMF5H/+w8SeCQnAuHFUfDfe6FEGsk6dyFeGLCjw4Vs+Zw6t8V4sVQkJPM22bQOjEatXd40qCzOZmVyWldfNy0Pv0oVYmtPUJSZB+ev17eu2AyW03YI4tUU7aIYD+Nh4/jGAc+02EkL0BtAIwC+RaZZvBgwwn7tlsPQbq9BWzx99NOgmxRbWG8WsWcD7kb8NVzrcBzSVWGQDdI3ds4dC+++/eTimTqWoXryYxcy2bmWinDPPND/38st0Ody40bGmV4hQWLT7AtggpdwopSwEMAHsyKOL7t2B/v2RenAzcnMid7Ira5ut60h6ukvw2sCBFNVWDZSfz5OrcyejzW5C+9ChCAYNKHcDQ2i7W4c86NqVATizPA1iSqBHsniQEsceFu2nnuIf9Mgj5rqqVYG33mJA5yuvuGweVRbtHTs4O2JVITY0a2ZYtIWg0/bWrT63DyUqHqts2j47G72xGEeKq2LVKnO7X34BunSxKRaZnMxrRVu0Q0UjKaURZYGdoJh2QQiRAGAcgLvL25kQ4johxCIhxKI9YSy926VLxfdh7bMee4zLyZPjK8OBT6xC79prWbdeEx5uvNH13lfJRTbg6Z8N8BS89lrekh59lJOzgKlrRo9m0ePNm2n/ikVCIbTTAVjnobOMde6cL4RYJoSYJITw5tkb3k77ppuQcmQ7cjZHzhyprG22riOG24hixAguVZ5YAPjjD063DDzVCKSwCG11QkbMfWTDBob6N2/un9BOTGSCTGWqtKBEYyQDIm1dR1as4AG//XZPBd63LzB8OP22LWXlnBDaXi3ac+ZwaU0ZZUPz5hZvEQeEdrVqlkx+htAGytKy4/BhniZDhnjZiU3mEXU8Ij27EAsIIWYKIVbYPFyMIFJKCcBOAdwEYKqUMqu875JSviul7COl7JOWlhaiX+CJl0yhAWF1dUtONsengaYKjGmsZdn79bOPwNdUjDvvBN5+23xtPeaVmF9/ZVferJlZeOqkk+gu4h5/pORfRgbDj04/nYPiWByvRCoY8gcALaWU3QDMgDlt6UFYO+2RI5FarQC524+Edr8+8Cq0jWI1Vtq2ZZq/b74x182YwQC8AWcaO7CoalWAx1paOKxs3corpEoV/4Q2QAesNWtoGbagLNqR9NO2TZH39NO84952m/2HnniCH7REZtROlshbtjmiU69eLdpz5lDFlhNc06yZmegm0kJ7xw4OCss8W7Kz0Q7rUbtWSZnQnjWLwape4jnNXNqWXtaJcyhWkFIOllJ2sXlMBrBLCNEEAIzlbptd9AdwixBiM4AXAFwuhHg2Yj/ABhsPtICx9lk7d7KYKsBsJrF4Aw8KIVxHLV27mqX6NBVn1CjgpZfM10VFOgAVPAx//klr9ubNQGEh13/9tX2Q/z9MElemc4YP5z1M3TNiiVAI7e0ArBbqDGNdGVLKXCmlStz7PoDeIfjewKleHaldmyDnUE1zuBRmbH20i4qArCzb4LXzz6fvkppSnzGDI75qKck0paq8ejBTVUUsuHPbNqBZMxQWMrbGL6GtMtG7WbUjbtGeNQt5vy4EYDFcr18PTJzIGs3WksVWunYFLrmEgZGGSbhO9hrk7T4MXH+9a4WvMOLTon3sseWW8G3ZkiJ72zZQaO/YEbFc2h4VRLOzkQCJvsdKTJvGdn3wAf8Xu8IFACi09+93SRmUkECxrS3aATMFwBXG8ysATHbfQEo5WkrZXErZEnQf+URK6StoMuxMnWo+D9ZA6C60U1LMEIDHHw++bTFHYqLr9T9oEPDkk861J15ITuY9RVFUFHjC9zhlwQLex046yZQ+Tz7pmhDHipqsVUL77LPZ50/26K2in1AI7YUA2gkhWgkhkgCMAjvyMpT1xOAcAKtD8L1BkdK3NQ4iGUemRCa+x9ZHe9s23incLNoANV/t2kznPHs2jcFlVj63NCNKG0bMom0IbdUEv4R2795AjRpehXZErJGHDgFnnom8lz8AQIs0ADqEVa/OaT5fPPEEr/BrrgFmzUKdFXOQV70he4sHHwxv2w1sLdpHjnB4X45/NuCWuEMl1t6+3ev2ocRDaG/fDtSpg+tvqoKNG5li7ZtveO7XrOllJyrlhI37iLZoB8yzAIYIIdYDGGy8hhCijxAiJiLkli8vfxs7rK4jKhGHqk5eaYIiFUlJrtHoDz2kLa8VQQhXy1FxsRbZFmbO5CGyJvK6+Wb7bYuKzFNTCe2UFE6Qf/99WJsZFiostKWUxQBuATAdFNBfSSlXCiEeF0KcY2x2mxBipRBiKYDbAIyp6PcGS2pXRlrlfu/pNxwOlEXbxf3XIw2DSWoqcP/9wI8/0sjQrh1w1VXGm04K7dJSCqRmzcp8ff0S2klJTBLuFhAZ0Wn/H34ADh5Efk9GgNeZ/RNzen35JV1GvJa3NGjViq4jv/wCDByIOnUF8qo0AEaOZM7tCOQdsrVoL17MHskPoe2iU10q2IQf5TpSRnY20LQpRozgoR07lqfJ7bf72ImXzCPJydqiHSjGDOMgKWU7w8Vkr7F+kZTSI/WqlPIjKeUtkW+pd/74I7jP1axp9psqSNc6maWCtSoNCQme0wNCRDYdVKxz5Ih9Cj9rgRoNfv2Vh0UVierRw8al1kBlPwaYKEsxfDhDCmIt+0hIfLSllFOllO2llG2klE8Z6x6WUk4xnt8npTxGStldSnmKlHJNKL43GFLS+JNz/lhBkRJm9u9nEJjLNafOktatbT9z9930GRw4kKO/siAyN6Fdpw73GxHXkV27eLyaNSvTZ16L1bhz0kkUtpb0KBF1HZkwAWjaFHmnXwiBUtS641om6kxLA/77X//2ceON7CGuuAJ1Lj4LBQUCJQNO5DGxS34eYgoKbCzaam6tf/9yP9+oEc8jF6EdgRR/hYU8P91dR9C0KapUAcaPZ7KX+fN9VBkFOPuTlGRr0dZCu3KRnh680AZMA4G1Ovlff3GpMpJWKoTwdFCvUiWyld1ilcxMzthaqTTO/v5TUGBOag8dyolku7LrCqs9RVm0AQptIPbcRypHZUgL6k/LLUgyve3DyP79NqO2jRspGjzymJHEROq6GTPcUlq5Jc4WgtaYiFi0lRm7WTOsX8/v9lIfxZOTTmKb//67bFXELNpHjwLTpgEjRyL/UCJqJ0uIJo2pAGfM8O6b7Y4QtGB/9BHqtKMFvKC7kbvaJqtKKCkuptHEw6L999+c8vDm5GZBCDOesGz+PAKuIyoG1k5oAxxMPvoog4B9kpjIaGE3oe1EhVGNs3TrxqCqYP201elvreFiTdpTafOyuwvEtDTg88+daUss8MEH7JOsaJFtizWQ+a67eD/zGo8D70K7dWtqomnTQt/GcFJphXYOUiMSvnrggE3e5sxMqtRAp5aaNKFAtChrp4R2ixYclfpFv378rRahHTGL9urVFNsDBiAvD6hTL5EDrG3b/FB39qj/My+hPq/6MAttJSRdLNpSmoVq/KRMaNesydFfBPJCqtjdMqEtpYvQDggvKf60Rbty0bUrY1+C9dNWFu1du1zF+l13cXnFFZ6fqTRIyZSsiksv5VSYFpAmpaW0XFxj8bJq0kQfIx8o99fx41kNEvDPol21qqd+atw4smmBQ0GlE9plmTpqtYiIRTs/38YSuXGjV7cRnyhxYhFIKSkRch2xOGavW0dDqt/UqsX0c05YtJcu5bJ7d+TlGf+FEAGMEjwpE9p54CAizDWcbYV2ZiYz5wQotLOyjE4qPT0iFm01PV/mo52bS3cba1Sav3TowN9tSU2mgyErH127chms+4gS2sXFLkmc8NRTXE6ZUsk10+zZjEdR5OXRl7vSmvot7NjhaSD7888IFrOIPY4cMWc2L7+c4Vrt27uGRhUVcf3997Mg8zvvcH1Kiqf7e2FhuUm2oo5KK7RzGneJiEXbI4hNSooFm0DIcrER2hG1aFevDtkgBevXByi0Ac7NLlhQ5hevsktERGhXrw60a4f8fJvZhSBwEdodO1LwhvFPUMfIpdy98s8OQGh36sTlypXw8PcPF0pol3Wq6juDsWh36MDzZ/PmslU6GLLyUasW7RTBBi5ag7itlUmrVTOTREyfHnz74oIhQzzTf9avD3z4oTPtiQZuucWz3yop8e0DoSmrwHrqqVz+9Ret2Tt2AO++C5x3HnXZwIHMOWDVSzt3ehoSi4po6Y4lKp3QVlMROfXbMXz1SHiL13gEse3dS4VWEYu2xQzToEGELNpZWUCzZsjJFThwwEwC4TfHH8/sHIb1V+VADvsU0NKldO9ITDQt2hXEQ2gDHi4NoUQdIw+hXbcu0Lmz3/tRmnzWLETMoq3iqcoixysitF1yFBJt0a48qMF5bi5wxhkU2sF031ahvXKl63sqyOrMM4NrY1yRlORp2r/6apoYVbWRysDGjfzNb7zhul5K3sg0Xtm/H3jWKHP19NO83vbt42Hr2JGlKBYvBi6+mIkfcnNd8+UDvH1b1xUWaqEdE6SmArk1Mjh3GKyjn594CO1yMo74xKbmekpKhCza2dlAenqZ71TAFm2l8lR4PygcwyqSpKTQ7t4dAMJj0VZ589aEL5GOV6Hdv39AHX3jxmzuH3+AQnvnzrCn8dq7lxMKZYH5FbVoAy6RMioYslJP9VcSrJVwzzqL6fGDcR/xJbRPO41LKV2zklRqpATmzXNdV60acMcdjjQnYqi0fe6zz+vX6w7HT557znzeu7cZzvTee5QzS5dygvKdd4ARI2g72rDB/MyQITTSnHWWmee+qEi7jsQEqalAjjR8SFaHt3aOh9D2kUO7XGrU4PSdm+vIwYMRKPJnBLCtX8+XAQvt9HT+ZsudMTk5zBZtNe9kCO28vNAIbWUVz8+HmXYujEL70CEuy4T2/v2cjQnAbUQxcCA7u5LG6RTZynkuTOzb55bYRZ27Lom1/SQ1lTtzs2iXlkYklbnGYVQ/mpsLnHIKLdw//hj4fnwJ7cREYNgwPn/++eDaGZf06+cpLl95JSJZlxzhyis90/YBPAbumUY0tmRlAS+/zOfDh9MtS43NunfnzGq3bp4+2NaMI2PGsFTFsGHAuHEU2dqiHSOkpAC5h2uwV3UrgBFqvFq0/c6N54abb63yOQ+rVVtlimjSBIsWUfAF1fxBgyi0jWC2sFu01dDYcDkIi+tIlSocdUTSdWT+fP4nQQjtk09mu+fmd8Eh1MDM7/LD6qq9d6+b0N6+nSdttWrB7dAt84jLoEcT16jJGzVLMmgQ8NNPgRsX69Qx++SVKz0//8gjXL74okvcrQbgwVIjf8VJJ1EtuRUli0meeoq/5aOPXNcXFmordoA8+qjp2jVoEPDJJ2bpkj/+8J6V1irJevXirWLMGGqFefO0j3bMkJoK5OQm0H0jjEK7qIiWZg+LduPGbn4AAdCkiYtvbUSqQx44wCumaVPMmkV9F1Rl2UGDqPKMINTkZODgvqPAxInh6cQsswdShs51RIm7vDxjRceOEXEdKStPPmcOVUffvgHv6/TTefpd9lpfZCALQ25uj8svD11b3dm7l5MwZQSb2k/RoYOH6wighXZlQFm+VEzK2Wdz2tka0Ogvyqqdl+cZqtCrl/n8p58C33fcU6MG++svv3RdP3Ag/ySrv0AsUFoKXHcd2/7gg67vff89f2usKTuHWbWKqfzU/XbdOjNt5vPPe68ICaBs1rxmTXPm/NRTaRedPl1nHYkZylLitWsXVqGtrLUuVtRgU/spMjIiL7QNk+e+Oi2wYoXv/Jc+OeUULo10AbVqShT8sw4YNSq4OeDyyMzk1dmiBQ4dYn8aCot2lSrsBMqEdvv2/K4w+Tt7WLT/+os5zoL4MfXr8/6YtScJnbEKVw1YjV9/DZ8Hla3rSEWFdnZ2mbJWh0AHRMY/7kJbBSwGI4a9ZR5R3/PAA3yulhobRo2iCL33Xtf1Y8fyIAoR3Rfmjh1sY2IinYatPPoof5sqRagJiLFjaQTp14+vX3/dfK+8QGMlybp3NzMp1qvHff3yi7ZoxwypqbxPH23dKayBDbb5jzduDM4/W9GsGTsIYw5GWQv37Qt+l+ViCO2/97SHlBUQ2mlpwLHHAl99BUiJ5D0bUZAvOewdOzb087SZmSw3XrVqmcUzFBZttZ8yod2ypWdS3lBw5Ajw/vs4+BsDkWrVAk+qv/6qUK3ok08GsreWYJY4Gc/2+x5JScCbb4akxR6ExaINlPXG2qJdebC6jgAUyz16BO+nrbyX3P20AeCyy8z3lIVN44Vnn+U91K4TqV2bYlZt4zQlJcALL7BNdv3QxRezncp/SBMws2cDP/zA8deMGVx3ySUcs2RkmGlmvaEmh60zSwBLty9axNArLbRjgLIy7E270t8sTE6qHkL76FHmo66IRbt5c5pmjTYr4RhOoSGzKSC/mt8CSUnmKDUorrySocYLFqDWhqU4WD2FHfSqVcDcuaFpsMKSr1yJ4rAI7RYtuLTkdw4JH34IXHstDk5ivdmaNQH8/jvnzs44o0K7TmtSBQlNGiHtwAYMGcLdhgMXi3ZJCXvJYIrVKFSKP0Noa4t25UHdXK3pTM86i55Ugc7oNW9OW0Vysr3Q7tDB1GGqeIamHG680T5DCQDcdx9HSkIADz8c2Qs2P59+RkJwOvK///Xc5s8/2fYvvohcu+IQKYF77uG1o+rTVavGW9nvv9N10T340cqePabRsGdP1/dOO80cq2nXkRhACe09KUYO5DC5j3gI7S1beKZURGg3a8bl1q0ATOF44EDwu/TFLbcAda+7EK2RiU8n18Gdd9oHY/vNxRczkmnUKCQf2o2CaqkcqgKhF9obNngI7VC4jgA2Fm0g9EJ70iSgY0ccTG2B6uIIp9GmTuUJZS2THCxNmwLbt6NbN8YXhjo17tGjdHspE9qq5nUwGUcUbduypzYCIrVFu/LQpQuXubnmDffsszl+C7TATM+ePBWLi+2FNmCWZB83Tme1CQiVoaSkxOwbrTzxhGnpFgK46SbPAMuKsGYNR2Vq/3Xq2PsXNW7Mdkqpi86EiO+/5zjrrLPM3Nfr17NWXV5e+fYhS/ZfD4t2nz6uriSxRKUU2o0bc7mrppE6I0xzg+rmXya0K5LaT9G8OZdGSXSXDBghZsMG5ug/oXEmGibk4tRTzSpPQVOvHvDMM0BuLpJTquNgcRJdStq1M6sdhoL9+2nmMo51WF1H1H+yZUtodg5waP/nn8D55+Ng+16oJQuY5+j77+k2EmzWDivp6UB2Nrp2peAI9XhTWSbKXEeMc7bseAVD9eq8eRtCO+wW7enTgc8/D9PONYFw3HFcFhaauuzYY2k4CdRPu08fLo8c4WSanVfDRReZzydODLy9lZ6EBGDTJh5clW7Cjrfeol+cEsZ2jxEj6Oj70kus0z1qFONU7Lbt1Mm3G+LRo2xTqF39KjlScgzVrBnw229c16gRX//8MycTBg3yvQ/rzOoxx7i+V6WKeZ2Gws4USSq10N5ZnMp/L5QCyYJHMKRSMhXJw+lm0a5hZCkMh9D+8kv2W+92eRXz2l2GX38N0ZTNHXcAe/ag1nWjcfCgQGkpmMpkzpzQ+fGpNIqRsGjXqMEeJZQW7Z9+osnt/PNxsFkH1BKH6Fy9c6f91GcwGBZtZSkMde0mJbTLLNpKaKtzOFjat/dwHQmbRfu994AnnwzTzjWB0L+/+Vy5jyQmMrhq2rTAYpHT03nJAryOs7Lstzn5ZD5///2gmqxRKJWkHtdfH9jnv/8euPVW4M47aaiZOJG1BPxh0SLX7441v4MY4ddfgX//pX1L2RTPP5/LadN4i69b1/c+lEDv0cP+byot5TKIzLaOUqmF9o5dCbzph3rK38DDdWT1apr3vCWQ9IfkZO7DEC1C8OQNh9D+4gvOqGXsX1Gx6X47qlVDcn06XR46BF45e/aYV2hFUYMnw386rBZt9T2hHLDNn0/rf48eOFhSA7WaNaBVaMyY0PUy6enA3r3o0PwwqlTx/77lL8pvtkxoG4PDCgttleJPyvC7jmzb5pqiQuMYnTubz63dxFln8Vyzcw32hhCmVRvw7j4yejSXf/8d1gyelY+333YVvzk5rn9IsDz/vFkqVj169674fjXlogo8HTxoun0MGkTb0L//0j/bF7t3m9ehu9uIOxVyX3WASim0a9WiJWznToReIFnwENpr1nBay1c0gD80b26KFtiIvhCQk8Pmnn02Kp4pwgsqXd3BgzAjLBctCs3O3dwUwmrRBujOEMoB2z//0JFUCBw8CNRqmMxpWPc0VBXBCEpMyt2B9u1DL7RtXUdq1XJLQxIEHTrw4srORtWqtHyEzXUkK6viAwNNSEhMNLWYkSEUAEM8qlQJPPuIP0JbWeQABnRpwkRKCl3jrAI5mMfddwdfo0ITNEuWMPUewAnHwYMpc04+2VxfntC2FI32CIQEzNtrLP69IRHaQojThRBrhRAbhBBjbd6vJoSYaLw/XwjRMhTfWxEaN3ZAaK9ezeImFaVZM1NIIjxCW+VV7nKM4csWBqGtjktBASieEhJCl9B52zb68xqRr+HKOlLm6dKyJQc/am6rIhQXA8uWlfU2Bw8anUt6epCVgryg/tPt23HMMaHPpW1r0W7WrOIDTeXrsmQJAKPw0cGK7dKWoiKe+9qiHTWcdhqXkyeb6+rVo89msH7agHehXb++mUp5/HjfrsYaTWVFWbMBVoCcM4cTCQ0a0G2kcWO6g/hCuY0A9hbtDz7g8rrrKtzciFNhoS2ESATwBoAzAHQGcLEQorPbZlcD2CelbAvgJQCOl44qE9otW7IATKhTLsAU2rVqgapj9+7yk0j6Q/PmLoODcAhtVcShc4ZRFTLUriNws2hXr05/6mDKvNnhJury82kRC9WUU+3a9Akty0bQvDmDbHbvrvjO16zhMTd6m4MHLVUhQ4lKs5edjRYtODYJZapbW4t2RQIhFb16cVC2YAEAnkdhsWjv2MEDoi3aUYPy016xwrV2wNlnM8YgEJuJ1aPAV7dzySVc5uToSpEajTtbtphZER98kLfxOXNowS4poUX7tNPKt6+oQEghgG7dPN9/910uw1nJOFyEwqLdF8AGKeVGKWUhgAkA3MspDQfwsfF8EoBBQlTUrFUxXCzaUtpHw1SQ/HwzWLHMwS8UFu1WrZhVw7jThEtoJycDzYRRhTLcFm2ATpihEtrbtrkIpLw8M6NUKPDI9qJEq3s952D45x8u3S3aocZi0c7IoLYPZYXRvXvNGAIAHv9J0CQn06o9fz4AHpuwWLRVn6At2lGDNYe/dar5nHO4nDTJ/301aWJett4yjwAU8dWr87myqmk0GnLffVympgIPPQRMmcKJ3REj6A20d2/5af22bzdzRXTo4Fbkz0DZsDq7m3FjgFAI7XQA2yyvs4x1tttIKYsBHACQYrczIcR1QohFQohFe/bsCUHz7HER2kBY3EcKCiw+wUpoh8KirfJwb9oEIHyuIx07AmKnkQIpjEK7TCR17syrLRTzs26iLj8/dG4jgE2hoFAK7SVLeGc3qiCGTWjXq8eRYHZ2mZYM5Xhz/34ep8RE0Nq/c2doLNoAFdeCBWUBkWER2qHKkqIJGampZpc9c6a5vl07oG9fTlsHgnIfyc938cZzoWZN4IIL+PzHH8NW30yjiTn27mV2MoAW6aQk4LvveI327Mm0fgkJ5Rcytqb1s/PPthqAYjFpTNQFQ0op35VS9pFS9klLSwvb9zRuTCFwpHFLrghD5pGCAsvIbMkSqiW7BP6BovJwG6H34bJod+4M864SRteRMov2McfQP3nDhortuLiY7baIOmXRDhVhtWirUY6RnT9sQluVITYs2kBohXZensWarY5LqERr376c0Vm/nq4jeSWhd6DVFu2oRNUWUeWdFZdfztCGpUv935c/ftqA6T4CAB9/7H07jaYyoRJgXXYZJxnz83ldnnsuby/TprGrTrE1q5qUJ7T//JPLWAyEBEIjtLcDsN49M4x1ttsIIaoAqAsgFw5Slku7SgbPiDBZtMuE9sKF9C1VpY0qQiuj0I6RKzrUQjsvj7oo3ELb1nUE8H3H84fsbM5dubmOhMOiXXbcGzXifxsKoa2y0xgcOhTGDsYoWhMuoV12zNVAVpkjK8qJJ3L5449IrlGCgwtWcaYnlE6027bxJC0v+asmoqjCNevXu3bbo0axIGAgVm1/hfbgweY948MPQxvLoNHEIuvXl9UNw/jxXP78MycvzzuPMQ0LF5bvNgJQaCs9YBcIqYT4pZdWvN1OEAqhvRBAOyFEKyFEEoBRAKa4bTMFwBXG85EAfpPS2a5K6cYduUnsQb3NG1aAMqFdVESL9rHHhmbHdepwDtUitA8fDp1BT2mi1q3BgLA6deydpiqISzAkwLxAQMUrddrkaw6X60iZ0E5M5HlUUaF96BDVg+HLX1JC3+mwCW3Dot24MX9C2IR2KKqiWunQgYrrvfdQa/taFBRW5RzljTeGJvMLwIORkRE6x35NSLAWrrG6j6Sk0J/68899Fwa0Yg2I9CW0q1Qxb/IbNgCzZvnfXo0m3igtNW/X771n2g+//ZaFno8/npZtKctP67d5M71gVVl1O4u2Ks7btWsoWh95Kiy0DZ/rWwBMB7AawFdSypVCiMeFEEaICj4AkCKE2ADgTgAeKQAjjZrpz8qCR7q8UFEmtFeupFoKRUJ+RZs2Lq4jQOiKdiitmJEBWofDYM0GbCzatWpRrFbUdcRmyj/sriMAT6qKCu3169k7GUJblZoOt0U7MUGiSZMwC+2qVUPrhnHttcCaNai1fD4OVk9lBcdt28qCJCtMqII3NSGla1cze5BVaAN0H9m1y8zdWx5paeYkS3kTaVdcYT7XQZGayoz1/L/6ai6PHuWE4jnnUHhPm0Z7YHmyR1mrq1blZH1ZOliDPXtMH21VqTXWCImPtpRyqpSyvZSyjZTyKWPdw1LKKcbzI1LKC6SUbaWUfaWUG0PxvRVBeV9s2oSwCe38fENMqiIsobJoAzQ3GxZtNbMdKvcRF50apmI1gJmyziWQzTKACJqdO7m0tDvsriNAaIS2W3YadWzCatE+fBjYvx8ZGWEW2q1ahcZ1SnHRRcAZZyC5Z1scrN6APXxSEvD116HZv7Joa6KKKlXo9wmwcI11AuPMM3mjDsZ9ZNUq35MhXbqYFvBJk4ADBwJrt0YTD+TlmbmsJ0wwJ/x++42aZ8QIXkfTp7OYVEI5KvP33ymys7Lo2+3OtGlcNmjAMK5YJOqCISNF7doW7wsltEPlzVJSArz5Jgpyj9CKOmMG5zVDNW0OUGhv3QoUFdmLvgqQlcWLo3Fj0HUkTBZtldfaJQdyKIT2jh0UXJYKhHv3eo6UK0JYhbYQTKOACAhtSy7tsArtDRtCe/4DPChTp6LWaSei4GACR5xDh7pWMwkWVaxGW7SjEuWnvWcPAyAVSUnAxRcD33/PYHd/UEL74MHy7S1jxnB5+LCZbUGjqUw8+aT53Fo59bvvqKsGDWLJ9d27y/fPlpJCu6iIj4su8txGzSSFyn7iBJVWaAM0sG3aBFqtDh4MjYlCSmDkSODmm1Gw6yCSC3PZ648eHVpfzw4dKOg3bAiL0G7UCKiaWBp2q55HsZE2bfidZZVggmDnTo4SjON9+DA9dypa+dtKtWochXsI7QMHKpZrbs0azmUbc+NqV2EpWAN45NIOi9CWkoOnUAttg1q12EkXFoJzixs30n+gIqhiNdqiHZV489MG6D5y9Civ93vvpdVt7Vp2l3ZYp7YXL/b9vRdfzOse0O4jmsrHhg1mFcg33jALFZeUUOaceSYz0/78M9cPHVr+/tQ9p2VLc6ZKYU0Gd8opFWy8g1R6oV1m0QZC4z6yeDHPuGuvRYGsheRvPqYCuOaaiu/biipDvWJFyIX29u2Gvti9mwomVLmPbfDIgazEmJEjPCh27DBTBMCsIBdKi7YQNtleQpHiLzOzzJoNmMcmDLGoxGLRbtiQg56KjHEUJSXcV506YPh5fj7Qtm3Fd2yDSz52ZeqsqJ+26v21RTsqsRausab5y8kxMyAAwEsvURx37MgJjwEDgJtvBt5/n111aalrQKQSCN5QAZcAPQKt1nSNJt65+27zuZrdAVgJcs8euo0AdPfo3Rto2ND3/qxp/S66yNMWqa7zV1+N7Zj0Si20W7dmgoeSpiEU2l99BVSpgqInnsVRVEdyWk1g+PDQh8t27Ej/jjAI7TIjdgQKdiQnu1m0lRiriPvIzp0u7i4qkCKUQhvgNJnLMVffqXzEg2HjRrMgEcz9hzKQ0wWLRVt1iqGoE6X+0zp1EPqMI264ZK/p1YtmlnnzKrZTde5ri3ZU0rix2VXMns3z7dVXOUZ97z1zu+XLOY09fjyDtqpUAT79lHG0ffoAAweyf1Cn5tSp5XsQWgWGtmprKgu//mp65T36qOss63ff0W3rzDNp2Jo71/+0fgp3t5HcXLMa5M03V6jpjlOphXarVjTYZie15IqKCm0pKbSHDkVBElVd8t030MIdamrU4N1h5coyERZKoZ2eDts0eaHGo3y2WzGeoIiARRuwsWg3asRlsG4LBw6wd7EIUpVJJmxCu3p1HpjsbKj6UKpzqwjquNSpAzPZqsVSH0pchHaNGkCPHuzpK4IuVhP13Hgjl4cP8/q4/XaK56VLaUARApg4kafDmDHAK68wLd/+/ZyyfustCvFu3czuZvt2YMUK3997xhkou1Y++4xuKhpNPFNcDNxxB58L4Sp8pWRavyFDeB2qAOXy0vop/2yAt4YePVzfP+ssLu+5p/yAymgnxptfMZThcGNBQ0bmVVRoL1/OHn7kyDKLXtgEEkD3kRUryr4jFOn98vOp9xyzaKekUJ0FK7SLijh/bGPRDqWPNsC8n0rEA7BUQQrSom1kkbFatMMutIGyIE4lHkJh0XYR2kuXUgCH2XWk7Dzq14+VErw55fqDLlYT9Vx7rekjClBI//ILMxM0b06fzk8+8bRQJyRwLHvDDRTVqvaRYupU399btapZKXLv3vDYUTSaaOK998wB6E03MZGEYskSyh7lNvLTT7w3Wt277Fi92rRJubuNHDxoev898UQofoGzaKENYP3GRE6hV1Ro//UXl6ecUnbTD5tvLUChvX49kqscARAaoa3ci9PTweNRo0b59VMrgIdFWwjeBYPNpa2uXItFO1yuI6mp1PRlpKRwwBasRdspod2sGbBlS5nrSMgt2kuX8lwNZWo/Cx6Fj3r35ouKFD7SxWqintq1GeyoGDrU9e+6/HKO1+fM8b6PjAz6k158sblu7FjtPqLRKPbvBx56iM8TEoC77nJ9/7vvuP6cc9jtfvMNvWWtg2A7fLmNqNzcF11El5RYp1IL7ZYtaeVcsAChyaU9ezYVaosWkRHa3boBpaVIWPqvZ/aOINmxg8umTWEW7Aij2PCwaAMVS/GnrMkWi3a4XEfS0tyEdkICoz+CtWir3xxpod2mDbBxI9JSqS5CatGuLSm0u3ev+E694GHRVqXF/v03+J3qYjUxwW23mc/d+9rzz6cfaXk5tYUA3n7bdd3Agb4v4x492P0CzHpiLQWv0cQTjz9Oj0aAA1JVg0Tx3XecFUpLowtJfj5w5ZXl71fNBHXubOZ2AJg7YuJEPn///Qo3Pyqo1EI7IYHTG/PmoeJCW0oK7RNOAISIjNA+5RT+iOnTkZwcGou2Eo5paYiI2LAdILRpw7w+5Uz9b9sGPPiga9aBsrujm0U7ISH0YjU1lR2QS5GLRo3KLNpSsmM6+eTyp6MB0KKdkuLirpCfzxF9tWohbborrVsDeXmoXZiLpKQQC+0ju3mQwii0PSzanTtzfr8iQjuOi9UIIRoIIWYIIdYbS1unKiFEcyHEL0KI1UKIVUKIlhFuarlYsxq459lNTqbYnjiR6T19UacOM6aqwfjs2XRBUTd8O1R+XyldM51oNPHC2rXAa6+Zr60zSAAnDVesMN1Gnn6ayw4dfM8KrV9vpuV0t2Y/8ACXffuGWT9FkEottAHmY12xAshr2JY312CL1mzZQr8Lw+EvIkI7JYVn47RpqF07tEI7NRUMhgyz0PZI7wfQl7eoyOfAJyeH2u2pp+gvWeYrrUzybj7a9euHPqAiLY0iW7mmAKDAN8T+nDnM4fvvv8Cll/rx/2zc6JGZIz8/zNZsoOw7xaaNaNgwxK4j24y61hEQ2mUDtqQkmkiCFdrxX6xmLIBfpZTtAPxqvLbjEwDPSyk7AegLIARnRuhRMbZ33unZfV9+OWNOfvih/P306cPxWb16TAPYrh0wahSFgLLoWRk92vSGGj++YiEBGk00ctdd5jV19tmeydO++47L6tU5y6MKGzdpwnt7ly7AsGGceXr5ZWYt2bLFdQbJKrQLC4EXXuDzH38Mxy9yhkovtI87jifSwpJeNHu4+AIEgEonZlRSUKIq7COy008HFi5E7WpHkb9gNed5KqCUlDUzpXYhBWMYc2gDptB2uUH6kXnk+efpO/bxxxS6jz1mvKEs2ioDCEJfFVJhGzxosWi/9BIF/pQpHAi89VY5O8zMdHEbAShYwy601XdmZiItLcQW7aWzqUbUPHsYcMmjrejZk0I7mIFz/BerGQ7gY+P5xwDOdd9ACNEZQBUp5QwAkFIWSCkPRayFAWAtZPHpp57vpaf7V5K9Tx9eut26ccw7ezYtdGpq3P26aNTITGG2dSuvc40mXpg+nYGNanL4vvtc39+507Rw33ADPQQBWsBfew24/noOVrduBT76CPjPf1hivWVL4MUXuW2PHrR+K449lsvzzzfvr/FApRfaffvSR2/qNmOoFqz7yIIFHNYZQ76IZB0BOGcjBJJXLUB+5i4muLzwwqB3l5NDz4Wk7Ztorg1T7mNFrVrUNIest3D1nV4CIvfvB15/ndamyy9nEEaZxWrHDlr6LREU+/aFV2i7jM0aNwZ27cKhgxLff8+gqYEDgcGDWUnLq+4rLuZQ301oR8SirZzuMjNDbtFOnvIF1U4Ys3d4uI4AFNq5ucGVuoxAth2HaSSlNKZ+sBNAI5tt2gPYL4T4VgjxrxDieSGEbTSrEOI6IcQiIcSiPaEYpQXI//5nPr/iCldXrsREziZNm1Z+jLKqENmoEUXE8uUUFzNm0JNtyBC3LEMw3UcAWuw0mnigqIjCuHlzPj/xRM7ylJbyehg50mXSGBMmMK5r8GDgllv4ePFFDlKXLuWsUk6OZx0xqzV73jyzANSECeH/jZGk0gvtevU4BfjmL22QhfTghfbChSyWYdTnjYjrCEDzy2+/oXa9Kiho3Y29/Z9/An/8EdTucnIMtxElcsOU+1ihiu24uFWkp1Moe7Fo//QThfmtt/J1//60QO3ZA7P8ugXlOhJqVIojD4t2YSFWzc9HSQlw/PFcfeGFHNmvWuVlZ9u2ce7ZCdeRmjXZa27cGFKLdnLNEiRmrgMuuKDiO/RBjRocLLv4+lckIDIOcmgLIWYKIVbYPIZbt5NSSgB2w78qAE4EcDeAYwG0BjDG7ruklO9KKftIKfukOWCGqlvXNfe1u/X68st5aX3+ue/99OjB7lvFQ6i4ioEDKRhWr+YEojV3/rBhZt8yaxbwzz8V+ikaTVTw9ts833v1ouHlmms4oG3fntl9/vjDLFizciVjJbKzvQdBCmF6ulommzF4MJcFBWXOAPjf/8rPWBJrVHqhDTBPY6kUOAs/YdHfQVQfKC5mPd++fctWqZu+sraFlYEDUXtof+RXaQBcdx2Hls8+G9Su9uwxLLVKaIcp97FCGTr377esTEyklVWlu3NjyhRerCpPp1ouWACPYjWAA64jAJbPo3lV+bSpKeZp07zszCbjCEChrQYjYaV169C4jkgJPP00DnwzE3UKc/hfqkiZMCGETZrI7t35RjBCOw4s2lLKwVLKLjaPyQB2CSGaAICxtJvDyAKwREq5UUpZDOB7AL0i9gMC5JhjgKuu4vMrr3T1l+7cmTHqL79MH1BvJCfzOv3tNwoMawDzaacx2PKff+irqs61atVcUwNqq7Ym1snNBR55hBORq1dz3bXX0k0kPZ0D1qwsWrjbtwc6dWKMQp065Xf1//7rOrP03//ymrzzTnOdMqDFE1pogz5Dk76S2IsGGPLqsMBTOK9cyfJkbkK7Ro2wpQ72oCwYsnp1zmfOnBmUYiqzaK9fzyvHmpk+DCihfeCA2xutWgGbNnlsf/QoxeqwYWZwY+/efD5/PjzKrwPhcx1Rh8bDdQTA8n+Ly4p3AjSOduniQ2irQYUTFm2AMxdr16JhQ4qIQ8F64z76KPDAA8jbfRh1Eg9yDjACVk6P7DXJyfxNwVq0k5OBOnUwfTrw5Zcha2a0MAWAcnq4AsBkm20WAqgnhFB/3qkAvM3HRAXWVGANGrjOkj34IMdPH3/s+Tkrl15Ky1yNGuxPrEGQ55zDSpB//01fU5XJROXUrlGDp7uKx9ZoYpFHH+X9+LjjzKK+Q4ZwNvbPP5l84NAhWrXPO4/X2aRJdOWsUcP3vq1xSj17ch/p6SyIAwDPPUcJE29ooW0wbHgCZjW7FAmy2KUYgV8sWMCl8uQHb/qRTE3jkt7vooto0lEhwQHg4jrSrl3YC3bUq8elh9Bu2dJWaM+dy985bJi5TkU3z58vPSzaxcW0lodDaFevzu+2s2gvW1MVxxzjOtA67TTWNLIt2ZyZSXeZpk1dVkdMaHftCuzahZSqnBcPKiZ4+3ZGj40ejbyTzkad7q3pzBcBbLPuqIDIQMnKKssf/9prwJNPhqSJ0cSzAIYIIdYDGGy8hhCijxDifQCQUpaAbiO/CiGWAxAA3nOovX4hBIUwQPeOzp3NFGJDh7J7fuYZ+px64+yzaV/Yu5f+qL/84vr+RRcBH37I/V5wAa1xffrQqlenDvubN98Mz+/TaMLNypUUw8OG8VoBGKcwZQrPccWPP/JcHzEC+Oor2hnLy5194ICr+9bkyXSpVPeaGjUYVBmPaKFtoVVrgbHpn+Lvvxn84jfz59MByWKNzM+PrNCuXZuWyNJS0G+7fXteAQEgpZvrSJjdRgAvriMALdr79nkocJXcRfk+K3r2BFYsl1SxFov2nj38XW7eJCHDw9VCWbQ31/FIhXTccbwxL19us6ONGzm4cJsCiZjQNtLvpeRxcOOSstBf3nyTA7zHH0denoiMy4uBV6G9dat9bjZfbNsGZGRASo6hLRNVcYGUMldKOUhK2c5wMdlrrF8kpbzGst0MKWU3KWVXKeUYKaUPx4voYNQo83lWFi1x115L4f3wwxy7+/LVrlGDY8MtWzhLYpf//ooreKr/+CMt4CUlXLdrF8XI229TeGg0sYSUdOEoKaEIBmgcevppz9S4X39NS3SfPnQb6dix/JLrn35qzpQefzxnea0S5bHHIuQm6QBaaFvJyMD5hQx3/eabAD43f76ZvsSgoCBCAsmgdm1L9g4hmB/njz8CUkwHD1KnptYv4UgjgkLb1nUE8LBqz5/PZrlXhW/TBsjekYDDqO6iqtU0bsSEdv362JPYGLsLanoIbZXVYNEimx3Z5NCWMoJC20i/l5LDucJAtSkKC4F332Xt3datkZcX2U6zTh0vQhsw806Vw8qVFGEHth4AmjXD1q38b+NNaMcziYmuFuX//IcW6C5d+F7PnhQOvnJeX3op+9HCQuDnn+23vfFGYNw4Co6rruJ0ekICZ85yckzLukYTK/z0k+cMjqreaGXRIg4y69YF7r+f9SI2bABuuokzPkOG0J2zc2fGLBQX81725ptmzNpFF7nm0j7uOFc/7XijQkI7gApjJUKIJcYjerONNmuG1rvnoVcv6VFlzCv5+bxDuw3nnHAdUc0BQMFTUuJnSUJSVqymZBc/2759aBtpg1fXESW0LVMLUlJo242cVQzhZrR0sWjbVGQPKR5COyEBmQ3oQuSesKVFCw4QPIS2lLY5tFV+8YgI7bQ0oEkTpGxbAiAIoT1zJk+gq68GAEeEtjUbBICAMo/8/TfHGpdeCty482EgI6PMI0wL7djC6vrXpQuFQJ06wJlnMoPC+vW+Kz4OHEhrW1ERT2nbgTEoDJ54gpa6J59kBoUtWzg59PLLwdc+02gizcGDpjumut/873+u/tI5OQyIVB6yq1bRpxqgmP72W6bnO3SIHpApKRzo9urFwe3q1VwnBPvam24y9z1+fOTi2ZygohZtfyuMHZZS9jAe51TwO8NHs2ZAURHOHliABQtsSoPbsWgRe1SHhba6OMqE9rHHUl0GUEVBCca0vUYEhBIqYSQ5mZYgW9cRwMWinZVFC7UvoZ2JNhG1aDdpwuApK5tqdQFg/gSFEPxbFi5024lykbEJhAQiKFi7dUPKRjYuYKE9YQJHTUOHAogSoZ2WxvlNP4T2a69xH/+5Og9f4hJM3dcfCxYwq4T7zIQmuqlRw/Srv/pqdmOLFwN33MEwAoApXa35tq0kJNBCrfAawAyWi77vPk7mLF1Kr6Pu3SlCZswIyc/RaMLKrl2mVunShdlG6tUz/aX37uV53qqVmbM+NdW8j510Eq+lXbsopv/+m3UtZs2i+D5wgMHI6ruOO44VJxU33kjXk3imokK73ApjMYWRzqtP+g5I6eeMs8rA7mb2ckpolw0OEhI4RJ02zUv0nSdlFu3sZRzKWqMfwoQQFDgeFu0GDfijLEJbXdh2FkalUTeitYv5OtxCu3lzWsmsPpmbkljqqmVLz+379DGT1JThI7UfEEEXpF69kLLmbwABCu0jRzjHeN55QFISpIwSoQ34FRC5axdvCGPGAM+MXoHOWIkbJw7EpEm0xlhqH2liBHdrWfXqrNRqzUySmMgp8H/+YT9RXGy+d+ml5nNfk4JCAE89xRLTKm3Zrl2Midap/jTRzuLFrvepr76ibe6WWzip/cgjFNjPPAOcdRarPQJ0M1F64bbb7HMmCMFgSWtJj6NHmdBg8WJz3WuvhfpXRR8VFdr+VBgDgOpG5bB5Qohzfe3Q0SpjhtDuXWc9ANeTwSvz59NHwC2thRPBkOp7yxg+nMr799/92oe6cNI2zqdZJkJZ4+vVsxHaQnik+FM5PY85xnMfaWlArapHsTGxnUsVwp07WVAiXCmDWrTg0lrnaBNaomHCHtsc6l26sANbv96yUqX2c1pon3YakkoOI7l6UWBCe9o0NtYo86VcXqJGaK9Z4zNf4Y8/0k3g6quBaru34T1ci217qmPnTuCFF8LXZk34qF/ftJrdcAML2lxzDa1nVoYNoz9p06YsVtOoEQvXvPWWed0tXOi7qqQQFNXXXsvX06cDJ5/My0L1WRpNtPHpp8wvr9JUrlplWqwPHODt9/HH6XO9dCnjV2bOZGGZvn05gG3QgJl6fKHSoxq1/FyYODG+XUYU5QrtEFQYA4AWUso+AC4B8LIQwmtdb0erjBlCu+nB9Wjc2A+h7cNpOGJBbAYePtoAcOqpjD5QIcTloMY1qatn8+4TIerWtRHagEeKv7Vr6TtpN4ARAmhdaxc2JnV0GV7b1K8JKUpob9lirtt0NB2t5EbbuekONHaX5ScFED1Ce8AAoG5dNEjMCyzryMSJnEs89VQApuCNtNAuLLSZvOnZk/+DbaoXMmcOfQePOQbAtm0YgLn44v3DmDmTh0QTm9x9t/m8a1cKiz59PMW2ld27KSreesu1L50+3fd3CcHPqMJUEyfS7ejVV4Nvv0YTDoqLGV9w+eVmcOKtt1LOfPQRX7/2GmMV/v2XObK7dqUVOzOTLlh793ISc/Ros5KqO0VFzNr0wAPmaysvvMD0fpWBcoV2CCqMQUq53VhuBPAHgPA7/wZDgwZ08Nu2Db17+yG0vTgNS0nhaDGshh1bi3b16szPM2WKd4dECzk5QJUqEnULsjhnHiHq1rXx0QZMi7YRVbRmjSlU7WhddRtdRyzY1K8JKc2bc7l1q7luU0Eqhfa+fR7bqwBJF6GdmUlTmpsJPOJCu2pV4PTTkXI0G7k5fkZyHTxIh7yRI8tmQJwS2oCPzCM+3EfmzKGgFgJlxWpGXVnDI4WkJrZo3JjiQFFYyGnrt97yDFQGeNNXbml9+rhWubviCgZ6+SIx0TUkprCQBXICjnfQaMJEURETkr30El0+jjmGMqFWLXOmuGtXhp59/z1ndxSvvEJb5Hnn0UpdWOiaOzsvj64nd97J9H116nhP+de2LQV7ZaGiriPlVhgTQtQXQlQznqcCOB7RWmFMCJ5JhtBevbqcfKjKP9vtbDp0iO4BTghtjwDO889ntN5ff5W7j5wcILXGIQiAEQ4RwtZ1BKDQPnQI2LMHUlKc+gqaaF26ARsLM1yi/XfsCK/QzsigO7yyaJeUAFv310ErbLKdb65Vi6eYh0W7jeckjxp8RPI8wkUXIaV4J3JX+5grt/Ldd/yPLAmMnRDa6vz3cB9p0YJ+BF6Edm4uB3D9+xsrtm0rK1ajiX3OPNP1+v/0U/YJ69aZ/trPPEMby7x5tES//jqFRs2arm5q3buzIqRHMLOFKlUYgwHQPnD4MAMlNRqnKSmhFXvKFOCNNxj0OGsWXUeefZbbdOzIAaX7hPayZcBvv9F3u0oVuo10704hPnMm/bfr1qX34Ftvsfu0xkm48/bblcNlRFFRoV1uhTEAnQAsEkIsBfA7gGellNEptIEyod25M43APsuxz5vHSCmj2IfCCaFh6zoC0E87Obn82sOg60hq8U5ePXYmnzDh1XXEkuJv504eV58W7cOrcLikWllKP+lZKDLkVK1K/05l0c7KAopLEii0VUPcaN+eN/oyNm70cBsBTIN4OKpaeuXcc5HSMBG5WwpsK3N6MH48/6cTTyxb5aRF20NoC8Hz2YvQVgWQylxEsrI4etLEDVa3rm7dzP7gsss4Dps8mRlC8vIoPs4+mwGOn3/u2v8PHUph0rcvcPrp3m0XnTu7XA549lnf1Sg1mnAjJWMVJkygH/bVV5szNvXqmf2ft/ohr7zCyf7LL6fr1eLFdLFKSKAPtzVguKSERjtfCc9UTYnKQoWEtj8VxqSUc4zKYt2N5QehaHjYaNUK2LixLIW0iyBy588/mavGLS2BEo2Ou44ANKGOHMnKCj4CwgAgZ/tRpB3ewtrCEcSn6wgAbNpUZgH2atEuLESbQ5zbVS7PeXkcrYfTog3QfUTdzFWQYxtkehXaHTrQoi0l241t22yFtvKTVrnGI4IQSBncE7myASO61MG0Y/NmmjnGjHEpHRZVQhug+8jy5a5pJQz++YdavKzjV+XXNXFD1arAF1/weffuph9/UhIwdiwHW3v30jK3bx/F9mWXAffc4+rz36cPr/PnnuO47cQTeYn89pvnd77zjvlcTalrNE4gJfDf/3IG54EHGLtgLZExaxZn7889l4NEd/bsoe92URG7UmuhGYA2uWefpc3lpZdo9e7SxbuRMj8/wrO0UYCuDOlOhw7A7t1ol7YfgA+hnZfHu/TAgbZvAZEVGomJ1NS2luGrr+bZ/eGH3ncgJfasyUGqyC3LHhEp6tXjMfMo8GAjtL1atHftQmtQFCptqJbKjzpctGhhCm1lOO2OpWZuQTc6dOD/tHs3+MHSUlvXkX372CFFeootpU197EN9lOQfopLwZtl+5RU2zlohBFEqtI8coY+IG6tWMea2Vi3wTrJjh7ZoxyEXX2w+t05pX3klU60/8QSny2fMoDvRKacwQMyaQ33yZBo07rmHl8Qrr1BMDBpE8WIdx3Xq5OrjfemluoCNxhmefJJVTG+9len6zj/fnIHNy2M1yH37OOi0Y9Ag3qKKi11tR2vW8Jxet46FbMaMod/1iy9yNsjKmWfSF3zt2shmY4sWtNB2xxjqJWevQ9OmPoT233/z7LMR2k5YtAEv+agBRiaccAJNMYWFnu8fPgzceity8qshtV9bW9EXTurW5aH08C9PTmY2i02bsGULfcPS073sZMcOtMAWCCHLBLZKrRXudODt2lEv5+cDS5YAzZpJpNQ6albHcENVts/MhNcc2gA7v/q2tVbDS4MGgJQC+7/7ncGOZ5wBjzQke/bQbDd6tMdIJiqFNmDrPrJqlcWKs3077xzaoh2XqEqfH35olpauVo3CedYsPo49lhlGdu9m0Ndtt5mfX7nSLE5Vsybfy8ykBW/cOFaGtAoRd+Fyzz1h+2kajS2vvAI8/DCDeR9+mO5P333H91av5qzOiy9yYGkXuPjhh/YJm6ZM8e3Gac2NfcUVdC156qmIFJuOSrTQdkedCWvXevrSWvnjD85JlkVRmSixG0mhAfjwdRaCpZmyssySaYpFi4BevVDyxlvYiwZIG9IjEk11QQ1IbN1HjBR/WVn0hfZq3d25E9VxFOlpRS5COyEh/O7mJ5zAgcKcOdRyPXoIjgiysmy3Vzpu2zaYZnebwc3evRH2zzZISTG+v2kXmvE2baKvv0q4CnAu8uhRlsVzQ4ndSKa39Jp1BOAdoXp1D6FdXEwLS5nQVoOeCA80NZHh2GPpYwrQ2qxmoa69lkl/nniCr487DvjgAwY9bt5sXg8A8PPPrvusVo2i4tNPKeR79aINBqAv96mnmunPXniB+bw1mkgwfjwtzOedx0wg/fqZxWPuvJNumG++ycHj/fd7fn7uXE6GKzp1YlfaqJGZxtKOo0d5ewDotjl5Mm19t98eql8We2ih7U7r1lRz69b5FtozZrBHrlnT4y0lNCJt0a5b14tFD2CavyuuoNB+7TXO+9x7L39Dfj72fvUrJBKQmhb5bAvKB9lXir9yY9QMN43WrWSZXlq9mprJW57PUDFgAK3tP/9M4dazJ9hYf4V29eq2EZtOWbSVsMjNBUcRH3/MyK+zzqLJ/rHHuO7BB22d5vPy+JMiWVHRp0W7ShVGwbkJ7U2beFPQQrvy8O67LG4FMKNIURGDvP77X/poz53L9y64gGXYn3uO3lMKVXzDnUsvpa93zZrc/tVXOTkydqyrn3ePHp6TQxpNqJk0iQWahg5lvMEJJ3BysmpVThI/9BAnJR97jNJg0CDXz2/d6rruggtY2Cszk/vzVstOStfrpX592mc+/LByZRlxRwttd5KSKO4Mi3ZOjk3HuHMnb9pehnVRZ9FWvPEGQ4Rvu43D0+ef59T/8uXI6XIyAF6EkUZ9p6pM6UKrVsCWLcjKkr6FtjFn27pDVReLdgSqyKNWLQZKffghLds9eoBC24vrSN26tPZu2wb2XK1b26aTc9qiXZb/d9QomkfmzeMo4tFH6cf/0EO2n490+XWAAichwcdAs2dPDhIsjrKrjNxHZUJ740beibz6J2linWrVmC0BoPBQxWtuuIH9kLJqA0zz17Cha3aRmTO9B3l168YJwjPOoPVu9GhOePbqZVamLSnhpWMTl6vRhISff+YgsX9/WpLPO4/uivfcw4Hlk0/SuPXww3TXfPFF19tPQQErpqrUxh06MO3l99/zvLXmznbnnXfMTE4A+9g336y8LiMKLbTtMNJCuPjSWlHzh16EthM+qoAfQrtWLbZ9+nRaJNes4bJ+fbP8eoSLcVq/05vQlkVF2O6P0E5NRZt2CdixgyJ1/frICG2Aacfz8jitdsIJoFjLzrYtFKTStW/dCq85tIEosWgrxozhyGXCBM4/Tpjg1azhhNAWgoMXn0J7/376AhgooV12jmRmcmBXmU0vlYAmTUwx8MEHrLdUqxan06dNo1gGeO19+KFnOvxHH/W+73r1KEieeoripH9/Bp8dOWJeLjNnan9tTXiYPZvCun17DhIfeYSvZ8zgLEu3brR0L1vG2Z2bbnLNNFJaSou1tTjT4sUM7XrjDbqf2GUmAegy5V519fbbfQvzyoIW2nZ07AisXYsWTZn81Fr1DwB748aNPfJnKw4cYBxfpO/X5QptgIpk6FA6K1qGmWXl1x20aKs2uNCqFfajHg4dTvAttLdvB5o0KYtNfflljt4jJbT/8x+mNlq92hg4ZGRw+L/btliqka5dmhZtN6Sk0I4Ki7aieXOa42wCgK04IbQBfqdPoQ24uI9s2MDLuMyXPDNTu41UEvr1Y2ENADjnHHYfN99McW0NYzntNE/x8Pnnvn2tExLo8/rzz/Roe/pprrdasV96Cfjkk9D8Fo0GoCA+6yy6QhUVMejxkUeYWvLttxmT8PLLPD/vuIODQvdB4yefmIHCAAeEtWoxqHLjRuDxx+2/e/t2xiNYGTyYcQkaLbTtOfZY4OhRND/ItBXWggc4coRC+6yzvFaPO3DAGaHhl9D2gpMWbSXsvAntLFBh+xTamzcDLVvi+ONpTH7qKVqQytGEIaNxY3ZeZRZo5X7gxU+7eXNg2xbJ+WsbcXfoEK0ITli069ZlZxxs6egDByIbCKnwKbS7duXId/HislVbtjDWFgBHNl4GPZr45IYbWHgGYN9SsyYtcJMnm+4lAD3smjZ1/awXrykXhgxhBlj3wX7z5uyXrrvOzISi0VSEVas4KMzPZ/+7bRtnVB59lJO9zzzDPNmnnEIh/fvvFM1WQ05pqWds+y238PNPPMFCTkOHen730aOctbEmNGvTht/vzZe7sqGFth3HHgsAqL9mLpKT3Sza06fzbL7wQq8fz8tzJiF73br0qwqmCpkS2tYI+0hRtSpH17auIy1alC+0pSxTTQkJDNwoLeWNtExIRRrVWB8BkbtzEnAE1XxWhXRCaCck8HuDDdrav9+ZdntNbwnQzNO9uxnthrKxGdm7lxeutmhXKn74wXx+9tkMX6lTB7jrLtPrq1Yt1vuy8v33vkuxK5o353T+FVeY67Zu5YRikybMfuIl3b5G4xebNnFQpwwjjRvznFMS5f77qQleeIGi+O67GQh8/fWu+/nhB9f0lBdeyPvUAw/wc+PGeX63lBTj8+e7rp8yxZnZ2GhFC207WrUCUlIgFi5wqfoHgPMwKSkcGnrBSYu2+v5A2bOH7i4qaCfSpKV5sWhXq4asul0A+BDa+/dTJBmq6aabOB388MPhaKmfqMZ6CYhUmUeykOGzKqRTnVVKSvAWbad8y+vX95K5RnH88bwjFBejtJSCp0xol5X01EK7MlGlitnvTJ8O/PQTLdi//srpcoUqUW3lwQf9+47q1VlZ75hjzHU33EDL+f799KG1ZibRaPwlO5suGiq/e58+HAD27s3XCxcyDOuOO9i1vfwyXUBeesnT2nzuuVyqsgh33MEZmfHjOQC1C2h85x1WnLTyww/e/bgrK1po2yEEk6AuWIAWLSwW7bw89o7nnUczrBcOHHDOoq2+P1BycpxxG1GkpXmxaAPIqtMJCSixy4BHVIBbixYAmDd78mRnfw/S0pjBxmWUZlKW4g/NzAqYFpy0aAOxKbTLbfOAAfTJWbYMO3bQymOcMqavQLdu4W6mJspITWUOfICBYKedxoH62LGuxTqmTjWfV63KinqzZvn/PZbJFBQV0f/1k08YmHnjjbpypCYwcnJoyVZZto4/ngPEJk34WkqK5UaNaJXeuZPxB8OG8XNWrIPKatUof447jq5UKh2gO3//7VrQCWCcw9lnh+wnxg1aaHujb19g5Uq0aHTE1Eqff06f2muv9flRp4LBKiq0nQiEVKSmerFoA8hKaoPGiXu8j23UH+SYn4gNCQm0VHvJBVZm8K7f1XYaIVYt2oWF1LJOVbT06e6izJJz5pSNzcpOmaVLeQGVKW9NZaJ/fwaOATwnXnqJ5/All5h1mqx5hYuKOEX/wAP+C+TatV2t4NOnM+PkQw/Ravj666H4JZrKQF4e4wtU5qSTTmLwrVV3TJjAAeRTT3H9/ffbu4AoQQ4waHL9er7+6iumtnzySU/D4fbt9Mt2d1O1VoTUmGih7Y1zzgGkRPP9S5GbCxwskAxT79WL8zM+iEWL9p49zgptr64jALJkOjJKttiXjwfgqZqihPbtTZcEN1RwVXZd+7QosWrRdrLdDRrwBuQ1RqFZM45wZs92nwSh4une3WuAsyb+efRRc8q7TRumQ1uxwqyal5REq6Fi4EAKEfdqkb647TaGC6iu6sknKeTPOYeZi377LRS/RBPPHD1K334V133KKZxtSU42tzl0iPXoevZkZtbFi+m+dPvtnpWSX36Zy2bNgG++4b3prLM449K9u2t1SPX955/vmfYyJ0d3n97QQtsbPXsCHTuixerpAICt707jPOKtt5Z7NsWqRdtJV4vUVLbBzjqUdSQFGcgyKrzYsHkzI5aiLfqiXTtatG1yadeuDSSLAmTXsPcJViLXieBU9b2xJrTVsVJt8EAI3pV++w1bNvM/adECrCKybJlRaUhTmbG6ilx0EYMYX3qJeYgB12nxRYsomB980H+rdloa8xhv304rJECf8Fq1WFTkggu8F8TRaEpLGUirBmSDB7NiY61artvdey9vl6+8wslV5QJiF1dw551cfvghz/Obb+bntm7l0pqm2Fvw47PPOnevigW00PaGEMCll6L52l8AAFuencAb8WWX+fxYURG9S2LNou2060haGo+dXXq2rAO1KbQ3bbL/sMrTFm3D6XbtaK6yyzxy+DCayu3ITrCP8Ny5k52n1UoRSRo0oFVETZv7i9MWbaAc95FBg4CcHGz+Zx8aNmRKN2Rm8qLVQrvSk5DgGlD744+09I0Zw4GnkZAKAE+b++5jwNi33/r/HSqjSdOmZhrML7+kcaa4mGLe62BRU2mRkoL5q6/4euhQZveoWdN1u+nT6YZ0xx3AiSdy+7//pguJuy755Rfz+ddf04vxrLMonM8/3zM9rgp+bNjQdf1//xuSnxi3aKHtixtvRIuOPIu35tVjaaRyqtCom7wTo7tghfbhw9QZTgdDAp4BkXl5QN7BKr6F9oYNtgGFjqPm6OzcRzZvRlNkI7vIfnSzcye8B39GAHX+BpriLyaENoDNK/JNtxFVJlAVtdFUaurWZdFcgOI6K4tZHa6/3rNG2Zw5rG/20EOcGPGHFi3o+/3DD5wgBVhNduFCCvC1a5laLZg0rZr45ZlnTD/+M85gwH+NGq7b5OayEmPnztz+8GHTBeSqqzz3edppXL73HgNzL7uMMywlJVxamT+frk9durjWYZs7lwNUjXf04fFFgwZoMvsrJCaUYsu1T9rneHLDySn/YIW2ErdOB0MCnn7aKjtehsi2F9qFhbwrdukS3gYGgy+hvXo1hXaB/dRHtAjtQN1HosF1xKfQzsgAOnTAlqxE06X/xx95sHXGEY1Bhw5M9QeYbiHffENxnJEBDB/OdR9/zFR9q1cDX3zh//7vvZfGDSFY0Gb7dk7THzzI92fOpPVSZyLRAMAHHzDwFgDOPJNVH91j6KXkYDAnh3kbqldn7mw7FxCAMzGKrVs5e9m3Lz97112utqs9e4CRIzkLY62KevHFzE6i8U2FhLYQ4gIhxEohRKkQwmuEoBDidCHEWiHEBiHE2Ip8Z6SpkloPGc0SsHW/f07XSpg4IVqrVuUINxaFdqNGXFoT5gOm10VG42J7ob1+Pedbo1Fop6ezt7MT2suXoyl2IDs3yfZmunOneUycIBaFtrJol9fm0pEXYsuhNLRMyedA7eefmfNKm2U0Fs48k1ZBK1ddRReP9evpqwpQlHTvzqwl3uK13TnmGAZAvvUWp+k3bWK//eWXZn7jt97SmUg0dA+55ho+P+MMuilVq+a53SefcDD4xBP0gsvK4rk1cqR9heSnn+ayVy/6Z596Ki3bTZq4VogsKQFGj6bYtuberlqV+9eUT0XvLCsAnAfAazZRIUQigDcAnAGgM4CLhRAxlc68RQuv6ZA9cDqILZgy7MqK7KTriEqS7x7vWCa0W1Yxs4tYUcPrrl3D1ragSUjgHJ61nrNi+XI0TS3E0aPC1h9z1y5nLdreZhjKIxqEdnnuLrvOugpHUR0tts9hVFF+PoW2RuPGvfcyKNLKqlV8PP44X5eUUJxs2kTB4i9jx/Jc3bSJQZBPPw3060eXgKQkbnPbbYFlNdHEF3//bc6eDB3KiqR2InvTJrohnXgiKz8CPL/sXEAAzsB88w2fr1rFGZX0dGDBAg4urbFBjz3GIMmTTmJcguLBB837tsY3FRLaUsrVUsq15WzWF8AGKeVGKWUhgAkAhlfkeyNN8+ZuZdh94GQpc/W9gfrVRoNFOzWVxl/346yEdtMOte0t2suXc06sQ4fwNzIY+vZlegL3zCPLl6Npa/aYqqqXorCQAzYnhbayplt98fxh3z4Gcfqo5xQ26tblqVDe+b8ZLQEALX8fz3n/Jk1ckyRrNAZCUDz36uX53oYNZqGPn3/m4PKJJ+gX6w/9+1O8vPACxU1CAq3jZ55JYaMmWM44w8yXrKk8rFxJ330AOPlkeripAZiVkhJmxwFo1U5MZNiJcgGxy3prtUQfOQKMGsViN8ce65rvYepUntP9+pmZdwB+n7+VUTWR8dFOB2C1U2YZ62wRQlwnhFgkhFi0J1BzWpho0YKCr7i4/G2dtminpHivsOgNdZidFNpC2A9osrIY4VytbTOaeQsKXDdYsYL5qu2G+dFA376cYrC6jxw+DGzYgKad6gHwFNpK3Drtoy1EcELbqdzfQvC7y3MdKatvlFoA7NjBuVj30H2NxqBmTYoMJXoU48Yx8Eyxbx+v5bfe8n/f993HPm72bPrgfvstM0GcdBKti4pjjgl8dkkTu2zbZnpDHncczz9vxosXXuD58/rrFNWlpfTvd3cBUWzfThGuaNuWhpXsbDMdIMAJ5Esv5UyhNZ3fRRfRZ1x72vlPuYdKCDFTCLHC5hEWq7SU8l0pZR8pZZ80R2tomzRvzlGjuyCyIzeXms89r2WkCCb/cU4OLxqnBJLCTmhv3mxMT6mMEAsXum6wdGl0+mcrVD4w611z9WqgtBRN+7BqjQr4VCg/dSeFdpUqHHi5FyUoDyeFNuBHdUiYHkgt5k1kigcdzaMphwYNKIDPPddcN3EiU2CqqnqKZ56hN5I/nHYa/buffZZT/23b0l2ksBDo3ZtdhSI9ncVCNPFNbq7pktG1K0W01Tfayr//MuPN+eeblujPP7d3AVFMmuSaIefpp1kR8pJLOMsC0Mo9ciT7c2t/Onw48Omn5SZf07hRrtCWUg6WUnaxeUz28zu2A2hmeZ1hrIsZVBowf9xHcnNNa6ATpKYGLrR37+bnnB6h2gntDRt480H//jyof/1lvrl5Mx/upqZoolMnjrqsQttIJ5dxansI4fmbo0FoA5xJCNSivXevs0LbH9epzZu5XXKjWtFXTVQTtdSoQZFy/fXmusaNGSBp7e9zcsxqe+UhBKfm166l4HnlFT5Xn+/Y0fSYKypixUqdiSR+OXTInFlu2ZJC2pvIPnyYFufUVOa3FoITvmPHerqAWJk0yXzesyfzZyckuLqT3H67WXlS0b07B5dOuAXGOpGQVgsBtBNCtBJCJAEYBWBKBL43ZCih7U9AZE6OsxWSlOtIIJ2x06nkFM2bcyZfRe4XFlIUtWsHqrcuXRgdovj1Vy4HD450U/0nMZGDhBkzzD/lxx+Bdu1QrXMbNG3q6Xoey0J73z5nC3Q2aOCf64jW15pgSEyka4iy/AHMCjloEGNM0g2nyIcf9j9WZtgwlrl+7jmK+WHDGGipZrpatmS/CHCd9bs18UNRkTkTXq8ejUy+LMf33Uff/fHjTc3x7LOeLiBWsrNdbVUPP0yhfe+9LMwEMGXlu+96fnbu3Oj10Ix2Kpreb4QQIgtAfwA/CSGmG+ubCiGmAoCUshjALQCmA1gN4Csp5cqKNTuyqBMwEIu2U6Sm0pfc36lLwPkMF4rmzalFVQDk5s30N2vb1tjg+ONZIULNe82cSUe0Tp2caK7/XHQRzVSLFzNR7m+/ldVybtnSM5mKEtru1bciTaNGgbuOOG3RTk0t35d182Zz8FwZEUI0EELMEEKsN5a2/5gQ4n9G+tbVQohXhYi20qvOIASn863MnMnp9jPPNNfZZXvwxssvs5+77DKmCSwudq2217ixOYCcP9/VhUUT+5SWugY65ub6FtkzZ1JM33KLWXRm82b6a1tdQNyxWrMbNGBGkWbNzHNt6VLg2ms9P5ef71kcR+M/Fc068p2UMkNKWU1K2UhKeZqxPltKeaZlu6lSyvZSyjZSyqcq2uhIU6sWb+D+WLRzc50NKgwm/3E0WbQBc0CzYQOXZUL7pJN4xc+aRWfFmTNpzY72+//IkexFP/2UVTCOHi0T2q1aeQrtrVt5DjltPQjUoi0lRa6T+b+bNOH57G1GR0pt0QYwFsCvUsp2AH41XrsghBgA4HgA3QB0AXAsAJtsvJWTxETgySc918+cSSshQOuie10AbyQns+DNrl383D33MKf2n3+a2zRoYA4iJ092DcTUxC6lpa6iuqTEtxvn3r3AmDF0K3ruOXP9Pfd4uoC4c/vt5vMDB4AlS4D//Y8Bv/v3A+ed51mRdP16e19vjf/ouFE/ad7cf6HttOsI4H/mESmjT2gr4akSdagCizj3XKq/Z5/l/G1OjndHtGiiXj1gxAjgzTeB665jKkLDr7xlS0aYWzu39estv9lBGjUC8vJoqfOHAwf4O5y0xDdpwjZ4G2ju2UPfxkoutIcD+Nh4/jGAc222kQCqA0gCUA1AVQABzm/EN1dd5ek/u2kTzy01q6OK2vhDnz4U75Mm8dpr0YKft2a7Sk01+8ePPmIhE+2zHbsUFQUmsqUEbrqJA7LPPjOTJc2a5ekC4o6qdGr9ruOP54RraSnF+8aNrtu8/77F0KUJGi20/aRFi/JdR0pLnRfayprur0X7wAEaWKNBaLdqxdkDVRp2wwZWYSubIahRA7jzTob/jx0LDBnCRyzwzju0vlev7pIQVaVjUu4yQPQIbSWY/bVqKzcTp4U2YPq0ulOWcaQSu44AaCSlVEdoJwCPOQgp5VwAvwPYYTymSylXu28HRGdK1kjQpAmzMNSr57r+qqs4pgZYFMSuzpY3/vtf4JRTKJhuuonZS9W+FC1amIFqH3xAW4M/qWc10cWRI67uIsXF5Sck+OILBiQ++iiz0gAUzHfc4eoC4k5BQdkkKv7zH3P9yy9zQvjJJzlLYmXIEMYOaCqOFtp+oqpD+rIeHDhA0RQNFm1/hXa0BN4BtA716VOWlAPr13M07eIZcuutTDh7wQXAa6850s6gqFuX2f+3bnUxEbRqxaUKiDx0iAFP0SC0Ay1ao7aLBaEd7xZtf9OySiklaL12/3xbAJ3ALFHpAE4VQpxo913RmJI1Ujz8sL2r4MUXm8Vq1TXuDwkJLDqSlEQL5SmnMH2be6xEr16mMPr8c075+1soR+M87j7Phw+XnzJv61bg5puBAQM4EFOMH8/sJMoFxI477zSfq3v+qFG8337/PeMCrFSpAkyY4PfP0ZSDFtp+0rw549h8RZJHQynzQF1HokloA0xpvGQJBy1//22O2suoWZPD708/jd5qkN4QwqO0lxJ8SgAqv/T27SPWKq8owexvQGQsCG3l/hXvFu1y0rLuEkI0AQBjaTeUGgFgnpSyQEpZAGAaGPSusdCtG7BuHWfhlLBWLF9uPn/oIc9aW97IyADee48FZevXpwizKzxyzjlmwOUPP7BE9759wf0OTeTIyXGdBdm3jxOdvigtZTXGkhLe+pTL0urVtGIrFxA7vvuO5xMA3H8/ff8B4KWXOGMyYoTr9ioezcnsUfGGFtp+4k8ubVXQpmnT8LfHG/Xq0SoSixZtgKVei4rYCRQUcGo2nmnWjJYM5Y++bh2X0WDRjkehvXkzr5G6dSPVoqhkCgCjaDOuAGBXE2ErgIFCiCpCiKpgIKSt60hlRwjmI162DLjxRvttnnwSqF2b1/vQoSxK89ZbwO+/2wfvnn8+p+2/+477Hj/enOmzctdddFUBmLbtxBNd3dA00cX27dQHpaXma3fXIzteegn44w9mGmndmut27wbOOou2m88+s88JkJ3tmkXE+l1JSZ6Dw27d2Ec6qWHiES20/cSfXNpKaKtcqk6QmOhfGWqFElFOZoqw0q8fl+PG0Xh96qnOtifcVK0K9OhhlrhVgjsaAlCUaPWnIipgCm0ns+7UrEm/fl9CO97dRvzgWQBDhBDrAQw2XkMI0UcI8b6xzSQAmQCWA1gKYKmU8gcnGhtLvPCC72v3lFNowRw/nj7Yp57K66xBA/rQvveeafxQKf/WraObwS23uFb0Ayiu3noLGGjkg1m5kq4Fq/WQKOrYsIGzFSrwfe1a/wTtsmW0RJ97rplp5tAhzmjs3MmQH7s+rbSU2x86RHHevDnPT4B52t1dXM85hy4oTlW1jme00PYTlRHDH6Ht9GgwNTUw15GqVZ0vv65o2pTBGgUFwBlnVI7cnQMGUGgXF7PzbdyY1i+nqV6dblD+Wsh272bn7XTlsCZNfLuOxLvbSHlIKXOllIOklO0MF5O9xvpFUsprjOclUsrrpZSdpJSdpZR3+t6rBuBA748/vL9/+unAwoXM5rNtG+tYvfoqp/1XrmRSoqZNmQf59dfpA15QQPeRxYsZ/OhOUhKDLtu04ett25jUaO7csPxETRAsW+Y6S7lwoX/ugUeOsPpj/fosIiMEBfRll7HY8BdfsAqkHa+9xrwBjz3GPnzXLtMYolJQKm6/nT7/TleHjlf0YfWT1FSO9Nyr+FnZvp3bOC2S/CnaoVCp/aIpFfWLL9JP+623nG5JZBgwgFaHJUuA6dPpbxctZGQEJrSdLrIDeBfapaVAZmZ0zBZo4pf0dMaY2DF6NN1FhOC1NXgw47vffpup1ZYupTAqKqJftntGkXvvtZ+tTEmhZbNuXeY8TkpitcoffwzPb9T4z5w5LF+uWLmSQYj+8OCD9PX/4AMz9uuee4Bvv+Wsr7fCRcuX81wZNozW7sJCZhez43//4+yJJnxooe0nQvAGrYLV7MjOpjXCadHqy6LnjvIZiza6d3c2qDSSDBjA5bhxHPiMHOlse6zEk9Deto0WomgINNXEN3XquBarsRpfTj0VmDLF8zNC0Ef2oYcYCLltG/DGGxTjiv37aUiZPJmDcysdOzIH9+HD7NNbt6YQGz8+lL9MEwi//GIaTpKS6LrWubN/n/39dxqdbriBvtgAUz2OG0c3ojvusP/ckSMc0NWtyzzYyoffLvvNhx96TwmoCR1aaAeAP0LbSf9sRdOm/vvVbt1qusVonKFZM94UJ0xgNUjVqUYDGRm84fvDrl3RIbTV+e8eYKYCTbXQ1kSCRo2Aj42yQPn5ru8NHw48/bTvdLEZGfTjnjGDVlAr555LwT18OMWSyoY1eDBT9v/7L12/+vSh0HrmGV3YJtJMmmSWR09PZz/qr9va/v3MMtK2relX/dNPnP04+2wz/7Ud999Pi/b48bR8q2w37lVKv/5aVxeNFFpoB0Dbtpzecw9IUSiLttM0bUofwIMHfW8npRba0YAQnOLt1w+4/HLnXY+sZGTwJu5uPbMjWizabdrQquc+2NRCWxNpLruMAZB2PPAArdv+FJvp3JnCzcpVV1FQX301r9MbbmAQ5NVXM7f20qW8BwweTPF1xx1mtgtNePngA5Z6ADg7u2pVYH3jLbew//rsM7qj/vsv/fi7d2d6Pm85t3/5hRlKbr7ZNQtO8+aueda//z66Zk7jHS20A6BtW/rO2Vn4pIwuoQ2U7z6Sm8uLTwtt5+nUiem73n3X6Za4kpHB5fbtvrc7coTZFKIhTaQKOlLCWrFuHW9aKpuKRhNuhKDF+YQT7N//4w8GD7tbvO1QKf8Uxx7L4N5Fi+gq8NFHFOSnn87gue+/Z0zC5s0saPPqq8All3j31dWEhhdeAK65hs8HD2a/XqeO/5+fOJEDpdGjeS9fvpyW8QYNaJBJTrb/XE4Oy6h37EhjoDX3ujUt8bffxn/a3GhDC+0AUEFUdu4j+/ZRbESD0PY3LZu6+LTQ1nijWTMuy/PTVu9Hw7mkLNYqVaJi3Tq+53QMhaZy0bIlMHs2H95cC+vUoQWyPFTKP4D5kXNyWNTrvfdoAHrySe7njDPoe3v++RTjCxbQTWDiRLqm5eWF6tdpFFJS3Cqf50suAaZN812MJi+P/83HHwNjxzJn+qhRfO+TT9j/duvG5AbbtjHvdfPmHFD17cvZkmHD+Jm0NBrX1qxhcK0dX3/tWaBGE3600A4AX0I7GnJoK5TY10JbU1GURbs8oa3OJSXMnSQjgzc3O4u2dhvROMUJJ/A6+sFLNvLu3YFnn/W9j+Rks7JfURFw8snmzGVaGt1RNm9m9cAaNeh6UFTE7x0/ni4Jf/zBz/lbiEpTPqWlTM2o/r877jArOEpJ/+jff2cw46230tKdkcGAxX79aIl+7jlmngIonK2zmyeeyCwiF1/MbDLHHMNMMyUlnG2cOLH8Nj78sHYXcYoqTjcglmjalDdwd0sZYKb9iwbR6q/riBbamvJQA8fyAiKj6VxKSOCg2HqdFhRQgFx2mWPN0mgAMJht715eW1a/WYAW0fvuo0jr04duUO7+uH36MLjxvvvo+3viicDMmWbRkqQk5l4ePRr4+29awb/5hu+9/jq3X7yY2Y6mT9fpLitKURFw4YV01QEoiLt3p/BeuZIW5v37ze1r16Z7x6BBdBns1IkxMDffTGH+88+0bF9/Pbd/7z3TFcWO9etdDQhjx7oO2NLTKeDdC9RoIocW2gGQkAB06MDOzZ21a7ns0CGybbKjbl0OCPyxaNeooS9AjXdq1mQQz8aNvrdTQltZwJ2mfXvX63TRIlqdVOVRjcZJ6tenu2FqqpkVwooaENaqRdHVq5f56NSJ7gnTp9M6nZlJa/nMmRRwCiG4/oQTaAi6/35mNpo9m+9v3MjrYcYM7lcTOIcPA0OGcECjGDeOAa4NGtDt4+KLTUHdsSOFr9V97fff+X83aMBgxvbtad1+7z0OpnyJ7KIi12Dbbt1cRfaFF/pn7daEFy20A6R7d3ZM7qxdy6m7aKiwKIR/Kf5UxhHts6rxRbt2vtNaArR4N2rE9ITRQLt2nKIvLqaVaN48ru/b19l2aTSKatVY2EZZrIWgS8fvv7tuJyXzIavMP9WrU1BZy24fOgScdBKFWo8ent/VqhVdTp57zjXF3N699PH+6iszS4amfKQEZs3i/2WlQwcGGg4fzkFMYiL/4yVLOLBZv57BqOoxYQIzxQCcaXjySbr7qFSMc+dyfd261BdpaTR8qOe33OIaqG718580iT76GufRQjtAundnkMKePa4FVdaujQ5rtsIfob1lS3RM9Wuim7Zt7QeXVqItTWS3brT2LFnCqfZ582gp0rM3mmgiIYEZR2rXprhS1s1PP+X7Bw+yqt+BAxRp//zDx6JFLFqj2LePy549gd9+855SsHlzWtBHjHC9pi+8kEaiOXNcreIak6Ii4M8/edw/+MDV7WfIEJY8T0vj//PXX8zysnhx+UYKxT//uOa67tKF31m1Ku/lS5cyhWphYfn7WraMgZOa6KBCwZBCiAuEECuFEKVCCK9FRYUQm4UQy4UQS4QQiyrynU6jSqkuXeq6PtqEdnq67wA2KdlmlQpNo/FGu3bs6H3lZY82oT1kCC2E06fzXJ8/HzjuOKdbpdF4kpzsej/59FPXe8nChRRb9erR73rcOAq+ffuAX3/13N+pp/Lcf+IJujQUFbm+X6sW08RddBFfq+ti3z66N5xxBq21usANs4JMnMgMImlp7Fdef91VZA8fzoHS6adzID9kCP2058/ngP/JJ5l9ZONGxk3t3cvARICfKSjgsZ49m59v25aGvOXLKdh//50iXFW2PXCAMxPe2LxZi+xoo6JZR1YAOA/ALD+2PUVK2UNK6VWQxwJ2Qnv/fo40o0lot27NC85bMYTdu3nBRlObNdGJGoxlZtq/rwofRUPGEUVaGv1Of/6Z1r+dO81S9xpNtNGtGzNI3HMPX6uYHytNmwJffGG+rlGDojo/n9dovXpmFUGAYu6EE2ipPuMM4PnnaWEtKWHA5Oefs8jNvHkMnlSl3n/+GRg4kAJ80iTvBdrilawsZgc57TT60I8aZWZ6sWPyZFqQ+/alAJ4xg2kXN21iEOoDD1BQt2pFt4+nngIef5y+25Mnc+CTmwuceSb3N3Uqv9cOIYBHH6WQtyMnx//qk5rIUSGhLaVcLaW06RLil9RUdngqDQ8QXYGQirZtKbKtieqtqNRn0dRmTXSihLZdth3ArBwZTUIb4M1t7lzelOrV441No4lWEhIo1NzTUloZPZqi/MABc11yMkVzQQGtqDk5LGYD0O96zBi6Cd5zD92oUlPpOvLOO8CDD1IIfvYZ/YC//NIsiLJgAT/fvj3wxhv+VYeNVdatowDu04f92M0309/dOhtgPeYAcNtttDbv38++ceJEHuPBg+1d1IqKWM1z3Dj6Vn/2GQc8R44A557L/+j7773PMh8+TKH90kue73XvzhlH7RoXnUQqj7YE8IsQYrEQ4jpfGwohrhNCLBJCLNqzZ0+EmhcY/fq5Tq0p0d25s2NN8kClbPJmhVSDA51XWFMevvLHA9F7Lo0eTWvR77/zxhlIdTaNxinataPrgBLL7ixfzoHjTz+Z6449lq4iX38NTJnCDCQnnUSLdI8ezMCTnU1Bfv75nJG9+WZmCfrtNxqPvvmGvsfLl9NnW5GbS2HYvDnwyCOcDY0HlLju3p0GpwcfpMXfip1luVcvHoNXXmEwZN265X/X4cM87h9/DDz2GP23ExKYCemqq+gi8vHH3iuIjhvHDFB2XH01Z+28va+JAqSUPh8AZoIuIu6P4ZZt/gDQx8c+0o1lQwBLAZxU3vdKKdG7d28ZjbzzjpSAlCtX8vX550vZrJmUpaXOtstKVhbb+Oab9u/ffbeU1apJWVwc2XZpYpPGjaW88kr79957j+faxo2RbZM/ZGdL+eKLUublRf67ASySfvRz8fSI1j47Fjl0iPcWmnTsHyNHSpmTw+2Li6U8+WQpa9WSct06KQ8elPKMM7jdiy967n/VKimffFLKnj099zt7tpQTJ0qZksL7xPDhUp59Nt+rXl3K66/nd8Qaa9ZI+cQTUnbrZn88k5KkHDRIyv/9T8rPPpOyRw/X908+WcoDBwL7zn37pDzxRCmF8LwfP/AA9/v00/afXbvW+39ft66U06ZFl+6IdcLVZ4dmJ+UIbbdtHwVwtz/bRmunvWULj9y4cVIWFfGEv/pqp1vlSkmJlDVqSHnnnfbvDxsmZZcukW2TJnYZOpQ3ZDv+8x+eayUlkW1TtKOFtqaiFBdLeccdvN8MGSJlcrK96PrmG26/bZuU9etLeeyxUhYWSnn0KMU4IOWjj3oXZRs3SvnCC677rF1bymuukbJFC74eMEDKKVO4LimJwnHECCn//jtihyMoVq+W8vHHaQyzO3YdOkh5221S/vSTlAUFvKc/9ZSUVatK2bChKcrPPVfKw4cD++4dO6Ts3p37mjDB9b0PPuB+r77a838pLqau8Cayp06tyBHReCNmhTaAWgBqW57PAXC6P/uN5k67c2cpTziBnQwg5VdfOd0iT7p0oSXCjnbtaC3RaPxh7FjeLI4c8XzvtNOk7NUr8m2KdrTQ1oSKl1/m9ZeYKGVqqr34GjlSyl27pJw0ia9HjKDwLiqScswYrrvrrvItoJ9/br9/9XjxRc4UPfAARb0S4d99Fz2D7dWrpXzkEe+/4bzzODO9aZPr51aulLJPH25zwQVSXnQRn195JY9jIGRmStmmDWcYpk93fW/GDCmrVOHgqbDQXF9S4nsW47LLtAU7nESl0AYwAkAWgKMAdgGYbqxvCmCq8by14S6yFMBKAA/4u/9o7rRfeolHLyODU2u5uU63yJNzz5XymGM81+/fT2vE449Hvk2a2OTrr3m+L1rk+V6zZlJeemnk2xTtaKGtCSXbtlEo16rlXYgBFMrPPcf7Us2adJU4eFDKW2/l+9deW77L4KJFFPQJCVLefLPpgmJ9vP8+7yWvviply5Zc166dlG+/TbeXSLNqFX+b3TFJT5fywQfpEmMVtoriYh6zpCT+7s8/l/Lii/nZu+8OXNwuXUp3uwYNpJw3z/W95culrFOHhrD9+7kuO5uWb1//659/BnVYNAEQlUI73I9o7rRLSujLVbWqlJMnO90ae/77X3YcR4+6rv/1V/7zP//sTLs0sUdmJs+Zd95xXX/ggPTpY1iZ0UJbEw5ycymeq1eXXkVZr16cbVXW0ZYtOVi+/36+vvhie8FpZc0aKZs3pyj880/6Gn/6qed3XXWVlD/8IOUnn0jZuzfXpaXRkKP8x8NBcbGUX34pZZMm9sdg6FC+v2dP+b/zuONkmaV7/HhT9D77bODtmj2bbh8ZGWYclyI7m8e0cWNa03/4wft/aPUL37Ej8HZoAkcL7Sjk0CHPqadoYuJEaWuFfOYZro9GK7wmOiktlbJePQZBWfnrL55L0TrYdBIttDXh5OBBKV95RfoUac8+K+Vvv0nZtStfn3KKlKNH8/mwYeX7HG/dKmXHjhT1U6aY69es8fyu2rUpVC+7zAywrFGDFvHMzIr/3txc+lGfd57333vnnVIuW+afBbq4mG4w1avTBebGG6U8/njup3VruuAEyg8/cH8dOjCWy0pBgTkQGTLE9/+mHvfdF7jLiiZ4tNDWBMzmzfyH33jDdf2IEZzi02gCYehQxiZYeeIJuiGF03IVq2ihrYkEhYW8Nn0JtkWLmPGiQQO6g6j1gwZJmZ/ve/979jC4MjGRVmtFaamU777LWV2A/UB6urnvatVc23DSSfQ1dxegdhQXUzA/9BAH+N5+13HH0YIcqGvH+vWMsQLo+qayizRpIuVbb5Vv7bfj4495jPr0kXL3btf3jhzx/f9Uq8ZZAPW6Rg0pf/kl8DZoKoYW2pqAKS1l1PTll7uua9qUVg2NJhBUXILVOnXyyd6zkVR2tNDWRBI1u+TtUbMms4vceisFoVp/7LF0C/FFXp6Up57K7V9+2fW9zZvN9047jVbnZ55hSjvr91gfxx7Lbdau5T727qXPd3l+yq1aMdtXdnZwx6ikhD7lNWq47rd+fab0O3gwuP2++KIsG7ioVKK5uVI+9pjv35OR4elz/847OuDRKbTQ1gTFsGGc+lMsW8Z//e23nWuTJjbZsIHnziuv8PXBg4wBuPtuZ9sVrWihrYk0mzdLecMNppXZ26NzZ891u3b53vfhw5wNVZbkr7823RpKSjhzWrMm/ZM/+ohice9eprW7/HJXi60/j4QEKW+/Xco5c0ITXJmZKeXAga7fUasWgyRVUGKglJbSvQNgnvGff2ZsVCC/0/qflPcfaMJLuPpswX1HJ3369JGLFi1yuhkxzVNPseJVdjbQpAnw8MNcl50NNGrkdOs0sUanTkDjxqy2+MMPwDnnANOmsdy5xhUhxGIpZR+n2xFJdJ8dXSxYwErGwdCyJSsmtm/PqqqqkuG777JypaJxY1YnrFsX2LQJeOst87377gOqVAH++ce1kqUvbr4ZuPRSoG9ffmdFkZLl5m+80VxXtSpw003A/fcDDRsGvs/iYmDFClbkLC6uWPs+/ZS/V+M84eqztdCOc9avZ0f55JPAAw+wTHyjRhRKGk2gPPccMHYs8PPPvInu3csS7NWqOd2y6EMLbU20sHw50K2b060w6dGDZd7r1AFmzwYmTrTf7uabWbr8xBMp2ANlyxZ+z4IF5rorr2Qp+RYt/NuHlMCGDcDCheZj3jygpCTw9ijOPptt6FOpeofoRwttTdAMGgRkZgKPPQaMGQO8+abr6F6j8ZejR4EuXYCtW4HCQuCzz4DRo51uVXSihbYm2hg/HrjqKs/1t98OdO/u+t7dd9ManplJg8369RSc2dnBfffSpd7FfnExMHcuMHUq8MUX7F/cGTGClvPBg8sf2EsJvPEGcOut5rrzzweeeIKzcr4+t327q6hetAjYv7/cn1cuQgAXXECDVzQNejQmWmhrgkZN8QPAgAHAH39w6kyjCYZlyzg93KYNcOedoZnejUe00NZEI7m5wBVX2LtyXHAB8PXX5uvjjgNefZUuEoqDBym4N2wwxXdmJgfhc+ea2514InDHHdzmkUeA2rVp5LnggvLbmJVF0f3118DMmfbb1K4NXHst3VuaNQMyMrjcvx9o1crcrn17ivfeve2PhVVUL1wI7NzJ9xITafXet4+P8qhdGzj+eM72uXPZZXRT6dix/P1onEMLbU2FmD0bmDCBF3t6utOt0WjiHy20NdHM8uXAuHHAxx+Xv+2YMcAzz9Afuzzy8oAPPgBeeYWuG23bAqedRnfFVatomb7wQhp9mjWjpdcXR4/y/rVoEfDRR3RV85dWrShylQhXy7p16Wt+/fXmth07Aj170qq9aBEHEP4wdCgt7D/84Lq+bl3g8ss5W9Cmjf9t1jiHFtoajUYTQ2ihrYkFcnMpOu+/v/xtMzIodvv2pQXXF8XFwLffUswvWEB/7Lw8122aNqXgVo+ePYGkJN/7PXKEg4Q332Rboo2bbqIFP5ggS42zaKGt0Wg0MYQW2ppYorgYmDyZlujZs/37TI8ewHnnmSK5QQPPbaSkS8m4ccB333HdMcfQLeXQIWDOHGDzZq6vVo1uKv378/0mTYBduyis1WPdOmY/8Ub16hTrCQl8HDxIq3g46dcPGDkSuO228gcKmuhFC22NRqOJIbTQ1sQqS5YAL70EfPJJcJ9v147BhyNHUoCrOI7MTPp8f/ABBfCppwJ33UV3jvfeYxq+wkLv+23dGrj4YgrtCROYTlClrR01ivtftcr1sXGjb2HuLyeeCJx0Eh8DBgDJyRXfpya60EJbo9FoYggttDWxTk4OLdxPPul7u9q1gfz88vdXuzbT9JUXXNi+PX23CwvpKpKXR2FuR69e3N/mzbSehwohgEcfBQYOpKtMjRqh27cmOglXn63zBWg0Go1Go/EgNZUp8QoLga++okXZDiWymzZl8OFZZ3nfzp8MHuvWMehx0yZgxw7vIhtgMZxNmwIX2f37A6ec4rruwgtpBZeSVvCHH6bQ1iJbUxG00NZoNBqNRuOVqlWZli8zk+nzVq5k+r0rr3TdLjublQ79rQIZKZ5+mpUcS0poIR8/HigoYCaUhg2Bxx8Hdu9m4RxfebY1mmDQQluj0WgqEUKIC4QQK4UQpUIIr9OkQojThRBrhRAbhBBjI9lGTfRSty4rDJ9xBvDhh6b1d9y44PYnBFC/PlPxde9esbZVqcJgxBo1gJo1zfUPP8wUhddey9LyV17JNn/wAVMQPvQQkJZWse/WaLwRRFFTjUaj0cQwKwCcB+AdbxsIIRIBvAFgCIAsAAuFEFOklKsi00RNLCEEi1fdeSdfFxYym8jUqcC0aay2WLUqhbB6uL9W604+mc8PHGABGW9Uq0bf6RNO4GPAAKBePddtcnJYLn3uXLZn0iRmM/n4Y2DIkPJzeGs0oUALbY1Go6lESClXA4DwrTL6AtggpdxobDsBwHAAWmhryiUpiYL55JOB//2vYvs6epQZRt57j0L6xBMprPv0Kb8Ue2oqcPbZfGg0ThHVQnvx4sU5QogtAX4sFUBOONoTJcTz79O/LXaJ598X7G9rEeqGRJB0ANssr7MA9LPbUAhxHYDrjJdHhRArwty2YIjW81O3KzBSf/opOtuFKD1e0O0KhA7h2GlUC20pZcBeU0KIRfGcUiuef5/+bbFLPP++WPxtQoiZAOwKZj8gpZwcyu+SUr4L4F3je6PyWOl2BYZuV2DodgVGNLcrHPuNaqGt0Wg0msCRUg6u4C62A2hmeZ1hrNNoNBpNAOisIxqNRqNxZyGAdkKIVkKIJACjAExxuE0ajUYTc8Sj0H7X6QaEmXj+ffq3xS7x/Pvi6rcJIUYIIbIA9AfwkxBiurG+qRBiKgBIKYsB3AJgOoDVAL6SUq70Y/fReqx0uwJDtyswdLsCo1K1K6pLsGs0Go1Go9FoNLFKPFq0NRqNRqPRaDQax9FCW6PRaDQajUajCQNxJbTjtWSwEKKZEOJ3IcQqo3Ty7U63KdQIIRKFEP8KIX50ui2hRghRTwgxSQixRgixWgjR3+k2hQohxH+Mc3KFEOJLIUR1p9tUEYQQHwohdltzQQshGgghZggh1hvL+k620Qnsjovb+0II8arR9y4TQvSyvHeFcezWCyGuCHG7fPb5QoiXhBBLjMc6IcR+y3sllvdCGujpR7vGCCH2WL7/Gst7Th6vO437zDIhxK9CiBaW98J2vPxsWzUhxETj/flCiJaW9+4z1q8VQpwW6rYZ31FuPyCE6CGEmGv0icuEEBdZ3vtICLHJcgx7RKpdxna2/59gwPN84/hNFAx+jki7hBCnWNq0RAhxRAhxrvFeuI7XBcb/UyqE8Jpi0Nv5GNTxklLGxQNAIoBMAK0BJAFYCqCz0+0K0W9rAqCX8bw2gHXx8tssv/FOAF8A+NHptoTht30M4BrjeRKAek63KUS/Kx3AJgA1jNdfARjjdLsq+JtOAtALwArLuv8BGGs8HwvgOafbGQ3Hxe39MwFMAyAAHAdgvrG+AYCNxrK+8bx+iNoUUJ8P4FYAH1peF4TpWJXbLgBjALxu81lHjxeAUwDUNJ7fCGBiuI9XAG27CcDbxvNRqm0AOhvbVwPQythPYhjaWG4/AKA9gHbG86YAdqj+HsBHAEY60S5f/5/Rb48ynr8N4MZItsuyfQMAey3nX7iOVyewMM0fAPoEej4Gc7ziyaJdVjJYSlkIQJUMjnmklDuklP8Yz/PBLADpzrYqdAghMgCcBeB9p9sSaoQQdUGR8gEASCkLpZT7HW1UaKkCoIYQogqAmgCyHW5PhZBSzgI7eyvDwcESjOW5kWxTNODluFgZDuATSeYBqCeEaALgNAAzpJR7pZT7AMwAcHqImhVon38xgC9D9N2hbJcVR4+XlPJ3KeUh4+U8MH96JPDnmFmvw0kABgkhhLF+gpTyqJRyE4ANxv5CTbn9gJRynZRyvfE8G8BuAAEX3gt1u7xhHL9TweMZ8OdD3K6RAKZZzr+wIKVcLaVcW85mtudjsMcrnoS2XcnguBGjCmO6rCeA+Q43JZS8DOAeAKUOtyMctAKwB8B4QdeY94UQtZxuVCiQUm4H8AKAraDl5oCU8hdnWxUWGkkpdxjPdwJo5GRjohRv/W84+2W/9224QLQC8JtldXUhxCIhxDw1XR3hdp1vuBdMEkKo4kBRcbwMrgZnKRThOl7+tq1sG8n0kwcApPj52VAQUD8ghOgLWkMzLaufMv7zl4QQ1SLcLrv/LwXAfuN4AqE9doH2m6PgORAOx/HyB2/nVFDHS1eGjCGEEMkAvgFwh5Qyz+n2hAIhxNkAdkspFwshTna4OeGgCjjlfquUcr4Q4hVwGu0hZ5tVcQyfu+GggNkP4GshxKVSys8cbVgYkVJKIYTOiRp7jAIwSUpZYlnXQkq5XQjRGsBvQojlUspML58PNT8A+FJKeVQIcT1oGTs1Qt9dLkKISwH0ATDQstrJ4xURhBAzATS2eesB64vy+gFjNudTAFdIKZUB6T5QcCaB+ZrvBfB4BNvl8f+Bg5WgCfHx6grm7VeE5XhJKSf7s49QEk9CO65LBgshqoIi+3Mp5bdOtyeEHA/gHCHEmQCqA6gjhPhMSnmpw+0KFVkAsqSUagZiEii044HBADZJKfcAgBDiWwADAMSb0N4lhGgipdxh3BB2O92gKMRb/7sdwMlu6/8I83faMQrAzdYVxowMpJQbhRB/gDOFoRCO5bZLSplrefk+6M+qPnuy22f/CEGb/GoXAAghBoNCaaCU8qhaH8bj5W/b1DZZhqtaXQC5fn7WL6SUg729J4Twqx8QQtQB8BMo6uZZ9q2su0eFEOMB3B3Jdnn5/74B3byqGFbagI5dKNplcCGA76SURZZ9h+V4+Ym3cyoXQRyveHIdiduSwYZf0AcAVkspX3S6PaFESnmflDJDStkS/M9+iyORDSnlTgDbhBAdjFWDAKxysEmhZCuA44QQNY1zdBAYPxBvTAGgsj9cASDiFpEYYAqAywU5DnQj2gFaqIYKIeobMyBD4Wq1qgh+9flCiI5gYOFcy7r6aipaCJEKDvhDdV2W2y5DeCjOgXndOHq8hBA9AbwD4Bwp5W7L+nAeL7/aBtfrcCR4r5DG+lGCWUlaAWgHYEEI22b3/bb9gNH278B4hUlu7zUxlgL067XN4BOmdtn+f8bx+x08nl4/H652WfCInwjj8fIH2/Mx6ONVXrRkLD3AyPd14Cj7AafbE8LfdQIACWAZgCXG40yn2xWG33ky4jPrSA8Ai4z/73uEKItANDwAPAZgDdgJfgqgmtNtquDv+RL0Ny8CZyOuBv3yfgWwHsBMAA2cbmeUHJcbANxgvC8AvGH0vcthieYHcBUYoLYBwJUhbpdHnw9OL59j2eZRAM+6fW6A0c6lxvLqSLYLwDMAVhrf/zuAjtFwvIzze5flPjMlEsfLz7ZVB/C1cVwWAGht+ewDxufWAjgjTNeAbT8Auti8bzy/1LhGllgePYz3fjOO3Qpw1i85gu3y+v+BmTUWGMf1a4SoD/enXcbrlqBVOMHt8+E6XiPAPuyoca5PN9Y3BTDV1/kY7PHSJdg1Go1Go9FoNJowEE+uIxqNRqPRaDQaTdSghbZGo9FoNBqNRhMGtNDWaDQajUaj0WjCgBbaGo1Go9FoNBpNGNBCW6PRaDQajUajCQNaaGs0Go1Go9FoNGFAC22NRqPRaDQajSYM/B91SwhFi14rLAAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# 把角度作为时间的函数画出来\n", "\n", "fig, axes = plt.subplots(1,2, figsize=(12,4))\n", "axes[0].plot(t, x[:, 0], 'r', label=\"theta1\")\n", "axes[0].plot(t, x[:, 1], 'b', label=\"theta2\")\n", "\n", "\n", "x1 = + L * sin(x[:, 0])\n", "y1 = - L * cos(x[:, 0])\n", "\n", "x2 = x1 + L * sin(x[:, 1])\n", "y2 = y1 - L * cos(x[:, 1])\n", " \n", "axes[1].plot(x1, y1, 'r', label=\"pendulum1\")\n", "axes[1].plot(x2, y2, 'b', label=\"pendulum2\")\n", "axes[1].set_ylim([-1, 0])\n", "axes[1].set_xlim([1, -1]);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "简单的双摆运动模拟动画,我们将在第四节课看到如何制作更好的动画" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [], "source": [ "from IPython.display import display, clear_output\n", "import time" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(4,4))\n", "\n", "for t_idx, tt in enumerate(t[:200]):\n", "\n", " x1 = + L * sin(x[t_idx, 0])\n", " y1 = - L * cos(x[t_idx, 0])\n", "\n", " x2 = x1 + L * sin(x[t_idx, 1])\n", " y2 = y1 - L * cos(x[t_idx, 1])\n", " \n", " ax.cla() \n", " ax.plot([0, x1], [0, y1], 'r.-')\n", " ax.plot([x1, x2], [y1, y2], 'b.-')\n", " ax.set_ylim([-1.5, 0.5])\n", " ax.set_xlim([1, -1])\n", "\n", " clear_output() \n", " display(fig)\n", "\n", " time.sleep(0.1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 例子:阻尼谐振子" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "常微分方程在计算物理中是非常重要的,因此我们将会再看一个例子:阻尼谐振子。这个问题在wiki网页被有着很好的介绍:http://en.wikipedia.org/wiki/Damping\n", "\n", "阻尼谐振子的运动方程是:\n", "\n", "$\\displaystyle \\frac{\\mathrm{d}^2x}{\\mathrm{d}t^2} + 2\\zeta\\omega_0\\frac{\\mathrm{d}x}{\\mathrm{d}t} + \\omega^2_0 x = 0$\n", "\n", "在这里$x$是振荡器的位置, $\\omega_0$是频率,而且$\\zeta$是阻尼系数。为了以我们介绍的标准形式写这个二阶常微分方程$p = \\frac{\\mathrm{d}x}{\\mathrm{d}t}$:\n", "\n", "$\\displaystyle \\frac{\\mathrm{d}p}{\\mathrm{d}t} = - 2\\zeta\\omega_0 p - \\omega^2_0 x$\n", "\n", "$\\displaystyle \\frac{\\mathrm{d}x}{\\mathrm{d}t} = p$\n", "\n", "在这个例子的应用中我们将为ODE的RHS方程添加额外的参数,而不是像我们在之前的例子中使用的全局变量。作为额外参数到RHS的结果,我们需要传递一个关键字参数`args`到`odeint`函数:" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [], "source": [ "def dy(y, t, zeta, w0):\n", " \"\"\"\n", " 阻尼谐振子方程的右侧\n", " \"\"\"\n", " x, p = y[0], y[1]\n", " \n", " dx = p\n", " dp = -2 * zeta * w0 * p - w0**2 * x\n", "\n", " return [dx, dp]" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [], "source": [ "# 初始状态: \n", "y0 = [1.0, 0.0]" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [], "source": [ "# 为了求解常微分方程的时间坐标\n", "t = np.linspace(0, 10, 1000)\n", "w0 = 2*pi*1.0" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [], "source": [ "# 求解阻尼比的三个不同值的ODE问题\n", "\n", "y1 = odeint(dy, y0, t, args=(0.0, w0)) # 零阻尼\n", "y2 = odeint(dy, y0, t, args=(0.2, w0)) # 欠阻尼\n", "y3 = odeint(dy, y0, t, args=(1.0, w0)) # 临界阻尼\n", "y4 = odeint(dy, y0, t, args=(5.0, w0)) # 过阻尼" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nduUAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots()\n", "ax.plot(t, y1[:,0], 'k', label=\"undamped\", linewidth=0.25)\n", "ax.plot(t, y2[:,0], 'r', label=\"under damped\")\n", "ax.plot(t, y3[:,0], 'b', label=r\"critical damping\")\n", "ax.plot(t, y4[:,0], 'g', label=\"over damped\")\n", "ax.legend();" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 5. 傅立叶转换" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "傅里叶变换是计算物理中的通用工具之一,它在不同的环境中反复出现。SciPy提供了从NetLib访问经典库[FFTPACK](http://www.netlib.org/fftpack/)的函数,NetLib是用FORTRAN编写的高效且经过良好测试的FFT库。SciPy的API有一些额外的便利函数,但是总的来说API是接近于原来的FORTRAN函数库的。\n", "\n", "为了在python程序中使用`fftpack`模块,我们需要这样包含它:" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [], "source": [ "from numpy.fft import fftfreq\n", "from scipy.fftpack import *" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "为了演示如何用SciPy进行快速傅立叶变换,我们先看以前章节中阻尼谐振子的傅立叶变换结果:" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [], "source": [ "N = len(t)\n", "dt = t[1]-t[0]\n", "\n", "# 计算快速傅立叶变换\n", "# y2是以前章节中欠阻尼谐阵子中的解\n", "F = fft(y2[:,0]) \n", "\n", "# 计算F中组成的频率\n", "w = fftfreq(N, dt)" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(9,3))\n", "ax.plot(w, abs(F));" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "因为信号是在真实的,所以频谱是对称的。我们因此仅仅需要正频率。为了提取`w`和`F`的部分,我们可以用一些我们在第二节课看到的NumPy索引技巧。" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [], "source": [ "indices = where(w > 0) # 仅仅选取对应正频率的元素索引\n", "w_pos = w[indices]\n", "F_pos = F[indices]" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(9,3))\n", "ax.plot(w_pos, abs(F_pos))\n", "ax.set_xlim(0, 5);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "和预期的一样,我们现在在频谱图上看到峰值中心在1左右,这也是我们在阻尼谐振子例子中的频率。" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 6. 线性代数" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "线性代数模块包含了许多矩阵相关的函数,包括线性函数求解,特征值,矩阵方程(例如矩阵求幂)和许多不同的分解(SVD,LU,cholesky)等。\n", "\n", "详细的教程可以在这里找到:http://docs.scipy.org/doc/scipy/reference/linalg.html\n", "\n", "在这里我们将会看到如何去用这些函数:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 6.1 线性代数系统" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "矩阵形式的线性代数系统\n", "\n", "$A x = b$\n", "\n", "在这里$A$是一个矩阵而$x,b$是向量,可以以这样的方式来解决:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from scipy.linalg import *\n", "import numpy as np" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "A = np.array([[1,2], [4,5]])\n", "b = np.array([1,2])" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([-0.33333333, 0.66666667])" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = solve(A, b)\n", "\n", "x" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0., 0.])" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 检查\n", "np.dot(A, x) - b" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "我们也可以这样来做\n", "\n", "$A X = B$\n", "\n", "在这里$A, B, X$是矩阵:" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [], "source": [ "A = rand(3,3)\n", "B = rand(3,3)" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [], "source": [ "X = solve(A, B)" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 1.19168749, 1.34543171, 0.38437594],\n", " [-0.88153715, -3.22735597, 0.66370273],\n", " [ 0.10044006, 1.0465058 , 0.39801748]])" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2.0014830212433605e-16" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 检查\n", "norm(dot(A, X) - B)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 6.2 特征值和特征向量" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "矩阵$A$的特征值问题:\n", "\n", "$\\displaystyle A v_n = \\lambda_n v_n$\n", "\n", "在这里$v_n$是第$n$个特征向量而$\\lambda_n$是第$n$个特征值。\n", "\n", "为了计算矩阵的特征值,用`eigvals`。而对于计算特征值和特征向量,用函数`eig`:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "evals = eigvals(A)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([-0.46410162+0.j, 6.46410162+0.j])" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "evals" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "evals, evecs = eig(A)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([-0.46410162+0.j, 6.46410162+0.j])" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "evals" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[-0.80689822, -0.34372377],\n", " [ 0.59069049, -0.9390708 ]])" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "evecs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "特征向量对应着第$n$个特征值(以`evals[n]`的形式存储)是`evecs`的第$n$列,例如`evecs[:,n]`。为了验证这个,我们一起尝试去用特征向量乘以矩阵A并与特征向量和特征值的乘积的对比:" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "3.243515426387745e-16" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "n = 1\n", "\n", "norm(dot(A, evecs[:,n]) - evals[n] * evecs[:,n])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "也有一些更专业的特征求解器,例如用于Hermitian矩阵的`eigh`。 " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 6.3 矩阵操作" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[-1.66666667, 0.66666667],\n", " [ 1.33333333, -0.33333333]])" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 矩阵求逆\n", "inv(A)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "-3.0" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 行列式\n", "det(A)" ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(1.3060382297688262, 1.591998214728641)" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 不同阶的范数\n", "norm(A, ord=2), norm(A, ord=Inf)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 6.4 稀疏矩阵" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "如果问题可以用矩阵形式描述,其中矩阵或向量大多包含0,那么稀疏矩阵在处理大型系统的数值模拟中通常是有用的。Scipy对稀疏矩阵有很好的支持,可以进行基本的线性代数运算(比如方程求解、特征值计算等)。\n", "\n", "有许多可能的策略去有效地存储稀疏矩阵。最常见的是所谓的坐标形式(COO)、列表的列表形式(LIL)和压缩稀疏列CSC(和行,CSR)。每种格式都有一些优点和缺点。大多数计算算法(方程求解、矩阵-矩阵乘法等)可以使用CSR或CSC格式有效地实现,但它们不那么直观,也不那么容易初始化。因此,稀疏矩阵通常最初以COO或LIL格式创建(在这种格式中,我们可以有效地向稀疏矩阵数据添加元素),然后在实际计算中使用之前转换为CSC或CSR。\n", "\n", "更多的关于稀疏格式的信息可以参考http://en.wikipedia.org/wiki/Sparse_matrix\n", "\n", "当我们创造一个稀疏矩阵时我们需要去选择他们应该以何种格式来存储。例如:" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [], "source": [ "from scipy.sparse import *" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[1, 0, 0, 0],\n", " [0, 3, 0, 0],\n", " [0, 1, 1, 0],\n", " [1, 0, 0, 1]])" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 稠密矩阵\n", "M = np.array([[1,0,0,0], [0,3,0,0], [0,1,1,0], [1,0,0,1]]); M" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "<4x4 sparse matrix of type ''\n", "\twith 6 stored elements in Compressed Sparse Row format>" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 从稠密转向稀疏\n", "A = csr_matrix(M); A" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "matrix([[1, 0, 0, 0],\n", " [0, 3, 0, 0],\n", " [0, 1, 1, 0],\n", " [1, 0, 0, 1]], dtype=int64)" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 从稀疏转向稠密\n", "A.todense()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "创建稀疏矩阵更有效的方法:创建一个空的矩阵并用矩阵索引填充(避免创建一个潜在的大型稠密矩阵)" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "<4x4 sparse matrix of type ''\n", "\twith 6 stored elements in List of Lists format>" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A = lil_matrix((4,4)) # 空的4×4稀疏矩阵\n", "A[0,0] = 1\n", "A[1,1] = 3\n", "A[2,2] = A[2,1] = 1\n", "A[3,3] = A[3,0] = 1\n", "A" ] }, { "cell_type": "code", "execution_count": 44, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "matrix([[1., 0., 0., 0.],\n", " [0., 3., 0., 0.],\n", " [0., 1., 1., 0.],\n", " [1., 0., 0., 1.]])" ] }, "execution_count": 44, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A.todense()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "在不同的稀疏矩阵格式中转换:" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "<4x4 sparse matrix of type ''\n", "\twith 6 stored elements in List of Lists format>" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "<4x4 sparse matrix of type ''\n", "\twith 6 stored elements in Compressed Sparse Row format>" ] }, "execution_count": 46, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A = csr_matrix(A); A" ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "<4x4 sparse matrix of type ''\n", "\twith 6 stored elements in Compressed Sparse Column format>" ] }, "execution_count": 47, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A = csc_matrix(A); A" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "我们可以像计算稠密矩阵那样计算稀疏矩阵:" ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "matrix([[1., 0., 0., 0.],\n", " [0., 3., 0., 0.],\n", " [0., 1., 1., 0.],\n", " [1., 0., 0., 1.]])" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A.todense()" ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "matrix([[1., 0., 0., 0.],\n", " [0., 9., 0., 0.],\n", " [0., 4., 1., 0.],\n", " [2., 0., 0., 1.]])" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "(A * A).todense()" ] }, { "cell_type": "code", "execution_count": 61, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "matrix([[ 1., 0., 0., 0.],\n", " [ 0., 3., 0., 0.],\n", " [ 0., 1., 1., 0.],\n", " [ 1., 0., 0., 1.]])" ] }, "execution_count": 61, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A.todense()" ] }, { "cell_type": "code", "execution_count": 62, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "matrix([[ 1., 0., 0., 0.],\n", " [ 0., 9., 0., 0.],\n", " [ 0., 4., 1., 0.],\n", " [ 2., 0., 0., 1.]])" ] }, "execution_count": 62, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A.dot(A).todense()" ] }, { "cell_type": "code", "execution_count": 63, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[1],\n", " [2],\n", " [3],\n", " [4]])" ] }, "execution_count": 63, "metadata": {}, "output_type": "execute_result" } ], "source": [ "v = array([1,2,3,4])[:,newaxis]; v" ] }, { "cell_type": "code", "execution_count": 64, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 1.],\n", " [ 6.],\n", " [ 5.],\n", " [ 5.]])" ] }, "execution_count": 64, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 稀疏矩阵-稠密向量乘法\n", "A * v" ] }, { "cell_type": "code", "execution_count": 65, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "matrix([[ 1.],\n", " [ 6.],\n", " [ 5.],\n", " [ 5.]])" ] }, "execution_count": 65, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# 和稠密矩阵一样的结果-稠密向量乘法\n", "A.todense() * v" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 7. 优化" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "优化(找出方程的最大值或最小值)是数学中的一块大的领域,而复杂函数或多变量函数的最优化是相当复杂的。在这里我们将会看一些非常简单的例子。对于有关利用SciPy实现最优化的更详细的内容参考:http://scipy-lectures.github.com/advanced/mathematical_optimization/index.html\n", "\n", "为了在SciPy中是有最优化模块我们首先需要包含`optimize`模块:" ] }, { "cell_type": "code", "execution_count": 50, "metadata": {}, "outputs": [], "source": [ "from scipy import optimize" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 7.1 找到最小值" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "我们先看如何找到简单的单变量方程的最小值。" ] }, { "cell_type": "code", "execution_count": 51, "metadata": {}, "outputs": [], "source": [ "def f(x):\n", " return 4*x**3 + (x-2)**2 + x**4" ] }, { "cell_type": "code", "execution_count": 52, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "fig, ax = plt.subplots()\n", "x = np.linspace(-5, 3, 100)\n", "ax.plot(x, f(x));" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "我们可以用`fmin_bfgs`函数找到方程的最小值:" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Optimization terminated successfully.\n", " Current function value: -3.506641\n", " Iterations: 5\n", " Function evaluations: 24\n", " Gradient evaluations: 8\n" ] }, { "data": { "text/plain": [ "array([-2.67298151])" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x_min = optimize.fmin_bfgs(f, -2)\n", "x_min " ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Optimization terminated successfully.\n", " Current function value: 2.804988\n", " Iterations: 3\n", " Function evaluations: 15\n", " Gradient evaluations: 5\n" ] }, { "data": { "text/plain": [ "array([0.46961745])" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "optimize.fmin_bfgs(f, 0.5) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "我们也可以用`brent`或`fminbound`函数。他们有一点句法上的不同而且用了不同的算法。" ] }, { "cell_type": "code", "execution_count": 71, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.46961743402759754" ] }, "execution_count": 71, "metadata": {}, "output_type": "execute_result" } ], "source": [ "optimize.brent(f)" ] }, { "cell_type": "code", "execution_count": 72, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "-2.6729822917513886" ] }, "execution_count": 72, "metadata": {}, "output_type": "execute_result" } ], "source": [ "optimize.fminbound(f, -4, 2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 7.2 找到一个方程的解" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "为了找到一个$f(x) = 0$形式的方程的跟,我们可以用`fsolve`方程。它需要一个初始假设:" ] }, { "cell_type": "code", "execution_count": 53, "metadata": {}, "outputs": [], "source": [ "omega_c = 3.0\n", "def f(omega):\n", " # 一个先验证方程:一个low-Q SQUID的终止微波共振器的共振频率\n", " return np.tan(2*np.pi*omega) - omega_c/omega" ] }, { "cell_type": "code", "execution_count": 54, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/home/bushuhui/virtualenv/dl/lib/python3.6/site-packages/ipykernel_launcher.py:4: RuntimeWarning: divide by zero encountered in true_divide\n", " after removing the cwd from sys.path.\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(10,4))\n", "x = np.linspace(0, 3, 1000)\n", "y = f(x)\n", "mask = np.where(abs(y) > 50)\n", "x[mask] = y[mask] = np.NaN # 当函数翻转符号时去掉竖线\n", "ax.plot(x, y)\n", "ax.plot([0, 3], [0, 0], 'k')\n", "ax.set_ylim(-5,5);" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0.23743014])" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "optimize.fsolve(f, 0.1)" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([0.71286972])" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "optimize.fsolve(f, 0.6)" ] }, { "cell_type": "code", "execution_count": 77, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 1.18990285])" ] }, "execution_count": 77, "metadata": {}, "output_type": "execute_result" } ], "source": [ "optimize.fsolve(f, 1.1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 8. 插值" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "插值在scipy中是简单而方便的:当给定描述X和Y数据的数组时,`interp1d`函数返回的对象就像函数一样,可以调用任意的X值(在X覆盖的区域内),而且他返回的相应的经过插值得到的y。" ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [], "source": [ "#FIXME: use as\n", "from scipy.interpolate import *" ] }, { "cell_type": "code", "execution_count": 79, "metadata": {}, "outputs": [], "source": [ "def f(x):\n", " return sin(x)" ] }, { "cell_type": "code", "execution_count": 80, "metadata": {}, "outputs": [], "source": [ "n = arange(0, 10) \n", "x = linspace(0, 9, 100)\n", "\n", "y_meas = f(n) + 0.1 * randn(len(n)) # 带噪声模拟测量\n", "y_real = f(x)\n", "\n", "linear_interpolation = interp1d(n, y_meas)\n", "y_interp1 = linear_interpolation(x)\n", "\n", "cubic_interpolation = interp1d(n, y_meas, kind='cubic')\n", "y_interp2 = cubic_interpolation(x)" ] }, { "cell_type": "code", "execution_count": 81, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig, ax = plt.subplots(figsize=(10,4))\n", "ax.plot(n, y_meas, 'bs', label='noisy data')\n", "ax.plot(x, y_real, 'k', lw=2, label='true function')\n", "ax.plot(x, y_interp1, 'r', label='linear interp')\n", "ax.plot(x, y_interp2, 'g', label='cubic interp')\n", "ax.legend(loc=3);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 9. 统计" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`scipy.stats`模块包含了许多统计分布,统计函数和测试。对于它完整特征的文档描述可以参考:http://docs.scipy.org/doc/scipy/reference/stats.html.\n", "\n", "也有一个对于统计建模同样非常有用的python包叫做statsmodels。参考http://statsmodels.sourceforge.net" ] }, { "cell_type": "code", "execution_count": 82, "metadata": {}, "outputs": [], "source": [ "from scipy import stats" ] }, { "cell_type": "code", "execution_count": 83, "metadata": {}, "outputs": [], "source": [ "# 创建一个(离散的)具有泊松分布的随机变量\n", "\n", "X = stats.poisson(3.5) # n=3.5光子时相干态的光子分布" ] }, { "cell_type": "code", "execution_count": 84, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "n = arange(0,15)\n", "\n", "fig, axes = plt.subplots(3,1, sharex=True)\n", "\n", "# 画出概率密度函数(PMF)\n", "axes[0].step(n, X.pmf(n))\n", "\n", "# 画出累积分布函数(CDF)\n", "axes[1].step(n, X.cdf(n))\n", "\n", "# 绘制1000个随机变量X的随机实现的直方图\n", "axes[2].hist(X.rvs(size=1000));" ] }, { "cell_type": "code", "execution_count": 85, "metadata": {}, "outputs": [], "source": [ "# 创建一个(连续的)正态分布的随机变量\n", "Y = stats.norm()" ] }, { "cell_type": "code", "execution_count": 86, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x = linspace(-5,5,100)\n", "\n", "fig, axes = plt.subplots(3,1, sharex=True)\n", "\n", "# 画出概率密度函数 (PDF)\n", "axes[0].plot(x, Y.pdf(x))\n", "\n", "# 画出累积分布函数(CDF)\n", "axes[1].plot(x, Y.cdf(x));\n", "\n", "# 绘制随机变量Y的1000个随机实现的直方图\n", "axes[2].hist(Y.rvs(size=1000), bins=50);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "统计:" ] }, { "cell_type": "code", "execution_count": 87, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(3.5, 1.8708286933869707, 3.5)" ] }, "execution_count": 87, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X.mean(), X.std(), X.var() # 泊松分布" ] }, { "cell_type": "code", "execution_count": 88, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(0.0, 1.0, 1.0)" ] }, "execution_count": 88, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Y.mean(), Y.std(), Y.var() # 正态分布" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 9.1 统计测试" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "测试是否两组独立的随机变量来自同样的分布:" ] }, { "cell_type": "code", "execution_count": 89, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "t-statistic = -0.901953297251\n", "p-value = 0.367190391714\n" ] } ], "source": [ "t_statistic, p_value = stats.ttest_ind(X.rvs(size=1000), X.rvs(size=1000))\n", "\n", "print \"t-statistic =\", t_statistic\n", "print \"p-value =\", p_value" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "因为p值非常的大所以我们不能否定两组数据具有*不同的*均值假设。" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "检验单个样本数据的均值是否为0.1(真实均值为0.0):" ] }, { "cell_type": "code", "execution_count": 90, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Ttest_1sampResult(statistic=-3.1644288210071765, pvalue=0.0016008455559249511)" ] }, "execution_count": 90, "metadata": {}, "output_type": "execute_result" } ], "source": [ "stats.ttest_1samp(Y.rvs(size=1000), 0.1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "低P值意味着我们可以拒绝Y均值是0.1的假设。" ] }, { "cell_type": "code", "execution_count": 91, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.0" ] }, "execution_count": 91, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Y.mean()" ] }, { "cell_type": "code", "execution_count": 92, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Ttest_1sampResult(statistic=2.2098772438652992, pvalue=0.027339807364469011)" ] }, "execution_count": 92, "metadata": {}, "output_type": "execute_result" } ], "source": [ "stats.ttest_1samp(Y.rvs(size=1000), Y.mean())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 进一步的阅读" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* http://www.scipy.org - SciPy项目官方网站.\n", "* http://docs.scipy.org/doc/scipy/reference/tutorial/index.html - 关于如何开始使用SciPy的教程. \n", "* https://github.com/scipy/scipy/ - SciPy源码. " ] } ], "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.6.9" } }, "nbformat": 4, "nbformat_minor": 1 }