{ "cells": [ { "cell_type": "markdown", "metadata": { "toc": true }, "source": [ "

Table of Contents

\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Breadth First Search" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Given a node, compute the distance to all reachable nodes\n", "\n", "* Section 2.3 in Easley and Kleinberg\n", "* Algorithm depicted in Figure 2.8\n", "* See \n", "\n", "
\n", "\n", "\n", "Maak een Python programma/functie dat als input een netwerk (in NetworkX formaat) en een knoop 'x' in dat netwerk neemt. \n", "\n", "> Given a network G and a node n in G, return a dict with distance to n in G as keys, \n", " and the set of nodes with that distances to n as values.\n", "\n", "We kunnen dat zo als een tabel zien:\n", "``` \n", " afstand knopen\n", " 0 {'x'}\n", " 1 {'a','b',...}\n", " 2 ...\n", " 3 ...\n", " ...\n", "``` " ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAb4AAAEuCAYAAADx63eqAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAACq6klEQVR4nOyddXQUVxuHn914AgnBLWhIgiW4U6y4u0OhFNciRYsUgruXQotLcQnFHUKRGJAQgiZIlLiszfdHvmxZ4kaQ+5wzB3bmzp07u9n9zXvvKzJJkiQEAoFAIPhGkOf0AAQCgUAg+JQI4RMIBALBN4UQPoFAIBB8UwjhEwgEAsE3hRA+gUAgEHxTCOETCAQCwTeFED6BQCAQfFMI4RMIBALBN4UQPoFAIBB8UwjhEwgEAsE3hX5OD0Ag+FoIiozj4D0/vN6FEx6rwtxYH7vC5nSvXpx8uYxyengCgeD/yESuToEgc7j5hrL+sg9XvAMBiFNptMeM9eVIQGPbAoxsZI2DVZ6cGaRAINAihE8gyAS7nF+wwMmLWJWalL5JMhkY6+sxo40d/eqU+mTjEwgEiRFTnQJBBokXPU9ilJpU20oSxCjVLHDyBBDiJxDkIMLiEwgygJtvKL22OOPvfJQojwsoAl9gVr4R+dtN0LbRKGN5f3Eb0V7XkTQqDAuUpnC/xZgY6LF/aB3si+fJuRsQCL5hhMUnEGSA9Zd9iFWp0c+VD4t6PYl5fh9JqdBpE/LPOiSNmqI/bURunAtFwHMAYlVqNlz2YVO/GjkxdIHgm0eEMwgE6SQoMo4r3oFIEpja1sPUpi5yE3OdNspgX6Kf3CZfqzHomVogk+thVNgaiJ/2vPQ4kODIuJwYvkDwzSOETyBIJwfv+aXaJu6NN/oWBQm9thvf1X14s3UUUV43tMdlwMH7qfcjEAiyHiF8AkE68XoXrhOykBTqiGCUgS+RG5lSfPR28jYfTvCplSiDfAGIVWnwehvxKYYrEAg+QgifQJBOwmNVqbaR6RuCXB+L+r2Q6RlgXKIyxiUqE/P8/gf9KLNzmAKBIBmE8AkE6cTcOHWfMIOCpRLvlMk+6scgi0YkEAjSgxA+gSCd2BU2x0g//qsjadRIKgVo1CBpkFQKJI0aY6tK6JsXIOzWASSNmli/R8S+8sCkTDUgPqOLXZHcOXkbAsE3i4jjEwjSSVBkHPUXXyROpSH02m7CbuzVOW5Rvzd5GvZFEfiS4NNrUAa+QN+8IHm+64+pbT0AjPTl3PylqcjhKRDkAEL4BIIMMHTnXc55+qeYpix5JFpWKMzm/iKOTyDICcRUp0CQAUY1tsZYXy9D58rUSh4dXMnbt2+zeFQCgSAtCOETCDKAg1UeZrSxw8QgfV8hEwM5czo60LSKNdWqVePUqVPZNEKBQJAcYqpTIMgEmanOcO3aNfr160enTp1YvHgxxsbGn2bQAsE3jhA+gSCTuPuFsuGyD5ceByIjPjg9gYR6fE1sCzCysXWixNTv37/np59+wsfHh71791K+fPlPOnaB4FtECJ9AkEUER8Zx8L4fXm8jeOTzguC3vvzUow3dqqVcgV2SJLZs2cL06dNZuHAhQ4YMQfZRzJ9AIMg6hPAJBNnAxYsXmTdvHpcvX07zOY8ePaJ3796UK1eOLVu2YGlpmX0DFAi+YYRzi0CQDRQuXJh3796l65wKFSpw+/ZtihUrRpUqVbh+/Xo2jU4g+LYRFp9AkA28f/+eUqVKERYWlqHzT548yZAhQxg+fDgzZ85EX1+UzhQIsgohfAJBNiBJEqampgQHB2NqapqhPt68ecOAAQOIjY1l9+7dlCxZMotHKRB8m4ipToEgG5DJZBQuXDhTQepFixbl7NmztG/fnpo1a/L3339n4QgFgm8XIXwCQTaRkXW+j5HL5fzyyy+cPHmSadOm8dNPPxEVFZVFIxQIvk2E8AkE2USRIkWyLC1ZrVq1cHFxIS4ujho1auDq6pol/QoE3yJC+ASCbCIrhQ8gd+7c7NixgxkzZtC8eXNWrVqFWKIXCNKPED6BIJvIauFLoF+/fjg7O7N3717atWtHQEBAll9DIPiaEcInEGQTWbHGlxxly5bl+vXr2NvbU7VqVc6dO5ct1xEIvkaE8AkE2UR2WXwJGBgYsHDhQnbs2MGgQYOYMmUKCoUi264nEHwtCOETCLKJ7Ba+BJo1a4aLiwuenp7Ur1+fJ0+eZPs1BYIvGSF8AkE2kdk4vvRQoEABjh8/zsCBA6lXrx47duwQji8CQTKIzC0CQTahUqkwMTEhJibmk6Ycc3d3p1evXlStWpWNGzdibm7+ya4tEHwJCItPIMgm9PX1yZcv3yf3urS3t+fu3bvkzp2bqlWr4uzs/EmvLxB87gjhEwiykU+1zvcxpqambNq0iaVLl9KhQwccHR1Rq9WffBwCweeISPkuEGQjn3KdLym6dOlCzZo16devH+fPn2fnzp0UK1Ys2fZBkXEcvOeH17twwmNVmBvrY1fYnO7VUy6mKxB8SQjhEwiykSJFimRbLF9asbKy4uLFizg6OlK9enV+//13OnTooNPGzTeU9Zd9uOIdCECcSqM9Zqz/jpXnvWlsW4CRjaxxsMrzKYcvEGQ5YqpTIMhGcmqq82P09PSYNWsWhw8fZty4cYwePZqYmBgAdjm/oNcWZ855+hOn0uiIHkDs//edfeRPry3O7HJ+kQN3IBBkHUL4BIJs5HMRvgTq1auHi4sLgYGB1KpViyVHbrHAyZMYpZrU/LslCWKUahY4eQrxE3zRiKlOgSAbKVy4MBcuXMjpYeiQJ08e9u3bx/yNO1l/4y0yA921u3e7pxL35jEyuR4AernzUWzoZu3xGKWGBU5e2BfPg33xPJ9y6AJBliCETyDIJoIi47gbZYlnntoM3n7ns3IUkclk+OaugNzAn6QMvbwthpPboWWy58eq1Gy47MOmfjWyb5ACQTYhhE8gyGI+dBSRJAlF4cpc9IqP5ftcHEWCIuPix5fB8yUJLj0OJDgyLsdFXCBIL2KNTyDIQj52FFGodaXlc3EUOXjPL8XjoZe347u6D+92Tib2pXuSbWTAwfsp9yMQfI4Ii08gyCJ2Ob/4v6OIJtW2HzqKAPSrUyqbR6eL17vwRN6bCVg2GYRBPitkegZEeV4l4NBvFBm0BgPLIjrtYlUavN5GfIrhCgRZihA+gSALcPMNZYGTV5KiF/XoCqE39qIOD0TPzJJ8bcdjbFUJ+HSOIpIkERISgp+fH76+vng8jgVMkmxrVNRW+/9clZsR9egKMU/vYlCjfaK24bHK7BqyQJBtCOETCLKA9Zd9iFUlTgkW89yF95f/okDHXzAsaoM6MiRRm8w6ikiSRHBwMH5+flph+/DfhM3IyAgrKyuKFy9OtF0HMLJK2wVkMkhmNdDc2CBDYxYIchIhfAJBJtE6iiShDWHXd2NRvzdGxewA0M+dP1GblBxFEkTtQxFLSthMTEwoXry4VtiKFy9O06ZNtfuKFStGrly5tP1uuvKUlee9E013amIjiXvzGOMSlUGuR5TnVeJ8H5D3+6GJxm2sL8euSO6MvGUCQY4ihE8gyCTJOYpIGjVxb30wsa7N600/IakVmJarQ54mg5F/FDunUav5ed0BioV7JrLUPhY1KyurFEUtLXSrXpyV572THHPo1V0oQ/xAJscgX3EKdJmJQd7E+T0loFu14um6rkDwOSCETyDIJMk5iqijQkGjIvrxDQr1W4xMrkfgofmE3dyPZaMBOm2VkownAVGUy2tKs2bNdCw3MzOzLB9z/lxGNLIpwDlPfx1LVc/UgiI/rEz1fJkMmtgWEKEMgi8SIXwCQSYJj1UluT8hI0ru6u3Rz5U3/v81OyUpfADlHaozc2DN7BvoR4xqbM21J0HEKNNfrshYX4+Rja2zYVSC1BAVNDKPED6BIJOYGyf9NdIzzoXeR2t6MpkshX4+raOIg1UeZrSxS3MIRgImBnJmtLET6co+MaKCRtYhAtgFgkxiV9gcI/2kv0q5Kn9PxL2TqKNCUcdGEn7nKKbWia26nHIU6VenFDPalMfEQI8UNBmIn940MdBjRpvynzzu8FtHVNDIWmSSlFpOdoFAkBJBkXHUX3wxyXU+Sa0i5PzvRD26gkzfADO7hlg2GYRM31CnnZG+nJu/NM2xqSp3v1A2XPbh0uNAZMT/kCYgl9So1Wq+r1CEcc2FpfepSU9ihATirXLxgJIcQvgEgixg6M67iRxF0opMBi0rFPosEj4HR8Zx8L4fXm8jCI9VEvU+EE/ni5SVBdCkXk3GjBmT00P8pnDzDaXl0Om8dz2HIvAFZuUbkb/dBAAktZKg40uJe+uDOjyAQr0dMS5prz3XxECP/UPriAeVJBBTnQJBFjCqsTXG+noZOlcf6bNxFMmXy4hh35VlZc8qbB1Ykz+GfMfTk5sY+eMA1q9fj3hO/rSsv+yDxtQSi3o9yWXfPNFxo+IVyd9+InpmlomOJSRGECRGCJ9AkAUkOIqYGKTvK2WkJ0N19292rJqPWp1+78rsJleuXJSvUpMzr9Soavaj4/LTjN/vwqYrTwmOjMvp4X3VJCRGMLWph6lNXeQm5jrHZXoGmNfsiLFVRZAn/rv7MDGCQBchfAJBFvGhowhSyusxCY4is9pV4O7eFdy/f5+OHTsSHh7+iUabOm6+oQzdeZfgBhM4/ESBqnhV3IMljrq+YdV5b+otvsiwXXdx8w3N6aF+laRWQSMtiAoaSSOETyDIQvrVKcWq9qVQvriHoZ4M44+8PY315Rjpy2lZoRD7h9ahX51S5MuXjzNnzmBlZUW9evV49uxZDo3+Pz70ItTI9FB/9FMhvAizn5QqaKQVUUEjaUQcn0CQxVz4exs9i6qYMbWZjqOIubEBdkVy061a4kBjAwMDNmzYwPr166lXrx779++nUaNGOTL+L6m80tdMcokR0t+PqKDxMUL4BIIsJDIykm3btnHnzh2to0hakclkjB49GltbW7p3746joyNDhgzJxtEmJqG8kr/zMaI8LiTyJASIeeFKyNlNqMMDMSxqQ/62E4ixKPhJyit9SySXGCH9/YgKGh8jpjoFgixkx44dNGrUiNKlS2e4j+bNm3Pt2jWWLFnChAkTUKmy5sk/LSSUV9LPlS9JT0J1dBiBRxzJ810/rMbvxahwOQKPLQaEF2FWk5AYQdKokVQK0KhB0iCpFEiaeEcoSaWMPwZIGlX8sQ88b0UFjaQRFp9AkAGSypdoWyg3qzb+wdYNqzPdv62tLbdv36ZHjx60b9+effv2YWFhkQUjT54PyyuZ2tYDIO6dD2plkLZNtPctDPOXwMyuAQAWDfoQsaYPymBfDPJZJVteSZB+EipohN3YR9iNvdr9UQ8vYVG/N3ka9uX178NQhwcAELD/VwCKDd+Kfp5CgKigkRxC+ASCdJBSvkQDGShb/8rOFyaYlwrNdL5ES0tLnJycmDBhAnXq1OHEiRNYW2dfvF9avAiVgS8xKPifNSs3NEY/T2EUga8wyGel9SJMzxSvIGlUke8xfv+MPP8XuaQoPnJbsueLChrJI6Y6BYI0klq+RKUE6BlwzjPrPB0NDAxYt24dY8eOpUGDBly6dCnTfSZHWrwINcpY5Ea6ZZLkRmZIihhAeBFmBZIksWPHDuzt7alrEY6xUcbsE1FBI3mExScQpIGc9nQcMWIEtra29OrVi3nz5jFs2LAM9xUdHc3r1691it36+vpyTV4Rcqc8VrmBMZq4aJ19GkU0MkMT7WvhRZhx/Pz8GDZsGK9fv+bMmTNUrVo1E7k6RV7V5BDCJxCkQoKnY3I/PMqQ17zZOhozu/rkbz9Juz9GqclST8emTZty48YN2rdvz8OHD1mxYgX6+rpf4cjISB1B+1DYEv4fFRWlLXKbsFWoUIGA2BLcDU55DAYFShLlcUH7WqOIRfX+HYYFSmj3CS/C9CNJEn/88QfTp09n7Nix/PLLLxgaxicyT3hwWuDkRaxKnWI+WJks3tKb0cZOhJakgBA+gSAVEjwdkyPk7CaMipRL8liCp2NWJKAODw8nLi6O+fPnM3v2bGxtbalfvz6BgYFacVMoFDrV24sXL46DgwNt27alePHiWFlZkS9fviTrAupfeYrHeW/iVJp4r8GE7f+ehMj1MLWpy/tL24jyuoGpdU3CbuzFoGApDPJZAcKLMCM8f/6cn376ibCwMC5dukSlSpUStelXpxT2xfMkW0HDWF+ORPya3sjG1sLSSwVRnUEgSIGUSg4BRD26QrT3LQzyWaEKfatj8SWQWskhSZIIDQ1N0jr7cNNoNFpRK1asGJ6enrx48YL58+dTu3ZtihcvjqWlZYrFbtN6r6HXdut4EgJaT8L/4vgCMCwSH8eX4EWY0+WVviQ0Gg0bNmxgzpw5TJkyhZ9//jmRBZ8UH1fQSCkxgiBphMUnEKRASp6OmrhoQq/tplBvRyLdzqTQi8SaE/9SM3dYsuJmYGCQaPqxfv36Oq/Nzc0TidqWLVuYOXMmu3fvxt7ePpnrp438uYxoZFOAc57+5GnYN1lPQpNSVSg2dFOi/cKLMO08efKEH3/8EbVazY0bN7C1tU3zuelNjCBIjBA+gSAFUvJ0DL26k1wOLdA3z59iH3EqiT1OV7gbcksrYo0bN9ax3nLnztj04E8//YSNjQ09e/bk119/ZeTIkRnqJ4FRja259iSIGGX6K0UIL8LUUavVrFq1ioULF/Lrr78yatQo9PQyVs5KkHGE8AkEKZBcvkSF/zNiX7pRZFDagtW/+74lWwfOzMqhaWnUqBE3b96kffv2PHjwgNWrV2NgkDEHk4TySun1ItST1MxoU1GsLaXAo0ePGDx4MCYmJty+fZuyZYXVllOIOD6BIAWSy5cY+8oDVZg/fhsG4bu2H+H/HiH68U3e/jkumX6y19OxTJky3Lp1i5cvX9K6dWtCQkIy3NeH5ZVSWy6UAUb6MiKv7aBjxXwZvubXjFKpxNHRkUaNGvHDDz9w4cIFIXo5jBA+gSAFEvIlfkyuKi0pNuwPig5aS9FBa8ldtTUmZWtQsOe8RG0/laejubk5x48fp0qVKtSpUwcvL68M99WvTin2D61DywqFMNKXJ1leSQ8N+WL8+HtYPRoWgZ07d2b2Fr46XF1dqV27NlevXuXevXsMHz4ceRJFYwWfFuHVKRCkQGpenQmEXtudrFenoZ6MW1ObfVKnj23btjF16lR27dpFixYtMtVXcl6Eza3Nqe1QAWdnZ3x9fRk5ciQPHz7MsFfp14RCoWD+/Pls2rSJJUuWMHDgQPG+fEYI4RMIUmHozruc8/RPMXA4WSQNyuf36Fb4PZMmTcLKyirLx5cc165do0ePHkybNo0xY8Zkyw/vnDlzePXqFVu3bqVy5cqsWbOGpk2bZvl1viTu3LnD4MGDKV26NJs2baJo0aI5PSTBRwibWyBIhVGNrTHWz5jnnYmhATum9sPQ0JAqVaowePBgHj9+nMUjTJqGDRty8+ZNtmzZwvDhw1Eqsz6V2Lhx4zh+/DjPnj1j1KhRrF+/Psuv8aUQExPDL7/8Qrt27Zg+fTrHjh0ToveZIoRPIEiFBE9HE4P0fV0S8iU2q2rN0qVLefLkCaVKlaJhw4b06NEDFxeXbBrxf5QuXZqbN2/y9u1bWrRoQXBwKjnJ0omlpSWjRo3C0dGR/v37c+nSJV69epWl1/gSuHnzJlWrVuX58+d4eHjQu3dvMbX5GSOETyBIA+nydJSBiYEeM9qU18mXmDdvXn799VeePXtG3bp1ad++Pa1bt+batWvZOvbcuXNz5MgRatWqRe3atXn06FGW9j9+/HiOHTtGQEAA/fr1Y/PmzVna/+dMVFQU48ePp1u3bixYsIADBw5QsGDBnB6WIBXEGp9AkA7c/UKzLF9iXFwcO3bsYPHixRQuXJjp06fTunXrbLUUduzYwaRJk9i+fTutW7fOsn5nzZrF27dvmTRpEo0aNeLVq1cYGX3dGVwuXbrEkCFDqFevHqtWrSJfPhHO8SFJFWu2K2xO9+o5n1pNCJ9AkAGyMl+iSqXi4MGDLFy4EJlMxrRp0+jWrVu2ZfS4efMm3bp1Y9KkSUyYMCFLhDYkJIRy5cpx7949hg4dyoABA+jXr18WjPbzIzw8nF9++YWTJ0+yceNG2rVrl9ND+qxIqVhzwsNhY9sCjGxknelizRlFCJ9A8JkgSRJOTk4sWLCAoKAgfvnlF/r3768tT5OVvHz5ko4dO1K9enU2btyYJdeYOXMmAQEBtG3bloULF+Ls7JwFI/28OHPmDEOHDqV58+YsW7aMPHny5PSQPiviawd+/uWThPAJBJ8ZkiRx9epVFi5cyMOHD5k4cSI//fQTZmZmqZ+cDiIjI+nfvz/BwcEcOnSIAgUKZKq/4OBgbGxsuHPnDk2aNOHQoUPUqJH5ckyfA+/fv2fixIlcvHiRLVu20Lx585we0mdHxgvmlv/k4ieETyD4jLl37x4LFy7k6tWrjBkzhtGjR2NpaZll/Ws0GmbNmsXevXs5fvx4krXg0sP06dMJDg6mTJkyeHl58eeff2bRSHOO48ePM3LkSDp16sTChQsznFD8a8bNN5ReW5zxdz5KlMcFFIEvMCvfiPztJgAQ99qL0Gu7ULzzAZkc4xKVsWw+DP1ceTEx0GP/0DqfNM+rED6B4AvAy8uLxYsXc/z4cYYMGcKECRMoXLhwlvW/e/duJkyYwLZt2zK1ZhUUFIStrS0XLlygcePG+Pj4kD9/ytUrPleCgoIYN24ct2/fZuvWrTRq1Cinh/TZkpDkIcrrJshkxDy/j6RUaIUv5uldNMpYTEpXA7k8vp5jZAiFes5DJoOWFQplSbHmtCLCGQSCLwA7Ozv+/PNP7t+/T0xMDBUqVGDkyJE8f/48S/rv27cvJ06cYNiwYSxdupSMPg/nz5+foUOHsnnzZjp16sS2bduyZHyfmr///pvKlStTuHBh3N3dheilQFBkHFe8A5EkMLWth6lNXeQm5jptTMrWwMyuAXIjU+QGxuSu3o64154ASBJcehxIcGTcJxuzED6B4AuiZMmSrFmzBi8vL/LkyUONGjXo378/Dx8+zHTftWvXxtnZmb179zJo0CDi4jL2QzRx4kQOHDhAt27d2LBhA2p1+mv75RT+/v5069aNX3/9lcOHD7N8+XJMTU2z/DpBkXFsuvKU8ftdGLz9DuP3u7DpytNP+uOfVaRUrDk54nwfYpC/hPa1DDh4P/39ZBQhfALBF0jBggVxdHTk2bNnVKhQgWbNmtG5c2f+/fffTPVrZWXFtWvXiIyMpGnTpgQEBKS7j/z58zNkyBCcnJwoVKgQp06dytSYPgWSJLFr1y7s7e2xsbHBxcWFunXrZvl13HxDGbrzLvUXX2TleW+Our7holcAR13fsOq8N/UWX2TYrru4+YZm+bWzi5SKNSeFIuA5YTf2YtlkkHZfrEqD19uI7BhekgjhEwi+YCwsLJg2bRrPnj2jWbNmdO/ene+//54LFy5keLrSzMyMAwcO0KxZM2rVqoW7u3u6+5g0aRL79++nT58+n33+ztevX9OhQweWLFmCk5MTjo6OGBsbZ/l1djm/oNcWZ855+hOn0iQSi9j/7zv7yJ9eW5zZ5fwiy8eQHSRXrDkplO/fEHBgNpbfD8XYSteRKjw263PJJocQPoHgK8DU1JTRo0fz5MkT+vXrx6hRo6hTpw7Hjh1Do0n703gCcrmcefPmsXjxYr7//nuOHTuWrvMLFCjAjz/+iKenJ66urnh7e6d7DNmNJEls3bqVKlWqUKNGDe7evUv16tWz5Vr/ufqnHN8WPy6IUapZ4OT52YqfJEm8fv2a06dP4/s0bZ+tKiwA/70zsajfi1yVElfwyO5izR8ivDoFgq8QtVrN0aNHcXR0JC4ujqlTp9KrVy/09ZOuKJ8Sd+7coXPnzowaNYqpU6emOdNLQEAAdnZ29OnTB319fVatWpXua2cXL1684KeffuL9+/ds27YNe3v7bLtWgqt/dEwswWc3EPvCFU1sJPp5CmPZaCAmZWsgqZUEHV9K3Fsf1OEBFOrtiHFJ+xxx9f+YmJgYHj58iLu7u84ml8txcHDAqEpbvAysUUkyJI0aNGpCr+9BHRFMvtZjQK6HOuo9/runkqtqGyxqd0l0DWN9OROa2zDsu09TmV4In0DwFSNJEufOncPR0ZFXr14xefJkBg0alO6pvNevX9OxY0fKly/Pli1b0nz+pEmTCAoK4sSJE7x8+ZJcuXJl5DayDI1Gw6ZNm5g9ezYTJ05k0qRJGXoYSA8Jrv7quFjCbx8iV+Xv0bMoQMzTuwQdX0rRwevQy52XiPtOGBa2JujoIvJ3mIxxSftP6uovSRKvXr3C3d0dNzc3rcC9fPkSW1tb7O3tdbZChQohk8l0ijWHXttN2I29Ov1a1O8NMhlh1/cgM9D9uykx8SAARvpybv7S9JPl8BTCJxB8I9y8eZOFCxdy7949JkyYwPDhw9MVjB0dHc2gQYN49eoVR44cSVMcob+/P+XLl6dWrVp06tSJ4cOHZ+YWMoWPjw8//vgjCoWCbdu2Ub58+Wy/5oeikBRvto7Gon5vzOzqa/f5rR9I/nYTMS4Zb4VmhyhERkby4MEDHYHz8PDAzMxMR9wcHBywtbXFwCDlacihO+9y7pE/GRETEccnEAiyjXr16nHixAlOnz7N/fv3KVOmDL/++itBQUFpOt/U1JR9+/bRpk0bateunaZ6goUKFWLQoEGYmpqyfv36DDvcZAa1Ws3KlSupU6cOnTp14vr1659E9CBlV3911HuUIa8xLFAi2TaQOVd/jUaDj48Phw8fZs6cOXTp0gVra2sKFizI6NGjuX37NjY2NsybNw8fHx/tut3ixYvp27cvlSpVSlX0ACrrvUGjylgohrG+HiMbW2fo3IySvTa+QCD47HBwcGDv3r34+PiwZMkSbGxsGDhwIBMnTqR48eIpniuTyZg1axbly5enZcuWbNq0iS5dEq/ZfMjkyZOpUKECefPm5erVq580GNzT05PBgwdjZGSEs7Mz1taf9gc2OVd/Sa0i6PgyclVuhkE+qxT7SKurf2hoKB4eHjrrcA8ePCBv3rw4ODhgb29Pr169cHR0xNraOkumeBUKBVOnTuXQoUP8uPAv9nrFZiBXp90nX8MUwicQfKNYW1vz+++/8+uvv7JixQrs7e3p0qULv/zyC+XKlUvx3G7dulGmTBk6derEo0ePmDFjRrJOL4ULF2bgwIG4urqybt26TyJ8KpWKpUuXsnz5cubNm8fw4cORyz/9BFdSrv6SpCHo5HLQ0ydv87RN/X7o6q9SqfDx8dGKW8J0ZUhICJUqVdJOU/br14/KlStnWwWJ58+f06tXLwoVKoSLiwt58+aljKjOIBAIviSCgoJYu3YtGzZsoFmzZkybNg0HB4cUz3n79i2dOnWibNmybN26FRMTk2TbVahQAUmSePjwIcWKFcuOWwDA3d2dwYMHkzdvXn7//XdKlSqVbddKCkmSePbsGVeuXGGTWwwBpqV0jgU7rUYV5k/B7nOQGyRet/t4jQ/Azjicoi/P4e7ujqenJ0WKFEm0Fle6dOlPJu5Hjhxh2LBhTJs2jfHjx+s89GRlsebsQgifQCDQISIigs2bN7NixQqqVq3K9OnTqV+/frLtY2JiGDJkCE+ePOHo0aMULVo0yXbjx4/n8uXLdOjQgXnz5mX5uBUKBY6Ojqxfv57FixczaNCgbK1mn4AkSXh6enL16lWuXLnC1atXAWjUqBGGDm25GWGJQh3/Mxv8zzoUAc8p1Gs+ckPdhwRJpQQkXm/+iXxtxsUHeOsZINOosFP60KW8Ofb29lSsWDHHKkTExcUxefJkTpw4wb59+6hdu3aybbOyWHNWI4RPIBAkSWxsLH/99RdLliyhePHiTJ8+nZYtWyYpJpIksXDhQjZu3MjRo0eTDAR/8+YN5cuXx8jICD8/vywtsHvv3j0GDRpEyZIl2bRpU7ZalGq1Gnd3d65evardcufOTaNGjfjuu+/47rvvKFOmTCJXf1VYAK83Do4XM7metr+8rUaRq2IT/DYMRh2umyKu2PCtmOUv8kld/ZPj2bNn9OjRAysrK7Zt25al5bE+NUL4BAJBiqhUKvbv38/ChQsxNDRk+vTpdO7cGT09vURtE6bA1q9fT/fu3RMdHzduHEeOHGHx4sX07t0702OLjY1l7ty5bNu2jRUrVtCnT58st/KUSiX37t3TityNGzcoXLiwVugaNmyIlVViB5XY2Fg8PT2Z5vQcrwgDkKV/GjInXP2T4uDBg4wcOZKZM2cyZsyYT2JJZydC+AQCQZrQaDScPHmSBQsWEBoaytSpU+nbt28iy83V1ZWOHTsyePBgfv31V50fyTdv3mBra4udnR137tzJ1Hhu3brF4MGDqVChAuvXr8+y+oSxsbH8+++/2mlLZ2dnypYty3fffUejRo1o2LAhBQsW1LZPSN/1ceD3s2fPsLa2pnSNxjwq3AJVBqLHcjpzS2xsLBMnTuSff/5h//791KiRswKcVQjhEwgE6UKSJC5dusTChQt5/PgxkyZNYsiQITrle/z9/encuTNWVlb8+eefOsdGjRrFzp07OXbmIo8Vlni9Cyc8VoW5sT52hc3pXj3lNaDo6GhmzpzJ3r17Wbt2Ld26dcvU/URGRnLr1i3tGt39+/epWLGidtqyQYMG2mm9qKioJNN3GRoaJnI2sbOzw8go/j7+y9WZXlf/8jni9Qjw5MkTevbsSdmyZfnjjz+wsLDIlusERcZx8J5fuv8OMoMQPoFAkGHu3LnDwoULuXHjBuPGjWPkyJFa9/nY2FiGDh3Ko0ePOHbsmHbd7dw9b/ov2oVJ2RoYGhjoxLkleP01ti3AyEbWOFjl0bne5cuXGTJkCLVr12b16tUZqu4eGhrK9evXtVOXDx48oFq1alqhq1evHmZmZrx48SKRwPn6+mJra6uNi7O3t6dy5coUKlQo1evuSnD1V6pTzHCS067+APv27WPMmDHMnTuXESNGZMvUpptvKOsv+3DFOxAgXX8HmUUIn0AgyDQPHz5k8eLFnDp1iqFDhzJ+/HgKFSqEJEksWbKEtWvXcuTIER6rC7DAyYsYhTLFNa+Pf/wjIiKYOnUqx44dY8OGDXTo0CHNYwsMDNRxRPHx8aF27draNTo7OzuePn2qExfn4eGBhYVFovyUNjY2acpkkhzufqFM2naWJ1FGGBkafnau/jExMUyYMIELFy6wf/9+qlWrli3X2ZXD8X5C+AQCQZbx/Plzli1bxp49e+jbty+TJ0+mZMmSHD9+nGHLdpGrwQCUUtqtBxMDOZ1LwZ55I2jatCkrVqxINSD79evXOqEFb968oX79+jRo0ABra2tUKhWenp5aofP396dixYo6Ale5cmXy5cuXuTcjGWrVqsXkmXMJyWPzWbn6P378mB49elC+fHl+//13zM3Ns+U6n8O0rxA+gUCQ5bx7946VK1fyxx9/0L59ezr9OI5fzrwlTq37c6OOiSDYaTWxL1yQm5hj2WggZhUb67SRVHFMr2XKsO6tEl1HkiSeP3+uteauXLlCWFgYdevWpWTJkpiamhIcHMyDBw94+PAhBQoU0FmHs7e3p2zZskl6qGYHDx8+pEWLFrx69eqTXTMt7N69m/HjxzN//nyGDh2abV6bbr6htBw6nfeu51AEvsCsfCPyt5sAQOTDS4T880HRYklCUsVR+IdVGBW2zlJHHyF8AoEg23j//j3r169n00MN+iWrJpreDDy2BCSJfG3GovB/RsDBuRTutxTDAiW1bWRAy4rxLv2SJOHl5aUzdRkXF4e1tTXm5ubExMTw7NkzQkNDqVy5ss5aXKVKlbLNQSOtTJkyBblczqJFi3J0HAlER0czduxYrl27xoEDB1LN1JNZhu68y9GjRwAZMc/vIykVWuH7mEj384Td3EfRYVuQyWRZGtohcnUKBIJsw9LSkuHjJ7Nj0QVt9pIENIpYoh/fpOiQ9cgNTTC2qoipdW2iHl7CsPEP2nYScO7hW1p36o7zlfPI5XIsLS1RKpUEBgZiZWVF0aJFdaYqS5UqlSO5OVNCpVKxc+dOLl26lNNDAeITePfo0QMHBwfu3r2b7dlggiLjuOIdiKlNPQDi3vmgViZfGSTywQXMKjXVWp+SBJceBxIcGZfp6WAhfAKBIFs5eM/v/z9eusKnCnmNTK6HQd7/sqwYFCxN3CuPRH0olUruBOthY2NDrVq1tAJXsWLFHC9um1bOnDlDqVKlsLOzy+mhsGPHDiZOnMiiRYsYPHjwJwlIT6lE08eowgKI831IvjbjdPYnlGjKbKV2IXwCgSBbSa40j0YZg8xIN1+l3MgUjSImUVu5gRE1mnWghfk7JEkiLCxMu6YnSZJ2A3Rep7SltW1W9XnhwgWKFCnCoEGDcmycKpUKLy8vwsLCqFSpErt372bXrl3Zfu+SJBFXtRfqEolT2SVF5IMLGBWvgEEe3aQEaS3RlBpC+AQCQbaSVGkeALmBCVKcrshJcdGJkjcn8D46Dt8w3/+v9yS/ASkel8vlaW6b3nbJtY2KimLPnj38/PPPmJmZZUmf6W338uVLHB0dqVixImPHjsXExOST3HvCNveSP/++TvxQkxRRDy5iUbdHksc+LNGUUYTwCQSCbMXcOOmfGf28xZA0apQhr7XTnYqA5xh84NjyIeqYSIqWKErVqlWpWrVqtoUbZAfr1q2jU6dOjBkz5pNfW5Ik/vzzT2bOnMnSpUv54YcfPvkYVCoV8vOv0tQ21u8R6sgQTG2TrghibpzxOMoEhPAJBIJsxa6wOUb67xJNd8oNjTG1rUvotd3kaz0WRcAzon1uU7jf0kR9SMo4gp+6c+iOB7t37+bp06fkzZtXK4IJW/HixT/LBMp//fUXjo6On/y6kZGRjBgxgvv373PlyhUqVKjwya6tUCi4cOEChw4d4tixYxT4rg96Nt+j0kigUcdvkgZJpQC5nrZiRZTHBUxt6iE3Mk3Up7G+HLsimXfC+bzcngQCwVeFJElYhj4mTqFI8njeFiORVAr81vYl6PhS8rUYqRPKkICRsTErx/SkQYMGKJVKTExMqFKlCiVKlOD9+/ds2LCBGjVqUKBAAZo3b86UKVPYu3cvjx8/RqNJe6B0duDh4cG7d+9o1qzZJ72uu7s7NWrUwNDQkDt37nwS0YuNjeX48eMMGDCAwoULM3/+fCpWrMjdu3e5un0J+vr6hN3Yx6tlXQh3PkjUw0u8WtaFsBv7AJBUCqK8rmNWOen3SgK6VSue6XGKOD6BQJDlqNVqDh8+jKOjI2q1Gqve83gUYZBieqpkkTRoXrkyu1lRfvjhB/T09Hj58iWnT5/m9OnTXL58mQoVKtCqVStq1qyJWq3Gzc2N+/fv4+LiQlBQEPb29jqWYcWKFbUJpLObiRMnYmRk9MksPkmS2LJlCzNmzGDFihX0798/W68XFRXF6dOnOXToEKdPn6Zq1ap07dqVzp07J6qLOHTnXc55+mfo7yAr4/iE8AkEgixDqVSya9cuFi1ahKWlJTNmzKBt27Z4vA6nx+abiTK3pAUTAz1+rZ+bjQum8f79e5YsWUKrVq20U5pxcXFcu3ZNK4TBwcG0bNmS1q1b06JFC+RyOa6urri4uGi3p0+fYmtrqxXCatWq4eDgkOWxbEqlkuLFi3Pt2jVsbGzSfX56KxdEREQwbNgwHjx4wIEDB7ItdCI8PJyTJ09y6NAhzp8/T+3atenWrRudOnXSKdn0MW6+ofTa4kyMUp3ua4rMLQKB4LMiJiaGrVu3snTpUmxsbJg+fTqNGzfWipOnpyctRv6Gcd3eKKW0r7B8mKNRkiSOHz/OL7/8QvHixVm6dClVq1ZNdM6LFy90rMFKlSrRunVrWrduTbVq1ZDL5cTExODh4aG1Cl1cXHj48CHFihVLtG6Y0g95apw4cYJFixZx48aNdJ2XkcoFrq6u9OjRg8aNG7N69WpMTJL2js0o79+/5/jx4xw8eJArV67w3Xff0bVrVzp06JAuRyORq1MgEHzRhIWFsXHjRlatWkXdunWZNm0atWrV0mnj4eFBy5YtWbRoEXKb79JUnUHSaDA21GNW2wqJfuyUSiV//PEHc+fOpWXLlsyfPz/JCugQv+b0oTUYEhJCq1attNZg3rx5tW0TYtw+tAxdXFwwMzPTWoUJYliyZMk0OdF07dqVVq1a8dNPP6XaNoH0Vi6Y3tqOSNfT/Prrr6xZsyZLKtsnEBgYyNGjRzl48CDOzs40a9aMrl270q5du0ylfxPVGQQCwRdHYGAgq1evZtOmTbRq1YqpU6dSqVKlRO3u379PmzZtWLVqFb169QJg1+lrzNx9FaPS1ZBBkqV5CqmDyPP2X47/uTbZMYSHh7NkyRI2btzI0KFDmTp1aqo/xs+fP9eK4JUrV6hcubLWGqxatWqiNGcJSbA/FsPY2FiqVKmiYxna2tqir/+fo3xQUBDW1ta8fPkyzSKREWtIrlFh9OgUx5ZPytB06se8efOGI0eOcOjQIe7fv0/Lli3p1q0brVu3ztIsOe5+oWy47MOlx4HJ/h1kV4kmIXwCgSDN+Pn5sWzZMnbs2EGPHj2YMmUKZcqUSbLtv//+S/v27dm4cSNdunTR7u/UqRPNmzen18AhHLzvh9fbCPYeOkqPTu2pWDwP3aoVxwgldnZ2/P3339StWzfFMb1+/ZpZs2Zx6tQpZs6cybBhwzA0NEz1XmJjY7l69apWCENDQ3WswYSq60nh7++fSAzfvHlDpUqVtJaht7c3r1+/Zu/evamOBZJf/wo6sYzYF25olLHomVliXqcruR1a6rQxNpBzYGjdDAvEq1evOHToEIcOHeLhw4e0a9eOrl270rJlyyyfMv2Y4Mg47d/BpyrRJIRPIBCkio+PD4sXL+bQoUMMHjyYn3/+maJFiybb/saNG3Tu3Jlt27bRrl077f5Hjx7RpEkTnj9/jqnpf3FaFhYWvHz5UqfW3s6dO1m3bh23bt1KU8Jpd3d3pkyZwtOnT1m0aBFdunRJV0zfs2fPtCJ49epV7O3ttdZglSpVUh1DWFgYbm5uWiHcv38/arVax4mmatWqVKlSJcmagsl5PCoCX2JgWRSZvgHKYF/e7ZlGwe5zMCpsrW2TEY/Hp0+fcujQIQ4ePMizZ8/o2LEjXbt2pVmzZp/M4zWnEMInEAiSxd3dnYULF3L+/HlGjRrFmDFjUnVkuHz5Mt27d2f37t20aNFC59gPP/xAuXLlmDFjhs7+QoUK4ebmRuHC/+Vm1Gg01KlTh7Fjx9KvX780j/ncuXNMnjwZMzMzli1blqrFmBSxsbFcuXJFK4Th4eFaa7B58+YpWoMAbm5utG/fHk9PT511w/v37+Ph4UGhQoV0xLCkbSW6/PUwyZymH6IM9sN/zzQsvx+KWfmGOseM9OXc/KVpilaSl5cXBw8e5NChQ7x584bOnTvTrVs3GjVqlKnK8l8aQvgEAkEibt26haOjI/fu3ePnn39m2LBhaXL1P3v2LH379uXAgQM0adJE55ivry8ODg48ffo0kXCUKFGCa9euUbKkbvD6zZs36dmzJ15eXpiZmaV5/Gq1ml27djFz5kzq1KnDwoULsba2Tv3EZHj69KlWBK9du4aDgwOtW7emTZs2ODg4JLIsJ0yYQK5cufjtt9+SHJu3t7fONOkDdRGManRBpp/0FG3wmQ1EeVxAUsVhWKgshfouSpTT1FhfzoTmNjqVCyRJwsPDQ2vZhYaG0rVrV7p27UqDBg0+q2K4nxIhfAKBAEBbQWDBggW8ePGCKVOmMGjQIIyNjdN0/qlTpxg0aBCHDx+mQYMGiY5PmDABPT09li1bluiYjY0NJ0+eTNI5o0+fPpQrV465c+em+55iYmJYtWoVy5cvp2/fvsyaNYv8+fOnu5+P+0ywBp2cnIiKiqJVq1a0adOG77//HlNTU4oXL87NmzfTLLbj97tw1PVNim0kjZq4117EvvLAok43ZHqJM052rlKMFT0cuHfvnlbslEolXbt2pVu3btSuXfuzq1OYEwjhEwi+cTQaDcePH8fR0ZHIyEimTZtGr1690jX1deTIEYYPH87x48epXbt2ouPBwcGUK1cODw+PRNk8ACpXrszu3buxt7dPdOzVq1dUrVoVFxcXSpQokb6b+z8BAQHMmzeP/fv3M2nSJG11gqzAx8dHK4LXr1+nRIkSREVFcezYMezt7dO0zjh4+x0uegWk6XrB/6zDIH8JzGt0SHSssDqIdwdmY2BgQLdu3ejWrRvVqlX7LPOX5iRC+gWCbxSVSsWuXbuoXLky8+fPZ9q0aTx48ID+/funS/T279/PiBEjOH36dJKiB7B+/fokU1glYGRkRFxcXJLHSpQowejRo5k6dWqax/QxBQsWZN26ddy4cYPbt29jZ2fHzp07sySPp7W1NWPGjOH06dMEBARgbm5O2bJl6dq1K8WLF+fHH3/k0KFDhIWFJdtHchUskkSjQfX+bZKHTA3ig/y9vb1ZuHAh1atXF6KXBEL4BIJvjNjYWDZt2oSNjQ1//PEHK1eu5M6dO3Tu3Dnd02A7d+5kwoQJnDt3jmrVqiXZJioqinXr1jF58uRk+zE2NiY2NjbZ41OmTOHatWvcvHkzXeP7GBsbGw4fPszu3btZv349NWrU4MKFC5nq80MiIiLw9PTk6NGj+Pj4cPnyZRwcHNiyZQvFixenUaNGLF68GHd3dz6cbIuvYJFYoNRRoUQ9uoJGEYOkURPz7B5RnlcwLlUlUVtjfTk9WzZMs5X5LSPKEgkE3wiRkZFs3ryZFStWULVqVXbu3En9+knXPEsLW7duZfbs2Vy4cIHy5cun2K5hw4Yp5o1MyeIDMDMzY+HChYwfPx5nZ+dMr1M1aNCAW7ducfDgQYYOHYqtrS1LlixJMgg/OZLKoxnk40arTt21jkDlypWjXLlyjB07lujoaC5fvoyTkxOdO3cmLi6O1q1b89133+H9yIdYVZXEzi0yGREupwk+swEkDfoWBbFs9hOm5RJb1llVueBbQKzxCQRfOSEhIaxdu5Z169bRrFkzpk6dSpUqVTLV54YNG1i0aBEXLlygXLlyybZTKpVYW1vz999/J0pl9iFt27ZlxIgROjF/H6PRaKhbty6jR4/O0ooDCoWCjRs3smDBAjp27Mi8efMoUqRIsu1TyqOJSomBoQFNyxfSyaP5MZIkcefOHWbNmsXFixdRqVTk7zwds3J1ICOirtFgGurDrmGNkrW8Bf8hpjoFgq+Ut2/fMnnyZMqVK4evry83btxg3759mRa9lStXsnTpUq5cuZKi6AHs27ePsmXLpih6kLrFByCXy1m1ahXTpk0jMjIy3eNODkNDQ8aNG4e3tzeWlpZUqlSJ2bNnJ3mNXc4v6LXFmXOe/sSpNInj7vQNUGrg7CN/em1xZpfzi0R9BAUFMWPGDFq1aoWfnx8ymYz8+fPTo6IFMin9VQsAjI306VHRgrZt29K/f39evUpbtXOIt1w3XXnK+P0uDN5+h/H7Xdh05SnBkSl/Hl8yQvgEgq+M58+fM2LECCpWrIhSqcTV1ZU//vgjS/I4Llq0iA0bNnDlyhVKly6dYluNRsPixYvT5JRibGycqvAB1K1bl0aNGrFkyZI0jzmt5MmThyVLlnD//n2ePn2KjY0NmzdvRqVSAR/m0Uw5sTKAJEGMUs0CJ0+t+Pn7+zNlyhTKlSvHnTt3kCQJHx8fmjZtSt26ddm5ej4FX1/HQJY+hxsTAzkz25RnztjBeHt7U7p0aapWrcrUqVNTdKhx8w1l6M671F98kZXnvTnq+oaLXgEcdX3DqvPe1Ft8kWG77uLmG5qu8XwJCOETCL4SHj58SP/+/alRowZ58+bFy8uLVatWJVu5ID1IksTcuXPZvn07V65cSVNYgZOTE4aGhjRv3jzVtkZGRik6t3zIokWLWL9+PS9fvkxT+/RSsmRJdu3axYkTJ9i/fz/29vas23OC+R8ljw6/d4K3f43n5dJOBJ1cmWRfMUoN8095MmjibMqXL4+fnx8lS5bk6tWrqFQq9PX1MTAwoGvXrrx48YLbu5cxu0NlTAz0SM0/RYaEsb5uuZ7cuXMzb9483N3dCQwMxMbGhrVr16JUKnXOTc1yjf3/vpQs1y8ZscYnEHzh3Llzh4ULF3Lz5k3GjRvHyJEjM1Uy5mMkSWLGjBmcOHGC8+fPU6hQoTSd16BBA8aMGUPPnj1TbTt8+HAcHBwYMWJEmvqeM2cOjx8/TnMC6IwiSRJOTk6MPeCBukhFnVJK0Y9vgkxGzPP7SEoF+dtNSLoPjYYCcW8wubeLmzdvotFosLe3Z/LkyXTo0AFzc/NE56RUucBQT4ZarcY45Cmvz/9J9VL5tTlFK1SooOPRmZC/9NmzZyxatIjOnTuz+/bLHK+Hl9MI4RMIvkAkSeLKlSs4Ojri5eXF5MmT+fHHH3USP2fVdSZOnMilS5c4d+5cmrOeXL9+nYEDB/L48WOdUj3JMX78eEqWLMmECUmLx8dERUVhZ2fHvn37MuWZmhaCIuOov/hisnk031/diTo8KFnhA9CoFAT8/hO2pYpx4MABbG1t03Tt1CoXREZGcvHiRW06NUmStCLYrFkzbRmhs2fPMnnyZIyK2BBa4wcUHy0lvlreTee1pFKQu2ob8rYYrt2XlRXQcxoRziAQfEFIksSpU6dwdHQkKCiIqVOn0q9fvzSV4UkvGo2GMWPGcOfOHS5evJhqYuYPWbx4MZMnT06T6EHanFs+xMzMjEWLFjF+/Hhu376drWm4Dt7zy3QfMiQGz/+d9aM7pyvGLl8uI53cmx+TK1cuOnToQIcOHZAkCU9PT06fPs3atWvp168ftWvX1grhvXv3aLfoGP4RGmQfvV8lJh7U/l+jiMFvbX9M7XTTzsWq1Gy47JOuChCfK2KNTyD4AlCr1ezfv58qVaowc+ZMxo8fj6enJ4MHD8420Rs2bBiurq6cP38+XaL34MED7t69yw8//JDmc1ILYE+K3r17o6enx65du9J1XnrxeheeatWE1JDpG2FUsEy2BpbLZDIqVKjAxIkTOX/+PG/evGHMmDE8efKE1q1bY12xCt6RBolE72OiH99Ez9QCI6uKOvslCS49DvwqvD2FxScQfMYoFAp27tzJokWLKFiwIAsXLqR169bZ+gOqUqkYPHgwvr6+nDlzJt1Vt5csWcLYsWPTnNwa4i2+iIiIdF0nIbyhW7dudOnSJUurg39IeIwy9UZp4Njps1xZPBhTU1PtZmJikuT/03ssKYs3d+7cdOzYkY4dOyJJEvP+vskOl5BUxxnpcQGzSk2T/BuTAQfv+6VohX4JCOETCD5DoqKi+OOPP1i2bBkVK1bUZj/J7lRUSqWS/v37ExISwqlTp9K9Zvjy5UtOnTrFmjVr0nWesbExQUFB6ToHoE6dOjRu3JjFixcnWQIoPYSFheHt7c3jx495/Pix9v/vSrfE2O67TPUN0Lh+bUaNaUZ0dDQxMTFER0drtw9fBwYG6rxOqW1MTAwxMTEYGhqmKpIvijRCbVoqxTGqwgKI831AvjZjkzweq9Lg9TZ9DyifI0L4BILPiNDQUNavX8+aNWto0KABR44coUaNT7OmolAo6NWrF3FxcRw/fjxdFlsCy5cvZ8iQIUlWGE+J9IQzfMzChQupUqUKQ4YMSVTP72OUSiXPnz9PJG6PHz8mMjISGxsbbGxssLW1pWPHjtja2nI9yJgN118lmu6UNGpI2CQNkkoBcj1k8sQ17oz15dS2LU716llvKUmSRGxsbKoiufWJAQFRKfcV+eAiRsUrYJCncLJtwmOzxgLOSYTwCQSfAQEBAaxatYrNmzfTrl07Ll26RIUKFT7Z9WNjY+nWrRsGBgYcOXIkQ+uGQUFB7Nq1i4cPH6b73PQ6t3yIlZUVY8eO5ZdffmHfvn1IkkRAQECS4vby5UuKFSumFbeqVavSq1cvbGxsKFasWJIWdcnIODZcT5wJJezGPsJu/BdOEfXwEhb1e5OnYd9EbbMzj6ZMJsPExCTVMku39rvgnUrNv6gHF7Go0y3FNubGX36ldiF8AkEO8urVK5YtW8auXbvo3bs39+7do1SpUp90DNHR0XTu3Jk8efKwa9eudJUk+pC1a9fSrVu3FPNcJkdGnFuio6N58uQJjx8/RqPRcOLECSpUqMCbN2/Q19fXiputrS2DBg3CxsYGa2trjIyM0nUdQ00cFtGv8dcvpOMYkqdh3yRF7mNkMmhiW4B8udJ33axAkiSePHnC6dOnuX73HVKhmsgMkh5HrJ8n6sjgRN6cH2KsL8euSO7sGu4nQwifQJADPH78mMWLF3Ps2DGGDBnCo0ePKFw4+emljJBU9QC7wuZ0r15c+yMcGRlJ+/btsbKyYtu2bWkOP/iYyMhINmzYkOGyQclZfBqNhlevXiWy3Ly9vQkICKBMmTJacevXrx9XrlzhyZMnFChQIEPj+JgTJ04wYsQI8pWrCjUGgTz94mWsr8fIxmmrxJ4VxMTEaKtAnD59mpiYGNq0acOYdq1Z4GGMQp106HbUgwuY2tRDbpT8uu7XUgFCCJ9A8AlxcXFh4cKFXL58mdGjR+Pj45OuUIG0kFL1AGP9d6w8701j2wIMrFGEKUN6Ymdnx+bNm9HTS7w2lVb++OMPGjdunGrS6uRQqVS8ffuWHTt26Iibj48PefPm1Yqbra0tbdu2xdbWlpIlS+qMWZIk6tWrh5OTEwMHDszwvQAEBgYybtw4bt26hZWVFW+fexCr2INZg/5o5Gn/2YzPeGKX7UHfT58+1VaBv3btGlWrVqVNmzYcOnRIpz7fDcVdznn6J5lrNF+r0SleIyct16xGZG4RCD4BN27cYMGCBbi5uTFx4kSGDh2aLe738YmUvYhVpZxIWQZIagUV4x5zYuWUTAWAKxQKypYtm6ojjkKh4OnTp0l6TkZFRaGnp0f79u2xtbXVTlOWK1cuXe/T7du36dKlC48fP87Q+ytJEnv27OHnn3+mXbt2nDlzhsjISGrXro2pqSkuEbmQV++GRibXSV/2MTJZvKU3o41dtqT5io2N5erVq1qrLjw8nFatWtGmTRuaN2+erHORm28ovbY4E6NMfxWIrylzixA+gSCbkCSJs2fP4ujoiJ+fH7/88gsDBw5M9xpTWvmvesCnzcH4119/sXv3bs6dO4ckSbx9+zZJcfP19cXKykpruX24Buft7c2sWbO4evVqhseRQP/+/SlZsiTz589P13mvXr1i+PDh+Pn50a5dO5YvX06ePHkYOHAgO3bsoE+fPowaNYo6bXrSZtJKnF9FJsqjaawvRyLeMhrZ2DpLReLFixdaq+7KlStUrlyZNm3a0Lp1a6pUqZLmh5ec+jv5nBDCJxBkMRqNhiNHjuDo6EhcXBzTp0+nR48eGV4/SwtuvqG0HDqd967nUAS+wKx8I53ckRFuZwi/dRB11HuMilcgX5tx6OfOB2TsST4yMpInT57g6enJuHHjsLe318bBGRsbJxI2W1tbypQpk6y36O3btxkzZgz//vtvpt4HAD8/PxwcHLh37x658hdJdZ1To9GwceNG5syZw7Bhw7h69So3btygT58++Pv7ExAQwJYtW6hZsyZjxozBwMCAFStWpJpHM7MoFAquXbumFbugoCCtVdeiRQvy5s2b4b7TPDOQzZZrTiGETyDIIpRKJXv27GHRokWYm5szffp02rdvn615JBMYuvMuR48eARJXC4h96U7gscUU6u2IQd6ihJz/HWWQL4X7LgLif9xaViiUKAejWq3m5cuXSYYFhISEYG1tTe7cubWZ/+3s7LCxscnQmqWrqysDBw7Ezc0t0+8FwJg5y7gebEp0nviagXFJWGWNbQvQtrQBS6eORqVS0alTJ+bOnYupqSkDBgxgx44dTJo0iYkTJ2JgYMDLly+pVq0aXl5eWeY88zG+vr5aobt06RLly5endevWtGnThurVq2fp31JKFSCy03L9HBDCJxBkkpiYGP7880+WLFlC2bJlmT59Ok2bJp3yKTv4uHrAx9UC3l/cikalIF+L+JI/qohgXq8fSNFhWzCwjA89MJDDuFKBvH72WCtuz549o2DBgomsNxsbG0qUKIFMJqNevXr8/PPPdO/ePVP34OXlRceOHXn8+HGm+oF4a2a+kycxcapU8lJKSEoFNQ18eX15Hy4uLtSuXZuoqCjMzc3ZvHmzjrPO4MGDKVasWKYzxHyIUqnkxo0bWrF7+/YtLVu21Fp12SWwH5LdluvniPDqFAgySHh4OJs2bWLlypXUqlWLffv2UadOnU8+jjRVD9B5vo3/vzLwpVb4lEolB++/5vtiZvTu3RsbGxvKlSuXYsqyq1evEhQURJcuXTIzfCBzAewfkrB+FatMXIEgMTJkBkbcUVoRqSlEo0aNcHFxYdGiRQwaNEjnweXx48ecPHkSb2/vTI/xzZs32jJC58+fp1y5crRu3Vo7nZoZ79qMkFoFiK8RIXwCQToJCgpizZo1bNiwgZYtW3L27FkqV66cY+NJrXqAcZnqBB1bQu6qrdG3LErYjX2ADEn1gdDoGVC1cVtm9qyS5usuWrSIKVOmZMkPtbGxcaaFz803lAVOXvg7HyPK40KitU5F0CuCT65A9f4tAIaFrbFsPgzD/CXI9d0A9N+dx919e5LxlL/++is///xzulOxQXyohrOzM05OTjg5OfHq1StatGhB+/btWb9+fZoL+wqyDiF8AkEaef36NcuXL+evv/6iW7duODs7Y2396QKTkyM8VpXicZNSVcjToA+BRxzRxMVgXrMDMiMT9P7v3PJfP2nPwejm5oarqyuHDx/O0Jg/JjO5OhNYf9mHWJUa/Vz5sKjXU7vWmYB+rrwU6DQNPYuCIGmIuH+KoGNLKPrjOuT6hli1HJyk6Lm6unLt2jW2bduW5rG8e/eOf/75h9OnT3Pu3DlKlSpF69atWb9+PbVr185WRydB6oh3XyBIhadPn7JkyRL+/vtvfvjhBzw8PChWrFhOD0uLuXHqX+Pc1duRu3o7AJQhrwm7uR+DAqU+6iftqcqWLFnC+PHjM5TIOikya/EFRcZxxTsQSQJT23oAxL3zQa38r+KD3DgXcuP42D5JAplMrrX+JGTaWnMfr2vNnDmTadOmYWZmluz11Wo1//77rzau7unTp3z//fe0bt2alStXUrRo0QzfmyDrEcInECSDh4cHixYt4syZM4wcORJvb2/y58+f08NKhF1hc4z03xGrUCZZLQCNGuX7NxjkL4k6PJDg02vJXaMDesb/BXinJwfj8+fPOXPmDBs3bsyye0iw+CRJypBTUHqqpL9a2RNJEQOShMUHuTaTqjV38+ZNPDw8OHToUKJ+AgMDOXPmDE5OTpw5c4ZixYrRpk0bVqxYQd26dTOc81SQ/QjhEwg+4vbt2zg6OnL79m0mTJjAxo0bMTc3z+lhJUu36sVZed472WoB5jU7EnR8GarQt8gMTchV+XvyNOyn00d6cjAuX76cn376KUvfEz09PeRyOSqVKkOCkZ4q6SUm7EejiCXqwQX0zAtq939ca06SJGbMmMHs2bMxMjJCo9Fw9+5drVXn5eVFs2bNaN26NUuWLKF48S8/h+W3ghA+gYD4H7mLFy/i6OiIj48PU6ZMYd++famWevkcyJ/LiEY2BTinTr5aQNEf1yV7fnpyMAYEBLBnzx4ePXqU4fEmR0KFhowIX2rrnB8jNzQmV9XW+K3ui9FPG9Ezy/P/fv5b57xw4QK+vr4YGhrSv39//vnnHwoWLEibNm1YuHAhDRo0yFD5JkHOI4RP8E2j0Wg4efIkjo6OhIaGMm3aNPr06fPFTVONamzNtSdBGcrBmJ7qAWvWrKFnz55ZXkkC/gtpyJ07/WVv9NQZWB+UJCRVHOqIYK3w5TbW5969e5w6dYolS5ag0Wg4cOAAbdq0Yf78+akWuhV8GQjhE3yTqFQqDhw4wMKFCzEwMGDGjBl06tTpk8dQZRUOVnmY0cYugzkY01Y9ICIigk2bNnH79u1MjDR5MuLgkpBu7NiBG5jU6o5M3zDZyuixL93RMzHHoGApJGUcoVd3IjfOhUF+KwDkGhV/b1nFP363sbW1pVChQjx48OCLsPoF6UMIn+CbIi4uju3bt7N48WKKFSvG0qVLadmy5SfLspKdJORSzK4cjL///jvff/89ZctmbbBzQt1Ag++GMPHYEwrnC0iUTzMpvLy8GDBgAM+ePcPIIj96dXuhIfnK6AYFShJybjPqiCBk+oYYFbWhYI+5yPTjpytlcjknVs/Awa4sVapUYfXq1UL0vlJEyjLBN0FkZCS///47y5cvx8HBgWnTptGwYcOcHla2kJCD8YzHa/T09FBJ/4l6RnMwxsXFUbZsWU6cOEHVqlWzZJwp1w38L5/myEbWOFj9N06lUsnChQtZtGgRMpmM77//Hg8PD0yajyUqrzXx/pnp48N8pXv27GHdunXcuHHjq3ggEiRGCJ/gq+b9+/esW7eOtWvX0rhxY6ZNm5ZlP9yfO9YVq9B/9gZCJdNM52Dctm0b+/fv58yZM1kytoxWB7h37x7du3fn3bt3lClThoiICKytrZk2bRo7T13lsn4VZPrpzy+ZUKGifCEzypcvz5YtW2jSpEkm7lDwOSOET/BV8u7dO1auXMkff/xBx44d+eWXX7C1tc3pYX0ywsLCKFq0KGFhYZnOEqJWq6lYsSIbN27MEjHISD04YwM5pd67cHHzHExMTDA1NaVChQrMnj2bIkWK0KtXL4oWLUrJ7/vj9NYIjSy9VdLja81t2bKFAwcOcO7cuYzcmuALIfvrpQgEn5AXL14watQoKlSoQExMDC4uLmzbtu2bEj2ITylWuXLlLEmNdezYMczNzWncuHHmx/X/fJofip6kUhLktBq/DYN4taI7b7aNIebpXZ3zYpUaHhnZYl6qMtWqVWP//v2cP38eZ2dnqlatSmRkJJcuXeLxyS00yh2MkZ6M1GYpZbJ4Sy9B9GJjY5k3bx4LFizI9H0KPm+Ec4vgq8DT05NFixZx8uRJhg4diqen5zed/NfFxSVLpnQlSWLx4sVMnTo1S9a7EvJp6lxDo0Y/d34K91mEnkUBYp7eJfDYYooOXod+nv8+Q7m+IQ2H/cZgGzU7d+6kTZs2xMXF0bFjRwYMGEDTpk3JlSs+G01Gas1t2rSJ6tWrU6tWrUzfp+DzRgifIEdI8ORLqTJ2Wrh37x6Ojo5cv36dsWPH8vTp0wxl0P/auH//Pg0aNMh0P5cvXyYsLIxOnTpluq8P82l+iNzQWCfw3tS6FvoWhYh756MjfMjk3H8Xh+/h1bx68ojvv/+enTt3Jhn3Z188D5v61UhzrbnIyEgWLVokpji/EYTwCT4pKXvyvWPlee8kPfk+RJIkrl27hqOjIw8fPmTSpEns2LEjxSTC3xouLi6MGTMm0/0sWrSIyZMnZ0nl77Tm01RHvUcZ8hrDAiUSHdPX1+e1kRXLl/9I//79U+0rrbXmVq9eTdOmTXO0vJTg0yGcWwSfjIx68iUgSRKnT5/G0dERf39/pk6dSr9+/TAy+jqrRGeU2NhYLC0tef/+fZqqJyRnfdsZvqdvt47xcXJZ8B6P3+/CUdc3KbaR1CoCDsxG37II+VqNTrJNs7K52Trku0yPJ4H3799Trlw5bt26pVNxXfD1Iiw+wSchPZ58kgQxSjULnDwB6F3TisOHD+Po6IharWb69Ol069ZN1DRLBg8PD2xsbFIVvdSs7ziFAtshy/EKiMHBKvPCFxatSPG4JGkIOrkc9PTJ23x48g0NsjaofOnSpXTu3FmI3jeE+OUQZDsJnny+h5cQ+8INjTIWPTNLzOt0JbdDSyS1kqDjS4l764M6PIBCvR0xLmlPjFLD3OMPmDvuR/LLo/ntt99o27atCCpOhbQ4tqRmfceqNCDX57kiN722OKcrw4skSfj7++Pq6sqVK1e4du0ajx49Qt5gMLkqJh0OIUkSwU5rUEeFUrD7HGR6yf80paduYGq8e/eOzZs34+rqmmV9Cj5/hPAJsp0ETz7zOt3J13ocMn0DlMG+vNszDcNCZTEsUBKj4hXJXaMjQUcX6Zyr1EhU7zWZg+O/jrRinwIXFxeqVauW7PF0Wd/oWt8fi19cXByenp64ublx+/Ztbt68yZMnT1AoFDq19UxMTChnrkcYGlRJRFGFnFmPMtiXQr3mIzdI3rpMT93AtLBw4UL69++PlZVVlvUp+PwRwifIVj705DMs8GFmexkyZKjev8WosDXmNTvG7/7YiUIm50GIREiUIt3ZRr5V7t+/T58+fZI8llQcHYAq1J/gsxtQvPYCfQPMbOtj+f1QZPL4pN0xSg3zTz0iyteTsOce3Lt3jzt37uDr64upqSkqlQqlUql1MLKwsKBJkya0adOGJk2aUKpUKYIi46i/+CKqj+rmqcICiHT9B/QM8Fv7n8NK3lajElmI6akbmBqvXr1i165d2VJiSfB5I4RPkK187MkXfGYDUR4XkFRxGBYqi0nZGqn2kVRlbEHSqFQqHjx4gIODQ5LHk4qjAwg+uwE90zwUH7MTTWwU/vtnEnH/FOY1OmjbxCjULDjiQuz5dYSGhlKgQAFKly5NUFAQRkZGNG/enKZNm9KkSRNKly6dyELX1g185M+Hs6v6FgUpOfVkqvcmaTQUUodgIk9/6aWkmDdvHsOHD/+m4z2/Vb4a4cuquDBB1iBJEuHh4dz1eavjNJGv5UjyNh9G3GsvYl95INNLfb3m48rYguR5/PgxxYoVS7I6enJxdACqMH/Mq7dDpm+IXi5DTEpXRxn0SqeNTC5HVtwePVML8srlNGrUiMaNG9OkSROsra3TNBVto3rOGaUeshSmM5PD2FAP85e3KF9+JsuXL6dr164Znv729vbm2LFjeHt7Z+h8wZfNFy98WREXJkgeSZKIjIwkODiYkJAQ7b8f/v/jfcHBwbx//x4DAwPydpqOQSnd9SaZXA9jq4pEPbxEhIuTjlWRHB9WxhYkz/3795N0bImNjWXV8duo1SqSylRoXqMjUY+uYlSiMprYSGKe3SVPw36J2unr6/Hjsh3M7FonXaIjSRILFy5k06ZNjFyxl+3u4RmoG1iefnXacPnyZcaMGcOmTZtYs2YNFSpUSHM/CcyePZsJEyZgaWmZ7nMFXz5ftPClyTMNOPvIn6veQenyTPvakCSJqKioVEXr430hISEYGhqSN29e8uXLR968ebWbsbExKpUKuVyOvr4+MpmMuLg4IiIisLKyws7OjojihUk2bFmjQfX+bZrGHxUaRExMjKiPlgr379+nTJkyODk54ebmhru7O25ubjx//pyi3aajLp6004uxVSUiXf/Bd0UPkDSYVWqGiU3dRO1UkpwQtUm6RE+hUDB8+HBcXV1xdnamaNGiFC/+gvlOnsQqVCBLPjg+qZjOxo0b4+LiwsaNG2nUqBH9+vVjzpw5WFhYpGk8bm5uXL58mS1btqT5HgRfF1+s8P159TETxo0l8pkLmthI9PMUxrLRwERrRqHX9xJ2fTcFe81ngVO8On7p4hcdHZ2qaCV1TE9PT0e8Ev6fL18+ChUqRPny5XX25c2bF1NTU3x9fXn8+LHOdv78eWQyGba2ttja2lKzZk3t/62trbUxZJuuPGXleW+iw0KIfemGiXUtZPqGxL5wJcrzCvk7TAHiExXz/5UfSaOKr5qtZ4BMJkMPNY9uXKDAjO7UrFmTZs2a0axZM2rWrPlNx/LFxMTw8OFDrbi5u7tz/fp1zMzMuHPnDkWLFsXExAQ7Ozv09fUJVGhIaoJRkjT4H/iV3FVaUbj/MjTKGIJPrSb08p9YNhmcqH16rO/Q0FC6du2KmZkZV69e1ebSrG4Rg97ltVg6tCPKohRymSxN+TQT0NfXZ8yYMfTq1Yvp06djZ2fHwoULGTBgQKpZZmbNmsXUqVO1YxF8e3yRmVvcfEPpsf4y/tcPkKvy99rEtkHHl+oktlW+f0vg4floYiLI1+5nTEpV0dbdSmsBzuwkNjY2TVOHH++TJCmRQCUnaB9aaMlZS5Ik8fr160Ti9vjxY96+fUupUqW0ovbhlj9//lSf/BM8+aLD3xN4ZCGKgOcgadC3KEju6u3JXaUVAH4bBqMOD9A5t9jwrejnKYSeTOLmL00xlau5evUqFy5c4MKFC7x48YLvvvuOpk2b0qxZMypVqpQlqbVSu59PvZYsSRJ+fn46Aufm5saLFy+wsbGhcuXKWnf8FStWULVqVR48eECJEiWoVasWtWrVombNmux4IueEx7tE/aujw/Bb0xer8fuRG8d7ZUZ73yL06k6KDtmQqH3nKsVY2bNKquN+/vw5bdu2pUWLFixfvhw9PT0kSeKvv/5iypQpODo6MmTIEEKiFGnKp5kSd+7cYfTo0cjlctauXUuNGkk7TTk7O9OjRw+8vb3TlNVG8HXyRQrf0J13Oefpn2h6883W0VjU742ZXX0A/Pf/inmN9gSf2Ui+NmMxKVVFp9JyVhEXF5dIqNIiZCqVinz58qVZvD60wjJCZGQk3t7eicTN29sbMzOzJMWtdOnSGBhkLmA4uc8rTUgajIO9UV/exNy5c+nVq5dW3AIDA7l06ZJWCMPDw7Ui2KxZM8qUKZOpcX9IRquFp5fo6OhEVpy7uzuGhoY4ODhgb29P6dKlkSSJd+/ece/ePf7991+MjY2pWLEizs7OHDlyhOrVqyea+kuwvuNUidfWXm/8kVxVWmFeuwuSIoagU6uQGRhRoMNknXaSMg4L3xsMqFmETp06YW1tneR9ODs706VLF6ZPn87o0fGpxyIiIrRTnvv376dSpUoZfp+SQqPRsH37dqZPn067du1wdHSkQIECOm2aNWtG7969GTJkSJZeW/Bl8cUJX4IF8fGXVx31Hr8Ngyk6eA0G+ayI8rpO1INLFOw2C78Ng7XCB2CkL+fmL00TPU0qFArev3+f5qnDhH8VCkUicUqLNWZqaprlQdlqtZpXr14lab2FhIRgbW2NjY1NIoHLzooGbr6h9NriTIwy/W7oepKa6BMLGNGzLU5OTkRFRTFv3jw6deqU6L17+fIlFy5c4OLFi1y4cAFjY2OtEDZt2pTChQtnaPyZzTGaFJIk4evrq2PBubu78/LlS2xtbbUiZ2Njg0ajwcfHh3///Zc7d+4QEhJCzZo1day5okWLcujQIbZv387x48eTvGZy3x0Ahf8zQs7/jjLgOcj1MC5pT97mw9Az03X+MNSXM7+GxAWnYxw7doz8+fPTqVMnOnbsSI0aNZDJZPz999+MHDmSv/76i7Zt2wLxVTR69epFkyZNWLVqVYYf3tJCWFgYc+bMYdeuXcyePZvhw4ejr6/PhQsXGDFiBA8fPsz0w5zgy+aLE76knlo/TmyriYvm7V/jKNRzPvp5CiUSPrmkoliIK8bPr+sIWExMDJaWlukSr7x585IrV65PnlXk/fv3SVpvPj4+5M+fP0nrrUSJEtk+FZgcGam6neDJV1Lpyw8//EDDhg1p3bo1CxcuRF9fn/nz59OyZdIZXSRJwtPTU2sNXrlyhWLFimlFsHHjxmlyhsjMuBPELyoqiocPH+pYcO7u7hgbG2sFzsHBgQoVKqBSqXBxceHOnTv8+++/+Pj4ULlyZR2hK1euXJKf44wZM9DX12fu3LnJji0z1vfHsyUajYZ///2Xo0ePcuTIEaKiorCyssLHxwcnJydq1qyJJEmsXr2aBQsWsG7dOnr27Jn+C2eQhw8fMnbsWAIDA1mzZg1Tp05l3Lhx9O7d+5ONQfB58sUJ38cZ3iVJQ9DxpWjioinYdRYyPX1CLvyB3MiMPA3i/8A/Fj6AqnmUjKhqqiNo5ubmn1VaLKVSybNnz5K03mJiYpK03MqVK/fZLtpnxnKKiIhg0qRJnDlzhq1btxISEsKvv/5K/vz5mT9/Po0aNUrx2gmCkiCEzs7OVKhQQTstWq9evURroG6+ofTYeJXXp9YR+8I1SSeqKM9rhF7fjToiGP3c+cnTaACmNnXRR42NrxNP71zC19dXx4pzcHCgUqVKREVF8e+//2o3V1dXnXW5WrVqYW9vj6GhYZre3zZt2jB06NAUa+dlxvpOaX1cqVTSp08fbty4QZEiRXj+/DlNmjThxYsXAPz9999ZOvWcViRJ4tChQ4wcORKFQoG7uzslSiQudyT4tvjihG/w9jtc9Ip3gohPbLsaVZg/BbvP0eb4e7NtDOqIYG36K010OHIjU8zrdMOiTjcAjIK8qRb5L6VKldLZSpQo8Uld5iVJIjAwMElxe/nyJUWLFk3SeitatOhnJdJpJSOVsT/EycmJn376ie7duzN//nwOHz7MnDlzsLa2Zv78+Wmunh0bG8utW7e0U6Pu7u7UqlVLK4Q1atRg5F5Xzri9JMz5UJJOVOjp8XrjEAp2nYlxmerxx44uotiIreiZWlDRQsni9uWwtbXl/fv3WisuYcrSxMRER+SqV6+eZOB5WilSpAi3b99O9Yc9K6zYDwkLC6Nbt24YGRmxd+9ecufOzeHDhxkyZAgWFhYEBQXRsGFDOnXqRIcOHTI85ZwayTkeda1WlKb1alGhQgUuXLjAxIkT+fnnn0U5q2+YL074PrT4gv9ZhyLgeXxiW8P/xEodEw7q/55o326fgGWzIZiUqa5t16CYAa0tA3nx4oXO5uvrS548eRIJYsJWsmTJDAljbGwsPj4+SQrch2EBH25ly5b9aj3P0loZOylCQkIYNWoUrq6u7NixAwcHB/7880/mz59PtWrV+O2337C3t0/XeMLDw3U8Rn0DQ8kzYC2SPHG4RIITlb55fgIOzsNq7G7tMd/VfSjYbRZGxcqjhwaHF3/j4nyN0NBQatSokWhdLqt4+/YtlSpVIigoKE0PRNO2ObH7Ucz/HxaTb5/auuWLFy9o27YtTZs2ZeXKlchkMhYsWMCGDRvYtm0bbdq0ITw8nNOnT3Ps2DFOnz5N+fLl6dixI506dcLW1jYTdx1Pao5HKrUavQAv9s/+EXPleyZMmMCjR49YtWqVdg1S8G3xxQnf2vNerLrwhLiwIF5vHBwf6/X/RLqQdGLbj6c6jfXlTGhuk2TuR41Gw7t37xIJYsL26tUrrTCWLFkykSgaGBjw6tWrROtvb968yVRYgCAx+/btY9y4cQwbNoxZs2ahVqvZtGkTixYtonHjxsydOzddP6yRkZE8ePAANzc39ruH8MzUDvR1pxk/dKLStyyK/94ZmNfqjEnZGsT4/EvIuU0U/WkzckNj5JKa5oXjmNjGAWtr62xdX3VycmLFihWcP38+1bahoaGULVsWy7JVaDZmMZe9M2Z9//vvv3Tu3JlffvmFsWPH8vr1a/r27YtcLmfXrl1JCrtCoeDy5cscPXqUY8eOYW5uTqdOnejUqRM1a9ZM93uU5ulzwNjgPwH/559/GDduHOXKlWPVqlXJeqcKvk6yXfiyKu4pIiKCTZs2sWLDFox7LE3ySTytJOfVmRY0Gg1Pnz7l+vXr3Lt3D09PT16+fElAQACRkZFIkoSBgQF58uShSJEiWFtbU7lyZapVq4a1tTUlS5bUZrD/2siJGLc3b94wZMgQ/P392bFjBxUrViQyMpK1a9eyYsUK2rVrx+zZsylVqpT2HI1Gw4sXLxLFxb1584YKFSpgb2/Pm5LN8YrVnXZMqjp4hNtZ3p//HUmlQKZnQP5OUzG1rqk9J60xb5llwYIFhIWFsWTJklTb9unTh2PHjnH58mVq1qyZIev70KFDDB8+nK1bt9KhQwdOnTrFjz/+yKhRo5g+fTp6enpJnvchGo2Gu3fvcuzYMY4ePcr79+/p0KEDnTp1okmTJqlORWZ2ylahULBq1SqWLFnC0KFDmTFjxlf73RTokm3Cl1VxT6Ghoaxdu5Y1a9bQrFkzpk+fzjo3RZZ5piVHWsICPrbcbGxsMDc3x9/fP0lr8eXLl7x8+ZLcuXOnOJX6pX35PlWMW3JIksSWLVuYMWMGU6dOZfz48ejp6REaGqrND1mlShVKlSqFj48PHh4eWFhYaB1NEv4tV66cNhPMh2vJ8ddI7EQV88KVoKOLKdhzHoaFy6J450Pgwd8o2GMuhoXiHTma2RVk68CaSY47K+natSvdunVL1WPx5MmT9OnTh+7du7N169Z0X0eSJJYtW8bq1as5fvw4lSpVYtq0afz999/s3r2bhg0bZvQWtImjjx07xsOHD2nZsiWdOnWidevWiTxwE5x0fA8vTrK4MUDMC1dCzm5CHR6IYVEb8redgL5FwUROOm/evGHKlClcvXqVpUuX0qNHDzED85WTLcKXFXFPgYGBrFq1ik2bNtG+fXumTZumnbbKSs+00NDQJMUtu8ICNBoNAQEByU6lvnz5kly5cqUojJ+T12Z2xLhlBI1Gw5UrVxg1ahTR0dHY2tri4+PDu3fvKFeuHGq1mmfPntG2bVvmz5+PjY1Niv19uJacnBNV2O3DxPk9omDXmdrzAg7Nx6h4BSxqdwE+ncWXkJ/Tzs4u2TYhISHY2dmhUqnw8fEhb9686bqGUqlk9OjRODs7c/LkSRQKBb169aJo0aJs27aNfPnyZfY2tPj7+3PixAmOHj3K1atXqVu3rtY5plixYtqwjLiAlxhYFtUpblyw+xz0zQvwevNP5Gs9FlPrWoRe3UWs30OKDFie7MPvtWvXGDNmDJaWlqxZs4bKlStn2f0IPi+yPNFhuqo7S4mrO799+5Zly5bx559/0qNHD+7evUvp0qV1znOwysOMNnbpnuYwkEvUMvBl7dxDWoGLjo7WCQvo1q2b1nrLDstLLpdTuHBhChcuTJ06dRIdlyQpkTA+ePCAkydPaoXRzMwsyTXGhH25c2ddheqUyOxnnVHCw8Px8PDQxsO5ubnh4eGBpaUl9vb2xMTEcOvWLaZMmcIvv/yiDVZ+8+YNjo6O1K1blxEjRjBp0qRkA/ftCptjpP+OOJUm2ergRkXKEe58EIX/MwwLlUHx7ilxvg/JXa0NkPXVwpPj/fv3BAYGUq5cuRTbjRkzBrlczvLly9MtemFhYfTo0QM9PT2uX7+Ok5MTY8aMYebMmYwZMybLLaRChQoxZMgQhgwZQmRkJGfOnOHo0aPMmDGDshUcCGn4MxLyZIsbK975YJi/BGZ2DQCwaNCHiDV9UAb7YpDPikuPAwmOjNOZym3YsCH37t1j8+bNNGvWjF69ejF37lxRweErJEstvtTinlSh/rze9CMyg/88Fc3rdCVP/d4Y6cuoEXqd07s30b9/fyZPnkzx4ilXWk6rtSFpNMg0Sgq/vUWd/MovOizgY2F8+fJlIqvR1NQ0SUFM+H9WCGOC1R0dE0vw2Q1Jft6RDy8R8s/6DwePpIqj1JA1HJvdP9V8qRqNhmfPniVai/P396dixYo6U5X29vY6P1APHjygf//+FCtWjC1btlCkSBHtsRcvXvDbb79x/Phxxo8fz7hx4xJZ0QlZTqKC36XoRBV+7wQRd46jjg5Fz8Sc3NXaYv5/ay8za8np4dKlS8ycOZMbN24k2+bIkSMMGzYMa2trrl+/nq4Zi1evXtG2bVsaNmzIokWLmDhxIleuXGHfvn1Uq5Z0tYfsQqlUMm3HBQ4/UaCRxX8eHxc3LtR3EaFXdiBpVORrOUp77ps/RmLRoC9mdvVTdHADCAoKYubMmRw9epT58+czePDgHEv+IMh6stTiW3/Zh1iFEv3c+SncZ5E27inw2OL4uKf/YzVhv86PCECsQs0LMxs8PT1TrIj8YVjAq8ePKf8mgIdScWLzlgVJ0ilwqS+TkMlkNLYrxJhmNtgX75KVt5sjyGQyChUqRKFChahdu3ai4wlxgR8K4aNHj3ByctKKpLGxcYpTqWmJJUuo5C1p1Ml+3rkqNtHxsI10P0/YzX1I+Uuz4bKPzlRTeHi4jgXn7u7OgwcPyJs3r1bc+vTpw6JFi7C2tk7VeaJSpUrcvn2b3377jSpVqrBu3Tq6d+8OQKlSpdi6dSve3t7aGMBffvmF4cOHa0NVtNXCPTUpVgc3r94e8+rtE+2XyeI9Ij9FEWQXF5cUBSgoKIjhw4ejVCrZtGlTun7A7969S8eOHZk0aRLff/89devWpWrVqty7d++TzSx8iIGBAapchdDI/ktikVRxY40yFj1T3XVBuZEZkiIGSL24cf78+dm0aRNDhw5lzJgxbN68mXXr1iX5nRN8eWSZ8CVUd5YZGJOnYV/tflPrWuhbFCLunQ9GhZN3GZbJ5QTpF0LfLA+SJPHmzZsk194+DgtoW7cyP9vaUtCqDBdfxPD4XcYzvH8NyGQyChYsSMGCBZMM5pYkiaCgIB1h9PLy4p9//tG+NjIySlYYS5UqhUJupK3kLTdM/vNOqJKRQOSDC5hVagrIOP/oHVNmzeOx+z3c3d0JDAykYsWKWpHr27cv9vb2mcohamhoyG+//Ua7du0YMGAAR48eZd26dVrL0MbGhj179uDh4cGsWbNYvnw5M2fOZPDgwRgaGjKqsTXXngRlaC3ZQA4jG38aF3kXFxeaNGmS7PFRo0ZRsGBBmjdvnq74xqNHj/LTTz/x+++/ExgYSNOmTVm2bBkDBgzI0VmS8FhVon0fFzeWGxijiYvWaaNRRCP7IN43LeWVqlWrxvXr19m1axddunShZcuWLFy4MMWHc8HnT5YJ38F7SZcbVUe9RxnyGsMC/2WTeL1hEMhkGJeqimWTQdonM4VCQYMBk/E796e2WkDC+luzZs1SrRZgUzLJ3YIPkMlkFChQgAIFClCzZmJvQ0mSCA4O1hFGb29vzp49q32dq2YnjGt2A73En0NSnzeAKiyAON+H5GszLr6dWo0P+enfvz/29vaULVs2TS7wGaF27dq4uLgwdepUKleuzNatW2nZsqX2eOXKlTl69Ch37txh1qxZLFmyhNmzZ9O3b98MrSUbyiHiynZe1tZgXzyxNZjV3L9/n59//jnJYwcOHMDZ2RmVSsWcOXPS1J8kSaxcuZLly5dz4MABNm7cyOPHj7l27VqKzjOfCnPjFH62/l/c2KBASaI8Lvy3WxGL6v07nb9Lc+O0JaqWyWT079+fjh078ttvv1GpUiVmzJjBqFGjRLLrL5QsW+P7OIcmJJE8WhGDMtgPw0Jl0MSEE3J2IxpFDIV6/qY9p6GVEWv71MjWagGCjCNJEiN33ua0Z3DiY0nEuSUQemMvsS/cKNx3kXbfp/J4/JALFy4waNAg2rVrx9KlS5N0YLp69SozZ84kICCAefPmEWtVk4WnH6fLc9VGHkDHjh1ZsGABgwcnLuaaVURHR5M/f35CQ0MT5fT09/fH3t4ec3NzfvvtN3r16pVqfyqVirFjx3Lt2jXmz5/PhAkTaNOmDcuWLcvxLEKSJOHm5sa8v29xX1EYdVx0ouLGgUccyd9hCkbF7P7v1TkOU+uahF7bTazvA4oMWA6knMQiNTw9PRk3bhyvX79m7dq1NG3aNKtvVZDNZJnF9/H0gyRpCDq5HPT0ydt8OAByQxOMisR7numZWZK3+Qj81vVHExeN3Ci+TImhmYUQvc8YmUxGnJTYMkvq8/6QqAcXsajbQ2dfeip5ZxXNmjXD3d2dcePG4eDgwPbt26lfv75Om++++44rV65w7tw5Zs6ciUKhYPQvv+GuLsLlNOcYLcXly5dp1aoV/v7+TJ06NVumBz08PLCzs0skepIkMWLECK1LflqqIoSHh9OzZ0/UajU9evTgp59+YtOmTXTpknNr43FxcVy+fJljx45x5MgRYmJiUOoZU+DHTSCTEeFymuAzG7TFjS2b/YRpufh1uAKdpxNydhPBJ5djWMSGAh2maPuVgG7VUnaeS47y5ctrvUx//PFHatSowfLly0Xy6y+ILBO+D6cf4uOe1qCOCqVg9znI9JK5jEx7wgf9iKmDz52Pp5pS+7xj/R6hjgzB1FZXYG5dvchUz0PUq1ePunXrJioaml3kyZOH7du3c+TIEbp168bAgQOZO3euTqYQmUxGixYtaN68OcePH2fWrBmYmpqy6Nff8Dcrk6a1ZFtbW27cuEGrVq149+4dK1euzHLPwPv371O1atVE+/fu3cvDhw8JDg7mxo0bqYqur68v7dq1o0qVKvj7+3P69Gnu3LlDyZKffv0gODgYJycnjh8/ztmzZ8mbNy+xsbHI5XLGjBnDwIEDWXIrlHOe/jozCB9jUqoKxYZuSrQ/KxyPZDIZnTt3plWrVixZsoSqVasyfvx4Jk+enOOWsSB1suxbGB/3FN9dQtxTwW6/6sQ9xb15jDLYD0nSoI4JJ+Tc7xiVqIzcOH66SVLG8e+5I2zevFlbzkTw+fHhZw3Jf94JRHlcwNSmntaqBzDSl9GmngOmpqZs2LCBcuXKYWNjww8//MDvv//OgwcP0GjSvq6WETp37oybmxteXl7UrFkTNze3RG1kMhkdO3bE1dWV8ePHM3XCaPbN/pFuxaPYOrAmK3tWYdh3ZZP9ES1atChXr17F1dWVvn37EhcXl6X3kJRH59u3b5kwYQKlS5dm2LBhqeYrvX//PnXr1qVOnTqcP3+eatWqceXKlU8qet7e3ixbtoxGjRpRpkwZ1q5di7e3NwCNGzdm7969+Pr68ttvv2Ftbc2oxtYY62dsTdhYXy/LHI9MTEyYPXs29+7dw9XVlQoVKnD8+HG+sBTI3xxZtsaXlrgnmUzO+ys70ESHIjc0xbhUFSybDEYvV7yXnaGejJ/LhnD9wj+cPXsWS0tLWrRoQcuWLWncuPFnlbHkW+bDSt6qsIAU49wklQLftf0p0HmaTj3Ej2Pc1Go1np6e3Lx5U7sFBARQp04d6tWrR7169ahVq1amyvYkhyRJ7Nixg0mTJvHzzz8zefJkbeqyj1GpVOzcuZO5c+dSvnx55s+fT/Xq1VO9RmxsLH369CEiIoLDhw9nWShAzZo1Wb16NfXq1dPeS4cOHciTJw/Xrl3j0aNHKVY7P3HiBIMGDaJx48bcvHmT7du307x58ywZW0qo1Wpu3brF8ePHOX78OBEREdSsWROFQoGzszPVqlVj4MCBdOnSJdlEElldXikrOHfuHGPHjqVUqVKsXr061QxBgpwhSwPYs7q6s5ubG2fOnOHs2bPcuXOHGjVq0LJlS1q2bImDg4MIKM1Bhu68y7lH/mTkjyet+VIDAwO5deuWVgjv379P2bJltUJYr149ypQpk2VrZ69evWLQoEHExMSwffv2FDOhKBQK/vjjDxYsWECdOnWYO3culSpVSrF/tVrNyJEjuXfvHk5OThQsWDBT41UqlVhYWBAQEKB9KNy+fTvLly8nLi6OJUuW0LFjx2TPX7NmDQsWLNBmEtqxY0e2uulHRkZy9uxZjh8/zqlTpyhevDjfffcdCoWC8+fPo6enx8CBA+nXrx9WVlZp6vNzSZn3IQqFgrVr17Jw4UJ+/PFHZs6cmeYHnZxI9P4tkuWZW7KjujPEf2kuX77M2bNnOXPmDKGhoTRv3pyWLVvSvHnzbCtuKUiaFdsPsdpDppMwIK2k9lknh0KhwNXVVSuEN27cQKVS6Qhh9erVM7XGotFoWL9+PXPnzmXevHmMGDEiRWGNjo5m48aNLFmyhO+//565c+emWOJGkiTmzJnDnj17OHPmTKaqkru7u9OzZ088PePTwPn5+VGtWjV69erF8+fPOX78eJJjV6lUTJgwgaNHjxITE8PkyZOZPHlytjxI+vn5ceLECY4fP86NGzeoW7euNpTk5MmTuLu706NHDwYOHEitWrUy9BCT2eLG2cXbt2+ZOnUqFy5cYPHixfTp0yfZ+8vpRO/fGlmepPpTTT+8ePFCK4IXL16kZMmS2mnRBg0aiOrK2YQkSSxZsoS1a9cycsVedj6IzLGpJkmS8PX11Zke9fT0xN7eXkcMP0xXlla8vLwYMGAAefLkYdu2bammz4uIiGD16tWsWrWKzp07M2vWrBS9/DZu3Mj8+fM5deoUVapUSff4IN66O3PmDHv27EGSJFq3bk3FihXZvn07d+7cSZTjNmGc3bt359GjR8hkMvbt20fdunUzdP2kkCQJFxcXrdi9fPmSNm3a0K5dO0xMTDh48CDHjh2jYcOGDBw4kPbt22fZdzUzxY2zk5s3bzJmzBhMTU1Zu3Ztos/7c7Rav3Y+2+oM6UGlUvHvv/9y5swZzpw5w6NHj2jYsKFWCG1tbb+ofJyfK0qlkhEjRnD37l1OnjxJ8eLFP7svbVRUFHfu3NEK4a1btzA3N9cRwsqVKye7hvchKpWKhQsXsnbtWlauXJniE3sCISEhLF++nE2bNtG3b1+mT5+e7GzEwYMHGTlyJPv3708x80pyjBs3juLFizN58mT++OMPNm3aRNGiRalVqxYzZ85M1N7Pz4/mzZsTGBjId999x7Zt27IkdCguLo5Lly5x/PhxTpw4gbGxMR07dqRDhw7kz5+fPXv2sHPnTiwtLRk4cCB9+vT55jKfqNVqtm7dyqxZs+jatSvz588nb968n+U65bdAttXjy8nph5CQEC5cuKAVQrlcrhXBZs2aiWzrGSA0NJSuXbtiYmLCvn37dByNPtepJoifuvT29taxCv38/KhZs6ZWCOvUqZPi38T9+/fp378/5cuXZ9OmTeTPnz/V6wYEBLBo0SK2b9/OkCFDmDJlSpJley5dukTPnj3ZsGED3bp1S9e9fffdd8yePRtra2tq1KjBnDlzWL16NR4eHomsKBcXF5o1a4ZCoWDp0qUMHz48Uw+DQUFB2pCD8+fPU6lSJTp06ECHDh0oVKgQBw4cYPv27Tx79ow+ffowcOBAHBwcMny9r4WQkBBmzZrFwYMHGT59IfuDixD7kegpg3wJPrsRhb8PeiYWWDYZhKltPZ02GV0uEMST7RXYc3r6QZIkvLy8tE4y169fp2LFirRs2ZIWLVpQq1atND39f8s8f/6ctm3b0rx5c1asWJFsarGc/qzTSkhICM7OzlohvHPnDiVKlNCxCm1sbHSEITY2llmzZrF79242b95M+/ZpS0X2+vVr5s+fz99//83o0aOZMGFCoqKqrq6utG3blhkzZjBy5Mg09avRaMiTJw/Pnj2jV69eNGrUiD///JNNmzbRokULnbZ///03/fv3J3/+/Dg5OaUrX+eHPH78WOuF6e7uzvfff0+HDh1o06YNlpaWnD17Vjv92rx5cwYOHEjLli1FWq8kcHNzo9f6i8RYWsMHa6uSRs2bLSPIXbU1uWt0IPbVAwIPzaPIoDUY5C2mbZdWBzFB0mS78H1uxMbGcv36de36oK+vL02bNtVahDkRsPs5c+vWLbp06cKMGTMYPXp06id8gahUKtzd3XWswsjISOrWrasVwpo1a2JqasrVq1f54YcfaNKkCStXrkxzeMWzZ8+YN28eTk5OTJw4kdGjR+u46T979oyWLVvSu3dv5s6dm6Q19qHH39vgMJyvXqRxFRsendxKy8b18fb25sCBAzrnTJ06lWXLltG6dWv27duXrhqTKpVKJ+QgMjJSa9U1adIEY2Nj3N3d2b59O3v27KFkyZIMHDiQnj17prve37fGhyFBH6IIfMG7HZOw+vlv7d+A/75ZGBW1Ic93/XXafqqyV18j35zwfczbt285d+4cZ86c4dy5c+TNm1cndjA7itF+Kezfv5/Ro0fz119/0bZt25wezifl9evXOqEUHh4eVKhQgXr16lG1alXOnj3LrVu3+PPPP2ncuHGa+/X09GTOnDlcvXqVadOmMXToUK0XakBAAG3atKF69eqsX79eOxORksefpIrDwMCI2Gd3+XNyb5pXj48bU6lUNG/enGvXrrFs2TLGjx+fpvFFRERw5swZjh8/jpOTEyVKlKBDhw60b9+eatWqIZPJCAgIYM+ePWzfvp3g4GD69+/PgAEDUg2UF/zHpitPWXneO43CNxOZgTEFu+qu22Ym3+i3zjcvfB+i0WhwdXXVTovevXuXmjVraqdFv5XYQUmScHR0ZPPmzZw4cUKszQAxMTHcu3dPK4Y3btxAo9EQHR1NrVq1+O2336hTp06ap/VcXV359ddfcXV1ZdasWfzwww8YGBgQERFBly5dyJUrF3v37uWg67s0OQ+BhImBPjPa2PFdUTm1a9cmKiqKixcvUqNGytNhvr6+Wi/MmzdvUq9ePTp06EC7du20nqlxcXGcPHmS7du3c/XqVTp06MDAgQNp0qTJN/GdyGqSSuoP8Yne3/w+jFxVW2NesxOxr9wJ+HsexiUr6yTzTyAnEr1/DQjhS4GIiAid2MGwsDBatGih3b5GzzSFQsHQoUPx8PDgxIkTFC1aNKeH9FkiSRLPnj3jzJkzrFixAj8/P2QyGbVq1dJOj9atWzdVRxhnZ2dmzZrF8+fPmTNnDr1790atVjNw4EC8VAWIsWut4yyUGgZyicAzmyke+5xbt24lGTgtSRL379/XemEmVFhv3749LVq00E7fSpLEnTt32L59O/v376dy5coMHDiQrl275kgR2s8RSZKIi4sjMjKSiIgIne3jfR++djGvQ3iupMNdFAHPCTm3GWXgSwyLWMeXbdMzIP//S3p9SDO7gmwdmLi8mCBlhPClg+fPn+vEDpYuXVo7LVq/fv0vPnYwJCSErl27YmFhwe7du7/pad70sm/fPsaOHUurVq0oVaoUt2/fxtnZmcKFC+s4zZQvXz5JC+ny5cvMmDGD0NBQ5s2bR+nqjem+6Qb+J1cS+8ItvqK4mSXmdbqS26EliqBXBJ9cger9WwAMC1tj2XwYhvlLINeoODL6Oxys/vNUjY2N1Qk5MDU11YYc1K1bV8fBy8/Pj127drF9+3ZUKhUDBgygf//+lCpVKtvfx+wmQajSKlBJvf54n0wmI3fu3Dpbrly5Unx9PNCS+yFpc6p7t3MSZpWakbtq60THhMWXMYTwZRClUqkTO+jp6UnDhg21KdU+9gr83PHx8aFdu3a0bduWJUuWZFtR2K+Z169f8+OPPxIcHMyOHTuwsbHh0aNHOk4zQUFBifKPJlhPkiTxzz//MHPmTMIdeqEqVIG4wJcYWBZFpm+AMtiXd3umUbD7HAzyFEYTG4WeRUGQNETcP0Wk21mK/rhO6/H3W8uSOiEH9vb2WueUj9fjoqOjOXz4MDt27ODu3bvaqhX16tXL0b9jSZKIjY3NEoFKeC2Xy5MVpLSI1sevPy4JlRaSW+ODeIvPIG8xJElDxH0nIu6fothPm5Dp606jizW+jCOEL4sICQnh/Pnz2vVBPT09rTXYtGnTzzp28Pr163Tr1o3Zs2czYsSInB7OF40kSfz+++/MnDmT6dOnM27cOB0LLyAgQMdpxsXFhXLlyulYhWb5ClNv0QVUkq7gKIP98N8zDcvvh2JWvuF/19SoiXQ5zftLf1Ji0qH4nRoVoX+N4vuGdbQhBx9Pu2o0Gq5du6Yt0VSnTh0GDhxIx44dMTExyfD9JwhVZgUq4f/6+voZEqTk2mREqLKa5Lw6Ad5f3Eak2xkkjRojq4rkbT4MA8vESw7CqzPjCOHLBiRJwtPTUzstev36dSpXrqx1kqlZs2a2xg6mJ9Htnj17GD9+PDt37tTmUBRknqdPnzJw4EAMDAz4888/k50mVCgUuLi46OQflVdsgUG1zkjy+L+R4DMbiPK4gKSKw7BQWQr1XYTcMF6YXq3siaSIAUnComFf8tSPr7JuIIfxTa0Z1Syxp+XTp0/ZsWMHO3fuxMzMjN69e9O2bVty5cqVLkFK7rWBgUGWiVTu3Lm/2jjArEzqL0gfQvg+AQmxgwnTon5+fjRr1kxrEWZV5eb0JLq1L27BvHnz+PPPPzlx4oS2Urcg61Cr1SxfvpylS5eyZMkSfvjhhxSnDeMfWHz568Yz3kXoVqeXNGriXnsR+8oDizrddIr9ahSxRD24gJ55QUyt/3N0KKl5R4Xwu0RERPD+/XuePXuGn58fMTExGBsbI5PJiI6OxtDQMFNTfR/uy5Ur11crVFlNdib1F6SMEL4c4M2bNzqxg/nz59eKYKNGjTLkVJKenJlG+nKKB9wm/H78+o+obJG9eHh40K9fP4oWLcpvv/2GkZER4eHh2u1xYCyXA414qTBDkiQ0suTXV4P/WYdB/hKY1+igs1+SNPit7kvRnzaiZ5YHgJL64VR+f4N79+7h7u5OtWrV6NChA82bNydfvnxaoRKZi3IOkaszZxDCl8NoNBpcXFy0a4P37t2jVq1aOrGDqTkXZOTLI9comdm2AoO/E4Uyk0OSJKKjo3VEKiIiQud1WvfFxcVhaGiIQqGgWLFiWFlZYW5uTkyxGrzKXwMNcpClHg8X7LQGmYEReZsP0x2rRo3viu4U7rcUw8Lxzg7qp7co/PwMAwcOpFevXmnKMSr49Hxuid6/BYTwfWZERERw6dIl7fpgRESETuzgx8VL3XxD6bHxKq9PrSP2hSua2Ej08xTGstFATMrWSNHt/WudLlEqlekSqeT2R0ZGYmRkhLm5uXbLnTu3zuuU9n+4z8TEBJlMhrOzMwMGDKB27do0HDydlZdeJPvAoo4KJfalGybWtZDpGxL7wpXAI47k7zAFmb4heibmGBQshaSMI/TqTqIf36DY8D+Q6Rsi06j4oVp+Zves/4nffUFG+JwTvX+NCOH7zHn27JlWBC9dukSZMmV0YgdH73fnjNtLwpwPkavy9+hZFCDm6V2Cji+l6OB1yI3NUnV7/xwWyCVJIioqKkPW1Mf7VCpVmgUppX3ZNQ0YFRXF8OmOXDWsTvDptUnG6cW99uL95b+I83sEkgbkeujnKYJ5rU7krtKKKK/rhF7dhToiCJm+YXwux0YDMSz4/xp8aiWqQ1Pp3KY5Xbt2pWHDhiJE5QvgS0n0/qUjhO8LQqlUcvv2be20qNeL1+T9Yb3W++9D3mwdjUX93pjZ/ffEn5Tbe2ZdohUKRbpFKqn9kZGRmJiYZFikPtyf4LjxORIYGMg///zDijuRhJgURxnsm2ScniYqFI0yFpPS1UAuJ+TsJtSRIRTqOS/VayQ80Iyrbsbhw4c5fPgwvr6+dOzYka5du9K0adPPwqVfIMgphPB9waw47cGGay8TxXupo97jt2EwRQevwSCfFZC827uhnozudiY0LqTKkIWlVquxsLDI1DRggnX1NVokCRXJT506hZOTU3yig+ZteFSuD+o0xukBxL3zwX/PNEr8/Heq15RplPzVz4FGlf+rwP78+XOOHDnCoUOH8PT0pG3btnTp0oWWLVtiamqaNTcrEHwhCOH7gkkq0a2kVhFwYDb6lkXI10q3jFBybu8qn5vIb+/EyMgIIyMjjI2NtZuJiQnGxsaYmppiYmKCqakpZmZm2n+NjIzQ19dHT08vw1tmz9fT0/usEiWHh4dz/vx5Tp06xenTpzE3N6dNmza0bduWBg0a8Kezn07WjpTi9LR93jlGlOdVigxYnuK1jQ3kVIzz4tbOpWzZsiXJqhpv3rzh6NGjHD58mDt37tC8efx0aNu2bdNcZkkg+JIRwvcFM3j7HS56BWhfS5KGoONL0cRFU7DrLJ1Yrw/bfOz2XsYoivYWr1Gr1TmyqVSqTPcBZFo8MyPCkZGRvH79Gl9fXwIDAylSpAilS5fG2tqafPny6bS9pirDU7VuNfaU4vQUAc/x3zONAl1nYmxVKcm/hY89/q5cucLAgQNp1aoVy5cvTzZEJigoiBMnTnDo0CGuXr3Kd999R5cuXejYsWOSFeMFgq8BIXxfMB9afJIkEey0GlWYPwW7z0FukPSaXVJu719DoluNRvNJRTgmJoYHDx5w//593NzcUKlUVKpUiYoVK2JtbY2+vn6S571584YzsaWRiiQtYB/H6Snfv8F/91TyNP6BXJWaJj5BpcDA0JBm5Qsl8vgLCwtj3Lhx3Lhxg127dlG7du0U38Pw8HBOnTrF4cOHOXv2LDVq1KBr16506tRJVOkQfFWIyNUvGLvC5hjpvyNOpSHkzHqUwb4U6jVfR/RinrskcnuXG+fCIH/82p+xvhy7Il9+iRm5XI5cLs/WrCGvXr3CycmJU6dOceXKFRwcHGjbti3Lly+ncuXKKTrUeHt78+uvv3L+/HlK9vqV4OQaajTa0BNVWAD+e2diUb9XkqJnaaDGSuNLngAvNi3YkOi4hYUFf/31F4cOHaJDhw4MHz6cmTNnJvsemZub07t3b3r37k10dDRnz57l0KFDzJw5k/Lly9OlSxe6dOlC6dKlkzxfIPhSEBbfF0xCotuo4He83jgY9AyQyf9zEMnbahQyPYMU3d5lGhVrvreg3feNPltPyJxCpVJx69YtTp06xalTp3j37h2tWrWibdu2tGjRgrx586Z4flxcHKdOnWLRokW4urqir69P4cKFKdV6CC/NK6OICk82Ts+wcFn8d08lV9U2WNTukqhvPTQUDrzLs1O/4+/vT4sWLahXrx61a9emVq1aiZKiv337lsGDBxMcHMzOnTvTVS1doVBw8eJFDh06xLFjxyhevDhdu3alS5culC9fPs39CASfC0L4vnAylegWsDGN5vnOGeTJk4cpU6bQuXPnr9K7Mq0EBgZy+vRpnJycOHv2LKVLl9Y6ptSsWTPF9yY0NJSbN29y/fp1Ll68yL1795AkiapVqzJq1ChatmxJdHQ0i1dv4IxRAzSKGAKPLEQR8BwkDfoWBcldvT25q7Qi9Poewq7vQWZgrHONEhMPAvFJqJ2nfU++XEY0a9aMihUrYmJiwu3bt7l37x5Fixaldu3a1KlTh9q1a2Nvb4++vj4bN27k119/Zd68eYwYMSLdDzsqlYrr169rwyTMzc3p0qULXbt2pUqVKuLhSfBFIITvCycrEt1WLJKb48ePs2TJEgIDA5k4cSI//PBDhkvTfEkkpIxLCDfw8vKiWbNmtG3bllatWqW4tuXr68v169e5du0a169f5/nz51StWhWNRoO7uzv9+vVj9uzZFCpUiNu3b7Ns2TIuXbrE0KFDeV26DVefh2XogQUkVC/uUV/ziNmzZ/Po0SPWr1/PpUuXgHhxevjwIbdv39Zuz58/p0qVKtSuXRsrKyv++usvihQpwp9//kmRIkUy/N7duXOHQ4cOcejQISRJ0k6H1qlT57PytBUIPkQI31dAViW6lSSJGzdusGTJEm7fvs3o0aMZOXLkV+fdFx4ezrlz57ThBhYWFrRt21YbbpBUcLdGo+Hhw4dcv35du8XGxtKgQQMaNGhAtWrVuHLlCmvWrKFz587MmjWL4sWLc+LECZYtW4afnx8TJkxg8ODB5MqVi7vPA+m28TropT+Q3MRAjz/7OXD58Hb+1959x9d49g8c/+RkipGEhMSI0VRVSEJqRGJTpXjsUbGFp7QlRVSNPCotRYpQ0tilxg8PFVqrLY3YI6iRNkHEiOw9zznX7488ORwJTqaR6/16eb04932u+z7B+d7X+n6/++47OnbsqMnz2qBBg2d+5vPnz2sC4enTp0lNTSUnJ4f+/fszduxYWrRoUeTtDEIIrly5wn//+192795NfHw8ffv2pX///rRr104mwpZeKTLwvSFKOtHtjRs3WLJkCXv27MHd3R1PT8/XdlGDEIKbN29qFqacO3cOV1dXPvzwQ3r06MFbb+WvYJ2Zmcm5c+c0Qe7kyZNYWVnRtm1bTbCzs7MjKysLf39/Fi5cSKdOnZg3bx61a9fmxx9/xNfXFzMzM6ZPn06/fv00X/6ZmZk4OzvzsKIdVu9PIEul+3/Bpx9YUlJSWLFiBfPnz+ftt99m165dNGz44sTjQgju3r3L5s2b8fX1xdDQkPT0dOrWrUurVq00v5o0aVKkoBUaGqoZDr1z5w69e/emX79+dOnSBWNjmXpLerlk4HuDlEai2wcPHuDn58eaNWt4//33mT59Os2bNy+V+y9JGRkZHDt2TBPslEqlJtB16tQp3762+Ph4goODNYEuJCQEe3t7TZBzdXWlRo0amvNzcnLYuHEjX331Fc2bN2f+/PnY2NiwatUqVq1aRatWrZg2bRpt27bVmvdKTU3F0dGR6OhoLl++zMlohU4PLAg1CqHmq76OBT6wBAUF0atXLwwNDenevTtz5szh7bff1ulnlZqayrRp0/j111+ZM2eOJjXemTNniIyMxNnZWSsY1q5dW6d280RERGiyxvz11190796d/v3788EHHxSpBJckFZcMfG+g0kh0m5yczJo1a1i6dCmNGjXCy8uLrl27vlKLGe7evatZgfnnn3/i5OSkCXZNmjTR3KsQgoiICK1hy7t379K6dWtNoGvVqlWBX8pqtZrt27czd+5c6tWrh4+PD1WrVmXp0qVs376dgQMH4unpWeBqx6SkJOzt7UlPT+fq1avUqlUL0O2Bpa1dVY59/yULpv+bgQMHFvj5nZycmDdvHpcvX8bPz4+ePXsyZ86cAnu0BTlw4AAeHh64u7tr6gYmJCRw7tw5rflCIyMjrYUzzs7OVKpUSadrREVFabLGnDlzhs6dO9OvXz969uyJubm5Tm1IUrEJSSqErKwssWnTJmFvby8cHR3Fli1bRHZ29ku5l+zsbHH8+HHh5eUl7O3thaWlpRg+fLjYvn27iI+P15ynVCrFpUuXxIoVK8TgwYNFrVq1hLW1tRg4cKBYvny5uHDhgsjJyXnutdRqtdi7d69o0qSJaN26tTh69Kg4ceKE6NOnj7C0tBRz5swRUVFRz3x/TEyMsLKyEtWrVxcxMTEFnhObkin8j4eJKdsvCfuPV4he3+wS/sfDRGxKphBCiFOnTokaNWqIhw8fFvj+ZcuWiWHDhgkhhEhISBDe3t6iWrVqYvTo0SI8PPy5ny9PdHS06NOnj3BwcBBXrlwp8OcQHh4utm7dKiZPnixatWolTE1NhYODg/Dw8BBr164VV69eFUql8oXXiouLExs2bBC9evUSlStXFh988IFYs2aNiI6O1uleJamoZOCTikStVosDBw6IDh06CFtbW7Fs2TKRkpJS6td99OiR2LRpkxg0aJCwsLAQzZs3F3PmzBGnT5/WfNmmpaWJP/74Q8yfP19069ZNVKlSRTRq1EiMGzdObNy4UYSHhwu1Wq3T9dRqtTh8+LBo2bKlcHBwEHv37hU7d+4UrVu3Fg0aNBArV64Uqampz23j/v37wsLCQtSuXVskJia+8JoRERGiatWqIj09Pd+xmTNnit69exd4/zExMcLMzEzrGvHx8WLOnDmiatWqYuzYseL27ds6feb169cLS0tL4evrK1Qq1XPPz8zMFGfOnBF+fn5i2LBhws7OTlSuXFl07NhRzJw5U+zdu/eZwTpPcnKy2L59uxg0aJAwMzMTHTp0EH5+fiIyMvKF9ytJhSWHOqViO3v2LIsXL+bYsWNMmDCBTz/9VGs+rDjUajUXL17UbDcIDQ2lS5cu9OjRg+7du2NjY0NsbKxmfi4oKIirV6/i4OCgGbZs06YNVlZWhb72yZMnmTVrFvfv32fWrFkkJyezfPlyLC0tmT59On369Hnhnsdbt27h6OiItbU1ISEhOs1peXt7k5CQgJ+fX75jWVlZtGzZEk9PT0aNGpXv+IABA3j//fcZP3681uvx8fH4+vri7+/PgAEDmDVrFra2ti+89xEjRmBkZMTGjRtfeP6T4uLiOHv2rNYQaeXKlbXmCps3b15gZYiMjAyOHDnC7t27CQwMpGHDhpoN87oO2xZWbGoWuy7c42ZUMsmZSqqYGNDIugoDnWUdvDeRDHxSiQkLC+O7777TzHVNnTpVpxWGT0tKStLabmBhYaGZq3N1deXevXta83MPHz7ExcVFE+hatGhRrFI7ISEhzJ49m6tXrzJlyhRiY2MJCAjAzc2NadOm0aZNG53mNm/cuIGzszMNGjTgwoULOq1mVCqV1KtXj19//ZWmTZsWeM7ly5fp0qULFy5cyBeMDhw4gI+PD6dOnSrwvbGxsfj6+hIQEMCgQYP48ssvqVOnzjPvR6VSsXjxYr777juWLl3KRx99VKR5XSEE//zzj1YgvHbtGu+++65WMGzYsKHW/r/s7GyOHTvG7t272bt3LzY2NpoN840bNy72HPPlyES+PxbG8b9jADQVM+Dx/GqHd6yY2N4OxzrmxbqW9OqQgU8qcTExMaxcuZLVq1fj5uaGl5cXrVu3fub5Qghu3LihWYF5/vx53NzcNKnBUlJStAKdQqGgbdu2mq0FTZo0KZFsM6GhocydO5c///yTMWPG8PDhQ/bs2cOQIUPw9PQsVBC/ePEibdq0wdHRkeDgYJ23BOzbt4+FCxdy8uTJ5573zTff8Pvvv3P48GGtQKFUKrG1teW33357bjqxmJgYlixZwpo1axg6dCgzZ8587mrNS5cu4e7uTpMmTVi9evUL07XpIjMzk0uXLmntLUxMTKRFixZawTCvt65SqQgODtZskzA1NdVsmHd2di50ECzpLUDS60MGPkmjpId70tLS2LBhA76+vtSuXRsvLy8+/PBDFAoFGRkZ/PHHH5pgp1Kp+PDDD+ncuTMVKlTg/PnznDhxgjNnzmBra6vpzbm5uVG3bt0SXU0aERHBvHnzCAwMpF+/fty9e5eLFy8yceJEJk6cWOhh0uDgYDp27Iirqyu//fZboTKY9OzZk4EDBzJy5MjnnqdUKnFzc2P48OFMmjRJ69iMGTMQQrBo0aIXXi86OprFixezbt06hg0bxsyZM5+ZrSYjI4Mvv/ySXbt2sX79erp27arz59JVdHS0Vq/w3LlzVKtWTSsQNmvWDCMjI86fP6/JGpOdna3pCbq4uLzwQaikkj5IrycZ+KRSH+5RKpXs3r0bHx8fYmNjqV69Ordu3aJ58+a0bdsWS0tLIiIiCA4O5vr16zg5OWnNz5VE76IgUVFRfP3112zdupUOHTpw+/ZtUlNTmTp1KiNGjChSyrYjR47Qo0cPunXrRmBgYKEC9N27d2nWrBmRkZE6DdWGhobi6urKqVOntPbs3bx5k44dOxIZGalzT/PRo0csWrSIDRs2MHz4cL744otnpjI7evQoo0ePpm/fvixcuLBUK7ir1WpCQ0O1gmFoaCj29vZawTAjI0OzVzAmJoY+ffrQv39/2rdvn68axeXIRAat/pP7B1aSeScEdWYqBubWWLQfSYW33gMg404I8Yf9USXHYFSzIZYfemJgVl2T5k/XfbDSq0kGvnKuNId7cnJyOHnypGZvXXR0NO+88w4RERHExcVhamqq6bnk/XrvvfcwMTF5brvF7ZnGx8ezaNEiAgICcHR0JDw8HFtbW6ZPn06vXr2KnGNyz549DBw4kEGDBvHTTz8Vulfq7e1NfHw8K1as0Pk9y5cvZ8eOHQQFBWn1clxcXJg1axY9e/Ys1D1ERUXx7bffsmnTJkaOHMmMGTOwtrbOd15CQgITJ04kJCSELVu24OzsXKjrFEd6ejoXLlzQCobp6em0bNlSs8H+7t27HDx4kPDwcHr16kW/fv3o2rUrJiYmjN98nkOXI0g6vZtKTbugb2ZFRvh5YvctpuaYlegZmXD/Bw+qdf8MU7uWJP65hcx717AZ4YueHnRrXAN/9/fK7PNKJU8GvnJsy+k7zN935ZlPvln3b5IYtIXsqDDQU2Bi25Sa3T/Ge7DrM4Pfo0ePNNUNjhw5grW1NXXq1CE7O5tr165hamqKm5sb9erV48qVK5w8eZIxY8YwefLkF2YEKW7PNCUlhWXLlrF06VLq1q3LnTt36Ny5M1OnTsXFxaWoP0YAtmzZwsiRIxk7diwBAQGFfr8ui1oKolar6dKlC926dWPGjBma1wMCAjh06BC7d+8u9L1AbhmjhQsXsnnzZsaMGYOXlxfVq1fPd962bduYPHkykydPZsaMGS8tJ+fDhw+1AuH58+extramSZMmKBQKbt26xa1bt+jcow+X6w1AKfI/lDxY9wlmrkNRZ6aQdvUo1sOXAKDOzuSe30fYjF6OYbU6GBsoODmjk1zt+RqTga+cyqvqkJaWRvKZgp98c+IiUedkUqF+c1Aocod+UuOp5/61ZrhHrVZz4cIFDhw4QGBgIKGhodja2mpyQdrZ2Wml/Xp6FWJERATLli1j06ZN9O7dm2nTptGkSf7q5MXpmWZkZLB69Wq+/vprzM3NiYmJYcSIEXh6epbI8nh/f38mTZrElClT8PX1LVIbgYGBLFiw4IWLWgpy584dWrRowe+//64JmklJSdStW5ewsDAsLS2LdE8A9+/fZ+HChfz000+MGzeO6dOn55vzjIyMZNSoUWRkZLB58+ZS23JQGCqViuvXr2sFw7CwMGp0GIbavgd6BtrJwVVpCdxbNYaaY/xIufgLQq2kWrfHc6cP1k7EzG0YFRu5YmKgwLNrQya0e/mfUyoaGfjKqefV8ct78q3YyFXr9ayoMB5tnUndz3dib6ak4qWtHDp0SFP5PDk5GWdnZ9q1a0fbtm1xcXHROQ1VQkICq1evZsWKFTRv3hwvLy/atWuHnp5ekRcifNGtIRlXjzBnzhz09fVRKpVMmTKFjz/+uMQqTixZsoQZM2Ywd+5cvL29i9xOr1696N+/f4F783Sxbt06Vq5cqUkpBuDu7k6LFi2YPHlyke8rT2RkJAsWLGDHjh14eHgwbdo0rYCqVqvx8/Pj66+/ZsGCBYwdO/aVSmcHuTlJPdaf4NRD7RJeQqUk+v+8MbCwodoHnxD7y3L0Tc2w6DBKc07U5ulUcuxGJYcuAPR1qsXSwU5lePdSSZKBrxzKq9z+5FBhnieffA2rae/vSj73M2k3/sRmhC9CmU3cho9p7dSE999/Hzc3N5ydnYudeT8zM5PNmzezZMkSzMzMGDJpBv6hhjx4zkKElMuHSD61C1VaAsa1G1Otx2QMKldD5GSRvOcrzFSJzJ49G3d39xfOHxaGt7c3Pj4+LFq0iKlTpxa5ncjISJycnHRe1FIQIQS9evWiWbNmzJ8/H4DffvuNqVOnEhISUuR7e9rdu3f55ptv2LlzJxMmTGDq1KlaDxHXrl3D3d0dW1tb1qxZU+Dw6Ms0ZtM5fr8ZrfmzEGpi9y1GnZVO9f5z0NM3IP7IDwi1imrdJmrOe7BuEmauH2keBjs3qs66kS3K/P6lkiErRZZDuy7cK/B1oVISu28JlZp2zhf0sqNvkxS8DYuOowEwNjZmye4THD16FC8vL9q0aVMi5WZMTEzw8PDg+vXrzJw5k4CgO2RmZGFQ2RLrjxZSx3MH5u2GE/PztygTH5EZcYXE4z9i1X82daZsw8C8BrH7FgOgp29Iu3/7cOvWLcaNG1eiQe/zzz/Hx8cHf3//YgU9yO2tDR06tFirI/X09FizZg0BAQGcPXsWgI4dO5KYmMilS5eKdX9PsrW1xd/fn4sXLxIbG0vDhg2ZPXs28fHxANjb23PmzBkaN26Mo6MjgYGBJXbtklDF5PEcpBCCuF/8UKUlYtX3S/T0c48ZWtUlJ/q25jx1dibKhCiMrGyfaEd7paj0epGBrxy6GZWcr7cnhJrY/b6gb0DVrv/WOpaT8IDo//PGost4TOrkzr9lqwShUamldo/6+vq07doDYdMYhYkp5m2HYWBeAz09BaZ2LTEwq0FWVBgZ4ecwbeSGkVVd9PQNMWszhKzIv8hJeAgKBTeT9UlIzynRe/Pw8GD58uVs2bIFDw+PYrWlVCpZt24dEyZMKPZ92djY4Ofnx8iRI8nIyEChUDBy5Eg2bNhQ7LafVrduXQICAjh//jxRUVE0bNgQb29vEhMTMTIyYsGCBezcuZPJkyczfvx4UlNL799KYTSyroKxQe7XXvyh78mJi6T6gLkoDB8/tJk2dCE7NoK0m8EIZTZJwdswrF5P8zBoYqCgkU3ll3L/UsmQga8cSs5Uav35WU++AMqkaB5tm42Z6xAqNen0VDslG1Ce9qyeqSotgZz4+4+fwLVG63N/nxMTAYAesOtiwe0UxdChQ9mwYQM///wzQ4cOLXZ7Bw8epHbt2oVayfk8gwcPxsHBgVmzZgEwatQotm3bRlZWVom0/7T69euzdu1azp49S2RkJHZ2dsybN4+kpCTc3NwICQlBpVLh5OT0zDRqZWmAc+7KYWVSNKkhB8l+dIt7K4Zz13cAd30HkHrtD/RNzbDq+yWJf24mctkQsh6EYtXbS9OGAAY0L1xNQunV8nLWHksv1ZPDPfD4ybfGEB+tJ19lSiyPtn1JZeeeVG7Wo4B2Sne4p8Ce6VPDsSYNnIn9eRGVm3XHwKImScHbAT2EMveLPlOp5ubDlGLfixCC3r17c/DgQQ4dOkTnzp2L3SbADz/8kC+hdHGtWrUKBwcH/vWvf9G+fXuaNm1KYGAgAwYMKNHrPKlBgwasX7+esLAwfHx8sLOz47PPPmPy5MmsW7eOPXv20LdvXzw8PJg7d26+TeVlxbKSMe0bWnHkhpq6X+x/5nkV6jlRa7x/vtf19HKLOcutDK83GfjKodzhniiylGrNky/6htxbMVxzTtUPJqFMeIgyMYqkE1tJOrFVc8x26q4yGe7J3zPNPxxboZ4T5m4fEbPnG9RZGVRp0Rs94wroV672RDvF65kKIejUqRPBwcEEBQU9N+9oYURGRnLy5Em2b99eIu3lqVatGj/88AOjRo3iypUrjB49mvXr15dq4MtjZ2fHxo0b+eeff5g/fz5vvfUWU6ZM4bPPPiMkJIRx48bh4uLC5s2bn5tLtDSrJUzqYEfQP7Fk5KhefPJTTAz0mdjBrljXl14+uaqzHHreqk5dlcUm3ik7LrE35AGQNxy7HGXSI6oP/I9Wz/RJOfH3ebjhM2pN2oS+SW5V8OIsPVepVLi4uHDlyhXOnj2Lg4NDkdopyLx58zQJvUvD2LFj0dfXZ9myZdSqVYugs5c48UBVpqV3QkNDmT9/PocPH8bT05NPPvmErVu3Mnv2bLy9vZk4caJWppyyqpYgc3WWbzLwlVPP28f3ImWVtsn/eDhLj/5NllJN3MGVZEffzh2ONXqcQ1Mos8lJeIChZV1UyTHE7v8O49rvYtE+N8lzcTYbK5VKmjVrxq1btwgJCdHKh1lcSqWS+vXrs3//fhwdHUus3SclJyfj4OCA17ffs+HMA+KNrTEwMHgppXdu3rzJV199pdli0a1bNyZMmICZmRnr16+nVq1aZV4tQVZnKL9k4Cun8jK3FGW4p6wS9eb1TNPiori/egzoG6KneJyPsuoHkzB9qwVRP32BMvEhekYVqNS0C+bthmvOK2rPNCsrC3t7e2JiYrh69WqhirDqYv/+/fj4+HD69OkSbfdpczYd5se/UlEYGPO8/+hl9eV+7do1vvrqK44fP46npycpKSmsWbOGj7xXczCqQpn3wK7cS2TVsTD+CI1Bj9w54Tx5DwUd37FiYgc7mZj6DSIDXzn2Ogz3FKtniqCbvbWmZ6rrvFFqairvvvsu6enp3Lhxo1Q2Yffu3Zs+ffowZsyYEm87z6v89/vXX38xb948Tpw4wftDPDhu0Izky4dIu/ob2TF3qPhueyx7egKgTHzEff+x6Bk+3odZpXV/zF2HlthDWFxqFrsu3uPmwxSSM3OoYmJII5vKDGguK7C/iWTgK+de9eGe4vRMUWbTOu0Un38+lbWnInWaN7KtJGjUqBF6enqEhoZiZmZWQp/ksXv37uHg4EBkZCQVK1Ys8fbh8c/t0em9BQaTJyWe2EbSiZ+oPsSHCvWcyrT0zpUrVxgREERCRVsy/jkNenpk3L6IyMnOF/hsvX7W6vFD2Q27S28WuY+vnHNvXY8d41vTrXENjA0UmBho/5MwMVBgbKCgW+Ma7BjfusznOBzrmDOrRyMqGBbun2oFQwWzPmzMoxxjBv1wkiPXH5GlVOdb0JP5v9cOX3/E4IBTNOrpgbGxMeHh4aUS9OBxppbSCnoA3x8LI1OpwqBSNczaDKaSQ8FFY3MSHpIeegL9So9rHmYqVaw6FlZq9/akmg3eIcOiAXoKBabvtMG0oQuKClV0fr8Q8EdoDHGppbNPUXozye0MEg61zfF3f++VHe7JC7aF7ZkCPLRpAznq585vQe4XaKZSTYU2w/jPv74ttaCkUqlYu3Yt+/c/ew9ZccWmZnH87xiEANN32gC5CcZVObH5zo0/vBqLDqOIO7Ra89qTwaS0/96flaSgIPdXjQY9PUzqNcOi42j0TXMfTPKSFMhqCZKuZOCTNKpVMn5lvzzcW9fDoba5zgsRhIAha04TffrnZw71pd0IIvHET6hS4jCobIl5+xGYNnTh28P/0LxetVIZ6jt48CA1a9YstZWcoHswSbt5Aj19Qyq81QJYrXWsrIJJQUkKnqYwrYL1yKUY1WiAOiOZ+MOriQ1cQo3Bucm4SypJgVR+yMAnvTYK0zMdv/m81lBf3rxRHmVKLLGBvlTvPxuTBs65dQj3LqTWx+vIrJQbYEtj3iggIKBE8nI+jy7BRJ2VTuLxTdQY7FPg8bIKJk8nKSiIwqgCxja5W0n0K1pQtevH3Fs5HHVWOgpj0/+1U7rp86Q3iwx80mvnRT1TXYb6VClxKEwqakobmdq1QM/QGGXiQ/QrmpfKUN+9e/cICgpi69atLz65GHQJJokntlLRvhMG5jWe007pB5On0+fpJK/M3xNj3rJaglQYcnGL9MbRZajPyNoOw2p1SP/nDEKtIv3vU+gZGGJoVR8o+eTWAOvXr2fIkCGluqgFdAsmmRGXSbkQSOQKdyJXuKNKiSV270KSTu96op3SDyZPVksQahVCmQ1qFQg1QpmNUKvIehBKTtw9hFCjykgm/kgAxrZNUZjk/hxltQSpsGSPT3rj6DLUp6fQp2KTTsTuW4xQZqOnb4hlny9QGOXuFSvpob68RS379u0rsTaf5clcrEKtyg0kTwQTFPrUGPo1qB5vEXm4yROLzuOo0MAZKLtgMsC5NkuP/g1AUvB2koK3aY6lXfsDM9ehGFarTcLxH1GnJ6IwMsWknpOsliAViwx80htHl6G+jDshJP6xgRofLcDI+i2yo8KI2TUfg0HzMKrR4H/tlNxQ36FDh7CxscHJyanE2nwWXYKJedth2m/SU6AwqaRJB1dWweRxtYRHmLcdlv++/qdi4/YFvi6rJUhFIQOf9MbRZagv+9EtjOvYaxZNGNs0xKjmO2TcCdEEvpIc6iuN8kPPomsweVLties1vy/rYCKrJUhlTc7xSW8cXeaNjG3eJuvedbIf3QIgOyqcrMhrGFWvB4CRPiU21Hf//n2CgoIYPHhwibSni0kd7DAx0H/xiQUo62BSrCQFPRrJHJpSocken/TG0XWoz8xtKDF7FqBKT0S/QhXMXAZSoX5zALKyskm5fATRtgF6enoFXkdX69evZ/DgwVSqVKlY7RRGXjApWq7Osg8mRU1SIKslSEUhc3VKb6Till1qY1uRa/5TePvtt1m7dm2R05epVCrq16/Pvn37ymR+72mvei7Wp8lqCVJZkIFPeiOVRNmlhpYmTJ06lYMHD7Jjxw7ee6/wG9p/+eUX/vOf/3D27NlCv7ekvI7B5FVNnye9GWTgk95YJVWWZ+fOnUyaNInZs2fz6aefPnPos6CyR2cO7WFIq3pMnlB65Yd0JYOJJOWSgU96o5XUUF94eDiDBw/G1taWdevWYWFhoTl2OTKR74+FFVj2SORkYWxiQsdG1Uu1wrkkSbqTgU9645XUUF9WVhZeXl7s27eP7du306pVq9duDk2SJBn4pHKkpIb69uzZw4QJE+gxeQGns2qS+QpWOJck6dlk4JOkIjh49gYTtl8l7re1ZN4JQZ2ZioG5NRbtR2oSX6tzMkn4fT3pN08g1EqMrOpj7f5tmVY4lyQpP7mPT5KK4L+haaDQx6CyJdYfLUTfzIqM8PPE/PwtNcesxMC8BvEHVyLUKmp6rEZhUons6NvA4wrnpVH2SJKkF5OBT5IKKa/skZ6hiVY6MFO7lhiY1SArKgyhyib9nzPUnrRJUzPO2Do3G0pZVjiXJCk/mbJMkgrpWWWPVGkJ5MTfx8jKlqwHf2NgVp3EoJ+IXP4RD9ZNIu1msObc0ih7JEmSbmTgk6RCKqjskVApid23hEpNO2NYrQ6qlDhyYiJQGJtS+5NNVO36b+IOLCUnNhIouwrnkiTlJwOfJBXS02WPhFATu98X9A2o2vXfAOgZGIHCADPXIejpG2Ji2xQT26Zk3L74RDulX+FckqT8ZOCTpEJ6suyREIK4X/xQpSVi1fdL9PRzjxn+r8qDlqcyvpRFhXNJkvKTgU+SCunJskfxh74nJy6S6gPmojB8vFDFpE4TDKpYkXTq/xBqFZn3rpN59yoVGuRWfyirCueSJOUn9/FJUiHFpmbh+u3vpMVFcX/1GNA3RE/xuPZd1Q8mUcm+I9kxEcT96kdOzB0MqlTHvN1wTN9pA4CxgYKTMzrJVZ2S9BLIwCdJRVDcskfdGteQ+/gk6SWRQ52SVASvU4VzSZK0ycAnSUWQV+G8gmHh/gu9rArnkiQ9JjO3SFIR5SWaltUZJOn1Iuf4JKmYXscK55JUnsnAJ0klRFY4l6TXgwx8kiRJUrkiF7dIkiRJ5YoMfJIkSVK5IgOfJEmSVK7IwCdJkiSVKzLwSZIkSeWKDHySJElSuSIDnyRJklSuyMAnSZIklSsy8EmSJEnlyv8DTWTSAQGcbKgAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import networkx as nx\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "\n", "G=nx.karate_club_graph()\n", "nx.draw(G, with_labels=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Breadth first search met loop " ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{0: {19},\n", " 1: {0, 1, 33},\n", " 2: {2,\n", " 3,\n", " 4,\n", " 5,\n", " 6,\n", " 7,\n", " 8,\n", " 9,\n", " 10,\n", " 11,\n", " 12,\n", " 13,\n", " 14,\n", " 15,\n", " 17,\n", " 18,\n", " 20,\n", " 21,\n", " 22,\n", " 23,\n", " 26,\n", " 27,\n", " 28,\n", " 29,\n", " 30,\n", " 31,\n", " 32},\n", " 3: {16, 24, 25}}" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# \n", "\n", "def BFS(G,n): \n", " '''Given a network G and a node n in G, return a dict with distance to n in G as keys, \n", " and the set of nodes with that distances to n as values.'''\n", " tree={}\n", " distance =0\n", " Next = {n}\n", " Memory= Next\n", " while Next :\n", " tree[distance]=Next # set the next level of the tree \n", " #update distance and next\n", " distance+=1\n", " VolgendeLaag=set()\n", " for Knoop in Next:\n", " VolgendeLaag= VolgendeLaag | set(G.neighbors(Knoop)) \n", " Next = VolgendeLaag - Memory # verwijder de knopen in Memory\n", " # update memory\n", " Memory = Memory | Next\n", " return tree\n", "\n", "BFS(G,19)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{0: 1,\n", " 1: 1,\n", " 2: 2,\n", " 3: 2,\n", " 4: 2,\n", " 5: 2,\n", " 6: 2,\n", " 7: 2,\n", " 8: 2,\n", " 9: 2,\n", " 10: 2,\n", " 11: 2,\n", " 12: 2,\n", " 13: 2,\n", " 14: 2,\n", " 15: 2,\n", " 16: 3,\n", " 17: 2,\n", " 18: 2,\n", " 19: 0,\n", " 20: 2,\n", " 21: 2,\n", " 22: 2,\n", " 23: 2,\n", " 24: 3,\n", " 25: 3,\n", " 26: 2,\n", " 27: 2,\n", " 28: 2,\n", " 29: 2,\n", " 30: 2,\n", " 31: 2,\n", " 32: 2,\n", " 33: 1}" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Hoe krijg je hieruit een meer traditionele networkx output van een dict met knopen als sleutels\n", "# en de afstanden als waarden?\n", "\n", "def draai_om(D):\n", " return {knoop:afstand for afstand in D for knoop in D[afstand]}\n", "\n", "draai_om(BFS(G,19))" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "## checken of het klopt\n", "\n", "# We draaien de boel weer terug, en checken of we het origineel krijgen\n", "\n", "def draai_terug(D):\n", " N={afstand:set() for afstand in set(D.values())} # Dit wordt dus {0:{}, 1:{}, 2:{}, 3{}} in ons voorbeeld\n", " for knoop in D:\n", " N[D[knoop]].add(knoop)\n", " return N\n", "\n", "draai_terug(draai_om(BFS(G,19)))== BFS(G,19)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{0: {24},\n", " 1: {25, 27, 31},\n", " 2: {0, 2, 23, 28, 32, 33},\n", " 3: {1,\n", " 3,\n", " 4,\n", " 5,\n", " 6,\n", " 7,\n", " 8,\n", " 9,\n", " 10,\n", " 11,\n", " 12,\n", " 13,\n", " 14,\n", " 15,\n", " 17,\n", " 18,\n", " 19,\n", " 20,\n", " 21,\n", " 22,\n", " 26,\n", " 29,\n", " 30},\n", " 4: {16}}" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Replace explicit for loop by a comprehension\n", "\n", "def BFS(G,n): \n", " tree={}\n", " distance =0\n", " Next = {n}\n", " Memory= Next\n", " while Next :\n", " tree[distance]=Next # set the next level of the tree \n", " #update distance and next\n", " distance+=1\n", " Next = set().union(*(set(G.neighbors(Knoop)) for Knoop in Next)) - Memory\n", " # update memory\n", " Memory = Memory | Next\n", " return tree\n", "\n", "BFS(G,24)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Bipartite network" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Breadth first search algorithm which checks if a graph is bipartite" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "See Fig 5.16 in Easley and Kleinberg\n", "\n", "Use the distance-finding algorithm as a basis.\n", "\n", "Add two sets of nodes \"left and \"right\", to store the two parts." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(False, ({1}, {2}))" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# returns the partition if G is a bipartite graph, else it returns False \n", "# Only works for connected graphs\n", "def IsBipartite(G):\n", " seed = G.nodes()[0]\n", " return IsBipartiteHelper(G,set([seed]),set(),'l')\n", " \n", "def IsBipartiteHelper(G,Left,Right,Direction):\n", " if Direction == 'l':\n", " Next = set().union(*[NextLevel(G,Knoop,Right) for Knoop in Left])\n", " # update memory\n", " NewRight = Right | Next\n", " # test if there is an edge among the nodes in NewRight\n", " if G.subgraph(NewRight).edges()==[]:\n", " if Next==set(): # no more nodes to process\n", " return (Left,NewRight)\n", " else:\n", " return IsBipartiteHelper(G,Left,NewRight,'r')\n", " else:\n", " return False\n", " # now exactly the same for the right hand side\n", " if Direction == 'r':\n", " Next = set().union(*[NextLevel(G,Knoop,Left) for Knoop in Right])\n", " # update memory\n", " NewLeft = Left | Next\n", " # test if there is an edge among the nodes in NewRight \n", " if G.subgraph(NewLeft).edges()==[]:\n", " if Next==set():\n", " return NewLeft,Right\n", " else:\n", " return IsBipartiteHelper(G,NewLeft,Right,'l')\n", " else:\n", " return False\n", "#test\n", "H=nx.Graph()\n", "H.add_edges_from([(1,2)])\n", "IsBipartite(G),IsBipartite(H)\n", " " ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[NbConvertApp] Converting notebook BreadthFirstSearch.ipynb to slides\n", "[NbConvertApp] Writing 268722 bytes to BreadthFirstSearch.slides.html\n", "[NbConvertApp] Redirecting reveal.js requests to https://cdn.jsdelivr.net/reveal.js/2.6.2\n", "Serving your slides at http://127.0.0.1:8000/BreadthFirstSearch.slides.html\n", "Use Control-C to stop this server\n", "WARNING:tornado.access:404 GET /custom.css (127.0.0.1) 3.40ms\n", "WARNING:tornado.access:404 GET /custom.css (127.0.0.1) 0.82ms\n", "WARNING:tornado.access:404 GET /favicon.ico (127.0.0.1) 0.84ms\n", "^C\n", "Interrupted\n", "\n" ] } ], "source": [ "!ipython nbconvert --to slides --post serve BreadthFirstSearch.ipynb" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.3" }, "toc": { "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": true, "toc_position": {}, "toc_section_display": true, "toc_window_display": false } }, "nbformat": 4, "nbformat_minor": 1 }