diff --git a/.github/workflows/codecov.yml b/.github/workflows/codecov.yml new file mode 100644 index 0000000..b507ad7 --- /dev/null +++ b/.github/workflows/codecov.yml @@ -0,0 +1,31 @@ +name: Codecov +on: [push] +jobs: + run: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest] + env: + OS: ${{ matrix.os }} + PYTHON: '3.7' + steps: + - uses: actions/checkout@master + - name: Setup Python + uses: actions/setup-python@master + with: + python-version: 3.7 + - name: Generate coverage report + run: | + python -m pip install --upgrade pip + pip install -e .[tests] + pip install pytest-cov + pytest --cov=./ --cov-report=xml + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v1.0.5 + with: + token: ${{ secrets.CODECOV_TOKEN }} + file: ./coverage.xml + flags: unittests + name: codecov-umbrella + fail_ci_if_error: true \ No newline at end of file diff --git a/README.md b/README.md index c5f5801..ef35c03 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,13 @@ # PyEEM -![Test](https://github.com/drewmee/PyEEM/workflows/Test/badge.svg) -[![Read the Docs](https://readthedocs.org/projects/pyeem/badge/?version=latest)](https://pyeem.readthedocs.io/) [![PyPi version](https://img.shields.io/pypi/v/pyeem.svg 'pypi version')](https://pypi.org/project/pyeem/) [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/pyeem.svg)](https://pypi.org/project/pyeem/) +[![Test](https://github.com/drewmee/PyEEM/workflows/Test/badge.svg)](https://github.com/drewmee/PyEEM/actions?query=workflow%3ATest) +[![Read the Docs](https://readthedocs.org/projects/pyeem/badge/?version=latest)](https://pyeem.readthedocs.io/) +[![codecov](https://codecov.io/gh/drewmee/PyEEM/branch/master/graph/badge.svg?token=RAPG3XDZ6H)](https://codecov.io/gh/drewmee/PyEEM) +[![Code style](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) [![Binder](https://mybinder.org/badge.svg)](https://mybinder.org/v2/gh/drewmee/PyEEM/master?filepath=docs%2Fsource%2Ftutorials%2Fnotebooks) [![License](https://img.shields.io/github/license/mashape/apistatus.svg)](https://github.com/drewmee/PyEEM/blob/master/LICENSE) -[![Code style](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) - Python library for the preprocessing, analysis, and visualization of Excitation Emission Matrices (EEMs). diff --git a/docs/source/LICENSE_opcsim b/docs/source/LICENSE_opcsim new file mode 100644 index 0000000..e86e262 --- /dev/null +++ b/docs/source/LICENSE_opcsim @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2016-2020 David H Hagan and Jesse H Kroll + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/docs/source/LICENSE b/docs/source/LICENSE_pyunfold similarity index 100% rename from docs/source/LICENSE rename to docs/source/LICENSE_pyunfold diff --git a/docs/source/tutorials/notebooks/tutorial_2.ipynb b/docs/source/tutorials/notebooks/tutorial_2.ipynb index 414f364..1107879 100644 --- a/docs/source/tutorials/notebooks/tutorial_2.ipynb +++ b/docs/source/tutorials/notebooks/tutorial_2.ipynb @@ -285,7 +285,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Download Demo Dataset from S3: 100%|██████████| 260/260 [01:09<00:00, 3.74it/s]\n" + "Download Demo Dataset from S3: 100%|██████████| 260/260 [00:00<00:00, 163031.70it/s]\n" ] } ], @@ -1503,7 +1503,13 @@ "fig_kws={\"dpi\": 95}\n", "plot_kws = {\"fmt\": \"o-\"}\n", "kwargs = {\"byweekday\": 0}\n", - "ax = pyeem.plots.water_raman_timeseries(dataset, excitation_wavelength=275, fig_kws=fig_kws, plot_kws=plot_kws, **kwargs)\n", + "ax = pyeem.plots.water_raman_timeseries(\n", + " dataset,\n", + " excitation_wavelength=275,\n", + " fig_kws=fig_kws,\n", + " plot_kws=plot_kws,\n", + " **kwargs\n", + ")\n", "plt.show()" ] }, @@ -1656,7 +1662,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Preprocessing scan sets: 100%|██████████| 16/16 [00:37<00:00, 2.33s/it]\n" + "Preprocessing scan sets: 100%|██████████| 16/16 [00:38<00:00, 2.43s/it]\n" ] }, { @@ -2133,7 +2139,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Preprocessing scan sets: 100%|██████████| 16/16 [00:03<00:00, 4.27it/s]\n" + "Preprocessing scan sets: 100%|██████████| 16/16 [00:03<00:00, 4.09it/s]\n" ] }, { @@ -2178,7 +2184,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Preprocessing scan sets: 100%|██████████| 16/16 [00:03<00:00, 4.03it/s]\n" + "Preprocessing scan sets: 100%|██████████| 16/16 [00:03<00:00, 4.21it/s]\n" ] }, { @@ -2224,7 +2230,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "Preprocessing scan sets: 100%|██████████| 16/16 [00:03<00:00, 4.20it/s]\n" + "Preprocessing scan sets: 100%|██████████| 16/16 [00:03<00:00, 4.09it/s]\n" ] }, { @@ -2265,9 +2271,29 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 18, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Preprocessing scan sets: 100%|██████████| 16/16 [00:08<00:00, 1.97it/s]\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA+gAAAEyCAYAAABpmfqEAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy86wFpkAAAACXBIWXMAAAsTAAALEwEAmpwYAADki0lEQVR4nOydZ5gsR3Ww39M9M5tuvsoSkgARJGQQWQSDyGCibTIGZBswyR8y2UQZY2wDJpkobCMTTDA52GQERoAIIkgCCQSKKN98N+/0+X5UVU9Nb0/and2d2T3v8/TuTMeanq4zdeokUVUMwzAMwzAMwzAMw1hbkrVugGEYhmEYhmEYhmEYpqAbhmEYhmEYhmEYxkBgCrphGIZhGIZhGIZhDACmoBuGYRiGYRiGYRjGAGAKumEYhmEYhmEYhmEMAKagG4ZhGIZhGIZhGMYAYAq6YRhdIyJaXNa6TUtFRP5ERM4Rkb0iMi8ie0TkpyLy9LVumzE4iMjhIvI9/5w8f63bsxERkXuJyOUicqWI3Gut22P0j/X0m2IYhtEvTEE3jD4iIseXDTgKy7yIXCMinxORP1rrNvfIrYB/bbVRRLaJyJnRcsrqNa17vBL+KeC+gAKPBB4LHA3csc1xZ3fx/e4TkXNF5Dkikq7KBzJWkhcA9wC2Am8VkYk1bk8pvr91ejanRORXIvKvInLsWrcZQETOiOTFY1rs9ibgOOBm/vW6RESqIvJ8EfmunzCcE5HrReRC/3vxShG5/1q3s8+0/U1ZCcTxVBH5mojc6H+TbxKRX4rI/4rI34nIw/shv7t8vns537hvr4rIrf26B/v3V3Q4dkJE/tk/V0EmnN7FNW8vImeJyK9F5KCITPoJs6+JyBtFZNNyP5dhGM2Ygm4Y/eVq3IDjzwrr/9Wvvz9OMTwSeBTwJRH551Vt4TJQ1UuB3W122Qa8NlpOWflWLYmXR68/rapfVtVvAGcCF7U57qW47/GHhfW3Au4JnAVs8a/fDXxNRMb61WhjzRlk6947cM/hpwvrTwNOBp4MXAvcFng+cKGI3H01G9iCM2jIi8esaUvWEBHZDHwH91shwOnAnXD35N247/D1wOfXpoUrQxe/KX1FRCrAZ4APAkcBfw3cGfgj4I243+bXAF8EtvfhkmfQ3+f7VKAC3KCqv/br7u3//1+rg0TkscDFwIuBarcXE5GXAT8Fngl8A3gwbsLyn4C7Ai/B/e4bhtFHKmvdAMNYT6jqAnCpiBxT2LTbD0QuBb4lIkcBf+i3vVREPqqqP1vFpm50ToheXxNeqOq72x2kqjcAN4jIdGF9+G6/LyJbgSf4TfcDXgG8uh+NNtaEt+O+xxOBV6nq5Bq3pxRV3Q3sFpEDhU1XqOrlwEUicj5wIe63fzPwXtp4jAwQLwH+C6e4vmSN27JSvAanfM0BD1XV+Hv8voh8EvgxsGMtGreO+Cvg0f71n6jqJdG2H4rIJ4DvMrj9Iijj55asK1XQReQZwHuAdwGXAW/r5kIi8hScIg7wH6r6nGjzL0TkJuC/u2u2YRi9YBZ0w1gbvlh4f781acXGJZ6crPf53P9ReP/kPp/fWEVU9XpVvYeqblPVd651e5aDV0Z+E606RUT6YSVcUVT1XFU9TlWPVdVzOx8xlDzO/58qKOdAPjn4vtVt0rrkcdHr64sbVXUK+JfVa07PBGX8u5B7BARPmFYW9N8Bd1LVM4B93VxERKrAm6NV7ynZ7dM4j4NrSrYZhrEMTEE3jLVhrsN7ROQoEXmLjxmd8nFfP/NxiOMl+99FRD4mIleIyKw/5koR+aaPO7uF3+/rJbGpp/ltZXGsp3XzgUTkbNzsfMwHys4jIo8Xka/6+Mp5cXHbl0ZxlqPdXNOfa7uIvFZEfuzPMyciV4vIJ0XkAYV9z5TFSYheG7Xx+G6v24arCu+P8de+vOTe3k5E3uy/p4WS+/RYEfmyuDjJORG5TkQ+JSKnFj5XWWz8S0TkP0XkBv88XCoib4jjBVt832eKyONE5Ef+GVL/3YZjjhaRN4nIBeLiEWdE5DIR+aCI3LnshojIiIi8QBrJ1mb8c/odf71F1qpuP7vfd1REXioi5/nzL4iLKb1QRD4khThLEXmgf9Z+78990H+G/xWR14nIoX6/c9r0ldNKtp3j139bRA6IyLT/jHdqcV/u5Nuxy9+Ti0TkGS2ue3zZOZZALGsUWChp153993mZb9dB/32/SUSOLuy7UGxrtG3R54i2ne7fHxed7unxc+j3a5lErM3z+xzf3mn/PHw0fKcln/XW4uJrf+s/637/HD1PnPKzWhzp/28TkVeIU5CK/COwM14hIltF5FX+Xl/lP8O0/zwfFpG7FvYvy5NyuX9uv+Wf24P+Gb6bP+ae/vwHxcXGf1xEDu/inE8Q95s1LU42f1VE7tvrjRGR1PeLb4vIbnF99ir/jJ7Y4+mOjF7/g5T8luK8NcZU9aaSttxFRD4iTmbP+vtxjjhrc7xfV893J4r3FniQ3/Qv/v08ED7DRX6/c+JzqOo3VfWCbq4X8RDgCP86A35R3EFVM1W9TlWzHs9tGEYnVNUWW2zp84KL+9RoObOw/dPRtjpw+8L2uwI3+e27cD+WTwBm/LqfAJuj/e8JzPptFwIPA07yx53j1z/R73sU8JRC+07z23a02hZd68x4e7T+MBpJ18LyUpw7+Qm4AQ/Ai6LtnwbuRSNG9jK//ogu7/NJOIVYgWng6Tg30S9F1/iXaP8dvi1xG98RtbHS5XXPoeQetPjur/Lrj/P3I952Pi6u9A+AV4X7jXPlPTva7/3A3YDP0VCqntbh3k/hEpzdPTpOcfHzo23ux/k498l74gaD1wFn+/3vg4sXVdzz+RhcqMYPaTzLZxTuxzaca244/zdxcYx3xlloFDgn2r+nz+6P+UK0/+tw7ql3Al7on4uLo30fhxtwKi7m937A7fxn+blff6rf92ha95Uxf+/Oi7bdCHwC139fG63fBewotPn+NPpzHXie/66+CExGx55Hb89mfO8UOL7wnExH235ccvwZvj3h2n+Icwne5dftBu4T7X9LXB8qkwlHt9m22X+uq6Ptn6LRF3f4/U5oc46y5/ca4O/89//ZaP05JZ/14bh+orgQlT/030N4Pv632/veh9+Mywqf4wacN86fAce1Oe4Uv/93gQfgZMnT/bMYnq3HRftX/D37VHStGVx88am4EIKwfh/weOAtuP760WjbuR3OOQd8Dyffnxw9dwtxe9r9pvhtI8BXo+1/79v5fRpy7oE93OdvFe7zPv+5ngHcpsOxz/TtV+AHuFjs10Xnen+vz3cX7T2+0N5ulkXPenS+0wv7nt5ivzcU7tHjcLL7JmAPTjY8H0hXo3/YYstGW9a8AbbYsh4XWijowCG4eOSwfgF4WeHYEeCK4rF+2wei9e+M1n84Wv/8wvkmgP14Bb1F+07rZpvffma8vbCtOJg4veTexAOWkwvb7uPXd1TQcYPCS6JzvTXatpOGkqHAUwvHLvpuevx+z2lzD95dOP+/RtuKg6MvFI69zt+DZ0f7TNNQqI+L1k8BN2tz7/872rajcD9e0+Z+zMX3H5c1+/04RfumaL8XRPvcMVqf0azA/Ve07frwWaLtX6RZQe/ps9OsoN1U8l29hmYF/bvR/o8o7BuucWoP/SF+FuaBnX59lWZl+NnRMSnNCtknC9/VQrTtnOJn6vBsnl1o7/H+eicD347WXwXcoaT/ZdE+d4i2/U18n4FtXcqEltv89suj7We3+EydzhF/3p9G6/+wsO220bZDcXJxkayiWYl7ca/yYSkLLjmctll+DbyMxf3ntsAvgSML6/9fdOw1QNLhObmVX5/QmDhS4MpwLE7Zjo85qcM5bxdte2u0fi+wpcvn55+ibZdH6+8brb8emOjyPr+I9vf5KpynwrbCcSfT3C9Pi7bFffmxvT7fHdobJj9OoDGh+fVoXZioeF207ug25zu98HlPb7HfJwr7hcma03BGgLD+04CsRh+xxZaNtJiLu2GsDq8SkRmcVeN1wAHgn3ED4GIW90cBcQmk2DXtwuj1n0fueXHioL8WkUeKLwelLqnVA3GDzkEgbus/i8ip0ihncy7OattNVt9HALeO3v8kvFDVXbiBUeBFS2tq94jIFhH5fzgrS+Bi3OCzFR+O36jqEar6HVxm4cClqjrjt18BHPTrx4C/aHPuPNO8ugRil0Xbnt7muG+o6nXRsS9R1WfiBnaxe+1Potc/xymn4CzgLwQQkcNoJMwD+Fb4LBH/XjhXr589fp52iiv7Ez8X7wb+PHof7/9KEbm/iNSia9wXp/Ashd/4Zw9VncdZnQO3i17fG6c4B84PL/x3FceJL5dLcArXBTgF/AJcoqwTVfXnhX1fiPv+wE3UxLLnx9HrnbjnYRD5fvT62sK2+Ds4HWflDLSSs8/rT7M6cibRc1DCrXDK6rkShQCp6sWqepKqFj9rXI3iSOA2bc69T1V/48+X0Sx/z9eGC/ONheNOanPOSVWN2xD38a00ErW1xIcYxInJWn1Hh+HKZHbDO3EW+VYcg6vy8dPYjd+3Iy67tirPi6ouqOql6hKRBrn2df/+MhrP9BfDfqr6+z5cemvh/TtU9ROqeg5evnv+GOdlZBhGHzEF3TBWh/fiBsehBNJmnNKwrWTfuxXe741exwlexmmUMYsHz7fGleLZK66e7hnAr1R1UUKcNSJu6x/hBtR7ReRzwJ8C31TVRTH5Jdyz8L44eIzf375FrGFf8JMve3EZvys4C+PbcJbYXa2P5NKSc22ieeC7t7BL/Azcq825i5Mc8f24hbiyTl21ydPyfpcM6u/h/9+V5t+ZRXV6VfUzqvoiWPJnvxjnEh54CXCJiFwjIv+OswzGSlv8/J2Kc+3dJ66m7zOA81R1f7GdXVK853F8d1wr+A6F/YrP7qLY12XwcJx7ahi0/wGun2nJvvF3vFubY0uLbbwHg0n8HRTj6+PvoFs5e7y4qhttEZF/FJGLS5bnd9NoLyfujnNp/x+an+mYO+Fci+Nr38vH2V/qY71ncO75MYe0ufzewvu5FtuKcnmizTn3FN4Xn59T2hwbuA2ubGVZW4rJztrJwhxVnVXVh+AmCD7F4s8eOJ7m6hvdPi/xhHPfEBGh0T+/4//fATeWmKL95M5SKMqHn0Wvi9d6AoZh9BVT0A1jdbhJVX+Ii8X7nV93GPBxiZJ2ebYV3v+vT/wzw+JMqiFh05txikZMBTdoeStwsYicwGDwPBr3ILAJ5znwceDbwaLZgWL26XaJ94SVrdV6Ck6xvC1wlKoeqqp/o6qdMuaWeQoULRf3Ct+/fwbiJF1H05pidvr5wvstlNPKe6GX+x323VbYZ7bFuQM9f3avTP8FDet64Ei//nsi8sZo/StYPMAcxXmZvB/4mYgstZTVooRrERK9Lt774nH9rCxwqap+lmYvggfjYkyLxN9xp0SWg5r9vdvvYFth2y+j5+zlhW3t+lkgWKmLSzvFuAlvLf2Iqj7ct+8euNwURY+Oh4YX4upbfwd4Ik6p/DvcxNgzCsf0XWmk+X4WWar8idlWeP/k6Dsq9vduvqMcVf28qj4W5w1yR5yX1Q8Luz00el1sy2TUlidF60fpUyk8iRJR4kJPggfTuX5d8EoYB+alkNBzmRR/B/ZGr4uTL4MytjCMdYPVQTeMVURVZ0Xk73Gx5OAGFc+nUWsUFlsGnoVLSFPGNf68+4EHisg9cdax03CDjjCAOgo3IH98aEqbZpZlD+4bqnqBiJyEs54/EtfWm0e73Bs3uGxbk5zFA4hiu2MlP8Q9rgiqevFSDy1ZV/z+z8dZ1cpo52lQHJAX70+ryYNWz0Yv9zvsWxzIjbQ4d6s2dfXZVfUTIvIN3LP/UJybejxIfomI/KeqXqSqV/vs1PfHuWeehqtxHrgtTkF7aYe2Lofi5yzey74rU6r6NRH5Nu7eADxbRP5FVa+MdtuNmzgsa1Nx0ix+HtZMniyD4nfwCBZXYAgs8vzoNyLyKOBaVf0ROGUdJ/d/ICJvwMV3P83vfkx06N/RMLZ8XlXf4s/XlO19DViq/Gm3zxdxcfhltPI4aEJE7gegqt/y/zOcdfhnwFv87/Or/O7xfS625U44pbmMotwbRn5B88RDO9pNihmGsQTMgm4Yq8+Hgd9G719ccDf+cWH/GR9nmC84RecueCVFRJ4oIvdX1e+p6otU9c64We04BvDk6HXR3TAePC1n9r/dQB0AEflbnJX5M6r6F6p6C1wm7alot5PLj26iWA+5WEYpfv8zdfVtBx5VPYiLGw5sKvn+f43LqtzOOlf8HuP7cam/Ti+0vN8ikhSu9z3//0c0D2KPK55UXMm9N4lIupTPLiKHicjrgD2qepaq/glwOIvzDtzO7/8cXO6Hr6nqc1X1JJwHxHXRvt08f8vhZ4X3xe+xa6trj5wZva7RUEQC8Xe803+vgWL/+l70ukmeSHOJsE7ypKPMWCGKcvZAybO2AzhFVac7nUxVT1dVKVnO7LI9r6BF/W1VVeC/o1U3RK9j62U8UbjW47uih0Xx+flpF+e4mGZL+UjJd3Q17rewG4s8uPwLZ7fZ/vHodXyfi8/L7pK2HIsLqYkV1uU83z/ETR6eiAtbA5ezI6wL/e70aN3fLuN6MV8ovN8WvS5+t7/q0zUNw/CstQA3jA2H//F+fbRqJy7jbuBzuKy0gQfGx/tYtHcDL4wSbj0WeJ3fFq7zO+Ar0aFxEqHLaXY3jpPhdBXL14IDhfc13+ZniEiIbX4RzYnU8Iln4sFlMeFRGV+ieWCQ1+D21qPjo21v7uJ8g8RZ0etbi8ixhe0Pwk30HEFr8vrHIrKd5vvxn0to03/SHBsd1zy/A41JHsUrGqp6I/CxaL/7xQmufKzm3+ESlgWX2F4/+2G4WNG8n/g+9v7CceGZ+kvgxfEGnyzteyX7rhTn0jxJl9eB99/VrVbior6ffTtadbo011d/Cw2FokbzRMVdotc30fwMxZMq0Js8iWVGkBcniqtjf7sWx/SDD+KS5wWKcnYE+AgNr6PV4N7eZb2MOG/BJ6PX10SvD4te37ZvrVoaE95TKnCn6PVeGgpnS3w//kC06tSQ/DTiKcCH6M3r5FgRaZU4tNV9fj/NynbxedmJi2m/X+F8S36+VXUqUv7Dvl/w76dxkx4LwKeiiYK+yC6f4O+z0ar4vtyxee8l/Z4YhtEOHYBU8rbYsl4WGiVRirWTQ63tzdF+l0bbd+N+gI/w2++H+2FXXCzf63AD5HvjFJ79wD2i637S7/vfNOo6Px6n6Csu/u+hhba+M7r+d3EK19MK7VL/WY72xyyqSRx/Lr/Pr6Jtn8L9mJ8HfMVvvwk3qHg9LinS7XGJvUIJm+txFvZu7vdtcGWAFDdgeao/Z1wH/Z+j/UNt2rLvpmNdWtwAuFj7OtyDpvtQcuzRLK6Dfl9KalzjBptx7fILcMm+bo+Lq77ePwdJdMzxhXNP4TKi343metBxHfSe7gfu+Qt10G/E5Q24N4066AssLvO3jeY66F/FPaN3959hN83lr3r67DglMjw3f4UbSN6d5pJP3472D215N055PBkXUhFqjx/ElxejvA76U/xzUFYHPa9ZTusayBV/7vvSXBv6uf67+gLOMyYcd06XfSHUBI9rUefPWLTfaYXtH/LHjfvtf01zred701wHfRdwr8K1BecSG875Tly/fwNOgSz2lR3Rse+Jtv0Wp8i9zz8X47SROZTXQX+H/94201yKS3H977jo2k+O7vU0rpTcKbh64l/DJda71Sr9dvzAt2POf/6H4Z7NewCvpVH67HNE8gInR8Pn2+OPezAubn2RHKe8ZvnVtH9uj8M9753u59nRtjncRNQ9ca7Sod58Ux30dt+v374pujehLz/Qf08vwPXXN/Vwnz/mz5PhrOWPwsmWu/nvfw+NZ39L4diX0ihDuBsnj26PC4/4Mc5j7dDCMW2f7y7bfHTU5h1+3Z/5ded1cXxcqq34G/TSsK3kuENwce6Km1T5E5w8iPv6W1ejf9hiy0Zb1rwBttiynhYWK0nF5fRo39NLtsf1kG+JUyJ+gxucHcBZmd9DpND4fR+FszT8FKeozOEGnL/D1aG+e0lbx4F34dz45nBxlv+CU4aK7TrHH9PN57oDbnC7Bze5sBf4MnALv/1vcBMKF/tBygJukHUBLvP5MT3e8+24Wtc/8fdoDjew/iRw/8K+Zfc8LGd2ca2zu/1+S449p81xx5fsn/j2ftPfpzmcsvNt3MAw7fDsvQRnab7RH/s7XH3fTcu5H7h8Bm/ClRaaxHliXI6zSN65xTEjuFwL/+efi1nfnrMpUYB6+ez++38DzlvkMv8MLPjjvo+LWR0rfOb/8u2/ETd5NYWzAr8fZ83v9J2dzWJFt+n77Oa7xg3WPxd9xkuAMwrX/WqX/eDMNtfULp7FR0Tb7+y/z8v9dzXp79ebaDF5BtwCN7lwACd7LsBNOpS168zouB3+Wtf6720Kp+w8pJPMafOZz6H1s315od2n+Otf4T/rXv9Z30iPsmiZvx03w5U/PBsny67y93EGNwn5WVw2fikcN4J7/sN39Tvf9ke1uC/Ht7mnrbZdTuvn/fKoLWcXjnkSTpmbwU0qf42ofngPvykjOGX8+7hY8Fl/f75Moe54F/f5UFzW8ffiJhYvxz3fc7hn8Mu4CbtKi+Pvi/ttucYfswv3u/tqyic12z7fXbb5Sf6eXBCte59f13FyosN3XiojSu79ubi+MY8LB/oC8PDV6h+22LLRFlFVDMMwjOHGuypfFq36c1U9e21aY3TC13hGm+NVw7Yf0wghOEtV/2o122YYS8FnEH+6f3uFqh6/dq0xDMMYXiwG3TAMwzBWnzNp1DPOEZGtNNeC/+BqNcgwDMMwjLXHFHTDMIwhR0QOY3GG9MNEpLjOGCzuISL/JiL3EpHbicgjgf/FxftmwMtVtZg93zAGChGpiEjICxCoiMgJhQolhmEYRheYi7thGMaQU3AtjTE30wFFRO6M+87ugYs/3oGLUb0aF6v/blX9ydq10DC6oyS8JsZCbQzDMHrEFHTDMAzDMAzDMAzDGADMxd0wDMMwDMMwDMMwBgBT0A3DMAzDMAzDMAxjADAF3TAMw+gLInK2iGhhOX2t22VsPETkzJJn8cy1bpdhGIZhdMIUdMMwjBVCRO4tIh8XkatEZFZE9onIpSLyHRF5q4g8UUS2r3U7+8hLgdPWuhGGAbwDuNVaN2KYEZEJEflnEZmzCTfDMIzVo7LWDTAMw1iPiMhLgX8C9gGvBb4PzAHHA38BnOF3fRzwydVvYf9R1RtEZHyt22EYqrob2C0ia92UoUREHgu8FTgKM+YYhmGsKiZ0DcMw+oyI/AHwj4Dgalm/Q1V/pKo/V9XPqeqjgfetbSsNwzAWIyLPAD4KfAp44Ro3xzAMY8NhCrphGEb/+VMa8vX6Fvv8A2B1Lg3DGDR+B9xJVc/AeQAZhmEYq4gp6IZhGP3nyOj1S0TkqOIOqnoVMAZ8Ol4vIo8VkY+JyG9EZK+IzIvIDSLyTRF5poikhf3PKUmG9TgReZ+IXONj338rIi/0+28VkfeKyPUiMiMi54vIQ7s451+IyKdFZLc/7iIReamIVHu9OSJyFxH5iIhc6du3x1/zKT2c47SSNp7j139bRA6IyLSP979TyfEPFJEPiMivRGSXv8+7ReR7IvJiERkt7F+WAO+5IvImEbncx+leJSJvEJGKiIyIyD9G+Qd+JSJPbfFZUhF5hm/37uhcHxSRE3u9vx3u2wNF5HMi8nt/nYMicpmI/K+IvE5EDh2ke9TinC8Rkf8U1y9mxeV1eIOIbFrC/bi1iJzl+8iMiOwXkfNE5HkisqwwwKU85yLyABH5jIhc6+/XTf67eVhhv9NL7svZIvJXIvIL/1l2iZMlh/lj/lxELvTbfi8i/1T2GVX1m6p6wXI+u2EYhrEMVNUWW2yxxZY+LriYc42WeeCrwIuBuwGVNsf+DNiPi1M/Gbgf8PXoXJ8r7H808JTC9a4FngD8oX8d1r8Y+JBf/2eF9p3U4Zx7/TH3BL4XtweQ6NjjC8edXmjvM4EFv+0HwD2A10X7v7/LezwGnACcFx17I/AJ4K6F72AXsKNw/Gf9534hcHvgXsDHomN+CIxG+x8G3Lfw2fYAz/Hf6UXR+jcD/wY8FPgjYDLa9uBCO0b8sxG2/z1wKi5ngQJTwAMLxwjwAf+cnNXDc/k4IPPn/Y5/tm4HPAb4uV9/6iDdoxbnnAJeANwd9/yVtscfHx93ZmHbw/25FLgU1y+eF92j/6VNX+1wr3t+zgvbP+/v2VnRuldG+27GPf9XR9sPAu8E7oxzUdfo+i8Bnl3yPbyhw+c4vXAPT1/K/bDFFltssaX7Zc0bYIstttiy3hbgLtEgv2zZB/wncJuSYz8DPLuwbns02FfgoYXtpxXO//po2/sL2x4YbftNtP6NHc75pmjbHQrbnhZtO77VgB434RB/jtOibZdF6x/bw70+JzpuHtjp11eB6Whb8Z6+E/j7wroqcF2bY4qf7cPRtlcWtj0j2va1aP0nCuf8p2jb5dH6WCm9HpiItj2ocK0HdHmvvhsd84jCtuNYrKAPyj0qnvO/o207gHq07TWFY+PjzozWH4qb4Ch7Tr8VrX/xEvp/z8858LBCW4/360dpPMcZcLfCtS6PjrkSSPz6e3X5PdzQ4bOcXjjP6b3eD1tsscUWW3pbzMXdMAyjz6jqj4HX4wa0ZWwBngb8VETuWzj2j1X1vYV1e3CW8MD9OjThx9HrG7vcdlKHc/4wen0BLiN94Okdjg08B4hd9GM32guj18/r8nxFfqOquwBUdR5nOQ/cLt5RVZ+vqq8urJvHTVoEVvQ+e/fi50TbWt2Pw4DHRu+Lv93dumLviF6/UkTuLyI1AFW9Ajcp8MuwwyDcoxbkz6K6bO2XRdu6fRZPx1mhA/18FpfynD8/en1QVS8HUNUZnHUfnOdE/LwUOV9VM/+623t9qIgc0uachmEYxipjCrphGMYKoKqvwbmavg9n2SpjDHinSKMWlIgc4uNpf+LjT6dFZAY4Jjqu04B6b/Q6VqRR1VbbJjqcc3d0jix+D5zS4djA3Qrv47bEyahOlUKsfZfsLrxfiF43xSeLyCYR+VsfT32DiEz5+3yvaLcl3+c22+L7fBvcZE3ZMcXkXHG7vgZ8BOcW/hH/vhtiJe1U4BvAPhH5mrjM3eep6v6ww4DcozKK33OscN5CRDbTmW6fxeOlJIdEn84dP+fxMfH+xWPuRWvi47q919D5fhuGYRiriNVBNwzDWCFU9ae4uE9E5Hic2/ijgUfSsLCdjIv5vlpEduCUqOP8ti/hLPF7ccpUUBSWorx2olPB6Hrh/Xz0egvdsa3wfjKam4iTzY3irL1FK2AnFtpsiydBajjX+Dv7VecBL8O5kn8QF8MOK3+ftxW2PVlEHtfiuKPDCz9B8mdLuPYrcJ4EcdK8UeCBfnmRiNxLVXcP0D0qo92zCO55PNDhHNsK738pIsHjpTg2Ohq4psP52p27m+c8PuYYPxESqBXa0m+sWLxhGMYAYQq6YRhGnxGR2+LKFP1XWOddVs8GzhaRB+ASvwWOwSV7+ksaynkdeKp3b0dEikrIalNUxGJFo9tSTMX97oSLqy1jT5fnXAqPpqF4AjxLVX8BICJTK3jdIsX78UWcElzG5HIvpqpXi8jdgPsDf4ybMIqzxN8WeDnwUgbnHpXR7lmE7p7H4j6PAK5qse8V3TSqzbm7ec73ATv96+toHTrQKmzGMAzDWCeYi7thGEb/OQ34iIjcomyjqn6D5vjoG/z/E+J1QTn3rLW8zuOXRSShOZ75p12e48eF97tV9eJ4AY4FbqWq7azhy+WEwvuLo9ereZ8vxmXeDoyU3I+rcUkHcy8FcXzAlwT7tzhEoh0i8hzgDqr6NVV9rqqehAtPuC7a7WT/f1DuURk7Cu8PjV5fqqoH6UzxWTxQcu93AKeo6nSP7VvKcx4fsxW4pOSYE1kZC7phGIYxQKz1j6xhGMZ65q1emW1CRG5GQ8n4qar+zr+O3Wi3ia8xLiJbaK6tvhbcNXp9Ms1ut//Z5TlCRvnAA+ONIrIT+BSdE48tl6K7cqgTnbJYMV0xvHL2gWjVqSJSjAd+Cq40Xmw1fiCNJGd/SeE+tuEvcaX24jb8HFc2LxCSEQ7EPWpB/iyKyHZclvdAt8/iB4HYjbz4LI7g4vsfv4T2LeU5Pyt6PUYh1tx75XyKxgSKYRiGsU4xBd0wDGPleBTwPRH5MxG5q4jcQUSeAnwZF/d5A81Zp/+bRjztGPA6EbkT8C6a4243i8gJIlIRkaNZbFU7WkQ2+21N1kZ/3JiIHOevERgL21p8lmeKyFNE5J7Ae6L1n8cpMojIYTRc9AOH+Xagqj/BuVAH5eUdIvIXInJ7EXkE8BVcQr1/bNGG+HOMicgJLT5DxW+Lw7jyewb8D81Js14vIncE/oXmzN5j0f1q9dl2+G2HFbYdF30H8Tkr/pxh3Stw8d3gLKf/IyIPFJFTROQFvk1vDu7l4eO3vjMdeZKIvFtE7iUiJ/vkcA/12yaBd/jXg3SPijxCRP7au+t/gMbkxY9w9dXx1yxOJOzwzz2qeg1uwiL0t1eKyN/4+/4AXLhBjdYhBy1ZynOuqp/G9fPAf4nI40TkD0Tk8b49/4erHY+/b2XP+NH+vpV9D4f5PBdl30O+LvQff/7ivodF2wzDMIyVYK3rvNliiy22rLcFGAceghuAfxtXlmovLonZbuD7wGuAHSXHPgzn7jqJc4P/HC6G9XIW11M/nuY64E31ittsO63F+fKazSyug/6XOGV8LzCLK8f1MqAatf3sFuc8p/AZ7wt8EmelnfOf86fAq8vuSYt7XGxf8b603OaPvzvwHVwt7P24nAAPaHHPTmvz2c5ss63dd3B69FlGgBfgnot9/v5ehZvIWVQTHqeg/ycuEdp/ANLlPTsd+C9cqa8bccrpFHAJzup7YmH/gbhHJd/nS4AP+88wB/wO19c2RW0/s8U5Ly98xlNw1vQr/H3f6+/PG4FjlikHen7OcbH/X8JN3s3jkvKdB5wBjBe+y9K+1mbb2W3uy9nRuYv3u3RZazlriy222LJeF1FVDMMwDCNGRE4DvhWtup+qnrMmjTE2NL4CwmXRqj9X1bPXpjWGYRiGsbKYi7thGIZhGIZhGIZhDACmoBuGYRhNtIlrtwzSxqrSJq69uM4wDMMw1gXm4m4YhmE0ISLn4OJni3xbVU9b3dYYGxkROZvmRIqBK1T1+FVsx6eBe3ax65+o6vc672YYhmEY5ZiCbhiGYRiG0YY2k1ZFLFeDYRiGsSxMQTcMwzAMwzAMwzCMAcBi0A3DMAzDMAzDMAxjADAF3TAMwzAMwzAMwzAGAFPQDcMwDMMwDMMwDGMAMAXdMAzDMAzDMAzDMAYAU9ANwzAMwzAMwzAMYwAwBd0wDMMwDMMwDMMwBgBT0A3DMAzDMAzDMAxjADAF3TAMwzAMwzAMwzAGAFPQDcMwDMMwDMMwDGMAMAXdMAzDMAzDMAzDMAYAU9ANwzAMwzAMwzAMYwAwBd0wDMMwDMMwDMMwBgBT0A3DMAzDMAzDMAxjADAF3TAMwzAMwzAMwzAGAFPQDcMwDMMwDMMwDGMAMAXdMAzDMAzDMAzDMAYAU9ANwzAMwzAMwzAMYwAwBd0wDMMwDMMwDMMwBgBT0A3DMAzDMAzDMAxjADAF3TAMwzAMwzAMwzAGAFPQDcMwDMMwDMMwDGMAMAXdMAzDMAzDMAzDMAYAU9ANwzAMwzAMwzAMYwAwBd0wDMMwDMMwDMMwBgBT0A3DMAzDMAzDMAxjADAF3TAMwzAMwzAMwzAGAFPQDcMwDMMwDMMwDGMAMAXdMAzDMAzDMAzDMAYAU9ANwzAMwzAMwzAMYwAwBd0wDMMwDMMwDMMwBgBT0A3DMAzDMAzDMAxjADAF3TAMwzAMwzAMwzAGAFPQDcMwDMMwDMMwDGMAMAXdMAzDMAzDMAzDMAYAU9ANwzAMwzAMwzAMYwBYVwq6iNxfRC4UEfXLfhH5pf9/vYh8TUT+MNr/TSKyx+97zgq05+YicknUntOWeb6yz3exiEyKyOUi8m4RObQ/rTeM4UdEaiLyIhG5QEQu8v3nlyLyYRF52Fq3L0ZEPuL7sorI2Stw/j8ryKNdIvJrf81LReQNIjLR7+sa6wPrS03nL+tLF4vIQRG5RkQ+IyJ/sIrtuZeIXBa15/gejz9MRN4lIr/y3+0vReQnfkxxYo/n6npcJSJniMiZyx0bLQUROcVf+8ySbe8Rkd0icv/Vbtd6x+TIomtsFpF/8PfgIr/8QkT+XUTusQLXO9MvpxTWn+bXn9Hva5a04WUFeXWtiPzW3+tfishLRSRd6XasNiJyjojM+c98ZscDVHXdLYD65Yv+/QjwCb9uErhltO/Zfv05K9SW46P2nLZCn+8o4Gq/7ty1vv+22DIoC/BvQB24e7TudsAVwNlr3b6S9p7j+/GKtK0gj97p150EHPTrPrLW98CWwVysLy06f1lf2gL8n193HbB9FdtzWtSe43s4rgr8EvgdcFi0/k+BOeD0JbSlq3EVcLnf78w1eD5OD/erZFuQh+9c7Xat98XkyKLzfw3YC5wQrftDv+7MFbhekBGnF9af6ddfvkr3NZZXL/br7uefDQX+Ya2/+xX63F3LvHVlQW+Fqs4CZ/m348CD17A5fUdVrwE+6d/eU0SOWcv2GMYgICLjwNOAPap6XlivqhcBrwbm16ptg4Sq/hL4un/7pyJSWcv2GIOH9aXuUNX9wH/6t4cDp65hc7rlNOBE4HxVvSGsVNVPAR/EDZg3Gn8H/AB4/1o3ZD1hcqQZEbkV8EDgUlW9NKxX1f8D/gVYWKu2rQWq+i3gAv/2CWvZlkFgQyjonmr0WtvtKCLP8y4mPxORG70b6KtEJPHbi+5kLxCRb4jIlIh8z3e6dud/u4jMe7fS1/t1DxCRH4rIE5f4+eJBtUTXep13Gfm5d9m6QESeHW3/TfQ5LheRo0QkERcScIHf564icqV34zt9ie0zjNVmM67f7xSRt4jIcWGDqn5QVZ8Z3i+hz79GRL7s+/y3ReRoEflz7xa627tIpv7Y2OXzJyJytj//Lr/fWLsPISIjIvKPvn9eKs6V9rUiUov2eYqInCci91vivQryQ4jko4ic5a93of8MPxSRP/XbjhKRK6J78hu/fpuXb1/w7x8tItf55UFLbJ+xtlhf6p5exhqdfp8fLyJXR/fqGSLyXXGuoF8WkcM6nP9T/rhfichzW+y2w///IxF5lohsyxuv+gxV/ZA/1yJ3XxH5oLR32dzc6jsSkf/Def8BPNfLmFeIyCMKz8fp4lxD9/n/R4vI58SFGFziz/u/InL7wmc/yrfvBn8PzxeRj4nInUTkScDro30v9Ms2Efkkzpp4KvA30T4VEflbf80rxY2RPiMiJ/ntN5fmsIdXisiXROSA7w93a/ddbRBMjjQT+t6dxLl9Hx7dj79X1fgZrYnI6/1n3iMiPxKRr4rI4/z2P/DvfyXOXfxGEfnvcI9FZExELoyu/Xr/zJ8uIi8Cgnw4yq//YXTtk0Tk8+LCd34rIueKyAP8tsOlOfT21b5/XiUibeVfC+KxSI6IPNLfz6tE5He+793Sb1vys+CP79S3vybN7vj38eu/IiJ1EfmfTvd/Say1uX+FXAiKLuA7cRYiBX5Ns9vZ2RRcsYAvAn/pX08AP/H7vCDa57ToOq/3697q3/9PtN/x0X6n+XWvwLn5SOGaCly4hM93G+AGv+6zhX0vAB7gXx9CwxX+UX7dGM7tX4GX+3X3jq5xS7/u9cCz1vq7tcWWbhecgL8hepZD/383cLfCvr32+df6dZ/0738F3Ac3+LjGr3tidGyQM3XfX6vAz/y6f432O4eCOx2N8Jz3FM71zmifC2OZ0OaexPIouOXeA5jx695W2H83cKJ/fUuc6+cCcKeS8z3Rr/sz/34amPDrPgw8eK2fCVusL61wX7oZ8Au/7ntAtUN72v4++/WnR9d5hl/3Gf/+3S3u6fH+O3sf8JoOn+Pkwve6APwQZ0U+rrBv2We4nILLZg/f0aJjSz7LF3GD9rv669/FPyOb/L5P9PtdGa2bAH7j1/+bXzfijz+jeF9L7knZ5/wA0fgO546rOFfkW5Q8Ex/2617g3/9yrfvxWi+YHCnej53AbPQZMpz8eBP+dzfa96N+n58Cm/26f8KP+YHHAt/Ayxzg5X7/H9Osa4RrnV44/5mUuLgDxwC7/La748J49vu23rXkvJcDR+C8lW9o89nj7y64uP9ptO6MaN+H++vd6J+FcOw10b1YzrPQTd/+pV/3kei4E/FhxT3c/8spkXlly3q3oP+hnzG6DngA8E3gsaq6p8Nxz8Z1OFR1EviqX/8nLfb/jP9/kf/f0q1NRF6G+6F5lvpvy/NJ4ACuE3bLH4rIFcDFONegP8c94DGPUNVvAKjqTbj4OMJ+qjpNw7310f7/Y6Ljw+tHAF/ooW2Gsab4/vVXuAmowK2A5wDn+b4Y6LXPf9r//7X/f5iqfkdV53ECGKDMYnKxql7i9wvX+CtpkZxNRG4DPM6//Z7/H1wDny0im/zrj+PkxydatLeMJ4jItf68lwF/rKpnFPa5o6r+CkBVf4tTKFK8rFDVy3EDClgsP0aBh4pzmb8XbqBjDCHWlzryBBH5lW/v7XBjgif6trWj7e9zCd2ONQR4FzCjqq9r1wBVvRA30A+kuDHKa4CLZHmJ0nr6jlrwHlVdwA10n4ZTfE5T1YN+e7gnN/PtBngycIJ//W4AdaGOb6LxTHWNt9Sd7t+GcdA5wBSwFXhxyWHF7+pEEdnc67XXEyZHmlHVXTgvjeDKLsAf4J6nX4jIk/01b42biAL4kKoe8K/fBZzvX38FeFwkc8Lzd2fcxNFSeS7O0l8HfqgujOdXvq1lz/1/q+p1qjpFoz924oUisgunB/0AuL+qvi3a/kp/vV/4ZyHc7yNxBoEiXT8LPfTtj/j/j4m+4z+L1vf9/q93Bf3/VPVk3IzLy4D7A+dL5yyF24APebeNX+IUX3A/AGXs9v9DJ9veYr8X4H4I7whsijeo6tmqukVV/6FD22L+D7gt8H2cq9gzKbiFADfzrhq/8pMVDwnro30+5//fzbvYPBT4lF/3GHEZYWdV9doe2mYYa46qfgY4Dnge8HlgX7T5dSIS+uo2euvz4QdyrvA+XlcmB3aVvK7irNNl3KHQ3p8BZwDXAzcBxwKoc4fboqofbHGeMj6OUyZ+i5MjTy7Z5w+8q9ivReQXuMEDlMuPh/kB6MnAt/26x+A8cn6oqnMYQ4v1pbZ8XFVPxFmX3gn8MXBJcD9tQze/zzHdjjXeglN67iFd5JRQ1b8Fbg28FvgOjVjgCZqV917p9Tsq47e+jaqqV+KeiSeLCye8lMZgHRr37Y7RumvCC1X9kqp+todrB+4cvd4d2kPj+7jzoiMWf1fQcGnesJgcaUZV341T4F6CmyCY9psqwNv861OiQ+Ln+apoAm4B+H/iwtB+Q0NBhNb3rBvCtQX4qf+8R+I+b9nz/NuofVd0eY234PrQHtykYzGbf2jDXfz1v++vfz3OWl+kl2eh2779EZzlexz4ExER3ETNx/32vt//9a6gA6Cqc6r6RtxsSgr8s4iMlO0rLonFN4AnAf+pqicB7/WbW90vbbG+yDzu4T0OeHuXx7TFW8DDrOM9aQgxRORYXId/DM7N7WScQITmz/JFnPtIAvwtzs3uv6Jz/iWNQbhhDA0icidV3aWq71bVRwOH0Yi1qgG3WmKf7+ryyzg2MB29fo2qnqKqt1HVI/zyy+WcXFV341xZAR4nUYy4iNwd1+8fDDxVVW+Ps2JB830JsmEr8Pe42ecgZx6Os3iY/BhyrC91xlt3XuivNYqz2JbSw+9zfP7iWKPVfbkBN8C8K8761BIR2SQit1LV36jq61T1vrjv9j/8LifHTSg7Rbvz94GZwvsX4gb0x+AygZ8SbSu7b2uV9HIt7tXAY3IkaoxIVUROVtXfq+qbVfUhuFCXEHt+qCzOM9HqeX4TboJNcJMIfxRtW849C59XcR51p6jqsf6zluWUKfbXrvDeeG/1b1/kPRWKbfixv/4p0f1+7VKuR4/Pgm/fuf7tU3GGh4u9FwSswP3fEAp6xKz/X6NgwY44CScwoPFj2a96fO/GuWjVgdNF5DFhgywjSZy6jI/f929fHiU/uBsuxhzafBZ1mVt/4N8+3+/7Vdz9SnAze58vHmcYQ8C5InLz8MZP1r0HN9MNbsZ2Jft8kXjGeaf/Hybuyoh/7PNZWJ/05NvBOibLS2z1UVz8JsCrovV/iOv/12sj426Z/PgJ8Hv/NsiP4Cq2HTdp+D9LaJcxWFhf6gJVrdOwmrazmHb1+7xE/pGG0vMqEblLm31PBr4qPvkWgKruxSnB4L7XwF7/P1YS2n3GTt9RFu8sIsd3YfE/zf8/V1V3SXm95J9Gr4+Ozv9oEXl8i2tvKVGGAj+JXu/w+wuNz/fjRUcYrTA50ny982J3eu8aHrxWFnB5X34WHRM/zyeKSPjNPs3//7o/R6v71TRx5F28YXF/2OG9GUKIRoqznIftfyUiL2/z2ZbCu3DhDwkuV1cgtKHJEi0uie1yE8/20rc/7P/fH6cXfTjadpr/3+n+d82GUdC94htmgr8azXoUuYbGg3pbL/zv0692qOr3aMyqnxX9IPwNbrb7VaUHdiac8xa4WUeAq6Ltt/WzkndvcXywcKXA59XFd53j1/1eXZyaYQwbgnOTOzZfIfJw3Cz111X1N6xwny9woojcSkSqNMo9vs9b3hahLu77Y/7tU0Rks//xeBlwgbrYTHCeL3cDXtRrg/w53ubf3kdE7u1fB/mxQ0QOFZFDabamxYRB1AzwDX9fL/HrfugH/MZwY32pA+IqoLwEl60a2ueU6eX3uWdU9eO4z1vBfW/tMlMfD7xTfGyl/96e6re9O9ovGAJuLY4H0trYAZ2/ozCxt8N//gtxBpR2hPt2Kz+pUKYA/RcNBeuZ/jNtwVkmbyxcGxHZgfu+X1h2Qf/sfMC/fYT/f1+cu+s+4M0d2mw0MDnSzDjufhwSrXu6/3+2qk6p6q+jaz5ZRCb8s/8yGopg6Be39f9bTQzEfe7mNKzCYf02/3neiit19k4aYQjPBvBjgRfR57wy3qPv3/3bJ4sLrwUIob+3Ep8TQ0Tugfu+zmMZ9Ni3P4FzkU/8PrHhstv731Pj1s2Cm9UImRMVl2nwIpy7137crOrraGQWfhNutk5xszYf8+tfgEss93vgX3EPjPov5v9wCY8ui65zCU54XB2tuxCX4e+SaN1luMQl50brfo+LuXiqb+PLe/x8P/Pbkuhae4H3+/X/jHN1+w1uVu5zxc/r97uNX39+tO55ft1b1/q7tcWWpSw4i+7n/PP/S98Hf+37wqZov6X0+UfTyEg7h6sZ/HoaVRH2AG/x5z/br/uJf/0b3y/fA4z5fT7S4thNOAX6an/MD4A3ArWo/a/w8uApbe7FnxXk0S4aWUs3+XOr/0x/hxvY/6c/789xk4fnFdvnj3+IX//paN2bKGTdtWV4F+tLHfvSL/3/Pf68LwIqHdrT9vcZeDzN44pzcCEj8b1qdU+3Ab+L1l0O3Kzks+zEZXA+B7gUN2a6GvgR8FeFfSd8uw74+/+3NLIS34CLxY3HVT/E1RK/pPgd+fPd39+3/bgElH/b4rOcHh1zM1yOi0lcgtunRvteDTzJ73ck7vm4HuchdB7wtOg8Ke452+2vdy5wc1yiqvi7ervfv+Lbd4k/3/W4ONOT/Pabs3i8d5+Sz3LCWvdlkyMDI0dGcNm+v4KbULoIuML3hZfTXAWihtNffouTMz/GyY/Ub/8DXMK4SX9/w/g9fxb9fk/EyYU9uN/10/36zcCXcErpJbi+tc1vuzPwZVy//zWu/z0qalesl1wNvKvDM/Cywnd3LQ2d5TicB4P67/5Zfv0T/Oeb8v8/D9zOb1vus9C2bxfa/ml//H8U1ne8/zgZO0dDXr6o3X0Sf2LDMAxjhRBXN/jpwLdV9bS1bY1hDC/WlwzDWC4mR4xBZ8O4uBuGYRiGYRiGYRjGIGMKumEYxgoiIm+iUSP8riJyzho2xzCGFutLhmEsF5MjxjBgLu5GR0TkZFy9v1lc4oOnq+o17Y8yDGOjYbLCMIxOmJwwDKMbROQHNEq3XamqT1vL9qwmpqAbbfElI74I/JGqZiJyC+A6dWUEDMMwAJMVhmF0xuSEYRjdIiJnquqZa92OtcBc3Nc5IlITkX8SkYWoZEFxn0eJyI9E5Dsicm6hZurdcOUu/p+IvBq4i/2QGsb6w2SFYRidMDlhGEY39EFWAPyBiLxURP5eRO618q0eHCpr3QBj5fAd4qO4sghpi33ujKsZejdV/aWIPAL4iojcTlWvw5U0ORVX4uAg8E0RuU5Vv7Man8EwjJXHZIVhGJ0wOWEYRjf0SVYA/JOq/khERoHzReQRqvq7VfgIa45Z0IcQEbmniIyUrL95YZZqE65G6AfanO5vga+o6i8BVPWLuBqAz/Pb9wMXq+oBdfEQP8DV8zMMY8AxWWEYRidMThiG0Q2rLCtQ1R/5/zPAL4B7LvczDAumoA8ZIiLAvwKfFJFqtP444FvAc8M6Vb1QVS/tcMoHAj8urPsR8CD/+ofAISISnpVjgd8s/RMYhrEamKwwDKMTJicMw+iG1ZYVInJbEfmLaNstgd8u/RMMF6agDxl+xvmPgFsBHxeRiogcA3wT+D5uRqorRGQHsBW4trDpOuAW/nq7gFcDbxeR1wE3AJ9Y7ucwDGNlMVlhGEYnTE4YhtENqy0rcN42jxSRV4nIO4DPqOr3l/kxhgaLQR9CVPV6Ebk/8G3cD9vJwM+Ap6pqvYdTTfj/s4X1s8B4dL2PAx9fcoMNw1gTTFYYhtEJkxOGYXTDasoKX3rxj5fV4CHGFPQhRVWvEZEn4txDrgWeoqoLPZ5m0v8vxpOMAJZV1TDWASYrDMPohMkJwzC6wWTF6mAu7kOKiBwCnA18BZgH3hvFdHWFqu4G9gJHFDYdwQaK8zCM9YzJCsMwOmFywjCMbjBZsTqYgj6E+NiNrwG/Bx4N3A94APA+n8ShF74OFOsO3sWvNwxjiDFZYRhGJ0xOGIbRDSYrVg9T0IcM3wG+BOwCHqOqs74m4P2BhwOv7/GU/wQ8RERO9Of/I+BI4F39a7VhGKuNyQrDMDphcsIwjG4wWbG6iEvKZwwTIvJA4HuqOlVYfxtcosVf+/c14KvANuAOwHnANar6J4XjHoXLqjoNpMAZofagYRjDi8kKwzA6YXLCMIxuMFmxepiCbhiGYRiGYRiGYRgDgLm4G4ZhGIZhGIZhGMYAsCZl1kTkeOBC4GC0egdwDDAKvANXrP4onLvD7/xxx7baZhjG+sLkhGEYnTA5YRhGN5isMIaJtbKg14HXqeoRqnoEcHvgq6p6A/Ae4AOq+mzgfcBZ0XHtthmGsb4wOWEYRidMThiG0Q0mK4yhYSBi0EXklbhZre8C1wObVHXGJxk4CBwPzLbapqrXtDt/TUZ1LNkEqigKa/+Rm5DEzZNolq1xSxocYM9NqnpoeP+Q+03ort31Rfv95BezX1HVh65q44wNyWrIiVEZd28GTEYASBrJiQFpn8kJY9BYaTkBUJMRHWWih0Z1uV+f+rVUUkDQeh0GYIwHzbLC5IQxCKz8mKKDnJD8T+vNEZ17spa+HCZsTNFgTVzcY0QkBR4K/CNwCnBQVWcAVHVORPbgOslMm22LOomIPAt4FsCoTHDq+CPQhQWo19FMQbOV+eFKUve/m/OLIGmKjI1BlpFNTQ3Mj+nX9ZNXxO9v2l3nvK8cs2i/6pG/PWTVGmVsWFZFTjDOqZWHADRkRL+I+7UIiHde6kZOJCmSpiQTY5Ap9YOTKye/eqQHOXFLETkL+IKqfmG12mdsLFZKTvhzN8mKu8sDijtEr5udEyXpvjywZiX9upMs8rJAKhW3bN3iZMWu3QMpK2w8Yaw1qzWmaJIT/rc/lwexnCjIiFYlxZuMqkVZEcmJRXKkm/HMgMkJ2NiyYs0VdOBRwJdUNeu9xn1rVPUsvBvK1vQQXZUHr8f2S5oilegrGIDO0Rql3k+FxTB6Y8XlxJZkpyJJfxXzgIjr30touySCVGM5MRgD7nJayol9qvqs1W6NseFYETkBBVkhO5o7oJQMuOlNMe8LaYrUau61Zisjy/qCjSeMNWflxxSxnPDXKJUJXSrnYVuupCeyWElfLvG1uxlntGpr38YoG1dWDIKC/pfA6f71FcAmERmNXEm2A5fj3ExabeuNFfyyJZHyGfAy/I+pLiw4V7QBRoEFStu41SxjxiqwanKi6/7bK0scBEilgoyM5B5Ag6uct5UThrEarP54IiA9pPSJ9y2MR8IAvkkOdZo4DIP/Wg0ZH0Pn52F+wZ9/8OSFyQljAFh9WSHJYjnRSjlPSuRJWRhsrKQv18BQHKMsZ+IiHLtM+bORZcWallkTkdsCN6nqTQCqugtX2P4hfpcHAd9V1WvabevqYlkGma7s4LtXt9VKBWpVtF5Hw4/pgKIo85otWvCWMVPOjZViVeXEaszU9ionajWoVWF+Hp2bW/n2LYM2csIwVpRVlRPNFy5VzkstZWUD9F4U+3bNqFSRWhVGaujMLNn0zEAq59BWTmwVkbNE5JFr3UZj/bImsiJ2bQ/49yKSL259C5ng17e0sK/D39qNLCvW2oL+XOBdJeveLiIPA47Gx3J0sa0rJBF0JSZjJCRw6s4lJKlVkTR1P6D1+sB3LAXmGew2GuuWVZcTwPJno1uds1uSlGRsFNLUTS7Ws6HwtDE5YawRayMnSmipnLc+YFmyJs9RUalAPXO5dgZYVrSRExYKY6wGay8rWoW/BOW8V1fzXmjjwdNX+tDujSwr1lRBV9X/V7LucuDRLfZvua0nVmDgXeqW1ub6Uqu5DponrRvMme6AAvMD3kZjfbJmcmIF6EVOSCLI6Ih7k9UHPPbc0UZOWCiMsaIMtJzoh5W83bglJJsFdH4erQ9y/LmNJ4y1ZWBlRZlyHt7ncecJZFlzLHo3rFR+nRVmI8uKtbagrw+Ci1tIytLuYRKX8EnGx9DZOXR6eig6jaLUh7Vug2EMGp36vIiLPR8fR6en0anpgbaIBdrIiXU/220Yy0oKt9QBtCRIpYJunkAmp9H9BwaqvFoZNp4wNiydEsK1cl+PlfTlstI6Rx9lz0aWFetaQfexCY8ck81uRSL0PddAMf6sw4MptZqznqcp1Otkc/MD/UMaUIX5wW+mYfRMLifY5OPEsv6XWSuzoLXp98nIiLOeJwL1jGxm1uSEYawxDVkR1TZWBTKQJPeMaVLUOySF6joLcwt5lEyMIyM1EHEJZ2dnB37S3+SEsZ4plxMZWgcJ8mBRPHpRTkTvy5LDbRA2sqxY0yRxK42qfkFVn1WV2spdpCzxQxuSkRGkVm1kbs8G3yoGoAjzungxjGEnyIlKUU70KXlT43RdureLOHfVag3m5l329gEfcAdMThjrmVxW0HpM0bMVfZlWdxkfQ0ZHkdk5Jy+GwtPG5ISxfmkpJ4plGItJ4VpZzztt70BT3fU+j2vKL9jHsnUbWFasawv6quFd0zoOvJMURrxVbHbWDbyHBAXmyudzLLbUMDogSRQGA62t4d4jR0acl43OzMD8cHjZQFs5YRjrk3aD0U7W856uU3CBlwRJU2RsFJIEnZxyVR6GQFaYnDA2HLExr5McKMvi7mPP49fdxKGHazYZCFYjHr1PLvkbWVZsHAU9SVy29H4i4h76RND5Di6xSepiz0dqoEp9996hmOkOuEQNpZ3EYkuNdUXfSzFGg/RO55bUl1UbHQFVsoOTA1+CMaaNnLCJPGP90o1VqhvlvIeBs1QrJCMj6NiIq/Kwb7+b9O9nrOoK0UZOGMbGpGBNj2PTOyaDi2uhh9MlsnJlpbulD7JoI8uKjaOgrwTeXUREOqYwSEZH3Ey3qnNvXxgeqxgEN5N0rZthGCvOkn7YWpUtCbPmkjRyYLQZgMvICLJpwsmGufmhsYgF2sgJm8gz1idRDHrL2PMWiaFaDby7kT/J+DiyZRNaz5D5Bepz8w3Z0q2L6RrJljZywibyjPWJZmiWINWS2PM2ynl4n8uKdkpvYYIvlkdrpqwvs1zcRpYVpqAvldh6rto+e7sIUqsio6NuhntIEsPFKFBnY8R9GEZPFK1nraxg7RLP+R8xCRN58wvoELm2B5YjJ0TkG8DtolVvVtU396NdhrHSdBt7vihrM5RawNpcKC/BqBNjyPQszCwxMVxoyyrLmTZywibyjHVPqQwobovlSZANsZv7shvRwSq9Ei7wS7Cob2RZsXEU9D4mLchJ/axOF26rVGswUoOpaZdldchws1gb53ExjK5o9SMXr0/TrgbfUqkitZpzWT04iU7P9KmRq8cy5cRVqvqAfrbHMNaEFtbztpaxXk5fqcDoCNl4jXTPfleudTmssqJu4wnDoDnWPEk6Ku5NsqKfynrpBVt4BS77vL3Jmo0sK9b1p24qs6ba/Qx15xO7WNE09fVG21jPk9S5oo3U0DRBZ2ddyaQhQ1WYMxd3Yx3SkBObejywc1yUJOJDYNrnqJA0Jdk0AbWqK5c0PUM2jAr68uTEJhF5MyDAQeCfVXWqb40zjGVSWj6pi8n/rgfeXka0rPggictls3ULWqu6faanySaXqaA3GtP8foUUdhtPGOuZUjlB1K9VGzKh2OfijOv5umyxFb1LN/dF116KHlQc6/RDYe9SUd/IsmJdR943lVkTWV4G1ZhQqkCcW1q7ZG9SrSDbtzqlfnrWJXwaktJqMQrMky5aDGPYaVs6aRklSfLY83Cd+Icx/lEWQSoVZNsWN4s+OT1UpdVi2siJQ0Tkx9FS5pr2eeBMVX0RMAt8cBWbbhgd6bZ8Uk7ZmCNJGksHytzmpVKBbVvcqfZPoytZWk2ksfQRG08Y65lSORHlrFo0YVeUBWVhc0nJca3IdZQVUvH6ef4O8mUjy4p1raA30ceZYElT98PbKfY8cRmZdXTENWF6eqgyt8cEN5Pigk/U4GcMDWNj0M0PU0gMB15OFBTufPCbNFzbVdGpGVdxYsjiz6GtnLhJVe8SLWctOlb1g6p60L89G/hjERldxeYbxvJZwTrDocqDjlZdmaXJ6YYX30rT99rGpXKii2ZIRUReLCKTInLbNvt9Q0Sui5YX9+0DGMZyCBN0UZ+SohHR57jqZFjsqLSvdO3zFVbUlyMrhp2N8Sn7iQiS+oexQ/yHVCtIrYqO1ZCpGXRyaiitYoG6bsxEDYbRRLc/RsG9vYOindSqUKuSjVRJD0yhk5NDO5EHLeVEW0RkBDhcVa/0q+ZwE8ijwPD5+hsbkzaZ2926Yl303uJIpVZFRmpklYRkfoFs/4H+l49t24D+xaovRU54/gL4HjDeYT/LaWEMFpqxyC5ajD1vm9emTV8vJposSzJH98ks+1bJpg8sQ1YMNRtHQe/H7K+3doXkcDo33/ohFiHdsd3VM55bQGdmyWZnh9IqBhs7UYOxwQkxXV0q5uEHUEISyfmFNnIiITlkJ9SqJDNzTk5MT29EOXEk8Ebg8f79/YHzVXVvn5pmGCtLiXLeyMjst5WVHEqShpJdMsgNZR8lEZLDDkGrFefaPjntvPIyXdHBcSl9KZ20tPFE8L7pwt3XcloYg0ehrFqT5Tx43S1ygSdXspvKOvsJvtwQ0Er5TgSyFtVlWlCmyHettPdRHrWRFVZmbd3QjwFvqHPqO0VL1zIRpFJFt212HXD/pMvcPqSDboCMjZuowdh4LKqF3qsLV8hREcJgWuwj1Qq6dROaCsnuA2Qzw20sXoac2A0gIv8BHACOA57Ux6YZxurQapBcHHQXSw61KbUmaYpUK9S3bYIE0t/fRDYzUz5g7lZW9UuRX4Ky3kZOHCIiP47en1UWDtMlnwc+raoHReQVuJwWj13iuQxj6YSyzE2TeCWW86CcL+rDmVPSNZIRvZQsy4/pTUkvsqS66uGzLPG6bWTFuvfe3TgKeh+QRBql1drEn0ul6mqUjlTd9oOTzno+xKhiFnRjY9Djj9iimWZJGmEwtP4hk2qFZGSEbLQCGejkFDo3N9QTeW3kRNvZblXdT8N6bhhDzyLreSC8z7L2Snokh6TmxhT1sQqykKFT0zA/v8wGroDVvevMzC3lxE2qepd+NEVV4ySTZwN/LyKjqjrcs6DG+iIo7rFy3sI9PXdzj0NjIis6sDikrqQSRNe0qzzTq7K+REV9I+se6/pTN5VZK9+ht8FwmroMqlnWtsxBMjaKbNlMvZIgcwtkByfRhWX+mK4xzs3ELOjG+mPJZdZokWU59WEwqo0f0ZIfpWR8HNk0gaYJyYKXE0Mcew5t5cS6n+021j/lZda6dG3vNv68REmX8XFk8wSaCEmmrgRjX2sT91lZ76Cor/R4wnJaGGtJqzJrseKdu7YXFfKCDNEE555OBng39ro2l1uLZMkiRT2ce7nl1fqlrPeoqG9k3WNdZ3FvKrNWvkP3Jwu1z6sVqNfReouHK0mR7VupH76N5MAMyZ6D6PxwW8Wg0UmKi2EMO23LrLWhNNmKz1EhaerDYLLG+mgfSVNk2xYWjtxOenCWZO9BN4mnWV+zJa82JieM9UwrWSFRtuUm5TxkJvbKeSixVCy1tGhd0vgvlQps38LcUduoHJgl3X2wKT49LH0jLqG03OzMLcq0rYScEJHHiMhW//ZI4M3RZstpYawai+SENuLHgy6xyHKepG7sIIJEskOSpEkehFJt7r3fL02R0RGkVoNqNR+DNLnQx1nhu1mKdCkXupZJXcqY5cgKEfljEfkfEXmLiHxBRB7c1YEDwrq2oDexnEFv6FBpCpKg2qL2eZKSjI2i46PUx6qkN+xDDxxY+nUHjPr6ns8xjK5pqZyHHBVJ6+ztkkZyYrxK5fq96P6DhZ1ayKshmOgzOWFseEpqnC9SvpsyLpdb0yVNkYkJsolR6uMVatfsRfeXjyl6UdJ7ytC8zBjSVixVTojIPYCn+LevEpFPqupngdcDzwa+i+W0MAaJOK68RDaEbVKY0AMaSeAkAfV6RyJIVuLOXnrpFq7vnWjlZl9oszt5uWxYlMunFR2U9KXICnEf/APAg1X1hyJyN+CLwGE9n2yN6IuCLiLbBnpmMiRIjLMfuhXdDXglQSqVhktKi+RwkqYkmzeR1SqQCjo9TTY53ZePsNa0cTNZ95kUjf4w8HKiQKsfl3bK+aJZ61hOhB/hNHEhMKMVENCpGbKpLpMLd5poXGMFfiO7oxn9YdjkRExpZvE4GVTRlVWjDO4lGZmlUoGtm8jGKmgiMDXt4s+X2841SPYUsxw5oarfB74PPL+w/uToteW02AAMjayIKzYEihnbk0g5b7J8exmRiEsSF1VbExE0z2nRvh+3qnrQleLeyU2+jWwIsqbnsm2epcoKVVURuQ443K86HBh8C0dEzwq6iCS4GYjYx+tjwD371agVITzknWoJliCJONcRr5xrposHwiLI6AjZYdvRSkI6OY9OTTv39nWAgsWWGl0ztHKiDS0tVNHst1S8SM20dUbmsTHqR2xHE3FyYmbGJYfrSyN7z6jcT9rICZvIMxaxHuVEaRklaLi0BsJgtjgYjxI+yfgYs8dsB6AyuYDOzqHzC32NGe95AN0HRb2NnDCMUoZeVqjPXRUSTUdJ4SRNmpXzYAwMuoYIAs6Kji/5mmSQaSMhbabNynZZ3gtY5KnTRbnCxfHs/nqL6EJRd5u7H5u0kRXdVHz4E+BDIvIY4C7An3Z94QGgJwVdRJ4D/DNQzKY0VLMSPeHjOxgZgdlZdGGh/OGrVEkmxpk+bIKRm6ZJdu2jPr+wBg1eGVSF+WzjREQYS2eo5USLUkctrebxcUkC1Yqre94i2VtSqyIT48wcNsboDdOkN+6j3i/lfFH7Vl9ZbyMnbCLPaGKo5UREKJ+UD3Q7KeeRjGm2gBWyMo+OoJvGmTmkyvi1s1Su31c+kbeUOPEOA2i3S5fJnlqcr+3lbTxh9MC6kBVpI8bchctK431QpuN4cxFIY4U4Q9LEebkn6hLHJVG/i93eQ8hM2RigTGlvRSHxnDtNibIOJdnmwwHLU9bbyIq2FR9EZAzn0v4UVf2+iNwZ+BcReaCqDoVy1qtk/xvgvkBVVZOwAJ/te8v6gIg8UkTOmte58myp3ZwjJHwKs8xlA28Rki2b0E3jaCVB5uvogQNDn5E5xpI/GT0wlHJigcWD324TMOU/uonvEyVhMJIIsnULOjGGJoLMLbjY89WQEyWJmlYCkxNGDwyVnIA2siKJBtjQUM5DwqU8P0VkHfPH5cnhYst7miLbtpJtHne7zS7AvoM+Y3OLJE49fZDOyZl6Sj7XY0K5NnJiq4ic5bNgG0ZgqGTFIjkR9/E4QZzflvf9opt72bpYhhQTrSVxosmkWRlvkbCxLcVzwKIEl419OySXa0EnObOMMcXJwA4fEoOq/gQ4EbhbNwcPAr0q6D9T1Z+qanFE+cZ+NaifNGVx72XWKBAG3X6WS1X9wHtxXUHZshmdGEUyhdk5soOTkK0nBR0ylUVLN4jI20Xk30TkrSLyTRF5wMq21lhjhlNOxJ5z7QabxR+cJJoJd+drcjXLf4Akga2byTaPkiwoMjNPNjW15NisJbGUH+keWI6cMDYcQyUnoCQ7c7Ef+YF00wC2qcZxi4FtyTnqOzdT31IjmVeS6Xl0aqrZ0NAu43K3rJGi3kZO7FPVZ1kYjFFgqGTFYjlR9LZzSrrkVvMEIjd3TWMFvXmbhIRzUuj/BSW9paIOzeOATkt8jug8q6WoL2NMcTkwIiLH+PYeDmwFft/NwYNArz5GrxCR9wIX4DJjBl4OnNS3VvWd6CFrVR6tBcnICKSpc22fn19sFfcZ3ueP2k5WTajdOA0HJt3+64hlJn+aUdUXAIjI44F3ALfrV9uMgWNI5URwOaVzMpRAKK1Urfja5z7OLFNCDeP80DRh7uitZNWEkRunkAOTLp50rQg/rn10f7ckcUYPDK2cyCnGfBK5gxbLKDXJjqzZ5Z26c08N5dgqFQ4euwlNYOKqKeTgVD72yI0FMb0q6UX51mVG5sYuy6t1bHLC6JHhlhVNyWK9nAgKb8FKrv61BgN7qHkuAgt1P85QIPLWS8Wty/yYw4fRNLmmL8VIWeYmX5JhvrE5rkzh17eSNStcB11VbxSRpwNnicglwG2B56rqFT2fbI3oVUF/LfAgnHIVjyyP6FuLVgJVX5O4PPt6KeEHtVZ1/2dnXU3jwg9jMjLiYkq3VpG6MnLdLmc9X2eoLj2pi6q+LHp7a5yQNdYvQyknlMIPTEHBbqmcpylUa27fhYXCoN2dQ8bGXMKn7VWSOSW9bk+znOhj0qee6aOi3kZOWJI4o8hQyokcccljc9fVeOBappwXB6xptL9P+iQZMDKCTIwxuyUhnVcqN+xDJ6cacaWwyHLV1xJKPSjrPcWpRyxnPGFsSIZWVkil4n7/U29BDt52TW7s7nWT5dz3afWvJVNIFeoFpThNfR/OnE90Fib+CiF2PQ4rtEQZb6msdxur3kOcenyZZegenwA+saSDB4BeFfRTgJup6ny8UkRe3euFfQD/mUAV2A4co6oPEpFjcRbW64CjgDNU9Xf+mJbb+o4kLv68UkHrmUvOUpbsYPNm2L4FgHQuIzs4ic7OrkiT1hJFWMiWnEkRn6Dh1bjveqgyKRo9cwpDKCdKbVCtXLKCct6UcTVxk3hZYwY7333TBLp9Cygk8xk6OQnz8+XnLl5ztRT2PijqbeSEJYkzipzCEMqJRUSx43nceRxfGkowhhAYtHxw6ivMyOYJ6js2IQrpnKKT0zA337gWLCkTc365Vtb3HrMyu81dKurFNrSWE4ZRxikMu6wQ56qejxkKMebBct6YuGseQ2gCkoV90oZS7LdB6sux+QOygoxpl9St/D41Di9RxpvGCyVyqbT+ejurehtvm40qK3pV0M8FRoDiyPKGJVz7DcCHVPV8ABEJpRLeg1PyPiciDwfOAh7YxbaOLKqD3m7fNHVuq+EhWyjJzCwC2zYzf/gWkrmMdHKebHJqXcWeB1ypg1JlpW0mxfx4l6DhMSLyCOA7InJHVW2ayRCRF6nqv/SlwcZaMrRyotR9tEj8Q+eTSEqSoGTlCd8kQbdtZvaIzaSzGdWDC2ST0z1483ThmtZPJX4ZinobOdFXTFasC4ZWTuRk6jxN46RwsbU8KsHoXzRN7mlwS018WcY0pb59gpnDx6jMKNUDde+9V2+yqi2ybPVAzy6p0efol6K+WnKiW0yeDDxDKys0U6Red964Ufb2XBkPynkcax4Iruv1SCnO66E3lOJwRF6GLSSThEa4XXOjug+LiVzlWyrqRbm0FEW9lbcNLWVF37zyBrX/96qgbwUuEpEf0hwH8lDgfd2exM9gPcKf63HAZuBtIrITeAgNC+vXgM+IyFHAbKttqnpN15+gyzroUqu6MieZc1vVYnK4JCUZHWH+8C0cOHaE7RfuI9m1n4V1qJw7hIUluJmISAqMqepBAFX9ooh8FJdh8SeF3Z8vIhOFdYr77q8CvqaqN/XcCGO1GX450aLcWvyjJiJuEq9a8z+i9UVJnMS7wc4dsZkDN6ux46IDpDftp65Zf5PDrYTVfUmK+tLkxBIwWTH8DL+caLShpVt7bjGL93UvGtYvFaikSK3KzBHj7L9ZhZ0XTlPdPdXfskmBpbikQke31O4V9VWTE91i8mSwGX5ZIT4pXKych5hzr5yrr5EuxdwWIk5JlyxSgrUhA0ScruI9+Roae9ZQ8ptIO1rQ411DX4/d5LXdJGHJtp4s6k20lBX99MobyP7fq4J+KvAfJet79ek+HjgByFT1b73787eAJwIHVXUGQFXnRGSP33+mzbZFnUREngU8C2BUJiBkVu5m4Bpiy2o1dG7Ou7cXYs/HRpGjDmdhwt3CZPcBst17erwNw4Mq1JeWjflmuBnLJwOIyPE416IrS/bdC5zDYm/jEeDmwKdE5A2q+pWlNMRYNYZXTsQUlfSCck6SQKWCVFJ0fr4pAWWwjsnYGBx5KAvj7gcm3XUA3bvP7bNE99Cu6DERS/tzda+oL0NO9MpeTFYMO0MjJ6AgKxj3YXBJc9mkVsp5bFmK40/rdaekS4KMj1I/bBvz4wmiUN0zjezZ7wbfneJBA91OpvU6gIaekj11km2rKCe6ZS8mTwaZoZEVRTkhaYqMjCAVn0g2WM0raUP5rlZcrHkawmAKj2HdrdEscfHoAGSQkSeNE9c4SCMvwODm7g5uPmfa/e96WVx7UNZ7dX/vVVFfJVmxlwHs/70q6G9Q1fcXV4rIr3s8z2b//5Pg3J9FZAq4d4/naYmPgz4LYGt6SPcjYJ+VndQNvpmcWuy2KoKMjTJ/xFY0EUb2Z+jUFNnM+os9DywjDmQ3UBGRDwB7cBk3n6SqN5bs+0JV/U6rE4nIJ4BPA/YjOdgMp5xIdqpvZ7k1yZMr574EI2kKc3M+/qs5kZOMjjBzxGYnJw5k6NQ0WpAT60lRbyMn+p0kzmTF8DM0csKfN5cVW2SHSlxesZVy7i1iTW6g8TovLyRN0JEa04ePoYlQPajI1IwzDlAyqG1lveohFr3JAt/JJRVaexW1iR+VRErl2irKiW4xeTLYDI2sWCQn0sh1fVH8uZMVQTnPrdJ5HLn7J2QoCVJxlm8VQeritORgGIjHHqEtsXNNHJMOUe6LDjKjyV0+Gk+EUJ1OinoL9/fScMLSMmurEoM+kP2/JwW9rIOETT1e92r/P9Z853AJGDaJyKiqzohIDZfE4XLcTFmrbf1DEmc9r1Rcx5mbay6ZJoJUqsimCSaPHmF09wK1G6ddltV1697uvuCFJcSMqep+4PFd7vutDtv3eJd5Y4AZWjnRxeC2yT01TZzLmreELfqxqVbRTeNMHlVldHedsZtmYXqmZQnGnsoY9coqKept5ERfk8SZrBh+hlZOgBsBp2k+wHbr/P/Yci7FbUlz9vYQSypCNjHK5OEpo/syRnctuMRwWXMsablLeqG/dRuTXmblio7vydLVhTU9/nZWS050i8mTwWZYZYWIQLXamMj37uxxQjhNEmfNFnGKeVM1CFz/VIEUNK04a3q97pT6TJw7fOh2oQRb3IdDNvhidysq7C2Jw/ZojmkvKem2SFEvjhdKqlG0y/uzVN2jFwa1//ekoPsH849xJv9atOl04GPdnkdVrxGR7wKnAV8SV0D+COB/ga/i4j0+hyur8N0Q5yEiLbf1C6lWkPEx92ZufnFyOElID9lB/ZAtzGwTNl21QPLb31OfK+auWGfoys9iicg2Vd3bZnsCHLaijTCWzVDLiWDRKpndlWiQLWkKIyPufah7nkUz2SIkO7czf8hmZrckbL5qlsrvrnUWsTYWp/xavdY1pkulvp/l3EQWD4/6ICdE5EXAm1Vb+7WZrBh+hllOCN7TLst8LGnDWt7k1h4p7WQ0u7urumMzJdu+ifkdo8xvEjZfXWfsd7vQuflGTCl0VTZpkSt8J1aqdFIn2bIK44leMHky2AytrEgSZ+wLfUQErXq1K5FcOY+VdE29RT3M7S1kUEmcYq7qYsJDNvdczvh49EybJwZzV/fm0mzBFb6L+0VzvHohpj3Ipk5x6kVFvY2MWdyIjat79Ori/hngWOBCXFxGYHQJ134q8CYReQBwHPBkVb1BRJ4LvF1EHgYcjY/l8LTbtny8e7uMjrqY0tm55kGv314/5lDmto8wsk9J982QHTiwrq3n0HYWq58uaZ8RkfuzOA6khhPMLwIuXeY1jJVnXciJ0h+NMOhOU6RWcwkkCx42AJKmzB+9g7ktVUb2ZaT759CDk40B7grUPe/ZVb6fVnXPcme7ReS2wP272NVkxfAz/HIiSVw/Cv0+ztAcZWwHGrGn3oIuYVKvkjB7xCbmJ1JG9yjVA/Mw7W9HsKpBV2WT2g50C3QdOxptb2lV78GiDqtjFesRkyeDzfDKikTI3dyDx40IWvFJ4lJvVRd8HXTc9sQrwpXE921FF3zG9iibu6aJkyWqDUU9lGgLFvRgWY/pwtMmt8CnUcUJd7D/bOGtNgwPBY+fthb1FmUjY1ZJVgxk/+9VQT8CuL0WTEsi8sxeL6yqlwOPa7H+0W2OKd3WDyS4oVRSmJlp1D6PBtVSrTB92Cj1kYTR3Qskk9MstHBZXU8okJUbtPrpknZfoNXNFOBHuGQexmCzPuVEHh/mf2zTBObVKelRpmVJU6hVmTmkRlYVRnfXSQ5Oky0sLKmEUa+spaLeRk50boZzIXsD8ArgjzrsbrJi+Bl6OSFR9vYmt/awPkmi8UOz27smQOLGHLNbU7KKMLqnTjo55zIyg++bHcomhX7bi9dNL6WToDROvWvX9xK5shw5sUKYPBlshltW+HAYzcuqeeW8EibtvNU88Yo5oKk4fTs6jaigdZyxMJInrkZ62KmhVBO7vxf7dJnSXrSyQ0m9ddoo6j26vrfIgxHTRlb00zg4kP2/VwX9R7gkC/sL6wdqKnRJiCCVio89T6CeORezaHtSqyITE0weViGdVzZftBfdW7wV6xOXqGHFv+afA2eUrJ8FrlLV3690A4y+MNxyouzHIvyweDkRrGTqy6s1zRTXqsjEONM7U5J52PKrvciBSX+eFgNZ6LtVfUmK+jKv20ZOHCIiP47en+WT6cS8DJdcZ18XlzJZMfwMrZzIe1QSKeOx9byYFCrL3OA8eOCEgWmtSjZaYXZrQjoHY9dOIZMzTp40DXoLcaCBshrHeSPj5HEtrO/dxI66jd1nY25Xmi2cbnXGE71g8mSwGU5ZEZdBy8uqebf21Cnj6kNkVPAKuz9UBEUQUViI+px3cVcSX47NTQKqt55LbDmHQrb2Qv9s53FTtL4HN3nV7hX1EJZTJmdaWdOLt7C1rOincXAg+/9S66CfR3NH6akW4WohIo8EHjkmm8t3aKo1mCAT4y5ze4g9X5gPJwIgOfxQ6odtA4HKjKJXX4vOrt/M7U3oqriZvFxVv91uBxG5i6r+uN0+xpoz/HKi7MfCx3vJSM39aIXY88Z53IvDdjJ36IQrbTyTwXU3khVzVHSq/9lq0N2ONpmUG7t0UNaXa01vLSduUtW7tLysyB2Ao1X1DeJKMXbCZMXwM1RyAmJZsckr34kLdwkT+0mklEvDGiYkDe88bcSLzh06weyOKqgbU6S7D8L8QsNClg+GozhQodE/S2scB1rFbUbn6lQ2CbqOH10Un95O1qzOeKIXTJ4MNkMlK3I5kWz2XjKu/2u1go6kuWzIlfOKe59FirsooEqyAOBi0DMFqbuwGJfZPUUSL0/qWUNeBBmDD6WBaLKgywn7+JiC0i9Z1uz6nsuU7hT1jonkmtqwcXWPpdRB/7eS9QOppXq3hy9sTQ9p7wYjgiSu9jlJgs7MwHxhQC0J9UO3cvDYcUb2ZYzumkdnZ5sTyK1jFFZ8xls71Bj08akfxJVqMwaX9ScngnIu4ibxRFyW5RL30vlDJzhwzAgj+102Zp2bb7ayx7SrM9wrXSjXXVvVl6ioL0NOPBLYLCLvxZfC8a+/rKqfXXQdkxXrgaGSE9CQFVuSnbmsaCSPjBTzYEEPGZQrbpCufrv4eNHpQ6tMHpEydlNGbX+94bkTW63CtZss501vev0Q3ZdNgmaPoqJbKrQum9SqLBurM57oBZMnA89QyYp8TFE55JlNY4Q43rzis7mnQpYmaBLWAeK9dFTIRBDJXPdUH06jTh4ImeuOmTTqoIPrd15J13wSTxrW9ebGllvSNVLKE8it7wXlukk+tbOotyvNVsyBETeDjat7rFUd9MEgPHx+FpxaFRbq6Owc6mejwix5Uqsyu22EmR0J2y6dpXbjJPUNEHseUIT6GvygisitcGXangCcTHN5DGMwGX45UfJDkSeA8lYwDbPI+Q7OvX12W5WZHQk7Lpmjtnt6UewmsFhRh+4sT121vTtFveus7z0o6UuVE6r6+vySzoL+ZFV9di/nMFkxdAy3nAiKbpyxPVbO8/GFNJdTUkXFvZ/dkjC7HbZcmbnkcNDI+A7NJYnyy7aJR4fO/TWWba1iR2lhUe+1bFILmdZGTqxVHfRFmDwZKIZTVoTH3ssI9Unh1MeaByU9WNA1wW/3h2VO8U1IyBIlcdqq09NT7+aeZZBow+W9TKEO3jhpoe/i9yslUuizSOGOxUtBPmlRIc8VfGkZn75ISV90Czeu7tGXOuiq+tH+NGdtkKqPPQ8/LjPNlvGkViU5ZCez2yvMbRZq1x2AG3atVXPXBF1FlzQRuTmuUzweuAPOpekfcSUu/n5VGmEsmaGWE60yt4NXzkOOirpbogGyjNTQ7VuY3ZIyvwlGbpgiuXFv4/es2/qfrZI9xYPcbizvHRT1lbCmL1dOiMi9gWf61+8E3qOqF7XZ32TFkDLUcgIassInjdRKlL09zuCeJmjVJ4kK/b6asLCpxvwmoT6u1PYvkB6YaciIeCAcJ3OK4kDdthKvnCYX9hJZ0tTfl5DkqVXG926SyNE4ZJDqoAdMngwmQysrBEKVB60kaDUhq/gY9NilveKSxGnqFXTfXURB6uqM4SJIKkDifrNDZvcMyEDEW9MRpB65s8dW9UDLsJhm8rj2ICDiTPFxSbdSb582bu+tlPSyNmxg3aNXC/r6Q4RkZMTVNF6oO7f1Yuz59m0cPOVosqowdpPCTXvJ9hVzVax/2pQl7gsi8hJcx7gTLmnDR3GZMz+oqm/0uz1+RRthGLG1yL8WEZf8rVp164OHTRzfvWUT+0/agaYwdqOS7D2ITvrkcPlMcnn8JrRQ1pva1aL/lZRbaqKfinpXSnppO7uyjKnqd4HvAk9v2xSTFcYaIviJ/dHRpgSSTQniACqps5pV06bB7MKmGvuPqyEZjN4gpNMLyHzdxZ76pE+LBsJlseHQrLAH2tU4jpX6pSR5apXxvZPLe4GVHk/0gskTY2UQpFYl2zLuEsDRcG2PXdqzalDYGwq6ZE4EhLk6qUNWTRDJkHoC4hLDST36ac5AQsI4AK+oS7Cqx/2xrG8WE0P6MYE23GkWl3TLaK+ol8mYgnxZFFZTYKPqHqagA1Qrzvo1Pw8Ft3WpVNHNExw4JmVstzJ+/Rw6M7NhYs8brIpL2rOAHcATVfW/8ytLL1ktDGN5FGd0QyklqVSce3s9c9bzxgGQpmSbR5k8ImVkb8bYTRnMzi3OmNqmrEhPyno72pU8graK+vKV9JZyot+WMZMVxtoREsQFhTyJXofBKuQ1jkPcqSujlFAfS5jdLlQnlZG9IAtZww1W1CWCCsTj27IY8EAXdY3z5vv/pdmYc5fUyH2+myRPLVzey2XZ2rittsHkidF/RBqTdGmyWDlPIat4S3riXucx6IlXXBUS50Dufnq9xZ0M73SdNKzcoo2YdNU8T2TeBbPGGENaKcN5jgyJLPBJfpJFJd2C4t0iLKfU7T2hIV9KvHUKN3E1ZMVA9v8Nr6BLcFutpDA55RI6RUkTkrFRsi1jzG4XNl1bZ+Sa/WQzs127iKwXXJLI0lmsvg28VfVWInJH4PEi8mTgPNxMlmGsDoVBb1zn2NUtTZH5hSYZgSTI2Cj1TTXmtsL4DcrYtZNuwi+cs4skS4uu2yOlCehalXNbISW9jZzoKyYrjDVFcMo4OPfVpKGcayRDNE1dEqhQPkmE+kjK/ETKwjiM7IGxXQvO0tWk2CdOSQ/yIo8rpXVOuBYuoqUU49rjAfMia3r5QHqRvGmjpBdZLTnRLSZPjBVBcCEquD6t1aSRsb0iaAWfzd1Zz2MFXTK8wu3ytSf4GugKWeqczgX3PneBr2eISpOiDpEyHvRNVbRl7DmNbVkjoWVuUddCSbckacinMIkY8Nb0XFbEY4d4ErDNpH8bWdE34+Cg9v++KOgi8jbg26r6mX6cr190KrMmaYrUaoif/dbpaXRhIX/AJE3hZkcye8gYojCyex698pqGC/wGQoH6KsSBqOpPgZ8CiMidgecAO7wLyueB16nqE1a8IUbfGRY5oRrN5AblvFZtWMfqdZdEMsSeV1Lmj97BzM4aKNT210mv2+P2CXRKshTowQpW8jny9jeu27s1vWslvYTVkhNgsmK9MqhyAiJZkfgxRdyHQ4x5paGcatVbzlKnfGtFmDqiytxm1y+r00pt75zbNxVEk3wgrP78ElvOfWmjkJUZaPTtdqWKitujLPGEMwXX91KX1NbWLu3Ckl5kNeVEt5g8GT4GVVYEOTFe2ere1+sglaa486wqZBVy5VxToV7FGasFkgWQzLm7J4mfRPPOLaouaZwsKAmZU8R9wmunTzsZIt6tXYlkRg9DDEnUyYTgKi/ZIkW9aSKxaHH3MkBE0NzSXpgEDLIl6VlW9NUrbxD7f78k5CTwVyLyaVmK6WeFUNUvqOqzqlIr3yFNkYkJ93pmFq1nTa7rUqux76RtTO9M2X5Jnep1+8impjac9dwh1LPFy0qiqj9R1Zer6inAOcAzgAes6EWNlWTg5YSINCvnAJWKK8HoZ6jjDMWSOuV9763GmN6RsPWyjJGbptHZ2cY+TeeMRG5kMcvxA/3SpUiLbU3Xy/eV8hj2Foq2JNJUP717Vl9OgMmKdcZAygmIZcVIw6smTVwiuFSckiuCpila9UvFubZm1YR6LeHAsQkzO4SxG5XqZOZGoKk/ppLkSedypT9NoprJhSW41ft6yiTR++ISbw+Z59O0cZ4gN8J+kjTc+IvrInmySLY1ZYlvNcRcGznRLSZPhoaBlBVBTlSSET9Bl6KpkwFaEbKaV9CrQr0q1EeE+ghkNajX3PZ6Deo1yKpQrwpZ1cWq18OxuZIfzust9Knk7vSZlz3Ond7Lqkq0eJlFKs3rQyI7f2z+PsidXKY0zquxXAlyJpJVEsrUlskWaDkW2ci6R18s6Kr6SgAReQgwCkz347wriiRIxcWes7CALiw0Z24fGUE2b2JmR0IyD9suPgD7D25Q5dyxlkldVPVHwI9E5Ko1a4SxLAZeTsSPd56BOXVKeLXifa3q+XYRgZEaOuFCYJI5GL90luTATHROPzPcKnYTmge07eRLOxfWVsmjKLGo99uaXmA5SeL6gcmK4Wbg5URM2lBy1buykuDfS+6+qqlQr7nY87mtSjor1PYrybzmru+kQOYyOUsdL4OkUSpJtan80iLKksW1bLfft4VLKrRxe2/n8h6s5l1Y0gcpSVw7TJ4MLgMvK4JHedUp0VklKNXOeu7iz50SnieL891eRHI3d/EyQurO1T2r4EquSUgg598o3svPvZcssp6Xeth4+VJa7cHvod76nUlz3fVQbSKOT0+T5lrrCRD3c5FGXHrs+dMka0pu4wbVPfoag96p2PsgIYk4F/ZqxdU9n51r3r55M+zYyvyEMLJXSa68AT1wYI1au/a4OJC1d0lT1XesdRuM5THwciLM8AIhAZxWK8jsHNSzhsVIBJ0YY2H7OPPjUFuA2rX7kakZ97scK8NlsZtlMehFI8BSJgS7LXlUpqj3UPO8jDZyYtXLJ5msGG6GQ06IL7GWNGVOzypJo3ySjzddmEiYm0iojyqyALUDGcl8livxZDhLU5Y5JT13E6U5QZz6esbaGITnlA3C28mUJHpRKJeWD6Sh6wRPbZX0QhMGvQ56EZMng8tAywoR70HTsJjnyeEquNdVnySu6g7RYGT2/V7ETeRJXZzC7j3NqUdKeeaSyLljcOuD7IhC0Bvu7p6icp5XZfDnjhPQhVrr8WuyJrd5TZxS33Q+aBrvNJT0aMzRImfOcnQPERkDzgSqwHbgGFV90FLOtRb9f0MmiZNEkJERF1cqAvNz6PR00+C0fssjOXjsOCN7lfEb6tRvumnjWM9F8g4dkw2QC5phrDiJuLJqlTQEfjkLevSDM3XcVg4eVaG2H8ZuypD9B9EsxKeHesaLB7LAYkUdFluaevXaa6H892RNLyjprcqwSSI+i2wzJieMdY+3cOX9LSSKA2e1SoWslpJVnRKvKUwenjKzEyqTUNsnJAve6lRNvK6tbgCdOYtYnoip7mM7oXG9YFWHRkmlmC4UdIks805R9/IgLpfkXzcNpoOSDqWyraWSXqCFnFjTOuiG0VcSgUqaV2nQNLKc13AKeuLc253SDoTuHsK9K5DOic+erk7OKHlsuiTO40YyXMy6qlOQM0Uy55kjqu4Y/Os8f0Xc1rjhfsLQZZ9zsebq6677mHSXuk6gLkji81mE2HRoTBymSX4ed51ksZIeV48oYRljijcAH1LV8wFE5J5LPdFasCQFXUTGgT8Abo8r5n57Vb1PPxu2okiCjI8jlRRm59D5hnt7SBx34Jgx9h+fcOj5s4xee5D6RlLOS1CEbI1dV43hYijlRJ6xXSBJYXTE9YmFemQN97FXI1Umj6gweYyw88I6Yzc4LxwRaf7hyV9DWV1haKGsx5QlWypT7FsloGtV9qhLJd2tbri7t4pPbyMnDKOUoZQTCFQqaK2ax5mT+PjzCo1szT5OtF4TZnbC7GF1Nv0uZWSvugG5ihtcV9xkl6qrg567lKrmryEMtCOFGpr7bzRhsLjJkatrZIVfpKjH5ZKgZDANTQPqJSjpJieMpTB8skLQWoX6RJX6qLOeN9zbyRPF1Wv40mvRkT5jewhnScRVeA3J4/zpXfqIxK131ms/j5YEZd2/z+f4on6Xtml54pVqVTcRr0KwlotIo+66d3sPVvZ44rCpXGSaNMuq2FIfK+kFliorvPX8EcBFIvI4YDPwtp5PtIZ0paCLyInAY2l0ilsA+3EF3X8G/PsKta//+MG3jLjEcToz01TTWEZGSA4/lLlNCfUajNw4BTftWavWrg1lcSAKajPeRhuGX05EyrlPXqIV9wvW9EMjgo7WWDh0M/ObhfqIMrJngcq+6ebZYUJMVVDSC26hkP9glVq4YzqVUCqLa29xruUq6U37FGktJwwDWA9ywiPSqHGcNAbMebypjz1fGHVJ4RYmFK1mVKYSKjPeEuYHyFmWkJDlfUe8pqyZ+Coz3jKVOdmUK+oQZXX3DWjf6GYrOTTXNYZmJR1KLF6RXCsrn9TqXsWYnDC6YOhlhZDnn4gVcw1W9GrjvaaQpZp3YUkBP4EXSOrutzurOJGQgauRLkqGn9ALx6i6iT3FjWWC50z8U1/83Y9+34NSrypeNgFBCa9nTi6R5ZbxPHcG5P1dE2nIlqYxR5J76LQc8+QNaSkrDhGRH0fvz1LVs6L3xwMnAJmq/q3PzP4tEbmtqk62v+hg0K0F/SvAr4FzcZ3k28CfqureFWpXXygtsxZiz2tVmF9Ap2eayiElmzcxfYudLIxCMg/JTfuo79q9+o1fC8JUXAsGwXVVRM4AvhNcVoyBYrjlRCid5OPOxdc9J1OYmyeP0RQh2zTG/puPsTAGybxQ3TdDcmCaPItpli1WfMvqfrZQ1GPa/YCVusuXWdP7aEnPt7WghZxYdU8bkxUDy1DKCYhkRbrFDXqTBHyGZPDuqkE5rzhr2dwm4eBxUN/kBrPprLN2ZRXJvUq1rmQk3sEmxID7uE+FYj1iRZqt6p0STcbbcyuXN8n5EkilSnp87m4SPJUlxGxRam0QxhO9YPJkTRhKWZHLiep2523nZUHms7GrV87rNafY1mvOe0UT8iRx4Pq2zIOokAHZAoBLFpep+K7p+luCV86dH7t7ndHoqyq5m7s7N4tcyptCx4MF3ssmSRQWXNNUnDW8ydsny1zsPP68PqdGLltyWeEvUDRmQEsP3hay4iZVvUubryEofp8EUNWfiMgUcG/cc9UTa9H/u428Pwg8SFVfi5vJ+jnwcxF56Iq1rA+UlVmTWg0ZG81jrHR2tsm9PTtiJ9fec4RkHg65cJ5s/wFXG32900E5V9xMWnFZuebIU1psuivwYV//0hgshlxOjIQVSKUCI7XGD0aYxEsSqKTMHDnODfd07mNbL1WSqbmGO6dX0ptLijSs8s1lRoLruzQvEaFsWtlSts+i0mstyh4tKsfWTRm2uM1l95KWcmKfqj5rJZRzkxVDx1DKCYhkRTLaSOjmrWRaSVzceS3JyyjVa8LUEcJd/vBidKzO6HUVZ/ny8aZh0O7KGfmkcr5kUSiR5Moa+WzwIVu8X5evj5dK4q36cYmlaHvTOZJcXuWlkvLSSNLYHpVja1sqCfLX7apeLWc8ISIVEXmxiEyKyG3b7HesiHxWRN4rIp8XkVt0eX6TJ4PDUMqKXE5URtG0YQVXIS+plpdVG1Xqo+G/kvn/9bGM+oh6Rd79z0LZtVrD+h4s8Q33+Wipeut9NciZxrJo38ri7S5Ex08whEnHaqP0YxbLp0hONcmWkJ8jlithPBSIE/MW7yVLlhVX+/9xppw5XLb/lgxS/+9KQVfVk9SbW1R1RlVfCDwReKuI/JtIbKIebGSkhoyNOev57KyLqdQMSVPSI49g+sgJZg+rUzuojP9mNzozu9ZNXnli5VyzcquZdzMpLivI20TktSJyy6ZmqD5FVU8Cfikim1ayAUZvrAs5EX48qi6+NEzk5T8olZSFQ7cweXiFiaMOkMzC5qtmc0tU049PcTALjR+loqt4UfEtKuzdLOF0cdbUnmoTF9pVpPgDOhhyAkxWDBXrQk4IbuAZrOdpNLD1A+V6VZjdKswcXudph38PqWTU9rpBemNQ7JX71Fnf87Jsvk83vy8o5V4JX1QbPdqPeMIu3pZQOpDOB9PhuKJMKyrpMW0G2YtYnpz4C+B7wHiH/d4DfEBVnw28Dzirw/4BkycDwrDLCtfXkzxLO946rqlXzkfUKd01JRtRsrGMbDRDR+toTclGMre+6vep4C3wsas8PpwmvCYPr8nS4DrfyIeRNVnzXc6M8LpZWXfr3Xn8BGRT6UinbOfyKaqTrk0GiaTgwVMYi8SGgjZhc73KClW9BvgucJq7rBwOHAF8v8OhA9P/u7WgL0JVvw+cAuzGxYIMPCI+K3O1gs7Pw8JCY5CZpswdfyjTh1aQBaF2oA433IQuzK9to1eDrn5UF3eQFR54fwX4AvB8Pwv+HBHZETaq6lmqenAlG2Asn2GUE4h3ba9WXKxVbj13MelTx4wzs9PN4lamleqe6YL1vDDA9ceWKumLSpy0t1C3JTpfqfWqjSV90Xk6tallvOmqywkwWTH0DKOcyK3NAiqS1znWfDAM04cKbJtnVObRhYR01mVE1zQsbuDuBr3kg9180CvhfdK0rqhoa+oT1IUliazoYV3a2BZkUz6QTkssXpHSDpS7nyYl20Iej3yfMnm2dDnh+/P32u0jIjuBh9BwZf0acB8ROaqLS5g8GWCGTlakXulNo7JqKWTVhuKt1QytKFQzGKkjIxnUMqgqGpZKQwEPsqLxuqGEN97TUK79vvH+blLQH5cU1ofzJeLj48M+DXlFkFtBPoV1Ev2PZEcuU6AxRoppaRxY1pjiqcDpIvIW4N3Ak1X1hg7HDEz/X1aZNVWdBV4qIv/dp/asHMFNq1ZFqxWYnW1YxyUhGRnh+tuPMb8Jxq8RRm+cpL5vf3k813qi7Ee37DOvclIXVf0z//J8EUmBRwM/EZGfAR/GxbLOtTreGByGRk54q5ikzgVUKwkyG2UrThKoVdl925S5rUr9mk1s3avIVJAj8aAUQh0Ul7ilkPG4KT48Oi6P7VyCkl6oJ1oaBxonj4trHneTrKUQL1/ehtWVE2CyYr0wNHICwKdP1kihrdcSN4j2lqyFEWH6uHm2b5vk6wduh0ymrn+kPnw8ZEhWQSrkWZhJfHw4ODlSJwobj/pvRqHecBdjFZ+ULo9rDxmYgxNomuThPE3J4/L8GdIcO6qFnBrdsvTET91yHHBQVWdw7ZwTkT24xFHXtG2ayZOBZ2hkRZhgS1y8eX1EqNcgG6GhnNcyqCikilQykkpGkmRk9ZSsLs6JT914QKquz2dVQCEJxc6CfcBnb5fMbRdt1EwPsqKjSiPhWAix7AnaqLnuzuLczL0ck8yPY9QHmfv/ea30LNwL345e9KpljClU9XLgcT0eMzD9f8kW9BhV/VE/zrOSSJoioyPux0UVnZnNY8vTLZvgiEPZd9dZZg7LOPK7k6RX3bAxlHNJGpmZtbzMQY7K4sUnf/JJMfrYNHmu/3834O0497RZ4MfAocBnReSZ/bymsbIMvpyQRuy5r3su9aCgJ2QTY8wdOsH87Q+ysH2Bw88Vxq+ZyQetWnAVXeTqDs2xm7DYSrUU1/bcilWIaWcZ7u7FmNL4vR+MF+uiN7avnpwAkxXrjcGXExDCYKgkLjGSOgtX3cedz08Ic1uFmx13E7VKnY98/x6M3pBGbqTk7u1xySVNacSjJ7HraLNrabBaZXF8eYg3T6R5qSTNS+Qun7ukhtfBmh4s7E3u7fFrrzDErqklbu/t4tBbyImbVPUu0bIU5XxZmDwZHgZeViTCwqjr9/URcbHmY8rCqFIfz1BvKU/HF6iOzTMyNs/Y2Bxjo/PURuap1BaQWoZW1bm4h3j0SiMePXdPrxLFpYfXvrRb1f2vl+0X71+Nj43i2tNiDHvD3Z0mmSQNF/ckcRpmSejfIk/DTpTLihVhkPr/sizoQ0W14mLPF+rI/AKZqhtgSkJ2ws04cPMJpDJHOiNUr7iRbP+BtW7xyhIp5yEOv+OERPnmlSqz9ioR+Wtch/g48HBVPS/a/l4/0/7+Fbi2sVFJU+dhA8hCZHUWYfq4zRw4pkKSzCMzCZuunqVycK5J4W0qKxJlMm2yOOXWqCjvQ7hOfqIeJwdj63Zcyi22pMfElrh8VWG/gpKvbiq/c1tWV06AyQpjDdFKQn0kdcmYfCz59CHC7M6MHaIcmB5h9NoK6ayzniNA3f3uZpmzgmmCL5/krVWIs6SHgah4i1aoahQsXBS6seJc32OKY1kJk49AGlnXEnUWryxreABBw+qVX6D5PKUVILq6cb0f0gNXAJtEZFRVZ0SkBmwHLu/iWJMnRv8QGq7tFVgYw7usO5d2qWZUqgtUKhm1ygJpoqRJRppkzCUVsiyhnglK4o5DyOZx/Ue9lbXuLySae76IFx/B+6ZYBz12uCnTd8VPPIKbSCRTJ7/w/T51gkhVkGBR91Z3NwTxhol2k3TxxYrehDHlsmKlKsMMTP/vi4IuIk9U1Y/141z9ROLySYkvrTY7h87N57XPJREO3HyC3SemZAer1PYI9Zt2ofPrOHN70XLeDd4lbhVZAF4BfFFVFyUCEJGn4ma1jCFh4OVEuqVhGYNG4jdA04QDR1fYf0uoT1ep7U2o7JtG6tGPSuzGVS8vddSkpEO5ou737YncbV3aK+ltyh71hWXICRF5OzABHMCV1PkHVf1GF4earFhHDKqcgEhWVLcBNCd8S8mt47M7FI6c5cBsjenJESam/EA5KOiQ52NVxSvo0iizlPgBcBAjfjBOGDRn4hV1zWWFRJ7x7fFl2krqFjdPCoSGauN9mHTshnaK+wqMJ0TkMcC3VHWfqu4Ska/i4tA/BzwI+K5PHNUJkydDwqDKilxOjO1wCnoaYrnx1vAMqhlJrU5ayajVFqimdUarC6SiJKKI16AXKt5Tpu4TwWWQVNTFYmsUeeIunCvJuWjwsiPvxmUTe1AykUeIxfH7+kR3eBkRzpO5fUX8yRNxxyXqJxRDicjFRoGuaC0rVmrSf2D6f08Kup+F/GPg5kAt2nQ6MHCdxM+qfGFr5ZBnkoizjE1OoTMzgFPOpVJh18kpW+5yI9VvHsr2X7vs7uudJuW8G+s59Bxmtkzeq6qfiVeIyBuBL6nqt1X1Q8CHVrVFRlcMrZyoHvZMRNA0ReYXckVW0wSqFfbdCo66/XXc8IMj2XyFNpRwHzYTW50ablx+XSHe21+3XFHPG9ZDhyvGtJcMjBdZyPNZ6/JY9EXuqcHThjbu7T02u8CMqr7AX/vxwDuA23VxnMmKIWTY5AREsmL0iGcCvrRaQn0kJE9yrqccNcPtb3Y1P/3tsSR7qpA0xpiNeFFvRVdnP8gV9QqwIA2lHHzfi9aFc8VWsG77nTasaq6WsSwqBSXg5EhdG7KsOEYIciPInDo9sVQ5ISL3AEIppFeJyCdV9bPA64Fn4zI3AzwXeLuIPAw4Guh2MG/yZMAYNlkR5MSWzUc/U8WXVfPZ2jVRqCiV8QWqtQUqlTrjtXlqaZ1NtVkS36mr9QqpKAtZQlZPWMgErSagbiJQMicWQsqKDC9bQs1xDd4v6vq8729ef1/c5ujnXsKxGUjde9x4ZT9BXLy8giLu8yCNicMkGjtI0RPIucW3jENvMa7YqLpHrxb0zwDHAhcCM9H6tnXl1hwfA6r1OiwsoHMuvj89ZCdzJxzJ3M1nuOOhV3PpT7cw+pvrWce289x6jiR5/fduZ7VkCTPePmvqPwM34Z6TncDzVPXGDoc+EHhDYd1ZuCQNp/bcEGM1GVI5AaQhqYnL3q6JkG2b4MDx46THTnLyjms5/9eHs+n3cy7OKjrUvQhuodJwC43jwIP1WrVcUYelJ4oLyeeKCemKCnuZFb1kAiFe3zGBXMRS5ASAqr4sentr4IIuDzVZMZwMp5zwNMWD+wzH85uFqSOVI3bu49iJPfziphOoHvTZmyMFPRHf3VRIVMnShtu5qhsAu1G3OgtUMIzVnfVbglUsDIyhkVGonWUsKOc+iRSpm1wUddY5qeNc3QvuqXnoTph0zMjHDV0lmCxhGXLi+7hSSc8vrD+58P5yXIKnXjF5MngMp6wQb/UOtcproDVFahmVap2R6gIj1QU2j8wyki6wpTpDIkoiGVMLNVLJWMgS6vWETIX6rJsF1DkhqyiJSj6xl4gfAqjvx/lEnDQm5CCXDxL1WS1OxgOSKUk9yC0hqTs3dp/6zV0Lde7vwcXdK/W5a33wGhRxRsG6uoRyvd7G1fXeHZj+36uCfgRwey1I46UEzIvIN2i2jrxZVd8sIsfiLCfXAUcBZ6jq7/wxLbd1uJr7OzvvXNf9A1I/+hB+f79xJJnm3KtvwbHX7ifbvafXjzI8iCBpSOOaNf/vhMpSXdJuDVyuqq92TZA3Af8IPKO8ifI0//KI6HVgHNi2lEYYq8pQy4km5VWE6cPHuP5UoZZm/Oj6Y5nYXXex55H+rJm0tjrFbqFBEY4sUk2KejhHr8Ru7bG1q1OG5VZuZ1Hiljz2vBtZ0VpOdJWdWUTuDLwaFy/6p+0uZbJi6BlSOQHgvGLiuudZBWa3Qe2kfWyqzXLl5HbSOTdY1rTZQpUBkoKGbXnJIt/ffGZkpxj7/95F3inYCtEgGGgo5u3ER3B5laCM+27tFXAVL4+8e2ouz5ZCpq0V96WPJ1YMkycDzdDKilB+LNQ6Z6ROUqtTqdSpVurU0jpjlXlG03kmKnNUk2ZXlKn5GpU0YyHNqFdc7iyteGU5yIp6HmHXkAPaWOIY9Nw1PUz0waIY9GAdd8q49wzCZ2tX5/mj3jtQhFyOSOJd65PgAq+FRvnJvqJM6ZScehVkxSD2/14V9B8Bm4H9hfVLyQZ/lao+oGT9e3CDt8+JyMNxMxcP7GJbW1QV5uZyq7HUakwdOcGmU29k+vqtzF21BXb/lmxqagkfZQgoLafWnWt7Y/8lXfnbfglcBpzcYl+AP/f/j4xeBw4AL19SK4zVZDjlROgiC3VQNyimVmXq0JQT7ngll924k12Xb2fbwTlkzvvZRLGbpUlR2rmGFmI8FynqvVCMPY/XRa+7ikWPs6ouJV69vPk3qepdOh6q+hPgMSLyCOA7InJHX1KnDJMVw81wygkAIapZ7rMl12Bue8bjj7+QX+w7msv27Gy4jSfk8iW4mAaXeKeYa+O9d//U1O/sreSqkLu5B+U8tMcr7F2RuaRO+MgcN8D25w3uqHHMqJdpSyqRBK1lyBL1/hXE5MngMpSywndfn6sCspGMtJY55TxtKOfjlTnG0nkmKrOkZLmbe6YJI5UFapU6C/WE+VTR1MkG9UkeqRe6UqyIZ4X32rxf82xHtCnIBfFKetaQWWhDbkmmTrmXchUj97bphg7lW1eBgev/vSroW4GLROQ8mjvKQ4H39XiuTSLyZtxjcRDnBj2GS+oRLCdfAz7j3aRnW23rmPhDcF/+/JxLDpcIyc4d7LtFhQ/e7kP8yS//hmO+MYceONj7j8+wEJLC+QG81utL+KEtXdvWMlac8QT+CHhvq0uo6v0AROQNqvqK3hpoDAjDKSeCp81C3cWdpynz28c4eKzwkVt+godcegaH/TAhnVlo/Bo1uYP7wa23OpW6heb7+nFFG0W9F5qyw4d2Fa3o3WRbDqWWfHu6ztweswSdXly90TFVPegurV8UkY/iJvN+UnaMyYqhZ0jlBN51NcmV9KwCc1sFjpzmJYf8gD+56Unsu2IrNRVfGz30RUgWfDm1jPw/ubLuu60GRR33JnOvY0U9KPoAoSxkd2huMpNQstifTERyK3puTS+OjosWsaXICFiSnFhJTJ4MNEMrK1Ro5JaoOFN2mmaM1ebZVJtlU3WWHbUpxpI5NlVmSVBSyZxLe0UYq4wyXamyUE+YqWQuOVxFnYKeOVd3F18uDUt2GJ54xbpJGY+t6SVtzbfVGys1VR/jLg3jhbiJAvGhOipROI5LAd96zjCWVXEIXSsvvVWQFYPY/3tV0E8F/q1k/VKyqn0e+LSqHhSRVwAfxPn9H1TVGQBVnRORPcDxuLiTVtsWdRIReRY+Kchosgmyep6ZPdm8iSufcCwHT5zjm5O3ZfNlwujPLqc+s06Tw4X4j6CcZ9q7cq4t40C6soy5ZsgzgAtV9XMdL9eig4jI20MiKWNgGU45kW52/cLHh2ebalz50DHk1gf43vTNGb26ytbfTiHzdTdAL4lBzwe1uSU96mfB1T22TpUp6kW66KsNy7g0Ys/za3bZ1wvKeZPlK/rhbJcgro2c6MTNcN/rkwFE5HigClzZ6UCTFUPL0MgJKMiK6pbGBlW0Iszf6SB3Ovr3XDA/znV7t1Ddl4Co647RSCvDyZfc9T2DLPXze4nkLu6qYVQdmcsjRd1fOmpH536XZ5IP1SdC3HnIvlx0S+01c3v+ITu4sLaWEytVOqlrTJ4MJEMjK2I5MTK6zU2AhQl6HwqXJEotrTNemWNzdZaJdJbxdI7tlUlSP2ZIUCpJxoH5UaarVebqKWml7hT0NHElGdXlpNDM7e+yp9OwnMfz9FEXbOtRHu8bhgORBV181vbg4u4s6O2VccnD5Aox6HFDWinnqywrBqn/96qgv0FVF9V+E5Ff93phVf1g9PZs4O+Bt/R6njbnPwvnhsLW6qEaHg6SBNk0QXLvPRw9Ost7LrwPR1y1QLbvAGQ9piEdBqKkcECj5vlSWIZzgYg8Hbi5qrZ0ExGRVwJv8gLwm2W74Mov2Y/kYDOccqJ2uJMTaYKmCfXxKkfe7Vq2jUzzrktPY/x6JZkpVN3IK6RJU9KVMKhtShYXlysqlh2JFfUi3VjUtVDvXPyvdMkvcWlSp0UZ27OlW8aWJid2AxUR+QCwBzgJeFKrZJImK9YFQyMn/DUasmL8KAVXPimrCAujwsNO+CWHVQ/wsV2nMrN/hNG6OMt5KJ0G5DHguRWKpkXzmHA/KPbH+FzrvswRuaKel10L584b2+IziBvsBiU9xI+Gsm3B9b3XjOw5kbzQ4iTfosaUrl2p0kltMXky8AyNrIjlxOatx6gmLkFciD+vjcwzWl1gJF1gvDLPWDrPeDrHeOKW1M+GzWvKrFYYSReoJs4lPknUxXknCqkvtVb3trcUVNQps0HO5PKGRn8L69t+iOh1CMNR9d4AwVpeGDYkzQYJUVpP7MVji+LrTu1p0DdZMaj9vycFXVXfLyI3x5W4OAa4Gviwqn60l/OIyAhwuKoG68gc7mfhEpz7yaiqzogrrbAduBw3U9ZqWxeN9xmKx8eo79zMS0/8MufsvS2TXzyC8St2k83P9fIRhgdJGonhgJ7jzuNTLb2+8bOAI1T1lf59q5kon3sScHEg/1Q8FfAyjIFmuOWEt0yNjzC3vcYLb/5VfnDwBC751i059PoFZCFrWM+L0W9xSZFu634Waw0nxZPSXRx4p2u1SxYXZ5kvu16PE3pLme1W1f3A43u4jMmKIWfo5UTiypMtjArzm+D0Hefy6/nD+ODFdyM54IdWfuAcK+n5wDUo5FEcerOyHlm0FUL8uWhDUXeJ3aL+VrB8Nd2nINsExLvDUvduqcTb8FmXaSjqsXxpOYgO24vyo3z/Vc7M3AmTJwPMMMsKTaFehWw0ozJSZ7Q2z1h1ntF0wcWdp7O5cj4qc9R84ooZrTKSVaklC9SSOql3ja8n3isnCTJIoe76s+u76i3okaJeVNDj/8V7FBx3fOiL+PwZIdY8/IfWTjtS1ue9d2KTHGny0mttEFgFWTGQ/b/XOugPBT4OnAfcCNwHeLGIPF5Vv9rDqY4E3khjQHZ/4HxV3SUiX8XFe3wOeBDw3RDn0W5bWxS07h6E2dsfz+6TRrhd7Ro+NHkqR33xarJde3po+hCRpM61PRGo15fm2h5oNxvWBhG5Ny7Bxo0i8ly/ej8lM1GqGneKv1bVr5ec7+reW2GsJkMrJ/L6I8L+W29hz61Tblndxcem7s5R/zdLZXK+WTkvxJ/nSeJyF1EiV/ewn/8f+lJsVaewLj+mQx6c6EdOfDKn5rJqHdzc/fkllKJsE3ve1r0d2smJvlrGTFYMP8MrJ3BywCeImzpSmLrFHFuTea6YOwT9zSYqClnFJ34T9zrgyqh5i9cCeQK5PFY1xJMHV9UwIM4H2tIYShaDSdt1z+Aen6jTof0kQEj01NZRZ5GLujZqoJd45S3y0Fk06cdAxaCbPBlshllW5PHnClkm1CouMdym6ixbKtNs8gr65nSanZWDpCh1hDlNydKETeks+yrzjFQWSNOMJM1cGca65FZ0RGFBGuXNEj+Rl8egF3JWtFPSg5wJVR78grpJxFDtoREG0+qDB9d2muVHwWLuQnmy1pViVkFWDGr/79XF/VXAnVT1t2GFiNwCF8PRSyfZ7Y/9D1x2vOOAJ/ltzwXeLiIPA47Gx3J0sa0NjUHwlQ+ucau7X85fXPA0pn66k5tfdz7Z3Hz7w4eRuKQaLM+1PZxyCbq9qn4Xl2uyVy4QkfsA3wVquNmrFHjzEs5lrC5DKifyxnLdPYQT73QZz/v1k7jyV0dw670HolJpLFa8CzVFZakW9HhdTLvzlJRu64pIMXeX0MbAuxvlvIU8WYqcWCYmK4aT4ZYTgKbC1PHz3O6E3/NP1z+I82+4GYmvURys502WcS2xRHnFnKLraFjvyyG5aFN/nNJcYg23LgyWyyxYeVb4uiCijQG2u3nudSK+pFEHK3kZYYwR5ESuwA+MnOgWkyeDx9DKiiwVsqoiKmhdWKinZAgTlVlGkgVGk3m2ppNMJHOMynyuoI8m80xlC1SSjIpkpJKRijo39zTLyzLmZVlTL1xCvHiQB0rebxfFo5eZwCOLe1xtQuJuLIX9wVWJyccQjc6drwvx59H73BCgBdlRYJVlxcD0/14V9HrcQQBU9Xci0lPEUjt3RlW9HHh0r9s6IZUK1KrosdM86vCf87b/exQ7L8rIZmeXblUeVELcebCc1essx7U9Z3VnvN8O/B74PvB64B44N6T/AB67qi0xemU45YQCaUI2Pkp65DT3P+QS3vX1B7P10qTZtb1MgY5rBxfWN9X9jGujQ3PWddf48rYtI4Fc12RZc0ZVaD2p126yb/UtYyYrhpPhlBPuYBChXhVGt89w4pbr+PIVJ3Jw1zijwTiUxFZxf5zQUI591uOmMXKuvLvt4tcpuGO8vIgV9fjYRl1joahju0lDmgbXwRIm8c6h/4d+HK6ZK96FAXbZ2KKglC+yqMfnHzxMngweQysrGn1S/by+y9JelYyRZIGRZJ7RZJ5Rr6ADJCTUpE41LEmdSpKR+MVlmtN83KFeSEjmc1v4vpXP2RcUcw1/QuWYuPu7AJh8EjEXFwXZ0epzigarfaSMx4o5NBsCgmLezjtvg+oevSroUyLyVOAjqpqJSILLujvZ/6b1FxkfIzt0G4dsO8jNars47Cd1Nv1qF/X1ppyDs5xLwy12Wa7t4Zy6KnEgMYeq6hNFpIJ7xk5R1RtE5Lur2QhjSQytnNCRGvOHjLNj636Oqu5h+0XC5qsiD5t8oN08sG5kPS24uBOvJx/YN2LOC+7n7Vzdy4izwfdYszxYzknEhQD1QRaugZwAkxXDytDKCcBlbh8Xtk5Mc2RtH5NXb6Z6wAeChpjzYD1PGiPjUH4xr40eBsJBRMQWdNz/0KNc0klnTfebmtsUvV68LUpkWRx8F5B4IF3838oq7gfaWhiElynnayQnusXkyeAxtLJCMp+4LYEkVdIkc8q2ZFSl7mPP5/3iKk3VEarirOtVqVMRVxs9EXIlP/fASSC45ijetT3M4EWKut+rISS0MW5prgahLtt85OHTSlA4ZVwb45/gzl50bY+t55k2vGs0+k/5RN5G1j16VdD/GvgC8H5fZmA7cCnwyH43rB+IyCOBR47JZuaPP4wrHzLG/K4Z/uZHT+BWP7+O+u+vW+sm9pdgOU9TH0+a+R/N/mSnl/Lx/0qVRRnz/x8JnKeqN/j36zAeYd0xlHJiPN3K7M22cdUDamR7N/G6Cx7Okb+do7Z7GqDhTtrKgp4r3XTOglxU0gOtlPVAmRJd5tqeSHMbChZvCeWTwMmJ2Hqex4e1KK3WIVRmleUEmKwYVoZKTkA0phjZwdThI+y5nVKdHOMTV96JkV0psgBZlby0Um49j1zcc/d2oteFpcmyHd5rbDmPR9yeYCHHu6YWLOzureSJLKVoYodyK1aTwq3R6sgy5i1geeb2WDlvmfip/B4PACZPBo+hkhVBToxs2snCmCB11zGTJGO86uLPN6WzbE5nmEhmGZV5by3P8jJre6mT4lzbE8moSJ3UW9AlwfXjRH2395VZgudMVlDUm+REyf9YTmSgScMSX5oILreQN792Srh7L6rOc7DekAeEsYZqwyhQrzvZUW89aNqoukevWdwvFZGTcTUJjwauwn2AgRS1/kv7wtbKIc+c3V5DbzNJ9ZIJNl0FuvdydGGdydsoY7uqf+D79dVoy06yUmVRviwiFwGHAw8XkS3A3wE3tD/MWGuGVk7UDn/m7LYKcstJ5IoJKtcLlYMHGlbvKDGcs46VualHv3SJuHrDMbEyXebWXjxnkV4t7K3O1TQp4H8wW7i296Kcr4GcAJMVQ8mwyQloyIotm45+5tyEkN5skpm9o8xeO87ogt8nCeWIGtZzTVwMakMJ19wLJ3YnDcp6w4IeFOqGfu93d9eKGycSubAutrBr4X1LgtUtckktxo423FYLyZ2ywv+WN3JNJvK6xeTJgDFssiLIiYmdN3tmHt6ioCqM+dJqwb09WMonZI5R77E/r80u7qkoiSiSh704d/k8n0WQLxor7DRM5rES7jVuaXTv5mEFbSbPYkW+YIkPXjd5YrjcSl6UG1nDeBiU89j9veSaG1X36NWCjqrWgXPjdSLy56r6gb61qt8kCfURoVKpM3IN7LhwCp1ZZ7HnIo2M7YF+xJ3HrOLtUtXXich/AwdU9WoRGQM+C/xq9VphLJXhlBNCvSakaUbtRmHrZXVkPmso6J5WpUU6Ulb/PF5faEsTZUp22XFhXdus7d7TJh9cazSw7kMnX2WxarJieBlKOQFuUFxxrqbJwZTavsSNg31JNaKBc/4aP4jucN7Yqh6s3uJV7qJi3srF3UeR5oo6RAPqUouYlr8vKuawuDRSmWs7kYUdyif2yuXEmtRBjzF5MpgMq6zQBLKqQkVJK3VGU6egV6VOTRaoSZ0azno+Ksq8Qh0lkYb1PEG9i3tjybwF3U2oSaSkRxN03jW8OQ5do3XSUNRjZb2de7s2ZIlEciJ2YW/K3p5lSD0ryJKsICc6TOxtUN2jo4IuIvdR1e/4169psdvpwOB2kjRFE5i6cYJDr1ygcvGV1NdZ5nZJU+fanqbOcu7LJfX1Gqs8V6mqv4peTwPfFpGzcc+bMUCsBzmhqYsfnb5pnMOvzZi4agrJouRwMYk0srWXWMpdbWEI2d5dFtQ2SnmnJHGdLOvdEpTzRGC+4ZJamsSJHq3nnrVwXTVZMRysBzkB5DXKZ28aY2R/QjrtXNvz2PMy13X8wFmkMd8X7SvR/4ZSH7mmC+RupdLajZ1olRDJleh8TTtHNGVLXhR33lDS8+RwMUXX9vw8LbK4D6Tt02HyZO1ZN7IiFeqjGcnYAuOjc2yuzjKWzFFNFqhKPY89H5U6o7kXXkYaZUZLfAy6i3xRb0HXvBa665fezV1xIWyKq4nuFXFotprnSeW8G7wEJT10eykVEfmxcaZ3cU128faKU8qDsh4bAXLruXq39qy13IjYqLpHNxb0l4nI+ap6EHgO8OWSfUb726z+ktVSKjPKkd9KGP/NDWQHDnQ92Bx4fNy5VPxXmTm3kXbxHEtmFWexRORU4LXAzXGlDgJHYD+Sg8jQywmtJlRmlMO+l7L5qhlkeh7SMGImV7abjvFKel5/VKJa6GUUk8U1naxkXVgfKHOrz2PZ2ySKC0kj06Tx4+jjv/IfxYK1aynKudu3+137gcmKoWLo5QQ4Bb0yo2y5pOJKqaU0KeVu4By9lqBVQ569PcSoR0q6JuL6XazYR4PmpnjSXIGOG9b4H8bmQG6Dd2NxX2Zt0Yfy+xZcUpvc25tqn2tz7HmZJ06ZLCm2dcAweTIwrA9Z4b1tRkbn2T4+TS1ZcOXVZMHHni9QlYwqShVnJEjQJuV9JFmglixQTetU0pQ0VTKv/GramLQLsiJWwnOLd5AHuXLd0MAl09yijgJJmAgojlEaCrlkYWnICKkHRZxcIY9jzzULebHUu7d3Vs7zz7FKDFL/76igq+rDo7f/oqqLasGJyIv72qoVoHpggfErp2HPvvIfi2ElxJ2nqVfMMx973ufPqKs+i/UBXFmDXwAzfp0Ab13VVhhdsV7kRGUqY2TPPOlkwcPGx5+H2HNXBgk/Sx2SOUWKeYKrJ5yQz143WdHLYslbxZeXrY8V9U7W93j/QPhxLCr03SrivceLrWRsqcmKIWG9yInQ96tTyvyEuMRwKWiqDcU78YNnwcsBP0JOgqIOeSx64ufQxMuJSLluVtDj19JYl+/rLWhhc6SoC9JeRuTHqx9gx4q55ttz67mPPW9yUYXI1d0r52XjkdUfT/SCyZMBYD3JChVI0yyPPx9P5xhPZplIZtmczLA5qTMuwnhSZV7rVMkYlbpX3p2lfcSXWkvzcmuCpkLI5NbkTZPRpIgr2iRD8nj1XFCE9er298nh8rwYMdrYVzKnlBeVdPEl1CRYy1Wdcp6pU9aDYSBWzlvpZX2QFSLyIuDNql0FKA5M/+81Bv1dInKsql4pzkz0NFwB97f1vWV9RBQqB2aR63ahU9O9WYMGGREkTZG0UVJtpT6bsOo/qFer6psWtUPkUavaCmMpDKWcQKEyvUBl70yT0lysfd7k7l4U9wlta3aqV5QXubtDZ6U8rO918i1pbn9pUpbCj+NSredt5MRKxpaarBhOhlNOeJI6JPO4SbqgkIes7WERfKk1rzVnDeU8GKyKcee5kg4Nq1fw0IlfhwG5NFzTc1f4uF460blauK3GSZ7c+0g5L8SWNxT3rLlkUjzQji3nJfJqDcYTvWDy5P+39+7B1qx1fefn173W3vt9z3vO4cABEVRQo+VEMzBCTdQygBjHC0VJigRHnAxUxnMGMYmmGIRSUTCKRdAhMMkAb6xANPGeCOIFxMglRxCHOBgx4xAqHINDUNDDe93r0t2/+eN5nu6ne/W67b3W2t1r/T5VXXuv7l7dz7vf1d/1/J7frXv0WisABknBSTrlcjLhcjLhjmTsjHTJOBHhRFIGpCSSkJAzxBnmiSjDJC9z0lNRksRtmqizxYvqudbwwGvb5gSgDIX3i3auBaN/bBeEtse9zmvXLRcE4kW9lmibeC4xr1Vj856cTytE5EuAp6/xls48/8nyU2q8DniNiBwB3wt8H/A/Af900wPbBCLyTBG5mo1vk/75DfTadXQyIe4R3ltCaPtwsH3vOZSrWM0N7xnzbSU2yU+JyLNF5Epj/+s2fB9j8/RSJ/LxKYNrY+R04kK1Em+Me7moVW6fMcyjvujz2rDFRn4i5TZzTlsPdWmct/o/zv/0Ljof1h486AvDys7CfJ3YJqYV/aRXOgF1rUjHpWvaTXrTYJw7z7nznmvlLcefF3JH49D22u9Sea8iQ7/yzFOGxmt8rPZaakZ/zRPWlJdavnjdMG+Gt9e853FhuMCq0YkXoxOrYnrSPXqlFaVOTE79M6gkvv/53YNTrqQjLidj7pIxlyXnWBISElJJSPwDeiSFD3Gf+JB3l4fueqh7Iz0tkERJUkXSwm9a/qRtC8Xl/KIiQbNCpE/QrCaR59x5yql5zyUvfFs1rbdW82m3rmp7lII7Z1Gv7b5n1QoRSYFX4j4zq9KZ539dD/oXqerT/ArW/cDTVPVjIvKBLYzt3JTtk4aPuk+v3XAFCaD/HvTgOR8Mygm4Ztnc1eqN0X7pbXnG3hzuKpVBEgfxGN2lnzpx8uj75OZpdWAdozgUR1lGiwdcE6l71OP7rfs8t52fpNXv08x9OcbG+Tq556uMZ/dP6JvDnU0rekWvdAIqrbjrrs+5Lx0VJJfd4pmGR8wb6swxhgFExVVXDt6nmROijcgDHo8j2qfR2xZ94uO2SOFn6QkrQv6om3TXPWFaFZ0NP+PQdl/vJg5t1zDh7khe6Zq82f80PekOvdKKuM0aAAJHg5w7B2MAUgruSkYk0aQh9Z+1wn/MJpow0iFTHVAgFEh5ftlyzVd0V7fTl7FxC4eqIEVb/4eGsMSf6uBlD2uLwSD2xniS+9+jgnCSReHsWYH4+YVkeWSQF4tD24NmzP2Dtu69V0Q+GL2+qqpXG+e8BLgKXJt/8RneHO560c//ugZ6cD1/LfARVf2Yf31jc0PaAqpollWvQ4uhviKJ85qnafVB30ZRuOZtd/sn+wDwPzaHAPzMTkdhnIXe6oRkOTocVJPTuecyO0OGqrXIurduM9IXjLN1X7NAU4gUSqScWM/tN7op45wL8YSZVvSTfuoElNWJQzV3nwbqj1EZ37FRrFI75h1rVRXkBYQilPE0sdy3gGCAx6GpZe6oUuWQlh7zqqiTxBWWY+0owlYZ4DNesBVavHa4D7rpSffor1YkoANFVRgXaRmqPtIhhQqFQKHKlJyEhKnmjDVjSsJUU2ekFym5ijvfbzOIb8gYnnXxxWtpGOltj6XWtcKFlUuL51qRApJcveHutCTJiir3PG8xzou8WtSLHQQrznnmaMWnVfXJc98j8gTgsar6ShF5/Eo3cnTm+V/XQP+wiPwq8FeA+31/uPuB08Vvu2AaRUx6TZl3nrqqzdNp1bZgm/hJyA55jqp+vLlTRL5pp6MwzkJPdYL5z5Fbmm5/T3xOYJfPypLicCJSfTE2F/LmhZad0ThfoBPbnHibVvSTfuoEuIlsrqXBHE8g662M/AmlcS40CzjVjPj4Z/OWsUG+rj8naFu0cODC14m85H5rFodTjSbWWk20W4zzcoFvaTE65unEhfdBx/Ski/RXKwAE8iJhUgxIUXJNmGjKhIQcYYp7foZSMNaMkRZMdeC3lKmmZEU6Y5jP1DwLRjrM14eygAUzOhTapZWbBo+5lkZ6kvvw9tIo15lq7bUcdJ8SU7ZUaxJH3LRxdtvjmcCdIvIG4E4A//vbVfUtC97Xmed/XQP9O4FvAB5S1d8RkbuAzwAv2vTANk6ee0/SRQ/kHIS886OhM87B5Z1nu+npvkvPmKp+XES+CvjbwDHwXbjCIP/n7kZhnJGe6kRzcoorQ7PgdPAeqej3uR7uwFkKvbURp7T4L8M4JzQUjyzbqYUUnzmr13NDzNYc666LxJlW9Jae6gSEwmxJpi5cnYZhHqPin1UpJ8O1XMrY016+Z4GHfAUvukTGeK0tkp9wx2HtZQ5pUZQedIlzSMPCXtCROLcU6jqygue8HGNHfSamJ52kv1pRgIwTJlnKJHfGdt4o/5WrW+y7XUydcQ7c0iNGOmRcDL2RnpBrUhrppXHu+6O7au3hdfgdoO5ZjxcFpRHOTiGlRkhOFdKeQ5JVv7twd3VGerSR5857njnN0CwrPemLikmWzNGOs2iFqv5w+X7nQX+uqr5ghfd15vlfq1qaOn5dVX/Hv76uqv9CVT+yneFtmJ63V5PBkORo6ArDFQU6mWyvKFzb/XdY1EVE/lfgp4Ax8ETgNvBI4Me3d1djE/RXJ6SqeB4VhyuPhkmt1reaUb8t2iopN4+FcaaJM87T1H0RZpnPAWsJLWuGtmsRhame7d90Fp0QkceIyE+JyGtE5PUi8vMi8siV7mda0Uv6qxOOYpiQD6P884D68NA89paLz+8W75GqjtVCS+cZ5OHSsw6zWZrX817yMqS93KLXWVEWdypD20Pv4mCsx8a5XwwMReM0TMbX0IuuFokzPekevdUKwbVgvJRzPMw4Sp2HsFBhqgNGOuR2MeCGCrcK5ZYW3Fa4UaTcLo65VRwzKoZMikHpQc+DId5+u1nUG+fNhcB4XzDOi2CY+98zZ5gH4zydKslU3cLktHCh7dPc6cc0K41zzbKacb6opdoq9SrOoxUi8tXAK/zv/0REvnTJ+Z15/tfyoPuwkkf6VgcJboUhBX5SVbPF7zbOTLNiezAIQmXEXdC2yr9d/jbwBFW9KSLvUtUceLmIvGunozDWpr86MetVbqXQeh/y2iXc67me9LWGM+f9bcZ500OfJJXna5qV3q5a1eW2vPNl9146Zs6qE18MPKiqLwMQkVcDPwp8+wrvNa3oIf3VCUcwcmtF1/CeLe/BliJUU9fSKJ8xyGNDeu7NovPm0Twerl3LN6eWO1oVh/Pe87g4XJ673sVaVOHtcfgq+NDVM4Ql7n4+sQ6mJx2jz1ohBZBL6fHONSEPoe2aMpGEoSbkKAUFI039NmQUvOdFSqYJeZHMhrWvS1gw9IZ5LddcKRcWK++5eiM96nuehZ9+YS/L3cJeHmlFtHhXM87LcSwJba+N9xz/XNUHgAeA5634ls48/+uGuL8OeLiIfCvwYtw/+E+Ar8Dlg3QK3/rrmZfkTjdhVe1niLskVdX2RFBfiXmn3nPmTg62lVuqqnoz/B7tP9rgPYzt0EuduJze7XbEYeKqaCG+l7FU6VtFfI5/T/ieib9vNhm103zW4/D2MBYRt4iHN8bzKF+0LSS1dr3zL/Yt0IllvMdvgY8BX7bie00r+kmvdAKiOcXxw8tCcRJPmDUKdQ+GOj6UtAiec/GaERns5x1XvD4XvOUzXvSwRQWe8hDSrlX+aPCel7npPoe0zQu2Rkh7bbxs5t+9JUxPukevtCLoxPGVRzgjdyrkRajSLhSa1HPMca3TChVuec/6qBj6EPcBmSZM8kEtvP3Mhrr/REvZy9Eb6Uq0gFeFuCdxBffM5aAnwXseVW0PmxaFKwoX0uqaxnlb1fZF3nN2rhWdef7XbQj+Rar6bGCKeyi+XlWfDjxh4yPbAKr6NlW9fyhH/sPT3W+EuYggwwFyclxNvCdTdLpeONlGhtIeZnJNVe/fQuGnj4jIm0TkrwGXRORJIvKPgf+44fsYm6eXOjFIvP7Oa6kWKh3PTH5bvOab9J7Py2lvFr8UgcGgOj6ZzvY8XxTaviHm6MS9IvLBaKtNqnwIY/wP/SbgDSve0rSin/RKJyDSisGJe51K2Xs89qaHSS6FQO62Mrw93kKYe5SLLgu0I56Tx5XZa174aAuF4GqtkjIl8aHskvvc0Tj3fF715TABbysKdwa6GuKO6UkX6ZVWBJ1Ijy65CJojZZAWJKg3vAfkKtwqjvlMcZlbOuR2MeRGccSN4oQbxQnXi0vczE84zY84zYfOg65S86K3SUVt9hKOq1sYpBDiQpWVTkWalHnDfIoLZ59SetCTaUEy8Yb5NIcQ2j7NytD2ELWn8YIfUHZ/qBWTXG2Bb45W3C0iV/1iyCbpzPO/roE+r9XBzTnnd4ckqcJS+4IIcnTkt6H70pxMXVG4YsehALrzL9S/D2TAbwB/Ffh3wAnw3Vu9q7EJ+qsTEHmmVzw3eM/9T4lXijc1ltrqc8t1Q9vFNIl0IivDTxeGtsfG+XlD8+frxKdV9cnR1uxXWiIi3w58WFXfuuJdTSv6SX91wnuhk0yromtQVUFWqfcRLifAVZ5n+P4sjXStrjOPmhHO7O+l9zwOpS/HWeWfExV4ms09z2e9YH6hL17k0zw/+zxk9/OJdTA96R691ApXSBJkIoynA0beC15owkiPyL05PdIht/SI68UJN4pLfCa/g5v5CTfyE07zoSsul6fkRUJeyMKv6dJnEE8dZhbuwqKh+70MZ8+kZpxL5n6mUyWZKOmkcEa6N84lyjsny8otrlXhxhCibaKw9lWjb+Zrxbacg515/s/SZu3XcKGHcauD2xsf2aET2qkdHVXVmLPsQjzn5ZB2+AWqqreA+7yn7ZHAp4DH+P1Gt+m/TiwIc2/zbi/yem3seW2GhMXec9/VgULR8GXZki+6lbzzBufRCRF5HvD5qvrSVd9jWtFb+q8TUFVA9iHtwTAOE+PS0x1y0MtzG0a51q9ZYwXDfaZye1QIrtyXR3mkfrFPovBU8hCiqvW88zbP+Tn1oqt90E1POkl/taJcWxdG+bBsmzYuhoxkSIqWyw+5JtzyxeFuF0eMi4EPcU99aLyU4e0aQtRnbxXtqMLYZ3PPKfPPawUsM2rF4ZIo8sblnkeh7Xmz37nO1KqoLerFOedrFpTcFV16/s/bZu1OXKuDX970wHbCptodbQNxVZjlaOhe57nLPd9RS7XWIe3wIRGRn1PVb/Fhr3/m971ERD5LVb9ldyMxzkC/dUJC2ySfdxmHvMevY097M7z9PKHuzfc2FwSa10wS7zkPE+2oLdKclmrV9db/slzGWXXCfyE+WlW/z79+rap+1wrvM63oJ/3WCSjbnEtOlHteN8JLCma96pGnGyIjewltheZKT1NwoQUjvexj7A322iQ78p7HBZ6KvJZ3PmOcbyCCb9ftGFfF9KST9FcrBEigKIRpkZYG+kgHDItjgNKTXngD/XZxxO3cGeiTIiUrEjLvPa+M9Dn3q+WpExnmUb55ZJi7gnBSD233VduTzKfETKOWaiG0PRSGy7J6xM2cWhWr5py3/gkP1PZYaqCLyFNU9b3+5cui/f9D+BVXsOGfbX54B4oIycmxKwo3GMB4jI7Gzji/qAWFeKV/N8y0WFLVvy8iv73TURgrsTc6oW7yqoO0vg+cFx2cJx3q4ezN8PY5156HFFo/Z1loe1ihHg6r1nBFgY7HPv+rZQI98yW5eeP8rDrhW6G8HviUiLzQ776O60G6DNOKnrA3OiGCqJJO/bMrzvuUIBSirj85lEVpBSqvVfBU1TxZkac9PENRv/Pa/uZ5GoW2NxcAgnHuKy8nuW+LFBbzfL9isrylwFO1yFdOsrMNFcze/XxiHUxPOsA+aEVYwEtvJxRFQoJymg9JKRhKzlBy8sKFu4Pzst8oTridH3MzP+ZWdswkHzDOB0zylKJIvIHuLl6olDnn6m/oosmD1zzknlMa5+RVy8cytD3kmU8hnbiq7enE6VsyVdKxyz1PprnTj1reuU91iecdbb3OzzrfOGDbYxUP+ktE5Pd8VbvvAN7ecs7JZoe1HUTm9w/sDEmKJIJcOoEkBV8QrphcoHGOU8JdrGKJyMdwj+OjReQ/Nw5fBj68/VEYZ2BvdAJwXywJ1TPnJ+QqUuamN43z8vfyi2m1FWOZ592OxxJfJ4Ssh5xzEfflGOd/taxg19hSe8YFOrEwdNW3Qml2lF58L9OKPrIfOlEaxwpa5ZWrRJ9/8RuxMR4ViivD3WeN7/IeRO9vuX8c2l4Z5kqSxx50LQs8uddFlX9e1HPPy1zzZvXlDevFruYT62B60jl6rxXuc+7mB3kujPMBt7JjUlEuFS4a9jiZujB3YKopt4sjRsWQW9kxt/IjRvmAachBV6Eo3FYWigs3a3rVo2JwTqOCYU69FkbIO89C7jneQMflnE+0qtgeGehl3nlzQQ/qNW8gqnezvg1zyLbHUgNdVZ8RvfxxVf2x5jki8r9tdFQbotZmrQ+UeedDZ5wn4vLOs2xrE+q1hrebKvjPxz2Tr2G2KMMN4Pd3MQhjPfZBJy6nd9UPqLrV52CoeyN95pxFeejrfCG1ec/jL7b4WknithBuH6qnhvwvFnxJnnV8KzJHJ7YRuvp8TCt6RZ91AqI5xfE9Na917NVWFaTwXvTIvZXkIcTU74tC3mODe26/85pRPhvaHrdQK8PuC2rF4Vzldm0vDBfC3FvyzlfqV7zu37J7XXWej+lJZ+izVtTarJUOZBemnmlShrpTuLzz1J80KlxbtVC5fZK7HujTEN5eOE+8FknpMZ9BgaLyspce9BC9Uxrpzjiv551XPc9dzjluYS9qq1ZG3UQFJDUPdW4ijajVqyjONdc4VNtjrRz0tgfE8xMbGMvG8Z6at92d3nsfIjMT1s4hCXI09N5zcV+Mo/FO+53PJZ5Y1NloURdVfQ+AiHyLqn6keVxEvgT4o/Pex9gevdWJo0fdt+TE9n0htD32ni9737J7tHnfm0XhhoPKyzWdzoalwpz8ry2EtpfX3p1nzLSi3/RNJyDSisuPuY9cqxz0prEsIcbdEXoM13LFQw5oaXhr/Vrx3DtaAGi2UZPS0G8Y56FSeyPv3HnN88hrXtRbqnkNqUXfbLprzDl0QkQ+D9cX+5PAY4DvVtWmxwsR+bfAl0a7fmzBZ870pMP0TSuCTly553PuE//oKJBryDUXxsWAQoSppOW+qabOMPe556N8yDRPyUJ4e/CeQxXGXotxp8o9b4S2SxTaPtPrvOY916jFWlFF30xdGLtkXjN8aHvZTi32nm/QOD9k22PdInGISAI8inrT9p8FvmpTg9oWIoJKQpkY1iWSlOTSCXL5MnJyjN68hU4mF5t33mCXRV1U9SMi8mjg8dQ/a/8Y+PJN38/YLL3VidjQDhRAVGm1vn+Ocd5SzE0KRX2rx5kV4VaDPLpGfHwwgOEAHaTI7ZEzzqdrhrZvUVN2HbpqWtFfeqsThFDyytAWBfxrjYJbgJqXO8nicPQqLL3pFa/R8K7X3hN54pNcq37nfpOp85rLNK9C27O8ao8U2qU1Qtsp9Hyt1Jb+/c781tcDV1X1rSLyDOAq8Ndbzvu4qn7tuhc3PekmfdSK0GYtmUKWux7mo8wVfh4XA46TjEFSPV9Z4Qz0UT7gxvSEaZ4yygZkeeJC3PMELQTNQxV3ZhfyNOSZu01y31ItC4Y6JFNxYexT7zmf+JzziQttT6ZKMilc7vk4RyZZFdo+zdyco4zai9JhvCe9zEU/r3Ee/o4HanusZaCLyHcArwKuNA51w4JchQ6Eis+QpMhw4IzzNHF5pJMJesF55zPscCgi8iPAi4E/B0bRoc/a3SiMs7AfOuGM3RC2XuaeJ1T55jSM88Z7y9+pDPLWUK343Ng4j4/HeedDJ9uS5eUXpUbnlJFCbf3Od6EnO/5fNq3oJ73XCZGolZn3kCfOOK/3Jq9+tvbzbRrm0XshCnePjXHVdkM9DwsHVWE4ydUVdwo9z8vqyy1hqn7CrXmxfefAGS4tIo8Avh54tt/1TuCXROQxqvqJxulXROTHcCbMTeBVqrq0LZfpSffoq1aE4ulSCEWWMM1STrMhBcJJOiWRAgqYakKhSek1D33Px3lKlvsK7nlCkSeULdZC0dp4qlG2UfPGedzv3HvOQ/u0Mqx9iutzXnrNQ79z70H3xjneOC8N84YtVZt3bNoRcKC2R9MntIx/ADwVGKpqEjbgLWcdgIi8SKTKuBKRzxORt4jIG0Tkl0XkC1Y51mdkOHD9zo/dYo1Op+hkeqEt1WaYN7nYHn8T+DxV/WxV/fywAW/a6l2NTdBvnWjxYJf55ZHXXJqGeTh/jnG+8F7N64R9LUXhNE3c/vBlOZ3T87x2n13Fnc/VibtF5KrPzds0phX9pP86EYzv+PPeeF0ezymrtlM7pjUPuzS2Zu55LUS+6VEvKg+621zuKD7vvNbzvIhC2+O887zYflrdfJ24V0Q+GG1ND9njgJuqOnL/BToBHsJ5u5r8MvByVX0RMAZ+csXRmZ50j95qRVlnohCmuTPQx9mAST5glA+9x3zI7cz9HGeuavvYh7YHz3koDKf+WqFae1m1vcw1978rZURPPaxdqtB2H9Je5Z+HlmpVWHst4qZRq0Kbc5Q4nW6Dxvmh2h7rhrh/SFX/75b9/+gsN/cx/U9v7F4UvrRqaFPjRvHvHQpxFwFJSI6P4fjYTb5HmQtv71BoO1BVozzLe0UGuKILrwCepKqr5HH8vqp+smX/ql+yxsXRT51oI3oGpW1/05hfZJz7QnPN6y4sChfnnae+MBy49iaj8dLQ9o1/WS5hgU5ss7+xaUU/6bdO1CaOimRS9iEQ7zkDZtuplR53nTW2i+o9tffXPPHxwoCW908y9ffRMv88mRaQFUjhtvmh7VXe+S7mHgt04tOq+uRN3ENV4+f/zcA/FJGTYNwvwPSke/RSK0LtCSmATMiyhFE2oFChQJgUKYmoe62uT/o4G5CrMJ4OXFG5LCXPBS0SCh+6rmV+eShiS8N7Tpl3XhaE88Z5qNKehFD2qKVaGrzmUxd1k0zyemh7aKmmYa5RtBeT3KB+nMf2OCOdef7XNdC/V0TeAPwBrqpd4KXAX17nQiKSAq8Evhf4Jr9vbvgSbgV01dCmWZLEfSF1CElTZDBA7rwCIujtEXo6ohiPO2WcA7XJwxn4O8D7cK0KVuWPRORtwDtw/ZADa3/WjJ3TX50IlEYvVZxR85lc0rt8prf5st/nGee+Wrseudw1GU3QyQSmk9YvyZpxvquw9vLfsfXV7TZMK/pJf3VCnXfaVWdXkqlQ+NlUmYMexhZ5vcsCbqqzhnnDQGfGQK8b9EmupaEfvPNJHnm/fM9zCp93Ps2q0PbQHSYOcQ/7dsHZdeKPcaHrJ6o6EpEj4B7gwfgkETkGPktV/4vfNcEp+Qn1sNU2TE+6Rz+1ooyQEWSaMB0PGB8NyAshKxLSpCD1BroCeZEwyVLyIiHLXVh7nqWl51xDbnke9zkP9wr7gpfce8oz8Xnm4bU3zieQjp1R7vLPlWQSep7nJKPM5Z6PJq7dc1aFt5fzjmYxyW1E6u1+TtGZ539dA/0Hga/DVcaMlfzRZ7j3S3CrUNeifTPhSyISwpdGC47NPCQ+NOp+gBO54wzD2zIiLqz90olfbld0NFot79yfv2vkjOsbqnoVQGpVc5by94APUYli4CyfNWO39FMnUp/epi5UVMV7vOPV20TmG+bRe2f2h9dtz25b/noZMqbOQB8415zkhTPOs6xWPXWllmo74qw6cQ5MK/pJb3QCGloxvMvt00bldKXKQY8qvNdaqYWc8Xz2eLNlW7hHuS/22Meec42Mc2+YhxZqLve8cJ7zoqi0I1RvDxPuHXMWnVDVPxeR38AZTG/FfX4eUNVPiMizgHep6jXgs3He1ef4tz4d+D1V/cwKtzE96R690YpYJ45PHlY96wVo7gxvBYoiYZAWiCiqUhrtLpw9qXnNNXjNs6TykgetKKPynNe8Vqk9q4z0UJyyNM6nWuael8b5xBvnE1cYjmlWLt6FvPPYOA/FJKuK7dvRkR3PKTrz/K9roD8R+FxVrSVHi8jL1rmIiDwBeKyqvlJEHr/mGFbCG4VXAe4e3Nstd3Tod358jFy65CbYWVa1VFvGRXjXw0rgLPeKyAej11eDQX5OflpVv7O5U0RetYFrG9vlifRRJ44e1bByG184wVifY5jDGbzmsLDyOyIu9WWQugl3ni/OO49XsC+iIOZ8ndgmphX95In0RCegoRWXPlubrdWkUBQhrOupxN5znTXGGznktfD1+N8XG+3BKM9DKDtVWHtpnBdlv3Px/c7LastZXuWdh32hYvsun9vz6cQLgdeKyDcCj8UbQ8APAy8AHgD+AkBE/jnO4/o44FtXvL7pSfd4Ij3Rilgn7rz7c7R8dnOhyIXp1LdMSwtyFQTXYq0opMw1R8X3O4ciS6q8cu85l5qB7m9cVPsl8wXhfMV2yai857WicD73vDTOizKsnWnmQtvLvudFVatCtVapXZtzj43+QedqxUbbrEV05vlf10D/beAYaFYv+7M1r/NM4E4fsnIngP/9ncwPXxovOLac4gImq3OQNCUJ7dROjuAz19HxCi3VLshzXt6+/dYbyxkTkUep6p8BtD0gnh/fxL2MrdJfnQio/+ZbxdBmiWE+75lt88THnnMROBqig9R50H1ou06m9dYmF5x33mSOTmz0y9S0Yi/or06IVDnifiKsuX/2gnEOM/njcSX2Wl6596rPVG4nOg8fzq7uZ8g5T6au13kyLXzeedROzS/kSZa7MFXvQS/zzn2Iu04na/7Jz88cnViKqj4IfHPL/i+Lfr9O5T1fPhbTk67TT60QH1GD9wJPE/JpSlEoeZaUD4EWSdnbPPQ31zxx4eu5FxRveLca6OUin18gDN7yqcs5lxzSkTPQ07GWrdRSb5iXYe2THBk5w1wmU7egN5k64zx4z4Nxvsle58v+jO2X3lhdm64+/+sa6HcDfygiv0s9D+QbgDeuehFV/eHwu1/Feq6qvsC/bg1fWnZsKR3JQZfhEXJyjDz8YS4cdjShuH3qwla7bJzDLvJAfk5Eng71elzNc4Cv2fpIjPPQT51QnEb4kDEJ4eXtg2v/vfl6UVu1+HVRfcGpKpIkkKboybGbYI+n6Ompm1wvM8631Ld4FRboxKaLxJlW9J9+6gRAUZCMpqSjIwZHgktvlnIyXh9g0wvuo20iI73MPZ/pvkDt3BDOLrmW4e2hSnsyycu8c5k6j1fpASuKssCTBg3Jc4rJ9EL0YkfziXUwPek2vdQKyZXj6wXjGwn5iStMkTOERMmTeA4RFXgrF+2qfVUajVRFJ6EWbVPrGJFF+ebBaz521doHI1cQLpkqg1PnNU9PM7ewN8qQ0dgt6I0nVbSNeu95GXXjjfQd1Lg5ZNtjXQP9K4B/3rJ/fJabi8hXA/f53/8JrlLivPAllhxbdCf3I0ncSlB9ELsxfP2kP7l0AsfH6HCAnI7R01N0mi0Pbb/oonFxbu32eCr1/CKjn/RUJ7xxHIzehMWRN23PZLNq+7L3RB7zWh7oYOC85okgkxxG4yp3dJFxfhFh7TG70QkwrdgHeqsT4L3Yk5xkmpAMFJ0yY6DXephHv5fHVGe97FC1dQzvLSffPvc8817zvPC9zkNoe9QWKS4IF3nOnbEefr+gxbzd6cSqmJ50m95qheRKOlLSsVAcCzpK0ESr6uv4n1oZ31D3iJf6UDR+anAmUNOJJIS0T0PPc3W552XF9lAQLkdCr/Nxjkym5aJevQVjKAYXvOjFToxz97c5XNtjXQP9lar6z5o7ReQjZ7m5qj6Ayxd6XuPQTPiSP//BeceWISK77HXfMoDE5Z1fvgTDIarq+p3fur04tP2CPecxZ13FEpGvBL7Nv/x+EflFVX1Ly6m/j2vHNvdSwGvONgpjh/RWJwBnNIvUK7jXjq9geLftazP2I6+5WxQQV0xxkLrQ9tyFqepkUhZ06kzF9jnsyDNmWtF/+q0TEPUdhyQkn8/eaMY4hzle9aJ5jn9RBE+7UvU4933PfUG4ZBI8442CcC1h7WXhpwtkjk5sK690GaYn3aa/WqHUWpspAolUNSr8OeFn6RmPF/LC8x9y0LXlnCgaJ5ni019cvrlkMBg7raoVhBvnLjUmNs5DKkwRhbE3nALbLAjXxg7mFJ18/pca6CLyLtzH4HuaD4iIPAXX21qBn9nKCDdCtfpzIYiQHA1dzvkV32ns2k301q3FLdXWq3q+XRTIz/ZAqur7gfcDf3fJqS9W1fcsOkFEXnymQRhbZT90whPC2lXbP/PLvpiaOtNyfs1bXuaMF4gMYDBwLdVUkVunrrvDaFym6MzNOe8C59CJNTGt6CH7pBMqgg4TUDfZlcLNuFWkMqxjY7s5/Yi95bGXDGqa4SboVdV2Ua285pkPaY/zzf2iHnmOTqdlkbgQ2q6644JwbczXiU2nwqyK6UnH2AutUFxY+7FbxEtPXei5JrgHO3jAi+h8Ih0I+yLje56BLgW+UJxLhYk96Enm26hlVVh7MslJTjOnH6NxZZxPq5zz0nMehbZvrZ3aPM44pxDXIu9VwKdx7RUfAXynqn6q5fROPv8redBV9ekAIvKD+I+Eqv6Qqr4X+BoR+YXtDfHsiMgzgWdeSu50O3yIuySC7iqySwQZDJErdyBX7ig9Yvn16+g0W26cd8AjFjhrUZdVUdXf3MQ5xsXQf524y01k3b7FC2QrPpet7YtqYfDRF50kLrrmeAh5jkwz9Nat2VZIbcb5BeadN9lFkTjTiv7SV52ASisuD+4muT1ikApy5Zj8JEWGIdxGqwJyi2QiNsL9BLQ1zF39cR/qWXrRpzlkLqy97jXPq3SYsqWaj7y5oIJwbWx7PrEOpifdpK9aUc4pju7h6NqUO46E0yxleoeQn+Dd5E4kVJZ4iKOFu1qeeRxtE6JrSgPdLwhMQ50KJRkrybQgHflicNOCZDRx6TAj37o19Dovc8wbnvMd5Z03OaNWfDHwoKq+DEBEXg38KPDtzRO7+vzPqYBUI/7TvAd4FvDuBed0BlV9m6reP5SjCxuDpCnJHZeQkxN0OIBRlXc+dxUqhLV3yDgHqslBtOEn3l6QjMOl/zqReJ0Iq8bRpkVR33zO+LIt5G+VW/kFF4qvVM+5hGrtSYKMp65IS/CExdeaCWvvVrWlOTpxTVXv33HYqtE9eqsTUGnFQI7LCBvJC5KsIJlWWzoporZFfps2tjBxnipJ7resIMkLX5Fd3SQ6apsWKrWHQnAydS0XJbRCCsa5n2ir74Ue8s5XauO6I+bohGEEeqsV5ZwiPXH6EPUbT8euonp66n4O/M9yG1e9ypMJruL6zOZ1o6zE7iqzp+OwRfvHId+8Xq3d5Z1PfbV2rxl5UZ//BOM8nrdcgF1yRq14D/AD0euP4eoH9IZVPOilG0lV3y0i1/zqVes5RoQIMhggd9wBwwGIuF7np6fzPV5dCmuPCPlvLVxUSJrRLfZLJwpFUUikfH0mmsbzvArvgxSOj8rFOR2NYTqpe86j6110K7V5LNCJ5e8VGeDywF4BPElV/2iDQzO6wZ7oRLSwlntDOhyat14WMmei7/g4x7wqGFcPj5e8qArKZW6C7LzneeU1Vy37FTuPeVHmmpee8+AR6wDn0QnjYNgTrXAkmSsUFx7sWlh7CJgV97s2/lVtHvSZsHfvQU9yH+JeOMM8tGR0BeFyknFW9jlnmtWN8yjffDbn/IKM8/laca+IfDB6fVVdD3oAdDZ88ZuAN2xhiFtjpRB3EfEfm/bX3UcWF4nbRiE2EZJLl5BLJ+jdV5DTMXL9Jvnt266l2q7GsUFkN7mlRk/pvU4o7ksqjfaFdbRVnsvm4tqidmux4T4YIIMUPT5yhVpujyhGI5hOK8959J4uFYRr4xw68XeA9wGXNzcao2v0XifAPXvTzIWXjyHJUjRL3IJe1EatnGgnUhrm1T88XKsy1Mtnp/RghRx1760PReCmVUG4ykPuq7KXRnrU6/yCC8K1YfMJYxm914q8ILk9IbnriOHtgnQqZFOh7F0eUlqCgZ74BbzYYI8o61AU1XtdXQoX0h6KVpYG+jR0d1CSkdMrOZ24hb1p5vPN88o4b6TDlH3OLziFbo5WfFpVn7zS+0W+Hfiwqr51owPbMqsY6E+lXn5e6GA5+sUsKRK36YlukrrQ9nseBkdD98U5GlPcuNmed97RkPYasaFgGLPsgU545hnWTW+4NDOE5jwf8fuaz1AiyKVLzoOe52UKTM0473C++Qzn0Imw+i0djSIyNsKe6ISvUZHl5edVWr6/hcpjLgn1Rby4zkxsoJcedG+gBw+5T5Epi8CFENRQvCmL0mG8ca6TSTfnFTafMJbTf61IBJLE9RpPpModD4RHIDLINVEXbSv1YxC85UrijXGCYa5aGugUzmMumUu9KVNiJq59mgtpz2v55lUaXeQ5145E3ZxTK0TkecDnq+pLNzeo3bCKgb5K+fmXb2Iwe4EIMhwgR0fopWOfTzpxoe3jcXu+6EU/ACvSpaIuRufYH51oM8rbviCSFXO/o/fGUVcyGECawHCAJoKMJq6d2mSOcd6xXPN5zNGJheFoxsGwPzqhLv9ck8JF6HkHQDDUax7zBChC5TipHQdvhIPzksf1L8B7t9y9Sm9XllVaEk+y/YRap1k3JtcLsPmEsYT90IrC5X1rKqgkpGVEXHROaaALmgKiaFIVkQskeWSUe0+604aoy0PujHPXerEqJClj7y2fTGvRNnGPc6LaORfe6SHirFohIvcDj1bV7/OvX6uq37XBoW2VVQz0VcrPf/+GxrNR5lVx3+oHTxKS42Pkjsvo8ZFbqbp2neJ01P6F2fGw9hK1kDRjIfuhE00j2GtFazX2XNu9vY289XpLNX/9JIE0QY6P0TRxE/1bLv1Fp95J0PF881bm68TK4WjGXtNbnYBYK+6qcryTRuh68IbH2pB4j7u0hLpD3Sgvot995fYyz3w8qYo2hXuFSXYIZ1dFs2m39WK+TlxUH3Sje/RWK6puDw9zed+THE1dxF3ofy6FzoazJ4L6Hukk9YU+iMLbgyEeCqYVlffcFZR0Ye0yiYpItrVejAzzOOf8IgvCzXBG20NEvhp4PfApEXmh330d2B8DfcXy8w9sZjibxQv82+4ePPK+OAd9a23WkpTk0gly913onZeRW6cwGpNdv9n+Ye9bKGeHVtSMbrEfOnHvfTPe7nlpMeGcpKURRvPLJFwjPP+heOTJCXpyhJyO0fGE4vbt7vY3X4e+jtvYOn3WCYi0Ir33Ph1PkDR18+u8iE9yP6XymGtkoLcu6jUN8lh7yj7mrkI7Wrh4+dCnOHjNvaHemYn1MqzorLGAPmtFqRPDR94nN0+RYUoqgmTVfCFOiQmGuqYJJHgj3e+LWjaWYe1ZUWu5WKtR0Swi2TDMy3oUbYY5XFgrtYWcYU7hPxvp0hM7zEpF4vqPtnvANkmSkhwNSe6601Vszwv0xk1XjXmecd6lB2AFpN1YsRVvY++orSwvYokB7y9WnZskblJ/cuwm65HnPHjFZgzzrn1ZLmGOThjG/hC8XpOpD2HX9mdUxNWZKCIPejJroEvDax7C2ssc8xDaHjRCs9YJdjm57gGmE8beE57/0RRwxSRrh0M6TBq0oXARdcGLLuLTY/z5XieCgV4zyrOqaGTZ3WEyrfQjpMJE85qy7aJf2OtCQbg2DlUrDsRA3zIh7/zkGC6duF2TqQtrn1ekpUcTbghFKGzF29h/ap7zRV8MSVJ/judVcY+vIQJpCkdD96U4mbqwdr+qXTPOw0S7R1qxQCeWv1fkK4Fv8y+/X0R+UVXfsqmxGcZGCWGg5SS3RSuSxE2uk6QMc5dmaWaYb5iHCXOozB7fJ5zn93fS8zWH8+iEYfSK3BvM3jhv/dyHBbwkcaHviXgjvQqBd6HeDcM8MtDL+xRF5TWP26eFjg/zvObQycW9BVqx987BgzTQtxE6mlw6cSGrl46Rm7fRm7dqE++SHnrOSw50Fcs4ELSRLx5Wmec8r7VV3aaxDrXnRdXlq8vRkTPO0xTGp+ho5IrC5Y1V6x4a5yVnjLRR1fcD7wf+7hZHZxjnR0HzAknV/YTKgA4k4rxZImX0TPCil8cD8wzzQt0cohnN08gX7arnayE2nzD2HVXnuR4OXMh5vAgHpRZI5jztpCkUvi106tNhIptBsshbHnQiz6sIHJ8Go9NpWZ+iZphDu3Z0fWGvXSv23jl4IAZ6KNq0hQrqSeq85w+7Gx2kyO0RevMWxbXrs5PuPhvnShlmYxh7TXOVGVrbo4Vj5QS8Qa1ie1gdv3zJ6cDpCL19WhWPhPrq9f7pxN5/mRqHQz3KJkdj47hQb5zjwlYBJEFSLb1k7rzogmXBplnDXLOszFuv6VGoVdHBHudLsfmEcQioe45F1bU3g8oOUK0W7Hzqi+SF6+ySJJD58PZwfmi5GMLYg+EdDP4s88a473EeF5P0WtXUj14Y5wesFQdioPsPn6/ivjFEnOf80gk6HLh80hs30XjSHZ3bdw41D8Q4IOaEgM2eFzSlYagzx+M+HCJHQx/yWqCnpy7CpsOhZWfFdMLYf7wBPUlmq7UDhK9/8aHtFK4wbSKt/dI1j6omh2JveV56yTTUlio7Omy5G80OMJ0w9h6fxsZoXF+cCwQDPdSpSHy9LCmQQVo3TIOHPLRcDMZ5ns/UqagVjozHUl4rMs57wKFqxV4b6DNt1sL+TVRxF3HFni6duJZqIZzk9uls3vkeGOe1qrKGsUeUOiF31sPa532BSfQlG7xltBjm/piEqu1HR+WKuo7GboLfky/IlTGdMPaYUiu4UvUejyfeeX2xjqSAwlVmhgJy0DQqFBUmzcEDH4WkllXZ4/PiDg991g7TCWOPiXVCs8yFuUvi9KA6p7IN0rQKdwdXSDIrTyw97uIN9OBFdxE2vvZE8KD7hb0ZB0OkF/VaNx1f6DtgrWjpEbQ/qOrbVPX+oRy7HZv6T/bGeXL5MnLlDvSKa6mm129SnJ7WV63CAxhCWnqM5DqzGUbfqXTiaMU3FPXJcaHtW2A4dAUkj49czvntU4q2vHM3GNMJw+goQSsGDN2OMHkOPdHD5DgOWS+PFbPnalEWgWNaTbA1VFwua1EUpderFpbaY62YoxN3i8hVb+AYRi8pdUKG1c4id970rCrgplnk/S4K5yHPXXu0cvN9zF2hubzKM/fvxy8AaCgMFxb5yqKRde2o9KPjoe0Rhzqn2GsPekV9Bea8oWHOc34JefjDnLF+e0Rx/QY6Hs96znvyACxF2Wx6gGF0kbYCKg0khLGGybPMWedMXFG45Mod7vVo7IpHzvOc74NWzNeJva+4ahwWmucwoVbsrfKcJ3Xveq6IKKjM6kVcYdlPrjXPazqjDQ9677Vivk5YrQpjf1BcRC1Amrrib5krGEuaAoVLk0tSSHxBSfXedCkqbQlF4MrQ9Wphr4y4aS7q0fSU91Q7Dtj2OBADfUOEEJRLl1zF9kGKnI4XVGLu2YOwkLmr9TbxNg6K8KU3Y6gH/ARcjo6QwQCSxC3eTaZu1Xumz/lB6IRNvI39QgsgrUXLhFzxMmfSG+quCFSCFAB5feINlec9Kvi2F5PrufTb+28Yq6KFujLVYcEOnBbkXgeC2aCCSuLODQt7vtDkTIcHv8ivcc55XDhyZo7RZ/04XNvjoAx01XPmbUmCJIKcnCDHR654y3hMcfMWmk17+uFfgwNtdWAcCNoyIV50eqGVkd4kcXnnDAbuuZlM6xXb2+65LxxovphxoMSRNKGvcJuhXhSoz1WXcr6stXzz1ui+PueaL8J0wjgURKqK6kELADQUmcydfqTUi0lGKbIaedDLrg/LjPN96AwDB2t7HIaBrmzkwylDV+hJ7rjkLnv9RtnvvNbXsM8Pwjzilg2GsafEhVVmwkoDUYjqjDcdSuNcjo9QVfTWbYrx2C3i1W+28fFfOKYTxqGyzFCPvenle7QKbQ+T7KAv+zK5bsN0wjgQJKlsAlWdia5REW+o++c/TUtveknIFy8iozwy0t0pc7zm7sbb/CdulwPWisMw0OF8ldTF5Y0lly+7Yk9Zjk6nFDduusIMNc9bjx+ERRxwHohxGLQ+ua254rO557E3XY6OnHGeu8qqM57zfdUIMJ0wDgdVt+jWyCmXqFIzhTumScObHi4RJtrNgnCN++wdphPGgRDS2iRxdoSiPrQ9r2pWqFaGOviK71rPKS+0jLgpc8+bdXL2sbbNAWvFXhvo89qsrX+hhOTkGI6GMBigozGMx944D5P1PfWcx1hImrGHVG3WrpT7ViokGXu7wrVC3rkkMJ2g08z3JPUr4PvQcnEZ7Tqx9/lixv5TtU/yhR9VKZsVey2opb4EjYh6mdd6+sZVldvY5zmFzSeMPWVWJwq0SABf/DFauIMowsaHvpcFJaFumJcpMQ3jfN/140C14kDarK3YPqkNERfafunETbwBvX2b4nTkqijuywOwjGZ7mLAZRs+pWicdze99PvfN0blpihwNIfVfvqMxOplWxvkhMF8nrqnq/WacG32mphXVTr/VqyfPTJ5D2LvPJw2T7L3NMV+EzSeMPaZdJ6JnPfweaULNAPf6oHlRO6ZNz/k8/eh5C8YaB6wVe+1BLwk56GeoniyDIcnxMXLnFfR05Dzn4/FhFHtqcgj/RsMIrDFxljR1C3jHx65a+2RE0WacH8IzdAj/RsNoI9YMSSpveuRJD+fNzCFq1zmAZ+hAKzMbB0gUPVerW6OFq+KepvX89LZ2zaGCe2yct91nH9nXf9cSDsNAh/VDJELe+ZU7nEdsNIbTUZVPenAfGLX+xsZh0nzWW8LU5eQYSRNnnI/HvnDkAXrG5uuEYew3zRQWb5RXE/I5/YkliTxrhzKvmKsTe1+Z2TgwojxzR10XAMRXcY/z01tp5pzXju2rdhyu7XFhBrqIvBa4A7gBPAH4EVX9tyLyecDrgE8CjwG+W1X/s3/P3GObH2CCDH2bJEBHo6oS894+CAtQ5q342xeqsTU6qRNxxwZJnPc8hLVPorzz+NxDYb5OGMbW6IxOxNoAtYKSS/NFDwnTCeOC2LlWtM0BWgrNzkTZtF3q4IxzDtr2uEgP+khVvwtARJ6D+/B/KfB64KqqvlVEngFcBf66f8+iY4tJEp/LsNrgQks1EnGVmG+dHqjn3HPArQ6MC2W3OtFkyfNeM87zop7+cohaMV8n9n6127hQLlYnltHW8qhpxB+SXth8wrg4ujGnkCr1pS3KZvE19qSF2iocsFZcWJE4VX1J9PKLgT8QkUcAXw+8w+9/J/AUEXnMomMr3XDVEHcRSFKXd358hN4+RW/dRqcTVxTugFHffzHeDGOb7FwnYHFV5UDwng8HMBy6gnCjcbWIt+9fmguYoxNWJM7YGhehE0sGNFt7YpEuHKBe2HzCuAg6oxXhmQ+F3nz4ejDWw+/xdqhFJQ9VKy40B11EngS8DLgHeDbwOOCmqo4AVHUiIg8BjwdGC459ouXa9wP3A5zIHb4Sos4PESnf6FqqqSqSZdWk++A5u9Gx09QEY+/YmU5weY1BudD2sPCnWXbYETYlphPGxbBNnfDXX18rVnkWDlIztq8TpifGPDozp2irWwG+JVvz3AMqClfjcOcUF9pmTVX/vao+C3g18F5guMFrX1XVJ6vqk4/kBGk+BG3/4SJu0u0n3jqZupzzA/ecA6Ccp9XB64E3qeoLgDfiwoMMYyV2pRNDOVltddpriaSJb4eSm3EeMJ0wLoht6oS/fqUVHG/igoerGbvRCdMTo5WdzSlW0Yk2HYi86q1e80PSjgOeU1yIgS4iqYhcCa9V9VeAzwUy4IqInPjzjnArXA8Cf7zg2HKSxj+1rRJzmkIiiAiaZRSj8eE8BEuIDZF1wky2Hkpo7C2714kV2zBK4lqkAOS5r9huOgGmE8buuZD5hHEutq0TpidGG53WimVG97I0mT3lkOcUFxXi/rnAK4HnAojI43ErWP8F+A3cH/WtwNcBD6jqJ/x5c48t4nrx55/+jVs/+cf+5d3AtdYTp9zNlGuMWo/Ofx/cC3x6zrFF75t37Czv2fQ4Hhe/uMFD73hn9nP3trz3REQ+GL2+qqrxKtWi0KGl/3fGQbNTnbihD336ndOf/eNoV/szkwO514pZdqkTZz1mOmHsEzvVCYAbPPTp39RfXD6n2O13eVfGMe9YqRU70AnTE6ON3c4p6joBqzy7s/Z3V+YUZnvsGlXd+QbcBfw88CbgfwfeDvwNf+zxuIfgDcDbgL8UvW/usTXufXULxz64yWt2ZRwb+r/+cuAzjX1/CnzVRXz2bOvPdpE64a+z6Wd348/nGcdoOmHb3mx91IkVjq39jHZlHMuOnfP/eiWdMD2xrW3rqlZ06fnsytxmA//XvdeAC/Ggq+p14Dlzjj0IfPO6x9ZgURXhsx7b9P26Mo5NUIYHqerIQgmNVblgnYDNP7ubvtd5ju3qeqtiOmGciZ7qxLJjZ7lfV8ZxnmsuY1WdMD0xZuiwVnTp+ezK3Oa89F4DxK8qGOdARD6oqk+2cbQjIr8GvFGrHpIvUtWnX/S4DGOXdOX57Mo4mphOGIajK89oV8YRM08nRORZwLtU9dqi8y5u5IaxWbryfHZlHE36rgEX2mZtj+hKZcCujKPJC4HXisg3Ao/Ft6AwjAOjK89nV8bRxHTCMBxdeUa7Mo6YeTrxw8ALgAeWnGcY+0JXns+ujKNJrzXAPOiGYRiGYRiGYRiG0QEutA+6YRiGYRiGYRiGYRgOM9ANwzAMwzAMwzAMowOYgW4YhmEYhmEYhmEYHcAM9CWIyGtF5CdE5DUi8lsi8rV+/+eJyFtE5A0i8ssi8gXRe+Ye28B4XiQiGr2+kHEYhlFhOmEYxiqYVhiGsQzTCePCG7F3fQNeFf3+HOAP/e+/Cnyz//0ZwG9G5809ds6xfIm/tq5yr22NwzbbbKtvphO22WbbKptphW222bZsM52wzaq4r4GIfD/wZcB3An8KXFHVkYgcATeBxwPjecdU9RPnuHcK/ALwCuBDqioi8ohdj8MwjMWYThiGsQqmFYZhLMN04jCxPugrICJPAl4G3AM8G3gccFNVRwCqOhGRh3AfztGCY+f5cL4E12vwWrTvIsZhGEYLphOGYayCaYVhGMswnThsLAd9BVT136vqs4BXA+8Fhru8v4g8AXisqr59l/c1DGN1TCcMw1gF0wrDMJZhOnHYmAd9AT6045Kq3gRQ1V8RkZ8BMuCKiJxEIRz3AA/iwjvmHTsrzwTuFJE3AHf6sb0BeOeOx2EYRgPTCcMwVsG0wjCMZZhOGIAViVu04UIyfrrxegQ8Evg16kUQfis6b+6xDY1JV7nXNsdhm222uc10wjbbbFtlM62wzTbblm2mE7apWpG4hYjIXcBPALeAh4C/DLxRVX9JRB4PvBb4r8BjgX+gqh/175t77Jzj+WrgPuB/Bv4p8Ho/tp2OwzCMCtMJwzBWwbTCMIxlmE4YgBnohmEYhmEYhmEYhtEFrEicYRiGYRiGYRiGYXQAM9ANwzAMwzAMwzAMowOYgW4YhmEYhmEYhmEYHcAMdMMwDMMwDMMwDMPoAGagG4ZhGIZhGIZhGEYHMAPdMAzDMAzDMAzDMDqAGeiGYRiGYRiGYRiG0QHMQDcMwzAMwzAMwzCMDtBbA11Evk5EPiQiKiLvEZF3x9s5r/1rIvK0jQx0C9czDGM1TCcMw1gF0wrDMJZhOmHsClHVix7DmfEfvHcBQ1XNov3vVtWnneO6dwE31P9x/EP3ZlV984rvr53fvN6mEZH/B7gT+HpV/cNt3MMw+orpRHk/0wnDWIBpRXk/0wrDmIPpRHk/04kt0lsP+hK+5zxvVtXrm/xAb/p6LXwZ8BHgb27xHoaxb5hOGIaxCqYVhmEsw3TC2Bh7ZaCLyNNE5OWq+rsi8tMiUojIb4vIkYj8BxH5qIh8nT/3C0Xk132IyvtF5BV+/4tF5JMi8nL/+keBJwIv9SEszxCRHxCR3/Lbr4jIY6IxNM//wfh6/pwvEpG3i8h7ReR9IvKNfv/9IvKgiPysiLxRRH7Ph6icLPp3q2oOPAD8t2v8rebeq+XYh0XkX/px/4L/O75w1XsZRpcwnTCdMIxVMK0wrTCMZZhOmE5sBVXt7QY8DVDgPcC7gQ8BL4+Ovx74Jf/7vwA+2/+eAv8ReJ5/fTfwJ9H73ty4zruB50ev/x5VesDzgZ9qjKt5fnk9YAD8UTgO/CXgOvCF/vXLgf8PuAe3gPJh4FuX/B0uAf8J+Oiaf7+59/LHPu7/NkfAnwJXAQG+HLgBDC76M2Cbbcs204ny+qYTttm2YDOtKK9vWmGbbXM204ny+qYTW9wG7Adfq6qZuLyQp0X7vwf4QxH5WeAdqvpf/f6vwH04/xWAql4TkW9Z434fB94lIglwF+5DtCp/FfgC4F/6e39URD4AfBvwQ/6cD6jqQwAi8mHg85dc80eAPwGeKiJXVPXmGuNZdK/fVdVr/th/Av5AVVVE/gNwBXgU8Ik17mUYF4nphOmEYayCaYVphWEsw3TCdGJr7FWIu6q+W1VfHr2+AXwf8CzgbdGpnwM8pFFxB1X97VXuISJfBPw88GJVfQrw3cDlNYY5c2/gU35/4Hr0+4gFD6GIfCXwt4BnA9eAv7LGWJbd60b0exZeR2NfRxwMoxOYTphOGMYqmFaYVhjGMkwnTCe2wV4Z6AERear/KcAzgLcC/0d0yseBe0RkEL3nvxGRSytc/r8Drqvq/+VfD9cc3sy9gUfiVqHWwueHvAl4gar+BfD7rJELYhiHjOmEYRirYFphGMYyTCeMTbKXBjrwCv/zBbgVp/uBp4jIs/z+DwAfBZ4LICIP9+dltHMDuOxXsO7Dfci/2B/7hkXni8irG8ea9/4CXOjJv1rnH+j5IeB9qvqr/vWHgCec4TqGcYiYThiGsQqmFYZhLMN0wtgcF50Ef9YN+Gu4Ag0K/GvgF6Pt3cCPAw8BL8VVNvw48BfAS/37vxD4dX+Nfwc81e9/MfBJ4EHgf/H7/gbw/wK/C3wN8A/98bcCb8SFZ/xkNLb4/LbrhXu/F3gf8I1+/3P9eZ8EvgP3cIf3Prfx7//vgY8Bd0f7ng88EL1+JfC6OX+/hfdqHPsB4DO4AhNfCfwb/3f/HeDhF/1ZsM22eZvphOmEbbatsplWmFbYZtuyzXTCdGJXW6gGaOwhIvIO4Kqq/uuLHothGN3EdMIwjFUwrTAMYxmmE5thX0PcDx4R+QbgFLfiZBiGMYPphGEYq2BaYRjGMkwnNod50PcUEbkDGKlqftFjMQyjm5hOGIaxCqYVhmEsw3Ric5iBbhiGYRiGYRiGYRgdwELcDcMwDMMwDMMwDKMDmIFuGIZhGIZhGIZhGB3ADHTDMAzDMAzDMAzD6ABmoBuGYRiGYRiGYRhGBzAD3TAMwzAMwzAMwzA6gBnohmEYhmEYhmEYhtEBzEA3DMMwDMMwDMMwjA7w/wMpcqREa8Gg1AAAAABJRU5ErkJggg==\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], "source": [ "routine_results_df = pyeem.preprocessing.perform_routine(\n", " dataset,\n", diff --git a/paper/paper.md b/paper/paper.md index 1a2fbe0..d32bb1c 100644 --- a/paper/paper.md +++ b/paper/paper.md @@ -1,5 +1,5 @@ --- -title: 'PyEEM: A Python library for the preprocessing, correction, deconvolution and analysis of Excitation Emission Matrices (EEMs).' +title: 'PyEEM: A Python library for the preprocessing, correction, and analysis of Excitation Emission Matrices (EEMs).' tags: - python - fluorescence @@ -9,10 +9,12 @@ tags: authors: - name: Drew Meyers affiliation: "1, 2" + - name: Jay W Rutherford + affiliation: 3 - name: Qinmin Zheng affiliation: 2 - name: Fabio Duarte - affiliation: "2, 3" + affiliation: "2, 4" - name: Carlo Ratti affiliation: 2 - name: Harold H Hemond @@ -24,42 +26,24 @@ affiliations: index: 1 - name: Senseable City Lab, Massachusetts Institute of Technology index: 2 - - name: Pontifícia Universidade Católica do Paraná, Brazil + - name: Department of Chemical Engineering, University of Washington index: 3 + - name: Pontifícia Universidade Católica do Paraná, Brazil + index: 4 date: 2020-07-08 bibliography: paper.bib --- -# Statement of Need - -Fluorescence Excitation and Emission Matrix Spectroscopy (EEMs) is a popular analytical technique in environmental monitoring. In particular, it has been applied extensively to investigate the composition and concentration of dissolved organic matter (DOM) in aquatic systems [@Coble1990;@McKnight2001;@Fellman2010]. Historically, EEMs have been combined with multi-way techniques such as PCA, ICA, and PARAFAC in order to decompose chemical mixtures [@Bro1997;@Stedmon2008;@Murphy2013;@CostaPereira2018]. More recently, machine learning approaches such as convolutional neural networks (CNNs) and autoencoders have been applied to EEMs for source sepearation of chemical mixtures [@Cuss2016;@Peleato2018;@Ju2019;@Rutherford2020]. However, before these source separation techniques can be performed, several preprocessing and correction steps must be applied to the raw EEMs. In order to achieve comparability between studies, standard methods to apply these corrections have been developed [@Ohno2002;@Bahram2006;@Lawaetz2009;@R.Murphy2010;@Murphy2011;@Kothawala2013]. These standard methods have been implemented in Matlab and R packages [@Murphy2013;@Massicotte;Pucher2019]. However until PyEEM, no Python package existed which implemented these standard correction steps. Furthermore, the Matlab and R implementations impose metadata schemas on users which limit their ability to track several important metrics corresponding with each measurement set. By providing a Python implementation, researchers will now be able to more effectively leverage Python's large scienfitic computing ecosystem when working with EEMs. - -In addition to the implementation of the preprocessing and correction steps, PyEEM also provides researchers with the ability to create augmented mixture and single source training data from a small set of calibration EEM measurements. The augmentation technique relies on the fact that fluorescnce spectra are linearly additive in mixtures, according to Beer's law [source]. This augmentation technique was first described in Rutherford et al., in which it was used to train a CNN to predict the concentration of single sources of pollutants in spectral mixtures [@Rutherford2020]. Additionally, augmented and synthetic data has shown promise in improving the performace of deep learning models in several fields [@Nikolenko2019]. - -PyEEM provides the first open source implementation of such an augmentation technique for EEMs. PyEEM also provides plots toolbox useful in the interpretation of EEMs... [@Hansen2018] - # Summary -- A summary describing the high-level functionality and purpose of the software for a diverse, non-specialist audience... -- Description of how the software enables some new research challenges to be addressed or makes addressing research challenges significantly better (e.g., faster, easier, simpler)... -- Description of how the software is feature-complete (i.e. no half-baked solutions) and designed for maintainable extension (not one-off modifications of existing tools)... +Fluorescence Excitation and Emission Matrix Spectroscopy (EEMs) is a popular analytical technique in environmental monitoring. In particular, it has been applied extensively to investigate the composition and concentration of dissolved organic matter (DOM) in aquatic systems [@Coble1990;@McKnight2001;@Fellman2010]. Historically, EEMs have been combined with multi-way techniques such as PCA, ICA, and PARAFAC in order to decompose chemical mixtures [@Bro1997;@Stedmon2008;@Murphy2013;@CostaPereira2018]. More recently, deep learning approaches such as convolutional neural networks (CNNs) and autoencoders have been applied to EEMs for source separation of chemical mixtures [@Cuss2016;@Peleato2018;@Ju2019;@Rutherford2020]. However, before these source separation techniques can be performed, several preprocessing and correction steps must be applied to the raw EEMs. In order to achieve comparability between studies, standard methods to apply these corrections have been developed [@Ohno2002;@Bahram2006;@Lawaetz2009;@R.Murphy2010;@Murphy2011;@Kothawala2013]. PyEEM provides a Python implementation for these standard preprocessing and correction steps for EEM measurements produced by several common spectrofluorometers. -PyEEM is a python library for the preprocessing, correction, deconvolution and analysis of Excitation Emission Matrices (EEMs)... +In addition to the implementation of the standard preprocessing and correction steps, PyEEM also provides researchers with the ability to create augmented single source and mixture training data from a small set of calibration EEM measurements. The augmentation technique relies on the fact that fluorescence spectra are linearly additive in mixtures, according to Beer's law. This augmentation technique was first described in Rutherford et al., in which it was used to train a CNN to predict the concentration of single sources of pollutants in spectral mixtures [@Rutherford2020]. Additionally, augmented and synthetic data has shown promise in improving the performance of deep learning models in several fields [@Nikolenko2019]. -- Supported instruments, example datasets -- Metadata schema [@Hansen2018] -- Preprocessing, corrections, and filtering: - - Cropping and wavelength filtering [SOURCE] - - Blank subtraction [SOURCE] - - Scattering removal [@Bahram2006] - - Include Zepp 2004. - - Inner-filter effect correction [@Ohno2002;@Kothawala2013] - - Raman normalization [@Lawaetz2009;@Murphy2011] -- Augmentation [@Rutherford2020] -- plots [@Hansen2018] +Finally, PyEEM provides an extensive visualization toolbox, based on Matplotlib, which is useful in the interpretation of EEM datasets. This visualization toolbox includes various ways of plotting EEMs, the visualization of the Raman scatter peak area over time, and more. -# Acknowledgements +# Statement of Need -We acknowledge contributions from... +Prior to PyEEM, no open source Python package existed to work with EEMs. However, such libraries have existed for MATLAB and R for some time [@Murphy2013;@Massicotte;Pucher2019]. By providing a Python implementation, researchers will now be able to more effectively leverage Python's large scientific computing ecosystem when working with EEMs. Furthermore, the existing libraries in MATLAB and R do not provide deep learning techniques for decomposing chemical mixtures from EEMs. These libraries provide PARAFAC methods for performing such a task. However, although this technique has been widely used for some time, it has its limitations and recent work has shown promise in using deep learning approaches. For this reason, PyEEM provides a toolbox for generating augmented training data as well as an implementation of the CNN architecture reported in Rutherford et al., which has shown to be able to successfully decompose spectral mixtures [@Rutherford2020]. # References \ No newline at end of file diff --git a/pyeem/analysis/models/rutherfordnet.py b/pyeem/analysis/models/rutherfordnet.py index 7a77cbe..b3ce825 100644 --- a/pyeem/analysis/models/rutherfordnet.py +++ b/pyeem/analysis/models/rutherfordnet.py @@ -16,6 +16,8 @@ ) from tensorflow.keras.models import Sequential +# from tensorflow.keras.optimizers import Adam + class RutherfordNet: """The convolutional neural network (CNN) described in Rutherford et al. 2020.""" @@ -86,6 +88,12 @@ def create_model( default_compile_kws = dict( loss="mean_squared_error", optimizer="adam", metrics=["accuracy"] ) + """ + opt = Adam(learning_rate=0.0001) + default_compile_kws = dict( + loss="mean_squared_error", optimizer=opt, metrics=["accuracy"] + ) + """ compile_kws = dict(default_compile_kws, **compile_kws) model.compile(**compile_kws) return model @@ -229,7 +237,9 @@ def get_test_data(self, dataset, routine_results_df): """ test_samples_df = self._isolate_test_samples(dataset, routine_results_df) - sources = test_samples_df.index.get_level_values("source").unique().values + sources = ( + test_samples_df.index.get_level_values("source").unique().dropna().values + ) sources = np.delete(sources, np.where(sources == "mixture")) X = [] diff --git a/pyeem/augmentation/base.py b/pyeem/augmentation/base.py index 4a51c1f..a846551 100644 --- a/pyeem/augmentation/base.py +++ b/pyeem/augmentation/base.py @@ -40,7 +40,7 @@ def prototypical_spectrum(dataset, source_df): ) proto_eems = [] - for index, row in source_df.iterrows(): + for index, row in source_df[source_df["prototypical_sample"]].iterrows(): eem_path = row["hdf_path"] eem = pd.read_hdf(dataset.hdf, key=eem_path) proto_eems.append(eem) @@ -51,11 +51,13 @@ def prototypical_spectrum(dataset, source_df): "concentration" ].mean() + """ weights = [] for i in range(len(proto_eems)): weights.append(random.uniform(0, 1)) - proto_eem = np.average([eem.values for eem in proto_eems], axis=0, weights=weights) + """ + proto_eem = np.average([eem.values for eem in proto_eems], axis=0) proto_eem = pd.DataFrame( data=proto_eem, index=proto_eems[0].index, columns=proto_eems[0].columns diff --git a/pyeem/instruments/MIT/__init__.py b/pyeem/instruments/MIT/__init__.py new file mode 100644 index 0000000..f36c673 --- /dev/null +++ b/pyeem/instruments/MIT/__init__.py @@ -0,0 +1,4 @@ +from .remora import Remora + +name = "MIT" +instruments = [Remora] diff --git a/pyeem/instruments/MIT/remora.py b/pyeem/instruments/MIT/remora.py new file mode 100644 index 0000000..a10d0be --- /dev/null +++ b/pyeem/instruments/MIT/remora.py @@ -0,0 +1,83 @@ +import pandas as pd + + +class Remora: + """The MIT REMORA, a field compact deployable spectrofluorometer.""" + + manufacturer = "MIT" + """Name of Manufacturer.""" + + name = "REMORA" + """Name of Instrument.""" + + supported_models = ["REMORA-V1"] + """List of supported models.""" + + def __init__(self, model, sn=None): + """ + Args: + model (str): The model name of the instrument. + sn (str or int, optional): The serial number of the instrument. + Defaults to None. + """ + self.model = model + self.sn = sn + + @staticmethod + def load_eem(filepath): + """Loads an Excitation Emission Matrix which is generated by the instrument. + + Args: + filepath (str): The filepath of the data file. + + Returns: + pandas.DataFrame: An Excitation Emission Matrix. + """ + eem_df = pd.read_csv(filepath, index_col=0) + eem_df.columns = eem_df.columns.astype(float) + eem_df = eem_df.sort_index(axis=0) + eem_df = eem_df.sort_index(axis=1) + eem_df.index.name = "emission_wavelength" + return eem_df + + def load_absorbance(filepath): + """Loads an absorbance spectrum which is generated by the instrument. + + Args: + filepath (str): The filepath of the data file. + + Returns: + pandas.DataFrame: An absorbance spectrum. + """ + absorb_df = pd.read_csv(filepath, index_col=0) + absorb_df.index.name = "excitation_wavelength" + absorb_df.sort_index(axis=0) + absorb_df.index = absorb_df.index.astype("float64") + return absorb_df + + def load_water_raman(filepath): + """Loads a water Raman spectrum which is generated by the instrument. + + Args: + filepath (str): The filepath of the data file. + + Returns: + pandas.DataFrame: An absorbance spectrum. + """ + raman_df = pd.read_csv(filepath, index_col=0) + raman_df.columns = raman_df.columns.astype(float) + raman_df = raman_df.sort_index(axis=0) + + raman_df = raman_df.rename(columns={raman_df.columns[0]: "intensity"}) + raman_df.index.name = "emission_wavelength" + return raman_df + + @staticmethod + def load_spectral_corrections(): + """TODO - Should load instrument specific spectral corrections which will + be used in data preprocessing. + + Raises: + NotImplementedError: On the TODO list... + """ + raise NotImplementedError() diff --git a/pyeem/instruments/__init__.py b/pyeem/instruments/__init__.py index 0c41cbb..7572324 100644 --- a/pyeem/instruments/__init__.py +++ b/pyeem/instruments/__init__.py @@ -1,6 +1,13 @@ -from . import agilent, horiba, tecan +from . import MIT, agilent, horiba, tecan from .base import _get_dataset_instruments_df, get_supported_instruments supported, _supported = get_supported_instruments() -__all__ = ["agilent", "horiba", "tecan", "get_supported_instruments", "supported"] +__all__ = [ + "agilent", + "horiba", + "tecan", + "MIT", + "get_supported_instruments", + "supported", +] diff --git a/pyeem/instruments/base.py b/pyeem/instruments/base.py index 8a24a1d..ffbc186 100644 --- a/pyeem/instruments/base.py +++ b/pyeem/instruments/base.py @@ -1,6 +1,6 @@ import pandas as pd -from . import agilent, horiba, tecan +from . import MIT, agilent, horiba, tecan def get_supported_instruments(): @@ -17,6 +17,7 @@ def get_supported_instruments(): agilent.name: agilent.instruments, horiba.name: horiba.instruments, tecan.name: tecan.instruments, + MIT.name: MIT.instruments, } # instruments = [Aqualog, Fluorolog, Cary] df = pd.DataFrame() diff --git a/pyeem/plots/augmentations.py b/pyeem/plots/augmentations.py index e03efe6..97058b8 100644 --- a/pyeem/plots/augmentations.py +++ b/pyeem/plots/augmentations.py @@ -157,7 +157,7 @@ def single_source_animation( max_val = ss_np.max() default_plot_kws = dict(vmin=min_val, vmax=max_val) - plot_kws = dict(default_fig_kws, **plot_kws) + plot_kws = dict(default_plot_kws, **plot_kws) default_kwargs = dict(zlim_min=min_val, zlim_max=max_val, title=None) kwargs = dict(default_kwargs, **kwargs) diff --git a/setup.py b/setup.py index 42f7d68..e7534ce 100644 --- a/setup.py +++ b/setup.py @@ -32,7 +32,7 @@ "numpy<1.19.0,>=1.18.5", "pandas>=1.0.5", "xlrd >= 1.0.0", - "h5py>=2.10.0", + "h5py<2.11.0,>=2.10.0", "tables>=3.6.1", "matplotlib>=3.3.0", "celluloid>=0.2.0", diff --git a/tests/test_instruments.py b/tests/test_instruments.py index 153fc1f..05425f4 100644 --- a/tests/test_instruments.py +++ b/tests/test_instruments.py @@ -4,7 +4,7 @@ class TestInstruments: - manufacturers = ["Agilent", "Horiba", "Tecan"] + manufacturers = ["Agilent", "Horiba", "Tecan", "MIT"] """ manuf_instruments = { pyeem.instruments.agilent.name: pyeem.instruments.agilent.instruments, diff --git a/tests/test_plots.py b/tests/test_plots.py index 7da2746..895e752 100644 --- a/tests/test_plots.py +++ b/tests/test_plots.py @@ -167,16 +167,48 @@ def testEEMPlot(self): assert isinstance(ax, mpl_toolkits.mplot3d.art3d.Poly3DCollection) def testAbsorbancePlot(self): - return + dataset = self.demo_datasets["drEEM"] + hdf_path = dataset.meta_df.loc[1, "absorb"]["hdf_path"].iloc[0] + absorb_df = pd.read_hdf(dataset.hdf, key=hdf_path) + ax = pyeem.plots.absorbance_plot(absorb_df, excitation_wavelength=275) + assert isinstance(ax, matplotlib.axes._axes.Axes) + # could use some more def testWaterRamanPeakPlot(self): - return + dataset = self.demo_datasets["drEEM"] + hdf_path = dataset.meta_df.loc[1, "water_raman"]["hdf_path"].iloc[0] + raman_df = pd.read_hdf(dataset.hdf, key=hdf_path) + ax = pyeem.plots.water_raman_peak_plot(raman_df, excitation_wavelength=275) + assert isinstance(ax, matplotlib.axes._axes.Axes) + # could use some more def testWaterRamanPeakAnimation(self): - return + dataset = self.demo_datasets["drEEM"] + fig_kws = {"dpi": 200} + anim = pyeem.plots.water_raman_peak_animation( + dataset, excitation_wavelength=275, fig_kws=fig_kws + ) + assert isinstance(anim, matplotlib.animation.ArtistAnimation) + assert fig_kws["dpi"] == plt.gcf().properties()["dpi"] + # could use some more def testWaterRamanTimeseries(self): - return + dataset = self.demo_datasets["drEEM"] + fig_kws = {"dpi": 95} + plot_kws = {"fmt": "o-"} + kwargs = {"byweekday": 0, "title_fontsize": 10} + ax = pyeem.plots.water_raman_timeseries( + dataset, + excitation_wavelength=275, + fig_kws=fig_kws, + plot_kws=plot_kws, + **kwargs + ) + assert isinstance(ax, matplotlib.axes._axes.Axes) + assert fig_kws["dpi"] == plt.gcf().properties()["dpi"] + assert kwargs["title_fontsize"] == ax.axes.title.get_fontsize() + assert "\n%b\n%Y" == ax.xaxis.get_major_formatter().fmt + # could use some more def testPreprocessingPlot(self): sample_set = 2