Skip to content

Instantly share code, notes, and snippets.

@rlabbe
Created October 13, 2014 02:19
Show Gist options
  • Save rlabbe/fdd196b9e3c24a3f0518 to your computer and use it in GitHub Desktop.
Save rlabbe/fdd196b9e3c24a3f0518 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"worksheets": [
{
"cells": [
{
"metadata": {},
"cell_type": "markdown",
"source": "# bvp_solver\n\nThis is just the code from the bvp_solver tutorial. I did not write this code. \n\nhttps://pythonhosted.org/scikits.bvp_solver/tutorial.html\n"
},
{
"metadata": {},
"cell_type": "code",
"input": "import scikits.bvp_solver as bvp\nimport numpy as np",
"prompt_number": 1,
"outputs": [
{
"stream": "stderr",
"output_type": "stream",
"text": "/home/rlabbe/anaconda3/envs/python2/lib/python2.7/site-packages/setuptools-3.6-py2.7.egg/pkg_resources.py:1045: UserWarning: /home/rlabbe/.python-eggs is writable by group/others and vulnerable to attack when used with get_resource_filename. Consider a more secure location (set with .set_extraction_path or the PYTHON_EGG_CACHE environment variable).\n"
}
],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {},
"cell_type": "code",
"input": "T10 = 130\nT2Ahx = 70\nAhx = 5\nU = 1.0",
"prompt_number": 2,
"outputs": [],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {},
"cell_type": "code",
"input": "def function(a, T):\n q = (T[0] - T[1]) * U # calculate the heat transfer from stream 1 to stream 2\n return np.array([-q , # evaluate dT1/dA\n q/-2.0]) # evaluate dT2/dA",
"prompt_number": 3,
"outputs": [],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {},
"cell_type": "code",
"input": "def boundary_conditions(Ta,Tb):\n\n return (np.array([Ta[0] - T10]), #evaluate the difference between the temperature of the hot\n #stream on theleft and the required boundary condition\n np.array([Tb[1] - T2Ahx])) #evaluate the difference between the temperature of the cold\n #stream on the right and the required boundary condition",
"prompt_number": 7,
"outputs": [],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {},
"cell_type": "code",
"input": "problem = bvp.ProblemDefinition(num_ODE=2,\n num_parameters=0,\n num_left_boundary_conditions=1,\n boundary_points=(0, Ahx),\n function=function,\n boundary_conditions=boundary_conditions)",
"prompt_number": 8,
"outputs": [],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {},
"cell_type": "code",
"input": "solution = bvp.solve(problem,solution_guess=((T10 + T2Ahx)/2.0,\n (T10 + T2Ahx)/2.0))",
"prompt_number": 9,
"outputs": [],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {},
"cell_type": "code",
"input": "A = np.linspace(0,Ahx, 45)\nT = solution(A)",
"prompt_number": 12,
"outputs": [],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {},
"cell_type": "code",
"input": "%matplotlib inline\nimport matplotlib.pyplot as plt\nplt.plot(A, T[0,:],'-')\nplt.plot(A, T[1,:],'-')\nplt.show()",
"prompt_number": 14,
"outputs": [
{
"text": "<matplotlib.figure.Figure at 0x7fbb677575d0>",
"output_type": "display_data",
"png": "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\n",
"metadata": {}
}
],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {},
"cell_type": "markdown",
"source": "# Solve second order\n\n$$y'' + (100-\\beta)y + y^3 = 0$$\n\nBoundary values\n$$\\begin{aligned}y(1) &= 0 \\\\\ny(-1) &= 0 \\\\\ny'(-1) &= 1\\end{aligned}$$\n\n\nFirst order equations:\n\n$$\\begin{aligned} y_1&= y_2 \\\\\ny'_2 &= (\\beta - 100)y_1 - y^3_1\\end{aligned}$$"
},
{
"metadata": {},
"cell_type": "code",
"input": "%matplotlib inline\nimport scikits.bvp_solver as bvp\nimport numpy as np\nimport matplotlib.pyplot as plt\n\ndef rhs_bvp (x, y):\n return np.array([y[1], (y[2]-100)*y[0] - y[0]**3])\n\ndef bc_bvp(y1, yr):\n return np.array([y1[0], y1[1]-1, yr[0]])\n\n\nproblem = bvp.ProblemDefinition(num_ODE=2,\n num_parameters=0,\n num_left_boundary_conditions=1,\n boundary_points=(0, 0, -1),\n function=rhs_bvp,\n boundary_conditions=bc_bvp)\n\nsolution = bvp.solve(problem,solution_guess=(0., 0.), trace=2)",
"outputs": [],
"language": "python",
"trusted": true,
"collapsed": false
},
{
"metadata": {},
"cell_type": "code",
"input": "%matplotlib inline\nimport scikits.bvp_solver\nfrom numpy import zeros, array, linspace\nimport pylab as pl\n\n# Definition of the problem parameters\n\nPeL = 16.0\nCi0 = 1.0\nkt = 2.0\n\n# By converting the original problem into a set of 2 firts order\n# ODE's. Reaction rate is then Ri = -k*Ci0*(1-vi) the problem is defined as:\n\ndvdz = zeros(2)\ndef systemode(z, v):\n dvdz[0] = v[1]\n dvdz[1] = PeL*(v[1]-kt*(1.0-v[0]))\n return dvdz\n\n# Defining the BC on the left (z=0) and the right (z=1) side:\n\nBCleft = zeros(1)\nBCright = zeros(1)\ndef boundary_conditions(va, vb):\n BCleft[0] = va[1] - PeL * va[0]\n BCright[0] = vb[1]\n return (BCleft), (BCright)\n\n# Problem definition: a set of 2 first order ODE with a BC on the left side.\n# Because the total length was scaled, the solution is reduced within an\n# interval of (0.0 , 1.0)\n\nproblem = scikits.bvp_solver.ProblemDefinition(num_ODE = 2,\n num_parameters = 0,\n num_left_boundary_conditions = 1,\n boundary_points = (0.0, 1.0),\n function = systemode,\n boundary_conditions = boundary_conditions)\n\n# By using conversion instead of concentration the solution is narrowed to\n# an interval where the minimum value is 0.0 and the maximum is 1.0.\n# Thus (0.0 , 1.0) is a sensible guess to initialize the problem\n\nguess = array ([0.0 , 1.0])\n\n# Once the problem and the BC's are being defined the solution of the problem\n# is done by calling\n\nsolution = scikits.bvp_solver.solve(problem, solution_guess = guess, max_subintervals = 300)\n\n# Getting the solution from z =0 to z = 1.0\n\nz = linspace (0.0, 1.0, 100, endpoint = True )\nv = solution(z)\n\n# Comparison of the results\n\nprint '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'\nprint 'The analytical solution of the problem at the outlet is: '\nprint 'Final Conversion= 0.83605373297390484' \nprint 'Final Concentration = 0.16394626702609519'\nprint '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'\nprint 'The numerical solution of the problem at the outlet is: '\nprint 'Final Conversion= ', v[0,99]\nprint 'Final Concentration = ', 1.0- v[0,99]\nprint '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'\n\n# Plotting of the solution along z\npl.figure()\npl.subplot(1,2,1)\npl.plot(z, v[1,:], 'b-', z, v[0,:], 'g-')\npl.legend(('dv/dz[0]', 'dv/dz[1]'))\npl.xlabel('Normalized Reactor Length')\npl.ylabel('dv/dz')\npl.title('System of ODEs for the Axial Dispersion Model')\npl.grid('on')\n\npl.subplot(1,2,2)\npl.plot(z, v[0,:], 'g-')\npl.xlabel('Normalized Reactor Length')\npl.ylabel('Conversion of Reactant')\npl.title('Conversion produced by the Axial Dispersion Model')\npl.grid('on')\npl.show()",
"prompt_number": 5,
"outputs": [
{
"stream": "stdout",
"output_type": "stream",
"text": "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nThe analytical solution of the problem at the outlet is: \nFinal Conversion= 0.83605373297390484\nFinal Concentration = 0.16394626702609519\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nThe numerical solution of the problem at the outlet is: \nFinal Conversion= 0.836053679294\nFinal Concentration = 0.163946320706\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"
},
{
"text": "<matplotlib.figure.Figure at 0x7f2fb48ede10>",
"output_type": "display_data",
"png": "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\nieHi4uIoVqwYUVFRACQkJLB27VpatmwJwMyZM6lQoQJFixbl448/TpJGoUKFCAoKIigoiMDAQLJl\ny8axY8ccyjN9+nReeuklqlWrRqFChXj//feZNm2aG55co9FoHKONtZdita8pIMA1v/QSExNDu3bt\n6N27N1euXKFjx44sWLAAgK5duzJ79uzEsKtXr6Z48eLUrFkTgG3btlGxYkWKFCnC3r17eeWVV/jf\n//7H6dOnuXTpEidP2rZ+vnr1KtHR0URHR9O/f38ef/xxypQp41CmvXv3UqNGjcTjhx9+mHPnznHl\nypX0P6Cf44/+W396ZqUUt2JveTRNf0GvYKZxiFW9ur/99htxcXG8/vrrALRv35569eoREBBAt27d\nqFWrFnfu3CFPnjzMmjWLrl27Jt5r3wX+448/0rp1ax577DEAPvroI7766qt70ps7dy6zZ89mx44d\n5Mjh+HO4ceMGBQsWTDwuUKAAANHR0RQuXNg1D67RZDHuxN1hy4ktbDy6ke2nt7Pv4j5OXD9B9oDs\nVovmk+iWtZfir76m06dP39PCrVChAgCVKlWiWrVqLFmyhFu3brF06VK6deuWGG7lypW0atUKgDNn\nzlC2bNnEa/ny5SM4ODhJvJGRkbz22mssWrTonmv2BAYGcv369cTja9euARAUFJTBp/Rf/NF/60vP\nfCfuDgv2LqDDvA6UGFOC99a/R2xCLH3r9GV1j9XcGHKDO0PvuDRNjaBb1hqvolSpUpw6dSrJuWPH\njnH//fcDtq7w+Ph4QkNDqVixIgBnz57lzJkz1KpVKzGev//+OzGOW7ducenSpcTj8+fP89xzz/H1\n118n6eJ2xIMPPkhUVBQdOnQAYNeuXZQoUUK3qjV+wz+X/uGb7d8w88+Z1ChZg24PdWPisxMpmq+o\n1aJpNICsn+yTeOuzxcTEqPLly6svv/xSxcTEqAULFqicOXOqYcOGKaWUOnPmjMqbN696/PHH1bhx\n4xLvmzp1qnrxxRcTj//66y8VGBioNm3apO7evaveeustlSNHDrVu3ToVGxurGjdurN5777170v/+\n++/VY489luTcqlWrVMmSJdXevXvV5cuXVZMmTdSQIUOShJk2bdo995mklNeAlUPInXshGr/m12O/\nqmdnPauKfVpMDV4zWB2+fNip+yzWbZ9Ed4NrvIqcOXOycOFCpk2bRnBwMPPmzaN9+/aJ10uWLEmj\nRo3YunUrnTt3Tjy/fPnyxC5wkJHjEyZMoFu3bpQuXZoiRYpQrlw5AE6ePMmmTZsYO3Zs4ojwAgUK\ncOLECYcytWjRgkGDBtG0aVNCQkKoVKkSI0aMSBJG6albGh9BKcW6w+toMq0J4YvCefaBZzn2xjE+\naf4J9xW+z2rxNBqHuLXWmhoRERFujd/KZ3M1sbGxqmjRoio6OjrTcc2cOVPly5dPFS5cWO3bt8+p\ne5o3b66CgoJU8+bNHV5PKa/xw5a1u/XaG9POSs+89cRWFTYtTD0w7gE1c9dMFRsfm6F0LdZtn0T7\nrDVZnitXrvCf//yHwMDATMfVo0cPevToka571qxZk+l000FLYCyQHZgCjEp2vSjwA1AS+b7HANM8\nKJ8mC3Lw8kEGrx3M76d+Z3iT4fSu2Zsc2bR58Cb0fqOpY1QSfQ+9n7XncOF+1tmB/UBz4BSwHegK\n/G0XZjiQGxiCGO79QAkgLllcPqvbGue5fvc6H278kGlR0xjwyADebPgmeXPmzXS8ej9r16N91hpN\n1qE+cBA4CsQCc4C2ycKcAQoY/xcALnGvodb4OUopZu6aSdWvqnL59mX2vLKHdxu/6xJDrXEP2lh7\nKf46z1qTKmUA+1FwJ41z9kwGHgROA7uA1z0jmnP40pxjb083pbT/vvA3YdPDGPv7WH7q/BNT206l\nZGBJzwunSRfaKaHRZB2c6bd+F4gCwoBKwBqgBhCdPGB4eDghISGArJVes2bNxOUpzULe1ccm7oo/\nteOoqCiPpucNxyYbNmwgJj6Gzdk2M2H7BLoHdadNlTY0KNvAJemNHTuWqKioRH3SuB7tU0gdn/Xr\naZ+153Chz7oh4pNuaRwPARJIOshsBfBfYLNxvA54B9iRLC6f1W3NvWw9sZUXlrxAleAqfNXqK8oW\nKJv2TZlA+6xdj25ZazRZhx3AA0AI0s3dGRlgZs8+ZADaZmRgWRXgsOdE1HgTt2NvM3T9UGbtmcW4\nluPoENrB6b3hNd6F9ll7KdpnrXFAHPAqsBrYC8xFRoL3M34AHwN1EX/1WmAQcNnjkqaAt/lvfTnd\nbae2UWVgFU5Gn2T3y7vp+GBHbaizMNpYa7ye8PBwhg0blul4QkJCWLduXaphpk2bRvbs2SlQoAD7\n9+93Kt4nnniCvHnz0rhx40zL6AQrkdby/cAnxrlJxg/gItAa8VNXB2Z5QiiN9xAbH8vwDcNpPbs1\nfWr2YW6HuXoNbx9AG2svxer9rL2JgIAAp1sEs2fPpnv37pmK59FHH+X69etUqVIFgD179tCiRQuK\nFStGtmz3fjLr169n4sSJTsnn7/jT3s5WpHvo8iEaf9+Y307+RmS/SEb0GZH2TZosgTbWmiyBs4Oh\n7Pe0dlVauXLlokuXLnz33XeZlk+jcRczd82k4XcN6Va9Gyu6r6B0UGmrRdK4EG2s02DbNmvS9Wef\ndWRkJLVr16ZAgQJ06dKFO3dkf9zQ0FCWL1+eGC4uLo5ixYoRFRUFQEJCAmvXrqVlSxksPXPmTCpU\nqEDRokX5+OOPk6RRqFChxE08AgMDyZYtG8eOHXMoT+XKlenTpw+hoaHueFy/QvusXc+NmBv0+qkX\nn2z6hHW91tG/QX+yBWTzSNoaz6FHg6fBq6/Cb7+Bg95PnyZghGsGoqgP0tfijImJoV27dgwYMIBX\nX32VRYsW0bVrV955553EvazNlvPq1aspXrw4NWvWBGDbtm1UrFiRIkWKsHfvXl555RVWrlxJ/fr1\nGTJkCCdPnkxM5+rVq4n/v/vuu2zZsoUyZZKvL6LReDd/nvuTjvM78li5x9j+f9vJnyu/1SJpNJag\nGjVSavLkDG0849Xgpbtubdy4UZUuXTrJuUaNGqlhw4apgwcPqqCgIHX79m2llFLdunVTH330UWK4\noUOHqv/85z9KKaVGjBihunbtmnjt5s2bKleuXGrdunVJ4p4zZ44KCQlRFy9eVEo53s/a5MCBAyog\nIMDhtdTuSymv8cNdtzSuY+ofU1XRT4uqmbtmWi3KPVis2z6Jn7UX08+ECfDee3DpktWS+AenT5++\np4VboUIFACpVqkS1atVYsmQJt27dYunSpXTr1i0x3MqVKxP3tD5z5gxly9oWfsiXLx/BwcFJ4o2M\njOS1115j0aJF91zTaLyV27G3eWnJS3y65VM2hm+kx8Pp2yVOkzXRxjoNataEzp3h3Xc9m66/+ppK\nlSrFqVOnkpyz9yWbXeGLFy8mNDSUihUrAnD27FnOnDlDrVq1EuM5ccK2jPatW7e4ZFfjOn/+PM89\n9xxff/01NWrUcOcjaezQPuvMcezqMR77/jGiY6LZ9tI2QoulPo7CX8sRX0Qbayf48ENYuhR+/91q\nSXyfRo0akSNHDsaNG0dsbCwLFy5k+/btide7dOnC6tWrmThxYpIpWitXruTpp59OPO7QoQPLli1j\n8+bNxMTE8P7775OQkADIwLQOHTrQo0cPOnTo4JRcd+7cISYmBoC7d+9y9+7dJNf1YhMad7P+yHoa\nTGlA9+oGUL9tAAAgAElEQVTdmdN+DkG5g6wWSaPJNFOBc8DuFK6HAdeASOM3NIVwiT6Y//1PqZo1\nlYqNtdAR5ELwYp/ljh07VK1atVRQUJDq3Lmz6tKlixo2bFji9WbNmqmcOXOqc+fOJZ5r3769WrBg\nQZJ4pk+frsqXL6+Cg4PVf//7X3XfffepdevWqSNHjqiAgACVP39+FRgYqAIDA1VQUJA6fvy4Q9+z\nGT4gIEBly5ZNBQQEqPvuuy9JGO2z1riLhIQENXbrWFVidAm17vC6tG/wAizWbU0WojFQi9SN9RIn\n4klUvoQEpZo1U+rzzy38AlwIPlRYx8bGqqJFi6ro6OhMxzVz5kyVL18+VbhwYbVv3z6n7mnevLkK\nCgpSzZs3d3g9pbxGG2tNGtyNu6teWPSCqv51dXX48mGrxXEai3Vbk8UIIXVjvdSJOJIo4P79SgUH\nK3X8uPuVPSIiwq3xJ3+2rMz58+fVxIkTrRYjRVLKa/zQWLtbr70x7Yyme+HmBdV4amPVbk47FX03\nYxVRq57ZYt32SfzVZ62ARshmBysAp1a7qFwZXn9d5l7rBau8h2LFitGvX7+0A2o0WYR9F/fRYEoD\nHi33KAs6LSAwV6DVImksxpdHxYQgrefqDq4FAfHALeBp4EugsoNwqnfv3okbqhcqVIjQ0Jq88UYY\nH30EwcEbAOs3mM/Isd7P2nOYeT127FiioqIS9WnEiBFg3Teo9Pv3TiKORNBlQRdGNhtJn1p9rBYn\nQ+j9rF2PL2dmCCkb6+QcAepw71aCDgu0TZtkOtdff0GhQpkV0xq0sfYcKeW1xQWaNtZeyMxdMxm4\nZiBz2s+h6X1NrRYnw2hj7Xr8tRu8BDZFqm/87/Sev489Bm3awKBB7hBN0PMjNb6InmftGKUUH//6\nMcMihhHRO8JlhlqXI76Dr64NPhtoAhQFTgAfADmNa5OADsDLQBzSFd4lvQmMHAkPPQQREdA0C1aA\nCxcurOcGe4jChQtbLYLGi4lPiOe1la+x5cQWtry4Re+WpXGILq1TJ9WuwqVL4c034c8/IV8+D0ql\n8Ql0N7jmTtwdeizswZU7V/ip808UyF3AapFcgu4Gdz3+2g3uElq3hgYNYGhKS6poNBpNCkTfjabV\n/1oREBDAim4rfMZQa9yDNtaZZNw4mDMHtmxxbbze7F/ztbS1X89zaP0SLt66yBMznqBycGXmtJ9D\n7hy5PZa2JmuijXUmCQ6Gr76CPn3g1i2rpdH4AS2BfcAB4B0H1wdiW0Z3NzIuI4vOWfBNTkefpsm0\nJjS7rxnfPPMN2bNlt1okTRZA+xRSx2m/XrduUKIEfPGFmyXS+AwZ8OtlB/YDzYFTwHagK/B3CuGf\nBd4wwidH+6wt4NjVYzSb0YwXa73IkMZDrBbHbWiftevRLWsXMX48zJsHGzdaLYnGh6kPHASOArHA\nHKBtKuG7ITMjNF7AwcsHeXza4/Rv0N+nDbXGPWhj7SKCg2HSJOkOj47OfHze5F/z9bSzkF+vDDIV\n0eSkcc4R+YAWwAJ3C5Ue/FW/9l/cT9PpTXmv8Xv0b9Dfo2lrfANfnWdtCc8+Cz/9BAMGwOTJVkuj\n8VaaNWvGunXrkp9eBzRL49b09Fu3BjYBV1MKEB4enmQp3Zo1a7p9qVsTK5bajYqKsmRp3+PXjtPh\n/Q68WOtF+tbp69H0TdydXvKldDWuR/sUUifdfr3oaKhRA8aOlVXONBqT27dvc+vWLZo2bcqGDRsI\nDg4GCAYKAKuAqmlE0RAYjgwyAxgCJACjHIT9CZiLdJU7QvusPcC+i/toNqMZHz/xMb1r9rZaHI+h\nfdauR3eDu5igIJgxA/r1g3PnrJZG401MmjSJunXrsn//furUqWOe3onsrf6VE1HsAB5A1r3PBXTG\n8b7sBYHHgcWZlVmTcQ5cOkDzGc39zlBr3IM21m7gscfghRfkl9HGiz/6b339md944w2OHDnC6NGj\nOXLkiHn6PuBhnDPWccCrwGpgL9Jy/hvoZ/xM2hlhbrtIdJfhL/p1+Mphms1oxodNP6TC1QoeSzc5\n2mftO2hj7SaGD4fz52HCBKsl0Xgb/fv3Z4ttFZ1edj9nWAlUAe4HPjHOTTJ+JtORkeAaCzh+7TjN\nZjTj3cbv8kKtF6wWR+MjaJ9C6mTKr3fgADRqBOvXQ3VnNurU+AU9evTg8OHDbN26FZK2qF/zoBja\nZ+0Gzt44y+PfP87LdV/mzUfetFocy9A+a9ejMzN1Ml2gTZsGY8bAtm16sw+NUK1aNfbu3Uu2bNlA\nb+ThM1y+fZmwaWF0CO3A+03et1ocS9HG2vXobnA307s3PPywTOdKD77uv/WmtD2d7kMPPcSZM2c8\nmqa34Kv6dTPmJs/MeoanKj3FsMeHeSzdtNA+a99BG2s3ExAAEyfC2rUwf77V0mi8gQsXLhAaGmoe\nLjV+jkZ1a7IAMfExPD/veUKLhjL6ydF6n3iNW9BalTou6yrcsQNatYLffoOKFV0SpSaLYrZ2mjZt\nCtDU/pIHxdDd4C4gQSXQfWF37sTdYX7H+eTIpteZAt0N7g50ZqaOSwu0ceNkDvbmzZDbPTviabIQ\nFhdo2lhnEqUUb6x6g6hzUazusZo8OfJYLZLXoI2169Hd4B7ktdegQgV46620w/qL/9Yb0vZ0ulu3\nbqVevXrmYSyyCtl1jwphEb6kX2O2jGH90fUs7rI4VUPtS8+ssQ5trD1IQABMnQqrVsFsvReS3/Lq\nq68ya9Ys8zAP8CLwtXUSadLL7N2zGb9tPCu7r6RQHr1duMb96G6K1HFLV2FUFDz5pGynaRtnpPEX\n6tSpw86dO5N3FUYBNT0ohu4GzyAbj26k4/yOrOu1juol9AIKjtDd4K5Ht6wtoGZNGD0ann8ervtF\n56fGnvz583P37l3z8FNgALpgyxLsu7iPTj92Ynb72dpQazyKNtYWER4OTZrI/teOGjj+4r/1hrQ9\nne7MmTNJSEgwD28BZYH2HhXCIrKyfl24eYFnZj3DyGYjaVYxrd1MXZduZtA+a99BG2sLGTcOTp2C\nUY42ONT4LIsWLSJv3rzm4XCkZf2MZQJp0uRO3B3azW1Hlwe70KdWH6vF0fghuustddzu1zt5EurX\nl4FnLVumHV6T9alVqxaRkZHaZ51FUErRe1FvbsfdZm6HuWQL0G2ctNA+a9ejtc5iypaFefOgVy/Z\n+EPju8yePZvWrVtz5MgRWrdubZ5eiiyGcskywTSpMmrzKPZe2Mv0dtO1odZYhtY8L+Cxx+Cjj6Bt\nW7h2Tc75i//WG9L2VLqNGjXirbfeomrVqgwcONA8/RnSDd7CI0JYTFbTr6X7l/LVtq9Y3GUx+XJm\nbCeerPbMGu9Er43nJfTrB7t2QffusHix1dJo3EGFChWoUKECs2bNolSpUubpDUBeZJDZUYtE0zhg\n74W9vLjkRZZ2XUqZAmWsFkfj52ifQup41K8XGwstWkCdOjK1S+Ob1K1bly1btpBb1pwNAHIDm4G6\nHhRD+6xT4eqdq9SfXJ/3Gr9H75q9rRYny6F91q5Hd4N7ETlzys5cixbBd99ZLY3GXcTFxZErVy77\nU3eBnBaJo0lGfEI83RZ0o9UDrbSh1ngN2lh7GcHBsGwZDBy4gYgIz6fvj/41T6dbtGhRFif1dbQF\nLnpUCIvICvr1wYYPuBV7i9FPuqZ7Kys8s8b70cbaC6lSBd5/H7p0gb//tloajauZOHEiH3/8sXl4\nAhgM9HPy9pbAPuAA8E4KYcKASGAPnt12M8uzeN9iZuyawbyO88iZXXd2aLwH7VNIHUv9etOmwYcf\nwtatUKKEZWJo3ITh1wsCbjh5S3ZgP9AcOAVsB7oC9lW6Qoj/uwVwEiiK41a79lkn4+DlgzT6rhFL\nuy6lQdkGVouTpdE+a9ejR4N7MeHhcOQItG4NERGQP7/VEmlcxbJly8x/B9id/jCN2+oDB7GNGp+D\ndKHbG+tuwALEUIOfdK9nlluxt2g/rz0jwkZoQ63xSnQ3uJdi+pqGD5edubp0gbg4z6VrBf7is+7X\nrx/z5s0zDwOATkAFJ24tg3Sbm5w0ztnzAFAEiAB2AD0zJayL8Vb9enXFq1QvXp1/1f2XR9N1N9pn\n7TvolrWXExAAkyfDs8/CK6/ApElyTpN12bJlC7t372bmzJkAI5CFUVY5casz/dY5gdpAMyAfsBX4\nDfFxJyE8PJyQkBAAChUqRM2aNQkLCwNshbyrj03cFX9qx1FRUQ6vfx/5PevWr2PisxPN7ltL5HPH\nsYm70xs7dixRUVGJ+qRxPb5a7E9FNkY4D6S0j9044Glk16NwZEBOcrzGrxcdDU2bQqtW4sfWZF3q\n16/Ptm3bTMNQFllqdA9wfxq3NkQ2/jBXkR8CJAD2W8G8gyyyMtw4noJUBH5MFpfX6LaV/HX+L8Km\nh7Gh9wYeLP6g1eL4DNpn7Xp8tRv8e2wFmiNaIQXjA0Bf4BtPCJUZgoJgxQqYMwe++spqaTSZoXXr\n1ly5csU83In4oGc7cesORGdDgFxAZ2BJsjCLgceQwWj5gAbA3szK7IvcjLlJpx87MfrJ0dpQa7we\nXzXWvwJXUrneBphu/P87MoLWq8ZbO/I1FS8Oq1fDyJEwa5bn0vUU/uKzHjZsGIULFzYPQ4CqwDAn\nbo0DXgVWIwZ4LjK4rB+2qV/7kJb0n4huT8aLjLU36dfrq16nTqk69K7h3oVPvOmZNVkXf/VZOxqo\nUxY4Z404znPffbBqFTRrBgULwjN6F+Qsx82bN/n888/NwztAOaQ1vCzFm2ysNH72TEp2PMb4aVJg\nzp45/HLsF/7o90ein1qj8WZ8WUtDkO0HHfmslwIjkfmoAGuBQcAfycJ5rV/v999lSte8eWCM8dBk\nETp16kSdOnUYPHgwyDeYH9gC1PCgGF6r2+7m8JXDNJjSgNU9VlO7VG2rxfFJtM/a9fhry/oU0pox\nKWucuwcrRsw6c9ygAQwZsoF27WDVqjAaNvSeEaj62PGxOWJ206ZNhIaGYsdNNB4hLiGO7gu78+5j\n72pDrdF4CSHA7hSutQJWGP83RKa2OEJZRUREhFPhVqxQqnhxpXbu9Gy67sCqtD2d7iOPPKJu3bql\nsE3FqgRsc5XiO4lHn9nEav0atn6YemrmUyo+Id6j6VqFVWnj3DRDTTrw1Zb1bKAJstTiCeADbLsa\nTUIMdStkNaibQB8LZHQJTz8tc69btZLBZzU82ZGqyRDDhw+nZcvEyQqzgEeR6YMaN7Ln/B6+Pf4t\nkf0iyRbgq2NrNb6K9imkjlFJ9H7mz4f+/eHnn6F6SjPLNV7DxYsXKVasGEBrpGcnD7YlQj1BltFt\nVxB9N5qak2ry2VOf0a5qO6vF8Xm0z9r1+GrL2u/o2BESEuCpp7TB9mZ27tzJ4cOH7X3Wu4CPkXUB\nylsmmI/z5uo3aRrSVBtqTZZF9wV5KRmZH9m5M4wdKwZ71y7PpesqfH2e9dChQ+nRowcLFy6kTZs2\n5ulfkHnQlT0ihMVY8Y6X7l/K+iPreT7P8x5PG/zzm9K4Ht2y9jE6d4Zs2aBFC1i+HOrUsVoijcnC\nhQuJjIwkT548XL58meDgYICm2HbR0riYi7cu0m9ZP+Z2mEv8kXirxdFoMoz2KaROlvXrLVoEffvC\n4sXwyCNWS6MBqFWrFpGRtiXoLfbrZVndTg+d5neifMHyjHlKrxHjSbTP2vXolrWP0q4d5MkDbdrA\n3LnwxBNWS6Q5fPgwrVu3Tn56qfFXIcvgalzE3D1z2X1+N9PbTU87sEajydJYMkdRKdfNj4yIUKpo\nUaUWL/ZsuhnB1+dZR0REJPkhBjrM+DXxB932VF6fu3FOlRhdQv1+8nePp50cf/ym0POsXY5uWfs4\nYWGyW1fr1nD9OvToYbVE/ou5klkyNnhWCv/gleWvEF4znPpl6lstikbjEqz2KawHPgOW2537Ftm2\n0hswKolZn717oWVLeOsteP11q6XRgOV+PZ/R7eT8uPdHhkUMI7JfJHly5LFaHL9E+6xdj9WZeQRZ\nYWwdMMI4FwnUskyipPhUgXb8uEzreu45+Phj0JsNWYs21q7n0q1LVP+mOgs6LeCRcnpkpVVoY+16\nrJ5nfRV4AtlLeimyr7QG98yPLF8eNm2CiAgID4eYGM+k6yy+Ps+6Z8+egGzo4a+4O68H/DyATg92\ncmiofV2/vC1tjWvxBp91HPAKsjbyr0BhS6XxcYoWhfXroUsX2Qt7wQIoUMBqqXyD+IR4Tlw/weEr\nhzl29Rgnrp/g1PVTnL15lvM3z/PH2j9Y/f5qLk2+xKDzg8zbithFcdkCsX2G1QdX88uxX9j9ckr7\n92g0WReruyn+BUy0O64D/Bt4wRpx7sEnuwoB4uJkLfHNm2HZMihXLu17NMLNmJvsvbCXvy78xd8X\n/mbfpX38c+kfjlw5QrH8xahYuCIhhUIoV6AcZYLKUDKwJMXzF2fFDyuYN30ex48ep1TpUhw7egxs\nC6IooKIHH8OndPtmzE0e+uYhJj4zkRb3t7BaHL9Hd4O7Hqsy02xNBHDvEP8A4JJnxUkRnyrQkqMU\nfPYZfPmlLJ5SW2/vmwSlFKeiT/HHmT+IOhvFrnO72HV2F6ejT1M5uDIPFX+IakWrUbVoVaoUrUKl\nwpXImzNvmvH+61//YuLEiVYXaD6l2wN/HsjZG2f54fkfrBZFgzbWvsRRZHDZUSABMc6XjP+PWCbV\nvXh8fqKJJ+dHLlggc7EXLvTPOaFmumejz6ol+5aooeuGqpY/tFTFPi2min1aTLWY2UINXjNYzd49\nW+09v1fFxsdmOs2oqChzLuqrgBUbm2b6GTKCO97xH6f/UMVHF1fnbpzzeNrO4I/fFHqetcuxymcd\nYvydDPyE7C8N8DTwnBUC+TPPPy+Dz9q1k/2xmzTx/ZHid+PuEnk2kq0ntrJk4xJ6R/Um+m409crU\no17pevSr04+6retSJqiM2UpwGV9++SWTJ082D0sAPyDfwjgnbm8JjAWyA1OAUcmuhwGLgcPG8QLg\nP5mT2HuJT4in77K+jGw2kuL5i1stjkbjNqwukvcADzlxziqMSqJ/cOoUtG0LVarAlCmQN+0e3SzD\n1TtX2Xx8M5uOb2LTiU1EnonkgeAHeKTsIzxS9hEalG3AA0UecLlhdkT16tX57bffCAwMBPkG8yN7\nWqe1sWl2YD/QHDgFbAe6An/bhQkDBpD20qU+odsTtk1g3t55bOi9wSPvTuMcuhvc9Vg9Gvw0MBRp\nWQQA3ZBCSGMBZcrAr7/CSy9B48bw009Zd+DZpVuX+OXYL2w4uoGNxzZy6Moh6pepz2PlHuP9x9+n\nYdmGBOUOsky+bNmSzJpMcPK2+sBBbIPS5gBtSWqswU8KyTPRZxi+cTgbwzdqQ63xeayeZ90VKI50\nhS80/u9qqUReglXzI3//fQM//CBTuxo0gI0bPZd2Zp45+m40y/9ZzoDVA6g5sSb3fXkf3/7xLaWD\nSjPx2YlcHnSZdb3WMaLpCJ6s9GQSQ+3pvO7Tpw8NGjQwD0cgreqpTtxaBllEyOSkcc4eBTQCdiHu\npdBMCetiXJnXA9cM5KVaLxFazLlH1POsNVkZq1rW7wIrkdXK+lskgyYFAgJg4ECoUUP2x37nHXjj\nDe/yY8cnxLP99HZ+PvQzaw6vIfJMJPXL1KfZfc2Y+OxE6pSqQ87sOa0W0yEDBgygSZMm1K1bF2Rg\nZTjyLaSFM/3WfwDlgFvIGJBFQGVHAcPDwwkJCQGgUKFC1KxZM3H9crOQd/WxSWbj+3z256zbvI5D\nnx9y+v6oqCi3P5+3HZu4O72xY8cSFRWVqE8a12NV8dsFGShTE4hCDPfPwBWL5EkJn/DrZYajR6FD\nB6hYEb77DoKs6znm7I2zrDq4ilUHV7Hm8BpKB5WmRaUWPFnxSRpXaEy+nPmsEy4DZMCv1xAYjnw7\nAEOQLvTkg8zsOYKsX5B8wZUsq9sx8THUnFiTj5t9TLuq7awWR+MA7bN2PVZnZgCyDnhL4Emkpb8G\nWAVss1AukyxboLmSO3dkAZWNG+HHH6F6WsOgXESCSmDn6Z0s+2cZyw8s59CVQzSv2JxW97fiqUpP\nUaZA8h7grEUGCrQcyACzZsh4j23cO8CsBHAeaYXXB+Zhm31hT5bV7TFbxrDuyDpWdFuhfdVeijbW\nvk9BoAMyjcUbsGSOolLeOSd0+nSZjz1lilIJCe5J+07sHbX8n+Wq75K+qtSYUqrK+CrqrdVvqYgj\nESomLsb1iaosNxf1acRgH0Ra1gD9jB/ICoB7kB6rLUhr3Gt0O7N5fer6KRU8Klj9c/Efj6edUfQ8\na40rsHo0+J/IiNa5wCHgGvCj8dN4Gb16Qd260KmTrC8+caJrusWj70az4sAKJm6cSORvkVQvUZ22\nVdqyMXwjDwQ/kPkEfIuVxs+eSXb/TzB+PsngtYPpW6ev1guN32F1N0UI0BnohNTE5iDddsctlMke\no5KosefWLRlwtn49zJ4N9eqlP47rd6+zdP9S5u+dT8TRCBqVa8TzVZ+nbdW2Pr+4xYIFCxg8eDAH\nDx4EuGGcVoAnt1TJcrq95cQWOs3vxL5X9xGYK9BqcTSpoLvBXY83ZeYDwDCgO7L4gzeQ5Qo0TzJ/\nPvz73/DmmzBoEGRP463dir3F0v1LmfPXHNYfWc/jFR6nY2hH2lRpQ6E8/rM7aqVKlVi2bBmhoaGg\n1wZ3igSVQP3J9Xmz4Zt0f7i71eJo0kAba9dj9TxrkNb1O0iruiowKNXQfkJWmBPasSPs2AGrV8MT\nT8CxY/eGiUuIY+WBlfT8qSelPyvN1KiptKnchqOvH2Vp16X0qtEr0VBnhWd2BSVLlqRatWoeTdNb\nyGheT4+aTq7suehWvZvH084sep61xhVY7bP+HciFdH13xLaesSaLUL48rFsnu3fVrQujR0OvXopd\n56KYsWsGs/fMJqRQCN2rd2fMk2MoEVjCapEtp27dunTu3Nk8bG/8VcjCQJpkRN+N5r3177G4y2I9\n+lvjt1il+W8Zf/MAd+zOm/1yn3tWnBTJUl2FVhOx7QLdR/7AzcrTCCp2lT61etGzRk8qBztck8Nv\nCQ8PB2D69OkA0+wu9fGgGFlGt99d9y6nok8xvd10q0XROInuBnc9VmXmcMQwVwHqAUsMWZ5F5o72\nsEiu5GSZAs0q4hPiWXt4LVMip7Dm0Bpa3d+agKg+rJkcxpdjs9Gli3etfOZN6P2s0+bo1aPU+bYO\nf/7rzyw/r96f0Mba9/gVsJ/8E2Sc8xY8P0HRwNvnhJ6+flp9tPEjVeGLCqrOpDrqm+3fqKu3ryZe\n37ZNqQcfVKptW6VOnXJt2q7G0+keP35ctWvXzpyLegHZxrKsP+h2evO6y49d1PCI4Zak7Sr0PGuN\nK7B6gFlxINbuONY4p/FClFJsOLqBjvM7Evp1KMevHWdh54Xs6LuDf9X9FwXzFEwMW68e7Nwpq53V\nrClbbmaBhpxH6NOnD23aJO5gWRpYCnxvnUTeye8nf+fXY78ysNFAq0XRaCzH6m6K95B51gsNWdoh\nC6R8bKVQdhiVRP/mZsxNZv45k/HbxqOU4t/1/k3PGj0pkNu5acF//inbbubLB5MmyX7Z/kyNGjXY\ntWtX8q7CXUAND4rh1bqtlKLx9415sdaL9KnlSVe+xhXobnDXY/Vo8P8i64A3RrpNwnFu9yGNBzh+\n7Tjjfx/P91Hf07hCY8Y/PZ6mIU3TPSL34Ydh61b46it49FGZmz1kCOTJ4ybBvZzg4GBmzpxpHuZA\nNra5aJ1E3seifYuIjommV41eVoui0WiyAJb4e5Sy1r+27eQ21Xl+Z1VkVBH15qo31eHLh10W/4kT\nSj3/vFKVKim1cuW9aVuBp9M9cuSIevbZZ+191ouB8v6g287kdUxcjKo8vrJadWCVx9N2B9pnrXEF\nVresNV6CUoqVB1fy7qp3uRJ1hTcavMG3rb91uqvbWcqWhQULYOVKePVVaXV/8QVUqODSZLyakJAQ\nli5davZQFLNaHm9jyh9TKF+wPE9VespqUTQar0H7FFLHqCT6LnEJccz7ax4jN40kW0A23m70Np0e\n7ETO7DndnvadOzBmDIwdC6+9Bm+/LX5tX2XUqFG88847vPbaawB89dVXAF8ZlxXQ34PieKVu34i5\nQeXxlVnWbRm1S9W2WhxNBtE+a9dj9Whwd9IS2AccQJYzTU4YsstXpPEb6jHJvICY+Bim/DGFql9V\n5Zsd3zCq+Sgi+0XS/eHuHjHUID7roUNl1Phff0G1ajBnju+OGjfWAqdOnTrUrVvXPL3T7uf3jP1t\nLE1CmmhDrdH4CdmR/X5DgJzI3r7JF2MOQxZjSQ1L/D1Kuc/XdDfurpq4faIq/0V59eSMJ9XGoxs9\nkq4zjB0boWrVUuqRR5T67TfPpWuxXy87so+7p7HkmVPL6ws3L6jgUcHqwKUDHk/bnWiftcYV+GrL\nuj5irI8ic7fnAG0dhPObbprY+Fgm75zMA+Mf4Kd9PzGn/Rx+7vkzj1d43GrREqlRA7Zvh759oX17\n6NIFDvvgavHdunXj+vXr5uFuYC96Axs++fUTOj/YmfuL3G+1KBqNxkN0ACbbHfcAxicL0wS4hMxv\nXQGEOojHklqpK4mLj1Mzomaoil9WVM1nNFdbjm+xWiSnuHFDqQ8/VCo4WKn+/ZU6f95qiVzHww8/\nrJRKbH18hvT+7Hb5V5A6FudCUo5fPa6KjCqiTl8/bbUoGheAblm7HF9tWTujKH8A5ZCFKMYDi9wq\nkYdRSrFk/xJqTKzBxJ0T+a7Nd6zpuYZHyj1itWhOkT8/DBsGe/dCQoL4s4cPB1uDNOsSFxdHbGzi\nwn1Lkd4fvy7cPvrlI/rW7kupoFJWi6LReCW+OnXrFGKITcoBJ5OFibb7fyXwNVAEuGwfKDw8nJCQ\nEAAKFSpEzZo1CQsLA2x7xbrj2H4f2vTen6tSLgatGcSp3afoW7svg3sMJiAgwKn7o6KieOONN9z+\nfHyUfnEAAB3SSURBVI6Ox44d6zB/x48P4803oV+/DXz5JQwdGsYrr8Dvv7smffOcJ54vKiqK8uXL\nExwcbCb9CzK24hp+wIYNGxLzw+Tg5YMs/Hsh/7z2j8fT9gRWpWt12hqNM+QADiGFYC4cDzArgc1n\nXR/xbyfHsm6kjAwMOXDpgGo/t70q93k5NS1ymoqLj/NIuq7CmbR371bqueeUKl1aqfHjlbpzxzPp\nuor4+Hg1Z84cpVSSrsIAnK84pzXLwaQeEAc8n8J1jz2zPY7yuvuC7urDDR9akrYn8PZvyh3g5z1F\nmvTxNLAfGWg2xDjXz/gB/BvYgxjyLUBDB3FYoujp5crtK2rAqgEqeFSw+u8v/1W3Ym5ZLZLb2bFD\nqWeeUapcOaUmTHCN0fYUtWvXVkplqEBzZpaDGW49sAxon0JcFueCsOfcHlV8dHF17c41q0XRuJAM\n6LYmDfxmNHQGMfTOO4lPiGfKH1P4YMMHtKnSho+afkSJwBJWi+VRtm2DESNks5B33pENQ7x9zfHB\ngwdTtGhR3n77bYBgu0uXU7jF5BHgA6R1DTDY+DsyWbg3gBikdb0M2YIzOV6h253md6Ju6boMetTv\nB8P7FHpRFNfjqwPMsjz2/lRHbD6+mbqT6zJrzyxW9VjFt62/dYmhTitdd5KRtOvXh+XLYeFC+Pln\nqFgRPv8cbt50b7qZYc6cOUyYMME8TM+iKGWAE3bHJ41zycO0Bb4xjq23yHbY5/Wf5/7k1+O/8u96\n//Z42p4kq31TGu/EVweY+Sznbpzj7TVvE3E0gtFPjqbzg53TvQuWL1KvHixZAlFR8N//wqhR0L+/\n7PBVqJDV0iXl6NGjQGLr47503OqM4R2LtLgV0rJJUTmsGDxpsmHDBoatH8agpweRP1d+jwxmjIqK\n8thgSW85NvHU4ElTnzQaT2Ot48eOuPg49fW2r1WxT4upt39+W0XfjbZaJK9m716levZUqkgRpQYP\nVursWaslsnHjxg314Ycf2vv1HgCedUIfGyJbypoM4d5BZoeBI8YvGjgHtPE23Y48E6lKjSmlbsbc\ntFQOjXvAy3p0fAHdDZ4F2HV2F42mNmLWnllE9I7g0yc/JTBXoNVieTXVqsGMGbBjB1y7BlWryi5f\nx45ZLRn06dOHXLly2Z86jeztnhY7EMMegsxy6My9S+ZWRFrr9wE/Ai87CGM5H278kLcbvU2+nD68\nc4tG40K0sfZSNmzYwO3Y2wxeO5gnZz7J/9X+PzaGb+TB4g+6PV2rcEfa990HX38Nf/8NgYFQuzb0\n6iXH7kw3NQ4dOsQ77yRpEDvrYY8DXgVWI0uUzgX+JuksB69mw4YN7Dq7i60nt9KvrmdF1j5rTVZG\nG2svJepsFA9PfJhj146x++XdvFT7JbIF6NeVUUqWhJEj4dAhqFIFwsJk/fGdFux1lTt3bm7fvm1/\nqhJw18nbVwJVgPuBT4xzk4xfcvoACzMoptv46JePGPjIQN2q1mg0LsPjvp7ou9Hq5WUvqzKflVGL\n9y32ePr+wo0bSo0dq1SZMkq1bKnU5s2eS3v16tXq8ccfN/16s4BjQFNf122llNp9brcqPrq4unH3\nhiXpazwD2mftcvQw4tQx9M4zRByJ4IUlL9A0pCmft/icQnm8bBizD3L3LkybJq3u+++X9ccffdT9\n6V68eJFixYoBtAZ+By64P9UkeFS3Tbou6EqNEjUY/NjgtANrsix6nrXr0f2qXsDt2Nu8vvJ1ev7U\nkwmtJjC17VSifouyRBZ/86/lzg1Vqmzgn39kS84ePaBlS/d2j7du3Zqff/7ZPFyG5w21Jfxz6R9W\nrFnhsXnVydE+a01WRhtri9l5eie1v63NhVsX+PPlP2n1QCurRfJLcuaEF1+E/fuhbVto0wY6dxYf\nt6t56623+PXXX83DH5EtXb183bXMM3LTSJ6r+hxBuYOsFkWjyXLoborUcVtXYXxCPKM2j2Lsb2MZ\n9/Q4ujzUxS3paDLGzZswdix88QX06QNDh0LBgq5Nw+gqfAr4P2QJ0QKuTSFVPNoNfuzqMWp/W5sD\nrx2gSN4iHktXYw26G9z16Ja1BZy8fpJmM5qx5vAadvbdqQ21F5I/P7z3HuzZA5cuQWgozJ4NrrJv\ndqPB/4Ws4T3dNTF7J2O2jOHFWi9qQ63RZBBtrD3M4n2LqfNtHZ6q9BRre66lXMFyDsNp/5p3pFuy\nJEydCj/+CJ98As8+CyeT74yeTjp16kTVqlXNw6+QaVivZS5W7+X8zfP8b/f/GPDIAK1ffpS2xrVo\nY+0h7sbd5fWVr/PG6jdY1HkR7zZ+l+zZslstlsZJHnlEVkNr0EAWVpk7N+NxvfDCCxw+fNg8jADi\nXSCi1/Llb1/S+cHOlAwsabUoGk2WRfsUUsclfr0jV47Q6cdOlC1QlqltplI4b2EXiKaxih07oFs3\neOIJ8WtnZEvOLVu28KjMEQs3TilghsuETBuP+Kyv371OxS8rsu3/tlGxcEW3p6fxDrTP2vXolrWb\nWbp/KQ2/a0j36t1Z2GmhNtQ+QN26YrAvXYImTeDs2fTd36NHDwYOHJgYnfGr51opvYNvd37LU5We\n0oZao9G4lQyv4BMXH6eGrB2iyn1eTm05viXd90dERGQ47cxgVbpWpp3RdBMSlBoxQqny5ZX66y/n\n76tatapKSEiwepWnDD1zergbd1eV+ayM+uP0H4nntH75R9oW67ZPovezdgOXbl2i64KuxKt4dvbd\nSbH8xawWSeMGAgLg/fchJASaNYNly6BOnbTve+ihhzhz5ozb5bOa//35Px4s/iC1StWyWhSNJsuj\nfQqpY1QSnWfX2V08N/c52ldrzyfNPyFHNl0f8gcWLYJ+/WDNGnj44dTDhoWFERUVxbVr10BWMANp\niTjad9pdpFu300OCSqD6N9X5suWXNK/Y3G3paLwT7bN2PdqSuJD5f83nlRWvMP7p8XrutJ/Rrh3E\nxMhSpb/+CpUqpRx2+PDhADRt2hRgDFKo+VS34coDK8mVPRfN7mtmtSgajU+gB5i5gASVwAcRHzBw\nzUB+7vGzSwy1nhOa9dLt1AmGDZO52FevphwuLCzMfp51ELI39UaXCOEljNk6hrcbvW22sBLR+uU/\naWtcizbWmeRW7C06/9iZtUfWsu2lbdo/5+e8/DI8+SR07QoJCY7DzJs3jwYNGpiHnYBtQEfPSOh+\ndp7eyaHLh+gY6jOPpNFYjvYppE6qfr0z0WdoPbs1ocVCmdx6Mrlz5PagaBpvJS5OpnS1bQuDBt17\n/eGHH2bt2rWUKFEC5BssBqwD0vB2uxS3+ay7L+xO7ZK1eavRW26JX+P9aJ+169Et6wyy+9xuGn7X\nkHZV2zG93XRtqDWJ5Mgh64h/9hls337vdaWUuZe1ySV8pGA7ce0Eqw6u4qXaL1ktikbjU2hjnQHW\nHFpDsxnNGNlsJEMfH3qPX84VaP9a1k63fHn4/HPZdjM2Num1li1b0qJFC/OwD7ACWOlyISxg/Lbx\n9Hq4FwXzON6iTOuX/6StcS3aWKeTGbtm0OOnHizotICu1btaLY7Gi+nWDcqWhU8/TXp+9OjR9OvX\nzzysDkwCHHSYO6QlsA84ALzj4HpbYBcQCewEnki34BnkRswNpkZOpX+D/p5KUqPxG3yi682NJPr1\nlFKM/P/27j1KivLM4/gXBhSDkImoGBUZFK8IAkaCinFCXA4xboDVGLnoDqDGxFXH6B7QJCu7J3ti\nPO5m8KCCLBkuKiBrdBEC4sJ4CaCiznAbceUyBC8h6ooXFrnN7B9PFd00fameru7qrvp9zulDV09P\nPW83T9c79T7V7/un+5n25jSWjF7CuSecG3DTpBRs324Lf6xdC3v2vMvOnTsZNGgQcFhdbxDwIbAl\nw+7KgHeAK4D3gTXASODtuOd0BHY793sDz2CreiXyvWb98OsPs6JpBU9f+7Sv+5XSo5q1/3Rm7UFz\nSzPVS6uZu2Euq8avUkctnnXvDrfcYmtjV1dX07lz52RP+xyo8bC7AcBmoAnYD8zDzqTj7Y67fyzw\ncdaNboXmlmYmvzaZOwfeWYhwIpGjzjqD/Qf3c/0z11P/l3peHvsyJ3c6uSBxVV8LT9yJE2HZMti2\nbSd9kk9vtg7o4WFXpwA74rbfcx5LNBw7214CFGRMesm7S+h0dCcu7XZp2ucpv6ITW/ylGcwyGD5/\nOGVtynh+zPMc0/6YoJsjJahTJ5gwAX75yzQzpYCXhTa9jls/69wuA+YAZyd7UlVVFRUVFQCUl5fT\nt29fKisrgdhB3uv2fTPvY8jpQw5dbJnq+a5s9+/HdkNDQ0HjFcO2K9/xampqaGhoOJRP4j/VFNJr\nGf30aGqH1dK+rH3QbZEStns3dOlyHRMnDmbSpJuBw+p6N2F16B9n2M1AYBJ2kRnAPUAz8Ns0v7MF\nGz7/JOFx32rWjR81MnjWYLZXb9dXGAVQzTofdGadwewRs2nbRtUCyU3HjnDnnTU8/PAI6uqe4MLY\n8lwvAUcDIzzs5g3gTKAC+ADr3BO/knAGsBU7C+/vPJbYUftqyutTuPnCm9VRi+SReqEMguqoVV8L\nX9wJE05i//5V3HbbffHDhf+MnTF7WTPzAPAPwPPYfOLzsdr0T5wbwNXAeuyrW5OBvK4os+urXczd\nMJdbvnWLp+crv6ITW/ylzlqkQMrL4dpr27Bp02Buv/3QdV8rstzNEqwG3RP4jfPYNOcG8ABwPtAP\nq1knmUPNPzMbZjK059CCXXgpElWqKaSX1zV/JXrq623O8K1boX37QOt6Oed2c0szZ085m5nDZnLp\naemvApdoUc3afzqzFimgfv3glFNg8eKgW5K7ZVuW0emoTlzS7ZKgmyISemHurDNNywjwkPPztdiw\nYdFQfS28cceOhccfL2jIvHhkzSPcetGtWc2Nr/yKTmzxV1g76zJgCtZhn4ddMZs47diVWN3vTOBm\n4NFCNlCi65prbJKUUta0q4mVO1ZqfnyRAglrTeFi4D5i30ed6Px7f9xzpgJ12BW1YGfhlwM7456j\nmrXkxbBhsHBh6das711+L3v27+F3Q3/nY5MkLFSz9l9Yz6y9TMuY7Dmn5rldIoCtyFWq9h7Yy4z6\nGfz0op8G3RSRyAjrpCheTxkS//I74vf8nJIxm+34WlOhp2Ssrq4uWLz47ZqamoK9v/Hb7mOFnJIx\ncY3rUvKHt/9A7xN7c1aXs7L+3RdffPHQ+1FoQcWO4msW8WogsDRu+x6OvMhsKodPGLEJ6JrwnJag\n1NXVRSpukLGDiov3PyrzodXt/k7td1oWbFzQqt9VfkUjdsC5HUphrSm0w9b9/R42LePrHLnu75XY\nbFBXYp17jfNvPCfvRPwXcF2vVbnd+FEjV8y+gu3V2zVfvqSkmrX/wjoMHj8tYxkwg9i0jGCzPf0R\n66g3Y2sAjy18M0VKy7Q3pjGu3zh11CIFFtYLzCDztIxgHXpP4ALgrYK2LgN9JzT8cUvNnv17eGL9\nE9zU/6ZW70P5FZ3Y4q8wd9Yi4qMFjQsYcMoAupd3D7opIpGjmkJ6qllL3pRazXrQ7wdx9yV3M/yc\n4XlqkoSFatb+05m1iGS08a8b2frpVq4666qgmyISSeqsi5Tqa+GPW0pm1M+gqm8V7drmdk2q8is6\nscVfYb0aXER8svfAXuasm8Or418NuikikaWaQnqqWUvelErNet6GeUx/azrLb1ie5yZJWKhm7T8N\ng4tIWjPqZ3BjvxuDboZIpKmzLlKqr4U/bg4yrdU+GlujfR2wEujT2kBNu5qo/7CeEeeOaO0uDqP8\nik5s8Zdq1iKlxV2r/QrgfWANsJDDp9LdCnwH+Azr2B/jyKl0Pamtr2VU71F0aNchlzaLSI5UU0hP\nNWvJm1bW9bys1R7vG8B6jlz+NWNuH2w+SI/JPXhu5HNccNIFWTZTokw1a/9pGFyktHhZqz3eeGwe\n/Kyt2LaCEzqeoI5apAiosy5Sqq+FP24rZTPU811gHMnr2hnVNtQytq+/69sov6ITW/ylmrVIaXkf\n6Ba33Q07u07UB5iODZd/mmxHVVVVVFRUAFBeXk7fvn2prKwEYNGyRSx8fiFTJk8BYgd99+et3Xb5\ntb9sthsaGgoarxi2XfmOV1NTQ0NDw6F8Ev+pppCeataSN62s63lZq/00YAUwBkg1k0na3J76xlRW\nbFvBUz96KsvmiahmnQ8aBhcpLfFrtTcC84mt1e6u1/5P2IVljwL1WIeelVlrZ1HVt8qH5oqIH9RZ\nFynV18IfNweZ1mq/EegC9HNuA7LZ+aaPN9G0q4khZwzxp7VxlF/RiS3+UmctIoeZ1TCLMb3H5Lxo\nh4j4RzWF9FSzlrwpxrnBDzYfpHtNd5aOWcr5J54fQLMkDFSz9p/OrEXkkLqmOroe21UdtUiRUWdd\npFRfC3/cYjR77Wxu6HND3vav/IpObPGXOmsRAeDLfV+y8J2FjOw9MuimiEgC1RTSU81a8qbYatZz\n1s5h/sb5LBq1KKAmSVioZu0/nVmLCABz1s1hTJ8xQTdDRJJQZ12kVF8Lf9xi8sEXH7DmgzUMO3tY\nXuMov6ITW/ylzlpEmLdhHiPOGcEx7Y8JuikikoRqCumpZi15U0w16/7T+vPgkAcZ3GNwQM2RMFHN\n2n86sxaJuMaPGtm5eyeXd7886KaISArqrIuU6mvhj1ssnlz/JCPPH0lZ27K8x1J+RSe2+EudtUiE\ntbS08OT6Jxnde3TQTRGRNFRTSE81a8mbYqhZr96xmnELx9H4s0a3PSI5U83afzqzFokwdwhcHbVI\ncVNnXaRUXwt/3KAdaD7AgsYFjOo9qmAxlV/RiS3+UmctElF12+ro9vVu9DyuZ9BNEZEMNPaVnmrW\nkjdB16zHPTuOXif24ucX/zygJkhYqWbtP51Zi0TUs+88y7W9rg26GSLiQRg76+OAF4D/AZYB5Sme\n1wSsA+qB1wvSsiyovhb+uK00FNgEvAtMSPLzc4DVwFfAXel21OuEXpza+VTfG5iO8is6scVfYeys\nJ2Kd9VnAcmc7mRagEugHDChIy7LQ0NAQqbhBxg7yNWepDJiCddjnASOBcxOe8wlwG/Bgpp1dd/51\nfrcvI+VXdGKLv8LYWf8QmOXcnwUMT/Pcoq2p7Nq1K1Jxg4wd5GvO0gBgMzYqtB+YByQuk/UR8Ibz\n87SuPvdqn5uXmfIrOrHFX2HsrLsCO537O53tZFqA/8YObDcVoF0iuToF2BG3/Z7zWKt0PTbVR0NE\nik27oBvQSi8AJyV5/BcJ2y3OLZlLgQ+BE5z9bQJe8auBuWpqaopU3CBjB/mas1TyX01QfkUntkgm\nm4h15N90tjO5j+QX42wm1uHrppvft81kZyCwNG77HpJfZAapc9ql3NYtn7dsc1si6AFiB7CJwP1J\nnvM1oJNzvyOwEhiS/6aJ5KQdsAWoAI4CGjjyAjPXJDJcDS4iEqTjsFp04le3TgYWO/dPxw50DcAG\n7AxFpBR8H3gHO3Nx8/Ynzg1sVGkH8BnwKfBn4NgCt1FERERERKIo00QTAA85P1+LfTe7EHFHO/HW\nYUP1fXyK6yW26yLgAPB3BYxbiU1WswF40ae4XmIfj9WE3RGXKh9i/h77VsL6NM/JR265opbbQeW1\n19iV+J/bQeQ1BJ/bEjFl2JBiBdCe5HXAK4E/Ove/DbxaoLgXA1937g/1Ka7X2O7zVgCLAD++lOsl\nbjmwEXCn1jreh7heY08CfhMX9xNy/8bEZdhBKtUBLR+55YpabgeV115j5yO3g8prCDa3IyeM37PO\nlpeJJuInWnkN+9Dl+iVVL3FXY7VHN65fc0N6iQ02E9Z/YhNtFCruKOBp7DvEAB8XMPaHQGfnfmfs\noHYgx7ivYLXjVPKRW66o5XZQee01dj5yO6i8hmBzO3LUWXubaCLZc3I9uGQ7wcV4Yn+l5srrax4G\nPOpstxQo7pnYRYJ12IQ11/sQ12vs6UAv4ANs2O4On2Jn2y6//iiLWm4HlddeY+cjt4s1ryG/uR05\npTopip+8flgTpybN9UOeze9/FxiHTeTiBy+xa7CvvrVgr92PqVm9xG0P9Ae+h33FbjU2fPZuAWLf\niw0jVgJnYJPlXAB8kWPsTPzOrWz3E5bcDiqvvcbOR24Xc15D/nI7ctRZw/tAt7jtbsSGqVI951Tn\nsXzHBbvwZjpW10s35OR37AuxITWwOtf3sWG2hXmOuwMbHtzj3F7GDiy5dtZeYl8C/KtzfwuwDTgb\nOwvKl3zkVqp9hz23g8prr7HzkdvFmtfJ2uZnbksEeZloIv5CiYH4c6GEl7inYfWogT7EyzZ2vFr8\nuWrWS9xzsO/Jl2FnH+uxFaYKEfvfsZm/wGpr72HDlrmqwNtFOH7llitquR1UXnuNnY/cDjKvIbjc\nlojKNNEE2NKEm7GaT/8Cxf0P7GKQevxfd9vLa3b5eVDzEvdu7KrZ9cDtPsX1Evt44Dns/3g9dkFQ\nruZitcJ92JnVOAqTW66o5XZQee01dj5yO4i8huBzW0RERERERERERERERERERERERERERERERERE\nRILXDDwYt303sUkICuVFYt9jXExs4v7WqsS+m5ns8c+w78Y2Ar/OMU6i7sBIH/bzpQ/7SKcaOKaA\n8YKi3PaPcltaTQt5+GMfMALo4mxnO/9tmQ9tiI/5A+BzH/aZysvY0nj9sSUGL/Rx3z3IftKGZNPm\n5nsO4juwWagKFS8oym3/KLel1dRZ+2M/8BhwZ5KfVWBr567Fphp058qdCUzFpuB7AJtN6VFscv8t\n2F/5s7C/8Gvj9vcIsAZbRH5SivY0YQfXW4jNELXNaQfAEGAV8CbwFNDReXwo8Lbz+Ij0LxmAr7Dp\nDU/PsN9fYTNUrQemxf1+T+w9acDmKT4duB9bJ7ceO2gcjb3+dcBb2PsCUIXN57wcW5jAizOAJU6s\nl7H5kcH+LyYDK7H33l3juC32fr8NLMPO6q7Gllg8GVs9aXnc/n/tvJbVwIke21TslNvp96vcFikh\nXwCdsINGZ+AuYkOFzxFbCm8s8Ixzfyb2gXRXpakFnnTu/xA7e+jl/PwNbMJ/gG84/5ZhH6jeznYd\nsaHCbRw+92877AP8A2zqwZeIDXNNwA44HYA/Yx96gPkkX9ygktgQ4nHYAaBXmv3GtxlgNnCVc/81\nYmvvHuX87uUcPkR5FzY1JdgBaDt2kKvCpjgsT9JGSL6i0HLsIArwbWIHo5nY6wWbV9ldWOEa7CAG\nNqfy/xKbnjLxPW7G3l+A3wK/SNGuUqPcVm6HNbdLilbd8s8X2If1dmxFHddAYLhz/3HsTANsaGkB\nhw8xuR/kDcBfsDmEcf6twM5gfgzchP3ffRP7AKaaSN/1EPbhXYwdTM7DzhLADiSrsIPFNuwA5bb1\n5hT7uwz7K/tM7AxqY5r9AgwG/hEbWjvOeX0vYX/B/5fznH3Ov4lL6l3qtB9s/uPtwFnY+/YCsCv9\nSz/kWOBi7D13HeX82wI869x/Gzt4AQzCzqIAdmKdRir7iB383gT+xmO7SoFyW7kd1twuGeqs/VWD\nDWfVJjyeas3c/0vYdj/UzcDeuMebsbONHthf49/CLoSpxc4a0qnChid/FvfYCxxZO7sgYTvdOr+v\nAH+LHWTrsNedar8dgIex2t/72FlZB7Krg6Vqy+4s9tEWO/j1S/HzfXH33XgtHB473XuyP+5+M+H7\nbCm3ldsQztwuCapZ++tT7K/V8cQ+sKuA65z7o7Ehu9Zogw1H7saGEbtiq+2kcyF2ALw+7rFXsb/o\n3SHBjthZxCbsAOXW6LxctdqE1cN+lWa/7gH3E+wM4EfO9pfYUn3uUOHR2FDh59jrdL2CvW9gZx2n\nOW1Nd3BJ5nPs7OoaZ7sNtp5yOiuxOl4b7P2+PO5nX5D7VcmlRLmt3JYAqbP2R/xf0v+G1bhct2H1\nvLXYB/OOFL+XuJ3sZ+uwi1M2AU8Af0rTnjbArVhNrc75vceAj7EzkrlOm9xhwr3Y0OBibKhrZ5I2\nuPuOf3wqdvFOhxT73QVMx4YHl2K1PNf12NDqWuzg0dV5jQexocg7sItg2jqPzwP+HvtLP7Edib6G\n1f3cWzX2/o939r0Bq5/Gv67E+09jB91GYA52ZvmZ87PHnNezPMXvh+UKWuW2cjusuS0iIeJe9dsF\nW5dXV8JKWCi3S4hqDyLpLcKuyj0K+Bfgr8E2R8Q3ym0RERERERERERERERERERERERERERERERER\nEYmy/wfJZlj/R9wvewAAAABJRU5ErkJggg==\n",
"metadata": {}
}
],
"language": "python",
"trusted": true,
"collapsed": false
}
],
"metadata": {}
}
],
"metadata": {
"name": "",
"signature": "sha256:3f8959b360a8fdbb7ee24c71fa76614a8447347b2eb7124fe2d0c4fd9813372a"
},
"nbformat": 3
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment