{ "cells": [ { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "## Math 157: Intro to Mathematical Software\n", "## UC San Diego, winter 2018" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "## Homework 3: due February 2, 2018" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "Please enter all answers within this notebook unless otherwise specified. As usual, don't forget to cite sources and collaborators.\n", "\n", "Through this problem set, use the SageMath 8.1 kernel unless otherwise specified." ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "### Problem 1: Gradient vector fields" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "Grading criterion: correctness of code." ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "1a. Compute the gradient of $f(x,y) = 3\\sin(x) - 2\\cos(2y) - x - y$." ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ] }, "execution_count": 12, "metadata": { }, "output_type": "execute_result" } ], "source": [ "x,y=var('x,y')\n", "f=3*sin(x)-2*cos(2*y)-x-y\n", "g=f.gradient()\n", "show(g)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "1b. Plot the 2-dimensional vector field defined by the gradient of $f$ in the rectangle $(-2,-2) \\leq (x,y) \\leq (2,2)$." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAk0AAAGFCAYAAADgqcccAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAPYQAAD2EBqD+naQAAIABJREFUeJzsnXdYFGfXh88uu1QRkCJIEVQEe8MSNdbEjt1YYpoxMWrsJfbEEtGoscVEYo9G1Nh7xxJsKDZQAREQFES6dHbn9/3BNxNWQBeYZzB5576uvd5XAs+9szvzzJmnnKMAAJKRkZGRkZGRkXkjyop+AzIyMjIyMjIy/wbkoElGRkZGRkZGRg/koElGRkZGRkZGRg/koElGRkZGRkZGRg/koElGRkZGRkZGRg/koElGRkZGRkZGRg/koElGRkZGRkZGRg/koElGRkZGRkZGRg9UUgs5jqPnz5+Tubk5KRQKqfUyMjIyMjIyMjoAoFevXlG1atVIqSx5PEnyoOn58+fk7OwstVZGRkZGRkZG5o3ExMSQk5NTif+93EGTj48PHThwgB49ekQmJibUunVrWrp0KdWuXbvY3zc3NxfeWOXKld/a/pAhQ2jXrl3lfZvvjEdK13/xmNzd3Sk8PJy5h0j+nv4NnvT0dHJ2dta7PykP8vf07nuIpOsj5PPh3+HS93zg+xI+RimJcgdNly9fpnHjxpGXlxdpNBqaOXMmdenShR4+fEgmJiZFfp+fkqtcubJenZxKpWLeGUrpkdL1XzwmhULxnzum/+L3JOUxEenfn5QH+Xt69z1E0vUR8vnw73CV9nx427KhcgdNx48f1/n31q1byc7Ojm7dukVt27Ytb/OSMXTo0P+c6794TI6OjpJ4iOTv6d/gkRL5e3r3PUTS9RHy+fDvcIl9PigAQMwGHz9+TB4eHnT//n2qW7dukf+enp5OFhYWlJaWplf017t3bzp8+LCYb1HmX4x8PsgUprT9icx/H7mPkCmMvueDvn2JqCkHANDEiROpbdu2xQZMMjIyMjIyMjL/VkQNmsaMGUMPHjwQZXHX3bt3acCAAdSnTx8R3tnbuXPnDo0fP55evXolie/mzZu0fPlySklJkcQXFBREvr6+lJCQIIkvODiYfvnlF9F9JQ3phoaG0vz58yktLU1UX0mEh4fT+PHjKTs7WxJfSEgIffnll5Sfny+J79q1azRixAjSarWS+I4ePUoTJ04kkQe+iwUAbdiwgZYuXcrcRUSk0Wjohx9+oL1790riS09PpwkTJtD9+/cl8T158kTSvvPSpUu0bNmyEv+72NM+W7ZsoSNHjojaZknEx8fTqlWr6NGjR5L4Lly4QGvXrpXsu1u+fDnt3LlTkus8Pz+fhgwZQk2aNBG3YYjE2LFj4eLigujo6Df+XlpaGogIdnZ2qFq1Kpo2bQpvb294e3tj586dAICnT5+iWrVqMDIywvXr18V6iyWSn5+Ppk2bQqVS4d69e8x9ADB8+HAQEUJDQyXxff/99yAiyY7vl19+ARHh4sWLkvh+//13EBH++usvSXz88a1bt04S38KFC0FEWLJkiSS+cePGgYjg4+Mjia9v374gIvj6+pbq7/j+JC0tTe+/ycvLQ9OmTaFQKHDq1KnSvtVSk5CQgKpVq8LCwgJRUVHMfbdv34aBgQHee+89aLVa5r5NmzaBiLB8+XLmLgD45JNPQESIi4uTxGdhYYEPP/xQEtfRo0dBRNi0aZMkvh49ekClUknyWd69excqlQrNmjWDRqNh6uI4Dp999hmICBMnTizy33fu3CnEHU2bNkXVqlVhZ2enV18iStA0duxYODk5ISIi4q2/+7ZOLiUlBfXq1YNCocDevXvFeHtvZenSpSAizJ07VxJfYmIijIyM0LFjR0l8ADBkyBAoFApkZ2dL4tu9ezeICPv27ZPEFxsbCyLCZ599JokvKysLdnZ2qF69OvLy8pj7cnJyUKdOHZiYmODJkyfMfVlZWWjQoAFUKpUkDy4pKSmoWbMmDA0NERgYqPfflSVoAoAnT57AysoK1tbWb33QE4NTp06BiNCmTRvk5+cz902ZMgVEhPXr1zN35ebmwsnJCQ4ODpL0L7t27ZI0sKhVqxaaNGkiiWvFihUgIgQEBDB3RUVFQaFQoH///sxd+fn58PLygkqlwp07d5j75s2bByJCnz599A7Q9O1Lyh00jR49GpaWlrh06RLi4+OFV0kXz5veWE5ODjp27AgiwsqVK8v71vQiLCwMxsbGqFOnDnJyciRxrly5EkSEXbt2SeIDgMaNG6NGjRqS+c6dOydZp83TuHFj2NnZSfJ0DQBLliwBEWHbtm2S+C5evAgiQrdu3cBxHHNfSEgIjI2NUaNGjVIHJWXhzp07MDExQfXq1ZGYmKjX35Q1aAKAY8eOQaFQoHnz5pJc+1OnTgUR4fvvv2fuevXqFZydnWFpaSnJKMLq1aslu95TUlJgYGAgyc0eAFq1agVnZ2dJXF999RWISO/zvzzMnTsXRCTJaOvy5ctBRJg1axZz18aNG0FEaNmyJTIzM/X+O8mCJoVCAaVSWeRV0o2kpDfGcRw+/vjjEofTWKDVatG+fXsoFApJInug4Dg9PT1hY2MjWZCm1WphYmKCHj16SOIDgHv37oGIsGjRIsmcs2fPBhFJMjICFJzLlpaW8PT0lCxQGzFiBIgIu3fvlsS3fv16EBGGDx8uiW/btm0gInTt2lWvJ8TyBE3AP0+k33zzTZn+vjTk5uaiWbNmUCqVuHTpEnPf4cOHQUQYOnQoc1dmZiZsbW3h5uYmyUhau3btYG5ujtzcXOYub29vGBsbS/Kg8v7778PW1pa5Jz8/H9WqVYObmxvzvuvx48cwMTGBh4cH85HI48ePw8DAADVr1kRCQkKp/layoKm0lPTGZs6cCSLCwIEDJbsB+fr6gogwbtw4SXwAcOnSJRARpk2bJpkzKioKRIRJkyZJ5nz+/LmkATAAXL16FUSEefPmSebkn9akmkpOTEyEjY0N7O3tkZqaytzHcRz69+8PIsIff/zB3AcA33zzjd4jMuUNmjQaDbp27SrZiGFYWBjMzMzg7OyM5ORk5r5+/fpJNpqwePFiEBG2b9/O3PXTTz+BiHD27Fnmri+++AJEhIyMDOYuW1tbtG3blrnn4MGDICIsXryYqYfjOHTq1AlEhMuXLzN13bp1C2ZmZrCxsUF4eHip//5fFTTxT7Nt2rSRbM1NbGwsKleuDBcXF7x69UoSJwBhNC0sLEwyJ7+eorSLbMtDbm4uiAgff/yxZE6NRgMbGxs0bdpUMufLly9hamqKpk2bSvIkCvwzGjNmzBhJfElJSXByckKlSpXK1BmVlpycHDRv3hwKhQLHjx9/4++WN2gCCgJRFxcXmJiY4O7du2VuR1+2bt0KIsKAAQOYnzMxMTGoVKkSatSogaysLKau1NRUWFhYoG7duswffENCQiR7KJs+fTqIiPki/qSkJBARRo4cydQDAN27d5dkATg/Vca6r4qMjIS9vT1MTExw9erVMrXxrwmajhw5AqVSCQ8PD0nmcYGC6Ld3794gIpw4cUISJ/DPAvBOnTpJ5gT+WW8g1U42HgsLC3Tt2lVSJ7+z5vnz55I5J0+eLOm5xHEcOnbsCIVCgWvXrknivHDhApRKJZo3by7JlEh0dDSsra1hZWWFyMjIEn9PjKAJAG7cuAFDQ0PUrFkTKSkp5WrrbXAch2HDhoGI8PvvvzN1Af9c/7Nnz2bu4qfI9+/fz9TDcRxcXV3h7u7O1AP8M6pVmg0KZeHKlSuS7EKMjIyEQqHAgAEDmHqePXsGCwsLODs7M10TmZycjDp16kChUODAgQNlbudfETTduHEDpqamsLOzk2RHEA+/s+uTTz6RzAkAP//8s6TrUXhGjx4NIsKLFy8k9dasWVPSUR/gn501GzdulMwZGxsLQ0NDvP/++5I5Hz16BENDQzRq1EiSNSTAP1OR06dPl8R36tQpKBQKNGvWrEwbS0oLP+Ldp08f5iMlaWlpcHNzg4mJCUJCQpi6NBoNmjVrBrVazdyVkJAAExMTeHl5MR9FGzt2rCSj9lu2bJHkoWjz5s0gIhw9epSpZ86cOSAinD59mqmHnxo+duwYM0dOTg7atWsHIsLatWvL1dY7HzTduXMHdnZ2MDU1ZR7BFyYxMRF2dnawtbWVbGQLKHgy8vDwgK2trSRP6oXp2LEjLC0tJZs+4mnZsiVcXFwkdfI7a/r16yep9+uvvwYRSbLAl+eHH36QND9Ofn4+WrduDSLCmTNnJHEuWLAARISvvvqq2P8uZtBUOLeLFPmwrl27BpVKhYYNGzJflnDz5k0olUq0bduWeUA4YcIESW7KJ06ckGSn9ZEjRyRZ08dPA7KcAs/Ly4ODgwNq1KjB9DzYu3cviAjDhg1j5tBqtRg8eDCICFOnTi13e+980FSzZk0olUocOXJEUj/fKfr5+Unq5beLS/WUXhgHBwe0atVKcm+vXr1gYmIiubd9+/YwMzOTbHciAERERECpVKJ79+6SOXNyclC7dm2YmppKkjQRKNhUYGFhAXt7+1LvTikLWq0WPXr0ABFh8+bNAKAT/IsZNAEFu8AaNmwIpVKJc+fOFfGJDb94evz48cwcPHwww3oUNiYmBmq1Gh06dGDqyc7OhqmpKTp37szUc+3aNRARfv75Z6ae3r17w9DQkOnI8YEDB5gnrU1OToa9vT2sra1F7yM4jhMW5E+bNg1EhMGDB4sSAL7zQZOUOXwiIiIQGRkpLIj29vaWbNSF9/BrGKRYSFsY/vP+/PPPJfUCwOeffw4iKlWuDDHg1yCwftJ9HX6R/61bt6DVaiXZ1HD+/HkQEXr16gWO48q8CLI08NPbPXv2RH5+PvMNBklJSXB1dYWxsTGCgoLw008/CTsHxQ6agIIt0hYWFrC1tUVsbCzmzp3L7Klco9EIuemOHDkCf39/PHjwgIkrPT0djo6OsLKywosXL3D16lVm/eDIkSOFJI0cxzFbhO7t7Q21Wo309HQm7QMF54MUOYY8PDxQr149Jm3z33O3bt2YLQA/d+4cOI4T0qL8+eefojtOnjyJ1atXY+3atSAitGvXTrR+9p0PmiZPniyZc9WqVejRoweqV68Oc3NzxMTESOZesmQJIiMjYWhoyPyJ6HUyMjJw48YNyaYbXod/EoiKipJ0apDfWTNhwgRERUXplaleDO7fvy+kzVi8eDH8/f0l8X766afCKKanp6ckzi+//BJEhC5dusDOzo75uqpbt27ByMgIbm5usLKyEh64WARNAHDo0CEQERo1agQDAwOm05GxsbGwtraGjY0NmjRpwrQywf79+0FE+Oijj+Dq6oqHDx8y8YSHh0OpVKJnz55YuXLlW3dBlhV+Hdq+fftw/vx5Jo7U1FSdKWKx+7KMjAzk5eVBpVIxW5y9YMECPHz4EAqFAgMHDmTiaNWqFcaMGQMiQo8ePZj0+Z07d4atrS0UCgU8PT2RlJQkWtvvfNC0a9cuybb6d+nSRRjd+vLLLxEWFiZZLqj27dvD2tpa2PIv1Q0cAHr27CnkvNm+fbtkIy95eXnYunWrkDhw5cqVmDFjhiTuZ8+eISYmBm5ubnB0dISjoyOuXLnC3JuZmYnIyEhhV5tSqcRvv/3G3JuYmIhTp05BpVIJ5zjrqbrk5GQcP34cxsbGgpPluaXVanHnzh1hxysRoXnz5gDYBE25ubm4fv06WrRoIfiGDBkiWvuF4TgOoaGhws2GiFCrVi0mN5ysrCwEBwejQYMGgmv16tVMPJGRkejevTuICAYGBkymtsLCwoQHlSZNmsDMzEx0h7+/P+7evQu1Wo0PPvgAkyZNQnBwsKiOCRMmCHkKp0+fjtOnT4s+St2gQQPhPrR79+437kgtCy9fvoRCoRDOqz179oi+8ejWrVtC+/zIn5jH8c4HTePGjZMkaMrIyIChoaHwQSsUCqxatUqykQ9PT0+dL1qq8jAAhKSE/HFLVVsPAPr06aNz3AsXLpTEGx8fjypVqui4pZiyysnJEZK48a8JEyYw9z548ADVq1fX8W7YsIGpMyYmRlgQzr+++OILZj6O47BhwwaYmprqOO/du8ckaMrPz8f8+fNhYGAguIyMjER9qi3Mrl27UKlSJZ1jY7E5JjMzs8h12bNnT9E9eXl5QsDEv77++mvRPXypJv6lVqtFdwQGBuo4TE1NRR9V9fHx0emnu3XrJmr7AIRitPxry5Ytora/Y8cOnfYdHR0RFBQkqmPo0KE6jlatWomaV+2dD5qkqGUF/FNKgIhgZmaGw4cPS+LlsbKyEvzDhg2TdJqKnx7jL/aXL19K5uZ3nEgxEvE6f/zxh45byrIqTZo0EbxS5aiKi4tD06ZNBe9HH33E3JmXlyfkpyIiWFhYMF94/+jRI53jnDhxItP+5MqVK3BzcxN85d3S/CYePnyIevXqCS5Wyxc0Gg2+/fZbnT6RxW7ejIwMtGzZUvC0a9dOdAfwz9opPrAVG47j0LBhQ6bHsWfPHp3+SuwduBqNBkqlUmh/7NixorYP6AY0TZo0QWxsrKjtR0ZGCg8xFhYW+O2330SfLZKDpv+Hn55iEfm+DT4rNlHB2gipF0TzZWJYdsIlwdc24v2sEwYWhuM4nSfdGzduSOaOj49HzZo1QUSoXr26ZN5Xr14Jx1ylShW9K3uXl3379qFy5cogonIlltOX3NxcTJ8+HQqFQtidw7I/SUtLExKmNm7cmImDJyMjQ3A5OjoyW0LAcRyWLVsmXB8XLlxg4klMTBRG2u3s7Jg4UlNThX7G2NiYiWPNmjXCZ8Wi/FVQUJDQPotcb/Hx8UL7bdu2FT1I1mg0wuBA7969mcwgjR8/HkQFO+VYJS5+54Om7t27w9vbGzt37iz29ziOK/dOM47j4OLiolfkq9VqRR+JiYmJEW5iryfvzMvLY76u6uzZsyAiGBoaih7568OsWbNARJItTi48ivf06VOYm5szm+oAUGItqsePH6Nq1apQKBSiBspvOz/z8/OFJ28xAkV9z5nw8HA0atSoXCNcWq0WT58+1fv3z507B0dHR6GkTGmDpqysrFKtudi5cycqV65c5gev5ORkvc4FjuPw+++/w8jIqFzBTGJi4lv7l127dsHQ0FCUXWElXQvR0dFwdHQEEYlaa6/wtc7PJrBKb5KUlAQjIyMQsakxWXhHOYsEmnfv3gURoVq1akV2zeXm5pZ79iMgIEB4MH/bw9rLly9Lfd9LSkpCgwYNyvTZhIWFvfX4du7cCW9vb+Gh850Nmt70xpKTk9G7d29YWlqWa6FXcHCwXpEvx3H46quvULNmTTx79qzMvtfhE8oVNzX1448/omXLlqL6Xocv1Pv1119j8+bN6Natm2SZ148dO4ZWrVqBiPDZZ58x9/n7+8PDw0MnQPrtt99AVJACQGzOnTsHW1vbEm9sQUFBMDc3x507d0TxHTx4EGZmZm/tODiOw4IFC/Djjz+Wy+fr6wtTU1O9O6qsrCyMHz++zFu/Z8yYgSpVqpRqaiIxMVEYBShN0MRxHAYNGgRXV9dSbe+PjIzErl279P59nqysLLRs2RJt27bVe8Q1KCgIS5cuLbULKHhYq1GjBsaNG/fWG8bFixfRpUuXMnl4Ll++jKpVq5ZYFDg4OBhWVlairS1ct24dPDw8dILQoUOHMlkIDgCDBw9GnTp1QETMdl7b2tqiadOmuHHjBtq2bSvkCBOD06dPw9DQsNjPf8qUKejYsWO51ut9//33em16ef78OWrVqoURI0aUKlCLiooq9cMnx3H47bffYGhoiFWrVun1N+/8SFNJb+zmzZtwdXUFUUFuofI8qcfExLw18uU4DuPGjQNRwTZJMYcujx49ip9++qnIz6Ojo2FiYoK6desiLy9PNN/raDQamJiYICIiAkOGDIFCoRDy27Bm586dICLUr19fkl1kwcHBINItEKzVatGuXTsm07KPHz9GpUqV4OTkVOIT9Pnz50Wbsnr48CFsbGxgYmKCv//++62/X95yGTdv3oSNjQ1UKlWJo8HFUdZFsmfOnEHlypVhaGiIHTt26P13ZZ3u37ZtG9RqNSwtLZltVefhOE7YHdWwYUO9c+SU9bPMzs5G586dQUT4/vvv3/r7jx49Ktfi5ujoaFhaWr4x4WlAQIBo5aP4h6HC+cESEhLg5uYmSvuv4+bmBnd3dzg6OjJpHyjYrr93716sWLECRCTqObl9+/ZiN4eEhIRApVKhZcuW5Zr10Ge3bkJCAurWrQsi9htVXr16JeRFrFWrlt4Prv+6oInjOKxbtw6GhoYwNjbGpk2bmL8XjuOE1PWdO3cWfZtnTExMsRE1v6uNdWcNFOTnAAAnJyc0atSIuY+HH7IdPny4ZGvJPvzwQ6hUKp3Ru7CwMISGhjLx8dXqBw0aVOKTk5hB+M2bN2Fubg4LCwvcvn1btHZL4tGjR3BxcYFCocC6deuY+4KDg+Hi4gIiwoIFC/R6Gi3PGkl/f39YWlpCpVJh69atZXnLpWL58uUgItSoUYN56pH09HQhZYK+T9rlgU94yidZLQ6xroWMjAxYWVmhTp06Oi5WNds6dOiAKlWqMFnPxLNo0SJotVr069cPKpWqxOnOslDctHfhot8sRuILk5SUhEaNGjHfTAEU9CH8OrqBAweWql/4VwVN6enpGDJkCIgI7u7uom4jfBPff/+9sPhOzJP0TZw8eVJY0CYFOTk5iI6OBhFhzJgxkjiBf9ZzjRs3juloWmGOHTsGImmquQMFHQ9f+4gv8cGaCxcuwNjYGHZ2dswLlQIFHS7fCc2fP5/57s+4uDh4eXkJ07pvu9GWd2PJgwcPhB1yc+fOZX58mzdvhlKphL29Pe7du8fUlZiYKOzIkyIo5CsASBFgf/fddyCiEqcExYQvvcUiizZPTk4OOI6DnZ2dkIOMJX5+fiAijB49mqknNTUVzZs3BxEVO+siJn/88QdMTU2hVquxevXqUl/L73zQxGfYvX//Pjw8PIQndta76vhpiyVLloCI0LJlS0l28mVlZSEnJwfu7u4wMzOTdGH2n3/+CSIq1TRLedFoNFCpVOjfv79kTq1WCw8PD1hbWyMrK0uS9A4pKSlwcXGBmZkZwsPDwXEc80LQR44cgYGBAVxcXBATEwOtVstsNA0oWLzJd3zjx4+HVqvFo0ePmD1oZGRkCPmEOnbsiOTkZHAcV+yCfjF247548ULYHj9s2DDk5OQgOTmZWcmjAwcOwMjICJaWlggICAAAZqOxz549g5ubGwwMDISpYlZZwNPT01GzZk0YGxsjJCQEHMcxS3MSExMDAwMDIacRy2t97ty5ICJm5W14wsLCQESYNGkSk/Y1Gg1ycnKQnp6OatWqwdramknusbi4OCQlJeHVq1do06aN8MAlNnwZoKysLHz11VcgIjg7O+PatWtlau+dD5rat2+PrVu3wsTEBGq1GmvXrmV+kwsICEDHjh2xatUqYQuxmDs6SuLJkyeYMGGCUJyTdcTN8/TpU8THxwvZhqOjoyXx8ri6usLLy0uSQILn119/BRHh999/x9KlSyVJ83Dp0iUolUo0b94cf/31F5MO4nV27NghlBLYs2cPvL29mfrS09OFdTLDhw/HzJkzmY7oaTQaTJw4Udh9efjwYdSuXbvIFLpYKUwyMzMxYMAAYeR58+bN6NSpE7M+6fz58zA3N4eJiQmOHTsGZ2dnZlN2jx8/hr29PQwNDXHixAnUqFGDWb93/fp1qFQqNGrUCIcPH2ZaCYCfnQgODmZ6zW3cuBFEhJMnTzIJMvLy8nD79m1s2bKF2Q49oCCj9g8//CDk72NVuHn8+PFYtWqVUFNxxowZol9HCQkJcHBwwPnz59G4cWNhTXJ57jPvfNDEv1xcXCRLPlg4Y3O9evUkS/a4adMmKBQKGBsbw9PTk0kyueK4ffs2XFxcUL16ddjb2+PatWuilwAojnv37mH9+vVo2rQprKys0LdvX9EWgb4JrVYrrHews7ODQqFg/nTIM2fOHCG9Q926dSVx/vLLLyAiIXEd67VjOTk5wno8hUIBQ0NDPH78mKlz7dq1UCqVQomG1wM1MfO+abVaTJ06VTg+1tOu/GJ73tW7d29mrvv378PKyko4V3744Qdmrh9//FG4Ftzc3JgEnlqtFtevXwcRwcHBATY2NqI7gIIcTXzG7r59+6Jjx46iOziOg6WlpZC49dy5c7h8+bLonuXLl0OtVouy+Lsknj59CkNDQ+GcnjBhgujfP8dx6Nmzp9D3KZVKLF68uNzH868ImpRKJfbv3y+J9/WU+71798bZs2clcQ8fPlzwWllZoU+fPkyrcvNERkbqHLOFhUWJu1vEJC8vT8jNwr+kCF7u3bsHGxsbney3LPKevM6ePXuKlBW5f/8+U+fz588xb948IbEkEaFfv35MnSkpKVi7di3UarXgZD3CdffuXWFqkIigUql01gKJGTRxHIdLly4Ju3f56zU+Pr7cbRfH7du3i5Q1YVHYVqPRYP369TqZrS0tLZnspD148CDef/99nWNikVx2+/btMDEx0fGwmC5eu3atjqPw7lwxsbGx0fHos0O2tPCBBhHBxsYGQ4cOFX3z09dffy041Go15syZI3qdO36miH8NHToUWVlZ5W5X375ESRWIsbExHThwgJ4+fcrUA4Dmzp2r8zMrKyvy8PBg6uXd/v7+wr9tbGxo1apVZG5uztxtZWWl8+958+aRra0tc69araaxY8cK/zY0NKRatWox9zZo0IC2b9+u87OoqCjm3v79+1OnTp10frZr1y6mTnt7e/Lw8KBKlSoJPztw4ADdu3ePqTclJUXn3D1y5AgdP36ciYvjOAoJCSGO44SfaTQaGjlyJGm1WtF9eXl5FBwcTGq1WvhZSkoKTZw4UXQXUcGxvM6ECRMoNzdXVI+BgQG1atWKLC0thZ+lpqbS2rVrRfUQEXl7e1OXLl1IoVAIP2NxLQwfPpymTp2q87Po6GjRPZ999hlVrlxZ+Hf9+vVFdxDp9tVDhgyhNm3aiNq+RqOhS5cuCf92dHSkFStWkLGxsWiOiIgI2rx5s/DvSpUqkY2NDVWrVk00x+3bt2n69OlvxHt/AAAgAElEQVQ6P4uKiqLTp0+L5ngr5Q7PSgkfza1bt06S0RYAOH78uBCVtm/fHjdv3pTEC/yzuI+I0KxZM9ErP78JrVYrDJPWqlVLsmlBoGDnjrGxMYhI0lQHQEHyO/4zZ7mm4nWOHj0KS0tL4fOWYiH6q1evMHPmTKEo9cCBA5k709PTsXTpUtja2grHyrLuHMdxuHjxIvr06SOcz6tXrwbApiyTVqvFoUOH0L59e+E8OnbsmGjtv86dO3cwaNAg4diWLFnCxMNxHHbt2gUnJydhFI3VJphTp07B2toaRAQnJycmU0EcxwnrmojRKB0ATJo0SXCwSmvAj6YaGxvrlfeotPBTmUQF9fNYjDJ++umnwgjTpEmTRF//9erVK9SuXRtEBWWGZs6ciUePHonW/js/PSdV7TmO49C0aVO4u7vj4MGDkhbMBYDff/8dRAV5oKQKEgvD38QPHTokuZsv6TF8+HDJ3RMmTAARYciQIZJ6IyIihKK9Ugbn4eHh6N27tyRTgzyZmZlYuXIlHBwc4OPjI4kzNDQUY8aMgZ2dHaKjo5n3J4GBgRg2bBhq1KjB/PoNCQnBxx9/DAsLC6a7azMyMjBnzhwYGRlh8eLFzDzR0dFCrigWa3SAgkSe7733HogIv/76KxNHRESEENCyCGiAghxzRIQ5c+YwaZ/fLd63b1/Rp+SAgtQdSqUS/fr1Y5YKZezYsRg6dChOnTrFpLamHDT9PxcuXMCqVaskHWUpzNChQ/HRRx8xrwBfEq6urvjggw8kDxaBgsWnRFTmchDlQaPRoGfPnnjvvfckd2dlZWHEiBFMk+GVxIkTJ/TKAi0m2dnZ2LZtG5POuCQSExNx/fp1yfqTp0+fShaMhoWFMRs1KUxERAS++uorJgVWeXJycjB69Gh8++23zBwvXryAq6srvvvuO2aOvn37onLlysz60UGDBqFatWrMvouuXbti5MiR5cr8/iZ++uknXLx4kUnbQME6WdZF3+Wg6f+piGChsHvRokWSVZwvDi8vL+ZJ9N5E586dmU5tvIn09HR07969QtwAhFxkUsOqY3wXkbo/+S8ixfnC+loICQnBqFGjmLXv7++P1q1bM2v/66+/xrZt25i0nZeXBx8fH6b3woq8z4qFvn2JAgDEXif1JtLT08nCwoLS0tJ0Ftj9F+E/2sKLIqVm7969NHDgwArzHzlyhBo3bkzOzs4V4n/27BlVq1atQr8DGXb8L/UnMm/m2bNn5OjoyKRtALR+/XoaPXo0k/b37dtH/fr1I6VS/L1ZAOT+Tw/07UvkoOk/TkVfMBzHkUKhkC9aGSbI/YmMVGi1WjIwMGDSdkX30zL69yUVmnJAhj0VfSEqlcoKfw8sYbH1XUbm38h//VpgFTARVXw/LaM/FRY0DRkyhHr37k1+fn5E9M9UltQEBQUVmy+FJTExMXTw4EFJnf8rSJGXqTBz585lkh/mTQQEBFB+fr6kzvj4eEl9GRkZkvYJr169ksyVmZlJ6enpkriePHnCPA8ez/z58+nx48eSuIikv9b/a4SGhkqS3wgABQYGMvfwrtLi5+dHvXv3piFDhuj1+xUWNO3atYsOHz5MQ4cOpYsXL9KcOXOIqOCgg4ODycfHh8aNG8f0Pfj5+dGHH35I2dnZtH79elq1ahVTH1HBzcDb25s2b95MZ8+eZe4jIgoPD6fTp0/Ty5cvJfHxpKSkSNqJ+vv705dffklBQUGS+BYvXkynTp2iTp06UWxsLFOXVqulb775hs6fP0+nTp2iLl26UFJSEjNfSkoKDR8+nE6ePEkajYZmzZpFPj4+OokmxeTevXs0cuRIOnPmDGk0Grpz5w4NHDiQ2TGePHmSJk6cSFevXiUAtH//fvr2228pOzubiW/btm00f/58evLkCQGgZs2a0e3bt5m4iIhWrVpFGzdupLi4OGrevDldvXqVmYuI6KeffqLTp09Tp06dmAczAOjYsWPUrVs3SYJdrVZLqampFBERwdyzbds2SR7CkpOTydvbmzZu3EhXrlxh5snJyaEvvviCfv31VwoPD6epU6fSzZs3RfckJibSxx9/TJmZmURElJSURDt27KDBgwdTZGTkG/926NChdPjwYf2TsLJZh14yhVeov3r1Sigm279/f4wbN06nhAFfrV5sNBoNpk+fDiKCgYEBKlWqBCKCq6srkyRsPFqtFn379hWOr2nTppLsOtiwYQNUKhVq167NrMJ5YdLT0+Hj4wMDAwO4uLgw9wEFJT74kiItWrRg+j0CBUVQC5drcXd3x/Pnz5n5rl+/LuSK4ctH1KhRAyEhIUx8Bw4cEI7N3t4eHh4eICJ07dqVSYLWwqURbG1t8dFHHwlJ7M6dO1fi35V199y3334r+FxcXNCrVy8QEerWrYu7d++W93CK0LVrV8HXtm1bGBgYwNDQEL/88ovofYBGo4GLi4vOuWJoaIg//vhDVA9PTEwMVCqVcHyurq54+vQpExdQkEaGd02ZMoWZBwBOnjyJ9u3bw8bGBitXrmTqunPnDlQqFQwNDREQEMAsTU5eXp5OHdbOnTsz8Tx79kzI08XnCyQi0VND7NmzB7a2trC2tsayZcvw/vvvC32zQqGAn5+fXu288ykHDh48iOrVq+vUkCEi1KxZExMnTsS5c+eQl5cnuj85ORndunXTcTo7O2PTpk3IzMwU3VeYWbNm6XhdXFwkSTrJ175TqVR6n0DlZfTo0SAimJmZMXdpNBohmSX/8vX1Zeq8e/cuatWqpeP09PRkVqcMAJ48eYLPP/9cx2lubs4spUNUVBQWLVokBEz8y8HBARcuXBDdFx4ejkWLFqFBgwY6PoVCgenTpxd7Eylr0MRxHG7fvo0ZM2bAzc1Nx2doaIiVK1eKGnhrNBqcOXMGn376KczMzHR8AwcOFD1D86tXr/DLL78ImeIL37DEToESEhICT0/PIv04iwSdycnJOpnaDQwMmKZUCQsLEyobsA6aVq9eLRzXjBkzmDxQcxyHUaNG6XxX7u7uotdhvXLlCuzt7XU83bp1w8WLF0U7rvj4eAwYMKBIDFGpUiUMGDAAW7duLVWt1Xc+aCrutX//fqYjLyEhIXB3dy/iNTAwwKZNm5h5gYICk4Wf3EeOHIlDhw4xKTL5Oi4uLjAxMZEkYR5Peno6qlevDlNTU0l8HMfh7Nmz+OCDD0BUUCKCVXFijuNw9OhRTJ8+He3atdMpHFq/fn28fPmSiTcyMhI1atQocv4qlUqsWLGCybWj0WjwxRdfFOtcuHAhkxxkERERqFq1ahFns2bNipRNECNP07Vr14QbY+FX165dERcXV97D0eHhw4dFilnzo4aBgYGiefLy8jB48OBi+1lvb29Rs5ufPHkSM2bMQIcOHXQCwtq1a4v++QFAbm4utmzZIgRqbdq0YTqyvGLFChARfv75Z2YOAEIA8NNPPzFzrFmzRvh+nJycMHr0aBw/flzUxLQbN24sEqwTEdzc3ESZ6eA4Djt37hTK9Lz+AFLWRNLvfJ6mXr166RTGJCJycnKiFStWFPm5GISGhtLcuXPJzMyMHBwcin2ZmJiI7iUiunr1Kk2ePJk+/PBD8vb2pmbNmjHJx1EcUVFR1LhxYzp69Ci1bdtWEifPmTNnqG/fvsI8s1QEBgbSkiVLyMrKijZu3Mjcp9FoKDg4mK5du0bXrl2j3Nxc+vXXX4sUTBaDvLw8ev78OcXExFBsbKzwiomJoS5dutCoUaNE3YmTkJBAAQEBlJaWpvNKTU2ltLQ0atmyJU2ePFnUnUX79++nsLAwysrKouzsbJ3/VSgUNG/ePKpTpw4RlT/lAADaunUrxcXFFXFlZ2dTpUqVaOHChaIVHQ0MDKQnT54U+RzT0tIoJyeHvvvuO/Ly8hLFxXEcJSQkFDlPYmNjycrKinx8fEQvHK7RaOjBgwfCtZCRkUG//vor2djYiOohKji+gwcPko+PD40dO5Y+//xz0R1EBWuN3n//fRo0aBBNmjSJiQMAVatWjRYuXEgjR45k4jh9+jT98MMP1L17d/L29qZGjRqJvmtvx44dtG/fvhLvsXZ2duXqKwDQ9u3b37iRasGCBWUqrCznaXqHyMjI0KlGLyWnT5+mqlWrUqNGjSrEP3HiREkW2BdHaGgoubq6kpGRkeRuyHlXJOF/sT/5t8H6WgBA9+/fp4YNGzJzPHr0iPz9/Zklt4yIiKDbt28zTURckfehfwNy0CRDRBV/887MzCQzM7MK88v8t5H7ExmpYNmXVXQ/LSMnt5T5fyr6QpQDJhkZmf8CLPuyiu6nZfRHDppkZGRkZGRkZPRADppkZGRkZGRkZPRADppkZGRkZGRkZPRADppkZGRkZGRkZPRADppkZGRkZGRkZPRADppkZGRkZGRkZPRADppkZGRkZGRkZPTgnQiaOI6j2NhYunz5MoWFhVX025EREYlzp8qITHp6uqTfYWpqKsXExJBGo5HEl5CQQHFxcaTVapm7cnJyKDc3l7lHhg1yX/Zuk5aWRrdv3yZ/f3+mHhXT1t9AgwYNKDs7mwwMDCg5OZny8vLI2dmZ7t69y8QHgE6dOkWRkZGUnJxMSUlJOq/MzEzavXu3UNNKTDiOo5MnTxLHcWRubq7zsrGxIZWK3deQl5dH27dvp8GDB0ueQj8nJ4fWrVtHU6ZMkcyp1WopOjqaHjx4QHXq1KGaNWsy8URGRtL169d1fsYnqKtXr16Zah+9Ca1WS1999RU9fvyYrKyshJelpaXw/3v06EHW1taieteuXUuLFi0ie3t7cnBwEP6Xf3Xu3JlcXV1F86nVauratSuFhoaSvb09OTk5kZOTEzk7O5OTkxPVqlWLvL29Rat1p9FoqHHjxpSSkkLVqlUTfLyzfv361LlzZ1GSD+bn51OLFi3oxYsXRWpy2dvbU/Xq1al3796i1N7csmUL+fr66pwrhV9eXl6ilR15+vQpXblyRedn/Ofl6enJrIRTbm4uhYeHU2hoKH344YdMM8KfOHGC7OzsqFmzZswcf/75J3Xq1IkcHByYtK/VaunYsWNkYGBQ5D5ka2srSj3UtLQ0Onr0KCUmJha5xyYnJ5Obmxv5+fmV6xx/9uwZHT16lJ48eUKRkZHC/yYnJxMR0Z49e0rVnp+fH/n5+en/oFamcsDlgK8kbGtrW6RCsZWVFbp06YIJEybA19cXly5dErVye3x8PEaNGgWlUlnE3blzZwQEBIjmep2IiAg0b95cxzlo0CDk5+czc/KsWbMG1tbWWLRoEXJzc5n7ACAzMxMffvghZsyYIYkvPj4eHTp0EKrVT5kyhWnl8+zsbDRu3Fjn+1Sr1Zg/fz6TzzgjIwNr164ttmp9gwYNcPbsWVF9ycnJ2LdvH2bOnAm1Wl3E6enpib1794p2fcbFxWHPnj2YPXs2mjVrVsSnVqsxZswYxMbG6vydvpXJX+fJkyfYvn07pk6dCnd39yK+SpUqYc6cOUhOThbl+O7du4f169ejS5cuRVwKhQLDhw9HRESEKC4AuHTpEuzs7Iq4LC0tsXLlSlHP0by8PLRs2VLHY2BggNmzZ5e54vybuHr1Kjw9PWFgYAC1Wo3du3eL7ijMwYMHYWZmhqysLKaeK1euwNjYGGPGjMHLly+ZOIKDg1GvXj2d72rkyJGi9pV///13kfOBf/3www+IiooqV/scx+H06dNo165dsddSixYt8Nlnn2Hp0qU4cuQIEhMT9WpX376kwoKm+Ph4rFmzBo6OjsIBu7m5wczMTPi3tbU1k/cQHByM7t27F/nAvby8mPh4cnNzMXXqVJ2gSQry8/Ph5eWFRYsWSeIDgBcvXuCTTz7B4cOHJfFxHIcmTZqAiLBkyRJRg+3iyM7OhqmpqfBdNmvWDPfu3WPme/r0aZHz1dbWFr6+vtBoNKL7Lly4UGyn5+zsjE2bNoke7G/atElwGBoa6tx8v/zyyxI72rIGTbNmzSrWZ2JigunTp4t+0/roo4+K/Tx79+7N5Lzhr4XCn+O3336r9w2kNOTl5cHS0lJwNWrUCEFBQaJ7eBISEmBsbAwzMzOcPn2amQco6Fe2bduGIUOGMPXwfP755xg0aBDT/iszMxOjRo0Svq9Ro0aJ7uA4Dn5+fqhevXqRc3758uWieS5evIgPP/xQZ+ClcExBRHrfg975oIl/Yzk5OfD19YWrqysWL14MjuPw9OlTnDx5Ert27WL6Xk6fPo0GDRqAiLBnzx7Rn9ZL4tixY6hfvz6zp4nieP78uWSuwrAc7XmdR48eYcOGDZL5Dh06BCMjI/j4+EgyYrhjxw68//77MDQ0xPTp05GamsrMlZ6ejm3btiE4OBiDBw+GjY0NVq5ciezsbCa+6Oho/PnnnwgODkZQUBCUSiU++eQThIeHv/Hvyho03bt3D3v37kV4eDj27dsHIyMjTJgwAXFxceU5jBIJCAjA8ePH8fDhQyiVSrRv3x5Xrlxh4gKAs2fPCg9o3bt3R0hICDMXAJw6dQpqtRoLFiyQZDR7z549uH79OnMPj1T92IsXLyTpS4CCz7BFixZISkpi5sjOzsbSpUtRuXJlNG7cGAcPHsSTJ09E91y9ehW9evVCrVq1wHEcUlNTce3aNWzZsgUvXrzQqw19+xIFIO3qtpIqCefn59Pt27epRYsWUr4d0mq1tG3bNqpRowZ16NBBMm98fDxVrVpVLtT4LyYsLIy0Wi2TdXDFAYDGjRtHkydPpho1akjiJCL67bffaPjw4WRubi6J78aNG2Rubq7X56pvZfI3ce7cOfLw8CAnJ6cy/X1puHv3LsXHx1OXLl2YX/urV6+m2rVrU/fu3Zl6iIiePHlCmZmZ1KBBA+YuGfGIj48ne3t75p6XL1/S0qVLycfHR5Q1eyVx+/Ztql27dpmKK+vbl7wzQZOMjIxMaZH7ExkZGTHQty95J1IOyMjIyMjIyMi868hBk4yMjIyMjIyMHshBk4yMjIyMjIyMHshBk4yMjIyMjIyMHshB03+c9PT0CvXHxcVRfn5+hb4HGRkZmfISExPDrO2K7qdl9EcOmhiTmJhYof5FixZRSkpKhfmXLVtGsbGxFeLmOI6OHTtWIW4iuVaVjAwP62shNTWVLl26xKz9Z8+e0ZIlS5i1v337drpz5w6z9iv6PvRf4n8iaAoMDKSkpKQKcQcFBdGIESMoNTW1QvwvXrygcePGVYg7ISGB1q9fT5GRkZK7c3NzadiwYRQSEiK5OyEhgaZMmcL0ybQ48vLy6Pjx45SXlyepNyEhQfInZb7OlBQAkMzHcRw9efKEuQcA3bp1i7krKSmJpk2bxtTz7NkzateuHRkaGjJzLFu2jB4+fMisfQD0ySefMCvofP78eRo3bhxlZGQwaV+j0ZC/vz/TQtvvykNohQVNoaGhxHGcJC47OzuqW7cu9e3bl/bt2ydppfEPPviAAgICqF69ehUy6qFWq+nPP/+kv/76S3L3ihUrKDs7W/KgKT09nXr06EG7d++mzp07S+bNzMykRYsWUa1atSgnJ4dcXFwk8YaEhNCUKVPIycmJHj9+zPTmQVTQeT148ICWLFlCrVu3pkmTJjFPfJmamkoHDhygMWPGUP369en+/ftMfQkJCbRz50764osvqHHjxvTy5UtmrpycHDp+/Dh988035ObmxvR6SUxMpNWrV1Pjxo3pu+++E7XYcmGys7Np6dKlVLNmTUpKSmJWOPvhw4fUunVrio6OJi8vLyaOFy9ekK+vL9PvRa1WU3BwMM2dO5dJ+/369aN9+/ZRw4YNyd/fX/T2VSoVhYeHk6OjI02cOJGCgoJED3I0Gg1NmTKFBg0aRMuXL6dLly5RZmamqA69KGPW8jLDpyonIlSuXBmdO3fGzJkzcenSJabe/fv369SnGTVqFAICApjXKAMKCuby7k8//VS0IqD68M0334CIUKVKFUlLqSQmJgp1BGfPni2Z9/nz52jUqJHwPbOoy/Y6+fn58PX1hYODA4gIpqamzD/r1NRUrF+/Hi1atBDOre7duzM7n/Pz8+Hv749JkyahZs2aOvUaWRQyzcvLw99//4158+bhvffeg4GBgeAsXF6prGVUXicrKwunT5/GtGnThPOHiGBsbIy///67vIdThISEBGzZsgX9+vXTqbe5bt060V0ajQYnTpzAoEGDhDp7VapUKVL8WCzX5s2b4eTkJNT1i46OFt0DFBS4rVKlCogI3t7eTBwAMG3aNKF+H6sSJ3ztRYVCwexeOH/+fOE8GzNmDF69eiVq+xzHYfDgwYKjbt268PHxwdOnT0Vz5OXloW/fvoJDqVSiYcOGGDlyJDZu3FiuAtHvfO25wq927dohPj6euXvcuHFF3P3790dmZiZTb1paGipVqiQ4HRwccOjQIaZOnvHjxwveHj16SBIkAsCcOXME77BhwyRxPnr0CK6urjrfLUs4jsPBgwfh6empc07NmjWLqZevul7YaWdnx/Qa8vPzg7W1tY6zWrVqePbsGRMfX/D59ev19WKfYgVNERER6Natm45LoVBg37595Wq3ODIyMoo9tjFjxojuioqKQv369Yu4Dhw4IKqH4zihpmZhz6RJk0T18Bw+fBgmJiaCZ9WqVUw8L1++1LnWWNRNA4Dt27cLDjc3N6Snp4vuiIuLg1qtFjyurq6i11tNS0vTeagiIqhUKmzcuFE0R25uLry9vXUclSpVwqlTp8rV7jsfNBWuim1kZIRp06YxH4HJyclB06ZNBa+1tTUePHjA1Mnz7bffCl4TExN88skniIiIYO6dMmWKzsnl6+vL3JmSkoLKlSsLztatWzN33rlzBzY2NjrHyuKpvTAajQZnzpxB8+bNBWeVKlWYFtIFCm5Qo0eP1jnWY8eOMXWGhYWhVatWOiMwN27cYOZLSEjAp59+qnOM48ePLxL0swya1qxZU642S4LjOGzevFnnZtypUyfk5eUx8R07dgxKpVJwsahqr9Vqcf78ebRp00bwmJubMylK/ueff+ocDxHh/v37onsAYNasWTqe8+fPM/Hs2rVLxzNy5Egmno8//lhwVK5cGSNGjBD9wefmzZs6wVmvXr1EH43OyclBjx49dD6zDh06IDAwsMxtvvNBU+vWraFSqdC4cWN4eXmBqGA6ZcWKFeUaYnsb4eHhMDc3h7OzMwwMDGBmZobt27cz8/E8evRIeHolIiZPsMUxY8YMnY556tSpTKZTCrN48WK0bt1aGD51cHBg6uOJiYnRuRGFhoYydx49ehRqtVqY9li2bBlTX2pqKvr37w8iEqZAxo8fz8yn0Wjw888/w9jYGAqFQpgO9PPzY+LTarXYsGEDrKysQETo2bOnMGpY3FRreYOm3Nxc/PjjjzA2NtbxTZ06tbyHUiwxMTFCcObk5ARHR0fUqlWLSaV5juOwcuVKqFQqVKpUCRYWFvD09GQ2sn7mzBkYGxsL18KCBQuYeICCkSb+Oq9atSqTEfSkpCTUq1cPbm5uQl+2adMm0T0AsG/fPuF4PD09MXHiRERGRoruuXbtmnAfMjAwwJkzZ0R3AMDq1auFUTMiQsOGDfHo0SNRHdnZ2ejatSusrKwwevRoYQp/yJAhpRqQ2LlzJ7y9vdG9e/d3O2hKS0tDYGAg1qxZA61WCz8/P+EDdnV1xc6dO6HVapm8Bz8/PyxcuBB///23cOMZMWIE82m6Ll264PDhw3BwcICpqSmCgoKY+oCCAGb//v0wNTVFhw4dmPuAgqeAoKAgEBHmzZuHWbNmMQ2EefiRiU2bNqFx48bMpyKPHz8OQ0ND2NnZ4datW/D09GQakN67dw/u7u4gInz88cdISUmBl5cXsrOzmfhCQ0OFkYPatWsjICAA586dw9y5c5n4goOD0bZtWxARHB0dsX//fnAch969e5f4uZYnaLp8+TLq1q0LooL1F5cuXUJycjKGDBkiet/DcRw2bdokjMCOHDkSqamp+PLLL/Hw4UNRXQCQnp6OQYMGgYhQp04dPHjwAIMHD2bW55w9exbGxsaoUqUKAgMD4enpKfqaGZ6cnBzUrl1beOBlNf2fk5MDjuPQo0cPmJiY4MaNG9i2bRsT1+HDh/HTTz+hRYsWsLS0RG5uLhMPALRq1QonTpyAlZUVLC0tmTxcchyHPn36IDQ0FD4+PsIAxY4dO0T1ZGVl4euvvwYAPHz4UFjvpFarMXHiRCQmJurd1js/0sS/scKdU05ODn7++WfhKbNZs2aIi4tj8j74DzMxMVF4uqxXrx7TKcLHjx8DAK5fvw5jY2M4OTlJMiUJAAMHDoRSqURCQgJTH8+OHTskHVG7dOkSiAi9e/cGAFEXHxbH33//DSMjI9ja2iI4OBgAmK13AIDTp0/DxMQEarUav/76qxAQsvo+d+/eLYwuFR6dzMzMZPIws3r1aqhUKiiVSkycOFFnTcebgsKyBk38tLWxsTEWL14s3KQ4jhM9wNdqtUIf4+zsrLP2gkVgkZiYCA8PD+Gpm3ewOlcCAwNhYmICKysr3L59GwDba+HHH3/UGdVlfa27urqiSZMmTB38Obd06VIQEU6ePMnMxd+Hzp07BwMDA9SuXZvJw15ycrLQV1y+fFkYoJg8ebKontf7o8uXLwtLCSwsLLB792692vnXBE3FkZycjOnTp+O9995jNtpUGK1Wi2XLluGzzz6TbKH0zp07sWzZMsl8ly9fxp9//sl8NI0nKioKmzZtkmzH3qtXr/Ddd98xGdIuyTdgwABmayleJyEhAW3atMG1a9ck8T18+BCNGjXClStXJPGdOXMGXl5euHXrVqn+rqxB0/r169GtWzdJ1hUCwHfffSeMLrGG4zh8+umnWLNmjST9S1ZWFj766KNSf3dlJSoqChMmTGC2Bux1jhw5gsOHD0viioqKwi+//IIXL15I4lu/fr0k61yBgkX1vXr1wsGDB5m7OI7DX3/9BXd3d9y8eVOvv9G3L1EA0maMSk9PJwsLC0pLS5KXKn8AACAASURBVKPKlSu/8Xe1Wi0ZGBhI9M6IAJBCoZDMJyNTGqQ+P/8NvtL0J6+7iEiy4/s3fJYyMqyR+rwsTQyhb1+iEuvNsUDKgIlIug5URqYsSH1+/pd9/+VjqwifjIw+SH1esogh/ifKqPwvwzKtvT7k5uaSVqut0PcgIyMjU16ysrKYtV3R/bSM/shBE0M0Go3kdcBeZ+3atRXq3717tyS1tErizp07kpXrkZGRqTiCgoKYta3Vamnp0qXM2vf19WVW3isvL09+cBWR/3zQlJ2dXWFuAwMDGjNmTIW+hw0bNjCt/v0mANCaNWvo3r17FeKPi4ujr776ipRK6U9zrVZLv//+e4UUmUxNTX1nilvKvNtotVrmxZY5jiNfX1+m5+TFixdp+fLlzNo/cuQIHT58mFn7N27coHXr1jFpW6FQ0KhRoyg/P59J+wAq9B4nNf/5oOnMmTM0bdo0yauwExWcrGlpadS9e/cK8RMVVIOfPHlyhYy2XL16lW7dulUhQVNOTg7169evQoKHlJQU6tmzJ4WGhko6h89xHG3ZsoVmz54tqTcpKYkWLVpEqampkjkfP35Mhw4dksx3+/ZtJoVOiyMgIIA2bNjA3HPz5k3q2bMn04eK9PR06tevH929e5fZORkZGUkDBgygqlWrMmmfiGj16tX04MEDZoFHcnIyLViwgBITE0VvW61WU1RUFPXr149JcKNQKGj27Nm0a9cuZv1tRkZGhc5Y6FCG3XzlQqyyB/qi1WpRv359VK1aFVu2bJEkhUFh+MyoXl5epUq0JQYcxwnp7P/44w9J3QCE4o19+/aV1MtxHIYPHw4iQp8+fSR1379/X6i9xKLQa0ncvXtXSEQp1dbvlJQUzJ07F+bm5vj+++8lcQYFBWHw4MGoVKkSIiIimPYnHMfh/Pnz6NKlCxwcHJinC7h+/Tq6du0KY2NjREVFMfMkJydjzJgxUCgUmDdvHjPPo0ePhLqMrDJPp6WloV69eiAirFixgonj7t27QrbukJAQJg6+gsK4ceOYtP/DDz+AiNC+fXsm1wr/Gb3//vtCri6xGT58OD744APs3r2bSfJPyfI0Xbp0Cd7e3qhWrRoUCsVbC9Hyb2z16tVMihIWx+7du4WTvkWLFrh+/bokXgC4deuW4K5bty6zAqfF8erVK8Ht6OgoWY4moKBcBJ/WvkaNGpJ5AcDHx0c47rFjx0rm3bt3r1DGxd7eXpIAPT09HZMmTRI+6y5dujB3pqWlYcGCBbCwsBDOrYyMDGY+juPg7++Prl27Ct/rokWLhPcidtCk1Wqxf/9+oWQMMSwbAxQEgr169RJcs2fPZuLhOA7btm2DnZ0diAimpqbMHuQOHz4sZD+vUqUKk5xKGo1G53PTN4lhaRk5ciTz84APLlUqlejlRoCCjO38MTRv3pzJ996vXz+h3Mzo0aNFd6SkpMDZ2RlEBBsbG0yZMkXUz0qyoOnEiROYO3cuDhw4AKVSqXfQREQwMzPDqFGjmI86aTQa1KlTR6e43xdffMEs2/jrbnNzc8Fbo0YNptlyCxMVFaVzzAsXLpTECwCzZ8/WcUsVIB88eFCo70dEWLJkCXOnRqMpUthz9OjRTJ0cx2H37t2oVq2ajtff35+ZMyMjA0uWLEGVKlV0nCxHMY8cOYKWLVvq+Dw8PIQMymIGTRzHYcuWLcINjH998MEHTJJE3r9/X6gjyL/s7e2ZZAkPDg5Gu3btdFwTJ04U3aPVajF//nwdz+effy66BwCmT5+u4wkICBDdkZiYKNQlJCLMnDlTdAcA2NraCg6+qoGYZGRkQKVSCY569eqJnniYL53Fv6ysrPDLL78gPz9fNIe/v79O/05EaNeunShJePXtS8o9md2tWzdasGAB9e3bt9TzmWq1mr799ttSJaUrCwYGBjRnzhydn1lbW1NycjJTL+9u3bq18G9DQ0NavXo1s7nxwhQ+PpVKRUuXLqW4uDjm3pycHPL19dX5WUhICHNvVFQULVy4UOd8cnJyYu69du0axcbG6qzZGDBgAFNnVlYWZWRkkLGxsfCzVq1aUfv27Zk5DQ0NqUGDBqRS/ZPezcvLiz7++GNmzubNm5Obm5vOz3799VcyMjIS3aVQKKhdu3Y6a2MMDQ1p3bp1TNbj2NjYUM2aNXV+9uOPP1KlSpVEd8XGxupcF2q1mqZMmSK6JzAwkCIjI3Xy47C4Fk6ePElHjx7V8bC41jdu3Eg5OTnCv1mszwSg01cfP36czp8/L6rDzMyMmjZtKvxbqVTSmjVrRF3r2qRJE/L29hb+rVKpyNjYmDIyMkRzdOjQgaZNm6bzs65du1LLli1Fc7yVcodnhSjN9Bwf9TZt2pTp/D2PRqNB7dq1haeGdu3aMS2uWpiFCxfCzs4OarUaLVq0kGxd1dmzZ9GlSxfUrFkTtWrVwsuXLxEbG8vcGxERgQsXLqBDhw6wsrLCokWLsHXrVuZeoKBqvb29PZydnWFra4sLFy5I4l2zZo0wFVGlShVRn65Kgh/d5c/pt1175YXjOIwfPx5EJFSyv3z5MlPnoUOHhJp7RAWFigsj9vTcunXroFAoBB/LNT9RUVHC+jeVSoXGjRtDo9EwccXGxsLZ2RlqtRpKpRIjRoxg4gGA33//XbgWzM3NmRWUDgkJARGhUaNGUKvVTKYADx48iF27doGIMGbMGCbrM9PS0uDh4YFOnTqBiPD06VOEh4eL7pk8ebKwjKZLly5MRk8DAwNBREKf9PPPP4vuyMnJQaNGjUBUUJjX1NRUlGnTCqk9V5qgadq0aVi4cCEUCgWsra1x+vRpMd9Ksfzxxx+YN28epk6dCiJCr169JKlfdOHCBRw6dEgoEirVouwXL14gPz8fI0aMABFJVs+Ip1atWmjcuDEASBJEAICfnx+ICMuXL8eVK1cQHR3N3Pnw4UMYGxvD3d0d4eHhzBZzFuby5cswNjaGvb097ty5wzwY12g0wtqOzp0748CBAxg0aBAzH1Bw81UqlahatSoCAwNRo0YNxMfH6/yOWEETx3HCFKunpycCAwPh7u7O7IYfFhYGZ2dnKJVKbN68Gf369WM2tZqSkoL69esLa3K8vb2ZrJsBCh6YzMzMUL16dURERGDUqFFMPAAwevRoEBGuX7+OXbt2MfNs2bIFRISjR48y6ccyMzORmpqK9evXg4hw7Ngx0R1AwQPIhQsXhPvBkSNHmHh69OiBgIAANGjQAESEzZs3i+4IDg6Gu7s7rl27BkdHRxARJk2aVK77+TsfNAUGBgIAjh8/DisrKyiVSvj4+DAtMJmfn4+4uDhwHIcvv/wSRIRhw4YxH/nh209NTYWtrS0cHByYrFsoiQ0bNkgyElEYjuNgZGQEb29vyZwA0KZNG5iYmCApKUkSX15eHpo3bw6lUomrV68CALMbLU9wcDAsLS1hbm4u7FRhWRg5Pz8fw4YNAxGhZ8+eyM7ORm5uLrOAlOM4fP/99yAiuLu7C2sAi7vRixE05eXl4fPPPwcRoXXr1sICVlaBRXBwMOzt7aFSqYSbPV95Xmyys7OFtUwrV64EwO5c0Wg0aNu2LRQKhTDCy+paSE1NhZmZGZo3b86k/cIsWLAARIS7d+8y9fA70ObMmcOkff4+FBcXB3Nzc7i7uzPZhRYTEwOg4DyrWbMmlEol9u3bJ7rn3r17AID4+Hi0b98eRAW7A19/sNKXdz5osrOzQ9WqVdG0aVN07txZ2GnRv39/SdIRaDQaDBw4EEQFO6ykqAYO/BPAzJo1SxIf8M8w9nfffSeZ88WLF8JnKxX8QsSR/8femYdFVf1//DPDsO+CoIJCgIK4EIJL7oa7ZmpRamlWrrmkpqYZll+3SktTy30pDVxxSRR3zS0VZRUVBdlEVtn3mfv+/cEz9+eofRvlnov1Pa/nmaccZs7r3jv3nvs5n3uWMWNkc2o7vbIa8fQkqampcHZ2hpGREU6dOsXcV1FRIY6KCQwMZFLJPk51dbWY0Wrfvj1ycnL+6+drGzQVFxejb9++IKqZnoL1I/vr16/Dzs4ORkZGzBsxarVa7Gg+a9Yspi4A+O6770BEmDFjBnPXypUrZcvajx07FkSE/Px8ph7toKHXX3+dqQf4/99q+fLlTD1JSUlo2LAhjIyMmE07AdTUGzNmzABRzWhebQP2rwgODsYbb7yBN954A23atIGjo6M4qvSlDZqe3LDS0lK89957Ynr81q1bUm7aM6moqEDv3r2ZRvdPolar4evrC2NjYyQmJsri1Gg0sLGxQdeuXWXxAUBERIRso9e0aNPOUVFRsviuXbsGlUoFX19f5sEEUDO/jre3NxQKBbPh1Y9TVlYmBhQjR45k/oi1pKREHEI+cOBAvaYxqE3QlJWVBX9/fxARxo8fz3z/Ll26BGtra5iamuLYsWNMXYIg4JNPPhF/O9bZ9OjoaBgZGcHb25t5plWj0aBp06aoX7++OIqSJX369IGFhYUsDeuePXvCwsKCWd82LRUVFfDw8ICVldULZ2b0JS4uDvXq1YO5ufnfBjO1JSQkBGZmZjA0NMS6deue6zeTLdNUUlKCqKgoREZGQqFQYMWKFYiKikJqaupzb5ggCFi1ahVUKhUsLS0RGhpa2837W0pKSvDaa6+BiN3kaE/yxx9/iFk1uejTpw9MTU1l6cMFAKGhoSAiBAcHy+LTDg3u0qWLLL6ysjJ4eXnB2NgYcXFxsvg6d+4Mopo5zlhTXFyMHj16gIgwYcIE5jfdnJwccWqBjz/+WO8A5kWDpnv37omdsBcuXMj8hnj69GmYm5vDwsIC586dY+oCgEWLFoGI0KdPH+bXfEVFBVq3bg2VSiXLxKpHjx6VNbvr7e0Nb29vWVxBQUGyNfwOHTokW2b+ypUrMDc3h62tLWJjY5m6YmJi4OHhASLCRx99pHcQL1vQdPbsWSgUCiiVSp3Xhx9++MIb9scff8DR0RFExPwAAzUt+FatWkGlUsmW/Xn33XdhZGQk25xNX3/9NRQKhSzHEwBWr14ty+gqLdu3bwcRYffu3bL4tm3bJkt6W8uKFStkfcT6+eefi49a5GhhDxs2TBytxqJ1+DiCIKBt27YwMDDApk2bXmRzn4vS0lI4ODjAxsZGlol1ExISYGBgAH9/f1n6TmonD5ZrHrixY8fCwMBA7DvDGmtra/Tp00cW15EjR0BEsow2FgQBvXv3hrm5ObKzs5n7Tp48CSMjI3Tq1Il5nZKfny9mrWfOnKnXd+qkT5M+6LthDx48wNq1a2XaqppOa0ePHpXNl56ejoSEBNl8eXl5si1dA9RckI8ePZLlsZWWmJgY2TJpgiDg6NGjsk0fodFosGPHDtn63pWVlWHLli2y+TIzM7F9+/bn/t6LZpri4+OZjVJ6FufPn2e2vMSzOHr0qKyjZcPDw2UbIavRaGQ9lpWVlbINLCkrK5Nl0mUtiYmJsoww1hIeHi7bqhgajQYrVqzQuy+avnWJApB3RdOioiKytramwsJC5pNacjicfze8PuFwOFKgb13CbnlrzksBi1Wzn4esrCwmK2s/DzK3CzgcTh3A+jpPTk5mVnZd19Mc/eFBE0NKS0spPT29Trdh1qxZpNFo6sy/ceNGiouLqzP/9u3bqaqqqk7c1dXVpFar68TN4bxMqNVq5tfhli1bmJVdVFT01FJcUvLtt99SdnY2k7IfPXrEgzIJ+dcHTbGxsXWWaTAzM6PAwMA6DZxOnjxJO3bsqBN3dXU1rVu3jqKiourEf+PGDZo9ezaTdcr+jvz8fBo/frzO2lhycf369TrJ7pWVlcnqQ02fTFl9clFeXi7pumB/RW5uLt2+fZupo6ioiMaMGaOzZqHUbNy4kQ4cOMCs/F9//ZXOnz/PrPzExET6z3/+w6RsS0tLGjBgAOXk5DApv7KykhISEpiU/TLyrw+aoqKiaMCAAUxTq3+FQqEgGxsb6t69O6WlpcnuB0DZ2dkUFBSks+ikXBw8eJAePHhA0dHRsrvz8vJo6NChZGlpKbs7KSmJOnbsSEZGRkwWev0rysvLafbs2bRw4UIyNTWVzRsfH09vvfUWs5bykwCgkydPUlBQkCw+QRBo9+7dtHLlSuYujUZDW7dupdmzZ5NSya56BkC7d++m9u3bU4MGDZh5UlNTqXPnzgSA2f5cuXKFJk+eTA4ODkzKB0Br1qyh1NRUys/PZ+LIzs6m9evX0927dyUv29DQkBQKBQUEBDAJnIyNjWnOnDm0YMECqqyslLx8IqK7d+/S8ePHX46uFi/WL/3FkXqBzb+jsrISTk5OMDMzw7Jly2Qb4aFFO++Gm5vbX85dxYqCggIQEYgI3333naxuAOLU9p06dZLVq1ar0atXrzpxX7x4Efb29rIvW3P+/Hk0bdoURCTLOo5AzXIM48aNg1KpxOTJk2Vxnj17Fl27doVCoUBUVBTT+kQQBISGhqJVq1awtLRkPgngsWPH0Lp1a+ZTg2RkZIizvLOcsf/q1avi1DGs1obLzMwU1x6bM2cOE8eJEyfEepTV+oDaa5fVeo6TJ08GEaFly5ZMRlWePn1anJj6jz/+kLx87fQIzZs3x9q1a/Wa+PZ5eemnHPjpp5+YzxyrRTtlPBHB19dXXPdODn7//XfR7ebmJuvwzrt374puGxsb2YbNAjXD/7VuCwsL2YbmA8CcOXNE95AhQ2TzBgcHw9jYGEQEIyMjWebIKS4uxuTJk6FQKEBEaN68OfNpAkpKSrBgwQKYm5uDiGBqasp8mPSFCxfEVeDpsQn5WARNgiDg0KFD8PX1FX0sZ7aPjo5Gnz59RNf777/PxCMIArZt2wYbGxvRxWp9vX379sHU1BREBKVSiUePHknuqKqqEtfVo8fW1pOaN998U3SsXLmSiePx3+TPP/+UvPxffvlFLL9FixaSB06CIKBNmzY616fUv3lycjIsLCzE+9nMmTORnJwsWfkvfdBERLC3t8eqVauYV/IFBQWwtLQUvUqlEp9++imKioqYeoGalpDWS0R45ZVXZAucLl68qOPWd5IvKZgwYYKO++7du7J49+7dq+Nlucq6FkEQxDXotK9evXox9544cQKurq46XpZzmwmCgC1btqBhw4Y6TlYtfKBm3cTHAwoi0sn6SB00nT9/Hm3bttXxubq6MmngZWZm4qOPPhIDXiKCSqVisnhvSkqKuCSO9tW3b1/JPYIg4Ntvv9XxdO7cWXIPAEybNk3H89tvv0nuSE5OhlKpFB2jR4+W3FFZWamzH127dpX8nhgfH6/jYBE4BQcH6zgcHBwQEhIi6b789NNPOg6lUonAwEBJEgL61iV12qfJ39+fxo4dy7zfh7W1NY0bN078t42NDfXs2VOW/iaOjo7UuHFj8d+dOnWiP/74g7mXiHT6mDg7O9PJkycpJSWFubegoIAOHDhAjo6ORESkUqlk6QxeUlJCJ06cIF9fX/E9Vv0cHiczM5NsbGzI2dlZfK9///5MnQDI1taWXnvtNfE9GxsbGjlyJDOnQqGgnj17Utu2bcX3rK2tafbs2cycnp6e9MEHH+hcq/PmzRPPLalp27YtDR06VOe9ZcuWkYmJieQue3t7GjFiBFlYWIjvjRkzhtzd3SV3KRQK6tevn857n376qeSenJwcMjU1pVdeeUV8j8W1cPv2bcrPz9fpj8XiWl+3bh25ubkREbt67PF+Rubm5lRRUUHh4eGSOjw9PXX6d3bs2FHyju2BgYHUpEkT8d++vr7k4eEhaT+kCRMmUNeuXcV/m5ubU1BQENWrV08yx99S6/DsOdFGc9rMz9SpU2XpZ5SamgqVSoVGjRqBiDB79mzmTi1Dhw4VW3msUu/PYseOHQgODoazszN8fX0BgPlCkEDNsjQlJSXo27cvzM3NERsbi/379zP3AjUtXR8fH9jY2ODDDz/E6tWrZfFqn+n7+vpCoVDgzp07zJ337t1DvXr1YGVlBUtLS1lWsj9w4ABUKpXYb2vx4sVMfampqWjWrJmYkn8y6yN1pikyMhL169eHoaEhzMzM0KVLF2aZ8KqqKgwePFjMupuYmDCbLbmqqgo9e/YEEcHZ2RnNmjVj9sj80qVLUCgU8PHxgYGBAbN11LKzs2FoaIguXbrAz88P0dHRkjvS0tJw4cIFEBGWLVuGZcuWSV6HRkZG4ssvv8Sbb74JlUqF8vJyJvV09+7dxfvQlClTJC8fqFnuSaFQwNHREcbGxrh48aLkjoSEBJiYmMDKykrMmkmxHNlL/3juxo0bYh+Ffv36ydIx/KOPPkJaWhq6dOkCIsLPP//M3AkAhw8fRkVFBQYOHAiFQiHbEgDaSnHo0KFQqVQoKyuTxaulVatW8PT0lNV59epVsVKorq6WZS3B0tJSuLu7w9zcHPfv38fy5ctlWVvJy8sLSqUS4eHh+OyzzyR9vv8swsLCYGhoiIYNGyIhIQEBAQFM+23du3cPLi4uUCgUWL9+Pb7++mvs2bNH5zNSBk1//vknbGxsYGJigiNHjmDUqFGIiIiodbnPorq6GoGBgSAifPDBBzh37hyzoFcQBPFx+ZQpU3DmzBmsWbOGiauiogLNmzeHsbEx7ty5w/RaWL58OYgIe/bsQWZmJgoKCph4tGvrPXnuSYW2nl66dCmICJcvX2biOXjwINRqNTp27AhDQ0Mmj4GLioowYsQIREVFwdLSEnZ2dkyWC1u2bBm+++47rFy5EkqlEvb29rhw4UKtynzpg6Z+/fphwIABYuAkVbT43ygtLQVQsw6bp6cnlEolfv/9d6bOx4mNjYVSqZRt8Uct33zzDYgIly5dktVra2uLgIAAWZ1jxowBESEmJkY256xZs0BE+PHHHwGAecBUVVUljg7U3vxYD6o4duwYjI2N4eDggPj4eABg0rlXy82bN9GwYUMYGBiIa9JlZ2c/dWylCprOnDkDCwsLmJubiyOkWK3dplarMWLECBARRowYAbVaDY1Go/caWc/Ljz/+CCJCnz59UF1dDUEQmJ0v8+fP1+k4z+paEAQBzZo1g4ODA/P1Lb///numwYyWU6dO6dQjrNBmzoYNG8akfO19Njw8HAYGBnB3d5d8QWC1Wo309HQANY05S0tLGBkZvdD6lcHBwXjjjTfQr1+/lzto0m6YIAhYsWIFlEol6tevzySd9ywSExNRv359mJmZyTqa7sMPPwQR4eTJk7I5tRcjq5Efz6K0tBREhFGjRsnmLCoqgrm5OTp06CCbMyIiAkqlEh06dJDl0acgCJg4cSKI2A4Xf5xTp07BxMQE9vb2TIfCa7lx4wbs7e1haGiI0NDQ//pZKYKmo0ePwsTEBNbW1sxvjBqNBqNGjQJRzfBy1l0TwsLCoFQq4e3tzSwToyU2NhaGhobw9fVlvl9nz56VrZvFjBkzQERIS0tj6ikoKIBCocB7773H1AP8/4hAVplULZs2bQIRoUOHDkyfdMTGxsLFxQVEhHnz5r3Qo+eXPtP05IYdPnwYFhYWMDIywo4dO2TZlitXrsDU1BSOjo64f/++LM7U1FSYmJjAz89PtmH42otxxIgRsviAmufORIQvvvhCNuf69etBRNiyZYssvqqqKvj4+MDQ0BBxcXGyOFetWgUiQu/evWXpC3ju3DmYmZnB1taWWd+Ux7l06RKsra1hYmKCo0eP/u3naxs0hYaGwtDQEPb29rhx48YLlaEvGo0GH3/8MYgIgwcPRlVVFVNfbGwsLC0tYW9vzzyLr1ar0a5dOxgYGDA/jgDw3nvvgYiYPPp5knfeeQdKpVKW683LywtNmzZl7omPj4dSqURAQADzzPiXX34JIsLQoUOZNiyzsrLQsWNHEBHefvttMeOlL/+4oAmomdtHGy1++eWXsgQVBw4cgEKhQPPmzZk+bnic2bNng4gQEhIiiw8AmjdvLsvFqOXMmTMgqpmPSy78/PxgZWXFZOKzZ7F48WIQERYsWCCL78iRI1AqlWjevDnzrAFQk8Y3NzeHtbU18xYpUHPOmJubw8LCAmfPntXrO7UJmrZv3w4DAwM0bNhQfOTIisf7FQ0YMID5I6WsrCy4uLjAyMgI58+fZ+oCgB9++IH59BNacnNzYWxsjNdff525CwA6deqERo0ayeLSZiHluBdpuzKEh4cz9QiCgPfffx9EhOnTpzN1lZeXiwG1v7//cw2s+EcGTUDN3CUdOnR44WjxRdC23rt164aKigrmvkePHsHW1hZubm7MK08tH3zwAYhItgkut2/fDiL5ZsW+fv06iAgTJ06UxXf79m0YGxujZcuWsvyG2qyBnZ2dLJ3br1y5AktLS1haWjKZbO9JwsLCYGJiAhsbm+fyvWjQtH79eigUCri4uDDpEPs4giBg6tSpYr8i1v3PysvL8dprr4GI8OuvvzJ1AUBSUhLMzMzQtGlTWQabrFixQtZGp4uLC9q1ayeLa82aNSCSZ1b/9PR0mJqawsfHh3mCorKyEt27d5elz5YgCFi4cCGICE5OTnpnPv8R8zQ9C0dHRzpz5gwNHz6cTpw4Ictit1OmTKEZM2ZQSkoKZWZmMvfZ2trSF198Qba2tvTw4UPmPiKi7t27U0BAAD169EgWn5WVFXXp0kWc44Q1eXl51LRpU535uFiSlJREFhYWtGnTJjIyMmLuu3nzJgGgAwcOyHJML1++TAAoPDyc2rdvz9x34sQJsrS0pLNnzzL3AaCwsDDy8PCg8+fPM5kX6XFKS0vpwoULFBAQQPv372cy59PjZGRkUEZGBn3xxRdM5+3SkpSURObm5rRp0yZZ1jwEQJ6enjRkyBDmLqKa+Ya6dOkii6tDhw7UoUMHWRZrdnJyomnTppGFhQXl5uYydRkZGVFoaCh5e3vTlStXmK4hp1Ao6Msvv6Tdu3dTXl4eHT9+XNrywXLrn0FRURFZW1tTYWEhWVlZ/eXnAFBSUhLzCk2LIAiUn59PdnZ2sviqq6vJwMCA6aKc/2sAkHWB3LKyMjIzM5PN5NqBJwAAIABJREFUl5ubS/b29rL5MjIyqFGjRrK4BEGgjIwMnQlC9UHf+uRJKioqqKioSJbJT4lqJnw1MjKS7Xx59OgR2djYyFa/yH0tyH2t/1upqqoSF/SVg7y8PLK1tZXtvLx37x65u7vrtX/61iUvbdDE4XA4fwevTzgcjhToW5fwNAeHw+FwOByOHvCgicPhcDgcDkcPeND0L0eODoX/jcrKyjrfBg6Hw6ktFRUVzMrmdeQ/Bx40MUatVtepf926dXXq37lzJ6WkpNSZ/9atW3Xm5nA48nH79m1mZavValq2bBmz8rdu3cosKANQ5/ehfxP/+qCpsrKyTv1BQUGUnZ1dZ/4dO3bQ0aNH68QNgL7//nuKj4+vE39CQgJNnz69TtwlJSW0b9++OnEXFxfXiZfzz6O0tJR5lqOsrIz27NnD1BEaGkqbNm1iWj7LejQmJoa+++47JmUrFAr6/PPPqaCggEn5RHV/n5WTf33QVFxcTO+88w5dvny5Tvy2trbUvn17iouLqxN/SUkJTZ06tU5O6lOnTlFsbGydBE0ZGRnUu3dv2aaQeJxr166Rr68vGRgYyOrNyMigCRMmyBokA6Djx4/TmjVrZHOWl5fTjh076N69e7L4CgsLacOGDZSXl8fclZ+fT8uXL6fo6GimnsrKSlq9ejV9/vnnTId/R0ZGkp+fH9NMx7lz52jEiBHUtGlTJuU/3vhjNdi8pKSEli5dSvfv32dSvqGhIXXs2JGSkpKYlB8WFkYzZsygrKwsJuUTEV25coWKioqYla83LzDhZq3QzrrJakXvZ6Gd4r9v3764cuWKbF4AiIuLAxHB0tJSr7W0pMbNzQ1EhEWLFsnu7tu3L4gIo0ePltWbn5+PVq1agYjwn//8RzavWq3G4sWLoVKp4OjoyHxtMS15eXmYPXs2TE1N4evrK8vyQ6WlpVi/fj28vb1hYWGBlJQU5s64uDhMnToVtra2eP/99wFIs2DvsxAEAZcuXcLo0aNhamqKr7/+WtLyn+TOnTuYNGkSzM3NMXz4cGYetVqNX375BS4uLlCpVMzWbtNoNFi2bBkMDQ1ha2vLbBb0qKgoWFlZgYj0Xnrneblw4QKICET0XMtyPA/vvvsuiAhvvvkmk/LPnz8PIoKdnR2TZXU0Gg3at28PU1NTzJo1C9nZ2ZI7oqOjUa9ePQwaNAjbt2+XfCmpl34ZFUdHR0yePBlnz55lvjp8ZWUlmjVrJp74AwYMkGUtLaCm8nV1dQURQalUYvXq1bJ4tTg6OoKIYGpqiuTkZNm82mCRiGRbggAAysrK0LlzZ9G9e/duWbzJycno0qWL6J01axZzZ0lJCRYvXgxra2vRe/LkSabO9PR0zJ07F/Xq1ROdLNcXLC0txdatW8WFOIkIjRs3FhtdUgdNjx49wo8//oiWLVvqnL8sAmBBEHDixAkMGDBAdNnZ2TG54QiCgAMHDqBFixaia/LkyZJ7gJpz5PXXX2fuSUxMRIMGDURPZmYmE8/QoUNFx4kTJ5g4Bg4cKDrCwsIkL7+6uhq2trYgIhgZGeGXX36R3HH58mVxH8zNzTFnzhzk5uZK6ggODhYdRkZGGDhwILZt2yZJEualD5oeryR27tzJ3Pv777/reIkII0aMkGVtu0mTJul4J02aJMuK2QBgYWEheocMGSKLE4C4mjsRwcLCgvlK2kBNxTBo0CCdYx0TE8PcGxISohO4EBFu3brF1HngwAExINa++vbty9T566+/wsjISMfZuXNnZpmttLQ0+Pj46PgUCgXOnDkjfkbKoCkmJgZNmjTR8ZmZmeHOnTu1LvtJiouLdW6U2tdvv/0muev+/fviWnTal6WlJZPgbN++fToBNREhMjJSck9WVhY8PDxEh42NDZM65t69e1AoFKKH1bppPXr0EB3u7u5MMnPDhw/X+V3mzZsn+bWrXSz38bp/06ZNkjqmT5/+VJ3w0Ucf1Xrdw39M0OTl5YXU1FTmXkEQ0KtXL9Hr6uoqeRT8Vxw5ckT0GhsbY968eYiOjmbuFQRBvOAVCgVMTEyYr2gN1Cy6bGxsrPM7y/Eb79ixQ+c3VigUzBdHraqqQlhYGLp27Sp6O3XqxNQJ1KTDFyxYoLOvrM8pQRDw4Ycf6pzLt2/fZuo8cuQIVCqV6Pzss890/i51pmnt2rU65+3atWslKfdZJCcno379+joZcFaNi8uXL+sEvIsXL5bcoVarceTIEfTs2VP0tGnTRnKPIAiYO3cu/P39RU+HDh0k9wDAlClTdM6H8ePHM/G0bdtWJ1BfuHCh5I7ffvtNdFhZWWH+/PmSNwhSU1NhamoqesaNGyd5YFZdXS0u/qsNmPfv3//C5QUHB+ONN95Av379Xv6gSZtyt7GxQXBwMHN3bGwslEql2EIJCAhASUkJc29ZWRlMTU3h6ekJIpI88v4rSktL4eLiIrZi0tLSkJaWxtwbExODiIgIeHh4wNPTExMmTMCxY8eYe4GawImo5pGKm5ubLM7IyEiYmJjA2dkZhoaG2LJlC3Pn0aNHYWxsDDs7O1hbW+PDDz9k6isvL8ewYcNARGjevDmICEuXLmXmEwQBS5cuhVKphK2tLZycnNCqVStUVFTofE6qoKmyslLMCLu4uMDS0pJpEBMREYGGDRuCiODp6QlLS0tmDYsHDx6IdY+bmxucnJyYZdhv3rwJc3NzNGrUCCYmJkwf3Y4bN0681ln0mxQEAfv27cOqVavEgP29996T3AMA7dq1Q2BgIIgIv//+O5OuFHl5eVAqleK5sG/fPskdAPDVV19BoVCI/WlXrFghuSMrKwvOzs5o1qwZ7O3tQUT46KOPUFRU9MJlvvSZpokTJyI2Nhbh4eFi5TF8+HA8evSIqX/ixIlISkrC1KlTxayA1B3KnkVQUBAePXqExo0bw9ramlmHwscpLy/Hw4cPsW3bNhARdu3axdypRa1Ww9DQEIMHDwaAp252LNBoNPD29oaVlRUKCgqwY8cO5s5Hjx7Bzc0NxsbGiIiIwLRp01BcXMzUefjwYRgZGaF+/fqIiYnBxIkTmQbDmZmZ6NChA4gIgYGBKC0tRf/+/Zl1dC8qKsJbb70FIoKPjw8SExMxbdq0Z2bSpAiaHj58KPaD69mzJ3JzczFixAg8fPiwNrvxl4SGhsLU1BSmpqbYu3cv9u3bxyyjlZ6ejqZNm4pZs9DQUGZBfVFREby8vKBSqXDp0iXMnDmT2YCf9PR0GBkZoUuXLiguLsaBAweYeICaIICIEBcXx6weS05ORnx8PIgIM2fOZOIAgHnz5iErKwt2dnZwdHREXl6e5I6SkhK8/fbbePjwodg3cNGiRZI3QK5cuYK5c+fi4cOH6N+/v9gouHjx4guV99IHTbm5uWKlm5ubK1aSzs7OOHXqFDO/NrMkCAK++OILMYWck5PDzKn1Af//qG7QoEGy9PMBgJSUFBARJkyYIIsPqEnTEhGmT58um3P//v0gInzxxRey+DQajdgvZePGjQDAfMTcwYMHYWhoCAcHB8TFxQEA0355cXFxcHFxeaoPBKvA8M6dO/D29gaRbp/Dv/LVNmi6dOmS2Gj7/PPPxUEpLPZPEAR8++23UCgUaNCgAa5evQqg5vdj0S8sNTUV7u7uICJs2LABQE1DisXAG0EQ8Pbbb4OIsGrVKgBsrwVtvxY5uhuMGjUKRMS8/6sgCHB0dISfnx9TB/D/j+o++OADJh7tfTY3N1d8jPr5559Lfs/T/iaCIGDt2rUwNTWFUqnEvHnznvv8e+mDpic3TBAEbNu2DZaWluLNlnV/FABYsmQJiAje3t7IyMhg7gOAkSNHgogQEhIiiw+omXrA09NTNt/Zs2d1KlDWCIIAf39/mJqaMung+iwWLVokpoXlIDQ0FCqVCg0aNEB8fDxzX3h4OKysrGBoaMhktM2THDx4EFZWVjAwMMDKlSv1qmBfNGjSVrKGhoYwNzfHnj17XnSz9aKyslIcHOHj48O8j19ycjJeeeUVKBQKbN68makLAL7//nvxaQHrxmBOTg7MzMzg5+cnS8Ozc+fOcHR0ZO4BaqYeUCqVzKfkEQRBbPCxngqnsLBQzOROmjSJ6ZQod+7cEfuH+fn5PdeAnH9c0KTl/v374gFu2bKlLPO/aJ9Zu7u7M0vJP05ubi4cHBxgb28v2w1eW2HL8VgQALZu3QoiwuHDh2XxHT9+HESETz/9VBbfiRMnoFAo4OvrW+tRG/pw6NAhqFQqNGzYkHnnawDYtm0bDAwMYGdnhz/++IO579tvvwURwcHB4bnm23nRoEnbH6Zp06Zixo4VFRUVYr/CgQMH1qrfhT48ePAArq6uUCgU2LZtG1MXUDMHkIGBAVq0aCFLH9GgoCCmfXKexMnJiVlH8ydZt24diAgHDx5k7kpPT4eVlRWaNGnC/JwsKSkRB+mMGTOGqauqqgrz58+HgYEBTExMsH37dr2+948NmoCa/jBLly6Fn5+fLH1hAGDz5s0IDAyUbSqAffv2ISgoSLb9O3fuHFatWsXkGfazuHnzJpYvX4709HRZfGlpaZgyZYoso/SAmn4wb775JpKSkmTxJSUloWPHjswmI3ySiIgItGnTBnfv3pXFd/DgQXTo0OG5+2a9aNC0cuVKDBw4ULZJdqdOnYrp06czn5MOqLlpBAYG6n2zqC3Z2dkYMmQIk6kZnsW1a9eYZyweZ8uWLbL1B01OTsbixYtx7949WXxbt27FN998I8t9r6KiAkOGDJGlrylQM2K0WbNmejf69K1LFACjeeH/gqKiIrK2tqbCwkKysrL6r59Vq9WkUqlk2jIiAKRQKGTzcTjPg9znp9w+QRCee0mP56lPHgc1DUamS4g86fs3/3Ycjj7IfV4+Twyhb10iX0TyAsgZMBERr2Q4LzVyn59y++QKYIhq9k3O/fu3/3Ycjj7IfV6yiCH+9Qv2cjgcDofD4UgBD5o4HA6Hw+Fw9IAHTRwOh8PhcDh6wIMmDofD4XA4HD3gQROHw+FwOByOHvCgicPhcDgcDkcPeNDE4XA4HA6Howc8aOJwOBwOh8PRgzoLmoYNG0aDBg2ikJCQutqE/wnS0tLq1H/t2jUSBKFOt4HD4XBqAwC6evUqs/LT09N5PVlHhISE0KBBg2jYsGF6fb7OgqadO3fSoUOHaPjw4cxd2iUT6gKNRkNnzpypswsiNDSUgoOD68QtCAJNmTKFSkpKZHcDoD179lB0dLTsbo1GQ8nJybJ7iYhXvBy9keNcEQSB7t+/z9RRVVVFP/zwA9N6JiwsjPbu3cus/JSUFJo1axaz8quqqujcuXNM74N1dY+tLcOHD6dDhw7Rzp079fp8nS2jsnDhQnJyciI7Ozuyt7cnOzs7cnJyIicnJya+VatW0dGjR6lNmzbk6+tLbdq0ITc3N+bTuhsYGFBsbCyNGzeOpkyZQqNHj36uNbJqi7u7Ow0dOpQaNWpE3bt3l81LRBQcHExXrlx57nXBaktqaipNmjSJkpOTKSYmRhanRqOhixcv0u7du+no0aN04MAB5s6ysjKKjIyka9eu0bVr16isrIw2bNhA9evXZ+IrLy+nxMREunv3LiUkJNDdu3epqKiIli1bRi4uLpK6AFBBQQGlpKQ89Xr99ddp4sSJkl67ACgnJ4dSUlIoNTVVdKWmptKoUaNoyJAhkrke9z1+LBMSEujVV1+luXPnkoGBgaQ+jUZDd+7coWvXrtHVq1cpLi6OFi1aRF26dJHUQ1QTKF2+fJl2795Nhw8fpt27d9Mrr7wiuYeI6OLFizRu3Djq1q0bWVhYMHFUVVXRjBkzqEePHkzKJyLy8PCgH374gVxcXGjq1KmSl29kZERnzpyhTz75hKZOnUojR44kMzMzSR2FhYU0adIkEgRBvM/6+vqSnZ2dZI78/HyaP38+lZaWkp2dnU78oP1vs2bN2C7B9txLB9cS7UrCT77s7Oxw9epVZl5BEDB//nwdp5WVFbp164bp06cjJyeHmVuj0aBjx44gIlhaWuLTTz+VbRXr+Ph4EBGsra0RFxcnixMAiouL0ahRIxARYmJiZHGq1WqsWLEC5ubmICJs3bqVqU+j0eD8+fOYMmUKGjZsKJ5Xv/32GzPnnj17MGbMGPj4+MDAwEB0Nm/eHJmZmUycP/74I5o0aQKFQqFz/Xh4eCAxMVFyX0pKCjw9PZ9ZTyxduhSCIIif1Xdl8v/G9evX4eDg8JTLyMgI27dvl2KXRPLy8tCvXz9YW1s/5Zs6dSo0Go1krqioKMyaNQvdu3eHhYWF6DE2Nsbx48cl8wA118KlS5cwbdo0ODk5ia7NmzdL6tGSn5+PCRMmgIigUCiQkJDAxAMAy5cvBxHhnXfeYeYQBAEWFhZQKBTYt28fE0dlZSVatmwJIkK9evXw+eefIzU1VVJHfn4+2rVrp3NeN2nSBIMHD8ZPP/2kc+2+KDk5Oejdu/cz64evvvrqhR361iV1FjT5+/vr7KyrqyuWLVvGrOLXsnDhwqcOdEhICFMnANy6dQvGxsaiU6FQ4I033sDly5eZesvLy8WbXePGjfHgwQOmPi1ffvmluK/nz59n7ouMjNQ5pxo0aICKigpmvkePHqF79+7PvPGxJC0tTaz4tC8vLy88fPiQmTMjIwMeHh46znbt2iE7O5uJLy8vD59++qmOz9TUFHv37n3qs1IETenp6QgMDNTx2dvb48KFC7XZjWciCAK2bdv21Hnz3XffSXJDeZzKykqMHTtWx2NsbIxjx45J6iksLHzmTWzs2LGSeoCa47d3716dRsrgwYMl92jJzMyElZUViAh9+vRh5gGAV199FUQEExMTXLx4kYnj6tWrUCqV4rEzMDBAYGAgIiMjJXMUFBSISQLty9nZGWlpaZI51Gr1U0kQlUqFsWPH4s8//3yha+mlD5pycnIwZcoUEBHMzMxQv359cccHDx6MQ4cOobq6msk2fPvttzoH28bGBkuXLkVJSQkTn5YlS5boeGfMmIGioiKmTgBo0qSJ6PTx8anVDUYf7t+/rxMgHj58mKkvNjZWrHC0ryVLljB1AsD58+dhYmIiOjt16oTKykpmvtu3b2Po0KGyBUz37t3DhAkTdH5LIsKAAQOYXCvx8fGYMGECzMzMxApdGwD/VRa6NkHTn3/+ieHDh0OlUun4mjdvLnkGTaPRIDQ09KlWuKGhIXbs2CGpCwCKiooQFBQkHkttwBQeHi65C6g5ltoMr7ZRXF5eLrlnz549cHZ21jmGLIJbLWPGjBE9HTp0YOYBgLfeekt02dnZ4c6dO0w8s2bNeio7U1paKqmjqKgIXbt21fG8+uqrCAsLk7RxEBYWBltbWzHxonW1aNEC33//PbKysvQu66UPmrQbFhwcDFdXV1RWViI0NBQDBw4UI+FGjRoxu8H/8MMPIKpJ92tb0S4uLkxvelVVVfD19QURQalUMvdp6dGjB0xMTGBqaoqIiAimjyKBmhN55syZYnaLxU3hSeLi4sSMmpmZGfLy8pj6oqOjYWBgAFNTU9ja2sLR0ZFpFu/s2bPiTT0wMBCdOnWCp6cnMjIymPh2794tXoedOnXC77//Di8vL4wZM4ZJY+b7778XK7z27dsjJCQES5YsgY+Pz399hPCiQdMnn3wi+vr06YMjR45g3Lhx6NWrF/Lz82u7O08REBAgZsymTJmCbdu2wdLSEidOnJDcVV5eLgYWLVu2xJgxY2BkZISjR49K7gJqgnmVSgVjY2PY2dnBzs4OycnJTFwAsH79ep1zReoMnZaioiL88MMP8PDwQKNGjdCiRQsmHi2ff/652Ajbs2cPUlJSmHjKysrQtGlT8Ri2bNlS0sfCWkpKSvD666+jefPmmDNnDkxNTcVkgZTcv38ffn5++P333xEbG4vp06fD3t5eTMLo213iHxM0ATUtzMdP/AcPHmDp0qX48MMPmW7LmjVrkJqaiqqqKmzYsEGW7ERkZCSaNWuG8PBwHDp0iLkPAJYtW4aYmBgkJSXJ4gNq0ui3bt1Cfn4+YmNjZXEGBwdj+vTpmDJlCnOXIAiYN28e4uPjMXz4cJw7d46pr6qqCqNGjcKVK1cAAIsWLWIWMAE1/QaGDh2q82h169atzG5QkZGRGDZsmM7j6rNnz/5tJvZFg6aDBw9iwoQJiI+PF98LDw9HVVXV8224nqxbtw5BQUHiI80bN25I+kjkSZYsWYItW7ZArVbj8OHDOHLkCDMXAHz11VeIiYnB6NGjJe8v9STV1dVYt24devXqhT179jB1ATWPm5KSkvDnn38y9YSEhODq1aviNc6Sc+fOwc/PD3v27MHp06eZeUpLS/H1118DqHnMP3nyZCbHsby8XCc7XFlZib1796J///56Z431rUsUgLzjBIuKisja2lr2EVV/BQDmI+ieJDIyknx9fWXz1cU+1hXZ2dlUUlJCbm5usjkzMzOpQYMGsvmI/rd+0//Gy1afvIzIea7IeS1cu3aN2rRpI/lIw7pC7mtarvvQP6Wu0rcu+Z8Pmjgczj8XXp9wOBwp0Lcu4cuocDgcDofD4egBD5o4HA6Hw+Fw9IAHTRwOh8PhcDh6wIMmDofD4XA4HD3gQROHw+FwOByOHvCgicPhcDgcDkcPeNDE4XA4HA6HowequhIPGzaMVCoVDR8+nIYPH15Xm8HhcDgcDud/lJCQEAoJCSG1Wq3X5/nklhwO5x8Lr084HI4U8MktORwOh8PhcCSEB00cDofD4XA4esCDJg6Hw+FwOBw9eGmCJgB0/fp1Sk9Pl91dWlpKO3bsoNzcXNndnH8uGo1GVt/OnTspISFBVueZM2dkdZaXl9PBgwepsrJSFl9mZiadPHlSlt9SrVbTzp07qaSkhLnr8uXLdOrUKRIEgbmLSP5rgfPPIyUlhYKDg5k6srOz6dKlS0wddR40JSQk0IIFC8jLy4sGDhxIDg4O4t9Y9lEXBIHOnTtHH330ETVo0IBWrVpFdnZ2zHyPU1JSQhs2bKDr16/L4vtfISUlRbabBBHR0qVLacKECbL8jgCouLiYPD09qWPHjrR+/XoqKChg6gNASqWSPD09qX379rR69WrKyclh5iMiMjU1pZ9//pkaNmxI48ePp/PnzzP5TbU+BwcHmjhxIjVu3JhmzpxJkZGRTOodAKRSqWj//v3UoEEDGjlyJB0/fpxZsOHi4kJ9+/alV155hb788ku6e/cuE4+WH374gcaOHUtXr15lWm9ruX//PnPHv53CwkJavXo13bp1i5mjpKSEtm3bRj169CBXV1fKzMyU/PwoKiqiX3/9lfr160eNGjXSSX5o6zFJgcwUFhaCiLB48WL4+fmBiMSXpaUl3N3d4ejoCHNzc7i6ukruv3v3LubPnw9XV1cdt0qlQq9evST3PU58fDymTJkCKysrEBGWL1/O1KdFEATs3LkTx44dk8UHACdPnoSHhwfKy8tlc44aNQrNmjXD+vXrZfH6+/uL50+bNm2wdu1aFBYWMnEVFhZCqVTqnLPGxsZ49913cfToUajVakl9169fh6GhIerVq/fUdTJw4EDs2rULZWVlkvl27doFIyMj2NnZwdraWsfZpEkTzJ07Fzdv3nzqe9r65HmP+5IlS2BiYoL69evD3Nxcx+ft7Y0lS5YgOTlZqt3Dxx9/DHNzc1hYWOi4GjRogBkzZiAyMhKCIEjme/3113U8RISOHTti/fr1yM/Pl8yjpUuXLqKndevWWL16NRMPAFRXV8PDwwM9evTAkSNHJD1uz6JHjx5Yu3YtU4eWS5cuYcOGDUwdUVFRGDdunHjeb968WdLyNRoNTp48iZEjR8LMzEznHDQ0NMTGjRtr7aioqMD+/fsRGBgIExMTHUezZs3g7OwMGxsbqFQqnDp1Sq8y9a1L6myepu+//54ePXqk855GoyFbW1tq3LgxWVhYUMOGDSV1RkRE0PLly+n8+fOUkZGh8zdra2vy9/eX1Pc48fHxtHr1arpx4wZVVVUREZFCoWDme5x79+5Rbm4uubq6yuIjIvLw8KCPPvqIDA0NZXNWVFSQvb09XblyhUxMTOj9998npZJdMtXW1lb8/9u3b1NwcDA9fPiQPvvsM8mHv6vVavL396erV6+K71VWVtKhQ4coKyuL7t+/T2PHjiWVSppL2szMjAYOHEhZWVk66W61Wk1hYWH04MEDiouLo1mzZpGlpWWtfY6OjtS/f38qLi6m2NhYnb+lpqbSzz//TLGxsfTpp59Sz549a+1zd3en3r17U3Fx8VOZwvj4eFq5ciVFRkbSnDlzqE2bNrX2tW7dmjIzMyk6Olrn8VxmZiZt3ryZbt++TZMmTaL+/fvX2kVE5OvrS6dPn9Z57/Lly1RcXEy3b9+muXPnUv369SVxEeleC3fv3qVdu3ZRZmYmffbZZzp/k4LKykoyMzMjAwMDOnLkCJmZmVG3bt0kdTxOYGAg03uDlry8PIqOjiYnJydmjhs3btDatWspMjKSqquriUja+5AgCLRlyxYKCQmhP//8k8rKynT+7u3tTY0aNaqVo6SkhL777js6cODAU3UFEZGBgQG5uLiQhYUFWVhYSH7+1dk8TQUFBZSenk5nz54VXyUlJZSQkECNGzdmug0AKCUlhS5evEgXLlygixcv0t27dykmJoaaNm3K1E1Uc+O5c+cOlZaWUrt27Zj7ONIjCAItXLiQGjduTG3btqXmzZtLFrA8CwAUEBBAt2/fpk6dOomvV199lWlgumDBAlqyZAm1bduWunbtSl26dKGOHTuStbU1E19paSk1a9aMqqqqqGvXrtS1a1fq1q0btWrVigwMDJ76fG3naUpLSyNPT0+qV68edevWjbp160Zdu3YlT09PyRs15eXl5OXlRZWVleKx7NKly1/uW21YtWoVffHFF9S+fXvxXGnfvj3Z2NhI6iGqOTcXL15MDRo0oHbt2pG3tzfTa4EjDdXV1XTr1i3SaDTk6+vLpPzo6Ghf2O3LAAAgAElEQVTxHnvhwgVyc3OjCxcuSHZt5ebm0h9//EFnzpyhs2fPUlxcHC1btoxmzpz53GXpW5e8NJNbAqD4+HgiImrRooWcm0RERAUFBVRcXMw8YONwXoSKigp6+PAhubq6ypahJCK6du0atWzZkkxNTWXxPXjwgAoLC6l58+Z67Wdtg6a7d++SSqWS5bhmZWVRUVEReXh4MHfdu3ePXF1defDCeWkAQPfv3ydHR0cyNzdn4sjJyaGYmBgKCAh47u/KHjT99NNPtHz5csrMzCQfHx9avXo1tW3b9oU3jMPhcP4OXp9wOBwpkHVG8F27dtFnn31GCxYsoMjISPLx8aE+ffrwIfwcDofD4XD+NUgSNK1YsYLGjx9Po0aNIi8vL1q3bh2ZmZnRli1bpCiew+FwOBwOp86pddBUXV1N169f13mGqFAoqGfPnnT58uXaFs/hcDgcDofzUlDroCk3N5c0Gg05OjrqvO/o6EiZmZm1LZ7D4XA4HA7npYDZ0AoA/3WESFFRESs1h8P5H0Fbj/D6hMPh1AZ965BaB0329vZkYGBAWVlZOu9nZ2c/lX16HD60n8PhSAWvTzgcjhzUOmgyNDQkPz8/OnXqFA0aNIiIarJMp06doqlTp/7l99LS0vgQYQ6HUyuKioqocePGvD7hcDi1QluX/B2SPJ6bMWMGffDBB+Tn50ft2rWjFStWUFlZGY0ePfovv2NlZcUrOQ6HIwm8PuFwOHIgSdD0zjvvUG5uLs2fP5+ysrLo1VdfpWPHjkm6thGHw+FwOBxOXfLSLKPC4XA4zwuvTzgcjhTIOiM4h8PhcDgczr8dHjRxOBwOh8Ph6MFLHTTl5+fL6isvL5fNBYBkfjLKkRiNRiOrr6KiQlZfaWmpbC4AVFxcLJuvsrKSKisrZfOVlZWRIAiy+eQ+V+S+FjjSIPc9qKKiQlZnfn6+5L6XMmi6ceMG9e/fn/z8/Kiqqoq5r6ioiD744APq378/04oNgFi5LF68mMaPH09qtZqZ73H2799P//nPf2QLRGNiYmju3LmUlJQki+/Bgwc0dOhQun79OhGxr8SzsrLIz8+PwsLCxPdYnjtJSUnk7u5Ov/zyiyyVzuXLl6lJkya0YcMGWW72O3fupKZNm9Ivv/wii2/ZsmXUqlUrOnLkCHMXEdEnn3xC3bp1o/j4eOYujUZDffv2pXHjxlFZWRlzX15eHrVr145CQ0PF91j+hlevXqW+ffuKkxGyvtZXrVpF69atY+rQEhcXR9OmTaPExERmDo1GI9YhM2fOpFmzZslyzUVFRVGbNm1o/fr1zF0FBQUUFBRETZo0oZMnT0pbOGSmsLAQRITCwkIAQHR0tPi3mzdv4q233gIRQaFQ4P3330deXp7k26DRaLBp0yYAwMWLF/HKK6+AiPDGG2+gqKhIcp+Wo0ePIiwsDL/88guICH5+figpKWHmA4ATJ07g5s2bCAgIgImJCdP9e5w9e/aAiLBjxw6cPn0agiAw9cXFxcHQ0BA+Pj548OABFixYwNzn4OAAlUqF3bt3IzExEevWrWPmi4iIQOPGjUFEeO+991BUVITo6GicP3+eie/06dOir3Pnzrh58yaAmnO4rKxMct/evXvh6OgIIkKHDh1w7do1AEBycjLu3Lnzl997sj7Rl9WrV8PCwgJEhAEDBuDu3bsAgMjISGRnZ7/4jjwDjUaD6dOnQ6lUwtDQEEFBQSgvLwcAhIaGSuoCao5J3759QUTw9vZGbGwsAODnn3+W3AUAd+7cQaNGjWBgYIDt27fjwYMHWLlyJRMXAGzZsgVEhIkTJ+LUqVPYt28fMxcAeHp6onnz5igsLBTPS6lJSkrCoUOHMGfOHBARLl++zMQDAMHBwbh06RJ+/PFHEBG6d++OyspKyT3JyckIDw+HRqPBd999B0NDQxgZGWHVqlWSetLS0sQ4obi4GIsXL4aNjQ2ICC1atMDp06f1KkffuqROg6bNmzejW7duuHfvHkaOHAmFQgEiwltvvYW4uDhm27B48WK4u7sjKCgISqUSZmZmWL9+PfMbe48ePeDt7Q2VSgVXV1c8fPiQqQ8ANm7cCAcHByiVSvTp0wcRERF49OgRU+fq1asRFBQEIkLTpk3h5ubG1KdlwYIFICI0btwYzZo1Y+67ffs2nJycoFQq0atXL9jb26OgoICZLy8vD0OGDAERwd3dHdOnT0ejRo0kv8lrKS4uxrRp03Ru9qNHj8Zbb70FjUYjua+goACfffYZVCoVFAoFxowZg71796JJkyZITU195ndeNGgCgIyMDIwaNQpEBCMjI8yZMwerV69GmzZtXqi8v+PatWvw9fUFEaFZs2Y4ceIEjIyMcOTIEcldGo0Gy5cvh0qlgomJCZYvXw6FQoGwsDDJXQCQmJgIV1dXKBQK9OnTBzY2NsjJyWHiEgQBPXv2BBHByckJH3/8MRNPYmIi5s6dC39/fxgYGMDd3R2//fYbE1dUVBQMDQ1hZ2eHhg0bIiYmBsnJyZJ7BEHAq6++itatW0OhUMDb2xv5+fmSe8rLy+Hv74+PP/4YPXr0EAP4qKgoST3379/HK6+8gtjYWKxYsQIODg4gInh4eOC3336DWq3Wu6yXPmj6/vvvQUQwNzeHSqUCEaFfv36IiIhg6j927JgYnBER/P39/2tLVioiIiJEJxFh69atqK6uZu7Vtia0r86dOz/XifQinD9/XsfZrVs3pj4ACA8Px8iRI3W82uwBS5KSksQLlYgwc+ZMpj5BELB27VoYGxuLzt69ezMJYrRERESIN3vta8aMGcx88fHx6NWrl5hxJiJ4eXk98yZcm6BJy8WLF9GmTRsdX7du3Zhk1Kqrq7F8+XKYmZmJx9LCwgI3btyQ3AUAV69ehbu7u+iqV68eUlJSmLhSU1Ph5OQkuiZNmiS5QxAE/PTTTwgICBA9DRs2ZNbg7d69u855zyqze/nyZR1PgwYNmDSGTpw4IToUCgX27dvH5H4wZswYnf2ZOnWq5NdTQkKCmA3XZpYaN26MTZs2oaqq6rnLe+mDpsdfrq6uuHDhAnP3/fv3Ua9ePZ2TZvXq1S90gJ+Xd999V2efPTw8mF2Aj/PNN9+ITmtrayatl2ehbQkSEUaOHMncV1FRgffff1/nGEudBn6SgoIC9O7dW8dpaGjIPFi7cOECWrdureNduHAhU2dOTo7OzZf18RUEQXxU8XgD58nHy1IETQCgVqufukYHDRrErGGzY8cOHVfDhg2ZBDPp6eliNk376tChg+SPY4qLizFw4EAdj4GBgfhYV0oePHggBrnaV2RkpOQeADhz5oyO568ynrXl1KlTOp5jx44x8TxZX7Vs2RLXr1+X1LFx40Ydh5ubm+SPG+Pj49GwYUMdz7Jly1BRUfHCZf6jgiZtpc/y8Vh5eTn8/Px0nG3atME333yDzMxMZl6gJhuhVCrFm+rjfRpYM3/+fHF/Q0JCZHECutmmefPmyeIUBEF8REdE6Nu3L3NnRUUF1qxZo3MBDxkyhJlPEAScPXsWY8eOFVtXRASlUolTp04xcWo0GixduhTNmzfXuX4UCgUOHDjAxBkREYFWrVo9VU/06NFD59qRKmgKCwt7KigkIowaNUryLF5KSgrefvttWFtbP3UDk/rxbmJiIhYsWIBmzZoxzxRWVlZi3bp1cHZ2Zn4NlpSUYNCgQaJn8eLFTDzA/2ebDAwMmAXRhw8fFvdl+vTpTBxRUVGiw9TUFN98843kCYNr167pZMGNjY0xePBgBAcHS5bRio6ORv369Z+6Vtu1a1erR8IvfdA0aNAgLFy4EIcPH0Z6ejrz/kQff/wxiAi+vr5YunQp7t27x9T3OJMnTwYRoUuXLoiPj5fNCwCzZs2SLdvzJNps04YNG2T1/vbbbzAyMoKxsTFKS0tlcZaVlek8U9e382FtqKiowIEDBxAYGAgTExM4OjoiIyODqTM1NRUbN27E22+/DRsbG5iamuLKlSvMfDk5OQgNDcW0adPg6+sLhUKBN998U7x5SRU0aUlLS0NwcDDGjx8vBomffvopk/qpuroaFy9exPz589G+fXsolUoEBAQw6ZQrCAIiIiIwffp0McBn0QkdeLohwaLPFlCTHZwxYwaICJ06dWLiAICzZ8+CiNCkSRNmjt27d4OI0Lp1a2YN6vfeew9EhD59+iAxMVHy8nNyctCkSRMYGRlh0KBB2LFjh+R9A69fv4569erBxsYGPXr0wPTp0/Hrr78iJiam1gHgSx80seho+VdcunQJixcvRkJCgmxOLbm5uXB2dsbmzZuZ9jv5KyZNmgQ3NzdZj7eWCxcugIgQHh5eJ257e3scPnxYVm9JSQmWLVuGnj17Mu879jiFhYXYtm0blixZwrwBoqW6uhqXLl3Czz//LMsjbgDIz8/H4cOHxUcKrOuTrKws7NmzR5ZGVl5eHnbt2sU84Far1Th58iSmT5/OrLM28P8Nie7duzM9P9auXQsjIyMmI6219OjRA126dGFW/i+//AITExMmjzOBmuyms7Mzdu7cyaR+EAQBq1evxvbt25kNhtFm2ZOTk5nsg751SZ2tPdevXz9SqVQ0fPhwGj58uJybICsxMTHUoEEDcnBwqBP/+PHjafTo0fTaa6/Vib937960atUq8vLykt2dmJhIR44coSlTpsjuLikpIY1GQ9bW1rK7/5fga8+9/JSWllJVVRXZ2toycxw/fpw0Gg3169ePSfnnzp2jjRs30o4dO5iUv379etJoNPTJJ58wKf/69evk7u5ONjY2TMr/JxMSEkIhISGkVqvp6NGjf1uX8AV7/+XExcVRy5Yt68x/6dIl8vHxIXNz8zrxC4JASuVLOYcrRwJ4fcLRwvpaP3nyJPXs2ZNJ2Tdv3iRvb29SKBRMyuf8PfrWJTxo4nA4/1h4fcLhcKRA37qEN8E5HA6Hw+Fw9IAHTRwOh8PhcDh6wIMmDofD4XA4HD3gQROHw+FwOByOHvCgicPhcDgcDkcPeNDE4XA4HA6HowcvbdAkCALdunVLNp9araasrCzZfJWVlaTRaGTz/S+g0WhIzhk0ioqKZHMRET18+FBWX3JysmwujUZD9+/fl81XVlZGGRkZsvkePXok6/mSnZ0ta/0i97XA605pqKioIEEQZPNlZmbK+tvFx8dLvn8vZdCkVqvp448/Jn9/f4qKipLFGRQURD4+PnT79m1ZfGvWrCEvLy9KSEiQxbdx40Zq06aNbIHorl27qFWrVhQdHS2Lb//+/eTs7Cybb/fu3eTk5ETXr1+XxbdhwwZyc3Ojq1evyuJbsGABtWjRQrb9GzNmDLVv357u3LnD3KXRaKh///7Uo0cPys7OZu4rKCig1157jd555x2qrq5m7ouPj6dWrVrRokWLmLuIiA4cOEDOzs508eJFWXxfffUVubm5UVVVlSy+7t2708SJE2VxXbt2jby8vOjAgQOy+BYtWkStW7emBw8eMHeVlJRQQEAADRw4UJZALSwsjPz8/OjLL7+UtNyXLmiqqqqi4cOH07Zt26hXr16yLL9x8OBB+uabb8jd3Z3c3NyY+yoqKmj58uVUWVlJrq6uzH1ERFevXqXIyEiqX7++LL7KykqKi4uj9PR0WXyNGjWizMxMCg4OlsXXsmVLKi8vp2nTpsmS3erYsSMpFAp69913qaCggLmvX79+BIAGDhxIqampzH2BgYGUn59PvXr1orS0NKYuAwMDGjZsGCUkJFC/fv2YZ0msra0pICCAjh07Rp988gnz88Xd3Z0aN25MCxYsoNOnTzN1ERG1atWKKisradq0abLcDC0sLCg1NZWOHz/O3EVElJSUJFvjPTIyku7cuUPGxsbMXYWFhbRmzRoCQA0bNmTqAkDjxo2j+Ph46tWrF/NVGvbs2UODBw8mS0tLeuedd6QtXPJV7/6G/7YoXllZGfr37w8iwogRI2RZBPTu3buwtrZG/fr1kZ6eztwHAD///DOICKtWrZLFBwD+/v5wcnKSzXf8+HEQETZu3CiLTxAEuLu7w9nZWbaFkadMmQIiwq5du2Txbd68GUSEIUOGyLIo7/79+6FQKNCiRQtmi3A+TnBwMBQKBby8vJCdna3Xd2qzYO+SJUtAROjWrRvKysqe+/vPQ3V1NQYMGAAiwtKlS5m6ACAxMRFWVlZo0KABMjMzmftmz54NIsK2bduYu9LS0qBQKDB8+HDmLgBo164dXFxcZHFNnDgRRISMjAzmrsWLF4OIsH37duauNWvWgIjw1ltvMa+7tm7dCqVSCScnJ9y6dUvv7+lbl7w0QVNRURG6d+8OIsLYsWNlWSG+tLQUrVu3hlKpxKlTp5j7AKCqqgouLi5wcHBgXlFrqa6uhomJCQYMGCCLDwBiYmJARFi4cKFszqCgIBARzp07J4svNzcXtra2cHFxkeW3FAQB77//PogIP/74I3MfAKxcuRJEhICAAFRWVjL3aRsUfn5+egVCtQmaBEHAzJkzQfR/7H13fFRV1/WemcxMem9AQiAhIQRCAgQkobfQEqQXsVEUBEUQC6gINqSKghVUECEIoqCIwKNUQTBIR8BApLdAElInmczc9f2R91xmQspk5p7zwPe+6/ebP5gJZ02595x99tl7LUJqair3TVpBQQFatGgBIsKaNWu4cgHA+vXrQUTo3r079/k0Ly8PgYGBqFOnDgoKCrhyAUCnTp3g6uoqhKtfv37Q6/VCNipJSUkIDAzkzlVYWAh/f3+Eh4ejrKyMK9f+/fuh1WoRFRVl131aGyxZsgREhPDwcPz777+1+r8PVNCUk5ODhx56CESEF154QcjFKUkSnnjiCWE7P4YVK1YI5/z7779BRHjttdeEcWZlZYGIMGHCBGGcp06dAhFh3LhxwjgXL14MIsI777wjhK+goACNGzeGVqvFwYMHhXBOmjQJRIRRo0YJuTfZDtiWDJAjQRNQPg+MGTMGRIRHH32Ue5by6tWrCA0NhU6nw++//86VCwAmTpwobPOybNkyYfPM559/DiLC6tWruXM9/fTTICLk5ORw5TGbzXBzc0OPHj248gDAokWLQET4/PPPufJkZWUhJCQErq6uOHHiBFeu9957D0SEJk2a4OrVq7X+/w9M0HTz5k3ExcWBiDBz5kwhkzIALF26FESEfv36CTvOMZlMaNy4Mby9vblH3JZIS0sDEWHdunXCOM1mM5ycnDBw4EBhnADQokUL+Pr6CsmKAOWZwyZNmsDNzc2uG9UeHDt2DM7OzggPDxdybGYymdCvXz9hi68kSZg6dapNGSBHgyag/PMNGjQIRITnnnuO+xx0/PhxeHp6wtfXF//88w9XLoPBgBYtWkCtVmPXrl1cuUwmE+Li4qDX63HhwgWuXLdv34ZWq0WfPn248gDAzJkzQUQ4deoUV56zZ8+CiPDSSy9x5SkpKUG9evVQr149lJSUcOMxmUzo3r07iAirVq3ixiNJEl599VUQEVq0aGHz0X5FPBBB0+XLl9G4cWMQERYsWCDsPRw8eBA6nQ7h4eHIzc0Vxvvdd9+BiDBjxgxhnMDdeoOMjAyhvPXq1UNiYqJQzvnz54OIsGnTJmGcW7ZsARHhiSeeEMbJdtqDBw8WstEoLCxEQkKCsBoISZIwevRoEBEee+yxKjc2SgRNQPlCwib4mTNnOjSWLfj111/h5OSEiIgIuyd5W3H27Fl4eHigTp06uHnzJleunTt3gogwdOhQrjwAkJqaCo1Gw/37+/TTT0FE3Es42PrAM8AA7iYMFi1axJXn9ddfBxFh4sSJ3DjMZrOcCU9KSnJoPb/vg6aOHTvCxcUFRITPPvuMO29ubi5yc3ORnZ2NsLAwODs748iRI9x5GSRJQosWLeDm5obbt28L4wWA5ORkuLm5CcuoMSQkJKBhw4ZCOUUXiTL07t0bRIT09HQA4F5DIkkSRowYASLCxx9/DADcM13Xr19HWFgYtFotdu3aBUmScPjwYW58ZWVlGDhwIIgIkyZNgiRJ99SrKRU0AeVHn6xMgNWM8ayPY4X9iYmJKC4uxsmTJ7nt/L/99lsQEZKTk2E2m7leK+w327NnDwB+98KaNWtARPjkk0+4jM+wceNGIUeBr732GogIJ0+e5MZRVlaG8PBw+Pv7o7CwUPHxWYbx559/BhHhoYceUvyaLisrw/r162EymTBq1Ci55tLez5OWlobU1FR5Dr9vg6agoCBoNBohu1agfLfw1ltvyV/M8uXLhfCWlZVh2bJl2Lx5M4gIU6dOFcLLuAEgKChIeMYHAFJSUuDi4iLsyJWhc+fOcpGoqMD49OnT0Gg0SEpKwunTp7FkyRLunPn5+YiMjIROp8OOHTvQpk0b7t/133//DS8vL3h7e+Orr75C69atuXKWlJSgW7ducgaoYcOG+PPPP+XXlQyaACA7OxvNmjWTg1FfX1+uXbVsNz548GCMHDmS67w0fvx4EBFmz56Nhx9+GH///TcXnszMTOh0OrRs2RLnzp3DwoULufAUFRXBzc0N7du3h9lsxrFjx7jwHDhwAETE7XOweTolJQV6vZ5LYXZeXh5Wr16NVatWca3B7NKlC7Zu3Qpvb2/4+fnh0qVLinN8/PHHiI+Px7Bhw+QSG4PB4PC4932mSavV4ocffhDG27p1a6jVark7TxTOnj0rdw7o9XohraQMM2bMkHezzzzzDHJzc4V0eeXm5uLMmTN46qmnQETYuXMnli5dyp2XgaWfhwwZgvbt2wvjZWni4OBgPPzww0I4jxw5Ar1eD41GAyLCgQMHuHNu374dWq0WRGSVUeCFgoICtGnTRuZLSUmRX1M6aALKM3YNGzaU+Z5//nnFxq4ISZLwyCOPyFzNmjXjFoQaDAbExcXJ8+C0adO48ADAK6+8It8LycnJ3HhYN+nQoUO5fJ4jR44gIyNDrnebNWuW4nWEq1evxsKFCxESEoJWrVqhpKRE8aLz9PR0uLq6omHDhvD09ORSlsJqstRqNVQqFf7zn/8ozpGTkwM/Pz/5fhkxYoRiXa/3fdDk4uKCMWPGCDmqYu3v7JGQkICVK1dy5wWATZs2ybweHh7o2LEj1/SrJZgODcvsxcXFCZFyMJvN8s3J+Hl3aTBMmzZNzhQQEZo3by6Ed+7cuYiPj5d5/f39uWd9rly5goEDB8LDw0Pm5Vk/AJQHFEOHDoWrq6vMyTNAlCQJixcvRlRUlNU9fOjQIQDKB01lZWWYMWMG6tWrJ3M5Ozvj+vXrioxfEd9++61cK8YeW7duVZynrKwML7/8slUwyEvT7IMPPkCrVq2s5j2l552SkhKkpKRYfZ5nn31WUQ6gvCPQy8tL5ggNDVWc49dff5XH9/LyQmBgoOLaWitXrpQ5fHx80LVr11q35NcEdrxIRNDr9UhJSVG80WHy5MlW90r79u0VqzW774OmlJQUHD16VAin5RetUqnw6quvChHOBIB58+ZZ/ciixB4B6xuFiLB+/Xph3Kz9kz3++usvIbwFBQWIjIyUecPDw4XwFhUVoWfPnlaf+cyZM9x59+7di9DQUJlTROfggQMHEBsba3VP8ewCy8/Px7Rp06yyW/379wfAJ9N08+ZNjBkzBiqVSubjdaxuNBoxZ84cODs7y1y8Ws5v3ryJ5ORkq2uUR3GzwWCQuy3Zg8cx+YkTJ6y+tyeffFJxjoKCAqvNH7vulMTp06etvqtXXnlFcY7p06db3a/fffedouObTCarjUZQUBC2bNmiKMfp06fh5OQkc0RERODrr79W7Djzvg+aRLXcl5aWyum8kJAQ7m23FcE6gIgI7777rlDu7du3y9wtWrQQWgh+8+ZNeZHTarVcW1sr4tChQzJ3YGCgMN6SkhIMGDBA/s6/+OILIby3b99GamqqzLtx40bunEajEbNnz4ZerwcRYfz48dw5MzIykJKSIn/Oo0ePcp1P0tPT5cJwV1dXrp1nZ8+elWu3iIhbfY7ZbMacOXPk41wegQZQfn0MHz5c/jy8avxYZxtReV0YDzCtKyI+khv5+flWWTkepy+W89Knn36q+Pi//PKLPH7fvn253CtMUb9hw4b46quvFK/9+r+g6X/AVHGHDBnCXZysMiQlJYHobvePSPzzzz/yhfzzzz8L5QYgT5otWrQQzs3E21xdXYXylpWV4bHHHgNRuRikKEiShEWLFkGr1WLQoEHCeDMyMtC1a1c4Ozvj1q1bQjg3b96MyMhIDB48mPt8Yjab8fXXXyMoKIhLBsASkiTh66+/hp+fHx5//HGuXPv27UP9+vXh7u6OoqIiLhwmkwljx44FEWH48OFcOCRJkgOCXr16ceE4ceKEPI/+8ssvXDhYNouX3EWTJk1ARJg1axaX8QcPHgxnZ2d89NFHXNa5rVu3IiwsDF988QW3U6L/C5r+B0OGDMFXX30lPGABym9oHx8fjBgxQni7P1CurUNEaNu27X/l8+/atQtEhLFjxwrnliRJ9jEUUcdlCbPZjPHjxyMyMlIoL1CuQdakSROhGwRJkrBixQpZ+kAESkpKMG/ePJw8eVLIfJKXl4c333xTyLyVlZWFMWPGcJeQyM7OxsMPP8y1lV6SJEyePBkhISHcOLKzsxEaGsq16aN9+/YgIm7ZxpiYGPj4+HARqzUajdBqtZgwYQKXdSArKwsJCQlca3X37NnDvezg/4ImlO90MjMzufNUhZs3b6Jnz57C1Kkrg7e3N3777bf/CrckSWjSpAmXdLAtyMrKQp06dZCfny+cW5IkvPTSS9zFBCvDnTt3/ivX/X/jOhe9CRMJEd+nJEncZTkkScKMGTNw8eJFbhx79uxBq1atuI2/atUqroFfjx49uFlrnTlzBoMHD+a2ebx06ZIiLf//bdg6l6gAgAQiPz+fvLy8KC8vjzw9PUVSC8fNmzfJzc2N3N3d/2vv4bnnnqPFixeTSqX6r/AvXryYEhMTqXXr1v8V/u3bt1OzZs0oKChIODcAKi0tJWdnZ+7xBpoAACAASURBVOHc/1vwv2k+edBRUlLC9V5Ys2YNjRgxgsvYJSUl9Nxzz9GyZcu4jD9t2jR6/fXXuawVV65coYCAANLr9YqP/f8TbJ1L1ALfU61QVFREK1euJFEx3Z07d+i3335TdMygoKAqb4KbN2/S6dOnFeWrDO+88w6pVCq6ffs2Xb58mSRJ4s5JRGQwGOj8+fM0dOhQio2N5c4nSRIdPnyYTCaT1fPdunWjwMBAxfnMZjNt37692utTpVIptkgYjUb6+eefFRnLFhQUFNBPP/0kjO/GjRu0bds2YXwZGRl04MABYXzp6el09uxZYXzbt2+nvLw8IVySJNV4LxCRYvdCSUkJHT169J7nhw8frsj4FXHjxg3Kycmhd955h8v4RETTp08nd3d3MhgMdPbsWSorK1Ns7JCQkCoDpitXrtC5c+cU46oJBw4coMuXLwvjW7t2LeXk5Cg7KPecVwXYkgKztIgQ5SHGZAl27twphO/tt98GEQlxOgeAhQsXgoiwb98+IXzvv/8+iMhKvZknmMTB/v37hfDNmDFD6PfJOnj++OMPIXwDBw6ERqOR9ZB4QpIktG7dGm5ubjh37lyt/q89x3MGgwHBwcEICQkRUvt16dIlODk5ycrVvPGf//wHRHzFKy3B9OBElQH07t0brq6uwo6DXVxckJqaKoTr999/BxHhgw8+EML3wgsvgIi4qcNbori4GA0aNEBISIgQyZ8tW7ZApVJhwIABNv39A13TxBbcIUOGCClgPnXqFJycnNCuXTshfJIkISoqCsHBwcKKlCdMmMC1kLEiVqxYASJSXKujKuzbt49bS3BlYJ2Jw4YNE8LHlOVFFfWfOHECWq0W8fHxQia4PXv2QKVSITExsVatxPbWNLHrU5RH4fPPPw8iwkcffcSdy2w2o1WrVtDr9Th//jx3vgsXLkCtVqNfv37cuYC7GySevoCWqFevHtq1ayeEa/ny5cK6ncvKyhAcHIzo6GghcwpLFCxevJg7V2ZmJnx8fODr62vzPfDABk07duyARqNBTEwMCgoKuL8fSZKQnJwMlUolTIAxPT0dRIQXXnhBCB9Qbtrr4eEhrIvup59+AhF/x24Go9EIDw8PdOrUSQgfUL7j1Wg0uHz5shC+KVOmgIjw7bffCuGbNWsWiPj5VFUEs96oDZ+9QZMkSRg0aBCICGlpabV9q7VGYWEhGjZsCHd3d9nUlCdY56qooHDgwIFQqVRCGhAOHjwIIsKMGTO4cwFAbGwsoqOjhXAxL0IRwrjbtm0Tdn9fvnwZrq6uiImJ4b4JKywsRPPmzaFWq2tl5fJABk2XLl1CQEAAPD09uSoMW4It7mPGjBHCB9z1KOPpEF8R4eHhiI+PF8a3d+9eYbsKhtTUVOh0Oi7u3ZVhy5YtICK89tprQvhycnLg6+uLsLAwId0qpaWliI2NhU6nw6lTp7jzlZSUIC4uDk5OTjh48KBN/8eR7rlbt24hODgY3t7eXIxFK+K3334DEaFnz55CNi/9+/cXdmTNgjQRG0GTyQQfHx9hJuSdO3cWJpI7fPhwqFQqIWLATE9OaTuVysD8FX/99VeuPJZejnPmzKnV/33ggiaDwYDWrVuDiPDTTz8JeS8lJSWIiIiAp6en4l4/VcFoNCIgIABNmzYVlvUxGo3QaDTcFHMrA7MG4CXWVhk++OADEPHx7qoMZrMZjRs3hr+/v7CWW/YZ586dK4QvPT0darUaiYmJQo6ST548Cb1ej8aNG9skuuio5AALfLt27Sqk3oiJPa5YsYI7V0ZGBpycnJCYmMh9rpEkCXFxcfDy8hJyQsBq7kRITQwcOBBOTk5C5uuEhASEhYVx5yksLISbm5sQQ3O2geZhQVMRTNR40KBBtf69HrigiU0mb7zxhrD3MmfOHBARFixYIIxz8+bNICJumhyVgblPiyoMBco1qojKncFFgQkdvvjii8I4P/roIxARvvrqKyF8paWliIyMhKenp7D6tJdeeklocSqb+GwxH1ZCp4kV2b///vt2j2Er7ty5g7p168LHx4ebCbAlWC3VunXruHN9+eWXICIhIqeffPKJsA02W5t4B2iSJMHLywvdunXjygOU604R8TdSN5lMaNmyJXQ6Xa2bPGqLXbt2QaPRoEmTJnZp8933QVPv3r2RmpqKtLQ0fP7557JnjSjl7GvXrsHd3R2NGzcWKsrHugJ5Cr1VBNtNi/JCA8qzW0SEkSNHCuOUJAnBwcFCbVvy8/Ph6emJ+Ph4YZnDDRs2gIjwzDPPCOErLi5Go0aN4OrqKqRmxWw2yz5sNTUSKBE0FRUVoXHjxtDr9Thx4oTd49gKVhIgwu4mOzsbPj4+aNiwIfdsaHFxMfz8/BAdHc19Hs/IyJDtqXiD1drxLqq/ffs2iAjjxo3jygMAvXr1gk6n4949+sUXX4CIMH36dK48ly9fRmBgIDw9PWtdD5aWlobU1FT07t37/g6a2Bvbv38/tFotIiIikJubK+x9PPHEE1y9hCpDfn4+XFxc0LlzZ2GcALBkyRKhcgoMnp6e3PygqsKjjz4KIhLmgwbclavYs2ePED5JktCpUydoNBohrcIAsHv3bhARunXrJiQ4vHz5Mry9vVGnTp1qDUyVUgQ/ePAgnJycEBcXJ6SehPkyrl+/njsXy9zNmzePO9f06dNBRNi2bRtXHkmSUL9+fcTExHDlAYC5c+eCiLg3Cv35559CfqcbN25ArVbb3IpvL+7cuYPAwEDUrVuX65FtSUkJ2rRpAyLCjz/+aPc4932mKS8vDzdu3EC9evXg6uoqZIfHcODAATmzJRKszVlkxge4m6IX1eXF0KBBA7Rp00YoJ2vZXbt2rTDOs2fPQqVSCa0ZO3ToEFQqFfr06SOM85lnngERYdmyZUL41qxZU2N9gpI2Kqwl+uWXX3Z4rJqQlZUFf39/BAUFITs7mytXaWkpGjVqBE9PT2RlZXHlunTpEjQajZC5ddSoUSAiXLt2jSsPy5bUphPLHqxevRpEhB9++IErDwuiv//+e648TAPqm2++4crz1FNPKdJNed8HTbdv30bHjh2FtlAD5an/Nm3aQKvVCuvQY+jevTv0er3QjBoApKSkwNnZWbhpcMuWLRERESGU89KlSyAiPPXUU0J5U1JSoNFohB67Pv7440Imc4a8vDyEhobC09MTV65cEcLJOmGqKpxWMmgqKytDYmIiVCoVdu3a5fB4NSEtLQ1EhMcff5w71w8//GBznZijGDJkCIgIGRkZXHlYkMF7UWbf3Zo1a7jyvPnmmyAiHD9+nCtPq1at4O3tzTWjevr0aTg5OaFt27Zc152lS5fK5T6ONqrc90HT+PHjQUSYOnWqUP6vv/5aeLEwAFy9ehUqlQpDhgwRygsA0dHRaNq0qXDeHj16wMfHRzhv48aNER4eLpRTtAozUH6E5eLigtjYWGEiqaw+LjU1VcgxXW5uLkJCQuDh4VFpTYnShr3nzp2Dm5sb6tevz8Vx3hKSJCE1NVVImYAkSejQoQM0Gg13+Qimav38889z5blx4waICE888QRXHianwLvAnUkA8JRMOXXqFIgITz/9NDcOAHJ9UHp6OjeOAwcOQKfTITw8XJHarPs+aCIidOnSpVbqv44iPz8fwcHBCAoKEu6KPn/+fIfPXO2ByWSCTqcTptZriWHDhkGlUglb0BlYN5SIomUGSZLQpEkT+Pr6ori4WBjvG2+8IfzIl2W4eO+8GbZv3w4iQocOHe65lpQOmgBg2bJlwjJAV65cgaenJ0JDQ+3q+KkNmChkSkoKVx5JktCiRQt4eHhw/0yxsbGoV68e1wD+xIkTIOLvNpCYmIg6depw5Xj11Ve511/+/PPPICKMGjWKG4dlac+xY8cUGfO+D5rq1avH/XydgU20rAtCVHu4JeLi4uDn5ye0Uw8otzgQJTpXEawGprpCXh5g6fSlS5cK5WVt0CIDmIKCAgQHByM4OFheoHhngLKzsxEUFAR/f39kZWXBYDDYpKnkCFh9BBOsY1knHkGTJEno168fiAjfffedFR8PsCBtwoQJAMC1o4k1SjCfOF7XCqstXLJkCZfxGVgTBk8F7atXr4KIMHnyZG4cABAYGIgOHTpwG99sNiMsLAxhYWGKH5lJkgSTySRLonh4eHCR1Ni6dSuMRiM6deqk+Mbtvg+aRHZyTZw4Ef/88w90Oh0SEhKE1vZkZ2fj+PHjVpOiSLBd+ieffCKcm1kC8K5tqIicnByo1WrZF06UFEBBQQG8vLzQvHlzSJIkTPGd6eO8/vrrWL9+PdeUOMP69etBVG7T8e6773LPoBoMBjRr1gxarRbff/89kpKSAPAJmoBynbHAwED4+voiLS2Nq8egJEno2rWrXJ/WqVMnbtfspUuX4OzsjLi4OFy9ehWLFi3iwmMwGODv74+oqCiYzWZu9wLLajBPPx7fm8Fg4J55ZNcxj+yM0WhEXl4e9uzZAyI+DgYZGRlYuHChfKLCowPwzJkz8PHxwbhx47gkAu77oEnU8VheXh7UajWCgoJAJM4lHihvhWzZsqVcvyWS22w2Y8+ePbIGlqhiYaB84pIkSTZe3r9/vxC/LUu0adMG/v7++PPPP/Hll18K42UZkTFjxgg7EjWZTIiLi4OLiwv8/PyEiVAOHDgQRAStVsu9RgIAjh49Cp1OJx/v//vvv1znk02bNslcbm5uXI9dMzMz4erqCq1WCyLC0aNHuXGxzUxoaCi6dOnCjee1114DEWH06NFITk7mwpGfnw8nJyf0798fy5cvx59//qno+CwIc3V1Rd++fWEwGBR3j9i9ezcOHToEIsK7776r6NhA+VFWx44d5Swjj5q2L7/8Es7OzvDw8EBkZCSXE5WpU6fK92Pbtm0VL+2574MmUUcYW7dulb9onU6Hrl27Kn5jVYVbt25ZcU+ePJm7foklwsLCEBERAaJyZe7Zs2cL4WVmqMz7qkOHDsIK4HNycjBx4kS0a9dOXtBFKD0DwIIFC+RjHSISIrJpMBgwduxY+XcmIq5ZEaA8IH/hhRdQp04dmZN3Xcnx48cRExMDlUolc86fP59b0PTbb78hLCxM5uLZCp6ZmYmkpCQ4OzvLXDwWT6BcwT4xMdEqGORRV/rhhx9iwIABMg8Pw9v09HRMnToVdevWhZOTE4iU11Jat24dxo4dCy8vL4SEhCA8PFzxoGPQoEGIjIwEEWH48OEYN26coqchTAiUiODh4YHnn38ee/fuVWx8AHjyySdljpCQEIwcOVJRbaaSkhL4+/tb3Y+DBg1SVLD1vg+aRGWaWOEbEUGlUgk9psrMzLT6kdu0aSO0pql79+5W/CKObRjeffddK+758+cL4542bZoV96effiqE99KlSwgODpZ5/fz8hPCeOXMG9erVk3nr16/PnbOwsFDONLHHkSNHuHIeOHDA6nM+9NBD3DNNnp6eMt8jjzyiOAfDH3/8gcDAQJmLlxmtwWBA3759uf9u169fR2hoqMzh6uqqeFBtNpvlzRF7nDx5UlGOwsJCuLu7y+N7e3srXt5huUYRKd+l99dff1mN3717d8U/Q3h4uDx+3bp1FRfd/fbbb+XxNRoNZs6cCaPRqCjHAx80/fvvvxg+fLjD/lodOnSQv+hVq1ZV+XdnzpzB5MmTFfXzOnr0qPxDe3l5WblJHzlyBHPmzOFqFPzss8/K/AkJCVi8eDF3ITiGbdu2WWUFlN7ZVMSxY8cwa9Ys5Ofno6ioyCpLsHz5csX5jh49iilTptxz4/75559WGQOlCqTT09Px7LPPVrnwZGZmWn3mq1evOsS3fft2TJkypdq/MZvNVgHqO++8YxeXJElYt26dTebO7KjBcpGsbdBkMpnw0Ucf2RRMZ2RkICYmRt6l27OzLSoqwsyZM2u0hDl//jyaNWsmb/DsVbW/ceMGJk+ejLNnz1b6emlpKQYNGqTYIn3ixAlMnjz5nu/myJEjcHNzk3mUagjZunUrFi5cCKA8A6nRaGQOHh2zSUlJ8vg8HA6YDA4RwdfXF7Nnz1ZUq2nnzp3y+IGBgVYF2nv37sX777/vkMAqK5QnIoSHh1utcxXx2Wef4csvv6x1RzWr+WvUqBEOHDhg0/+RJAnjxo2zuTTlgQ6aysrKkJSUBJVKhR07dtjNVVJSAr1eD71eX6Ox49ChQxXPxrDCO6K7XTgMU6ZM4b47Z/YpRCTbxhw6dIgbnyU+/PBDmVur1XL3vWJ87PiT+XsR8RFPZWbPGzduvOc1y12RUl09L7/8co1HRBcvXkSjRo1A5Lg9B7teNm/eXOPfLl++HFqt1u7siCRJ6NKlC1QqFfbv31/j3xuNRrlravbs2bUOmgwGAyIjI+Hm5maTGGlBQQEGDx4MIvskQ65du2ZzrUdeXp6scWOvaOO+fftAVH3hcllZmSwc+uijj9rFw8Duvco6mTZs2CBvnpSa6wYPHgyNRiMf/7z44ouKbRYqg4uLizz+m2++qfj4zD6F/WZEhM8++0yx8X/88Uc5EP/111+tXmP3uSPdoWy+a9q0abWb8uzsbHh5eSEqKqpWR8LMcH7cuHG10rBi9by26ng90EETU0Z11M7g999/h7u7e42B1+HDh0FEinvxsM6OisaqkiQhLCwM4eHhXOtAfv31VxARmjVrJkvN87ZsYLDcPYmwUmG/oaWUPqsvqiywcRTXr1+HRqNBampqpa/PnDkTRMoV4N+6dQtubm5o3rx5tan1q1evIjo62mHRWGZobWtR5+7duxEQEGB3doR1tzZv3tzmtPuqVavQuXNnu47nWFdpSkqKTfegJEmYO3cunnzyyVrxMMybNw9EtnUVlZWVYdKkSRg+fLhdXACQnJwMtVpdreuByWTC6NGjHVbtv337NnQ6Hbp3717p62yDoVSHJQvSWABQUFAgHwXykGsICQmRs8c8Gmru3LkDIoKLi4vcPLN161bFxv/mm29ARHj11VetnjcajfDx8UGrVq0cGn/ixIlo06ZNjZlElpWurcXV+++/j02bNtXq/5w+fRouLi4IDw+3eW54YIOmP/74AxqNBi1btnS4/mfp0qU2FX337dsXKpVK8fPwtLQ0NG/e/J4sCxOZe+mllxTlqwhmKfL1118jOTkZHh4ewtrvWabHzc2NuzIwUL4AeHh4WJkhX7hwAa6urtyK7/v16weNRlPp7kqSJAwbNkzRzj026dSURbp58ybGjx/vMF9tFnqgfEfoSJMF2yzNnTvX5v/Dsir21DSxXX1tsnIHDx606x4qLS1FVFQU3N3dbT4iT0tLs7v2ZP/+/TZlkcxmMyZMmOBwWcKwYcOqzFhIkoQnnnhClgVwFKzT7I033pCfY9psPDocmzdvjoCAAKhUKm61uEFBQXj22WfljkMldac+/vhjtGvX7p7szrZt2+RsrSOYMmVKjSKm169fh6urK+Li4mp9Tdc2DigtLUXLli2h0Whq1bH+QAZNeXl5aNiwIVxcXHD69GmHuWz5svfu3atIiroyrFq1qtKLny1+tp7N2guz2YzGjRvLE3ZsbCxXPkuwo8mOHTsKM8/t2bMnnJ2drX73OXPmYPfu3Vz4WNr7vffeq/T14uJim463bMXt27fh7u6OZs2a1TjxKNG5Ys9C7whKSkoQHR0NFxeXausiLOFIIfitW7fg5+eHOnXqcLdMAYBffvmlxmMzJdGrVy+o1eoaF2BJkhy27mA2QpaBjCVKSkpqnS2oCmyDZCmXIEkSUlJSuGjwdezYEQEBAYiPj1d8bIauXbvi33//xciRIxUP/pYuXYpLly7d8/zTTz8NInLYg9WWdfa5554DEeHnn392iMsWMBHrWbNm1er/PZBBEztfVfI8tzpIkoROnTrByckJ586dU3z8yi4mSZIQGRmJkJAQISKb27dvh9lshl6vr/IoiQeY9cD48eMrvWF54J133gGRtR6W0WjkokzLxg4KCkJkZKSwDB7rtBEViIpe6Hfv3i0X3NrynTraPceUq0UY2QLlxs4Vr1FeYLUyPLv+GMxmM+rXr4/Q0FAhtkk9e/aEi4uL1RzLa555+OGHodfruRzzM2zfvh0A0K5dOwQHBys6dmXrkMlkQmBgIJo1a6YoV2W4cOGCXPPIe57csWMHVCoVEhMTay2lcd8HTb1790ZqairS0tIA3C0m69evn7AFiO2Oxo0bJ4QPuBtMTJo0SRjntWvXhHNevnwZRFRjB5aSYAtubY53HAUr0Obp5WSJ7OxseHh4ICYmRpinn8iFHgDGjBljcwG/o0GTJEno3LkzVCoV98wvUH6EqdPp0KpVKyGbpj59+kClUnE36QXu1vGJ0KJjGyRbGgccBdvM87YKAoB69epxk5uwBJsrbelYdRSjR48GEX8XkOzsbNSrVw8eHh616qJMS0tDamqq3IBx3wZNlm/s4sWL8Pb2RnBwsDA/OkmSkJCQAL1ejytXrgjhBIBZs2aBiLgdGVUGVvchSuQRKNc3ISpXAxYFg8EAnU7H3ZDUEmfOnKlVh4YSYIrOogxzRS/02dnZCAgIQFBQUI2FvUroNJ05c6bWReiOgB3PixD4TU9PBxE5VFRuKy5cuACVSoWhQ4dy52KLPg+7jopgnZq8j6hLSkqgUqkwYsQIrjwAMGnSJBCRotIGleHMmTNQq9Xo0aMHVx5JkuQO15UrV9o1xn2faWJvzGQyyeZ7SnYM1IQNGzaASLyRbWxsLAIDA4VlCQBg9erVNbarKw1JkuDk5KR4R2JNaNeuHXx8fIT6C7Zv3x6urq7CBFtzcnLg6emJ6OhoYdcRqxMQpeS/atUqm7LASolbsiJ0EYtwfn4+6tSpg4CAAOTm5nLnS0lJ4dLoUhl69OgBnU7H3aS7uLgYWq1WiFUR2+gqLdhYEay1fvr06Vx5zGYzQkJChJQVsAYB3i4c7Jh9+PDhdn+mByZoeu+990DE30HaEiaTCU2bNoW7u7uwzBZwV85e5HEgcFedW5SBLENAQABXb6vKwHbxJ06cEMbJbtjPP/9cGOcbb7wBIsLq1auF8Ile6CVJQo8ePUBUvTCqUkGTPUXojoC1gYs4vmbdZiIyQKzMQoT/YVJSEnx9fblvkJjEwb59+7jyMIkY3vPIgQMHQESYNm0aV54jR46AiNC/f3+uPGfPnoW7uzvq16/v0Nz0QARNBw8ehJOTE2JjY7mLH1qCTVhVdXrwAgsQRZrnApA1mnhomFSHyMhIrh0nlWHz5s0gIqF2OYWFhfDw8BCiR8WQm5sLLy8vNG7cWFi2SeRCDwDnzp2Ds7MzmjZtWmWHjpI2KrUtQncEkiQhMTERTk5O3DMYQHkxs0ql4r6ZKCkpga+vL2JjY7l/hyz7yTuDxjTneHd+LVu2TEhN2EsvvQQiwsGDB7nyMCkfntec0WjEQw89BJVK5XDJy30fNF27dg2RkZHQ6/VCswJGoxHh4eHw8fER0mZsiYSEBPj4+Aipm7BEjx494OnpKazAnqFNmzZo0KCBUM7c3FxhdQGWYIGpyGuZHRvYqxxdW4he6IG7WdKqDGyV9p5jRas8VOQr4q+//oJKpUL37t2535ts1z948GCuPMDdehneXpdMPJi3tyTTnKvOhksJMI0mRyUAqoMkSQgPD0dYWBjXa47V0Y4cOZIbBwDMmDEDRPcKd9qD+z5oYh0JixcvFsr/2WefCe+wAsqLJInIbkVhRxAZGYm4uDjhvMnJyfDy8hLO27x5c4SEhAgNElnKW+Qx8507d+Dt7Y3IyEguTvWVQeRCD5S3Szdt2hTOzs6VeqkpHTRZFqGLOIZkwfaGDRu4cw0YMABEhGPHjnHlOXbsmJAyBLZB4i2pwDTnlixZwpWH2dqUlJRw42DBM89ssaWUT1X+h0rg999/h1qtRkJCgiKJiPs+aBKVBrdEcXEx6tati+DgYCHto5Zg8vg1eeApDbPZDJ1Oh4cfflgoL1BeBKhSqYQWZQPlsv5Ejvkp1RaSJKFp06bw8/PjOulVxFtvvQWictV3URC50AN3BWgrC9SUDpqAu8eQImoPs7Ky4OXlhQYNGnBRs7YEC2YGDhzIlQcoz6p7enpyn2ebN2+O0NBQrhxMJubtt9/mypOUlIS6dety5WCdt7///js3Dibl8/TTT3PjuHPnDsLCwuDq6oqMjAxFxrzvgyZfX19uooNVYeHChSAixeT8a4N27drB3d1daO0WAFy5cgVEJMTKpCLGjx//X6mlYsWooo6tGNj1VdGcmSfy8vLg4+ODRo0aCcs2iVzoGcaNG1fpEQmPoMmyCJ138S9wt9CY96IMAIMGDQIRX6NwAPjkk08cav+2FRMmTAAR2WS8bC/YHMq707pu3bpISkriytGkSRMEBwdz28hKkoTWrVtDr9fj8uXLXDgA4NFHH1W8m/e+D5pE1AxU5PXz80ODBg0c9rSrLa5duwaVSiVEK6Ui2C590aJFwrlZJ5uIbiRLXL16lftOpzJkZWVBq9WiV69eQnmZ0N/y5cuFcX7wwQdWCz3vjHFubi6CgoIQEBCA7OxsSJKE0tJSLkETcG8RemlpKbfPaDQaERMTAxcXF1nVmhfX8ePHhXQ05ebmwtnZGZ06deLKs2bNGu71RiI050pKSkDEV7391KlTILrXQF5J8JTyYesIk9AZOHCgovfJfR80idK0OXToEC5duiTrsIhcWNgP+vHHHwvPQDAwvRtRRymWmDt3LogIhw4dEs4dHh6OJk2aCOcdNGgQVCoVLl26JCwLk5eXB19fX4SHh8NoNGLHjh3cOSsu9DNmzODOyTKIY8aMwbfffosff/yR63zCitBnz56Nd999l2uXFms3HzZsGP7++2/ZKYEHhgwZIkuQ7Ny5k1vWgWUDzp49C4PBwCUQZFkgnkepkiRBq9Vy1ZxjcjRKFDRXBPve3377bRARfvvtN8U5fvrpJ+5SPn379sV3330HT09P1K1bV3EtMGFB0w8//ICePXvC398fKpWqh182JgAAIABJREFUxiLD2kxySkyE77//PpKSkmQxwKqOMCRJUryrbevWrdixYwe6du0KFxcXh00xawODwQCj0ShnIXin4yvD559/DiKS/e9EgjUaZGVlcQsiKlsEmFfbjBkz0Lt3b0Xrm6q7PmfPng0iwpAhQxTzk6rpKJkt9BEREdBoNDU6ndeEmupfJEmSrQ58fHwwceJEu4MmSZJqDGoti9BdXFwcUtQ3mUw1zi8DBw6Uv89Ro0bZzQWUXytVBSknT56ESqVCp06dEBAQoIjvZmVcO3fuBBHh5ZdfRv/+/bl1Kzds2BAxMTEoKiriZoVjqTmn9FxWUFAg1wEtXbpU0bEBYP369UhPT0d8fDz8/Py4HOO3adNGvjer20DZu8bm5OTAyclJroe2NfCrzbxg61yiJgdRVFRE7du3p7lz55JKpbL5/xUWFlb7+saNGykiIoL27dvn0Ps7fPgw/fHHH5Sfn09+fn40e/ZsMhqN9/zdjz/+SDExMXT48GGH+Cxx584d6tu3L+3evZtiY2Np06ZNdPXqVSIiWr9+PSUlJdHx48cV47NEWVkZJSYm0s6dO4mI6Pvvv6cWLVrQ33//zYXPEgDoySefpLlz5xIR0ZYtW2js2LFcOb/77jtq0aIFXbp0idasWUMhISFERJScnEyffvqp4nzffPMNRURE0O3bt+XnDh48SDdv3iQXFxd6++23acuWLZSdna0I30cffUSNGjWivLy8e17btGkT3bhxg4jKv4czZ85Ueo3XBm+88QbFxcWRwWCo9PVDhw7RihUryMXFhTIzM8lsNtP+/fvt4gJAo0aNom7dupHZbK70byRJolmzZtHly5eJiCg3N5e2bdtmF5/BYKCePXvS6NGjq/yb0tJSmjJlChkMBiopKSGDwWA339WrV6lNmzY0b968Sl8HQAsWLKBbt24REVFmZibt2bPHLi6i8uswJiaGtmzZcs9r586dozVr1lBwcDDt3r2bbt26RSdOnLCbi4ho7dq1FBERQdeuXZOfO3LkCF28eJE8PT1p3rx5tHHjRqt7xRHMnDmTunTpQrdu3aL169dTTEwMnTp1ipKSkig9PV0RDoZ9+/ZRq1atqKysjK5fv04vv/wy7dixQ1GOAQMG0Ndff01ERFeuXKGoqCjauHGjYuNnZWVR165d6ejRoxQfH0/r1q2T56Vly5ZR586d6dy5c3aPbzKZ6Pjx4/L1dv36dVq/fn2lf/voo4/SgAEDaj0/bdiwgUwmk/zviRMn1jjf3Llzh+Lj42natGm14qoRNodhNYD5DimRabp48SJ8fHwQEBDgsN9P06ZN5ejUxcWlUtPAsrIyREdHw8PDQ9G04sqVK2Vu+p/uH7ZLGTRoENRqNW7evKkYX0XUr1/fip84a4BYghXSsgdvF3nL2gZmHMoeY8eOVZxv3bp1ICIsWLBAfu7OnTuIjIy04lbK24ldS5UJsubm5qJFixZWvI62lS9evLhKPqA8s8DS/ezx2muv2c3HjI+ry+bcunULSUlJVpxHjx61K9PECqJ//PHHKv/m3LlzVr+ns7OzXY0cRqMRzZo1g7Ozc5X1fTdu3EBcXJzVZ7PXE/P69etwcXFBXFzcPVkRSZLwwgsvWPG8+eabdvEwbNq06Z5C9sLCQqu5l0g5K41nnnkGRIQLFy6gS5cuVhxKd5HeunXrnjk0OztbUQ52LVo+lGxiYfWH7DFkyBA5M8hOQQoKCuwen3UXskeLFi0qbf5hPoj2HHMmJyfL4/v5+dUoEG3pRbds2TKbOITXNCkVNBmNRnlidNSLrri4GBqNBkQEvV5f5RfNjpHeeecdh/gq4ssvv5R/aG9vb7mboKCgAM7OzujWrZuifBXB0qVE5d2KRHw1QCwxf/58qxuJZ40GUF5szwKkoqIihISEyNxTp05VnK+0tBSBgYGIioqyOpo4ceIEXF1dZW6ljgZNJhNiYmKqrBfIyspCdHS0zOtoYWxZWRni4+Oh0+mqbeldsmSJzNm+fXu7+YqLixEZGQkXF5dqj4uKi4utFhkm5VHboOn69evw8fFBnTp1qtVjun37tlWgZq+aP9P66du3b5XHZrm5uWjXrp0i9wxrwqis4UaSJIwdO1bmcVTw0mQyITQ0FPXr17dSp//nn3/g4eEh82zevNkhHgZW27Zy5UocP34carVa5ti4caMiHJZwc3OTx4+JiVF8fGaJxNYpouqtg2oLy7m4Tp06ci3QjRs3oFarHf79LZMDsbGxldYaSZKEzp07Q6PR4MyZM7UaPysrS17HW7dubVOn5KeffgoiwogRI2yupXtgg6bp06eDiPDKK684/J7+/PNPEBG0Wm2VN2xhYSGCg4NRp04dxWuO2A9HZO0RxrIivD2GXnzxRZm/UaNGCAkJ4cpniW3btlkFTawriCciIyMRGRkJ4O53TER46623uPCxhaliYMS6O4gI69atU4zvhx9+AFHVwnRXrlxBw4YNFbt/9u/fDyJCcnJytRPPqlWroNFooNPpHCp+Z4FFly5dquUzm81ytiQlJcWuoAm4a49RUyayuLhY3rW++OKLteZhYHV21S3sRUVF6NWrF4gI48ePt5srJycHXl5eVQqfmkwmjBgxAkSExo0b283DwBptKs6z33//veJZoOvXr4Pobjcbkx0gokpPEhxFo0aN5PF5dOSuXbtWHj8+Ph5E5PAJiyVYQwMR4ZdffpGfZw1Kjs5RU6ZMkQPKqk5OWK2nPd8fS2qMGzfOpk3/sWPHoNfrERERwaWmqVZB0+rVq+Hu7g53d3d4eHhYRcNKBE1soU1MTFSkKPuzzz6Dk5NTtZMUO2LgEcCwI46hQ4daLQIDBgyARqPBrVu3FOe0BDOSrVevHgICAtChQweufJY4ePCgfKPyFp9jYLvna9euQZIkedf+4YcfcuHLzMwEUXnHU0U8++yzIFLWA89SA6WqIDQzMxN169ZF7969FeFkQpY1Taw//fQTnJ2dsWvXLof4mDCpLffjhx9+CG9vb7uDJkmS5AClpsJSs9mMqVOnIjY2ttY8DDdv3oS3tzfq169f7QattLQUw4YNczirwRbLqrRsjEYjUlNToVarHe70vHLlCtRqNfr163fPa8zrbOHChQ5xWCIqKgoREREAyrOBPj4+IOJjSt69e3eoVCpFAz9LnDx5EkQEtVqNLl26wNnZWdFOQ2a3VDEI79SpE1xdXR0WIO3cuTOioqKqDPRMJhNiY2Ph6upqVzCYkpKCFStW2PS3hYWFiI6OhlarxV9//VUrHi5BU2FhITIzM+WHZdRX26ApMDAQQUFBaNmyJVJTU5GcnAxPT094e3vjwoULtXlbVWLixIlYv359la9nZWXBw8Oj2q46R7BgwQKrdChQ7hav1+uRnJysOF9FsDNktgt8/PHHuXMynDt3Tp4IROlTMXmFNWvWACiXm1CpVDbfcPagR48e0Gq19+ywSktL0bZtW8WzXKxj7amnnqryb06dOoWWLVsqwnf79m34+fmhXr16NXbH7dq1y2F3+/z8fNSvXx8eHh42ieOx39zeTtuLFy/C3d0dDRs2tCnTvGTJEty4ccMuLuBu9nn69OnV/p3JZML48eMdqrEsKChAYGAgQkNDq6zFMhgM6NatW60XmMrQr18/qNXqe363srIydOrUqcbPXBs8/fTTILpb98U2qJmZmYpxMAwbNkzeACrRaVgRpaWlcHJywsCBAxETE6O4VMqrr76KiIgIq7olph1Y2YavNpAkCQkJCdXW361YsQJEhNdff73W45eVldXKz/PJJ58EEdU4D6WlpSE1NRWpqalo2bIlgoKCEBgYKP54Tq1W25VpMplM6NatG4gI33//vVJvqUZdleeeew5E/DSM3nvvPat0KHB3kldSybQqFBQUwM3NTRa4nDVrFndOhuzsbBARGjZsyN2zieHy5ctyGpdh7NixXDWq1q9fDyLCvHnzKn0/StfJSZKELl26QKPRVFtrdPjwYcXq17744guba8OUOOJmGefq6n8YlNBpYurVtqrmO5IFMJlMSEhIgFarxalTp2rkcTQLwNTGq1tECgoKFDGa3rx5s7xJq4jr169j5syZDnMwsCNwVvbAdMOU1u4B7jobBAYGchMdjYmJwZ49e+Di4oI+ffooOva0adPwxx9/WD3HahEdXW/z8/OrrTEyGAwIDQ2Fv78/d21GVlvVr18/u34nYTVNOTk5OHr0KDZv3gyVSoW1a9fi6NGjVe7GKntjTEvo2WefdfTt2Ixz585Bq9UiKSmJ241QWadMv3794OTkxOXmrgzz58+XXbpF+pOZTCYQlRcH80iZV4Xw8HBER0fL/75586Yiu+iqYDQaERwcjEaNGlWq38JDm+uPP/6QixxFwGw2IzExERqNRrFuwJrAdoyWtYCVQYmgyWw2o2PHjlCpVEJsUw4ePAiVSlVj7ZYSKCkpQWhoKAICAhzqkLIFJpMJ9evXR2hoqFVBOIOS9wITtbSskfnPf/6juNYecLfOdtKkSYqPzTB//ny5mUXpdbCydahDhw5wc3PjLsA7b948EBEWL17MlefMmTNwc3NDSEiI3WursKBpxYoVUKlUUKvVVo+q2lgrvrE9e/ZArVYjPj5eqC/b8OHDQSTGW4rhzp070Ol0Qm02jEajvNvkadJYGby8vNCjRw9hnmgAMGrUKBCRQ0cotcWrr75qU12MkkhNTQVRecu9CBw9ehRqtRrt27cXYrKdk5OD4OBg+Pn5VSvLoZQieEZGBpydnREdHS1kHmLFyzUFhUqAdfGK8LZjNaKbNm3izhUREYGoqCjuPKz7jOf8aTQa5c2QkrVfleHKlStQqVTcN13Z2dnw9vZGREQEV+syg8GAuLg4aDQah36jB8JG5fbt2wgJCYGbm5sw/SDgbpEyb/+limDpw6+++koo7/PPP291/i8KDRo0QJs2bYRyso4oJbvWasK///4LlUqFIUOGCONkjvWpqanCOCdPngwi4lojZgnWeVVd3YWSNipsV+yI3pStyMnJQWBgIIKDg7kpZTOUlZUhKioKnp6eimsMVcTVq1eh0WiQkpLClQcAxowZo3inWWVgx9P2yk3YClGWV0y3iYc8gyVY9zZvn1nWPPLuu+86NM59HzTduXNHbhcW6UYvSRK6du0KjUaD06dPC+MFyr1ztFptpcJfPNGvXz/o9XrhViYtWrRAo0aNhHJeuHABRPzFNCuiZ8+ecHJyEprhYi3jFesVeCEvLw916tSRTXNFgLX6VzXBKxk0lZWVISEhARqNRojtEAvweR77MLC2diWkKGpC//79oVarucuMsE0o70WZBe+8eViWjnf2OCkpCR4eHlwzqhcvXoRer0dCQgLXdYf9NpbC0fbivg+a3nvvPRARnnzySaH8W7Zs4aa3UR1ycnKg1WoVL/KzBbGxsYposdQWXbt2hZ+fn3DesLAwNG3aVCgn01B67733hHFmZGRAo9Ggc+fOQo7MgLv6V45oCNUGN27cgK+vb5UilEob9h4/fhxarRYtWrTgUh9jCUmS0KFDB6jVau51f2azGfHx8XBxceGemWFzbFVq8krh4sWLICI888wzXHl27NgBIsKnn37KlWf06NGKXsuV4dKlSyAiPProo9w4AODxxx8HkXLivpXh/Pnz8Pb2RmBgIK5fv+7wePd90OTk5ITo6GihJrYmkwnNmze3Wy/CETDNJJHF2ED5xOzm5ia0joph0KBB0Gg0whZ0BnbD8tbBsoTRaESdOnUQHh4uNKPHWq9//fVXIXySJKFbt25QqVSK2WLUBJZRYGKGllA6aAIg2/DMnj1bsTGrwokTJ+Dk5ISHHnqI+3XDBAZ5Z2HNZjPCwsJQr1497vWMDRo04KLSbYkjR44IuR46d+7MfZPJFPR/+uknbhzHjh2DSqVSTCuuMhiNRrRt2xYqlUqxY9P7PmjS6/XCOnEYWDpcRM1CRfTu3Rs6na5aywYeyMrKAhFhwoQJQnmBu8KIvFtNK4IVviopX2ELXnvtNSG1D5a4fPky9Ho9WrduLSw4PXPmDLRaLVq2bFlpl5TSkCRJtgSq+N3yCJpKS0vRrFkz6PV6IUf4TPyRh8O9JSRJQvv27aHVaqv0wFMKrCO6Om8/JcBU1nl6eLIj/5deeokbB1CeIU9ISODK0bZtW3h5eXG10+rdu7dNmo2OgHlVKqn9dd8HTYsWLRLCJ0kSzGYzDAYD6tevL0QvoiKys7Ph5OQktGiX4cCBAyAizJ8/Xzg3u7CVEiu1FUypW0StiCWYwOugQYOE8jJLkR9++AGAYzpCtoJ1DH788ccAwH0zcOnSJXh4eCAsLAwFBQW4cOECJEniEjQB5cKwarUaSUlJMJlMXK/hgoIChISEwNfXF7du3UJxcTG3RY1Z1TChW17XyrVr1+Dk5MS9HIFl8L/77jtuHPn5+SDiY/zNYDQaoVarMXToUG4cLPh74oknFB+bZUnZUSYPIeUjR47g6tWr8vFvu3btFM1k3vdBE++OEYbz589j0aJFctsoL0uNylBYWAiz2Sx3X4gseGdgNSjVKaPzAqtbE1FUawlJkhASEoLmzZsL5QXKd1lOTk64fv16jeKFSiErKwvu7u6IiYnBjRs3hIiJFhUVISwsDF5eXti7d68QtXmmpv3cc88hOTkZx48f5xY0AXe7fxYsWIDY2FiucxYTSR0zZgymT5/OxUONoVevXlCpVDh58qSigpMVMXDgQKhUKly4cIHbvfDvv/9y1/iTJAkajYbrZog5KPAo1M/Pz4ckSfIaqJRxsiWWLFmCjIwMJCQkQK/X22SqW1tMmjQJw4YNQ0BAAHx8fBTnuO+DJlHZnnXr1kGv18PLywvh4eFc9SIqYv/+/Rg1ahS6d+8OvV4vNMNVWFiIEydOYPbs2SDi48lUFSRJgiRJ+Oyzz0BE2L59O65evSqMHwBGjhwJlUqF48ePCw2UN27cKBdahoeHC+NlTulhYWHC6teYaKpWq4W/vz/3mhyz2YxOnTqBiOSie57zSVFRESIiImQ+njIWlj54Go0GM2bM4Mb1119/ydeKWq3mVlfKlN1HjBjBzSxckiSEhoYiNjYWv//+u+K1OiwT5+/vjy5dusBoNCreIXvgwAHZHomHB+rmzZvxwgsvoHXr1vD29uayBg4cOBDBwcEgcszUuioYjUYEBATI9+JHH32keJb0vg+aapLtLyoqUqQmhe0WiQj+/v7o06dPpe3SeXl52L9/v8N8lti5c6fMHRISgnHjxuHvv/8GANy6dcsmby17YTab4evrKzt0T5o0qVKrDx6QJAmPPPIIBg4cCCJC586dhei2nDt3DsXFxXj++edlOQtnZ2cuu1BJkpCenm5143733Xd49NFH5d+ciBTrwDKbzdi+fXulr82ZMwfNmzeXOZWweygpKam2NmvDhg2oW7eu1Wd1pFU6Jyen2k6boqIi9OnTx4qvffv2dgdNFy9exMGDB6t8/ebNm0hISLDic+RY4/jx4zh//nylr5WWlmLEiBFwd3eXuZKSkuzmAsoX4soUwPfu3YukpCTodDqZSwnJior3wo8//ojHHnsMarVa5lFKkdxsNuPs2bO4cOECJkyYgNjYWBARdDqd4oHtTz/9hNGjR8Pf3x9169ZF06ZNq71u7EGnTp3QtGlT+RqztIFSAqwtn4jQqFEjPPXUU/K1eP36dUWCwJCQEJkjKioKM2fOrHQOOnTokF0NOqyJgT10Oh1WrlxZ4//bsGGDzdfdfR80VffGysrKZMXjqhYKW2G5M/Xz86tyYh83bhxUKhUOHDjgEJ8lKv7Qjz32mPzaG2+8AY1Go/gNaImKkz4RCet46tevnxVvVQrxSoGpnu/du1f2EmOPadOmKc43d+5cEJHVMUpJSQnatm1rxa1Uhu2VV16p8n4wGAzo0aOHoryPP/54jQq7X3zxBTQajczpiJJx586d4eLiUm3xaGFhIfr37y/zqdVqnD9/vtZBk9FoRMOGDREcHFxtF+2NGzesfs+AgAC7smk3btyAq6sr2rRpU+UuPy8vT/bfJCrvLq7JILkq7N27FyqVqkovvYULF1pdK6wuzV4ws1xLn02j0Wg19xIpZ3Y7aNAguLq6wmAwyFpl7FHR69NRGAwGq/FdXV0Vl6J45pln7pmnHf1NLMFEM9nDstbzueeeg1arxdmzZ+0e//r161bj9+zZs1J7lry8PISEhCAqKqrWDSSPPPKIPH54eLhN1lhr166FSqWyWV7hgQ2aJEnC2LFjQVTeYuyoOSbbvfn7+1c5IW/fvh1EhB49eiia8rOM8Bs0aCB/Ztae3qBBA67dR4899pjMHxoaCiIS5nnHJlL24N0Sz44cXnnlFZhMJsTHx8vcjirFVobz58/DyckJXbt2tXr+6tWrcpqaSLlj0QsXLsDNzQ0RERGVTkhFRUXo0qWLzOuojcU///xjk5fTpk2b4OLiAiJyqOj3wIED0Ol0CA8Pr1Y402w2yw0GRIRly5bZlWliNURJSUnVHlcUFxfLlktEZPeminVWVnd0wTJOjOvnn3+2i8tsNqNDhw7VykKwekOi8joqR3D16lXo9XokJiZazZ83b960ykAoZVnF2uY3b96MK1euwM3NTebgYXViOX7nzp0VH5+Z5xIRfHx8QETYunWrYuOzmloiQtOmTeX5o7CwEF5eXoiPj3do3WPH9ESEXr16VSmayeRRvvzyy1qNn5+fL88xgwcPtqm2cMeOHdDpdAgJCbFZZPWBDZpYbUbfvn0drow/efKkvEOs6jiwoKAADRo0gLu7u+IdMsyJW61WY+/evfLzLJjiLYRoOTE2a9YMAQEBXPkswToc2Oe3d9dsKyRJQt26dWXNlr1798r8vMwimRhdxcVg7969cHJyAhFhy5YtivEtWrSo2sxZYWEhOnTooFhm75tvvgFRuVVLdZPqH3/8AV9fX7i7uzu0C1+6dKk88da0mfjyyy/h5OSEIUOG2BU0AXezdzXJcUiShFmzZoGI7K41KisrQ/v27eXFviqYzWZMmTIFRIQXXnjBLi4AOH36NHQ6HWJjY6v8Td58800QEVq2bGk3DwPz0qvov5ieng69Xg+iu92djuLs2bMguiuwajnP8VDTbty4sTz+q6++qvj4v/32mzw+u3+VXItYUKbT6awSByyYcrSO6vXXXwcRoXfv3lUGTOwzJicn1zpAW7lyJXQ6nc11TEePHoWnpye8vb1x8uRJm3nu+6Cpd+/eSE1NRVpamvwa64556KGHFClOXL58ebUBEwA8++yzICJ88sknDvNVBLsoK0603bt3h1ar5aotApTXFbBJ0dfXFx07duTKZwmW+SEixMfHC+FkO5nMzEwAkOuLeHn9nT17Fmq1utLCa3ZEuHz5csX4TCYTWrduDY1GU+XikJ+fj8TERMV8FZ988kkQ1SwRcurUKdSvX9/hbALT9rJFS23nzp0IDw+3O2gymUzysaYtv1NaWppDtUaXL1+Gr68v/Pz8avSBnD9/vsP3zVtvvQWi6kUZX3/9dWi1WoeLgy9evAitVotOnTrd8xqTBVByjo2OjkZISAgkSUJJSQkiIyMVPQK0RHJyslybxaPz7Nq1ayAiuLu7o1u3bnB1dVW0qYJ1zb3//vtWz7dq1QoeHh4O15r17NkTffr0qTJgskxM2NPx9swzz9h0HAeUnwDUqVMHzs7ONmcd09LSkJqaKmvB3bdBU8U39sMPP0CtViMqKkoxJec333yz2khz9+7dcsqVR+fPRx99hDZt2ljt9DIyMkBEGD58uOJ8FcG42AKudIFhdWCaIM7OzsJ84DZt2gSiu7IS165dg7u7O1cNFxaYpaenWz0vSRJGjx6NOXPmKMp39OhRaDQatG7duspszJ07dzB48GBF+AoLCxEdHQ2tVltj/d2VK1ccNgEtKSnBQw89BCLbjEsPHz5sd9AEALdv30aDBg2g1+ttqi88cOAAioqK7OIC7h5ldOzYscZM+qpVqxySOSgtLUXTpk2h1+uRkZFR6d9IkoSXX35ZEVkQVlaxZ8+ee16bOHGiovIGTBCUHX+z+lEeG9GRI0fKG0AenouSJMHb2xvPP/88wsLC0KJFC0XHf/vtt+/xZktPT7cpy1oTJEnC448/Xq2uGDPUtceGRpIkm4O6W7duoXHjxlCr1XaZHt/3mSbLN/b7779Dr9cjODi4yg4Te1Bdtoq1E7u6usqZCaXx6aef3lNgx4QId+/ezYXTEmVlZWjUqJEsOCZKUBQo/36JCNHR0Vi9erUQzuLiYri4uKB79+7yc/Pnz1e0PqAiTp8+DZVKhX79+t3zmsFg4GLyOX369Bp/z9zcXMU2AsePH4ezszPCw8OF6KtdvnwZgYGB8PDwqFGRWwnJgcOHD8PZ2RmhoaHIysqyexxbwY7feHuzAeVHpyqVCl26dKnyaEOSJEWCgczMTGg0GvTo0eOe10pLS61OFRwFE+m0PIZOTU2ttN7PUUyePFmey3ihQ4cO+Pvvv0FEeOSRRxQd+/3337+nMWTUqFEgqrmLvSYYjcZqA6Zdu3aBiNClSxeukiSFhYXyZstej8AHJmg6efIkvL294enpyd3d2RJs4uKp4VPxBi4uLoavry+aNm0qzPJi27Zt+PzzzxUvLrQFrq6uaNeunVBF8NTUVGi1Wvn6Ki0t5e62PnTo0CrrKXj8zsXFxWjUqBHc3NyEfbfsGho6dKiQa3f37t1wcnJC48aNq53ElNJpYvVbXbt25e6XVlpaioSEBKhUKoe7g20BK0GobQGuPWC+j5UVzCt53ZSVlcHX19fKdiQzM5PLtfnuu++CiK+rwrZt2+Ss6dtvv63o2BXXoZycHLi4uKB9+/aK8lSEiMQEUH4t9O3b1+GNyAMRNF26dAkhISHQ6XRc3ZArYt++fVCpVGjfvr1Qc1XmfSdCsdkSLEDkodJaHcLCwoR6ogF3F3eeQoQVcfz4cbmzQxQ0oTuIAAAgAElEQVRY9rB3795Cvl9JkuTgkIcAX2VgMhL9+/ev8j5VUtxy0qRJICJMnTrV4bFqQmZmJjw9PREcHMy9tjE/Px8hISHw8fFRxA2+Opw5cwYqlQp9+/blygPcPRrnLZzLGhS2bdvGlSctLQ1EfC1hAOCDDz4AEXE/AWAZOl6NOMDdMggiwlNPPeXQXHjfB00XLlxATEwMVCoV1q5dK4y/uLgYjRs3hrOzc5Xn/LzQtm1buLq6CrOQYejVq5fixYW2ICEhQagqNlDe/kxkrYklAv3794dKpZLFS0WATRaijj/v3LmD8PBwODs7CzHbliRJXhjfeeedSv9GyaDJaDSiY8eOICKsWbPG4fFqwtq1a0FUrmvD+95ktVQ8vc0YmETDoUOHuPKw72/ZsmVceTZs2AAiUvR4sTLMmDEDRFSrjq/aQpIkREdHw9/fn6tpL9MK69ChA9drm3Xu9evXz+EM8X0fNDHROJ5RaGVgGi8LFiwQynvkyBEQ8TV9rAphYWGKtBXXFr1794aHh4dw3latWsHPz4+rBlZFsG5BpesRqkN2djYCAwMREBAgTH/r4MGD0Gq1iI6OlmsGeWa6ioqKEB8fD5VKJQsXWv6uStuo3LhxA/Xq1YOrq6vcns3zOho3bhyISG4Y4PldMnkGRzW8asKJEydARBgwYABXnjt37sDJyanSekIlweRLeNsxDR48GGq1mmswwzLUL7/8MjeO4uJiREVFcUtMMHPwjz/+GETlWmuONGcw3PdBExEfpebKkJOTg507d+LPP/+EWq1G27ZthS2oLMpmkyPv3VdFsILskSNHCuUF7tY38JwEKgPT1LHUxhKBPn36QK1WIyMjA0VFRUI+97fffguicvsFs9lcrfWJUmB6UaNGjUJOTo7dhZe24vz58/D19YW3tzfOnTuHyZMny7tKHt5zFYU2eZrBFv+/9s47LIqr7cPPLiBFmmioAvaKLSo2NBpjwaDGrrFGozHGKPG1m+irsRJNLLEbu2AsEZXYe01sYEMURFCaCNLLssv8vj/4Zl5W0CDMGdCc+7r2EinnntmdOfPMmXOeJzMTDRo0gIGBAS5fvoz169fLtnr4VWJjY2FtbY3KlSsjNTWV6eMmsYTSnTt3kJWVxWSCNgB07NgRpqamzNoH8hK9EhG+//57Zg4AcHNzQ82aNZm0LV6H+vfvD5VKxWSO0bFjx5CZmSmtbCxJhYDXce/ePXz11VfYv38/VCoV6tatK9uKxjIfNA0cOFCxuS6+vr5wc3OTlt8qVX0e+F/ag/Lly8Pd3V0xL5C3BJPV5MKiIK4UfPbsmaKjPjdv3gRRXnbwa9euKTZZ+urVqyAijBgxAsOGDXtjSRC5EARBmgQ5atQotGnTRhGnWOaoVatWqFevHvNz+cSJE1JKErVaLaU2YFWwV5zHUrduXVlWGb2JBw8ewMzMDC4uLnB0dJS1hMariBnUBw4cCAsLC2arBcV+Z8CAAfjqq69kLU+VH3F+TkBAALO5QImJiXopW+Tuy168eAGtVoty5coxGzWbPn067ty5A0NDQ2YFvXv06IF+/fpBrVajVatWTPr8oUOHwszMDMbGxnB0dJR1nm5R+xI1lRJt27alxMRERVyHDx+me/fu0f3796lTp06UkZFBWq1WEffNmzfJ3d2dMjIyyMvLi27dukUAFHEPGTKEli5dSkRE1tbWtGfPHkXcOTk59Msvv0j/37hxI02ePJm5l4jo8ePHZGRkRHZ2drR9+3b6+OOPKS0tjbk3OTmZTE1NqVGjRrR161bavn07BQcHM/c+ffqU+vXrR0REv/32G129epWSkpKYOqOjo+mzzz4jlUpFV69epeDgYLp9+zYzX05ODpmYmJC7uzs9evSIBEGgDRs2MPNlZGRQlSpVqFq1avTgwQMiyjuGWSAIAqWlpVGXLl3o6dOnFBMTQzt37mTiSk5Oprp161LlypVp9+7dlJaWRidOnJDdk5KSQmq1mtzd3en333+n9evXMzkXAgMDyc3NjYiIJk2aRGPGjJHdceTIEQoMDCQDAwMKCQmhQYMG0ePHj2V1LFy4kMaNG0c5OTnk6OhIv//+O2VkZMjquHTpErVs2ZJ0Oh1169ZN9vM1KyuLTp48SXv37iVBEKh///4UEREhqyMiIoJ8fX0pMzOTNBoNde7cmZKTk2V1FAnZwrQiIkZzX375JV6+fMncl5OTA2tra+mRoEqlwuLFixUb5WrevLnkJoXnUuVPykbEvmhufvr27Vsq+x0XFwcbGxs9N8tRApHMzMwCBUqLW3Ljbbh9+7ZefS9SYOVgeHh4geOa5Yqz3NxcrFixQirHQZRXmicyMpLJSJNGo8H06dOhUqkkn7W1NbNHQFu3boWZmZne+8kis3Vqaiq6deum52Hx2F6j0aBz5856njfV3CsuYs3Q/J+R3AQFBRVwyH3tEEfLxBeLlYfVq1fXc8idfiIgIECvfXt7e9lHF8UkmeKrSZMmsjrK/OM5uYfTX8fZs2elN7l8+fLFyhRaEvJf0IYMGaLo8ntxNQYRwcLCQpEgVeT48eN6B3hhWYJZ8WpVbyWCJiBvYmqTJk0kb58+fRTxRkdH63lHjhzJ3KnRaKQlxUQEBwcH5o9g79+/r1eIec6cOUz7kwsXLqBKlSqSb/v27bI7RO7fv4969eoxv8HRarV6F59KlSoxWd2UlpYmLfYhKlkx5zchzhVlFTQB+je+nTt3lr19sZKB+Lpy5Yqs7QuCoBeUs5ijl/9zaNy4sey58Z4/fw4TExMQESwtLbFq1SrZ+xseNP0/4rwaZ2dnRZNnAnl3yGLh1qZNmzKdrFgYW7dulQ7kadOmKerOzc2Fq6sriAgGBgay1BIsKvnn3CgZNAF5J7dYB6tu3bqKedPS0uDl5QUigqOjo2LB+YEDB6SRXCUmoWs0GsyYMQMqlQqVK1eW5puw6k9SUlKk+nuskwGmp6dLmZpr1KjB7DMUBAE///yzNJL2agkguUhMTET9+vVBRKhSpQoTR0pKCpydnZkGTWLuN1ajx2ImcKK85Kpyk3/xVfv27UtUVLswBEGAk5MTiPJWTLLo62fOnCmNjLLKNfZeBE1ydBo1a9ZEy5YtmSd1K4z4+HgQEWxtbZlnpS4MsdSAqakp8wR6hSFWUW/UqJHi7ujoaOlirmTQBOTV3XNycoKhoWGJC6G+DTqdTsr+rMQkdJEnT57A3d0dw4YNU8x58eJFVKlSRcrVw/ombP/+/ahYsaIiebi2bdsGMzMzZpOnRf744w+Ymppi3rx5zBxRUVHSzROrG6djx44xDZpSUlKkkRoW6RoyMzOloIZFhviQkBAQEVxdXZlM/BcX3sycOZPJqGVKSgpatWpVrATYbxNDlPmJ4P/Ejh07yNPTk3Q6XbHbePjwIbm7u9PZs2fJ3t7+jb8bEBBA33zzDQmCUGzfq8TGxpKhoSHt27ePnJ2d9X52+vRpWrVqFeXm5srme5Xq1asTEdHo0aPp6dOn5Ofnp8ikaCKi8PBwKl++PKlUKmrRogVzX2JiIv3444/04sULIiJydHTUm4wuN8nJyfTVV19RfHx8gZ+5urrSiRMnyNLSksLCwmTxxcXFUe/evSkuLu61v2NgYECrVq2i5cuXl3iCb0hICHl6eha6f69SpUoVunjxIlWtWpUyMzOL5Tt37hz17NmTUlJSivT7Hh4edPv2bdJoNMXybd++nb788kvKyckp0u/37t2b7t69S0+fPi2Wb968eeTj41OkhRjDhg2jGzduUFBQULFcgiDQ+PHj6fjx42/8vV69etG5c+coMDCwWB6R1NRUGjt2LEVHRxf4mZOTE508eZJsbW0pJCSkRB6Rhw8f0rx586T3skuXLjRy5EhZ2i6Ms2fPUps2bYiIyN3dXfb2TU1NycnJiVq2bEm1a9emDRs2FPpeFpfY2FgyNTUlf39/+uCDD/R+5u/vT5s3by7RAqGTJ0/Sjh07aMGCBaRWvz6kEASBxo0bR3/++edbtZ+dnU3nzp2jDh06vNXfhYWFUdu2benWrVtv9Xf/yFuHbiXkn6K51NRUKQtw5cqVSzQh8sWLF0WKNA8ePAgjIyPY2dnh2bNnxfa9yrFjxwrNYZOZmYnq1avD3NycaQmA3NxcWFlZ4dmzZ9I8BqWW32/atAlEhObNm2PTpk3MfX/88Yc0z0VEEAR4enoyGWny9/eX5ji87u7qr7/+kq3e365du0BEqFevXpHuFku6FHflypUgIlSvXr1A0ek3UdzR4WnTpoEoryjq2yTEK87jfkEQpIUKHh4ezEdhs7KypLlY48ePL/JcjOK+l5GRkahUqRJMTEyKNHLx9OnTEo0QHD16FESEdu3avTYr861bt3Do0KFiO/IjzqU7deqU9L2kpCTUr19flvZfxc7ODg0bNmT2iBHIK9h7+PBhaUqFnOkT/Pz8Ci0cnpSUBHt7e1SqVKlE812LklcsNzdXevSsxFzPHTt2wNzcHGq1usgpPN7Jx3PXr1+XZvn36tVLtqRVb+LAgQMwMjKCvb39P1ZUf1tel6VZfD7LOsMskJeIEMhLnObi4sLcJ3Lq1CkQ5eU2UeLxmE6nQ61atVCxYkW9xwBPnz7FkydPmDi//vprEBEWLFjwxu2SCzGQadiwoSIZwDdt2gQDAwNUqlSJ+aMiQRDw66+/wsDAABUqVMDJkyeL9HfFnSOp0+mkQM3FxYX5fMeUlBR88sknIMqrpcd6fmNQUBAqVKgAMzMzRRZhiHNH35QAUq5zITIyEgYGBgUmZbPazxYtWsDJyYnp6uPly5dDEAQpsIiLi5Ot7df1FWPHjmW+wAHI+9yHDx8OorxyJyyT/qampmLo0KHSoMu5c+eK/LdlPmjy9PRE9+7d4evri9zcXPz0008wNDSEiYkJ1q5dq8hE1v3798PQ0BAODg4ICQlh7gPySgwYGhqiadOmiiR81Gq1SEhIkFbvKUVYWBiICFOmTFEssaU4YVOpgsjiCIJarcb58+cVcS5duhREhA8//FAqJ8CSI0eOoHz58jA1NcXBgweZ+06dOoUKFSrAwMAAK1eu/Md+oKQLS3bs2AFjY2OYmZnhjz/+KFYbRUWj0UhZ8lu1asUs87fIjRs3YGVlBXNzc9lXZL2KRqOBu7s7VCqVIgsCxHQqSizuGTBgAFQqFdN5c+IIXfXq1VG7dm1mHpErV66AiNCxY0em11qdTicFMb169WI6x/P69euoUaOGdGNS1BtLX19fdO/eHZ6enmU7aBKHC2NjY6WcHvXr12c+KiHewe7duxcGBgZwcnJSpHBvZGQkcnNz0bp1a6jVakXLqYiPkjZs2KCYU6PRQKVSYeDAgYo5s7KyYGtri6pVq0Kr1cpSj+ifePToEczNzeHo6Ij4+HiEhYUx9y5YsABEBHd3d6SkpCAoKIjpBfjGjRuws7ODWq3GmjVrAAB//vkns842NDRUysQ9evRoaDQa3Lx5s9BH53Ksxv3rr79gb28PIsK8efMgCAJOnz6NtLS0kuxGoQiCIBUZrVmzJh4/fgytVivbY9xXuXr1KszNzWFpaYlr165Bp9Ph7NmzTFxPnjyBtbU1PvjgA8TExCAiIoJZcXIxf5KYZ4rlOSeOSLLInZWfqKgo6ZhnRWRkJHJycuDm5gZjY2Mm176cnBycPXsWWq1WCm779Okj+6q9J0+e4Pbt28jNzcXSpUthZGQEY2NjrFmzplh9U5kfaTI2NsaBAwdga2sLIsLYsWOZX2yePXsGCwsLrF27FgYGBqhcufJbzdcoLpmZmahfv75Us2vSpEnMnUDe/vr7+0tD50qNpolUrlwZLVu2RGJioiKrjoD/BRRbt26Fl5eXIk4/Pz8QEbp27YrBgwdj165dzJ1z5swBUV6xylGjRmHKlClMfeHh4ahduzaI8mpGNm7cGDt37mTmS05OlhIxtmvXDpMmTULXrl0LdIZypTB59uwZmjZtCiJCv3798Pnnn+Obb74pUZtvYv369VCr1bC1tcXKlSvh6OjIbCTj4sWLMDMzg7W1NZYtW4Y6deqUuCL86zhw4IC0tH3UqFFM5zN26dIFBgYGOHPmDMaMGcPMs3btWmkOFat6lqtXr4avry+ICDt27GDiSEhIQOPGjfHjjz+CiF1prTVr1qBz584YNGiQdD7JHTBlZ2ejefPmmDt3Lrp06SLN97xz506x2yzzQZP4sra2xv79+xVxjxw5UvI6Ozszv3MQOXHihOR1cHBAamqqIt64uDioVCpUqFABpqamWLFihd7kSVZcvnwZw4YNg6urK8zNzWFvb8/s7jY/ERERuHjxIoyMjGBgYKBoPrAxY8ZInzGr2k75EQQB06dPl5wmJiZMFxUAeZ1umzZtJKetrS3ThKk6nQ6TJ0/W6y9evQjLmfctMzMTAwcO1POxWAIucvjwYb2kgxMmTGDmOnPmjJQckIiwZcsWZq6JEydKno8++oiJIzg4GGvWrAFRXh64xo0bM/GMHTtWOiZq1aqFTz75hInH2dkZFStWlEY7t27dKrtDTM8hjnKymFuUmpoqDYQQ5dUeZBGgi6lVxNdXX31V4kGXdyZo+s9//oOsrCzm3rt370KtVkveGjVq4JdffmGSV+JVXu34a9SoIWuhwdeRkZGh57Wzs1MkiBAEQXq8Ir5YFQbNz4MHD1ChQgU9761bt5g6BUHAjz/+CEtLS8mpVqsRExPD1Hvz5k307NlTb1+//vprps67d+9KEzrFF8s7fI1Ggx07dqBSpUqSz9LSUi/nmZxBU3p6OlatWqVXrqVKlSpMHtPpdDrs2LFDGr0Tj5sbN27I7kpOTsY333yjV07K1dWVyUXTx8cHVlZWescIi4UYe/fu1StzY25uzuRx8avVBSZOnCi7A4BeNni1Ws0kz9qoUaP09qVhw4ayrxwVR8DFl6enp+zzPXfv3q3naNCgAR4/flzidt+JoMnCwgLDhg1j0lG8ilgJXrwzGTNmDKKioph7AaBBgwaSu3HjxsxHBEQEQZBGXMRHVkqRP4uura2tYt6LFy/qXfRY12ED8pbTLlq0SO+9XrZsGVOnIAj4/fffUbVqVclpaGgoS+fxOl6+fImFCxfCzs5Or9O6fPkyE59Go8GuXbvQunVrPV/nzp2lC6ScQVNaWhrWrl0rZbFmHYxeu3ZNqgovulgtELl9+3aBenC//vqr7B5BELBs2TIYGRlJnvnz58vuAYCff/5Zb3/kXHEmotFo4OjoKDlYzQvNX3KGxWNhQRD0Snq1bt1a9nmQsbGxKF++vN5N+urVq2Wd/P3w4UOYm5vrfe4eHh7YuHFjiQdAynzQtG3bNsXKiuSvP9e/f388fPhQES8AxMTESO4uXboo9mhORLy7bNGihSKjaiKZmZnScHOHDh0U8wL6d6ELFy5UzHvp0iWppINSWdCzs7OxdOlS6XNWIit3VlYWNmzYIJWLcXNzk33OwqvcvHkTI0eOlB4xiRcvFmWZBEHA2bNn0adPHykQZvlYOzQ0FF9//bW0byxTkRw7dgxubm4gyiuqymoe6d9//y0F9LVq1WK2aCB//UNW840WLlzI/AahU6dOICLY2NgwSbUTHBws7UOfPn2YXHvFFAaWlpaYP3++7BngMzIypAGIRo0aYcmSJbLmHSzzQZNSc00EQUDz5s3RqVMnXL9+XRFnfrZt2waivCKqrC8sheHi4gIidvWl3sSsWbNAxKZA5D8h3oWOGjVKUW9iYiJ69OgBImVLmSQkJMDb2xsmJia4d++eIk6dTof9+/fD3d0dS5YsUcSZkJCAn376CY0aNUJkZCTz/uTZs2f4/vvv4e7uzvyG5/nz5/j+++/h6urKdBRcp9Nh06ZNsLe3Z/q5JSUlSUlE//77byaO3Nxc9OnTh+lIemJiIkxNTUFEzFYDivtQWDJkOVi+fDmICN999x2Tm+eQkBCYm5tj8uTJzHLIzZ8/H7NmzWLWv/Gg6f958OCBIpOfX8fgwYOlZcylgZubmyJV7wsjJiYGRkZGWLduXan4vb29mU1EfROCIGD58uWYNWuW4u7Q0FBFVu/lRxAE3LhxQ9GRTJ1Oh5iYGMX6k+zsbEXm5QF5jwmVWG2alpaGlStXMs2dIwgC1q5di8mTJzNzZGZmok2bNm9MrFlSxo4di8qVKzNr/4svvkCjRo2Y5bTz8vLC8uXLmbQN5FXVYFlfVRAE5tdQHjSVEY4cOVKqfk9PTybP+ovK0KFDcfHixVJx5+bmwtvbu1TcAGQtycMpnH9bf/KuwvpcSEhIwH//+19m7YeEhMDT05NZ+xMnTmSW0Tw3N5dZHrD3iaL2JSqgBJX6ikFqaipZWVlRSkoKWVpaKqn+V3L79m1q1KhRqfkDAwOpSpUqVKFChVLxazQaMjY2LhU3hz28P+GIsD7Xz5w5Qx9//DGTtku7n+YUvS/hQROHw3ln4f0Jh8ORg6L2JWoFt4nD4XA4HA7nneVfHzTpdDqKjIxU3BsWFqa489+AIAiK+nx9fRX1ERHdu3dPUZ9Wq6Xs7GxFnTqd7r31paenK+a6d+8eKfUwwdfXVzEXkfLn+vsGAMWuQ9HR0ZSVlaWIizVlImhKTEyk7777TjoJANCjR4/o2LFjTL3R0dHUsWNHunbtGsXExNCNGzeY+kRWrlxJCxcupISEBEV8RERPnjxRzJWf3NxcxVw5OTk0efJkxS6A9+7do2nTptH06dMVuVicOnWKsrOzqW/fvrRu3TqmTq1WSwEBAZSdnU1qtZo8PDwoMDCQme/Fixd08uRJysnJISKi+fPn09atW5nt4+PHj+nKlSvS8fntt9/S0aNHmbiIiO7evUv3798nALR7926aMGECZWZmMvPdvHmTnj9/Ths3bqShQ4cyD9Tu379Pc+bM0evHWZKSkkIzZsxg7smPEn2Zkv30vHnzaPXq1ZSUlMTUc/ToUWrevDmVK1eOrl27Rs+fP5fdAYC2bdtGp06dkr6XnJxM/v7+lJKSIrtMUfLPUM/NzcVvv/2GihUrokGDBtixYwdGjBghZS61sbFhtgQzICBASr5Yr149qFQqRRISbtmyRUoy1q1bN+Y+IG/lR/Xq1RXLlyQIAsLDwzFgwADmpT1EMjMzUadOHRgaGmLu3LnMfYmJiXqZaUeNGsWsCCqQl0qAKK9Wo+gdNGgQs9xBp06dkspT9O/fHzY2NjA0NMSPP/7IZD/FDPIWFhbo06ePlLema9eub1zKXNzVc1OnTgURoVKlShg2bBg6dOgAIsLw4cOZ1NPr3bu3lOhRLH9Tq1Yt/PXXX7K7BEGAm5sbDAwM4ODgACJCnTp1mOa3yV++aMiQIUxz0t27dw82NjbMk44Ceef5pk2b0LdvX+b1M3NyclC7dm14enoyz+knFo8nIgwePJiJQ6PRSCXEjI2NpWS4ixYtktVz7949tG3bFkSEjRs3YsaMGXB3d5cy7R84cKBI7ZT5lANXrlzRK/6Z/+Xm5gZvb28cPnxY9g5ao9Fg0qRJej5DQ0P07dsX/v7+THNB7N+/X69kQvv27RXJEL5kyRIQEczMzHD48GHmPgAYN24ciIhZIc1X2blzJywsLECUVyaHVTI9kfj4eCn7t/jq1asXszqKSUlJWL58OWrVqqXnrF27dokqe7+OuLg4LF++HO3atdOr8UX/n10+JCREVl94eDh8fHzQrl07vXNEDKTWr19f6LlZ3KDp7t27+O9//4umTZsW6H/s7e3h7+8v164ByMsWP2HCBL1SFkR5dca+//57WXMl5ebm4o8//oCnp6eey9TUlEkCyJcvX6JatWp6rk8//ZRJtvGcnBzMmDFD8jg5OTEtGv3o0SOpNEhAQAAzD5BXVFk8JlhWMvjtt9/0Pqvu3bvLniE8PDwc7u7ueh47OztMnjxZthxk6enpmDp1KgwNDQucw5UqVUL//v2xYcOGItcBLfNBU2GvKVOmIDY2lpn78ePHaN68eQGvSqXC+vXrmXkB4Pjx41I9JnNzc3Tq1Anz5s1TJHtzmzZtYGFhgT///JO5SyQzMxP16tVDrVq1FPGlp6djy5YtaNWqFYjyqnjLncY/P+vWrUOnTp3g5OSkdyx16NCBWc6g+/fv69XByn8x3Lx5MxOnVquFl5dXoc5Vq1YxSWh55coVvTp+4uvjjz9GeHi43u/KkafJz8+v0P5o4MCBstfnunPnjl59LvHVpEkT3L17VzZPRkYGunXrVuh+jRw5UtaAZvPmzejcuXOBm4g2bdogKSlJNo9ITEwMFi5cKAVqAwYMYHqzu3nzZhCxr2Pp7e0NlUqFpUuXMtufvXv3SjcllpaW8PT0xMKFC/Ho0SPZHPv27StQtFkMcB88eCCLw9/fX6p2kf/VsGFDBAYGvlW/5Ovri+7du0s3GWU2T1Pfvn1Jp9NRdnY2ZWVlUXZ2NllbW9Pvv/9OVlZWsntfvHhBixcvJgBkaWlJFhYWZGlpqfdq1aoVqdXyT/N69OgRzZ8/nz788ENq27YtNWrUiAwNDWX3FEZ8fDx5eHiQv78/1atXTxGnyJ07d6hPnz4UGhqqqPfevXu0adMmMjMzo4ULFzL3paSkUEhICD148ICCg4PJzMyMZs2aRUZGRrJ64uLiKCYmhpKSkig5OVnv36SkJOrZsyd16dJFVuedO3coICCAtFotabVa0ul00tdarZY6dOhA/fr1I5VKJYtPEARatGgRPXv2rNCfly9fnqZMmUL29vZEVPKUA9nZ2TR79mxKTU0t9Oe2trY0ZcoUsrCweOu2XwX/P+8iKiqq0PfTwMCAJk2aRK6uriV2paen05MnT/SOj/xfOzs7k7e3t+z9UFpaGoWEhFBwcDAFBweTkZER/fDDD0zyJwmCQGfPnqUNGzZQv379qG/fvrI7iPI+t4EDB1K3bt1o+PDhzBwffvghLViwgLp168bEcfv2bVq6dCm1aNGC2rZtS25ubmRgYCCr4+LFi+Tr65ahSLgAABu+SURBVPvaa6yzszPVrl27RI6TJ0/Snj179GKH/P8uWrSoWP0gz9PEISKiBw8ekK2tLVWsWLFU/Lt27aLBgweXijs7O5uMjY1lu6Bzyh68P+EQEWVlZZGpqSmz9pOSkujKlSv06aefMmn/5cuXFBcXp/iNLed/8KCJUyYAwIMWDjN4f8JRCt6Xvd/w5JacMgHvZDgczvsA78s4RDxo4nA4HA6HwykSPGjicDgcDofDKQI8aOJwOBwOh8MpAjxo4nA4HA6HwykCPGjicDgcDofDKQI8aOJwOBwOh8MpAjxo4nA4HA6HwykCZSZoAkApKSmUnJxc2pvyXqFw7tICpKWllaqfw+Fw5IBlX1ba/fT7gkajobi4OKYOZQqgFcLUqVPp5cuXFBsbSzExMRQbG0vm5uYUGBhI1tbWsvt0Oh3t37+fEhMTKTs7W++l0WgoJyeHZs+eTQ4ODrK7NRoN7d69m2xsbMjFxYWcnZ2pQoUKiiRLS0lJIR8fH5o2bRqTmn5vIjU1laZOnUrr1q1T1BsTE0MXLlygypUrk4eHBxOHRqOhlJQUSk1NlV7i/11cXOijjz6S1QeA1qxZQ9HR0WRkZETlypWT/hW/7ty5syx1y/Kzbt062rVrF1lZWZGVlRVZWlpKX1tZWVG7du3Izc1NNl9ycjJ5enpSWloaVaxYUXrZ2NhQxYoVydHRkfr370/lypWTxffkyRPy8vIiQ0NDPY/4qlq1Kn322Wey1KTMyMigwYMHU1pamt57KL6nlSpVov79+8tSDuTs2bN0/PhxveMk/7/16tWjtm3blthDVPi5IL4cHByoY8eOsnheBQA9fPiQLly4QF27diUXFxcmHiKiLVu2UOXKlalTp05M2gdAP/zwA3355ZdUpUoVJo6MjAzas2cP2drakouLC7m4uMh+TYiNjaWAgAC9a2v+a62DgwPNnDmzRNe+0NBQOnLkCMXGxhZ4JSYm0oYNG2j06NEy7tUrvF1t4ZIjViU3MzMrtELxggULcPToUTx//lx2d2RkJHr27Flo5W9vb2+mlbJv3bqFypUrS77y5cujY8eOSExMZOYUmThxIuzt7bFr1y6m+5gfjUaDTp064fPPP1fEFxwcjFGjRqFGjRogIvTs2RNarZaZ79q1a7CxsSlwHI0ePVrWCvL5uX37NoyNjQs4HRwcsG/fPtk/2+zsbJw7d67Q/bSzs8PmzZvfqpr4P5GVlYVLly5hxIgRhZ6j/fv3R3h4uN7fiP3JP1UmL4zU1FScOnVKqm6e/2VgYIBx48YhPj5ert1DXFwcZs6cWei+de7cGcHBwbK5srOz0bhx4wIeQ0NDzJw5E5mZmbK5goKC8MEHHxRwDRs2DGlpabJ5RI4cOYK+ffvC1tYWRIQlS5bI7sjP0aNHYWBgUODYk5udO3fC1NQUCxYsQHZ2NhPHpUuX9D4rCwsLeHl5yfo5HTlyBFWrVi30nLp06VKJ2xcEAf7+/qhfv34Bh4mJCb777jvs3LkTwcHB0Ol0RW63qH1JqQVNYWFhmDhxIsqVKyftsFqt1nsDqlWrJmunLHLw4EG4uLgUeMObN28uuys/MTExcHd3l3yDBw9m6hN5+vQpjIyM0KpVK0WCNAC4cOECLCwsMHv2bEV8ubm5cHV1BRGhQ4cOyMrKYupLSUmBnZ2dXufj5+fHzPfgwQOYmprqHa8qlQrjxo1DcnKy7L5Tp07BxMSkwDliZGSEKVOmFCtIeRNbtmyBkZFRoQFFy5Ytcfny5UL/rrhB05w5cwr0N+Lr008/lTWAAYDBgwcX6qpRowYOHToke8DbpEmTAq7WrVvj7t27snoAIDMzE05OTpLHzMwMW7duld0jEhoaKn1206ZNY+YB8m7+evbsCVNTU6Y3YQCg1WpRtWpV2NraIjQ0lJnnyZMnegHHt99+K7sjIyMDs2bNKnBOq1Qq/PTTT7I4dDodtm/fjipVqrw2hjAzM8Phw4eL1F6ZD5rEDYuIiMAXX3wBtVqNkydP4tq1a1i3bh3GjBmDoUOHMtuO9PR0TJ06FYaGhrC3t8d//vMfzJkzh5lPJDMzEwMGDICzszOOHj3K3CeyZ88exMXFKeYD8u7kIyIiFPMdOXIEzZo1Q2pqqiI+cdTgww8/ZNrJAXkdas+ePdGtWzcQERo0aIArV64w80VHR8PT0xMLFy7ExIkTQUTw8vLCo0ePmPiuXr2Knj17YvHixTh37hysra1RpUoV7N69+40BRXGDpn379mHAgAFYvnw5jh8/DiJCo0aNcOrUqZLuSqGsXLkSI0eOxNatW1GzZk1YWFjAx8eH2YjC7Nmz8dVXX4GIYGVlhbVr1zK5ARWZN2+e9LTgwYMHzDxA3kjDjBkzMHr0aEVGzrVaLUJCQph7AMDf3x/Pnj1j7klJSUG3bt1Qq1YtnD17lpknODgY7du3BxGhS5cuGDx4MM6cOSOrQ6PR4Ndff4WdnR2++OILPH78GHv37sWMGTPQpUsX3L9/v0jtlPmgydPTE927d4evry+AvDeX5Yf3Ou7cuYMOHTow67wKQxAE7NixQzHfvwVBEPDixQvFfOHh4Zg4caKix86MGTOwePFi5OTkKOb8+eefFQ3wnz17Bh8fnyKNFpbk8ZzI33//jc2bN7/VUH5xycrKwpgxYxAbG8vcde7cOfTr1w8xMTHMXbGxsRg7dqysj/3eRGJioiKf1/uMTqfDrl27mHsEQcD27dsxfvx4pp709HRs27btrf/O19cX3bt3lx7T/1NfogKUnbafmppKVlZWlJKSQpaWlkqqX4sgCCQIAhkaltq8eM47iCAIskwQfhuysrJkmSj8vlAW+5OygpLHSmmcC5x3C61WS0ZGRqW9Ga+lqH0JjxKISK1W8xOe89aUxjHDAyZOUVHyWOH9J+efKMsB09vAj3QOh8PhcDicIsCDJg6Hw+FwOJwiwIMmDofD4XA4nCLAg6b3nPj4+FL1R0REkEajKdVt4HA4nJLy8OFDZm2Xdj/NKTo8aGJMZGRkqfrnzp1LL168KDW/j48PRURElIpbp9PRzp07S8VNlLdahMPhsD8XEhIS6M8//2TWfkREBC1ZsoRZ+zt27KC//vqLWfulfR16n/hXBE1nzpyhhISEUnHfunWLhgwZUmqFiBMSEuibb74pFXdsbCxt3ryZHj9+rLhbo9FQ//79KTw8XHF3fHw8ff311xQWFqaoNycnh/744w9KTU1V1Pv8+XPF75RZF+XMDwDFfADo3r17zAu4AqBr167R7du3mXoSExPp22+/peDgYGaOqKgoateuHZmZmTFz+Pj4MB1pAkBffPEFZWVlMWn/9OnTNHbsWEpPT2fSflZWFh05coR0Oh2T9ony0lqUBUotaFKyk7W1taXq1avTgAED6MSJE4q++V5eXnTmzBlq0KABnT59WjGviFqtpr1799KePXsUdy9btow0Go3igUt6ejp5eXnRgQMHZCtKWhRycnJo2bJlVLNmTUpKSqK6desq4o2MjKRZs2aRi4sL3bp1S5F8RdHR0bRq1Sr66KOPaNiwYWRjY8PUl5OTQ6dPn6ZJkyZR3bp16cqVK0x9GRkZdPjwYRo7dizVqVOHnj59yswlCAJdunSJvL29ydXVlYKDg5kV887IyKBNmzZRs2bNaOzYscyOUa1WSytXrqSaNWvS06dPqVGjRkw8YWFh5OHhQWFhYdSiRQsmjpiYGNq8eTPTfkytVlNISAjNnj2bSfsDBgwgPz8/atKkCZMRLVNTUwoMDCRnZ2eaMWMGhYaGyu7Izs6mESNG0JAhQ2jdunV09+7d0gmk3jp9ZgkRM/jS/9ddGjFiBDZu3IgnT54w9a5YsULyurq6Yu7cuXj69ClTp8isWbP0CgMrlTUXAD7//HMQESpWrKhoGZUXL15IRZm9vb0V8yYmJqJly5ZSnTRWxXPzIwgCDh48KBULVqlURU7dX1x0Oh0CAgLw6aefQqVSgYjQuHFjaDQaZs6IiAgsW7YMrVq10juXWGVhj4mJwaZNm9C7d29YWFhIzsWLF0u/I0dGcJHHjx9j5cqV6NKli15h5D179pS47VfRarU4c+YMxo0bBwcHB8k1ZcoU2V0AcO/ePYwfPx6WlpYgIpQrV45JHTogr5xRnTp1pH26desWE09QUJBU/7FVq1ZMHAAwadIkaV/S09OZOH755Rep73hdncWSMm7cOKk+2w8//CB7VQGdTgcPDw/pvfroo4+wY8cOWa93KSkpaN68ueSwtraGp6cnFixYgPPnz5eorI4iZVS0Wi2mTp2KBg0aoHz58nB0dMSwYcPemLY/f9Akvry8vJiXFRAEAV27di1QPHDq1KlMazIBeQUSxQsbEaFevXrMOpJXGTJkiOTt3bu3IrWaAOD777+XvD169FDEGRMTAzc3N70Cpay5c+cOPvnkE73jatCgQUydN2/eRLVq1fSc5cqVw507d5g5L1y4UKCSvYmJCW7evMnEl5aWhhEjRhToK0aOHKl3DMsVNMXFxUl1/fK/FixYUNJdKYBOp4O3t3cB1yeffCJ7Udjk5GR07969gMvHx0dWD5BXCkssRSG+PvvsM9k9AHD58mVYW1tLHlaFe/Pf/BERs3Ms/019rVq1mNxYBwUF6X02TZs2lb0w9ZMnT6TAXHzZ2NjIWtMxISFBr58nIjg6OuL48eMlaleRoCklJQWdO3fGvn378OjRI/z9999o0aIFmjdv/o8blj+IqFatGvbv38/8gh4bG4tKlSpJ3kaNGiEtLY2pUyR/wFapUiV8+eWXePnyJXPvsGHD9A4uPz8/5s7k5GRYWVlJzvr16zN3RkVFSSM94mv69OnMvWfOnNG7KKnVauYFSwFg06ZNevuaf/SFBZmZmfjyyy/1nNu3b2fmy83NxZo1a/QuWB06dCgwkiZX0KTRaDBnzhy9KunDhw9n1ifdvn1brzq7q6srEhISmLhCQ0P1zkcPDw8mddvOnz+P3r176x0jQUFBsnvOnTund1wQEf7880/ZPYD+zR8Rwd/fn4ln1apVep5JkyYx8bRo0UJy2NvbY/z48bKPnu3atUtvX2bNmiVr+0DetbxmzZp6N41Tp04tUT9QagV7r1+/DrVa/dpKzeKG/frrr9KdiHhCt2/fHoGBgXJvkh6HDh0CEUlD4m5ubswqt+fnwIED0kXV3Nxc9gj/dYwYMUK6EPTr1w/z5s1jXuhyxYoV6NGjhzQaYWpqqsgIV2Zmpt6F6MiRI8yd4eHhcHJygqGhIYgIQ4YMYeoTBAGrVq2CoaEhLC0tUa5cObRu3ZrpZ3rz5k3UrVtXCoCJCBMmTGDme/jwIdq2bQsiQtWqVWFvb49atWohMTGxwO/KETT99ddf0n41adIEJiYmaNu2LZNCzDqdDj4+PihXrhyMjIxQs2ZNmJiYMBt5vnbtGpycnEBE+OCDD1C+fHmEhYUxcT19+hSurq4wMDCASqVCnz59mHgA4P79+zAwMJBuwJOTk2V3JCcno02bNmjQoIHUly1btkx2DwCsXr1a6qdbtWqFmTNnMgmif/vtN+k6VLFiRURERMjuAP43LUS8zo4ZM0b28ykyMhIuLi5wc3NDs2bNQESwtbXFxo0bi9UfllrQdPLkSRgYGLx2BCf/hq1YsQInTpxAfHw8vv76a6jVaqhUKowePZrp/JuxY8fi5MmT+Omnn6BWq2FpacnsDkIkJycH9evXx7Fjx2BoaIhatWoxOdFf5YcffsD58+ehUqnQv39/5j4gb5Tg0aNH0rD5xo0bFRlV8/HxARFh0aJFaNWqFfP3Nzo6GtWqVYNarca+ffvQrl07pgF4dnY2Ro4cCSJCnTp1EBISgk6dOiE0NJSJT6fTYcGCBTA0NES5cuXw008/ITU1FR999JHs8yGAvMf9ixcvhrGxMVQqFby9vZGeno6hQ4e+9n0tSdCUnp6O7777DiqVCsbGxli0aBFycnLg5eXFZJ7WkydP0K5dOxD97xH90qVLsWPHDtldALBt2zYYGxvD1NQUfn5+8PHxwdq1a5m44uLiUKtWLahUKuzcuROdOnViNmcKALy8vEBE2L9/Pzp06MDEIU7b6NevH9RqNUJDQ5mN1G/ZsgUBAQGoWrUqqlatyuwmMz09HfXr18fBgwehUqnQpEkTJo8Ck5KS0KxZMyQkJEhPWZo3b47IyEhZPY8ePcJ3332H3NxcbN26VQrSGjdujHPnzr1VW6USNGVnZ6Np06YYOnRokTcsf+d79+5daX6IhYUFfHx8mNztZWRkIDU1FUDe4xVbW1sQEWbMmMH0jl2M6tesWQMiQvfu3ZnPpxL3p02bNrCwsGDyfhbGwYMHQUTYunWrIr6YmBiYm5ujZs2a0Gg0zCe9x8fHS6Mv4j6yXMwQHR0tDa13795dCghZzQUMCwtD69atQURo2LCh3lyOpKQk2X2BgYH48MMPpYDi6tWr0s/e9Ai9uEHTqVOnULVqVelxVUhISJF8xUEQBGzZskWazD5p0iRkZWUBYPNearVaac6Ui4uLNIoVFxfH5GKcmJiIhg0bgoiwfv16AGzPhSNHjoCIpOsM63O9QYMGqFGjBlOH2E+LnxvL+YnidWj+/PnS+8jiuHj+/DmAvH2bM2cOiPIWJJ08eVJWT/4YIi0tDbNmzZIWcvTu3RuPHz8uUjtMgqZdu3bB3Nwc5ubmsLCwwKVLl6SfabVadO/eHc2aNStRJycIAg4dOoSaNWvC0tJSeuNZEhUVhVatWqFatWqKjP4IgoCRI0fC3d1dkREYIO+RWdeuXREVFaWI7/jx44o8bhW5fv06qlWrxmxuw6tcu3YNVlZWWL16tSK+U6dOwcDAAN9//z3zQBsAtm/fLi2UUCLQnjt3LgwNDTF79uy38hU3aBo2bBjMzc2xevVqRW5c2rRpA2dnZ5w+fZqpC8gLYqpUqYL27dsjPj6euS8oKAgVKlTA0qVLmbuAvBE0R0dHREdHK+IbPHgwvv32W0Vc58+fR8uWLZmtoMtPbm4uevXqhfbt2yuyyjggIADW1tb45ptvmLsiIiIwYMAAEBHWrVtXpL8pal+iAoqeRS0jI4OeP38u/d/JyYmMjY1Jp9NRv379KCIigs6cOUMVKlR4bRupqalkZWVFnp6eZGhoqPezQYMG0aBBg4goLy/LnTt3KDQ0VPoeS3JycigmJoaqVKnC3EWUl3OCiMjExEQR3/uCn5/fa4+HnJwcKleunGLbEh8fT7a2tor5Hj9+TNWrV1fEBYDu379Pbm5uivhycnIoNDSU6tev/1Z/J/YnKSkpb5Wf6uXLl5SWlkaurq5vu6nFIioqiszNzcna2loRX2RkJDk6OpKRkZEiPqXPhTed62/qIzj6ZGRkkLGxcYFrMSsiIiLIwcGBjI2NFfFdu3aNQkNDafDgwXrf9/PzIz8/P73v6XQ6Onr06D/2JW8VNBWGGDCFh4fT2bNn/zHJ3dt2cj169KBDhw6VZBM57xH8eODkp7hBE+f9hfcRnPwU9Xgoal9SovAyNzeX+vTpQ0FBQRQQEEBarVYaibKxsVHsLofD4XA4HA6HNSUqoxIVFUUBAQEUFRVFjRs3JkdHR3JwcCBHR0e6evWqXNuoCK8O1b0Prvdxn6KjoxXxEPHP6V3wKAn/nMq+h0i5PoIfD++GS+7joURBk6urK+Xm5uq9BEGg3NxcateunVzbqAjv48HyPu4TD5reDRcPmt4N1/vmIeJB07vgUdIl9/GgzOyvfIhTqIpaiV2n0ylStV0pj5Ku93GfALx3+/Q+fk5KeUTH+7RPSrreNw+Rcn0EPx7eDVdRjwfxd/5pmneJJ4K/LVFRUeTs7KykksPhcDgcDucfefbsGVWuXPm1P1c8aBIEgWJiYsjCwoJUKpWSag6Hw+FwOJwCAKC0tDRydHQktfr1M5cUD5o4HA6Hw+Fw3kVKNBGcw+FwOBwO598CD5o4HA6Hw+FwigAPmjgcDofD4XCKAA+aOBwOh8PhcIpAmQ2adDodTZs2jRo2bEjm5ubk5OREw4cPp9jY2NLeNE4pceDAAeratSt98MEHpFar6c6dO6W9SZxSZPXq1VS1alUyNTWlli1b0vXr10t7kzilxMWLF6lHjx7k5OREarWa1577l7No0SJyd3cnS0tLsrOzo169etGjR49kabvMBk2ZmZkUFBREc+bMocDAQDpw4AA9fPiQevbsWdqbxiklMjIyyMPDg5YsWcLTVfzL+f333+k///kPzZ07lwIDA6lRo0bUpUsXSkhIKO1N45QCGRkZ1LhxY1q9ejXvGzh08eJF+vbbb+nvv/+mU6dOkVarpc6dO1NWVlaJ236nUg7cuHGDWrRoQZGRkW9MPsV5v4mMjKSqVatSUFAQNWzYsLQ3h1MKtGzZklq0aEErVqwgorwcK87OzjRhwgSaOnVqKW8dpzRRq9Xk7+9PPXr0KO1N4ZQREhISyNbWli5cuEAeHh4laqvMjjQVRnJyMqlUKrK2ti7tTeFwOKWEVqulmzdvUseOHaXvqVQq+uSTT965QuEcDoc9YuxgY2NT4rbemaBJo9HQ9OnT6fPPPydzc/PS3hwOh1NKJCQkUG5uLtnZ2el9387OjuLi4kppqzgcTlkEAHl7e5OHhwfVq1evxO2VmaDJ19eXLCwsyMLCgiwtLeny5cvSz3Q6HfXr149UKhWtWbOmFLeSoxRvOh44nMIAwOezcDgcPcaNG0fBwcG0e/duWdozlKUVGejZsye1bNlS+r+TkxMR/S9gevbsGZ05c4aPMv1LeN3xwOFUqlSJDAwM6Pnz53rfj4+PLzD6xOFw/r2MHz+ejhw5QhcvXiQHBwdZ2iwzQVP58uWpWrVqet8TA6bw8HA6e/YsVahQoZS2jqM0hR0P+eEjCv9ejIyMqGnTpnT69Glpsi8AOn36NE2YMKGUt47D4ZQFxo8fTwcPHqTz58+Ti4uLbO2WmaDpVXJzc6lPnz4UFBREAQEBpNVqpTtLGxsbMjIyKuUt5ChNUlISPX36lKKjowkAhYSEEACyt7fnIwz/MiZNmkTDhw+npk2bkru7O/3yyy+UmZlJI0aMKO1N45QCGRkZFBYWRuJi8PDwcLp9+zbZ2NiQs7NzKW8dR2nGjRtHfn5+dOjQISpfvrwUO1hZWZGJiUmJ2i6zKQciIyMLjDSIcxbOnj1L7dq1K6Ut45QW27Ztoy+++KLAKNOcOXNo9uzZpbRVnNJizZo15OPjQ8+fP6fGjRvTqlWrqFmzZqW9WZxS4Pz589ShQ4cCfcPw4cNp8+bNpbRVnNJCrVYX+jRiy5YtNGzYsBK1XWaDJg6Hw+FwOJyyRJlZPcfhcDgcDodTluFBE4fD4XA4HE4R4EETh8PhcDgcThHgQROHw+FwOBxOEeBBE4fD4XA4HE4R4EETh8PhcDgcThHgQROHw+FwOBxOEeBBE4fD4XA4HE4R4EETh8PhcDgcThHgQROHw+FwOBxOEeBBE4fD4XA4HE4R4EETh8PhcDgcThH4PxIiEv3HnsUDAAAAAElFTkSuQmCC" }, "execution_count": 13, "metadata": { }, "output_type": "execute_result" } ], "source": [ "p=plot_vector_field(g,(x,-2,2),(y,-2,2))\n", "show(p)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "### Problem 2: 3D plotting" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "Grading criterion: correctness of code." ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "2a. Draw a 3D plot of a torus." ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": "\n\n" }, "execution_count": 14, "metadata": { }, "output_type": "execute_result" } ], "source": [ "#Builtin torus plot\n", "from sage.plot.plot3d.shapes import Torus\n", "inner_radius = .3; outer_radius = 1\n", "show(Torus(outer_radius, inner_radius,aspect_ratio=1))" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": "\n\n" }, "execution_count": 15, "metadata": { }, "output_type": "execute_result" } ], "source": [ "#Torus with parametric 3d plot\n", "x,y=var('x,y')\n", "a=(cos(x)+3)*cos(y)\n", "b=(cos(x)+3)*sin(y)\n", "c=sin(x)\n", "parametric_plot3d([a, b, c], (x, 0, 2*pi), (y, 0, 2*pi), color=\"green\",aspect_ratio=1)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "2b. Draw a single 3D plot containing the five regular polytopes in it: tetrahedron, cube, octahedron, dodecahedron, icosahedron. All five must be visible." ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": "\n\n" }, "execution_count": 17, "metadata": { }, "output_type": "execute_result" } ], "source": [ "a=cube().translate(0,0,0)\n", "b=tetrahedron().translate(2,0,0)\n", "c=octahedron().translate(4,0,0)\n", "d=dodecahedron().translate(6,0,0)\n", "e=icosahedron().translate(8,0,0)\n", "show(a+b+c+d+e)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "2c. Draw a 3D plot of the [Mexican hat function](https://en.wikipedia.org/wiki/Mexican_hat_wavelet). Try to choose the parameter $\\sigma$ to get an authentic \"sombrero\" look." ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/html": "\n\n" }, "execution_count": 18, "metadata": { }, "output_type": "execute_result" } ], "source": [ "x,y=var('x,y')\n", "\n", "sigma=.4\n", "plot3d(1.0/pi*1.0/sigma^2.0*(1.0-.5*((x^2.0+y^2.0)/sigma^2.0))*exp((x^2.0+y^2.0)/(-2.0*sigma^2.0)), (x, -2, 2), (y, -2, 2))" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "### Problem 3: MATLAB (and Octave) vs. Sage" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "Grading criterion: correctness of code." ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "This exercise refers to the [Math 18 MATLAB exercise set](http://www.math.ucsd.edu/~math18/)." ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "3a. Do MATLAB exercise 4.5 twice: once using Octave, and a second time using Sage. (For this problem, you will need to switch the kernel between Octave and SageMath.)" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "P =\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0.810000 0.080000 0.160000 0.100000\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0.090000 0.840000 0.050000 0.080000\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0.060000 0.040000 0.740000 0.040000\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0.040000 0.040000 0.050000 0.780000\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "x0 =\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0.5106000\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0.4720000\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0.0075000\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0.0099000\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Q =\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0.665624 0.767579 0.543214 -0.464102\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0.616521 -0.284124 -0.814822 -0.125380\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0.294620 -0.568248 0.181071 -0.250760\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0.300076 0.084793 0.090536 0.840243\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "D =\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Diagonal Matrix\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 1.00000 0 0 0\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0 0.67298 0 0\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0 0 0.76000 0\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0 0 0 0.73702\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "ans =\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 1.0000e+00 -2.5476e-16 1.8306e-16 -1.0952e-16\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 6.5954e-17 6.7298e-01 -5.0609e-16 3.9416e-16\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " -2.2671e-16 -1.1194e-16 7.6000e-01 -4.4565e-16\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " -5.2261e-17 5.8661e-17 -1.9013e-16 7.3702e-01\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "ans =\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Diagonal Matrix\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 1.0000e+00 0 0 0\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0 6.9207e-06 0 0\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0 0 2.6571e-04 0\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0 0 0 1.0575e-04\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Dinf =\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 1 0 0 0\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0 0 0 0\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0 0 0 0\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0 0 0 0\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Pinf =\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0.35465 0.35465 0.35465 0.35465\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0.32849 0.32849 0.32849 0.32849\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0.15698 0.15698 0.15698 0.15698\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0.15988 0.15988 0.15988 0.15988\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "ans =\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0.35465\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0.32849\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0.15698\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0.15988\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "y =\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0.25000\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0.10000\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0.40000\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0.25000\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "ans =\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0.35465\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0.32849\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0.15698\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0.15988\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] } ], "source": [ "P = [0.8100 0.0800 0.1600 0.1000;\n", "0.0900 0.8400 0.0500 0.0800;\n", "0.0600 0.0400 0.7400 0.0400;\n", "0.0400 0.0400 0.0500 0.7800]\n", "\n", "x0=[0.5106; 0.4720; 0.0075; 0.0099]\n", "\n", "[Q,D] = eig(P)\n", "\n", "Q^(-1)*P*Q #Verifying we get the right answer; note this is D, up to numerical rounding errors.\n", "\n", "#To compute the limit of D^n as n goes to infinity, note that D=diag(1,.672,.760,.737), so that D^n=diag(1^n,.672^n,.760^n,.737^n). Thus we will have \n", "# D^n -> diag(1,0,0,0). This can be approximated numerically by taking n somewhat large, as below:\n", "\n", "D^30\n", "\n", "Dinf=[1 0 0 0;0 0 0 0;0 0 0 0;0 0 0 0]\n", "\n", "Pinf=Q*Dinf*Q^(-1)\n", "\n", "Pinf*x0\n", "\n", "y=[.25;.1;.4;.25]\n", "\n", "Pinf*y\n", "\n", "#The answer remains unchanged, regardless of y. Note that the rows of Pinf are constants; thus, if y=[a;b;c;d] with a+b+c+d=1, we have \n", "#Pinf*y=[.354(a+b+c+d);...]=[.354(1);...]=[.354;...]" ] }, { "cell_type": "code", "execution_count": 85, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "D=\n", "[1.0000000000000004 0.0 0.0 0.0]\n", "[ 0.0 0.6729843788128368 0.0 0.0]\n", "[ 0.0 0.0 0.7599999999999995 0.0]\n", "[ 0.0 0.0 0.0 0.7370156211871641]\n", "Q=\n", "[ 0.6656239985873295 0.7675789757982624 -0.5432144762551129 -0.4641024066208631]\n", "[ 0.6165205888554787 -0.2841241259938047 0.814821714382666 -0.12538014809320114]\n", "[ 0.2946204583911127 -0.568248251987594 -0.18107149208503445 -0.250760296186409]\n", "[ 0.30007639280576415 0.08479340218313634 -0.09053574604252085 0.8402428509004729]\n", "L=\n", "[ 1.00000000000000 0.000000000000000 0.000000000000000 0.000000000000000]\n", "[0.000000000000000 0.000000000000000 0.000000000000000 0.000000000000000]\n", "[0.000000000000000 0.000000000000000 0.000000000000000 0.000000000000000]\n", "[0.000000000000000 0.000000000000000 0.000000000000000 0.000000000000000]\n", "Pinf=\n", "[ 0.354651162790697 0.3546511627906978 0.3546511627906968 0.35465116279069725]\n", "[ 0.3284883720930234 0.3284883720930241 0.32848837209302323 0.3284883720930236]\n", "[0.15697674418604607 0.1569767441860464 0.15697674418604599 0.15697674418604618]\n", "[0.15988372093023273 0.15988372093023306 0.15988372093023265 0.15988372093023284]\n", "Pinf*x0=\n", "(0.3546511627906974, 0.32848837209302373, 0.15697674418604624, 0.1598837209302329)\n", "Pinf*y=\n", "(0.3546511627906971, 0.32848837209302345, 0.15697674418604612, 0.1598837209302328)\n" ] } ], "source": [ "#Everything is identical as above, modulo small changes in syntax and function names\n", "P=Matrix(CDF,[[.8100,.0800,.1600,.1000],[.0900,.8400,.0500,.0800],[.0600,.0400,.7400,.0400],[.0400,.0400,.0500,.7800]])\n", "x0 = vector([0.5106, 0.4720, 0.0075, 0.0099])\n", "D=P.eigenmatrix_right()[0]\n", "Q=P.eigenmatrix_right()[1]\n", "print('D=')\n", "print(D)\n", "print('Q=')\n", "print(Q)\n", "L=diagonal_matrix([1.0,0.0,0.0,0.0])\n", "print('L=')\n", "print(L)\n", "Pinf=Q*L*Q^(-1)\n", "print('Pinf=')\n", "print(Pinf)\n", "print('Pinf*x0=')\n", "print(Pinf*x0)\n", "y=vector([.25,.1,.4,.25])\n", "print('Pinf*y=')\n", "print(Pinf*y)\n", "#The explanation as to why Pinf*y is the same as Pinf*x0 is the same as given before. " ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "3b. Repeat with MATLAB exercise 5.6, using `numpy` to obtain the analogue of MATLAB's least squares functionality." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "B =\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 1 75\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 1 100\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 1 128\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 1 159\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 1 195\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "d =\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 15\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 23\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 26\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 34\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 38\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Q =\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " -0.447214 -0.594998\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " -0.447214 -0.331258\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " -0.447214 -0.035869\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " -0.447214 0.291169\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " -0.447214 0.670955\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "R =\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " -2.23607 -293.81933\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0.00000 94.79029\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "x =\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " -0.44721\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " -0.44721\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " -0.44721\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " -0.44721\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " -0.44721\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "y =\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " -0.594998\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " -0.331258\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " -0.035869\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0.291169\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0.670955\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "v =\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 16.538\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 21.264\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 26.557\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 32.418\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 39.223\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "c =\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 2.35959\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0.18904\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "ans =\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 3.5527e-15\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0.0000e+00\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 3.5527e-15\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 1.4211e-14\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 1.4211e-14\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "cl =\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 2.35959\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0.18904\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "a =\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 2.617713\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ " 0.018959\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "b = 3.2298\n" ] } ], "source": [ "B=[1 75;1 100;1 128; 1 159; 1 195]\n", "d=[15;23;26;34;38]\n", "[Q,R]=qr(B,0)\n", "x = Q(:, 1)\n", "y = Q(:, 2)\n", "v = dot(x,d)*x + dot(y,d)*y\n", "c = B\\v\n", "B*c - v\n", "[cl,a,b] = lscov(B, d, eye(5))\n" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(2.3595913279615033, 0.18904420602769023)\n", "[ 2.35959133+0.j 0.18904421+0.j]\n" ] } ], "source": [ "import numpy as np\n", "\n", "B=matrix(CDF,[[1, 75],[1, 100],[1, 128],[1,159],[1,195]]) #Set up B, d\n", "d=vector([15,23,26,34,38])\n", "\n", "Q,R=B.QR() #Find orthonormal basis for the column space of B\n", "x=vector(Q[:,0])\n", "y=vector(Q[:,1])\n", "\n", "v=x.dot_product(d)*x+y.dot_product(d)*y #Project d onto the column space of B to get v\n", "\n", "vshort=vector([v[0],v[1]]) #Here is the trick; every two by two submatrix of B is invertible, since each pair of rows in B is lin independent. \n", " #Hence to solve Bc=v, it is completely equivalent to take the top 2x2 submatrix of B, call it Bshort, and the top 2 \n", " #entries of v, say vshort, and solve Bshort*c=vshort. Convince yourself that the solution c is the same as the c in Bc=v\n", "Bshort=Matrix(CDF,[[1,75],[1,100]])\n", "\n", "c=Bshort.solve_right(vshort) \n", " \n", "#Because Bshort is now a square matrix, we can use sage's solve_right command to get the required answer. You can verify\n", "#that this agrees with the octave answer. \n", "print(c)\n", "\n", "#Verifying with numpy:\n", "print(np.linalg.lstsq(B,d)[0])" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "### Problem 4: Eigenvectors and eigenvalues" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "Grading criteria: correctness of code and explanations." ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "Let $M$ be the following matrix with rational entries:\n", "$$\n", "M = \\left(\\begin{array}{rrrr}\n", "\\frac{1}{2} & 0 & -1 & 0 \\\\\n", "1 & \\frac{1}{2} & 1 & 1 \\\\\n", "0 & 1 & -1 & -1 \\\\\n", "2 & 1 & -2 & 1\n", "\\end{array}\\right)\n", "$$" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "4a. State the Cayley-Hamilton theorem, then use Sage to verify that it holds for $M$." ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "The Cayley-Hamilton theorem states that $M$ satisfies its characteristic polynomial; that is, if $f(x)=det(x\\cdot I-M)$, then $f(M)=0$. \n", "\n", "Source: \n", "\n", "https://en.wikipedia.org/wiki/Cayley%E2%80%93Hamilton_theorem\n", "\n" ] }, { "cell_type": "code", "execution_count": 99, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[0.0 0.0 0.0 0.0]\n", "[0.0 0.0 0.0 0.0]\n", "[0.0 0.0 0.0 0.0]\n", "[0.0 0.0 0.0 0.0]" ] }, "execution_count": 99, "metadata": { }, "output_type": "execute_result" } ], "source": [ "#Verification:\n", "M=matrix(CDF,[[1/2,0,-1,0],[1,1/2,1,1],[0,1,-1,-1],[2,1,-2,1]])\n", "c=M.charpoly()\n", "c(M)\n" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "4b. Compute the eigenvalues and eigenvectors of $M$, and verify (using numerical approximations) that each eigenvector is indeed an eigenvector with the specified eigenvalue." ] }, { "cell_type": "code", "execution_count": 107, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2.03354622791 is an eigenvalue with eigenvector (0.06804366661981474, 0.5252410268111855, -0.10434810827783073, 0.8417858370667097)\n", "0.267172875651 is an eigenvalue with eigenvector (-0.6033085821062105, 0.4589286728617739, -0.14046660226706817, 0.636924141189412)\n", "-2.30071910356 is an eigenvalue with eigenvector (0.2538601633286291, -0.49718243018224134, 0.7109910090669525, 0.42761715776942244)\n", "1.0 is an eigenvalue with eigenvector (-0.26490647141300844, 0.7947194142390258, 0.13245323570650383, 0.5298129428260185)\n", "Eigenvector 1 verification\n", "(0.1383699415877381, 1.0681019088142865, -0.21219670197769355, 1.711810413673186)\n", "(0.13836994158773738, 1.0681019088142845, -0.21219670197769308, 1.711810413673183)\n", "Eigenvector 2 verification\n", "(-0.1611876887860371, 0.1226132932470202, -0.037528866060569904, 0.1701688543729012)\n", "(-0.1611876887860372, 0.1226132932470201, -0.0375288660605698, 0.17016885437290075)\n", "Eigenvector 3 verification\n", "(-0.5840609274026379, 1.1438771150738833, -1.6357905970186162, -0.9838269638894657)\n", "(-0.5840609274026379, 1.1438771150738838, -1.6357905970186162, -0.9838269638894657)\n", "Eigenvector 4 verification\n", "(-0.26490647141300805, 0.7947194142390269, 0.13245323570650344, 0.5298129428260197)\n", "(-0.26490647141300844, 0.7947194142390258, 0.13245323570650383, 0.5298129428260185)\n" ] } ], "source": [ "evals=[i[0] for i in M.right_eigenvectors()]\n", "evects=[i[1][0] for i in M.right_eigenvectors()]\n", "for i in range(4):\n", " print(str(evals[i])+' is an eigenvalue with eigenvector '+str(evects[i]))\n", "for i in range(4):\n", " print('Eigenvector '+str(i+1)+' verification')\n", " print(M*evects[i])\n", " print(evals[i]*evects[i])" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "4c. State the relationship between the characteristic polynomial, the determinant, and the eigenvalues of a matrix; then verify numerically that this holds for $M$." ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "Let $M$ be an $n\\times n$ matrix, $c(x)$ its characteristic polynomial, $det(M)$ its determinant, and $[\\lambda_1,\\dots,\\lambda_n]$ a list of its eigenvalues (with multiplicity). Then we have:\n", "$$c(0)=(-1)^n\\cdot det(M)$$\n", "$$c(x)=\\prod_{i=1}^n(x-\\lambda_i)$$\n", "$$(-1)^n\\cdot\\det(M)=\\prod_{i=1}^n\\lambda_i$$" ] }, { "cell_type": "code", "execution_count": 126, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Verifying formula 1:\n", "-1.25\n", "-1.25\n", "Verifying formula 2:\n", "x^4 - 0.9999999999999956*x^3 - 4.7499999999999964*x^2 + 5.999999999999989*x - 1.2499999999999973\n", "x^4 - x^3 - 4.75*x^2 + 6.0*x - 1.25\n", "Verifying formula 3:\n", "-1.25\n", "-1.25\n" ] } ], "source": [ "#Verification:\n", "print('Verifying formula 1:')\n", "print(c(0))\n", "print((-1)^4*M.determinant())\n", "print('Verifying formula 2:')\n", "g=1\n", "for i in evals:\n", " g=g*(x-i)\n", "print(expand(g))\n", "print(c)\n", "print('Verifying formula 3:')\n", "d=1\n", "for i in evals:\n", " d=d*i\n", "print(d)\n", "print((-1)^4*M.determinant())\n" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "### Problem 5: Hilbert matrices and numerical stability" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "Grading criterion: correctness of code and thoroughness of explanation." ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "5a. Define a Python function `f`, which on the input of a positive integer $n$, returns the $n \\times n$ Sage matrix over the rational numbers \n", "$$\n", "H_{ij} = \\frac{1}{i+j-1} \\qquad (i,j=1,\\dots,n).\n", "$$\n", "See below for a sample output.\n", "Hint: remember that Sage, like Python, starts indexing with 0 instead of 1." ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Example input of n=6:\n", "[ 1 1/2 1/3 1/4 1/5 1/6]\n", "[ 1/2 1/3 1/4 1/5 1/6 1/7]\n", "[ 1/3 1/4 1/5 1/6 1/7 1/8]\n", "[ 1/4 1/5 1/6 1/7 1/8 1/9]\n", "[ 1/5 1/6 1/7 1/8 1/9 1/10]\n", "[ 1/6 1/7 1/8 1/9 1/10 1/11]\n" ] } ], "source": [ "def f(n):\n", " try: #The try...except method is a useful way to implement control over the input for your function. \n", " #Here we implement control which returns a error if the input is not in fact a positive integer\n", " a=float(n)\n", " \n", " if a.is_integer() and a>0:\n", " b=int(a)\n", " H=matrix(QQ,b,b,lambda x,y:1/(x+y+1))\n", " return(H)\n", " else:\n", " raise ValueError\n", " except ValueError:\n", " raise ValueError\n", " \n", "print('Example input of n=6:')\n", "print(f(6))" ] }, { "cell_type": "raw", "metadata": { "collapsed": false }, "source": [ "## Sample output of f(3):\n", "[ 1 1/2 1/3]\n", "[1/2 1/3 1/4]\n", "[1/3 1/4 1/5]" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "5b. Write Sage code to compute the inverse of `f(25)`, print out the top left entry (not the whole matrix), and verify that the whole answer agrees with the [formula in Wikipedia](https://en.wikipedia.org/wiki/Hilbert_matrix)." ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Entry computed with our function:\n", "625\n", "Entry computed with wikipedia formula:\n", "625\n" ] } ], "source": [ "H25=f(25)\n", "inverse=H25^(-1)\n", "print('Entry computed with our function:')\n", "print(inverse[0,0])\n", "print('Entry computed with wikipedia formula:')#Many people made the mistake of plugging in i=j=0; recall that sage indexes starting at 0, whereas\n", " #most math sources (including wikipedia) start at 1. Hence we really want i=j=1 for the wikipedia eq.\n", "a=(-1)^(1+1)*(1+1-1)*binomial(25+1-1,25-1)*binomial(25+1-1,25-1)*binomial(1+1-2,1-1)^2\n", "print(a)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "5c. Use the `change_ring` method to redo the computation of the inverse of `f(25)` over the ring `RR` (i.e., using floating-point real numbers with double precision == 53 bits), agian printing out the top left entry." ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "-202.301237192348" ] }, "execution_count": 50, "metadata": { }, "output_type": "execute_result" } ], "source": [ "real_H25=f(25).change_ring(RR)\n", "real_inverse=real_H25^(-1)\n", "real_inverse[0,0]" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "5d. In as much detail as you can, explain what you have just observed. You may want to compute the determinant of `f(25)` and/or read about [numerical stability](https://en.wikipedia.org/wiki/Numerical_stability)." ] }, { "cell_type": "code", "execution_count": 51, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "determinant when the matrix is initially considered over RR:\n", "2.91038304567337e-11\n", "\n", "determinant when the matrix is initially considered over rationals:\n", "1/746332515470541859307349018107431789872329747913727730760621191984777569063589205517303938509441565299809996599554994981363939681729476785432795097905555120762172958990784084457536372476333251919350316666089029356479086324949498677522696089012012028938712165715166669721997554754957779660912439584392373862400000000000000000000000000000000000000000000000000\n", "\n", "numerical approximation of determinant when the matrix is initially considered over the rationals:\n", "1.33988534503220e-357\n" ] } ], "source": [ "print('determinant when the matrix is initially considered over RR:')\n", "print(det(real_H25))\n", "print('')\n", "print('determinant when the matrix is initially considered over rationals:')\n", "print(det(H25))\n", "print('')\n", "print('numerical approximation of determinant when the matrix is initially considered over the rationals:')\n", "print(det(H25).n())" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "Sources:\n", "\n", "https://math.stackexchange.com/questions/1622610/when-is-inverting-a-matrix-numerically-unstable\n", "\n", "https://en.wikipedia.org/wiki/Operator_norm#Table_of_common_operator_norms\n", "\n", "http://web.mit.edu/ehliu/Public/Yelp/conditioning_and_precision.pdf\n", "\n", "https://www.mathworks.com/help/symbolic/examples/hilbert-matrices-and-their-inverses.html\n", "\n", "\n", "The Hilbert matrix is what is called \"ill conditioned,\" meaning that the matrix is very close to being singular. See, for instance, the determinant of the matrix, which is very close to zero. In particular, if we want sage to use floating point arithmetic, we should expect rounding errors to occur in the computation of real_H25^(-1). These rounding errors will compound with each operation that is performed in computing the inverse, leading to at best an approximation of what the real answer should be. Note that if you compute the product of real_H25 with its inverse, you do not get the identity. To save space, I'll simply print the first row below (note how the off diagonal entries are not even close to zero!!!). This should show that the computed inverse to real_H25 is a terrible approximation. In particular, to get an exact answer we should try to compute things symbolically.\n" ] }, { "cell_type": "code", "execution_count": 52, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.996933907270432\n", "0.459764480590820\n", "-16.8348999023438\n", "259.499511718750\n", "-2045.50781250000\n", "8745.09375000000\n", "-18582.1250000000\n", "5901.00000000000\n", "58590.6005859375\n", "-119485.812500000\n", "84335.6250000000\n", "-58311.6250000000\n", "162770.250000000\n", "-105992.500000000\n", "-245995.500000000\n", "322674.250000000\n", "7818.50000000000" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "-70267.5000000000\n", "-157862.500000000\n", "107697.250000000\n", "170158.250000000\n", "-310291.000000000\n", "256112.750000000\n", "-121821.500000000\n", "25431.6250000000\n" ] } ], "source": [ "for k in range(25):\n", " print((real_H25*real_inverse)[0,k])" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "If instead of working over RR we tell sage to work over the rational numbers, we can compute everything symbolically, and hence are not subject to any rounding errors. In particular, we may precisely calculate the inverse of H25; note the calculation below:" ] }, { "cell_type": "code", "execution_count": 53, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]\n", "[0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]\n", "[0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]\n", "[0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]\n", "[0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]\n", "[0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]\n", "[0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]\n", "[0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]\n", "[0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]\n", "[0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]\n", "[0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0]\n", "[0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0]\n", "[0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0]\n", "[0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0]\n", "[0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0]\n", "[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0]\n", "[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0]\n", "[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0]\n", "[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0]\n", "[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0]\n", "[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0]\n", "[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0]\n", "[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0]\n", "[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0]\n", "[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1]\n" ] } ], "source": [ "print(H25*inverse)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "### Problem 6: Linear algebra over Q" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "Grading criteria: correctness of code and thoroughness of explanation." ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "6a. Explain in detail what the following code does and how it is being done. Assume that the input `M` is a matrix with entries in `QQ`." ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ "def f(M):\n", " M = copy(M) # replace M with a copy to avoid clobbering the original\n", " n = M.dimensions()[0]\n", " if n != M.dimensions()[1]: raise ValueError\n", " for i in range(n):\n", " j = i\n", " while j0:\n", " M=matrix(QQ,n,n,lambda x,y: randint(0,1))\n", " return(M)\n", " else:\n", " raise ValueError\n", " except ValueError:\n", " raise ValueError\n", "\n", "random25=g(25)\n", "print('Using the function f:')\n", "print(f(random25))\n", "print('Using the Sage builtin:')\n", "print(random25.det())" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "6c. Define the *binary height* of a nonzero rational number $\\frac{r}{s}$, written in lowest terms, to be the quantity\n", "$$ \\left\\lfloor\\log_2 r \\right\\rfloor + 1 + \\left\\lfloor \\log_2 s \\right\\rfloor + 1.$$\n", "Use the function `binary_height` defined below to compute this.\n", "\n", "Take the code defining `f`, recopy it below, then modify it so that at the last step, instead of returning the product of the diagonal entries of `M`, it returns the maximum of the heights of the diagonal entries." ] }, { "cell_type": "code", "execution_count": 60, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ "def binary_height(x):\n", " return(x.numer().nbits() + x.denom().nbits())" ] }, { "cell_type": "code", "execution_count": 65, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ "def f_modified(M):\n", " M = copy(M) # replace M with a copy to avoid clobbering the original\n", " n = M.dimensions()[0]\n", " if n != M.dimensions()[1]: raise ValueError\n", " for i in range(n):\n", " j = i\n", " while j