Skip to content

Instantly share code, notes, and snippets.

@cjauvin
Created August 19, 2014 17:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save cjauvin/26dcdcdae7b6a7447296 to your computer and use it in GitHub Desktop.
Save cjauvin/26dcdcdae7b6a7447296 to your computer and use it in GitHub Desktop.
{
"metadata": {
"name": "",
"signature": "sha256:5d88cc5ee3abf75f4705adfae917ca4a4fa214cbf4a09025e81166a248935557"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "code",
"collapsed": false,
"input": [
"import scipy.spatial\n",
"\n",
"def DBSCAN(points, eps, min_pts): \n",
" tree = scipy.spatial.cKDTree(points)\n",
" neighbors = tree.query_ball_point(points, eps)\n",
" clusters = [] # list of (set, set)'s, to distinguish \n",
" # core/reachable points\n",
" visited = set()\n",
" for i in xrange(len(points)):\n",
" if i in visited: \n",
" continue\n",
" visited.add(i)\n",
" if len(neighbors[i]) >= min_pts:\n",
" clusters.append(({i}, set())) # core\n",
" to_merge_in_cluster = set(neighbors[i])\n",
" while to_merge_in_cluster:\n",
" j = to_merge_in_cluster.pop()\n",
" if j not in visited:\n",
" visited.add(j)\n",
" if len(neighbors[j]) >= min_pts:\n",
" to_merge_in_cluster |= set(neighbors[j])\n",
" if not any([j in c[0] | c[1] for c in clusters]):\n",
" if len(neighbors[j]) >= min_pts:\n",
" clusters[-1][0].add(j) # core\n",
" else:\n",
" clusters[-1][1].add(j) # reachable\n",
" return clusters\n",
"\n",
"points = [(22.214376738504338, -117.58984077972329), (25.329918859114954, -113.19578768859782),\n",
" (24.570980585891803, -100.62882174079044), (26.961834845479476, -85.395310220483253),\n",
" (40.158080954865667, -110.44261354568215), (22.377185307252855, -98.45407770820762),\n",
" (32.182597246654062, -105.90973973759604), (31.435841636030801, -105.48877980002629),\n",
" (27.184915156073007, -119.74217954260372), (33.383480635382092, -109.9155493519732),\n",
" (26.178255373795441, -86.417157561363084), (43.389753626484776, -105.85267062621378),\n",
" (41.789964270198986, -92.916361921685592), (44.304756170519966, -121.28713141520021),\n",
" (39.466033622547755, -82.459478872651005), (40.708254734787019, -113.13252229896504),\n",
" (40.266033588400276, -102.43408100586714), (25.657894774168501, -109.25943663112676),\n",
" (33.998714618471269, -119.26529690876269), (30.780927929393414, -84.656376314787451)]\n",
"points = asarray(points)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 10
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"clusters = DBSCAN(points, 7, 4)\n",
"print('cluster 0:', sorted(clusters[0][0] | clusters[0][1]))\n",
"print('cluster 1:', sorted(clusters[1][0] | clusters[1][1]))\n",
"colors = 'rbgycm' * 10\n",
"scatter(*zip(*points), color=[.75] * 3, alpha=.5, s=20)\n",
"for i, (core, reachable) in enumerate(clusters):\n",
" core = list(core); reachable = list(reachable)\n",
" scatter(*zip(*points[core]), color=colors[i], alpha=1, s=20)\n",
" scatter(*zip(*points[reachable]), color=colors[i], alpha=.4, s=20)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"cluster 0: [0, 1, 8, 17, 18]\n",
"cluster 1: [4, 6, 7, 9, 11, 15]\n"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\nW3zFNHgUFhZq3bp1+uUvf6mvfe1rZ+zn9Xr1wgsv6Cc/+Ylmz56tkpIS/e///b81ffp0bd68WYcP\nH+6yzejRozV16tSIf3JycmJ5OBcl/oL2HOesdzhvPcc56x3OW3zFNHh4PB6lpqaes196erqGDx/e\npf26666TdGrkpDttbW3q6Og4vyIBAIBlYrrG43w1NDRIOhVMPq+iokLPPvusDMPQpZdeqvnz52vC\nhAlWlwgAAHogYYNHR0eH1q5dqyFDhuiyyy4Lt9tsNk2YMEGTJk3SwIEDdeTIEb366qtatmyZfvCD\nH+iaa66JY9UAAOBsog4epmlGPa3hdDp7XVCnJ598UjU1NfrRj34UcVfLoEGDuiw4vfnmm3XnnXfq\nmWeeOWvw2Ldv33nXdbFpbGzUrl274l1Gv8I56x3OW89xznqH89Yzff27M+rgUVVVpbKysqj6VlRU\nKC8vr9dFrVmzRhs2bNBdd92lq6666pz909LSNH36dFVWVur48eMaOHBgxOtZWVnKysrSHXfc0eua\nLmbjx4+Pdwn9DuesdzhvPcc56x3OW890/h7tC1EHj/z8fC1btiyqvl6vt9cFbdq0SStXrtSXv/zl\nHgWF7OxsSVJzc3O3wWPFihWqr6/vdV0AAFys4hI8vF6vpk2b1ic7PZPt27frJz/5iSZNmqSlS5f2\naNujR49K6n4hqtS3Jw0AAPROwjwyvaqqSo8++qjGjRunhx9++Iz9mpqaurTV1dVp48aNGjVq1HmN\ntgAAgNiK+V0tq1evliQdOnRIkrR582bt3r1bkjRv3jxJpx6D/tBDD8lms+lLX/qS3n777Yj3GDVq\nVPjJp88++6yOHDmioqIiZWVlqba2VuvXr5fP59OiRYtifTgAAOA8GG+//bYZyx1MmTJFhmHINM3w\nv6VTj05/6623JEnvv/++ysrKIl4PF2gY+vrXv65vfOMbkqQtW7Zo3bp1qqmpUXNzs9LS0jR27FjN\nmzdPBQUFsTwUAABwnmIePAAAADolzBoPAABw4UvYJ5f2xP79+/Wb3/xG//M//6Njx44pPT1dl19+\nuebPn69hw4ZF9P3kk0/085//XHv37lVSUpKuvvpqfetb3zrj3TAXsmjP249+9CNt3ry5y/Z5eXmq\nqKiwsuS4+/jjj1VRUaGDBw+qoaFBTqdTeXl5uu2223TTTTdF9OVa+4dozxvX2tm9+OKLeuGFF3TJ\nJZfohRdeiHiN6617ZzpnXGv/0LncoTs///nPdfnll4f/3BfX2QURPCorK/Xhhx9q8uTJGjlypBoa\nGvTrX/9aCxcu1M9//nONGDFC0qm7X5YsWaK0tDTdfffdam1t1SuvvKKPP/5YzzzzjByOC+J0RC3a\n8yZJSUlJuv/++yO2T0lJsbrkuPvb3/6mtrY2TZs2TVlZWfL5fNq2bZt++MMf6tixY+Fnz3CtRYr2\nvElca2dSV1enl156SW63W4ZhdHmN662rs50ziWvt826//XYVFhZGtA0dOjT83311nV0QV+Ps2bN1\n2WWXyW63h9tuuOEG3XXXXaqsrNSDDz4o6VTy9fl8WrlyZfiBY5dddpnuv/9+bdq0SSUlJXGpP16i\nPW+S5HA4NHXq1HiUmVCuvvpqXX311RFts2bN0r/+67/q9ddfD/8C5VqLFO15k7jWzuSZZ57RP/3T\nPykYDHZ5rADXW/fOds4krrXPGzt2rL70pS+d8fW+us4uiDUe//RP/xTxy1OScnNzNXz4cNXU1ITb\nfv/732vixInhEyademzusGHDtHXrVqvKTRjRnjfp1Hf1hEIhtbS0WFliv2Cz2ZSdnR1xLrnWzq27\n8yZxrXWnqqpKv/vd7/Stb30rfIfg6bjeujrXOZO41j7PNE21trYqGAx2+3pfXWcXxIhHd0zT1Gef\nfRZ+/kddXZ0aGxu7DCNJpxLbe++9Z3WJCenz562Tz+fTjBkz5PP5lJaWpilTpmjhwoXyeDxxqjS+\n2tvb5fP5dPLkSb377rv605/+pMWLF0viWjubs523TlxrkYLBoH72s59pxowZEdOfnbjeujrXOevE\ntRbpscceU1tbm2w2m6688kr967/+a/i66svr7IINHm+++abq6+s1f/58SVJDQ4Ok7r9Hxuv1qrm5\nWYFA4KKdC+30+fMmnXrc/L/8y7/8//buHrSpNY7j+DeICSmSZLCTtaiIoAGHiNr6EnwFHRy0xkFE\nQeziC5JFEacWl4oitVoHaRG3gghKQKhR6KJQUUGHdlCpNcVgajB9ifYYmzt4k5vTJL0Rck97k99n\nap7zBJ78+SX8z+l5YdWqVUxPT9Pf38+DBw94//49165dy9tjrQadnZ2EQiEAFixYwJkzZ9i3bx+g\nrM1mtrqBslbIw4cP+fLlC8ePHy+4XXnL9281A2Ut18KFC/H7/TQ0NOB2uxkaGqKnp4ezZ89y48YN\nVq5cWdacVWQSh4eHaW9vx+v1Zp8vMzU1BYDdbs+bnxmbmpqqqi/nTIXqBtDc3Gyat337durq6ujq\n6vd3u9wAAAQ0SURBVKKvr48dO3ZYvdQ5d/DgQbZt28bXr18Jh8O0t7djt9vZs2ePsjaL2eoGytpM\niUSCO3fucPTo0aJXDShvZqXUDJS1XF6vF6/Xm33d2NiI3+/nxIkT3L59m7a2trLmrCLO8cgVj8e5\ncOECixYtoqWlJft/PYfDAYBhGHnvyYxl5lSjYnUrJhAIYLPZePXqlUUrnF/q6+vx+Xzs3r2btrY2\nfD4fN2/exDAMZW0WxeqW+VErpJqz1t3djdvt5sCBA0XnKG9mpdSsmGrO2kxLlixh06ZNvH79mnQ6\nXdacVVTjMTExwfnz55mcnOTy5cumQ0KZvzOHi3LF43FcLlfV7BHMNFvdirHb7bhcLsbHxy1Y4fzn\n9/uZnJxkeHhYWfsDmbp9+vSp6JxqzVokEiEUCrF//35isRjRaJRoNIphGPz8+ZNoNMr4+LjylqPU\nmhVTrVkrpra2llQqxY8fP8qas4pJo2EYXLx4kZGREa5cuUJ9fb1pe21tLR6Ph8HBwbz3Dg4OVu1z\nXv6tbsUkk0kSiQQej+c/XuH/Q2aP3WazKWt/ILduxVRr1kZHR0mn03R0dNDR0ZG3/fDhwzQ1NXHq\n1Cnl7W9/UrNCqjVrxXz+/BmHw4HT6cTpdJYtZxXRePz69YuWlhYGBga4dOkSa9asKThv69at9Pb2\nEovFspcDvXz5kkgkQiAQsHLJ80IpdTMMg1QqRU1NjWn87t27AKxfv96Stc4X3759y/tRSqVS9Pb2\n4nK5WLZsGaCszVRK3ZQ1s+XLl9Pa2mpqytLpNN3d3Xz//p3Tp09nb+6kvP1Was2UNbNC3893797x\n7NkzGhoasmPlyllFNB63bt3i+fPnNDY2kkgkePz4sWl75pbMR44coa+vj2AwSFNTE8lkkp6eHlas\nWMHevXvnYulzqpS6xeNxmpub2blzJ0uXLgXgxYsX9Pf3s2HDBrZs2TIXS58zV69eJZlMsnbtWhYv\nXkw8HiccDhOJRDh37lz2THhlzayUusViMWUth9vtLviZ7927B8DmzZuzY8rbb6XWLBqNKms5Wltb\ncTgceL1ePB4PHz9+JBQK4XQ6TSfhlitnFfF02mAwyJs3b0in8z+KzWbjyZMn2ddDQ0N0dnby9u1b\n7HY7Gzdu5OTJk1V5aK2Uuk1MTHD9+nUGBgYYHR1lenqauro6du3axaFDh6rqkjOAp0+f8ujRIz58\n+MDY2Bg1NTWsXr2aQCDAunXrTHOVtX+UUjdlrTTBYJCxsTG6urpM48pbcTNrpqyZ3b9/n3A4zMjI\nCMlkEo/Hg8/n49ixY6ZbpkN5clYRjYeIiIj8P1TUVS0iIiIyv6nxEBEREcuo8RARERHLqPEQERER\ny6jxEBEREcuo8RARERHLqPEQERERy6jxEBEREcuo8RARERHLqPEQERERy6jxEBEREcuo8RARERHL\n/AVbb0J+fwRn8QAAAABJRU5ErkJggg==\n",
"text": [
"<matplotlib.figure.Figure at 0x1113d0dd0>"
]
}
],
"prompt_number": 34
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import sklearn.cluster\n",
"\n",
"clusters = sklearn.cluster.DBSCAN(7, 4).fit_predict(points)\n",
"print('cluster 0:', where(clusters == 0)[0])\n",
"print('cluster 1:', where(clusters == 1)[0])\n",
"colors = 'rbgycm' * 10\n",
"scatter(points[:,0], points[:,1], color=[.75] * 3, alpha=.5, s=20)\n",
"for i in set(clusters):\n",
" if i < 0: continue\n",
" scatter(*zip(*points[where(clusters == i)[0]]), \n",
" color=colors[int(i)], alpha=1, s=20)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"cluster 0: [ 0 1 8 17 18]\n",
"cluster 1: [ 4 6 7 9 11 15]\n"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\narV06VJVV1frF7/4RcRdLf369Wuz4PTqq6/WLbfcoqeeeuqEwWPXrl2nXNeZ5tChQ9q2bVu8y+hR\nOGddw3nrPM5Z13DeOqe7f3dGHTwqKytVUlISVd+ysjLl5OR0uaiVK1dq7dq1uvXWW3XRRRedtH9a\nWpomTZqk8vJyHTx4UH379o3YnpmZqczMTN10001drulMNnLkyHiX0ONwzrqG89Z5nLOu4bx1Tuvv\n0e4QdfDIzc3VwoULo+qbkZHR5YLWr1+v5cuX69prr+1UUMjKypIkNTY2ths8li1bprq6ui7XBQDA\nmSouwSMjI0MTJ07sljftyObNm/XLX/5Sl112mRYsWNCpfffv3y+p/YWoUveeNAAA0DUJ88j0yspK\nPfDAAxoxYoTuu+++Dvs1NDS0aautrdW6des0dOjQUxptAQAAsRXzu1pWrFghSdq7d68kacOGDdq+\nfbskaebMmZKOPQb93nvvlc1m0+WXX64333wz4jWGDh0afvLp008/rX379qmgoECZmZmqqanRmjVr\n5PV6NXfu3FgfDgAAOAXGm2++acbyDcaNGyfDMGSaZvhP6dij09944w1J0vvvv6+SkpKI7eECDUM3\n33yz/v3f/12StHHjRlVUVKi6ulqNjY1KS0vT8OHDNXPmTOXl5cXyUAAAwCmKefAAAABolTBrPAAA\nwOkvYZ9c2hkffvihfv/73+uvf/2rDhw4oN69e+v888/XrFmzNHjw4Ii+n376qZ544gnt3LlTSUlJ\nuvjii/W9732vw7thTmfRnrdf/OIX2rBhQ5v9c3JyVFZWZmXJcffJJ5+orKxMe/bsUX19vZxOp3Jy\ncnTddddpwoQJEX251v4l2vPGtXZiL7zwgp577jmdffbZeu655yK2cb21r6NzxrX2L63LHdrzxBNP\n6Pzzzw//vTuus9MieJSXl+tvf/ubrrjiCg0ZMkT19fX67W9/qzlz5uiJJ57QOeecI+nY3S/z589X\nWlqabrvtNh09elQvv/yyPvnkEz311FNyOE6L0xG1aM+bJCUlJemuu+6K2D8lJcXqkuPun//8p5qb\nmzVx4kRlZmbK6/Vq06ZN+vnPf64DBw6Enz3DtRYp2vMmca11pLa2Vi+++KLcbrcMw2izjeutrROd\nM4lr7cuuv/565efnR7QNGjQo/L+76zo7La7G6dOn67zzzpPdbg+3XXnllbr11ltVXl6ue+65R9Kx\n5Ov1erV8+fLwA8fOO+883XXXXVq/fr2KioriUn+8RHveJMnhcGj8+PHxKDOhXHzxxbr44osj2qZN\nm6bvfve7evXVV8O/QLnWIkV73iSutY489dRTuvDCCxUMBts8VoDrrX0nOmcS19qXDR8+XJdffnmH\n27vrOjst1nhceOGFEb88JSk7O1tnnXWWqqurw21/+tOfNHr06PAJk449Nnfw4MF66623rCo3YUR7\n3qRj39UTCoXU1NRkZYk9gs1mU1ZWVsS55Fo7ufbOm8S11p7Kykr98Y9/1Pe+973wHYLH43pr62Tn\nTOJa+zLTNHX06FEFg8F2t3fXdXZajHi0xzRNffHFF+Hnf9TW1urQoUNthpGkY4nt3XfftbrEhPTl\n89bK6/VqypQp8nq9SktL07hx4zRnzhx5PJ44VRpfLS0t8nq9OnLkiN555x395S9/0bx58yRxrZ3I\nic5bK661SMFgUI8++qimTJkSMf3ZiuutrZOds1Zca5EWLVqk5uZm2Ww2ffWrX9V3v/vd8HXVndfZ\naRs8Xn/9ddXV1WnWrFmSpPr6ekntf49MRkaGGhsbFQgEzti50FZfPm/SscfNf/vb39a5556rUCik\n9957T6+88oo++ugjPfLII20+sZ4JnnzySb366quSJLvdrv/4j//Q1KlTJXGtnciJzpvEtdaeiooK\n/fOf/9Stt97a7naut7ZOds4krrXjJSUl6fLLL9cll1yi3r17a+/evXrppZc0f/58Pf7448rLy+vW\n6+y0vBKrq6u1dOlSXXjhheHvl/F6vZIkp9PZpn9rm9frPaP+cX5Ze+dNkm677baIfldeeaUGDx6s\n//7v/9amTZs0btw4q0uNuxtuuEFjx45VXV2dXn/9dS1dulROp1OTJk3iWjuBE503iWvtyxoaGvQ/\n//M/uvnmmzu8a4DrLVI050ziWjvehRdeqAsvvDD899GjR+vyyy/X7NmztXz5cj300EPdep2dFms8\njldfX6+7775bqampuv/++8Pzei6XS5Lk8/na7NPa1trnTNTReevIt771LRmGoW3btllUYWLJzc1V\nQUGBJkyYoIceekgFBQV64okn5PP5uNZOoKPz1vpDrT1n8rX23HPPqXfv3vrmN7/ZYR+ut0jRnLOO\nnMnX2pdlZ2fr0ksv1V//+leZptmt19lpFTyOHDmihQsXqqmpSYsW/f/27h2keT0MA/jTpSUdYga7\nqaibCg6KN7wsujhKqYMITi7qksXFyeJ00MWCTjq4CeJUEGoVXBQUFx3aQcRLi4GUYluNEqM9w3fa\n05vc6A0AAANHSURBVKg9J0K/6Nc+vyn9J4V/Xp6WNyGXv0ynhHLLudNFhZLJJERRrJgjgvf+q27F\nOJ1OiKKITCZjwwx/voGBATw+PuLm5oZZ+4Jc3W5vb4tuU6lZi8ViCAaDGBkZgaqqUBQFiqJA13W8\nvLxAURRkMhnmrYDVmhVTqVkrxuPxwDAMPD8/lzRnZZNGXdcxNzeHeDyOxcVF1NXVmdZ7PB5IkoRo\nNPrhu9FotGLf8/J/dStG0zSkUilIkvSbZ/hnyB2xOxwOZu0LCutWTKVmLZFIIJvNIhAIIBAIfFg/\nNjYGr9eL6elp5u0fX6nZZyo1a8Xc3d3B5XJBEAQIglCynJVF4/H6+or5+XlEIhEsLCygubn50+36\n+/sRCoWgqmr+dqDT01PEYjH4fD47p/wjWKmbruswDANut9s0vrGxAQDo6OiwZa4/xf39/Yc/JcMw\nEAqFIIoi6uvrATBr71mpG7Nm1tDQAL/fb2rKstks1tfX8fT0hJmZmfzDnZi3X6zWjFkz++z3eXFx\ngcPDQ3R3d+fHSpWzsmg8VldXcXR0hJ6eHqRSKezu7prW5x7JPD4+joODA8iyDK/XC03TsLm5icbG\nRgwPD3/H1L+Vlbolk0lMTk5icHAQtbW1AICTkxMcHx+js7MTfX193zH1b7O0tARN09Da2orq6mok\nk0mEw2HEYjHMzs7mr4Rn1sys1E1VVWatQFVV1af7vLW1BQDo7e3NjzFvv1itmaIozFoBv98Pl8uF\nlpYWSJKE6+trBINBCIJgugi3VDkri7fTyrKMs7MzZLMfd8XhcGBvby//+erqCisrKzg/P4fT6URX\nVxempqYq8tSalbo9PDxgeXkZkUgEiUQCb29vqKmpwdDQEEZHRyvqljMA2N/fx87ODi4vL5FOp+F2\nu9HU1ASfz4f29nbTtszav6zUjVmzRpZlpNNprK2tmcaZt+Le14xZM9ve3kY4HEY8HoemaZAkCW1t\nbZiYmDA9Mh0oTc7KovEgIiKiP0NZ3dVCREREPxsbDyIiIrINGw8iIiKyDRsPIiIisg0bDyIiIrIN\nGw8iIiKyDRsPIiIisg0bDyIiIrINGw8iIiKyDRsPIiIisg0bDyIiIrINGw8iIiKyzd99ivNa82QA\nugAAAABJRU5ErkJggg==\n",
"text": [
"<matplotlib.figure.Figure at 0x111071b90>"
]
}
],
"prompt_number": 39
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"clusters = sklearn.cluster.DBSCAN(7, 4).fit_predict(points)\n",
"print('cluster 0:', where(clusters == 0)[0])\n",
"print('cluster 1:', where(clusters == 1)[0])\n",
"colors = 'rbgycm' * 10\n",
"scatter(points[:,0], points[:,1], color=[.75] * 3, alpha=.5, s=20)\n",
"for i in set(clusters):\n",
" if i < 0: continue\n",
" scatter(*zip(*points[where(clusters == i)[0]]), \n",
" color=colors[int(i)], alpha=1, s=20)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"cluster 0: [ 4 6 7 9 11 15 17]\n",
"cluster 1: [ 0 1 8 18]\n"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAh4AAAHECAYAAAB2jiOeAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAAIABJREFUeJzs3Xt4VNW9//HPnvvkAiQh3EKiQDBeSksDUbFeEEFAgtJq\neRoUawWpWg7wS+uPeml7PNqLVjB4BfHoSdEGhf56DAqUKkqL9tEKNYBFSlRMFUJDIiFAMtf9+4Nm\nZEyAScjsmcD79Tx9KGuvPfPdy03ymbXX3mO8/vrrpgAAACxgS3QBAADg9EHwAAAAliF4AAAAyxA8\nAACAZQgeAADAMgQPAABgGYIHAACwDMEDAABYhuABAAAsQ/AAAACWcSS6gKNt2rRJzz//vD7++GP5\nfD71799fkyZN0pQpU2SzRWekbdu2acmSJaqurlZKSopGjx6tmTNnyuv1Jqh6AABwIvabbrrpPxNd\nhCS98847mj9/vrxer771rW9p1KhROnDggH73u9/p4MGDOv/88yN9q6urNXfuXKWnp+v6669XTk6O\nfv/732vHjh0aO3ZsAo8CAAAcT9LMeKxbt05Op1OLFi1SWlqaJKm4uFjz5s3T2rVrNXv27Ejfp59+\nWj169FBZWVlkhqNv375asGCB3n33XY0cOTIhxwAAAI4vadZ4uN1uOZ1OpaamRrVnZmbK4/FE/n7o\n0CFt2rRJ48aNi7qsMn78eHm9Xr3xxhtWlQwAADooaYLHN7/5TZmmqQULFqimpka1tbWqrKzUxo0b\nNW3atEi/jz76SKFQSAUFBVH7OxwO5efna+fOnVaXDgAAYpQ0l1ry8/O1cOFC3XXXXVq9erUkyWaz\nae7cuZo8eXKkX0NDg6QjMyFflpGRoW3btllTMAAA6LC4BA/TNBUIBGLq63K5JEk1NTW688471bdv\nX916661yuVx67bXX9MgjjygjI0MXX3yxJMnn80Xt9+XXat3+ZfX19aqvr+/M4QAAcFrLyspSVlZW\nl7xWXIJHVVWVSktLY+pbXl6u3NxcPfnkk7Lb7Xr44Ycjazouu+wylZaWatGiRbroootks9nkdrsl\nSX6/v81r+f3+qPUgrerr6zVnzhzt3r37JI4KAIDTU1ZWlpYsWdIl4SMuwSMvL0/z58+PqW/rQWzd\nulUXXXRRm+AwatQovffee6qtrdWAAQMil1haL7kcraGhod1Bqa+v1+7du/Xcc8/pnHPO6ejhnNbm\nzZunsrKyRJfRrTBmncO4dRxj1jmMW8ds375dN9xwg+rr65M3eGRmZmr8+PEd2icUCikUCrVpDwaD\nke2SNGjQINntdn3wwQe67LLLIv0CgYCqq6s1ZsyYY77HOeeco8LCwg7Vdbrr1asXY9ZBjFnnMG4d\nx5h1DuOWWElzV8vQoUP17rvv6sCBA5G2UCikN954QykpKRowYIAkKS0tTSNGjNCrr76q5ubmSN91\n69appaUlKowAAIDkkjR3tdxwww268847dfvtt6u4uFgul0vr16/Xzp07NWPGDNnt9kjfGTNmaPbs\n2Zo7d66Ki4tVV1enFStWqKioSEVFRQk8CgAAcDxJEzzOP/98/fKXv9Tzzz+v8vJyhUIh5eXlqbS0\nVMXFxVF9hw4dqoceekhPPfWUnnjiCaWkpOiqq67SLbfckqDqAQBALJImeEhHwsfR38lyPMOGDdOj\njz4a54pQUlKS6BK6Hcascxi3jmPMOodxS6ykWeOB5MQ/0I5jzDqHces4xqxzGLfEIngAAADLEDwA\nAIBlCB4AAMAyBA8AAGAZggcAALAMwQMAAFiG4AEAACxD8AAAAJYheAAAAMsQPAAAgGWS6rtaAABS\nMBjUoUOHZJqmvF6v3G53oksCugzBAwCSSGNjo/bu3Su/3y9JcjgcysrKUu/evWUYRoKrA04el1oA\nIEn4fD7V1tYqGAwqJSVFKSkpkqS6ujo1NTUluDqgaxA8ACBJNDU1KRAIyOPxyDAMGYYht9st0zTV\n2NiY6PKALkHwAIAkEQ6HJanNJRXDMBQMBhNREtDlCB4AkCRcLpekLwKIJJmmqVAoFLnsAnR3LC4F\ngCSRnp6u1NRUHTx4UE6nU4ZhRC699OzZM9HlAV2CGQ8ASBJ2u10DBw5U7969ZbMd+fHcq1cvDRw4\nUB6PJ8HVAV2DGQ8ASCJOp1P9+/dX3759ZZqmbDYbt9HilELwAIAk1DrjAZxqOLMBAIBlCB4AAMAy\nBA8AAGAZggcAALAMwQMAAFiG4AEAACxD8AAAAJYheAAAAMsQPAAAgGWS6smlmzZt0vPPP6+PP/5Y\nPp9P/fv316RJkzRlypSop/jNmzdPW7ZsabN/UVGRHnjgAStLBgAAHZA0weOdd97Rj3/8Yw0aNEjX\nX3+9PB6P3n77bT322GPavXu3Zs+eHdW/T58+mjlzZlRb7969rSwZ6DTTNHXw4EHt379fPp9PHo9H\nvXr1UmpqKt/LAeCUljTBY926dXI6nVq0aJHS0tIkScXFxZo3b57Wrl3bJnikpqZq7NixiSgVOGmN\njY3as2ePQqGQHA6H9u/fr6amJvXv31+9evVKdHkAEDdJs8bD7XbL6XQqNTU1qj0zM7Pdr4M2TVOh\nUEjNzc1WlQh0iVAopLq6OpmmqdTUVLndbqWmpso0Te3bt0+hUCjRJQJA3CRN8PjmN78p0zS1YMEC\n1dTUqLa2VpWVldq4caOmTZvWpv+nn36qiRMnatKkSbr22mv1zDPP8AMb3YLP51MgEJDL5Ypqd7lc\n8vv98vv9CaoMAOIvaS615Ofna+HChbrrrru0evVqSUe+Fnru3LmaPHlyVN+cnBwVFhZq8ODBam5u\n1oYNG/Tcc8/p008/1U9/+tNElA/EzGazyTAMmaYZ1W6apgzDYI0HgFNaXIKHaZoKBAIx9W391FdT\nU6M777xTffv21a233iqXy6XXXntNjzzyiDIyMnTxxRdH9rnjjjuiXmPcuHFasGCBXnnlFV133XU6\n99xzu+5ggC7mdrvl9Xp18OBB2e12GYahcDgsn8+n9PR0ud3uRJcIAHETl+BRVVWl0tLSmPqWl5cr\nNzdXTz75pOx2ux5++OHImo7LLrtMpaWlWrRokUaNGiW73X7M15k6dapeeeUVbd68meDRjZmmqebm\nZoVCIbnd7jaXI04FhmGoX79++uyzz3T48OFIe0pKivr27cuMB4BTWlyCR15enubPnx9T36ysLEnS\n1q1bddFFF7VZSDpq1Ci999572rt3rwYMGHDM18nOzpYkNTU1HbPPvHnz2twxUFJSopKSkphqRXy1\ntLSotrZWhw8fVjgclsPhUEZGhrKzs6Oe43Iq8Hg8OuOMM3Tw4EEFAgE5nU6lpaXJ4Uiaq58ATkMV\nFRWqqKiIatu/f3+XvkdcfsplZmZq/PjxHdonFAq1uzg0GAxGth/Pnj17JOm4tyKWlZWpsLCwQ3XB\nGuFwWHv27NGhQ4fk8Xhks9kUCAS0b98+OZ1OZWZmJrrELudwOLh1FkBSae/D+ObNmzVixIgue4+k\n+Rg5dOhQvfvuuzpw4ECkLRQK6Y033lBKSkpktuPw4cNtVv2bpqlly5bJMAwVFRVZWje6xqFDh3T4\n8GF5vd7IugeXyyXDMPT555+3WYgJAOiekmZe94YbbtCdd96p22+/XcXFxXK5XFq/fr127typGTNm\nRNZ3/OMf/9B9992nK664QgMGDJDf79ef//xnvf/++5o8ebLy8/MTfCTojGAwKNM021xSsdvtCgaD\nCofDx13jAwDoHpImeJx//vn65S9/qeeff17l5eUKhULKy8tTaWmpiouLI/369eunr371q9q4caMa\nGhpkGIbOPPPMNv3QvbhcLtlsNgWDwah1DsFgUCkpKafcGg8AOF0lTfCQjoSP888//7h9+vXrp5/9\n7GcWVQSrpKSkKC0tTQcOHFA4HI6s8TAMQ5mZmdzpAQCniKQKHjh9GYahAQMGyOl06sCBAwoGg3K7\n3crKylKPHj0SXR4AoIsQPJA0HA6H+vfvr+zsbIVCITmdTi6xAMAphuCBuDJNUy0tLTJNU263O6YF\nog6Hg+dZAMApip/uiJvm5mbt3bs38nROl8ul3r17q2fPnqzZAIDTFMEDcREMBrV79241NzfL7XbL\nMAz5/X7t2bNHDodDaWlpiS4RAJAAXEBHXDQ1Nam5uVkpKSlyOByy2+3yer0KhUJd/vhdAED3QfBA\nXLQ+6v7Ll1Tsdrt8Pl8iSgIAJAGCB+LC6XRKUptHnYdCoTZfBAgAOH2wxgNxkZaWJq/Xq8OHD0et\n8bDb7erZs2eiywMAJAgzHogLh8OhnJwcpaenKxgMyu/3y+12a8CAASwsBYDTGDMeiBuPx6O8vDz5\nfL7Iczx4IBgAnN4IHogrwzBY0wEAiODjJwAAsAzBAwAAWIbgAQAALEPwAAAAliF4AAAAyxA8AACA\nZQgeAADAMgQPAABgGYIHAACwDMEDAABYhuABAAAsQ/AAAACWIXgAAADLEDwAAIBlCB4AAMAyBA8A\nAGAZggcAALAMwQMAAFiG4AEAACzjSHQBR3v33XdVXl6u6upqOZ1OFRYW6tZbb1W/fv3a9N22bZuW\nLFmi6upqpaSkaPTo0Zo5c6a8Xm8CKgcAALFImhmPv/zlL5o/f76CwaBmzZqlqVOnqqqqSnPmzFFj\nY2NU3+rqav3whz+U3+/X7bffrkmTJunll1/Wvffem6DqAQBALJJmxmPJkiXKycnRY489JrvdLkka\nNWqUZs2apd/+9re67bbbIn2ffvpp9ejRQ2VlZZEZjr59+2rBggV69913NXLkyIQcAwAAOL6kmPE4\ncOCAampqdPHFF0dChyQNGTJEeXl5Wr9+faTt0KFD2rRpk8aNGxd1WWX8+PHyer164403rCwdAAB0\nQFIEj0AgIElyu91ttnk8HjU0NOjzzz+XJH300UcKhUIqKCiI6udwOJSfn6+dO3fGv2AAANApSRE8\nMjIylJaWpq1bt0a1NzY2ateuXZKkffv2SZIaGhokSZmZme2+Tn19fXyLBQAAnRaXNR6maUZmMU7E\n5XLJZrNp8uTJqqio0NKlSzVx4kQdOnRIS5YsUSgUkmma8vl8khT50+VytftardsBAEDyiUvwqKqq\nUmlpaUx9y8vLlZubq+9973tqbGzU8uXLVVFRIUkqKirSxIkTtWrVqsh6jtbLMX6/v81r+f1+eTye\nY77XvHnz1KtXr6i2kpISlZSUxFQrAACnsoqKisjv4Fb79+/v0veIS/DIy8vT/PnzY+rbesnE4XDo\nRz/6kWbMmKFPP/1UmZmZysnJ0X333SebzaacnJyo/q2XXI7W0NCgrKysY75XWVmZCgsLO3o4AACc\nFtr7ML5582aNGDGiy94jLsEjMzNT48eP79S+GRkZysjIkCSFQiFVVVXpnHPOicxkDBo0SHa7XR98\n8IEuu+yyyH6BQEDV1dUaM2bMyR8AAACIi6RYXHosL774ohoaGjR16tRIW1pamkaMGKFXX31Vzc3N\nkfZ169appaUlKowAAIDkkjQPEPvjH/+oP/3pT/ra174mj8ejTZs2acOGDZo0aZIuueSSqL4zZszQ\n7NmzNXfuXBUXF6uurk4rVqxQUVGRioqKEnQEAADgRJImeOTm5qqpqUnLli2Tz+dTXl6eSktLVVxc\n3Kbv0KFD9dBDD+mpp57SE088oZSUFF111VW65ZZbElA5AACIVdIEj7PPPltlZWUx9x82bJgeffTR\nOFYEAAC6WlKv8QAAAKcWggcAALAMwQMAAFiG4AEAACxD8AAAAJYheAAAAMsQPAAAgGUIHgAAwDIE\nDwAAYBmCBwAAsAzBAwAAWIbgAQAALEPwAAAAliF4AAAAyxA8AACAZRyJLgAAkNwCgYAOHTok0zTl\n8Xjk8XhkGEaiy0I3RfAAABxTY2OjamtrFQgEJEl2u10ZGRnq27cv4QOdwqUWAEC7fD6famtrFQqF\nlJKSopSUFNlsNtXX16uxsTHR5aGbIngAANp18OBBBQKByKUVwzDkcrkkSQcOHEhwdeiuCB4AgHaF\nQiFJanNJxWazKRgMJqIknAIIHgCAdrXOdLQGEEkyTVPBYFCpqakJrAzdGYtLAQDtSktLU1pamg4c\nOCCHwyHDMCKXXnr16pXo8tBNETwAAO2y2WzKycmR1+vVgQMHFA6HlZWVpczMTLnd7kSXh26K4AEA\nOCaHw6E+ffooOztbpmnKZuMKPU4OwQMAcEKtd7UAJ4voCgAALEPwAAAAliF4AAAAyxA8AACAZQge\nAADAMkl1V8u7776r8vJyVVdXy+l0qrCwULfeeqv69esX1W/evHnasmVLm/2Lior0wAMPWFUuAADo\noKQJHn/5y190zz336KyzztKsWbN06NAh/e53v9OcOXO0dOlS9ezZM6p/nz59NHPmzKi23r17W1ky\nAADooKQJHkuWLFFOTo4ee+wx2e12SdKoUaM0a9Ys/fa3v9Vtt90W1T81NVVjx45NRKkAAKCTkmKN\nx4EDB1RTU6OLL744EjokaciQIcrLy9P69evb7GOapkKhkJqbm60sFQAAnISkmPEIBAKS1O6z/z0e\nj2pqatTQ0KDMzMxI+6effqqJEycqGAwqIyNDkyZN0ne/+92o4AIAAJJLUgSPjIwMpaWlaevWrVHt\njY2N2rVrlySpvr4+EjxycnJUWFiowYMHq7m5WRs2bNBzzz2nTz/9VD/96U+tLh8AAMQoLsHDNM3I\nLMaJuFwu2Ww2TZ48WRUVFVq6dKkmTpyoQ4cOacmSJQqFQjJNUz6fL7LPHXfcEfUa48aN04IFC/TK\nK6/ouuuu07nnntulxwMAALpGXIJHVVWVSktLY+pbXl6u3Nxcfe9731NjY6OWL1+uiooKSUduj504\ncaJWrVolr9d73NeZOnWqXnnlFW3evJngAQBAkopL8MjLy9P8+fNj6tt6+cThcOhHP/qRZsyYoU8/\n/VSZmZnKycnRfffdJ5vNppycnOO+TnZ2tiSpqanpmH3mzZunXr16RbWVlJSopKQkploBADiVVVRU\nRD78t9q/f3+XvkdcgkdmZqbGjx/fqX0zMjKUkZEhSQqFQqqqqtI555wjj8dz3P327NkjSW2CxdHK\nyspUWFjYqboAADjVtfdhfPPmzRoxYkSXvUdS3E57LC+++KIaGho0derUSNvhw4fl9/uj+pmmqWXL\nlskwDBUVFVldJgAAiFFS3NUiSX/84x/1pz/9SV/72tfk8Xi0adMmbdiwQZMmTdIll1wS6fePf/xD\n9913n6644goNGDBAfr9ff/7zn/X+++9r8uTJys/PT+BRAACA40ma4JGbm6umpiYtW7ZMPp9PeXl5\nKi0tVXFxcVS/fv366atf/ao2btyohoYGGYahM888s92+AAAguSRN8Dj77LNVVlZ2wn79+vXTz372\nMwsqAgAAXS2p13gAAIBTC8EDAABYhuABAAAsQ/AAAACWIXgAAADLEDwAAIBlCB4AAMAyBA8AAGAZ\nggcAALAMwQMAAFiG4AEAACxD8AAAAJYheAAAAMsQPAAAgGUIHgAAwDIEDwAAYBmCBwAAsAzBAwAA\nWIbgAQAALEPwAAAAlnEkuoDTkWma8vl8CofDcrlccjj4zwAAOD3wG89iPp9PtbW1Onz4cCR4ZGZm\nKjMzU4ZhJLo8AADiikstFgqFQvrss8/U1NQkh8Mhj8ejYDCovXv36sCBA4kuDwCAuCN4WOjQoUNq\nbm6W1+uVw+GQzWaTx+ORaZr6/PPPE10eAABxR/CwUCAQkGmastmih93hcMjv98s0zQRVBgCANQge\nFnI6nTIMQ+FwOKo9GAzK7XazxgMAcMpjcamF0tLSlJKSokOHDsnlcslms8nv98swDGVkZCS6PAAA\n4o4ZDwvZbDYNGDBAPXv2VCgUkt/vl8vlUv/+/ZWenp7o8gAAiDtmPCzmdrs1cOBA+f3+yO20drs9\n0WUBAGAJgkcCGIYht9ud6DIAALAcl1oAAIBl4jrj0dDQoJUrV2r79u3asWOHWlpatHDhQg0fPrzd\n/tu2bdOSJUtUXV2tlJQUjR49WjNnzpTX643qZ5qmli9frsrKSjU0NGjgwIG6/vrrNWbMmHgeDgAA\nOElxnfGoqanR8uXLVV9fr8GDB0vSMW8Zra6u1g9/+EP5/X7dfvvtmjRpkl5++WXde++9bfo+/fTT\nWrp0qYqKijRnzhz17dtX999/v9avXx/PwwEAACcprjMeBQUFqqysVFpamjZs2NBuiGj19NNPq0eP\nHiorK4vMcPTt21cLFizQu+++q5EjR0qS6urq9OKLL2rKlCmaM2eOJGnSpEmaO3eulixZotGjR7d5\nQBcAAEgOcf0N7fV6lZaWdsJ+hw4d0qZNmzRu3Lioyyrjx4+X1+vVG2+8EWl78803FQqFNGXKlKjX\nuOaaa1RXV6f333+/y+oHAABdKymmBj766COFQiEVFBREtTscDuXn52vnzp2Rturqanm9XuXl5UX1\nbd23uro6/gUDAIBOSYrg0dDQIEnKzMxssy0jI0P19fWRv9fX17f7lM+srKzIdgAAkJxiXuNhmqYC\ngUBMfV0uV4eK8Pl8x9zP5XJFtrf2dTqdx3zPo/sCAIDkEnPwqKqqUmlpaUx9y8vLlZubG3MRrQ/T\n8vv9bbb5/X55PJ6ovsfqd/RrtWfevHnq1atXVFtJSYlKSkpirhUAgFNVRUWFKioqotr279/fpe8R\nc/DIy8vT/PnzY+rb3iWTWPq3XnI5WkNDQ+QyinTkksp7773Xpl/rJZaj+35ZWVmZCgsLO1QbAACn\ni/Y+jG/evFkjRozosveIOXhkZmZq/PjxXfbGRxs0aJDsdrs++OADXXbZZZH2QCCg6urqqAeD5efn\na/Xq1frkk090xhlnRNq3b98e2Y4TC4fD2r9/vxobGxUKhZSamqqMjIyo2SUAALpaUiwuTUtL04gR\nI/Tqq6+qubk50r5u3Tq1tLREhZFvfOMbcjgceumllyJtpmlq1apVys7O1le+8hVLa++OTNNUbW2t\ndu/erebmZgWDQe3bt081NTVR4w8AQFeL+5fELVu2TJK0a9cuSUfCxJYtWyRJ06dPj/SbMWOGZs+e\nrblz56q4uFh1dXVasWKFioqKVFRUFOmXnZ2ta6+9Vi+88IKCwaAKCgq0ceNGbd26Vffcc88xn4yK\nLzQ3N2v//v1yuVyRhboul0uHDx/W559/3uYR9QAAdJW4B49nn31WhmHINE0ZhqE1a9ZIOvLo9KOD\nx9ChQ/XQQw/pqaee0hNPPKGUlBRdddVVuuWWW9q85qxZs5Senq5Vq1Zp7dq1ys3N1d133813tcSo\npaVF4XA46u4gwzDkcDh08ODByH8rAAC6WtyDR0e+P2XYsGF69NFHT9jPMAxNmzZN06ZNO5nSTlut\nj5T/csAwTVN2uz1RZQEATgNJscYD1kpNTZXL5VJLS4tM05QkBYNBhUIh9ejRg9kOAEDcEDxOQ06n\nU/369ZPdbtfhw4d16NAh+f1+9ezZs8O3QgMA0BFxv9SC5NSjRw95PB4dPHhQ4XBYHo9HKSkpfLMv\nACCuCB6nMZfLxQwHAMBSfLwFAACWIXgAAADLEDwAAIBlCB4AAMAyBA8AAGAZggcAALAMwQMAAFiG\n53gAQDd38OBBNTY2qqWlRW63W7169VJaWlqiywLaRfAAgG6ssbFRu3fvVigUkt1uV3Nzs5qamtS/\nf3/16tUr0eUBbXCpBQC6qXA4rLq6OpmmqdTUVHk8HqWmpso0Te3bt0+hUCjRJQJtEDwAoJvy+Xzy\n+/1yuVxR7S6XS36/Xz6fL0GVAcdG8ACAbsowDBmGIdM0o9pN05RhGHzpI5ISZyUAdFNut1spKSny\n+XyR8GGapnw+n7xer9xud4IrBNpicSkAdFOGYahPnz4KBoM6fPhwpN3r9apv374yDCOB1QHtI3gA\nQDfm9Xp1xhlnqKmpScFgUA6HQ+np6XI4+PGO5MSZCQDdnMPhUEZGRqLLAGLCGg8AAGAZggcAALAM\nwQMAAFiG4AEAACxD8AAAAJYheAAAAMsQPAAAgGUIHgAAwDIEDwAAYBmCBwAAsExcH5ne0NCglStX\navv27dqxY4daWlq0cOFCDR8+vN3+27Zt05IlS1RdXa2UlBSNHj1aM2fOlNfrjfSpra3VtGnT2t3/\nJz/5iS6//PK4HAsAADh5cQ0eNTU1Wr58uQYOHKjBgwfr73//+zG/LbG6ulo//OEPdeaZZ+r2229X\nXV2dXnjhBX322Wf61a9+1ab/FVdcoQsuuCCq7dxzz43LcQAAgK4R1+BRUFCgyspKpaWlacOGDbr3\n3nuP2ffpp59Wjx49VFZWFpnh6Nu3rxYsWKB3331XI0eOjOo/dOhQjR07Np7lAwCALhbXNR5er1dp\naWkn7Hfo0CFt2rRJ48aNi7qsMn78eHm9Xr3xxhvt7tfc3KxAINBV5QIAgDiL64xHrD766COFQiEV\nFBREtTscDuXn52vnzp1t9ikvL9fixYtlGIbOOusszZgxo82sCAAASC5JETwaGhokSZmZmW22ZWRk\naNu2bZG/22w2jRw5Updccol69+6t3bt3a8WKFZo/f75+/vOf68ILL7SsbgAA0DExBw/TNGO+rOFy\nuTpUhM/nO+Z+Lpcrsl2S+vTpowcffDCqz5VXXqmbbrpJTz75JMEDAIAkFnPwqKqqUmlpaUx9y8vL\nlZubG3MRbrdbkuT3+9ts8/v98ng8x90/PT1dEyZMUEVFhfbt26fevXvH/N4AAMA6MQePvLw8zZ8/\nP6a+7V0yiaV/6yWXozU0NCgrK+uEr5GdnS1JampqOmbwmDdvnnr16hXVVlJSopKSkg7VC1jJv3Wr\nwg8/LNumTQoPHCjj1lvlnjw50WUBOAVVVFSooqIiqm3//v1d+h4xB4/MzEyNHz++S9+81aBBg2S3\n2/XBBx/osssui7QHAgFVV1drzJgxJ3yNPXv2SJJ69ux5zD5lZWUqLCw8+YIBi/jWr5fzqqtkBIMy\nQiGZ778vY/VqNf/0p/Ie5/Z0AOiM9j6Mb968WSNGjOiy90iKR6anpaVpxIgRevXVV9Xc3BxpX7du\nnVpaWqLpiKU7AAAgAElEQVTCSGNjY5v96+rqtGbNGg0ZMqTDsy1AsjLDYRk/+IGMQEBGKCRJkT89\n99+v4CefJLI8AOiUuN/VsmzZMknSrl27JB0JE1u2bJEkTZ8+PdJvxowZmj17tubOnavi4mLV1dVp\nxYoVKioqUlFRUaTf4sWLtXv3bhUWFiorK0u1tbVatWqVfD6fZs+eHe/DASwT2rVLrg8+aH9jOKzg\nSy/JMWdOu5vNYFBmICDbUc/FAZKVGQ7Lv369wqtXSw6HHN/5jpzMTp+y4h48nn32WRmGIdM0ZRiG\n1qxZI0kyDCMqeAwdOlQPPfSQnnrqKT3xxBNKSUnRVVddpVtuuSXq9YqKilRZWamXXnpJTU1NSk9P\n1/DhwzV9+nTl5+fH+3AAy5jhcIf3CdXVyf9//o/cK1fK5vPJP2yYwvfdJ88118ShQuDkmYGAfNdd\nJ09lpUy7XZJk/PrXai4tlXfBggRXh3iIe/BYv359zH2HDRumRx999Lh9xowZE9OaD6C7cwwerMDQ\noXJ8+KGML4cQm02Oq6+OajJ9PoUuvVSenTsjl2Sc27ZJ3/ymfJWVchcXW1U6ELOWRx6Rp7JS0heX\nEiXJu3ChfJdfznl7CkqKNR4A2jJsNoUfe0yy2yOfBE3bkX+yLT/+sRxnnhnV37d8uVwffBD1w9sw\nTckwZPzsZ5bVDXSE/dlnpXa+PNS022WWlyegIsRbUjy5FED73FdeqcA77yj40EOyb96scE6OdOut\n8l57bZu+5ptvynQ4ZASDUe1GOCzn3/52ZLGqjc8aSC62zz8/EpC/LBSS2nnEAro/ggeQ5JzDh8v5\n3HMn7piRIbX3A1xSOC1NdkIHklDwG9+Q/f/9v6iZOkmSzSbzoosSUxTiip9EwCnCcdNNUjsLUk2b\nTf5p06wvCIiB7e67ZTqdkcuI0pHLLKGsLLm4U/GURPAAThHOc86Rb9EimYYh02aT6TgyoRn4+tfl\n/tL3GwHJwvW1rym4fr38o0ZJOhI6fBMnyty4Ufa+fRNcHeKBSy3AKcTzH/+hwIQJCi5bJjU2yrjs\nMrmvvlqGg3/qSF6uUaOkjRtl+nySzSaP05nokhBH/DQCTjHOoUPl/K//SnQZQIcZ//7CUJzauNQC\nAAAsQ/AAAACWIXgAAADLEDwAAIBlCB4AAMAyBA8AAGAZggcAALAMwQMAAFiG4AEAACxD8AAAAJYh\neAAAAMsQPAAAgGUIHgAAwDIEDwAAYBmCBwAAsAzBAwAAWIbgAQAALEPwAAAAliF4AAAAyxA8AACA\nZRyJLgDdmxkMyv/mm1IgIOeoUbKlpia6JABAEmPGA53me/llhQYOlHv0aLnHjZPZv79aHn880WUB\nAJIYwQOdEvj73+X61rdk/9e/Im22piZ5Zs+Wb9WqBFYGAEhmBA90Suixx6RwWIZpRtoMSabNJvOh\nhxJXGAAgqcV1jUdDQ4NWrlyp7du3a8eOHWppadHChQs1fPjwNn3/+te/6vXXX9f27dtVU1OjPn36\nqKKiot3XNU1Ty5cvV2VlpRoaGjRw4EBdf/31GjNmTDwPB0fbsUNGKNSm2QiH5fjHPxJQEACgO4jr\njEdNTY2WL1+u+vp6DR48WJJkGEa7fdevX6/169crPT1dvXv3PmY/SXr66ae1dOlSFRUVac6cOerb\nt6/uv/9+rV+/Pi7HgbbMIUNk2u1t2202hf793xoAgC+La/AoKChQZWWlfvOb3+jb3/72cfvOnDlT\nr7zyih555JFISGlPXV2dXnzxRU2ZMkWlpaWaNGmSfvGLX2jYsGFasmSJwuFwVx8G2mH/wQ8k05T5\npYBohMPSvHkJqgpdzV9VpeYFC9S8eLFC9fWJLgfAKSCuwcPr9SotLS2mvllZWbK38wn6y958802F\nQiFNmTIlqv2aa65RXV2d3n///U7Vio5xfe1r8j3/vMLp6ZG2sNut5l/8Qu4ThEwkPzMQUMt3viPX\n8OHy3HGHvLfdJiMnRy2/+U2iSwPQzXW7xaXV1dXyer3Ky8uLai8oKIhshzU83/mOjNpa+Sor1bJy\npczdu+W9885El4Uu0PKrX8n94ouSFFlAbPh8cn/vewrs2JHI0gB0c90ueNTX1ysjI6NNe1ZWVmQ7\nrGPzeuWePFmea6+VPTMz0eWgizifeko66o4l6chdSzIMBZcuTUhNAE4NMd/VYpqmAoFATH1dLlen\nCzoRn88np9N5zPf0+Xxxe2/gdGH71790rOXdxp49ltYC4NQSc/CoqqpSaWlpTH3Ly8uVm5vb6aKO\nx+12y+/3t2lvbXO73cfcd968eerVq1dUW0lJiUpKSrq2SKCbC557rpxbthxZLHy0cFjm17+emKLQ\nRqiuTv5HH5Vt/XqZaWnS9dfLPW2ajBjWywHtqaioaPMoi/3793fpe8QcPPLy8jR//vyY+mbGcco9\nKytL7733Xpv21kssrZdc2lNWVqbCwsK41QacKsL33CPjuutkSpGZD9NuVygjQ66bb05kafi34D//\nKV14oTy1tVI4LNlsMv7wB7W8/LLcFRUybN3uSjqSQHsfxjdv3qwRI0Z02XvEHDwyMzM1fvz4Lnvj\nzsrPz9fq1av1ySef6Iwzzoi0b9++PbIdwMnxXHutWp55Ro677pKjtlaS5L/gAtmWLpWDtTxJIXDP\nPfLs3fvFrNS///S8+KJ8N94o96RJCawOOLZuF4m/8Y1vyOFw6KWXXoq0maapVatWKTs7W1/5ylcS\nWB1w6vB873uy//OfCmzfruA//yn3m2/Kee65iS4L/+b63/9t9+nBpt0u83e/S0BFQGzi+sh0SVq2\nbJkkadeuXZKkdevWacuWLZKk6dOnR/p9+OGHeuuttyRJn332mQ4ePBjZNz8/X6NGjZIkZWdn69pr\nr9ULL7ygYDCogoICbdy4UVu3btU999xz3CeeAugYw+GQ8+yzE10G2tFe6GhlHmcbkGhxDx7PPvus\nDMOQaZoyDENr1qyRdOTR6UcHj507d+rZZ5+NbDt63yuvvDISPCRp1qxZSk9P16pVq7R27Vrl5ubq\n7rvv5rtaAJw2/BMmyN3OrIcRCsk2eXKCqgJOLO7BI9bvT5kwYYImTJgQU1/DMDRt2jRNmzbtZEoD\ngG7L/vOfK/zaa7I1NckIhSJfX+C7/HK5v/RkZyCZdLs1HgAAyVlQIHPzZrXMnKnAkCEKfPWrannw\nQblXr5bhiPtnSqDTODsBoJtyDBokx+LFiS4D6BBmPAAAgGUIHgAAwDIEDwAAYBmCBwAAsAzBAwAA\nWIbgAQAALEPwAAAAliF4AAAAyxA8AACAZQgeAADAMgQPAABgGYIHAACwDMEDAABYhuABAAAsQ/AA\nAACWIXggZs3NYb36qk+vvuqTz2cmuhwAJ2CGw2p57jn5Lr5YgUGD1HLttfK//Xaiy8JpjuCBmPzm\nNy0aMMDUuHFujRvnVv/+YS1b1pLosgAcR8v//b/yTJ8u11/+IueuXXK/9JKcF18s3yuvJLo0nMYI\nHjihjRv9uukmt/bv/+J0+fxzm266ya033/QnsDIAxxKorpZn4UJJkhEOH/kzFJJCIdnmzJH57zbA\nagQPnNDDD4dls0mScVSrIcOQysr44QUko+DLL0tm20uihmnK+dFHCn74YQKqAggeiMGOHTaFQkab\n9lDI0AcfcAoBychwOE5qOxAv/NbACeXnh2W3t/3kZLebGjqUGQ8gGTmmTNG/pyqjmDab/OedJ8eg\nQQmoCiB4IAZz5hg6cjn46PBhKhw+sg1A8nEMHKiW+++XJJl2e+RP0+2W+cQTiSwNpzmCB05ozBi3\nFi/2KTX1i+CRmmpqyRKfRo92J7AyAMfjvfNO+f74R/mmTJHvwgvV8v3vK/Tee3JfemmiS8NpjIt8\niMmsWR5NmxbWa68duYV27FiXUlM9Ca4KwIm4x46Vxo5NdBlABMEDMUtLs+maawgbAIDO41ILAACw\nDMEDAABYhuABAAAsE9c1Hg0NDVq5cqW2b9+uHTt2qKWlRQsXLtTw4cPb9P3rX/+q119/Xdu3b1dN\nTY369OmjioqKNv1qa2s1bdq0dt/vJz/5iS6//PIuPw4AANA14ho8ampqtHz5cg0cOFCDBw/W3//+\ndxlG+899WL9+vV5//XWdddZZ6t279zH7tbriiit0wQUXRLWde+65XVY7AADoenENHgUFBaqsrFRa\nWpo2bNige++995h9Z86cqR/96Eey2+2688479cknnxz3tYcOHaqx3CIGAEC3Etfg4fV6Y+6blZXV\n4ddvbm6Ww+GQ0+ns8L4AAMB63fY5HuXl5Vq8eLEMw9BZZ52lGTNmaOTIkYkuCwAAHEe3Cx42m00j\nR47UJZdcot69e2v37t1asWKF5s+fr5///Oe68MILE10iAAA4hpiDh2maCgQCMfV1uVydLuhE+vTp\nowcffDCq7corr9RNN92kJ598kuABAEASizl4VFVVqbS0NKa+5eXlys3N7XRRHZWenq4JEyaooqJC\n+/btU+/evS17bwAAELuYg0deXp7mz58fU9/MzMxOF9RZ2dnZkqSmpqZjBo958+apV69eUW0lJSUq\nKSmJe30AACS7ioqKNs/Q2r9/f5e+R8zBIzMzU+PHj+/SN+9Ke/bskST17NnzmH3KyspUWFhoVUkA\nAHQr7X0Y37x5s0aMGNFl79HtHpne2NjYpq2urk5r1qzRkCFDEjLbAgAAYhP3u1qWLVsmSdq1a5ck\nad26ddqyZYskafr06ZF+H374od566y1J0meffaaDBw9G9s3Pz9eoUaMkSYsXL9bu3btVWFiorKws\n1dbWatWqVfL5fJo9e3a8DwcAAJyEuAePZ599VoZhyDRNGYahNWvWSJIMw4gKHjt37tSzzz4b2Xb0\nvldeeWUkeBQVFamyslIvvfSSmpqalJ6eruHDh2v69OnKz8+P9+EAAICTEPfgsX79+pj6TZgwQRMm\nTDhhvzFjxmjMmDEnWxYAAEiAbrfGAwAAdF8EDwAAYBmCBwAAsAzBAwAAWIbgAQAALEPwAAAAliF4\nAAAAyxA8AACAZQgeAADAMgQPAABgGYIHAACwDMEDAABYhuBhoQMHwnrzTb927gwkuhQAABKC4GGB\ncNjUj3/crL59pYsvdumss5y64AKfqqsJIACA0wvBwwK/+EWLHnjAq5aWL4Z70yaXrrhC8vvNBFYG\nAIC1CB5xFgyaWrjQ1aY9FDJUU+PUihW+BFQFAEBiEDzibN++sD7/3N7uNrvd1PvvM+MBADh9EDzi\nLCPDJq833O62UEjKy7O4IAAAEojgEWdut6EZM3wyjOiZDZvNVM+eYV1/vTtBlQEAYD2ChwUefNCt\nq6+OXsvRu3dIr7wSUno6/wkAAKcPR6ILOB14vTb97/96tHWrX2+/HVZ2tnTVVW45nQw/AOD0wm8+\nCw0b5tKwYYmuAgCAxGGeHwAAWIbgAQAALEPwAAAAliF4AAAAyxA8AACAZbirBcBJCYdNbdzo12ef\nmfr61+06+2xnoksCkMQIHgA6bfv2gKZMkf7xjy+ewHv11S367W9dSk1lQhVAW/xkANApgYCp8eMN\nffhh9OeXl192a/ZsvnUZQPsIHgA6ZdUqn/75T4dCISOqPRw29PzzHu3f3/6XIwI4vcX1UktDQ4NW\nrlyp7du3a8eOHWppadHChQs1fPjwqH4+n0+rV6/WW2+9pY8//ljNzc3KyclRcXGxiouLZbNF5yPT\nNLV8+XJVVlaqoaFBAwcO1PXXX68xY8bE83CQAOGwqX37wkpNNZi6TzIffmjKMEyZptFmWyBg6J//\nDKhXL1cCKgOQzOL6k7ympkbLly9XfX29Bg8eLEkyjLY/pHbv3q3HHntMkjR16lTddttt6tevn8rK\nyvTggw+26f/0009r6dKlKioq0pw5c9S3b1/df//9Wr9+fTwPBxYrL2/R4MFB9e1rV69ehr797Rbt\n3RtKdFn4t3POsbUbOiTJ7Q7rzDNZQgagrbj+ZCgoKFBlZaXS0tK0YcMG3Xvvve32y8zM1DPPPKMz\nzjgj0lZcXKwHH3xQa9eu1fTp05WTkyNJqqur04svvqgpU6Zozpw5kqRJkyZp7ty5WrJkiUaPHt1m\nhgTdz/PPt+immzySTElSMGjo9793a9u2gLZsscnpbP8XHqwzcaJL+fkBffxx9OUWwzA1Y4ZP6ene\nBFYHIFnF9Te01+tVWlraCfv17NkzKnS0uvjiiyUdmTlp9eabbyoUCmnKlClRfa+55hrV1dXp/fff\nP8mqkQz+8z/tMgxT0he/0EIhQx984NKKFSxcTAZ2u6E//tFQYaH/qDZTN97YooULPQmsDEAyS+qp\ngYaGBklHgkmr6upqeb1e5eXlRfUtKCiIbEf3dvhwWNXVznan8R0OU2+/bSagKrTnzDMdeucdt7Zs\n8WvNGp8++SSk//kfr9xuZqQAtC9pL8IGAgGtXLlS/fv319lnnx1pr6+vV0ZGRpv+WVlZke3o3txu\nQ15vWM3NbXNxOCxlZyegKBzXsGEuDRuW6CoAdAcxz3iYpim/3x/T/7rCokWLVFNTo7lz50at2fD5\nfHI62z4Z0eVyRbaje7PbDd1wg082W/TMhmGYstmkG2/kyZgA0F3FPONRVVWl0tLSmPqWl5crNze3\n00UtX75cq1ev1s0336zzzz8/apvb7W433LS2ud3uNttazZs3T7169YpqKykpUUlJSadrRXw89NCR\n6fu333bLbjcVDksOh/TMMz7l5bF+AADioaKiQhUVFVFt+/fv79L3iDl45OXlaf78+TH1zczM7HRB\na9eu1dKlS3X11VfrhhtuaLM9KytL7733Xpv21kssrZdc2lNWVqbCwsJO1wbr9Ohh01tvufSHP/i0\ncWNYmZnS9de71K8foQMA4qW9D+ObN2/WiBEjuuw9Yg4emZmZGj9+fJe9cXs2btyoX//617rkkks0\nb968dvvk5+dr9erV+uSTT6LuhNm+fXtkO04NNpuhiRPdmjgx0ZUAALpK0tzVUlVVpfvuu0/Dhw/X\nPffcc8x+3/jGN+RwOPTSSy9F2kzT1KpVq5Sdna2vfOUrVpQLAAA6Ie53tSxbtkyStGvXLknSunXr\ntGXLFknS9OnTJUm1tbW6++67ZbPZdOmll+r111+Peo0hQ4ZEnnyanZ2ta6+9Vi+88IKCwaAKCgq0\nceNGbd26Vffcc0+7T0YFAADJIe7B49lnn5VhGDJNU4ZhaM2aNZKOPDr96OBx+PBhGYahRYsWRe1v\nGIZuvPHGSPCQpFmzZik9PV2rVq3S2rVrlZubq7vvvpvvagEAIMnFPXjE8v0pw4cP79D3rBiGoWnT\npmnatGknUxoAALBY0j5ADACAEwmHw2ppaZFpmvJ4PLLb7YkuCSdA8AAAdEuHDh3S3r17I8HD5XIp\nOztbPXv2ZL1fEiN4AAC6Hb/fr927d8vv98vtdsswDPl8Pu3Zs0cOhyOmLyhFYiTN7bQAAMTq4MGD\n8vl88nq9stvtstls8nq9CoVCamxsTHR5OA6CBwCg2wkGg5LU5pKK3W7vsu8MQ3wQPAAA3U7rl4Wa\n5hdfJmmapkKhkDwevlohmbHGAwDQ7aSnp8vr9erw4cNyuVwyDEN+v18Oh0M9e/ZMdHk4DmY8AADd\njsPhUE5Ojnr06KFwOKxgMKiUlBTl5OQoJSUl0eXhOJjxAAB0Sx6PR7m5uZE1HU6nUzYbn6eTHcED\nANBtGYYht9ud6DLQAURDAABgGYIHAACwDMEDAABYhuABAAAsQ/AAAACWIXgAAADLEDwAAIBlCB4A\nAMAyBA8AAGAZggcAALAMwQMAAFiG4AEAACxD8AAAAJYheAAAAMsQPAAAgGUIHgAAwDIEDwAAYBmC\nBwAAsAzBAwAAWIbgAQAALOOI54s3NDRo5cqV2r59u3bs2KGWlhYtXLhQw4cPj+rn8/m0evVqvfXW\nW/r444/V3NysnJwcFRcXq7i4WDbbF/motrZW06ZNa/f9fvKTn+jyyy+P5yEBAICTENcZj5qaGi1f\nvlz19fUaPHiwJMkwjDb9du/erccee0ySNHXqVN12223q16+fysrK9OCDD7b72ldccYXuuuuuqP+d\ne+658TuY01RFRUWiS+h2GLPOYdw6jjHrHMYtseIaPAoKClRZWanf/OY3+va3v33MfpmZmXrmmWf0\n61//WlOnTlVxcbH+67/+SxMmTNC6dev02Weftdln6NChGjt2bNT/+vbtG8/DOS3xD7TjGLPOYdw6\njjHrHMYtseIaPLxer9LS0k7Yr2fPnjrjjDPatF988cWSjsyctKe5uVmBQODkigQAAJaJ6xqPk9XQ\n0CDpSDD5svLyci1evFiGYeiss87SjBkzNHLkSKtLBAAAHZC0wSMQCGjlypXq37+/zj777Ei7zWbT\nyJEjdckll6h3797avXu3VqxYofnz5+vnP/+5LrzwwgRWDQAAjifm4GGaZsyXNVwuV6cLarVo0SLV\n1NToV7/6VdRdLX369Gmz4PTKK6/UTTfdpCeffPK4wWP79u0nXdfpZv/+/dq8eXOiy+hWGLPOYdw6\njjHrHMatY7r6d2fMwaOqqkqlpaUx9S0vL1dubm6ni1q+fLlWr16tm2++Weeff/4J+6enp2vChAmq\nqKjQvn371Lt376jtWVlZysrK0g033NDpmk5nI0aMSHQJ3Q5j1jmMW8cxZp3DuHVM6+/RrhBz8MjL\ny9P8+fNj6puZmdnpgtauXaulS5fq6quv7lBQyM7OliQ1NTW1GzyWLFmi+vr6TtcFAMDpKiHBIzMz\nU+PHj++SNz2WjRs36te//rUuueQSzZs3r0P77tmzR1L7C1Glrh00AADQOUnzyPSqqirdd999Gj58\nuO65555j9mtsbGzTVldXpzVr1mjIkCEnNdsCAADiK+53tSxbtkyStGvXLknSunXrtGXLFknS9OnT\nJR15DPrdd98tm82mSy+9VK+//nrUawwZMiTy5NPFixdr9+7dKiwsVFZWlmpra7Vq1Sr5fD7Nnj07\n3ocDAABOgvH666+b8XyDMWPGyDAMmaYZ+VM68uj01157TZL03nvvqbS0NGp7pEDD0I033qjvfve7\nkqT169ersrJSNTU1ampqUnp6uoYNG6bp06crPz8/nocCAABOUtyDBwAAQKukWeMBAABOfUn75NKO\n+OCDD/SHP/xBf/vb37R371717NlT55xzjmbMmKGBAwdG9f3kk0/0+OOPa9u2bXI6nbrgggv0gx/8\n4Jh3w5zKYh23X/3qV1q3bl2b/XNzc1VeXm5lyQn38ccfq7y8XDt37lRDQ4NcLpdyc3N1zTXXaNy4\ncVF9Ode+EOu4ca4d33PPPadnnnlGZ555pp555pmobZxv7TvWmHGufaF1uUN7Hn/8cZ1zzjmRv3fF\neXZKBI+Kigr9/e9/12WXXabBgweroaFBv//97zVr1iw9/vjjGjRokKQjd7/MnTtX6enpuuWWW3T4\n8GG9+OKL+vjjj/Xkk0/K4TglhiNmsY6bJDmdTt1xxx1R+6emplpdcsL961//UnNzs8aPH6+srCz5\nfD5t2LBBv/zlL7V3797Is2c416LFOm4S59qx1NXV6fnnn5fH45FhGG22cb61dbwxkzjXvuzaa69V\nQUFBVNuAAQMi/7+rzrNT4mycOnWqzj77bNnt9kjb5ZdfrptvvlkVFRW66667JB1Jvj6fT0uXLo08\ncOzss8/WHXfcobVr16q4uDgh9SdKrOMmSQ6HQ2PHjk1EmUnlggsu0AUXXBDVNmXKFH3/+9/Xyy+/\nHPkFyrkWLdZxkzjXjuXJJ5/Ueeedp1Ao1OaxApxv7TvemEmca182bNgwXXrppcfc3lXn2SmxxuO8\n886L+uUpSTk5OTrjjDNUU1MTafvzn/+sUaNGRQZMOvLY3IEDB+qNN96wqtykEeu4SUe+qyccDuvQ\noUNWltgt2Gw2ZWdnR40l59qJtTduEudae6qqqvSnP/1JP/jBDyJ3CB6N862tE42ZxLn2ZaZp6vDh\nwwqFQu1u76rz7JSY8WiPaZr6/PPPI8//qKur0/79+9tMI0lHEtvbb79tdYlJ6cvj1srn82nSpEny\n+XxKT0/XmDFjNGvWLHm93gRVmlgtLS3y+Xw6ePCg3nrrLf31r3/VnDlzJHGuHc/xxq0V51q0UCik\nRx55RJMmTYq6/NmK862tE41ZK861aA8++KCam5tls9n01a9+Vd///vcj51VXnmenbPB49dVXVV9f\nrxkzZkiSGhoaJLX/PTKZmZlqampSMBg8ba+FtvryuElHHjf/ne98R2eddZbC4bDeeecdvfTSS/rw\nww/18MMPt/nEejp44okn9PLLL0uS7Ha7/uM//kOTJ0+WxLl2PMcbN4lzrT2VlZX617/+pZtvvrnd\n7ZxvbZ1ozCTOtaM5nU5deumluvDCC9WzZ0/t2rVLL7zwgubOnavHHntM+fn5XXqenZJnYk1NjRYt\nWqTzzjsv8v0yPp9PkuRyudr0b23z+Xyn1T/OL2tv3CTplltuiep3+eWXa+DAgfrv//5vbdiwQWPG\njLG61IS77rrrNHr0aNXX1+vVV1/VokWL5HK5NGHCBM614zjeuEmca1/W2Nio//mf/9GNN954zLsG\nON+ixTJmEufa0c477zydd955kb+PGjVKl156qWbOnKmlS5fqgQce6NLz7JRY43G0hoYG3XnnnUpL\nS9O9994bua7ndrslSX6/v80+rW2tfU5Hxxq3Y/n2t78twzC0efNmiypMLnl5eSosLNS4ceP0wAMP\nqLCwUI8//rj8fj/n2nEca9xaf6i153Q+15555hn17NlT3/rWt47Zh/MtWixjdiyn87n2ZTk5Obro\noov0t7/9Tab5/9u7f5Bk/jgO4G8X5Rzshtwqqq2ChqJ/9GeppTHEhgiaWqrllhqakqaoJaGmGtqC\naBICs6CloGipQYeI/igdnEj+u8Ku/A3PT39e5fNc4O/q0fdrsrsLvn54K28P78yWNGdlVTxSqRTm\n5icWyxwAAAM7SURBVOaQTqextLSkOyWUe5w7XVQoFovB4XBUzCeC9343t2KsViscDgeSyaQJK/z5\nBgYGkE6ncXd3x6x9QW5u9/f3RY+p1KyFw2H4fD6MjIxAURTIsgxZlpHJZPDy8gJZlpFMJpm3AkZn\nVkylZq0Yp9MJTdPw/Pxc0pyVTRozmQzm5+cRiUSwvLyMuro63X6n0wlRFBEKhT78bygUqtjfefnT\n3IpRVRXxeByiKP7PK/w75D6xWywWZu0LCudWTKVmLRqNIpvNwuv1wuv1ftg/NjYGl8uF6elp5u1f\nX5nZZyo1a8U8PDzAZrNBEAQIglCynJVF8Xh9fcXCwgKCwSAWFxfR3Nz86XH9/f3w+/1QFCV/OdD5\n+TnC4TDcbreZS/4RjMwtk8lA0zTY7Xbd9q2tLQBAR0eHKWv9KR4fHz+8KWmaBr/fD4fDgfr6egDM\n2ntG5sas6TU0NMDj8ehKWTabxebmJp6enjAzM5O/uRPz9ovRmTFrep+9Pq+urnB8fIzu7u78tlLl\nrCyKx/r6Ok5OTtDT04N4PI79/X3d/twtmcfHx3F0dARJkuByuaCqKra3t9HY2Ijh4eHvWPq3MjK3\nWCyGyclJDA4Oora2FgBwdnaG09NTdHZ2oq+v7zuW/m1WVlagqipaW1tRXV2NWCyGQCCAcDiM2dnZ\n/DfhmTU9I3NTFIVZK1BVVfXpc97Z2QEA9Pb25rcxb78YnZksy8xaAY/HA5vNhpaWFoiiiNvbW/h8\nPgiCoPsSbqlyVha/TitJEi4uLpDNfnwqFosFBwcH+b9vbm6wtraGy8tLWK1WdHV1YWpqqiJPrRmZ\nWyqVwurqKoLBIKLRKN7e3lBTU4OhoSGMjo5W1CVnAHB4eIi9vT1cX18jkUjAbrejqakJbrcb7e3t\numOZtf8YmRuzZowkSUgkEtjY2NBtZ96Kez8zZk1vd3cXgUAAkUgEqqpCFEW0tbVhYmJCd8t0oDQ5\nK4viQURERH+HsrqqhYiIiH42Fg8iIiIyDYsHERERmYbFg4iIiEzD4kFERESmYfEgIiIi07B4EBER\nkWlYPIiIiMg0LB5ERERkGhYPIiIiMg2LBxEREZmGxYOIiIhM8w9UuvNahK8BVQAAAABJRU5ErkJg\ngg==\n",
"text": [
"<matplotlib.figure.Figure at 0x111342a10>"
]
}
],
"prompt_number": 40
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment