{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Ordinary differential equations\n",
    "\n",
    "Documentation at https://docs.scipy.org/doc/scipy/reference/generated/scipy.integrate.odeint.html"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Exercise. Solve ODE with Euler, midpoint and 4th order Runge-Kutta methods.\n",
    "\n",
    "1) Implement Euler, midpoint and the 4th order RK methods. \n",
    "\n",
    "2) Use them to solve the equation $\\dot{x} = - x^3 + sin(t)$\n",
    "\n",
    "3) Plot and compare the solutions"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import scipy as sp\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "def rk1(f,specs):\n",
    "    # Solve ODE with Euler method\n",
    "    h = (specs['t1'] - specs['t0'])/specs['N']\n",
    "    x = specs['x0']\n",
    "    xt = [x]\n",
    "    ts = np.arange(specs['t0'],specs['t1'],h)\n",
    "    for i in range(len(ts)):\n",
    "        t = ts[i]\n",
    "        x += h*f(x,t)\n",
    "        xt.append(x)\n",
    "        \n",
    "    return ts, xt[:-1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "def rk2(f,specs):\n",
    "    # Solve ODE with midpoint method\n",
    "    h = (specs['t1'] - specs['t0'])/specs['N']\n",
    "    x = specs['x0']\n",
    "    xt = [x]\n",
    "    ts = np.arange(specs['t0'],specs['t1'],h)\n",
    "    for t in ts:\n",
    "        k1 = h*f(x,t)\n",
    "        k2 = h*f(x+0.5*k1,t+0.5*h)\n",
    "        x += k2\n",
    "        xt.append(x)\n",
    "    \n",
    "    return ts, xt[:-1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "def rk4(f,specs):\n",
    "     # Solve ODE with 4th order Runge Kutta method\n",
    "    h = (specs['t1'] - specs['t0'])/specs['N']\n",
    "    x = specs['x0']\n",
    "    xt = []\n",
    "    xt.append(x)\n",
    "    ts = np.arange(specs['t0'],specs['t1'],h)\n",
    "    for t in ts:\n",
    "        k1 = h*f(x,t)\n",
    "        k2 = h*f(x+0.5*k1,t+0.5*h)\n",
    "        k3 = h*f(x+0.5*k2,t+0.5*h)\n",
    "        k4 = h*f(x + k3, t + h)\n",
    "        x += (1./6.)*(k1 + 2.*k2 + 2.*k3 + k4)\n",
    "        xt.append(x)\n",
    "    \n",
    "    return ts, xt[:-1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "dict_items([('x0', 0.0), ('t0', 0.0), ('t1', 100.0), ('N', 10000)])\n",
      "dict_keys(['x0', 't0', 't1', 'N'])\n",
      "dict_values([0.0, 0.0, 100.0, 10000])\n",
      "0.0\n"
     ]
    }
   ],
   "source": [
    "specs = {'x0':0., 't0':0., 't1':100., 'N': 10000}\n",
    "print(specs.items())\n",
    "print(specs.keys())\n",
    "print(specs.values())\n",
    "print(specs['t0'])\n",
    "\n",
    "def f(x,t): return -x**3 + np.sin(t)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "t1, xt1 = rk1(f,specs)\n",
    "t2, xt2 = rk2(f,specs)\n",
    "t3, xt3 = rk4(f,specs)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(t1,xt1,label='Euler')\n",
    "plt.plot(t2,xt2,label='Midpoint')\n",
    "plt.plot(t3,xt3,label='RK4')\n",
    "plt.xlabel('t',size=14)\n",
    "plt.ylabel('$y(t)$', size = 14)\n",
    "#plt.xlim(0,10)\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Exercise. Systems.\n",
    "\n",
    "1) Modify the previous codes to solve systems of equations. \n",
    "\n",
    "2) Use the new codes to solve the system\n",
    "\n",
    "   ${dx/dt} = xy - x$\n",
    "\n",
    "   $dy/dt = y - xy + sin^2(\\omega t)$, \n",
    "   \n",
    "   with $\\omega = 1$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import scipy as sp\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "def rk1(f,specs):\n",
    "    # Solve ODE with Euler method\n",
    "    h = (specs['t1'] - specs['t0'])/specs['N']\n",
    "    x = np.array(specs['x0'],dtype='float')\n",
    "    Nequations = x.size\n",
    "    xt = np.zeros((specs['N']+1,Nequations),dtype='float')\n",
    "    xt[0,:] = x\n",
    "    ts = np.arange(specs['t0'],specs['t1'],h)\n",
    "    for i in range(len(ts)):\n",
    "        t = ts[i]\n",
    "        x += h*np.array(f(x,t))\n",
    "        xt[i+1,:] = x\n",
    "        \n",
    "    return ts, xt[:-1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "def rk2(f,specs):\n",
    "    # Solve ODE with midpoint method\n",
    "    h = (specs['t1'] - specs['t0'])/specs['N']\n",
    "    x = np.array(specs['x0'],dtype='float')\n",
    "    Nequations = x.size\n",
    "    xt = np.zeros((specs['N']+1,Nequations),dtype='float')\n",
    "    xt[0,:] = x\n",
    "    ts = np.arange(specs['t0'],specs['t1'],h)\n",
    "    for i in range(len(ts)):\n",
    "        t = ts[i]\n",
    "        k1 = h*np.array(f(x,t))\n",
    "        k2 = h*np.array(f(x+0.5*k1,t+0.5*h))\n",
    "        x += k2\n",
    "        xt[i+1,:] = x\n",
    "        \n",
    "    return ts, xt[:-1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "\n",
    "def rk4(f,specs):\n",
    "    # Solve ODE with 4th order Runge-Kutta\n",
    "    h = (specs['t1'] - specs['t0'])/specs['N']\n",
    "    x = np.array(specs['x0'],dtype='float')\n",
    "    Nequations = x.size\n",
    "    xt = np.zeros((specs['N']+1,Nequations),dtype='float')\n",
    "    xt[0,:] = x\n",
    "    ts = np.arange(specs['t0'],specs['t1'],h)\n",
    "    for i in range(len(ts)):\n",
    "        t = ts[i]\n",
    "        k1 = h*np.array(f(x,t))\n",
    "        k2 = h*np.array(f(x+0.5*k1,t+0.5*h))\n",
    "        k3 = h*np.array(f(x+0.5*k2,t+0.5*h))\n",
    "        k4 = h*np.array(f(x + k3, t + h))\n",
    "        x += (1./6.)*(k1 + 2.*k2 + 2.*k3 + k4)\n",
    "        xt[i+1,:] = x\n",
    "        \n",
    "    return ts, xt[:-1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "specs = {'x0': [1. ,1.], 't0':0., 't1':10., 'N': 100}\n",
    "\n",
    "def f(x,t):\n",
    "    x1 = x[0]\n",
    "    x2 = x[1]\n",
    "    omega = 1.0\n",
    "    f1 = x1*x2 - x1\n",
    "    f2 = x2 - x1*x2 + np.sin(omega*t)**2\n",
    "    return np.array([f1,f2],dtype='float')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "t1, xt1 = rk1(f,specs)\n",
    "t2, xt2 = rk2(f,specs)\n",
    "t3, xt3 = rk4(f,specs)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(t1,xt1,label='Euler')\n",
    "plt.plot(t2,xt2,label='Midpoint')\n",
    "plt.plot(t3,xt3,label='RK4')\n",
    "plt.xlabel('t',size=14)\n",
    "plt.ylabel('$y(t)$', size = 14)\n",
    "plt.ylim(0.2,3)\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Exercise. Solve single ODE with adaptive step RK4. \n",
    "\n",
    "1) Implement adaptive step on rk4. \n",
    "\n",
    "2) Test your new code by solving $\\dot{x} = -(1 + x^3) + [\\tan(\\sin(t))]^4$, with $x_0 = 0$, $t_0 = 0$, $t_1 = 10$.\n",
    "\n",
    "3) Check the point spacing in the solution with a scatter plot "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Adaptive step for single equation\n",
    "\n",
    "def ark4_scalar(f,specs): \n",
    "    # Solve single ODE with 4th order Runge-Kutta,\n",
    "    # with adapative step\n",
    "    ####\n",
    "    def increment(f,x,t,h):\n",
    "        k1 = h*f(x,t)\n",
    "        k2 = h*f(x+0.5*k1,t+0.5*h)\n",
    "        k3 = h*f(x+0.5*k2,t+0.5*h)\n",
    "        k4 = h*f(x + k3, t + h)\n",
    "        delta = (1./6.)*(k1 + 2.*k2 + 2.*k3 + k4)\n",
    "        return delta\n",
    "    # Solve ODE with 4th order Runge Kutta method\n",
    "    h = specs['h0']\n",
    "    x = specs['x0']\n",
    "    xt = []\n",
    "    ts = []\n",
    "    t = specs['t0']\n",
    "    xt.append(x)\n",
    "    ts.append(t) \n",
    "    t_end = specs['t1']\n",
    "    while t < t_end:\n",
    "        x1 = x + increment(f,x,t,h)\n",
    "        x1 += increment(f,x1,t+h,h)\n",
    "        x2 = x + increment(f,x,t,2*h)\n",
    "        eps = (abs(x2-x1))/30.\n",
    "        if (eps <= 1e-60):\n",
    "            # Avoid overflow in rho\n",
    "            rho = 1.0\n",
    "        else:\n",
    "            rho = (specs['tol']*h)/eps\n",
    "        # Accepting or rejecting step, depending on whether\n",
    "        # the error is below or above target.\n",
    "        if (rho >= 1):\n",
    "            t += 2*h\n",
    "            x = x1\n",
    "            xt.append(x)\n",
    "            ts.append(t)\n",
    "            h = min(h*(rho**0.25),2.*h)\n",
    "        elif (rho < 1.):\n",
    "            h = min(h*(rho**0.25),0.9999*h)\n",
    "            h = h*(rho**0.25)\n",
    "             \n",
    "    return ts, xt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "specs = {'x0':0., 't0':0., 't1':10., 'h0': 0.1, 'tol': 1e-3}\n",
    "\n",
    "def f(x,t): return -(1. + x**3) + (np.tan((np.sin(t))))**4\n",
    "\n",
    "t, xt = ark4_scalar(f,specs)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(t, xt)\n",
    "plt.scatter(t, xt, s=10)\n",
    "plt.xlabel('t',size=16)\n",
    "plt.ylabel('x(t)',size=16)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Exercise. Solve system of ODEs with adaptive step RK4\n",
    "\n",
    "1) Implement adaptive step in your rk4 function. \n",
    "\n",
    "2) Test your new code by solving again the system \n",
    "\n",
    "   ${dx/dt} = xy - x$\n",
    "\n",
    "   $dy/dt = y - xy + sin^2(\\omega t)$, \n",
    "   \n",
    "   with $\\omega = 1$. Initial time $t_0 = 0$. Final time $t_1 = 10$. Intial conditions $x(0)=y(0)=1$\n",
    "\n",
    "3) Check the point spacing in the solution with a scatter plot "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "specs = {'x0': [1. ,1.], 't0':0., 't1':10., 'h0': 0.001, 'tol': 1e-20}\n",
    "\n",
    "def f(x,t):\n",
    "    x1 = x[0]\n",
    "    x2 = x[1]\n",
    "    omega = 1.0\n",
    "    f1 = x1*x2 - x1\n",
    "    f2 = x2 - x1*x2 + np.sin(omega*t)**2\n",
    "    return [f1,f2]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "from matplotlib import pyplot as plt\n",
    "\n",
    "def ark4(f,specs):\n",
    "    # Solve ODE with 4th order Runge-Kutta\n",
    "    ####\n",
    "    def increment(f,x,t,h):\n",
    "        k1 = h*np.array(f(x,t))\n",
    "        k2 = h*np.array(f(x+0.5*k1,t+0.5*h))\n",
    "        k3 = h*np.array(f(x+0.5*k2,t+0.5*h))\n",
    "        k4 = h*np.array(f(x + k3, t + h))\n",
    "        deltax = (1./6.)*(k1 + 2.*k2 + 2.*k3 + k4)\n",
    "        return deltax\n",
    "    # Setting up starting step and initial conditions\n",
    "    h = (specs['h0'])\n",
    "    x = np.array(specs['x0'],dtype='float')\n",
    "    # Array in which the solution will be stored.\n",
    "    # Start with one row and append rows at each succesful \n",
    "    # iteration. The number of columns is equal to the \n",
    "    # number of equations in the system\n",
    "    xt = np.copy(x)\n",
    "    # Array containing times at which the solution is computed\n",
    "    t = specs['t0']\n",
    "    ts = [ ]\n",
    "    ts.append(t)\n",
    "    while t < specs['t1']:\n",
    "        #Find x1, increment twice by h\n",
    "        dx1 = increment(f,x,t,h)\n",
    "        x1 = x + dx1\n",
    "        dx1 = increment(f,x1,t+h,h)\n",
    "        x1 = x1 + dx1\n",
    "        # Find x2, increment once by 2h\n",
    "        dx2 = increment(f,x,t,2*h)\n",
    "        x2 = x + dx2\n",
    "        # Estimate error\n",
    "        eps = (abs(x2-x1))/30.\n",
    "        err = np.sqrt(np.sum(eps**2))\n",
    "        # Compare error to target tolerance\n",
    "        if (err <= 1e-60):\n",
    "            # Avoid overflow in rho\n",
    "            rho = 1.0\n",
    "        else:\n",
    "            rho = (specs['tol']*h)/err\n",
    "        # Accepting or rejceting step, depending on whether\n",
    "        # the error is below or above target.\n",
    "        if (rho >= 1):\n",
    "            # x1 is accepted\n",
    "            # Update time\n",
    "            t += 2*h\n",
    "            # Update x\n",
    "            x = x1\n",
    "            #print(t,x)\n",
    "            # Stacking x as a new row to array of solutions\n",
    "            xt = np.vstack([xt,x])\n",
    "            # Appending time step\n",
    "            ts.append(t)\n",
    "            # Updating step\n",
    "            h = min(h*(rho**0.25),2.*h)\n",
    "        elif (rho < 1.):\n",
    "            # Not enough accuracy, stay in x \n",
    "            h = min(h*(rho**0.25),0.99999*h)\n",
    "                  \n",
    "    return np.array(ts), xt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "specs = {'x0': [1. ,1.], 't0':0., 't1':10., 'h0': 0.1, 'tol': 1e-3}\n",
    "\n",
    "def f(x,t):\n",
    "    x1 = x[0]\n",
    "    x2 = x[1]\n",
    "    omega = 1.0\n",
    "    f1 = x1*x2 - x1\n",
    "    f2 = x2 - x1*x2 + np.sin(omega*t)**2\n",
    "    return [f1,f2]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "t, xt = ark4(f,specs)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(t,xt)\n",
    "plt.scatter(t,xt[:,0],s = 10, label='x(t)')\n",
    "plt.scatter(t,xt[:,1], s = 10, label='y(t)')\n",
    "plt.legend(fontsize=12)\n",
    "plt.xlabel('t',size=16)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Exercise: Lotka-Volterra.\n",
    "\n",
    "Use your rk4 or adaptive rk4 to solve the Lotka-Volterra system, describing the prey (y = \"foxes\") - predator (x = \"rabbits\") population dynamics:\n",
    "\n",
    "$\\dot{x} = \\alpha x - \\beta x y$\n",
    "\n",
    "$ \\dot{y} = \\gamma x y - \\delta y$\n",
    "\n",
    "with $\\alpha = 1$, $\\beta = \\gamma =0.5$, $\\delta = 2$. Evolve the system from $t_0 = 0$ to $t_1 = 30$, starting from initial conditions $x_0 = y_0 = 2$,"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [],
   "source": [
    "def f(x,t):\n",
    "    x1 = x[0]\n",
    "    x2 = x[1]\n",
    "    alpha = 1.\n",
    "    beta = 0.5\n",
    "    gamma=beta\n",
    "    delta = 2\n",
    "    f1 = alpha*x1 - beta*x1*x2\n",
    "    f2 = gamma*x1*x2 - delta*x2\n",
    "    return [f1,f2] \n",
    "\n",
    "specs = {'x0': [2. ,2.], 't0':0., 't1':30., 'h0': 0.1, 'tol': 1e-5}\n",
    "\n",
    "# According to theory, the equilibrium point is at (x_0,y_0) = (delta/gamma, alpha/beta). Checking:\n",
    "#specs = {'x0': [4. ,2.], 't0':0., 't1':30., 'h0': 0.1, 'tol': 1e-5}\n",
    "\n",
    "t, xt = ark4(f,specs)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(t,xt)\n",
    "plt.scatter(t,xt[:,0], s = 10, label='Rabbits')\n",
    "plt.scatter(t,xt[:,1], s = 10, label='Foxes')\n",
    "plt.legend(fontsize=12)\n",
    "plt.xlabel('t',size=16)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Exercise. Cometary orbit. \n",
    "\n",
    "Use rk4 or adaptive rk4 to calculate the orbit of a comet with distance from sun at aphelion $d = 4 \\times 10^9$ km and velocity at aphelion $v = 500$ m/s. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "T =  49.194310439734046\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "from matplotlib import pyplot as plt\n",
    "\n",
    "def ark4(f,specs):\n",
    "    # Solve ODE with 4th order Runge-Kutta\n",
    "    ####\n",
    "    def increment(f,x,t,h):\n",
    "        k1 = h*np.array(f(x,t))\n",
    "        k2 = h*np.array(f(x+0.5*k1,t+0.5*h))\n",
    "        k3 = h*np.array(f(x+0.5*k2,t+0.5*h))\n",
    "        k4 = h*np.array(f(x + k3, t + h))\n",
    "        deltax = (1./6.)*(k1 + 2.*k2 + 2.*k3 + k4)\n",
    "        return deltax\n",
    "    # Setting up starting step and initial conditions\n",
    "    h = (specs['h0'])\n",
    "    x = np.array(specs['x0'],dtype='float')\n",
    "    # Array in which the solution will be stored.\n",
    "    # Start with one row and append rows at each succesful \n",
    "    # iteration. The number of columns is equal to the \n",
    "    # number of equations in the system\n",
    "    xt = np.copy(x)\n",
    "    # Array containing times at which the solution is computed\n",
    "    t = specs['t0']\n",
    "    ts = [ ]\n",
    "    ts.append(t)\n",
    "    while t < specs['t1']:\n",
    "        #Find x1, increment twice by h\n",
    "        dx1 = increment(f,x,t,h)\n",
    "        x1 = x + dx1\n",
    "        dx1 = increment(f,x1,t+h,h)\n",
    "        x1 = x1 + dx1\n",
    "        # Find x2, increment once by 2h\n",
    "        dx2 = increment(f,x,t,2*h)\n",
    "        x2 = x + dx2\n",
    "        # Estimate error\n",
    "        eps = (abs(x2-x1))/30.\n",
    "        #err = np.sqrt(np.sum(eps**2))\n",
    "        err = np.sqrt(eps[0]**2 + eps[2]**2)\n",
    "        # Compare error to target tolerance\n",
    "        if (err <= 1e-60):\n",
    "            # Avoid overflow in rho\n",
    "            rho = 1.0\n",
    "        else:\n",
    "            rho = (specs['tol']*h)/err\n",
    "        # Accepting or rejecting step, depending on whether\n",
    "        # the error is below or above target.\n",
    "        if (rho >= 1):\n",
    "            # x1 is accepted\n",
    "            # Update time\n",
    "            t += 2*h\n",
    "            # Update x\n",
    "            x = x1\n",
    "            # Stacking x as a new row to array of solutions\n",
    "            xt = np.vstack([xt,x])\n",
    "            # Appending time step\n",
    "            ts.append(t)\n",
    "            # Updating step\n",
    "            h = min(h*(rho**0.25),2.*h)\n",
    "        elif (rho < 1.):\n",
    "            # Not enough accuracy, stay in x \n",
    "            h = min(h*(rho**0.25),0.9999*h)\n",
    "                  \n",
    "    return np.array(ts), xt\n",
    "\n",
    "\n",
    "def f(x,t):   \n",
    "    \n",
    "    G = 6.6743e-11  # Newton's constant \n",
    "    sec2years = 3.17098e-8\n",
    "    m2km = 1e-3\n",
    "    G = (G*m2km**3)/(sec2years**2) # converting sec to years and meters to km\n",
    "    M = 1.98847e30  # Sun's mass  \n",
    "    GM = G*M\n",
    "    \n",
    "    x1 = x[0] # x\n",
    "    v1 = x[1] # vx\n",
    "    x2 = x[2] # y\n",
    "    v2 = x[3] # vy\n",
    "    \n",
    "    # Comet distance from the sun\n",
    "    r = np.sqrt(x1**2. + x2**2.)\n",
    "    # Array of derivatives\n",
    "    f0 = v1                 # dx/dt = v\n",
    "    f1 = -GM*x1/r**3        # dvx/dt -GM*x/r^3\n",
    "    f2 = v2                 # dy/dt = vy\n",
    "    f3 = -GM*x2/r**3        # dvy/dt = -GM*y/r^3\n",
    "    \n",
    "    return np.array([f0,f1,f2,f3])\n",
    "\n",
    "\n",
    "# Setting initial conditions. Comet at aphelion\n",
    "#################################################\n",
    "# Calculating G*M in chosen units (distances in km and time in years)\n",
    "G = 6.6743e-11  # Newton's constant \n",
    "sec2years = 3.17098e-8\n",
    "m2km = 1e-3\n",
    "G = (G*m2km**3)/(sec2years**2) # converting sec to years and meters to km\n",
    "M = 1.98847e30  # Sun's mass  \n",
    "GM = G*M\n",
    "\n",
    "# Initial position (xi,yi), distances in km\n",
    "xi  = 4e9\n",
    "yi  = 0.\n",
    "# Initial velocity (vx,vy), in km/yr\n",
    "vx0 = 0.\n",
    "sec2years = 3.17098e-8\n",
    "# Velocity at aphelion\n",
    "vy0 = 0.5/sec2years\n",
    "# Major semi-axis (in km), derived from velocity and distnce at aphelion \n",
    "a = (2./xi - vy0**2/GM)**(-1)\n",
    "# Calculating period of orbit (in years), from Kepler's third law\n",
    "T = 2.*np.pi*np.sqrt((a**3)/GM)\n",
    "print(\"T = \", T)\n",
    "\n",
    "# Setting specs using results above. Setting tolerance in km/yr on comet position. Step in km.\n",
    "# Integrating from 0 to T\n",
    "specs = {'x0': [xi, 0., 0., vy0], 't0':0, 't1': T, 'h0': 1., 'tol': 1.}\n",
    "\n",
    "t, xt = ark4(f,specs)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#plt.plot(xt[:,0], xt[:,2], linestyle='dashed')\n",
    "plt.scatter(xt[:,0],xt[:,2],s=5, color='red')\n",
    "plt.xlabel('x(t)',size=16)\n",
    "plt.ylabel('y(t)',size=16)\n",
    "plt.title('Comet orbit',size=16)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Three-body problem\n",
    "\n",
    "Consider three stars with masses $m_1 = 150$, $m_2 = 200$, $m_3 = 250$, starting at rest in positions $x_1 = (3,1)$, $x_2 = (-1,-2) $, $x_3 = (-1,1)$. Plot the orbits in the time interval $[0,2]$, using an adative step integrator. Take $G=1$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "\n",
    "def ark4(f,specs):\n",
    "    # Solve ODE with 4th order Runge-Kutta\n",
    "    ####\n",
    "    def increment(f,x,t,h):\n",
    "        k1 = h*np.array(f(x,t))\n",
    "        k2 = h*np.array(f(x+0.5*k1,t+0.5*h))\n",
    "        k3 = h*np.array(f(x+0.5*k2,t+0.5*h))\n",
    "        k4 = h*np.array(f(x + k3, t + h))\n",
    "        deltax = (1./6.)*(k1 + 2.*k2 + 2.*k3 + k4)\n",
    "        return deltax\n",
    "    # Setting up starting step and initial conditions\n",
    "    h = (specs['h0'])\n",
    "    x = np.array(specs['x0'],dtype='float')\n",
    "    # Array in which the solution will be stored.\n",
    "    # Start with one row and append rows at each succesful \n",
    "    # iteration. The number of columns is equal to the \n",
    "    # number of equations in the system\n",
    "    xt = np.copy(x)\n",
    "    # Array containing times at which the solution is computed\n",
    "    t = specs['t0']\n",
    "    ts = [ ]\n",
    "    ts.append(t)\n",
    "    while t < specs['t1']:\n",
    "        #Find x1, increment twice by h\n",
    "        dx1 = increment(f,x,t,h)\n",
    "        x1 = x + dx1\n",
    "        dx1 = increment(f,x1,t+h,h)\n",
    "        x1 = x1 + dx1\n",
    "        # Find x2, increment once by 2h\n",
    "        dx2 = increment(f,x,t,2*h)\n",
    "        x2 = x + dx2\n",
    "        # Estimate error\n",
    "        eps = (abs(x2-x1))/30.\n",
    "        err = np.sqrt(np.sum(eps**2))\n",
    "        #err = np.sqrt(eps[0]**2 + eps[1]**2 + eps[2]**2 + eps[3]**2 + eps[4]**2 +eps[5]**2)\n",
    "        # Compare error to target tolerance\n",
    "        if (err <= 1e-60):\n",
    "            # Avoid overflow in rho\n",
    "            rho = 1.0\n",
    "        else:\n",
    "            rho = (specs['tol']*h)/err\n",
    "        # Accepting or rejceting step, depending on whether\n",
    "        # the error is below or above target.\n",
    "        if (rho >= 1):\n",
    "            # x1 is accepted\n",
    "            # Update time\n",
    "            t += 2*h\n",
    "            # Update x\n",
    "            x = x1\n",
    "            # Stacking x as a new row to array of solutions\n",
    "            xt = np.vstack([xt,x])\n",
    "            # Appending time step\n",
    "            ts.append(t)\n",
    "            # Updating step\n",
    "            h = min(h*(rho**0.25),2.*h)\n",
    "        elif (rho < 1.):\n",
    "            # Not enough accuracy, stay in x \n",
    "            h = min(h*(rho**0.25),0.9999*h)\n",
    "                  \n",
    "    return np.array(ts), xt\n",
    "\n",
    "\n",
    "\n",
    "class star:\n",
    "\n",
    "    def __init__(self,m,x,y,vx,vy):\n",
    "        self.mass = m\n",
    "        self.position = np.array([x,y],dtype='float')\n",
    "        self.velocity = np.array([vx,vy],dtype='float')\n",
    "      \n",
    "    def acceleration(self,star2):\n",
    "        m2 = star2.mass\n",
    "        r1 = self.position\n",
    "        r2 = star2.position\n",
    "        dist = r1 - r2\n",
    "        r = np.sqrt(np.sum(dist**2))\n",
    "        a1 = m2*(r2-r1)/(r**3)\n",
    "        return a1\n",
    "\n",
    "def f(x,t):  \n",
    "    # Input vector: x = [x1,y1,x2,y2,x3,y3,vx1,vy1,vx2,vy2,vx3,vy3]\n",
    "    f = np.zeros(12)\n",
    "    \n",
    "    m1 = 150.\n",
    "    m2 = 200.\n",
    "    m3 = 250. \n",
    "    \n",
    "    star1 = star(m1,x[0],x[1],x[6],x[7])\n",
    "    star2 = star(m2,x[2],x[3],x[8],x[9])\n",
    "    star3 = star(m3,x[4],x[5],x[10],x[11])\n",
    "    stars = [star1,star2,star3]\n",
    "        \n",
    "    # Output vector: f = [vx1,vy1,vx2,vy2,vx3,vy3,ax1,ay1,ax2,ay2,ax3,ay3]\n",
    "    for i in range(6,12):\n",
    "        #print(i, x[i])\n",
    "        f[i-6] = x[i]\n",
    "    \n",
    "    for i in range(len(stars)):\n",
    "        #print(i)\n",
    "        a = np.zeros(2,dtype='float')\n",
    "        s1 = stars[i]\n",
    "        for s2 in stars[:i]:\n",
    "            a += s1.acceleration(s2)\n",
    "        for s2 in stars[i+1:]:\n",
    "            a += s1.acceleration(s2)    \n",
    "        f[2*i+6] = a[0]\n",
    "        f[2*i+7] = a[1]\n",
    "        #print(2*i+6,a[0])\n",
    "    \n",
    "    return f"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [],
   "source": [
    "specs = {'x0': [3.,1.,-1.,-2.,-1.,1.,0.,0.,0.,0.,0.,0.], 't0':0., 't1': 4., 'h0': 0.01, 'tol': 1e-4}\n",
    "\n",
    "t, xt = ark4(f,specs)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "a = 0\n",
    "b = len(t)\n",
    "plt.scatter(xt[a:b,0],xt[a:b,1],s=2, label = 'Star 1, $m_1 = 150$', c = 'blue')\n",
    "plt.scatter(xt[a:b,2],xt[a:b,3],s=2, label = 'Star 2, $m_2 = 200$',c = 'darkorange')\n",
    "plt.scatter(xt[a:b,4],xt[a:b,5],s=2, label = 'Star 3, $m_3 = 250$',c='green')\n",
    "plt.scatter(xt[0,0],xt[0,1],s=50,c='blue')\n",
    "plt.scatter(xt[0,2],xt[0,3],s=50,c='darkorange')\n",
    "plt.scatter(xt[0,4],xt[0,5],s=50,c='green')\n",
    "#plt.plot(xt[a:b,0],xt[a:b,1], label = 'Star 1, $m_1 = 150$',c='blue')\n",
    "#plt.plot(xt[a:b,2],xt[a:b,3], label = 'Star 2, $m_2 = 200$',c='darkorange')\n",
    "#plt.plot(xt[a:b,4],xt[a:b,5], label = 'Star 3, $m_3 = 250$',c='green')\n",
    "plt.xlabel('x',size=16)\n",
    "plt.ylabel('y',size=16)\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Two body problem.\n",
    "\n",
    "Solve the two body problem. Take G=1; set masses $m_1 = m_2 = 1$. Initial positions $x_1 = (1,0)$, $x_2 = (-1,0)$. Initial velocities $v_1=(-0.3,0.3)$, $v_2=(0.3,-0.3)$. Implement the midpoint method, following instructions in the slides."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [],
   "source": [
    "specs = {'x0': [1.,0., -1.,0., -0.3,0.3,0.3,-0.3], 't0':0., 't1': 12., 'h': 0.001}\n",
    "\n",
    "\n",
    "def midpoint_2body(specs):\n",
    "    \n",
    "    def acceleration(x):\n",
    "        m1 = 1.\n",
    "        m2 = 1.\n",
    "        x1 = x[0]\n",
    "        y1 = x[1]\n",
    "        x2 = x[2]\n",
    "        y2 = x[3]\n",
    "        r = np.sqrt((x1 - x2)**2 + (y1 - y2)**2)\n",
    "        ax1 = m2*(x2-x1)/(r**3)  # ax1 = dvx1/dt\n",
    "        ay1 = m2*(y2-y1)/(r**3)  # ay1 = dvy1/dt\n",
    "        ax2 = m1*(x1-x2)/(r**3)  # ax2 = dvx2/dt\n",
    "        ay2 = m1*(y1-y2)/(r**3)  # ay2 = dvy2.dt\n",
    "        return np.array([ax1,ay1,ax2,ay2])\n",
    "\n",
    "        \n",
    "    x0 = specs['x0']\n",
    "    h = specs['h']\n",
    "    t0 = specs['t0']\n",
    "    t1 = specs['t1']\n",
    "    \n",
    "    x1 = x0[0]\n",
    "    y1 = x0[1]\n",
    "    x2 = x0[2]\n",
    "    y2 = x0[3]\n",
    "    \n",
    "    x = np.array([x1,y1,x2,y2])\n",
    "    \n",
    "    vx1 = x0[4]\n",
    "    vy1 = x0[5]\n",
    "    vx2 = x0[6]\n",
    "    vy2 = x0[7]\n",
    "    \n",
    "    v = np.array([vx1,vy1,vx2,vy2])\n",
    "    \n",
    "    times = [t0]\n",
    "    y = np.copy(x0)\n",
    "    \n",
    "    t = t0\n",
    "    \n",
    "    while t<t1:\n",
    "        \n",
    "        a = acceleration(x)  # a(t)\n",
    "        \n",
    "        k1x = 0.5*h*v\n",
    "        k1v = 0.5*h*a\n",
    "        \n",
    "        x1 = x + k1x   # x(t + h/2)\n",
    "        \n",
    "        a1 = acceleration(x1)  # a(t+h/2)\n",
    "      \n",
    "        k2x = h*(v + k1v)\n",
    "        k2v = h*a1\n",
    "        \n",
    "        x += k2x \n",
    "        v += k2v\n",
    "        \n",
    "        t += h\n",
    "        \n",
    "        ynext = np.array([x[0],x[1],x[2],x[3],v[0],v[1],v[2],v[3]])\n",
    "        y = np.vstack((y,ynext))\n",
    "        times.append(t)\n",
    "        \n",
    "    return times, y\n",
    "\n",
    "t, xt = midpoint_2body(specs) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "a = 0\n",
    "b = len(t)\n",
    "plt.scatter(xt[a:b,0],xt[a:b,1],s=2, label = 'Star 1, $m_1 = 1$', c = 'blue')\n",
    "plt.scatter(xt[a:b,2],xt[a:b,3],s=2, label = 'Star 1, $m_1 = 1$', c = 'orange')\n",
    "plt.xlabel('x',size = 16)\n",
    "plt.ylabel('y',size=16)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Earth's orbit. \n",
    "\n",
    "Use the Verlet method to calculate the orbit of the Earth around the sun. Verify energy conservation "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [],
   "source": [
    "def f(x,t):   \n",
    "    \n",
    "    G = 6.6743e-11  # Newton's constant \n",
    "    sec2years = 3.17098e-8\n",
    "    m2km = 1e-3\n",
    "    G = (G*m2km**3)/(sec2years**2) # converting sec to years and meters to km\n",
    "    M = 1.98847e30  # Sun's mass  \n",
    "    GM = G*M\n",
    "    \n",
    "    x1 = x[0] # x\n",
    "    x2 = x[1] # y\n",
    "    \n",
    "    r = np.sqrt(x1**2. + x2**2.)\n",
    "    \n",
    "    f0 = -GM*x1/r**3        # dvx/dt = -GM*x/r^3\n",
    "    f1 = -GM*x2/r**3        # dvy/dt = -GM*y/r^3\n",
    "    \n",
    "    return np.array([f0,f1])\n",
    "\n",
    "\n",
    "def verlet(f,specs): \n",
    "\n",
    "    x0 = np.array(specs['x0'])\n",
    "    v0 = np.array(specs['v0'])\n",
    "    t0 = specs['t0']\n",
    "    t1 = specs['t1']\n",
    "    h = specs['h']\n",
    "    \n",
    "    #Solution\n",
    "    xt = np.copy(x0)\n",
    "    vt = np.copy(v0)\n",
    "    #Times at which the solution is computed\n",
    "    times = [t0]\n",
    "    t = t0\n",
    "    \n",
    "    # Energy\n",
    "    G = 6.6743e-11  # Newton's constant \n",
    "    sec2years = 3.17098e-8\n",
    "    m2km = 1e-3\n",
    "    G = (G*m2km**3)/(sec2years**2) # converting sec to years and meters to km\n",
    "    M = 1.98847e30  # Sun's mass  \n",
    "    m = 5.9722e24   # Earth's mass\n",
    "    GMm = G*M*m\n",
    "    r = np.sqrt(np.sum(x0**2))\n",
    "    Ep =  -GMm/r\n",
    "    Ek = 0.5*m*np.sum(v0**2)\n",
    "    Etot = [Ep+Ek]\n",
    "    \n",
    "    v1 = v0 + 0.5*h*f(x0,t0)  # v(t+h/2)\n",
    "    x = np.copy(x0)\n",
    "    x += h*v1                 \n",
    "    \n",
    "    while t < t1:\n",
    "        t += h\n",
    "        x += h*v1                  # x(t+h) = x(t) + h*v1\n",
    "        k = h*f(x,t)               # k = h*f(x(t+h),t+h)\n",
    "        v = v1 + 0.5*k             # v(t+h) = v(t+h/2) + k/2 \n",
    "        v1 += k                    # v(t + 3h/2) = v(t+h/2) + k\n",
    "        times.append(t)\n",
    "        xt = np.vstack((xt,x))\n",
    "        vt = np.vstack((vt,v))\n",
    "        # Energy\n",
    "        r = np.sqrt(np.sum(x**2))\n",
    "        Ep = -GMm/r\n",
    "        Ek = 0.5*m*np.sum(v**2)\n",
    "        Etot.append(Ep+Ek)\n",
    "    \n",
    "    return times, xt, vt, Etot\n",
    "\n",
    "\n",
    "xi = 1.471e8                  # Distance at perihelion in km\n",
    "sec2years = 3.17098e-8\n",
    "vy0 = -3.0287e1/sec2years     # Velocity at perihelion, km/yr\n",
    "\n",
    "specs = {'x0': [xi, 0.], 'v0': [0., vy0], 't0':0, 't1': 10., 'h': 1e-4}\n",
    "\n",
    "t, xt, vt, Etot = verlet(f,specs)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(xt[:,0],xt[:,1],s=5, color='red')\n",
    "plt.xlabel('x(t)',size=16)\n",
    "plt.ylabel('y(t)',size=16)\n",
    "plt.title('Earth orbit',size=16)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1.         0.99999956 0.99999956 0.99999956 0.99999956 0.99999956\n",
      " 0.99999956 0.99999956 0.99999956 0.99999956]\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "Econs = Etot/Etot[0]\n",
    "print(Econs[0:10])\n",
    "x = np.arange(len(Econs))\n",
    "plt.ylim(-1.1,1.1)\n",
    "plt.plot(x,Econs)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Boundary value problems. Shooting method.\n",
    "\n",
    "A ball is thrown in the air at t=0, starting at position (x,y) = (0,0), with initial horizontal velocity $v_x = 3$ m/s. The ball lands at $t_1 =10$ seconds. Calculate and plot the trajectory (neglect air resistance), following the solution steps below.\n",
    "\n",
    "1) Write a function 'trajectory', that outputs the solution of the e.o.m.. Interface: def trajectory(v0,t), where v0 = [v0x, v0y] is the vector of initial velocity components and t is a vector containing the times at which the solution is evaluated. Assume the object starts at the origin of the coordinate system (x0,y0) = 0. Use the function scipy.integrate.odeint to solve the equation. Test your code by setting some arbitray initial conditions and plotting the resulting trajectory.  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYwAAAELCAYAAADKjLEqAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAoiklEQVR4nO3dd3yV9f3+8df7ZEISCCPsMBIIyB4RFQcORBEHiqjUOltR69baav1V7bfV1ta9xapf9wStswq4FxD2hoABAoEEAiEhZH9+f+TYb6QBTyDJfZ/kej4e5+HJfXLOfd3cci4+9zTnHCIiIj8n4HUAEREJDyoMEREJiQpDRERCosIQEZGQqDBERCQkkV4HaCjt27d3PXv29DqGiEhYmTdv3jbnXFJtrzXZwujZsycZGRlexxARCStmtn5fr2mTlIiIhESFISIiIVFhiIhISFQYIiISEhWGiIiERIUhIiIhUWGIiEhImux5GCI/qqpybNtdyvaiMvJ3Vz92l1awu6ySPWUVVFZBlXM454iKCBATFSAmMoKE2Ehat4iidYsokhJi6NgqltioCK8XR8QzKgxpMrYVlbIiZxeZuUVk5haRtX032Tv2kLOzhLLKqnqZR2LLKJLbtKRHu5b0ah9H7w7x9OvUipSkOKIiNGCXpk2FIWGppLySxdkFzM3KZ8GGnSzbXEBOQcl/Xm8VG0lKUjyDurZm3MDOdEmMpX18DO3iomkbF01cTCRx0ZHERgeICgQwq35fRZWjrKKKkvJKCksqKNhTzo7iMvIKS9m6q4ScghI27tjD4uwCPlySQ1Xw/mPREQH6dU5gWHIiw7q3YUSPNiS3benBn4xIw1FhSFiorHIs21zAV2u28eXqPBZs2PmfUUNKUhyH9WrLwK6t6d+5Fb07xpMUH4P92AJ1EBVhREUEiIuJpF18zH5/t6yiih+27WZFzi5W5OxicXYBb87L5vnvqq+s0K1NC0altuPI3u0ZnZZEYsvoui+4iI9YU71Fa3p6utO1pMJbSXkl32Ru45NlW5m5Yivbd5cBMKBLK47s3Z5De7YlvUcb2sT554u4ssqxakshc7Py+XbtNr5fl0/BnnICBiN6tOGEQzpyysDOdG+n0Yf4k5nNc86l1/qaCkP8pLyyim8yt/Huws18snwrRaUVJMREcmy/DpzQrwNH9WlP+5/5l7+fVFY5Fmfv5LOVucxamcuyzbsAGNi1FeMHdWHCsC50bt3C45Qi/ydsCsPM+gKv15iUAtwOJAKXAXnB6X9wzn24v89SYYSXzNwi3sjYyPT52WwrKiMhNpJxAzsxfnAXjkhpR3Rk09ihnL2jmI+WbOGDJTks3LgTMziqd3vOHtGNkwZ00lFY4rmwKYyazCwC2AQcBlwCFDnn7g31/SoM/yuvrOKjpVt48bss5mbtIDJgHN+vAxNHdOPYvknERDbtL8/123czbf4mps/PJnvHHtq0jGJSejKTR3anV/s4r+NJM7W/wvDzTu8TgLXOufUHsvNS/Ct/dxkvfb+el75fT25hKT3ateTWcf04a3g3khLCZ3PTwerRLo4bT0zj+hP68N267bw8ez3Pfv0DU79cxwn9OvCro3txREq7A9p5L9IQ/DzCeBaY75x71MzuBC4GdgEZwE3OuR21vGcKMAWge/fuI9av3+d9QMQDG/OLeebrH3ht7gZKyqsYnZbExaN6MjotiUBAX4oAubtKeHn2Bl78fj35u8sY0KUVVx6byriBnYnQn5E0grDbJGVm0cBmYIBzbquZdQS2AQ74M9DZOXfp/j5Dm6T8Y8P2Yh79bA3T5m8iYHDG0K5cfkwKfTomeB3Nt0rKK3lnwSamfrWOdXm7SUmK46pje3PG0C5E6gRBaUDhWBhnAFc558bW8lpP4H3n3MD9fYYKw3ubdu7h4ZlrmDY/m0DA+MXI7lw+OkVHBdVBZZXjo6U5PPppJiu3FJLSPo4bTkxj/KDOGpVJgwjHfRiTgVd//MHMOjvncoI/ngks9SSVhGRncRmPf76W//02C4BfHt6DK49NpWOrWG+DhaGIgHHq4C6MH9SZT5Zv5b5PVnHNqwt4/PO13DKuH6PTkryOKM2I70YYZtYS2AikOOcKgtNeBIZSvUkqC7i8RoHUSiOMxldWUcUL32Xx8Kw1FJZWMHF4N244MY2uiRpR1JfKKsd7izZz/4zVbMgvZnRaEreNP4Q0bd6TehJ2m6TqgwqjcX26cit/eX8F67btZnRaEree0o9+nVp5HavJKq2o5MXv1vPwrDUUlVZw/mE9+O3YvrRuGeV1NAlzKgxpMBvzi/nTe8uYuSKXlKQ4/ji+P8f16+B1rGZjx+4yHpy5mhe/X09iy2h+f3JfJo1I1v4NOWAqDKl3ZRVV/PPrdTw8aw0BM64f04eLR/VqMmdkh5vlm3dxx7tLmZu1gxE92vDXswZpM5UcEBWG1KvF2Tv53VuLWbmlkLH9O3LH6QO0n8IHnHNMm7+Juz5YTlFpBVeOTuU3x/XW5UakTsLxKCnxoZLySh6YuZqnv1xH+/gYpl4wgrEDOnkdS4LMjLNHdOO4vkn85YMVPPxpJh8t3cK9k4YwJDnR63jSBGiEISFZkl3ADW8sJDO3iHPTk/nD+ENo3UI7WP3s81W53DJtCXlFpVw5OpVrTujd5K/PJQdvfyMMbXCW/aqorOLhWWs48/FvKCqp4IVLR3LP2YNVFmHg2L4d+PiGYzhzWFce/SyTCY99y5qthV7HkjCmwpB92phfzDlPfcf9M1YzfnBnPr7+GI7RiWJhpXWLKO6dNIR/XphO7q4STn3ka174LoumumVBGpb2YUitPlicwy3TF4ODh84byhlDu3odSQ7CmP4d+Sj5aG5+czG3/2sZX6zK495JQ3x1t0LxP40w5CdKyiu5dfoSrnplPqlJ8Xxw7dEqiyaiQ0Isz118KLef2p8v1+Qx/uGvmLf+vy76LLJPKgz5jw3bi5n4xLe8OmcDl49O4c0rjtC9p5uYQMC49KheTLtyFJERAc596jue/nKdNlFJSFQYAsDM5VsZ/8hXbMwv5p8XpnPruEOI0mW0m6zB3RJ5/9qjOLF/R+76cAVXv7KAotIKr2OJz+kboZmrqnI8OHM1v34hgx7tWvLBtUczpn9Hr2NJI2gVG8Xj5w/ntlMO4aOlOUx47BvW5hV5HUt8TIXRjBWWlHP5S/N4cOYazhrelbeuGEVyW22Cak7MjMuOSeGlXx1G/u4yJjz6DZ+tzPU6lviUCqOZ2phfzFmPf8unK3O5/dT+3DdpiC4h0YyN6t2e9645iu7tWnLp83OZ+uVa7deQ/6LCaIbmZuVzxmPfkFtYyguXjuTSo3phpqubNnddE1vw5hVHMG5gJ+7+cCW/fXMxpRWVXscSH1FhNDPT52dz/tOzad0iird/M4oje7f3OpL4SMvoSB6dPJzrx/Rh2vxsLnxmDjuLy7yOJT6hwmgmnHM8PGsNN76xiBE92vD2b0aRkhTvdSzxoUDAuH5MGg+dN5QFG3Zy1hPfsn77bq9jiQ+oMJqB8soqbp2+hPtnrOas4V15/tKRJLbUGb6yf2cM7cpLv67eGX7m49+ycONOryOJx1QYTVxxWQWXvZDBa3M3cs3xvblv0hDd5EhCNrJXW6ZfOYq4mAgmT/2ez1fpCKrmTN8cTdjO4jLO/+dsvlydx91nDuKmsX21c1vqLCUpnmlXjqJX+zh+/XwG0+Zlex1JPOK7wjCzLDNbYmYLzSwjOK2tmc0wszXB/7bxOqff5RTsYdKT37Fs8y4eP38Evzisu9eRJIx1SIjl9csPZ2Svttz05iKe+foHryOJB3xXGEHHOeeG1riJxy3ALOdcH2BW8GfZh6xtuzn7ie/IKSjh+UtGcvJA3RVPDl5CbBTPXXIo4wZ24s/vL+eBGat1rkYz49fC2NsZwPPB588DE7yL4m+rtxYy6anvKC6r4LUph3NEajuvI0kTEhMZwSOTh3H2iG48NGsN//P+cqqqVBrNhR/vh+GAT8zMAU8556YCHZ1zOQDOuRwz6+BpQp9auqmAC56ZTVREgDcuP4I+HRO8jiRNUGREgL9PHExCbCTPfZNFSXkVd00YSCCg/WNNnR8L40jn3OZgKcwws5WhvtHMpgBTALp3b17b7Bdu3MkFz8ymVWwUL//6MHq2j/M6kjRhgYBx+6n9aREVweOfr6W8sop7Jg4mQqXRpPmuMJxzm4P/zTWzt4GRwFYz6xwcXXQGaj22LzgamQqQnp7ebMbJCzbs4MJn5tAmLppXpxxO18QWXkeSZsDMuPmkvkRFBHho1hoqKqu4d9IQInVZ/CbLV2vWzOLMLOHH58BYYCnwLnBR8NcuAv7lTUL/mbd+Bxc8M4e28dG8prKQRmZm3HBiGjef1Jd3Fm7mpjcXUal9Gk2W30YYHYG3g+cKRAKvOOf+bWZzgTfM7FfABmCShxl9Y8GGHVz07Bzax1ePLDq3VlmIN646rjcA//h4FRFm/GPSEG2eaoJ8VRjOuXXAkFqmbwdOaPxE/rV0UwEXPjuHdvHRvDblCDq1jvU6kjRzVx3Xm6oqx30zVhMIGH+fOFg7wpsYXxWGhGblll38MriD+5XLDldZiG9cc0IfKqocD81aQ3RkgLsmDNTVBZoQFUaYWZtXxPlPzyY2MoJXLjtM+yzEd64f04eyyiqe+HwtcdER/OGUQ1QaTYQKI4xk7yjml/+cjRm8fNlh9GinQ2fFf8yM353Ul+LSCp7+6gfiYiK5fkya17GkHqgwwkReYSkXPDOHotIKXp9yBKm6l4X4mJlxx2kD2F1WyYMz15AQG8WvjurldSw5SCqMMFCwp5wLn53DloISXvr1SPp3aeV1JJGfFQgY90wczO7SCv78/nLatIzirOHdvI4lB8FX52HIfyspr+Sy5zPIzC3kqQtGMKJHW68jiYQsImA8eN5QRqW24+a3FvPpyq1eR5KDoMLwscoqx3WvLWDu+nzuP2cox6QleR1JpM5iIiOYemE6/Tu34sqX5pORle91JDlAKgyfcs7x/95ZysfLtnL7qf05bUgXryOJHLD4mEj+95JD6ZLYgl8FR8wSflQYPvXIp5m8OmcDvzk2lUuO1M5CCX/t4mN4/pKRREUYFz07l9xdJV5HkjpSYfjQtHnZ3D9jNWcN68rNJ/X1Oo5IveneriXPXTySHcVlXPzcXApLyr2OJHWgwvCZbzK38ftpixmV2o6/TRysE56kyRnUrTWPnT+cVVsL+c3L8ymvrPI6koRIheEjq7YUcsWL80hNiufJC0YQHanVI03TcX07cNeEgXy1Zht3vLtMt3oNEzoPwyfyCku59H/n0iI6gmcvOZRWsVFeRxJpUOeN7E7W9mKe/GItvdrFcdkxKV5Hkp+hwvCBkvJKpryYwfbdpbxx+RG6PpQ0G787qS8b8ndz90crSG7bkpMHdvI6kuyHtnl4zDnHzW8tZsGGnTx47lAGd0v0OpJIowkEjPvPGcqQbonc8PpClm4q8DqS7IcKw2MPz8rkvUWb+d3JfTl5YGev44g0utioCKZeOILEllFc9kIGuYU63NavVBge+vfSHB6YuZqzhnflytGpXscR8UyHhFievjCdncXlTHlhHiXllV5HklqoMDyyfPMubnh9EUOTE7n7zEE6fFaavYFdW3P/OUNYuHEnt05foiOnfEiF4YHtRaVc9kIGrVpEMvWCEcRGRXgdScQXxg3qzA1j0nh7wSae+foHr+PIXlQYjay8soqrXpnPtqJSpl6QTodWur2qSE3XHN+bkwZ05O4PV/D1mm1ex5EaVBiN7K8fruT7dfn89axBDElO9DqOiO8EAsZ95wyld4d4rn51Phu2F3sdSYJ8VRhmlmxmn5nZCjNbZmbXBaffaWabzGxh8HGK11kPxDsLNvHsNz9w8aieupGMyH7Ex0Qy9YJ0qqocU17MYE+ZdoL7ga8KA6gAbnLOHQIcDlxlZv2Drz3gnBsafHzoXcQDs2xzAbdMX8zIXm25bfwhXscR8b2e7eN4ePIwVm0t5A9vaye4H/iqMJxzOc65+cHnhcAKoKu3qQ5eQXE5V7w0j8QW0Tz2i+FERfjqj13Et47t24HrT6jeCf7S9+u9jtPs+faby8x6AsOA2cFJV5vZYjN71sza7OM9U8wsw8wy8vLyGivqflVVOW58YyFbCkp4/JfDSUqI8TqSSFi55vjeHN+vA//z/nLmrd/hdZxmzZeFYWbxwDTgeufcLuAJIBUYCuQA99X2PufcVOdcunMuPSnJH7czfeKLtcxamcttpxzC8O619pyI7EcgYDxwzlA6t27BVS/PZ3tRqdeRmi3fFYaZRVFdFi8756YDOOe2OucqnXNVwNPASC8zhurbzG3c98kqThvShYtG9fQ6jkjYat0yiid+OZz84jKuf30hVVXan+EFXxWGVZ/u/Aywwjl3f43pNS+ydCawtLGz1VXurhKufW0BKUnx/O0sncktcrAGdGnNnacN4Ks123j0s0yv4zRLfru8+ZHABcASM1sYnPYHYLKZDQUckAVc7kW4UFVWOa59bQG7Syt59bLhxMX47Y9ZJDxNHpnM3Kx8Hpi5mhE92nBk7/ZeR2pWfPVN5pz7Gqjtn+JhdRjtQ7PW8P26fP5x9mD6dEzwOo5Ik2Fm/GXCQJZsKuC61xbw4XVH0yFBV0toLL7aJNUUfL1mG498uoaJw7sxKT3Z6zgiTU5cTCSPnz+cotIKbnx9kfZnNCIVRj3KKyzl+tcXkpoUz58nDPA6jkiTldYxgTtPG8DXmdt44ou1XsdpNlQY9eTH8y0KS8p57BfDaRntq619Ik3OuYcmc9qQLtw/YzUZWflex2kWVBj15J9fr+OrNdv446n96dtJ+y1EGpqZcfeZA+nWpgXXvrqAncVlXkdq8lQY9WDRxp38/d+rOHlAJ84/rLvXcUSajYTYKB6ZPIzcwlJdb6oRqDAOUlFpBde+toAOCTH8baLOtxBpbIO7JfLbk/ry4ZItvJGx0es4TZoK4yD96d1lbMwv5sHzhpHYMtrrOCLN0pSjUxiV2o47313O2rwir+M0WSqMg/DhkhzenJfNb47tzchebb2OI9JsBQLG/ecMJTYqwLWvLqCsosrrSE2SCuMA5RTs4dbpSxjSrTXXjenjdRyRZq9T61jumTiYZZt38cDM1V7HaZJUGAegqspx0xuLKK+s4sHzhun+FiI+MXZAJ847NJknv1jLnB90qG190zfdAXju2yy+Xbud20/tT6/2cV7HEZEa/nhqf5LbtOSG16vPi5L6o8KoozVbC7nn3ysZc0gHzj1Ul/4Q8Zu4mEgeOHcoOQV7+NN7y72O06SoMOqgrKKKG95YSHxMJH89a7AOoRXxqRE92nDVcb15a142/166xes4TYYKow4e/XQNSzft4u4zB+lWqyI+d+0JfRjQpRW3vb2EbbpLX71QYYRo0cadPPb5WiYO78bJAzt5HUdEfkZURID7zxlKYUkFt+ks8HqhwghBSXklN725iA4JMdxxen+v44hIiPp2SuCmsWl8vGwr7yzc5HWcsKfCCMEDM1aTmVvEPRMH0yo2yus4IlIHvz46hfQebbj9X8vIKdjjdZywpsL4GfPW5zP1q3VMHtmdY9KSvI4jInUUETDunTSEikrHH6Zr09TBUGHsx56ySn775mK6tG7BbeMP8TqOiBygnu3j+N3JfflsVR7T5mvT1IFSYezH/TNW8cO23fzj7MHEx+iGSCLh7KIjejKyZ1v+9N4ythSUeB0nLKkw9mH+hh088/UPnH9Yd0b1bu91HBE5SIGAcc/ZgymvrNK9Mw5QWBWGmZ1sZqvMLNPMbmmo+ZRWVPK7txbTqVUst4zr11CzEZFG1qt9HDef1I9PV+bqqKkDEDaFYWYRwGPAOKA/MNnMGuQY10dmZZKZW8TdZw0iQUdFiTQpF4/qyfDuifzPe8t1Ql8dhU1hACOBTOfcOudcGfAacEZ9z2TppgKe+GItZ4/oxrF9O9T3x4uIxyICxj0TB7O7tFLXmqqjkAvDzL4xswvMzKtrYnQFat5/MTs47T/MbIqZZZhZRl5e3gHNpHPrWCaPTOaP43WCnkhT1adjAlcf35v3Fm1mxvKtXscJG3UZYZQDzwObzex+M2vsjfu1XenvJ3utnHNTnXPpzrn0pKQDO2eiXXwMf5kwiNYttSlKpCm7YnQq/Tol8P/eWcIuXQY9JCEXhnPuWOAQqkvjQmCZmX1uZueaWWN8u2YDNa8n3g3Y3AjzFZEmKDoywD0TB5NXWMo9H630Ok5YqNM+DOfcKufcjVRvCroYiABeAbLN7G9mllL/Ef9jLtDHzHqZWTRwHvBuA85PRJq4IcmJXHJkL16evYGMLN2h7+cc0E5v51ypc+5F4DrgKyAJ+B2w2szeNLN6v5yrc64CuBr4GFgBvOGcW1bf8xGR5uXGE9PomtiCW6cvoayiyus4vlbnwjCzFmZ2qZnNofpf/UlUF0cX4EpgFPByvaYMcs596JxLc86lOufuaoh5iEjzEhcTyV8mDGRNbhFPfbHW6zi+VpejpAaZ2aNU7zd4ElgPjHHODXDOPeKc2+Kcexq4AjiyYeKKiNS/4/p1YPzgzjzyaSZr84q8juNbdRlhLAImAA8CPZxzk5xzn9Xye5nAdwcfTUSk8dxxWn9iogL88Z2lumzIPtSlMCZRXRR/cs7l7OuXnHMrnHPHHXw0EZHG0yEhlt+f3I9v127nXwt1AGZt6nJY7TTnXGVDhhER8dIvRnZnaHIif/lgOQXFOjdjb+F0aRARkQYVCBh3nTmQ/N1l/P1jnZuxNxWGiEgNA7q05pIje/HKnA3M37DD6zi+osIQEdnLDSem0TEhlj++s5TKKu0A/5EKQ0RkL/Exkfzx1P4s27yLl2ev9zqOb6gwRERqccqgThzVuz3/+HgVeYW6bwaoMEREamVm/OmMAZSUV/I3XZwQUGGIiOxTalI8lx2dwrT52czVxQlVGCIi+3P18b3pmtiC2/+1rNnvAFdhiIjsR8voSG4bfwgrcnbxSjPfAa7CEBH5GeMGdmJUajvu/WQ1+bvLvI7jGRWGiMjPMDPuPH0ARaUV3PvJKq/jeEaFISISgrSOCVx0RE9enbOBpZsKvI7jCRWGiEiIrj+xD+3iornj3WXN8hLoKgwRkRC1io3i5pP6Mm/9Dt5d1Pwuga7CEBGpg7NHJDOwayv+9tFK9pQ1rzs+qDBEROogImDccdoAcgpKeLKZ3QPcN4VhZv8ws5VmttjM3jazxOD0nma2x8wWBh9PehxVRJq5Q3u25bQhXXjyi7Vs2rnH6ziNxjeFAcwABjrnBgOrgVtrvLbWOTc0+LjCm3giIv/nlnH9MKNZXWfKN4XhnPvEOVcR/PF7oJuXeURE9qdrYgumHJPKe4s2M29987jRkm8KYy+XAh/V+LmXmS0wsy/M7Oh9vcnMpphZhpll5OXlNXxKEWnWrhidQoeEGP78/nKqmsF1phq1MMxsppktreVxRo3fuQ2oAF4OTsoBujvnhgE3Aq+YWavaPt85N9U5l+6cS09KSmroxRGRZq5ldCQ3n9SXhRt38t7ipn+YbWRjzsw5N2Z/r5vZRcCpwAkueFaMc64UKA0+n2dma4E0IKOB44qI/KyJw7vx/HdZ3PPRSk4a0InYqAivIzUY32ySMrOTgd8DpzvnimtMTzKziODzFKAPsM6blCIiPxUIGLed0p/NBSX886um/dXkm8IAHgUSgBl7HT57DLDYzBYBbwFXOOd0JxMR8Y0jUtsxtn9Hnvh8bZO+natvCsM519s5l7z34bPOuWnOuQHOuSHOueHOufe8zioisrdbxvWjtKKKh2at9jpKg/FNYYiIhLOUpHjOP6w7r87ZSGZuoddxGoQKQ0Sknlx7Qh9aRkU02ZP5VBgiIvWkXXwMVx6XyswVuXy3drvXceqdCkNEpB5demQvurSO5e4PVzS5k/lUGCIi9Sg2KoKbxvZlyaYC3l+S43WceqXCEBGpZxOGdaVfpwTu/XgVZRVVXsepNyoMEZF6FhEwbhnXjw35xbwye73XceqNCkNEpAGMTktiVGo7Hv40k8KScq/j1AsVhohIAzCrHmXk7y7j6S+bxiVDVBgiIg1kcLdETh3cmae/+oHcwhKv4xw0FYaISAP67di+lFdW8einmV5HOWgqDBGRBtSzfRznHprMq3M2sGF78c+/wcdUGCIiDezaE/oQETAemBneFyZUYYiINLCOrWK55MhevLNwEytydnkd54CpMEREGsEVx6SSEBPJvR+v8jrKAVNhiIg0gtYto7ji2FRmrcwlIys87wGnwhARaSQXj+pJ+/gY7v1kFc6F34UJVRgiIo2kZXQkVx+Xyvfr8vkmM/wuf67CEBFpRJMP607XxBb84+OVYTfKUGGIiDSimMgIrj2hN4uyC5ixfKvXcepEhSEi0sgmDu9Gr/Zx3PfJ6rC6yZJvCsPM7jSzTWa2MPg4pcZrt5pZppmtMrOTvMwpInKwIiMCXD+mD6u2FobVTZZ8UxhBDzjnhgYfHwKYWX/gPGAAcDLwuJlFeBlSRORgnTa4C2kd43lw5moqw2SU4bfCqM0ZwGvOuVLn3A9AJjDS40wiIgclEDBuGJPGurzdvLtok9dxQuK3wrjazBab2bNm1iY4rSuwscbvZAen/Rczm2JmGWaWkZeX19BZRUQOykkDOnFI51Y8NHMNFZX+v5VroxaGmc00s6W1PM4AngBSgaFADnDfj2+r5aNqHb8556Y659Kdc+lJSUkNsQgiIvUmEDBuPDGNrO3FTF/g/1FGZGPOzDk3JpTfM7OngfeDP2YDyTVe7gZsrudoIiKeGHNIBwZ3a83Ds9YwYWhXoiP9tuHn//gmmZl1rvHjmcDS4PN3gfPMLMbMegF9gDmNnU9EpCGYGTecmEb2jj1Mm5/tdZz98k1hAH83syVmthg4DrgBwDm3DHgDWA78G7jKOVfpXUwRkfp1bFoSQ5MTefTTTMoq/LsvwzeF4Zy7wDk3yDk32Dl3unMup8ZrdznnUp1zfZ1zH3mZU0SkvpkZ14/pw6ad/h5l+KYwRESas9FhMMpQYYiI+EA4jDJUGCIiPuH3UYYKQ0TEJ2qOMt6a579RhgpDRMRHRqclMaRbax7/PJNyn539rcIQEfERM+PaE/qQvWMP7/js7G8VhoiIzxzfrwMDurTisc8yfXWNKRWGiIjPmBnXHN+HrO3FvLfYP1dCUmGIiPjQ2P4d6dcpgUc+zfTN/TJUGCIiPhQIVI8y1uXt5gOf3JVPhSEi4lPjBnYiNSmOxz/L9MW9v1UYIiI+FQgYVx3Xm5VbCpm1MtfrOCoMERE/O31IF5LbtuDRzzJxzttRhgpDRMTHIiMCXDm6N4s27uSbzO2eZlFhiIj43MQRXenUKpZHPl3jaQ4VhoiIz8VERjDlmBRm/5BPRla+ZzlUGCIiYWDyyO60i4vmsc8yPcugwhARCQMtoiO45MiefLYqj2WbCzzJoMIQEQkTFxzRk/iYSJ74fK0n81dhiIiEidYtojj/8O58uCSHrG27G33+KgwRkTDyq6N6ERkR4KkvG3+U4ZvCMLPXzWxh8JFlZguD03ua2Z4arz3pcVQREc90SIjlnPRuTJu3iS0FJY06b98UhnPuXOfcUOfcUGAaML3Gy2t/fM05d4U3CUVE/OHyY1KpdI5nvl7XqPP1TWH8yMwMOAd41essIiJ+lNy2JacO7swrszdQUFzeaPP1XWEARwNbnXM1T2nsZWYLzOwLMzt6X280sylmlmFmGXl5eQ2fVETEI5cfk8ruskpemr2+0ebZqIVhZjPNbGktjzNq/Npkfjq6yAG6O+eGATcCr5hZq9o+3zk31TmX7pxLT0pKargFERHxWP8urRidlsRz3/xASXllo8yzUQvDOTfGOTewlse/AMwsEjgLeL3Ge0qdc9uDz+cBa4G0xswtIuJHV4xOZVtRGW/Ny26U+fltk9QYYKVz7j9Lb2ZJZhYRfJ4C9AEad0+PiIgPHZ7SliHJiTz91bpGuY2r3wrjPP57Z/cxwGIzWwS8BVzhnPPu6lsiIj5hZlw5OoX124v5aGnD38Y1ssHnUAfOuYtrmTaN6sNsRURkL2P7dyIlKY6nvljH+EGdqT7QtGH4bYQhIiJ1EAgYlx2dwpJNBXy3rmFvsKTCEBEJc2cO60r7+Gimftmwu3dVGCIiYS42KoKLjujJ56vyWLllV4PNR4UhItIE/PLwHrSIimjQUYYKQ0SkCWgTF825hybz7sLN5BTsaZB5qDBERJqIXx3ViyrneO6brAb5fBWGiEgTkdy2JRce0ZMurWMb5PN9dR6GiIgcnDtPH9Bgn60RhoiIhESFISIiIVFhiIhISFQYIiISEhWGiIiERIUhIiIhUWGIiEhIVBgiIhISc67hb+vnBTPLA9YfxEe0B7bVUxyvaVn8qSktCzSt5WnOy9LDOZdU2wtNtjAOlpllOOfSvc5RH7Qs/tSUlgWa1vJoWWqnTVIiIhISFYaIiIREhbFvU70OUI+0LP7UlJYFmtbyaFlqoX0YIiISEo0wREQkJCoMEREJiQpjL2Z2spmtMrNMM7vF6zwHw8yyzGyJmS00swyv89SVmT1rZrlmtrTGtLZmNsPM1gT/28bLjKHax7LcaWabgutnoZmd4mXGUJlZspl9ZmYrzGyZmV0XnB5262Y/yxJ268bMYs1sjpktCi7Ln4LT6229aB9GDWYWAawGTgSygbnAZOfcck+DHSAzywLSnXNheQKSmR0DFAEvOOcGBqf9Hch3zv0tWOhtnHO/9zJnKPaxLHcCRc65e73MVldm1hno7Jybb2YJwDxgAnAxYbZu9rMs5xBm68bMDIhzzhWZWRTwNXAdcBb1tF40wvipkUCmc26dc64MeA04w+NMzZZz7ksgf6/JZwDPB58/T/Vfbt/bx7KEJedcjnNufvB5IbAC6EoYrpv9LEvYcdWKgj9GBR+OelwvKoyf6gpsrPFzNmH6P0+QAz4xs3lmNsXrMPWko3MuB6r/sgMdPM5zsK42s8XBTVa+34SzNzPrCQwDZhPm62avZYEwXDdmFmFmC4FcYIZzrl7Xiwrjp6yWaeG8ze5I59xwYBxwVXCziPjHE0AqMBTIAe7zNE0dmVk8MA243jm3y+s8B6OWZQnLdeOcq3TODQW6ASPNbGB9fr4K46eygeQaP3cDNnuU5aA55zYH/5sLvE31JrdwtzW43fnH7c+5Huc5YM65rcG/4FXA04TR+gluI58GvOycmx6cHJbrprZlCed1A+Cc2wl8DpxMPa4XFcZPzQX6mFkvM4sGzgPe9TjTATGzuOBOPMwsDhgLLN3/u8LCu8BFwecXAf/yMMtB+fEvcdCZhMn6Ce5cfQZY4Zy7v8ZLYbdu9rUs4bhuzCzJzBKDz1sAY4CV1ON60VFSewkePvcgEAE865y7y9tEB8bMUqgeVQBEAq+E27KY2avAsVRfnnkrcAfwDvAG0B3YAExyzvl+Z/I+luVYqjd5OCALuPzHbc1+ZmZHAV8BS4Cq4OQ/UL3tP6zWzX6WZTJhtm7MbDDVO7UjqB4MvOGc+x8za0c9rRcVhoiIhESbpEREJCQqDBERCYkKQ0REQqLCEBGRkKgwREQkJCoMEREJiQpDRERCosIQEZGQqDBEGljwMi0rgze3iaoxfayZVZnZVV7mEwmVzvQWaQRmNgz4HnjAOXeLmXUAFgNznHOne5tOJDQqDJFGYmY3UH2Z7LHAb4FBwJBwvSOiND8qDJFGErwy6gfA8UA0cKJzbpa3qURCp30YIo3EVf/r7EUgBlikspBwo8IQaSRm1onqS+fPB4aY2XXeJhKpGxWGSCMIbo56HigDTqS6OO4J3sNAJCxoH4ZIIzCzm4C/A8c7574I3tHxe6o3T6U75/Z4GlAkBBphiDSw4CG1dwN/dc59AeCcK6P6rm49gfv3/W4R/9AIQ0REQqIRhoiIhESFISIiIVFhiIhISFQYIiISEhWGiIiERIUhIiIhUWGIiEhIVBgiIhKS/w8zLza93tJyWgAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "from scipy import integrate\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "def trajectory(v0,t):\n",
    "    # Array of derivatives\n",
    "    def f(x,t):\n",
    "        g = -9.822\n",
    "        f0 = x[2]\n",
    "        f1 = x[3]\n",
    "        f2 = 0.\n",
    "        f3 = g\n",
    "        return np.array([f0,f1,f2,f3])\n",
    "    # Initial conditions\n",
    "    v0x = v0[0]\n",
    "    v0y = v0[1]\n",
    "    y0 = np.array([0.,0.,v0x,v0y])\n",
    "    # Integrate e.o.m.\n",
    "    y = sp.integrate.odeint(f,y0,t) \n",
    "    return y\n",
    "\n",
    "# Testing\n",
    "################\n",
    "v0 = [3.,40.]\n",
    "# Times at which I sample x(t)\n",
    "t = np.arange(0.,10.,0.1)\n",
    "# Computing and plotting trajectories\n",
    "y = trajectory(v0,t)\n",
    "plt.plot(y[:,0],y[:,1])\n",
    "plt.xlabel('x',size=16)\n",
    "plt.ylabel('y',size=16)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "2) Write a function 'height(v0y)', that takes the initial ball vertical velocity in input and outputs the height of the ball after 10 sec. To do this, use the function trajectory you wrote earlier, with suitable initial conditions."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [],
   "source": [
    "import scipy.optimize as opt\n",
    "\n",
    "def height(v0y):\n",
    "    v0x = 0.\n",
    "    v0 = np.array([v0x,v0y],dtype='float')\n",
    "    t = np.arange(0.,11.,10.)\n",
    "    y = trajectory(v0,t)\n",
    "    return y[1,1]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "3) Find the (non-zero) root of the function 'height', using scipy.optimize.root_scalar and the bisection method. This corresponds to the initial velocity for which the ball lands after 10 seconds. Check your result by plotting the final solution, with $v_0x = 3$ m/s"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYoAAAELCAYAAADHksFtAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAsxElEQVR4nO3deXwV9b3G8c83+wKERAIEkpCwyb4GUFDEBXFDUaviilqFWlr1trZX661629tWW7W1ra11xw13BfcFV2QNyB6WAIFAQghLCFvI9rt/5GipQiAhycw5ed6vF6/kzDkn5xlH8jDzm5mfOecQERE5nDCvA4iIiL+pKEREpFYqChERqZWKQkREaqWiEBGRWkV4HaChtWnTxmVkZHgdQ0QkqCxYsGCbcy75UM+FXFFkZGSQnZ3tdQwRkaBiZhsO95wOPYmISK1UFCIiUisVhYiI1EpFISIitVJRiIhIrVQUIiJSKxWFiIjUKuSuoxDx0u6yCjaX7Gf7nnJ27C2nZF85+yuqKK+sprzKEW5GVEQYURFhtIqJICk+isT4KFISYmjXMoawMPN6FUS+R0UhUg/7y6tYsqmEFYWlrCzczcqi3Wzcvped+yrq/TOjwsPomBhLl+QW9ExpSc+UVvTtmEBqYixmKhDxjopC5CiUVVQxb/0OvlxTzLy8nSzfvIvK6ppJv5Lio+jRviVn900hPSmO1MRYkltEkxQfReu4KGKjwokKDyMy3Kh21OxdVFZTWlbBjr01ex4Fu/azccc+8nfsY03RHj5dtZWqwM9PSYghKyOJEzonMer4tnRsHevlfwpphpq0KMzsSeA8YKtzrk9g2Z+AsUA5sBa4zjlXEnjuDuCHQBVws3Pug6bMK83brn0VfLBiCx8s28KstdvZX1FFVEQYA9JaM3FkZ7IyEunTIYHkltFH/S/+cIPYqHBio8JJiIskLSnukK8rq6hiTdEevs7fyfy8nWTn7eCtxQUAdGvbgjN6tePcvin07tBKexvS6Kwpp0I1s5HAHuCZg4riTOAT51ylmd0H4Jz7bzPrBUwFhgIdgI+B7s65qto+Iysry+leT1JfByqr+HjFVl5buIkv1xRTUeVITYzl9B5tGdWjLSdkHkdsVHiT53LOsbZ4D5+tKubTVVuZu24HldWOzDbxjO3fgUsGpx62dESOhpktcM5lHfK5pp4z28wygLe/KYrvPHch8APn3JWBvQmcc38IPPcBcI9zbnZtP19FIfWRt20vz83ZwOtfb2bH3nJSEmIY278D5/ZNoV9qgu/+1b5zbznvL9/C20sKmLV2OwAjurThimHpnNmrHRHhOqFR6qa2ovDbGMX1wEuB7zsCcw56blNg2feY2URgIkB6enpj5pMQ4pxjzrodPDFzPTNWFhERZozu1Y5Ls9I4uVsy4T4+AykxPorLh6Zz+dB0Npfs55XsfF7J3sSPn19Ix9axXDs8g8uGptEqJtLrqBICfLNHYWZ3AlnARc45Z2YPA7Odc88Fnn8CeNc591ptP197FHIkzjk+W1XMQzPWsCi/hKT4KK4als5VJ3aibcsYr+PVW1W14+OcIp6YuZ5563fQMjqC60ZkcP1JmbSOi/I6nvic7/cozGwCNYPcp7t/N9cmIO2gl6UCBU2dTUKHc44v1mzjgQ9XsWTTLjq2juX/xvXhB4NTiYls+nGHhhYeZozp3Z4xvduzdNMu/vFZLn/9JJcnv8rj2uEZTDyls/YwpF4836Mws7OAB4FTnHPFB72uN/AC/x7MngF002C21Meyzbu4972VzMzdRmpiLD89rSsXDkwlKiK0j+Wv3FLK3z7J5Z0lhSTGRXLz6d24clinkF9vqTvfDGab2VRgFNAGKALuBu4AooHtgZfNcc79KPD6O6kZt6gEbnXOvXekz1BRyMG27TnAve+t5NUFm5r1L8qlm3bxh/dymLV2O52Oi+Pusb04rUc7r2OJj/imKJqCikIAKquqeW7OBh74aDVlFVVcf1Imk0/t2qwPvTjn+Hx1Mb99ewVri/dyRs+23HVeb9KP02m1oqKQZmZFQSm/fG0xyzaXcnK3Ntxzfm+6JLfwOpZvlFdW89RX63loxhqqqh0/P7M714/I1Cm1zZyKQpqFA5VV/G1GLo98vpbWcZHcc35vzu2b4rtrIPyicNd+7pq2nI9WFNEvNYH7Lu5Hz5RWXscSj6goJOTlFJZy64uLWFW0m4sHpfLr83rqlNCj4JzjnaWF3D1tOaVlFfxs9PFMHNnZ19eQSOPw/emxIvVVXe14fOY67v9gNQlxkTx17RBO7dHW61hBw8w4r18Hhndpw/+8uZT73l/Jpyu38sCl/XVLEPmWDkpK0CrefYBrnpzH799dyajjk/ng1pEqiXpKio/i4SsG8cAl/VlRWMo5D33Je0sLvY4lPqGikKA0e+12zvnrl8zP28EfLurLv64eTFK8DjUdCzPj4sGpvHfLyXRu24Kbnl/IPdOXc6Cy1kuXpBlQUUhQcc7xj89yufLxObSMjuDNySO4fGi6BqwbUFpSHK9MOpHrR2Ty9Kw8LnlkNptL9nsdSzykopCgsfdAJZNfWMgf31/FOX1TmP7Tk3SWTiOJigjjrrG9eOSqwawv3sv5f5vJ3HXbj/xGCUkqCgkK+Tv2cfE/Z/H+si386pwe/O3ygbSI1rkYje2sPu15Y/IIEuIiufLxuTw7O49QO1NSjkxFIb6XnbeDCx7+isJdZTx93VAmjuyiQ01NqGvbFrw5eQSndE/m19OWc/f05VRWVXsdS5qQikJ8bdqizVzx+FwSYiN5c/IIRnZP9jpSs9QqJpLHrsli0sjOPDN7Azc8k83usgqvY0kTUVGILznnePjTXG55cREDUlvz+k3DyWwT73WsZi0szLjjnJ78/sK+fLlmG5c8Mpstu8q8jiVNQEUhvlNV7bh7+nL+9MEqxg3owLM3DCVRp776xhXD0nnq2iHfjhvlbt3jdSRpZCoK8ZUDlVXc/OLXPDN7AzeenMmDlw4gOiL4JxUKNSO7J/PSpBM5UFnFJY/MYlF+ideRpBGpKMQ39pVX8sOns3lnSSF3nN2DO8/tRZjuOeRbfTom8OqPhtMyJpLLH53DzDXbvI4kjURFIb6wu6yCCU/OY9babfzxB/2YdEoXryPJUchoE8+rN51Ip+PiuH7KfD5ZWeR1JGkEKgrxXMm+cq56fC5fbyzhr5cP5NKstCO/SXyjbcsYpt54Ase3a8mkZxfoHlEhSEUhnirZV84Vj80lp3A3/7xqMOf16+B1JKmHxPgonr9xGP1SW/OTqV/z1uICryNJA1JRiGd27avgqifmklu8h0evGczoXprDOZi1ionkmeuHMjg9kVtfWsS72rMIGSoK8cSu/RVc/eRcVm/Zw7+uGsyo43V78FAQHx3BU9cNYWBaa26e+jXvL9vidSRpACoKaXJ7DlQy4cl55BSW8s+rBmkOiRATHx3B09cPpV9qAj95YSEzcjTAHexUFNKkyiqquHFKNks37+LvVwzi9J463BSKWkRHMOX6ofTu0Iqbnl/I7LW682wwU1FIk6moquYnLyxk9rrt3H9JP8b0bu91JGlELWMiefq6oXRKiuOGKfN1UV4Qa9KiMLMnzWyrmS07aFmSmX1kZmsCXxMPeu4OM8s1s1VmNqYps0rDqq52/OKVxXycs5XfXNCbCwemeh1JmkBifBTP3TCMpBZRTHhyHquLdnsdSeqhqfcongbO+s6y24EZzrluwIzAY8ysFzAe6B14zz/MTPdyCFK/fzeHNxcVcNuZ3bnmxAyv40gTatcqhud/eALREWFMeHIeBZotL+g0aVE4574Adnxn8QXAlMD3U4BxBy1/0Tl3wDm3HsgFhjZFTmlYj3+5jsdnrmfCiZ2YfGpXr+OIB9KPi+Op64awu6ySa5+ax659ukV5MPHDGEU751whQODrN6fAdATyD3rdpsCy7zGziWaWbWbZxcXFjRpW6mbaos383zs5nNO3PXeN7a0Jh5qx3h0SePTqwazftpcbn82mrKLK60hylPxQFIdzqN8oh5yD0Tn3qHMuyzmXlZysiW38Yu667dz2ymKGZibx4KUDCNcN/pq94V3b8MClA5i3fge3vbKY6mpNqxoM/DDpcJGZpTjnCs0sBdgaWL4JOPimP6mA7gsQJNZv28uk5xaQnhTHY1dnEROp4SWpcX7/DhSU7Ofe91aScVw8t4053utIcgR+2KOYDkwIfD8BmHbQ8vFmFm1mmUA3YJ4H+aSOdu4t57qn5hFmxlPXDiUhLtLrSOIzk0Z2ZvyQNP7+aS6vZOcf+Q3iqSbdozCzqcAooI2ZbQLuBu4FXjazHwIbgUsAnHPLzexlYAVQCUx2zumgps+VV1Yz6bkFFOwqY+qNw0g/Ls7rSOJDZsZvx/Vh0879/OqNpaQmxnFil+O8jiWHYc6F1jHCrKwsl52d7XWMZsk5xx2vL+XF+fk8NH4AFww45LkHIt/atb+Ci/85i+17DjD9JyeRlqR/WHjFzBY457IO9ZwfDj1JiHhm9gZenJ/P5FO7qCTkqCTERvLYNVlUVTtumJLNngOVXkeSQ1BRSIP4Kncbv3l7BWf0bMvPR2twUo5eZpt4Hr5yEGu27uZnLy3SmVA+pKKQY5a/Yx+TX1hI5zbx/PmyAZrnWurs5G7J3HluLz5cUcRDM9Z4HUe+Q0Uhx6SsoopJzy6gutrx2DVZtIzRGU5SP9ePyODiQak8NGON5t72GRWF1JtzjjvfWMaKwlL+Mn4AGW3ivY4kQczM+N2FfejdoRW3vriIDdv3eh1JAlQUUm/Pzd3Iaws3ccvp3Tith+aVkGMXExnOI1cNxsyY9OwC9pVrcNsPVBRSL4vyS/jNW8s59fhkbjm9m9dxJISkJcXx18sHsqpoN//zxjJC7RT+YKSikDor2VfO5OcX0rZljAavpVGc0r3mHyCvf72Zl3XltudUFFInzjlue2UxW3eX8fCVg2gdF+V1JAlRPz2tGyd1bcNd05aTU1jqdZxmTUUhdfLYl+v4OGcrvzqnJwPSWnsdR0JYeJjxl/EDSIiNZPLzC3UxnodUFHLUFm7cyX3vr+LsPu25dniG13GkGWjTIpq/Xj6QvO17ufONpRqv8IiKQo5KaVkFN0/9mpSEGO69uJ8mIJImc0Ln4/ivM7ozbVEBry3c7HWcZklFIUf0zfUShbvKeGj8QBJidVGdNK0fn9qVYZlJ3DVtGeuK93gdp9lRUcgRvbpgE28tLuBno7szuFOi13GkGfpmvCIqIoyfTv2aA5WacaApqSikVuu37eXu6cs5sfNx/OiULl7HkWYsJSGWP17cj+UFpfzp/VVex2lWVBRyWBVV1dz60iIiw8P482Wa81q8d2bv9lx1QjqPz1zPrNxtXsdpNlQUclh//ySXxfkl/P7CvrRPiPE6jggAd57Ti85t4vn5K4vZta/C6zjNgopCDmnhxp38/dNcLhrYkXP7pXgdR+RbsVHh/PmyARTvPsCvpy3zOk6zoKKQ79l7oJKfvbSI9q1iuOeC3l7HEfme/mmtufn0bkxfXMC0RTpltrGpKOR7/vBeDht27OOBS/vTSvNLiE/9eFQXBqW35tdvLmPLrjKv44Q0FYX8h5lrtvHcnI1cPyKTEzof53UckcOKCA/j/kv6U15Vze2vL9FV241IRSHf2l1WwS9fXUzn5Hh+MUbzXov/dU5uwS/H9OCzVcW8kr3J6zghS0Uh3/q/t3PYUlrGA5f0JyYy3Os4Ikfl2uEZDMtM4jdvr2BzyX6v44Qk3xSFmf2XmS03s2VmNtXMYswsycw+MrM1ga+6LLiRfLZqKy9l5zPplC4MTNd/ZgkeYWHGn37Qn2rn+O9XdQiqMfiiKMysI3AzkOWc6wOEA+OB24EZzrluwIzAY2lgu8sq+NXrS+natgW3nqHZ6iT4pB8Xxx1n92Bm7jYdgmoEviiKgAgg1swigDigALgAmBJ4fgowzptooe2+91dSWFrGH3/Qj+gIHXKS4HTlsE4MzUzit++soKhUZ0E1JF8UhXNuM3A/sBEoBHY55z4E2jnnCgOvKQTaHur9ZjbRzLLNLLu4uLipYoeEOeu2f3uW0yAdcpIgFhZm3HdxP8orq/mfNzXXdkPyRVEExh4uADKBDkC8mV11tO93zj3qnMtyzmUlJyc3VsyQs7+8ittfW0J6Uhy3namznCT4ZbaJ52eju/PRiiLeXlLodZyQ4YuiAM4A1jvnip1zFcDrwHCgyMxSAAJft3qYMeQ8NGMNedv3ce9FfYmN0iEnCQ0/PCmTfqkJ3DN9OSX7yr2OExL8UhQbgRPMLM5qpk47HcgBpgMTAq+ZAEzzKF/IWVFQymNfruPSrFSGd23jdRyRBhMRHsa9F/WjZH8Ff3h3pddxQoIvisI5Nxd4FVgILKUm16PAvcBoM1sDjA48lmNUVe244/UltI6N5Ffn9PQ6jkiD69WhFTecnMlL2fnMWbfd6zhBzxdFAeCcu9s518M518c5d7Vz7oBzbrtz7nTnXLfA1x1e5wwFz87OY/GmXdw1thet46K8jiPSKG49vTtpSbH86o2llFVoRrxj4ZuikKZRULKfP32wipHdkzm/fwev44g0mtiocH43ri/rivfyj09zvY4T1FQUzcxv3lpBlXP8blwfaoaDRELXyO7JjBvQgUc+X8fa4j1exwlaKopm5NOVW3l/+RZ+elo30pLivI4j0iTuPLcX0ZFh3DVN11bUl4qimSirqOLu6cvpkhzPjSd39jqOSJNJbhnNL8ccz1e523lL11bUi4qimfjHp7ls3LGP347rQ1SENrs0L1cM60S/1AR++/YKSss0z3Zd6TdGM7CueA+PfL6OcQM6MLyLrpmQ5ic8zPi/cX3YtucAD3642us4QUdFEeKcc9zz1gqiI8L41bm6ZkKar36prblyWDrPzM4jp7DU6zhBRUUR4j5aUcQXq4u5dXR32raM8TqOiKduO/N4EmIjuXvacg1s14GKIoSVVVTxm7dX0L1dC645sZPXcUQ81zouil+M6cG8vB1MX1zgdZygoaIIYf/6fB2bdu7nnvN7ExmuTS0CcNmQNPp2TOD37+aw90Cl13GCgn57hKj8Hfv4x2e5nNsvRQPYIgcJDzP+94LeFJUe4K+frPE6TlBQUYSo37+bQ5gZd+qmfyLfMyg9kR8MTuXJmetZv22v13F8T0URguas2857y7Zw06gudGgd63UcEV/65VnHExUexu/eyfE6iu+pKEJMVbXjf99aQcfWsUwcqSuwRQ6nbcsYJp/WlY9zipi5ZpvXcXxNRRFiXs7OJ6ewlNvP7kFMpGatE6nN9SMySUuK5TdvL6eyqtrrOL6logghpWUV3P/BKoZkJHJevxSv44j4XkxkOHee05PVRXuYOm+j13F8S0URQh7+JJcd+8q567zeuoW4yFEa07s9J3RO4sGPVrNrv+4DdSgqihCRv2MfT32Vx0UDU+mbmuB1HJGgYWb8+rxelOyv4GFNcHRIKooQcd/7KwkLg1+MOd7rKCJBp3eHBC4elMrTX+WRv2Of13F8R0URAhZu3MnbSwqZeHJn2ifofk4i9XHbmccTHmbc+/5Kr6P4jooiyDnn+N07ObRpEc2kU7p4HUckaLVPiOHGkZ15Z0khCzbs9DqOr6gogtx7y7awYMNOfn5md+KjI7yOIxLUJo3sTHLLaH73zgrdXfYgR10UZvaVmV1tZtGNGUiOXkVVNX98fyXd27Xg0qw0r+OIBL346Ah+Pro7CzeW8MHyLV7H8Y267FFUAFOAAjN70Mx6NGQQM2ttZq+a2UozyzGzE80sycw+MrM1ga+JDfmZwW7qvI3kbd/H7Wf3IDxMp8OKNIQfDE6la9sW/PH9VVToIjygDkXhnBsF9KSmLK4BlpvZZ2Z2mZlFNkCWh4D3nXM9gP5ADnA7MMM51w2YEXgswJ4DlTz08RqGZSZx6vFtvY4jEjIiwsP477N6sG7bXl6an+91HF+o0xiFc26Vc+5nQEfgWiAceAHYZGb3mlm9bi5kZq2AkcATgc8pd86VABdQU0wEvo6rz88PRY99sY7te8u5/eweurhOpIGd0bMtWZ0S+cvHazRnBfUczHbOHXDOPQvcAnwJJAO/BFab2Stm1r6OP7IzUAw8ZWZfm9njZhYPtHPOFQY+sxA45D+dzWyimWWbWXZxcXF9VimobN1dxmNfruOcvu0ZmK6jcSINzcy445webNtzgCdmrvc6jufqXBRmFmtm15vZPGA+NSVxC9ABuAkYDjxfxx8bAQwC/umcGwjspQ6HmZxzjzrnspxzWcnJyXX86ODztxm5lFdW84sxDTpMJCIHGdwpiTG92/Gvz9eyfc8Br+N4qi5nPfU1s78DBcAjwAbgDOdcb+fc35xzW5xzjwE/AkbUMccmYJNzbm7g8avUFEeRmaUEPj8F2FrHnxtyNm7fx9R5G7lsSBqZbeK9jiMS0n4xpgf7K6r4x2drvY7iqbrsUSymZozgL0An59wlzrlPD/G6XGB2XUI457YA+Wb2zf0nTgdWANOBCYFlE4Bpdfm5oejPH68mIty4+fRuXkcRCXld27bg4kGpPDtnAwUl+72O45m6FMUl1BTE/34zbnAozrkc59yp9cjyU+B5M1sCDAB+D9wLjDazNcDowONma+WWUt5ctJkJwzNo10q36hBpCreO7g4OHvq4+c6vfdSX8jrnXmvMIM65RUDWIZ46vTE/N5jc/8FqWkRHcJNu1SHSZDq2juXKE9KZMiuPiad0pktyC68jNTndwiNILNiwk49zipg0sjOt46K8jiPSrEw+tSuxkeE8+OFqr6N4QkURJB74cBVtWkRx3YhMr6OINDttWkTzw5M7887SQpZt3uV1nCanoggCs9ZuY9ba7fx4VFfd+E/EIzecnElCbCR//qj57VWoKHzOOceDH66mfasYrhiW7nUckWarVUwkE0d2ZsbKrXy9sXndhlxF4XOfry4me8NOfnJaV2Iiw72OI9KsXTs8g+Pio3iwme1VqCh8zDnHgx+tJjUxVrcRF/GB+OgIbhrVhS/XbGPe+h1ex2kyKgof+zhnK0s27eLm07sRFaFNJeIHV53QibYto7n/w1XNZnIj/fbxKeccf/5oNZlt4rloYEev44hIQExkOJNP7cq89TuYtXa713GahIrCpz5cUcSKwlJ+elpXIsK1mUT85LIhabRvFcNDH69pFnsV+g3kQ845Hvp4DZlt4jm/fwev44jId8REhvPjU7swL28Hs5vBXoWKwoe0NyHif5dm1exV/KUZ7FXot5DPaG9CJDg0p70KFYXPaG9CJHg0l70K/SbyEeccf52hvQmRYNFc9ipUFD7yycqtLC8o5cejumhvQiRIXJqVRtuW0fztk1yvozQa/TbyCeccf/0kl9TEWMbpugmRoBETGc7EkZ2ZvW472XmhebW2isInZuZuY3F+CT8e1ZVI7U2IBJUrh3XiuPiokN2r0G8kn/jbjFxSEmK4eLD2JkSCTWxUODec3JnPVxezOL/E6zgNTkXhA3PWbWde3g4mjexMdITuECsSjK4+sRMJsZEhuVehovCBv3+SS5sW0YwfqvkmRIJVi+gIrh+Rycc5RawoKPU6ToNSUXhsUX4JM3O3cePJmZpvQiTIXTs8gxbREfzz87VeR2lQKgqP/ePTXBJiI7nyhE5eRxGRY5QQF8mVJ6TzzpIC8rbt9TpOg1FReGhN0W4+XFHEhMC/QkQk+P3wpEwiwsP41xehs1fhq6Iws3Az+9rM3g48TjKzj8xsTeBrotcZG9I/P1tLXFQ41w3P8DqKiDSQti1juCwrjVcXbGLLrjKv4zQIXxUFcAuQc9Dj24EZzrluwIzA45CQv2Mf0xYXcMXQdBLjo7yOIyINaOLIzlQ7eOzLdV5HaRC+KQozSwXOBR4/aPEFwJTA91OAcU0cq9E8+sU6wgxuOLmz11FEpIGlJcVxQf8OvDB3Izv2lnsd55j5piiAvwC/BKoPWtbOOVcIEPja1oNcDa549wFeys7n4kGptE+I8TqOiDSCm0Z1YX9FFc/MzvM6yjHzRVGY2XnAVufcgnq+f6KZZZtZdnFxcQOna3hTZuVRUVXNxJHamxAJVd3ateSMnu2YMiuPfeWVXsc5Jr4oCmAEcL6Z5QEvAqeZ2XNAkZmlAAS+bj3Um51zjzrnspxzWcnJyU2VuV72HKjkmdl5jOnVns7JLbyOIyKN6EendGbnvgpenp/vdZRj4ouicM7d4ZxLdc5lAOOBT5xzVwHTgQmBl00ApnkUscG8OG8jpWWVTDpFexMioS4rI4msTok89uV6Kquqj/wGn/JFUdTiXmC0ma0BRgceB63yymqemLmeYZlJDEwPqTN9ReQwJp3Shc0l+3lnaaHXUerNd0XhnPvMOXde4PvtzrnTnXPdAl+D+mbv0xcXULirjB+N6uJ1FBFpIqf3aEu3ti145PN1QTtdqu+KIlQ553j0i7X0aN+SUd39PY4iIg0nLMyYOLIzOYWlfL7a/yfbHIqKool8trqY1UV7uPHkzpiZ13FEpAldMKAj7VpF8/iX672OUi8qiiby2BfraN8qhrH9O3gdRUSaWFREGNcOz2Rm7jaWF+zyOk6dqSiawLLNu5i1djvXjcggKkL/yUWaoyuGpRMfFR6UexX6rdUEHvtyHS2iI7h8mCYmEmmuEmIjuWxIOm8tLqCgZL/XcepERdHINpfs5+0lhYwfkkarmEiv44iIh64bkYEDnp6V53WUOlFRNLKnZtbsZl53UqbHSUTEa2lJcZzTN4UX5m6ktKzC6zhHTUXRiHaXVfDi/HzO65dCx9axXscRER+YeHJn9hyoDKrbeqgoGtFL8/PZc6CSG07S7TpEpEbf1ASGZibx1Fd5QXNbDxVFI6msquapr/IYmpFE39QEr+OIiI/88KRMNpfs54PlRV5HOSoqikby4YoiNpfs53qNTYjId5zRsx3pSXE8MTM4ZsBTUTSSJ2auJz0pjtG92nkdRUR8JjzMuH5EBgs3lrBw406v4xyRiqIRfL1xJws27OS6ERmEh+l2HSLyfZdkpdEyJoInZvr/AjwVRSN4YuZ6WkZHcElWmtdRRMSn4qMjuHxoOu8v28Jmn1+Ap6JoYAUl+3lv2RbGD02jRXSE13FExMcmDM8A4BmfX4Cnomhgz87ZgHOOa07M8DqKiPhcx9axjOndjqnzNvp6Xm0VRQPaX17F1HkbGd2rHWlJcV7HEZEgcN2ITErLKnl94WavoxyWiqIBTVu0mZJ9FVw3QqfEisjRyeqUSJ+OrXh6Vp5vZ8BTUTQQ5xxPfZVHz5RWDMtM8jqOiAQJM+O64Znkbt3DzNxtXsc5JBVFA5m9djurinZz3YgMzWAnInVyXv8U2rSI4qmv8ryOckgqigby5Fd5JMVHcb5msBOROoqOCOeKYZ34ZOVW1m/b63Wc71FRNID8HfuYsbKIK4amExMZ7nUcEQlCV52QTmS4McWHp8qqKBrAc3M2EGbGlSdoBjsRqZ+2LWM4p28Kry3YxN4D/jpVVkVxjPaXV/Hi/HzG9G5HSoLmnBCR+rvmxAx2H6jk9a/9daqsL4rCzNLM7FMzyzGz5WZ2S2B5kpl9ZGZrAl8Tvc76XW8tLmDX/gpdYCcix2xQemv6dGzFMz47VdYXRQFUAj93zvUETgAmm1kv4HZghnOuGzAj8Ng3nHM8PSuPHu1b6pRYETlmZsaEEzNYs3UPs9dt9zrOt3xRFM65QufcwsD3u4EcoCNwATAl8LIpwDhPAh7Ggg07WVFYyjUn6pRYEWkYY/t3IDEukmdmbfA6yrd8URQHM7MMYCAwF2jnnCuEmjIB2h7mPRPNLNvMsouLi5ss65TZG2gZE8G4gTolVkQaRkxkOJcNSefDFf65q6yvisLMWgCvAbc650qP9n3OuUedc1nOuazk5OTGC3iQrbvLeG9pIZcMTiMuSneJFZGGc1XgDMrn5/hjr8I3RWFmkdSUxPPOudcDi4vMLCXwfAqw1at83/XSvHwqqx1Xn9jJ6ygiEmJSE+M4rUc7Xs7O50Bllddx/FEUVnOA/wkgxzn34EFPTQcmBL6fAExr6myHUllVzQvzNnJytzZkton3Oo6IhKCrT+zEtj3lvL9si9dR/FEUwAjgauA0M1sU+HMOcC8w2szWAKMDjz33cc5WCneVcfUJ2psQkcZxctc2dDoujud8cPjJFwfXnXMzgcOdNnR6U2Y5Gs/N2UCHhBhO63HIsXURkWMWFmZcNawTv3s3h5zCUnqmtPIui2efHKTWFtfcCviKYelEhOs/n4g0nh8MTiU6IszzvQr9pquj5+dsJDLcuHRImtdRRCTEJcZHMbZ/B974ejO7yyo8y6GiqIP95VW8uiCfs/qk0LZljNdxRKQZuPqETuwrr+IND+//pKKog7eWFFBaVslVw3SXWBFpGv3TWtO3YwLPz9no2f2fVBR18PzcjXRt24Khuq+TiDShK4els6poNws27PTk81UUR2nZ5l0szi/hymHpuq+TiDSpsf070DI6ghfmbvTk81UUR+mFeRuJjgjjooGpXkcRkWYmPjqCCwd15O2lhezcW97kn6+iOAp7DlQy7evNjO3fgYS4SK/jiEgzdMWwdMorq3lt4aYm/2wVxVGYtmgze8uruEKD2CLikR7tWzG4UyIvzG36QW0VxRE453huzkZ6prRiYFprr+OISDN25bB01m3b2+STGqkojmDxpl3kFJZyhQaxRcRj5/RNoXVcJM838aC2iuIIps7dSGxkOOMGaHIiEfFWTGQ4Fw1M5cPlW9i+50CTfa6Koha7yyp4a0kBY/un0DJGg9gi4r3Lh6ZRUeWadFBbRVGL6YsL2FdexeVDNYgtIv7QrV1Lsjol8uK8/CYb1FZR1OLFefn0aN+SARrEFhEfGT+0ZlB77vodTfJ5KorDWLZ5F0s37+LyoRrEFhF/ObdvCi1jIpg6r2kGtVUUhzE1cCX2uIEdvY4iIvIfYqPCuXBgR95btqVJrtRWURzCvvJKpi0q4Lx+HUiI1SC2iPjP+CE1V2q/3gS3H1dRHMLbSwrZc6CS8UM1OZGI+FOvDq3on9aal+Y3/pXaKopDeGl+Pl2S48nqlOh1FBGRwxo/JI3VRXv4Or+kUT9HRfEduVtr7vl+2ZA0DWKLiK+d1y+F2MhwXp6f36ifo6L4jpfm5xMRZlw0SLcTFxF/axkTyXn9UnhrcQF7D1Q22ueoKA5SXlnN6ws3c0bPdrRpEe11HBGRI7psSBp7y6t4Z0lho31GUBSFmZ1lZqvMLNfMbm+sz5mRU8T2veVcpkFsEQkSgzsl0iU5nhfnN941Fb4vCjMLBx4GzgZ6AZebWa/G+KyXsvNJSYhhZLfkxvjxIiINzswYPySdhRtLWFO0u1E+w/dFAQwFcp1z65xz5cCLwAUN/SEFJfv5fHUxlwxOJTxMg9giEjwuHNSRiDDjpUYa1A6GougIHLz2mwLLvmVmE80s28yy9+Xmgtm//yxYUPPn4GX33FPzxg4dvl2WdMpwTj2+LROfv+8/X1tQAG+99Z/LHn30mw/+95+xY2uWjR37n8uh5vUHL3vrrZqfe/CyiRNrXjt48L+XdQjc2vyee+q1TgweXLNs4kStk9ZJ6xTC69Tm/j+Q+4dz+Z+xveu/TrWwpp5Sr67M7BJgjHPuhsDjq4GhzrmfHur1WVlZLjs7uykjiogEPTNb4JzLOtRzwbBHsQk4eHQ5FSjwKIuISLMTDEUxH+hmZplmFgWMB6Z7nElEpNmI8DrAkTjnKs3sJ8AHQDjwpHNuucexRESaDd8XBYBz7l3gXa9ziIg0R8Fw6ElERDykohARkVqpKEREpFYqChERqZXvL7irKzMrBjYcw49oA2xroDheCpX1AK2LH4XKeoDW5RudnHOHvNFdyBXFsTKz7MNdnRhMQmU9QOviR6GyHqB1ORo69CQiIrVSUYiISK1UFN/3qNcBGkiorAdoXfwoVNYDtC5HpDEKERGplfYoRESkVioKERGplYoiwMzOMrNVZpZrZrd7nedYmFmemS01s0VmFlSzOJnZk2a21cyWHbQsycw+MrM1ga+JXmY8GodZj3vMbHNguywys3O8zHi0zCzNzD41sxwzW25mtwSWB+N2Ody6BNW2MbMYM5tnZosD6/G/geWNsk00RgGYWTiwGhhNzURJ84HLnXMrPA1WT2aWB2Q554LuIiIzGwnsAZ5xzvUJLPsjsMM5d2+gxBOdc//tZc4jOcx63APscc7d72W2ujKzFCDFObfQzFoCC4BxwLUE33Y53LpcShBtGzMzIN45t8fMIoGZwC3ARTTCNtEeRY2hQK5zbp1zrhx4EbjA40zNknPuC2DHdxZfAEwJfD+Fmr/YvnaY9QhKzrlC59zCwPe7gRxq5q0Pxu1yuHUJKq7GnsDDyMAfRyNtExVFjY5A/kGPNxGE//McxAEfmtkCM6t91vTg0M45Vwg1f9GBth7nORY/MbMlgUNTvj9U811mlgEMBOYS5NvlO+sCQbZtzCzczBYBW4GPnHONtk1UFDXsEMuC+ZjcCOfcIOBsYHLgMIh4759AF2AAUAg84GmaOjKzFsBrwK3OuVKv8xyLQ6xL0G0b51yVc24AkAoMNbM+jfVZKooam4C0gx6nAgUeZTlmzrmCwNetwBvUHFoLZkWBY8vfHGPe6nGeenHOFQX+clcDjxFE2yVwHPw14Hnn3OuBxUG5XQ61LsG8bZxzJcBnwFk00jZRUdSYD3Qzs0wziwLGA9M9zlQvZhYfGKTDzOKBM4Fltb/L96YDEwLfTwCmeZil3r75CxxwIUGyXQIDp08AOc65Bw96Kui2y+HWJdi2jZklm1nrwPexwBnAShppm+isp4DA6XB/AcKBJ51zv/M2Uf2YWWdq9iKgZk70F4JpXcxsKjCKmtslFwF3A28CLwPpwEbgEuecrweKD7Meo6g5tOGAPGDSN8eT/czMTgK+BJYC1YHFv6Lm2H6wbZfDrcvlBNG2MbN+1AxWh1PzD/6XnXO/MbPjaIRtoqIQEZFa6dCTiIjUSkUhIiK1UlGIiEitVBQiIlIrFYWIiNRKRSEiIrVSUYiISK1UFCIiUisVhUgjCdxOZWVggpnIg5afaWbVZjbZy3wiR0tXZos0IjMbCMwB/uycu93M2gJLgHnOufO9TSdydFQUIo3MzP6LmttWnwncBvQF+gfjDITSPKkoRBpZ4I6l7wCnAVHAaOfcDG9TiRw9jVGINDJX86+xZ4FoYLFKQoKNikKkkZlZe2puYb8Q6G9mt3ibSKRuVBQijShw2GkKUA6MpqYw7gvMJyASFDRGIdKIzOznwB+B05xznwdmUJxDzWGoLOfcfk8DihwF7VGINJLAqbG/B/7gnPscwDlXTs1sahnAg4d/t4h/aI9CRERqpT0KERGplYpCRERqpaIQEZFaqShERKRWKgoREamVikJERGqlohARkVqpKEREpFb/D2QdxjuENCVRAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Finding root\n",
    "a = 0.\n",
    "b = 500.\n",
    "root = opt.root_scalar(height, method='bisect', bracket=[a,b])\n",
    "\n",
    "# Calculating and plotting solution\n",
    "vx = 3.\n",
    "vy = root.root\n",
    "v0 = np.array([vx,vy],dtype='float')\n",
    "t = np.arange(0.,10.1,0.1)\n",
    "y = trajectory(v0,t)\n",
    "\n",
    "plt.plot(y[:,0],y[:,1])\n",
    "plt.axhline(linestyle='dashed',color = 'red',lw=1)\n",
    "plt.xlabel('x',size=16)\n",
    "plt.ylabel('y',size=16)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Stiff equations, an example\n",
    "\n",
    "Consider the linear system:\n",
    "\n",
    "$u' = 998 u + 1998 v$\n",
    "\n",
    "$v' = -999 u - 1999 v$,\n",
    "\n",
    "with $u(0) = 1$, $v(0) = 0$\n",
    "\n",
    "\n",
    "The analytical solution is:\n",
    "\n",
    "$u = 2 e^{-x} - e^{-1000 x}$\n",
    "\n",
    "$v = - e^{-x} + e^{-1000 x}$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 1) Solution attempt with standard RK methods (Euler method below).\n",
    "\n",
    "Using 1000 points in the interval  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "<ipython-input-38-59f2c2334d6e>:7: RuntimeWarning: overflow encountered in double_scalars\n",
      "  f0 = 998.*u + 1998*v\n",
      "<ipython-input-38-59f2c2334d6e>:7: RuntimeWarning: invalid value encountered in double_scalars\n",
      "  f0 = 998.*u + 1998*v\n",
      "<ipython-input-38-59f2c2334d6e>:8: RuntimeWarning: overflow encountered in double_scalars\n",
      "  f1 = -999.*u + -1999*v\n",
      "<ipython-input-38-59f2c2334d6e>:8: RuntimeWarning: invalid value encountered in double_scalars\n",
      "  f1 = -999.*u + -1999*v\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "def f(x,t):\n",
    "    u = x[0]\n",
    "    v = x[1]\n",
    "    f0 = 998.*u + 1998*v\n",
    "    f1 = -999.*u + -1999*v\n",
    "    return np.array([f0,f1],dtype='float')\n",
    "\n",
    "###################################################\n",
    "def rk1(f,specs):\n",
    "    # Solve ODE with Euler method\n",
    "    h = (specs['t1'] - specs['t0'])/specs['N']\n",
    "    x = np.array(specs['x0'],dtype='float')\n",
    "    Nequations = x.size\n",
    "    xt = np.zeros((specs['N']+1,Nequations),dtype='float')\n",
    "    xt[0,:] = x\n",
    "    ts = np.arange(specs['t0'],specs['t1'],h)\n",
    "    for i in range(len(ts)):\n",
    "        t = ts[i]\n",
    "        x += h*np.array(f(x,t))\n",
    "        xt[i+1,:] = x\n",
    "    return ts, xt[:-1]\n",
    "\n",
    "def rk4(f,specs):\n",
    "     # Solve ODE with 4th order Runge Kutta method\n",
    "    h = (specs['t1'] - specs['t0'])/specs['N']\n",
    "    x = specs['x0']\n",
    "    xt = []\n",
    "    xt.append(x)\n",
    "    ts = np.arange(specs['t0'],specs['t1'],h)\n",
    "    for t in ts:\n",
    "        k1 = h*f(x,t)\n",
    "        k2 = h*f(x+0.5*k1,t+0.5*h)\n",
    "        k3 = h*f(x+0.5*k2,t+0.5*h)\n",
    "        k4 = h*f(x + k3, t + h)\n",
    "        x += (1./6.)*(k1 + 2.*k2 + 2.*k3 + k4)\n",
    "        xt.append(x)\n",
    "    \n",
    "    return ts, xt[:-1]\n",
    "#########################################################\n",
    "\n",
    "specs = {'x0': [1. ,0.], 't0':0., 't1':10., 'N': 1000}\n",
    "\n",
    "t, xt = rk1(f,specs)\n",
    "\n",
    "plt.plot(t,xt)\n",
    "plt.title('Not so good')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 2) We now try to solve it using scipy.integrate.odeint.\n",
    "\n",
    "Using 100 points in the same interval"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXwAAAELCAYAAADawD2zAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAvW0lEQVR4nO3deXyU1b3H8c9vliyEQEJgCPumIIJshoALiAooglAVK3qt0Krc1q12uVet1nq9drVatWqVa63WHVEBUQFlkUUhBGQPKkLAkJAJgezLbOf+MUmMECDLJJM883v7yisz8zzznDMxfOfk95w5jxhjUEopZX22cHdAKaVUy9DAV0qpCKGBr5RSEUIDXymlIoQGvlJKRQhHuDtwKp07dzZ9+/YNdzeUUqrN2Lx58xFjTJe6trXqwO/bty/p6enh7oZSSrUZInLgZNu0pKOUUhFCA18ppSKEBr5SSkWIVl3DV0qpUPB6vWRlZVFRURHuroRMTEwMPXv2xOl01vs5GvhKKcvLysoiPj6evn37IiLh7k6TGWPIz88nKyuLfv361ft5WtJRSlleRUUFSUlJlgh7ABEhKSmpwX+xWD7w3W5YsiT4XSkVuawS9tUa83osXdJxu+H2q5ey9/AADh47k4wMcLnC3SullAoPS4/w09Lg7dum8MXDA/F6g/eVUipSWTrwU0d/d3EXp9OQmhrGziil1EncfffdrFmzBoAnnniCsrKymm0TJ07k2LFjIWnH0oHvSgqe0DhqP4+M3QEt5yilWp2jR4+yYcMGxo8fD5wY+D/60Y949tlnQ9KWpWv4EID+c+jU+zroag93Z5RSrcUnE058rPcPYeBt4CuD1VecuL3/nOBXxRFYN/P72yauPm2TmZmZTJs2jZ07dwLw17/+lZKSErp3787ll18OwFNPPUV2djYXX3wxnTt3ZtWqVUyfPp1x48Zx//33N+gl1sXSI3wccTD2XxDdGbIWh7s3Sil1gvXr13PuuecCcNddd9G9e3dWrVrFqlWrAEhMTKSyspL8/Pwmt2XtEX71BdozHoUjn0GPK8FiU7OUUo1wqhG5o92pt8d0rteIvr5ycnLo0qXO1YxruFwusrOzSUpKalJb1h7h562FN6PABKAsC0pPumqoUko1K4fDQSAQqLlf/aGp2NjY036AqqKigtjY2Cb3wdqB7y0G44NulwXvu9eEtz9KqYjVtWtX3G43+fn5VFZWsmTJEgAGDx7M3r17a/aLj4+nuLi45r4xhsOHDxOKi0FZP/ABOp8HUYmQp4GvlAoPp9PJgw8+yJgxY5g2bRpnnXUWAFOnTmX16tU1+82dO5cpU6Zw8cUXA7B582bGjh2Lw9H0Cry1a/i+qsCP6ghdxsGRDeHtj1Iqot11113cddddJzx+3333UVBQQEJCAnfeeSd33nlnzbZXXnmF2267LSTtWzvwq0f4jngY/Q+I7hTe/iilVB0ee+wxDh48SEJCwgnbhg4dyqWXXhqSdqwd+InD4MzbwNEeojridgeXV0hN1TV1lFKtx5gxY0667dZbbw1ZO9YO/OSJwS+CC6m9cPcjFJe3Y/bsX+pCakqpiGPtk7a+Mgh4geDI/tw+nzPngud1ITWlVESyduBvvBk+GAIEyzhrvp7IoO5f0dd1UBdSU0pFHGsHvrcoeMKWYPnml3+ZBMC6tz/Wco5SKuJYPPCLwRlfczep3xCI7UaHsk/C2CmllPpOTk4O06ZNA2Dr1q18+OGHNduWLFnC7373u5C1Ze3A9xWDs8N390Wg59Vgbxe+PimlVC2PP/54zUyc4wN/6tSpLF68+HvLJTeFtWfpeItrSjo1Rj8dnr4opVqNl1566YTHhgwZwujRo/F6vbz22msnbB8xYgQjRoygrKyM+fPnf2/bnDlzTtvmPffcQ58+fWo+RPXQQw8RHx/PO++8wyOPPILH4+HBBx+kvLycdevWcd9993HdddcxYcIElixZwg9/+MNGvdbarD3CH3g79Lq67m3+ypbti1Iqos2aNYu33nqr5v78+fNJSUkhMTGR6OhooqKiePjhh7nuuuvYunUr1113HQApKSmsXbs2JH0IyQhfRF4EpgFuY8zQOrZPABYB+6seetcY83Ao2j6ls35R9+NrrgZfKVyyrNm7oJRqfU41Inc6nafc3q5du3qN6I83cuRI3G432dnZ5OXlkZiYiNPprPfSyKEQqpLOS8DTwL9Psc9aY8y0ELV3eiYA5dkQlQSO45YVjesNe58HfwXYY1qsS0qpyDZz5kwWLFjA4cOHmTVrVosujQwhKukYY9YAR0NxrJDxFsLCXsFgP17yJPBX8Pn763G7W75rSqnINGvWLN58800WLFjAzJkzGThwIJmZmTXbj18aGeCrr75i6NATCieN0pI1/PNEZJuIfCQiQ062k4jMFZF0EUnPy8trfGvVC6c540/YlCcX4fU7+Pzdjxk8GA19pVSLGDJkCMXFxfTo0YNu3boRFxfHgAEDatbDv/jii9m9ezcjRoyoqfevWrWKqVOnhqT9lgr8LUAfY8xw4O/AwpPtaIyZZ4xJMcaknK62dUreouD342fpABu3tGfDNxdwyeClusyCUqpF7dixo+Z6tQB33HFHzayhTp06sWnTppqTtrm5uZSXl3POOeeEpO0WmZZpjCmqdftDEXlWRDobY440W6M1I/wOJ2xKTYW7H/0VHaKP4nQaUlP1OrdKqfC46qqrTnqB8oMHD/LYY4+FrK0WCXwRSQZyjTFGRFIJ/mXR9Euwn4rv5CUdlwueePtK0tLgYV0qWamIYIxBpHUO7m655ZY6Hx89evRJn2OMaXA7oZqW+QYwAegsIlnA7wBnVaeeA2YCPxMRH1AOzDKN6W1DxJ8JI/8K7QfUudnlgmkXH4Bj24DpzdoVpVR4xcTEkJ+fT1JSUqsN/YYwxpCfn09MTMNmGUpz525TpKSkmPT09OZrYPPdwVk81+SDQ5dbUMqqvF4vWVlZp50C2ZbExMTQs2dPnE7n9x4Xkc3GmJS6nmPdpRUq3OApgPgzQE5ybrr7VPjySchdCT1a7iMCSqmW5XQ66devX7i7EXbWXVph7//BkkE1F0Cpk2t88PKHh5a0XL+UUipMrBv4vmKwOcEeffJ97NHQbTJkfwCtuLSllFKhYN3A9xbXOSXzBN2nYcoOsWrxV/oBLKWUpVm3hl/ralenkhc7kwvvm0rOMRdOJ3pxc6WUZVl3hO8rrnMO/vE2bokn55iL4mL0U7dKKUuzbuAPvAPOeei0u6Wmwsi+W1lx/2T6d83Ui5srpSzLuiWd5In12s3lgncXx5P02cesff1d4l2/bOaOKaVUeFh3hJ+fDiX7T78fkNR3ACSOIP7YgmbulFJKhY91A3/NDNj5SP337zUTjnwOZYear09KKRVG1g18b/1O2tboPTP4/dt3m6c/SikVZtYMfGPAV1KvaZk1OgyCPjdAjM7JVEpZkzVP2vpKAVO/D17VdsFrzdIdpZRqDaw5wq++2lVDSjpV8rKLWbn4G/3UrVLKcqwZ+FEJMO6d4Do5DeB2w+FXx2FPv1WvdauUshxrBr6jHfS6Gtr3b9DT0tLg/S+uYtzA1XSJy9JP3SqlLMWagV/hhuyl4Cls0NNSU+HdLf+BzWa4/rzX9FO3SilLsWbgH/kcVk+Bkr0NeprLBR+uPYOj9vO4/4ZXcHXRJZOVUtZhzcD3Vl3AvCHTMqu4XNBp1I9wlO6CoowQd0wppcLHotMyqwK/EbN0gOB8/C7joOPZoeuTUkqFmTUDvwkjfACiOga/lFLKQixc0hFwxDX+GOW5VKy8kc8XrtTpmUopS7Bm4A/4MVy8DEQafQh3YQIV+z7g4KoXdU6+UsoSrBn47ftDt0lNOkRaejQLNs1i+sh3iHMe0zn5Sqk2z5qBn/spHP6kSYdITYVXN8wlNqqCG857VefkK6XaPGsG/u4/wrb7m3QIlwvmfzySAlsKj8yZp3PylVJtnnVn6TR2hk4tLhcw9ldw7AsIeMAe3fS+KaVUmIRkhC8iL4qIW0R2nmS7iMhTIrJXRLaLyKhQtHtSvgZe/ORU+s6CkX/WsFdKtXmhKum8BFx+iu1TgDOrvuYC/whRu3XyVxSRlRsfupk1AX/V2jwFITqgUkq1vJAEvjFmDXD0FLvMAP5tgjYACSLSLRRtH8/thsL8Yj76OD500ykLd8DqKexc8qpOz1RKtVktddK2B/BtrftZVY+dQETmiki6iKTn5eU1uKG0NJj2+Er+sPDXeL2EZDql2zuCLw6kYN/3DwYPNhr6Sqk2qaUCv65PQNU57cUYM88Yk2KMSenSpUuDG0pNhS/dw8mv6IfTSUimU6alwfOr7mBw991ceMYnOidfKdUmtVTgZwG9at3vCWQ3R0MuF2RkwOuvB7+7QnBN8tRUWLRtFrmFXblz0uM6J18p1Sa1VOAvBm6qmq0zFig0xuQ0V2MuF0ybFpqwrz7eth3RFLhu5+JRu3ElFoXmwEop1YJCMg9fRN4AJgCdRSQL+B3gBDDGPAd8CFwB7AXKgB+Hot2W5HKBa8avwHYf2Kz58QWllLWFJLmMMdefZrsBbg9FW2HlaBf87veA8TZtNU6llGph1lxaoTl5CvC/15c9i/6ms3WUUm2KBn4DuQsSWL11GInupxk5rFxDXynVZmjgN1BaGjy29F66dszlhtQXdIqmUqrN0MBvoNRU2Lj/Ij77+kJ+cdmfSU2pDHeXlFKqXjTwGyg4z1+wDX+Q7omHcFUuCneXlFKqXnR+YSMEp2hOhCProPP54e6OUkrVi47wG0sEulyAO09Y8n5AT94qpVo9DfwmcLvhr3OfoffuUZwzxKuhr5Rq1TTwmyAtDTLz+jCs1zauT/2nzthRSrVqGvhNkJoKK/ZMZf3X47jvyocYM6ok3F1SSqmT0sBvguoZO2b4X+jaIZcu+X8Ld5eUUuqkNPCbyOWCC38wFnpdTSDjMT56v0Rr+UqpVkmnZYbIkV6PctVtJWw70B6nM3Rr8SulVKjoCD9ENuzsz7YDwyguBgIePYGrlGp1dIQfIqmp4HTCc7fcycDkLxkyehl1X9lRKaXCQwM/RKovreheN4ihFU9D5TvAzHB3SymlamhJJ4RcLhj6g59CwnDY8kvwlYa7S0opVUMDP9RsDhj9DJR9y9cLf68zdpRSrYYGfjNwmwt4K+1HJBx5gXOHl2roK6VaBQ38ZpCWBve89TgjfvMFhaVxOmNHKdUqaOA3g9RUKPZ0ptjXg6ioAOcP3hbuLimllAZ+c6iesfP665C55BESN41h1aI9WtpRSoWVBn4zcblg2jSo6DGXguJ2tNv+E4ac7dfQV0qFjQZ+M9uwLZn/euvvjBnwOXdP/L3W85VSYaMfvGpmqakw+4v/YOKGpdw77X8oOvNiYFy4u6WUikA6wm9m1fX8jpOexZ80HkRYsgQt7SilWpyO8FuAywVTrozH7V7F4MHg9aIraiqlWlxIRvgicrmIfCkie0Xk3jq2TxCRQhHZWvX1YCjabWvS0sDv8/ObK+7lZxMe1Xq+UqpFNXmELyJ24BlgEpAFbBKRxcaY3cftutYYM62p7bVlqalgd9gY2GMfM0Y+SvGAYcBl4e6WUipChGKEnwrsNcbsM8Z4gDeBGSE4ruVUXxIxdsK/MB2G0GHHLFYu3qv1fKVUiwhF4PcAvq11P6vqseOdJyLbROQjERkSgnbbpGA9P46C4YsoKLSR/OUPSB1ZpKGvlGp2oQj8uq7yYY67vwXoY4wZDvwdWHjSg4nMFZF0EUnPy8sLQfdapw07+jF73nx6J2VyTvdNWs9XSjW7UAR+FtCr1v2eQHbtHYwxRcaYkqrbHwJOEelc18GMMfOMMSnGmJQuXbqEoHutU2oqfLbvUoben8ln+y4lNTXcPVJKWV0oAn8TcKaI9BORKGAWsLj2DiKSLCJSdTu1qt38ELTdZlXPz3/6/zqTkQHRh1/n6wUPaGlHKdVsmhz4xhgfcAewDMgA5htjdonIT0Xkp1W7zQR2isg24ClgljHm+LJPxKlebwdgwbPrOdPze56/648a+kqpZhGSD15VlWk+PO6x52rdfhp4OhRtWVFaGvzqjaeIsRfw2+m/YfdaB65r/ivc3VJKWYx+0rYVCM7Pt3PHay8TG+Pn6nP/m13vOOgy7hf6SVylVMho4LcC1fX8tDQH/fq+yqKX/XyVk8+f5uryC0qp0NHAbyWq6/lLljiYPe9NCotsxMfDjg2ZnDOmN2mbbKSmavgrpRpPV8tsZarLO/HxQo9Oh7moPIWVf/gxN93oZfBgXWVTKdV4GvitTO3LI366sSt7HXcza8y/mX/bFNo7j+oHtJRSjaaB3wpVl3dcXYVO4x7g9ldeYtygtay8dwyDuu3R9fSVUo2igd/KuVzwu5dnk95xFX26F7Lp5T9zww1oeUcp1WB60rYNcLnA9YPz+WRxOr98PYniYjijRw4fL+9MxwSnnsxVStWLjvDbkGFje+M1cSR29LLw55dxZuZF3Htnpo72lVL1ooHfhlSf0P33q06Odrufs7rt5LMHhjFr9D9ZvtxobV8pdUoa+G1M9QndQZOvY/yftrP14Lk8c9MtuHZP47ZbjuloXyl1Uhr4bZTLBcvX96UoZQWbAk+S2C6fnCPt8Xph+XJ0tK+UOoEGfhvmcsG0K230mXwXU574jNh2ThLbF5CcMYUnf7teR/tKqe/RWToW4HLB7t020tLAVvANgwt38PF/XcjCLdfw2fI/40gYoDN5lFI6wreK6tp+yuRzGfvIlzyy+GEmDlnKFYHBZC++g6FDfOzapaUepSKZjvAtxuWCzdviSEv7LcsKbqFw3UN063CAsnIHY8dCx9hCyv0ddRVOpSKQtOYLT6WkpJj09PRwd6PNcruDn8j1+QIEAjZ6dTpA+kODWbjlWjqM+TUknKOlHqUsRkQ2G2NS6tqmJR0Lq563/9prNjZsAGxRvLz+VmaMWsA02zDabZzEr697j107fVrqUSoC6Ag/grjdwcsplhUcJWPxc/z4wufolpjD4HsP4i7uRlxsJZ+sjGb/fnTkr1QbdaoRvgZ+BKou9QT8Pob1/IItB0ZTUgKrf3sJDruPNzf+iI92XM2ipUka/kq1MVrSUd9TXep55VUHz741mqgoiI83rNw9GVd8Ln+/cS57/tCV7Ncv51+//4jBg9EZPkpZgM7SiVDV0zih+nq6Qr9+9zJ2/D2cnfwFV507n6tT3qJXwpdUVk5hyiVHuWXCP/jbA5fx1Kuj2J+pl1xUqq3Rko76nuo6f79+MH68gYAXjy+KKcPeZ/7t0wE4UtyZT/dcyvpvLmbu/17L3m87kZoafH5ampaAlAonreGrRvl++ENCTC4XD/6YS89exkWDVtA9MYdz7v+GA/n9mTR0GWd338HGb8aScXgkSz+J0/q/UmFwqsDXko46qRPLPl3p1+9Gxo+/Ea/X0K/zN2Qe6UdJCVw0cBl3Tf4bAP6AjYwPhpCfmcrg2f/HmjVC5j4Po8dEAfpXgFLhoiN81WDHj/y9XrDboUt8LiN6pTGqzyZG9kkn1lnCFY+vQQQW3nUZZ/fYQUbOUPZkn82+I4O47f7h7Haff0I5qPZtfVNQqmG0pKOaTXX41w7q2m8E1b9e14+ex/iz13N2910MSs4gLqaM1XsuYfoTK7Db4Y2fXokxcPBoPw7m9+XAkT7szRvCP98+q6Y0VH386jeC2m3rG4NSQRr4qsWd7K8AAL/f0K3jIeKiS/nim0HExsLLc2cxKHk3fbtk0iG2GIBXP5vNz15+CRHDlv8ZxNHSJA4XduNISTLTZibzk/smsGbPeKKiAny+7Gv2HerMyDGJILY6/1o42W19s1BW0uyBLyKXA08CduAFY8yfjtsuVduvAMqAOcaYLac7rga+NZzur4Dv3gjAbjd0jC2gR8IByj2xfJ07CE9FJS/M/U+6Jx4iuUM2yQm5JLXP5y8fPMA9r/8vfbrmkfl4MLUDAeFYWSeOlXbiiY/v5bXPf0JCbB6/nfEgReUdKSjtSKmnA0XlHdmw9zyyCgewdnU57n2ZDB3ZHmNvT9qWOEanOkGkQW8cTbmtbzoqVJo18EXEDnwFTAKygE3A9caY3bX2uQK4k2DgjwGeNMaMOd2xGxv47lI3aYfSSO2RiitO/yW1VnW9EdTnTcHphLWrPUye5KOorB2xzlKuHPkecY58khPzSWp/hPjoY7yz+QY+3HYlvRP2sObB8SS0KyDK4a1p/+Z5L/BW+s2M7reRVfeN/V7ffH47N//rTd5Ln8nYMz7nyRtupdwTS6UvhnJvLOWeWP7y0e/YeqQng4e+yY/P2IbHF0159BF8RX3x+p28mnkm7n1X0L/zPlKHvUmgYCA+v4Py9gcIHB3MZ/vO42jHDPp4evPG8wfZeOArJo4YhhE7H32xm0vPn4GxRbFw3Spmjh4IYmdh2jZmjEnBiJ03N+zhhxeOBeNjwfqNzLxgLEP6JrPrQB5vrUvjuguDP8xIvT2kr4tdme6w96Opr6GhmjvwzwMeMsZcVnX/PgBjzB9r7fM8sNoY80bV/S+BCcaYnFMduzGB7y51M/iZwXh9XpwOJxm3Z2jot2G13xTyytx1/mOeODiVGTOgsnMaTnfwH4zXVfdtW7d1dCoeRIeYYnJjMynMvISkuHzOH/EvEn1daR9TirPjPjr4E1my63J2ekoZFEjgvsseJxBXjMPEEeXwYo8q5Zm1P2bz0CcYGb+fl3pWkFvRF5+JRbARMMJDuTHsqPQwLuErXuxZzvaic6gIxBIwgkF4NC+WPd4CJibs4ake5Ww4NpbKQDSG4PanjkTztS+fGZ238fuuHlYeuQSfcWAAg/Dc0Sj2+nK5scs27nVV8oH7CgwCRggALx6N5uvAQW7uupWbEwwf502tea7PwIIiJxm+ffwseQfT29tZd3RK8PlAZUBYWuJkR2A3d3fN4IKYGDYXTK45fpmBNaUONvt3cl+3DM6J6sD2golA8LxNiRHSyuxs8G3l4R5f0cfeiYzCS2r+vxb6ha0Vdtb6N/DXHpl0Ipm9xeNqth/zC7sq7Kzwree53gdw+npxoOS8mu1H/Da+qhSWetfwSt9DeDz9ySod/d3vjc9GQsIF/E/WH3iv/yGOlp9FTvmImu2HfXYOeIX3PUtZ2C+f3LKhuCuG1mzP9trI8tpYGljI/N4l5JSNJL9iEFT9fL71Coe9Nj4x7/Jqr1KyS1I56jkDMGCEA14bOT4/G1nEvJ7lZJWcR2Fl36qnG/ZX2snye9hjX8QTyR4OlFxEiad7TfvPVXzMl5Uedvw0o8Gh39zTMnsA39a6n0VwFH+6fXoAJwS+iMwF5gL07t27wZ1JO5TGT8p/wk52sl7Wk3YojWkDpzX4OKp51P7rCzjl7dHdR+Nz+jBnbiGP/kx9cypx/jg+/DaW/x3/v/zx0z8iAeHvh7ZjbofB3jPoI71x4sAWsOOUtwHDAlkIDjvjfRcyIDAAO+uxV/1XwUaerHiJt8TP9Y6rSLb3B/pRCUzqs4FRgaP8vfLfXCUwJ3ANfW29wA+Uw8iUbJIDF/G8dzdJX8Uy1z6Z7rZuNa91ONDReZD5xV+ycj9c45tAB5K+2y4QE/UlC0t3s+dAFKO9FxBl4mu2D5MANkcGH1RsIjfbSffSc7HhxFS9JQy2QaXdsKzMUHwEnEVDseMggBcwnGGHAilkrceLvyCW8rL+VUcODvJ62w05HOaLSoPTbiO/vCeCAYGAgW422Ge38aXXECsOciq7Ighg8GPoYrMRa+wcNF5iPA7yvZ2q4hA8BjrZIcpArt8QZewU+TrWvLZKAx1tgsPuoSAQQIydUn98zVl+n4F4mw2HPUAZPhwBB+WB9jXPNwba28Ee8OMlQCU2KgPtvvtFM0LWkRzE5iNg8+PDjrfWdjFCrC2AzeHBJgGM2PAFYmt+PnaEWBGIKsUhwf75TUz1jw47ECM2xOYhyu4HcRAIRFP148GBEG33YMNDjC2A4CBgooPPF3CIEC0BbFFlxNht2HBgiAIT/AnanBUYr5+31qXxcN/Q5VcoRvjXApcZY26puv8jINUYc2etfT4A/miMWVd1fwXw38aYzac6dmNH+I/+9VH22/azKnqVjvBb0OnCvHt0d256/SaiAlHEEUcMMUQHokl3plMplZzlPYtRgVFEE020iSaKKGzYeNr5NBVSwXjfeFIDqSe0+6j9UQIS4ELfhYxgBD58ePDgx48HDy/yIrGOWEYFRpEcSAYBHz4qTSU+8bHOtp4KfznDbMNJMB2pMBXYxEaAAEWmiEz7AQC6+DsTb+tAgACVgQqc9ii84uFw4AhOh51Ek0DAB3aHYDB4fD5wBCiTMjw+P/H2OATw+PzYHcFkqPB5EQeUFINIABOwBf/Nix8C9mCA1PO2BJy8N30NVy0ej7F5G/x8K922ws9CAs5WOcLPAnrVut8TyG7EPiHhinPRI7EHveJ78ewPn9WwD5GThbnP6yM9J50BSQOY/uJ0BvgGEE88cSaOOBPHKrOKRVGLcONmmH8Y1/qv/d5xvXj5wvcFlVJJkb+IQimkkkpKKcUv/uDj3iKcTifb7dvJtGUSsAd48aoXmfXeLMoD5ThtThDYYNvAJtsmAPwBP3ZbsPAfH4jHbrOzi11sD2yvebx6nxiicdodHLQd4OBxz/UH/MTYogEosBdQbCuuedxpd7Jmzhr2F+yv118sp7qdlxe6mu+O7hlhrz23httW+Fk0poZ/KqEY4TsInrS9FDhE8KTtDcaYXbX2mQrcwXcnbZ8yxpw4VDtOY0/azps3j/bt23PDDTc0+LmRrq5g79uxLxe9fBExvhiGB4bT0XSkg+lAR9OROOJ41/Eu+2z76B/oz9W+qymjjBJKKKKIcinnc9vnZPuzSXYkk0QSFVRQaa8MfjeVJwRwXbePD1dXnKtB5aHmuq0DCtXatMS0zCuAJwiWtl40xvxeRH4KYIx5rmpa5tPA5QSnZf7YGHPaJG9s4L/00kuICLNnz27wcyNRdXD2ju/NjS/dSKI/kc50JimQRCfTibX2tWy3byfOE8d/8p8UUcRRjlIsxRRKIdsC26hwVmDHjg1b8LeA04c2aLgqFWoR98GrtLQ0AoEAY8eOPf3OEaT2iLiyopK1O9cSVRbFo1sfJYMMok00d3jvAKCcco5whFxy+dr+NYfsh7AZGw6bg4AEGh3mGtpKNa+IC3z1neqQ75fQj/EvjWdc5Th6m94kme9mi2y1bWVhYCFxzjh6m94ck2NU2CpANMyVamsiLvADgQA+n4+oqKhm6FXr5y5189m+z4gpjuHFlS9iN3aWOJYAcKXnShziIEuyyAxkUugoxGPzIMgpg13DXKm2IeKWR162bBnbt2/nnnvuCXdXWkz1SN6eZ2fRikV0NV2xYWMAA9jLXkzAIDZhSdSSE0oxG+Zs+N7J0CGuITXH1c8wKGUdlgz8qKgoPB4PxhiC54utKbckl093fYpxG+7efTelgVJG+UcxmMGsYQ2H7Ic4bDsMAtH26FOO3muHvFLKmiwb+IFAAL/fj8NhrZfoLnWz7ut1mFzDpxs/JckkESBAZ0dnDvsOk+5IZ7Nzc02J5vM5n+voXSkFWDjwAbxeryUCv/aJ1ytevII5lXOwYaNCKljCEg44DlBuKyc+Kr7O+eo6eldKgcUD3+PxEBsbe5q9W7eDRw5y6/O34gg4WONYA8BSlnLIcYhCW2HNSP5UdXillAKLBn63bt0YP348Tqcz3F1pFHepm7VfrkUOCbu27eJ8//l8zdc1J14zojI05JVSDWbJwE9OTiY5OTnc3WiQ2mWbuS/MZaJ3IgZD/4H9+cOBP3DYHD7hxKuGvFKqISwZ+IFAgLKyMqKjo9vEKN9d6ibl6RTELxyVo8QTTxppbHdu5/lzn2fd9HU6o0Yp1WS2cHegORw+fJjHHnuMffv2hbsrp+QudbNo9yLeXPImN1XcxDjvOIwxFEsx66PWU+GoqAn5aQOn6YeflFJNYskRfu2Ttq1VbkkuM56awYXeC4knnv22/ayxryHacWLZRimlQkEDv4VV1+oP7jnIFO8UsslmiWMJD1z5ANfHXK9lG6VUs9HAb0GHiw8z5pkxHDPHiJZoBjkGsUN24HA4mDxgso7mlVLNSgO/BVRPs9z72V6urryaZ3gGouCnV/6UhJgELd0opVqEJQPfZrMxceLERl0EPdTcpW6uevIqJngnYDBsdG4khhicdqeO6pVSLcqSgQ9wwQUXhLV9d6mbDQc3sHfjXiZ7J5NJJsudy/nztD/rqF4pFRaWDfzCwkIAOnbs2OJtu0vdDH5mMD6fj2v915Jtz2a9bb3W6pVSYWXJefgAr732GsuWLQtL2yu+WIHD56DIW8Tb9re5YfoNvDbzNTJuz9CwV0qFjWVH+NVr4rckd6mbDz79gG83f8tFchFLo5bisOuoXinVOmjgh0huSS63PHkLKb4UMm2Z/Gb2b7ip/Cat1SulWg3LlnRaMvADgQBvv/c2Kb4UNrGJd+3vklWepcshKKVaFR3hN1H1BcMrjlSw0bGRdbIOp8NZcxlBpZRqLSwb+CNHjmTgwIHN2kZOUQ7n/OMcPAEPcbY4Prn1E10DRynValk28Pv169esx/f7/bw1/y0u8VzC24G3IQr2F+zX68QqpVotywZ+SUkJBQUF9OjRAxEJ6bFzinKY//Z8Cg8V4na6iXcEryWrZRylVGtm2ZO227Zt45///Cc+ny+kx80tyeWXT/2SgqwCPnV+yjO3PMPr17yuc+yVUq1ek0b4ItIJeAvoC2QCPzTGHKtjv0ygGPADPmNMSlParY/aC6iF8qpXCz9ayFn+s1jBCrbKVi3jKKXajKaO8O8FVhhjzgRWVN0/mYuNMSNaIuwh9CtmukvdLPlqCQPPGMhmx2a2OrdqGUcp1aY0tYY/A5hQdftlYDVwTxOPGRLVo/pQBL671M2op0dRFCjCaXey5la9IpVSqu1p6gi/qzEmB6Dq+8nSzwDLRWSziMw91QFFZK6IpItIel5eXqM7FsoR/qe7P+WmipsY4BmA1++tKeNo2Cul2pLTjvBF5BMguY5N9zegnQuMMdki4gI+FpE9xpg1de1ojJkHzANISUkxDWjje5KTk5k5cyadOnVq7CEAKC8v59Bnh/DhI9eZq2UcpVSbddrAN8ZMPNk2EckVkW7GmBwR6Qa4T3KM7KrvbhF5D0gF6gz8UGnfvj1DhjTturCHiw/zxhtvUFJUwn9c/x+MZ7yWcZRSbVZTSzqLgdlVt2cDi47fQUTiRCS++jYwGdjZxHZPy+fzsW/fvpp18RvKXerm5qdupiiniBX2FXTr0U3LOEqpNq2pgf8nYJKIfA1MqrqPiHQXkQ+r9ukKrBORbUAa8IExZmkT2z2tiooKXnnlFb766qtGPT/tUBrFpphNbGILW0g7lBbiHiqlVMtq0iwdY0w+cGkdj2cDV1Td3gcMb0o7jdHUk7apPVLZFbULr9+rdXullCVYdmmFxk7LzC3J5e133+bcoeeScXsGaYfStG6vlLIEyy6tICI4nc4GBb671M11T11H/v58Hlj6AIDW7ZVSlmHZwIeGr4m/9su1XOi9kL3sZRObtG6vlLIUy5Z0AK655hrat29fr32NMRzdepQAAVY4V+hFTJRSlmPpwG/ImvjffPMN2d9mM3nSZM7vfL7W7ZVSlmPpwD948CA+n4/+/fufcj93qZs9gT1M/+F0Rpw1IuTr5yulVGtg6cBfs2YNFRUVpwz83JJcRj8zmoJAAU67k4zeuq69UsqaIv6k7cebPmZ2xWwSPAl4/V49UauUsixLj/BPF/g+n4+8bXkUSRFFjiL9gJVSytIsHfinm4f/2WefUVRYxOxrZzPJMUlP1CqlLM3SgR8VFYXX661z2zfZ37B6zWr6D+zPqLNHMYpRLdw7pZRqWZau4Y8ePZo5c+ac8Li71M3sl2ZT4a/ggQMP4C6tc1VnpZSyFEsHfkJCAj169Djh8bRDaWyX7TzBExwzx/RErVIqIlg68I8ePcqWLVuorKysecwYw4CoATjtThxRDj1Rq5SKGJau4R86dIj333+fPn36EB0dDcDevXuZ//p8ll61lNyYXD1Rq5SKGJYO/OPXxDfGsGLFChITExk1ZBR2uz2c3VNKqRZl6ZLO8YG/Pn09ubm5nHvBuRr2SqmIY+nAr30RlJyiHN796F1yJZfpn0zXmTlKqYhj6cCvPcJfm7GWGBPDCrMCb0CXUFBKRR5L1/A7derEbbfdRocOHeji68LPV/+cUn+pzsxRSkUkSwe+w+GgS5cuFBcX06V9F7bdsU2vUauUiliWDnxjDBs2bGD58uWcffbZXHvttUwbOC3c3VJKqbCwdA0fYPny5QB069stzD1RSqnwsnTg55Xl1dz+wcof6MwcpVREs3Tgpx1KY6V9Jf/iX3gCHp2Zo5SKaJau4af2SGVn1E68fq/OzFFKRTxLB74rzkXG7Rk6M0cppbB44EMw9HVmjlJKNbGGLyLXisguEQmISMop9rtcRL4Ukb0icm9T2lRKKdU4TT1puxO4Glhzsh1ExA48A0wBzgauF5Gzm9iuUkqpBmpSSccYkwEgIqfaLRXYa4zZV7Xvm8AMYHdT2lZKKdUwLTEtswfwba37WVWP1UlE5opIuoik5+XlnWw3pZRSDXTaEb6IfAIk17HpfmPMonq0Udfw35xsZ2PMPGAeQEpKykn3U0op1TCnDXxjzMQmtpEF9Kp1vyeQ3cRjKqWUaqCWmJa5CThTRPoBh4BZwA31eeLmzZuPiMiBRrbbGTjSyOe2VfqarS/SXi/oa26oPifbIMY0vmoiIlcBfwe6AAXAVmPMZSLSHXjBGHNF1X5XAE8AduBFY8zvG91o/fuWbow56VRRK9LXbH2R9npBX3MoNXWWznvAe3U8ng1cUev+h8CHTWlLKaVU01h68TSllFLfsXLgzwt3B8JAX7P1RdrrBX3NIdOkGr5SSqm2w8ojfKWUUrVo4CulVISwXOBH2sqcItJLRFaJSEbVyqU/D3efWoqI2EXkCxFZEu6+tAQRSRCRBSKyp+r/93nh7lNzE5FfVP1e7xSRN0QkJtx9CjUReVFE3CKys9ZjnUTkYxH5uup7YijaslTgR+jKnD7gV8aYwcBY4PYIeM3Vfg5khLsTLehJYKkx5ixgOBZ/7SLSA7gLSDHGDCX4OZ5Z4e1Vs3gJuPy4x+4FVhhjzgRWVN1vMksFPrVW5jTGeIDqlTktyxiTY4zZUnW7mGAInHRxOqsQkZ7AVOCFcPelJYhIB2A88E8AY4zHGFMQ1k61DAcQKyIOoB0WXJbFGLMGOHrcwzOAl6tuvwz8IBRtWS3wG7Qyp9WISF9gJLAxzF1pCU8A/w0EwtyPltIfyAP+VVXGekFE4sLdqeZkjDkE/BU4COQAhcaY5eHtVYvpaozJgeCgDgjJ9VmtFvgNWpnTSkSkPfAOcLcxpijc/WlOIjINcBtjNoe7Ly3IAYwC/mGMGQmUEqI/81urqrr1DKAf0B2IE5Ebw9urts1qgR+RK3OKiJNg2L9mjHk33P1pARcA00Ukk2DZ7hIReTW8XWp2WUCWMab6r7cFBN8ArGwisN8Yk2eM8QLvAueHuU8tJVdEugFUfXeH4qBWC/yalTlFJIrgCZ7FYe5Ts5Lg5cb+CWQYYx4Pd39agjHmPmNMT2NMX4L/j1caYyw98jPGHAa+FZFBVQ9divWvGncQGCsi7ap+zy/F4ieqa1kMzK66PRuoz7VHTqsllkduMcYYn4jcASzju5U5d4W5W83tAuBHwA4R2Vr12G+qFqxT1nIn8FrVYGYf8OMw96dZGWM2isgCYAvB2WhfYMFlFkTkDWAC0FlEsoDfAX8C5ovIzQTf+K4NSVu6tIJSSkUGq5V0lFJKnYQGvlJKRQgNfKWUihAa+EopFSE08JVSKkJo4CulVITQwFdKqQihga+UUhFCA1+pehCRuKoLj6RVrV1U/fhkEQmIyO3h7J9S9aGftFWqnkRkJLAB+Jsx5l4RcQHbgTRjzPTw9k6p09PAV6oBROQXwGPAZODXwDnAcGPMkbB2TKl60MBXqgGqVm38ALgEiAImGWNWhLdXStWP1vCVagATHCG9AkQD2zTsVVuiga9UA4hIMsHLK24BhovIz8PbI6XqTwNfqXqqKue8DHiASQSD/88iMiyc/VKqvrSGr1Q9icivgL8AlxhjPq26EMkGguWdFGNMeVg7qNRp6AhfqXqompL5B+CPxphPAYwxHuB6oC8QEZeXVG2bjvCVUipC6AhfKaUihAa+UkpFCA18pZSKEBr4SikVITTwlVIqQmjgK6VUhNDAV0qpCKGBr5RSEeL/AcsI+MX/51YhAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import scipy as sp\n",
    "\n",
    "# Analytical solution\n",
    "t = np.arange(0,10.1,0.1)\n",
    "u = 2.*np.exp(-t) - np.exp(-1000*t)\n",
    "v = -np.exp(-t) + np.exp(-1000*t)\n",
    "# Numerical solution via scipy odeint\n",
    "y0 = np.array([1.,0.])\n",
    "y = sp.integrate.odeint(f,y0,t) \n",
    "# Plotting numerical vs analytical solution\n",
    "plt.scatter(t,y[:,0],s=7,color = 'blue')\n",
    "plt.scatter(t,y[:,1],s=7,color='green')\n",
    "plt.plot(t,u,color='orange',linestyle='dashed',label='u(t)')\n",
    "plt.plot(t,v,color='grey',linestyle='dashed',label='v(t)')\n",
    "plt.xlabel('x',size=16)\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 3) We also try to implement a simple, implicit Euler scheme"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "from numpy.linalg import solve\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "def iRK1(fprime,y0,t):\n",
    "    h = t[1] - t[0]\n",
    "    Nequations = len(y0)\n",
    "    y = np.copy(y0)\n",
    "    yn = np.copy(y0)\n",
    "    one = np.identity(Nequations)\n",
    "    for i in range (len(t) - 1):\n",
    "        ynext = solve(one - h*fprime,yn)\n",
    "        y = np.vstack((y,ynext))\n",
    "        yn = np.copy(ynext)\n",
    "    \n",
    "    return y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [],
   "source": [
    "fprime = np.array( [[998.,1998.],[-999.,-1999.]],dtype='float' )\n",
    "y0 = np.array([1.,0.])\n",
    "t = np.arange(0.,10.1,0.1)\n",
    "y = iRK1(fprime,y0,t)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "u = 2.*np.exp(-t) - np.exp(-1000*t)\n",
    "v = -np.exp(-t) + np.exp(-1000*t)\n",
    "plt.scatter(t,y[:,0],s=7,color = 'blue')\n",
    "plt.scatter(t,y[:,1],s=7,color='green')\n",
    "plt.plot(t,u,color='orange',linestyle='dashed',label='u(t)')\n",
    "plt.plot(t,v,color='grey',linestyle='dashed',label='v(t)')\n",
    "plt.xlabel('x',size=16)\n",
    "plt.legend()\n",
    "plt.title('Not bad!')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 4) Checking why the simple implicit Euler method above was stable.\n",
    "\n",
    "We know that the stability condition is \n",
    "\n",
    "1) For the explicit (forward) Euler method: $h < 2/\\lambda_{max}$, where $\\lambda_{max}$ is the highest eigenvalue of minus the array of derivatives.\n",
    "\n",
    "2) For the implicit method we have to satisfy $|1 + h \\lambda_i|^{-1} < 1$\n",
    "\n",
    "Therefore we want to start by computing the eigenvalues of 'fprime'."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "lambda 1 =  1.0\n",
      "lambda 2 =  1000.0\n"
     ]
    }
   ],
   "source": [
    "import numpy.linalg as linalg\n",
    "\n",
    "# Matrix of derivatives\n",
    "fprime = np.array( [[998.,1998.],[-999.,-1999.]],dtype='float' )\n",
    "# Finding and printing eigenvalues\n",
    "eigenvalues = linalg.eig(-fprime)\n",
    "\n",
    "print('lambda 1 = ', eigenvalues[0][0])\n",
    "print('lambda 2 = ', eigenvalues[0][1])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Therefore we see that the implicit method is always stable, whereas the forward method requires at least $h \\sim 10^{-3}$, corresponding to $\\sim 10000$ points in the $t = [0,10]$ interval in which we are solving the ODE. Let us conclude by checking that forward RK1 with $10000$ points is indeed stable."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "specs = {'x0': [1. ,0.], 't0':0., 't1':10., 'N': 10000}\n",
    "\n",
    "t, xt = rk1(f,specs)\n",
    "\n",
    "u = 2.*np.exp(-t) - np.exp(-1000*t)\n",
    "v = -np.exp(-t) + np.exp(-1000*t)\n",
    "plt.scatter(t,xt[:,0],s=7,color = 'blue')\n",
    "plt.scatter(t,xt[:,1],s=7,color='green')\n",
    "plt.plot(t,u,color='orange',linestyle='dashed',label='u(t)')\n",
    "plt.plot(t,v,color='grey',linestyle='dashed',label='v(t)')\n",
    "plt.xlabel('x',size=16)\n",
    "plt.legend()\n",
    "plt.title('Explicit Euler with $N=10^4$')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## The Bulirsch-Stoer method\n",
    "\n",
    "In the following we are going to implement the Bulirsch-Stoer method and apply is to the solution of a few numerical problems\n",
    "\n",
    "### Exercise. Implement an ODE solver which uses the Bulirsch-Stoer method"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 1. Start by implementing the modified mid-point method and test it with a few examples that were studied earlier"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "def MMP(f,y0,h,interval):\n",
    "    # Modified midpoint method\n",
    "    # Time interval\n",
    "    t0 = interval[0]\n",
    "    t1 = interval[1]\n",
    "    # Initial conditions\n",
    "    xstart = np.atleast_1d(y0)\n",
    "    # Number of equations in the system\n",
    "    # (length of equation vector)\n",
    "    Neq = len(xstart)\n",
    "    # Initializing arrays with solutions x,y\n",
    "    x = np.zeros((1,Neq),dtype='float')\n",
    "    x[0,:] = np.copy(xstart)\n",
    "    y = np.zeros( (1,Neq),dtype='float')\n",
    "    y[0,:] = x + 0.5*h*f(xstart,t0)\n",
    "    # Array contianing times at which the solution \n",
    "    # is computed\n",
    "    t = [ ]\n",
    "    t.append(t0)\n",
    "    Nsteps = int( (t1-t0)/h )\n",
    "    for i in range(Nsteps):\n",
    "        #print(i,y[i])\n",
    "        xnext = x[i] + h*f(y[i],t[i]+0.5*h)\n",
    "        #print(xnext)\n",
    "        ynext = y[i] + h*f(xnext,t[i]+h)\n",
    "        tnext = t[i] + h\n",
    "        y = np.vstack( (y,ynext) )\n",
    "        x = np.vstack( (x,xnext) )\n",
    "        t.append(tnext)\n",
    "    # Last step average\n",
    "    x[Nsteps,:] = 0.5*( x[Nsteps,:] + y[Nsteps-1,:] + 0.5*h*f(x[Nsteps,:],t1) )\n",
    "    return np.array(t), x"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "a) Testing MMP with system of equations used for initial test of RK methods"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "y0 = [1., 1.]\n",
    "t0 = 0.\n",
    "t1 = 10.\n",
    "interval = [t0,t1]\n",
    "h = 0.1\n",
    "\n",
    "def f(x,t):\n",
    "    x1 = x[0]\n",
    "    x2 = x[1]\n",
    "    omega = 1.0\n",
    "    f1 = x1*x2 - x1\n",
    "    f2 = x2 - x1*x2 + np.sin(omega*t)**2\n",
    "    return np.array([f1,f2],dtype='float')\n",
    "\n",
    "ts,xt = MMP(f,y0,h,interval)\n",
    "\n",
    "plt.plot(ts,xt)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "b) Testing MMP with Lotka-Volterra"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAWoAAAD4CAYAAADFAawfAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAABmOklEQVR4nO29d3hk13nf/znTgEHvWOxid7GVu+SSXJJLUiQliqQaZdKyIluy5MiW4yI7lmPZSew4TvxzSxzbcU/iIluSpUS2JKtblmiqU5TEsixLbq/AovfpM8CU8/vj3DszAAaDO3PPxVyA832efQY7AC7eufc97/m+9QgpJXXUUUcddbgXnloLUEcdddRRR3nUDXUdddRRh8tRN9R11FFHHS5H3VDXUUcddbgcdUNdRx111OFy+Jy4aE9PjxwaGnLi0nXUUUcd2xLPPffcnJSyt9T3HDHUQ0NDnDx50olL11FHHXVsSwghRtb7Xj30UUcdddThctQNdR111FGHy1E31HXUUUcdLkfdUNdRRx11uBx1Q11HHXXU4XLUDXUdddRRh8uxoaEWQtwghHix6F9ECPGLmyBbHXXUUUcdWDDUUsoLUsrjUsrjwB1AAvis04JtBuZiS0yGk7UWoyo8N7LA9flErcWoClJKzkyE2YojduNLGc5MhGstRtV44uIsF6aitRajKiSWM+RyW09ndKDS0MfrgCtSynULs7cKPvb0CCf+21d50588QSqdrbU4FWEmkuJdf/M0b/vL7zK6sLWM9XImx09/9Dke+fMn+dyL47UWp2L81j+d4ZE/f5Jf/9zpWotSMb52bpr3fPgZ/u3HniO7xQzeldkYt/7W49zyW4/z/PXFWouz6ajUUL8T+IdS3xBCvFcIcVIIcXJ2dta+ZA7jo98dobXBRySV4btX5motTkX46yeuks1JkssZ/ujxC7UWpyJ8/fw0Xz03TaPfwyeeHa21OBUhnEjzhVMTtDb6+L9PjTAdSdVaJMuQUvLrnztNe9DP1dk4Xzk7VWuRKsJnnx8nm5MsZbJ86aXJWouz6bBsqIUQAeAtwD+W+r6U8gNSyhNSyhO9vSXb1V2Dkfk4F6aj/NyDB2lp8PH4melai2QZuZzkH0+O8n03D3D/4V6evx6qtUgV4VsX52hp8PEz9x/gqasLW8oj+NyL46TSOX7t+44C8OzwQo0lso7h+QQT4RT//g2H2dUR5FPPbR1vRkrJF05NcN/BHu7e1823L20tYqUDlTDqNwPPSym3jlVbB185qz7CIzcP8MANvXzt/MyWiZdenYsTSWV4zcEebhns4PpCgsX4cq3FsgQpJU9cnOWeA9285fhOAL53Zb7GUlnH967Ms6eribffMUhTwMuz17aOoX7qqrrP9x3s4bY9HVyYjtRYIus4PxXl+kKCR28Z4NWHergwHWVmC3kzOlCJoX4X64Q9thqeG1lkb3cTe7qbOL67g9noEouJdK3FsoQXR0MAHN/Twa272wE4NRaqnUAVYHg+wXgoyf2Hexnqbibg9XBlLlZrsSzj5fEwtwy24/N6uG1PB88Ob51Y6VNX5+ltbWB/TzM39LcyupAkvpSptViW8PK4St7eOdTFqw/2APDUFtokdcCSoRZCNAFvAD7jrDibg/NTUY7uaANgX08zANfm4rUUyTJeHF2kpcHHgd4Wbt7VjhDw0tjWqEIwF9wdezrxegT7epq5MrM1DPVCfJnxUJKbd6nN8Y49nZybimyZRPTJ4UXu2teFEILDO1oBuLxF7v3ZiQhNAS97u5s52NcCwPAWWa+6YMlQSykTUspuKeXWsAhlkFjOMDwf58iAUtYhw1BvlQf/4miIWwbb8XoErY1+hrqbOTe5NdzYS9NRvB7BgT51zw/0NXNldmvcd3OTMQ313u5mpITJsPtd8GgqzXgoyY0Dipwc7le6f2F6a5TpnZ2McGRHK16PoNHvZUdbI9e3UG5DB15xnYkXp2NICUcMRr27swmPUAlGtyObk1ycjnHMMBYAg51BJkJboxb8wlSUoe4mGnxeAA70tnB9IcFSxv2s9LRhqG8y7v1gZxCAsUX3GwxzMzTZ6J6uJhp8Hi5ugXrqXE5ybiLCjTvb8u/t6Wrasj0E1eIVZ6jPG+zzqMGoAz4Pg51NXNsCD34ilGQ5k2O/4QUA7OoIMh5yP6sDuDQTy7M5UIY6m5NbYtFdnI6yqyNIe9APwGBXEwBji+7fJM0Qh2movR7B/t4Wrsy6P/QxtpgkupThpp0FcrKnu6nOqLc7zk9FaQp42d3ZlH9vqKd5S4Q+zIW1v7cl/97OjiBzsSXXx0pT6Swj8/E1hhrYEgZjeC7OUE9BZ/pbG/B5xJYoL7w8E8PvFeztKsi/s72RqchSDaWyBlM3DvUVdH5PVxNTkZTrdV4nXnGGeng+zlB3Mx6PyL+3r7tpSxhqM+G5bxWjBvfHSi/PxMhJVhjqgY5GAKZcLruUkmtz8RX33ef1MNDRuEUYdZR9Pc34vIXl3t/euCUadoaNkORQ0b3f2216M+7fJHXhFWeor88n8g/axEBHkOhSxvXlSldn47Q2+uhpCeTf22kYarfHqUeM8Mb+3sKC62oK4PMIZqLuZnaLiTSRVIah7uYV7+/ubNoSxuLyTCwf9jCxo62Rhfiy6/MDI/MJWhp8dDcXdH6P4RmMbIGQmS68ogx1NicZXUywZ5Wh7m1pAGDW5Qbj2lyc/T3NCFHwBkxGPe5yQ23GFHcXud8ej6C3tYFpl7vgpTwZUAlFtzPqbE4ytphcs8nsaFPezIzL7/3IfJy93U0ldX7C5Z6YTryiDPVkOEk6K9nbtVJp+9qUoXY7s1vtfgP0tzcghPsZ9fWFBN3NAVoaVh5839fWyEzU3QvODIsNrbr3uzqamIkusZzJ1UIsS5gMJ8nk5IoNEgo6P+Xy8MfIfGLNJtPVHEAImHP5etWJV5ShNqsLVoc+elvdz6iXMzkmwkn2rFLaBp+X3pYGxl3O7EYXEmuMBaiknNtZ3bW5OB7BigQ0FPRmPu5e+fOezCrZd7QrRu3mOHUmm2N0cW2o0uf10NUUYC7m3vuuG68oQz1iKO2ervVCH+5V2slwEikL9bvF6G9rZNblSnt9IbHmvoNidm5n1KOLCXZ2BAn4Vi6XbiNXMB9z76yVsQW1ge/uWqk3ZujDzYncyXCKdFauYdQAPS0NriZWuvHKMtTzCfxekU/AmejcAkktkzGXMtTdLQFXG4tMNsd4KFnSUPe3NrKYSLs6qTW+mMzHRYthJnXdzOxGFxN4BGt0vj3op8HncTWjLpXXMNHb2uDq+64bryhDPWYwI29RaR6opJbbd2gzabXahQUVs1tw8QS9yXCKbE6uy6jB3WGn8VCSXSU2yB7DE5tz8SY5upBgoD2I37tyqQsh2OHyWmozQV6KnPS0BFzvRerEK8pQT4RKMyNQO7SbGfWYwYzM2GIxeloUu3DrqFaTGQ12rb33fW1mrNSd9z6dzTEdSTFYQm+6DUM972KDMbqYXBP2MNHX2uDqhNz4YhIhVGhvNXpaGpiLuneD1I1XmKFOrXEBTfS1upxRh5LsaGtcw4xAMeqlTI7EsjvDB2Yzzs72EvH1VrNMzJ0u+FQ4RU5SklE3B7w0+DzMu9ibGV1IMFjCCwMV8ltMuFf2iVCS/tbGNbkBUMQqmc66vvdBF14xhjqdzTEdXd9Q97Y2uNqVGltMrrvgzGYAt8apzThoKW/ATMgtuNRgjBoNLbs61t57IYTB7NypN+lsjtnYEjtL3Hdwf8hsPJRkZ0dp2Xu2SO+DLrxiDPVUOIWUsGudB9/b2sB8bMm1h36OLyZLxuqgqPrApWViU+EUHU1+Gv3eNd/raFJDjtx6Sk25JC6oWOmcS2WfjS4hJewo4ckAdDYrRu3WkNlEKMmudciJWRr5SkkovmIMtdkQsh6j7mgKkJMQSbrvpJdsTjIVWd8b6G42Y6XuNBiT4VS+HGw1GnxemgNe156wYya0BsowO7cyajPktKO9oeT3u5oCpLOSmAvDB7mcNEKV5Rl13VBvM5gLbr1kYqfJ7Fzogs8ZTL+/jAsLuNaNnY6kSoY9THQ2B1zLqCdCSXpbG/IztFejuyXgWk/GDDmVSsaBuu8Ai3H3bZJz8SWWs7mSSVwoLo10p97oxivGUG/EqDubDKV1IbMzmxLWY6Vm6GPOpQajHKMGdye1piJLDJTZZLpbGpiPuTN8YOrNwDqhj65mRU7cmB8wQ07rrdd2g1iFXegBO4FXjKEeD6Xoag6UjJNCIVYacqHSmvMY1jN2TQEfQb+XBReyi+VMjvn40oaMesGFGyTAdDi1LiMFlcjN5CSRlPvCB9ORFAGfJ+8troZJThZcuMHnyck6etPg89IU8LrWE9ONV4yhngonN2R14E5GXa5qwoRywd2ntDNRlcQtf+/9rtwgQW2S5WQ3T3wJu1BvJsMp+tsaVkyeK0YhZOY+2TciJ6DWbKjOqLcXpiIbsDrDULvRYEyFU/i9YsVM3tVwa/ggHyfd4N67Mb6eXM4STqbL6k2HqTdJ98k/FUkx0FY6dAAFQ+1GVjoVSRHwevIylkJ70L0bvG68Ygz1dKS8C9va6MMjIORCZjQVTtHX2rjiVJrVaA/6XRmvmwort7pcnLezKUA0lSGddde40KkNknFQSEK7UW+mI6myG2RLgw+/V7gyRj0dTtFXxhsA6Gz2u9IDdgKWDLUQokMI8SkhxHkhxDkhxD1OC6YTS5ksC/Hlsm6UxyPocCkrnYooF7Yc3GqoJ8MqKVTu3ptJLbcZu0IyrhyjNmR32b2XUhpJ3PX1RgihPDGXMupyOgPQEQzUGfUq/BnwmJTyCHArcM45kfTDnHe8Xj2piY4mv+uMBRhKW8ZYALQF/a6sAZ+OpGj0e/Kx3FLoyOcH3LXoNipvA2gPKtnDLpM9lEiznMmt2+xioqvZnbmN6chSWW8A3LtencCGhloI0QbcD3wQQEq5LKUMOSyXVlhxYcHFcd5wih1lYo2gGHUkmXFdmZhZmlfOhXVrrHTKQhLX3IDcZjCsJOPAnZ6YlJKpDUo6wTDUybTrdN4JWGHU+4FZ4MNCiBeEEH8rhFg7ydvF2KjUx0Rnk/tiXtFUmvhydkNvoC3oYzmbI5V2V5x3o9wAFLWRu2yTnAqnaGnwrTk+rBgBn4fmgNd1oY+pDboSTbjRE4ukMiTT2Q0NdWdTgGxOEnVhZ6VuWDHUPuB24C+llLcBceBXV/+QEOK9QoiTQoiTs7OzmsW0h2mL7KKjyX0xL3PBbWTs8mViLlt0U5FU2RgvFFfcuEz28MYhJzD1xmWy570BK56Yu2S3UikE7i6N1A0rhnoMGJNSPm38/1Mow70CUsoPSClPSClP9Pb26pTRNqYjKRp85eOkYDJqlxnqClxYcJehllIyHd441thmyB5JuUd2sJbQAjN84DK9CacQQo3vLYe2Rr/rmnU26sQ10enS3IYT2NBQSymngFEhxA3GW68DzjoqlWaYNdTl4qSgmFEqnSOVds9cZ6thGzca6oX4MsvZHAMbLLjmgBePgEjSXQbDStgG3JnUmo6k6G5uKDm/vBjtQT+xpQwZF5VGWiUnHS4ujdQNq1Uf/w74mBDiJeA48LuOSeQANmoDNuFGZmel8gDcaagnLW4yQggVK3XRfc/mJDPRpQ1jvFBIarkJk+GNQ06gchsAURex6mlDb/o2KEl1a7WQE1g/S1IEKeWLwAlnRXEOU5EUx3d3bPhzprGLJNP0tW6s5JuBqUiKznVmORejrbEgu1tgdZMB91UfmBMLrYQ+3JjbmI6k1j1oohim3oST6fw0vVrDqs67kZw4hW3fmSiltFSHDNDWqPatsItc8KnwkmVDB+5S2skNprcVo63RXUmtQshpY9k7gir04aYyMaXzG3sD7S71Iq15wGq9uklvnMK2N9Rm4X8lxs5ND34qkrS2ybjQUE9HUnhEYXZwObQFfa5KalmNk4LSm0xOEnfJmZWpdJZQIm1tg8zrvLvuvRWdb/B5afR7XKXzTmHbG+pKFpwbY9RT4SVLsns9gtYGn6uU1pxR4tsgoQWKUbtJ9kKJWAWs1CXyWy3pBHd6YlZ1HgqNXtsdrxxDbWHBFcfr3IB0Vs1ytrLgwH3NC1MbDAUqhtvqeafCKXweQU+zdUPtFr2pjJwY4QOXkJOKdd5lG7xT2PaGeroCduG2mNdM/nBS68bOTUo7FU5tWJpnwm1VH8obaCg7sdBEm0sZtRW9cdsmU43Ou0lvnMK2N9Qmu7BSxWHGvNwSK61kwYEZ53WP0lrt7AOVyE2lcyxl3BHntRonBfcZOyszSkwE/V58HuG+TWaLbvBOYdsb6ulIip6WAAGftY/aHvS7piW1UqV1E6OOLWWILmUqCtuAe5JalRjqfGmkizb4jWaUmBBCuEpvKinpBHfpvJPY9oZ6ymKziwnVUuuOB19JrBHcpbRWZjkXw21lYlabpMCFjLoCTwZMVuqeTQYq8CIbfa7Z3J3E9jfUEesZZFBK65YFZx5O2rHO4aSr4SZDXSkzclPDTn5ioUXZWxrdlduwOqPERFuje6qFNjqQdzXMGHUu554adiew7Q31RscRrYabkhPmTN6NZpSYaA/6XRPnrZRRm4lcNxiMSlmd1yNodZmxq8iLdFHFjXmakVWdbwv6kRJiy9ubVW9rQ23lCK7VcJMrVTEzcpELXklCC4pDH7W/95WGnMA9ITNzRonVDRLclZCzcmBAMfI674K80tfPT/O3377qyLW3taE2j+Da6LzBYrgpfFBprLHdRQm5qXCK9uDG8xpMuCn0USmjBvfUgZszSir2Il0gO1ThDTS6J7fxzy9N8cEnrzly7W1tqK0ewVWMtqCfqAtiXpXMKDHhJkZtdXqbCTd1hVYaXwcVunHDfa+0UgjMOSu1P8Ytr/MVyO6mRG6lm0wl2N6GukpmlHNBzKuSGSUm3NTKXKnSNvg8BLzumNswFUnRYWF6WzHc0spskpNKNsn2oN8Vx7hFkhlS6VyF5MRM5Lrj3leyyVSCbW2orR7BVQy3uODVxEndxC6sHMFVjPxMajcsuArjpOCeVuZK5nyYcEsbeVUesEvWKxiHUFeg85VgWxvqqbC1I7iK4Zbqg0pmlJhwy6ySdDbHXMz6vAYTbumsrDTkBO6pFpqKpPB7Bd0VzJZ2ywZfaQIaoL3JHSGzeIUNXpViextqY8FZLfUB93TIVTKjxIRbFlyl8xpMuGUm9VSF8XVQepNYzpKu8ZFW08bEQiszSky4hZVOVxFfbwn4EKL2Ol/wBqwTq0qwrQ11NcF9t2SRJ/OHk1qXP+DzEPR7a6+04SRQhaF2QfXBcibHXGy5Yr1xS35gsgr32y1J6PxcngqMnccjXLHBVxNmrQTb2lBXE9x3Cys1Dye1OqPEhBtKrabCqiyymntf6zrq6SqSceCekNl0lWEbqD05mYqk6GoO0OCznsQFd1TcFOaX1w11RZBSMm2cPl4J3DKy0upRSqvhhjrwSYNRV2zsXNDdl2dGFk5HKYYbGnaqKW+DwhF0bgj3VRPjdcMGXy05sYpta6irKW8DaG1QMa+aG+oqKg/AHUmt6UjlSVwohD5qWc87WUWcFNyRyI0uZUhUMKPEhJtCHzuqiPG6JfTR2uCj2cLEwmqwbQ11NeVtoGJerQ21P7+v2uL5tmDtW+CnDE+mkiQuqAWXyUmS6drNKpmuovIA3BGjrqZvAMDv9dAU8LrC2FVT3uYGL3IqXNlMoUqx/Q11FeGDWk/QS6WzLCbSVTFqN8ycmAonq/YGoLYu+GQ4RdDvzYcDrMINrLRaQw21N3bVJnHBHTo/HU05VvEBFg21EGJYCPGyEOJFIcRJx6TRiGrK20zUOiFXLauD2m8yUF0dMrgjIWeW5lXqDbghIVetFwm1N3Yz0eplb2+qvc5XG1+3ikpow4NSyjnHJNGMSo7gWo1aK60dZtTW6CO2lCGXkxXV0uqClJLpcOVJXHBHaWS1m0yj30vAV9sWeFNvKilvM1FrRm2naqL4GLdKK0Z0IGdMLHQqkQjbOPRR6RFcxai10tpiRsZ83uhSbcIHC/FllrO5qmWH2sd5q11w5nCjWmEqkqK7ivI2qH1uw07VRK1DZnPxJTI56Vj7OFg31BJ4XAjxnBDivaV+QAjxXiHESSHEydnZWX0SVolKj+AqRq2V1h67qK2xq7ZqAmpfw57LyaoTWgDtQV9tQ2Z2dL7GXqRZ0rmzwrJIqP3kxemwOU659ob6Pinl7cCbgfcJIe5f/QNSyg9IKU9IKU/09vZqFbIaqDGblT90qP2AnclwiqaAl9YqSn1qrrQ2XVio3SZjlxnVegB/paNli1Hr3MaUmcQNVq/ztZK/mmFSlcKSoZZSThivM8Bngbsck0gT7Chte9BPMp1lOVObuQ0mq6s0oQW1H/toMmo7zChcI9mnbTYt1DpkVumxc8VoC/rzuY1aYDJSXRIXau9FOt0+DhYMtRCiWQjRan4NvBE47ZhEGpBYzhBOpm0xI1CHnNYCduOkUDtGPRlO4vUIelsrT2jl63lrKDtUl8SF2jZeLGWyzFd47Fwx2hp9Nc1tVHqaUTHaa1wtNB1J4RHQ02J9YmGlsMKo+4EnhRCngGeAf5ZSPuaYRBpgZr93dlTPjKCWD776DHKtGy8mwyn6WxvwVllxUktWaqcsEmore6WHCa9GrfXGjqEuhPtqt8n0tjbg8zpXm7FhQEhKeRW41TEJHEAhoVVljDo/SH3zH7wq9bHhwta4ldnOgoPastLJcAqfR9DTXF3jgpqnrY60qsaFt4N8yKmjWp0v6M1ubVJZQzYnKz5oohi1Dn2oiYXV3Xer2JbleZOa2EUtjN1cbIl0VlYte0tj7TYZMHIDVRoLqDErNdr2q60/bw/6yeYk8eXNb4G3G7apJaM2D+StNvnf6PfS4PPUzFBPhJPsdLA0D7apoa52HrKJWu7QE/lNpjql9XoErY21KROTUjIZTjJgI6listJaQIc3ADXSm1D1SVyobW7DLrGC2lWtSCmZDFVfYWYV29JQT4bVXNtKDictRi3LfSZD1Y0ILUatamJDiTSpdM4Wo67l4QF2krhQW09sKqwO5A0GqtX52lUL2SVWULupkZFkhmQ6W3U+zCq2raHWseBq8eAnbMYawTR2m7/gdDCjWs1Zyc9ytsnqoEYbfJWDsEzUcpOZtOlFgqpaqYXOT+Rnr9cZdcWwU0MN0ODzEPB6amPsQkkafB46myqb5VyMtsbaHBJb7YEBxWhr9BNdypDd5HreSKq6Wc7FqGWcdyKUsrW5Nwd8eERtyMlUOEXAps7XKreR1/k6o64cU+GkrRsnhKhZzGsyrBacnaqBWoUPdDCjWhk7u6V5UNuKG7vegMcjaK1Rxc1ElRMLi1GrrlC7uQGr2HaG2pzlbNcVUUmtWiht0hYjBYOV1iAhZ6fZxUStWuB1hW1g8ytuUuksC/Fl25UHtWKl1c4vL0YtGbVdnbeCbWeo7QwFKkatYqU6Msi1OuzTbrML1C5Wamd+uQmzNHKzZdfhyUDtKm7shiqhUH+/2ce4TYbs67wVbENDrSdmVIvGi0w2x0w0xS6bsrcbcxsy2c2dVTIZsldDDbU7aHVSg6GuVWmkjtwA1EbnCxML7elNe9BPTkJsk1vg7fYNWMW2M9RT2tjF5rtS09ElchINxk6x0s1WWrtxUlCndcDms9IpG/PLi1ELYzdpxEnt6k0twgfz8WVbDV4matVNPKkhVGkF285Q6wt9bL4bqKOGGooH8G+e/Gazi904aa0aLybDSS2D32tRz5vvSrSp87Wov7dzmlEx8iGzxObJr3TeXrWNVWxDQ52k00bhv4laxLx01FBDUfhgExed2eyiw4WFzWfU44tJdmlYcLXID0yGU1p0vhZnD05oDNvA5ur8QnyZpUyuzqirgZ2TXYrRHvSTyUkSmzi3QT+j3jylLcyhtid7U8CLzyM2VXYpJeOhJLs6mmxfq70GzUZ2DskoRvHZg5uF8UWl83Y3yVo0G+lK4lrBtjPUY4tJBjt1MKPN36EnwylaG3y0NlZf+A+1YRd2hwKZqEUNeyiRJrGcZZcOvanB6UATIT1x0sIc9s3baMZDSRr9Hrqa7c1yrkX9/YRBrJxuH4dtaKjHF5MMdtpnRm2NfoKkSI29pEEqa5gI2WvUMdHe5KeTCEuhKQ1SWUNBae0bu/ZGH/tnvwrJRdvXsoLxkMnq9Hhi6VQUsptnMKYiKT16E/SzR0yTmDinQSprMENOdsfCKnIiEXMXNu3eT2qKr1vBtjLU4WSa6FJGS6yxhxCfCfwmQ//4Jph6WYN0G0OnC/vRwO/x6NdeD9/7Pxok2xhjoSQBr4feFvuF/+/mi/zkxG/CP73fvmAWMJZ3v+1v8HdEv85znvcg/2A/xJw/5Dm+lCGkocELoMOX4eOB32HXPz4K81c0SLcxxkNJdmkgVq1+yT8E/js/9NQPwhP/U4NkG2MynMLvrX5+eSXYVoY6H+/S4MLuu/J/OSjGyfqC8J0/s309K5gMJ7W4Uc0LZ7nZM0za0wjf+gPIOu/Kji0m2dUZrHqWcx6xWd4T/zAh0QFnPw8j39UiXzmY3oAOvbl5/jEisgmxFIEzn7V9vY1gegM6wn0Hr36EnWIBKXPwxV+yfT0rULkB+7J7xp/lHs9ZEt42eO7vNoVVm5VCtnXeAraVoR5bTAB6lLZt5mlelvu4uucdcPrTEJ+3fc1yWMpkmYsta2FGnpc+zjI+Ht/5PkiF4Pr37Au4AXTlBhh7Bh9Zfqfh34O/Cc5+wf41N8B4KEnQ77U1FAiApSgDC0/xiewDLHcdgdOf0iNgGRR03j4r7Rn+It/J3sS1fe9SG+Ry3PY1yyGxnGEhvqxHb658nQwePtP/CxCbhovOnxY4tphkUIMXZgXbylAXYo02H/xygobpUzydO8rlrteAzMH4SQ0Srg9d2W8ALn+N5zy38p2mB8DbABe+bP+aG0BXeRtjz5IRPr63fAB23bEpm8y44Q3YPj7r8tfw5tI8nj3B3L7vh9GnIepsnsAM2+y2a+yWEwQWL3FSHuZ62x2QS8P1pzRIuD4mdK1XgCtf54L3CE8EXgOBVrjyDfvX3ABjiwk9m4wFbC9DvaiYkd0MMmPPIHJpns4d5ar/EAgvjD2rR8j1/qS54Lps7tCZJZi/zEjgIHNLfth7L1z7lgYJ10cqnWUutqSJUZ9kpukws0se5J5XwdRLsBS1f90y0OV+M/ECOY+f5+UhprtO5N9zEmOLSQI+Dz12cwPTpxEyx+ncPq4Ej4HHB8Pf1iPkOhhd1BS2SYVh4gXOBW9nMZWDnccdv++pdJbpyJL99WoR28pQj+liRoZRPue/kYVlP/Tf5LihHjVc2N1dNpV2/jLILLPBfYSSaaW0sxcgs2xfyHUwll9wNpU2m4Hx55nruIV0VrK0827lzYw57M2Eknq6y+YukW7fRxYvk40HAAGTzlYNjS0mGOzQkBuYeBGA854DzKf9ypsZ/o59ActAW05p7jIgmWk5rGrYd94G06cd1fkJjbkBK9hWhlobM1q4Bq0DeBvbVE3s4J0w/jzknBtyNLaYxO8V9LXaTCbOqNKqSOtBQoll6D+m3Ni5CxqkLI1xXcm4xWFIx4l3HQMg3HXc+APOGWqtcdK5i8juQwAspAPQfRAmT9m/bhmYYRvbmHwRmntJNvQrYzdwK8ycBQc7c8dDSXweDTq/oCpUEi1Dar3uvA2yyzBzRoOUpaGNnFiEZUMthPAKIV4QQnzRSYHsQFvMaOEqdO0vDCPfdTssRWDxmv1rr4PRhQS7OoL2xyXOnAPhJdW+XyntjpvV+1On7Qu5DrQlcReHAch17QMglGuE9t3KI3AI2uKk2TQsXsPXdwNgNBsN3KpCNw5iTFPfADNnof8YbU3GUKm+o7Acg/Co/Wuvg/FF1TdgW+fnLwOCdNvewnoFRa4cwpiusI1FVMKo3w9sXiV8hUgsZ1hMpPWwi4Wr0LmvcFJKj1p8zF2yf+11oG3BzZ6H7gO0NjcTSqSRXfvB16hcQYcwtqiJGRkbobdbGepIKg29NzhqqMd0ud8LVyGXwdd/hIDPozbJgVuVoUssaJB0LRLLGeZ1eQOh69A5VBgq1XtUvT9z3v6114E2D3j+MnTsoaW5mcRylnTrbmhoU2vBIYwuJvB7hZZxFVZgyVALIQaBR4C/dVac6qGtamI5rsp7uvYVxj72HFTfm7toU8r1MbaYsB+fBqW0PYfpaFKzSmJpFDtysGlnfFHFeG0zo8Vh8DUS7NgJGJPQem5QG6RDYSfzKCXbemPqRs8hY6BXRt334u9pxrguVrcUg8Q8dOyhPegnlEhD3xH1vVnnuJmqFNJATuavQPfBorEPGeg+4Dix0qLzFmGVUf8p8CvAuqtFCPFeIcRJIcTJ2VnnO7JWQ1vMaMEIb3TtKxxpFeyE5j7HFlxyWdVQa2HU4XFoH6SjSVW+hExjN3/Z/rXXgbaQU2gEOvbSbsieZ9SZJISv279+CYyHEng9GpiR2cnXfUCNyE2mlbEAx+69Np03wxsde+gI+gkll5XOt+xwjFEvZ3JMR1P2PRkpDUN9YOXkxe5DW0PnLWJDQy2EeBSYkVI+V+7npJQfkFKekFKe6O3t1SagVYzpysKaceiu/SsHqfccdmyH1hbjTYVhOaoM9QqlPQCRcUgn7YpaEmO6aqgXh6Fzb37BhRJp6DWZnTPhj/FFdV6fbWYUmVDudmN7YahU+x7w+B001EalkF29CRmbYMdeOpoChOKGzvcdcYxRT4VTSAmDdvUmPqd0vuvAysMDeg6pDWg5oUHatRhdSLJ7kxKJYI1R3we8RQgxDHwceEgI8f8claoKjC9qmjVhMurOfbQFfYUjrXoOOcao9TGjMfXativPqBcTy9C1X72/oD8ZupTJMhNdsi+7lLA4Ap1DtAX9CIGqWuk9rL7vkKEe1dVRGRmHtl1A0eEBXh90DjnKqLXUUOcN9R46mwJElzKksznoOuCIzoBGchIZV6/tu1aeAm96MwtX7V2/BLT2DVjEhoZaSvmfpZSDUsoh4J3A16WU73ZcsgoxtphgZ4eGvvvIBARaINiRZ3ZRc4dOLjjSSq6thjpsKu1gvh06lEgXGWr9g3byMV67SptcVJU1nUN4PYL2oJ/FRFq54I0d+YoQ3RiZTzDU3Wz/QpFxaFOx9RWjTrsPwrx+YwFmC7OGGurQdZVwbumjs7lIbzr3qhEEqbB9YVdBWxI3OqleW3euHHVqlEkyr98L3uzSPNhGddSjuqomohPQOgBAZzEr7VSVCE4YjLHFJA0+Dd5ApMCozbMHQ8kiQ+3ARDTtzMhgpV1NAXXfQRmM0Ii965dAbCnDXGyJPd0a9CYykTfUK06w7z6gNkgHkqFjiwk9VU6h66oMUoii3MYydOxV31/Uf+9HFuL4PMJ+yCwyoV7bdq48PKDbLADQ783onClkFRUZainlN6WUjzoljB1cn4+zV8eCi05B6w4AOpuLDbWhtA4YjNEFlZiw3VEZHlPt7q07is6QW4ZgBzR1O+IGaqsnNWdiGJtkR5O/YKg79hTcc424Pq8WnG29ySxDbCa/ybQZ521KKZWhzqQKG5FGaBuEFR6D9kGAvCe2mEirsA04Qk6G59Um4/Pa5IqRCaXzLX0rk4mBJpUMdWK96hr3UAG2BaMOJ9IsJtJ6XNjoZJ4ZmUq7EE8rYwGOPHhtNdRhw/32eGnweWkKeNWCAyPeqN9QD8/HCXg99qf+5V1YtUl2NQdYNJNaHXuVodbcJXd9QU2H29tlU29iU4BcwaizOUl8OVswdpr1plBDrUFvYjPQ0g+s9iKdIyfX5xPs1bVeW/rB46XRb+h83NkNfmwxoW32ulVsC0M9Yi44u8xIypWM2lTa+DI0tEKwy5EHP6qrhjo8lmd1oOQPmYa6c8gZF3ZOyW67aiI6rV4Ng9HRFFDuNyjZMylV364RIwajth36CK8M2xSqVorCB5r1ZnhOkzcgJcRnoUVVanU0Fcke7ISGdu16I6VkeD7OkLaQ00D+v51NARYc9sTGFjTNXq8A28JQDxsLbqjH5g6dWFAzAloVM+oqDn2AevCalTaaShNKpDXF1ydXKK0qLyySPTKu/RABteA0MaNgJ/hVPXNnk79owTkTKx1ZSNDZ5M8b1qpRVHkAxRt8Oh9SIKS3FXt4XpET2/d+Oabq1Jv7gGJGbW7we7WHPkKJNNFUhj06QgfRyXy4DExPrEjnw2OQ03tY77CuMGsF2BaGemROKa3tB7/K/W4KeAl4PQWD0blX+w5tsjot7CI+l19wAJ3NfhbySrsbZFYlSzUhz4zsbpCg2HLLjvx/O5sDpNI5UumsYy74yHycPbo2GcgbjO4WZezm40vgazBipXr15pqh87bvfWxGvTYrRm3qvJOJXG2bDECkEKoEpTcLxYY6ly48Hw2QUjI8p4mcVIBtYaiH5xMMtDfS6Pfau9CqBSeEoLPZvzbmpTGDf9VYcPt6WuxdKJ2CpXDehQXDDSyWHbQyu+nIEql0Ts8mE53Mb5CwKlZqyq6bUc8n2KuD1cWm1QENje0AdBln6K1MhurfZHpaGmhp8Nm7UNzoIjb0RghBR5O/0PRi5gc06vyIriTuclzpfDGjXuGJmTqvb5OcjS0RX86yTwc5qQDbwlCPaKv4MAz1qphX3g3s2AvZJYjP2P9bBobnNMXXzQVXxKi7mwPMm4a6Xb/SmsxIT1JoepWhNqoP4mnwB1XsOjRs/+8YWM7kmAglNXoyvWBU7XQZm8x8zLlY6fBcgn09OmRfqzedK0ojh7TnB0bmEwihoWoiXym00hNbkYQGrff+2qwmT6ZCbAtDPayracF88EZCCwylja+Klep88HNxdnUE7XsD+QVXYNTdLQ1EUxmWM7lCrFTj2MqRedMbsHnvczlVObEeowbtxm48lCQn0RP6KErGgSrP83rEStk15weu6coNrAp9gEoorkhCg1aPYGQ+zo42DR5wfE69riInsaUMS5lsUX5APznZVw99VAazaUELq4vPqi44X6Hspqs5sNaV0uiCX5uLM6STGbUUlHZFMtTfaLBSnbKrUY8D7TYHGiUXIJdZE6OGYkO9V+t9L3gDmsrbigydEGJt2CmX0RYrjS9lmI0u6WF1+Q2+J/9Wd0tAxdfBkUTuyEJCz31fFbaBgt6EEmlD5/XWUps6v7Njc8abmtjyhnokn5jQ9OCLFhyohFyeXWiupZZScnU2pifeVYIZdTeXcsH1MurdnU32mxZMt7pok+nIhz6KklrhMW2sNN/soiNGvSqJC+rer0jkgjZvRmsyLj6ryk69hcqX7uaGQsgsT06G7f8tAyO6vIESXqQZdloo1hudjHouzp4uDTpfIbaBodZUCwuFWGMROo163mxOqm6n5l5thnoxkSaSyjintM2rlLZ9t2Y3MKGX1RV7A2actzjsJLPaOvxG5hME/V56W202LZh1yEWMFFZX3OgNmZk11Fo8sVXeAChGHUqk1WAmf6NK1mnSeeUBL2tar4beNBXufedqnddcUjs8H9/0RCJsI0OtLfSxesE1BchJCkN2OvTt0GaJ1f5eTbIHWtRmYmBFmRgU1ZXaz+BLKfUlcfOxxoLB8Hk9dDb5mYsZsmsu0bu+oJiR7bb9VEiVgLWsZtRFrFRzrFRrEjc+u1Z2o+NuRW5Gk7Eb0e0NNLaDL5B/aw050ZgfyOWkvr6BCrENDLWmMiUoGfrIG7tYkbHTpLT5WlhdSaFVsptlYitc8FzaaHm2h9noEonlrGPeAEBPSwNzUWeaXq7MxjVtkGs3GVjVeJGvWtEj+/BcnN5WTTpfQm96DGM3FysOH+gy1IYHrCXkVCJUWSoJrSk/MBVJqXLUOqOuHNfmNLG6bEZ1Jq568KZrPFvM7DR1Ow3PxfF6hJ7hLvGZNcyoI+jHIyjhgtuPlWrrBgVl7IRXJXKL0NPSUPAG2gdBeLSw0qVMlpH5OAf7bNauQ8ncACgXPJRMq5AZaK1aGZ6P66s6iM+ty6gL9363atXWwEqvzsYADZVCUDI30NmkZpnPxVbF2DXc++F8z0PdUFeMK7MxDvZqWHDJBUCuCX2Yg1dmo0WMWlO307W5OLs7g/h1JCZKxNc9HlV9sCYxpFFp9STjZtV0P8/K+9DdEigsOK9ftfZrSMhdm4uTk+gx1Ot4A93NAXUWQkJ/fuDaXEJPfNpsklql86YX6URX66WZGLs6gjRr84BXyu7zeuhqChRCZhrzA9fMsE3dUFeGhfgyc7FlDvU7t+DM0zPW7tB6DIa23bmECwtGeWFsVaxUw/mDl2djBHweTd7A2k0GzNDHUuGNDj3G7vKMYnWOGuqWEhU34XHbnpj2clRYw0p7mlfpfLtRtaJB5y/PxPTcd1hX53tbGwrEqn0QEFpCN8NzcRp8HgY26eTxYmxpQ20uuEP9rfYvts6Caw/68XlEYYfW1OGndU5GNqNOkV7lwoIy1HkXNtCsMuQajN3F6SgHelv0nMJcghmBWnDRpYya9wEGK9VjLISAAzo8sfgsIJRHUIS+VrWYZ6LqBBxdntil6SgAh3RuMqv0pi3ow+cRK/MyYNubyeYkl2diemTPZpQXvJGh9jWoRipNxGqou3lTp+aZ2NKG+qJWpS2dFPJ4hHLBV+zQ2Gal0xGVjNPCqPNhm7VK29fWWFBaMFipfaW9NK1pwUHJpBAU1YEXu+AaMviXZ2Ls7myy3xkHRtimS52PWIR8biO62gW3d+8vTStycthBciKE0vn51Z6YTdnHF5MsZXJ6GHXCOBKvxAbf09JQIFagNngNXuSlmRgHdXjvVWBLG+rLMzGaA177nXFQskPLRG9rQyGZmK+ltqe0F4xNRsuCWyehBdDX2sDMCkNtf0BQbCnDeCjJYV1KWyb0ARRtkmas1B4r1e9+r/Vk+gxDnb/3ZtOLTW/mwnSUBl0hpzJ6o8oLDdn9QfUZbRq7y7MGsXIwVAkFRi3NgyY0hMwSyxmuLyS4Qcd6rQJb2lBfmolysL/Vfi0sqAfv8a2pPID1dmh7hvrilEZDbQ6JKhH66GttILGcJbZksFCzltrGaSlaQ07pFCxHS26Qa+vA7Xf4ZXOSq3OaKj7A2GTWyt7c4KMp4C2KlZqy2zMYF6ejHOrXFXIqY6hbAsyajBq0eGKmN3CwV6M3UELne1saWMrkiK7QeXv5gcszMaTUtF6rwNY21Lrd76aeNZUHsKqeF7Ts0Bemo/S2NuQL9G1hnbANQF+bwewiRqy0fY+ahmYqehW4qNMbSKwve4FR6ysvHF1IsJzJ6akUgpINIyZWxEoDTVryA5emYxzu02Qs4nNrmqRM9LU2FnQGtJCTSzMxelsb8gcv28IGjBpYuUnm0oWha1XgQp5Y1UMfFSGcSDMTXdJnqGOl46RQqOfNFdfE2mSlF6aiHNmhacGVDX2YSa1ViSEbBuPSdJSAz6OvaQHKL7jYqvyADdnzFR/awjbr640KOxUZO5uzVsLJNFORlB5PBtatmgDY0a5CZgWdNxi1ja5WbYlEKBuqXBMyMzd4GxvNRUPntVTbVIEta6gvzWhkdbBmVGUxeloCpLOy0EZuk5Vmc5JLM1GNss+AN5AfXF+MtbFS+4OlLk7HNFZ8rM+oG/1eOpr8TIUNY+cPqp+zET64PKuxNC+dgqXIusZuBaMG200vl2c0s7oSTVIm+tsayeYkc/GiaqfsUtU6L6XGig8oG6pcs8Hn8wPVG+oLhveuReerwIaGWgjRKIR4RghxSghxRgjxW5sh2Ea4pLMWFsoyox1GsnI6X2plLzE0upAglc7pS0yYHVolYvV5Rh3RIzsoRq3PWKzPjAB2tDUyGV7lgttYcJemY/S1NtDW6Kz7DUb4YHXFjY1ZKxemNFZ8wLpJXFCGGmAmoic/MBVJEVvK6F+vJXR+bejD9MRskJOpaM0SiWCNUS8BD0kpbwWOAw8LIV7lqFQWcGk6RtDvZVeHhtO7oazSmlUleYNhM3xw3oh33aAz9LGOoWsL+gj4PAWlbWhVh8hWaeyiqTQT4ZReTwbWlb+/rZHp4lhph71Y6aWZqJ6qAyib0AKjDjxVVAdu84Sgi9NRmgIadb5M6MM01Hlvpt3eBl9oMnJ+k+kI+gl4PUybm4zZP1Cl3oQTKuR0WNd6rQIbGmqpEDP+6zf+VR+c1YRLM1EO9rXoKT5fjkM6vj6ra1cLY43SVvng8/Xfm+DCCiHWKdGzt+C0urC+RpXUKoGB9kam1iS1qssPpLM5zk9FuXGgrVppV6JM2AYKzK7ASu1t8JdmohzSpfNlmqRAeTJQwousUufNZJw2nS+zyXg8gv72BibDycKbNgoALhohJ7czaoQQXiHEi8AM8BUp5dMlfua9QoiTQoiTs7PVVxRYgZSSc5MRfYx0gwXX19qAEEWMurFNxYOrfPAXpqPs6WqiKaBh3gGUZReg5F/JSqs31FobLmDNeYOr0d/WyFxsSc1GBsVKq8wPXJmNsZzJcWzX2lh+VciXt5Xe4AuemGEwbLLSi9Mxffc9Mc96TVKg8jIeAdN5nW+HhvaqPbEzExH62xryiT7b2EDnB9qDTIb0hMzyFR9uZtQAUsqslPI4MAjcJYQ4VuJnPiClPCGlPNHbu/4N1IGpSIq52DI3a1tw5Q213+uhr7WBqRU7dPUZ/ItTUX2bTH5wfXmlnSqO85oztatgpWcmwjQFvHoaLmDdOmQTO9obkVJP48jp8QgAN+3UxajLx6h3GiGKCVNvbMi+EF9mNrrkQMiptOw+r4eeloZC+ABshZ1Oj4f1rdd1Dmsoxs72xsJ9B6NSa7Qqnb84HaWlwcdOHY11VaKiqg8pZQj4JvCwE8JYxctjYQCO7dK94MoZjOCqpNaeqpR2KZPl6lxcnxuVCkN2uayh3tUZZDyULHRqte+GTLLQhlsBXh4Pc2xnu77s9wabzA6NsdIzE2GCfi/7ejSWdPqbVQy0BHYaIbMJk9mZ+YEq9Ob0uNJ5fZvM+k1SJvrbSoSdqiAnieUMV2Zj3LRTk6Fejiv9Lac37UGmI6mVJbVVemLnJ1VeQ0tjXZWwUvXRK4ToML4OAq8HzjssV1mcnojgEXDjgC5GXZ5dAAy0Na5ipYbSVrhDX5qOkc1J/WGbMgtuZ3sjS5lciQmAlWXBM9kcZycj+kIHsKELm6+4WV21UoWxOzMR4ehAq8ZNZmbdkk6AYMBLV3OA8dBqT6zyTeZlw1AfG9R072Mb63x/KZ2v4r6fm4yQkzgQclpf9p0djaSzsmjcaXVTL7M5yemJMLfo1PkqYIVRDwDfEEK8BDyLilF/0VmxyuP0eJiDfS0EAxqG6kDJs9dWY0f7qjKxjj2q9Tm5WNGfOjUWAuD47o4KhVwHG8RJAXZ1qjDFhGkwqkxqXZ6NkUrnuEWXsbDgwpqMetJmrDSXk5ydiOhjdWDIvv4GCSpOPaHBUJ8aDbG/p1lPWSFYIieDnUHGFhMrPbGlCCRDFf0pM+SkzQOOla+2ARXugyK9yXtilZGTK7MxEstZbhnsqFRKrbBS9fGSlPI2KeUtUspjUsrf3gzByuHl8bBmVme6sOvHXQfaG4ktZYikzKaX6pjdqdEQXc0BBjt1lRWWnilcDLOcK8/sqoyVvmSEnG7WZaiXoqpcrYyx6Gjy0xzwMraYKHqzcmZ3fSFBbCmjz1hA2W5WEzs7Vie19lTlib08HtZ336Fsk5SJwc4g8eUsoYR5Xmh1On96PEx3cyC/6dqGBUa9JpFbpewvjoYAuHW3+xm1qzAdSTEbXdKXmABV6lNmdwYV5wU1qhGoutvp1GiYWwfb9cW7LDCjvKE2ZW9sN6pWKl9wLQ0+jcdAbezJCKGOKhtdKDLUVcRKT0+YMV7NG3yZ0Aeoe7+GUWeShZCVBcxEU0yGU5p1fv2GERNmwnjU3CTbqwsfnJ5Q4TLtOl8u3NexKj9Qpc6/NBaipcHHfl15jSqx5Qy1mVTRy6g3NtTmXAvzcM5qjviJLWW4OBPlVl1hDzDcwLWD64vRFvTR0uCzHSt9aSzMTTvb9A1Ozy+48sZOGWp7GfwzExF8HqGvjjeXVQOlNmTUjUSLPbE8s7N+783kuVa9ia9fh2zC9PrGVpOTClhpKp3l0nRUvycDZTf4ziY/TQFvYZMBw5upXOeP7dKo81Viyxnql8fDCIG+pgWw5MLu7VIsMs/sgp0qXFKB0p4eDyOl7gVXenB9MYQQ7OoIFhYcFEr0LCJtJBK1xaehMEyqpb/sj+3pauL6QmLlfOGlCKRClv/U6fEwh/tbafBpymskFkDmNoxR7+owWKmpN1XkB14aCxvJc406X2bqn4k8ozZlb+5VzUkVyH5hKkomJzmm1ZOZUTM+fOtPnhRCKL2ZLw6ZVVaptZTJcm4yone9VoktZ6hPj4c50Nui53BMExYYdXuTn/agn5EFdcAlQlTc7XTKjHfpTExYYEZQSAzlUSErvTStuVkEIDatXjcwdrs7gyTT2arP8MvlJKdGQ3o3GQslnQB7u1d5YlWcP/iykTzXqvMWyElbo9L5PCsVouJxpy+POxByshCqBBjqbmbYOJAWKKxXizp/fjJKOiv1rtcqsaUMtZSSF0c1l8pkM4odbWAsQC26kflVsdIKlPbUWIjdXUE9M6hNbFDeZmKoRyltvq60fTcsxyxXrbw8HgLQm/1e57zB1dhjGLvreVZamQt+ZTZGJJXhjr2d1Uq6FhbqkIH8UWvXjFPbCXYYVSvWNngpJS+Nhbh5V0eVgpa86Ib16yZ2d632xCojJ89fX6S7OcDuLk3Jc7BUbQOwt0eFzLJV6rxZoaV1g68SW8pQj8wnmIstcWKoS99FE3OA3DBOCsoVvL6wipVWxKjD+nfnMjMPirG/t5lUOldoYKiwlvr5kRDtQT97dXUkgmLUzT1lwzZQyA+MVZnUem5ELczbdRrq2MbVNqBOeulrbSgYaqhIbybCqgtXq7FIhdQgfQusdHdnifBBJYZ6ZJE79nbqbRaJla9fNzHU3cxyNldU+VHZIb2nRlW1irYhWDawpQz1s8MLAJwY0rngDPd7gzgpwN6uJsYXk2Tycyd2q915KVb+F1EjF8dDSX310yYsMmqT2V2dNQxGhbHSZ4cXuHOoU29SJWaNGQ12NiFEEStt7gFf0LLsz40s0tHkZ7+Og4RNWAx9gOHNzK1ywS0ai2evOaHzG1cKmdjf28yIcSoOAJ1DqqM1Fdnwd2ejSwzPJ/R6MlAY67sB1oSdKixLfeH6Isd3d9S0I9HEljLUz40s0h706ztGCSwzI1A7dCYni7Lg1o2ducnctkej0maWYClsiV0cMO7ZtTljU6mgU2s2usTVubheTwY27Owz0ej3MtgZzM8gRwjo2geL1yz9mZMji9yxRzOri8+owfXBjZ/nvjWx0j2WY6VPX1ugtdHHkR06E4kb1yGbONjXQjYnGTHl79ynXi3ce9OT0brJpFOWdX7IKCPN3/sKPLGZaIqrc3Hu2qdZ56vEljLUzwwvcMdezawuH2u0oLRGaZc5prQSpX366jxNAa9DCa2NZe9rbaA54OXKbHGstM3SJvPciNpk7tRtqGPTljwZgMN9rVwy7ztA135YuLrh702FU1ybi/Oq/eXj4BXDQh2yiX29zczFlotK9PZYjpU+c22eE3s79Z4sErMWX4fCQbTmeFu69qvXhY11/plrCzT4PPqb08ASsdrR1kij38OVGUPnm7pUpZaFcN8zhidzt269qRJbxlBPhpNcnY1zj/YFZ7KLjR+8Obksb6i7DENtwWA8dVVtMn6vxltegdIKIdjX21xVrPSpqws0+j16Gy6ktFR5YOJQfyvX5uKFcaedQ7A4vOFpKU9dVYOn7jmgWW8sJuOAfMglb+wstjPPxZa4Mhvnrn26ZTenRW6sNwf6VsneZZ2cfPfKHCeGOvWVREJF3oDHI7ihv5UL00aYxvTELGwyT19doDng5ZiuIVg2sWUM9XcuqwV370EHFpy/CRo2Dqe0NPgY7AxywZjJTLATgl0bGur52BIXpqPOsDqwbDAO9rYUNhmwbKifvDzH3fu6Cfg0qstSVHXoWWXU/S2ks0UueNd+NQ0tOln29753ZZ62Rh9HddYgg+WySCD/t89NGgYjv8GXNxjfuawMqv5NZgaERzHMDdAU8LGrI5g/a5KGVtVoYkHnz09FuffAxjH8imBhzkcxjuxo4/xk5Z7Y967Oc8dQFz6dxMoG3CGFBXz38hxdzQGO6ozVgeWqCRM39LdycaqyB/+kseDudYLVgaWEFqha1slwinlzoljnkGJGZWKlk+Ekl2divPqg5gVnoQ24GIf6TG/GOrOTUvKdK3Pcvb9b/6Gk8TnLsg92Bmlt9BUZajN8cKXs73370hztQb9eTwaUzjd1g8ca0z3Y11K472CJlT51VYUO9Ou8dUYN6ri7eWOWN6Du/eKwKstdB+MhpfP3H9Ks8zawJQx1Lid58vIc9xzo1t/KaaHZpRiHd7TmTwoBLBnqb12YpbPJr38CV4XGzpxlfGbCMBjdByCdKMtKn7ykNplX61baWGUL7mBfCx4B59cYu/Xv/ZXZGGOLSR64QfNBFlJWtMELITg60MZZ874HmqF1AObXl11KybcvzfLqgz3ObDIWwh4mbtzZxqXpaOHsx859ytiVwbcuztDa6NO/yVSo80cG1AZ/fqpIb3JpiIyt+ztPXFR/47WHnT0ApRJsCUN9eiLMTHSJh26wrlyWEZupSGmP7Gglk5NcmjHj1PvVGX6ZpZI/n8tJnrg0y/2Hex1YcEbYZp3B9athdoflDXXXAfU6vz6z+8aFGXpbG/SfF1dBWSSo2c6H+1t50Zh7Qdugqroow+y+cV4tuAd0681SZMOpf6tx40Ab56eihYajrgNlGfWF6SjTkSX9GyQYYRvr1711sJ1MTq70CDbQ+a+fn+W1h3v1hw5isxBoBb+12mazWiYve7eh82U2+CcuzjLQ3qjvxHQN2BKG+mvnZvAIePCIQ4a6AkZ9u1Fe9/z1kHqja7+a+bBOrPfl8TBzsWVnducKElqg2uAHO4P5SXIFpS1tMJYyWb51YZbXH+13wJOpjBkB3Lang1OjIWXsvD41r6TMgvv6+Rlu6G/V37Bg4bCG1bhxoI3EcpZr+Rj7vrKyf+XMNELA6xzR+emKZDc9QXMEggo7yXV1/vREmLnYEg85IbvFkk4TXUbDyqlRQ+dNT2wdcpJKZ3ni4iwP3NDnivppE1vCUH/13DS37+nU23oNG57EXAqDnUF6Wxt43qgR3cgF//LpKXwe4YzSVhhfB7h5V3thwbUNgrcB5i+X/NnvXZknvpzlDTc6ZCyEZ8P28WIc391BOJkuMnb7141Rz8eWePraPK93RPaND2tYjdv2dABw0qinp/uA2qzWaRx5/Ow0t+3uoE/XDGcTUkJ0Glp3WP6VgfZGeloa8vPI82Wp6+j8V85O4xEOeDJQsQcMcOdQJ88ML6ihXi07VLPUOp7Ydy7PEV/O8vAx6/dnM+B6Q311NsaZiYgzN26Dk5hLQQjBHXs688X85Qy1lJLHTk9yz4FuOpo0bzJguSuxGHft62JsMakmonk8Sv51YqWPnZ6iKeDVn7kHI6HVYzmhBYVmoRfz3oyR1CqRDP2XM9PkJDxy804d0q5E3HpJp4mDfS10Nwd42qjPzYedSngzY4sJXh4P88abHND5VEiFbVqsX1sIwfHd7bywglFT0thJKfniS5O8an+3fmIFlmaAr8aJoS5mo0tq/IOp8+t4kY+dnqK10ae/DNgmXG+ov3BqAiHg0VscXHAVMGqAO/Z2cn0hwUwkpUqcGtpLGuozExGG5xO8+diADmnXIjZdsdKaRvd7Rn0x3aVjpal0ln9+eZKHb9pBo19jHawJC2M2V+NgbwvtQX9B9q79Kl6cWFjzs198aYL9Pc0cHdAcW4eKGo1MCCG4a18XT18tYtRQ0gX//IsTADxyswN6EzVyAxUwaoBX7e/m2lxczVtp7lWNIyW8mTMTEa7Nxfn+Wx1Yr1CVF2l2Fz47bJKr0mGnVDrLY2emeMPRfr2lqBrgLmlWIZeTfO6Fce7e15U/5FQrKmh2KYZZy/3Ni7NFRfRrH/wnT44S8HmcWXDZtDIYrZUtiMP9itk9daXI2C1cVYPwi/CN8zNEUxneetsuXRKvRIVxUlANDPcf7uWbF2ZUnHodF3x0IcH3rs7zluM7nYkzxiorizRx974uxkOGN7OO7FJKPv38GHft68rPg9aK2JR6tZjENWHmWJ64OFe2ceQzz4/j8wgedsIbyKYhaW3SZTEO9rbQ1RzgyUvGc+s+YDRLrdT5fzkzRTSV4YfuGNQksD642lB/58ocw/MJ3nFitzN/oIJW2mLcONDGzvZGvnLWYCclSvRS6Syfe2GcNx/bQXuTpgNJixGbAWTFzEgIwb0He3ji0qwaLtV9ELLLKotfhL9/5jr9bQ3662BNWBzItBoPHellLras5hyvE3b6xLOjCHBOb6KTKmzjrey5vtaI2T5+dlqdz9m2a43sJ0cWuTob5wdvd2iDrJJRH+xrYaC9MV+6VmrWSiqd5dPPj/GmYzvodCLskTDIRYVepMcjeN2RPr52fkaV1XbtL6nznzw5ymBnUH9jmga42lB/5LsjdDcHeOQWh0IHFRbPmxBC8Pob+/n2pVmSy1n14EPX1Y5v4LMvjBNJZXjnnXt0SlxA1GBGrZXfm0duHmAutsx3r8yXrPy4NB3l25fm+LF7hpzpzJKyKkYN8NrDfXgEPH52Cjr3AmKFsUsuZ/n4s9d58Ia+/Ll52hGdgrbK7/u+nmZuHGjjn19SoQ2VH1gZ+vjbb1+lo8nvYOigOkYthOCBG/p44tIssaWMUV54bYXOf+HUBOFkmnffvVenxAVEq5Md4OFjO4imMipsVmKDPzsR4TuX53nXXXtqfuxWKbjWUJ8eD/PVc9P867v36J0VUIzYjDpaqKHyOObDx3aQSuf455cnjSL6TL5cKZPN8VffusKtg+28ar9D07fMJpUKmRHAAzf00tro43Mvjpespf7Lb12hwefhXXc5tMmYdchVGOqu5gCvPdzLJ0+OkRZ+1QY/fyn//X945jpzsWV+5rUHdEq8EtGJikNOJh65ZYDnr4dU+GNVUuvKbIzHzyqdbwpoPM2lGNFpY2RC5Tr/Q3cMkljOqo2m94hqHDHCH5lsjr/4xmWODrRtgs5Xfu/vO9hDS4OPzzw/VjKR+1ffukJzwOvcJmMTrjTUUkr+4F8u0B7085Ov2e/cH4pOQttOSxPQVuOe/d0c7m/hQ09eQ5qsdE4ZjH945joj8wl+7sGDztVi5pW2cmbX6Pfy6C07+eJLk0zm2lViyDDUZycifPaFcX78viFnsvZQ0WjZUvixe4aYjS7x2OkpZTBmzgMQSizzF9+8zN37upwdTxmdqmqDBHjb7bvwewV//cQV5c0k5iEZAuB/fOkczQEf/+a+fRqFXYXYlGKkVejl7Xs6ONTXwseevo7svUG9Oavu/T8+N8bwfIJfev0h53Q+YngiVXgzjX4vP3znbr740iRj2XZF0IxqpxeuL/KFUxP86D1DzoQpNWBDQy2E2C2E+IYQ4pwQ4owQ4v1OC/WJZ0d54uIsv/C6Q7QHHbxxkeqZkRCCn7hvH2cnIzw23aHenD3HeCjJHzx2gVcf7OGNN1buollGdAqEt+KElomfe+AAUkr+9KuXoVsxu1Q6yy9/6hQdQT8/98BBzQIXIb/JVHd/7j/cy8G+Fn7/sfMsdx+G+UvIbJrf+MIZQok0v/H9N2kUdhUyyyqJ21ad3gy0B3n7id188tkxpv1GHHrhCp9/cZyvnpvhfQ8epKelQaPAq1BhDXUxhBD81Gv28dJYmC9OGIx89gIToSS/+6Vz3DXUxRsc1flJVXtf5Qb/k6/ehwD+6CuXofsQzF0ksZzhP3/mZfrbGvj5hxzUeZuwwqgzwH+QUh4FXgW8TwhxoxPCJBIxPvnky/z6509z74Fu/s29Q078mQIiE1UvOFCu4PHdHfzql66z1DRA+PrL/NgHnwYBv/PWY852NkUNZlRBHXIxdnc18eP3DvGJk6Ncze0gM3OR933sec5MRPjDt9/q8AY5rl7bqsuuez2C//G2mxlbTPLRy0HILvPHn3icz784wb976BA3OjmaMlZdMq4YP//gQZoavPzqt1QL9vPPPcV/+vRL3DXUxU+9xkE2DQVGXSXefsdubh1s59e/fI2llkGiY6f5sQ89QzYn+cO33+qszkcmlOwbHN22HnZ2BPm5Bw/y2RfGOZ8bJD11hvd+9DkuTkf5vR+8hRadhwdrxoaGWko5KaV83vg6CpwDtKekk8kU3t8fYuax/8kdezv5y399h7NB/VyuEPqoEj6vhz9753FaG308Fe1l9PxzzESW+NsfO5E/+soxRCdtGQuAX3n4CK870scXJloRoRGevjjG7/zATbzuqIOsCIoMdfX3/s6hLn7nrcf44qQyyhdPP8NPv2Yfv/A6h1mRjTipiZ0dQf7iR27nmUgnS9LPyWe+w5EdbfzFu2/XO698NaSE8Di0V19+5vEI/vxdt9HW6Oc74R5GL7zAVDjFh378zvwhxI7BJrECeP/rDvF9N+/g8xPt+GMTnBse4/fedgsPOtFFqREVaYUQYgi4DXi6xPfeK4Q4KYQ4OTs7W7EgwWAjiZY9/MjeKB/7qVc5HytKzKsSnTZ7e87e7ma+/P7X0HvgOEd8k3zzP7xmc06FiE5VFZ8uht/r4QM/doLXvfZBvELypXf18qP3DOmRrxzC42qWd8Dewv7RV+3lj9/3wwD87n0+/ssjNzo/n8GMk9rcJO892MM3f+V1xNoP8LZdYT71s/c4G/IA1RiUSWrR+c+/7z52HDzOYd8kX/+lV29OSVt00rbOez2C//Mjt/P9b3gdAF96Vw/vuNOhMk6NsGyohRAtwKeBX5RSrhlQIKX8gJTyhJTyRG9vdQOIOvffTlfskv4pc6WQZ3X2S/9aG/3ceOvd+HJLdKfLD7LXhsi4Ftm9HsHNt90LwJ7MsO3rWUJkwraxMLF/Zx907KU7ae38RNswS8RsMjuA3tYGuvfdRk/88uYMqDdHe7bbv/edzQFuvOVOfLll+rJTtq9nCRF7HrAJIQQ33no3AP3JjQ8RcAMsaYcQwo8y0h+TUn7GMWn6b1KnMxtZcEdhurAaHjwAvUfV68w5Pdcrh6WomtnQrokJdO1Tg2qmz+q53kaIjOm777Ci8sNxRCfAG6homFRZ9N2o4sYl2uC1I2wvN7AGvUfU6+wFPdcrh6WYOtTWJqPOo303BFo2Z71qgJWqDwF8EDgnpfxjR6XpP6ZeZzbBYOQZtaZwu1mutBkP3uyoshFrXAGPF/qOwPRpPdfbCBoZNaBkn79U9tQObQiNKtl1hVj6jLz8Zuq8BkYNFHR+dhM2Sd3EyuMxNvhNIic2YYVR3wf8KPCQEOJF49/3OSJNv1FWNX3GkcuvQGTCKG/TNCe6oUU1X8xuoqHu0NiQ0nfT5ihtOqXyAzoNde9RlW+wcBaebYSu673v/Yah3gxvJjwGHn/V5W1r0NCq2PlmMOrwqHrV5UUC9B3dPoxaSvmklFJIKW+RUh43/n3JEWlaB1SSaeplRy6/AiYzqrK8rSR6N+nBmwPbdTFqUJtkfLYw/8QpaKj4WIPNZHbhUejQaCxaB6CxA2Y2g5wYeQ2Pxnh47w2bc99NnddKTm6ExFyhAcvFcFdnohAq/LEZjDo0YsyK0Ii+o6o7sWj+gSMIj6pjqGzUw65Bntk5fO91h21g8wx1OqXqqNs1GgshlMHYlJDZuL74tIm+o4pROx12Cl1XOq8rRg1KdtgS4Q93GWpQzG7mrKpzdhKh6+ooJ53oO6rmH5Q5g1ALwmP6vYHNyg+Yh6J2Dum7ZqBZjQ112hMzvQGdrA7UJjlzruxp8FoQHtO7QQIM3KpK/uYcDn8sjiidr7LZpSTy+QH3hz/caajTiXWPWNKCdEolJ3QzajPG7rTBCI3qjdWBakVv7nM+Vro4rJiRzhg1KIMxeUrvNVcj735rvvd9N6pBVWYc1glkllW1jc4NEmDn7ep14gW9110N3bkBUEPBgl2bE3ayCXcaanDWBTcXhO4H33tEnUE4+aLe666G7jipif4bna/8CI0oVqeTGYEy1KERSC7qvW4x8rkBzfc+v8E7eO/Do+oQ5i7NLepd+6GhDcaf13vd1XDCAxYCBm5xfoPXAPcZ6t6javCKkwZjcUS96n7wXj/suBkmXtR73WKkk8oF73RgJkT/MeUGOhljXxzWz+pAGWqAyZf0X9tEeFTpps5EKCidER5nWal5GotuvfF4YOdxZ2VPp1StuW5iBbDzNuVFplP6r60R7jPUgSboOeyssQsNq1fdoQ9QSjt5yrkYuxnjNYef68Su29WcaCe9GccM9XH16qQ3s3BVGYsKT3bZEIFm5Y1NOMhKzVCibkYNhrE7rcIrTsCJclQTO29TeSWXhz/cZ6gBdp2A8ZPOJVcWR1R3WQUnMVvGwHFYjjpX02tet9sJQ32Heh1/Tv+1QXVUJuadMdTN3aoaw0kXfP6yOrrMCey8XbFSx3R+WHWf6qwUMrHzdlXH7pSxMwf8O7XJgPMxdptwqaG+XS1okz3qxsJVxUh11pOa2GUkV8ZP6r82FCpKnGDUHXtVa7RTxs6Jio9iDJ5wbpORUg2aN08H0Y1dtymdN+PgurFwTd13J4ZWmcbOKb0xDuSg+5D+a7fvNnS+bqgrx+AJ9erUopu7CD0OPHRQLmxDG4yuGTCoBwtXVaY62Kn/2kIoVu3YfTcWnFPGbvBOFUeOODAYKzajPCWnGLXpzYw968z1F685w0hBhSSCXc6x0vlLSt+bHZjQJ4Ty4Mee0X9tjXCnoe67SblpYw6w0mxaGbuew/qvDaq2efAEjDq04BauFA6kdQK7TqjGEScGY81dBIRzm+Tuu9SrE8Zu/rJ6dere99+sjkRzYoPPZZUn5pTsQihP0ilDPXfZGTZtYs/dSjc3YzBWlXCnofb6lLG7/l39114cVgfROmWoAXbfreJ1qTXTYO1j/qozYQ8Te+8BJIw6wDBmLyj25XfodPAdt6jySCeMndOGOq/z39N/7cVhlSQ2Jzw6gZ23q2appaj+a89fcm5zB9j9KvXqlBesAe401AB771ONI6mw3uvOXVSvjj74u1TNqm5mlwqrpgWzZdoJ7DqhBvc4sUnOXSyMxnQCvoAKIThh7OYvqQS07hrqYuy5R1Xc6N7gzc47J+/93nuVzl/XbOxSEdW271TICVSM3eOD60859zdswsWG2njwupmdaaiddKUG71IPfvhJvdc1F1yfg4e3BppUieGIZmOXy6oYda+DngzA0KtVaacTxq73Br1t+6ux51XO6Lw5A8XJe7/b0PkRzTpv5jWcJFaBJmWsRxwgJ5rgXkM9eKdDxu68Ou+u0cEDUBtaFLO79oTe65r1zeYAJaew5x6VUFyO67um6X73OOgNgDLUMqufHU2dLsxDcQq771Ks/dq39F539rzyBBpa9V63GIFmFf4Y/o7e65qNb/0OkhOAffcrnXciXKkB7jXUgSbFTK9+Q+91J0+pTjCnse9+lVzR+eBnzqqKEifdb4ADD6omAJ0Mwxz21OdgnBTUBu8NwLDGTTI+pzrjnDbUgWaV37j6Tb3XnTnvbLjMxNCrVdOOzjj11MsQaIWOIX3XLIV9r1UbvEtZtXsNNcCBh5Rhjc/pud5yQk35MtuNncS++9WD1+kRTJ9VA3ycPsB1zz0qKXdF4yY58aI6qMFpZhRoUsbu8tf1XXOzWB3A/tfC1EsQn9dzvcySYtSbIfuBh1Si/tq39V1z6mXYccyZnodi7L4bfI36vRlNcLehPviQetVlMGbOqhjgwC16rlcOu+9WZ7Jd/oqe6+VyKvThdNgDVFXG3nvgikZjN/miYtNOVXwU4+DrVdWNeUagXZjDkjbDE9v/oHrV5UlOnVbekTnlzknkdf6req6Xy6lNcjPuu79RERRdsmuGuw31wHFVSK/L2JlTsjaDUfsaYP8DcPFxPW3B85fU4Z5mY4TTOPh6dayYjk45KRWjNudxOI1Db1Cvuhbd5Ck1sL65R8/1ymHnbdDUAxe+rOd65vyQXZtgqH0B5Ule/ooenV+8BssxVXa5GTj8sCo2cHqefBVwt6H2eNXNu/iYnoluEy+oDienY7wmDr1RldPpGHJkVgIM3mX/WlZwg3Es5nkNp65FxtWRRzuP27+WFfTdqE4yufiYnuuNPlVopnEaps5f/oo+nW/q2VydD13XcwCFWd66WXpz+I3q9dLjm/P3KoC7DTXA0UdV/bCOWO/1p5R75nSM18ThNwECzv2T/WuNPQuN7c7Wkxaj+4Cqu73wz/avlV9wm8DqQD3fo4/C5a/ZT2xFJpXh2X23Htms4IaHlc6PaKigGH9esenN0vkjjwACzn7B/rWufw8a2gsnsTiNrv2qKum8Bp3XDPcb6gMPgb8Jztl88LEZFT7Ye68euaygdYdq3DnzWfuu4NizRsniJj6yI4+ociu7h38OP6lil5uRGzBx4w+ocsCL/2LvOma32mYaalPnz3zW3nXicyp8tZmyt/SpNWZ3vYJBrO5ytnZ9NW56q9LX6NTm/U0LcL+h9gfhhjcrpbUz79ZkJ3tfrUcuq7jprarSxI4rGJtVv2+2um4Wjv2QqlyxazCufVs1c+ie41wOu+9WIz1Pf8beda4/paoBNitOCqpM78gjcOZz9nTerOPf/4AOqazjxh9Q+mrnWLfEgqpW2XuPPrms4Ka3ARLOfn5z/+4G2NBQCyE+JISYEUI4fEZTGdzyTnXEkp3Y0fCTaujNZrI6gBvfqhp3Xvz76q9hVgCYVTCbhf4bVe3wS5+o/hqxGbVRDW3yBunxws1vh0v/Ys8juPI1xRB9AX2yWcHNb4dUyF5C9Nq3VN39ZiVxTRz7QaXzp2zovLnJ7L1Pj0xW0XdE6fypj2/u390AVhj13wEPOyxHeRx4SB28+sL/q+73pVQu8P7Xbi6rA2jpVR7BqY9Xz44uf03NzB24Ta9sVnDLD6vZ2tWyI7PEb9/9+mSyitverep6X/5kdb+/cE1VARx6o165rODAQ+pgi+f+rrrfl1I1zuy9T//5lBuhuUclRE99ovqE6MXHVOJ/1wm9slnBbT+qqmWcPNatQmxoqKWUTwC1nf/n9cHtP6YeXjWHCUy9rOYUm5UMm43b36OqHs5XkVTMZRWr2//g5sanTRz/16r55eQHq/v9c/+kWvZrscn0HVUL/eSHqjsazWSztTDUXr/S+UuPF874rATTp9VaOVwD2UHJHp+pLoSQy6rPfeiNm7/JANzyDqXz1W6SDkDbyhdCvFcIcVIIcXJ21mbyqRRO/IQ6APSZv6n8d8//MyDULl8LHHhIDcv/7v+qPKl47QmIz8LR73dGto3Q3A3H3qY8gkpP+F6OK2/g6KO12WQAXvVv1YjSasJmZz+vqmycnP9dDne8R+n8039d+e+e+Zz63aNv0S6WJRx8g6qiePqvKv/d60+p024Ov0m/XFbQ1KVCTy/+vb4OUZvQtnqklB+QUp6QUp7o7e3VddkC2nep2NfJD1fWUp7LwUsfVzHSFgfksgKPF+79eVXTWumgppf/UcUZa7XJANzz86rxoFKDcf5LkEnWbpMBldhqG4Qn/6SyTXJxGIa/rfIjtUL7oGJ3z324MoMhpUoAD71mc5p0SsHjgVf9nKpWqlTnX/yYqhKqpc7f9wtKd5+pYpN0AO6v+ijG/b+sbt6Tf2L9d659Uy26O37cIaEs4tZ3qRDA137busFIhRWru/EtqsW1VthxDG54BJ76i8pOwTj5Qejct/mVNsXw+uE1/141rVyqoMPVTCbd+sPOyGUVr/4lSCfh239k/XeufF2dBHTru5yTywpu+1Gl81//b9Z1fimqNpljb1PVL7VC7w1w5FH43l/omzVkA1vLUPceVsr39F8X5tRuhKf+SiXiasnqQJUZPvhrKjF3+tPWfufZDyome9d7nZXNCh76L2oRfeN3rf385EuqYeHOn6xd2MPEbT+qDnZ9/L9aS+gux+GZDyj3vWOP4+KVRe8NKin6zAfUkVRW8PRfqeT7sbc5K9tG8DfCa39Z1aJb1fnn/g7SCbj9x52UzBpe9xtKlm/+D2s/P39F5cMcgJXyvH8AvgfcIIQYE0L8pCOSWMXrf1M1A/zT+1XSoRyuP6XKs+55n5q9UWsc/xHVnffl/7SxK5uKwFN/qeLbmzGbZCP03wQnflKxZCuneHztt1Un5W3vdl62jeALwJv/QJUJPvnHG//8yQ+pGOn9v+y8bFbw0K8rnf/Cz1vU+cfhrp92h87f/h5VHvgvv7axN7Ychyf/VCXOBzdppk059B5W9/HZD248/lRK+NIvw0e+X03p1AwrVR/vklIOSCn9UspBKWWV6X9NaOmDN/+eamD55u+t/3OZJXXjWvrh7p/dPPnKweOFH/jfsBSBT/8kZDPr/+zXf0clER/6r5sn30Z43f+nZkZ85qfKbzQXHlOzKl7zH505Lb0aHH6TShB96/fLx0xD15VeHXy9OvTUDWjthzf/vvJQynk0mWX48q+ocMM979s8+crB44W3/LlKRH/2Z8pvNF//b6o66sH/snnybYSHfl15VZ95b/l6/IuPqeqs+39ZjdrVjK0V+jBx67vg+LvhiT8oneCSEh77VTXX99E/qW2sazX6b4Lv+0PVxPKFny9trF/+lHJ173rv5k3Ls4LGNvihD6kmlr9/R+kqkMVh+Ny/VU0DbgjZFOPRP1FHsH383eo0j9VYjsOnfkLpzyMWmPdm4tZ3qhDOt/9QeVqrIaUy0pOnFJFxk84P3Apv+l3F9L/4i6WN9dkvqBzIXe+F3XduuojroqEF3vERFaf++3eU9goWrsHnfk4dHuyQzm9NQy0EfP+fqrroL/8KfPZnC7Wm4XH49E8p9/XeXzCGxLgMd7wHHvyvcOof4COPqhGgUhqu358o5rHnXnjj79Ra0rUYPAE/+EFlEP729WpWuJTq35VvwIceVjO/3/53tU2AlkJDK7z70xDsgA9/H3z3fxfc1Okz8JG3KAP+r/4KOvfWVNQ1EEJtNEceVSTkMz9T6CkIjykP7bkPw33vV5UubsNdP63Y5vMfhf/7rwoNVOmUSth96ifULJvX/1Zt5SyFnbfB2z+satP/5iFVX5/X+a8XdP6dH3OsoU5IHXNjV+HEiRPy5MmT2q+7BrmscgW/82dqOHpDu5rZ7PHDa39FKcZmTQ2rBqc+AV/6jyoU0tiujEYurRbjW/9CvedWDH8HPvezKlTQ1K1qduOz0LEX3vXxzTngoFrEZhTrv/xVpSuN7crlbmyHt/wvdxo6E7msSm49+Seq6zLQCstR1bL9wK+qcJObdf75j8Jjv6Zkbu5V5CSdgENvgh/8G3fr/Mj3FIkKjag5+R5vQeff+feqOsoGhBDPSSlLtmJubUNtYnFEdcCFR9XEuqNvqV2TQqVIhlRGfPqMYnyHH1YDjNy82Eykk6qUauS7il3suRtufof7mHQpSKlivpceVyGc3iMqhl2ruuNKER5TTS2h69C2Uw3/6hyqsVAWkViAlz6pGGqgReUP9j+wdXT+7OeV7uSyavjXzW/XovPb31DXUUcddWxxlDPUWzNGXUcdddTxCkLdUNdRRx11uBx1Q11HHXXU4XLUDXUdddRRh8tRN9R11FFHHS5H3VDXUUcddbgcdUNdRx111OFy1A11HXXUUYfL4UjDixBiFqjioDcAeoDaT+rWg+3yWbbL54D6Z3EjtsvnAHufZa+UsuQxVI4YajsQQpxcrztnq2G7fJbt8jmg/lnciO3yOcC5z1IPfdRRRx11uBx1Q11HHXXU4XK40VB/oNYCaMR2+Szb5XNA/bO4Edvlc4BDn8V1Meo66qijjjpWwo2Muo466qijjiLUDXUdddRRh8vhGkMthHhYCHFBCHFZCPGrtZbHDoQQw0KIl4UQLwohttQJCkKIDwkhZoQQp4ve6xJCfEUIccl4dcnR4uWxzmf5TSHEuPFsXhRCfF8tZbQCIcRuIcQ3hBDnhBBnhBDvN97fcs+lzGfZis+lUQjxjBDilPFZfst4X/tzcUWMWgjhBS4CbwDGgGeBd0kpz9ZUsCohhBgGTkgpt1wRvxDifiAGfFRKecx47w+ABSnl7xmbaKeU8j/VUk4rWOez/CYQk1L+YS1lqwRCiAFgQEr5vBCiFXgOeCvw42yx51Lms7yDrfdcBNAspYwJIfzAk8D7gbeh+bm4hVHfBVyWUl6VUi4DHwdcfMLo9oWU8glgYdXbPwB8xPj6I6iF5Xqs81m2HKSUk1LK542vo8A5YBdb8LmU+SxbDlIhZvzXb/yTOPBc3GKodwGjRf8fY4s+PAMSeFwI8ZwQ4r21FkYD+qWUk6AWGtBXY3ns4ueFEC8ZoRHXhwuKIYQYAm4DnmaLP5dVnwW24HMRQniFEC8CM8BXpJSOPBe3GOpSxw/XPiZTPe6TUt4OvBl4n+GC1+EO/CVwADgOTAJ/VFNpKoAQogX4NPCLUspIreWxgxKfZUs+FyllVkp5HBgE7hJCHHPi77jFUI8Bu4v+PwhM1EgW25BSThivM8BnUaGdrYxpI7ZoxhhnaixP1ZBSThuLKwf8DVvk2Rgx0E8DH5NSfsZ4e0s+l1KfZas+FxNSyhDwTeBhHHgubjHUzwKHhBD7hBAB4J3AF2osU1UQQjQbSRKEEM3AG4HT5X/L9fgC8B7j6/cAn6+hLLZgLiAD/4ot8GyMpNUHgXNSyj8u+taWey7rfZYt+lx6hRAdxtdB4PXAeRx4Lq6o+gAwynH+FPACH5JS/vfaSlQdhBD7USwawAf8/Vb6LEKIfwAeQI1rnAZ+A/gc8ElgD3AdeLuU0vVJunU+ywMo91oCw8DPmPFEt0II8Wrg28DLQM54+9dQsd0t9VzKfJZ3sfWeyy2oZKEXRXo/KaX8bSFEN5qfi2sMdR111FFHHaXhltBHHXXUUUcd66BuqOuoo446XI66oa6jjjrqcDnqhrqOOuqow+WoG+o66qijDpejbqjrqKOOOlyOuqGuo4466nA5/n+ruLCdpoRJRQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "def f(x,t):\n",
    "    x1 = x[0]\n",
    "    x2 = x[1]\n",
    "    alpha = 1.\n",
    "    beta = 0.5\n",
    "    gamma=beta\n",
    "    delta = 2\n",
    "    f1 = alpha*x1 - beta*x1*x2\n",
    "    f2 = gamma*x1*x2 - delta*x2\n",
    "    return np.array([f1,f2])\n",
    "\n",
    "specs = {'x0': [2. ,2.], 't0':0., 't1':30., 'h0': 0.1, 'tol': 1e-2}\n",
    "\n",
    "t0 = specs['t0']\n",
    "t1 = specs['t1']\n",
    "interval = [t0,t1]\n",
    "h = specs['h0']\n",
    "\n",
    "y0 = specs['x0']\n",
    "\n",
    "\n",
    "ts,xt = MMP(f,y0,h,interval)\n",
    "\n",
    "plt.plot(ts,xt)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 2) Now use function MMP as a building block for Bulirsch-Stoer. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "def MMP(f,y0,h,interval):\n",
    "    # Modified midpoint method\n",
    "    # Time interval\n",
    "    t0 = interval[0]\n",
    "    t1 = interval[1]\n",
    "    # Initial conditions\n",
    "    xstart = np.atleast_1d(y0)\n",
    "    # Number of equations in the system\n",
    "    # (length of equation vector)\n",
    "    Neq = len(xstart)\n",
    "    # Initializing arrays with solutions x,y\n",
    "    x = np.zeros((1,Neq),dtype='float')\n",
    "    x[0,:] = np.copy(xstart)\n",
    "    y = np.zeros( (1,Neq),dtype='float')\n",
    "    y[0,:] = x + 0.5*h*f(xstart,t0)\n",
    "    # Array containing times at which the solution \n",
    "    # is computed\n",
    "    t = [ ]\n",
    "    t.append(t0)\n",
    "    Nsteps = int( (t1-t0)/h )\n",
    "    for i in range(Nsteps):\n",
    "        xnext = x[i] + h*f(y[i],t[i]+0.5*h)\n",
    "        ynext = y[i] + h*f(xnext,t[i]+h)\n",
    "        tnext = t[i] + h\n",
    "        y = np.vstack( (y,ynext) )\n",
    "        x = np.vstack( (x,xnext) )\n",
    "        t.append(tnext)\n",
    "    # Last step average\n",
    "    x[Nsteps,:] = 0.5*( x[Nsteps,:] + y[Nsteps-1,:] + 0.5*h*f(x[Nsteps,:],t1) )\n",
    "    return x[Nsteps,:]\n",
    "\n",
    "\n",
    "def BST(deriv,errfunc,y0,t,tol):\n",
    "    # Bulirsch-Stoer ODE solver\n",
    "    demomode = False\n",
    "    Nbins = len(t) - 1\n",
    "    x0 = np.atleast_1d(y0)\n",
    "    Neq = len(x0)\n",
    "    x = np.zeros((Nbins+1,Neq),dtype='float')\n",
    "    x[0,:] = x0\n",
    "    for i in range(Nbins):\n",
    "        if demomode:\n",
    "            print(i, Nbins)\n",
    "        H = t[i+1] - t[i]\n",
    "        h = H\n",
    "        interval = (t[i],t[i+1])\n",
    "        R1 = [ ]\n",
    "        R1.append(MMP(deriv,y0,h,interval))\n",
    "        n = 1\n",
    "        error = H*tol + 1.\n",
    "        while (error > H*tol):\n",
    "            n = n + 1\n",
    "            h = h/2.\n",
    "            R2 = [ ]\n",
    "            R2.append(MMP(deriv,y0,h,interval))\n",
    "            for m in range(1,n):\n",
    "                j = m-1\n",
    "                fact = (n/(n-1))**(2.*m) - 1.\n",
    "                delta = (R2[j] - R1[j])/(fact)\n",
    "                Rnext = R2[j] + delta\n",
    "                R2.append(Rnext)\n",
    "            error = errfunc(delta)\n",
    "            R1 = R2\n",
    "            #print(n, R1)\n",
    "        x[i+1,:] = R1[n-1]\n",
    "        y0 = x[i+1,:]       \n",
    "    return x   "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "a) Test the code, again with Lotka-Volterra"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "def f(x,t):\n",
    "    x1 = x[0]\n",
    "    x2 = x[1]\n",
    "    alpha = 1.\n",
    "    beta = 0.5\n",
    "    gamma=beta\n",
    "    delta = 2\n",
    "    f1 = alpha*x1 - beta*x1*x2\n",
    "    f2 = gamma*x1*x2 - delta*x2\n",
    "    return np.array([f1,f2])\n",
    "\n",
    "specs = {'x0': [2. ,2.], 't0':0., 't1':30., 'h0': 0.1, 'tol': 1e-2}\n",
    "\n",
    "t0 = specs['t0']\n",
    "t1 = specs['t1']\n",
    "h = specs['h0']\n",
    "t = np.arange(t0,t1,h)\n",
    "tol = specs['tol']\n",
    "\n",
    "y0 = specs['x0']\n",
    "\n",
    "def err(delta):\n",
    "    error = max(delta[0],delta[1])\n",
    "    return error\n",
    "\n",
    "xt = BST(f,err,y0,t,tol)\n",
    "\n",
    "plt.plot(t,xt[:,0])\n",
    "plt.plot(t,xt[:,1])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Exercise. Test the Bulirsch-Stoer solver by integrating the equation of motion of a nonlinear pendulum. \n",
    "\n",
    "$\\large\\frac{d^2 \\Theta}{d t^2} = -\\frac{g}{\\ell} \\sin{\\Theta}$\n",
    "\n",
    "Consider a pendulum of length $10$ cm, with initial conditions $\\Theta_0 = 179^{{\\rm o}}$ and $\\omega_0 = 0$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXkAAAEdCAYAAADpZhdxAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAABZfElEQVR4nO2dd3hcxbXAf2fVu2Q1y1VuuOICxtgQTAcbmxh4kBhCSaU8IKS9NHgJkPrykpC8BAg1kEAghNCMAdNNtcHYBvfeLVm99915f8xeaSVtubvalVba+X3ffld76+xo7pkzZ86cI0opDAaDwTA0cQx0AQwGg8EQOYyQNxgMhiGMEfIGg8EwhDFC3mAwGIYwRsgbDAbDEMYIeYPBYBjCGCEfI4jIl0VEiUiNiOT0OBbvPnZ7Pzy/2GPffhF5JFLPjBW81W0Q1z4iIvvDXypDtGCEfOyRBfxgoAvh5mLgZwNdCINhKGOEfOzxKnCziAwf6IIopTYopfYMdDm8ISJJA10GgyEcGCEfe/zcvb010IkiMk9EXheRBhFpFJE3RGRej3MeEZHDIjJHRN4VkSYR2SUi19u4fzdzjYfZYb6IPC4idSJyVET+T0SSe1ybKiL/IyL7RKTNvb1VRBwe5ySLyF0istn9G0pFZIWITOlxL+u5C0XkXyJSA6z1U+7b3ecfLyJvuX9ziYjc6fl897l5InKviBwRkVYR2S4i1/p4vp3fPV5EVrqfWS4ifwR6dUjezG8iUuze/2U/v+0M9zln+Chjsce+/SLymIhcJSI7RKTZ3QYmiUiaiNwnIpUickxEfici8b6ea4gcRsjHHiXAn4FrRWSsr5NEZCawGsgBvgxcDWQCq0VkVo/TM4F/AI8By4CPgXtF5MwQy/h3YA9wCXAvcCPwI4+yxQOrgK8DfwQWAw8C/w38r8d9koAMdMe2BLgBSAbW+BjJPA7sAy4FfmijnM8BrwMXoX//fwM/8ShnJvC++9m3u7cr0HVzcwi/OxF4DZjjPvZlYBxwm42yRoqFwH+iTYDXABOAf6Prsh5YDtwPfAe41sc9DJFEKWU+MfBBCwQFTASGATXAw+5j8e5jt3uc/7T7nGyPfZlAFfCMx75H3Nee6bEvCagA7vfy/GKPffuBR7ycc0ePsr8I7PT4fpX7vIU9zrsVaAMKfNRBHJCKFj7f9vLcu2zW5e3u83/YY/8D7ntnu7//N9ACTPJyXgUQH+Tv/ob7vPke+xzAFi912+3/6d5X7N7/5R7/v/0e389wn3OGj/bT8/9XBWR57Pum+7wHe1y/HnhroN+DWPwYTT4GUUpVAb8DrhaRyT5OWwi8qJSq8biuDngBOL3HuU1Kqbc8zmsFdgFjQiziyh7fN/W41yLgAPCB2zMo3q3dvwokAPOtE0XkCyKy1m2C6QAagXTA2+9+NshyPtXj+5Pue8/wKOdaYF+Pcq4CcoFpPa4P9LsXAIeUUmusHUopl5dy9CcfKqVqPb5vd29X9ThvOzC6f4pk8MQI+djlLrQWdqeP48PQpp2elKJNOJ5UezmvFW0aCYUqL/fytDsXAGOB9h6fj9zHcwFE5ELgn8A24ArgZOAkoNxH2bz9Xn8c8/F9pEc5F3op5788y+lBoN9d5OWZ3srRn/T837f52R9qezD0ATMREqMopRpE5Fdojf5/vZxSBXizWw+ntzDqbyrRtvMv+Di+371dDuxWSn3ZOiAiCegOzBvBxt0uBPb2+A5wxKOcZcAtPq7fEeTzSoDpPsrRk1Ygsce+np2KN1rc21CuNUQhRpOPbe5BC6Sfezm2GlgiIhnWDvffF7qPDSSvoIf+DUqpdV4+Fe7zUtEmGk+uQtvmw0HPTmY50ABs9ijnFOCgj3LWB/m8D4HRIuJpjnJ4KQdoc9aMHvuW2HjGAfe257UX2C2kIbowmnwMo5RqFZE70d4PPfkZsBR4Q0T+B63l/gAtOH2ZePqLx4GvoMv2O+BTtOY5Afg8cJFSqgktZC8SkbvQk5gnoicGa8JUjm+4hezHwPlob5/bPeYx7gK+CLzrLsMOIA0t+E9TSi0L8nmPor1+nhGRH6NHCdejJ8R78iRwm4jcCqwBTgMuD/QApVSJiKwGfiQiFe5nXImuW8MgxGjyhr+iJ0m7oZT6DO1pUYcWLn9Ha6mnK6U+7c8C9kQp1Y4Wqg+g3fJeQgv+a4AP6LILPwD8Ai1oV6A12QuBWsLDMuBc9GT0legRUecKXveE5Cnu8v0APRn5sPu6t3reLBBKqTb38zaiR2GPos1W3kZiv0K7yt6EdvWcih7F2OFKdMfwf2jvm4M+nmEYBIjbvclgMNjEvcjop0CCUqqnOchgiCqMJm8wGAxDGCPkDQaDYQhjzDUGg8EwhDGavMFgMAxhosqFMi8vTxUXFw90MQwGg2FQ8cknn1QopfK9HYsqIV9cXMy6desGuhgGg8EwqBCRA76OGXONwWAwDGGMkDcYDIYhjBHyBoPBMIQxQt5gMBiGMH0W8iIy2p3ncpuIbBGRW9z7h4nIa+58n6+JSM8Y5AaDwWCIMOHQ5DuA7yqlpqIz8twoItPQ0fLeUEpNAt7AXs5Mg8FgMISRPrtQKqVKcGfUUUrVi8g2dGacZegohqCj5b2NjsRnMBiGELW1tVRUVNDW1hb4ZENQJCYmkpeXR1ZWVsj3CKufvIgUozPJrwUK3R2AFaO6wMc11+LO4j5mTKgpQWOAkk+hpQ7GnTbQJYl+Wuth2wqYcSnE90xwZOjFjlegYArkFAd9aUtLC8eOHWPUqFGkpKQgIuEvXzTR0QbtTZCSHfFHKaVobm7m8OHDJCUlkZwcWvbEsE28ikg68G/gW+6Ez7ZQSt2vlJqrlJqbn+91wZbB5YL7FsKjS6FpoDPvDQLe+Bk8dwOse3igSxL9lG2DJ74ID54b0uXl5eXk5+eTmpo69AU8QOUuqN4HbY0Rf5SIkJqaSl5eHuXl5SHfJyxC3p0389/A40qpZ9y7j4lIkft4ETrDjCEUyrd1/X3g/YErx2Dh0Fq93f/uwJZjMLDvHb1tLINmb/nY/dPS0kJ6enqYCxWluJzgdJukWhv67bEZGRm0tLQEPtEH4fCuEeAhYJtS6vceh15AZ+rBvX2+r8+KWcq3e//b0BuXq6uOyrb5P9cAx7Z0/V2xO+jLOzo6iI+PqugokcPZ2vV3R3O/PTY+Pp6OjtBz04RDkz8VnVbsLBHZ6P5cAPwaOFdEdqFTlv06DM+KTar26W1yFlTtH9CiRD0NpdDRAgmpUHcETCht/9QegiT3pF5l8EIeiA0zDWh7PIA4wNneb4/ta/2Gw7vmPcBXKc7u6/0NQH2pFvDDxmshZvBNzSG9HTMf9rypTRCpwwa2TNFMXQmMPAH2vgX1JQNdmujGMtUkpkFHq/9zowiz4nUw0FAKGUX6U2+EvF8ajuntiBP0tvbwwJVlMFB/FHInQGIGNJhpM7+4OgCB+BStyQ+SUaIR8oOB+lJIL9QfI+T90+gWVCPm6G3d0YErS7TT1gQttW4FotCMEgPhbAdHPMQlAEpPxA4CjJAfDNQfg4zh+mVsquiyDRp601AOCBTN0t/rjgxocaIayzyTOUIrEEaT94+rXQv4OPfaC+fgeA+NkI92lNIaVnqhFvTQpa0aetNYpm3wVl01VQ5seaIZa1RoRoleefXVV1m8eDG5ubkkJydz3Lxz+MHPfk91bb0+wdXd4+Xmm2/mwgsv7Lavrq6O22+/nW3bunt63XXXXcycOROXyxXR3wBGyEc/LTVaY0gvhHT3omHL7mzoTUOZrqu4BG1nDsH3O2aw6iY1163Jm3Zl8ctf/pLzzz+f5ORkHnzwQVatWsUNV3+BR//5LCd97gwOHSntJuT37NnDfffdx09/+tNu91m3bh133HEH7e3dvXGuv/56ysrKePTRRyP+W4yQj3Y6X8RhkOIO5NlcM2DFiXoayiDNvXI6NcesEPaH1bZSsiEtF9oaoD30RTdDhbfeeovbbruNb33rWzz77LNcfPHFnL5wId/+xuWseX0FFRWVXH3LT7rZ5P/whz8wa9Ys5s6d2+1eGzZsICkpiWnTpnXbn5KSwtVXX81vf/vbiP8eI+SjHUugJ2d7CHmjnfqkuUprpqDrq9kIeZ+01OitZ9uy9sUwv/nNbxg2bBi/+tWvunYqLdCLx43jlm9+k7c/XMfajz4CoLW1lccee4wrrrii232mTp3K9773PVpbW0lISEBEuPTSSzuPL1++nK1bt/LBBx9E9PfEyFK1QYz10qVkGyFvh+aaruBRKcNMXfmjuUYv7EnK7D5KtOYzQuSOFVvYetR2+KqIMG1EJj+9cHrQ13V0dLB69WqWLVtGYmJi10rTjlbo6ACX4uJLLuHOn/2MN1e/y8lnLWHNmjXU1NRw2mndgwf+7W9/Y/ny5UyfPp0f//jHABQVFXUenz17NpmZmbzyyiuccsopof/YABhNPtrx1OSTs7vvM3RHKd0pWvWUYsw1fmmp0YvsHA6PthXbnWJlZSXNzc0UFxdz5513kpCQoD8p6SSMnUdC1nCKi4sBOHRYe26tWbMGEWHmzJnd7jVr1iwOHz7MWWedxfz585k/fz5jx47tPO5wOJg5cyZr1qyJ6G8ymny046nJxydCYnrMv4g+aW/Sk2HJ7mX6qUaT90tzTfcOEcJirglFg44WlMcCp2uvvZalS5fqL60N2h03a7THydoz5ujRo2RmZpKY2D2s9ZYtW2hra+OEE07w+bz8/Hx27twZvh/gBSPkox1PTR7cdmYjuLxi1ZWnuaalRgctc5hBay9aajzqypgCAfLy8khJSWH//v2MGDGCESNG6APN1VCdBflT2LhlBwCjRxQCOhJnUlJSr3utX78eEWH27Nk+n5eSkkJzc2SDnZmWH+201OjFFwkp+ntKdsy/iD7xnEgELbiUC1prB6pE0U03Td69jfG2FR8fz8KFC3nttde6h/e1PGkccTz77LMAnHXqPAByc3Opru5dbxs2bGDChAlkZmb6fF5VVRV5eXnh+wFeMEI+2rFeRCsSndHkfdNTk7cCkxm7vHc8NfmkLEDMfA/w/e9/n6qqqs7JUqDTJ/7AwSP88Y9/5PRT53PybO0WOWXKFNrb2zl8uHucpK1bt/ZynezJvn37mDx5cnh/QA+MkI92PF9EMELeH52avNsmb0wQ/vHU5B0OM0p0c9ZZZ/Hzn/+cu+66i0suuYTnnnuO1e+8x133P87JCxaQm5vL3+//k3arVIqFCxcC8JHbpdIiOzubTz/9lFWrVrFmzRoqK7uvvq6pqWHnzp2d10cKI+SjHc8XEYyQ90eL2yzTaYJwa/KmvnpjeSJ5KhDJ2aau3Pz4xz/mlVdeoampia985Sucd8mXuOdv/+Kaa65h3bp1jLbyUbucFBcXM2/ePFasWNHtHnfeeSeFhYVcdNFFLFiwoFdog5UrV5KYmMjFF18c0d9iJl6jnZYaveTcwhLySnWZcAyaXhOvbk3emGt609bo9kTK7tqXkmMWQ3lw/vnnc/755+svVXu1r3zBVP3dalOqA4jnhhtu4JZbbuHuu+8mNTUVgBkzZrB27Vqf93/ssce47LLLyM3NjeCvCF+O14dFpExENnvsu11EjvTIFmUIFm+avKu9XxIJDzosAZXknuiyhH2LmXjthadrroUZJfrG5QRHXNd362/3hOxVV13FyJEjueeee2zdbuPGjbz11lu9Yt1EgnCZax4BFnnZf5dSarb781KYnhVbeBtSg3kZvdFcoycQrRfQss0b7bQ3PV1zwW2Tr+n/sgwGXE4QDyEv3YV8XFwcDz/8cKcWH4jS0lL++te/MnHixHCXtBdhMdcopd4RkeJw3MvggcsFLXVdZgfw0E5rgNFeLophWmogJavre1wCJKQZweUNb5q8scn7RjnBkdL13VIkVFeQMmtVqx0WLfKmE0eGSE+83iQin7nNOTneThCRa0VknYisKy8vj3BxBhmttYDqrm2Z0Aa+aantXleghZjR5HvjS5NvqR00ae36FVeHD3NNh/fzo4hICvl7gQnAbKAE+J23k5RS9yul5iql5ubn50ewOIOQnhOJnn8bwdWb5pouE41FcraxyXvDlyavnDrksKELpfSiOk8hL24jyCBIARgxIa+UOqaUciqlXMADwLxIPWvIYg2djSZvj57zF2DszL7wpcl7HjNoLEHuaZN3OACJbSEvIkUeXy8GNvs61+ADrx4Q2d2PGbro6YkEWrM3ddWblhpAujyRwExU+0J1hTTohiOum00+WgnLxKuIPAGcAeSJyGHgp8AZIjIbUMB+4LpwPCum8KZtJWboGOBG2+pNS21vTT45G5o/G4jSRDeWacszcJvVzox5qzuW3d3RQ1w64geFJh8u75rLvex+KBz3jmm8afIOh9FOvdHRCh3NvW3yZuLVO75MW2AUiJ54M9dY32N84tXQV7xp8tZ38yJ2x19dtTWAM/pfxn7Fl2kLTKfYk0FurjFCPprpGWbYwnJ1M3TROerp4alrVr16x5smbyb1veNLk3fEDQpzjRHy0UzPMMMWydlG2+pJpybf04XSaKdeaa7p3SEmZQJiOsSeuPxo8kbIG/qEN20LjFugN3pGoLQw2ql3PHPhWpj5Hu8oJyDa4cETie8MNxzNGCEfzXizm4LR5L3hbZLa87upry6Ucmvy2b2PJWeZDrEnVnCyniNqL6ENbr75Zi688MJup9XV1XH77bd3CzV81113MXPmTFwuV8SK3VnMiD/BEDq+NHnrRYxyDaJf8bZwzPO7EfJdtDfpSKbeFAgz39ObnsHJLHpEotyzZw/33Xdfr8iS69at44477qC9vb1z3/XXX09ZWRmPPvpoxIrdWcyIP8EQOr40+ZRs/ZK2N/VzgaIYbyEgPL8b7bQLX3UFZpToDdXR2x4PvSJR/uEPf2DWrFnMnTu322kbNmwgKSmpWyrAlJQUrr76an77299GrNgWRshHMz41efc+I7i6aKmBxHQdedITM/HaG2vU03PiFYy5xs3GjRuJj4/noYce6h1LHrj99tuR1BzKKqpAOWltbeWxxx7jiiuu6Hbe1KlT+d73vkdraysJCQmICJdeeikAy5cvZ+vWrXzwwQcR/S0mM1S0YoUZ9qXJgxZcWSP7sVBRjK9RT0IKxCUZweVJZy7c7N7HwrF47OUfQummvt2jrww/Hhb/OuTLb7zxRmbMmMFXv/pVKNumXZk9sLTyjzZsZumkE1jz0Xpqamo47bTTup33t7/9jeXLlzN9+vTOxOBFRTriy+zZs8nMzOSVV17hlFNOCbmsgTBCPlqxwgwbTd4eLTXeNVMwduae+NXks2O+rlatWsUHH3zAP//5T0TEHUu+uyY/xp3j9cCREnA5WbNmDSLCzJkzu503a9YsDh8+zM0339wr1rzD4WDmzJmsWbMmor/HCPloxdcKTjAeI95orvbeIYKxM/ekU8hn9z6WnAUdLdDeAgnJod2/Dxp0NPDggw+SlZWlE2wrBS4nf/vns0yZs4B583Qw3YYGHY7Z5VKgnBw9epTMzEwSE7tr/Fu2bKGtrY0TTjjB67Py8/PZuXNnRH+PsclHK75cAsFo8t7wFkvewtiZu9M58epFkzcKBG+//TannHIKCQkJoFy0tLRw7S0/YMeOHZ3nlJaWAjBu9AhwOWlpaSEpKanXvdavX4+IMHv2bK/PSklJobm5OSK/w8II+WjFaPLB4WuSGkyQsp40V2vPkMT03sdiPBJlbW0tFRUVTJgwQe9QTt76YB2tra2MGjWq87y33nqL+Ph4Tj15Lric5ObmUl3dO3Xihg0bmDBhApmZmb2OAVRVVZGXlxeR32JhhHy04k+TT8oCxGinnnhbpm9hArp1x5q/6Lm4B2Le5bSjQweya2lp0TtcTv7y96dJTk6mra0NgIqKCp566ikuvPBCcnJywNXBlClTaG9v5/Dhw93ut3Xr1m6ukz3Zt28fkydPjsyPcWNs8tGKP03e4YDkTKOdWrS3uMMMZ3s/biZeu9Nc7b9DhJhtW7m5uYwePZp///vfnHfeeXz6ycfs3HuAxeedw913301rayu/+MUvAPjVr36l1WTlZOHChQB89NFH3TT+7Oxs1q9fz6pVq8jKymLSpEnk5uYCUFNTw86dO/ne974X0d9kNPloxZ8mD0Y79cROXbXUardUg++QBhDz5hqARx99lLy8PK6++mreff99XvjrH/j+977D5s2b+eIXv0hycjJvv/221sDdQcqKi4uZN28eK1as6HavO++8k8LCQi666CIWLFjQLbTBypUrSUxM1BO8ESRcmaEeBpYCZUqpGe59w4B/AsXozFBfUEr1NloZvNNcA44ESEj1ftzYmbvwN5EI7glZBa11voVbLNFcDekF3o/FuLkG4Mwzz+zyeGmqgpoDTCqYyt69e3ufLHHg0macG264gVtuuYW7776b1FT93s6YMYO1a9d6fc5jjz3GZZdd1qnZR4pwafKPAIt67Psh8IZSahLwhvu7wS7WRKI3uykYTd4Tf4t7wExU96S52nddmRXC3fEVS97CEd8ZoOyqq65i5MiR3HPPPQFvu3HjRt56661ecW4iQViEvFLqHaCqx+5lgBV951HgonA8K2bwtYLTwmjyXfiLxQLG5bQn/haOxSVAQpqpKwtf+V0tHO4UgEoRFxfHww8/3KnF+6O0tJS//vWvTJw4MYyF9U4kJ14LlVIlAEqpEhHxOj4UkWuBa6FrFZkB/y6BYFYmeuJvBSeY7FCeuJzeE557Yiaqu1AdWov3NaLuDDfsAolj/vz5vVa2emPRop6Gj8gx4BOvSqn7lVJzlVJz8/PzB7o40YMdTd5oW5pA5poY9xjphiW8fXWIYFYIe+J0+tbioVckymgkkkL+mIgUAbi3ZRF81tCjqQpS/UzIJGeBsxXaI7tablDgK/WfhbXfdIq+4+57kpLddV6s4/IRZtjC6gCiOKF3JIX8C8A17r+vAZ6P4LOGHk2VAYR8tt4aweWeSMzy/TKaidcuAnkigW53jRW2b6mGcvIaV4d/Tb4zcUhHxIrQ1/oNi5AXkSeAD4HJInJYRL4G/Bo4V0R2Aee6vxvs0N4M7Y2Q5kfIG8HVRVMFpPpZGp6YrkPFNlX2X5milRY/wcksUnN1ndogISEh4rFXBpRAQr4fzDXNzc06jk6IhGXiVSl1uY9DZ4fj/jGHJYz8CS5LEzPDamgshzQ/dSWi67LRCHma3E5w/tpWWp5uV16SZfSkoKCAI0eOMHLkSFJSUnRo3qGEK4BNPs59LAKavFKK5uZmjhw5QmFhYcj3MWENohFrqOzPXJOW3/3cWKaxEnKK/Z+TZl87HdI0luutv1Fiap72Fmmu8X8edAbeOnr0aLccpkMC5YLaUkhugeQ6H+coqC2D5FZILg97ERISEigsLPQZ4MwORshHI5Yw8qeddgr58DesQUdTBYw60f85afmmrkDXgSPe/8Sr1e6aKgIKedCCvi9CKGqpPQxPnQIX/hGmftn3eb9aBLOWwwW/6beiBcOAu1AavGBnSG1p+bGuySulzVtpAdxvU/NMXYGug7R8337fAKnDus6NZTrNpgE6uigfJRohH410mmuG+T4nLkHb5WNdO22p0fZQfx0iaMFmJl512wpUV9bxWK+vTmUrkJCP7lGiEfLRSFOlnrX3N6QGt3YavY2rX7AmU/2ZtkBrW20NZl1BoElq6G6uiWWsTi7Fj7IFUT+pb4R8NNJUobV4R4B/T1q+GVI32Zikhi7t1NSXDdOWZQqMXsHVLzS412/6ithpkZYb1cqWEfLRSFNl4CE1aI0rihtXv9DpLWLDXON5fqzSWBG4ruKTIDHDaPINx/T6Cn8Lx6DLFBil+QqMkI9GGmwMqSHqbYH9Quf8hV0TRAxrp+3N2mRlq20ZBYKGY5Be6H+SGtwup86oXZhohHw0Ul8CmSMCn5eWrxetOCO3pDrqabThbup5PJYFV2dd2QgEmDEc6o9FtjzRTsOxwKYaiPo1K0bIRxtKQX2p1iACkZYHKGjuGco/hqg/qifG4pP8n2fVZ31p5MsUrTS6bcx2TIEZw7WyEcs0lNl7D9PdQr4hOtuWEfLRRnO1ji6ZURT43E7BFcMvY32pvVFPYhokZZm6Asi00bYyivT5Qzn4WCDsKlsZ7vZXF51tywj5aMN6ETOGBz43c6TeRmnj6hfqjtqrK9DCre5oZMsTzVi/PcNGp5gxXAfJa62PbJmiFWe7nr+xI+StTrM+OtuWEfLRhqVp2tHkLQ227kjkyhPt1JfYqytwa6ex3CEe0SENbNnk3W0rVs1bjeWAggwbQj4pA5Iyo1bZMkI+2ujU5O3YAgv0oqlY1U6d7dpuasdcA/q8KH0R+4W6Ei28A62/gK7RUax2ig3uSWc7mjy4FYjofA+NkI82rJcq3YYJwhGnG1esCvmGMrS2ZdNck1GkX94oTtUWUeqO2LPHQ9foKFY1eUsZCMoUGJ0dohHy0UZ9qc5ylBg44zvg1k5j1FzTadqyq8kXaX/mhhjNRGnXNRe6RpKxqsnXHtLbrDH2zs8YEbV1FXEhLyL7RWSTiGwUkXWRft6gp+5I14SqHTJHxK4mb/1u29qpZWeOzpcxoiil68tu2+q0M8do26o5CPEp9haOgX4P60ujcpTYX5r8mUqp2Uqpuf30vMFL9QHIHmv//MyR+kWMRVe32sN6a1dwxfJEdUsNtDfZn6QG3Q5rDkSsSFFNzUHIHh14tatF5ygx+haQGXNNNKEUVO8PnOXIk8wR2tUtFtMAVu/TMVYCBSezyHF3ntX7I1akqKXGMj+Msn9NzlitdMQiNQcha7T987OL9TYK66s/hLwCXhWRT0Tk2p4HReRaEVknIuvKy2N4yTlov9z2xi5hZIdh4/S2el9kyhTNVO+HYcX2ta2UHB2+uSoG66pqr94OG2//mpxiXcexOEqsOQjZNu3xENXvYX8I+VOVUicAi4EbRWSh50Gl1P1KqblKqbn5+Tb8d4cyloYZjCZvvbSVe8Ndmuinal9wdQX6ZYzCFzHidAr5cfavySmGjubYm6hubdChQrKD0OSzRoM4olKBiLiQV0oddW/LgGeBeZF+5qDFEvLB2ORzxgHS9RLHCi6nthfnBCG0QJ8fhS9ixKnaC2kFekLVLlYHGmvmrZqDemvXswYgPlEL+ih8DyMq5EUkTUQyrL+B84DNkXzmoKZTkw9CyCck64nHKGxcEaW+BJxtoWnytYf0QqpYompfcKYaiF0hX7lLb/MmBnddlI4SI63JFwLvicinwEfASqXUKxF+5uClco9eBJWYFtx1w8ZB1Z7IlClasbTxYMwPoDV5V0eXH3SsUB2CkM8e4zZBxFjbKt+ht3nHBXddlI4S4yN5c6XUXmBWJJ8xpCjbCgVTg78udwJsfSH85Ylmyrfrbe6k4K7LdWtnFbuCF3qDlbYm7TYabIcYn6TrqGxrZMoVrZTv0KaaYJWt3Analt9YqVMCRgnGhTJacDl14yqYFvy1eZN144qlJA/HtuiVwcG4BAIUuuv3WAxZDS0hHYoCUTAVjsWYkK/YAflBavEAhdP1NsralhHy0UL1fu3JEMqLOPx4vT22KaxFimrKtkLhDPvukxbJWdoMcWxLZMoVjZS624XVToKhYLqe72lvDm+ZohWXCyp2Q/6U4K8tnKG3Uda2Imqu6S/qW9r57HAtCXEOEuMdJMQJSfEO0pLiyUtPIiFuEPRlZdv0NhRNfri7cZVugonndO5WSlHX0kFVYxtNbR10OBXtThdtThdxIiTEO0iMc5AQ5yA5wUFeehJpSYOgSbhcWrucfXlo1xfOgNLe2lZLu5PKxjbqW9pp71C0OV20O10oBYnxQrzD4W5jQk5qIjmpiTgcQXYyA8GxzTpEQTBeWxYFUwGlzWMj5nTudroUlQ2t1LW009rhorXDRVuHrqv4OCHOISQ4HMTH6boalpZIYvwgeA+r92llK39y8NemF2gPph6avFKKxjYnlQ2tNLU5aXe3q7YOhUIRJ7q+ctOTGJcXpInIBoPgjQ7MnvJGvvTgWq/HRGBYaiIT8tOZNTqLs6YUcvK4YdH3cpZuAiS0xpWSA1ljaDq4kX99sJ81eyvZXlrP4eom2p3BLWRJTYxjdE4q00dmsmB8LudNH05WSkLwZYoktQehrT60DhGgcDpq5yu88dkB3txTx5ajdewta6C+NbhcuXEOoSAjiSnDMzhhTA6LZgxnUmEQLor9RekmbUoIdtQDnSaIo9s/5p9b0th4qIbtpXWU17fiCnKNVEZyPBPy05kxMpMzJxfwuUl5JMXHBV+mSHLYHV5r5ImhXV84nY6STTy77hDv765ge2k9+ysbaWl3Bbx06cwi/nzFCaE91w9DQshPLEjnqesW0Nahe8hW97a+pYOy+haO1bWwvbSeRz88wAPv7mPMsFT+6/zJLJ1ZhITS8CPBobX6hUpKD/rS0toWypyjSd++lp9+toXRw1KYXpTF+dOHk5eeSG56IqmJ8STECQlxDuIdDpSyNFWt3Te1OaloaKWsrpV9FQ28s7OcZ9Yf4dbnNnP1/LF885xJZCZHibC3XsSi4Of0nS7Fm9XDOVe5uOeJZ9iVOI0ZI7O45ISRFGQmk5uWSGZKgh7huEeFQOcoqN2paO1wUt3YRkVDG0dqmtl6tI63d+7kd6/tZP74Ydx6wTSOH5UVzl8cOs4ObT6YFdqo55OGHCZLOqvffIk/OUdyXGEGp07MY1R2CvkZSWSmJJAUH0dSgoOkOAcigtOlaHe5cDp1G6tuaqOqoY2y+lZ2Hqvn2fVHeGzNQfIzkrjpzIlcNX9s9ChdR9ZBQlpI5pr6lnY+bRzBvNJ3ue3pdWRlZDBjZBafm5hHfkYSw9ISyUiOJ8E9eo6PEwTBpRROlyI3PTECP2iICPn0pHjmjRsW8LzmNievbi3l3rf3cPMTG3hzexn/8x8zB34Y6XJqwTXzsqAvfWdnOTc/sYGrnGP4nuN93r5hOsVji/tcJKUUnx6u5e8fHuDh9/fx+rZjPHD13OjQVA9+CInpMHxmUJdVN7Zx3WOfsGdfKucmw29PbmT0heeGxZxXVtfC8xuPct87e7nk3vf576XTuHpBcZ/v22dKP4O2BhgzP6jLlFL8ZfVe/nfVdv6echyLsw5w7g3nkJceIGG6DVo7nHywu5L739nLT1/Ywmtbj3HPlSdEhxJxeJ02SzmCG2FsL63jG39bx+Ta4XwuoYOX/yOVcXPPjgolchAYycJHSmIcy2aPZOU3T+O75x7HsxuOcMuTG3AFO+4MN2VbtflhdHAv4od7Kvn6o+soykrm8suuAKC4YUNYiiQizB6dze++MIt/XreAxjYnlz+whv0VjWG5f5848CGMOgni7Osoja0dfOnBtWw8VMOPL1sIeccxvvGzsM3XFGQm842F43njO6ezcFI+P3l+C4+8HwU+0wfe19uxpwZ12T1v7+F/XtnO4uOLmHvaBWQ37iXPEZ7/fVJ8HGdOKeAf3ziZX11yPGv3VXL1Qx/R0j7AYXrbmrRpa1Rwppq95Q1c8cBa2jpc3HTNVYAwvunTqBDwEGNC3iLOIdx89iRuvWAqL28u5f53B3i16P739DYIbausroWb/rGeMbmpPHntfEZOW6C1W+teYeSk4mE88Y35OF2K/3x8PW0dge2LEaOpSneKY08J6rLbntvM9tI67rvqRP7jxFH6+oNrwh7/Oys1gfuuOpFzphbys5Xb+OTAAEcH3f8eDJtgP+Y+enT4v6t2cNHsEfxp+RySxrs7CKvDCBMiwuXzxvCny09g46Ea7lgxwF4p+98FVzuMP8P2JS3tTv7z8fUopXjy2gXMPm6cNrtG4D0MlZgU8hZfP20ci2cM5/ev7uRgZdPAFWTHS9oGGEQ4g5+t3EZ9awd/ufIEslMTIS5BC67db0QkauDEgnR+c+kstpbU8ZfVA7gCctdrgIIJZ9m+ZPXOcp7dcIRvnj2JMycX6J3jTofWWi3ow0x8nIPff3EWRVnJfP/pT2l3DlCn2N6ihc2402xf0tLu5EfPbGJiQTq/umSmtpWPOkm7nu6IzGL1RTOGc93p43nio0Os3VsZkWfYYtdrkJAa1KjnvtV72V5az++/OLvLM2bc6dqk2FIXoYIGR0wLeRHh9s9PJ84h/PqVbQNTiOZq2P8+TF5s+5KNh2pY8elRrj99AhMLPGzkU5ZqF7DSyPjLnzutkEXTh3Pf6j1UNLRG5BkB2b5CJ74YYc8LwelS/PzFrRTnpnLDGRO6Dkw6F+KSYNuKiBQzMzmBnyydxp7yRp78eIBCKOx5Q9vjp15o+5KH39/HkZpm7lw2nZREt106LgEmnQc7X45Y5qNvnX0cI7KS+dnKraiBCG2sFOxaBeMW6pW+Niirb+He1btZcnxRl/IAur6dbbDr1QgVNjhiWsgDFGYm87XPjePlzaXsLW/o/wJse1FnlJm8xPYl97+zh8zkeK5d2GNZ/pSlIHGw5ZkwF7KL/1o0meZ2J38dCHtza70eqUxZAg57Tfe1rcfYVdbAd86b3N1dLylDjwa2vRAxwXXutEJOHJvDX97eQ8dAaPNbntPuteNOt3V6S7uTh97dxxmT8zllQo+0d1OW6HwH+94JfznR82XfOuc4Nh+p451dFRF5hl8OfKCjT05bZvuSv394gNYOF987v4fb8+iTdQyqLc+GuZChEfNCHuCaU4pJiHPw0HsDILjWPQT5U2GUvcyIByubeGVzKV+aP5b0nguX0nJh4tmw8R/QERlNe0J+OudMLeQfaw/2/0TZxid0Crsg3AEffm8fo3JSuGDG8N4HZ31Rx3TZuSqMhexCRPjGaeM5UtPMqi39HHKisQK2Pg/TL9aauA2e33iEysa23soDwHGLIWWYbq8RYtmcERRkJPHgQMyRbXhMZxmzKeRb2p08tuYA50wt7L2AyeGA4y+Fna9A7cCnmjRCHsjPSGLpzCJe2Hi0fwXXwTVwdAPM/arthSr/+kQP/b98SrH3E+bfoPNMbvpXmArZmy+fUkx1UzuvbC6N2DN64eyAj+7TZhqbHeLRmmY+2l/F5fPGEO/Ni2bKUh2mec09Ect+dO60QkZmp/Dkxwcjcn+ffPwQOFvh5OttX/LvT44wqSCdBeO9BNdKSIYTroLtL0Us0mJSfByXzxvDe7srOFrTj2EUag7B5qe1C7PNoGQrPyuhuqmdr33OR9C3ed8A5YKP7g9jQUPDCHk3l8wZRX1rB69v6yeNSyl47Sd6WDfnSzYvUazcVMKCCbkUZiZ7P2n8mTpGydu/hrbIuDvOH5/LyOwUnt/Yj1rK+kehcjd87tu2L3lpUwkAS4734VkSlwALbtJeFRGyn8Y5hIvnjOT93RWU1bdE5Bm9qD8GH/xJa982V1CX1bXw8YEqls4c4dv17+QbtL36jTvCWNju/McJo1AKnuvPtrX61/p9DLJtjcxO4WRf63NyivUoau19Xfl1Bwgj5N1owZnEcxv6qXGtvU+vcj3rVtvaw66yBvaWN7Johh93OBFY/BsdL/2NO8NU2O44HMKFs0bwzq4KKvtjArb6gBYsY08NahLxpU0lTCvKpNhfPJCTvq7DD6/8nnbPjAAXzRmBS8GKT0sicv9uKAUrvwMdLXDez21f9sqWUpSCC473YtayyCyCU76pbc0RmrAek5vKScU5PLP+SP9MwO5+XZtqTr7Odk7X+pZ23t1VwaIZw/37wp9zO6DgxW/peEsDhBHybuIcwrLZI3l7Rzk1TW2RfdjOVfDqbVrTmnOV7cte2lSCCJw/vdD/iWNP0cP0tX+BtZEZLi6bPQKnS/FSpE02jZXw5BU6HfyyP9s2a5XUNrP+YA1LZgbwD49PhIvv05mmnro6IqOfiQUZzBiZGfmRj1K6Y9/+Ipzz06AyG720qYRJBemBVzSf9l29IvTZG+DwJ30ssHcumjOS3WUNbCupj8j9OyndBE9/Vbsvn3Wb7cve3F5Gm9Plv0ME3Wmc/0vdkaz60YAlRI+4kBeRRSKyQ0R2i8gPI/28vrDk+CI6XIpXt0bIZNPRBu/+Dp64XC+YuPgvQQWNenlTKScVD6Mgw4epxpPzfg6TL4CX/wte+r5OThxGpgzPYGJBOis/OxrW+3bj4Bp44ExtpvnCI0El+Xh5k+58FnubcO3JqLlw0T16sc9D50ckfvqFM0fw2eFaDlVFaD1GUxX8+2vw3u/hhGu0Gcom5fWtfLSvisW+zFqexCfCFx/Xk/yPLoVPHgm7lrpo+nDiHMLKTRFqW0rBp0/Cw4t1nJornoKEFNuXv7SphMLMJOaMzgl88tyvwvz/1ArXP6+EhvI+FDw0Ip3jNQ64G1gMTAMuF5EQQwdGnpmjshiVk9Jpyw0b1fu1jfTPJ2pNa9rn4ZoXICXb9i12lzWw41i9dy8Rb8QlwBf+rjX6j+6D/5sNb/1KpxgMAyLCBccX8dG+Ksrrw2iyaamDTU/D41+Ah88HFFyzIqjFT6BfxCnDMxifbzPg28wvwOVPao3+L6fCv74Me94MWy7YC9wCNKxtSyk4uhFW3Qp/mKm9ac66DS78Y1DKw6otpbgCmWo8yRoJX12lO8cVt8BfPgcfPxg2c1duehKnTMhl5Wcl4TXZlO+E1b+BexbAs9dBwRT4+utBLUJsbO3g7R3lLJo+3F5QNRGtzZ/3cz3v88eZ8PIP4cj6ftPsIx2gbB6w250GEBF5ElgGhFdVaqyEZ74BU5dqf/OMAOYMH1iC66/v76O2qZ2s1BADJiml48Nve0H7wVvJPEadBEt+r2O+BxnX4pXNWjj4tcf3JC4eFv8PzPgPeOe3eoJp9a91JqkpF8CUC2HkCaGFoEULhf97YxertpRy5fwQYpVbNFVpE8O2FbD3bb2QJK0AzrwN5l+vfdqDoLS2hXUHqvnuuUFm9znufLhxLXz4Z+2dsuVZ7Wc++QLtJz7hrKA0Pk9GD0tl5qgsVm4q4brTJwS+wBfODjj4ga6r7S9B3WGdh3X6JdqUUhi8DvXy5hLG56cxOZjgcxnD4arnYfO/9eh05Xfh5R/oxURTP689l9Lzgy6LxZLji/jhM5vYcrSOGSP7ENGzYpf+P255Dsq2AKLDhyy7R7vi2lxvYfH2jnJaO1z2Rj0WInDKzTDpfD3S+vgBWHuvTjE4daluW2MWBB0UzfbjIzm5ISKXAouUUl93f78KOFkpdZPHOdcC1wKMGTPmxAMHDgT/oCPr9VC1ai8gUPw5OPWWkITpxkM1XHT3+/zvpTO5bO7o4MrR0ap91NfcAxU7dVlGn+z+Ry4NPsemBxf88V1SEuP49w3BxWzpRvUB2PGyDqNw4H2d0DpzFJz0Nf1JDu5lUkpx9u9XU5SVzONfDy64GgCHPtaNfteruizZY/XE6tQLdYcYYqP/6/v7uGPFVt747ulMsKvJ96S9WWvyW5/X/s4ttXrJ+5SlcNp3Qsrg9ZfVe/j1y9t59/tnMnpYanAXN5RrwfDJI3pRUnwyTDhbC4jjzoe0vIC38EZlQysn/eJ1/vOMib0X9dhFKW3f3vy0zjVcvU93PGMW6DmnmV8I+n9Z3djG3F+8zrULx/ODRUGG/XW59ILAtX+Bwx/TKdinXaRH0ZkjgrufBzf+Yz1r91ay9sfnEBdqeOSmKv0ebnsB9rylXV1Tc7UTwJk/DumWIvKJUsqrb3GkNXlvtdCtV1FK3Q/cDzB37tzQepyRJ8DN693a8wrY8Hd4/FL9Elx0b1Ca/axRWYzM1iaboIT8kfXwzLVQuUv7ci/5ndaUQxxVeLK/opGtJXXctiSE1ICe5IzVmvH863U4hZ2r4NMntOfK2r/Asrv1cn+biAgXzCjinrd3U9nQSq7dMLSt9Xqe4NN/6AU2C27UmmjRrJBHFZ5YppqQBTxojX3KEv1xtusYMNtWwGf/1GsQTrkJzvqJtlHbZMnxRfz65e28FKw2/+mT8NJ/6XqbskQLzYnnBJ9o2guvbj3mNtUEoZn2RASKZurPOXfo+PXbXtDa83PXa6Xnskd0omub5KQlcurEPFZ+VsL3z59sP6JjzUH411d0XPi8yXDeL2DGJX0S7BYt7U7e2l7GxXNGhi7gAVKHabfpOV/Sc2W7X4ftK20vWguWSE+8HgY8JeUoIDKzKSJ6qHrGD7TAX/wbvVT5gbOCWryhTTbDeW93BbXNNu2xu16Hhxfp1Zhfehq+8abulcMg4AFednuwBDVEDERKDsxaDlc/D19/E1Lz4PHLtKYYBBccX4RLYX+yuqkKHlkCnz2pzQvf2gTn3gkjZodFwB+r06aaPgmtnsQlwIQzYenvdXnnfkXPsfzjC0HlPrVMNkHZ5d/6pbYfF07XpqTlj+tVmWEQ8KA7xOLcVKYWhSlPgIhOR3nmj3V5L31Yu/PefwYcCc4bZ+nxRRysamLzEZuBvko3wX2naxPNRX+B/1yjO+MwCHjQge6a2pwsDsZkGoikdJh+EfzHA7Dwv8J3Xw8iLeQ/BiaJyDgRSQSWAy9E+Jlauzr5OvjaKmhv1Fp9q313rAuOL6LdqXjNjuA6thWeukpnd7/uXa0JhzmO9IufHWXW6GxGZodmDw7IqBPhG2/osq/4lo4PY5OpRRkU56baE1wup3ZTLNsOl/8Tzv5JSJmw/PHKZsvfO4wvoiepw2DpXXrUs/dteOGbQU2gXXB8EZ/a9bLZ8Bis/h+YfSV8eWVoqSH9UNnQygd7Kll8fIQypIno+aDr3tH19tilQS3zP296IfEO4UU7Xjb1x+Dvl+gR2LVv6fy/QdrbA7Hi06MMS0tk/vjACYqiiYgKeaVUB3ATsArYBjyllOq/oNFFs7SHSdVe7YFgk9lugRpQcDk79IRvYrrW4NO8LAfvI7vL6tlytI7PzwqPNuKThBQ9pC6YpjXHllpbl4kIi48v4oM9lVQ3Blhf8MGf9OrSpXfBcef1vcxeeHbDEaYWZTKxILydRy/mXKm11U1P6clHmyyx62VTc1Av0Bp3uvaWicCk3MpNJThdimWzI9y2ssfAlc/oOavnbrDdKWanJvK5SXmBvWyU0l4+rXX6PQzCLGSXRvdq+AuOH+49REYUE/HSKqVeUkodp5SaoJT6RaSf14txp+nl2Ov/ZjsEr4iweMZw3t1V7t9ks/5RnZl9yW+1t0EEeG7DURwCF86KkGbqSWIaXHS3Dm61+je2L1tyfBFOl+LVrX4WRjWUaw+f4xbbDuMQLHvKG9h4qIZL5oyMyP17cdp3oWg2vH67jt1uA9smm1dv05rwsruDyoAVDM9vPMrkwgymDM+MyP27kTsBzr0D9q0OKiDckuOLOFzdzKeH/Sgd+1brMMhn3hqSd5EdXt92jJZ2F5+f1U9tK4wMri4pVE7/L0jO1ELGJhfM1Cab132ZbJwd8N5dOmXf1M+HqaDdcbkUz208wqkT8+wtgAoHI+ZoW/3HD9n2e54+IpPRw1JYucmPkF9zjzadnfezMBW0N89tOIJDiLxmauGI07+n9hBsfMz2ZQFNNhW7tVfPghshO0gPL5scqGzkkwPVLJvTT3UFcOKX9YK2t35uW5s/b/pwEuLE/6K7t36pvcROvi485fTC058cpigrmbljbSyAijJiQ8in5GhXru0vQp29ed85bpPNU+t8BBfasVK/3KfcHHYbvMWb28s4XN3MF4J15ewrC26Cjmbbk7AiwkWzR/LurnIOVHoJC9Deokc9ky+AvEnhLaub1g4nT358iNMm5VPgK3hbJCg+TZsFP37ItuCyTDbPrPdhn157r05oMu/acJWyF49+cIB4h3DJnFERe0Yv4hL0+1K6yfYkbFZKAgsn5bPyM21a6kXpZh0DasGNtpN9BMve8gbe3VXBFfPG2FsAFWXEhpAH7Qfu6tB+7DYQEb5yajFr91Wx8VBN7xM2/kNrD0FkdAqWB9/by4isZHtL88PJ8Bkw5hTtLmiTK+ePJd4hPOwtJv+Ol7Rv99yvhrGQ3Xl+41HK61v5+mmhr0UICRHtSVW21e2THZjRw1I5a0oBj364n+a2HqGtne16xe+0ZZBe4P0GfaS2uZ1/rTvEkplFDM/qxw4RYMaler1BEF5cl80dxdHaFl70ps1veAziEvXoM0I8+N4+EuKE5fPsBTCLNmJHyA8bDyNP1P6oNlk+bwxZKQn87tUd3Sd+Wur0QplpyyK2Sm31znLW7K3i66eNH5iJnhmXQPl27Qljg8LMZC6ZM4onPjrUO1/u9he1i2YQCZKDoaXdyf+9sYvpIzL53MTQFgX1iWnLwJEQVGTGG86YQFVjG3/9oEenuHc1tNTo+o8Q9769h4a2Dq5bGP4JyoAkZ+rFbttW2M7Idd604UwqSOf/3tjVPV+uUno163Hna++dCHCgspGnPj7E8pPGkJ8RmZFCpIkdIQ96teLR9bbduNKT4vnWOZN4d1cFL3nam3e9qpfeT4uMLb65zcmdK7YwNje1b+EC+sKUpYDoRS02+fa5xxHnEO5YsaWrU+xohZ2v6hFPhDrEe97ew+HqZm5dMjUyroCBSM7Sq6x3vGT7kpOKh3HetEL+/OZuDld7dIrbntcZisafGYGCws5j9Tz8/j4unj2SaSP6YcLVG8ct0h2ZzZGPwyH8YNEU9pQ38oBn1qjSz6ChVJsBI4BSitue20xCnIObzrIf0TPaiDEh786juvs125dcOX8sM0dl8cNnPmNfhdvevOctvVJz1LywF1EpxX8/v5k95Y384qLjSYwfoH9RZpFeoLT3bduXDM9K5nvnT+aN7WU8+K5bQz24BtrqI/Yivrergj+/uYuL54zsnZe0P5myREfLDCIA3H8vnUacCDc+vr7LbLN3NYw/XWdiCjN1Le3c/I8NZCTF86ML+rh6ui9MOEvnIg4iUcs50wpZPGM4v391Jx/tczsE7HK/xxPPiUAh4d7Ve3h3VwU/vmCK7yQ9g4DYEvJ5x0FavhY8NkmIc3D3FSeQEOfgigfWsPlIrY77MvaUsC+2aO1w8uNnN/H0J4f55tmT+NykARRaoJN0HF5n2z0Q4KunFrN4xnB+8dI27lu9B3XwQ0B0fYWZN7Yd4xt/W8ekggx+dtGMsN8/KIpP09uDH9q+ZPSwVH77hVl8dqSWrz7yMTUle6HmgB4VhJnS2haufugj9lY08IflswfW9JCSDaPnBaVAAPz6P2YyZlgqX33kY97bVaGvL5oV9rkLpRT3v7OH37yygwtnjeBLJw/QaDpMxJaQF3egogMfBHXZ6GGpPP71k1EKrr9nBVTvo67wpLAVq93p4pXNpXz+T+/zxEeHuOGMCXz7nMh4oQRF8ed08KQglqOLCH9YPpvFM4bzq5e3s+nDVTTmTMaV1IdIgj3YXVbPd5/6lK89uo5xeWk89vWTeyc172/yjoPk7KAUCIDzpw/nri/M5pMD1fz+wYcBaB65IGzFqm1u5+H39nHB/73LzmP1/OnyEzhtUujRIcPG6HnayyaIhPNZKQk8/o2TKcpK5pqHPqD14Dpq808MW5FcLsUHuyv44v1r+OVL21lyfBG/vWzmoPSo8WSA34wBYMwCPelTdzSomBZTizJ5+ZbTWPGPP8MR+NKrcTi2vs/sUVlMLMygICOJvPREMpMTSIhzkBDvIMEhINDuVLR3uGh3umjtcFHV2EZ5fStHaprZcrSWNXurqG1upzg3lQevnss508IT86bPjJkPiA5tW3yq7cuS4uO450sn8PiHe5nw6lb+3Xga9/7Pm8wbN4ypRZmMyE4hPz2JrJQEEuMdJLk/CHQ4lf64XLQ5XVQ3tlPZ2EpZXSs7j9XzyYFqdpU1kBTv4LrTx/Ptc44jOSEytv6gcDh0xNFDa4O+9KI5I5k8PIODjz5KbUcq8+47wsnj25hWlMn4vDTyMhIZlpZEelKcbltxDuLjBKW0gtDuVLQ7XTS3OaloaKWsvpX9lY1sOlzLuv3VtDldnDIhlzs+Pz1w5qf+YtRJ4PwjlHwGo+0rTEVZKbxw0+f4+3MvkrS1me+vS2b7gXc4YWwOEwvSGZWTQnZKAtmpiSTFO4hzCAlxeutSitZ2F60dTlo7XNS1tHOsroWS2ha2ldTz8b4qSutayElN4JcXH8/yk0YPegEPsSjkR5+st0c+CTpwUU5aIlcX16BKEll01jm8tbuapz85TGNPN7ggGJ+XxtlTC1g8o4gzJueTEE1LplNydHjkks+CvlREuHJCC9DC1JPOZlZdNh/vq+L5jaHHp8tJTWDGyCy+dPIYlswcEX3eDmNOhl2r9CKyIL09phZlMmXYMepds/jSyHF8sKeCD3ZX0OHNN9wGiXEOJg/P4KoFY7lw1ghmj84O6T4RY5RbsB/+KCghD5CSGMe146tgK5yy8HwqDifyyuYSqptCT/AyPDOZE4tzOHdqIYtmDI8OxSFMxJ6QL5gKiA4sFkRS6E5KNyMFk7nx3KnceK4e4pXVt1LR0EplYxv1Le10OBVtTq25uxQkuTUvSwvLTU8kPz2JgswkUhOj/F9QOEOHbgiFYzpM0UnzT+ck93Lz2uZ2yupaKK9vpa6lgzani9Z2rVkBxDuE+DgH8W4NLCc1gdz0JHLTE8lNSxwY7xm7DJ+pt2Xbghr5AODsQMq2kjn3a/xkka6rtg4XpbUtVDa2UtnQRnO70625u2hzKhyi54wS3e0qKd5BXkYS+RlJ5KcnDdykvR0yhut1JkfWh3b9kU8gJYcvnn86X3S3icqGVkpqW6hpaqemuY22DhcdLoXTpehw6fpKio/rHDmmJcUzPCuZ4ZnJpA20uS+CDN1f5ovENK2dloUYJ+3YZh2n3o3DIbqh9Peikv5i+PHavNVaH3SGJo5t0f7jHqtcs1ISyEpJiB6zQTgpcMdNKdsavJCv2gMdLbq+3STGOxiTm8qY3CATjAwWCqdB+Y7Qri3bphUQj05fKwNRNrqLAqK4q48gBdM6tcygaCiHhmN6RWisUDgDUKElty7bqickI5QMIerIHAFJWVoABYsVPC+W2lb+ZJ1BzeaiqE6U0teFOfTyUCU2hXzhdB1+OIiED0CX2aJwevjLFK1YQicUk03ZtohFBYxKrMQ1ZSF2iBKnsxnFCvlTtPdW9f7grqsv0WGF84NMCxijxKaQL5gKyuXOwxoElbv1NpZexMxREJ/izp8bBC11OoBbCLlQBzUFU7XADjZ3ctVenZ4xiHSCgx5LSAdrsrHON5q8LWJTyA8br7dBpAUEtMYRnxKx2PFRicMBOcWh1RVA7uBdDh4SuZN0wpXm6uCuq9rb1S5jhbzj9LY8SPOWJeRjSdnqAxET8iJyu4gcEZGN7k9k1rWHQk6x3gY7TKzaqydto9nDIxIMGx+8Jm/VrVXXsUJn2wqiU1RKd6KxJuSTMyG9MPi2Vblbz31EKErnUCPSmvxdSqnZ7o/96E2RJjlLx54JWsjvg5x+DmUbDQwbp+vK5Qp4aicxL+T327+mqVLbmIcNQFTIgSZ7rE51GAw1ByFnTOwpWyESm+Ya0C9jMNqWy6Vf3GExKuQ7mnXEP7tU79eLqZLDF85gUJDtjjlefcD+NZYmG2uaPOj6CkXIZw/ueDL9SaSF/E0i8pmIPCwiXvNmici1IrJORNaVl5dHuDgeWNqpXRpKtaCLSSFvzWEEMayu3h97WjxAUroOghdM2+oU8jHYtrLHQO1h+26USukJ/ax+zpY2iOmTkBeR10Vks5fPMuBeYAIwGygBfuftHkqp+5VSc5VSc/Pz+zFwUk4x1BzSmXjsYGlmsSi4Ok0QQWinsSrkwT1K3G///Bp3islYFFzZY3TGtvoAic0tmquhraFrxGQISJ9WvCqlbAVyFpEHgBf78qywkz0WlFMHKsuxMfSrcycayRx82dr7TIbOSUq9zbgzLpceUocSNmIokD3WdkIMQLet1NyIxJCPeixhXXMQsmzkm61xKxoRSnA+FImkd02Rx9eLgRADoEQIKzhZvU07s6VpZBT5P28okpCi7et1NrWtpkpwtcdmhwiQNVK3F7u+8vUlQQfLGzJYtnW7dnlr1GM0edtEMnbNb0RkNqCA/cB1EXxW8Fi+7naHiXUlOgFxrE0kWmSO1KMeO3R2iDG0nsCTjCKdHrK52l40yrojMdwhurX32kP2zrc6g1g0bYVIxIS8UuqqSN07LGQEq8m748/HqttWRpF9c00sj3qguwJhS8gfhZFzI1umaCUhWStO9cfsnV9fAvHJemRpsEXsulCmDoO4RPuCq64kdoUW6Jyvds01lpDPjNH66pzDsFFf7S3avBWrmjxA+nD77rkNZXoBVawqWyEQu0JeRGtcdjX5IDNJDTkyR0JjGXS0BT7XqtP0KMlw1d90avI22lZnhxjDbSuj0L4m31Aau+0qRGJXyIPWuOzYmV0u/TLGsiZv/XY7GlfdUe0rHishhnuSHsR8j9X+YlnIB6vJZxghHwxGyNvRtjq9RWL4RbR+u51Osb40diddQduZU3KC0+RjWoFwa/J2vJHqS7s6UYMtjJC3o201uIeSsTxMtIJBNdpYlVxf0jWxHatk2JzDaKzQ21gOtpU+XMeVb6nxf16H+5xYfg9DIMaFfKFePdfW6P+8JveLmNaPK3KjDeu32xHyDcdiW2iBe77HjpAv18lCkrMjXqSoxRr1NZT5P89Stoy5JihiW8in5umtpU35wjqelhfZ8kQzqbl6G6iuXC59Tix3iKB/f6C6Ai3kU3N13P5YxdLMA5m3rE7AaPJBEcMtiy6h3WRXyMew4IpP0jG8AwmulhodLiKWO0TQCkRTZeDzmipju12BhyYfwMMm1r22QiS2hbylnTZV+T/PDKk1aXmBzTVWXabGuJBPy4X2xsB5hBvLTYfY+R4G6BStthfrnWKQGCEPgbXTpgozpAYtjAKNejrnL3IjX55oxrYp0Ah5krNBHIGFvJVS0c4qYkMnsS21gjHXxPqLCPbszNbxWNfkO7VTO20rxjVTh0Nnagsk5FtqIC5JB8wz2Ca2hXxSJjgSjLZll9Rce6MeMPXVqUD4EVwdrTrtX6zXFei2FVCTrzExa0IgtoW8iD0TRGOF0UxBa5xNFf5zvXZq8sZcA0CjH8FlJvS7SM0NPDfWXA0p2f1SnKFEbAt50C+jvxcRzJDaIi0flKvLNuqNpkpISDNDastu7E+BsCYSjQKh68uOuSbWnR9CwAj5tFz/L2JHG7TWmiE12JvDaKwwk67gnkyM8y+4rGOxPuoBm+aaamOuCQEj5FPz/NuZLa3VNK6uoXIgTd5opnoyMdAchrWM35gguoS8v/g1zbWmrkKgr4m8LxORLSLiEpG5PY79SER2i8gOETm/b8WMIIFsgZ0vohHynXXQXOP7nKZKo5laBNJOrXo0JghdV64OPRHtC2OuCYm+avKbgUuAdzx3isg0YDkwHVgE3CMicX18VmRIydbmGJfT+3HzInZh1YE/Td4MqbuwrUBk90dpoptAC6Kc7g7AtK2g6ZOQV0ptU0rt8HJoGfCkUqpVKbUP2A3M68uzIobVaFpqvR+39psX0aOuanyf01Jj6soiJdt/XTXXGL9vi0Crz817GDKRssmPBDwz8x527+uFiFwrIutEZF15uY0Ih+HG0k59vYzWfqPJdyUx96XJu1zQUmfqyiI5279pq8XYmDvp9EbyocmbubGQCZjIW0ReB7xF6b9VKfW8r8u87PM6o6KUuh+4H2Du3Lk2sgaEmUCTiZ3mmqz+KE1044jT9eBLcLXWAcoILotAmryxMXfRaQqs8X7cKFshE1DIK6XOCeG+h4HRHt9HATYzZvczdhuXEVya5GzfHWLni2g6REDXVXuTdsONT+x9vLnG1JWF9X75Mpta76d5D4MmUuaaF4DlIpIkIuOAScBHEXpW3+hsXDXejzfX6MU9sZqvtCcpOf7rCoy2ZRGobZn5iy6szs5n2zLmmlDpqwvlxSJyGFgArBSRVQBKqS3AU8BW4BXgRqWUD/eVASaQW6B5EbuTku1HkzeTY90INEpsrjEdokVcglamfDpA1Oitqa+gCWiu8YdS6lngWR/HfgH8oi/37xcCTrzWmoblSUoO1B7xfsy8iN0xmnxw+Jvv6dTks/urNEMGs+I1IRnik/1PvJqG1YU/m7yZpO6OP03eeCL1xt9EdXMNJKYbs2kIGCEP/l3dWmqM0PLEssl7W35uJqm740+Tb63FeCL1IDnbv7nGdIghYYQ8BNYgTOPqIiVbLz9va+h9rKVWB+VKTO/3YkUl/jR5M0ndm+Qs/xOvZtI1JIyQB914zMSrPfxNVFsugeJtmUQM4k+TN6Oe3qRk6yBk3jBm05AxQh7cw8Sa3vudbo3VaFtd+ItfYzrE7lgeI946RMssYdpWFwE1+ez+LM2QwQh5cGsQNb33G5fA3viLX2NMW73xta7ALO7pTXK2XjXtLVigscmHjBHy4Hvi1azg7I2/MBAmFktvfCoQ7n1GcHXRuSDKi8nGmGtCxgh50I2nrV6bZzwxk2O98WeTN55IvfFlCjTupr3xFdqgvQU6ms3Ea4gYIQ++ww23mAUYvfC3eMyYa3rjT5N3xENiWj8XKIrx1bbMqKdPGCEPvhuX0eR7k5im3SR7dohKGXONN/xp8snZxhPJE1/mGrPatU8YIQ8eduaa7vvNxGtvRLxrp+1N4Go3HWJPfMX6MZ5IvfH1HnZOUhtzTSgYIQ8eGkSPl9EME73jzdXN2Ji94xlu2BNj2uqNr0iU5j3sE0bIg++ViZ3p2ZL7uUBRjrfl52Zxj3d8TSYaTb43nWZTX+Yao8mHghHy4HtlonkRveMtWqBZ3OMdf/M9pq66Y833+DTXZPdzgYYGRsiDHw2ixryI3kjJ9l5X1jFDF/7me0xddcea7/GqyQskGVNgKBghDx7hhmu67zcvone8eYyYhWPe8abJW55IRoHoja+2lZwFDiOuQqGvmaEuE5EtIuISkbke+4tFpFlENro/f+l7USOMt8lEs5TaO8lZWkh5hhs27qbe8abJt9aDchoFwhtW2/LErHbtE33KDAVsBi4B7vNybI9SanYf799/eAtt0FwD+VMGoDBRTko2ONugvRkSU/W+Tpu80eS74U2TN6Me33hzzzVhhvtEX9P/bQOQobCgw1tMebNM3zuerm6dQr5G20wdcQNVqujEmyZvRj2+Sc6CmoPd95kRdZ+IpJFrnIhsEJHVInKar5NE5FoRWSci68rLyyNYnAD01ORNejbfeJuotmLJG7rTmaC6pmufcTf1jbfcDibMcJ8IqMmLyOvAcC+HblVKPe/jshJgjFKqUkROBJ4TkelKqbqeJyql7gfuB5g7d66XnHL9REo2lG/v+m7Ss/nGm3Zq3E1909MEYTR531gTr0p1hXxorjHmmj4QUMgrpc4J9qZKqVag1f33JyKyBzgOWBd0CfuLnrP6xu/bN95ijBi7qW96tS3336ZT7E1neslGSEp3eyLVmPewD0TEXCMi+SIS5/57PDAJ2BuJZ4WN5CxtnnG59Hfj9+0bb5OJxgPCNz0Xj3Wu4Bw2IMWJanpmHmtr0ELftK2Q6asL5cUichhYAKwUkVXuQwuBz0TkU+Bp4HqlVFXfihphUrIB5TbTAM3u4hrttDfewkAYTd43PSf1m6vBkWDCDHuj5+pzE5ysz/TVu+ZZ4Fkv+/8N/Lsv9+53PAVXSo7RtvzR01xjhtT+Sc6G5s+6vlsd4lDwSgs3PRUI6z00bStkzBIyi54aRJPR5H0SFw+J6V111d6k/eZNXXnHmyZv6so7Pd/DzvkLU1+hYoS8RU+3QDNM9I9nJEqT1ME/ydnatuxs19+NkPdNz/SSZm6szxghb2GZIDobV5XWVuMTB6xIUY2nW6DpEP3TM9ywEfK+6Tnxasw1fcYIeYteEz7mRfSLZ6wf8yL6p5educa0LV8kZbjTS9bo7yaWfJ8xQt6i54vYVGUalj88zTXGbuofo0DYR6S7y2lTpY4QazyRQsYIeYvENHDEmxfRLp4vorHJ+8dTgeho0/Z507Z84zlR3VQFqbnGE6kPGCFvIdJ7MjHVuE/6JHVY11oCY5P3j6cmbzrEwHi6MDdVmvewjxgh70lKtseEjzHX+CUtX7tOtjXqOpM4PVFt6I3nZKKxMQcmNQ8aK/TfTZVakzeEjBHynqQVQEO5Dm1gzDX+ScvX28Zy/UnLN0NqX3S6BRohb4v0fN2mwAj5MGCEvCfpBdBwDFrrQLnMald/dAr5Cmgo03Vn8E58ohbqDce00AJjgvBHmlvIu1xGyIcBI+Q9SS/QAsvSItLyBrY80YxVN43lWnilFw5seaKd9EKoL4X6Ev09o2hgyxPNpBXooGRNle4Q1qZD7AtGyHuSXqADlFXt098zRwxseaIZT3NNQ5kR8oFIL9SdYX2Jnr+w6s/QG6tujm3S2wxv6SwMdjFC3hNLUJVs1NvMkQNWlKjH0uQbjkGjMdcEJGM41B/T2nx6oUmT6I90t5A/ukFvs0YNXFmGAEbIe2IJeatxmSG1bxJS9DC65DM9tDaavH8sTb7uqNFMA2G1pcPuHENGyPcJI+Q9sYT6oY/0RJmVpNrgndyJsO8d/bcRXP7JGA7OVijbZsyAgcgpBgT2vq2/mxF1nzBC3pNh4/S2qQIyzIsYkNyJXSsTh40f0KJEPVb9NJQaoRWIhBTIGavXYSRlQXLmQJdoUNPXzFD/KyLbReQzEXlWRLI9jv1IRHaLyA4ROb/PJe0PkjK6hHvBlIEty2Ag10OwGyHvn7zjuv4umDpw5RgsWPWVa9pVX+mrJv8aMEMpNRPYCfwIQESmAcuB6cAi4B4r52vUUzhdb0efPLDlGAyMmKO3KTk66bLBN56d4Jj5A1eOwULhDL0deeLAlmMI0Nf0f696fF0DXOr+exnwpFKqFdgnIruBecCHfXlev3DB/8KGv8OcKwe6JNHP+DPhzNtg0jkDXZLoRwSueRGObTGavB0W3KQXJC64caBLMugRpVR4biSyAvinUuoxEfkzsEYp9Zj72EPAy0qpp71cdy1wLcCYMWNOPHDgQFjKYzAYDLGCiHyilJrr7VhATV5EXge8uU7cqpR63n3OrUAH8Lh1mZfzvfYmSqn7gfsB5s6dG54ex2AwGAyADSGvlPI7FheRa4ClwNmqa1hwGBjtcdoo4GiohTQYDAZDaPTVu2YR8APg80qpJo9DLwDLRSRJRMYBk4CP+vIsg8FgMARPnyZegT8DScBrosPMrlFKXa+U2iIiTwFb0WacG5VSzj4+y2AwGAxB0lfvmol+jv0C+EVf7m8wGAyGvmFWvBoMBsMQxgh5g8FgGMIYIW8wGAxDmLAthgoHIlIO9GU1VB5QEabiDAZi7feC+c2xgvnNwTFWKeU1E01UCfm+IiLrfK36GorE2u8F85tjBfObw4cx1xgMBsMQxgh5g8FgGMIMNSF//0AXoJ+Jtd8L5jfHCuY3h4khZZM3GAwGQ3eGmiZvMBgMBg+MkDcYDIYhzJAQ8iKyyJ1LdreI/HCgyxNpRGS0iLwlIttEZIuI3DLQZeovRCRORDaIyIsDXZb+QESyReRpdy7lbSKyYKDLFGlE5Nvudr1ZRJ4QkeSBLlO4EZGHRaRMRDZ77BsmIq+JyC73Nicczxr0Qt6dO/ZuYDEwDbjcnWN2KNMBfFcpNRWYD9wYA7/Z4hZg20AXoh/5I/CKUmoKMIsh/ttFZCTwTWCuUmoGEIfOFz3UeASd/9qTHwJvKKUmAW+4v/eZQS/k0bljdyul9iql2oAn0TlmhyxKqRKl1Hr33/XoF3/kwJYq8ojIKGAJ8OBAl6U/EJFMYCHwEIBSqk0pVTOgheof4oEUEYkHUhmCCYeUUu8AVT12LwMedf/9KHBROJ41FIT8SOCQx/fDxIDAsxCRYmAOsHaAi9If/AH4PuAa4HL0F+OBcuCvbhPVgyKSNtCFiiRKqSPAb4GDQAlQq5R6dWBL1W8UKqVKQCtyQEE4bjoUhLztfLJDDRFJB/4NfEspVTfQ5YkkIrIUKFNKfTLQZelH4oETgHuVUnOARsI0hI9W3HboZcA4YASQJiJXDmypBjdDQcjHZD5ZEUlAC/jHlVLPDHR5+oFTgc+LyH60Se4sEXlsYIsUcQ4Dh5VS1ijtabTQH8qcA+xTSpUrpdqBZ4BTBrhM/cUxESkCcG/LwnHToSDkPwYmicg4EUlET9K8MMBliiiicy0+BGxTSv1+oMvTHyilfqSUGqWUKkb/j99USg1pDU8pVQocEpHJ7l1no1NqDmUOAvNFJNXdzs9miE82e/ACcI3772uA58Nx077meB1wlFIdInITsAo9E/+wUmrLABcr0pwKXAVsEpGN7n0/Vkq9NHBFMkSIm4HH3QrMXuArA1yeiKKUWisiTwPr0V5kGxiCIQ5E5AngDCBPRA4DPwV+DTwlIl9Dd3aXheVZJqyBwWAwDF2GgrnGYDAYDD4wQt5gMBiGMEbIGwwGwxDGCHmDwWAYwhghbzAYDEMYI+QNhgCIyEUi8p2BLofBEApGyBsMgbkIMELeMCgxQt5gMBiGMGYxlMHgBxF5hK6l5hYH3OEVDIaoZ9CHNTAYIszPgHzgJODz7n2tA1ccgyE4jJA3GPyglNojIuVAm1JqzUCXx2AIFmOTNxgMhiGMEfIGg8EwhDFC3mAwGIYwRsgbDIFpBVIGuhAGQygYIW8wBGYrMExEbhCRk0Tk+IEukMFgF+MnbzAEQETSgAeBRUA2xk/eMIgwQt5gMBiGMMZcYzAYDEMYI+QNBoNhCGOEvMFgMAxhjJA3GAyGIYwR8gaDwTCEMULeYDAYhjBGyBsMBsMQxgh5g8FgGML8P1ycpFzMBfQxAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "def err(delta):\n",
    "    error = abs(delta[0])\n",
    "    return error\n",
    "\n",
    "def pendulum(x,t):\n",
    "    g = 9.81\n",
    "    l = 0.1\n",
    "    theta = x[0]\n",
    "    omega = x[1]\n",
    "    f0 = omega  #d(theta)/dt\n",
    "    f1 = -(g/l)*np.sin(theta) # d(omega)/dt\n",
    "    #f1 = -(g/l)*theta\n",
    "    return np.array([f0,f1])\n",
    "\n",
    "y0 = [3.1241,0.]\n",
    "t = np.arange(0.,10,0.01)\n",
    "tol = 1e-7\n",
    "xt = BST(pendulum,err,y0,t,tol)\n",
    "\n",
    "#print(2*np.pi*np.sqrt(0.1/9.8))\n",
    "\n",
    "plt.plot(t,xt[:,0],label='$\\Theta(t)$')\n",
    "plt.plot(t,xt[:,1],label='$\\omega(t)$')\n",
    "plt.title('Nonlinear pendulum',size=16)\n",
    "plt.xlabel('t',size=16)\n",
    "plt.legend(fontsize=16)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Exercise. Planetary orbits\n",
    "\n",
    "Calculate and plot the orbits of Earth and Pluto\n",
    "\n",
    "- Distance at perhielion:\n",
    "\n",
    "  Earth: $1.4710 \\times 10^{11}$ m  \n",
    "  Pluto: $4.4368 \\times 10^{12}$ m\n",
    "  \n",
    "  \n",
    "- Velocity at Perhielion:\n",
    "\n",
    "  Earth: $3.0287 \\times 10^4$ m/s  \n",
    "  Pluto: $6.1218 \\times 10^3$ m/s  \n",
    "  \n",
    "For both planets, calculate at least a full orbital period with an accuracy of 1 km/year. For the earth, take steps of one week. For Pluto, adjusts the step to keep the computational time reasonable, with the same accuracy.  \n",
    "\n",
    "Mass of the sun: $M = 1.9891  \\times 10^{30}$ kg; Newton's constant $G = 6.6738 \\times 10^{-11} \\, {\\rm m}^3 {\\rm kg}^{-1} {\\rm s}^{-2}$  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [],
   "source": [
    "def f(x,t):   \n",
    "    \n",
    "    G = 6.6743e-11  # Newton's constant \n",
    "    sec2years = 3.17098e-8\n",
    "    m2km = 1e-3\n",
    "    G = (G*m2km**3)/(sec2years**2) # converting sec to years and meters to km\n",
    "    M = 1.98847e30  # Sun's mass  \n",
    "    GM = G*M\n",
    "    \n",
    "    x1 = x[0] # x\n",
    "    x2 = x[1] # y\n",
    "    v1 = x[2] # vx\n",
    "    v2 = x[3] # vy\n",
    "    \n",
    "    # Comet distance from the sun\n",
    "    r = np.sqrt(x1**2. + x2**2.)\n",
    "    # Array of derivatives\n",
    "    f0 = v1                 # dx/dt = vx\n",
    "    f1 = v2                 # dy/dt = vy\n",
    "    f2 = -GM*x1/r**3        # dvx/dt -GM*x/r^3\n",
    "    f3 = -GM*x2/r**3        # dvy/dt = -GM*y/r^3\n",
    "    \n",
    "    return np.array([f0,f1,f2,f3])\n",
    "\n",
    "\n",
    "def err(delta):\n",
    "    error = np.sqrt(delta[0]**2 + delta[1]**2)\n",
    "    return error"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Earth's orbit"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Earth's orbit\n",
    "xi = 1.471e8                  # Distance at perihelion in km\n",
    "sec2years = 3.17098e-8\n",
    "vy0 = -3.0287e1/sec2years     # Velocity at perihelion, km/yr\n",
    "y0 = [xi,0.,0.,vy0]\n",
    "t = np.arange(0.,1.02,0.02)\n",
    "tol = 1. # Tolerance: 1km/yr\n",
    "\n",
    "xt = BST(f,err,y0,t,tol)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Pluto's orbit"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Pluto's orbit\n",
    "\n",
    "xi = 4.4368e9                # Distance at perihelion in km\n",
    "sec2years = 3.17098e-8\n",
    "vy0 = -6.1218/sec2years     # Velocity at perihelion, km/yr\n",
    "y0 = [xi,0.,0.,vy0]\n",
    "t = np.arange(0.,250,0.1)\n",
    "tol = 1. # Tolerance: 1km/yr\n",
    "\n",
    "yt = BST(f,err,y0,t,tol)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 792x360 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, axs = plt.subplots(1,2,figsize=(11,5))\n",
    "axs[0].plot(xt[:,0]/1e8,xt[:,1]/1e8,label='Earth')\n",
    "axs[1].plot(yt[:,0]/1e8,yt[:,1]/1e8,label='Pluto')\n",
    "axs[0].set_xlabel('$x \\, (10^8 \\, km)$',fontsize = 15)\n",
    "axs[1].set_xlabel('$x \\, (10^8 \\, km)$',fontsize = 15)\n",
    "axs[0].set_ylabel('$y \\, (10^8 \\, km)$',fontsize =15)\n",
    "axs[0].set_title('Earth',size=18)\n",
    "axs[1].set_title('Pluto',size=18)\n",
    "#axs[1].set_xlim(-80,60)\n",
    "#axs[1].set_ylim(-60,60)\n",
    "axs[0].scatter(0.,0.,s=50,c='goldenrod')\n",
    "axs[1].scatter(0.,0.,s=50,c='goldenrod')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Adaptive step Bulirsch-Stoer "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "def MMP(f,y0,h,interval):\n",
    "    # Modified midpoint method\n",
    "    # Time interval\n",
    "    t0 = interval[0]\n",
    "    t1 = interval[1]\n",
    "    # Initial conditions\n",
    "    xstart = np.atleast_1d(y0)\n",
    "    # Number of equations in the system\n",
    "    # (length of equation vector)\n",
    "    Neq = len(xstart)\n",
    "    # Initializing arrays with solutions x,y\n",
    "    x = np.zeros((1,Neq),dtype='float')\n",
    "    x[0,:] = np.copy(xstart)\n",
    "    y = np.zeros( (1,Neq),dtype='float')\n",
    "    y[0,:] = x + 0.5*h*f(xstart,t0)\n",
    "    # Array containing times at which the solution \n",
    "    # is computed\n",
    "    t = [ ]\n",
    "    t.append(t0)\n",
    "    Nsteps = int( (t1-t0)/h )\n",
    "    for i in range(Nsteps):\n",
    "        xnext = x[i] + h*f(y[i],t[i]+0.5*h)\n",
    "        ynext = y[i] + h*f(xnext,t[i]+h)\n",
    "        tnext = t[i] + h\n",
    "        y = np.vstack( (y,ynext) )\n",
    "        x = np.vstack( (x,xnext) )\n",
    "        t.append(tnext)\n",
    "    # Last step average\n",
    "    x[Nsteps,:] = 0.5*( x[Nsteps,:] + y[Nsteps-1,:] + 0.5*h*f(x[Nsteps,:],t1) )\n",
    "    return x[Nsteps,:]\n",
    "\n",
    "\n",
    "def step(deriv,errfunc,y0,interval,tol):\n",
    "    # Internal recursive step for aBST\n",
    "    demomode = False\n",
    "    R1 = [ ]\n",
    "    H = interval[1] - interval[0]\n",
    "    h = H\n",
    "    R1.append(MMP(deriv,y0,h,interval))\n",
    "    n = 1\n",
    "    error = H*tol + 1.\n",
    "    while (error > H*tol):\n",
    "        n = n + 1\n",
    "        if (n<9):\n",
    "            h = h/2.\n",
    "            R2 = [ ]\n",
    "            R2.append(MMP(deriv,y0,h,interval))\n",
    "            for m in range(1,n):\n",
    "                j = m-1\n",
    "                fact = (n/(n-1))**(2.*m) - 1.\n",
    "                delta = (R2[j] - R1[j])/(fact)\n",
    "                Rnext = R2[j] + delta\n",
    "                R2.append(Rnext)\n",
    "            error = errfunc(delta)\n",
    "            R1 = R2\n",
    "            x1 = R1[n-1]\n",
    "        else:\n",
    "            midpoint = (interval[0] + interval[1])/2\n",
    "            intervalold = interval\n",
    "            interval = (interval[0],midpoint)\n",
    "            if demomode:\n",
    "                print('Split 1', interval)\n",
    "            xhalf = step(deriv,errfunc,y0,interval,tol)\n",
    "            half2 = (midpoint,intervalold[1])\n",
    "            if demomode:\n",
    "                print('Split 2', half2)\n",
    "            x1 = step(deriv,errfunc,xhalf,half2,tol)\n",
    "            break\n",
    "            \n",
    "    return x1\n",
    "            \n",
    "\n",
    "def aBST(deriv,errfunc,y0,t,tol):\n",
    "    # Bulirsch-Stoer ODE solver\n",
    "    # with adaptive step\n",
    "    demomode = False\n",
    "    Nbins = len(t) - 1\n",
    "    x0 = np.atleast_1d(y0)\n",
    "    Neq = len(x0)\n",
    "    x = np.zeros((Nbins+1,Neq),dtype='float')\n",
    "    x[0,:] = x0\n",
    "    for i in range(Nbins):\n",
    "        if demomode:\n",
    "            print('bin=',i)\n",
    "        interval = (t[i],t[i+1])\n",
    "        x1 = step(deriv,errfunc,y0,interval,tol)\n",
    "        x[i+1,:] = x1\n",
    "        y0 = x1       \n",
    "    return x   "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [],
   "source": [
    "def err(delta):\n",
    "    error = abs(delta[0])\n",
    "    return error\n",
    "\n",
    "def pendulum(x,t):\n",
    "    g = 9.81\n",
    "    l = 0.1\n",
    "    theta = x[0]\n",
    "    omega = x[1]\n",
    "    f0 = omega  #d(theta)/dt\n",
    "    f1 = -(g/l)*np.sin(theta) # d(omega)/dt\n",
    "    #f1 = -(g/l)*theta\n",
    "    return np.array([f0,f1])\n",
    "\n",
    "y0 = [3.1241,0.]\n",
    "t1 = np.arange(0.,11.,1.)\n",
    "tol = 1e-7\n",
    "xt = aBST(pendulum,err,y0,t1,tol)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [],
   "source": [
    "y0 = [3.1241,0.]\n",
    "t2 = np.arange(0.,10.01,0.01)\n",
    "tol = 1e-7\n",
    "yt = BST(pendulum,err,y0,t2,tol)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(t1,xt[:,0],label='adaptive',color='black')\n",
    "#plt.plot(t,xt[:,1],label='$\\omega(t)$')\n",
    "plt.plot(t2,yt[:,0],label='benchmark',linestyle='dashed', color='red')\n",
    "plt.title('Nonlinear pendulum',size=16)\n",
    "plt.xlabel('t',size=16)\n",
    "plt.legend(fontsize=16)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [],
   "source": [
    "def f(x,t):   \n",
    "    \n",
    "    G = 6.6743e-11  # Newton's constant \n",
    "    sec2years = 3.17098e-8\n",
    "    m2km = 1e-3\n",
    "    G = (G*m2km**3)/(sec2years**2) # converting sec to years and meters to km\n",
    "    M = 1.98847e30  # Sun's mass  \n",
    "    GM = G*M\n",
    "    \n",
    "    x1 = x[0] # x\n",
    "    x2 = x[1] # y\n",
    "    v1 = x[2] # vx\n",
    "    v2 = x[3] # vy\n",
    "    \n",
    "    # Comet distance from the sun\n",
    "    r = np.sqrt(x1**2. + x2**2.)\n",
    "    # Array of derivatives\n",
    "    f0 = v1                 # dx/dt = vx\n",
    "    f1 = v2                 # dy/dt = vy\n",
    "    f2 = -GM*x1/r**3        # dvx/dt -GM*x/r^3\n",
    "    f3 = -GM*x2/r**3        # dvy/dt = -GM*y/r^3\n",
    "    \n",
    "    return np.array([f0,f1,f2,f3])\n",
    "\n",
    "\n",
    "def err(delta):\n",
    "    error = np.sqrt(delta[0]**2 + delta[1]**2)\n",
    "    return error\n",
    "\n",
    "# Earth's orbit\n",
    "xi = 1.471e8                  # Distance at perihelion in km\n",
    "sec2years = 3.17098e-8\n",
    "vy0 = -3.0287e1/sec2years     # Velocity at perihelion, km/yr\n",
    "y0 = [xi,0.,0.,vy0]\n",
    "t = np.arange(0.,1.1,0.1)\n",
    "tol = 1. # Tolerance: 1km/yr\n",
    "\n",
    "xt = aBST(f,err,y0,t,tol)\n",
    "\n",
    "# Earth's orbit\n",
    "xi = 1.471e8                  # Distance at perihelion in km\n",
    "sec2years = 3.17098e-8\n",
    "vy0 = -3.0287e1/sec2years     # Velocity at perihelion, km/yr\n",
    "y0 = [xi,0.,0.,vy0]\n",
    "t = np.arange(0.,1.02,0.02)\n",
    "tol = 1. # Tolerance: 1km/yr\n",
    "\n",
    "yt = BST(f,err,y0,t,tol)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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PvjADR06dP+xSj+/8cYb3ZQpU5xzzn322Wdu4MCBzjnnLrroIrdgwQLnnHM5OTmuS5cuNXp/pVXn8zYe+NvfNHdt337IuwCyXDk5NTKbZfpKXVbCjyzjxo2joKDggGUFBQWMGzeO1NTUQ97v448/zmuvvQbATz/9xH/+8x8GDBhAixYtABg1ahTffvstoM1IR40axfr169m7d+8BTRyHDRtGgwYNaNCgAaeffjpffPEFTSoY1mPUqFFMnDiRK664gpkzZzJq1CgA3nvvPb755pv9223fvp0dO3bQyIb3jnxHHqn3a9dCly4B331kVukceyy8+ir07Ol1JCaAcnNzq7W8KubPn897773HwoULWbp0KccffzxdunQpt0XLDTfcwPXXX8/y5cuZNGnSAc0cD35NZa1i+vXrx5o1a8jPz+d///sfv//97wEoLi5m4cKFLFmyhCVLlrB27VpL9tGidMIPgshM+M2bw4gRcMQRXkdiAighIaFay6ti27ZtNG3alPj4eFatWsVnn33Grl27mD9/Pps3b2bfvn28/PLLB2x/pO+fctq0aQfsa9asWezevZvNmzczf/58evfuTaNGjdixY0eZxxYRRowYwc0330zXrl05wvf3OnjwYJ588sn92y1ZsuSQ358JM5bwD8FXX8F773kdhQmw9PR04g8aJiM+Pp709PRD3ueQIUMoLCwkOTmZ8ePH07dvX9q0acOECRPo168fgwYN4oQTTti//YQJExg5ciSnnnoqzZs3P2Bfffr0YejQofTt25fx48fTtm1bkpOTiYuLo0ePHjz66KO/Of6oUaOYMWPG/uoc0CqmrKwskpOT6datG88888whvz8TZtq1g4cegl69grJ7cUEejrMmUlJSXFZWVvVfeNVV8NZbQfuVNIGzcuVKunbtWuXtMzMzGTduHLm5uSQkJJCenl6j+vtAmTBhAocddhi33nqr16FUqLqftwk/IrLYOZdS1rqAlPBFZIiIrBaRNSJyexnrRUQe961fJiInlLWfQMjMzGTeCy+weN26gDXbM6EjNTWV7OxsiouLyc7ODolkb0ygXHvttSTFxtJVhLi4OK699trAHqC85jtVvQGxwPdAR6AusBTodtA25wBzAQH6Ap9XZd/VbZbpb7a3CNybAWy2Z4LHmgnWLvu8Q9eYMWMc4N4C93mppsdjxoyp1n6ooFlm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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(xt[:,0],xt[:,1],color='black', label='adaptive')\n",
    "plt.title('Earth orbit')\n",
    "plt.plot(yt[:,0],yt[:,1],linestyle='dashed',color='red', label = 'benchmark')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  }
 ],
 "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.9.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
