{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Extracting ellipse parmeters from rings\n", "\n", "During a powder diffraction experiment, the scattering occures along concentric cones, originating from the sample position and named after 2 famous scientists: Debye and Scherrer. \n", "\n", "![Debye-Scherrer rings](Debye-Scherrer_rings.png)\n", "\n", "Those cones are intersected by the detector and all the calibration step in pyFAI comes down is fitting the \"ring\" seen on the detector into a meaningful experimental geometry.\n", "\n", "In the most common case, a flat detector is mounted orthogonal to the incident beam and all pixel have the same size. \n", "The diffraction patern is then a set of concentric circles.\n", "When the detector is still flat and all the pixels are the same but the mounting may be a bit *off*, or maybe for other technical reason one gets a set of concentric ellipses. \n", "This procedures explains how to extract the center coordinates, axis lengths and orientation. \n", "\n", "The code in pyFAI is heavily inspired from:\n", "https://github.com/ndvanforeest/fit_ellipse\n", "It uses a SVD decomposition in a similar way to the Wolfgang Kabsch's algorithm (1976) to retrieve the best ellipse fitting all point without actually performing a fit.\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "#For documentation purpose, `inline` is used to enforce the storage of the image in the notebook\n", "# %matplotlib widget" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "def fit_ellipse(pty, ptx, _allow_delta=True):\n", " \"\"\"Fit an ellipse\n", "\n", " Math from\n", " https://mathworld.wolfram.com/Ellipse.html #15\n", "\n", " inspired from\n", " http://nicky.vanforeest.com/misc/fitEllipse/fitEllipse.html\n", "\n", " :param pty: point coordinates in the slow dimension (y)\n", " :param ptx: point coordinates in the fast dimension (x)\n", " :raise ValueError: If the ellipse can't be fitted\n", " \"\"\"\n", " x = ptx[:, numpy.newaxis]\n", " y = pty[:, numpy.newaxis]\n", " D = numpy.hstack((x * x, x * y, y * y, x, y, numpy.ones_like(x)))\n", " S = numpy.dot(D.T, D)\n", " try:\n", " inv = numpy.linalg.inv(S)\n", " except numpy.linalg.LinAlgError:\n", " if not _allow_delta:\n", " raise ValueError(\"Ellipse can't be fitted: singular matrix\")\n", " # Try to do the same with a delta\n", " delta = 100\n", " ellipse = fit_ellipse(pty + delta, ptx + delta, _allow_delta=False)\n", " y0, x0, angle, wlong, wshort = ellipse\n", " return Ellipse(y0 - delta, x0 - delta, angle, wlong, wshort)\n", "\n", " C = numpy.zeros([6, 6], dtype=numpy.float64)\n", " C[0, 2] = C[2, 0] = 2.0\n", " C[1, 1] = -1.0\n", " E, V = numpy.linalg.eig(numpy.dot(inv, C))\n", "\n", " # First of all, sieve out all infinite and complex eigenvalues and come back to the Real world\n", " m = numpy.logical_and(numpy.isfinite(E), numpy.isreal(E))\n", " E, V = E[m].real, V[:, m].real\n", "\n", " # Ensures a>0, invert eigenvectors concerned\n", " V[:, V[0] < 0] = -V[:, V[0] < 0]\n", " # See https://mathworld.wolfram.com/Ellipse.html #15\n", " # Eigenvector must meet constraint (ac - b^2)>0 to be valid.\n", " A = V[0]\n", " B = V[1] / 2.0\n", " C = V[2]\n", " D = V[3] / 2.0\n", " F = V[4] / 2.0\n", " G = V[5]\n", "\n", " # Condition 1: Delta = det((a b d)(b c f)(d f g)) !=0\n", " Delta = A * (C * G - F * F) - G * B * B + D * (2 * B * F - C * D)\n", " # Condition 2: J>0\n", " J = (A * C - B * B)\n", "\n", " # Condition 3: Delta/(A+C)<0, replaces by Delta*(A+C)<0, less warnings\n", " m = numpy.logical_and(J > 0, Delta != 0)\n", " m = numpy.logical_and(m, Delta * (A + C) < 0)\n", "\n", " n = numpy.where(m)[0]\n", " if len(n) == 0:\n", " raise ValueError(\"Ellipse can't be fitted: No Eigenvalue match all 3 criteria\")\n", " else:\n", " n = n[0]\n", " a = A[n]\n", " b = B[n]\n", " c = C[n]\n", " d = D[n]\n", " f = F[n]\n", " g = G[n]\n", "\n", " # Calculation of the center:\n", " denom = b * b - a * c\n", " x0 = (c * d - b * f) / denom\n", " y0 = (a * f - b * d) / denom\n", "\n", " up = 2 * (a * f * f + c * d * d + g * b * b - 2 * b * d * f - a * c * g)\n", " down1 = (b * b - a * c) * ((c - a) * sqrt(1 + 4 * b * b / ((a - c) * (a - c))) - (c + a))\n", " down2 = (b * b - a * c) * ((a - c) * sqrt(1 + 4 * b * b / ((a - c) * (a - c))) - (c + a))\n", " a2 = up / down1\n", " b2 = up / down2\n", " if a2 <= 0 or b2 <= 0:\n", " raise ValueError(\"Ellipse can't be fitted, negative sqrt\")\n", "\n", " res1 = sqrt(a2)\n", " res2 = sqrt(b2)\n", "\n", " if a == c:\n", " angle = 0 # we have a circle\n", " elif res2 > res1:\n", " res1, res2 = res2, res1\n", " angle = 0.5 * (pi + atan2(2 * b, (a - c)))\n", " else:\n", " angle = 0.5 * (pi + atan2(2 * b, (a - c)))\n", " return Ellipse(y0, x0, angle, res1, res2)\n", "\n" ] } ], "source": [ "import sys\n", "from matplotlib import pyplot\n", "from pyFAI.utils.ellipse import fit_ellipse\n", "import inspect\n", "print(inspect.getsource(fit_ellipse))" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "from matplotlib import patches\n", "from numpy import rad2deg\n", "\n", "def display(ptx, pty, ellipse=None):\n", " \"\"\"A function to overlay a set of points and the calculated ellipse\n", " \"\"\"\n", " fig = pyplot.figure()\n", " ax = fig.add_subplot(111)\n", " if ellipse is not None:\n", " error = False\n", " y0, x0, angle, wlong, wshort = ellipse\n", " if wshort == 0:\n", " error = True\n", " wshort = 0.0001\n", " if wlong == 0:\n", " error = True\n", " wlong = 0.0001\n", " patch = patches.Arc((x0, y0), width=wlong*2, height=wshort*2, angle=rad2deg(angle))\n", " if error:\n", " patch.set_color(\"red\")\n", " else:\n", " patch.set_color(\"green\")\n", " ax.add_patch(patch)\n", "\n", " bbox = patch.get_window_extent()\n", " ylim = min(y0 - wlong, pty.min()), max(y0 + wlong, pty.max())\n", " xlim = min(x0 - wlong, ptx.min()), max(x0 - wlong, ptx.max())\n", " else:\n", " ylim = pty.min(), pty.max()\n", " xlim = ptx.min(), ptx.max()\n", " ax.plot(ptx, pty, \"ro\", color=\"blue\")\n", " ax.set_xlim(*xlim)\n", " ax.set_ylim(*ylim)\n", " pyplot.show()" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Ellipse(center_1=1.3643359868268725, center_2=2.1743071661066597, angle=3.011407003521055, half_long_axis=1.2991799524130687, half_short_axis=0.6096268308536318)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/tmp/ipykernel_148937/1481167801.py:31: UserWarning: color is redundantly defined by the 'color' keyword argument and the fmt string \"ro\" (-> color='r'). The keyword argument will take precedence.\n", " ax.plot(ptx, pty, \"ro\", color=\"blue\")\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from numpy import sin, cos, random, pi, linspace\n", "arc = 0.8\n", "npt = 100\n", "R = linspace(0, arc * pi, npt)\n", "ptx = 1.5 * cos(R) + 2 + random.normal(scale=0.05, size=npt)\n", "pty = sin(R) + 1. + random.normal(scale=0.05, size=npt)\n", "\n", "ellipse = fit_ellipse(pty, ptx)\n", "print(ellipse)\n", "display(ptx, pty, ellipse)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Ellipse(center_1=10.000000000332909, center_2=10.000000000325038, angle=2.3689992424085746, half_long_axis=19.999999999804693, half_short_axis=19.999999999532037)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/tmp/ipykernel_148937/1481167801.py:31: UserWarning: color is redundantly defined by the 'color' keyword argument and the fmt string \"ro\" (-> color='r'). The keyword argument will take precedence.\n", " ax.plot(ptx, pty, \"ro\", color=\"blue\")\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "angles = linspace(0, pi / 2, 10)\n", "pty = sin(angles) * 20 + 10\n", "ptx = cos(angles) * 20 + 10\n", "ellipse = fit_ellipse(pty, ptx)\n", "print(ellipse)\n", "display(ptx, pty, ellipse)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Ellipse(center_1=50.000000000000576, center_2=100.0000000000018, angle=3.141592653589068, half_long_axis=19.999999999994646, half_short_axis=10.000000000002697)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/tmp/ipykernel_148937/1481167801.py:31: UserWarning: color is redundantly defined by the 'color' keyword argument and the fmt string \"ro\" (-> color='r'). The keyword argument will take precedence.\n", " ax.plot(ptx, pty, \"ro\", color=\"blue\")\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "angles = linspace(0, pi * 2, 6, endpoint=False)\n", "pty = sin(angles) * 10 + 50\n", "ptx = cos(angles) * 20 + 100\n", "ellipse = fit_ellipse(pty, ptx)\n", "print(ellipse)\n", "display(ptx, pty, ellipse)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Ellipse(center_1=-5.030642569181509e-12, center_2=-8.540723683836404e-12, angle=1.6532775148903056e-11, half_long_axis=19.999999999815742, half_short_axis=10.00000000009243)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/tmp/ipykernel_148937/1481167801.py:31: UserWarning: color is redundantly defined by the 'color' keyword argument and the fmt string \"ro\" (-> color='r'). The keyword argument will take precedence.\n", " ax.plot(ptx, pty, \"ro\", color=\"blue\")\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjMAAAGiCAYAAAASgEe5AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAABL7UlEQVR4nO3deVxU5f4H8M+wDfsgO8iwuYD7QmpoJqS5ZC5pplnm9tNyzaVbertpVmq2aXXNpSvqvaaWZYpapqmgJWqRiBiiqKyyKAjDOsDM+f1BjoygQs5wOMPn/XrNa2YOz5zzPQzM+cxznnOOTBAEAUREREQSZSZ2AUREREQPg2GGiIiIJI1hhoiIiCSNYYaIiIgkjWGGiIiIJI1hhoiIiCSNYYaIiIgkjWGGiIiIJI1hhoiIiCSNYYaIiIgkzahhZuXKlejRowccHBzg7u6OkSNHIikpSa9NeXk5Zs2aBRcXF9jb22P06NHIyckxZllERERkQowaZqKjozFr1iycOnUKhw8fRmVlJQYOHIiSkhJdm/nz52Pfvn3YtWsXoqOjcf36dYwaNcqYZREREZEJkTXmhSZv3LgBd3d3REdH4/HHH0dhYSHc3Nywfft2PPvsswCAixcvol27doiJicGjjz7aWKURERGRRFk05sIKCwsBAM7OzgCA2NhYVFZWYsCAAbo2wcHB8PX1vWeYUavVUKvVuudarRb5+flwcXGBTCYz8hoQERGRIQiCgKKiInh7e8PM7OF2FDVamNFqtZg3bx769OmDjh07AgCys7NhZWUFJycnvbYeHh7Izs6ucz4rV67EsmXLjF0uERERNYL09HT4+Pg81DwaLczMmjULCQkJ+OWXXx5qPosXL8aCBQt0zwsLC+Hr64v09HQ4Ojo+bJlERETUCFQqFZRKJRwcHB56Xo0SZmbPno39+/fj+PHjeunL09MTFRUVKCgo0OudycnJgaenZ53zksvlkMvltaY7OjoyzBAREUmMIYaIGPVoJkEQMHv2bHz//fc4evQoAgIC9H4eEhICS0tLHDlyRDctKSkJaWlpCA0NNWZpREREZCKM2jMza9YsbN++HXv37oWDg4NuHIxCoYCNjQ0UCgWmTp2KBQsWwNnZGY6OjpgzZw5CQ0N5JBMRERHVi1EPzb5X19HmzZsxadIkANUnzVu4cCF27NgBtVqNQYMG4Ysvvrjnbqa7qVQqKBQKFBYWcjcTERGRRBhy+92o55kxBoYZIiIi6THk9pvXZiIiIiJJY5ghIiIiSWOYISIiIkljmCEiIiJJY5ghIiIiSWOYISIiIkljmCEiIiJJY5ghIiIiSWOYISIiIkljmCEiIiJJY5ghIiIiSWOYISIiIkljmCEiIiJJY5ghIiIiSWOYISIiIkljmCEiIiJJY5ghIiIiSWOYISIiIkljmCEiIiJJY5ghIiIiSWOYISIiIkljmCEiIiJJY5ghIiIiSWOYISIiIkljmCEiIiJJY5ghIiIiSWOYISIiIkljmCEiIiJJY5ghIiIiSWOYISIiIkljmCEiIiJJY5ghIiIiSWOYISIiIkljmCEiIiJJY5ghIiIiSTNqmDl+/DiGDRsGb29vyGQy7NmzR+/nkyZNgkwm07sNHjzYmCURERGRiTFqmCkpKUGXLl2wdu3ae7YZPHgwsrKydLcdO3YYsyQiIiIyMRbGnPmQIUMwZMiQ+7aRy+Xw9PQ0ZhlERERkwkQfMxMVFQV3d3cEBQVhxowZyMvLu297tVoNlUqldyMiIqLmS9QwM3jwYPz3v//FkSNHsGrVKkRHR2PIkCHQaDT3fM3KlSuhUCh0N6VS2YgVExERUVMjEwRBaJQFyWT4/vvvMXLkyHu2uXr1Klq1aoWff/4Z/fv3r7ONWq2GWq3WPVepVFAqlSgsLISjo6OhyyYiIiIjUKlUUCgUBtl+i76bqabAwEC4uroiOTn5nm3kcjkcHR31bkRERNR8Nakwk5GRgby8PHh5eYldChEREUmEUY9mKi4u1utluXbtGuLi4uDs7AxnZ2csW7YMo0ePhqenJ65cuYLXX38drVu3xqBBg4xZFhEREZkQo4aZ33//HeHh4brnCxYsAABMnDgR69atQ3x8PLZu3YqCggJ4e3tj4MCBePfddyGXy41ZFhEREZmQRhsAbCyGHEBEREREjcNkBwATERERNRTDDBEREUkawwwRERFJGsMMERERSRrDDBEREUkawwwRERFJGsMMERERSRrDDBEREUkawwwRERFJGsMMERERSRrDDBEREUkawwwRERFJGsMMERERSRrDDBEREUkawwwRERFJGsMMERERSRrDDBEREUkawwwRERFJGsMMERERSRrDDBEREUkawwwRERFJGsMMERERSRrDDBEREUkawwwRERFJGsMMERERSRrDDBEREUkawwwRERFJGsMMERERSRrDDBEREUkawwwRERFJGsMMERERSRrDDBEREUkawwwRERFJGsMMERERSRrDDBEREUmaUcPM8ePHMWzYMHh7e0Mmk2HPnj16PxcEAUuWLIGXlxdsbGwwYMAAXL582ZglEREZnEYDREUBO3ZU32s0YldE1LwYNcyUlJSgS5cuWLt2bZ0//+CDD/DZZ59h/fr1OH36NOzs7DBo0CCUl5cbsywiIoPZvRvw9wfCw4Hx46vv/f2rpxNR45AJgiA0yoJkMnz//fcYOXIkgOpeGW9vbyxcuBCvvfYaAKCwsBAeHh7YsmULxo0bV6/5qlQqKBQKFBYWwtHR0VjlExHVsns38OyzwN2fojJZ9f233wKjRjV+XURSYMjtt4WBamqwa9euITs7GwMGDNBNUygU6NWrF2JiYu4ZZtRqNdRqte65SqUyeq1EdIcgCKjUVqKssgyllaUoqyrTe1xaWYqyyjK9xzXbVWmrIECAVtBCK2ghCNWPb0+7+zkAmMnMIIOs+l4m03t+9zQLMwvYWtrCxtIGNhY2use2lrawsbDRe3x3O0tzy3r/HjQa4NVXaweZ6t9RdaCZNw8YMQIwNzfQL5+I6iRamMnOzgYAeHh46E338PDQ/awuK1euxLJly4xaG5EpEgQBhepC5JXmIa8sr877W+W3UFJZ8sBAohHqPyhEbi7XCw0WZhZ1hpB7Pb9d+/0CT81pVdoqvbrVGvUDKrzDXGb+wCBkZ2kHZxtnFCWFICNj8n1+30B6OnDiBBAWVu8SiOhvEC3M/F2LFy/GggULdM9VKhWUSqWIFRE1vgpNxX1DSV5Z7Wn5Zfl1hhBrC2u42LjAxdYFzjbOsLeyRwvrFmjp0LJWT8b9ejXqCgDWFtYwk4l70KRGq0F5VXm9eo3u2dNUY9r1outIyE1AeqwWwL3DzG2v7Hgbwdlxut/xve6dbZxhZW5l/F8IkQkSLcx4enoCAHJycuDl5aWbnpOTg65du97zdXK5HHK53NjlEYlCEATkleUhvTAd6ar0O/d/Pc5QZeBG6Q0UVxTXeq0MMrSwaaG3kWzl3Ao9bXred0NqY2kjwpo2HnMzc9hZ2cHOys6g841qB4R/9eB2Sh9LVGorceHGBb0esLo4WDnA3c4dPo4+UCqUUDoqqx87KnXPnW2cdT1WRFRNtDATEBAAT09PHDlyRBdeVCoVTp8+jRkzZohVFpHR3N7Nc6+gkq6qDivlVXeO5rM0s0RLx5a6jVlvZW+427nXGUqcrJ1gbsbBGY2lb1/AxwfIzKx73IxMVv3zg/98s9aYGY1Wg1vlt+rsVcspyUGGKgMpBSk4kXoCmUWZqNJW6V5ra2lbK+Dcfnx7usJaYeS1J2pajBpmiouLkZycrHt+7do1xMXFwdnZGb6+vpg3bx7ee+89tGnTBgEBAXjrrbfg7e2tO+KJSEo0Wg3SCtOQnJ+MtMK0WiElXZWu16NiJjODt4O3bkPU3au7/gZKoYS7nbvou2mobubmwKefVh/NJJPpB5rbHSdr1tQ9+NfczByutq5wtXV94HI0Wg1ySnLqDMGJNxJx6MohZBVlQcCdAhysHGoFHaWjEr4KX7R2bg2lQsm/KzIpRj00OyoqCuHh4bWmT5w4EVu2bIEgCFi6dCk2btyIgoICPPbYY/jiiy/Qtm3bei+Dh2ZTYxIEAdnF2biUd0l3u5x/GZfyLuHKrSuo0FTo2nrae975xuzgoxdSlI5KeDl4wcJMcsPW6C67d1cf1ZSRcWeaUlkdZBrrsOxKTSWyirPu2+uXW5Kray83l6O1c2u0dWmLti5t0ca5je6xu507d2NRozDk9rvRzjNjLAwzZAzlVeW4lHcJiTcS8eeNP5GUl6QLLrd7V8xkZvB38tfbELRxbqP75svBnM2HRlN91FJWFuDlVb0Lqqkdjl1eVY70wnQk5yfrAvjtv+nUglRdz46j3FH3Nx3sGox2ru3Qzq0d2ji3gdyC4xXJcBhmamCYaT6MscEoUhch8WaiLrQk3kxE4s1EXL11VXeOEw87DwS7BusCy+3QEtgikB/uZBLKq8pxJf+KXsi5lHcJF29exI3SGwCqD1tv5dwK7Vzbob1be919sGuwwQdXU/PAMFMDw0zzUFdXvo9P9ZiF+nTlC4KAdFU6Yq/HIjar+paQm4AM1Z0Z+in80M6tHdq7tq++/+sDu4VNCyOsEZE03Cy9icQb1SFfF/hvJCJdla5r46vwRSf3Tuju1R0hXiF4xPsReDt4c3cV3RfDTA0MM6avoaeMFwQBqYWpesHlj6w/cLP0JoDqsSwhXiHo7NFZF1iCXINgb2XfSGtEJH1F6iJcvHlRF3DO5ZxD7PVYXU+Oh50HQrxDEOL11807BC0dWjLgkA7DTA0MM6ZNo6m+aF/NHpmaZDIBnt4arP5xD+Jy7gSXvLI8AICXvVetD1RvB+/GWwGiZkQQBGSoMqq/RNT4MnF78LG7nbve/2KIVwh8HH0YcJophpkaGGZMW1RU9VWIH2hiGLw7X671Qenl4PXg1xKR0QiCgMyiTL1wE3s9FjklOQAAN1u3Wl84lI5KBpxmgGGmBoYZ01VYXoj3vriCjxZ2f2DbLyIKMGOyk/GLIqKHJggCrhddr9WDk11cfV0+V1tXdPfqjke8HkFfv77oo+wDB7mDyFWToTHM1MAwYzoKygtwIvUEolKiEJ0ajbPZZ6G92hfYGvXA1x47xov5EUnd9aLreuHmt8zfkFOSA3OZOR7xfgT9/PohzD8Mj/k+xnBjAhhmamCYka5bZbdwIq1GeMk6CwECfBx9EO4fjn5+/dBXGYb+3QORmSm77ynjr11reuf1IKKHIwgCLuVdQnRqNKJSohCVEoWs4iyYy8wR4h2iF24c5fz8lxqGmRoYZqQjvyxf1/MSlRqFc9nnIECA0lGJ8IBw3QdTgFOA3v7y20czAXWfMv7uo5mIyDQJgoDL+ZcRnRKNqNTqcHO96DrMZGbo7tUdYX5hunDD61M1fQwzNTDMNF35Zfk4nnpc940qPiceAgT4KnwR7h+OMP8w9PPrB38n/wcO9msKp4wnoqZFEAQk5yfr9dxkFmXCTGaGbp7dEOZ/J9w4WTuJXS7dhWGmBoaZpqO8qhxHrx3FT8k/ISq1OrwAgL+Tf/WHil8Y+vlXh5e/QwqnjCci8QiCgKu3rup6f6NSopChyoAMMnTz6oYwvzAMbj0Y/fz78XIjTQDDTA0MM+K6WXoTBy4dwN6kvTh05RBKKkvgp/DDEwFP6Hpe/Jz8xC6TiJohQRBwreCartfmWMoxZKgy4Ch3xODWgzEiaASGtB7Cs3yLhGGmBoaZxncp7xL2XtyLyEuROJl+EoIgoJdPL4wIGoHhQcPRzrUdzxFBRE2OIAiIz4lHZFIk9ibtRWxWLMxl5njc73EMDxqO4UHDEdgiUOwymw2GmRoYZoxPo9XgVMYp7E3ai8ikSCTlJcHGwgZPtnoSw9sOx9C2Q+Fp7yl2mUREDZKhysD+S/sRmRSJI9eOoEJTgY7uHTG8bXWw6dGyB8xkZmKXabIYZmpgmDGOkooSHLpyCJGXIrH/0n7cLL0Jdzt3DGs7DMODhmNA4ADYWtqKXSYRkUEUqYv0PvPyy/Lhae+p+8zrH9AfNpY2YpdpUhhmamCYMZysoizsu7QPkUmR+Pnqz1Br1Gjv1h7D2w7HiOAR6NmyJ7+lEJHJq9JWISY9BnuT9mJv0l4k5yfDxsIGA1sNxIigERjadijc7dzFLlPyGGZqYJh5OFlFWdiRsANfX/gaZzLPwFxmjr5+fTG87XAMCxqG1s6txS6RiEg0giAgKS8JkUmRiEyqHicIAKHKUIzrMA7jOo6Dm52byFVKE8NMDQwzDVdcUYzvE7/HtvPb8PPVn2FhZoGn2z6NZ4KfwZDWQ+Bi6yJ2iURETVJuSS4OXDqA3Rd342DyQQiCgMGtB+PFzi9ieNBw7n5vAIaZGhhm6qdKW4Wfr/6MbfHb8P3F71FaWYrH/R7HhM4T8Gz7Z3lCKSKiBrpZehPfXPgG2+K3ISYjBg5WDhjdfjQmdJ6Afn79YG7GE2HdD8NMDQwz93c+5zwizkZgR8IO5JTkoJ1rO0zoPAHjO43n+V+IiAwkOT8ZX8V/hW3ntyE5PxktHVrihU4vYHK3yQh2DRa7vCaJYaYGhpnaCsoLsDNhJzad3YTfr/8Odzt3jO84HhO6TEA3z248BwwRkZEIgoDTmaexLX4bdiTsQH5ZPnore2NK1yl4rsNzvNp3DQwzNTDMVNMKWkSnRCMiLgLf/vktKjWVeKrNU5jSbQqGthkKS3NLsUskImpW1FVq7E3ai4izETh05RBsLW0xtsNYTOk2Bb2Vvev8YtmcLtvCMFNDcw8zWUVZiDgbgYi4CFy9dRVtnNtgarepmNBlArwdvMUuj4iIAKQVpmFr3FZExEUgpSAFQS5BmNJtCiZ3naw7GqquC+r6+ACffmqaF9RlmKmhuYaZC7kX8FHMR/gq/itYmlviuQ7PYUrXKXjM9zHuRiIiaqK0ghZRKVHYdHYTvvvzO8hkMkzqMgkd8t7C3MneuHuLfPvj/NtvTS/QMMzU0JzCjCAIOJZyDB+d/Ag/Jv+Ilg4tMe/ReZjWfRoU1gqxyyMiogbIK83D+t/X47NTa5G7/DSg8gFQ+8uoTFbdQ3PtmmntcmKYqaE5hJlKTSV2/bkLH538CGezz6KzR2f8o/c/8FyH53gZeyIiiTt0pAKDBjz4s/zYMSAszPj1NBZDbr8tDFQTGUGRugj/+eM/WHN6DdIK0zCw1UAcevEQBgQO4K4kIiITkZdbvy+lWVlGLkTCGGaaoExVJj47/Rk2xG5ASWUJnu/4PBaGLkQXzy5il0ZERAbm5VW/dtZOtwC0MGotUsUw04SczzmPj2M+xvbz22FjaYOXQ17G3F5z4ePoI3ZpRERkJH37Vo+JycxErQHA1QTIFBkY91sQJlVNwILQBQhyDWrsMps0XgK5CTh67SgGbxuMzus74+i1o3h/wPtIn5+OD578gEGGiMjEmZtXH34N3Dl66TaZDJDJZNi8zglvh7+FyEuRCF4bjBE7R+DXtF8bv9gmimFGROdzzmPQtkHo/9/+yC7OxrZntuHK3CtYELoAjnLTHMxMRES1jRpVffh1y5b60318qqdPfN4Bi/suRsqrKdg0fBMu513GY5sfw8idI3Ep75I4RTchPJpJBNnF2Xjr6FuIiItAYItAfDDgA4wMHslBvUREzVx9zwCsFbT4OuFrLD6yGJlFmZjxyAws6bcErraujV/038RDs2uQUpgprSzFxyc/xqpfV0FuIcfSfkvxyiOv8PBqIiL6W8qryvHpqU+x4pcVkEGGN/u+iTm95sDawlrs0h6IYaYGKYQZraDFf8/9F28efRM3S29iTs85eLPvm2hhw1HpRET08G6U3MCy6GVY//t6KBVKvN//fTzX4bkm3eNvyO03x8wY2dFrRxGyMQST907GY76PIXFWIj4a+BGDDBERGYybnRv+/dS/kTAzAZ3cO2Hcd+MQuikUJ9NPil1ao2CYMZLEG4kYtmMY+v+3P2wsbHByykl8/ezXCGwRKHZpRERkooJdgxH5fCSOvnQUldpK9InogzG7xuBK/hWxSzMq0cPM22+/DZlMpncLDg4Wu6y/LbckFzMPzESndZ1wIfcCvnn2G/w65VeEKkPFLo2IiJqJ8IBw/DbtN2wduRUx6TFot7YdFv60ELfKboldmlGIHmYAoEOHDsjKytLdfvnlF7FLajCtoMXnpz9H689aY0fCDqwasAqJsxIxpsOYJr3PkoiITJOZzAwvdXkJl+ZcwtJ+S7Hxj41o9Vkr/OeP/0Diw2VraRJnALawsICnp2e92qrVaqjVat1zlUplrLLqLbUgFZP3TsaxlGOY8cgMvBv+LlxsXcQui4iICLaWtnjz8TcxtftULD6yGNP2TcOei3vw5bAv4eVQz2spNHFNomfm8uXL8Pb2RmBgIF544QWkpaXds+3KlSuhUCh0N6VS2YiV6hMEAZvPbkandZ2QnJ+Mnyf8jC+GfsEgQ0RETY6nvSc2j9iMfc/vQ2xWLDqu64ivE74WuyyDEP3Q7B9//BHFxcUICgpCVlYWli1bhszMTCQkJMDBwaFW+7p6ZpRKZaMfmp1dnI3p+6Zj36V9mNR1EtYMWgOFtaLRlk9ERPR35ZXmYeYPM/HNhW8wtsNYrH1qbaN/ETfp88wUFBTAz88Pn3zyCaZOnfrA9mKcZ2bXhV2YcWAGzM3M8eWwLzE8aHijLJeIiMiQdibsxMwDMyG3kGPT8E14qs1TjbZskz7PjJOTE9q2bYvk5GSxS6klvywf478bj+e+fQ5h/mFImJHAIENERJI1ruM4JMxMQDfPbhi6fSimRU5DkbpI7LIarMmFmeLiYly5cgVeXk1rUFJ0SjQ6reuEH5N/xLZntmHXmF1ws3MTuywiIqKH4u3gjQPjD2Dj0xux88JOdF7fGb9l/iZ2WQ0ieph57bXXEB0djZSUFJw8eRLPPPMMzM3N8fzzz4tdGoDqQb6rY1aj/3/7o61LWyTMSMALnV/g4dZERGQyZDIZpoVMQ/wr8fCw88Bjmx/Df/74j9hl1ZvoYSYjIwPPP/88goKC8Nxzz8HFxQWnTp2Cm5v4vR4lFSUYv3s8FhxagHmPzsPhCYfR0rHlg19IREQkQQEtAhA9KRqTu07GtH3TMH3fdKir1A9+ocia3ADghjLWAODk/GQ88/UzuHbrGiJGROC5Ds8ZbN5ERERN3eazmzHjwAx09uiM7577DkqFYU+FYtIDgJuCn5J/wiMbH4G6So3T/3eaQYaIiJqdyd0m49cpvyKnJAfdN3bHidQTYpd0Twwzd4k4G4Gh24eij28f/DbtN3Rw7yB2SURERKII8Q5B7PRYdHLvhAH/G4BvLnwjdkl1arZhRqMBoqKAHTuq76uqBLwd9TamRk7FtO7TsHfcXp4Ej4iImj1XW1ccfPEgxrQfg7HfjsXHJz8Wu6RamsS1mRrb7t3Aq68CGRl3ptm5FqDkiXismL0Cix5bxKOViIiI/mJlboX/PfM/+Cp88drh13Cj9AZW9l/ZZLaVzS7M7N4NPPsscPew55KbCuCb7xA0VoYm8t4QERE1GTKZDCv6r4C7nTvm/zQfN0tvYsPTG2BuZi52ac0rzGg01T0ydR+/ZQaZDJg3DxgxAjAX/70hIiJqcuY9Og8uNi6YtHcSZJBhw7ANMJOJO2qlWYWZEyf0dy3dTRCA9PTqdmFhjVYWERGRpEzoMgEAMHHPRNhY2uDTwZ+KusupWYWZrCzDtiMiImquJnSZgNLKUrxy4BXYWtqKOoamWYWZ+l7uqYldFoqIiKhJevmRl1FWVYb5P82HnaUd3ur3lih1NKsw07cvoHAvQmGuHeo6Kl0mA3x8qtsRERHRg817dB5KK0vx5tE34e3gjandpzZ6Dc3qPDNHUg5BFT4ZQO0jlm4/X7OGg3+JiIga4p99/4mXQ17GjAMzcDL9ZKMvv9mEmeT8ZIz9diwGDSvBrl1atLzrepE+PsC33wKjRolTHxERkZR9NuQz9PLphVFfj0KG6j5H2xhBs7jQpEqtwqP/eRRV2iqcmXYGTtZO0Giqj1rKyqoeI9O3L3tkiIiIHkZOcQ56fNkDHvYeOD7pOGwsbe7ZlheabABBEDBl7xRkFmUi8vlIOFk7AagOLmFhwPPPV98zyBARET0cD3sP7Bm3BxdyL2DWD7MabbkmH2a+Ov8Vvkv8DhHDIxDsGix2OURERCatu1d3rH1qLTbHbUZkUmSjLNOkw8z1ouuY8+McjO80HqPbjxa7HCIiomZhUtdJGNpmKF7e/zLySvOMvjyTDTOCIGD6vumwtrDGZ4M/E7scIiKiZkMmk2HjsI0oryrH3INzjb48kw0zW89txYHLB7Dh6Q1wsXURuxwiIqJmxdvBG58N/gzbz2/H7sTdRl2WSYaZInURXj/8Ol7o9AKGBw0XuxwiIqJm6cXOL2Jom6GY/9N8qKvURluOSYaZT2I+gUqtwsr+K8UuhYiIqNmSyWT48MkPkaHKwLrf1xltOSYXZnJLcvFRzEeY3XM2lAql2OUQERE1a+3c2mFy18lYfmI5VGqVUZZhcmFmxYkVMJOZYfFji8UuhYiIiAC8HfY2iiuK8fHJj40yf5MKM1lFWVj3+zq83vt1DvolIiJqInwcfTCn5xx8HPMxCsoLDD5/kwozm+M2w1xmjtk9Z4tdChEREdWwIHQB1Bo1vor/yuDzNpkwoxW0+PKPLzG241gorBVil0NEREQ1eNp7YljbYdgQuwGGviykyYSZY9eOIaUgBdO7Txe7FCIiIqrD9JDpOJ97Hmcyzxh0viYTZrbEbUFH94541OdRsUshIiKiOjwZ+CT8FH7YELvBoPM1mTBzMPkgJnaZCJlMJnYpREREVAdzM3NM6DwBey7ugUarMdh8TSbMVGgqMKjVILHLICIiovsY1HoQbpXfwrmccwabp8mEGVc7V3R07yh2GURERHQfPVv2hJ2lHaJTog02T5MJM2F+YdzFRERE1MRZmVuhn38/RKVGGWyeJhNmHvd7XOwSiIiIqB76B/THybSTBpufyYSZDu4dxC6BiIiI6qGTeydUaCoMNj+TCTMBTgFil0BERET14OcYCKT2Mdj8TCbMONs4i10CERERPcDu3cAT3QOBHT8YbJ5NIsysXbsW/v7+sLa2Rq9evXDmTMPPDMjBv0RERE3b7t3As88CmRmG3WaLHma+/vprLFiwAEuXLsUff/yBLl26YNCgQcjNzRW7NCIiIjIQjQZ49VXAwJdlAgDIBENf7amBevXqhR49euDf//43AECr1UKpVGLOnDlYtGhRrfZqtRpqtVr3XKVSQalUorCwEI6Ojo1WNxEREdVfVBQQHl5zigqAwiDbb1F7ZioqKhAbG4sBAwboppmZmWHAgAGIiYmp8zUrV66EQqHQ3ZRKZWOVS0RERH9TVpbx5i1qmLl58yY0Gg08PDz0pnt4eCA7O7vO1yxevBiFhYW6W3p6emOUSkRERA/By8t487Yw3qyNQy6XQy6Xi10GERERNUDfvoCPD5CZafhxM6L2zLi6usLc3Bw5OTl603NycuDp6SlSVURERGRo5ubAp59WPzb0AciihhkrKyuEhITgyJEjumlarRZHjhxBaGhog+Yl8jhmIiIieoBRo4BvvwW8Wxp2my36odkLFizAl19+ia1btyIxMREzZsxASUkJJk+e3KD53Cy9aaQKiYiIyFBGjQJ+jk0Gnn/KYPMUfczM2LFjcePGDSxZsgTZ2dno2rUrDh48WGtQ8IOkFqSilVcrI1VJREREhpJWdA3w+9Vg8xO9ZwYAZs+ejdTUVKjVapw+fRq9evVq8DzO5543QmVERERkaOeyz8Hawtpg82sSYcYQolOjxS6BiIiI6uHItSPo48sLTdYSlRIFraAVuwwiIiK6D3WVGsdTjyPMP8xg8zSZMHOr7Bbic+LFLoOIiIju41TGKZRVlTHM1MXawhoHkw+KXQYRERHdx09XfoKrrSs6unc02DxNJswMbTsUW89t5flmiIiImqgqbRX+F/8/jAoeBTOZ4SKIyYSZiV0m4uLNi/gl7RexSyEiIqI6HEw+iAxVBqaHTDfofE0mzPT164vWzq2x8Y+NYpdCREREddgYuxHdvbojxDvEoPM1mTBjJjPDtO7TsOvCLuSX5YtdDhEREdWQocrAgcsHML27YXtlABMKMwAwqeskyGQyfHrqU7FLISIioho+OvkR7K3s8Xyn5w0+b5MKM+527pjTcw4+jvkYuSW5YpdDREREAFIKUrDu93V4vffrcJQ7Gnz+JhVmAGDRY4tgYWaB946/J3YpREREBGDJsSVoYd0C8x6dZ5T5m1yYcbZxxht93sD639fj6q2rYpdDRETUrMXnxGNb/DYs6bcEdlZ2RlmGyYUZAHj10VfhauuKN35+Q+xSiIiImi1BEPDaodcQ2CIQ07pPM9pyTDLM2Fra4pNBn+DbP7/Frgu7xC6HiIioWdp0dhMOXz2Mz4Z8BktzS6MtxyTDDACM7TAWo9uNxswfZnIwMBERUSNLLUjFgp8WYErXKXiqzVNGXZbJhhmZTIYvhn4BAJh5YCYvc0BERNRIBEHA1MipcLJ2wieDPjH68kw2zADVh2qvH7oe3yV+h+3nt4tdDhERUbOw7vd1OHLtCDYN3wSFtcLoyzPpMAMAo9uPxoudX8T0/dMRnxMvdjlEREQmLSY9BvN/mo+Zj8zEk62ebJRlmnyYAYANT29AkEsQRuwcgZulN8Uuh4iIyCRlqjIx6ptR6OHdA6sHr2605TaLMGNraYs94/agpKIEY3aNQaWmEhoNEBUF7NhRfa/RiF0lERGRdJVVluGZr5+BpZklvnvuO1iZWzXasptFmAEAX4Uvvn3uW/yS9guGL9kCf38gPBwYP7763t8f2L1b7CqJiIikRxAEvLz/ZZzPPY894/bAw96jUZffbMIMADzu9zimyPfj4IqpyMjQP7opMxN49lkGGiIioob619F/4X/x/0PE8Ah09+re6MtvVmFGowF++HwQANlftztuH7k9bx53OREREdXX8uPLseKXFfh44MdGuSJ2fTSrMHPiBJCRAdwdZG4TBCA9vbodERER3d/qmNX417F/4d3wd7EgdIFodTSrMJOVZdh2REREzdX639djwaEFWNRnEd7s+6aotTSrMOPlZdh2REREzdH639djxoEZmNtzLlb0XwGZrO49Ho2lWYWZvn0BHx/g3r9zAUpldTsiIiLSJwgC3jv+ni7IrBm8RvQgAzSzMGNuDnz6afXj2r97AYCAHlO+gpkZr+NERERUk0arwasHX8Vbx97Cu+HvNpkgAzSzMAMAo0YB334LtGypP12plOGl5fuwW/YiXtrzEio0FeIUSERE1MSUVZZhzK4xWPvbWqwbug7/evxfTSbIAICF2AWIYdQoYMSI6qOWsrKqx8j07QuYm4/AkIQdmLhnIjJVmfhmzDdwtXUVu1wiIiLRZBVlYdQ3oxCfE4+94/bi6bZPi11SLTJBECS9T0WlUkGhUKCwsBCOjo4Gmefx1ON49ptnYWNpg93P7UaId4hB5ktERCQlv6T9gjG7xsBMZoY9Y/egR8seBpu3IbffzW43U3087vc4YqfHwsPOA30i+mDz2c1il0RERNRoBEHA56c/R/jWcLR1aYs/pv9h0CBjaAwz96BUKHF88nG81OUlTImcglf2vwJ1lVrssoiIiIyqtLIUL+15CXMPzsWcnnPw84SfG/1aSw3VLMfM1Je1hTU2DtuIHt49MPvH2YjLjsP20dsR2CJQ7NKIiIgMLvFGIp7/7nlczr+M7aO2i3Z5goZiz0w9TAuZhhOTTyCnJAed13XGht83QOJDjYiIiHS0gharY1aj24ZuKK8qx6mppyQTZACRw4y/vz9kMpne7f333xezpHvq2bIn4l+Jx/hO4/HKgVfw1PankKnKFLssIiKih3Lt1jU8sfUJLDi0ADMemYGzL59FJ49OYpfVIKL3zLzzzjvIysrS3ebMmSN2SffkIHfAxmEbcWD8AZzLPoeO6zpi+/nt7KUhIiLJEQQBX8Z+ic7rOyOlIAXHJh7D6sGrYWNpI3ZpDSZ6mHFwcICnp6fuZmdnJ3ZJD/RUm6eQMDMBQ1oPwQu7X8CYXWNwo+SG2GURERHVy/Wi63h6x9OYvn86xnYYi/gZ8QjzDxO7rL9N1PPM+Pv7o7y8HJWVlfD19cX48eMxf/58WFjce1yyWq2GWn3nqCKVSgWlUmnQ88w0xK4LuzDjwAyYm5njy2FfYnjQ8EavgYiIqL52JuzEzAMzIbeQ48thX4p2EjyTOc/M3LlzsXPnThw7dgwvv/wyVqxYgddff/2+r1m5ciUUCoXuplQqG6nauo3pMAYJMxPQs2VPjNg5Ai99/xKuF10XtSYiIqK7pRakYsyuMXj+u+fxZKsnkTAjoUmezffvMHjPzKJFi7Bq1ar7tklMTERwcHCt6REREXj55ZdRXFwMuVxe52ubWs/MbYIgYHPcZrx++HWUVZXh9d6v47Xer8HOqunvNiMiItNVWF6Ilb+sxJpTa9DCpgVWD1qNcR3HiV2WQXtmDB5mbty4gby8vPu2CQwMhJWVVa3pFy5cQMeOHXHx4kUEBQXVa3nGuJzBwygoL8CKEyvw6elP4WLjgveeeA8Tu0yEuZm52KUREVEzUqmpxJd/fImlUUtRUlGCf/T+B/7R5x+wt7IXuzQATTzMPIyvvvoKL730Em7evIkWLVrU6zVNLczcllKQgsVHFmNnwk509uiMjwd+jAGBA8Qui4iITJwgCNh/aT9e//l1JN1MwqSuk/Bu+Lto6dhS7NL0mMSYmZiYGKxZswbnzp3D1atX8dVXX2H+/Pl48cUX6x1kmjJ/J3/sGL0Dp6aegr2VPZ7835N46quncCH3gtilERGRiTqbdRb9/9sfw3cOR0uHlvjj5T8QMSKiyQUZQxMtzMjlcuzcuRP9+vVDhw4dsHz5csyfPx8bN24UqySj6OXTC79M/gXfjvkWl/IuofP6znhl/yvIKc4RuzQiIjIRGaoMTNozCSEbQ5BdnI39z+/H4QmH0dWzq9ilNYomtZvp72iqu5nqUqGpwNoza/Hu8XdRqa3E4scWY/6j8yV5giIiIhJfkboIH/z6AT6O+Rj2VvZ4J/wd/F/3/4OFWdO/9KLJjpn5O6QUZm7LL8vHe8ffw7/P/Bse9h5Y8cQKvND5BZjJRD+HIRERSUCVtgqbz27GW8feQqG6EAseXYA3HnsDjnJpbAcBhhk9UgwztyXnJ2PRz4vwXeJ3aOPcBgtDF+KlLi+xp4aIqJnSaIATJ4CsLMDLC+jbFzCvcTBscUUxIs5GYPWp1UgpSMGLnV/E8ieWw1fhK17RfxPDTA1SDjO3nck8gw9PfojdibvhbOOM2T1mY1bPWXC1dRW7NCIiaiS7dwOvvgpkZNyZ5uMDfPopEPpkFv595t9Y9/s6qNQqjOs4Dq/1fk3SY2IYZmowhTBz25X8K1h9ajUizkYAACZ1nYT5j85HG5c2IldGRETGtHs38OyzwN1bZJlMgCAAFuPGwqbzQUwPmY65veZKsifmbgwzNZhSmLktrzQP635fh8/PfI4bJTcwMngk/tH7HwhVhopdGhERGZhGA/j76/fI6NNC4V6Mq1cFONspGrEy4zKJ88zQvbnYuuBfj/8LqfNSseHpDfjzxp/oHdEbfSL64PvE76HRasQukYiIDOTEifsFGQAwQ2GuI+J/M50gY2gMM02YtYU1poVMw5+z/kTkuEhYmFlg1DejELw2GOt+W4fSylKxSyQiood0Na2sXu2ysoxciIQxzEiAmcwMw4KGIXpSNE5NPYVunt0w+8fZ8Fvjh7ej3kZuSa7YJRIRUQNdL7qOxT8vxtxfxtSrvZeXkQuSMI6Zkairt65izak12HR2Eyo1lRgRPAJTuk7BwFYDeVFLIqImqlJTiR8u/4CIuAgcuHQAtpa2mNb1Fez4vxXIzrKoNQAYAGSy6qOarl3TP0xb6jgAuIbmGmZuyy/Lx//O/Q+bzm7C+dzzaOnQEpO6TsKUblMQ2CJQ7PKIiAjAxZsXsfnsZmw9txU5JTkI8QrBlG5T8EKnF6CwVuiOZgL0j2iSyarvv/0WGDWq8es2JoaZGpp7mLlNEAT8fv13RJyNwPaE7VCpVQjzD8PUblMxut1onoiPiKiRFVcU45sL3yDibAR+Tf8VzjbOeLHTi5jSbQq6eHap1b6u88wolcCaNaYXZACGGT0MM7WVVpZid+JubDq7CVEpUVDIFRjTfgwmdJmAx3wf42UTiIiMRKPV4FjKMWyL34bvEr9DSUUJnmz1JKZ0nYIRwSNgbWF9/9c/4AzApoRhpgaGmfu7kn8FW+K2YNv5bUgpSIGvwhcvdHoBL3Z+Ee3d2otdHhGR5AmCgPiceGyL34btCdtxveg62ji3wYudX8TELhPh5+QndolNEsNMDQwz9aMVtDiZfhLb4rfhmwvf4Fb5LXT36o4XO72IcR3HwcuBw+SJiBoivTAd289vx7bz25CQmwBXW1eM6zAOE7pMQA/vHpDdHvBCdWKYqYFhpuHUVWr8cPkHbDu/Dfsv7UeVtgr9A/rjmeBnMCxoGHwcfcQukYioSUopSEFkUiS+v/g9olOiIbeQY0TQCEzoPAEDWw2Epbml2CVKBsNMDQwzD+dW2S3s+nMXdibsxPHU49AIGoR4hWB40HAMDxqOLh5d+O2CiJotraBF7PVYRCZFIvJSJOJz4mFpZonwgHCM6zAOo9uPhqOc256/g2GmBoYZw7lVdgs/Jv+IyKRI/Jj8I1RqFXwVvhjetjrY9PPvBytzK7HLJCIyqvKqchy9dhSRSZHYd2kfrhddh5O1E4a2GYoRQSMwqPUgBhgDYJipgWHGOCo0FYhOidZ9G0krTIOj3BGDWw/GiKARGNJ6CFrYtBC7TCIig7hZehMHLh1A5KVI/JT8E0oqSxDYIhAjgkZgeNBw9FH24S4kA2OYqYFhxvhuj9Tfm7QXkUmRiM2KhbnMHI/7Pa77Rw9oESB2mUREDXIp7xIikyKxN2kvTqafhCAI6OXTS9cb3d6tPXezGxHDTA0MM40vQ5WBfUn7EHkpEkevHUWFpgId3Tvqgs0j3o/wXDZE1ORotBqcyjilCzBJeUmwtrDGk4FPYnjQcDzd9ml42nuKXWazwTBTA8OMuIrURTh05RD2Ju3FgcsHkF+WDzdbN4T5hyHMPwz9/Prx2w0RiUIraJGQm4ColChEpUQhOjVa9xk1rO0wjAgegQGBA2BraSt2qc0Sw0wNDDNNR5W2CifTT+Jg8kFEp0bjTOYZVGmr4Gbrhn7+/RDmF4Z+/tXh5u/03DSnM2MSUcNpBS3ic+IRnRKNqNQoHE89jvyyfFiZW+FRn0fRz68fhrQegp4te/KCvE0Aw0wNDDNNV0lFCWIyYnTfis5knkGlthKutq7o59dP13PTwb3DA8NNXdcs8fEBPv3UNK9ZQkQPptFqqsNLajSiUqrDy63yW5Cby/Goz6O6HuJeLXvx+nRNEMNMDQwz0lFaWYqY9L/CTWoUTmecRqW2Ei42Lujn308XcDq6d9QLN7evJnv3X6opX02WiGrTaDU4l3NOr+eloLwAcnM5QpWhCPP7K7z49HrgNZBIfAwzNTDMSFdpZSlOZZzS7cs+lXEKFZoKONs4o59fdbjpqwzDiEc7IyOj7jE3Mll1D821a9zlRGRqNFoN4rLj9HpeCtWFsLawRm9lb90XoJ4tezK8SBDDTA0MM6ajrLJML9zEZMSgIjkU2Br1wNceOwaEhRm9RCIyEq2gRXJ+MmKvxyI2q/r2R9YfUKlVsLGwqRVe5BZysUumh2TI7beFgWoiemg2ljYIDwhHeEA4gOpws2LdNby39cGvPXs5G/36efCoKSIJ0ApaXM67XB1a/govZ7PPQqVWAQD8FH4I8Q7Boj6L0NevL3p492B4oftizww1aVFRQHh4PRpODIMiOA7dvbojxCsEId4hCPEKQSvnVjznDZGItIIWl/Iu6fW4nM06i6KKIgCAv5N/9f9sjf9bF1sXkaumxsDdTDUwzJg2jQbw9wcyM2sPAAaqx8x4tdRg48+HEZdz58MyrTANAOAod7wTcP76sGzt3JoBh8gINFpNdXC5q8eluKIYABDgFKALLCFeIeju1Z3BpRljmKmBYcb03T6aCdAPNPc7mulm6U29b4Kx12ORWpgKoDrgdPPshs4endHerT3aubZDO7d2cLN1424qonoQBAE5JTn488afSLyRiMSbiTiXcw5ns86ipLIEABDYIlDvS0R3r+5wtnEWuXJqShhmamCYaR7qOs+MUgmsWVP/w7LzSvPwR9YfuoCTkJuA5PxkVGmrAADONs53wo1ru+rHbu2gdFQy5FCzpBW0SCtM0wstf974E4k3E1FQXgAAsDSzRBuXNujo3lGvx4UXoqUHYZipgWGm+TDGGYArNBVIzk9G4o07H9KJNxNx8eZFlFeVAwDsLO0Q7BqMti5t0ca5Ddq6tK1+7NIGTtZOD79iRCLLL8vH5bzLuJR3qfqWfwmX8y4jKS8JpZWlAABbS1sEuwbfCfp/3Qe2COTVpOlvYZipgWGGjEGj1SC1MFUXcpLyknAp7xIu519GdnG2rp2brZsu3NwOO21c2sBX4QuFXMEenWaiqV9qQxAE3Cq/hbTCNF1ouZx/J7zkleXp2no7eFf/HTu3QTu3drrdsL4KX441I4NimKmBYYYam0qtwuW8y3obg9uPb3e9A4C9lT2Ujkr4OPpA6aiEUqGsdW9vZS/eipBBNIVLbajUKqQXpiNdlY70wnRkqDKqH//1PF2VruthAap3qdYM4Lcft3Zuzb9JajQMMzUwzFBTIQgCbpbeRHJ+st5GpOYGJrs4GwLu/Ms5WTvdN/D4OPrwmjJNWGNcaqO0slQvqKSraoSVv57fPj8LAMggg5eDl/7fU43HrZ1b8wgiahIkEWaWL1+OAwcOIC4uDlZWVigoKKjVJi0tDTNmzMCxY8dgb2+PiRMnYuXKlbCwqP+5/BhmSEoqNBW4XnS91sap5uObpTf1XuNq63on7Dgq4W7nDhdbF7jYuNS6t7ey566tRnL7tAE1e2RqutelNgRBQFFFEfJK85BXllfrPrckV+/vIb8sX2++7nbu9wwqPo4+8Hbw5hgWkgRJnAG4oqICY8aMQWhoKDZt2lTr5xqNBkOHDoWnpydOnjyJrKwsvPTSS7C0tMSKFSuMVRaRqKzMreDv5A9/J/97timrLENmUWadgeeX9F9wo+QG8sryUKGpqPVaSzPL2kGnjtBT876FdQtu/P6GEyfuHWSA6t6a9HSg37J/wSzguF5guX0EXU1yczlcbF3gZusGpUKJ3sred3rt/gorLR1b8hpERHUw+m6mLVu2YN68ebV6Zn788Uc8/fTTuH79Ojw8PAAA69evxxtvvIEbN27AysqqXvNnzww1R4IgoKSy5J7f7nX3d00rVBfWOT9HuaMu3NhZ2sHG0ga2lrawsbhzX2uapY3e4/v9zMJMnCunVGmrUFpZirLKsur7qjK9x/X5me7xX/clFSXIK8tDdkw4yr+OeGANXWauQqcBCQ8MlraWtuxVo2ZFEj0zDxITE4NOnTrpggwADBo0CDNmzMCFCxfQrVu3Ol+nVquhVqt1z1UqVZ3tiEyZTCaDvZU97K3s4efkV+/XVWmrkF+Wf8/wk1+Wr7fhzivNu+fGva6eoXuxNLPUBRwLMwuYycxgJjODTCarvoeszudmMjMIECAIArSCFgL+ur/rec1pVdoqXY119YDci9xcrhfK7g5otpa2cLGpDnvONs4oMO+K9V8/eL5rxrzBi6ASGZloYSY7O1svyADQPc/Ozq7rJQCAlStXYtmyZUatjchUWZhZwN3OHe527g89L41Wo+vNaEgvR5W2Shc87hdQBEGARtDcM+jcfn73NAsziwb3JllbWMPcrGHHUmvCgf2r7n+pDR+f6sO0ici4GhRmFi1ahFWrVt23TWJiIoKDgx+qqPtZvHgxFixYoHuuUqmgVCqNtjwiqpu5mbmud6g5MjevPvz62Werg0tdl9pYs6ZpnW+GyFQ1KMwsXLgQkyZNum+bwMDAes3L09MTZ86c0ZuWk5Oj+9m9yOVyyOW8FDwRiW/UqOrDr+s6z0xDLrVBRA+nQWHGzc0Nbm5uBllwaGgoli9fjtzcXLi7V3d5Hz58GI6Ojmjfvr1BlkFEZGyjRgEjRjTtMwATmTqjjZlJS0tDfn4+0tLSoNFoEBcXBwBo3bo17O3tMXDgQLRv3x4TJkzABx98gOzsbPzrX//CrFmz2PNCRJJibg4O8iUSkdEOzZ40aRK2bt1aa/qxY8cQ9td/fWpqKmbMmIGoqCjY2dlh4sSJeP/993nSPCIiIhMniTMANxaGGSIiIukx5Pabl0AlIiIiSWOYISIiIkljmCEiIiJJY5ghIiIiSWOYISIiIkljmCEiIiJJY5ghIiIiSWOYISIiIkljmCEiIiJJY5ghIiIiSWOYISIiIkljmCEiIiJJY5ghIiIiSWOYISIiIkljmCEiIiJJY5ghIiIiSWOYISIiIkljmCEiIiJJY5ghIiIiSWOYISIiIkljmCEiIiJJY5ghIiIiSWOYISIiIkljmCEiIiJJY5ghIiIiSWOYISIiIkljmCEiIiJJY5ghIiIiSWOYISIiIkljmCEiIiJJY5ghIiIiSWOYISIiIkljmCEiIiJJY5ghIiIiSWOYISIiIkkzWphZvnw5evfuDVtbWzg5OdXZRiaT1brt3LnTWCURERGRCbIw1owrKiowZswYhIaGYtOmTfdst3nzZgwePFj3/F7Bh4iIiKguRgszy5YtAwBs2bLlvu2cnJzg6elprDKIiIjIxIk+ZmbWrFlwdXVFz549ERERAUEQ7tterVZDpVLp3YiIiKj5MlrPTH288847eOKJJ2Bra4tDhw5h5syZKC4uxty5c+/5mpUrV+p6fYiIiIhkwoO6QmpYtGgRVq1add82iYmJCA4O1j3fsmUL5s2bh4KCggfOf8mSJdi8eTPS09Pv2UatVkOtVuueq1QqKJVKFBYWwtHR8cErQURERKJTqVRQKBQG2X43qGdm4cKFmDRp0n3bBAYG/u1ievXqhXfffRdqtRpyubzONnK5/J4/IyIiouanQWHGzc0Nbm5uxqoFcXFxaNGiBcMKERER1ZvRxsykpaUhPz8faWlp0Gg0iIuLAwC0bt0a9vb22LdvH3JycvDoo4/C2toahw8fxooVK/Daa68ZqyQiIiIyQUYLM0uWLMHWrVt1z7t16wYAOHbsGMLCwmBpaYm1a9di/vz5EAQBrVu3xieffIJp06YZqyQiIiIyQQ0aANwUGXIAERERETUOQ26/RT/PDBEREdHDYJghIiIiSWOYISIiIkljmCEiIiJJY5ghIiIiSWOYISIiIkljmCEiIiJJY5ghIiIiSWOYISIiIkljmCEiIiJJY5ghIiIiSWOYISIiIkljmCEiIiJJY5ghIiIiSWOYISIiIkljmCEiIiJJY5ghIiIiSWOYISIiIkljmCEiIiJJY5ghIiIiSWOYISIiIkljmCEiIiJJY5ghIiIiSWOYISIiIkljmCEiIiJJY5ghIiIiSWOYISIiIkljmCEiIiJJY5ghIiIiSWOYISIiIkljmCEiIiJJY5ghIiIiSWOYISIiIkljmCEiIiJJY5ghIiIiSWOYISIiIkkzWphJSUnB1KlTERAQABsbG7Rq1QpLly5FRUWFXrv4+Hj07dsX1tbWUCqV+OCDD4xVEhEREZkgC2PN+OLFi9BqtdiwYQNat26NhIQETJs2DSUlJfjoo48AACqVCgMHDsSAAQOwfv16nD9/HlOmTIGTkxOmT59urNKIiIjIhMgEQRAaa2Effvgh1q1bh6tXrwIA1q1bhzfffBPZ2dmwsrICACxatAh79uzBxYsX65yHWq2GWq3WPS8sLISvry/S09Ph6Oho/JUgIiKih6ZSqaBUKlFQUACFQvFQ8zJaz0xdCgsL4ezsrHseExODxx9/XBdkAGDQoEFYtWoVbt26hRYtWtSax8qVK7Fs2bJa05VKpXGKJiIiIqPJy8uTTphJTk7G559/rtvFBADZ2dkICAjQa+fh4aH7WV1hZvHixViwYIHueUFBAfz8/JCWlvbQvwwpuZ1om1uPFNeb690ccL253s3B7T0rNTs5/q4Gh5lFixZh1apV922TmJiI4OBg3fPMzEwMHjwYY8aMwbRp0xpeZQ1yuRxyubzWdIVC0az+CG5zdHTkejcjXO/mhevdvDTX9TYze/hjkRocZhYuXIhJkybdt01gYKDu8fXr1xEeHo7evXtj48aNeu08PT2Rk5OjN+32c09Pz4aWRkRERM1Qg8OMm5sb3Nzc6tU2MzMT4eHhCAkJwebNm2ulr9DQULz55puorKyEpaUlAODw4cMICgqqcxcTERER0d2Mdp6ZzMxMhIWFwdfXFx999BFu3LiB7OxsZGdn69qMHz8eVlZWmDp1Ki5cuICvv/4an376qd6YmAeRy+VYunRpnbueTBnXm+vdHHC9ud7NAdf74dfbaIdmb9myBZMnT67zZzUXGR8fj1mzZuG3336Dq6sr5syZgzfeeMMYJREREZEJatTzzBAREREZGq/NRERERJLGMENERESSxjBDREREksYwQ0RERJIm2TCTkpKCqVOnIiAgADY2NmjVqhWWLl2KiooKvXbx8fHo27cvrK2toVQq8cEHH4hUseEsX74cvXv3hq2tLZycnOpsI5PJat127tzZuIUaWH3WOy0tDUOHDoWtrS3c3d3xj3/8A1VVVY1bqJH5+/vXem/ff/99scsyuLVr18Lf3x/W1tbo1asXzpw5I3ZJRvf222/Xem9rnk3dVBw/fhzDhg2Dt7c3ZDIZ9uzZo/dzQRCwZMkSeHl5wcbGBgMGDMDly5fFKdaAHrTekyZNqvX+Dx48WJxiDWTlypXo0aMHHBwc4O7ujpEjRyIpKUmvTXl5OWbNmgUXFxfY29tj9OjRtU6o+yCSDTMXL16EVqvFhg0bcOHCBaxevRrr16/HP//5T10blUqFgQMHws/PD7Gxsfjwww/x9ttv1zoTsdRUVFRgzJgxmDFjxn3bbd68GVlZWbrbyJEjG6dAI3nQems0GgwdOhQVFRU4efIktm7dii1btmDJkiWNXKnxvfPOO3rv7Zw5c8QuyaC+/vprLFiwAEuXLsUff/yBLl26YNCgQcjNzRW7NKPr0KGD3nv7yy+/iF2SwZWUlKBLly5Yu3ZtnT//4IMP8Nlnn2H9+vU4ffo07OzsMGjQIJSXlzdypYb1oPUGgMGDB+u9/zt27GjECg0vOjoas2bNwqlTp3D48GFUVlZi4MCBKCkp0bWZP38+9u3bh127diE6OhrXr1/HqFGjGrYgwYR88MEHQkBAgO75F198IbRo0UJQq9W6aW+88YYQFBQkRnkGt3nzZkGhUNT5MwDC999/36j1NJZ7rfcPP/wgmJmZCdnZ2bpp69atExwdHfX+BqTOz89PWL16tdhlGFXPnj2FWbNm6Z5rNBrB29tbWLlypYhVGd/SpUuFLl26iF1Go7r7s0qr1Qqenp7Chx9+qJtWUFAgyOVyYceOHSJUaBx1fUZPnDhRGDFihCj1NJbc3FwBgBAdHS0IQvV7a2lpKezatUvXJjExUQAgxMTE1Hu+ku2ZqUthYaHe1TdjYmLw+OOPw8rKSjdt0KBBSEpKwq1bt8QosVHNmjULrq6u6NmzJyIiIvROVmiKYmJi0KlTJ92V14Hq91ulUuHChQsiVmZ477//PlxcXNCtWzd8+OGHJrUrraKiArGxsRgwYIBumpmZGQYMGICYmBgRK2scly9fhre3NwIDA/HCCy8gLS1N7JIa1bVr15Cdna33/isUCvTq1atZvP9RUVFwd3dHUFAQZsyYgby8PLFLMqjCwkIA0G2rY2NjUVlZqfd+BwcHw9fXt0Hvd4OvzdRUJScn4/PPP8dHH32km5adnY2AgAC9drc3dNnZ2SZ9/ad33nkHTzzxBGxtbXHo0CHMnDkTxcXFmDt3rtilGU12drZekAH0329TMXfuXHTv3h3Ozs44efIkFi9ejKysLHzyySdil2YQN2/ehEajqfO9vHjxokhVNY5evXphy5YtCAoKQlZWFpYtW4a+ffsiISEBDg4OYpfXKG7/r9b1/pvS/3FdBg8ejFGjRiEgIABXrlzBP//5TwwZMgQxMTEwNzcXu7yHptVqMW/ePPTp0wcdO3YEUP1+W1lZ1RoH2dD3u8n1zCxatKjOwas1b3d/oGVmZmLw4MEYM2YMpk2bJlLlD+fvrPf9vPXWW+jTpw+6deuGN954A6+//jo+/PBDI67B32Po9ZaqhvweFixYgLCwMHTu3BmvvPIKPv74Y3z++edQq9UirwU9rCFDhmDMmDHo3LkzBg0ahB9++AEFBQX45ptvxC6NGsG4ceMwfPhwdOrUCSNHjsT+/fvx22+/ISoqSuzSDGLWrFlISEgwysEoTa5nZuHChZg0adJ92wQGBuoeX79+HeHh4ejdu3etgb2enp61RkTffu7p6WmYgg2koevdUL169cK7774LtVrdpC5mZsj19vT0rHXES1N9v+/2ML+HXr16oaqqCikpKQgKCjJCdY3L1dUV5ubmdf7vNvX30dCcnJzQtm1bJCcni11Ko7n9Hufk5MDLy0s3PScnB127dhWpKnEEBgbC1dUVycnJ6N+/v9jlPJTZs2dj//79OH78OHx8fHTTPT09UVFRgYKCAr3emYb+vze5MOPm5gY3N7d6tc3MzER4eDhCQkKwefNmmJnpdzSFhobizTffRGVlJSwtLQEAhw8fRlBQUJPbxdSQ9f474uLi0KJFiyYVZADDrndoaCiWL1+O3NxcuLu7A6h+vx0dHdG+fXuDLMNYHub3EBcXBzMzM906S52VlRVCQkJw5MgR3RF4Wq0WR44cwezZs8UtrpEVFxfjypUrmDBhgtilNJqAgAB4enriyJEjuvCiUqlw+vTpBx7BaWoyMjKQl5enF+qkRhAEzJkzB99//z2ioqJqDf0ICQmBpaUljhw5gtGjRwMAkpKSkJaWhtDQ0AYtSJIyMjKE1q1bC/379xcyMjKErKws3e22goICwcPDQ5gwYYKQkJAg7Ny5U7C1tRU2bNggYuUPLzU1VTh79qywbNkywd7eXjh79qxw9uxZoaioSBAEQYiMjBS+/PJL4fz588Lly5eFL774QrC1tRWWLFkicuUP50HrXVVVJXTs2FEYOHCgEBcXJxw8eFBwc3MTFi9eLHLlhnPy5Elh9erVQlxcnHDlyhVh27Ztgpubm/DSSy+JXZpB7dy5U5DL5cKWLVuEP//8U5g+fbrg5OSkd6SaKVq4cKEQFRUlXLt2Tfj111+FAQMGCK6urkJubq7YpRlUUVGR7v8XgPDJJ58IZ8+eFVJTUwVBEIT3339fcHJyEvbu3SvEx8cLI0aMEAICAoSysjKRK38491vvoqIi4bXXXhNiYmKEa9euCT///LPQvXt3oU2bNkJ5ebnYpf9tM2bMEBQKhRAVFaW3nS4tLdW1eeWVVwRfX1/h6NGjwu+//y6EhoYKoaGhDVqOZMPM5s2bBQB13mo6d+6c8NhjjwlyuVxo2bKl8P7774tUseFMnDixzvU+duyYIAiC8OOPPwpdu3YV7O3tBTs7O6FLly7C+vXrBY1GI27hD+lB6y0IgpCSkiIMGTJEsLGxEVxdXYWFCxcKlZWV4hVtYLGxsUKvXr0EhUIhWFtbC+3atRNWrFgh6Q+7e/n8888FX19fwcrKSujZs6dw6tQpsUsyurFjxwpeXl6ClZWV0LJlS2Hs2LFCcnKy2GUZ3LFjx+r8X544caIgCNWHZ7/11luCh4eHIJfLhf79+wtJSUniFm0A91vv0tJSYeDAgYKbm5tgaWkp+Pn5CdOmTZN8gL/Xdnrz5s26NmVlZcLMmTOFFi1aCLa2tsIzzzyj1zFRH7K/FkZEREQkSU3uaCYiIiKihmCYISIiIkljmCEiIiJJY5ghIiIiSWOYISIiIkljmCEiIiJJY5ghIiIiSWOYISIiIkljmCEiIiJJY5ghIiIiSWOYISIiIkn7f3Kktm4A/0TGAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Center to zero\n", "angles = linspace(0, 2*pi, 9, endpoint=False)\n", "pty = sin(angles+0) * 10 + 0\n", "ptx = cos(angles+0) * 20 + 0\n", "ellipse = fit_ellipse(pty, ptx)\n", "print(ellipse)\n", "display(ptx, pty, ellipse)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Ellipse(center_1=50.00000000000121, center_2=100.00000000000088, angle=0.5535743588955828, half_long_axis=18.09016994372895, half_short_axis=6.909830056258535)\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/tmp/ipykernel_148937/1481167801.py:31: UserWarning: color is redundantly defined by the 'color' keyword argument and the fmt string \"ro\" (-> color='r'). The keyword argument will take precedence.\n", " ax.plot(ptx, pty, \"ro\", color=\"blue\")\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAGdCAYAAADAAnMpAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAABQ8ElEQVR4nO3dd1QU198G8GdBQDqCSG+CiAXsIraAJfYGmqhoYgnGEmNJojHNlsSS/KImxhKT2FsUNLGiohgLIFasCFjooCgsdYHdef/glYSIwlJ2KM/nnDmyM7Oz351s2Ic7996RCIIggIiIiEgkamIXQERERPUbwwgRERGJimGEiIiIRMUwQkRERKJiGCEiIiJRMYwQERGRqBhGiIiISFQMI0RERCSqBmIX8F8KhQKJiYnQ19eHRCIRuxwiIiIqB0EQkJmZCUtLS6ipKdfWUePCSGJiImxsbMQug4iIiCogLi4O1tbWSj2nxoURfX19AEVvxsDAQORqiIiIqDykUilsbGyKv8eVUePCyItLMwYGBgwjREREtUxFuliwAysRERGJimGEiIiIRMUwQkRERKJiGCEiIiJRMYwQERGRqBhGiIiISFQMI0RERCQqhhEiIiISFcMIERERiYphhIiIiETFMEJERESiYhghIiIiUTGMEBERkagYRoiIiEhUDCNEREQkKoYRIiIiEhXDCBEREYmKYYSIiIhExTBCREREomIYISIiIlExjBAREZGoGEaIiIhIVAwjREREJCqGESIiIhKV0mEkISEB48aNg4mJCbS1teHq6orLly8Xb58wYQIkEkmJpX///lVaNBEREdUdDZTZ+fnz5+jWrRu8vLxw7NgxmJqaIioqCo0aNSqxX//+/bF58+bix1paWlVTLREREdU5SoWRFStWwMbGpkTQcHBweGk/LS0tmJubV746IiIiqvOUukzz119/oWPHjhg1ahSaNGmCdu3aYdOmTS/tFxwcjCZNmqB58+aYNm0a0tLSXnlMmUwGqVRaYiEiIqL6Q6kw8uDBA6xfvx7NmjVDYGAgpk2bhg8//BBbt24t3qd///7Ytm0bgoKCsGLFCpw9exYDBgyAXC4v9ZjLli2DoaFh8WJjY1O5d0RERES1ikQQBKG8O2tqaqJjx464ePFi8boPP/wQ4eHhCAkJKfU5Dx48gKOjI06dOoXevXu/tF0mk0EmkxU/lkqlsLGxQUZGBgwMDJR5L0RERCQSqVQKQ0PDCn1/K9UyYmFhgZYtW5ZY16JFC8TGxr7yOU2bNkXjxo0RHR1d6nYtLS0YGBiUWIiIiKj+UCqMdOvWDZGRkSXW3b9/H3Z2dq98Tnx8PNLS0mBhYVGxComIiKhOUyqMzJkzB6Ghofj2228RHR2NXbt24ZdffsGMGTMAAFlZWfjkk08QGhqKR48eISgoCMOGDYOTkxP69etXLW+AiIiIajelwkinTp1w4MAB7N69G61bt8bSpUuxevVq+Pr6AgDU1dURERGBoUOHwtnZGZMnT0aHDh1w7tw5zjVCREREpVKqA6sqVKYDDBEREYlDZR1YiYiIiKoawwgRERGJimGEiIiIRMUwQkRERKJiGCEiIiJRMYwQERGRqBhGiIiISFQMI0RERCQqhhEiIiISFcMIERERiYphhIiIiETFMEJERESiYhghIiIiUTGMEBERkagYRoiIiEhUDCNEREQkKoYRIiIiEhXDCBEREYmKYYSIiIhExTBCREREomIYISIiIlExjBAREZGoGEaIiIhIVAwjREREJCqGESIiIhIVwwgRERGJimGEiIiIRMUwQkRERKJiGCEiIiJRMYwQERGRqBqIXQARERFVjlwOnDsHJCUBFhZAjx6AurrYVZUfwwgREREAuUKODFkGZIUy5MvzX7nI5K/friZRg56mHvQ09aCroVv8838XTXVNSCSSStcdEADMmgXEx/+zztoaWLMG8Pau9OFVgmGEiIjqpAJ5AZ7mPMWTnCd4kv2k9H//9XNaThoECBV6LXWJOjTVNaGprgm5IEd2fnaZx2qg1uClwGKsbQxbQ9vixc7QDraGtrA2sIZWA62XjhEQAIwcCQj/eamEhKL1+/fXjkAiEYT/vgVxSaVSGBoaIiMjAwYGBmKXQ0RENYxcIUdCZgIepT8qXuKl8SWCRWp2KtLz0l96rpa6Fkx1TWGqY/rPv//62VjbGA0bNCwOFi8WrQZaL617sWioaUBdreQ1EUEQkFuYi6z8rBJLdn72S+v+vTzNfYrYjFjEZsQiNTu1xDGtDazR3KR50dK4OZyMmmNyr95ITlQH8HILi0RS1ELy8KFqLtlU5vubYYSIiGoUQRCQmp2KmOcxiH4WXSJ0PEp/hDhpHAoVhcX7m+mawdrAGk10m5QIGCUe//+/epp6VXJpRBVyC3IRJ41DbEYsHqc/RszzGESmReJ+2n1EpUVBFt0F2Bpc5nHOnAE8Pau93Ep9f/MyDRERqZxCUCApMwnRz6L/WZ7/83NWflbxvuZ65rAztIO9kT06W3WGvZF98WJraAsdDR0R30n10dbQhrOJM5xNnF/aJlfIsfb3NMzeWvZx7j/KhCf0q6HCqsMwQkRE1SotJw03U28iIiUCN1NuIiI1ArdTbyO7IBsAIIEEtoa2cDJ2gruVO3xdfeFk7AQnYyc0bdS0zoaNylBXU0cbpybl2vf94CH4Oe85RriMgE8LH7Ru0rrGtQ7xMg0REVUJWaEMd5/eLQ4dLwJIUlYSAEBTXROtTFvB1cwVrk1c4dLYBU7GTnAwcii1cya9nlwO2NsXdVYt7ZtcIgHMLQux/NBenHx0HIciDyFDloFmxs3g08IHI1uORHuL9lUWTNhnhIiIVEYQBDzOeFzUypESgZupRcEj8mkk5IIcAGBvZA83Mze4NikKHm5mbmhm0gwN1NggX5VejKYBSgaSF/ni36Np8uX5CHoQhP139uPPyD+RlpuGdubtML3TdIxpPQa6mrqVqoVhhIiISqiqSbDy5fm4nnwdlxMvFwePW6m3IJVJAQBGDY2Kw8aLf1s1aQUDLf7+VpXS5hmxsQFWr371sN5CRSFOxJzAhssbcPj+YRhoGeDdNu9iRucZpfZRKQ+VhpGEhATMnz8fx44dQ05ODpycnLB582Z07NgRQFFiXrhwITZt2oT09HR069YN69evR7Nmzar9zRARUcUnwXrR4hEWH4bQ+FCEJoTiWtI1yOQyaKhpwKWxC1zNXOHWxK34Uou1gXWN639QH1UmfD5Kf4RfrvyCX6/+irTcNIx3G49Fnotgb2SvVA0qCyPPnz9Hu3bt4OXlhWnTpsHU1BRRUVFwdHSEo6MjAGDFihVYtmwZtm7dCgcHB3z55Ze4efMm7ty5g4YNG1brmyEiqu9eNQlWac32WflZuJx4uSh4/P+Skp0CAGjaqCncrdzRxboLulh3QRuzNuzXUcfJCmX49eqvWPr3UjzLfYYpHabg8x6fw0LfolzPV1kY+fTTT3HhwgWcO3eu1O2CIMDS0hIfffQRPv74YwBARkYGzMzMsGXLFowePbrM12AYISKqmBcdGv/dIvJvEomARk2y4b3hY1xKDsGt1FtQCAroa+qjs1Xn4vDhbu2OJrrlG6lBdU92fjbWXlqLFRdWQCaXYXnv5ZjReQbUJK+/t67KwkjLli3Rr18/xMfH4+zZs7CyssL06dPh5+cHAHjw4AEcHR1x7do1tG3btvh5b7zxBtq2bYs1a9a8dEyZTAaZTFbizdjY2DCMEBEpKTgY8PIqez/72RPRx6sB3K2LwkeLxi1emkGUKD0vHV+c/gI/h/+MnnY98fvQ3+Fo7PjK/SsTRl4fc/7jwYMHxf0/AgMDMW3aNHz44YfYurVo1pXk5GQAgJmZWYnnmZmZFW/7r2XLlsHQ0LB4sbGxUeoNEBER8Dj9MfaEnC3Xvt923oxNQzfhvfbvoXWT1gwiVCqjhkZYO3AtTr9zGnEZcXDb4IYNlzegOsa9KDXGSqFQoGPHjvj2228BAO3atcOtW7ewYcMGvPvuuxUqYMGCBZg7d27x4xctI0RE9GpJmUk48+gMTj88jTOPzuDB8wfAQ08AZ8p8rkX5ugAQAQC8HLwQMS0C807Ow7Qj03A79TZW9V9VpcO0lTqShYUFWrZsWWJdixYt4O/vDwAwNzcHAKSkpMDiX5/2lJSUEpdt/k1LSwtaWuwURUT0Ok+ynyD4UXBx+IhMiwQAtDJthUHNBsHL3gvdbd5A+6DXT4JlbV000oJIGXqaelg3aB3amrfF9CPT8SD9Afb47IG+VtVMM69UGOnWrRsiIyNLrLt//z7s7OwAAA4ODjA3N0dQUFBx+JBKpQgLC8O0adOqpGAiovrgee5znH18FmcensHpR6dxK/UWAMDZxBle9l5Y4rUEnvaeL3U0XbOmaDSNRFL6JFirV6vmDq5UN03pMAX2RvYYtW8Uem7piaB3gmCsbVzp4yrVgTU8PBxdu3bF4sWL8dZbb+HSpUvw8/PDL7/8Al9fXwBFQ3uXL19eYmhvREQEh/YSEb2GVCbFucfncObRGZx5dAbXkq5BgAAHIwd42XvBy8ELXvZesDKwKvNYFZkEi0gZN1NuwmurF5yMnXD63dPQ0dBR7aRnhw8fxoIFCxAVFQUHBwfMnTu3eDQN8M+kZ7/88gvS09PRvXt3rFu3Ds7O5ZvRjWGEiOqDnIIcXIi9UHzZ5XLiZcgFOaz0rdDLoVdxAFF24qkXqmoGVqJXuZx4GV5bvdDLoRcC3gpAdlY2p4MnIqrJBEFAZFokjkUdw7HoY/j78d+QyWVootsEXvZexQHEydiJM5pSrXEs6hgG7x6MBd0XYF7HeRX+/uYdi4iIqkl2fjZOPzyNY9FFAeRR+iNoqWvhDfs3sLzPcvRt2hctTVsyfFCtNaDZACzxXIKFwQvR16pvhY/DlhEioioiCALuPb1XHD7+fvw38uX5aNqoKQY4DcAApwHwtPes9N1RiWqSAnkBOv/aGQU5Bbg99zZbRoiIVC2vMA/Bj4Jx+P5hHIk6Utz64WnviZV9VmJAswFoZtyMrR9UZ2moa+D3ob+j408dK3wMhhEiIiUlZibiaNRRHL5/GCcfnEROQQ7sDO0wqNkgDGw2EF4OXtDR0BG7TCKVaWfRDn4d/LARGyv0fF6mISIqg0JQ4GrSVRy+fxiH7x/GlaQrUJOowcPaA4OdB2Ow82C0Mm3F1g+q127G3oSbnRsv0xARVRVZoQwnH5zEwXsHcSTqCJKzkmGoZYgBzQZgTpc56O/UHyY6JmKXSVRj2BnZVfi5DCNERP8vpyAHx6OPw/+uPw5FHkJmfiacTZwxznUcBjsPRlebrtBQ1xC7TKI6h2GEiOq1TFkmjkQdgf9dfxyNOoqcghy4mbnh464fw6eFD4feEqkAwwgR1TvPc5/j0P1D8L/rj8DoQMjkMnS07Igve34JnxY+aGbSTOwSieoVhhEiqhee5jzFwXsH4X/XH6cenEKhohAe1h74tve38G7hXeFp14mo8hhGiKjOSspMwoF7B+B/1x9nH52FAAE97XpiVb9VGOEyolw3nSOi6scwQkR1SlxGHPzv+sP/rj8uxF6AmkQNvZv2xrpB6zDcZTia6DYRu0Qi+g+GESKq9R48fwD/O/7Yf3c/LiVcgqa6Jvo27Yvfh/2Ooc2HwljbWOwSieg1GEaIqFZ6kv0Ee2/vxY6IHQhLCIN2A230d+qPnd47MajZIBg2NBS7RCIqJ4YRIqo1cgpy8FfkX9gRsQOBMYEAgAFOA7DHZw8GOw/mDeiIaimGESKq0eQKOYIfBWPHzR3wv+OPzPxMeFh7YE3/NXir1VtorNNY7BKJqJIYRoioxhEEAREpEdgRsQO7bu1CYmYinIyd8HHXjzHWdSycjJ3ELpGIqhDDCBHVGHEZcdh1cxd23NyBW6m30FinMUa3Go1xbuPQ2aozZ0IlqqMYRohIVBl5GfC/648dETsQ/CgYWg20MNxlOJb3Xo43Hd/kvWCI6gGGESJSuXx5Po5HH8eOiB34K/Iv5Mvz0cuhFzYP24wRLUbAQEu5248TUe3GMEJEKiEIAkLiQ7AjYgf23t6LZ7nP0MasDb7u9TXGtB7D2VCJ6jGGESKqVkmZSdhyfQt+u/YbYp7HwNrAGn7t/eDr6gtXM1exyyOiGoBhhIiqnFwhx/Ho49h0dRMO3z8MDXUNvNXqLfw69Ff0tOsJNYma2CUSURWSy4Fz5yr+fIYRIqoyj9Mf4/drv+P3678jXhqPNmZtsKb/Gvi6+cKooZHY5RFRNQgIAGbNAuLjK34MhhEiqpQCeQEO3T+ETVc3ITA6ELqauhjbeiz8Ovihg0UHDsclqsMCAoCRIwFBqNxxGEaIqEKi0qLw69VfseXGFqRmp8Ldyh2bhmzC263fhp6mntjlEVE1k8uLWkQqG0QAhhEiUkJeYR4C7gZg09VNCH4UDKOGRhjvNh5+7f3YGZWonjl3rnKXZv6NYYSIynQ79TY2Xd2E7RHb8Sz3Gd6wewM7RuyAdwtvaGtoi10eEYkgKanqjsUwQkSlys7Pxt7be7Hp6iaExofCVMcUk9tNxnvt34OzibPY5RGRyCwsqu5YDCNEVMKVxCvYdHUTdt3chaz8LPR17It9o/ZhaPOh0FTXFLs8IqohevQArK2BhAR2YCWiKpBXmIe9t/ZibfhaXE68DCt9K8zuMhuT2k2CvZG92OURUQ2krg6sWVM0mgZQVOpYDCNE9VhsRiw2XN6ATVc34WnOU/R36o+/Rv+FAc0GoIEafz0Q0et5ewOrf4/HrFkCIDWs8HH424aonhEEAcGPgvHTpZ/wZ+Sf0NPUw8S2EzG903T2BSEipYXqz4P1VxfxY7PL8B5WsWMwjBDVE1n5Wdh+YzvWhq/FnSd30NK0JdYOWIvxbcZzXhAiqpA7T+5gz609WDdoHXo7V7xPGcMIUR0XlRaFn8N/xubrm5GVn4VhzYdh7YC18LT35OyoRFQpi88uho2hDSa1m4S87LwKH4dhhKgOEgQBQQ+DsDp0NY5GHYWJjglmdJqBqR2nwtbQVuzyiKgOuJp0Fftu78PGwRuhqa6JPDCMEBGAnIIc7IzYiTVha3D7yW24mbnht6G/YYzrGDRs0FDs8oiojpAr5Hj/8Pto3aQ1JrSdUOnjMYwQ1QHx0nisC1+HjVc24nnucwxtPhRrB67FG3Zv8FIMEVW5DZc34HLiZVycdBEa6hqVPh7DCFEtFhofijVha7D/zn5oN9DG5HaTMdN9Jpo2aip2aURURyVmJuKz059hSvsp8LDxqJJjMowQ1TKFikL43/HHqtBVCEsIg2MjR/zw5g+Y0HYC9LX0xS6PiOq4uYFzoaWuheV9llfZMdWU2XnRokWQSCQlFhcXl+Ltnp6eL22fOnVqlRVLVJ/lFuRiffh6NF/bHKP9R0NXUxeHxhzC/Zn3MdN9JoMIEVW7wOhA7L29Fz/0+wGNtBtV2XGVbhlp1aoVTp069c8BGpQ8hJ+fH5YsWVL8WEdHpxLlEdHz3OdYF74OP176EU9znmJUy1HYN2of2lu0F7s0IqpHcgtyMf3odPRy6AVfV98qPbbSYaRBgwYwNzd/5XYdHZ3Xbiei8kmQJmBV6CpsvLIRBfICTGw7ER93/RiOxo5il0ZE9dCSs0sQL43H0bFHq7xjvFKXaQAgKioKlpaWaNq0KXx9fREbG1ti+86dO9G4cWO0bt0aCxYsQE5OzmuPJ5PJIJVKSyxE9dm9p/cw+c/JcFjjgF+v/oqZnWfi8ezHWD94PYMIEYniaNRRrLiwAgvfWIjmjZtX+fElglD+G/8eO3YMWVlZaN68OZKSkrB48WIkJCTg1q1b0NfXxy+//AI7OztYWloiIiIC8+fPR+fOnREQEPDKYy5atAiLFy9+aX1GRgYMDAwq9q6IaqGw+DCsuLACB+8dhLmeOeZ6zMWUDlNgoMX/D4hIPA+eP0CHXzqgu213/Dn6T6hJSm/HkEqlMDQ0rND3t1Jh5L/S09NhZ2eHH374AZMnT35p++nTp9G7d29ER0fD0bH0v+hkMhlkMlnxY6lUChsbG4YRqhPkcuDcOSApCbCwAHr0KLrt9guCICAwJhDLzy/H2cdn4WzijHld52Gc2zhoNdASr3AiIhRNpNj1t67Iys/C5SmXYdTQ6JX7ViaMVGpor5GREZydnREdHV3qdnd3dwB4bRjR0tKClhZ/6VLdExAAzJoFxMf/s87aGlizBhg6vBD7bu/DigsrcCPlBjpbdYb/W/4Y1nwY1NXUX31QIiIVEQQB045Mw/20+wh9L/S1QaSyKhVGsrKyEBMTg/Hjx5e6/fr16wAACwuLyrwMUa0TEACMHAn8t90xIUGAjw/QZOJMpNptQD/HfljVbxVvWkdENc6Gyxuw7cY2bB+xHW5mbtX6Wkpdpvn4448xZMgQ2NnZITExEQsXLsT169dx584dSKVS7Nq1CwMHDoSJiQkiIiIwZ84cWFtb4+zZs+UuqDLNPEQ1gVwO2NuXbBEpSQEdk2c4ez0OHa3bqbAyIqLyCY0PRc/NPfF+h/fx08CfyvUclV2miY+Px5gxY5CWlgZTU1N0794doaGhMDU1RV5eHk6dOoXVq1cjOzsbNjY28PHxwRdffKFUQUS13blzrwsiAKCGnLTGyIpuDFirqioiovJJyUrByD9GopNVJ/yv3/9U8ppKhZE9e/a8cpuNjY1SLSBEdVVSUtXuR0SkKoWKQoz2H41CRSH2jdoHTXVNlbyu0vOMENGrpWSl4EDcunLty65URFTTfBb0Gc49Poe9I/fCUt9SZa/LMEJUBZ5kP8G8k/PQ9MemOF74OQxMMyCRlN4dSyIBbGyKhvkSEdUU+27vw3cXv8N3fb/DG/ZvqPS1eddeokpIy0nD9xe/x0+XfoJEIsGcLnMw12Mugl0MMXJkUfD4dxfxFwNmVq8uOd8IEZGYTj04hXEHxmFM6zGY3WW2yl+fYYSoAp7lPsMPIT9gTdgaCIKAmZ1n4qOuH6GxTmMAgLc3sH9/6fOMrF5dtJ2IqCa4GHcRw/YMQy+HXtgyfIso0wwwjBApIT0vHatCVmF12GoUKgoxo9MMfNL1E5jqmr60r7c3MGzY62dgJSIS0/Xk6xi4cyA6WnaE/1v+Kuuw+l8MI0TlkJGXgTVha/BDyA+QyWWY3nE65nWbBzM9s9c+T10d8PRUTY1ERMq49/Qe3tz+JpqZNMOhMYego6EjWi0MI0SvkSnLxI9hP+J/If9DTkEOpnacivnd5sNCn0NhiKj2evj8Ifps6wMzPTMc9z0u+g05GUaISpGVn4W1l9bi+4vfIzM/E1PaT8Gn3T+FlYGV2KUREVVKYmYi+mzvA20NbZwYdwImOiZil8QwQvRv2fnZWBe+DisvrkRGXgb82vthQY8FsDbgVKlEVPs9zXmKvtv7Il+ej/MTz9eYVl6GESIABfIC/Hr1Vyw+uxhpuWmY1HYSPu/5OWwNbcUujYioSmTkZaD/jv54mvMU5yaeg52RndglFWMYoXpNEAT8Gfkn5p+aj6i0KLzT5h0s8lwEeyN7sUsjIqoyOQU5GLx7MGKex+DshLNwNnEWu6QSGEao3gqND8UnJz/B+djz6OfYD3+M/ANtzNuIXRYRUZWSFcowYu8IXEu6hqB3guBm5iZ2SS9hGKF6J/pZNBYELcD+O/vRxqwNTow7gb6OfcUui4ioyuUV5uGtfW/h7KOzOOZ7DO7W7mKXVCqGEao3nuY8xdKzS7H+8nqY6Zlh6/Ct8HX1hboaZyEjoronU5aJYXuGITQ+FAdHH4SXg5fYJb0SwwjVebkFuVgduhrLLywHACzxWoJZ7rOgraEtcmVERNXjac5TDNg5AFFpUTgx/gS623YXu6TXYhihOkuukGNHxA58ceYLJGclY3rH6fjyjS+L7x9DRFQXxUvj8eb2N5GWm4bgCcFoa95W7JLKxDBCddKJmBOYd3IebqTcwKiWo/Bt72/hZOwkdllERNUqKi0Kfbf3hQAB5yaeq3GjZl6FYYTqlBvJNzDv1DyciClqlgyZHIIu1l3ELouIqNpdT76Ofjv6wVjbGCfHn6xVkzUyjFCdEJcRhy/PfIltN7bB2cQZB98+iKHNh4pyK2wiIlULehCEEXtHwNnEGcfHHa91l6MZRqhWy8jLwPLzy7E6bDUMtAzw88Cf8V7796ChriF2aUREKrEzYicm/jkRvZv2xr5R+6CnqSd2SUpjGKFaSa6QY/P1zVgQtAA5BTn4pOsn+KTrJ9DX0he7NCIilRAEAd9d/A7zT83HhLYT8MvgX2rtH2IMI1TrhMaH4oOjH+BK0hWMdxuP5X2Ww1LfUuyyiIhURq6QY07gHPx06Sd82fNLLPZcXKsvSzOMUK2RnJWMT099iq03tqKdeTtcmHQBXW26il0WEZFK5RbkYtyBcTh47yA2DNqA9zu+L3ZJlcYwQjVegbwAP136CYuCF0FTXRMbB2/E5HaTOXMqEdU7SZlJ8PnDB9eTr+PA2wcwtPlQsUuqEgwjVKOdjDmJD49/iPtp9zGt4zQs8VoCY21jscsiIlK50PhQeO/1hkQiQfCEYHS26ix2SVVGTewCiErzOP0xvPd6480db6KJbhNcnXIVaweuZRAhonrp16u/4o0tb8ChkQOuTLlSp4IIwJYRqmFkhTL8L+R/+Prvr9FIuxF2++zG263ertUds4iIKipfno/Zx2dj/eX1mNphKtYMWANNdU2xy6pyDCNUYwQ9CMKMozMQ/Swas7vMxsI3FnKoLhHVW8lZyRi1bxTC4sPwy+Bf4NfBT+ySqg3DCIkuMTMRcwPnYu/tvehh2wP7Ru2Dq5mr2GUREYnmUsIleO/1hlyQI3hCcJ0fOcgwQqIpVBTip7CfsDB4IbQ1tLF1+FaMdxvPSzJEVK9tvrYZ045MQzuLdvB/y79ezKPEMEKiOB97HtOPTMet1FuY3mk6vu71NYwaGoldFhGRaArkBZgbOBdrw9dicrvJ+Hngz9BqoCV2WSrBMEIqlZGXgY9PfIxfr/2KzladEe4Xjg6WHcQui4hIVKnZqRi1bxQuxl3EuoHrMLXj1HrVSswwQipz+P5hvH/4fWTKMrFu4Dq83/F9qEk4upyI6rcriVcwYu8IyOQynH7nNHrY9RC7JJXjNwFVu6c5T+Eb4Ishu4egjVkb3J5+G9M6TWMQIaJ6b9uNbej2ezeY65njypQr9TKIAGwZoWokCAL23dmHD45+gEJFIbYN34ZxbuPqVdMjEVFpcgty8cnJT/Bz+M+Y0HYC1g9aj4YNGopdlmgYRqhaJGUmYfrR6Th47yB8Wvhg7cC1MNczF7ssIiLR3Uq9hTH+YxCVFoWfB/6MaR2n1fs/0hhGqEoJgoCtN7ZiTuAcaKprYt+ofRjZcqTYZRERiU4QBKy/vB4fnfgIjo0cEe4XzjmV/h/DCFWZ2IxYTDk0BYExgRjvNh6r+q2CiY6J2GUREYnuac5TTP5rMv6K/AszOs3Ad32/g7aGtthl1RgMI1RpCkGBjZc3Yt6peTBqaIQjY49gYLOBYpdFRFQjBD0IwvgD45Evz8efo//E0OZDxS6pxmEYoUqJSovCe4few9+P/8b7Hd7Hyr4rYaBlIHZZRESiy5fn46szX2HlhZXo5dAL20ZsqxezqVaEUmMrFy1aBIlEUmJxcXEp3p6Xl4cZM2bAxMQEenp68PHxQUpKSpUXTeKTK+T438X/wW2DG+Kl8Tj9zmlsGLyBQYSICEV/qHX7vRv+F/I/rOizAifGn2AQeQ2lW0ZatWqFU6dO/XOABv8cYs6cOThy5Aj27dsHQ0NDfPDBB/D29saFCxeqplqqEW6n3sakvyYhPCEcs7vMxlKvpdDV1BW7LCIi0QmCgG03tmHG0Rmw0LdAyOQQdLTsKHZZNZ7SYaRBgwYwN395iGZGRgZ+++037Nq1C7169QIAbN68GS1atEBoaCi6dOlS+WpJVHKFHCsvrMTC4IVwMnbChUkX4GHjIXZZREQ1QnpeOqYdmYY9t/ZgYtuJ+HHAj9DT1BO7rFpB6TASFRUFS0tLNGzYEB4eHli2bBlsbW1x5coVFBQUoE+fPsX7uri4wNbWFiEhIa8MIzKZDDKZrPixVCqtwNug6hYvjcc7B95B8KNgzOs2D4s8F9XrCXqIiP7tYtxFjPUfi+d5z7HbZzdGtx4tdkm1ilJ9Rtzd3bFlyxYcP34c69evx8OHD9GjRw9kZmYiOTkZmpqaMDIyKvEcMzMzJCcnv/KYy5Ytg6GhYfFiY2NToTdC1efgvYNos6EN7qfdx+l3T2N5n+UMIkREKGoxXnJ2CXpu7gkrAyvcmHqDQaQClGoZGTBgQPHPbm5ucHd3h52dHf744w9oa1dsvPSCBQswd+7c4sdSqZSBpIbIKcjB3MC52HhlI0a4jMCmIZs4bwgR0f+LeRaDiX9OxIW4C/iy55f4oucXaKDGQaoVUamzZmRkBGdnZ0RHR6Nv377Iz89Henp6idaRlJSUUvuYvKClpQUtLa3KlEHV4EbyDYzxH4NH6Y+wcfBG+LX3q/fTFRNR/SKXA+fOAUlJgIUF0KMHoK5e1BryY9iP+Pz05zDTM0Pwu8H19gZ3VaVSt03NyspCTEwMLCws0KFDB2hoaCAoKKh4e2RkJGJjY+HhwU6OtYUgCFgTugadf+0MTXVNXJlyBVM6TGEQIaJ6JSAAsLcHvLyAsWOL/rW3B9ZsjkP3zd3x0YmPMKXDFNyadotBpAoo1TLy8ccfY8iQIbCzs0NiYiIWLlwIdXV1jBkzBoaGhpg8eTLmzp0LY2NjGBgYYObMmfDw8OBImloiNTsVEw5OwLHoY5jtPhvL+ixj3xAiqncCAoCRIwFBKLk+Pl7A7ElWsJzcEecX/g9dbbqKU2AdpFQYiY+Px5gxY5CWlgZTU1N0794doaGhMDU1BQCsWrUKampq8PHxgUwmQ79+/bBu3bpqKZyqVmB0IN49+C4ECDg69igGNBtQ9pOIiOoYuRyYNevlIFKkqIVYLfBHuG9ka3FVkghC6adcLFKpFIaGhsjIyICBAWfzrG6yQhk+C/oMP4T+gH6O/bB1+FaY6ZmJXRYRkSiCg4suyZTlzBnA07O6q6ldKvP9zW6/9di9p/cwxn8M7jy5g1X9VuFD9w+hJqlUNyIiolotKalq96PyYRiphwRBwG/XfsOs47NgY2CD0MmhaGfRTuyyiIhEZ9Q4F0DZU1VYWFR/LfUJ/wyuZ6QyKd7a/xb8DvlhnOs4XJlyhUGEiAhA0IMgTL/lChjEAyi9B4NEAtjYFA3zparDMFKPRD6NhPuv7jgRcwL7R+3HxiEbeYM7Iqr3MvIyMOXQFPTZ3gd2jayx9kf1/78zfcn9XjxevbpovhGqOrxMU08cijyEcQfGwUrfCuF+4XA2cRa7JCIi0R2+fxhTD09FhiwD6wetx5QOU6AmUYOFftGomvj4f/a1ti4KIt7eopVbZzGM1HEKQYFv/v4GXwV/heEuw7F1+FYYaHGUEhHVb6nZqZgbOBc7b+5Ef6f+2Dh4I2wNbYu3e3sDw4aVPgMrVT2GkTosU5aJdw6+g4P3DmKx52J80fMLjpYhonpNrpDjlyu/4LPTn0ECCbYM24J32rxT6izT6uocvqsqDCN1VFRaFIbvHY64jDj8OfpPDG0+VOySiIhEdTnxMqYdmYbLiZcxqe0kLO+zHKa6pmKXRWAYqZOORh3FWP+xMNczxyW/S3Bp7CJ2SUREonme+xyfBX2GjVc2wtXMFRcmXeBU7jUMw0gdIggClp1fhi9Of4FBzoOwY8QOGDY0FLssIiJRKAQFtt3Yhnkn5yGvMA+r+q3CjM4z0ECNX301Df+L1BFZ+VmYcHAC/O/646ueX2Gh50L2DyGieisiJQLTj0zHhbgLGOs6Ft/3/R4W+pyprKZiGKkDop9FY8TeEXiU/ggH3j6A4S7DxS6JiEgU6XnpWBS8CGsvrUUzk2YIeicIvRx6iV0WlYFhpJY7Hn0cY/zHwFTHFGHvhaGlaUuxSyIiUjmFoMDma5uxIGgBcgpy8E2vbzDHYw401TXFLo3KgWGklhIEAd9d/A6fnvoUA5oNwE7vnTBqaCR2WUREKncp4RI+OPoBwhPD4evqi5V9V8JS31LsskgJDCO1UKGiEB8c/QAbr2zEZ90/wxKvJVBX40w8RFS/pGSlYEHQAmy+vhltzdvi3MRz6G7bXeyyqAIYRmqZnIIcjPEfgyP3j+DXIb9icvvJYpdERKRSBfIC/Bz+MxYGL0QDtQZYN3AdpnSYwj/KajGGkVrkac5TDNk9BBEpEfhrzF8Y2Gyg2CUREanUqQenMOv4LNx7eg/vd3gfS72WwkTHROyyqJIYRmqJh88fov/O/nie+xzB7wajk1UnsUsiIlKZmyk3Me/UPByPPo5uNt1w2e8y2lm0E7ssqiIMI7XA1aSrGLhzIPS19BEyOQSOxo5il0REpBIJ0gR8deYrbLmxBU0bNcX+Ufvh3cK71HvJUO3FMFLDBT0IwvC9w9HStCUOjznM+ygQUb0glUmx8sJK/BDyA3Q1dbGm/xq83+F9aKhriF0aVQOGkRrswN0DGO0/Gl72XvB/yx+6mrpil0REVK0K5AX45covWHx2MTLzMzG3y1zM6zaPt7ao4xhGagC5HDh3DkhKAiwsgB49gO03t2DyX5MxsuVIbB+xnRP3EFGdJggCDtw7gE9PfYroZ9F4t+27WOq1FNYG1mKXRirAMCKygABg1iwgPv6fdYZNMpHh+RemjHsP6wat43A1IqrTLsZdxCcnP8HFuIvo79Qf+9/aDzczN7HLIhViGBFRQAAwciQgCCXXZ6TqAn/44823AHU1dtIioropKi0KC4IWwP+uP9qat8XJ8SfRp2kfscsiEfC2riKRy4taRP4bRIqoQSKRYM4cCeRyVVdGRFS9nmQ/wcyjM9FyXUtcSriEbcO34cqUKwwi9RhbRkRy7lzJSzP/JQhAXFzRfp6eKiuLiKja5BTkYHXoaiw/vxxqEjV80+sbzOw8E9oa2mKXRiJjGBFJUlLV7kdEVFPJFXJsu7ENX575EqnZqZjRaQY+7/k5Gus0Frs0qiEYRkRiYVG1+xER1TSCIOBI1BF8FvQZbqbexNut3sY3vb7hxI30EoYRkfToATRqkoXnqTooreuORAJYWxftR0RUmwiCgOPRx7EweCHCE8PR064nQieHwt3aXezSqIZiB1aR7Lu7B8893wUggURSshfri1mOV68G1Dmql4hqCUEQcCLmBDx+88DAXQOhoa6BU+NPIfjdYAYRei2GEREcijyE8QfG450xeti3X4CVVcnhu9bWwP79gLe3SAUSESlBEAQEPQhC983d0W9HPwBA4LhAnJ94Hr2b9uZ9ZKhMvEyjYqcfnsaofaMwtPlQ/Db0NzRQU8OI4S/PwMoWESKqDYIfBWNh8EL8/fhvdLTsiKNjj6K/U38GEFIKw4gKhcaHYujuofBy8MIu711ooFZ0+tXVOXyXiGqXc4/PYWHwQpx5dAbtzNvh0JhDGNRsEEMIVQjDiIpcT76OATsHoL1Fe/i/5Q+tBlpil0REpLSLcRexMHghTj04hTZmbXDw7YMY2nwoQwhVCsOICkQ+jcSb29+Ek7ETDo89DB0NHbFLIiJSSlh8GBYGL0RgTCBaN2kN/7f8MdxlONQk7HpIlccwUs1SslLQd3tfNNFtguO+x2GgZSB2SURE5XY58TIWBi/E0aijaGnaEntH7sXIliMZQqhKMYxUo0JFId7e/zYKFAUIHBcIEx0TsUsiIiqXq0lXsSh4EQ7dP4TmJs2xy3sX3mr1Fu8iTtWCYaQaLTi1ABfiLuD0O6dhZWAldjlERGW6kXwDi84uwsF7B9HMuBm2j9iOMa3HMIRQtWIYqSb7bu/D9yHfY3W/1ehhx2lUiahmuxB7ASsurMCh+4fQtFFTbBm2Bb5uvsWj/oiqEz9l1eDuk7uY+OdEjG49Gh+6fyh2OUREpVIIChyNOorl55fjQtwFtGjcApuHbYavqy801DXELo/qkUr1QFq+fDkkEglmz55dvM7T0xMSiaTEMnXq1MrWWWtIZVKM2DsC9kb22DRkE4e7EVGNUyAvwLYb2+C23g1Ddg+BQlDgz9F/4tb0W5jQdgKDCKlchVtGwsPDsXHjRri5ub20zc/PD0uWLCl+rKNTP4ayCoKAiX9ORFJWEsL9wqGnqSd2SURExbLzs/Hr1V/xQ+gPiM2IxaBmg7B+0Hp0t+3OP5xIVBUKI1lZWfD19cWmTZvw9ddfv7RdR0cH5ubmlS6utvn+4vcIuBuAg28fhLOJs9jlEBEBAJ7mPMXaS2vx06WfkJGXgTGuYzCv6zy4mrmKXRoRgApeppkxYwYGDRqEPn36lLp9586daNy4MVq3bo0FCxYgJyenUkXWBqcfnsanQZ9iQfcFGOYyTOxyiIjwOP0xZh2bBbvVdlh5YSV8XX0R/WE0to/YziBCNYrSLSN79uzB1atXER4eXur2sWPHws7ODpaWloiIiMD8+fMRGRmJgICAUveXyWSQyWTFj6VSqbIliS4uIw6j949GL4deWOq1VOxyiKieu5lyEysvrsTum7th2NAQH3t8jJnuM9FYp7HYpRGVSqkwEhcXh1mzZuHkyZNo2LBhqftMmTKl+GdXV1dYWFigd+/eiImJgaOj40v7L1u2DIsXL1ay7JqjUFGIt/a/BW0Nbez22c2x+EQkmvOx57H8/HIciToCGwMb/O/N/2Fy+8nsv0Y1nkQQBKG8Ox88eBAjRoyA+r/uby+XyyGRSKCmpgaZTFZiGwBkZ2dDT08Px48fR79+/V46ZmktIzY2NsjIyICBQc2fOn1N6BrMCZyDC5MuwMPGQ+xyiKieUQgKHLl/BMsvLMfFuItoZdoK87rNw5jWYzgqhlRKKpXC0NCwQt/fSrWM9O7dGzdv3iyxbuLEiXBxccH8+fNfCiIAcP36dQCAhYVFqcfU0tKCllbtvINtvDQeX5z5AtM6TmMQISKVKpAXYNfNXVh5cSXuPLmDbjbd8NfovzDIeRDvG0O1jlJhRF9fH61bty6xTldXFyYmJmjdujViYmKwa9cuDBw4ECYmJoiIiMCcOXPQs2fPUocA13azj8+GnqYevu39rdilEFE9kZaThk1XN+Hn8J8RL43HYOfB2Dh4I7rbdhe7NKIKq9IZWDU1NXHq1CmsXr0a2dnZsLGxgY+PD7744ouqfJka4cj9I/C/64/dPkUdxIiIqtPt1Nv4MexHbI/YDoWgwDi3cZjdZTZaN2ld9pOJajil+oyoQmWuOalKTkEOWq1rBWcTZxz3Pc7JgoioWigEBY5FHcOasDU4+eAkLPQsMKPTDEzpMAWmuqZil0dUgsr6jFCRpWeXIikzCSfHn2QQIaIql5WfhS3Xt+DHsB8R9SwKnSw7Yaf3ToxsORKa6ppil0dU5RhGlHQ79Ta+D/keX/X8Ck7GTmKXQ0R1yMPnD7H20lr8du03ZOVnYWTLkdg6fCu6WHfhHz5UpzGMKOnToE/hYOSAed3miV0KEdUBgiDg1INTWBu+FociD8GooRGmdZyG6Z2mw8bQRuzyiFSCYUQJlxIu4fD9w9jpvRNaDWrncGQiqhmkMim23diGtZfWIjItEm5mbvhlyC8Y6zoWOhr14+aiRC8wjChhUfAitGjcAm+3elvsUoiolrr39B5+vvQzttzYgtyCXPi09MGmIZt451yq1xhGyikkLgTHoo9hj88eTvlOREqRK+Q4fP8w1oavxakHp9BEtwnmdJmD9zu8DysDK7HLIxIdw0g5LT67GK1MW2FUq1Fil0JEtURqdiq2XN+CdeHr8DjjMdyt3LFjxA6MbDmSl3qJ/oVhpBzuPLmDwJhA7Bixg9MsE9FrKQQFTj04hU1XN+HPe39CIpFgdOvR+KDTB+hk1Uns8ohqJIaRclgXvg5mumZsFSGiV0qQJmDz9c347dpveJT+CK1MW+G7vt9hnNs4mOiYiF0eUY3GMFKGnIIcbI/YjpmdZ3KyISIqoVBRiKNRR7Hp6iYcjTqKhg0a4u1Wb8OvvR/nBiFSAsNIGfzv+EMqk2JSu0lil0JENcTD5w/x27XfsPn6ZiRmJqKDRQesG7gOY1zHwECrZt7GgqgmYxgpw/aI7fC090TTRk3FLoWIRJQvz8ef9/7EpqubcPLBSRhoGcDX1Rd+7f3QzqKd2OUR1WoMI6+RKctE8KNgfP/m92KXQkQiiXwaiU1XN2Hrja14mvMUXW26YvOwzRjVchR0NXXFLo+oTmAYeY2gh0EoUBRgYLOBYpdCRCqUW5CL/Xf2Y9PVTTgXew4m2iZ4p807mNxuMlo1aSV2eUR1DsPIaxyNOgpnE2feEI+onohIicCmK5uw4+YOpOelo5dDL+z22Y0RLiM4LwhRNWIYeQVBEHA06ihGteRwXqK67Hnuc/xx+w/8fv13XEq4BDNdM0ztMBWT20/mHyJEKsIw8gop2SlIyExAD7seYpdCROUklwPnzgFJSYCFBdCjB6Beyt0bZIUyHIk6gh0RO3Ak6ggKFYXo59gPAW8FYLDzYGioa6i+eKJ6jGHkFW6n3gYAtDLl9WGi2iAgAJg1C4iP/2edtTWwZg3g7V00M+r52PPYEbED++7sQ3peOjpYdMCKPiswuvVomOuZi1c8UT3HMPIKt1JvQUtdC47GjmKXQkRlCAgARo4EBKHk+oQEYORIASO+2oXLRp8hNiMWdoZ2mNFpBnxdfdHCtIU4BRNRCQwjr3D7yW24NHZBAzWeIqKaTC4vahH5bxABXqwTcGD1G3hv60C8084XXW268h5TRDUMv2lfIV4aD3sje7HLIKIynDtX8tLMy9QgZFhjrOF6dLdVVVVEpAz+efAKOQU50NPUE7sMInqNQkUhjl67Vq59k5KquRgiqjC2jLxCTkEOtBtoi10GEf2HIAi4nHgZOyJ2YPet3XhyuyWA4DKfZ2FR7aURUQUxjLxCbmEudDR0xC6DiP5fVFoU9tzagx03d+B+2n2Y65ljvNt4jBkzDiOCBCQkSErtNyKRFI2q6cFR+kQ1FsPIK6hL1FGgKBC7DKJ6SxAE3HlyB/vv7If/XX/cTL0JXQ1deLfwxtoBa9HLoRfU1YomEVmzpmg0jURSsiOrRFL07+rVpc83QkQ1A8PIK1jqWyIhM0HsMojqFUEQcD35enEAiUyLhL6mPoY0H4JFnovQ36l/qS2W3t7A/v2lzzOyenXRdiKquRhGXsHawBpXk66KXQZRnScIAi4lXCoOIA/TH6JRw0YY5jIM37/5Pfo27Vuu+8J4ewPDhpVvBlYiqlkYRl7BSt8Kf0X+JXYZRHWSXCHHxbiL8L/rD/+7/oiXxsNUxxQjXEbAp6UPvOy9KjQlu7o64OlZ9fUSUfViGHkFVzNXpGSn4HH6Y9gZ2YldDlGtV6goxNlHZ+F/1x8BdwOQkp0CS31LeLt4w6elD3rY9ijuA0JE9QvDyCt42XtBAgmCHgZhUrtJYpdDVCvly/MR9CAI/nf9cfDeQaTlpsHO0A6+rr4Y2XIk3K3dORsqETGMvEoj7UboaNkRJx+cZBghUkJuQS5OxJyA/11//BX5FzJkGWhm3Ax+7f3g09IHHSw6QPJimAsRERhGXqtv075Yf3k9cgtyoa3BCdCIXiUlKwVHo47icNRhnIg5gaz8LLQybYVZ7rMwsuVItG7SmgGEiF6JYeQ1JrabiGXnl2FHxA74dfATuxyiGuPFENzD9w/jcNRhXEq4BAkk8LDxwILuC+DdwhsujV3ELpOIagmGkddwMnbCcJfh+CH0B0xoMxkXzqtxyCDVWzkFOQh6EFQcQBIzE2GgZYD+Tv3xQacP0N+pP0x1TcUuk4hqIYaRMsz1mIsen/wAi69lSEv+51KNtXXRrI+cTInqsgfPH+BY1DEcjT6K0w9PI68wD84mzhjdajQGOw9Gd9vuFRqCS0T0bwwjZUgJ7wb80Q1pKHnTi4SEoumn9+9nIKG6I68wD2cfncWx6GM4Fn0M99PuQ0NNA91tu+PbXt9ikPMgOJs4i10mEdUxEkEo7dZS4pFKpTA0NERGRgYMDAxErUUuB+ztgfh4AcDLne9e3IDr4UNesqHaK+ZZTHH4OPPwDHILc2FjYIMBTgMwoNkA9HboDX0tfbHLJKIarjLf32wZeY1z517c56L0UQCCAMTFFe3HWR+ptsiUZeJc7DkERgfiWPQxRD2LgoaaBnrY9cASryUY4DQALU1bcvQLEakMw8hrJCVV7X5EYsgpyMHFuIs4/fA0zjw6g/CEcMgFOWwNbTHAaQC+6/sdejn0YusHEYmGYeQ1LCyqdj8iVZAVyhAaH4ozj87g9MPTCEsIQ748H6Y6pvBy8MKENhPg5eCFZsbN2PpBRDVCpcLI8uXLsWDBAsyaNQurV68GAOTl5eGjjz7Cnj17IJPJ0K9fP6xbtw5mZmZVUa9K9ehR1CckIaHoksx/SSQCrK0l6NFD9bURvVAgL8DlxMvFLR8X4i4grzAPjRo2gqe9J77v+z16OfTipRciqrEqHEbCw8OxceNGuLm5lVg/Z84cHDlyBPv27YOhoSE++OADeHt748KFC5UuVtXU1YuG744cWdRZtWQgUUAQgE+XpkBd3VysEqkekivkuJZ8DWcensHpR6dxPvY8svKzoK+pjzfs38A3vb6Bl70X2pi34X1fiKhWqFAYycrKgq+vLzZt2oSvv/66eH1GRgZ+++037Nq1C7169QIAbN68GS1atEBoaCi6dOlSNVWrkLd30fDdWbNedGYtYmElB/rPwVcpe9Am9k90s+0mXpFUpykEBW6m3MSZR2dw5tEZnH10FhmyDOho6KC7bXd83uNz9HLohfYW7dFAjVdeiaj2qdBvrhkzZmDQoEHo06dPiTBy5coVFBQUoE+fPsXrXFxcYGtri5CQkFoZRoCiQDJsWNGomX9mYNVARv4SjNh7E7229cKKPivwofuH/EuUKi2nIAdXEq8gND4UIfEh+Pvx30jLTYOWuha62nTFRx4fwcvBC52tOkNTXVPscomIKk3pMLJnzx5cvXoV4eHhL21LTk6GpqYmjIyMSqw3MzNDcnJyqceTyWSQyWTFj6VSqbIlqYS6+svDd421jXFi3AnMOzkPcwLnwP+uP34f+juamTQTpUaqfRSCAlFpUQhLCENofChC40MRkRIBuSCHroYuOlp2xLSO09DLoRc8bDzQsEFDsUsmIqpySoWRuLg4zJo1CydPnkTDhlXzS3HZsmVYvHhxlRxLDFoNtLBmwBp4t/DGpL8moc2GNvi619f4oPMH/KuVXvIs9xkuJVxCWHwYQhNCERYfhud5zwEALRq3QBfrLpjacSrcrdzRqkkrXnYhonpBqRlYDx48iBEjRkD9X9ONyuVySCQSqKmpITAwEH369MHz589LtI7Y2dlh9uzZmDNnzkvHLK1lxMbGpkbMwKqs7PxsLAhagLWX1sLeyB6LPRdjrOtYqKtxetb6qFBRiJspNxEaH1rc8hGZFgkAMNE2gbu1O7pYdUEX6y7oZNUJRg2NxC2YiKgSKjMDq1JhJDMzE48fPy6xbuLEiXBxccH8+fNhY2MDU1NT7N69Gz4+PgCAyMhIuLi4lLvPSE2aDr6ibqfexpdnvsSBewfQ0rQllnotxXCX4exPUocJgoDEzMTi0BGWEIbLiZeRU5CDBmoN0Na8LbpYdSkKINZd4NjIkcNsiahOUVkYKY2npyfatm1bPM/ItGnTcPToUWzZsgUGBgaYOXMmAODixYvlOl5dCCMvhCeE4/PTn+Pkg5NwbOSIqR2nYmLbiTDRMRG7NKqE7Pxs3H5yGzdTbuJm6k1EpETgZupNPM15CgCwMbBBF+uiFg93K3e0t2gPbQ3tMo5KRFS71ah706xatQpqamrw8fEpMelZfdTJqhNOjD+BkLgQrLu8Dp+f/hxfnP4Cb7d+G+93eB8e1h7867gGkyvkiHke81LoiHkWAwEC1CRqcDJ2gpuZG2Z2ngk3Mzd0tuoMS31LsUsnIqpVeNdeFXqS/QS/X/sdG65swKP0R7A2sIa3izd8Wvqgm0039i0RUWp26kuh43bqbeQW5gIATHVM4WbmBjczN7g2cYWrmStamraEjoaOyJUTEdUMol6mqWp1OYy8IFfIcS72HPzv+CPgXgASMxNhpmuGYc2HoXfT3uhh2wMW+nX3hjdy+X/nbCkaOl3dFIICSZlJiH4Wjehn0bjz5A4iUiNwM+UmUrJTAAANGzREK9NWcDVzhWsT1+LwYaZX+25nQESkSgwjtZhCUCAsPgz+d/3xV+RfiHoWBQBwbOSInnY90cO2B3rY9agzHR4DAl6ezdbaumjafW/vyh9frpAjXhpfHDiin0Uj+nnRvzHPYopbOiSQwKGRQ4nA4WbmBidjJ7ZQERFVAMNIHZKclYxzj8/hXGzRciP5BgQIsNCzQA+7Huhi1QUujV3QvHFz2Bna1aovzoCAovv8/PcT9yJj7d9fdiCRK+RIyEzAo/RHpS5x0jgUKgoBAOoSddgb2cPR2BFOjZzgZPzP4tDIgROIERFVIYaROiw9Lx0X4y7i3ONz+Dv2b1xNuoq8wjwAgJa6FpyMneBs4ozmJs3h0MgBdoZ2sDW0ha2hLXQ1dUWu/h9yOWBvX7JF5N8kEgFNLPKxKSgIz/Ke4EnOEzzJ/v9/c54gNTsVqdmpiJfGF4cNAGii2wT2RvZFi6F98c/NTJrBztAOGuoaqnmDRET1HMNIPaIQFIjLiENkWiQin0YiMi0S99PuIzItEvHSeCgERfG+JtomsDW0hY2hDYwaGkFPQw+6mrrQ09Qrc9HVKNpPU10TEokEhYpC5MvzlVpkhTLky/ORW5iL0PMNsenDsWW/wXc9AYez0NfUh6muKZroNoGpjmnRomsKO0O74sBhZ2THDqRERDVEjRraS9VLTaIGOyM72BnZ4U3HN0tsK5AXIDEzEbEZsXic8RixGbGIzYhFnDQOD54/QFZ+VoklOz8bAl6fRdUl6hAglAg5FaFzbzKAssPITz394feOHrQaaFXq9YiIqPZgGKlDNNQ1ioNKD/Qoc39BEJBbmPtSSPlvYFFXU4emumaZi5a6VunrG2jh/N8N4LWn7PfQuqkJtPipJCKqV/hrvx6TSCTQ0dCBjoYOmug2qdbX6tGjaNRMQsLLHViLaina3qPsDEVERHUMb5ZCKqGuXjR8F/hn9MwLLx6vXq2a+UaIiKhmYRghlfH2Lhq+a2VVcr21dfmG9RIRUd3EyzSkUt7ewLBh4szASkRENRPDCKmcujrg6Sl2FUREVFPwMg0RERGJimGEiIiIRMUwQkRERKJiGCEiIiJRMYwQERGRqBhGiIiISFQMI0RERCQqhhEiIiISFcMIERERiYphhIiIiETFMEJERESiYhghIiIiUTGMEBERkagYRoiIiEhUDCNEREQkKoYRIiIiEhXDCBEREYmKYYSIiIhExTBCREREomIYISIiIlExjBAREZGoGEaIiIhIVAwjREREJCqGESIiIhIVwwgRERGJimGEiIiIRMUwQkRERKJiGCEiIiJRMYwQERGRqJQKI+vXr4ebmxsMDAxgYGAADw8PHDt2rHi7p6cnJBJJiWXq1KlVXjQRERHVHQ2U2dna2hrLly9Hs2bNIAgCtm7dimHDhuHatWto1aoVAMDPzw9Lliwpfo6Ojk7VVkxERER1ilJhZMiQISUef/PNN1i/fj1CQ0OLw4iOjg7Mzc2rrkIiIiKq0yrcZ0Qul2PPnj3Izs6Gh4dH8fqdO3eicePGaN26NRYsWICcnJzXHkcmk0EqlZZYiIiIqP5QqmUEAG7evAkPDw/k5eVBT08PBw4cQMuWLQEAY8eOhZ2dHSwtLREREYH58+cjMjISAQEBrzzesmXLsHjx4oq/AyIiIqrVJIIgCMo8IT8/H7GxscjIyMD+/fvx66+/4uzZs8WB5N9Onz6N3r17Izo6Go6OjqUeTyaTQSaTFT+WSqWwsbFBRkYGDAwMlHw7REREJAapVApDQ8MKfX8rHUb+q0+fPnB0dMTGjRtf2padnQ09PT0cP34c/fr1K9fxKvNmiIiISByV+f6u9DwjCoWiRMvGv12/fh0AYGFhUdmXISIiojpKqT4jCxYswIABA2Bra4vMzEzs2rULwcHBCAwMRExMDHbt2oWBAwfCxMQEERERmDNnDnr27Ak3N7fqqp+IiIhqOaXCSGpqKt555x0kJSXB0NAQbm5uCAwMRN++fREXF4dTp05h9erVyM7Oho2NDXx8fPDFF19UV+1ERERUB1S6z0hVY58RIiKi2kfUPiNERERElcEwQkRERKJiGCEiIiJRMYwQERGRqBhGiIiISFQMI0RERCQqhhEiIiISFcMIERERiYphhIiIiETFMEJERESiYhghIiIiUTGMEBERkagYRoiIiEhUDCNEREQkKoYRIiIiEhXDCBEREYmKYYSIiIhExTBCREREomIYISIiIlExjBAREZGoGEaIiIhIVAwjREREJCqGESIiIhJVA7EL+C9BEAAAUqlU5EqIiIiovF58b7/4HldGjQsjmZmZAAAbGxuRKyEiIiJlZWZmwtDQUKnnSISKRJhqpFAokJiYCH19fUgkErHLKTepVAobGxvExcXBwMBA7HJqJJ6j8uF5KhvPUfnwPJWN56h8ynOeBEFAZmYmLC0toaamXC+QGtcyoqamBmtra7HLqDADAwN+oMvAc1Q+PE9l4zkqH56nsvEclU9Z50nZFpEX2IGViIiIRMUwQkRERKJiGKkiWlpaWLhwIbS0tMQupcbiOSofnqey8RyVD89T2XiOyqe6z1ON68BKRERE9QtbRoiIiEhUDCNEREQkKoYRIiIiEhXDCBEREYmKYUQJcrkcX375JRwcHKCtrQ1HR0csXbq0xDz8EyZMgEQiKbH0799fxKpVLzMzE7Nnz4adnR20tbXRtWtXhIeHF28XBAFfffUVLCwsoK2tjT59+iAqKkrEisVR1nmqj5+lv//+G0OGDIGlpSUkEgkOHjxYYnt5PjvPnj2Dr68vDAwMYGRkhMmTJyMrK0uF76J6VcU5sre3f+mztXz5chW+i+pX1nkKCAjAm2++CRMTE0gkEly/fv2lY+Tl5WHGjBkwMTGBnp4efHx8kJKSopo3oAJVcY48PT1f+ixNnTpV6VoYRpSwYsUKrF+/HmvXrsXdu3exYsUKrFy5Ej/99FOJ/fr374+kpKTiZffu3SJVLI733nsPJ0+exPbt23Hz5k28+eab6NOnDxISEgAAK1euxI8//ogNGzYgLCwMurq66NevH/Ly8kSuXLXKOk9A/fssZWdno02bNvj5559L3V6ez46vry9u376NkydP4vDhw/j7778xZcoUVb2FalcV5wgAlixZUuKzNXPmTFWUrzJlnafs7Gx0794dK1aseOUx5syZg0OHDmHfvn04e/YsEhMT4e3tXV0lq1xVnCMA8PPzK/FZWrlypfLFCFRugwYNEiZNmlRinbe3t+Dr61v8+N133xWGDRum4spqjpycHEFdXV04fPhwifXt27cXPv/8c0GhUAjm5ubCd999V7wtPT1d0NLSEnbv3q3qckVT1nkSBH6WAAgHDhwoflyez86dO3cEAEJ4eHjxPseOHRMkEomQkJCgstpVpSLnSBAEwc7OTli1apUKKxXXf8/Tvz18+FAAIFy7dq3E+vT0dEFDQ0PYt29f8bq7d+8KAISQkJBqrFYcFTlHgiAIb7zxhjBr1qxKvz5bRpTQtWtXBAUF4f79+wCAGzdu4Pz58xgwYECJ/YKDg9GkSRM0b94c06ZNQ1pamhjliqKwsBByuRwNGzYssV5bWxvnz5/Hw4cPkZycjD59+hRvMzQ0hLu7O0JCQlRdrmjKOk8v1OfP0n+V57MTEhICIyMjdOzYsXifPn36QE1NDWFhYSqvWdWU+f9r+fLlMDExQbt27fDdd9+hsLBQ1eXWaFeuXEFBQUGJc+ni4gJbW9t69buqPHbu3InGjRujdevWWLBgAXJycpQ+Ro27UV5N9umnn0IqlcLFxQXq6uqQy+X45ptv4OvrW7xP//794e3tDQcHB8TExOCzzz7DgAEDEBISAnV1dRGrVw19fX14eHhg6dKlaNGiBczMzLB7926EhITAyckJycnJAAAzM7MSzzMzMyveVh+UdZ4Afpb+qzyfneTkZDRp0qTE9gYNGsDY2LhefL7K+//Xhx9+iPbt28PY2BgXL17EggULkJSUhB9++EGl9dZkycnJ0NTUhJGRUYn19e13VVnGjh0LOzs7WFpaIiIiAvPnz0dkZCQCAgKUOg7DiBL++OMP7Ny5E7t27UKrVq1w/fp1zJ49G5aWlnj33XcBAKNHjy7e39XVFW5ubnB0dERwcDB69+4tVukqtX37dkyaNAlWVlZQV1dH+/btMWbMGFy5ckXs0mqUss4TP0tUXebOnVv8s5ubGzQ1NfH+++9j2bJlnBadlPLv/liurq6wsLBA7969ERMTA0dHx3Ifh5dplPDJJ5/g008/xejRo+Hq6orx48djzpw5WLZs2Suf07RpUzRu3BjR0dEqrFRcjo6OOHv2LLKyshAXF4dLly6hoKAATZs2hbm5OQC81CM9JSWleFt98brzVJr6+Fn6t/J8dszNzZGamlpie2FhIZ49e1YvPl8V/f/L3d0dhYWFePToUXWWV6uYm5sjPz8f6enpJdbXx99VynB3dwcApX9PMYwoIScnB2pqJU+Zuro6FArFK58THx+PtLQ0WFhYVHd5NY6uri4sLCzw/PlzBAYGYtiwYXBwcIC5uTmCgoKK95NKpQgLC4OHh4eI1YqntPNUmvr8WQJQrs+Oh4cH0tPTS7TCnT59GgqFoviXZF1W0f+/rl+/DjU1tZcucdVnHTp0gIaGRolzGRkZidjY2Hr7u6o8Xgz/Vfb3FC/TKGHIkCH45ptvYGtri1atWuHatWv44YcfMGnSJABAVlYWFi9eDB8fH5ibmyMmJgbz5s2Dk5MT+vXrJ3L1qhMYGAhBENC8eXNER0fjk08+gYuLCyZOnAiJRILZs2fj66+/RrNmzeDg4IAvv/wSlpaWGD58uNilq9TrzlN9/SxlZWWV+Ivq4cOHuH79OoyNjWFra1vmZ6dFixbo378//Pz8sGHDBhQUFOCDDz7A6NGjYWlpKdK7qlqVPUchISEICwuDl5cX9PX1ERISgjlz5mDcuHFo1KiRSO+q6pV1np49e4bY2FgkJiYCKAoaQFGLiLm5OQwNDTF58mTMnTsXxsbGMDAwwMyZM+Hh4YEuXbqI8p6qWmXPUUxMDHbt2oWBAwfCxMQEERERmDNnDnr27Ak3Nzfliqn0eJx6RCqVCrNmzRJsbW2Fhg0bCk2bNhU+//xzQSaTCYJQNFzzzTffFExNTQUNDQ3Bzs5O8PPzE5KTk0WuXLX27t0rNG3aVNDU1BTMzc2FGTNmCOnp6cXbFQqF8OWXXwpmZmaClpaW0Lt3byEyMlLEisXxuvNUXz9LZ86cEQC8tLz77ruCIJTvs5OWliaMGTNG0NPTEwwMDISJEycKmZmZIryb6lHZc3TlyhXB3d1dMDQ0FBo2bCi0aNFC+Pbbb4W8vDyR3lH1KOs8bd68udTtCxcuLD5Gbm6uMH36dKFRo0aCjo6OMGLECCEpKUmcN1QNKnuOYmNjhZ49ewrGxsaClpaW4OTkJHzyySdCRkaG0rVIBOFf04cSERERqRj7jBAREZGoGEaIiIhIVAwjREREJCqGESIiIhIVwwgRERGJimGEiIiIRMUwQkRERKJiGCEiIiJRMYwQERGRqBhGiIiISFQMI0RERCQqhhEiIiIS1f8BI8RPr0kIr4sAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "angles = linspace(0, 2 * pi, 9, endpoint=False)\n", "pty = 50 + 10 * cos(angles) + 5 * sin(angles)\n", "ptx = 100 + 5 * cos(angles) + 15 * sin(angles)\n", "ellipse = fit_ellipse(pty, ptx)\n", "print(ellipse)\n", "display(ptx, pty, ellipse)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/tmp/ipykernel_148937/1481167801.py:31: UserWarning: color is redundantly defined by the 'color' keyword argument and the fmt string \"ro\" (-> color='r'). The keyword argument will take precedence.\n", " ax.plot(ptx, pty, \"ro\", color=\"blue\")\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Points from real peaking\n", "from numpy import array\n", "pty = array([0.06599215, 0.06105629, 0.06963708, 0.06900191, 0.06496001, 0.06352082, 0.05923421, 0.07080027, 0.07276284, 0.07170048])\n", "ptx = array([0.05836343, 0.05866434, 0.05883284, 0.05872581, 0.05823667, 0.05839846, 0.0591999, 0.05907079, 0.05945377, 0.05909428])\n", "try:\n", " ellipse = fit_ellipse(pty, ptx)\n", "except Exception as e:\n", " ellipse = None\n", " print(e)\n", "display(ptx, pty, ellipse)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/tmp/ipykernel_148937/1481167801.py:31: UserWarning: color is redundantly defined by the 'color' keyword argument and the fmt string \"ro\" (-> color='r'). The keyword argument will take precedence.\n", " ax.plot(ptx, pty, \"ro\", color=\"blue\")\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Ellipse can't be fitted: singular matrix\n" ] }, { "data": { "image/png": "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6upqffHFF5o8ebIaGhqcLi0uMjIytHjxYu3du1d79uzRzTffrGnTpundd991urS4qa2t1YoVKzRy5EinS4mr4cOHq76+vqnt2rXL6ZLi4syZM5owYYIuu+wybdmyRe+9955+97vfqVevXk6XFrPa2tqof7Pq6mpJ0owZMxyuLHZPPPGEli9frmXLlun999/XE088od/85jd6+umnnS4tLu655x5VV1drzZo1OnDggCZPnqxJkyaprq6u7Sux/ei2drrhhhuskpKSps/hcNhKT0+3KioqOqqEDiGp2VNxu4rTp09bkqwdO3Y4XYoxvXr1sv74xz86XUZcnDt3zrryyiut6upq66abbrJKS0udLikuFi5caI0aNcrpMox48MEHrRtvvNHpMjpEaWmpNWTIEKuxsdHpUmI2ZcoUq7i4OKrP5/NZhYWFDlUUP59++qnldrutzZs3R/WPHj3aeuihh9q8ng45svH5559r7969mjRpUlNft27dNGnSJL311lsdUQLiIBAISFK7nvjX2YXDYa1fv14NDQ1d5tb7JSUlmjJlStT/d13FkSNHlJ6ersGDB6uwsFAnTpxwuqS4eOWVVzRmzBjNmDFD/fr107XXXqtnn33W6bLi7vPPP9fatWtVXFwsl8vldDkxGz9+vLZt26bDhw9Lkt555x3t2rVLBQUFDlcWuy+//FLhcFg9evSI6k9JSbF1RNH4U1+l9j2aHp1LY2OjysrKNGHCBI0YMcLpcuLmwIEDGjdunP73v//p8ssv18aNG3X11Vc7XVbM1q9fr3379tk+r5oIxo4dq+eff17Dhg1TfX29Hn30UeXl5engwYNKTU11uryYfPjhh1q+fLnmz5+vX/7yl6qtrdW8efOUlJSkoqIip8uLm02bNuns2bO66667nC4lLhYsWKBgMKjc3Fy53W6Fw2EtWrRIhYWFTpcWs9TUVI0bN06PPfaYrrrqKvXv319/+tOf9NZbb+m73/1um9fTIWEDia+kpEQHDx7sMufGLxg2bJj279+vQCCgDRs2qKioSDt27EjowOH3+1VaWqrq6upmf410BV//a3HkyJEaO3assrOz9dJLL+nuu+92sLLYNTY2asyYMXr88cclSddee60OHjyoP/zhD10qbDz33HMqKChQenq606XExUsvvaQXXnhB69at0/Dhw7V//36VlZUpPT29S/y7rVmzRsXFxRo4cKDcbrdGjx6tWbNmae/evW1eR4eEDR5Nn9jmzp2rzZs3a+fOncrIyHC6nLhKSkpqSufXXXedamtrtXTpUq1YscLhytpv7969On36tEaPHt3UFw6HtXPnTi1btkyhUEhut9vBCuPriiuu0NChQ3X06FGnS4mZ1+ttFnSvuuoq/fnPf3aoovj7+OOPtXXrVlVWVjpdStw88MADWrBggX76059Kkq655hp9/PHHqqio6BJhY8iQIdqxY4caGhoUDAbl9Xo1c+ZMDR48uM3r6JA5GzyaPjFZlqW5c+dq48aNev311zVo0CCnSzKusbFRoVDI6TJicsstt+jAgQPav39/UxszZowKCwu1f//+LhU0JOn8+fM6duyYvF6v06XEbMKECc0uLz98+LCys7Mdqij+Vq1apX79+mnKlClOlxI3n376qbp1i96dut1uNTY2OlSRGT179pTX69WZM2dUVVWladOmtXnZDjuNEuuj6Tuz8+fPR/1Vdfz4ce3fv1+9e/dWVlaWg5XFpqSkROvWrdPLL7+s1NRUnTp1SpLk8XiUkpLicHWxKy8vV0FBgbKysnTu3DmtW7dO27dvV1VVldOlxSQ1NbXZvJqePXuqT58+XWK+zf3336+pU6cqOztb//znP7Vw4UK53W7NmjXL6dJidt9992n8+PF6/PHH9ZOf/ERvv/22Vq5cqZUrVzpdWlw0NjZq1apVKioqUvfuXecs/tSpU7Vo0SJlZWVp+PDh+sc//qGnnnpKxcXFTpcWF1VVVbIsS8OGDdPRo0f1wAMPKDc3197+O74XyVzc008/bWVlZVlJSUnWDTfcYO3evbsjN2/MG2+8YUlq1oqKipwuLSYt/SZJ1qpVq5wuLS6Ki4ut7OxsKykpyerbt691yy23WH/961+dLsuIrnTp68yZMy2v12slJSVZAwcOtGbOnGkdPXrU6bLi5i9/+Ys1YsQIKzk52crNzbVWrlzpdElxU1VVZUmyDh065HQpcRUMBq3S0lIrKyvL6tGjhzV48GDroYceskKhkNOlxcWLL75oDR482EpKSrIGDBhglZSUWGfPnrW1Dh4xDwAAjOLZKAAAwCjCBgAAMIqwAQAAjCJsAAAAowgbAADAKMIGAAAwirABAACMImwAAACjCBsAAMAowgYAADCKsAEAAIz6P0A9tzLL6TApAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Line\n", "from numpy import arange\n", "pty = arange(10)\n", "ptx = arange(10)\n", "try:\n", " ellipse = fit_ellipse(pty, ptx)\n", "except Exception as e:\n", " ellipse = None\n", " print(e)\n", "display(ptx, pty, ellipse)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Conclusion\n", "Within pyFAI's calibration process, the parameters of the ellipse are used in first instance as input guess for starting the fit procedure, which uses *slsqp* from scipy.optimize." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.11.0" } }, "nbformat": 4, "nbformat_minor": 4 }