595 lines (594 with data), 140.0 kB
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import ecg_plot\n",
"from evaluate_model import *\n",
"from my_helper_code import *\n",
"from helper_code import *\n",
"from scipy.misc import electrocardiogram\n",
"from BaselineRemoval import BaselineRemoval"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"from helper_code import *\n",
"train_data_directory = 'test_data'\n",
"train_header_files, train_recording_files = find_challenge_files(train_data_directory)\n",
"train_header_files"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"((7870,), 0.0012706480304955528, 117.20867910850305)"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ecg = load_recording(train_recording_files[1])[1]\n",
"ecg.shape, ecg.mean(), ecg.std()"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"import heartpy as hp\n",
"working_data, measures = hp.process(ecg, 500.0)\n"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"59.77418640690723\n",
"21.85177338341216\n"
]
}
],
"source": [
"print(measures['bpm']) #returns BPM value\n",
"print(measures['rmssd']) # returns RMSSD HRV measure"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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p3nn0AwYtvdOALGWviWb/OtfpmdWJtlvv/hzz3rZu3cv1113HZ999hnt27fnjTfeoFGjRixbtoyRI0eW9zAaN24c3bp148033+T3v/89u3fvplWrVkycOJF27doxevRo1q5dS2FhIa1bt+bTTz9l586dfPrpp9x9990MHTq0PM7nn3+et99+mx9//JEffviBqVOnMmTIELZs2cKePXv4/e9/z5AhQ7jrrrtYtmwZBQUFnH766Tz44IM8+OCDvPTSS+zatYvzzz+f+++/v0J+rrnmGmbNmoWI8NOf/pRbb72V4cOHc84553DhhRfyzjvvcNttt9G6dWuOPPJIli9fzltvvcXo0aNZuXIly5cvZ+XKldxyyy384he/AOC8885j1apV/Pjjj9x8882MGDEio/fKin4AsZa+pTayZMkSJk2axLhx47j44ot59dVXufzyyxkxYgTPPPMMXbt25YsvvuCmm27iww8/5Pjjj+fzzz9HRHj22Wf585//zMMPPwzA7Nmz+fTTT2nUqBHPP/88s2bN4oknnogb78yZM5k3bx777rsvpaWlvPbaazRv3pyNGzdyzDHHMHjwYP74xz+yYMEC5syZA8C0adNYsmQJX375JarK4MGDmTFjBid6Pp+fM2cOa9asYYEzm/3WrVuj4v3xxx+5/vrrmTFjBp07d+ZSt4eGw+LFi/noo48oLi7m0EMP5cYbb6RevXqMHz+efffdl507d9KvXz8uuOACWmVwVp8qi76IHAi8AOwHlAFjVfUxERkNXAcUObveo6rvOMfcDVwD7AV+oarvVSPttRbXmv/ww+ghGqylb8kEySzybNG5c2cKnNnj+/TpQ2FhISUlJXz22Wdc5JlVZNeuXQCsXr2aoUOHsm7dOnbv3k3nzp3L9xk8eDCN3OnnknD66aezrzOkrKpyzz33MGPGDOrUqcOaNWtYv359hWOmTZvGtGnT6N27NwAlJSUsWbIkSvQPOuggli9fzs9//nMGDRrEGWecEXWOxYsXc9BBB5Wn+9JLL2Xs2LHl2wcNGkSDBg1o0KABbdu2Zf369XTo0IHHH3+c1157DYBVq1axZMmSYIg+UArcrqpfi0gzYLaIvO9s+4uqPuTdWUQOBy4BugMHAB+IyCGqWsm4kuEkkbBbS99Sk2ngmaEnLy+PnTt3UlZWRosWLcotbC8///nPue222xg8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Nm3SQw45RMvKylRVdcuWLVW+tvHuLTBLE2hqrhtyjwKWqupyABGZDAwBbJ0sRWzt1ZJ1ViYYQjlReIp06tSJY445BoBp06Yxbdo0evfuDUBJSQlLlizhxBNPLN8/0T5z587lwgsvpLUzDK07vo6XkpISPvvsMy666KLysF3O3KP/+c9/yidRueKKK/jVr34VN70HHnggxx13HACXX345jz/+OAMHDmTBggWcfvrpAOzdu5f9998fgAULFvDrX/+arVu3UlJSwplnnll+rt/97nccffTRjB07FoDmzZvTsGFDrr32WgYNGsQ555yT1rWsDrkW/faAd/aC1cDRsTuJyAhgBEDHjpkbzrUmc+WV8MILpgePxZJVOnY0Lp144dWgSZMm5euqyt13383111+fcP9E+zz++ONJJzEpKyujRYsWCYdrTmUSlNh9RARVpXv37sycObPC/sOHD+f111+nV69ePP/883z88cfl2/r168fs2bPZvHkz++67L3Xr1uXLL79k+vTpTJ48mSeeeIIPP/wwaZoyQa49xPGudIUR31R1rKr2VdW+7hRnYadtW7PcvdvfdFhCwJgx0Dh6aGUaNzbhGeLMM89k/PjxlJSUALBmzZry4Y+T7TNgwABeeuklNm3aBMDmzZsBaNasGcXFxYCxpDt37szLL78MmALEHWXzuOOOY/LkyYCZDD0RK1euLBf3SZMmcfzxx3PooYdSVFRUHr5nzx4WOhNZFxcXs//++7Nnz54K5x04cCB33XUXgwYNori4mJKSErZt28bZZ5/No48+mrBwyga5Fv3VwIGe/x2AtTlOQ42kYUOzTHEkWoul6gwbBmPHQqdOprtYp07m/7DqDa3s5YwzzuCyyy6jf//+9OjRgwsvvLBcsF0LO9E+3bt3Z9SoUZx00kn06tWL2267DTDTKj744IP07t2bZcuWMXHiRJ577jl69epF9+7deeONNwB47LHHePLJJ+nXrx/btm1LmMbDDjuMCRMm0LNnTzZv3syNN95I/fr1eeWVV/jVr35Fr169KCgoKO9t5LpwTj/9dLp161bhfBdddBHXXXcdgwcPpri4mHPOOYeePXty0kkn8Ze//CVj1zYZOR1aWUTqAt8CA4A1wFfAZaq6MNExYR9a2ctnn0GXLtCund8psdQ0asrQyps2beLII49kRTz3Ug4pLCzknHPOKZ/O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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"hp.plotter(working_data, measures)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
"ecg = load_recording(train_recording_files[150])[1]"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"fs = 500\n",
"time = np.arange(ecg.size) / fs\n",
"plt.plot(time, ecg)\n",
"plt.xlabel(\"time in s\")\n",
"plt.ylabel(\"ECG in mV\")\n",
"\n",
"plt.show()\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"from scipy import sparse\n",
"from scipy.sparse.linalg import spsolve\n",
"\n",
"def baseline_als(y, lam, p, niter=10):\n",
" L = len(y)\n",
" D = sparse.diags([1,-2,1],[0,-1,-2], shape=(L,L-2))\n",
" w = np.ones(L)\n",
" for i in range(niter):\n",
" W = sparse.spdiags(w, 0, L, L)\n",
" Z = W + lam * D.dot(D.transpose())\n",
" z = spsolve(Z, w*y)\n",
" w = p * (y > z) + (1-p) * (y < z)\n",
" return z"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"r = baseline_als(ecg,1,.1)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x1c4ef02cf88>]"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAX8AAAD4CAYAAAAEhuazAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nO2deZwcVdW/nzP7viQzmSyTZBJIIAskgRhA9jVhkcUV8EX0B6KvuPOqQUVFxNcNVHwVRMUVRRQVhAiEXZAtgZA9ZLJAJttMltn37vv7o6qrq2d6m+meujXT9/l8kq65Vd33VnfVt84959x7RSmFwWAwGDKLLN0NMBgMBoP3GPE3GAyGDMSIv8FgMGQgRvwNBoMhAzHibzAYDBlIju4GJEtVVZWqq6vT3QyDwWAYNaxevfqAUqo62r5RI/51dXWsWrVKdzMMBoNh1CAib8XaZ9w+BoPBkIEY8TcYDIYMxIi/wWAwZCBG/A0GgyEDMeJvMBgMGYgRf4PBYMhAjPgbDAZDBmLE32AwZBSPb9hHY2u37mZox4h/Anr6Azyydq/uZhgMhjQQDCqu+/1q3v/zF3U3RTtG/BPwvys2c/0fX+PFbQd1N8VgSDsNhzvp7O3X3QzPCNqLV+082Km5Jfox4p+Atw52ANDVlzk3iCFzOOW7T/OBn7+kuxmeYdYtDGPEPwEB+2oREb0NMRhGiHW7W3Q3wTPMqrVhjPgnwJF8c9EYRhClFGY97ZEnaL5jByP+CQgZ/Mqov2GEaOnsY8aNK7jnhZ26m2LIIIz4JyBk+RuDYezzmxd2aAnsH+joAeAPL8WcfdeQJsx9HMaIfwJCvn5z0Yx9vvHPjVzxC++Dn3nZ1m3Y2x/0vG5dKKW47fEtTkKFVxi3Txgj/glwLH+trcgcrr/3NeZ97VHdzTCMME1tPfzkqXqu+a23CzTpvI9XbtxP3fJHqG9s19iKMEb8E+D4/I3F4AmPrNtLR29AdzMMI0zQvp1au/o8rlfffbxinTVY9I1dzdra4MaIf0Jst4/mVhgMY4lwIoW36LTh/JYsbsQ/AWHLX287DAZDGvDBfeyDJgBG/BPit6e1wZAudLoydblftAZ8fSYmQxJ/EblHRBpFZL2rbJyIrBSRrfZrpV0uInKHiNSLyFoROc71nqvt47eKyNXpO530I2aUl2GE0aVHQY2XdOicvT53nXexhFzIPnEjDNXy/w2wbEDZcuBJpdQs4En7b4DzgVn2v+uAO8F6WABfB04AlgBfDz0w/EjoB9N5oxjGNrqsUZ0ipKtmneesK84RiyGJv1LqOeDQgOJLgN/a278FLnWV/05ZvARUiMgkYCmwUil1SCl1GFjJ4AeKwZAxaBNCTfWCNbWyjlb4wojzQxtIj8+/Rim1F8B+nWCXTwF2uY5rsMtilQ9CRK4TkVUisqqpqSkNTR0+PnPXGcYQGen/tvHe7aPR8tdWc3RGMuAb7VxVnPLBhUrdrZRarJRaXF1dndbGDRX9t4lhrBL2f3t7lenUfl11++B555t5wtIh/vttdw72a6Nd3gBMdR1XC+yJU24wZCj+EAMvCfU6MirP32emfzrE/yEglLFzNfCgq/xDdtbPiUCL7RZ6DDhPRCrtQO95dpmv8dnvZhhD6PJD63T7OB5/r3s7PnjQ+qH3AZAzlINF5E/AGUCViDRgZe18B7hfRK4B3gbeZx++ArgAqAc6gY8AKKUOicgtwKv2cd9USg0MIhsMGYPj9tFUrw50Zd3oDPiKz0zIIYm/UuqKGLvOjnKsAq6P8Tn3APcMpW6DYayiyxrVmu2jzeev3+zW3wILM8LX4Ev8cJN6RVDTTM56s32Mz183RvyTJHOkyB9kkPY7lr/naY8m2ydj2wBG/JPGLz+YV7zrJ89zzW9eTXzgCOG1Vap1tGsGukBCbp9MyvP3G0Py+WcyfhgQ4yXrdrdorT+T3AGZaAXrEmFfjPD1CcbyTxJzzXiL55a/p7UNrFtFvHpXrz4ysbfjN4z4JyDsjzUXjZd4/XXr7NmFrFGvUwH1nnPmZTiF8Evg14i/wZd47/P3tLoBdeua1VNLtVrrNkZcGCP+CQhP6WwuGi/JJMtf36yemXdNm9s4jBH/JDEXjbdk0tcdska9dgfovKaDus7Z2+oi6/bZRW3EPwG6crAzHa+751ot/0zM9tGU6ml68GGM+CeJuWS8JaNSPbXVm4EBXzPC18GIfwKMz18PmWQRBjUln2tdw9d+9VoQM7GHFwsj/glwrCMNP1x9Yxt7mru8r9gHeD/Vrz60Wf4ZKIR+E2CdmBG+SaKji3zO7c8BsPM7F3pet248H/avaXI1yEwhNCmX+jGWfwLCbh/NDckwvP669boDMs//ratqP7hv/eL6N+KfAJPtowfj9vGiXuP28bRun6WNGPFPEr/9cGMdr3tamRgI9EOev9eYuziMEf8kMZa/t3g+yZkPhNBrd0AmPvD84PbxC0b8k8QEqDzG84VNMnF6B31oW7rS3MYORvyTxFwz3uL5IC+P63OTiQOeQnV73dvxgxGnvwUWKYu/iBwlImtc/1pF5LMi8g0R2e0qv8D1nhtFpF5EtojI0lTb4AU+uGYyCq8FUas7IANnuHSmd/C6Xo/ri4ZfXE8p5/krpbYACwFEJBvYDfwd+AjwQ6XUD9zHi8hc4HJgHjAZeEJEZiulAqm2ZSTxg8WQSWTUera6XCBaag3Vnbm9Hb9ISbrdPmcD25RSb8U55hLgPqVUj1JqB1APLElzO9KOyfP3lkzK8w9qGmCmN8htvWZSkDuE/hZYpFv8Lwf+5Pr7kyKyVkTuEZFKu2wKsMt1TINdNggRuU5EVonIqqampjQ3dWj45QfLFDzP8888r48Z2KYJv3gR0ib+IpIHXAz8xS66EzgCyyW0F7gtdGiUt0f9NpRSdyulFiulFldXV6erqcPCLz9YppBRbp8MFMJMHNjmtEF/E4D0Wv7nA68ppfYDKKX2K6UCSqkg8AvCrp0GYKrrfbXAnjS2Y0Twyw+WKXgu/lqnN7ZexeMpLvWO8M28B164DT5oBOkV/ytwuXxEZJJr32XAenv7IeByEckXkRnALOCVNLZjRPCDxZBJeP19643phKYQySBXVwaOag7hl/hhWmb1FJEi4FzgY67i74nIQqwre2don1Jqg4jcD2wE+oHr/Zzp47cIfabgvdtHf9pjptSrs25dy0dC2NXlFylJi/grpTqB8QPKropz/K3Aremo2yv88oNlCt5n+3hcYZS6vXb7aM1w0jy3TybGeAZiRvgmIHQ/+iFFbCh09Qa0rRCVDrz/vnVO75CJef6a6vXBfeyDJgBG/BMyGt0+/97axJyvPcqtKzbpbsqw8X4ZR2/rc6PP7ZO5ri6d6+n6JX5oxH8M8sTG/QA8vNb3SVRxyJzgp65epd4HXsj3njkZTk4b9DcBMOKfNH7oLibLGw0tABzu7CMwjDvcD+eaSQu460P/TKaZlOEUwi/eWCP+CQj7/PW2I1mCQcWWfW0U5mbT2x8c1gLwfrhBPPf4Z6Dln5nZPnrqdeOH3gcY8U/IaPP5N3f10dUX4IyjrBHROw50DPkz/HCqmTSrZyYKYVCX28cHN7IPmgAY8U8avzytE9HY1g3AO+rGAcMTfz+4QHzQBM/IyICvpjbomlDOjR8eQGDEP2n80F1Mhqa2HgDmTS6jqiSP1W8dHvJn+OHazCSfv+6cdy11a/u+let/j2v2mRfBiH8CnN/J88DU8OoLiX91aT6nza7mua1NQw76+sLyz6BsH11V+8HV5b3bx9PqordBdwNsjPgnICTCoyUA6Rb/M46aQHNnH280NKexZd6QSZZ/Ji7iq8uN6ge3jx+MKzDinxBdXbXhXiAH2nvIz8miJD+HE2dafv+1u4Ym/n64NjNpkFdmun001esDu9sP9xcY8U9I6HfyPvtkeO9762Ank8oLEBGqS/IpL8xlrZ33n3zd+q9O729S/cFPr9Eb58iseiF8Teu/uyyM+CcgqMntM9wbc1tTO0dPLAMsf+qZR1XzxKb9Q5rnxw8XZyZZ/rqnOtBTt66xDfrjHCbbZ5Sgy+0znPqUUuxu7qK2stApO/2oalq7+3m+/kDSn+MHy9/rNvhhkJfX881odftorFsXTvzQJydvxD8BTj6y19knw6jvQHsv3X1Bpo4rcsqWzZtEXk4Wz2xJfg1kP1yco6WnlQ7COe/e1puJa/jqGlxm1W29+iHuAEb8E6LraT0cN8Suw50ATB0XtvwL87JZWFsxpIwfP3RLR0NPa9RXnsGuLh3XeDh+6HnVUTHinwBdF8twrLKGw9Y8PrWVRRHlNeUFHGzvSfpzfKD9eD+rp/7gp/duH/29Hc/r9YF7zx/3lxH/hDgReq8t0eDQ3xOaxG1yRWFE+fjiPA629yZf99CrTjuef9/eVhdZty4XyDCusbTVHXK/6KpX4zqOxu0zSgjdIF531YZj+bd195GdJRTnZUeUjy/Oo62nn+6+5JZK9kfA1+v69Fv+XuMHT1fmJPSOYctfRHaKyDoRWSMiq+yycSKyUkS22q+VdrmIyB0iUi8ia0XkuHS1I92Ec3O9DvgOnY6eAEV52YOsmqrSfAAOdiRn/bsvTi+tUnddmTTPuz4XSCa6fUyqZ4h0W/5nKqUWKqUW238vB55USs0CnrT/BjgfmGX/uw64M83tSBujaYRvZ28/xXk5g8qrSizxP9CWnN8/UoSH3IxhE/HQ8a5aLfVF1J3JK3l5Xq/HFboYs5Z/DC4Bfmtv/xa41FX+O2XxElAhIpNGuC3DQndWwlDo6A1QnJ89qLyqJA+Agx1Jin+M7ZEmot5R8LBNF+FJzjyv2esKwzVnoqvLfh2L2T4KeFxEVovIdXZZjVJqL4D9OsEunwLscr23wS6LQESuE5FVIrKqqSn5PPV0EnL3eD7oaBiXaUdPP8X58Sz/obt9vDxvnW4fP0xyNhrSidOF9jx/DXWHJ4n0h/oPVorhc7JSao+ITABWisjmOMdG++4HfSNKqbuBuwEWL16s5RvTNgf3MOrrtH3+A6m2ff5NSaZ7BnW5fWJse1N3BlrBWl0geurVFWiOqNsf2p8+y18ptcd+bQT+DiwB9ofcOfZro314AzDV9fZaYE+62pJOgpqe1sMK+Mbw+RfkZlOSn8OBJMU/UoS9tPyjb3uB3rRH61Vnnr/nAXZPa9NfL/gji85NWsRfRIpFpDS0DZwHrAceAq62D7saeNDefgj4kJ31cyLQEnIP+Q1dfrrhBXwDUd0+YPn9DySZ6++eBM5by19F3fambn3ontsedIyo1nPOugLN4NYSfzwE0uX2qQH+bqcY5gB/VEo9KiKvAveLyDXA28D77ONXABcA9UAn8JE0tSPtjKaJ3Syf/2C3D1iunyZ7fd+Rbsdw0Wn5D4w3eDkISJ/bJ1xxUCmyPJTETHZ1+UT70yP+SqntwIIo5QeBs6OUK+D6dNQ90oRvEP9boh09/RRFcfuAJf5b9rUlV3dEyqUet4/O9ROCCrI9NA39kPedKTEWP0xm55eArxnhmwBH+n3eLQ4GFZ19gUGje0NUleQ7Szwm/KwIi3BIzUiJSLeP12j0f2vSAl2BfR316a7XzVhM9RyThC4Wv88v390fQCkoiuHzryzKo7W7n/5A4shmZL69Hsvfa/XPxAFmunp4kJlTWmTaIK9Rj64fbKj1dfRY8/bECviOK7YGejV39SX8rAiLcGjNSAldWUagN/ipbQ1fnTEWTTLsBHx1zOvmnLI/1N+IfwL0TUA1tBo7e/sBYrp9Km3xP5zE/D4RouBhCmREANLj1Ev39+33Xl66MG4fbwl93zrTit0Y8U+APp//0I5v77HEP1bAd1yRJf6HkprcTU/KZYT17Vmtdn0aRUHXgkE6e1q6LHA/DOYzAd9RQvjG9He2T2dvyO0Ty/LPBeBwZzJuH1c7NPl9dC6eo0uEdY4i12XcZNaUFpGvujHinwBtbp8hXiEdtuWfyOd/uHNobh9P5/bRmu0TvR2e1OcDt4/3c1fpQWsPz5knTF8b3BjxT0B40i1/Z0M4ln8st09xHtlZwm57qcd46BLhyACkPgHWNZpb5zXmtR4FNbl9whO7mQXcjfgnIPSDef+0HlreeYfj84/u9snPyaamNJ99rYlH+boDUtomdtOYcaPLxef1NRY5t4/HdWvWPx0CrHS5EWJgxD8B4VF5XtcbfTsWYZ9/7EHb5UV5NCfh89c14ZeuFFPQnOevySKMeNhkSJxD52jqsCHpD/U34p+A8EWqzyeaTM3tCSx/gIrCXFq6hpjqmUTd6UJv3rnGunUN/tHp8w+lPWpydelw+6gBr7ox4p8IbQFf93bi2jt7+8nJEvJzYv+kFUW5SWX76BJhnbN6+sHt473ffXAbvEJfIoXHFUbUrekhHwMj/gnQF4wbmgukoydAYZTF292MK85LKs9fmwhrDLrqTXvUc43pXDlN28h5H+T5G7fPKEGfbzK8nczF0trdR1lBbtxjxhfncbizl0ACZdWV+RLpevHa+tYXb9A11a/ebB+7Xk1uHx0PgfDCUP7AiH8CdA3MGGomRlt3P2WF8cV/XHEeSiXO9dflAtE79N7dDq8tcPvV01oj69Pl89cV59BxrTl1+kT9jfgnQNsyjkOsrrmzl7KC+MszjLcXck/k+tEV/PTLXDPeW8H63T7asn28rdZl+XuPM7ePcfuMDsJ+Ov1tiMfOg51MG1cU95jxJdYo30Rr+eoL+IbxfsSpvsyXcL3e1qf1gRfU9MDTNGgzog3+0H4j/smiddBRglvzYHsPTW09zKwuiXtclW35H0ywlq8aQt3pRGm0/LXmvPsgqUBXyqWubB8dxpwuL0IsjPgnIHxT6HP7JLpQf/bMNgBmVCWw/IuTtPxjtGOk0WmJEvHA8xZtQuje1mTc6Fyu02v84EVwY8Q/Abp+sKFkvuw61AnAWUfXxD2usiiPLEnG8g9v61toxGt3gLtuT6sOf8dae5d60JtIoaenNWbcPiIyVUSeFpFNIrJBRD5jl39DRHaLyBr73wWu99woIvUiskVElqbahpFEl49QDeHGbGrv4aSZ48mLM8ALICtLGFecz8GO+Ja/tpW8fOCDBn0zXOpcREabEHpaa2SF+kaR+0P946eHJEc/cINS6jURKQVWi8hKe98PlVI/cB8sInOBy4F5wGTgCRGZrZQKpKEtacfvXXKlFDsPdLBs/qSkPreqJI+mtuQtf33ZPhotf09rdvn8NdVrbXtbtx96O0GlyPJwmocx5/ZRSu1VSr1mb7cBm4Apcd5yCXCfUqpHKbUDqAeWpNqOkUJbnn+SQrivtZvDnX0cVRM/2BuiqiSx5a+ra6zT9aLVCg4OboMn9eq0gh0h1Njb8bRmfYH9WKTV5y8idcAi4GW76JMislZE7hGRSrtsCrDL9bYGYjwsROQ6EVklIquamprS2dQhoCcwlaz1vWVfGwBzJpUl9bkVRbmJZ/bUdIMMxdWVbnSOMfDDWBJdM4rqCq6DPrePP6Q/jeIvIiXAA8BnlVKtwJ3AEcBCYC9wW+jQKG+P+n0ope5WSi1WSi2urq5OV1OHhK4uWrJuiLcOWsHeGdXFSX1uZVFeEiN8XXV7me3j3vZBVoZX6FozQu+gOj1W8FBSqEeq7jHj9gEQkVws4b9XKfU3AKXUfqVUQCkVBH5B2LXTAEx1vb0W2JOOdowE2hbXTtIN0XC4k/ycLKrtHP5EVBbl0tLVFxHgHFS3pgFPOrOMdFrBuhb5cFfnfcqlHiHU2sNz3Hv+UP90ZPsI8Ctgk1Lqdle5OwJ5GbDe3n4IuFxE8kVkBjALeCXVdowU4a6avmyfeDfI/tYeJpYXxJ3N0015kTW/T2t3bNeProCvznyIzHT76Pu+demfH3o7fiEd2T4nA1cB60RkjV32ZeAKEVmIdV3tBD4GoJTaICL3AxuxMoWu92umD4RTAN1LG3pSb5KW6J7mLmpKC5L+3Moia/K35s4+KoryYtStp2scOco2c7J9dM3qqe8hP3givWSNl1QJuJco1RTn8MvcPimLv1LqeaL78VfEec+twK2p1u0F2iz/JKKuPf0B1u1u4b9OnJ7051bY4n+4s5c6oscJdGmw3kwM97YuF4g+/7fX3/jANFOvFnLXmd4aGGuDvMY8mqyyZDJuNu5ppac/yDvqKmMcMZiQtd/cFSfjR1vA1+Xq8tgZHJn/7WnVPpnS2du6dc0rFNA5mM+I/+hC34pDg9swkM12mufcSeVJf25VsRUYbmqLneuvy+2j0/KPRM+DR9tAKw116+pz+GIBG58kexrxT4DTVdOZgx2j6s17WynOy6a2sjDpz51UUUB2ljjzASWq29OVvDT6oH0x2nVAO0YaP+T5D2zHSKPV7ROKH/pD+434J0Lf6MvEmRib97Vx1MRSsrKSd5jmZmcxuaKAt+OJv3vbwxPXOdGYHyxCyBwh1NW7DGjsXuqa0iIWRvwTELb8vSUZAd6yv42jJiY3stfNtHFFzuCwaPhjtkd9PS1dvmDQ5wLRes4eVq33nO1Xn6i/Ef84KKVcXTV/3RwdPf00d/YlXL0rGjOqitnW1B4zqKor80WvD1qnFexqhy63j6Ygt9d1u695ryXYuH1GEX6YByRW3aEFWapLkxvZ6+bY2grauvvZfqAjYe1enncg4sbMDB+0VZ8uy1+fCukbS6InvuKu2y+DvYz4xyGg0UqITPUcXHtI/KtKog/UisfRE0sB2N7UHnW/Lv+3X0ZfZsqDp981clFvb8fLevXd0z5z+Rvxj0dQY784kRCGUjWrkpzTx01NmTUieH+MdM8I/7eHfdTI0ZfeEvGg1xj8zLScd6/rjrjGvM72cQbzeVtvLIz4xyHy5vC27kQByBZ7kFZl8dAt/6qSfLIEGlu7o9etaY4dnWKkU/x1eQH6A/qs4H5Nvepk18kYCcLZPv5QfyP+cejX6INWMbZDtHX3A1BaMPQZOrKzhOrSfPbHEH9fdMm9tsq0xht8EGPx+AuPePB4ec6a3D5KKeP2GU0EtVqD8etu7epDBEryhjc9U01ZAftbY7l99IhCQGN/uN8nbh8vHzzuc/b6u+/T5ONzn6aX56wzxTQWRvzjEIjwS3pbt4rzF0Brdz8leTlDGuDlZkJpQUzLP37NI0fAD11yvL85I4XBu3rd4tfb7+20tf2aXHxBTQ88nb3aWBjxj0NQY7c40Xz+bd39lBXmDvvza8ryaYwR8NV1oeoccapLjEDfdea2vns0ir+uuFK/EX9DLLy8OAaSKNGorbtvWP7+EDVlBRzq6KWnf/BSCrrmfHF7AmJ99Z//8xo+8PMX6Q+kV6zcAtwX8PZ379MkhF19AfJzLAnwXPwD7jRT786611Vvuq+heAQjrm1/qL8R/zhozQCJ2B5ceWdvgKK87GF/fmhw2MH2wev5RmYaDbuKIZMo6Lp1fxt/e303L+84xBsNzU55S2cfP35iK21xVicD6O4LsLelK+o+nf7vSCH0rt7O3gCV9hTf0YyAkcQd8E331/29Rzfzt9caou5zn6eXD3m/CL4bI/5xcFsJWteUjVJ1d1+Agtzhi39ofEBosJgbXaMgE3WNH3ojvNTz2oYWZ/tbj2zkh0+8ydm3PeukwEbjE/e+xkn/+xTdfYOFzu3z7vPQIhxYX7q/b6VUTAu3szfgLO7jvc8/XF86H7ZKKX72zDY+f/8bUff39AXJs3s7Xj7k+zQ94ONhxD8OXb2WSOTlZEXOBugBieaa6e5PVfwtiy+a+CdKMx0pEo2o3nWokykVhVSV5LFhT6tTvse25hvbenjuzaaon/381gM8tbkRgI17Wwft73I9EPo9dvuMZNrjdb9fzbIf/3tQeSCo2LS31YkbdUV5II4k/SMUbHY//KP1BHv6gxTbPeY+D9dmdZ+jX3oBRvzj0NFj5dJXFOY6DwKvSJQa1t0XpCB3+D9fyO0TdVGXiF6HLst/cL17W7qZXFHA3MnlEeJ/uKOP02ZXk5+TxetvNw96H8Bbh8LzGL321uFB+62elPV9eh3rcYtQumteuXE/9Y3tg6zcxzbsA+DICSUAfO3BDWmuOT69/eHrtzeQvnur4XDYrffVf6wftL+nP0CRnR7tPnakccdUYv3Gdz6zjSc27vemQWgUfxFZJiJbRKReRJbrakdbdx//99TWQeIeCCo+cPdLgNU93tvS7ekPk0h0u/sCFOQM3/KfYC/6vq8lkdtn2FVE5f+e2sqFdwy2RCFxjGVvSzcTywuZN7mMrfvbHP9tS1cf1SX5HFtbzppdg4UdiPh9b12xaZDvv7M3QGmBZQX3j4BFuHLj/pgjqt1WYTQXzeGOXs69/Vk2RemxxMN9zm8dDD/8+gJBvv7QBvJzslh+/tEx379+dwt1yx/hwTW7h1RviNffPsyzMXpi7T39jLPjDb39g3/sF+oPULf8EXbGnHwwOs9saXS2D3f2RXyfXb0B9rf2OIkSn/7T61E/46dP1/Pw2j1R98Wjtz/I0h8+x8ooOhEh/lEubqUU3310M9f+blXM6yTdaBF/EckGfgqcD8wFrhCRuTracv+qBn7w+JvM+dqjvLrzkFO+w3XRdfRaPYCQteRGKeX0EEaK6D7/IPkpuH3ycrIYX5zH/rbBF1qE2yfN4v+Dx99kw55WfvPCjkH74gV8+wJB9jR3MW1cIXMmldEfVHz2vjWAtRh9ZVEu8yaX8/qu5qjzEe1v7aYgN4tbLp2PUnDS/z4Vsb+jp58yWxR6+tIr/l29AT76u1V88JcvR93f3t1Pue1+iZZ1851/bWZrYzvfXrFpSPX+5j87ne07n9nmbP/kya00tfXwvsW1lBXkMqWiMOoC6lf8wjJ+PmN/z0Pl0/e9ztX3vDLItRi6Z0JTk/RGeeA9YAds/7J615DqfGm7dQ8fN62C595s4tP3WQK/61Anc772KABzJ8VeA+OVHYf4/mNb+OQfoz8Y4rHjQAdb9rfxmfsGvzf0gM/LzooxS2848WLFur1Drns46LL8lwD1SqntSqle4D7gEh0N+dMrbzvb77vLSiHs6g1wzu3PAvDYZ0+j0BbZwijZNT9+cisLbn6cxigimgqJ0i17XG6K4VJTVsD+lsHtHqk5dtyi/EDL6gYAACAASURBVI1/bhy0v7s/dlBsT3MX/UHF9PHFLKytAOBf6/ex80CHE7g8amIpSkUKxu2Pb6Fu+SP86vkdHDmhhDNmV4fr6wuglOK9d/6HzfvaHFfYDX+JHixs7uyNGixOxD7bktva2B5hVIDV8+zoDTgxmGifH4ppDNXIqG8Mz9r6l9UNzsPj6S1N5GYLnztnNgAXL5xMTpYMskgn2hMADqfu3v4guw5Z7X51x6GIfV19AYIKJ9Moms+/1fbdP7Yh+d52IKjY3dzFOXNqnEyeFeusa+TU7z0NwOXvmMoVJ0yL+Rn/cPVy4iUPROMbD1mus87ewKDvMtRLLcjNiupW3HU4vLjS24e8cUfpEv8pgPuR3mCXRSAi14nIKhFZ1dQUvfuYCoGgirhBANbvaeX4b610/p5dU8JNF1mdkqwo5tGPnthKf1Dxu/+8lda2uQU/mgs61YAvWAO9oln+IzWV9csDRGCg66XHJXwDfdT/tDN9jqguZtr4Iu7/2EkAnPGDZwAre+nShVPIy87ipgc3cNZtz1C3/BHueKoesL7Ddy+qZeq4Iv733ccA1oP76JseZZUdA1g4tTJm23cd6uSd33kq5oMhHp91WYI/fzZsgff2B1n2I8sFFrq2bo1i3W9vsh4YaxtaBrkEtjW1x3wgbdrbyqmzqvjx5QsBuPu57Ty2YR/rdrfwyTNnMd7O+BpfnEdfQNHaHRb4YFDRcLjLWR/6zf1tQzrn/3tqq7P9s2e2OWtGt3T1MfdrjwHWbwnwg8e3DHr/RjumU9/YTnsSD57ntx7giC+vYMeBDhZOLef6M4909rmvke+851gWT7d+52jjZFbvPEy2PWp+bUP0+FEsXtx+0NkeGE/Yur/dacO+KAZXSIdK83PYuLdl0P6RQJf4R5uTYJDOKKXuVkotVkotrq6ujvKW1Aj5Qa85ZQZfXHYUAJf+9AU6bV/pUzecjohwxZJp1FYWOtZIiJ7+gNNdfnzjYJdQKrjdzgOtiEBQ0RdQKfn8ASaWF0S9EEdqfMP63dZF/a1L5wODXS8hESvIzRrkCljb0EJutrDIFuglM8bxww8scPafMHM8hXnZ/Pyq4+ntDzqCCXDqrCq+csEcPnJyHQAXHjsJsFwhITfLF5cdxQ3nzXbeM9B19MyWRjp7Azyydu+Qg+Bv2GmpsyaURLgWf/Hv7exu7nLOx6on0sjp6g2wu7mLdy2YTH9QsXJT2BL+7qObOfu2Z7lpQGBTKcXrbx9my/42jq0t55KFU/j02bMA+NjvVwPwwRPD1u842/1yqCPseli/p4WuvoDzXQ00khKxzf7+l8wYx7rdLY7l/cjasEvjv06cDliuFjfNnb3saenmHXXWb/2P1xPHHH5tuxEvXTiZa0+dybL5E7nSZeEvnFrBH65dAoCI8NFTZwxK6W3v6efNxjauPqkOESKSB3Ye6KBu+SPc5/IUuBn4AL7l4Y3OdfLS9oN88YG1gJWR1hsIRsQmwLo3SvNz+MA7pvLaW81JPfBSRZf4NwBTXX/XAkOPsKRAZ28/Z91muXbetWCycyGGOHduDdPHFzt/jyvO41Bn5ICoXYe6UMra13C4K62ZMfHSLd0imQqTyws50D7YlTESsz1u2tvKz56pZ1J5AcfWlketq7W7n/ycLIrycga5Arr6AsybXB4xl9Fli2rZ9M1lPP+lM5lRZf1WZx49gf86cRonHzmeN791Pv/+4pn8/poT+OhpMxH7SV1WEJ4W467/Oo4nbzidT5xxJLnZWXzqLMtiPNgR+Vtvcz1MdsZZ/3ggoe7+BcdM5H2La9nW1MGTm/bT3RfgJ09t5djacrbeer7zYBpIKEvpvLk1zKwu5ufPbmf1W4d5enOj48f/y+qGiMFLf1ndwGU/+w+BoHJ6M1Mqwi6cixdMjlgHIiT+oZ5YXyDIxf/3gtXu+ZPIy86iPsbCP7HYdbiTk2aO56SZ452yvkDQsY7/cM0JzKopZUndOKd3EWLTXquX8eF3zgAis7P2tnRx5S9eYvZX/sVWuzdy78tv8eTmRs4+egI/unyR0yN+96IpTKko5Pkvnck/rj+Zo13rXZcX5tLdF4y49tfuakYpOG12FXMmlvHgmt0cbO+hqzfAuT+0tGL539bZM3Qq1jW0oJTitbcPc/RNVjzhe+85FoDHN+53YoTLbeEHyMm2rsGBD7wdBzqYUV3MWUdPoDcQHOQqGwmGPz9AarwKzBKRGcBu4HLgypGoqD8QpDcQdNK7Qrznzhed7bmTypyBHwCbb1k2yKVSUZTH4QGCsG63ZRmcMbuav72+m4MdvcNaXCUa8ea5CYt/apb/5Arrptvb0u2IJ6R/2ttDHb2cb+eanz67gtk1pc6+Pc1dTLXXIb77ue1UFuWSl501yCrr7gs4sRc3hXnZ1OZFrmP8rUuPcbanxljj+OFPncKmva0smz8ponzeZOvBtL+1O2KJzG1N7eTnZNHTH2TNrsMR31cs9rd2c8b3nwEsY+KcOTX89j9v8T9/eYPDnVYv8sJjJpGbncWRE0q58NhJrN4Zma0UynaZPr6I6884khv+8gbvufM/g+r63qNbuOmiubR09fHFv4bF5pQjq4BwdhfAjz6wMOK9x9ZWUJCbxQOrd/POI6ocl0ttZSELplYwZ3IZL9QfcI7v6Q+wdX87RXnZzKwuGdSWZ99sYm1DC9efeQQXHDOJHz9puYCOv2Wl41o6ZZbVrkXTK1jzfDNKKefhHBqH8Y4Z1oPrb6/v5ppTZ1A3vjiit/j9x7awrandeTAvnFoR0Y7FdeN4YflZg9oHUG7HG1q7+pz7aIv9MJk3uZxz5kzgjqfqOf5bTwx678Nr97LjQAe3r3wzory6NJ+z50zg0oWT+ceaPTy8di8FudnsPNhJYW42G25eysa9rVz0k+cpGeBy2nGgg+OmVbLAPodbHt7IomkVtHb1M3VcofPdpBMtlr9Sqh/4JPAYsAm4XymV9kTj/kCQ+d94jJ89vW1QeSht7nvvOdYR/s+dM5uvXTQ3qqhWFecNmgJ5bUMLedlZTtc4Wv74cInMuImU4FBgNFXLf4ptce1pjvRPptvtc64dPAf40EnTKcjN5s/XnQjgrCMcErmTj6xiX2s3969qiEjTS3Vcw0DmTynnfYunDiqvKbMEf2AAf1tjO+fNm0h2lrCtMXH6YSCoeHDNbmfw1PTxxZQW5HLdaTMd4Qf4oKvHOX1cEQfaeyJcTut3t5KdJcyaUMrZcyZE1HHHFYvYfMsyygpy+NXzO/j1CztYcPPjzv7NtyxzkhROm13NLz+0mK23nj9oJthxxXmcN3ciz21tQinliO8fr7V+o4sXTGb97lb+8NJbKKW48YF1XPST5znrtmcdX36I5Q+s5ep7XgHg+OmVHDWxlPvs3zok/Ke7gu6TygroDQQjXE6rdh6ipiyfCaUFXHOKZf1feMfzzPv6YxF1Pb5xvyP8R04o4aOnzRz0O8Sixn6w73L55rc1tVNWkENVSR5HTBj8UPvJFYs4orqYT/3p9UHCf/GCybz6lXMYX5LPjy5fxMKpFbzR0MyHf/0qALe9fwFZWcL8KeXk52TR7LoGevoD7Gnuoq6qmOJ866Gw/UAHC7+5ktO+/zQzblwxrESDROiy/FFKrQBWjGQdOdlZTCov5LW3w6L84raDTgobwLuPC8eZP3POrJifdWxtOX97fTf1je3OwJjGth5qKws5dVY1UyoK+faKTZw7tyYtT+l4i3qny/KfYlv+u+OIf6rZPu09/Y4LZfH0Ss6eUwPADDvYd/29rzGrpoT6xnayBG68YA4P237hvS3djuXe3ReImm2VbibYGS6Nrgd9R08/e1q6+eDEUtbsOszbAwTv/lW7yBbh3cdNcX77D//6Ff691bKWL1k4mXmTLZfD+fMn8vWHNrCkbhz3f/ykyLpL8+kPKg51hnuQbzQ0M7umlMK8bArzsnn4U6fQ3RfgyAklVNjW61P/cwaLv/UEN9sZVJ8660g+d87sCJHPzhLOmVsT87zfUVfJQ2/sYVtTBxv3tFKSn+O4Yy5eMJlbHt7IV/+xnsLcbP7m8sHf+sgm3nt8LaveOoxCcd+r4TyO46ZZlru7p/enj57oxDcAJpaHe5/jS/LpCwR5eksjly2qBeCmi+byq+cj04JvumgutzwczhabNaGEX169eEj3w7wpVg9vw54WjrcDwNsaOzhiQgkiwumzq5k7qYz+YJDz5k7k4oWTmV1TytbGdu54MhzMvvDYSZQV5HDLJfMjPn/OpFL+9IrlGbjh3NmcP3+is69ygBdh16FOggpmVEXvpV6xZGrK93o0tIm/Vxw/vZK/rm7gmS2NnHHUhAjhX37+0eRkJ2dNnjO3hm/8cyPPvtnkiH9TWw9Vpfnk5WRx0YJJ/PzZ7dy/ahcfeEfsVDI3LZ19tPX0UVs5+EePt7hISPzz0xDwzcmSiAFAkN5sn/fdFXav3XhBeEBRyA3R3tPvBNaWzZvoPJDAyt8PiX9XioPakqXaFl13L2/zPssdcER1MdPHFbNlXxtKWUH3P73yNl+3U/xee/swt152DP94fbcj/NefeQRfWOo677ICVn/1nEHd/tA+sK+rknyCQcW63S0snRsWjvlTyge9r6oknytPmMYfX36bc+fWcMN5Rw35vM+bN5GbHtzgpDjPn1LmPDyqS/O584PH8d/3vuZkO5UV5NAbCPLohn08OmD8y8dPP4Irl0xzHk7jivO4/f0LmD+lPOJBADDN/n13Huxg/pRyO3spyIkzww+Ip244nVse3sili6Zw5tETKCvI5col05y8/cc/d9qQDa7J5QWML85jnWuOqG1N7U6vpKIojxWfOXXQ+06dVcUdT27lvcfXcuP5RzsZUwMJuZmPnljKp86ONCori/Mixj7sPGAZE3V2jPGfnzyFK3/xEm09/Xz1wjlce2ryPZqhMOand/jqhXMA+PCvX43oOt191fF8bAjdxNrKIqpK8vnZ0/X0BYKc8f2neWXHIccv/InTrUDhlx5Yx65DnazaeYjfvxQ//fPCn/ybU777dNR98eZ477YHIeWn6AbJzc6itrKQtwYEMBNNs9DY2k3d8keijnju7gtETBkRcq9t+/YFHD99XMSxt1wyL+Lv0MMhNPeK+wZJdVBbsuTlZFFVkufkXSul+Pmz28jLzuKkmVUsnT+RLfvbmHHjCi772QuO8APc+/LbbNzTymf/bA2K+vA76/jM2bMH1TG+JD/qgzvkcgplt2za10pzZx+L62KnoIa49dL5vLD8LO76r+OHftJYYz4mlYfjAu6gOFgxixDZWcLDnzqVe689IeKYaeOK+NhpM/nUWUcybXykQfPu42oHCT/AzOpisgTetFMhQ6/uY2dWl/DrjyzhkoVTnHYV5mVz6qwqTpgxblg9bRHLBRMaTNba3UdjW09Ud4+bxdMruffaE/jWpfNjCj/AdafNZM6kMu6+avGgfbNrShyDAqwHH4TF/5jactbdvJQNNy8dMeGHDBD/iqI83r3Icu3sdFm4Zx49YcgXzaJpFRzs6GXWV/7lZHxMsMW/vCjXcSGd+r2nee9dL3LTP9Y7wbOBtHX3ObnA0fx58RaPD+XDp8MSnlBWEOHigMRLGobm1bn2d6si2r5+dwtH3/Qo77j1CT7++9XOvv85b7aTO+3mqpPq+ONHT2DWhBI23LzUya56+NOWxeV+iPTECPiOBCfMHM9fVzfw0vaD7DzYyeMb9/PexbWUF+Xy3uNqneNC38P33nssnz/XEvkL7Kkrfn/NEr5x8byIRIJEhILNL2yzeg2P2wOc3D7yWIgIUyoKo37PyfLLqxfz1Qvn8KGTpjtjIULkuDKhfnz5QqaNL+L46eFMnW9dOp9nv3AGN14wx/FbJ0NBbjYTSgu448mt9PYHqd/fRpaQVED9l1cv5nfXLBnCGUYyZ1IZQQVv7Gp2UoOPiBLAdiMinHxkVUI3TE1ZAf/6zKmDHoJgBab3tnQ7Pe4dBzooL8x1RjyHGMr3OBzGvPgDfNhOowsNqLn1svnkJunucfNdO43Ljftiuf39CznVzmIIcUGMeWzucg322Rst1z7OCN/u/vSkeoJ1kQ4Mbkb0OqI4ftzLP3757+uc7XtcUzY8umGfE0sI+XWj8c4jqlj5+dMjLvTJFYP97l1pGNGcLIvsjIvL737Jmf/lg3bOeGFeNv+4/mTn2O3fvoD3L57K+wcEj0+dNfRxKQW52Vx5wjTW727l7ue2ce/Lb3PqrCrHHTTSzJtczrWnzuSbl8yPSHMO8flzZ/OHa07gwmPCGVIXL5gMWEI63FjXJPv3/uvqBt5oaKFufHFSPu78nOyUXJ//z9aFT/3pdV7cZqWgzkpg+aeD8+ZZbrzP/XkNfYEg9778NpVFw1+Vb7hkhPjPrimNsIiOieI3TYZxxXlsuHlpRJk7eAU4gZ/Q6EXAGbDhFlX3fPTbo+RQRwwyGqC/oRz4VH3+YPVc9rf2RLh3EmX7uLODQoOWlFLO9hVLLCE82x5H4XYnJEN+TjbVpfmsWG/5kvsDQfqDyjPL350FtM4emOZ+yC+cWsGmby5j4zeXOn7xieUFvPKVswGoi2LtJUuNHQv59orNHGjv4V3HTh72Z6UbEeGUWVURIv/xM47gp1cex3HTKuK8Mz4hV9WX/76OZ99sGpTVNFJMKCvgp1cex9uHOvnuo5uBcAxiJJlSUcgxU8p57e1mJxPupCOqErwr/WSE+BfkZlN/6/nOwhXRfI/JUpyfwy2XzOOKJVN5YflZgz6rrqqYnd+5kCdvOMOJN6zd1cyvnt/BzC+v4Nrfvkrd8kecgGBOlkSdBTBern0oAzKVLn6ImrJ8uvoCESMK++O4nAAamruoKcsnS8Lzv/zq+R3sOtTFd99zDF9YerQzVw1Y38lQOW1WNZv2tnKgvcdJlxyJjIdolBfmOum7IQbWXZiXPWjsyITSAn74gQX8+iPDd0VcsjBS7E+e5b0oDIWyAuu7SiXDraasgC8sDQepT0vCzZUuLjx2EnPsid6+euGcQWmwI8W1p1oprCH38fJlsWdXHSnGfLZPCBHhn588hb0t3SmLyFUn1SV13PuOn8q3HtnEa28f5o4nrTlmntgUHtb95+tO5LbH32RbFMs/Xrpl6MEwDM/VIGps8bamuh08pXG0gO+e5i6mVhZx6qxq/rq6gbrljzj7zj9mEmUFuTz/pbM45/ZnOeOo6ogMnmS5dNFkHnitgTf3tzGzyrK6R9oH6ubHH1jI1MointnSyOfOHRy0jUUoRXG41FUVs+Hmpfz06XpOPrJqWN/daOQTZxzBb/+zk8a2nmH3zIfLbe9bwKq3DvGhJO/rdHBsbWRPqVyD2ydjxB+s0Z6xRnyOBOVFuYhY0xjn2Up91YnT+cKyo5yshRlVxfx51S5reLfLQg7Gcb2E9kWbaG6ohLKVGtu6nRTWrt74C0/sbu5i0dRKx2IK8e3LjnHOqyA3m+e/FH10ZTKE3CxPb27k1m3WZGfF+d5Y/mAFOJeff3Tc+e5HiuL8HL6owRLUiYjwx4+eyJv725wUUa+YO7mMuZNjT/M8EsyoKubB60/mvXf9h8+fO/TU3HSQEW4fnYSEuzcQ5KJjJ3HLpfMj0uhCwa6lP3wu4n3x3T4hyz8dbp/BwdXuvvDi8AMX8ujqDdBwuIsZVcW857gpjtvn6Imljq8/HYQ+9xf/3uFk1SyKM+umYfRz5IQSLjhmUuIDxwgLplaw7htL+fjpI5fOGQ8j/iPMty8Lp8y554oJEUrjGziLZbw8/9CDIR2WfyhV1Z3B09UXcFwsL9QfjDh+W1M7SsFRE0upKMrjpS+fzc7vXMijnx36QJt4ZGVJxHzyP7/q+KhpcwbDaKYgN3tE5u1JBiP+I8yVJ0zjFnsK4+lRXE6LplU6i2q4l90LxJnYLZhGy78kP4fywtyIKXu7egMRqWfuGTZD8YkjPUiJe+6LZ1oDh06fydJ5ExO/wWAwJE1G+fx18YHFU6kozI2Y38PNdNui3d3c5YiquyMwMNc+HPBNXfxFhNNmV/OX1Q2cPaeGY2rLeXH7QU6bXe2MtjzY0cOk8kKCQeUs6TfdAys8LyeLZ/7nDM8yMAyGTMJY/h6Ql5PFuxZMjjmPUCgP/hP3rnas+niLqKcz4AvWXPEAH//Dak7+jjVl7gSXi+qgvb7ok5vDmUrpGGOQDEb4DYaRwYi/DwjNJ/Lm/nau/rU1HW68gVahXemw/AGWDeiR1JTl88VlR/HAf1uzTobm2HnJXojjic+flpZ6DQaDPoz4+4CqknxnyoB/bz3Ar1/YEXdmTSfbJ02Wf252Fi9/+WxnTdPffGQJE0oLqC6xeiS7m7t4/e3D/Or5HUwozefICcMfJGcwGPyB8fn7hIVTK7j/Yyfx/p+/yM3/3Ei+a0KwgYO8Qn9LGh/dNWUFvPG189jT0uVMMR2aY+crfw+vERua3MtgMIxujOXvI95RV+kMc+/pd4+yjTwu3ZZ/iKwsiVhbYGCM4sJjJyU9utlgMPgbI/4+QkS4/swjWVA7cHj7yGX7JOInVywC4AtLj+L29y8Y8foMBoM3GLePD/nNR5aw6JaVzt8jne0Tj3ctmMzSeROHNC+9wWDwP+aO9iGVxXksmzfRmSt94Mya6ZzVMxmM8BsMY4+U7moR+b6IbBaRtSLydxGpsMvrRKRLRNbY/+5yved4EVknIvUicofoGtvsc+666ngnuBprVk+TAm8wGIZLqibdSmC+UupY4E3gRte+bUqphfa/j7vK7wSuA2bZ/5al2IYxS2i1MfcUy2C5fbIEbXOCGAyG0U9K4q+UelwpFVoF5CUg7mTmIjIJKFNKvais2cp+B1yaShvGMrm2u8U9tw5YPQGvXD4Gg2Fskk5n7v8D/uX6e4aIvC4iz4rIqXbZFKDBdUyDXRYVEblORFaJyKqmpqY0NnV0kJttCXxvYLDbx4tgr8FgGLskzPYRkSeAaDOSfUUp9aB9zFeAfuBee99eYJpS6qCIHA/8Q0TmAdEUK9p6IdYOpe4G7gZYvHhxzOPGKvnZ1vw5fQMt/6Cx/A0GQ2okFH+l1Dnx9ovI1cBFwNm2KwelVA/QY2+vFpFtwGwsS9/tGqoF9gyv6WOf3JyQ5R8p/oFg+gd4GQyGzCLVbJ9lwJeAi5VSna7yahHJtrdnYgV2tyul9gJtInKineXzIeDBVNowlgkFfAdZ/kphtN9gMKRCqj7//wNKgZUDUjpPA9aKyBvAX4GPK6UO2fv+G/glUA9sIzJOYHCRY7t2Xt5xKKI8YNw+BoMhRVIa4auUijrLl1LqAeCBGPtWAfNTqTdTCKVyPl9/IKI8YLJ9DAZDipihmz7nNHuNXzdWnr8Rf4PBMHyM+PuchVMrEIlc3MW4fQwGQ6oY8fc55YW5KAVt3X1OWVB5M6mbwWAYuxjx9zkVhbkANHe6xd9Y/gaDITWM+PuciiJL/Fu6wuJv3D4GgyFVjPj7nJD4N7vFXykzo6fBYEgJI/4+p7wwD4Dmzl6nzEzvYDAYUsWIv88ZX2yJ/4H2sPgHTKqnwWBIESP+PqeiKJe87Cwa27qdMhPwNRgMqWLE3+eICNWl+TS19jhlxvI3GAypYsR/FDCxvIB9rWHLP6Agy1j+BoMhBYz4jwImlhWwryUs/kopso32GwyGFDDiPwqYXFFAQ3MXQXuKB5PnbzAYUsWI/yigrqqY3v6g4/oxPn+DwZAqRvxHAXXjiwHYeaADMNk+BoMhdYz4jwLqqizx33HQEn/j9jEYDKlixH8UMKmsgPycLMfyD5hZPQ0GQ4oY8R8FZGUJ08cXseOAtUyymd7BYDCkihH/UULd+GK2N7UDJuBrMBhSJyXxF5FviMhue/H2NSJygWvfjSJSLyJbRGSpq3yZXVYvIstTqT+TmD+lnO0HOmjt7rMDvrpbZDAYRjMpLeBu80Ol1A/cBSIyF7gcmAdMBp4Qkdn27p8C5wINwKsi8pBSamMa2jGmWTC1AoD1DS0ElbH8DQZDaqRD/KNxCXCfUqoH2CEi9cASe1+9Umo7gIjcZx9rxD8BC2rLAVjT0Gy5fYzP32AwpEA6nAefFJG1InKPiFTaZVOAXa5jGuyyWOVREZHrRGSViKxqampKQ1NHLxVFedSNL+KNXc0EFWQby99gMKRAQvEXkSdEZH2Uf5cAdwJHAAuBvcBtobdF+SgVpzwqSqm7lVKLlVKLq6urE57MWGfB1ArWNrSYPH+DwZAyCd0+SqlzkvkgEfkF8LD9ZwMw1bW7Fthjb8cqNyRgQW0FD67ZQ06WsGTGON3NMRgMo5hUs30muf68DFhvbz8EXC4i+SIyA5gFvAK8CswSkRkikocVFH4olTZkEsdNt7xq/UFFjrH8DQZDCqQa8P2eiCzEct3sBD4GoJTaICL3YwVy+4HrlVIBABH5JPAYkA3co5TakGIbMoYjqoudbeP2MRgMqZCS+Culroqz71bg1ijlK4AVqdSbqZQW5DrbRvwNBkMqmKFCo4zZNSVA9Mi5wWAwJIsR/1HGNafMAGCva2Uvg8FgGCpG/EcZUyuLAGhs60lwpMFgMMTGiP8oY3xJPgAtXX2aW2IwGEYzRvxHGWWFVozepHoaDIZUGKm5fQwjxMSyAm44dzbvWjBZd1MMBsMoxoj/KENE+NTZs3Q3w2AwjHKM28dgMBgyECP+BoPBkIEY8TcYDIYMxIi/wWAwZCBG/A0GgyEDMeJvMBgMGYgRf4PBYMhAjPgbDAZDBiJKxVxC11eISBPw1jDfXgUcSGNzRgPmnMc+mXa+YM55qExXSkVdAH3UiH8qiMgqpdRi3e3wEnPOY59MO18w55xOjNvHYDAYMhAj/gaDwZCBZIr43627ARow5zz2ybTzBXPOaSMjfP4Gg8FgiCRTLH+DwWAwuDDibzAYDBnImBZ/EVkmIltEpF5ElutuTyqIyD0i0igi611l40RkpYhswUlrXgAABAdJREFUtV8r7XIRkTvs814rIse53nO1ffxWEblax7kki4hMFZGnRWSTiGwQkc/Y5WP2vEWkQEReEZE37HO+2S6fISIv2+3/s4jk2eX59t/19v4612fdaJdvEZGles4oOUQkW0ReF5GH7b/H+vnuFJF1IrJGRFbZZd5e10qpMfkPyAa2ATOBPOANYK7udqVwPqcBxwHrXWXfA5bb28uB79rbFwD/AgQ4EXjZLh8HbLdfK+3tSt3nFuecJwHH2dulwJvA3LF83nbbS+ztXOBl+1zuBy63y+8C/tve/gRwl719OfBne3uufc3nAzPseyFb9/nFOe/PA38EHrb/HuvnuxOoGlDm6XU9li3/JUC9Umq7UqoXuA+4RHObho1S6jng0IDiS4Df2tu/BS51lf9OWbwEVIjIJGApsFIpdUgpdRhYCSwb+dYPD6XUXqXUa/Z2G7AJmMIYPm+77e32n7n2PwWcBfzVLh94zqHv4q/A2SIidvl9SqkepdQOoB7rnvAdIlILXAj80v5bGMPnGwdPr+uxLP5TgF2uvxvssrFEjVJqL1hCCUywy2Od+6j9Tuzu/SIsS3hMn7ftAlkDNGLd0NuAZqVUv32Iu/3Oudn7W4DxjK5z/hHwRSBo/z2esX2+YD3QHxeR1SJynV3m6XU9lhdwlyhlmZLXGuvcR+V3IiIlwAPAZ5VSrZahF/3QKGWj7ryVUgFgoYhUAH8H5kQ7zH4d1ecsIhcBjUqp1SJyRqg4yqFj4nxdnKyU2iMiE4CVIrI5zrEjcs5j2fJvAKa6/q4F9mhqy0ix3+7+Yb822uWxzn3UfScikosl/Pcqpf5mF4/58wZQSjUDz2D5eStEJGSsudvvnJu9vxzLPThazvlk4GIR2Ynlmj0LqycwVs8XAKXUHvu1EesBvwSPr+uxLP6vArPsrIE8rODQQ5rblG4eAkIR/quBB13lH7KzBE4EWuxu5GPAeSJSaWcSnGeX+RLbl/srYJNS6nbXrjF73iJSbVv8iEghcA5WrONp4L32YQPPOfRdvBd4SlnRwIeAy+3smBnALOAVb84ieZRSNyqlapVSdVj36FNKqQ8yRs8XQESKRaQ0tI11Pa7H6+tad9R7JP9hRcnfxPKZfkV3e1I8lz8Be4E+rCf+NVi+zieBrfbrOPtYAX5qn/c6YLHrc/4fVjCsHviI7vNKcM6nYHVj1wJr7H8XjOXzBo4FXrfPeT3wNbt8JpaY1QN/AfLt8gL773p7/0zXZ33F/i62AOfrPrckzv0Mwtk+Y/Z87XN7w/63IaRNXl/XZnoHg8FgyEDGstvHYDAYDDEw4m8wGAwZiBF/g8FgyECM+BsMBkMGYsTfYDAYMhAj/gaDwZCBGPE3GAyGDOT/A+o90EJ/UQReAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.plot(r)"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import pywt\n",
"\n",
"\n",
"def calc_baseline(signal):\n",
" \"\"\"\n",
" Calculate the baseline of signal.\n",
"\n",
" Args:\n",
" signal (numpy 1d array): signal whose baseline should be calculated\n",
"\n",
"\n",
" Returns:\n",
" baseline (numpy 1d array with same size as signal): baseline of the signal\n",
" \"\"\"\n",
" ssds = np.zeros((3))\n",
"\n",
" cur_lp = np.copy(signal)\n",
" iterations = 0\n",
" while True:\n",
" # Decompose 1 level\n",
" lp, hp = pywt.dwt(cur_lp, \"db4\")\n",
"\n",
" # Shift and calculate the energy of detail/high pass coefficient\n",
" ssds = np.concatenate(([np.sum(hp ** 2)], ssds[:-1]))\n",
"\n",
" # Check if we are in the local minimum of energy function of high-pass signal\n",
" if ssds[2] > ssds[1] and ssds[1] < ssds[0]:\n",
" break\n",
"\n",
" cur_lp = lp[:]\n",
" iterations += 1\n",
"\n",
" # Reconstruct the baseline from this level low pass signal up to the original length\n",
" baseline = cur_lp[:]\n",
" for _ in range(iterations):\n",
" baseline = pywt.idwt(baseline, np.zeros((len(baseline))), \"db4\")\n",
"\n",
" return baseline[: len(signal)]"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAX0AAAD6CAYAAABNu5eFAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAgAElEQVR4nOydeXxM1/vHPyeRiBBL7EmQqDUSYtdSjV1R1dL+tChVdNPybam9FG1VddNFVatoVSlttbaiqKqiQWyxJAiSWLIQEkkkmef3xzM3M0lmyTJz72TmvF+ved07d869zzn3nvs5z3nOuXcEEUEikUgkroGb1hmQSCQSiXpI0ZdIJBIXQoq+RCKRuBBS9CUSicSFkKIvkUgkLoQUfYlEInEhrIq+EKKeEGK3EOK0EOKUEGKCfruvEGKHECJav6ym3y6EEIuFEDFCiONCiDZGxxqpTx8thBhpv2JJJBKJxBTC2jx9IURdAHWJ6IgQwgfAYQCDAIwCkEJEC4QQUwFUI6IpQoh+AF4B0A9ARwCfEFFHIYQvgAgA7QCQ/jhtieimOds1atSgwMDA0pZRIpFIXIrDhw8nEVFNU7+Vs7YzEV0FcFW/fkcIcRqAP4BHAYTrk60EsAfAFP32VcStyQEhRFV9wxEOYAcRpQCAEGIHgL4A1pizHRgYiIiIiCIUUSKRSCQKQohL5n4rVkxfCBEIoDWAgwBq6xsEpWGopU/mD+CK0W5x+m3mthe0MU4IESGEiEhMTCxO9iQSiURihSKLvhCiEoANACYS0W1LSU1sIwvb828g+oqI2hFRu5o1TfZOJBKJRFJCiiT6QggPsOCvJqKf9Zuv68M2Stz/hn57HIB6RrsHAEiwsF0iURUiIDQU+PFHrXMikahPUQZyBThmn0JEE422vw8g2Wgg15eI3hBC9AcwHoaB3MVE1EE/kHsYgDKb5wh4IDfFnO127dpRwZh+dnY24uLikJmZWdyyuixeXl4ICAiAh4eH1lnJIysLSEwEAgLUt52dDXh6Am5uQG6u+vbVJjsbWLECeO45LrPE+RFCHCaidqZ+szqQC6AzgBEATgghIvXbpgNYAGCdEOI5AJcBPKH/bQtY8GMA3AXwLAAQUYoQYh6A//Tp5loSfHPExcXBx8cHgYGB4PZIYgkiQnJyMuLi4hAUFKR1dvJ45hlg3ToWpHJFqYU2RPFzdDp17WrFwoXAzJl8np99VuvcSLSmKLN39sF0PB4AephITwBeNnOs5QCWFyeDBcnMzJSCXwyEEKhevTocbVD81195mZurvui7itgrJCXx8tYtbfMhcQzKZGdPCn7xsHa+srMBraJlWvydg6uJvhbnODsbWLQIuHdPfdsSy5RJ0ZfYlg4dgAoVtLGthQBrKfq3bwPJydrYVtNX+uILYPJk4MMP1bMpKRpS9G3EmDFjEBUVZfPjVqpUyebHLEhkpPU09kKLgVQtRb9BA6BGDe3sq8Vt/aTutDR17SYn87jFnTvq2i1LSNG3EV9//TWCg4NLtO/1664bb3U1T1+L66xFeEexqXYk9pNPeKbSp5+qZzMzEzh2TD17pUWKfglIT09H//790apVK4SEhGDt2rUIDw/Pe2XEN998gyZNmiA8PBxjx47F+PHjAQCjRo3Cq6++igceeAANGzbE+vXrAQBnz6ahV68eaNOmDUJDQ7Fx40bNyqY2rib6WqKmACuir9UUUTV7kOPHA2FhQHy8ejZLg8rzJmzLxIm2D02EhQEff2w5zbZt2+Dn54fNmzcDAFJTU7FkyRIAQEJCAubNm4cjR47Ax8cH3bt3R6tWrfL2vXr1Kvbt24czZ85g4MCBGDJkCDw9vfD++78gPLwykpKS0KlTJwwcONAlBqyl6Dsnyjl2gSoM5VGixETAv9CLZRwP6emXgNDQUOzcuRNTpkzB33//jSpVquT9dujQITz00EPw9fWFh4cHnnjiiXz7Dho0CG5ubggODsb169f1WwlffDEdLVu2RM+ePREfH2/0m3PjajF9V0Gr8I4WoSzlmcecHPVtl4Qy7elb88jtRZMmTXD48GFs2bIF06ZNQ+/evfN+s/aEc/ny5Qul3bp1NW7eTMThw4fh4eGBwMBAl3niWAsB1kIYtMSVYvoKWtgtK/VKevolICEhAd7e3hg+fDgmTZqEI0eO5P3WoUMH/PXXX7h58yZycnKwYcMGq8dLS0uFr28teHh4YPfu3bh0yexbUZ0OGd5RDy1i+q4Q3ilrZSzTnr49yc4Gbt4EatYsfFFPnDiByZMnw83NDR4eHliyZAkmTZoEAPD398f06dPRsWNH+Pn5ITg4OF/4xxQPPzwMr732CNq1a4ewsDA0a9bMXsVyOKToS+yBlr0bR0eKvhkuX2bR9/YGCk6V79OnD/r06ZNv2549e/LWn376aYwbNw45OTl47LHH8sI/K1asyLdPmn4Sc9WqNbB8+b9oZ+L1SGlqT3RWGRnTtz+uGN5RE6WMZUX0ZXjHDMqgTEku5Jw5cxAWFoaQkBAEBQVh0KBBts2cEyE9ffVwpSmbrtDYlBTp6duBRYsWaZ2FMoP09J0TV5qyKT19iaQIKDeIfOGac+JKUzal6EvKLK4iwK4m+jKmb1+k6EvKLGpWWi3/yMTVRF/BlaZsqmlXsVVW6pUUfUkervKgVFm5OSUlR9Yr80jRLwGxsbEICQmxy7H37NmDAQMGAAB+++03LFiwwC52TKFmpZWevnpoGXZwpfBOWfm/ZTl7xwyOEJ8bOHAgBg4cqJo9VxFgVxN9BVcQYC2Q4R0XIScnByNHjkTLli0xZMgQ3L17F3PnzkX79u0REhKCcePG5b1bZ/HixQgODkbLli0xdOhQAPx65tGjR6N9+/YYNqw1/vqr8OuUV6xYYfW1zADw/vvvo3379mjZsiVmz55d4jK5yvTJsnJzSkqOFg2c9PTVQKt3KwM4e/YsvvnmG3Tu3BmjR4/GF198gfHjx+PNN98EAIwYMQKbNm3CI488ggULFuDixYsoX748bun/RePtt99G9+7dsXz5cuzefQujRnXACy/0tGjT1GuZt2/fjujoaBw6dAhEhIEDB2Lv3r3o2rVrsYsuwzuSso6WUzbLiuhLT98M1jyFevXqoXPnzgCA4cOHY9++fdi9ezc6duyI0NBQ7Nq1C6dOnQIAtGzZEsOGDcP333+PcuW4nd2+fTsWLFiAsLAwPP98OLKyMnH58mWLNk29lnn79u3Yvn07WrdujTZt2uDMmTOIjo4uUZm1EH054GZ/HCFU6QqUlXpVtj19rd6tDBT6gxMhBF566SVERESgXr16mDNnTt7rkTdv3oy9e/fit99+w7x583Dq1CkQETZs2IAmTZri8GE+RvPmsPgefVOvZSYiTJs2Dc8//3ypy+QqXndZuTltjYzp2wfp6TsZ5ryky5cv499//wUArFmzBl26dAEA1KhRA2lpaXkxd51OhytXrqBbt25YuHAhbt26hbS0NPTp0weffvppnnifPXu0RPnr06cPli9fnvditvj4eNy4caNEx3IVAXYE0Zfet/NQ1gZyy7anryHNmzfHypUr8fzzz6Nx48Z48cUXcfPmTYSGhiIwMBDt27cHAOTm5mL48OFITU0FEeF///sfqlatilmzZmHixIlo1aol7t4l+PkFYtiwTcXOR+/evXH69Gncf//9AIBKlSrh+++/R61atYp9LDmQqx5E6nnesoGxL2XN05eiXwICAwMRFRVVaPv8+fMxf/78Qtv37dtXaFuFChWwdOlS6HSA0X+wIDw8HOHh4QB4xs6oUaMAmH8tMwBMmDABEyZMKH5BCiAHctXNg1ZvoJTYlrIm+rLaWcGVvCRXEWBHEX2Jc1FWrqkUfY1xpEZFvoZBPeQ/O9kHLd75Iz19FbD25+O2taWaKbtR1PMlY/rOmQctQ2nOcP8UFUeoV0XBqugLIZYLIW4IIU4abfMVQuwQQkTrl9X024UQYrEQIkYIcVwI0cZon5H69NFCiJElzbCXlxeSk5PtLvxqVVZ72yEiJCcnw8vLy2paVxFgR7g5XaWH4wjn2t6UNU+/KAO5KwB8BmCV0bapAP4kogVCiKn671MAPAygsf7TEcASAB2FEL4AZgNoB4AAHBZC/EZEN4ub4YCAAMTFxSExMbG4uxaLa9eArCy+oN7e9rOj0wFJSbx++rR9bHh5eSEgIKBIeVEbV7HpCHlwlVdnq43TiT4R7RVCBBbY/CiAcP36SgB7wKL/KIBVxG74ASFEVSFEXX3aHUSUAgBCiB0A+gJYU9wMe3h4ICgoqLi7FZsXXgD27gV++QWw51/cJiUBygs7te4Ku4oAO4IQuUq5ta7TalDW5umXNKZfm4iuAoB+qUwK9wdwxShdnH6bue2FEEKME0JECCEi7O3NFwV7X0hHqiiuIkSOcM6dPbxT1oSwNJQ1T9/WA7mmxszJwvbCG4m+IqJ2RNSuZs2aNs1cSXAl0dei0jq7+DlCHlzxmQhXrVdFoaSif10ftoF+qTz3HwegnlG6AAAJFrY7PK4k+q4iCo5wzp091KJVQ6OFXVfx9H8DoMzAGQlgo9H2Z/SzeDoBSNWHf/4A0FsIUU0/06e3fpvDI0Vf2rQHzu6JavkWVa3sOkK9KgpWB3KFEGvAA7E1hBBx4Fk4CwCsE0I8B+AygCf0ybcA6AcgBsBdAM8CABGlCCHmAfhPn26uMqjr6EjRlzadJQ9q2lRsSU/f8SjK7J2nzPzUw0RaAvCymeMsB7C8WLlzAFxJ9OXDWc6ZBy2EUIq+41Imn8hVA7VmHziCACk4e5xZwRHOubO/hkE5x2qXU0vRd4R6VRSk6FtBir60WdbzoIUQajWQq0UPQ3r6ToJaldYRBEjBVQTYER4YcnYB1iq8o1UPw9i2oyNF3wr2rjyOVFFcRfQd4Zw7uwBrJb6KXTW9bunpOxmu5OnLgVznzIMWAuxK4R2lrFL0nQR7X0hHECAFVxFgRzjnagqElp6+K4i+VmUtKVL0zaDF7B2tY82uEl/XyiMzLqsUffug5fiF9PSdBDU9fVcUfVexCeS/vs4uwFrH9J39/JYGKfpmUGtwxriiaF1pZExfPbvO7ulrHdPX4vxKT7+Mo0V4R+u3XDqKAGdmAk88AcyapZ5NNdCqgdfC63almH5ZG8gtyj9nuTTO7uk7oujv3AmsX8/rkycDlSvb36YauJKnL8M7jov09M3gKuEdR7KvEBlpWL9wwb42TYnS5cvAa68BGRn2s2vuXN++bVubxrZcKbwjB3LNI0XfDFqEd7QWXa17GgpRUYb1ixdtb9NamUePBj76CFi+3H52TQnEoUNAlSrAF1/Yx66567toEfDjj+raPHGCw3eZmeratQfS03cyXMnTd5SB3IsXgebNef36dfvaNFXmW7d4adz4qGF3/35evvwykJVle7umGtjcXA6hPfUUcOmSOjaJgLZtgfnzgT17bGfT2J4cyDWPFH0zSE+fyc0FFiwAzp+3v32F2FigfXtet4foG9+cBe3n5LAXCnCYx5ZYO9cxMYb1a9dsb9eUzehow/qvv6pjMzkZyM7m9StXCv9uL7sAkJQE2Pqvt6XoOwlqeQyOLvr//QdMm8azaextH+A4+rVrQOPGQPXq9vf0C9qPjQXu3eN1W3q+BW2ZqlfnzhnWbVluS0J47JhhPT7edjYtxfSNGze1Rd/fH6hVS71GFeCGValTjoAUfTM4iuj/+y8QFARcvaqN/YgIXh49ap9GyZToAkDDhkDt2uqHd06d4mXbtvYVfVPn8vRpoEkTXldLlJQxk2rVbOsBW7JpLPpxcbazac1uSopBfA8dsr1Nc6HCJk2A8uUNvRutkaJvBmut9507thmEsiYE48axEH7ySeltWbNvqtIqog/YXgSBwjFfRYSCgtQR/YLn/MwZXj78MM+kSU21nV1Lr2G4dYsFsFcv/m4PT99UfD02FqhRgxvZGzfUsXn+PIdPw8LU9fT//tuwbsvxGku9mpMnDet799rOZmmQom8Ga3G6ypWBdu1sZ6fgOsCDeUqX/+zZ0tsqrn0AOHwYqFSJ143jv/awb2zjvvu0Ef2zZ4E6dYDQUP5uj8FNU3aVxq5zZ16q5enHxgINGgA1a9pW9K2Fd+rVAxo1sp/om7pvFVtubra9nyzZVHqOgO17NSVFir4ZinIhjS9oae0UXAdY8JXuqHGX2JZYsn/7NntEQ4fyd3sM5uazSYSqv3+H5Z4voNbhrahdi1QP75w9CzRtykII2E/0C9pVnkdo3pxDLWqJ/okTQLNmHOdWM7zTqBE36rZsaKzZjYsDPDyADh1sO0hvTSvK6R+BteWYSWmQom8GS5Xnl18M66V94tCS6CqNSs+e7AHb4+lGS/ZPn+ZtAwYAnp6GeLu97GPhQoz88xkMz14O9OuHsX8Nx507pM5DUrdugd5biMFHZqBbzROaiX5QEPc01BjIvXkTSEgAWrZk0b9xw3Z1zFJ4JyaGe3K1anEebBnrttTDiIvjgVw/P/Ua1VOngDZtAF9fKfoOj6XW2zg2l5BgGzumbJ06Bbi7A927c6hHmT9uSyyJviJEjRrxzWKPSptn8+JF0FtvYXO5gZgwOg2YORMtjv2AsVhmc2+/0JTNGzeArl0hpk7Bq5nvYdbPrVFr+bvw9CC7eIQF1wEO7/j68sNZdeqoI0qKU9GiBQtwRgaQnm5fm6mpPG2yUSO2CfB3W2FJgFevZsfFXufXlFZERQHBwdzQSNF3cCxdyDNnuGsKlD7ObWnO+Llz7PkFBvJ3W1ZUBUuDi0rcMzAQCAiwT0xSp9Nn4uWXQW7ueD7nc7Rs5wnMnYukVj2wCJNw85htJ8wbn2dKuAqEhwMxMTj87nbUxnUkPjQEbjOmY0LVFTa9Uc028ETouGM+jqXfBzzyCNqVP6HKQG5B0Qds18Mw53ErIcJGjXgcAbDPAHJBu8r5btsWqFuXZ/LY6gE4czbv3jVMP/b3L72DaCuk6JvB3IVMS+MBoYED+bvx3OrS2DFl68IFw9RFwD6ib8n+oUPc9a9Y0X6iTwR+u9rWrYgeMQ/xCECzZgCEQMLcr+GOXNR6f7JNbSrlrIfLqDHkIb6g27bhL89eSEF1uP2wGggPx5zkV6CLtt1AhrlzTT+swciYWUivXBfYvx/zd3SAX/x/NrOrCF7B6xsVxde2fn2DANsqrm+uoVHGppTwDmAf0S/owCg9thdeYE8fsF0DZ86m8Uw0e/WUS4IUfTOYu5CKp9KjB8+9La2nb63L37Ch7SupVfuRkcD8+egS+Rna1eWaqoi+rccVPO6mAhMmAK1b4/cG4wGw5wkA1VoH4j1Mgf8/6wzvKLABOh3QHFH4B53hnnQD2L4d9GBXvP46ULUqULOOO/Ddd4CbG8aemmBTuwp59SohAfTSy9iP+7Fz5l9AVBQyK9XEkoyRSE+xjStqTvTPnwcaNyK4pSShdjWeMWBr0Tfn6RuLvhoDyIpz1qSJ4X6y1bMv5mwqDZwi+teu8RPfWiNF3wzmLqQS527cmKedlXbKmUnRPXIE2X3647vkh/GQbndeJVXF0//9d+4Dz5qF6Vdfwce7WwIHDsDfn7vDKSmlt2nccHTbMZ1bs6++wsIPy8Hf3+B11qoFLMIkpFesCbz7bukN6wm48i/2oQvKIQcJP+4F7r8/7+Vqjz2mJArArs5vovvdzaCt22xit5DoEwHPPw9dZhZGYiXad3IHatfGwdFLEYzTuDf7bZvYNSn6kZEY/c9o7DtVDahZE617VccczEbiVduokiUhrFOHpwHb09PPsxsTA7z3Hty/X4m6SECTJhzeAWx3P5l7kDNt9UYswQtoeWYd/P0IOp19HLfiIkXfDOY8/X372MNv2tROop+YCPTpAxz6D2GIxNCvuqPami/g6Wmfp3KN7XvcTgbGjgVCQnB8dzJa4CSyKlQDevVCqzv7ANgmxKPcJEOxBh0ivgBeeQW6Nu2QmGgQAoDPc/mq3tgb/CKwaZNtptL88QfGru2BZFTHA9iPzCYtAQAHD/LPy5YZksYOfBUXEIScN+eW3i5MXOsffgA2bcLWzm/jsmdjtGrFv4l+D+M7DEeVpe/ZZJ6sUoeJAPz5J9C3L9C6NfrcWouTTR4HPvgAur79MBtz0fXDRzkYXUpMxvR1OqScuorQBvz+6KpVeTqj3UQ/OpqfAJs6FT2/H4VzaILax7bbzdPPpxU7d+Kpnx7DGHwN72f/D48uHwhPZDlEiEeKvhnMif6xY0CrVraLcxcSgpkzgVu3sOm1XQjCRaQ/1A/itf/hwVpnbf4gC5C/fF03vMpvw1q5Ev+d90UUWuD2pr2Anx8efPdhNEeUTURfpwM64gC+xbOIrfcgsHAhDh/m3157LX/agADg50rP8Jd160pneMsW4JFHkFitCbpgH2IRBJ2O25Jly4CuXXm2lIJfoCc+xGvwiPiX34dRSox7OOVvXAFefRW4/358lPsqwsK4kQM4BDEF7yFXlAOmTi21XZ0OCMAVvPHPozz/NzIScePfhT/icWHmcuC111Bu/VpMKL8EDc9u5cfASxnHU+p1hXup/DrNtm1BlSrhl4N+2H6wChASAvHJxwiodc+mPdi8bOfmAqNG8cT8s2fx0v1HEV+hEcTjj6F27EEIYTtPv1DvIjERGDEClyo0w6NdbwEffog6/23CDLztEKIPInLYT9u2bUkrgoOJAKJhw/Jv9/c3bJs+ncjdnSgnp+R2vv+e7QBEZ9ceJRKCaOJEGjuWqHx5oqzL14h8fGhfjYH0wAMlt2OO06fZ9gD8xitz5hAR0QsvEFWuTJSbS0RxcZRToxb9h7b05RJdqW3ei46la6hFMWhI8yYkEhHRzJlEbm5ESUn50w4dShQYSETt2xO1aVMie6mpRNG7LhNVrUrUujVNHpOSd86joogGDeL19evz73fwIJE30ijbqyLR2LElsm3MqVNsxwt3KalBG6LKlSn71FmqWJFo/HhDutxcIi8voh2dZvIO586Vyu7goMN0DbUow92baOFCosxMmjKFD33liiFd48ZEP4bM4x/WrCmVzS5diEJwnBIqBPHxunalm6Nfo5fwGR0c9A5R585EAJ3xDqNnO58tlS1junVjc18ELeSV776j9HSiGjWIXhh0lahhQ6Lq1en+aqfp+edtY7N+fTb10ENEpNMRDRhAuvLlqZ3nMXr1VU5zd8hwyoIH/TDjpG2MWgFABJnRVc2F3dJHS9Fv2pTPztCh+g0pKZQ051P6G53pekAboiefpL+GfkFVkULx8SW3s2oV2xHIpTthnbl2pqRQq1ZE3bvrE73zDhFAQ2rsLmWpCnP8OJEPUukyAuhGnRCirCzKyeE89etnSJe7fAURQGsG/1QiO3fv6ldu36bckFC6iSrUDFE0dSqLXLly+pumAPPnc14y3vmgxAL4zLAc2oVwyvSoSBQdTaNHGxragQO5nX3mmcL7xcdzmjMdRhBVqUKUkVFs28YcP04E6Og7DCOdEES//05//8021q3LnzYkhGhk7wQ+MZMmFcvOvXtGWY2Pp+vudSkW9enF8Ki8NL17E1WokH+/nj2J7u+Qww1srVpEycklKCUzrdnPdAcVKal8XaJ9+4iI2xGA6MgRfaJff6VUz+qULiryjWADHnqIKBgnKUt4Ej32GJFORxs3st2tW4koJoaodm267NmQBvcv3fVUCAjg4z/4IBEtW0YEUMrsjwkg+vJLTpN77QYlojpdqPcgNwx2xqFEH0BfAGcBxACYailtSUVfp9N7qKWgUSO+QT/quIaoRYs8lTiCMLr9YD+iBg2IALqJKhQ74cMSG1zBWkpj8BWvfPst3bzJQvTWW/pEd+/SzSr1KQJt6F5mKQtWgIgIos/wEuVC0MqXDhCRIk7sfeeRk0NnyzWn+CrNi921SUhQTp+Och8dRDp3d+qFPwggeuMNos8+498XLiy8r3LDRmyMK3BSis58L/ZeR2E5NWxoEHzlU7s20dWrhffLySGqVIlo8YA/OOFPJWvwFI4cIXoTc4gA+u/ReURENHUqkYcH90aMefxxombNiOiRR4jq1Sty/bp7l/cDiC5G3SVq357SREUKwXEaMIDTpKRwL/KVV/LvO3o0UZ06RBQZyd2uyZOLXLajR4mSrudwhZo8mQigA+hA//egwSN6/XW2e++eYb+Zo67QPveunOHnnsv/Ywno1jmL/kNbSilXg+j6dSIiev55vo5ZWfpEO3YQAfRh/Q9LZUvBz4+zP7jNBTbUrRut/DaXAKI9ewzpplb7khP++qtN7FrCYUQfgDuA8wAaAvAEcAxAsLn0JRX9Q4fMi0hRaRSYTd/jaT5Qq1ZE775Lb/U/SDVqGBrqMz8cpi3oa3CL09OLbWf5cu4Gp6Aq3W7zEJFOR5s38yF37TKk2z2G40A3PrCNR6RwZsEvfANgIr39Nm+bNYv19fLl/GmnN/mJM1ZMr0zpzYzHYiKA0uZ/mCe4r7/OURshjG5KIxRv29+f6EjVcIp2b0p+dXVFdroztuyibLjTlqpPEaArJPiA5f179SIKC80hqluXBbiYLF1K9OqrRLk5Oro8bi4RQN9iZF6YLDycqF27wvtNmcKNQe63KzmTBw4Uyd727YYGdm+D4UQAjav1CwFEfftymi++0DekEfn3fest3p6ZSUTDh3NX4No1qzavX8miGZhHl1Av76T+XGsclUcG9ehhSNe5M1HHjvn3fe89IndkU+akGZSXyTt3ilRWU/xYdyIRQFOabCAivlcDAtjpN+ZE3Z6U5FaD6PbtEttSqFOHqDau0kWvZkQ+PkSxsfTcc0S+vvnb6s4ds+mSd1PWEzt7+44k+vcD+MPo+zQA08ylL6nox8VxyQYNKtHuRET0tc8EIoBWN5tLlJNDOh1RUFD+ypOUxDfXn0O+YNUaPLjYF/P3N/bSTVShOPhR5PpoImKHp2LF/G3Ijj9y6RDaUXpAY9tVmOhoyq5UhQ6hHXkik+bNY+/W35/o4YcLJx85IpdOeIRxXLSga2qB554j6upzhDLhSUfrDaCEeIP4tmrFyyVLzO8/h51jehbfEAH0JH6kRo3YYzUmN5d7FUlJxMq1cSNl+1SlU2hOX71/y6TgWxN9RQivj3qDcoU7bfz0Ur8afUwAACAASURBVJFP/8qVBgFOHstB9BV4htyQQ59/zvXUzY1oxozC+37DRaWLR2+y+r/+epFsvvUWUSXcoa8qvMIHmDs3L+bcqxeHfZo1IwoNLVyNlF5ndDRxGM1c5oy5d4+uBz9EBNBW9KHFHb8nOnGC2rfnY3XrxskuX+ZbRD9klMe6dZwuMpI4NOLmxi1hcT3+nBzuugD0CV6hDh1487FjfPxly/InXzziIBFAurnzimfHBME1rtNJBNNdN2+iv/6ie/c4Ovb44/nTDR5MNKPO15yhvXtLbdcSjiT6QwB8bfR9BIDPCqQZByACQET9+vVLXOi+fU17UEUiKopy4Eaf40UaOJA3Kb2HpUsNyXQ6HnB77TXibgXArntR+eUXyi5Xnk6jKdVHLO3fT5SWxs7CqFH5k547RzQa+gpz+HAJC2bEtWtEDRtSVuXqFITzBLBgKL2MDRsK7/L220TdsZN07u4c8tqwgeMJVlSwy30JlODdkBI9/ahrcCJdvFhYeNPSLGc3Lo7oxNFs0nXsRFke3jQF79L7ndbTyiEbqX6dLPKtpqP2OERT8C5tRR+6KyoQAXQGTagBLlJsrGnBtyb6imjURyylowJtRR9q3yaHEhMt70dE9NRTRB7Iom8xkgiguIEvkgB3+z/9lBs6gAfTC6LE+idOJDrsN4ASvfzpgY45hRq6PO7eJVq9mvbXepQyhBcRQN/4TCDS6cjfn48VHk40lzsb9PPPhQ+xfz/ljz70789urJEAX7/O4x+ffEK0ezdRzoL3iQB6wfNruu8+rhZERGFhfCxlnObdd/l7TEx+mxERBerbd9/xBmUE1Ar/+x9R28apdKPdw0QAfVfrNXJDDin+4ttv8+EKjrt99BHRrxhIuZWrFPYeisONGxTl3oLSUYHGNt5NRHz+AKLff8+f9NVXiWpXSiPy9uaZEnbEkUT/CROi/6m59KUZyB0zRh+fLCJXrxpp1+DBdFv4UHUkUv/+vGnePPZUCo5tNW+u9/5zc4m6duUBPwuKsGULOyS/DVtDOjc3uhbUkaojkQAe71JCIX/9lX+/jAyiakimHHePYsVaC3LuHFHYfbcprk4bIm9v+vfjA3niN3MmD0bVrGk61LJ+Pac799kfeWMaBPAdvmNHofT37hF9+fo5OoXmlOVZkT5+6kCek2MsusVqnK9eJV3fvvkOcA21KL5Sk7zvl3yCaU2tV+lRt41UAekUHMzXVj9hpFiiT8ThJ4BoaWtW6b3oQg9gH337ToLFBi88+DodqhTO+/SYQ9u2Gno4vXuzA1+/vulD3LxpyN8QsDv8BNZS1ao8NhAbq0+o0xEtXUo5VaoRAXQF/rQz+BX6ZtReEuAwmK8vH6dBA47YPPqo6fymp/NstLyxnN9+K+QBfPihIV/1EUtp8KaNeITCWulo0iRDzF6Z/dalC3+vVIlMzj5LS+Ox6qlTjTZO4F427dxp6bLQnTtE/rhCJxFM2aIc0dKlFBLCu7Zuze1gw4am7a5ZQxSKYzyg3qdPsXqueSQlEYWG0l14UTf8SWFhvHnIENae7Oz8yRcs4LzdGzyUJ2yUcvzCEo4k+qqEd4iI5s+4azZOXJBr1/hM1KhBdG3rESKAFnrPzrs5ibhr3LJl4X0feYRnWhARz8lzc2P3zAyNGxN1w5+UBQ+6274rLf0wLe8m2ruXu8MNG5oWggYN2OsrzsBeQV56LpO2oydlw53Of7qZfv+9sAiuWGF63xMnDGmqVMqhVwM30vEn5tK1ijwtLzqwB/3Wdg693+hL+rTWXPrNbSBlwpOS4Eu3f9+T59UV/KxeXfxyZOw5QJe+3k7J323mOF7v3tyHv3EjL01ODn9VzmVGBk/DHD2aaMSIoot+To6RJqxYQZmVfPN2PuTWgT6vO5d+832GIiveTwkVG9G9ZiGUel8YpcKHst3L05jyq6hXLzJ5rgs27sa8/z5P3Ll25R7pWremFLfq1AM7qDHO0iy8RW+U+4A2eD1FBNBOdKdw7CKBXPrxR0NoadUq7o0q9jw9C3vbxrRqxT2C8HCi4KY5dAn16FLTXpSVZWgDAKKoUzq60rIfpcGb6iOWUlKIvtZ3RM+d43oOEHXqxL1jJS+m6NiRfx86lMU6qM5dSqrRhHRBQRa7gDvWJtNJBFMqfGhkfR4Aa6Jv+1u25B4JQLRtW+F9lV5N5Phl3NI1asQD9VbEPyuLZ5Q982QG3WnVmah8eXrYYwcBHDLLyuKe+rhxhfdVOjFXPtN3BbZssWirNDiS6JcDcAFAkNFAbgtz6Uss+v/+S3d9alF7HDR4RBb45RelMusoKqAXUbVq1KDqrbzu6Z07/PuECYX3ff11vqnu3eNewBqfsXRPeFBm1PlCadPSiEJxnNLLVaYTaEFrltzM5znN1E/LnmcmzNi/P9GUeqsNLURxyc6mQ0FPEAE0Et/SRx9xN99YhJRGzhQ5OXxTtmjBOltPP25XHhk0HfPpBFrkO9j1Sg3pWNfxlHzMMBnc1ze/PXOhBntz8GDRRb8QiYl0+cOfaGnj9ym23H1EACV5+dHhyuG0Bv9HG/AYbcQjtEo8Q6fXn6QePdjOrFn5y/3998Wwee4c6ZQ4jdHnHsrRB5XnUFjLXFq1isNROh33XE01sEq40hz6sDgB7IHPBMeDGuFc3vZn+8Rz9xag7A8+yXNYlZDUl18aOoJ+fty76NTJfKfoyScNNjt3ZtHsAu4OHnnwVdqxgyc1REQY+Trp6XQp4AHKhCctfmwXeXjwME5gYP7yzp5t2mZyMv/+wQdEtHs3ZdZvRASQzrsi0Y8/mj0/a9YQuSGH1mEIH2DdOnJz49XgYA55mavThw/rd/kuk58ZGTHC8sUoBQ4j+pwX9ANwTj+LZ4altCUW/dRUyqjhT5FoSTs3WZ/mMW0aV/C3Guub4sWLqUoVXlUGpAC+oAVZu5Z/U26WuoindFSg7zCMhg8nGjCAjzF2LNH0R0/SJdSju9X8qFnFy/Tii4ZYp/KpVs38hIKpU4mqlrtDugoVeHZFccjJIXqaZyMtbrAo7+bo0ye//a1bi37IM2cM+x06RHTrFlH2nQwetTMzkyk3l+t7SW3ainPnSiH6xuTk5LtgBw6wdz5hgiEU+OmnpgW42O12ejq7i++9x6qemGgxlKgMBht/Ro+2bOL6dRbqWbNYpO+cS6Act3L0R4WB1NA/k66v+ZN0Vauyp/Pee/mUPDeXp7/Wq1fY7vHj5m2mpLD3rJzG3Fyizz8nWuo5ngigbvgz37HCKp+n/d49KBeCnqv6E/3wA28/eZInWRmntdQhrl6dJ901acJjL+HYRUd9upBOCDo6eB5t+zWj0Ozkp4dk0SrBXYiP6n2Q90yL0otS1m/eLGzv3j3+rWlToojWYyjTsxKNGJxuiwlEhXAo0S/OpzThnaQVv1MuBF1q2itfl98UPXsSPdb8NGWUr0z/ohPdy8ihSpXyV57mzU17KspMIeWzciXR8f5TKReC+nlsJ39/osY4S2vxBOVC0E1UoRvbj1LPnuwxv/BC/v0t9fgU7/Q9vEEE0KKO6wo91GPMkSPcUDT2T6efPdidmoJ3aeRI7n6aEqJ//ina+VUoyUQiZcaO8jGey6wWN26w7YoV7W8rPd0wd974U3DKpD144438NgvOzS8Sn3zCO7u787JFC6Kzpp+iff31wuX08SlZ3nNS0yijfmPK9vah2GHTac+Tn9NmPEy5EJQFDxqOVVShguG+mDCBhVyxW3D2TEFefNGQ9sEH2fH29c6gH8H3ymUE0FS8Q4sH/Uk739pHX3X9jo6CK++2B94igP2bguVdtMi8TSVNOHYRAfQyPqVy5Tgyefy4/nMkm66Pm0lJi74t2YkjFxV9nY7oBa9v6Z6bJw+uzptn8mnOv/8maoRzdKNSIN31qUn1cCnv2RTjC2lJ3JQ0R4/qN9y8ya0EQFS7Nunc3OhuuUoUO3wG5V5nz2zaNNOie+uW5XKtX080efxdOlnlfiKA9onOFB/QgaLuH00/T/yL/p62mU70nUS/VxpKO9GdjiOEUt242zLD631q357o4kUONY0cWdh+ZGSJTnexiIvjxk2xefCg/W0WJCeHB5C/+ko9mwXPdVSU9X1Ky4wZ+W1Om1bCA23bxh7EzJlW496TJuW3OWZMCW0S8XsijLqjOXX8KGvabNJdiaNp07jh1Ony98iVj6mnrI25do0nLbz3nmGbTsfFO7/sT7oU+GChg15EAzr/wS95s7r+7//yJ7EUHiXiMZyJE4lSb+mIevemnHKeNKfCAnoW39D3eJoWYhLtAT+stq3RyyU+bS4p+kQ8GDWw0SkOhitX5eGH2bW8e5cSom7S7Irv021UoqwqNSju1/9MCrG1Snv7tv6BFmNSU3m4fswYnm1T4JHPCxdMi36RB/TT0ujWlHfoint9OoAOdAcV8w6SgfJ0Do3ofN0H6G6fR/mRRDPudEH7lgb5bI1i01LX35koeK4vXrS/zV3sUFKtWrycP9/+Nr/6Kn85TY2FFZsMfdjQzA2i9NyMPy++aAO7cXGUtmk3HVnwB0WuOJrvafSgoMI2p0wpxrGTk3mGiHLfVq5JOeU8KatiVTo0fkVRn8czicuKvvJgTfv2RGN6XqRVzd6m9Io1Cl2pG+0fZhUmw4NAxh8Lk3FKRXZ2YVvFJSuL47A3YlIp6cOVFLnwDzr0d2bhRsgMxjMvAdOvI7AXWjQ0WlLwWuvfEmB3UlJ4ABcg+vhj+9tT3pdU6t5FMfn88/x2i/nKomJjynFTnmovFsePcxcgN5e9x6JMObSCJdF36lcrv/ACL//7D/gnPhCTUqajZnosXvRdi1mYi+l4G3/MPYiaBzfz39sAmD0bGDqU9xOClxUr2id/5cqV/hienvwO+pr3VUb1/z2DVpN7o32X8nmv6bXGiRP8NmUFe5XVElWrqm9TCw4e5P+oUfD2VsdutWqGV2ircX0ff5zr9v3383e1yqm/hfPs2busQUH81xfG+PiU4EChofxebzc3fr+2p6dN8mcOpxb9WrX4n2pycvj/QOPjgenzK+LLlCcxH7OQ9sp09JnVwaDuepS/QGzQgJeVKtk3n1qKno8P4Otr+K7WDQoAn34KtG4NVK+unk0t6dABGDDA8L1CBfVsK06AGte3eXMgOxsIDFTPJsD/DXP1qsHZU8Nuejovvbx4aW+tsAVOLfoAC7/yxxjlygEzZgAffQSMHAksXmx6n9mz+S/dOnXi7/b0GDIygJ077Xf84mL8JyL2Zvx44MgR9ew5Gmqea0WUCv4pkD25x3+7q1rvUQjD/98CHHCxNyNH8rJ+fV5K0XdQJk4EVqww//sjj7DHoHTVPDzslxcvL8fwdB9/3OCZSezL2LHco1eTnj15Wa+eejaVKIWdoxVm7SqNjj0ZM4YbUkXspeiXcZS/PysQ/bE5jiD6a9cCp09rnQvXYOlS4PhxdW2OGgUcPQo89JB6NhVP201llenXj5fduqljz82NQ8iAFP0yjyL69u6GO0JFKVfOEAKQ2Bd7OxHmbIaFqWt74kSuU716qWcTAB58EMjMBLp0Uc+mEsJSI6RUWqToW2DWLK5Agwfb144WIiCR2JuOHXnMys9PfdtFnb1mK95+G6hRAwgJUdduSbDBpEHnJSgI2LtXHVv//APUrauOLYlEYlu6dQMSE7XORdGQou8gPPCA1jmQSCSugAzvSCQSiQshRV8ikUhcCEEOPNwshEgEcKkUh6gBIMlG2SkLuFp5AVlmV0GWuXg0IKKapn5waNEvLUKICCJqp3U+1MLVygvIMrsKssy2Q4Z3JBKJxIWQoi+RSCQuhLOL/ldaZ0BlXK28gCyzqyDLbCOcOqYvkUgkkvw4u6cvkUgkEiOk6EskEokL4ZSiL4ToK4Q4K4SIEUJM1To/pUEIsVwIcUMIcdJom68QYocQIlq/rKbfLoQQi/XlPi6EaGO0z0h9+mghxEgtylJUhBD1hBC7hRCnhRCnhBAT9NudstxCCC8hxCEhxDF9ed/Sbw8SQhzU532tEMJTv728/nuM/vdAo2NN028/K4ToY9qi4yCEcBdCHBVCbNJ/d+oyCyFihRAnhBCRQogI/TZ167W5P88tqx8A7gDOA2gIwBPAMQDBWuerFOXpCqANgJNG2xYCmKpfnwrgPf16PwBbAQgAnQAc1G/3BXBBv6ymX6+mddkslLkugDb6dR8A5wAEO2u59fmupF/3AHBQX451AIbqt38J4EX9+ksAvtSvDwWwVr8erK/v5QEE6e8Dd63LZ6XsrwH4AcAm/XenLjOAWAA1CmxTtV5rfhLscFLvB/CH0fdpAKZpna9SlimwgOifBVBXv14XwFn9+lIATxVMB+ApAEuNtudL5+gfABsB9HKFcgPwBnAEQEfw05jl9Nvz6jWAPwDcr18vp08nCtZ143SO+AEQAOBPAN0BbNKXwdnLbEr0Va3Xzhje8Qdwxeh7nH6bM1GbiK4CgH5ZS7/dXNnL7DnRd+Nbg71fpy23PswRCeAGgB1gj/UWEen/kylf3vPKpf89FUB1lKHy6vkYwBsA9H9XhOpw/jITgO1CiMNCiHH6barWa2d8tbKpvyRxlXmp5speJs+JEKISgA0AJhLRbWH+32bKfLmJKBdAmBCiKoBfADQ3lUy/LPPlFUIMAHCDiA4LIcKVzSaSOk2Z9XQmogQhRC0AO4QQZyyktUuZndHTjwNg/PfPAQASNMqLvbguhKgLAPrlDf12c2Uvc+dECOEBFvzVRPSzfrPTl5uIbgHYA47hVhVCKI6Zcd7zyqX/vQqAFJSt8nYGMFAIEQvgR3CI52M4d5lBRAn65Q1w494BKtdrZxT9/wA01s8C8AQP+vymcZ5szW8AlBH7keCYt7L9Gf2ofycAqfru4h8AegshqulnBvTWb3NIBLv03wA4TUQfGv3klOUWQtTUe/gQQlQA0BPAaQC7AQzRJytYXuU8DAGwizi4+xuAofqZLkEAGgM4pE4pigcRTSOiACIKBN+ju4hoGJy4zEKIikIIH2UdXB9PQu16rfXAhp0GS/qBZ3ycBzBD6/yUsixrAFwFkA1u4Z8DxzL/BBCtX/rq0woAn+vLfQJAO6PjjAYQo/88q3W5rJS5C7i7ehxApP7Tz1nLDaAlgKP68p4E8KZ+e0OwgMUA+AlAef12L/33GP3vDY2ONUN/Hs4CeFjrshWx/OEwzN5x2jLry3ZM/zmlaJPa9Vq+hkEikUhcCGcM70gkEonEDFL0JRKJxIWQoi+RSCQuhEPP069RowYFBgZqnQ2JRCIpUxw+fDiJzPxHrkOLfmBgICIiIrTOhkQikZQphBCXzP0mwzsSiUTiQkjRl0icHCLg5Enr6SSugRR9iSbcuwckOOzD8s7FqlVAaCiwdavWOZE4AlL0HYCrV4HUVO3s//gjMHeuujZHjQL8/YGcHKtJ7cLJk0Bamja21eboUV6esfRqL0mJSU4G1qzROhdFR4q+A+DnBzRsqJ39p54CZs9W1+aGDbzMzVXXrmIzNBQYNEh924MGAU2aqG9XbSIjASGAQyq/BScmhu+ny5fVszlsGPD008D58+rZLA1S9B2ElBStc6ANWrwFRKd/e/uff6pve+NGIDpafbtqs2kTLzdutJzO1ixfzj3n775Tz+a1a7y8fVs9m6VBir5EUxQBdnabjoD5vyOwPUpjrqZNAHB356Wa17hcOfVtlgYp+hJN0eJGke8YtD/KdXVTWWHUbmSMbZaVeiVFX6IJyg0iPX37o4UYaeXpa1FWKfoSSTHQYiDX1URfwRXCOwpa2JWiX8ZJSAAWLiw7F7KsIj1958QVPf2yghR9M7z0EjBlCnDggNY5cU6UG0WKvv1xpfCOlpQVB1GKvhlu3eJlVpa2+XB2pOirhyuEd7QcyC0rSNGXaIIcyHVuXDG8Iz19iaQISNG3PzK8Y1+k6DsJZeUClnWk6KuHK4R3FLSwW1bqlRR9iabIKZv2x5U8fcWulq/3cHSk6FvBFbqnWqCcVyn66uFKnr6aaFmXS4IUfSu4UphHzbJKj8y50Xr2jgzvmEeKvhlcwUMpiJqeipai70oNOeCa4R01kZ6+pMziKoOqZcUjszUyvGMftHzQsCRI0TeDq3mDgOsIcFm5OSUlR83GRnr6ToYreCoKaoqhfDhLPVzxfTRyrMg8UvQ1xpF6FFqIvrw5nRNHqtf2Rnr6Toa9K68jCZCreN2OdM7VQGuvW020HEsoK/VKir4V7H0hHamiuIoAO8I512J6rJq4UkMjPX0nQ4q+fXD1mL6zC7ErhnccoV4VBSn6VnAl0XeVefqOcM5dSRSdHSn6ToaM6UubZT0PsoFRBxnecRJcydN3FQF2hHPu7OEdLW2qjfT0nQwp+tKms+TBFV55ocXsHacbyBVCLBdC3BBCnDTa5iuE2CGEiNYvq+m3CyHEYiFEjBDiuBCijdE+I/Xpo4UQI+1THNsjRd++uIIQmUKL8I4reN1a4Iye/goAfQtsmwrgTyJqDOBP/XcAeBhAY/1nHIAlADcSAGYD6AigA4DZSkPh6EjRlzbtgas2ds6M03j6RLQXQEqBzY8CWKlfXwlgkNH2VcQcAFBVCFEXQB8AO4gohYhuAtiBwg2JQ6HWlEJHECAFVxFgRzjnrlJuRzjXalFWylrSmH5tIroKAPplLf12fwBXjNLF6beZ214IIcQ4IUSEECIiMTGxhNmzHXL2jrRZ1vPg6s9E2Buni+kXE1NRQ7KwvfBGoq+IqB0RtatZs6ZNM1cSpKdvX+Q8fWnTWXCEelUUSir61/VhG+iXN/Tb4wDUM0oXACDBwnaHx5VE31X+utARzrmrlFttm1o89Ocqnv5vAJQZOCMBbDTa/ox+Fk8nAKn68M8fAHoLIarpB3B767c5PK4k+q4gClrZdIQ8uIpNte2Wtdk75awlEEKsARAOoIYQIg48C2cBgHVCiOcAXAbwhD75FgD9AMQAuAvgWQAgohQhxDwA/+nTzSWigoPDDoVaF9KRKoqriIIjnHMtXrjm7p6NixfjkJmZaXebjz8O9OwJVKkCnD5td3N5DBwIhIera3faNGDiRKBaNXXLCgBeXl4ICAiAh4dHkfexKvpE9JSZn3qYSEsAXjZznOUAlhc5ZxojZ++og6vG9LXIQ4sWcfDx8UFgYCCEnSftX7kCXL8O1K0L+JucsmEf4uKAa9cAPz/+qIG7O3D7NhAQANSpo45NACAiJCcnIy4uDkFBQUXeTz6RawU5e0fadJY8+Phkonr16nYXfEdAi5i+2g6MEALVq1cvds9Nir4VpKcvbdoDrd6nr5bgazVrx5VmCwElu55S9K0gRV/adNY8qIEriXBZKasUfStI0bcvrjp3XIvZJY5QblOMGTMGUVFRNj0mEVCpUqVi7bNixQqMHz/epvkwZs6cOVi0aBEA4M0338TOnTvtZssSVgdyXR1XEn05T189nP3vEotj8+uvv9bErq0pju25c+faLyNWkJ6+GeTsHWnTWfLgKEKYnp6O/v37o1WrVggJCcHatWsBAOHh4YiIiAAAfPPNN2jSpAnCw8MxduzYPM971KhRePXVV/HAAw+gYcOGWL9+PQAgLS0NPXr0QJs2bRAaGort2zeiNFy5cgV9+/ZF06ZN8dZbb+VtHzRoENq2bYsWLVrgq6++AgDk5uZi1KhR6N8/BEOHhmLZso8AAOfPn0ffvn3Rtm1bPPjggzhz5kwhO6NGjcorQ2BgIGbPnp1XBiV9eno6Ro8ejfbt26N169bYuLF0ZVOQnr4ZtJinT6Tt629dRYAdQfS19vQnTgQiI21rJywM+Phj879v27YNfn5+2Lx5MwAgNTU13+8JCQmYN28ejhw5Ah8fH3Tv3h2tWrXK+/3q1avYt28fzpw5g4EDB2LIkCHw8vLCL7/8gsqVKyMpKQnt2nXCTz8NBFHJbqRDhw7h5MmT8Pb2Rvv27dG/f3+0a9cOy5cvh6+vLzIyMtC+fXsMHjwYsbGxiI+Px6ZNJ3H7NlChwi0AwLhx4/Dll1+icePGOHjwIF566SXs2rXLot0aNWrgyJEj+OKLL7Bo0SJ8/fXXePvtt9G9e3csX74ct27dQocOHdCzZ09UrFixRGVTkJ6+GdR6tLqg6GuJq8T0tRJ947KqmQdHua6hoaHYuXMnpkyZgr///htVqlTJ9/uhQ4fw0EMPwdfXFx4eHnjiiSfy/T5o0CC4ubkhODgY169f19shTJ8+HS1btkTPnj1x7Vo8kpOvlzjfvXr1QvXq1VGhQgU8/vjj2LdvHwBg8eLFaNWqFTp16oQrV64gOjoaDRs2xIULFzB37ivYv38bfHwqIy0tDfv378cTTzyBsLAwPP/887h69apVu48//jgAoG3btoiNjQUAbN++HQsWLEBYWBjCw8ORmZmJy5cvl7hsCtLTN4MWnr5OB7hp2Ay7itftqqJvbN+SR25LjG02adIEhw8fxpYtWzBt2jT07t0bb775plFayx5A+fLlC6VdvXo1EhMTcfjwYXh4eCAgIBD37mWadSY+//xzLFu2DACwZcsW+BV4gqvgFEghBPbs2YOdO3fi33//hbe3d54AV6tWDceOHcPy5X/gp58+xz//rMOyZR+jatWqiCxmN0opm7u7O3JycvLKuGHDBjRt2rRYx7KG9PStoKanr3XYwVUE2BHeB6NmD0freqWQkJAAb29vDB8+HJMmTcKRI0fy/d6hQwf89ddfuHnzJnJycrBhwwarx0xNTUWtWrXg4eGB3bt3Iz7+ksX0L7/8MiIjIxEZGVlI8AFgx44dSElJQUZGBn799Vd07twZqampqFatGry9vXHmzBkcOHAAAJCUlASdToc+fQbjhRfm4eTJI6hcuTKCgoLw008/AWDhPnbsWFFPUT769OmDTz/9NK+BO3r0aImOUxDp6ZtBK09fS1xFgB1B9F0xvHPixAlMnjwZbm5u8PDwwJIlS/L97u/v//mA6wAAH9lJREFUj+nTp6Njx47w8/NDcHBwoRBQQYYNG4ZHHnkE7dq1Q1hYGO67r5lZ+0WhS5cuGDFiBGJiYvD000+jXbt2CA0NxZdffomWLVuiadOm6NSpEwAgPj4ezz77LDIydMjNBWbMeBcA9z5efPFFzJ8/H9nZ2Rg6dGi+sYmiMmvWLEycOBEtW7YEESEwMBCbNm0qWcGMISKH/bRt25a0IjycCCB67z372tm/n+0AROnp9rVlCp3OYH/bNvXsKjZXrbKe1tasWmWwryaZmQa7J0+qZ3foULb5zz9Rqtm8cIHov/+ILl0q3n537twhIqLs7GwaMGAA/fzzz8Xa/+JFthsbWzy7peH06ZKV1VZERRW+rgAiyIyuyvCOGVzF03ck+85ss6BdVwnvFLecc+bMQVhYGEJCQhAUFIRBgwZZ36kU9myJ1hMxiooM71jB2WP6xjblw1nq2VXzXJsayLU3JbWlPLGqlX1Ht2ULpKdvBunpq2/fmW0WtKtVTJ/KmkKVIbR58rn4RqXoW8GVPH1HGfCzN44g+lp4+ikpXkhOTlZV+NW+vlr8XaJWkP59+l5eXsXaT4Z3zKDFaxhcUfRdxWZBu1p4+nv3BiAkJA6JiYl2t5mYCNy9C2RmAhkZdjeXR1ISkJ7ONlX4gzAAwNWrwL17bFPNsgKGf84qDlL0zaCIvvT01bPvzDYL2tXC079716NY/7BUGt58E1i/Hnj2WWC5if/L+/lnTrN1K1Cvnu3sDh0KrF0LDB8OfPed7Y5riWHDgKNH1bVZGqTom0G5UewtEFo9pWnKptb2ndkmoP0TuVq85M2UTSJg8GBeP3jQtqKv2NOiUdX6OZuiImP6ZlCr8jiS6LpiTF+rAVVHmr0TFwfcumUfm6bO74ULhnUbvEomH9bCsps3A//3f0BWlu1satHQlAYp+maw1nonJgJ37tjOjiVb9sSa90kE/PAD/9G1PXClhk5r0TdX1vvuA6pVs48QmmpoLl40rNta9K2VdcAAYN06YP9+9Ww6GlL0zWCt9a5VCwgOtp2dgusKRMCkSYD+xXs2x5oQRUVxzLJNG/vbN2blSsDodeZ2s6mV6Juze++e/eyasnnrlsHm99/bzqYlj1upy97e6oq+8cDunj22s6nW+J+tkKJvBkuif+4cL+PibGen4LrCihXABx8AL7xQelslsX/wIC+TkuwzM8GUzcREYNQoYM4c24cdgPzX1JT9EyeA8uVtKwwFbZmqV8eOsd0pU+xj15TXbfwusPPn1bEZGwu4uwMPPABcsvx+tBLbNXVdjV98act/Z7Tm6TdpAlSowLOKHAEp+mawdCG3bCmcrrR2zB1Leb+SvaaCWbNvfKMYd8tthSlRMBZbG/91KgDr4rtoEXu/335rP7umzvW///Jy4UIgJcV2di153WfPGtavXbOdTUv3T2wsD942aMDTHW2JJbtKr6JmTSAhwfY2TdWlpCQgOpp7GVb+R0U1pOibwdKFNBal0lYeS0JABOjf4opTp0pnpyT2gfzdb1t6gpZsHj9uWLdHWMtamRWb9vJCAdP1yniAMz7e9nbNlbVcOaB1a9sKsLXwTmAgULs2cOOGbUNslsqq9Mzbt7dtWS3ZNP6nRFte09IgRd8Mli7k2bOAjw+vR0fbxo4pWwkJ/PHzA5KT7dM9tCaAMTFAx468rpbonz8PVK/O67b2BAvaNGVf6V1ERtp2dpHxsSyFDQH7iL6psly6xF63v799PH1zA7mK6OfmqteriYvjcYTmzfm+stW1teQgnj5tWLf1+EVJcVrRz84u3UU1NziTm8ui1K8ff7en6Csi26sXL23teVqzn5nJnkrPntzIGXui9rCvcOEC/99qhQrqi35KCnfJmzYFUlNtG9Ky1ticO2cYMLfFeJGCUofNNbCBgUDduuqEd7KyWHADA3kyBABcL/m/GxbZLsANqb8/O1FZWbYbL7Jk8/Rprsf160vRtysZGYCnJzB9esmPYe5CXrrEDUqPHmwjJqbkNgoev6AtRXC6dTPYtjWW7F+4wIIRHMzT+uzh6ZtqmC9cYHt169o29qpgqczK9ezfn5f2En1TzkRMDPDQQ/xdjfCOTsehtJYtgTp1ONRiqxko5jxuRfgUTx9gu7bCkgCvW8f2lT/MslXdsjR758wZdiCCgqTo25WICF4uXly09JmZwMiR+QctzXXZlBhdixZccUsrCtZEVwiDEKgd31YqaYMGQMOG6oR37tzh2TsNG/LNaW9Pv+D1VcrYuTMv7eH9mrKrOBMtWrAHbEvRN+fpX7zIDlJICIu+Tsfn3hpFuSbmwjtKHTYWfXt4+gXPr7Ld35+dCcB2dctaTL9ZM/b07eG0lQSnFP0HHwS6duWKVRQOHABWrQK6dCncahe8kIroN23KFcieA7kXLwIBAVxhPD3VF33lgax69dhTuXSpZCGz9HTguefyx6zN2VRCSFp5+oroP/AAL0sr+uYefitoVwkTNmnCjV1pyr12bf6ZIkpdLnjtlMkBISEGIbRW3nXrOH+zZ1tOZ04IlTocFGRf0S9oV7Hx+ut83wK2C6GZa2iys/meadyY7+H4eED/n+eaorroCyH6CiHOCiFihBBT7WWnbVuuYEURqUOHeJmeDvz5J68rF9CUp1+zJg80+vtb98ji4/MPVG3YAKxebfhuzdMPCgLc3NjbtofoZ2cb1guW9dw5wMODb/LAQO4RleQG3biRX7o1ejR/t/QUsCL6ann6pkTfz48FycurdKK/fTtfOyH4Zrfk6SthpUaNzIv+6dPW6/PVq/zSsR49DDFrcw6MIvrBwezpA+bLm5kJ9OnDrzAAgLlz+aE9czNvzIV3lNlCfn6Ary87M9YaOCK+j6KirJffnF3Fy27QwPCun5J43rm5fF2NH6Iz19DExfG2wEC2m5trn/pcXFQVfSGEO4DPATwMIBjAU0IIGzzXWpjAQH61a1KS9bS//MIXpXJlFmXAsqffjP97Oc/TN1XxDxzgWS8BAVzBV6/mCjlkCL+Nb/fuwsc35ek3bGgoT0lEPzUVOHLE8DRidDTw0kuGef/Gol/QvhLvLVfO0GsqSThLea7hwAG+eY1v3II3seJpN2zI3uedO0BamuH3d97hB3sGDmRRI+I3G37+ufnQxMqVwIQJhu/WRP+++1io69Yt7A3u3Qv89BPXLWu8+65h/cIF66E0T09ubEyJ/ty5LM5ubsBHH5l/BcjffxvWv/ySl+bq8unTXD8rVzaIvilRioriwcjt2/l7gwb8ANkPP/AHKHwdLYV36tXjOiUEl9WS43TxIve6AgI49PXkk/mfWRkzhrcpHrS1HkZgID8A5+dXsvvphx+48atXj2fUGdsq2JAr90pgIHv6QP64/tGjfA5atgSWLVP+Pdn+76NS29PvACCGiC4Q0T0APwJ41B6GFJFS4vumiI/nrteBAzxY2qyZweMy5+mfPJlf9LOzCzcsn30G3H8/e03TpvFMgeHDgRo1DGmGDWNvwZwQZGbyja+8Cbeg6C9axJ5St27cQzl8mIXt++9531WrgL59+WZu25bDUSdPAjNnAkuWGGZOWBL9q1f5ZgP4PAH5H+YpSHo6N25jxnDD8sYbfEOuXs35zM0FfvzReu+mWjWgalXDgJsiRDExwIwZvM/vv/NA/ZgxwDPPAOPHc5nq1WPbxu8K+uwzHt9Rnnmw5nHfdx+vFxy8HjaMx1eefBKoVAn47Tfg44+5B/P551zXbt40pDfOw9mzlntVihi6uXG9unHDkD42Nn845bXXOAwUEgJ0756/gdi3j6clBgayqBiXt6CYGDsV5jz9o0dZbAHglVe413rsGDe+7drxNbh1i+uXqYbVlPgah10t9ZaVWVRnzwLvv8/216/n8vXty87MN99wI7xwoWW7xp4+YNmJysnhVz+3bcs9XaWBe+89rmsAX5+PP7ZsU3naWQnvGOcjI8PwptETJ4Bx4/ia1qzJeTN+ANTWqP1qZX8Axq/uigPQ0R6GQkJ4aW52zX//AR06GL7Pns0VWBEGU95RZCTf1Mq0OkUQr1wxiOi+fVw5Ab5hfH3ZQxsxwhDmeeMNrqRnzpgXQKVCGnv6N26wh7ltGzB5Mm/fs4dF0lhQRowwrD/zjMEbHjrUcLy0NBZYU91UhRMnuOIDHHaoUCH/g1MKmzfzi6ws8eWXPDh69mzRQlpA/gG3xo2BTz7h72fOsAgsWcLfJ0xg8f/+e278li3jT+/efE0V8XvnHRZqc/ZTU9lW06aGMq9bx+sxMQav9umnef1RI3dFeXrXw4PflbRuHTcYM2cC8+dzqEypI4DpsKFi19+fr9nVqywWq1axR3jkCNcLHx9u9OPiuMcYFsY9n8cf5/rQqRP3hhRP09JAbs+evF6hAlClSmHRX7qUl//8YxjnUJg3D3j4Ya5X0dH8GTMGCA01/Q9WRJxm4EDDNn///BMoFLKzgUGDeLlpk8H2rVtcl//4gz8AN5TK08yWRL96dW6sAb6fjF+6lpkJ7NzJ16Bv3/zTk5UGRWHECG7gT5ww5BUofE1PneJ7s149wzM2iqf/++98/rdu5SnZX3/NEYe6dbkO9+/P53fmzMLnprSo7ekLE9vy+R9CiHFCiAghRERp/uEnKIg9gm+/5Qv4/vss8j4+3Joqgr9rF1fGwED27C5dYiE05elv3Mg3n9JCKx6L0noTseD7+fEN7+vL24cP59+ysoC//jJ4C8ePmxcg5YY19vQBvumnTeP1tDT2CJ59lr2QxERgzRrgf/9jDygri0Mbq1YBO3awsPz+u8FGRIR5T1/xcJWb1t2dG9Jjx9gDmzyZPcBp0wyC/3//xw1SWhofKyOD12Ni2Itp0oRvekuif+qUwcNXRF8Joa1bBzzxBN+YX33FInjwIHtcISHAggVczmPH+Drs38+D87m5LIxbtnB5zb17Rxmkb96cl/fdxw31zZt8QwJ8065ebehZffYZn+fz57mhCQrisM7589zo/O9/fOOfP2/+XGdns+3QUP6ulF/xgNet44kJYWEshD16sFicOMFClZnJ17t/f97WpQvnw5LoX7/Ox1d6rQB7+//f3rkHV1Hdcfz74xEaYnipIE8TJjyMFkqIGsfAIBIQSi1Qi6Q+0ODICC2tj3ag7TD4wDcPmdFanYJ2pkBlaItgU8IotNCppEjAECkEKBSKEqEtiDryyK9//M5xz96793rvTXY3ufd8ZnZ29+y597e/3XN+53eeazbvfPaZGP3y8miDD0gzx4ABjvEF5BmYskyZ//qXpFFz8T7dvGMWDufPS1r661/FyzZl//rXEtc0xJMmOc5dZDOP5vBhx8sHJD8dOybxz54Vh+Rb35I0eugQsHChM9fnzBkpXNetk3f92muS9nWfiH6vXgXNwIFynJMjhY42+qtXy/MuK5O8NXOm5J0VKyRN33WXNEP5QdCe/jEA5icT+gBwtV4y8ysAXgGA4uLilFu3iOSh1tQ41fVrrpHMoEvolSudMfCAZPbGRmnr9MoomzaJ53v55XJuGmJAjNCuXVLV1x61SVaWZN7z5+W4ttZd1TVl6ZEupqcPSJ/D/v2SuXJyxNMaP9753bRpskUyZowYirFjxWN++GG515tv9pa/c6fsZ81ywoYOlUKlrMzxzvTs1epqmd5uoj/dqZ//gAHyDM0RDGZmP3tWMuL06XJuNu/s2CE1He0ltmkjSwd4UVgILF4sI4Z0ja+iApgzRzJdLKOvZ09qo19QIPuDB6U2M2SI0wlYVOQ2Xv37y6ZHKXXr5qSTQYPkv81alXkPH3wg13Qzitn+26uXGJfFi711vflm8c6rqqSWunevU+s5eVKeqdfoHb2mk/n+Iydo6XkuXukJkDy2cKF4pFOmiEOjm1O9jL4eMGHWsHv3Fi/4zBmpaXz+ueTREycknc6Z4y37Bz+QGvOYMZK+3npL0pVeHtqUyyzPsKTECcvLk/jHj0vNrKZG+uCys8WJGDrUiZubC4wa5ZZ/9dWSFz/7zHmv5jtlljyiJ3ECzgStM2fEAZk5Uwx+JNnZ4qz5RdCe/t8BDCCifCLKAjANwJt+CVu4UPbZ2VJ619aKd71ihXio5eXu+NpoVVY6L1AbqCNHpAppGtguXaQTTBv9l16S2sX3vhf/vtq3F8P0/vuxvb9335XmAN3Wes01Yujmz5dOsClTEn4MX1JWJolxzhzxGtetiy1/925JkEOGOGElJZJBd+2S5pqTJ0X/mTOjDb4XgwdLJjO9SVOmNhh62YcuXaTg+Pe/JZMQSdU7Ua6+WozY9u1OJi4pES9dY2ZUvbqmLmh1YbVzpzTbmRk4FkRi5LXBB+QZVle7O19NvWfPlr12QLRHeuSI07YbT3bHjuLtPv20vFM9xBaQAisyLQPOZ/3MgvOKKxyjf+GCtJ8TiQcci+9+V9LxggVO+zvgXdBUV4uzY6YpPXzy6FGpsUyeLAb/wQdjG3xA0sUHH0hz3eDBYux1LR1wP9/6ejG2puHWTtTSpdInMHeu5LnNm90GPxbXXSe6bdvm7ek3NEj+0M2jgDNWv7JS7nfq1Nj/TySbHwTq6TPzBSL6PoCNANoCWM7MPi0lJh7KFVdIItNNLYAs2+tFQYEkpmeeccL0C127Vl6qHnYIyEvJy5MC5dQpqTlMny7G6qsYMkRevlnTMDvctm6VTjr94jt1Eg+0rk4Mn6lPKlRUiBdvdnSbiXblSjGa2lsHpA37vvvEu5o5U8JOn05cpp5kVlnpLXPVKtmPGCF7IsnQtbXyfEtK3J3hidCjh7OwFyAZcdu2aPmVleJNDx0qhSrgGH+tazIFjsno0dIc5VXYfPGFNGMATh9Rp06i5/79ct/5+U4zQaJor3b58uimyk8+kT6t0lJHV8DdvLN+vRS2a9cmbnwGDXKWsfDyfv/2N3E2srKcMF27qamRZrGNG6V9e8aMr5ana2S69nXwoLfR16OOxo1zwvTzXLJECvfHHktMR83IkbLX7w5w6/rcc7I3v7nRr58UKhs2yPs1ax6Bwswtdhs+fDgHzYIF5sAp5pEjJXzCBOaBA6Pj33knc8+ezu/27ElMzpIlbjkA85Ytcu3gQTl/6SX3b55+mrlNG+a//CV1/TQffcScm+uWP3++XGtokPOKiujf7dnDfPZsajLPn4/W+aGH5NrFi06Yyf33O+GLFqUmVxMpG2CurZVrU6fK+bZt7t8UFTlxv/giNbkffhgtd8kSubZokZwvW+b+TVkZ86BBzDk5zA88kJrc4cOZL72UuVMnkXHTTRL+yCNy/u677vjPPy/hp04xjx/P3Lu3vLNEqayU37/+utw7wDxihFz75z/l/NFH3b+5cEF01M/l8ceT1/PkSeb27SUt9ekj/zN0qHN94kTmgoLo3/XsKXH/+MfkZTIzX3WV8x8A8+DBEn7qlBPW2OjE188XYL7rrtRkJgqAHRzDroZu2ONtYRj9c+eY8/Kcl1NSwnz6tBzPmRMd/xe/cOJ+85uJyzlyJNoQvPOOXFu2zG2QNI2NzB9/nLpukWzZ4pb/859L+BtvyPmf/tR8sjS33uqW+eCDYvBnz5bzxx5zx3/9dSfuf//bNNleRh9gvu022RcWRv9m/Xq5tmBB02S/9ppbZnm5FOr5+czXXhsdf9686HSRLKtWuWWOGCGGHmAeNiw6vjbaK1YwEzlOQKLoQn3yZNELYL7hBrn205/Kfx4+HP07bagnTXIbyWT4zneYu3RxdP361yX888+lUJk1y/t3586lJo+ZeetW9/MtKBCHaNw4OV+zxh1/82Yn7tq1qctNBGv0k+SOO7yNw9at0XHr6pzrf/5zcnJOnIjOlKtXSyItLU09AySDKf/HPxaZpaXM/fqJF+YHHTt6P9+BA6Nlaq/p9tubLvepp2Ib/g4dmN96y/t3yXi78Ygl++23o+NWVTnXL15MTV5jo1vO4MHMV14pxzt3Rsc/dkyuZWczt20r58ly991umddey/zJJ3I8Zoz3b6qrmWfMSL0GySw1UFNuYaHov2aNnFdVpf7f8ejc2fudLlwYHffcOef6p5/6cz8aa/STpKIi+iXedJO3ETYzVrKYiSByO3q06XokQqRcbZBffNE/mdoLjNzq6rzjHzrUNI/MRDddmdvSpc33//Hw0vmee7zjXrzIPHYs8wsvNE3m/PnRMmPV4BobpfkQYJ4yJTV5n37KfP31jqxhw6SZCUi9GSVRdI3N3PLzmfv29c+BmTw5WmZOjjgrXixdGt2U5wfW6CfJjBnul9irV/z4J06IN5MKkQmmXz/mmprU/qs55AOSSf00gpHynnjCP1le9O3LnJWVemGdKpF6R7ap+0Fk7WbQoPjxn3uOuXt3p38pFZ59NlrXUaNS/79EefXVaLlt20pzlV+UlYkc3T/2xBOxDX6QxDP6abnKZlPRk630qIVJk+LH797dmenXVA4ckBEOQbFypXx4XbN1qwxda9/eP5nr17snyuhRGEFRV+essRQmHTv6LyNygk9pafz4jzwiQyb1SKtU6Nw5OkyPoPETvWqnZupUmcEba7Rec9Cpk+z1l/Q6d276yDq/sUbfg1dfldmWepJQTo5/srZtc6b6A/4aWy/Ky2UtF02PHu5hfH4wcaJ73ZMgjJ9Jbq7M3Qia+noZKqkJQu/bb5d5D8XFct5czkk89OJ+moqKYNL1+PEyoUvPYbnkEv/1ffllmZWth576aSuaC2v0PcjLk0kbeoy6nwnnxhu9Z++GRdAGOCyZXt6o3xQUOMYXCEbvXr2k5qZnFwdhlPQYeP2d46AMYbt2MqFLT0wLooC77DKZXKcLujDScrJYox8HPYPR70TrNRU7LMJItGF43WEY/UiC1FtPVgrCEN5yizQR6SUzgk5TevJXkF63NvrW02/laGNszkr1A90u2BIIwwBniqcfSZB66zVpgjJK5oqiYXm/YTxf6+lbEqJr17DvwMGvlf3iEYZ3pDvbzDXggybI/ps2KqcH+az1EiZBv1/dJxXkpwl1vvHbQWwOrNGPg15Lw++OzZbk6fu1yFM8wjD67drJej6Ra6UHwejRsg/yWesmjyCNkjb6QXu/+rkyBydTfwuhNRD00sqtCr0aoO4E84uW0Kb/5JPOx0aC4t57ZcXTRBao84Owhtb94Q/uT/4FgfZEzVVV/UYXMEGPSNP5NcgBEosWyVLboS2ilgTW6Mdh9mwZ7mau/+0XRUXBjs+PRH+YJUiWL5ct08jNdcZ1B8W3vy0fINHfFwgC3XkcdO3xzjtlxVD9VbAg6N5dloNuDRAHWQdKkuLiYt4R7yO3FoslYY4fdz5MEwRVVbKccX29/7Vlixsieo+Zi72uWU/fYskQgjT4gHylrQX7lBmL7ci1WCyWDMIafYvFYskgrNG3WCyWDKJFd+QS0ccAjjThLy4DcLKZbqc1kGn6AlbnTMHqnBxXMvPlXhdatNFvKkS0I1YPdjqSafoCVudMwercfNjmHYvFYskgrNG3WCyWDCLdjf4rYd9AwGSavoDVOVOwOjcTad2mb7FYLBY36e7pWywWi8XAGn2LxWLJINLS6BPRLUS0j4gOENHcsO+nKRDRciJqIKI9Rlg3ItpERPVq31WFExEtU3q/T0RFxm+mq/j1RDQ9DF0ShYj6EtFmItpLRHVE9EMVnpZ6E9HXiKiaiHYrfR9V4flEtF3d+2+JKEuFd1DnB9T1POO/5qnwfUQ0LhyNEoeI2hJRDRFtUOdprTMRHSaiWiLaRUQ7VFiw6ZqZ02oD0BbAQQD9AWQB2A2gMOz7aoI+IwEUAdhjhD0LYK46ngvgGXU8AUAlAAJQAmC7Cu8G4JDad1XHXcPWLY7OPQEUqeNcAPsBFKar3uq+L1HH7QFsV3q8AWCaCn8ZwAPqeBaAl9XxNAC/VceFKr13AJCv8kHbsPX7Ct0fArASwAZ1ntY6AzgM4LKIsEDTdegPwYeHegOAjcb5PADzwr6vJuqUF2H09wHoqY57Atinjn8JoDwyHoByAL80wl3xWvoGYB2AskzQG0BHADsBXA+ZjdlOhX+ZrgFsBHCDOm6n4lFkWjfjtcQNQB8AbwMYDWCD0iHddfYy+oGm63Rs3ukN4KhxfkyFpRM9mPlDAFB7/RnqWLq32meiqvHDIN5v2uqtmjl2AWgAsAnisf6PmfWXXs17/1Ivdf00gEvRivRVLAXwEwDqcyu4FOmvMwOoIqL3iOh+FRZouk7H9fS9vtOTKeNSY+neKp8JEV0CYC2AHzHzGYr9CaZWrzczXwTwDSLqAuD3AK7yiqb2rV5fIpoIoIGZ3yOiUTrYI2ra6Ky4kZmPE1F3AJuI6B9x4vqiczp6+scA9DXO+wA4HtK9+MUJIuoJAGrfoMJj6d7qngkRtYcY/N8w8+9UcNrrzcz/A7AF0obbhYi0Y2be+5d6qeudAfwHrUvfGwHcSkSHAayGNPEsRXrrDGY+rvYNkML9OgScrtPR6P8dwAA1CiAL0unzZsj31Ny8CUD32E+HtHnr8LtVr38JgNOqurgRwFgi6qpGBoxVYS0SEpf+VwD2MvNi41Ja6k1ElysPH0SUDWAMgL0ANgO4TUWL1Fc/h9sAvMPSuPsmgGlqpEs+gAEAqoPRIjmYeR4z92HmPEgefYeZ70Aa60xEOUSUq48h6XEPgk7XYXds+NRZMgEy4uMggJ+FfT9N1GUVgA8BnIeU8DMgbZlvA6hX+24qLgF4UeldC6DY+J8KAAfUdm/Yen2FzqWQ6ur7AHapbUK66g1gCIAape8eAPNVeH+IATsAYA2ADir8a+r8gLre3/ivn6nnsA/A+LB1S1D/UXBG76Stzkq33Wqr07Yp6HRtl2GwWCyWDCIdm3csFovFEgNr9C0WiyWDsEbfYrFYMghr9C0WiyWDsEbfYrFYMghr9C0WiyWDsEbfYrFYMoj/A7VVCIaJFg2zAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 432x288 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"\n",
"\n",
"a =890\n",
"ecg = load_recording(train_recording_files[a])[1]\n",
"baseline = calc_baseline(ecg)\n",
"\n",
"# Remove baseline from orgianl signal\n",
"ecg_out = ecg - baseline\n",
"\n",
"plt.subplot(2, 1, 1)\n",
"plt.plot(ecg, \"b-\", label=\"signal\")\n",
"plt.plot(baseline, \"r-\", label=\"baseline\")\n",
"plt.legend()\n",
"\n",
"plt.subplot(2, 1, 2)\n",
"plt.plot(ecg_out, \"b-\", label=\"signal - baseline\")\n",
"plt.legend()\n",
"plt.savefig(f'BaseLine Correction{a}.png')\n",
"plt.show()\n"
]
},
{
"cell_type": "code",
"execution_count": 68,
"metadata": {},
"outputs": [],
"source": [
"ecg = load_recording(train_recording_files[20])[4,:8192]"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"from scipy import signal\n",
"from scipy.signal import butter, iirnotch, lfilter\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"## A high pass filter allows frequencies higher than a cut-off value\n",
"def butter_highpass(cutoff, fs, order=5):\n",
" nyq = 0.5*fs\n",
" normal_cutoff = cutoff/nyq\n",
" b, a = butter(order, normal_cutoff, btype='high', analog=False, output='ba')\n",
" return b, a\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"def butter_lowpass(cutoff, fs, order=5):\n",
" nyq = 0.5*fs\n",
" normal_cutoff = cutoff/nyq\n",
" b, a = butter(order, normal_cutoff, btype='low', analog=False, output='ba')\n",
" return b, a\n",
"\n",
"\n",
"def final_filter(data, fs, order=5):\n",
"# b, a = butter_highpass(cutoff_high, fs, order=order)\n",
"# x = lfilter(b, a, data)\n",
" b, a = butter_lowpass(cutoff_low, fs, order=order)\n",
" x = lfilter(b, a, data)\n",
" return x\n",
"\n",
"fs = 500\n",
"## Order of five works well with ECG signals\n",
"cutoff_high = .5\n",
"cutoff_low =100\n",
"powerline = 500\n",
"# order = 5\n",
"# plt.figure(1)\n",
"# ax1 = plt.subplot(211)\n",
"# plt.plot(ecg)\n",
"# ax1.set_title(\"Raw ECG signal\")\n",
"\n",
"# filter_signal = final_filter(ecg, fs, order)\n",
"# ax2 = plt.subplot(212)\n",
"# plt.plot(filter_signal)\n",
"# ax2.set_title(\"Clean ECG signal\")\n",
"# plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {},
"outputs": [],
"source": [
"from scipy.io import loadmat\n",
"import tqdm\n",
"import os\n",
"from scipy.io import savemat\n",
"path = 'Baseline correction test'\n",
"from helper_code import *\n",
"train_data_directory = 'test_data'\n",
"train_header_files, train_recording_files = find_challenge_files(train_data_directory)\n",
"import numpy as np\n",
"import pywt\n",
"\n",
"\n",
"def calc_baseline(signal):\n",
" ssds = np.zeros((3))\n",
"\n",
" cur_lp = np.copy(signal)\n",
" iterations = 0\n",
" while True:\n",
" # Decompose 1 level\n",
" lp, hp = pywt.dwt(cur_lp, \"db4\")\n",
"\n",
" # Shift and calculate the energy of detail/high pass coefficient\n",
" ssds = np.concatenate(([np.sum(hp ** 2)], ssds[:-1]))\n",
"\n",
" # Check if we are in the local minimum of energy function of high-pass signal\n",
" if ssds[2] > ssds[1] and ssds[1] < ssds[0]:\n",
" break\n",
"\n",
" cur_lp = lp[:]\n",
" iterations += 1\n",
" if iterations == 20:\n",
" break\n",
" \n",
" # Reconstruct the baseline from this level low pass signal up to the original length\n",
" baseline = cur_lp[:]\n",
" for _ in range(iterations):\n",
" baseline = pywt.idwt(baseline, np.zeros((len(baseline))), \"db4\")\n",
"\n",
" return baseline[: len(signal)]\n",
"\n",
" \n"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████████████████████████████████████████████████████████████████████████| 4413/4413 [03:14<00:00, 22.73it/s]\n"
]
}
],
"source": [
"for i in tqdm.tqdm(train_recording_files) :\n",
" x = loadmat (i)\n",
" #print(i)\n",
" for j in range(x['val'].shape[0]):\n",
" header = load_header(i.replace('mat','hea'))\n",
" orig_sr = int(header.split(' ')[2])\n",
" ecg = x['val'][j]\n",
" ecg = final_filter(ecg,orig_sr,5)\n",
" baseline = calc_baseline(ecg)\n",
" ecg_out = ecg - baseline\n",
" x['val'][j] = ecg_out\n",
" savemat(os.path.join(path,i.split('\\\\')[-1]), x) "
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x26636de43c8>]"
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAD4CAYAAADhNOGaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+j8jraAAAPl0lEQVR4nO3ccazdZX3H8fdnrdRNDRQoylq61tBkq9mi7gRcdAtRgeKmJRt/1C2x2ViabCOZM8tWQjYE/UPMNpyRbWnApDOb4NiMncawCpIliyK3gkqH2GvF0cEEU2RjThn63R/nKTtez6W3PYd7ufd5v5KT83ue33PO+X5Pzu3n/n6/c5uqQpLUrx9Z6gIkSUvLIJCkzhkEktQ5g0CSOmcQSFLnVi91ASfjzDPPrE2bNi11GZK0rBw4cOCbVbVu7vyyDIJNmzYxMzOz1GVI0rKS5Ovj5j01JEmdMwgkqXMGgSR1ziCQpM4ZBJLUOYNAkjpnEEhS5wwCSeqcQSBJnTMIJKlzBoEkdc4gkKTOGQSS1DmDQJI6ZxBIUucMAknqnEEgSZ0zCCSpcwaBJHXOIJCkzhkEktQ5g0CSOmcQSFLnDAJJ6pxBIEmdm0oQJNmW5IEks0l2j9m/Jsktbf9dSTbN2b8xyZNJfn8a9UiSFm7iIEiyCrgBuATYCrw1ydY5yy4HHq+qc4Hrgevm7L8e+OSktUiSTtw0jgjOA2ar6nBVPQXcDGyfs2Y7sLdt3wq8IUkAklwKHAYOTqEWSdIJmkYQrAceGhkfaXNj11TV08ATwBlJXgT8IXDN8V4kya4kM0lmHnvssSmULUmC6QRBxszVAtdcA1xfVU8e70Wqak9VDapqsG7dupMoU5I0zuopPMcR4JyR8Qbg4XnWHEmyGjgVOAqcD1yW5L3AacD3k3ynqj4whbokSQswjSC4G9iSZDPw78AO4FfnrNkH7AQ+A1wG3FFVBfz8sQVJ3gk8aQhI0uKaOAiq6ukkVwC3AauAD1bVwSTXAjNVtQ+4CfhQklmGRwI7Jn1dSdJ0ZPiL+fIyGAxqZmZmqcuQpGUlyYGqGsyd9y+LJalzBoEkdc4gkKTOGQSS1DmDQJI6ZxBIUucMAknqnEEgSZ0zCCSpcwaBJHXOIJCkzhkEktQ5g0CSOmcQSFLnDAJJ6pxBIEmdMwgkqXMGgSR1ziCQpM4ZBJLUOYNAkjpnEEhS5wwCSeqcQSBJnTMIJKlzBoEkdc4gkKTOGQSS1DmDQJI6ZxBIUuemEgRJtiV5IMlskt1j9q9Jckvbf1eSTW3+wiQHknyp3b9+GvVIkhZu4iBIsgq4AbgE2Aq8NcnWOcsuBx6vqnOB64Hr2vw3gTdX1U8DO4EPTVqPJOnETOOI4DxgtqoOV9VTwM3A9jlrtgN72/atwBuSpKruqaqH2/xB4IVJ1kyhJknSAk0jCNYDD42Mj7S5sWuq6mngCeCMOWt+Bbinqr47hZokSQu0egrPkTFzdSJrkryC4emii+Z9kWQXsAtg48aNJ16lJGmsaRwRHAHOGRlvAB6eb02S1cCpwNE23gB8FHhbVX11vhepqj1VNaiqwbp166ZQtiQJphMEdwNbkmxOcgqwA9g3Z80+hheDAS4D7qiqSnIa8Angyqr6lynUIkk6QRMHQTvnfwVwG3A/8JGqOpjk2iRvactuAs5IMgu8Azj2FdMrgHOBP0pyb7udNWlNkqSFS9Xc0/nPf4PBoGZmZpa6DElaVpIcqKrB3Hn/sliSOmcQSFLnDAJJ6pxBIEmdMwgkqXMGgSR1ziCQpM4ZBJLUOYNAkjpnEEhS5wwCSeqcQSBJnTMIJKlzBoEkdc4gkKTOGQSS1DmDQJI6ZxBIUucMAknqnEEgSZ0zCCSpcwaBJHXOIJCkzhkEktQ5g0CSOmcQSFLnDAJJ6pxBIEmdMwgkqXMGgSR1ziCQpM5NJQiSbEvyQJLZJLvH7F+T5Ja2/64km0b2XdnmH0hy8TTqkSQt3MRBkGQVcANwCbAVeGuSrXOWXQ48XlXnAtcD17XHbgV2AK8AtgF/0Z5PkrRIVk/hOc4DZqvqMECSm4HtwL+OrNkOvLNt3wp8IEna/M1V9V3ga0lm2/N9Zgp1/ZBr/vEg//HEd56Lp5akRfHnO17FKaune1Z/GkGwHnhoZHwEOH++NVX1dJIngDPa/GfnPHb9uBdJsgvYBbBx48aTKvSho//Dvx3975N6rCQ9HxQ19eecRhBkzNzcSudbs5DHDier9gB7AAaDwUm9EzfuHJzMwyRpRZvG8cUR4JyR8Qbg4fnWJFkNnAocXeBjJUnPoWkEwd3AliSbk5zC8OLvvjlr9gE72/ZlwB1VVW1+R/tW0WZgC/C5KdQkSVqgiU8NtXP+VwC3AauAD1bVwSTXAjNVtQ+4CfhQuxh8lGFY0NZ9hOGF5aeB36mq701akyRp4TL8xXx5GQwGNTMzs9RlSNKykuRAVf3QxVL/sliSOmcQSFLnDAJJ6pxBIEmdMwgkqXMGgSR1ziCQpM4ZBJLUOYNAkjpnEEhS5wwCSeqcQSBJnTMIJKlzBoEkdc4gkKTOGQSS1DmDQJI6ZxBIUucMAknqnEEgSZ0zCCSpcwaBJHXOIJCkzhkEktQ5g0CSOmcQSFLnDAJJ6pxBIEmdMwgkqXMGgSR1bqIgSHJ6kv1JDrX7tfOs29nWHEqys839WJJPJPlykoNJ3jNJLZKkkzPpEcFu4Paq2gLc3sY/IMnpwNXA+cB5wNUjgfEnVfWTwKuA1ya5ZMJ6JEknaNIg2A7sbdt7gUvHrLkY2F9VR6vqcWA/sK2qvl1VnwaoqqeAzwMbJqxHknSCJg2Cl1bVIwDt/qwxa9YDD42Mj7S5ZyQ5DXgzw6MKSdIiWn28BUk+BbxszK6rFvgaGTNXI8+/Gvgw8P6qOvwsdewCdgFs3LhxgS8tSTqe4wZBVb1xvn1JvpHk7Kp6JMnZwKNjlh0BLhgZbwDuHBnvAQ5V1fuOU8eetpbBYFDPtlaStHCTnhraB+xs2zuBj41ZcxtwUZK17SLxRW2OJO8GTgXePmEdkqSTNGkQvAe4MMkh4MI2JskgyY0AVXUUeBdwd7tdW1VHk2xgeHppK/D5JPcm+c0J65EknaBULb+zLIPBoGZmZpa6DElaVpIcqKrB3Hn/sliSOmcQSFLnDAJJ6pxBIEmdMwgkqXMGgSR1ziCQpM4ZBJLUOYNAkjpnEEhS5wwCSeqcQSBJnTMIJKlzBoEkdc4gkKTOGQSS1DmDQJI6ZxBIUucMAknqnEEgSZ0zCCSpcwaBJHXOIJCkzhkEktQ5g0CSOmcQSFLnDAJJ6pxBIEmdMwgkqXMGgSR1ziCQpM5NFARJTk+yP8mhdr92nnU725pDSXaO2b8vyX2T1CJJOjmTHhHsBm6vqi3A7W38A5KcDlwNnA+cB1w9GhhJfhl4csI6JEknadIg2A7sbdt7gUvHrLkY2F9VR6vqcWA/sA0gyYuBdwDvnrAOSdJJmjQIXlpVjwC0+7PGrFkPPDQyPtLmAN4F/Cnw7eO9UJJdSWaSzDz22GOTVS1Jesbq4y1I8ingZWN2XbXA18iYuUrySuDcqvq9JJuO9yRVtQfYAzAYDGqBry1JOo7jBkFVvXG+fUm+keTsqnokydnAo2OWHQEuGBlvAO4Efg742SQPtjrOSnJnVV2AJGnRTHpqaB9w7FtAO4GPjVlzG3BRkrXtIvFFwG1V9ZdV9eNVtQl4HfAVQ0CSFt+kQfAe4MIkh4AL25gkgyQ3AlTVUYbXAu5ut2vbnCTpeSBVy+90+2AwqJmZmaUuQ5KWlSQHqmowd96/LJakzhkEktQ5g0CSOmcQSFLnDAJJ6pxBIEmdMwgkqXMGgSR1ziCQpM4ZBJLUOYNAkjpnEEhS5wwCSeqcQSBJnTMIJKlzBoEkdc4gkKTOGQSS1DmDQJI6ZxBIUucMAknqnEEgSZ0zCCSpcwaBJHUuVbXUNZywJI8BXz/Jh58JfHOK5SwH9tyH3nrurV+YvOefqKp1cyeXZRBMIslMVQ2Wuo7FZM996K3n3vqF565nTw1JUucMAknqXI9BsGepC1gC9tyH3nrurV94jnru7hqBJOkH9XhEIEkaYRBIUue6CYIk25I8kGQ2ye6lrmcSST6Y5NEk943MnZ5kf5JD7X5tm0+S97e+v5jk1SOP2dnWH0qycyl6Wagk5yT5dJL7kxxM8rttfsX2neSFST6X5Aut52va/OYkd7X6b0lySptf08azbf+mkee6ss0/kOTipeloYZKsSnJPko+38YruFyDJg0m+lOTeJDNtbvE+21W14m/AKuCrwMuBU4AvAFuXuq4J+vkF4NXAfSNz7wV2t+3dwHVt+03AJ4EArwHuavOnA4fb/dq2vXape3uWns8GXt22XwJ8Bdi6kvtutb+4bb8AuKv18hFgR5v/K+C32vZvA3/VtncAt7Ttre0zvwbY3H4WVi11f8/S9zuAvwU+3sYrut9W84PAmXPmFu2z3csRwXnAbFUdrqqngJuB7Utc00mrqn8Gjs6Z3g7sbdt7gUtH5v+6hj4LnJbkbOBiYH9VHa2qx4H9wLbnvvqTU1WPVNXn2/Z/AfcD61nBfbfan2zDF7RbAa8Hbm3zc3s+9l7cCrwhSdr8zVX13ar6GjDL8GfieSfJBuAXgRvbOKzgfo9j0T7bvQTBeuChkfGRNreSvLSqHoHhP5rAWW1+vt6X7XvSTgG8iuFvyCu673aa5F7gUYY/2F8FvlVVT7clo/U/01vb/wRwBsur5/cBfwB8v43PYGX3e0wB/5TkQJJdbW7RPturJyh8OcmYuV6+Nztf78vyPUnyYuDvgbdX1X8OfwEcv3TM3LLru6q+B7wyyWnAR4GfGres3S/rnpP8EvBoVR1IcsGx6TFLV0S/c7y2qh5OchawP8mXn2Xt1Pvu5YjgCHDOyHgD8PAS1fJc+UY7PKTdP9rm5+t92b0nSV7AMAT+pqr+oU2v+L4BqupbwJ0MzwmfluTYL3Gj9T/TW9t/KsNTiMul59cCb0nyIMPTt69neISwUvt9RlU93O4fZRj457GIn+1eguBuYEv79sEpDC8s7VvimqZtH3DsWwI7gY+NzL+tfdPgNcAT7TDzNuCiJGvbtxEuanPPS+3c703A/VX1ZyO7VmzfSda1IwGS/CjwRobXRj4NXNaWze352HtxGXBHDa8i7gN2tG/ZbAa2AJ9bnC4WrqqurKoNVbWJ4c/oHVX1a6zQfo9J8qIkLzm2zfAzeR+L+dle6qvli3VjeKX9KwzPsV611PVM2MuHgUeA/2X4W8DlDM+N3g4cavent7UBbmh9fwkYjDzPbzC8kDYL/PpS93Wcnl/H8DD3i8C97famldw38DPAPa3n+4A/bvMvZ/gP2yzwd8CaNv/CNp5t+18+8lxXtffiAeCSpe5tAb1fwP9/a2hF99v6+0K7HTz279Nifrb9LyYkqXO9nBqSJM3DIJCkzhkEktQ5g0CSOmcQSFLnDAJJ6pxBIEmd+z9+BVCF56RbTAAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"x = loadmat ('training_data\\A0718.mat')\n",
"#plt.plot(x['val'][0])\n",
"baseline = calc_baseline(x['val'][10])\n",
"ecg_out = x['val'][10] - baseline\n",
"plt.plot(x['val'][11])"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x26632830808>]"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"x = loadmat ('training_data\\A0718.mat')\n",
"plt.plot(x['val'][11])"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"svmem(total=17126621184, available=11994206208, percent=30.0, used=5132414976, free=11994206208)"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import psutil # Can be found at https://pypi.org/project/psutil/\n",
"\n",
"psutil.virtual_memory()"
]
},
{
"cell_type": "code",
"execution_count": 117,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|█████████████████████████████████████████████████████████████████████████████| 4413/4413 [00:24<00:00, 183.07it/s]\n"
]
}
],
"source": [
"import shutil\n",
"import tqdm\n",
"for i in tqdm.tqdm(train_recording_files):\n",
" shutil.copyfile(i.replace('mat','hea'),i.replace('test_data',train_data_directory).replace('mat','hea'))"
]
},
{
"cell_type": "code",
"execution_count": 116,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'Baseline correction test\\\\A0011.hea'"
]
},
"execution_count": 116,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"train_recording_files[0].replace('test_data',train_data_directory).replace('mat','hea')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"train_recording_files.replace"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.5"
}
},
"nbformat": 4,
"nbformat_minor": 4
}