Skip to content

Instantly share code, notes, and snippets.

@Cartman0
Last active June 4, 2019 04:10
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Cartman0/b30084b825d2038a4fcfc64d3d5a5fde to your computer and use it in GitHub Desktop.
Save Cartman0/b30084b825d2038a4fcfc64d3d5a5fde to your computer and use it in GitHub Desktop.
類似度
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"metadata": {},
"cell_type": "markdown",
"source": "# 類似度"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "参考:http://d.hatena.ne.jp/asaday/20110123/1295767228\nhttp://www.cse.kyoto-su.ac.jp/~g0846020/keywords/cosinSimilarity.html"
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "import scipy as sp\nimport scipy.linalg as linalg\nimport matplotlib.pyplot as plt\nimport scipy.spatial as spatial",
"execution_count": 31,
"outputs": []
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "x = sp.array([1,1,1,1,0, 1,1,1,0,1,1])\ny = sp.array([1,1,0,1,1, 1,1,0,1,1,1])\nx, y",
"execution_count": 2,
"outputs": [
{
"data": {
"text/plain": "(array([1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1]),\n array([1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1]))"
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## ユークリッド距離"
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "spatial.distance.euclidean(x, y)",
"execution_count": 40,
"outputs": [
{
"data": {
"text/plain": "2.0"
},
"execution_count": 40,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## cos類似度"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "$$\n\\cos{(\\theta)}\n= \\frac{\\vec{x} \\cdot \\vec{y}}{|\\vec{x}| |\\vec{y}|}\n$$\n\nhttps://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.distance.cosine.html\n\ncos距離は0ほど近いので1-cos類似度\n\n"
},
{
"metadata": {
"scrolled": true,
"trusted": true
},
"cell_type": "code",
"source": "linalg.norm(x), linalg.norm(y)",
"execution_count": 11,
"outputs": [
{
"data": {
"text/plain": "(3.0, 3.0)"
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "x.dot(y)",
"execution_count": 12,
"outputs": [
{
"data": {
"text/plain": "7"
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "def cos_degree(x, y):\n return sp.dot(x, y) / (linalg.norm(x) * linalg.norm(y))\n\ncos_degree(x, y)",
"execution_count": 13,
"outputs": [
{
"data": {
"text/plain": "0.7777777777777778"
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "1 - spatial.distance.cosine(x, y)",
"execution_count": 36,
"outputs": [
{
"data": {
"text/plain": "0.7777777777777777"
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "### 高次元だとどうなる?"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "参考:https://shuyo.hatenablog.com/entry/20160401/cosine_similarity\n\nランダムにベクトルを作る.\ncos類似度を計算\n\n"
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "import scipy as sp\nimport scipy.stats as stats\nimport scipy.spatial as spatial\nimport matplotlib.pyplot as plt\n\ndims = sp.array([2, 3, 4, 5, 6, 7, 8, 9, 10, 100])\nuniform = stats.uniform(-1, 2)\ndef cos_sim(vec1, vec2):\n return 1 - spatial.distance.cosine(vec1, vec2)\n\ndef get_cos_sim_array(count, dim):\n cos = sp.zeros(count)\n for i in sp.arange(count):\n vec_1 = uniform.rvs(dim)\n vec_2 = uniform.rvs(dim)\n cos[i] = cos_sim(vec_1, vec_2)\n return cos\n\nn = 100000\nbins = sp.linspace(-1, 1, 40+1)\nfig = plt.figure(figsize=(16, 12))\nfor i, d in enumerate(dims):\n cos = get_cos_sim_array(n, d)\n ax = fig.add_subplot(round(len(dims)/2), 2, i+1)\n ax.hist(cos, bins)\n ax.set_title(f\"dim = ${d}$\", fontsize=20)\n ax.grid()\n \nplt.tight_layout()\nplt.savefig(\"cos_sim.png\")\nplt.show()",
"execution_count": 8,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/plain": "<Figure size 1152x864 with 10 Axes>",
"image/png": "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\n"
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "bins",
"execution_count": 9,
"outputs": [
{
"output_type": "execute_result",
"execution_count": 9,
"data": {
"text/plain": "array([-1. , -0.95, -0.9 , -0.85, -0.8 , -0.75, -0.7 , -0.65, -0.6 ,\n -0.55, -0.5 , -0.45, -0.4 , -0.35, -0.3 , -0.25, -0.2 , -0.15,\n -0.1 , -0.05, 0. , 0.05, 0.1 , 0.15, 0.2 , 0.25, 0.3 ,\n 0.35, 0.4 , 0.45, 0.5 , 0.55, 0.6 , 0.65, 0.7 , 0.75,\n 0.8 , 0.85, 0.9 , 0.95, 1. ])"
},
"metadata": {}
}
]
},
{
"metadata": {
"scrolled": true,
"trusted": true
},
"cell_type": "code",
"source": "%matplotlib inline\n\nn = 2\ncos_2 = get_cos_sim_array(count, n)\nplt.hist(cos_2, bins)\nplt.title(f\"dim = ${n}$\")\nplt.grid()\nplt.show()",
"execution_count": 70,
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": "<Figure size 432x288 with 1 Axes>"
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "%matplotlib inline\n\nplt.hist(cos_2, bins, density=True)\nplt.title(f\"dim = ${n}$(density)\")\nplt.grid()\nplt.show()",
"execution_count": 71,
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": "<Figure size 432x288 with 1 Axes>"
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "sp.degrees(sp.math.acos(0.95)) * 2 / 360 * 100000",
"execution_count": 39,
"outputs": [
{
"data": {
"text/plain": "10108.262410425992"
},
"execution_count": 39,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "%matplotlib inline\n\nn = 3\ncos = get_cos_sim_array(count, n)\nplt.hist(cos, bins)\nplt.title(f\"dim = ${n}$\")\nplt.grid()\nplt.show()",
"execution_count": 72,
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYAAAAEJCAYAAACdePCvAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAFqVJREFUeJzt3X+w5XV93/HnK4u/yiayhHiLQAJ21jRYpih3kNaZ5m40sNBWMGoDbWT9NRsNmGRC26C2o+OPiemIdqTGdK0UjMQVf5WtYumKbK0zooAlLEiRFakubHdrQBS1JGve/eN8b3pY7r3nxz3n3st+no+ZM+d7Pt/P9/t9f7/n3PM63x/n3FQVkqT2/NRqFyBJWh0GgCQ1ygCQpEYZAJLUKANAkhplAEhSowwASWqUAaCmJLkyyTu64TuTzK1ySdKqMQDUrKp6TlXtWs0aknwkyb4k30/yjSSvXc161BYDQFpdfwCcWFU/A7wYeEeS01a5JjXCANBhLclzk3wtyQ+SfAx4at+4+5K8qG/4XyS5PckPk3woyUySz3XTfj7JhknXV1V3VtWj8w+729+a9HKkhRgAOmwleTLwn4A/AY4GPg68dIlJXgr8KvBs4B8DnwPeBBxD72/lt5dY1meSfG+R22cG1PlHSX4E/E9gH3Dd0CspLcMRq12ANEVnAE8C/m31fvXwE0l+b4n+l1fVfoAk/x04UFX/o3v8aeCFi01YVf9o3CKr6reSvAH4e8Ac8OjSU0iT4R6ADmfPBO6vx/7k7f9aov/+vuEfL/B4/QRre4yq+klVfQk4Hnj9tJYj9TMAdDjbBxyXJH1tPz+NBXXnCh5Z5Pa5EWZ1BJ4D0AoxAHQ4+zJwEPjtJEck+TXg9GksqKrOrqr1i9zOXmiaJM9Icn6S9UnWJTkLuAD4wjRqlA5lAOiwVVV/Afwa8ErgIeDXgU+tZk2HKHqHe/bSq+/dwO9W1bWrWpWaEf8jmCS1yT0ASWqUASBJjTIAJKlRBoAkNWpNfxP4mGOOqRNPPHHs6X/4wx9y5JFHTq6gCbGu0VjXaKxrNIdjXbfeeut3q+rnBnasqjV7O+2002o5brzxxmVNPy3WNRrrGo11jeZwrAu4pYZ4j/UQkCQ1ygCQpEYZAJLUKANAkhplAEhSowwASWqUASBJjTIAJKlRBoAkNWpN/xTEcu2+/2FeeelnFxx337v+4QpXI0lri3sAktQoA0CSGmUASFKjDABJapQBIEmNOqyvApKkterERa5QnHfl5un/kxoDQBqTlxlrkEFv8qvNQ0CS1CgDQJIaZQBIUqMMAElqlCeBtSKWOhk2zROmg07CrdbJ2rVal9piAEhTMM2rP9bC5YM6PBgAekJb65fZjetwXS+tLQaAmrZah6aktcAAkBYx6FP4JaesUCHSlAy8CijJCUluTHJXkjuT/E7X/tYk9ye5rbud0zfNG5PsSXJ3krP62jd3bXuSXDqdVZIkDWOYPYCDwCVV9bUkPw3cmmRnN+69VfXu/s5JTgbOB54DPBP4fJJnd6PfD/wqsBe4OcmOqvr6JFZEkjSagQFQVfuAfd3wD5LcBRy3xCTnAtur6lHgW0n2AKd34/ZU1b0ASbZ3fVclAJZzks1jw5IOByOdA0hyIvBc4CvAC4CLk1wI3EJvL+EheuFwU99ke/n/gfGdQ9qfP1bVOqx4WaO0OlJVw3VM1gP/DXhnVX0qyQzwXaCAtwPHVtWrk7wf+HJVfaSb7kPAdfTON5xVVa/t2l8BnF5VbzhkOVuBrQAzMzOnbd++feyVO/Dgw+z/8diTL+qU456+rOkfeeQR1q9fP6FqHmv3/Q8vOm5Q3atV1yAzT2Mqz+NyrdW6Tnr6uqk9j8sxzdfXcgx6n1jq72Y5r+tBlvM8btq06daqmh3Ub6g9gCRPAj4JXF1VnwKoqv194z8IfKZ7uBc4oW/y44EHuuHF2v9aVW0DtgHMzs7W3NzcMCUu6PKrr+Wy3ZO/0Om+fza3rOl37drFctZrKYv9PDEMrnu16hrkklMOTuV5XK41XdeXfjjWtNM8vLmc19c0vzk96H1iqb+b5byuB7ly85FT+3ucN/DVmyTAh4C7quo9fe3HducHAF4C3NEN7wD+NMl76J0E3gh8FQiwMclJwP30ThT/00mtiJZvqd+3H8TzIm3wexOHl2E+vrwAeAWwO8ltXdubgAuSnErvENB9wG8CVNWdSa6hd3L3IHBRVf0EIMnFwPXAOuCKqrpzgusiSRrBMFcBfYnep/dDXbfENO8E3rlA+3VLTSdJ43DPZDxr7wCmpFXjbxC1xQBYBav1v2Sn+dMGvnHocHU4v7YNgCeYw/nFqCc2v8/xxGMATMFyPmn7Bi9ppfgvISWpUe4BjMFP6ZIOBwaApBUx6IuGXq658gwASWvCtPas/cc+i/McgCQ1ygCQpEYZAJLUKANAkhplAEhSowwASWqUASBJjTIAJKlRBoAkNcoAkKRGGQCS1CgDQJIaZQBIUqMMAElqlAEgSY0yACSpUQaAJDXKAJCkRhkAktQoA0CSGmUASFKjBgZAkhOS3JjkriR3Jvmdrv3oJDuT3NPdb+jak+R9SfYkuT3J8/rmtaXrf0+SLdNbLUnSIMPsARwELqmqXwLOAC5KcjJwKXBDVW0EbugeA5wNbOxuW4EPQC8wgLcAzwdOB94yHxqSpJU3MACqal9Vfa0b/gFwF3AccC5wVdftKuC8bvhc4MPVcxNwVJJjgbOAnVX1YFU9BOwENk90bSRJQ0tVDd85ORH4IvB3gG9X1VF94x6qqg1JPgO8q6q+1LXfAPw+MAc8tare0bX/a+DHVfXuQ5axld6eAzMzM6dt37597JU78ODD7P/x2JNPzczTsK4RWNdorGs0a7Wuk56+jvXr14817aZNm26tqtlB/Y4YdoZJ1gOfBH63qr6fZNGuC7TVEu2PbajaBmwDmJ2drbm5uWFLfJzLr76Wy3YPvYor5pJTDlrXCKxrNNY1mrVa15Wbj2Q573/DGOoqoCRPovfmf3VVfapr3t8d2qG7P9C17wVO6Jv8eOCBJdolSatgmKuAAnwIuKuq3tM3agcwfyXPFuDavvYLu6uBzgAerqp9wPXAmUk2dCd/z+zaJEmrYJj9nhcArwB2J7mta3sT8C7gmiSvAb4NvLwbdx1wDrAH+BHwKoCqejDJ24Gbu35vq6oHJ7IWkqSRDQyA7mTuYgf8X7hA/wIuWmReVwBXjFKgJGk6/CawJDXKAJCkRhkAktQoA0CSGmUASFKjDABJapQBIEmNMgAkqVEGgCQ1ygCQpEYZAJLUKANAkhplAEhSowwASWqUASBJjTIAJKlRBoAkNcoAkKRGGQCS1CgDQJIaZQBIUqMMAElqlAEgSY0yACSpUQaAJDXKAJCkRhkAktQoA0CSGjUwAJJckeRAkjv62t6a5P4kt3W3c/rGvTHJniR3Jzmrr31z17YnyaWTXxVJ0iiG2QO4Eti8QPt7q+rU7nYdQJKTgfOB53TT/FGSdUnWAe8HzgZOBi7o+kqSVskRgzpU1ReTnDjk/M4FtlfVo8C3kuwBTu/G7amqewGSbO/6fn3kiiVJEzEwAJZwcZILgVuAS6rqIeA44Ka+Pnu7NoDvHNL+/IVmmmQrsBVgZmaGXbt2jV3gzNPgklMOjj39tFjXaKxrNNY1mrVa1yOPPLKs979hjBsAHwDeDlR3fxnwaiAL9C0WPtRUC824qrYB2wBmZ2drbm5uzBLh8quv5bLdy8m46bjklIPWNQLrGo11jWat1nXl5iNZzvvfMMZa66raPz+c5IPAZ7qHe4ET+roeDzzQDS/WLklaBWNdBprk2L6HLwHmrxDaAZyf5ClJTgI2Al8FbgY2JjkpyZPpnSjeMX7ZkqTlGrgHkOSjwBxwTJK9wFuAuSSn0juMcx/wmwBVdWeSa+id3D0IXFRVP+nmczFwPbAOuKKq7pz42kiShjbMVUAXLND8oSX6vxN45wLt1wHXjVSdJGlq/CawJDXKAJCkRhkAktQoA0CSGmUASFKjDABJapQBIEmNMgAkqVEGgCQ1ygCQpEYZAJLUKANAkhplAEhSowwASWqUASBJjTIAJKlRBoAkNcoAkKRGGQCS1CgDQJIaZQBIUqMMAElqlAEgSY0yACSpUQaAJDXKAJCkRhkAktQoA0CSGjUwAJJckeRAkjv62o5OsjPJPd39hq49Sd6XZE+S25M8r2+aLV3/e5Jsmc7qSJKGNcwewJXA5kPaLgVuqKqNwA3dY4CzgY3dbSvwAegFBvAW4PnA6cBb5kNDkrQ6BgZAVX0RePCQ5nOBq7rhq4Dz+to/XD03AUclORY4C9hZVQ9W1UPATh4fKpKkFXTEmNPNVNU+gKral+QZXftxwHf6+u3t2hZrf5wkW+ntPTAzM8OuXbvGLBFmngaXnHJw7OmnxbpGY12jsa7RrNW6HnnkkWW9/w1j3ABYTBZoqyXaH99YtQ3YBjA7O1tzc3NjF3P51ddy2e5Jr+LyXXLKQesagXWNxrpGs1brunLzkSzn/W8Y414FtL87tEN3f6Br3wuc0NfveOCBJdolSatk3ADYAcxfybMFuLav/cLuaqAzgIe7Q0XXA2cm2dCd/D2za5MkrZKB+z1JPgrMAcck2Uvvap53AdckeQ3wbeDlXffrgHOAPcCPgFcBVNWDSd4O3Nz1e1tVHXpiWZK0ggYGQFVdsMioFy7Qt4CLFpnPFcAVI1UnSZoavwksSY0yACSpUQaAJDXKAJCkRhkAktQoA0CSGmUASFKjDABJapQBIEmNMgAkqVEGgCQ1ygCQpEYZAJLUKANAkhplAEhSowwASWqUASBJjTIAJKlRBoAkNcoAkKRGGQCS1CgDQJIaZQBIUqMMAElqlAEgSY0yACSpUQaAJDXKAJCkRi0rAJLcl2R3ktuS3NK1HZ1kZ5J7uvsNXXuSvC/JniS3J3neJFZAkjSeSewBbKqqU6tqtnt8KXBDVW0EbugeA5wNbOxuW4EPTGDZkqQxTeMQ0LnAVd3wVcB5fe0frp6bgKOSHDuF5UuShrDcACjgvya5NcnWrm2mqvYBdPfP6NqPA77TN+3erk2StApSVeNPnDyzqh5I8gxgJ/AGYEdVHdXX56Gq2pDks8AfVNWXuvYbgH9ZVbceMs+t9A4RMTMzc9r27dvHru/Agw+z/8djTz41M0/DukZgXaOxrtGs1bpOevo61q9fP9a0mzZturXvsPyijhhr7p2qeqC7P5Dk08DpwP4kx1bVvu4Qz4Gu+17ghL7JjwceWGCe24BtALOzszU3Nzd2fZdffS2X7V7WKk7FJacctK4RWNdorGs0a7WuKzcfyXLe/4Yx9iGgJEcm+en5YeBM4A5gB7Cl67YFuLYb3gFc2F0NdAbw8PyhIknSyltO7M0An04yP58/rar/kuRm4JokrwG+Dby8638dcA6wB/gR8KplLFuStExjB0BV3Qv83QXa/xx44QLtBVw07vIkSZPlN4ElqVEGgCQ1ygCQpEYZAJLUKANAkhplAEhSowwASWqUASBJjTIAJKlRBoAkNcoAkKRGGQCS1CgDQJIaZQBIUqMMAElqlAEgSY0yACSpUQaAJDXKAJCkRhkAktQoA0CSGmUASFKjDABJapQBIEmNMgAkqVEGgCQ1ygCQpEYZAJLUKANAkhq14gGQZHOSu5PsSXLpSi9fktSzogGQZB3wfuBs4GTggiQnr2QNkqSeld4DOB3YU1X3VtVfANuBc1e4BkkSkKpauYUlLwM2V9Vru8evAJ5fVRf39dkKbO0e/iJw9zIWeQzw3WVMPy3WNRrrGo11jeZwrOsXqurnBnU6YsyZjysLtD0mgapqG7BtIgtLbqmq2UnMa5KsazTWNRrrGk3Lda30IaC9wAl9j48HHljhGiRJrHwA3AxsTHJSkicD5wM7VrgGSRIrfAioqg4muRi4HlgHXFFVd05xkRM5lDQF1jUa6xqNdY2m2bpW9CSwJGnt8JvAktQoA0CSGvWED4AkL09yZ5K/SrLoJVOL/QRFd0L6K0nuSfKx7uT0JOo6OsnObr47k2xYoM+mJLf13f5vkvO6cVcm+VbfuFNXqq6u30/6lr2jr301t9epSb7cPd+3J/n1vnET216Dfq4kyVO6dd/TbYsT+8a9sWu/O8lZ49YwZl2/l+Tr3ba5Ickv9I1b8PlcwdpemeT/9NXw2r5xW7rn/Z4kW1awpvf21fONJN/rGze17ZXkiiQHktyxyPgkeV9X9+1Jntc3brLbqqqe0Dfgl+h9YWwXMLtIn3XAN4FnAU8G/gw4uRt3DXB+N/zHwOsnVNe/AS7thi8F/nBA/6OBB4G/0T2+EnjZFLbXUHUBjyzSvmrbC3g2sLEbfiawDzhqkttrqddKX5/fAv64Gz4f+Fg3fHLX/ynASd181k1o+wxT16a+18/r5+ta6vlcwdpeCfy7BaY9Gri3u9/QDW9YiZoO6f8GehelrMT2+gfA84A7Fhl/DvA5et+bOgP4yrS21RN+D6Cq7qqqQd8WXvAnKJIE+BXgE12/q4DzJlTaud38hp3vy4DPVdWPJrT8xYxa119b7e1VVd+oqnu64QeAA8DAbzuOaJifK+mv9RPAC7ttcy6wvaoerapvAXu6+a1IXVV1Y9/r5yZ637NZCcv5iZezgJ1V9WBVPQTsBDavQk0XAB+dwHIHqqov0vuwt5hzgQ9Xz03AUUmOZQrb6gkfAEM6DvhO3+O9XdvPAt+rqoOHtE/CTFXtA+junzGg//k8/gX4zm4X8L1JnrLCdT01yS1Jbpo/LMUa2l5JTqf3ye6bfc2T2F6LvVYW7NNti4fpbZthph3XqPN+Db1PkfMWej4nZdjaXto9P59IMv+F0Glts6Hn2x0qOwn4Ql/zNLfXIIvVPvFttdI/BTGWJJ8H/uYCo95cVdcOM4sF2mqJ9mXXNew8uvkcC5xC7/sR894I/G96b3LbgN8H3raCdf18VT2Q5FnAF5LsBr6/QL/V2l5/Amypqr/qmsfeXofOfoG2Q9dxKq+nAYaed5LfAGaBX+5rftzzWVXfXGj6KdX2n4GPVtWjSV5Hbw/qV4acdlo1zTsf+ERV/aSvbZrba5AVe309IQKgql60zFks9hMU36W3e3VE90lupJ+mWKquJPuTHFtV+7o3rANLzOqfAJ+uqr/sm/e+bvDRJP8R+OcrWVd3iIWqujfJLuC5wCdZ5e2V5GeAzwL/qts9np/32NvrEMP8XMl8n71JjgCeTm+Xfpo/dTLUvJO8iF6g/nJVPTrfvsjzOak3tIG1VdWf9z38IPCHfdPOHTLtrpWoqc/5wEX9DVPeXoMsVvvEt1Urh4AW/AmK6p1ZuZHe8XeALcAwexTD2NHNb5j5Pu74Y/cmOH/c/TxgwSsGplFXkg3zh1CSHAO8APj6am+v7rn7NL3jox8/ZNykttcwP1fSX+vLgC9022YHcH56VwmdBGwEvjpmHSPXleS5wL8HXlxVB/raF3w+J1TXsLUd2/fwxcBd3fD1wJldjRuAM3nsnvDUaurq+kV6J1S/3Nc27e01yA7gwu5qoDOAh7sPOJPfVtM6071SN+Al9JLxUWA/cH3X/kzgur5+5wDfoJfib+5rfxa9P9I9wMeBp0yorp8FbgDu6e6P7tpngf/Q1+9E4H7gpw6Z/gvAbnpvZB8B1q9UXcDf75b9Z939a9bC9gJ+A/hL4La+26mT3l4LvVboHU56cTf81G7d93Tb4ll90765m+5u4OwJv9YH1fX57m9gftvsGPR8rmBtfwDc2dVwI/C3+6Z9dbct9wCvWqmausdvBd51yHRT3V70Puzt617Le+mdr3kd8LpufOj946xvdsuf7Zt2otvKn4KQpEa1cghIknQIA0CSGmUASFKjDABJapQBIEmNMgAkqVEGgCQ16v8BrAeuSwUPU2AAAAAASUVORK5CYII=\n",
"text/plain": "<Figure size 432x288 with 1 Axes>"
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "%matplotlib inline\n\nn = 4\ncos = get_cos_sim_array(count, n)\nplt.hist(cos, bins)\nplt.title(f\"dim = ${n}$\")\nplt.grid()\nplt.show()",
"execution_count": 73,
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": "<Figure size 432x288 with 1 Axes>"
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "%matplotlib inline\n\nn = 5\ncos = get_cos_sim_array(count, n)\nplt.hist(cos, bins)\nplt.title(f\"dim = ${n}$\")\nplt.grid()\nplt.show()",
"execution_count": 74,
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": "<Figure size 432x288 with 1 Axes>"
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "%matplotlib inline\n\nn = 6\ncos = get_cos_sim_array(count, n)\nplt.hist(cos, bins)\nplt.title(f\"dim = ${n}$\")\nplt.grid()\nplt.show()",
"execution_count": 75,
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": "<Figure size 432x288 with 1 Axes>"
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "%matplotlib inline\n\nn = 7\ncos = get_cos_sim_array(count, n)\nplt.hist(cos, bins)\nplt.title(f\"dim = ${n}$\")\nplt.grid()\nplt.show()",
"execution_count": 76,
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": "<Figure size 432x288 with 1 Axes>"
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
]
},
{
"metadata": {
"scrolled": true,
"trusted": true
},
"cell_type": "code",
"source": "%matplotlib inline\n\nn = 8\ncos = get_cos_sim_array(count, n)\nplt.hist(cos, bins)\nplt.title(f\"dim = ${n}$\")\nplt.grid()\nplt.show()",
"execution_count": 77,
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": "<Figure size 432x288 with 1 Axes>"
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "%matplotlib inline\n\nn = 9\ncos = get_cos_sim_array(count, n)\nplt.hist(cos, bins)\nplt.title(f\"dim = ${n}$\")\nplt.grid()\nplt.show()",
"execution_count": 78,
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": "<Figure size 432x288 with 1 Axes>"
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "%matplotlib inline\n\nn = 10\ncos = get_cos_sim_array(count, n)\nplt.hist(cos, bins)\nplt.title(f\"dim = ${n}$\")\nplt.grid()\nplt.show()",
"execution_count": 79,
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": "<Figure size 432x288 with 1 Axes>"
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "%matplotlib inline\n\nn = 100\ncos = get_cos_sim_array(count, n)\nplt.hist(cos, bins)\nplt.title(f\"dim = ${n}$\")\nplt.xlim(-1, 1)\nplt.grid()\nplt.show()",
"execution_count": 81,
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": "<Figure size 432x288 with 1 Axes>"
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "%matplotlib inline\n\nn = 300\ncos = get_cos_sim_array(count, n)\nplt.hist(cos, bins)\nplt.title(f\"dim = ${n}$\")\nplt.xlim(-1, 1)\nplt.grid()\nplt.show()",
"execution_count": 82,
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": "<Figure size 432x288 with 1 Axes>"
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "%matplotlib inline\n\nn = 500\ncos = get_cos_sim_array(count, n)\nplt.hist(cos, bins)\nplt.title(f\"dim = ${n}$\")\nplt.xlim(-1, 1)\nplt.grid()\nplt.show()",
"execution_count": 83,
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": "<Figure size 432x288 with 1 Axes>"
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "%matplotlib inline\n\nn = 800\ncos = get_cos_sim_array(count, n)\nplt.hist(cos, bins)\nplt.title(f\"dim = ${n}$\")\nplt.xlim(-1, 1)\nplt.grid()\nplt.show()",
"execution_count": 84,
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": "<Figure size 432x288 with 1 Axes>"
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "%matplotlib inline\n\nn = 900\ncos = get_cos_sim_array(count, n)\nplt.hist(cos, bins)\nplt.title(f\"dim = ${n}$\")\nplt.xlim(-1, 1)\nplt.grid()\nplt.show()",
"execution_count": 85,
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAY4AAAEJCAYAAACDscAcAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAFhZJREFUeJzt3X+wXOV93/H315L5ESiWwLKKJVLBICuWTQIOgzX1TH0NDghILBJDI0KMcOloTHCdTpQ0Im7HrWOmODMuGVrHqRoUwOlYYBKKyo/RyIg7+TH8jm1kQUEXTIKMguoKFIRrYeFv/9jnuseX3bv7XO3eXZH3a2bnnvM8zzn73efuvZ97ztndG5mJJEm9esuwC5AkHV4MDklSFYNDklTF4JAkVTE4JElVDA5JUhWDQ5JUxeDQPxgRcVNEfK4s74iIsSGXJB2WDA79g5SZ78nM8WHWEBHvjohtEbEvIiYi4hcbfcdHxB0R8WpE/E1E/MqUbaftlwbJ4JCGICLmAncCdwHHA2uBP4mId5UhXwReAxYClwFfioj3NHbRrV8aGINDb1oRcUZE/HVEvBIRtwJHNfqei4gPN5Z/KyIeL3/B3xgRCyPi3rLt1yJifp/L+yngncD1mfl6Zm4D/gr4WEQcA3wU+HeZuT8z/xLYDHys1DttvzRoBofelCLiCOB/AF+m9Rf9V2n9su3ko8DPAe8CfgG4F/gd4O20fk4+Nc193RURL3e43dVpsw5t7y01vJ6ZTzf6vglMHlF065cGau6wC5AGZAXwVuD3s/VJnrdHxG9MM/4/Z+aLABHxF8CezPx6Wb8DOKfThpn58zOo738Be4DfiojrgQ8BHwTuB44F9k0Zvw/4R2W5W780UB5x6M3qncB38sc//vlvphn/YmP5/7ZZP7aPtZGZPwAuAi4E/g5YB9wG7AL2A8dN2eQ44JWy3K1fGiiDQ29Wu4FFEdE8JfSTg7ijci1kf4fbvZ22y8zHM/ODmXlCZp4HnAI8DDwNzI2IpY3hPwPsKMvd+qWBMjj0ZvUAcBD4VETMjYhfAs4axB1l5vmZeWyH2/mdtouIn46IoyLiJyLiN4ETgZsy81Xgz4DPRsQxEfEBYBWt6zV065cGzeDQm1Jmvgb8EnAF8BLwy7R+2Y6Sj9E6MtpD6xrKz2XmgdL3a8DRpe8rwFWZ2Tyi6NYvDUz4HwAlSTU84pAkVTE4JElVDA5JUhWDQ5JU5bB95/i8efPy1FNPHXYZ03r11Vc55phjhl1GV9bZX9bZX9bZP4899th3M3PBoe7nsA2OhQsX8uijjw67jGmNj48zNjY27DK6ss7+ss7+ss7+iYjpPj2hZ56qkiRVMTgkSVUMDklSFYNDklTF4JAkVTE4JElVDA5JUhWDQ5JUxeCQJFU5bN85Lg3LkvV3T9t/08rR/tgJ6VB5xCFJquIRh9Rn27+zjyumOSp57roLZ7Eaqf884pAkVTE4JElVDA5JUhWDQ5JUxeCQJFUxOCRJVQwOSVIVg0OSVMXgkCRVMTgkSVV6Do6ImBMRX4+Iu8r6yRHxUETsjIhbI+KI0n5kWZ8o/Usa+7imtD8VEec12leWtomIWN+/hydJ6reaI45fB55srH8euD4zlwIvAVeW9iuBlzLzVOD6Mo6IWA6sBt4DrAT+oITRHOCLwPnAcuDSMlaSNIJ6Co6IWAxcCPxRWQ/gbOD2MuRm4KKyvKqsU/rPKeNXAZsy80BmfhuYAM4qt4nMfDYzXwM2lbGSpBHU6xHH7wP/BvhhWT8BeDkzD5b1XcCisrwIeB6g9O8r43/UPmWbTu2SpBHU9WPVI+LngT2Z+VhEjE02txmaXfo6tbcLr2zTRkSsBdYCLFiwgPHx8c6Fj4D9+/ePfI1gnbXWnXZw2v6FR08/ZhQeA4zOfHZjnaOnl//H8QHgIxFxAXAUcBytI5B5ETG3HFUsBl4o43cBJwG7ImIu8DZgb6N9UnObTu0/JjM3ABsAli1blmNjYz2UPzzj4+OMeo1gnbWm+18b0AqNL2zv/KP13GVjfa5oZkZlPruxztHT9VRVZl6TmYszcwmti9vbMvMy4H7g4jJsDXBnWd5c1in92zIzS/vq8qqrk4GlwMPAI8DS8iqtI8p9bO7Lo5Mk9d2h/AfA3wY2RcTngK8DN5b2G4EvR8QErSON1QCZuSMibgOeAA4CV2fm6wAR8UlgCzAH2JiZOw6hLknSAFUFR2aOA+Nl+Vlar4iaOub7wCUdtr8WuLZN+z3APTW1SJKGw3eOS5KqGBySpCoGhySpisEhSapicEiSqhgckqQqBockqYrBIUmqYnBIkqoYHJKkKgaHJKmKwSFJqmJwSJKqGBySpCoGhySpisEhSapicEiSqhgckqQqBockqYrBIUmqYnBIkqoYHJKkKgaHJKmKwSFJqmJwSJKqGBySpCoGhySpisEhSapicEiSqhgckqQqBockqYrBIUmqYnBIkqoYHJKkKgaHJKmKwSFJqmJwSJKqGBySpCoGhySpStfgiIijIuLhiPhmROyIiP9Q2k+OiIciYmdE3BoRR5T2I8v6ROlf0tjXNaX9qYg4r9G+srRNRMT6/j9MSVK/9HLEcQA4OzN/BjgdWBkRK4DPA9dn5lLgJeDKMv5K4KXMPBW4vowjIpYDq4H3ACuBP4iIORExB/gicD6wHLi0jJUkjaCuwZEt+8vqW8stgbOB20v7zcBFZXlVWaf0nxMRUdo3ZeaBzPw2MAGcVW4TmflsZr4GbCpjJUkjaG4vg8pRwWPAqbSODp4BXs7Mg2XILmBRWV4EPA+QmQcjYh9wQml/sLHb5jbPT2l/f4c61gJrARYsWMD4+Hgv5Q/N/v37R75GsM5a6047OG3/wqOnHzMKjwFGZz67sc7R01NwZObrwOkRMQ+4A3h3u2Hla3To69Te7qgn27SRmRuADQDLli3LsbGx6QsfsvHxcUa9RrDOWlesv3va/nWnHeQL2zv/aD132VifK5qZUZnPbqxz9FS9qiozXwbGgRXAvIiY/OlYDLxQlncBJwGU/rcBe5vtU7bp1C5JGkG9vKpqQTnSICKOBj4MPAncD1xchq0B7izLm8s6pX9bZmZpX11edXUysBR4GHgEWFpepXUErQvom/vx4CRJ/dfLqaoTgZvLdY63ALdl5l0R8QSwKSI+B3wduLGMvxH4ckRM0DrSWA2QmTsi4jbgCeAgcHU5BUZEfBLYAswBNmbmjr49QklSX3UNjsx8HDijTfuztF4RNbX9+8AlHfZ1LXBtm/Z7gHt6qFeSNGS+c1ySVMXgkCRVMTgkSVUMDklSFYNDklTF4JAkVTE4JElVDA5JUhWDQ5JUxeCQJFUxOCRJVQwOSVIVg0OSVMXgkCRVMTgkSVUMDklSFYNDklTF4JAkVTE4JElVDA5JUhWDQ5JUxeCQJFUxOCRJVQwOSVIVg0OSVMXgkCRVMTgkSVUMDklSFYNDklTF4JAkVTE4JElVDA5JUhWDQ5JUxeCQJFUxOCRJVQwOSVIVg0OSVMXgkCRVMTgkSVW6BkdEnBQR90fEkxGxIyJ+vbQfHxFbI2Jn+Tq/tEdE3BARExHxeES8r7GvNWX8zohY02j/2YjYXra5ISJiEA9WknToejniOAisy8x3AyuAqyNiObAeuC8zlwL3lXWA84Gl5bYW+BK0ggb4DPB+4CzgM5NhU8asbWy38tAfmiRpELoGR2buzsy/LsuvAE8Ci4BVwM1l2M3ARWV5FXBLtjwIzIuIE4HzgK2ZuTczXwK2AitL33GZ+UBmJnBLY1+SpBEzt2ZwRCwBzgAeAhZm5m5ohUtEvKMMWwQ839hsV2mbrn1Xm/Z297+W1pEJCxYsYHx8vKb8Wbd///6RrxGss9a60w5O27/w6OnHjMJjgNGZz26sc/T0HBwRcSzwp8C/zsy/n+YyRLuOnEH7GxszNwAbAJYtW5ZjY2Ndqh6u8fFxRr1GsM5aV6y/e9r+dacd5AvbO/9oPXfZWJ8rmplRmc9urHP09PSqqoh4K63Q+O+Z+Wel+cVymonydU9p3wWc1Nh8MfBCl/bFbdolSSOol1dVBXAj8GRm/qdG12Zg8pVRa4A7G+2Xl1dXrQD2lVNaW4BzI2J+uSh+LrCl9L0SESvKfV3e2JckacT0cqrqA8DHgO0R8Y3S9jvAdcBtEXEl8LfAJaXvHuACYAL4HvBxgMzcGxG/CzxSxn02M/eW5auAm4CjgXvLTZI0groGR2b+Je2vQwCc02Z8Ald32NdGYGOb9keB93arRZI0fL5zXJJUxeCQJFUxOCRJVQwOSVIVg0OSVMXgkCRVMTgkSVUMDklSFYNDklTF4JAkVTE4JElVDA5JUhWDQ5JUxeCQJFUxOCRJVQwOSVIVg0OSVMXgkCRVMTgkSVUMDklSFYNDklTF4JAkVTE4JElVDA5JUhWDQ5JUxeCQJFUxOCRJVQwOSVIVg0OSVMXgkCRVMTgkSVUMDklSFYNDklTF4JAkVTE4JElVDA5JUhWDQ5JUxeCQJFXpGhwRsTEi9kTEtxptx0fE1ojYWb7OL+0RETdExEREPB4R72tss6aM3xkRaxrtPxsR28s2N0RE9PtBSpL6p5cjjpuAlVPa1gP3ZeZS4L6yDnA+sLTc1gJfglbQAJ8B3g+cBXxmMmzKmLWN7abelyRphHQNjsz8c2DvlOZVwM1l+Wbgokb7LdnyIDAvIk4EzgO2ZubezHwJ2AqsLH3HZeYDmZnALY19SZJG0NwZbrcwM3cDZObuiHhHaV8EPN8Yt6u0Tde+q017WxGxltbRCQsWLGB8fHyG5c+O/fv3j3yNYJ211p12cNr+hUdPP2YUHgOMznx2Y52jZ6bB0Um76xM5g/a2MnMDsAFg2bJlOTY2NoMSZ8/4+DijXiNYZ60r1t89bf+60w7yhe2df7Seu2yszxXNzKjMZzfWOXpm+qqqF8tpJsrXPaV9F3BSY9xi4IUu7YvbtEuSRtRMg2MzMPnKqDXAnY32y8urq1YA+8oprS3AuRExv1wUPxfYUvpeiYgV5dVUlzf2JUkaQV1PVUXEV4Ax4O0RsYvWq6OuA26LiCuBvwUuKcPvAS4AJoDvAR8HyMy9EfG7wCNl3Gczc/KC+1W0Xrl1NHBvuUmSRlTX4MjMSzt0ndNmbAJXd9jPRmBjm/ZHgfd2q0OSNBp857gkqYrBIUmqYnBIkqoYHJKkKgaHJKmKwSFJqmJwSJKqGBySpCoGhySpisEhSarS749Vlw5rS7p8ZLokg0Oadb2E03PXXTgLlUgz46kqSVIVg0OSVMXgkCRVMTgkSVUMDklSFYNDklTF4JAkVTE4JElVDA5JUhWDQ5JUxeCQJFUxOCRJVQwOSVIVg0OSVMXgkCRVMTgkSVUMDklSFYNDklTF4JAkVTE4JElVDA5JUhWDQ5JUxeCQJFUxOCRJVQwOSVIVg0OSVMXgkCRVGZngiIiVEfFURExExPph1yNJam8kgiMi5gBfBM4HlgOXRsTy4VYlSWpn7rALKM4CJjLzWYCI2ASsAp4YalV601my/u5hl9CTbnU+d92Fs1SJ9EajEhyLgOcb67uA908dFBFrgbVl9UBEfGsWajsUbwe+O+wiemCdffSpWagzPt+X3RwW84l19tOyfuxkVIIj2rTlGxoyNwAbACLi0cw8c9CFHYrDoUawzn6zzv6yzv6JiEf7sZ+RuMZB6wjjpMb6YuCFIdUiSZrGqATHI8DSiDg5Io4AVgObh1yTJKmNkThVlZkHI+KTwBZgDrAxM3d02WzD4Cs7ZIdDjWCd/Wad/WWd/dOXGiPzDZcSJEnqaFROVUmSDhMGhySpysgGR0RcEhE7IuKHEdHxJW6dPqqkXGh/KCJ2RsSt5aL7IOo8PiK2lvvZGhHz24z5UER8o3H7fkRcVPpuiohvN/pOH1adZdzrjVo2N9pHaT5Pj4gHyvPj8Yj45UbfQOez20fjRMSRZX4mynwtafRdU9qfiojz+llXZY2/ERFPlLm7LyL+SaOv7fd/SHVeERH/u1HPv2z0rSnPkZ0RsWbIdV7fqPHpiHi50Tcr8xkRGyNiT3R4b1u03FAew+MR8b5GX/1cZuZI3oB303qzyjhwZocxc4BngFOAI4BvAstL323A6rL8h8BVA6rz94D1ZXk98Pku448H9gI/UdZvAi6ehfnsqU5gf4f2kZlP4F3A0rL8TmA3MG/Q8znd860x5teAPyzLq4Fby/LyMv5I4OSynzlDqvFDjeffVZM1Tvf9H1KdVwD/pc22xwPPlq/zy/L8YdU5Zfy/ovXintmez38GvA/4Vof+C4B7ab1nbgXw0KHM5cgecWTmk5n5VJdhP/qoksx8DdgErIqIAM4Gbi/jbgYuGlCpq8r+e72fi4F7M/N7A6qnk9o6f2TU5jMzn87MnWX5BWAPsGBA9TS1fb5NGdOs/3bgnDJ/q4BNmXkgM78NTJT9zXqNmXl/4/n3IK33Tc22Xuayk/OArZm5NzNfArYCK0ekzkuBrwyolo4y889p/UHaySrglmx5EJgXEScyw7kc2eDoUbuPKlkEnAC8nJkHp7QPwsLM3A1Qvr6jy/jVvPGJdW05fLw+Io4cRJH0XudREfFoRDw4eTqNEZ7PiDiL1l+CzzSaBzWfnZ5vbceU+dpHa/562Xa2amy6ktZfopPaff8Hodc6P1q+l7dHxOSbhGdrLqvuq5zyOxnY1mierfnsptPjmNFcDvV9HBHxNeAft+n6dGbe2csu2rTlNO0zMl2dlfs5ETiN1vtVJl0D/B2tX34bgN8GPjvEOn8yM1+IiFOAbRGxHfj7NuNGZT6/DKzJzB+W5r7NZ7u7bNM2dR5m5Tk5jZ7vJyJ+FTgT+GCj+Q3f/8x8pt32s1Dn/wS+kpkHIuITtI7kzu5x236pua/VwO2Z+Xqjbbbms5u+Pi+HGhyZ+eFD3EWnjyr5Lq1Dsbnlr75D+giT6eqMiBcj4sTM3F1+ke2ZZlf/HLgjM3/Q2PfusnggIv4Y+M1h1llO/ZCZz0bEOHAG8KeM2HxGxHHA3cC/LYfek/vu23y20ctH40yO2RURc4G30TqFMFsfq9PT/UTEh2kF9Qcz88Bke4fv/yB+0XWtMzP/T2P1vwGTH+24Cxibsu143yv8//fV6/dtNXB1s2EW57ObTo9jRnN5uJ+qavtRJdm66nM/resJAGuAXo5gZmJz2X8v9/OG85/ll+PkdYSLgEF94m/XOiNi/uSpnYh4O/AB4IlRm8/yvb6D1jnbr07pG+R89vLROM36Lwa2lfnbDKyO1quuTgaWAg/3sbaea4yIM4D/CnwkM/c02tt+/wdQY691nthY/QjwZFneApxb6p0PnMuPH8XPap2l1mW0Li4/0GibzfnsZjNweXl11QpgX/kja2ZzORtX/GdyA36RVhoeAF4EtpT2dwL3NMZdADxNK8U/3Wg/hdYP5gTwVeDIAdV5AnAfsLN8Pb60nwn8UWPcEuA7wFumbL8N2E7rF9yfAMcOq07gn5Zavlm+XjmK8wn8KvAD4BuN2+mzMZ/tnm+0ToV9pCwfVeZnoszXKY1tP122ewo4f4A/O91q/Fr5mZqcu83dvv9DqvM/AjtKPfcDP9XY9l+UOZ4APj7MOsv6vweum7LdrM0nrT9Id5efi120rl19AvhE6Q9a/yzvmVLLmY1tq+fSjxyRJFU53E9VSZJmmcEhSapicEiSqhgckqQqBockqYrBIUmqYnBIkqr8P+yOKl1dYg3yAAAAAElFTkSuQmCC\n",
"text/plain": "<Figure size 432x288 with 1 Axes>"
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "%matplotlib inline\n\nn = 1000\ncos = get_cos_sim_array(count, n)\nplt.hist(cos, bins)\nplt.title(f\"dim = ${n}$\")\nplt.xlim(-1, 1)\nplt.grid()\nplt.show()",
"execution_count": 86,
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": "<Figure size 432x288 with 1 Axes>"
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "### 類似度[0, 1]の範囲だとどうなるか"
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "%matplotlib inline\n\nimport scipy as sp\nimport scipy.stats as stats\nimport scipy.spatial as spatial\nimport matplotlib.pyplot as plt\n\ndims = sp.array([2, 3, 4, 5, 6, 7, 8, 9, 10, 100])\nuniform = stats.uniform(0, 1)\ndef cos_sim(vec1, vec2):\n return 1 - spatial.distance.cosine(vec1, vec2)\n\ndef get_cos_sim_array(count, dim):\n cos = sp.zeros(count)\n for i in sp.arange(count):\n vec_1 = uniform.rvs(dim)\n vec_2 = uniform.rvs(dim)\n cos[i] = cos_sim(vec_1, vec_2)\n return cos\n\nn = 100000\nbins = sp.linspace(0, 1, 40+1)\nfig = plt.figure(figsize=(16, 12))\nfor i, d in enumerate(dims):\n cos = get_cos_sim_array(n, d)\n ax = fig.add_subplot(round(len(dims)/2), 2, i+1)\n h = ax.hist(cos, bins)\n print(\"h size:\", h)\n ax.set_title(f\"dim = ${d}$\", fontsize=20)\n ax.grid()\n \nplt.tight_layout()\nplt.savefig(\"cos_sim_0-1.png\")\nplt.show()",
"execution_count": 1,
"outputs": [
{
"output_type": "stream",
"text": "h size: (array([1.0000e+01, 5.0000e+01, 6.2000e+01, 1.2900e+02, 1.3900e+02,\n 1.9000e+02, 2.1500e+02, 2.4500e+02, 3.0200e+02, 3.1000e+02,\n 3.5900e+02, 4.1400e+02, 4.4900e+02, 5.1200e+02, 5.9400e+02,\n 5.8200e+02, 6.6600e+02, 7.0500e+02, 7.5600e+02, 8.3500e+02,\n 1.0090e+03, 1.0190e+03, 1.1750e+03, 1.2630e+03, 1.4440e+03,\n 1.5590e+03, 1.8600e+03, 1.9890e+03, 2.0900e+03, 2.4580e+03,\n 2.7820e+03, 3.1180e+03, 3.5760e+03, 4.0390e+03, 4.6840e+03,\n 5.2450e+03, 6.2150e+03, 7.5880e+03, 1.0813e+04, 2.8550e+04]), array([0. , 0.025, 0.05 , 0.075, 0.1 , 0.125, 0.15 , 0.175, 0.2 ,\n 0.225, 0.25 , 0.275, 0.3 , 0.325, 0.35 , 0.375, 0.4 , 0.425,\n 0.45 , 0.475, 0.5 , 0.525, 0.55 , 0.575, 0.6 , 0.625, 0.65 ,\n 0.675, 0.7 , 0.725, 0.75 , 0.775, 0.8 , 0.825, 0.85 , 0.875,\n 0.9 , 0.925, 0.95 , 0.975, 1. ]), <a list of 40 Patch objects>)\nh size: (array([0.000e+00, 9.000e+00, 2.100e+01, 3.600e+01, 6.000e+01, 8.000e+01,\n 1.210e+02, 1.580e+02, 1.900e+02, 2.260e+02, 2.690e+02, 3.360e+02,\n 4.350e+02, 4.980e+02, 5.710e+02, 6.770e+02, 7.800e+02, 8.590e+02,\n 9.710e+02, 1.135e+03, 1.314e+03, 1.437e+03, 1.653e+03, 1.801e+03,\n 2.061e+03, 2.473e+03, 2.634e+03, 3.066e+03, 3.506e+03, 3.763e+03,\n 4.300e+03, 4.868e+03, 5.379e+03, 5.722e+03, 6.481e+03, 6.908e+03,\n 7.574e+03, 8.281e+03, 9.107e+03, 1.024e+04]), array([0. , 0.025, 0.05 , 0.075, 0.1 , 0.125, 0.15 , 0.175, 0.2 ,\n 0.225, 0.25 , 0.275, 0.3 , 0.325, 0.35 , 0.375, 0.4 , 0.425,\n 0.45 , 0.475, 0.5 , 0.525, 0.55 , 0.575, 0.6 , 0.625, 0.65 ,\n 0.675, 0.7 , 0.725, 0.75 , 0.775, 0.8 , 0.825, 0.85 , 0.875,\n 0.9 , 0.925, 0.95 , 0.975, 1. ]), <a list of 40 Patch objects>)\nh size: (array([0.000e+00, 0.000e+00, 4.000e+00, 1.300e+01, 1.300e+01, 2.200e+01,\n 4.700e+01, 8.100e+01, 9.000e+01, 1.400e+02, 1.920e+02, 2.220e+02,\n 2.920e+02, 3.500e+02, 4.540e+02, 5.620e+02, 6.570e+02, 8.330e+02,\n 9.610e+02, 1.226e+03, 1.385e+03, 1.595e+03, 1.950e+03, 2.174e+03,\n 2.563e+03, 2.940e+03, 3.405e+03, 3.829e+03, 4.406e+03, 4.824e+03,\n 5.445e+03, 6.011e+03, 6.507e+03, 6.753e+03, 7.349e+03, 7.453e+03,\n 7.529e+03, 7.237e+03, 6.414e+03, 4.072e+03]), array([0. , 0.025, 0.05 , 0.075, 0.1 , 0.125, 0.15 , 0.175, 0.2 ,\n 0.225, 0.25 , 0.275, 0.3 , 0.325, 0.35 , 0.375, 0.4 , 0.425,\n 0.45 , 0.475, 0.5 , 0.525, 0.55 , 0.575, 0.6 , 0.625, 0.65 ,\n 0.675, 0.7 , 0.725, 0.75 , 0.775, 0.8 , 0.825, 0.85 , 0.875,\n 0.9 , 0.925, 0.95 , 0.975, 1. ]), <a list of 40 Patch objects>)\nh size: (array([0.000e+00, 0.000e+00, 0.000e+00, 2.000e+00, 3.000e+00, 6.000e+00,\n 2.900e+01, 3.100e+01, 4.900e+01, 7.800e+01, 1.080e+02, 1.200e+02,\n 1.810e+02, 2.540e+02, 3.760e+02, 4.190e+02, 5.650e+02, 7.280e+02,\n 8.920e+02, 1.146e+03, 1.365e+03, 1.593e+03, 1.932e+03, 2.324e+03,\n 2.782e+03, 3.325e+03, 3.869e+03, 4.533e+03, 5.129e+03, 5.799e+03,\n 6.351e+03, 6.978e+03, 7.454e+03, 7.823e+03, 7.826e+03, 7.412e+03,\n 6.855e+03, 5.777e+03, 4.162e+03, 1.724e+03]), array([0. , 0.025, 0.05 , 0.075, 0.1 , 0.125, 0.15 , 0.175, 0.2 ,\n 0.225, 0.25 , 0.275, 0.3 , 0.325, 0.35 , 0.375, 0.4 , 0.425,\n 0.45 , 0.475, 0.5 , 0.525, 0.55 , 0.575, 0.6 , 0.625, 0.65 ,\n 0.675, 0.7 , 0.725, 0.75 , 0.775, 0.8 , 0.825, 0.85 , 0.875,\n 0.9 , 0.925, 0.95 , 0.975, 1. ]), <a list of 40 Patch objects>)\nh size: (array([0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 8.000e+00,\n 6.000e+00, 1.300e+01, 2.100e+01, 4.200e+01, 4.500e+01, 8.300e+01,\n 1.030e+02, 1.910e+02, 2.510e+02, 3.340e+02, 4.290e+02, 5.870e+02,\n 7.810e+02, 9.880e+02, 1.230e+03, 1.537e+03, 2.080e+03, 2.443e+03,\n 2.950e+03, 3.506e+03, 4.170e+03, 5.023e+03, 5.675e+03, 6.542e+03,\n 7.123e+03, 7.815e+03, 8.053e+03, 8.260e+03, 8.039e+03, 7.346e+03,\n 6.075e+03, 4.746e+03, 2.750e+03, 7.550e+02]), array([0. , 0.025, 0.05 , 0.075, 0.1 , 0.125, 0.15 , 0.175, 0.2 ,\n 0.225, 0.25 , 0.275, 0.3 , 0.325, 0.35 , 0.375, 0.4 , 0.425,\n 0.45 , 0.475, 0.5 , 0.525, 0.55 , 0.575, 0.6 , 0.625, 0.65 ,\n 0.675, 0.7 , 0.725, 0.75 , 0.775, 0.8 , 0.825, 0.85 , 0.875,\n 0.9 , 0.925, 0.95 , 0.975, 1. ]), <a list of 40 Patch objects>)\nh size: (array([0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 2.000e+00, 3.000e+00,\n 0.000e+00, 6.000e+00, 7.000e+00, 2.200e+01, 3.000e+01, 3.300e+01,\n 6.600e+01, 1.250e+02, 1.460e+02, 2.390e+02, 3.260e+02, 4.400e+02,\n 6.240e+02, 8.120e+02, 1.072e+03, 1.463e+03, 1.901e+03, 2.406e+03,\n 3.078e+03, 3.751e+03, 4.519e+03, 5.408e+03, 6.301e+03, 7.158e+03,\n 8.015e+03, 8.444e+03, 8.842e+03, 8.677e+03, 8.148e+03, 6.830e+03,\n 5.366e+03, 3.673e+03, 1.727e+03, 3.400e+02]), array([0. , 0.025, 0.05 , 0.075, 0.1 , 0.125, 0.15 , 0.175, 0.2 ,\n 0.225, 0.25 , 0.275, 0.3 , 0.325, 0.35 , 0.375, 0.4 , 0.425,\n 0.45 , 0.475, 0.5 , 0.525, 0.55 , 0.575, 0.6 , 0.625, 0.65 ,\n 0.675, 0.7 , 0.725, 0.75 , 0.775, 0.8 , 0.825, 0.85 , 0.875,\n 0.9 , 0.925, 0.95 , 0.975, 1. ]), <a list of 40 Patch objects>)\nh size: (array([0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00,\n 0.000e+00, 1.000e+00, 5.000e+00, 1.000e+01, 1.300e+01, 2.700e+01,\n 3.000e+01, 7.000e+01, 1.130e+02, 1.730e+02, 2.380e+02, 3.820e+02,\n 5.230e+02, 7.480e+02, 1.040e+03, 1.383e+03, 1.854e+03, 2.419e+03,\n 2.943e+03, 3.945e+03, 4.876e+03, 5.711e+03, 6.715e+03, 7.835e+03,\n 8.623e+03, 9.160e+03, 9.289e+03, 8.821e+03, 7.984e+03, 6.291e+03,\n 4.706e+03, 2.808e+03, 1.107e+03, 1.570e+02]), array([0. , 0.025, 0.05 , 0.075, 0.1 , 0.125, 0.15 , 0.175, 0.2 ,\n 0.225, 0.25 , 0.275, 0.3 , 0.325, 0.35 , 0.375, 0.4 , 0.425,\n 0.45 , 0.475, 0.5 , 0.525, 0.55 , 0.575, 0.6 , 0.625, 0.65 ,\n 0.675, 0.7 , 0.725, 0.75 , 0.775, 0.8 , 0.825, 0.85 , 0.875,\n 0.9 , 0.925, 0.95 , 0.975, 1. ]), <a list of 40 Patch objects>)\nh size: (array([0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 0.000e+00, 1.000e+00,\n 0.000e+00, 0.000e+00, 3.000e+00, 2.000e+00, 5.000e+00, 1.300e+01,\n 1.800e+01, 4.900e+01, 7.200e+01, 1.100e+02, 1.700e+02, 2.800e+02,\n 4.290e+02, 6.370e+02, 8.740e+02, 1.213e+03, 1.682e+03, 2.327e+03,\n 3.189e+03, 3.919e+03, 4.992e+03, 6.176e+03, 7.150e+03, 8.288e+03,\n 9.273e+03, 9.730e+03, 9.660e+03, 9.043e+03, 7.737e+03, 5.861e+03,\n 4.127e+03, 2.176e+03, 7.220e+02, 7.200e+01]), array([0. , 0.025, 0.05 , 0.075, 0.1 , 0.125, 0.15 , 0.175, 0.2 ,\n 0.225, 0.25 , 0.275, 0.3 , 0.325, 0.35 , 0.375, 0.4 , 0.425,\n 0.45 , 0.475, 0.5 , 0.525, 0.55 , 0.575, 0.6 , 0.625, 0.65 ,\n 0.675, 0.7 , 0.725, 0.75 , 0.775, 0.8 , 0.825, 0.85 , 0.875,\n 0.9 , 0.925, 0.95 , 0.975, 1. ]), <a list of 40 Patch objects>)\nh size: (array([0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00,\n 0.0000e+00, 1.0000e+00, 0.0000e+00, 1.0000e+00, 1.0000e+00,\n 2.0000e+00, 5.0000e+00, 1.8000e+01, 2.6000e+01, 4.9000e+01,\n 9.1000e+01, 1.2800e+02, 2.0100e+02, 3.4600e+02, 5.5000e+02,\n 7.8500e+02, 1.0340e+03, 1.5910e+03, 2.2310e+03, 3.0180e+03,\n 3.9970e+03, 5.1820e+03, 6.4010e+03, 7.6690e+03, 8.9330e+03,\n 9.6950e+03, 1.0121e+04, 9.9780e+03, 9.2310e+03, 7.6470e+03,\n 5.4150e+03, 3.4730e+03, 1.6640e+03, 4.7900e+02, 3.7000e+01]), array([0. , 0.025, 0.05 , 0.075, 0.1 , 0.125, 0.15 , 0.175, 0.2 ,\n 0.225, 0.25 , 0.275, 0.3 , 0.325, 0.35 , 0.375, 0.4 , 0.425,\n 0.45 , 0.475, 0.5 , 0.525, 0.55 , 0.575, 0.6 , 0.625, 0.65 ,\n 0.675, 0.7 , 0.725, 0.75 , 0.775, 0.8 , 0.825, 0.85 , 0.875,\n 0.9 , 0.925, 0.95 , 0.975, 1. ]), <a list of 40 Patch objects>)\nh size: (array([0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00,\n 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00,\n 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00,\n 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00,\n 0.0000e+00, 0.0000e+00, 0.0000e+00, 2.0000e+00, 1.7000e+01,\n 1.5400e+02, 1.0400e+03, 4.8450e+03, 1.4448e+04, 2.7270e+04,\n 2.9661e+04, 1.7185e+04, 4.8320e+03, 5.2600e+02, 2.0000e+01,\n 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00, 0.0000e+00]), array([0. , 0.025, 0.05 , 0.075, 0.1 , 0.125, 0.15 , 0.175, 0.2 ,\n 0.225, 0.25 , 0.275, 0.3 , 0.325, 0.35 , 0.375, 0.4 , 0.425,\n 0.45 , 0.475, 0.5 , 0.525, 0.55 , 0.575, 0.6 , 0.625, 0.65 ,\n 0.675, 0.7 , 0.725, 0.75 , 0.775, 0.8 , 0.825, 0.85 , 0.875,\n 0.9 , 0.925, 0.95 , 0.975, 1. ]), <a list of 40 Patch objects>)\n",
"name": "stdout"
},
{
"output_type": "display_data",
"data": {
"text/plain": "<Figure size 1152x864 with 10 Axes>",
"image/png": "iVBORw0KGgoAAAANSUhEUgAABHgAAANYCAYAAAC/+Vr7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzs3X243WV95/v3R1CkWAWkphSYhraxI8rlUy7AOtPuSosRexp7Lm3pdDRQnHRa8KGTzgitc3BUOnimlmofcNJCEzxqoNQOORWlFNlj2yPIg1YEqqSYQiCFKpASrWLwe/5Yd2QR1k7Wyt5r//ba+/26rnWtte7f/fute33Z2fvm+7sfUlVIkiRJkiRpcj2l6wZIkiRJkiRpdkzwSJIkSZIkTTgTPJIkSZIkSRPOBI8kSZIkSdKEM8EjSZIkSZI04UzwSJIkSZIkTTgTPJLmRJKtSbb2vV+epJJs6K5VkiRJs2c/R9IkMMEjSSNK8uwkb0zyZ0m2JPmXJDuS/HWSM5P4u1WSJE2sJO9Jcm2Se1o/58Ekn01yXpJnd90+SYOlqrpug6RFYPddrapa3t4/FfhBYEdVbe+uZXMvyX8ELgK2A9cBdwPLgP8TeBbwp8Dryl+wkiQtCkupnwOQ5FHgFuB24AHgEOAkYCVwH3BSVd3TXQslDWKCR9Kc2LPjs5gleQW9js7HqurbfeXfC3wGOAZ4bVX9aUdNlCRJc2gp9XMAkjy9qr4xoPx84NeBi6rqV+a/ZZL2xmkEkoaWnrOT3JbkG0nuTfJ7SZ41oO7Auen95Ul+MMkVSb6a5JEkf5HkBa3e9yRZn2R7+6wbk/z4PH3VvaqqT1bV/9uf3Gnl/wh8oL2dmveGSZKk/WY/53GDkjvN5e15xXy1RdLwDuy6AZImyu8Ab6Y3NWk98C1gNXAi8DTg0RGutRy4AbgD2NDe/wwwneRlwCeAfwYuAw4HTgM+nuS5VXX37L/K2HyrPe/qtBWSJGlU9nP27f9oz5/vtBWSBjLBI2koSX6EXqfn74ETqurBVv4b9NahORL4hxEu+WPA26vq/L7P+K/AO+l1iC4HfmX3KJkk1wCXAr/aHsO0+a3AoSO06XNV9b9GqL/n5x0IvKG9/cT+XkeSJM0v+zkzfsavAc+gt8bgSuDf0EvuXDDKdSTNDxM8koZ1Rns+f3enB3pDeJOcS6/zM4qtPLlzsJFex+cg4D/vMQXqw8AlwItG+Iy3At8/Qv2NwH4neOh9nxcAV1XV1bO4jiRJml/2cwb7NXobSez2CeD0qvqnEa8jaR6Y4JE0rJe05/894NhfMfqUpM9V1WN7lN3Xnr9UVY/0H6iqx5LcDxw97AfM50KISd4MrAP+Dnj9fH2uJEmaE/ZzBn/G9wIkWQb8CL2k1WeT/FRV3TLuz5c0GhdZljSs3QsM3r/ngdaB+eqI19sx4Dq7ZjrW7AKeOuLnjF2Ss4D30dtK9Mf77/xJkqSJYD9nL6rq/qr6M+AU4Nn0ppNJWmAcwSNpWLs7I8uAu/oPJDmA3h/7e+e7UXszT3PT3wpcCHwBOLmqHhjlfEmStCDYzxlCVf1DktuBFyU5oqq+MpvrSZpbJngkDesWesOXf4w9Oj7Av2Vh/j4Z69z0JG+jN1T5c8BP2smRJGli2c8Z3ve15z2noEnqmFO0JA1rQ3v+jSSH7y5M8nTgv3fSon2oquVVlREepw977bYTxgXAzfRG7pjckSRpcm1oz0u+n5PkXyf53gHlT0lyPvAc4P+rqofm+CtJmqWFmImWtABV1d8k+V3gTcAXklwBfAtYDTwEbO+yffMpyRp6u2A8Rm/hxTcn2bPa1qraMM9NkyRJ+8F+zhOsAv5Hkk/R2zb+q/Smrv0Y8APAPwL/obvmSZqJCR5Jo3gL8CXgLOCX6P3B/zPg14G/7bBd8+3Y9nwAveHRg/xvHr8bKEmSFj77OT1/CawHXg68kN46P1+jF5sPAu93QwlpYUpVdd0GSZIkSZIkzYJr8EiSJEmSJE24fSZ4kjw9yWeS/G2S25L8t1Z+bJIbktyZ5LIkT2vlB7X3W9rx5X3XOreVfzHJK/vKV7WyLUnOmfuvKUmSJEmStHgNM4Lnm8ArquqFwIuAVUlOAt4DXFhVK+gtPHZmq38m8FBV/RBwYatHkuOA04Dn01u46w+SHJDkAOD3gVcBxwE/3+pKkiRJkiRpCPtM8FTPzvb2qe1RwCuAK1r5RuA17fXq9p52/OT0tpdZDWyqqm9W1ZeBLcAJ7bGlqu6qqkeBTa2uJEmSJEmShjDULlptlM3NwA/RG23z98DDVbWrVdkGHNVeHwXcA1BVu5LsAJ7dyq/vu2z/OffsUX7iDO1YC6wFOPjgg196zDHHDNP8kX3729/mKU9xeaL5Zty7Y+y7Ydy7Ydy7Me64f+lLX/pKVX3P2D5gnh1xxBG1fPnysV3/a1/7GocccsjYrq/BjHs3jHs3jHt3jH03xhn3m2++eah+zlAJnqp6DHhRkkPpbRX4vEHV2nNmODZT+aDe3sCtvapqPb0t+1i5cmXddNNN+2j5/pmenmZqamos19bMjHt3jH03jHs3jHs3xh33JP8wtot3YPny5YyrnwP+O+iKce+Gce+Gce+Ose/GOOM+bD9npFtpVfUwMA2cBByaZHeC6GjgvvZ6G3BMa8SBwLOAB/vL9zhnpnJJkiRJkiQNYZhdtL6njdwhycHATwB3ANcBr23V1gBXtteb23va8U9WVbXy09ouW8cCK4DPADcCK9quXE+jtxDz5rn4cpIkSZIkSUvBMFO0jgQ2tnV4ngJcXlV/nuR2YFOSdwOfBS5u9S8GPphkC72RO6cBVNVtSS4Hbgd2AWe1qV8kORu4GjgAuKSqbpuzbyhJkiRJkrTI7TPBU1WfB148oPwuejtg7Vn+DeB1M1zrfOD8AeVXAVcN0V5JkiRJkiTtYahFliVJkvotP+djI9XfsGrh7uaR5BLgp4AHquoFrexw4DJgObAV+NmqeihJgPcBpwJfB06vqlvaOWuAt7fLvruqNrbylwIbgIPp3dB6S5u+LkmSFqhJ7Ou4T6wkSVrqNgCr9ig7B7i2qlYA17b3AK+it47gCmAtcBF8JyF0HnAivRHO5yU5rJ1zUau7+7w9P0uSJGnWTPBIkqQlrao+RW/dwH6rgY3t9UbgNX3ll1bP9fR2FT0SeCVwTVU9WFUPAdcAq9qxZ1bVp9uonUv7riVJkjRnnKIlSZL0ZMuqajtAVW1P8pxWfhRwT1+9ba1sb+XbBpQ/SZK19Eb6sGzZMqanp2f/LWawc+fOsV5fgxn3bhj3bhj37hj7ubHu+F0j1V8IcTfBI0mSNLwMKKv9KH9yYdV6YD3AypUra2pqaj+buG/T09OM8/oazLh3w7h3w7h3x9jPjdP3Yw2eruPuFC1JkqQnu79Nr6I9P9DKtwHH9NU7GrhvH+VHDyiXJEmaUyZ4JEmSnmwzsKa9XgNc2Vf+hvScBOxoU7muBk5JclhbXPkU4Op27JEkJ7UduN7Qdy1JkqQ54xQtSZK0pCX5CDAFHJFkG73dsC4ALk9yJnA38LpW/Sp6W6RvobdN+hkAVfVgkncBN7Z676yq3Qs3/zKPb5P+8faQJEmaUyZ4JEnSklZVPz/DoZMH1C3grBmucwlwyYDym4AXzKaNkiRJ++IULUmSJEmSpAlngkeSJEmSJGnC7TPBk+SYJNcluSPJbUne0srfkeTeJJ9rj1P7zjk3yZYkX0zyyr7yVa1sS5Jz+sqPTXJDkjuTXJbkaXP9RSVJkiRJkharYUbw7ALWVdXzgJOAs5Ic145dWFUvao+rANqx04DnA6uAP0hyQJIDgN8HXgUcB/x833Xe0661AngIOHOOvp8kSZIkSdKit89Fltv2ntvb60eS3AEctZdTVgObquqbwJeTbAFOaMe2VNVdAEk2Aavb9V4B/LtWZyPwDuCi0b+OJEmSJEnSEy0/52NdN2HsRlqDJ8ly4MXADa3o7CSfT3JJksNa2VHAPX2nbWtlM5U/G3i4qnbtUS5JkiRJkqQhDL1NepJnAH8KvLWq/jnJRcC7gGrP7wV+EciA04vByaTaS/1BbVgLrAVYtmwZ09PTwzZ/JDt37hzbtTUz494dY98N494N4z431h2/a9+V+hh3SZKk8RoqwZPkqfSSOx+qqo8CVNX9fcf/EPjz9nYbcEzf6UcD97XXg8q/Ahya5MA2iqe//hNU1XpgPcDKlStrampqmOaPbHp6mnFdWzMz7t0x9t0w7t0w7nPj9BGHOW9YdYhxlyRJGqNhdtEKcDFwR1X9dl/5kX3Vfgb4Qnu9GTgtyUFJjgVWAJ8BbgRWtB2znkZvIebNVVXAdcBr2/lrgCtn97UkSZIkSZKWjmFG8LwceD1wa5LPtbJfp7cL1ovoTafaCvwSQFXdluRy4HZ6O3CdVVWPASQ5G7gaOAC4pKpua9d7G7ApybuBz9JLKEmSJEmSJGkIw+yi9dcMXifnqr2ccz5w/oDyqwad13bWOmHPckmSJEmSJO3bSLtoSZIkSZIkaeExwSNJkiRJkjThht4mXZIkaalJ8qvAG+mtOXgrcAZwJLAJOBy4BXh9VT2a5CDgUuClwFeBn6uqre065wJnAo8Bb66qq+f5q0iStKgsH3FHz6XAETySJEkDJDkKeDOwsqpeQG+TiNOA9wAXVtUK4CF6iRva80NV9UPAha0eSY5r5z0fWAX8QZID5vO7SJKkxc8EjyRJ0swOBA5OciDwXcB24BXAFe34RuA17fXq9p52/OQkaeWbquqbVfVlYAtuLiFJkuaYCR5JkqQBqupe4LeAu+kldnYANwMPV9WuVm0bcFR7fRRwTzt3V6v/7P7yAedIkiTNCdfgkSRJGiDJYfRG3xwLPAz8CfCqAVVr9ykzHJupfM/PWwusBVi2bBnT09OjN3pIO3fuHOv1NZhx74Zx74Zx785Sif2643ftu9I8WghxN8EjSZI02E8AX66qfwJI8lHgR4BDkxzYRukcDdzX6m8DjgG2tSldzwIe7Cvfrf+c76iq9cB6gJUrV9bU1NQ4vhMA09PTjPP6Gsy4d8O4d8O4d2epxP70BbbI8oZVh3Qed6doSZIkDXY3cFKS72pr6ZwM3A5cB7y21VkDXNleb27vacc/WVXVyk9LclCSY4EVwGfm6TtIkqQlwhE8kiRJA1TVDUmuoLcV+i7gs/RG2HwM2JTk3a3s4nbKxcAHk2yhN3LntHad25JcTi85tAs4q6oem9cvI0mSFj0TPJIkSTOoqvOA8/YovosBu2BV1TeA181wnfOB8+e8gZIkLSLLF9i0q0njFC1JkiRJkqQJt88ET5JjklyX5I4ktyV5Sys/PMk1Se5sz4e18iR5f5ItST6f5CV911rT6t+ZZE1f+UuT3NrOeX+b5y5JkiRJkqQhDDOCZxewrqqeB5wEnJXkOOAc4NqqWgFc295Db/vQFe2xFrgIegkhekOcT6Q3rPm83UmhVmdt33mrZv/VJEmSJEmSloZ9JniqantV3dJePwLcARwFrAY2tmobgde016uBS6vnenpbiR4JvBK4pqoerKqHgGuAVe3YM6vq022niUv7riVJkiRJkqR9GGmR5STLgRcDNwDLqmo79JJASZ7Tqh0F3NN32rZWtrfybQPKB33+WnojfVi2bBnT09OjNH9oO3fuHNu1NTPj3h1j3w3j3g3jPjfWHb9rpPrGXZIkabyGTvAkeQbwp8Bbq+qf97JMzqADtR/lTy6sWk9ve1JWrlxZU1NT+2j1/pmenmZc19bMjHt3jH03jHs3jPvcOH3EXS42rDrEuEuSJI3RULtoJXkqveTOh6rqo634/ja9ivb8QCvfBhzTd/rRwH37KD96QLkkSZIkSZKGsM8RPG1Hq4uBO6rqt/sObQbWABe05yv7ys9Osonegso72hSuq4Hf7FtY+RTg3Kp6MMkjSU6iN/XrDcDvzsF3kyRJkiRJHVk+4ohfzc4wU7ReDrweuDXJ51rZr9NL7Fye5EzgbuB17dhVwKnAFuDrwBkALZHzLuDGVu+dVfVge/3LwAbgYODj7SFJkiRJkqQh7DPBU1V/zeB1cgBOHlC/gLNmuNYlwCUDym8CXrCvtkiSJEmSJOnJhlqDR5IkSZIkSQuXCR5JkiRJkqQJN/Q26ZIkSZIkaely0eSFzRE8kiRJkiRJE84EjyRJ0gySHJrkiiR/l+SOJC9LcniSa5Lc2Z4Pa3WT5P1JtiT5fJKX9F1nTat/Z5I13X0jSZK0WJngkSRJmtn7gE9U1b8GXgjcAZwDXFtVK4Br23uAVwEr2mMtcBFAksOB84ATgROA83YnhSRJkuaKCR5JkqQBkjwT+FHgYoCqerSqHgZWAxtbtY3Aa9rr1cCl1XM9cGiSI4FXAtdU1YNV9RBwDbBqHr+KJElaAlxkWZIkabAfAP4J+OMkLwRuBt4CLKuq7QBVtT3Jc1r9o4B7+s7f1spmKn+CJGvpjfxh2bJlTE9Pz+mX6bdz586xXl+DGfduGPduGPfujDP2647fNZbrLgYL4WfeBI8kSdJgBwIvAd5UVTckeR+PT8caJAPKai/lTyyoWg+sB1i5cmVNTU2N3OBhTU9PM87razDj3g3j3g3j3p1xxv50d9Ga0YZVh3T+M+8ULUmSpMG2Aduq6ob2/gp6CZ/729Qr2vMDffWP6Tv/aOC+vZRLkiTNGUfwSJIkDVBV/5jkniQ/XFVfBE4Gbm+PNcAF7fnKdspm4Owkm+gtqLyjTeG6GvjNvoWVTwHOnc/vIknSIMsdkbOo7HMET5JLkjyQ5At9Ze9Icm+Sz7XHqX3Hzm3bg34xySv7yle1si1JzukrPzbJDW3b0MuSPG0uv6AkSdIsvAn4UJLPAy8CfpNeYucnk9wJ/GR7D3AVcBewBfhD4FcAqupB4F3Aje3xzlYmSZI0Z4YZwbMB+D3g0j3KL6yq3+ovSHIccBrwfOD7gL9M8tx2+PfpdYK2ATcm2VxVtwPvadfalOQDwJm0bUUlSZK6VFWfA1YOOHTygLoFnDXDdS4BLpnb1kmSJD1unyN4qupTwLB3mVYDm6rqm1X1ZXp3sE5ojy1VdVdVPQpsAlYnCfAKenPa4YlbjUqSJEmSJGkIs1mD5+wkbwBuAtZV1UP0tvy8vq9O/zage24PeiLwbODhqto1oP6TzNf2oQthe7OlyLh3x9h3w7h3w7jPjVG3STXukiTNj1vv3eFuV0vU/iZ4LqI3l7za83uBX2TmbUAHjRQaetvQ7xyYp+1D3dKvG8a9O8a+G8a9G8Z9bozacVwIW4dKkiQtZvuV4Kmq+3e/TvKHwJ+3t3vbBnRQ+VeAQ5Mc2EbxuG2oJEmSJEnSiPa5Bs8gSY7se/szwO4dtjYDpyU5KMmxwArgM/R2jFjRdsx6Gr2FmDe3xQivA17bzu/falSSJEmSJElD2OcIniQfAaaAI5JsA84DppK8iN50qq3ALwFU1W1JLgduB3YBZ1XVY+06ZwNXAwcAl1TVbe0j3gZsSvJu4LPAxXP27SRJkiRJkpaAfSZ4qurnBxTPmISpqvOB8weUXwVcNaD8Lnq7bEmSJEmSJGk/zGYXLUmSJEmSNEbLR9zYYN3xY2qIFrz9WoNHkiRJkiRJC4cJHkmSJEmSpAlngkeSJEmSJGnCmeCRJEmSJEmacCZ4JEmSJEmSJpwJHkmSJEmSpAnnNumSJEl7keQA4Cbg3qr6qSTHApuAw4FbgNdX1aNJDgIuBV4KfBX4uara2q5xLnAm8Bjw5qq6ev6/iSRpIRh123NpWI7gkSRJ2ru3AHf0vX8PcGFVrQAeope4oT0/VFU/BFzY6pHkOOA04PnAKuAPWtJIkiRpzpjgkSRJmkGSo4FXA3/U3gd4BXBFq7IReE17vbq9px0/udVfDWyqqm9W1ZeBLcAJ8/MNJEnSUuEULUmSpJn9DvBfgO9u758NPFxVu9r7bcBR7fVRwD0AVbUryY5W/yjg+r5r9p/zHUnWAmsBli1bxvT09Jx+kX47d+4c6/U1mHHvhnHvhnGf2brjd+270iwsO3j8n6EnWwg/8/tM8CS5BPgp4IGqekErOxy4DFgObAV+tqoeanep3gecCnwdOL2qbmnnrAHe3i777qra2MpfCmwADgauAt5SVTVH30+SJA3JNQGeKMnu/s/NSaZ2Fw+oWvs4trdzHi+oWg+sB1i5cmVNTU3tWWXOTE9PM87razDj3g3j3g3jPrPTx/z3dt3xu3jvrY7lmG8bVh3S+c/8MFO0NtCbL97vHODaNvf82vYe4FXAivZYC1wE30kInQecSG9I8nlJDmvnXNTq7j5vz8+SJEnqwsuBn06yld6iyq+gN6Ln0CS7e85HA/e119uAYwDa8WcBD/aXDzhHkiRpTuwzrVdVn0qyfI/i1cBUe70RmAbe1sovbSNwrk9yaJIjW91rqupBgCTXAKuSTAPPrKpPt/JL6c1j//hsvpQkSdJsVdW5wLkAbQTPr1XVLyT5E+C19JI+a4Ar2ymb2/tPt+OfrKpKshn4cJLfBr6P3g2tz8znd5EkjY8jYLVQ7O+4rWVVtR2gqrYneU4r/87c82b3HPO9lW8bUC5JkrRQvQ3YlOTdwGeBi1v5xcAHk2yhN3LnNICqui3J5cDtwC7grKp6bP6bLUmSFrO5npg36tzzoeakf+fi87T44EJYHGkpMu7dMfbdMO7dMO4zG+eCjJMe96qapjdimaq6iwG7YFXVN4DXzXD++cD542uhJEla6vY3wXN/kiPb6J0jgQda+UxzzLfx+JSu3eXTrfzoAfUHmq/FB10QrBvGvTvGvhvGvRvGfWbjXPRxISw8KEnSMJxypUk1zCLLg+yeYw5Pnnv+hvScBOxoU7muBk5JclhbXPkU4Op27JEkJ7UduN7Qdy1JkiRJkiQNYZht0j9Cb/TNEUm20dsN6wLg8iRnAnfz+HDkq+htkb6F3jbpZwBU1YNJ3gXc2Oq9c/eCy8Av8/g26R/HBZYlSZIkSZJGMswuWj8/w6GTB9Qt4KwZrnMJcMmA8puAF+yrHZIkSZIkSRpsrhdZliRJkiRpQXFdHS0F+7sGjyRJkiRJkhYIEzySJEmSJEkTzgSPJEmSJEnShHMNHkmSFinXG5AkSVo6TPBIkiRJkiaKNzGkJ3OKliRJkiRJ0oRzBI8kSZIkqVOOyJFmzxE8kiRJkiRJE84EjyRJ0gBJjklyXZI7ktyW5C2t/PAk1yS5sz0f1sqT5P1JtiT5fJKX9F1rTat/Z5I1XX0nSZK0eDlFS5KkCeHw9Xm3C1hXVbck+W7g5iTXAKcD11bVBUnOAc4B3ga8CljRHicCFwEnJjkcOA9YCVS7zuaqemjev5EkSVq0HMEjSZI0QFVtr6pb2utHgDuAo4DVwMZWbSPwmvZ6NXBp9VwPHJrkSOCVwDVV9WBL6lwDrJrHryJJkpaAWY3gSbIVeAR4DNhVVSvbXarLgOXAVuBnq+qhJAHeB5wKfB04fXenqQ1Vfnu77LuraiOSJEkLRJLlwIuBG4BlVbUdekmgJM9p1Y4C7uk7bVsrm6lckhatW+/dwemOPJXm1VxM0frxqvpK3/tzcNiyJElaJJI8A/hT4K1V9c+9e1aDqw4oq72U7/k5a4G1AMuWLWN6enq/2juMnTt3jvX6Gsy4d8O4d2PZwbDu+F1dN2NJMvbdWAi/a8axBs9qYKq93ghM00vwfGfYMnB9kt3Dlqdow5YB2tz2VcBHxtA2SZIWDNfUWfiSPJVecudDVfXRVnx/kiPb6J0jgQda+TbgmL7Tjwbua+VTe5RP7/lZVbUeWA+wcuXKmpqa2rPKnJmenmac19dgxr0bxr0bv/uhK3nvrS752oV1x+8y9h3YsOqQzn/XzPa/egF/kaSA/9k6JmMbtjxfd7YWQuZtKTLu3TH23TDu3VhIcV9Kd9cWUtyH1aaXXwzcUVW/3XdoM7AGuKA9X9lXfnaSTfRGK+9ofaGrgd/cvdsWcApw7nx8B0maS6PcmFh3/BgbImmg2SZ4Xl5V97UkzjVJ/m4vdWc1bBnm786WWf5uGPfuGPtuGPdujDPuo4/IWTp31xbCXa398HLg9cCtST7Xyn6dXmLn8iRnAncDr2vHrqK31uAWeusNngFQVQ8meRdwY6v3zt0jlyVJkubKrHqWVXVfe34gyZ8BJzCmYcuSJEnzqar+msE3ogBOHlC/gLNmuNYlwCVz1zpJmj2nCkuLy35vk57kkCTfvfs1veHGX+DxYcvw5GHLb0jPSbRhy8DVwClJDmtDl09pZZIkSZIkSRrCbEbwLAP+rO0kcSDw4ar6RJIbcdiyJGmR8O6mJGlS+DdLWtr2O8FTVXcBLxxQ/lUctixJkiRJs2LCRtIols7qjpIkAbfeu4PT7TBLkiRpkTHBI0mSJEnzwBE5ksbJBI8kaaKN2lled/yYGiJJkiR1yASPJGlB8e6mJGmS+HdL0kJhgkeSNHZ2fiVJkqTxMsEjSZIkadFycX1JS4UJHkmSI2wkSZKkCWeCR5IWIRM2kqTFysX1JWkwEzyS1BGHjEuS1OONCUmaPRM8kjSDcXc2vaMoSZoUJmAkaeEzwSNpotnhlCRpdP79lKTFZ8EkeJKsAt4HHAD8UVVd0HGTJA1gh1CS9o99HY2bf6MlaWlbEAmeJAcAvw/8JLANuDHJ5qq6vduWScOZ9A7VuuN3uRaMJI2RfZ3FafTFfv17K0kanwWR4AFOALZU1V0ASTYBqwE7PWO2kBITdnokSYuYfZ2OLKS+jiRJ45Sq6roNJHktsKqq3tjevx44sarO3qPeWmBte/vDwBfH1KQjgK+M6dqamXHvjrHvhnHvhnHvxrjj/v1V9T1jvP6sDNPXmcd+DvjvoCvGvRvGvRvGvTvGvhvjjPtQ/ZyFMoInA8qelHmqqvXA+rE3JrmpqlaO+3P0RMa9O8a+G8a9G8a9G8Z9332d+erngP89umLcu2Hcu2Hcu2Psu7EQ4v6ULj+8zzbgmL73RwP3ddQWSZKkuWZfR5IkjdVCSfDcCKxIcmySpwGnAZs7bpMkSdJcsa8jSZLGakFM0aqqXUnOBq6mt3XoJVV1W4dNmpfh0XoS494dY98N494N496NJR13+zpqjHv9EgJAAAAgAElEQVQ3jHs3jHt3jH03Oo/7glhkWZIkSZIkSftvoUzRkiRJkiRJ0n4ywSNJkiRJkjThlnSCJ8mqJF9MsiXJOQOOH5Tksnb8hiTL57+Vi88Qcf9PSW5P8vkk1yb5/i7audjsK+599V6bpJK4teIcGCbuSX62/czfluTD893GxWqI3zX/Ksl1ST7bft+c2kU7F5MklyR5IMkXZjieJO9v/00+n+Ql893Gpca+Tjfs63TDvk437Ot0w35ONxZ8X6eqluSD3gKHfw/8APA04G+B4/ao8yvAB9rr04DLum73pD+GjPuPA9/VXv+ycZ+fuLd63w18CrgeWNl1uyf9MeTP+wrgs8Bh7f1zum73YngMGfv1wC+318cBW7tu96Q/gB8FXgJ8YYbjpwIfBwKcBNzQdZsX88O+zoKOu32dDuLe6tnXmee429fpLO72c8YT+wXd11nKI3hOALZU1V1V9SiwCVi9R53VwMb2+grg5CSZxzYuRvuMe1VdV1Vfb2+vB46e5zYuRsP8vAO8C/i/gW/MZ+MWsWHi/h+A36+qhwCq6oF5buNiNUzsC3hme/0s4L55bN+iVFWfAh7cS5XVwKXVcz1waJIj56d1S5J9nW7Y1+mGfZ1u2Nfphv2cjiz0vs5STvAcBdzT935bKxtYp6p2ATuAZ89L6xavYeLe70x6GVDNzj7jnuTFwDFV9efz2bBFbpif9+cCz03yN0muT7Jq3lq3uA0T+3cA/z7JNuAq4E3z07QlbdS/AZod+zrdsK/TDfs63bCv0w37OQtXp32dA+frgxagQXen9twzfpg6Gs3QMU3y74GVwI+NtUVLw17jnuQpwIXA6fPVoCVimJ/3A+kNXZ6idwf3r5K8oKoeHnPbFrthYv/zwIaqem+SlwEfbLH/9vibt2T5d3V+2dfphn2dbtjX6YZ9nW7Yz1m4Ov27upRH8GwDjul7fzRPHrb2nTpJDqQ3tG1vw7G0b8PEnSQ/AfwG8NNV9c15attitq+4fzfwAmA6yVZ680U3u/jgrA37e+bKqvpWVX0Z+CK9TpBmZ5jYnwlcDlBVnwaeDhwxL61buob6G6A5Y1+nG/Z1umFfpxv2dbphP2fh6rSvs5QTPDcCK5Icm+Rp9BYW3LxHnc3Amvb6tcAnq62cpP22z7i34bP/k16Hxzm6c2Ovca+qHVV1RFUtr6rl9NYD+Omquqmb5i4aw/ye+V/0FtskyRH0hjHfNa+tXJyGif3dwMkASZ5Hr+PzT/PayqVnM/CGtsPEScCOqtredaMWMfs63bCv0w37Ot2wr9MN+zkLV6d9nSU7RauqdiU5G7ia3irkl1TVbUneCdxUVZuBi+kNZdtC727Wad21eHEYMu7/A3gG8Cdtnce7q+qnO2v0IjBk3DXHhoz71cApSW4HHgP+c1V9tbtWLw5Dxn4d8IdJfpXe0NnT/R/b2UnyEXpD8I9oc/7PA54KUFUfoLcGwKnAFuDrwBndtHRpsK/TDfs63bCv0w37Ot2wn9Odhd7Xif+NJUmSJEmSJttSnqIlSZIkSZK0KJjgkSRJkiRJmnAmeCRJkiRJkiacCR5JkiRJkqQJZ4JHkiRJkiRpwpngkSRJkiRJmnAmeCRJkiRJkiacCR5JkiRJkqQJZ4JHkiRJkiRpwpngkSRJkiRJmnAmeCRJkiRJkiacCR5JkiRJkqQJZ4JH0qwl2Zpka9/75UkqyYbuWiVJkjQ37OtImgQmeCRplpK8vnXyKskbu26PJEnSbLSEVs3w+Meu2ydpsAO7boCkRele4HnAjq4bMm5JjgF+F9gJPKPj5kiSpPmxFPo6O4DfGVC+c74bImk4Jngkzbmq+hbwd123Y9ySBPhj4KvAR4Ff67ZFkiRpPiyRvs7DVfWOrhshaXhO0ZI0lPScneS2JN9Icm+S30vyrAF1B85L7y9P8oNJrkjy1SSPJPmLJC9o9b4nyfok29tn3Zjkx+fpq47izcArgDOAr3XcFkmSNAv2dSRNOkfwSBrW79BLaGwH1gPfAlYDJwJPAx4d4VrLgRuAO4AN7f3PANNJXgZ8Avhn4DLgcOA04ONJnltVd8/+q8xekucBFwDvq6pPJXlF122SJEmzYl/niQ5K8u+Bf0XvRtbngU9V1WPdNkvSTEzwSNqnJD9Cr8Pz98AJVfVgK/8N4DrgSOAfRrjkjwFvr6rz+z7jvwLvpNcZuhz4lar6djt2DXAp8KvtMUyb3wocOkKbPldV/2vIax8IfBC4G/j1ET5DkiQtQPZ1Bvpeev2dfl9OckZV/e8RriNpnpjgkTSMM9rz+bs7PABV9Y0k59Lr+IxiK73RL/020uv0HAT8590dnubDwCXAi0b4jLcC3z9C/Y3AsJ2e/wt4MfBvqupfRvgMSZK0MNnXeaI/Bv4KuA14BPgB4GxgLb2RRi+rqr8d4bMlzQMTPJKG8ZL2POhuzV8Bu0a83ucGDO+9rz1/qaoe6T9QVY8luR84etgPqKrlI7ZpKElOoDdq571V9elxfIYkSZp39nWeeO3/tkfRF4D/mGQnsA54B70pZ5IWEBdZljSM3YsL3r/ngdZ5+eqI13vSlqJVtWumY80u4Kkjfs6c6pua9SXgv3bZFkmSNKfs6wznA+35RztthaSBHMEjaRi7OyLLgLv6DyQ5AHg2cO98N2pvxjQv/RnAc9vrb/R2SX+SP0zyh/QWX37rCJ8vSZK6Y19nOA+050NmeR1JY2CCR9IwbqE3dPnH2KPTA/xbFubvknHMS/8mcPEMx15Cb12evwa+CDh9S5KkyWFfZzgva897xkjSArAQf1FJWng2AG8EfiPJlX07Szwd+O9dNmwm45iX3hZUfuOgY0neQS/Bs7Gq/miuP1uSJI3VBuzrAJDk+cD2/sWmW/n3A7/X3v4/4/hsSbNjgkfSPlXV3yT5XeBNwBeSXAF8C1gNPARs77J9kiRJs2Ff5wleB5yT5Drgy/R20fpB4NXA04GrgN/qrnmSZmKCR9Kw3kJvceGzgF+it9jgn9HbUcptMiVJ0qSzr9NzHfDD9EYmv4zeejsP05uG/kHgg1VV3TVP0kziv01JkiRJkqTJ5jbpkiRJkiRJE84EjyRJkiRJ0oQzwSNJkiRJkjThTPBIkiRJkiRNuIndReuII46o5cuXj+XaX/va1zjkkEPGcm3NzLh3x9h3w7h3w7h3Y9xxv/nmm79SVd8z19dN8qvAG4ECbgXOAI4ENgGHA7cAr6+qR5McBFwKvJTe7js/V1Vb23XOBc4EHgPeXFVX7+1zx9nPAf8ddMW4d8O4d8O4d8fYd2OccR+2nzOxCZ7ly5dz0003jeXa09PTTE1NjeXamplx746x74Zx74Zx78a4457kH8ZwzaOANwPHVdW/JLkcOA04FbiwqjYl+QC9xM1F7fmhqvqhJKcB7wF+Lslx7bznA98H/GWS51bVYzN99jj7OeC/g64Y924Y924Y9+4Y+26MM+7D9nOcoiVJkjSzA4GDkxwIfBewHXgFcEU7vhF4TXu9ur2nHT85SVr5pqr6ZlV9GdgCnDBP7ZckSUvExI7gkSRJGqequjfJbwF3A/8C/AVwM/BwVe1q1bYBR7XXRwH3tHN3JdkBPLuVX9936f5zviPJWmAtwLJly5ienp7rr/QdO3fuHOv1NZhx74Zx74Zx746x78ZCiLsJHkmSpAGSHEZv9M2xwMPAnwCvGlC1dp8yw7GZyp9YULUeWA+wcuXKGufweofvd8O4d8O4d8O4d8fYd2MhxN0pWpIkSYP9BPDlqvqnqvoW8FHgR4BD25QtgKOB+9rrbcAxAO34s4AH+8sHnCNJkjQnHMEjSdKEWH7Ox0aqv/WCV4+pJUvG3cBJSb6L3hStk4GbgOuA19LbSWsNcGWrv7m9/3Q7/smqqiSbgQ8n+W16iyyvAD4zn19EkqRBRu1bjMq+yPwywSNJUkfG3anS7FTVDUmuoLcV+i7gs/SmUH0M2JTk3a3s4nbKxcAHk2yhN3LntHad29oOXLe365y1tx20JEmS9ocJHkmSpBlU1XnAeXsU38WAXbCq6hvA62a4zvnA+XPeQEmSpMYEjyRJc8QROZIkSeqKCR5JkhYp1+yRJElaOkzwSJIkSZK0SNx67w5Od1TxkmSCR5IkSZIkzTlHE8+vp3TdAEmSJEmSJM2OCR5JkiRJkqQJZ4JHkiRJkiRpwpngkSRJkiRJmnAmeCRJkiRJkiacu2hJkrQXo+7+IEmSNJdG7YusO35MDdGC5wgeSZIkSZKkCecIHkmSJEmS1LlRRittveDVY2zJZHIEjyRJkiRJ0oRzBI8kaUm59d4dnO66OpIkSVpkTPBIkiTAYdGSJEmTzClakiRJkiRJE84EjyRJkiRJ0oSbVYInyaFJrkjyd0nuSPKyJIcnuSbJne35sFY3Sd6fZEuSzyd5Sd911rT6dyZZM9svJUmSJEmStJTMdgTP+4BPVNW/Bl4I3AGcA1xbVSuAa9t7gFcBK9pjLXARQJLDgfOAE4ETgPN2J4UkSZIkSZK0b/u9yHKSZwI/CpwOUFWPAo8mWQ1MtWobgWngbcBq4NKqKuD6NvrnyFb3mqp6sF33GmAV8JH9bZskSZIkSQvRKJsaSKOYzS5aPwD8E/DHSV4I3Ay8BVhWVdsBqmp7kue0+kcB9/Sdv62VzVT+JEnW0hv9w7Jly5ienp5F82e2c+fOsV1bMzPu3TH23TDuc+PWe3eMVH/ZwbDu+F1jas3SMerPrj/vkiRJ4zWbBM+BwEuAN1XVDUnex+PTsQbJgLLaS/mTC6vWA+sBVq5cWVNTUyM1eFjT09OM69qamXHvjrHvhnGfG6ePeBds3fG7eO+ts/nzJ4CtvzA1Uv1J/XlPcijwR8AL6PVPfhH4InAZsBzYCvxsVT2UJPSmr58KfB04vapuaddZA7y9XfbdVbVxHr+GJElaAmazBs82YFtV3dDeX0Ev4XN/m3pFe36gr/4xfecfDdy3l3JJkqSuud6gJEmaCPud4KmqfwTuSfLDrehk4HZgM7B7J6w1wJXt9WbgDW03rZOAHW0q19XAKUkOa52dU1qZJElSZ/rWG7wYeusNVtXD9NYV3D0CZyPwmvb6O+sNVtX1wO71Bl9JW2+wqh4Cdq83KEmSNGdmO0b9TcCHkjwNuAs4g17S6PIkZwJ3A69rda+iN2R5C71hy2cAVNWDSd4F3NjqvXP3gsuSJEkdmtf1BudrrUFwTaSuGPduGPduGPeZjXstwKWy3uBC+/laCD/zs0rwVNXngJUDDp08oG4BZ81wnUuAS2bTFkmSpDk2r+sNztdagzC5ayJNOuPeDePeDeM+s1HXDxzVUllvcNT1AMdtIfzMz2YNHkmSpMXM9QYlSdLEWPxpPUmSpP1QVf+Y5J4kP1xVX+Tx9QZvp7fO4AU8eb3Bs5Nsoreg8o42hetq4Df7FlY+BTh3Pr+LJGl8lo95RI4GGzXuWy949ZhasnCY4JEkSZqZ6w1KkqSJYIJHkrSgeBdMC4nrDUqSpEnhGjySJEmSJEkTzgSPJEmSJEnShDPBI0mSJEmSNOFM8EiSJEmSJE04EzySJEmSJEkTzgSPJEmSJEnShDPBI0mSJEmSNOEO7LoBkiRJkiQtFMvP+VjXTZD2iyN4JEmSJEmSJpwjeCRJY+edMEmSJGm8HMEjSZIkSZI04UzwSJIkSZIkTTgTPJIkSZIkSRPOBI8kSZIkSdKEM8EjSZIkSZI04dxFS5I0MnfFkiRJkhYWEzySJEmSpEXNm1NaCpyiJUmSJEmSNOFmneBJckCSzyb58/b+2CQ3JLkzyWVJntbKD2rvt7Tjy/uucW4r/2KSV862TZIkSZIkSUvJXIzgeQtwR9/79wAXVtUK4CHgzFZ+JvBQVf0QcGGrR5LjgNOA5wOrgD9IcsActEuSJEmSJGlJmNUaPEmOBl4NnA/8pyQBXgH8u1ZlI/AO4CJgdXsNcAXwe63+amBTVX0T+HKSLcAJwKdn0zZJkjQ+o65lsGHVIWNqyfi1G083AfdW1U8lORbYBBwO3AK8vqoeTXIQcCnwUuCrwM9V1dZ2jXPp3ex6DHhzVV09/99EkiQtZrNdZPl3gP8CfHd7/2zg4ara1d5vA45qr48C7gGoql1JdrT6RwHX912z/5wnSLIWWAuwbNkypqenZ9n8wXbu3Dm2a2tmxr07xr4bkxz3dcfv2nelBWrZwZPd/kk1yT/vPD5a+Znt/e7RypuSfIBe4uYi+kYrJzmt1fu5PUYrfx/wl0meW1WPzfcXkSRpqRr15tTWC149ppaMz34neJL8FPBAVd2cZGp38YCqtY9jezvniYVV64H1ACtXrqypqalB1WZtenqacV1bMzPu3TH23ZjkuJ8+wTtRrDt+F++91U0k59uGVYdM5M+7o5UlSdKkmE0P9+XATyc5FXg6vbtavwMcmuTANornaOC+Vn8bcAywLcmBwLOAB/vKd+s/R5IkqUvzOlpZkiRpf+13gqeqzgXOBWgjeH6tqn4hyZ8Ar6U3N30NcGU7ZXN7/+l2/JNVVUk2Ax9O8tv0hi2vAD6zv+2SJI1u1CGr0lIw36OV52sqOkz8lLmJZdy7Ydy7sdDivpSmZzsdfW6M+vO7EH7mxzFG/W3ApiTvBj4LXNzKLwY+2IYlP0hvLjpVdVuSy4HbgV3AWc5JlyRJC8C8jlaer6noMNlTRCeZce+Gce/GQov7JE8vH5XT0efG1l+YGqn+QviZn5P/6lU1DUy313fRm1e+Z51vAK+b4fzz6c1tlyRJWhAcrSxJC5ejj6UnM60nSZI0GkcrS5KkBccEjyRJ0j44WlmSJC10T+m6AZIkSZIkSZodR/BI0iLkvHRJkiRpaXEEjyRJkiRJ0oQzwSNJkiRJkjThTPBIkiRJkiRNONfgkSRJkiR1yvUDpdlzBI8kSZIkSdKEM8EjSZIkSZI04UzwSJIkSZIkTTjX4JGkCeHcdEmSJEkzcQSPJEmSJEnShDPBI0mSJEmSNOFM8EiSJEmSJE041+CRJEmSJM2pW+/dwemuHyjNKxM8ktQROz6SJEmS5opTtCRJkiRJkiacCR5JkiRJkqQJZ4JHkiRJkiRpwpngkSRJkiRJmnAusixJkiRJ2qflI2wOse74MTZE0kD7neBJcgxwKfC9wLeB9VX1viSHA5cBy4GtwM9W1UNJArwPOBX4OnB6Vd3SrrUGeHu79LurauP+tkuSujJKpwfs+EiSJEmaO7OZorULWFdVzwNOAs5KchxwDnBtVa0Arm3vAV4FrGiPtcBFAC0hdB5wInACcF6Sw2bRLkmSpFlLckyS65LckeS2JG9p5YcnuSbJne35sFaeJO9PsiXJ55O8pO9aa1r9O9uNLUmSpDm13wmeqtq+ewROVT0C3AEcBawGdo/A2Qi8pr1eDVxaPdcDhyY5EnglcE1VPVhVDwHXAKv2t12SJElzxJtZkiRpYszJGjxJlgMvBm4AllXVduglgZI8p1U7Crin77RtrWym8kGfs5Zeh4lly5YxPT09F81/kp07d47t2pqZce+OsZ8b647fNVL9ZQePfo5mz7h3YxJ/z7T+zO4+zSNJ+m9mTbVqG4Fp4G303cwCrk+y+2bWFO1mFkCS3TezPjJvX0aSJC16s07wJHkG8KfAW6vqn3tL7QyuOqCs9lL+5MKq9cB6gJUrV9bU1NTI7R3G9PQ047q2Zmbcu2PsBxt1TZ1Rf6WuO34X773Vte7nm3HvxoZVh0z075n5uJk1XzeyYDITbouBce+GcZ87o9wg8YZKd4z93Bj198ZC+F0zqx5ukqfSS+58qKo+2orvT3Jk6/AcCTzQyrcBx/SdfjRwXyuf2qN8ejbtkiRJmivzdTNrvm5kgYn9rhj3bhj3mY3zZpY3VLpj7OfG1l+YGqn+Qvhd8/+zd//hcpbloe+/t0QQrPJTUxrYLlpjK5LTlmYD2l1dFasIXsb2gKVFJZQ2PS3+qKYtUO2hW6U77l1Eqq02FTbBrQZktyVXQZEqa9vdA8jPFoFNTSGFABU1kBoRJXifP95nyZCslcysWTPPvGu+n+ta18y87zPvPOvOZHLnnufHnNfgKbtiXQjclZkf7Di1AZhePPBU4IqO428pCxAeA2wt335dDbw6IvYv89FfXY5JkiRVtasvs8r5br/Mmum4JEnSvOlnF62fBd4MvDIibis/xwNrgF+IiK8Cv1AeA1wF3ANsBP4S+G2AMh/9fcCN5ee903PUJUmSavHLLEmS1CZzHreVmf+bmYccAxw7Q/sEzpjlWhcBF821L5IkSQMw/WXW7RFxWzn2BzRfXl0WEacD9wEnlXNXAcfTfJn1GHAaNF9mRcT0l1ngl1mSJI28XqcwXnzcswfUk+45MU/S2Oh9nrmkceaXWZIkqU0s8EiSJEnSAuCXWdJ462cNHkmSJEmSJI0ACzySJEmSJEkt5xQtSa3mUGRJkiRJssAjSZIkSSPJL7Ik9cICj6SRYiIjSZIkSb1zDR5JkiRJkqSWcwSPJEmSJA2BI5UlDZIjeCRJkiRJklrOETySBspvqiRJkiRp8BzBI0mSJEmS1HKO4JHUE0fkSJIkPcXcSNKocASPJEmSJElSyzmCR5IkSZIKR+RIaisLPJK4/YGtrDSZkSRJkqTWssAjLUC9fvO0etmAOiJJkiRJGgoLPJIkSZIWLEcqSxoXFnikFnAuuCRJkiRpVyzwSBVYsJEkSXrKIHMjp6JLGhcWeKR5YMFGkiRJklSTBR5pFhZtJEmS5sY8SpKGb2QKPBFxHHABsAfw8cxcU7lLWmBMNCRJNZnrqM3MoyRp9I1EgSci9gD+DPgFYDNwY0RsyMw76/ZMw+QOB5KkhcpcR8NgEUaSxttIFHiAo4CNmXkPQESsB1YAJj0jxgXwJEmaE3OdFhh0gWT1su1+mSVJGpjIzNp9ICJOBI7LzF8vj98MHJ2Zb92h3SpgVXn448DdA+rSQcA3BnRtzc6412Ps6zDudRj3OgYd9xdk5vMGeP2+dJPrDDHPAf8e1GLc6zDudRj3eox9HYOMe1d5zqiM4IkZju1UecrMtcDagXcm4qbMXD7o19HTGfd6jH0dxr0O416Hcd99rjOsPAf886jFuNdh3Osw7vUY+zpGIe7PqPniHTYDh3Y8PgR4sFJfJEmS5pu5jiRJGqhRKfDcCCyNiMMiYk/gZGBD5T5JkiTNF3MdSZI0UCMxRSszt0fEW4GrabYOvSgz76jYpaEMj9ZOjHs9xr4O416Hca9jrONurqPCuNdh3Osw7vUY+zqqx30kFlmWJEmSJEnS3I3KFC1JkiRJkiTNkQUeSZIkSZKklhvrAk9EHBcRd0fExog4a4bze0XEpeX8DRExMfxeLjxdxP1dEXFnRPxTRHwhIl5Qo58Lze7i3tHuxIjIiHBrxXnQTdwj4o3lPX9HRHxq2H1cqLr4rPkPEXFtRNxaPm+Or9HPhSQiLoqIhyPiK7Ocj4j40/Jn8k8RceSw+zhuzHXqMNepw1ynDnOdOsxz6hj5XCczx/KHZoHDfwF+FNgT+Efg8B3a/DbwsXL/ZODS2v1u+0+Xcf95YJ9y/7eM+3DiXto9B/gScD2wvHa/2/7T5ft9KXArsH95/Pza/V4IP13Gfi3wW+X+4cCm2v1u+w/wcuBI4CuznD8e+CwQwDHADbX7vJB/zHVGOu7mOhXiXtqZ6ww57uY61eJunjOY2I90rjPOI3iOAjZm5j2Z+T1gPbBihzYrgHXl/uXAsRERQ+zjQrTbuGfmtZn5WHl4PXDIkPu4EHXzfgd4H/BfgceH2bkFrJu4/wbwZ5n5CEBmPjzkPi5U3cQ+geeW+/sCDw6xfwtSZn4J2LKLJiuAS7JxPbBfRBw8nN6NJXOdOsx16jDXqcNcpw7znEpGPdcZ5wLPEuD+jseby7EZ22TmdmArcOBQerdwdRP3TqfTVEDVn93GPSJ+Gjg0M/92mB1b4Lp5v78IeFFE/ENEXB8Rxw2tdwtbN7H/I+BNEbEZuAp423C6NtZ6/TdA/THXqcNcpw5znTrMdeowzxldVXOdRcN6oRE007dTO+4Z300b9abrmEbEm4DlwCsG2qPxsMu4R8QzgPOBlcPq0Jjo5v2+iGbo8iTNN7h/HxFHZOajA+7bQtdN7H8FuDgzz4uIlwKfKLH//uC7N7b8d3W4zHXqMNepw1ynDnOdOsxzRlfVf1fHeQTPZuDQjseHsPOwtR+0iYhFNEPbdjUcS7vXTdyJiFcB7wZen5nfHVLfFrLdxf05wBHAVERsopkvusHFB/vW7efMFZn5RGbeC9xNkwSpP93E/nTgMoDMvA54FnDQUHo3vrr6N0DzxlynDnOdOsx16jDXqcM8Z3RVzXXGucBzI7A0Ig6LiD1pFhbcsEObDcCp5f6JwBezrJykOdtt3Mvw2b+gSXicozs/dhn3zNyamQdl5kRmTtCsB/D6zLypTncXjG4+Z/6GZrFNIuIgmmHM9wy1lwtTN7G/DzgWICJeTJP4fH2ovRw/G4C3lB0mjgG2ZuZDtTu1gJnr1GGuU4e5Th3mOnWY54yuqrnO2E7RysztEfFW4GqaVcgvysw7IuK9wE2ZuQG4kGYo20aab7NOrtfjhaHLuP834IeAz5R1Hu/LzNdX6/QC0GXcNc+6jPvVwKsj4k7gSeD3MvOb9Xq9MHQZ+9XAX0bEO2mGzq70P7b9iYhP0wzBP6jM+T8HeCZAZn6MZg2A44GNwGPAaXV6Oh7Mdeow16nDXKcOc506zHPqGfVcJ/wzliRJkiRJardxnqIlSZIkSZK0IFjgkSRJkiRJajkLPJIkSZIkSS1ngUeSJEmSJKnlLPBIkiRJkiS1nAUeSZIkSZKklrPAI0mSJEmS1HIWeCRJkiRJklrOAo8kSZIkSVLLWeCRJEmSJElqOQs8kiRJkiRJLWeBR1LfImJTRGzqeDwRERkRF9frlSRJ0vww15HUBhZ4JGmOIuLnIuJ/RjVYd7QAACAASURBVMRDEfHdcvv5iDi+dt8kSZLmIiJWluLVrn6erN1PSTtbVLsDkhakB4AXA1trd2RQIuI9wPuAbwB/CzwEHAT8NDAJXFWtc5IkadAWcq5zG/CfZzn3c8Argc8OrzuSumWBR9K8y8wngP9Tux+DEhEn0RR3/g74pcz81g7nn1mlY5IkaSgWcq6TmbfRFHl2EhHXlbtrh9cjSd1yipakrkTjrRFxR0Q8HhEPRMRHImLfGdrOOC+983hE/FhEXB4R34yIb5WpTUeUds+LiLVlytPjEXFjRPz8kH7VXYqIZwAfAB4DfnXH4g78IOmTJEktYq6za6Xvx9CMXrqycnckzcARPJK69SHg7TRTkdYCTwArgKOBPYHv9XCtCeAG4C7g4vL4F4GpiHgp8Dng34FLgQOAk4HPRsSLMvO+/n+VvrwMOAy4HHgkIk4AjgAeB76cmdft6smSJGlkmevs2m+W2wsz0zV4pBFkgUfSbkXEy2gSnn8BjsrMLeX4u4FrgYOBf+3hkq8A3pOZ53a8xh8C76VJhi4Dfjszv1/OXQNcAryz/HTT598B9uuhT7dl5t900e4/ltuvAbcAy3Z43S8BJ2bm13t4bUmSVJG5zm5fa2/gTcD3gY/P5RqSBs8Cj6RunFZuz51OeAAy8/GIOJsm8enFJmDNDsfW0SQ9ewG/N53wFJ8CLgJ+qofX+B3gBT20Xwd0k/Q8v9z+P8C9wKtoErUXAOcBrwE+Q7PQsiRJagdznV17I00x6crMvH+O15A0YBZ4JHXjyHL7v2Y49/fA9h6vd9sMQ3sfLLf/vOO6Npn5ZER8DTik2xfIzIke+9StPcpt0IzU+cfy+I6I+EXgn4FXRMRLna4lSVJrmOvs2qpy+xdDfE1JPXKRZUndmF5c8Gs7nijJyzd7vN5OW4pm5vbZzhXbgVHYneqRcntPR3EHgMz8DnB1eXjUUHslSZL6Ya4zi4g4nGYNws3AVZW7I2kXHMEjqRvTichi4J7OExGxB3AgzY4KI2OA89LvLrePznJ+ugC0dw+vLUmS6jLXmZ2LK0stYYFHUjduoRm6/Ap2SHqAn2M0P0sGNS/9SzTfsC2NiD0zc8cdNY4ot5t6eG1JklSXuc4MIuJZwJtpFle+sJfnSho+p2hJ6sbF5fbdEXHA9MHyj/5/qdKj3cjMicyMHn5Wdnndb9Bsabov8P92nouIX6BZZHkrzfankiSpHS4ut2Of6+zgJGB/4CoXV5ZG3yhWoiWNmMz8h4j4MPA24CsRcTnwBLCCZkrSQzX7V8G7gKNpksCXA1+m+QbtF4Engd/IzNmmcEmSpBFjrjOr6cWV11bthaSuOIJHUrfeQZP0bKWZi/0rNAsKvwrYcZrSgpaZD9MUeM4HDgXeDrwSuBL4ucz8TMXuSZKkuTHX6RARLwb+Ey6uLLVGZGbtPkiSJEmSJKkPjuCRJEmSJElqOQs8kiRJkiRJLWeBR5IkSZIkqeUs8EiSJEmSJLWcBR5JkiRJkqSWW1S7A3N10EEH5cTExECu/e1vf5tnP/vZA7m2Zmfc6zH2dRj3Oox7HYOO+8033/yNzHzewF5gyAaZ54B/D2ox7nUY9zqMez3Gvo5Bxr3bPKe1BZ6JiQluuummgVx7amqKycnJgVxbszPu9Rj7Oox7Hca9jkHHPSL+dWAXr2CQeQ7496AW416Hca/DuNdj7OsYZNy7zXOcoiVJkiRJktRyFngkSZIkSZJazgKPJEmSJElSy7V2DR5JkoZh4qwru267ac0JA+yJJEnS7t3+wFZWdpm/mLssLH2N4ImId0bEHRHxlYj4dEQ8KyIOi4gbIuKrEXFpROxZ2u5VHm8s5yc6rnN2OX53RLymv19JkiRJkiRpvMy5wBMRS4C3A8sz8whgD+Bk4APA+Zm5FHgEOL085XTgkcx8IXB+aUdEHF6e9xLgOODPI2KPufZLkiRJkiRp3PQ7RWsRsHdEPAHsAzwEvBL41XJ+HfBHwEeBFeU+wOXARyIiyvH1mfld4N6I2AgcBVzXZ98kSdpJL8OWJUmSFrJepqKDU7pG3ZwLPJn5QET8CXAf8B3g88DNwKOZub002wwsKfeXAPeX526PiK3AgeX49R2X7nzO00TEKmAVwOLFi5mamppr93dp27ZtA7u2Zmfc6zH2dRj3OhbvDauXbd99wzn48Cev6Kn9siX7DqQfo8j3uyRJ0mDNucATEfvTjL45DHgU+Azw2hma5vRTZjk32/GdD2auBdYCLF++PCcnJ3vrdJempqYY1LU1O+Nej7Gvw7jX8eFPXsF5t4/GHgObTpms3YWh8f0uSZI0WP1kuK8C7s3MrwNExF8BLwP2i4hFZRTPIcCDpf1m4FBgc0QsAvYFtnQcn9b5HEmSJEmSxlav06hWLxtQRzTy+inw3AccExH70EzROha4CbgWOBFYD5wKTI9X31AeX1fOfzEzMyI2AJ+KiA8CPwIsBb7cR78kSWPEpEeSJEnqYxetzLyBZrHkW4Dby7XWAmcC7yqLJR8IXFieciFwYDn+LuCscp07gMuAO4HPAWdk5pNz7ZckSdJ8iYh3RsQdEfGViPh0RDwrIg6LiBsi4qsRcWlE7Fna7lUebyznJzquc3Y5fndEvKbW7yNJkhauvhYhyMxzgHN2OHwPzS5YO7Z9HDhpluucC5zbT18kSZLmU0QsAd4OHJ6Z34mIy4CTgeOB8zNzfUR8DDidZsfQ04FHMvOFEXEy8AHglyPi8PK8l9CMVv67iHiRX2hJkqT5NBqrTEqSJI2mRcDeEfEEsA/wEPBK4FfL+XXAH9EUeFaU+9CMcv5IREQ5vj4zvwvcW0YzH0UzbV2SpNZwW/XRZoFHkiRpBpn5QET8Cc26g98BPg/cDDxaNpOAZrOIJeX+EuD+8tztEbGVZrr6EuD6jkt3PkeSNGZ6LZJI3bLAI0mSNIOI2J9m9M1hwKPAZ4DXztA0p58yy7nZju/4equAVQCLFy9mamqq9053adu2bQO9vmZm3Osw7nUY99mtXrZ99436sHjvwb9Gt8bpPTAK73kLPJIkVeIw55H3KuDezPw6QET8FfAyYL+IWFRG8RwCPFjabwYOBTZHxCJgX2BLx/Fpnc/5gcxcS7NhBcuXL8/JyclB/E5Ak3AP8vqamXGvw7jXYdxnt3LAI3hWL9vOebePxn/1N50yWbsLQzMK7/k576IlSZK0wN0HHBMR+5S1dI6l2fXzWuDE0uZU4Ipyf0N5TDn/xczMcvzkssvWYcBS4MtD+h0kSdKYGI2yniRJ0ojJzBsi4nLgFmA7cCvNCJsrgfUR8f5y7MLylAuBT5RFlLfQ7JxFZt5RduC6s1znDHfQkiRJ880CjyRppLjwoEZJZp4DnLPD4XtodsHase3jwEmzXOdc4Nx576AkSVLhFC1JkiRJkqSWs8AjSZIkSZLUchZ4JEmSJEmSWs4CjyRJkiRJUstZ4JEkSZIkSWo5CzySJEmSJEkt5zbpkiRJkiTN0cRZV9buggQ4gkeSJEmSJKn1HMEjSRo4v9mSJEmSBssRPJIkSZIkSS3nCB5JkiRJkjTveh3FvWnNCQPqyXhwBI8kSZIkSVLL9VXgiYj9IuLyiPg/EXFXRLw0Ig6IiGsi4qvldv/SNiLiTyNiY0T8U0Qc2XGdU0v7r0bEqf3+UpIkSZIkSeOk3xE8FwCfy8yfAH4SuAs4C/hCZi4FvlAeA7wWWFp+VgEfBYiIA4BzgKOBo4BzpotCkiRJkiRJ2r05r8ETEc8FXg6sBMjM7wHfi4gVwGRptg6YAs4EVgCXZGYC15fRPweXttdk5pZy3WuA44BPz7VvkiQtRM5jlyRJ0mz6WWT5R4GvA/89In4SuBl4B7A4Mx8CyMyHIuL5pf0S4P6O528ux2Y7vpOIWEUz+ofFixczNTXVR/dnt23btoFdW7Mz7vUY+zrGKe6rl22v3YUfWLz3aPVnkEbp/TVO73dJkqQa+inwLAKOBN6WmTdExAU8NR1rJjHDsdzF8Z0PZq4F1gIsX748Jycne+pwt6amphjUtTU7416Psa9jnOK+sseRJ4O0etl2zrt9PDaR3HTKZO0u/MA4vd8lSZJq6CfD3QxszswbyuPLaQo8X4uIg8vonYOBhzvaH9rx/EOAB8vxyR2OT/XRL0mSJEmS5qTXKdHSqJjzIsuZ+W/A/RHx4+XQscCdwAZgeiesU4Eryv0NwFvKblrHAFvLVK6rgVdHxP5lceVXl2OSJElVuWOoJElqi37HqL8N+GRE7AncA5xGUzS6LCJOB+4DTiptrwKOBzYCj5W2ZOaWiHgfcGNp997pBZclSZIqm94x9MSS7+wD/AHNjqFrIuIsmhHMZ/L0HUOPptkx9OiOHUOX00xDvzkiNmTmI8P/dSRJ0kLVV4EnM2+jSVZ2dOwMbRM4Y5brXARc1E9fJEnD49BljQN3DJUkSW0yHqtMSpIk9W6oO4YOa7dQcFezWox7Hca9jjbHve27bbZ5x9C2vmdgNN7zFngkSZJmNtQdQ4e1Wyi4q1ktxr0O415Hm+M+Srt/zkWbdwwdpR1AezUK7/k5L7IsSZK0wM20Y+iRlB1DAXrYMXSm45IkSfPGAo8kSdIM3DFUkiS1STvHbUmSJA2HO4ZKkqRWsMAjSZI0C3cMlSRJbeEULUmSJEmSpJazwCNJkiRJktRyTtGSJDHR8u1AJUmSdsVcpx16+XPatOaEAfaknRzBI0mSJEmS1HIWeCRJkiRJklrOAo8kSZIkSVLLuQaPJEkLVK/rDTiXXZIkqb0cwSNJkiRJktRyFngkSZIkSZJazgKPJEmSJElSy1ngkSRJkiRJajkLPJIkSZIkSS1ngUeSJEmSJKnl+t4mPSL2AG4CHsjM10XEYcB64ADgFuDNmfm9iNgLuAT4GeCbwC9n5qZyjbOB04Engbdn5tX99kuSJEmStDBNnHVl7S5II6fvAg/wDuAu4Lnl8QeA8zNzfUR8jKZw89Fy+0hmvjAiTi7tfjkiDgdOBl4C/AjwdxHxosx8ch76JkljyaRHkiRJGi99TdGKiEOAE4CPl8cBvBK4vDRZB7yh3F9RHlPOH1varwDWZ+Z3M/NeYCNwVD/9kiRJkiRJGif9juD5EPD7wHPK4wOBRzNze3m8GVhS7i8B7gfIzO0RsbW0XwJc33HNzuc8TUSsAlYBLF68mKmpqT67P7Nt27YN7NqanXGvx9jXMci4r162ffeNxtTivY3PbAb5OeDnjCRJ0mDNucATEa8DHs7MmyNicvrwDE1zN+d29ZynH8xcC6wFWL58eU5OTs7UrG9TU1MM6tqanXGvx9jXMci4r3SK1qxWL9vOebfPxwzlhWfTKZMDu3abP2dcb1CSJLVBP1O0fhZ4fURsoklyXkkzome/iJjOnA8BHiz3NwOHApTz+wJbOo/P8BxJkqTaptcbnDa93uBS4BGawg10rDcInF/ascN6g8cBf16KRpIkSfNmzgWezDw7Mw/JzAmapOWLmXkKcC1wYml2KnBFub+hPKac/2JmZjl+ckTsVb4RWwp8ea79kiRJmi+uNyhJktpiEGPUzwTWR8T7gVuBC8vxC4FPRMRGmpE7JwNk5h0RcRlwJ7AdOMMdtCRJ0ogY2nqDw1prEFwTqRbjXodxr2PQcXc9vdmNy3qDo/b3ehQ+a+alwJOZU8BUuX8PM3wrlZmPAyfN8vxzgXPnoy+SJEnzYdjrDQ5rrUFo95pIbWbc6zDudQw67q43OLtxWW9wkGsHzsUofNYs/D91SZKkuZleb/B44FnAc+lYb7CM4plpvcHNrjcoSZKGzQKPJLXEhN9USUOVmWcDZwOUETy/m5mnRMRnaNYTXM/M6w1eR8d6gxGxAfhURHwQ+BFcb1CSdmKeI/XPAo8kSVJvXG9QkqTKei0KblpzwoB6Mjos8EiSJO2G6w1KkqRRN+dt0iVJkiRJkjQaLPBIkiRJkiS1nAUeSZIkSZKklrPAI0mSJEmS1HIWeCRJkiRJklrOXbQkqZLbH9jKyh63d5QkSZKkmVjgkSRJkiTNK7/IkobPKVqSJEmSJEkt5wgeSZIEwEQP37RuWnPCAHsiSZKkXjmCR5IkSZIkqeUs8EiSJEmSJLWcBR5JkiRJkqSWcw0eSZonvaxfArB62YA6IkmSJGnsOIJHkiRJkiSp5SzwSJIkSZIktdycp2hFxKHAJcAPA98H1mbmBRFxAHApMAFsAt6YmY9ERAAXAMcDjwErM/OWcq1TgfeUS78/M9fNtV+SJEmSpPnXy3R0p6JLw9fPCJ7twOrMfDFwDHBGRBwOnAV8ITOXAl8ojwFeCywtP6uAjwKUgtA5wNHAUcA5EbF/H/2SJEmSJEkaK3MewZOZDwEPlfvfioi7gCXACmCyNFsHTAFnluOXZGYC10fEfhFxcGl7TWZuAYiIa4DjgE/PtW+SNB96XTRZ0sLiaGVJktQm87KLVkRMAD8N3AAsLsUfMvOhiHh+abYEuL/jaZvLsdmOz/Q6q2hG/7B48WKmpqbmo/s72bZt28CurdkZ93qM/cxWL9s+0Osv3nvwr6GdGff50etnRks/Z6ZHK98SEc8Bbi5fRK2kGa28JiLOohmtfCZPH618NM1o5aM7RisvB7JcZ0NmPjL030iSJC1YfRd4IuKHgP8J/E5m/nvz5dXMTWc4lrs4vvPBzLXAWoDly5fn5ORkz/3txtTUFIO6tmZn3Osx9jNbOeARPKuXbee82+elzq4eGPf5semUyZ7at/FzxtHKkiSpTfrKcCPimTTFnU9m5l+Vw1+LiIPL6J2DgYfL8c3AoR1PPwR4sByf3OH4VD/9kiRJmk/DGK08rJHK0NoRVa1n3Osw7vOnlxGwjpitx9jPbNCfA6PwWdPPLloBXAjclZkf7Di1ATgVWFNur+g4/taIWE8zbHlrSYquBv64Y2HlVwNnz7VfkiRJ82lYo5WHNVIZ2jmiaiEw7nUY9/nTy+hmR8zWY+xn1uvo416NwmdNP3/qPwu8Gbg9Im4rx/6AprBzWUScDtwHnFTOXUWz6OBGmoUHTwPIzC0R8T7gxtLuvdNDmCVJkmpytLKkhcwNJaSFpZ9dtP43M38jBXDsDO0TOGOWa10EXDTXvkiSJM03RytLkqQ2cdyWJEnSzBytLEnSAtHriLVNa04YUE8GxwKPpLHhMGRJvXC0siRJapNn1O6AJEmSJEmS+uMIHkmSJElaABytLI03R/BIkiRJkiS1nCN4JLWa31RJkiRJkiN4JEmSJEmSWs8CjyRJkiRJUss5RUuSJEmSRpBT0SX1wgKPpJFiIiNJkiRJvXOKliRJkiRJUstZ4JEkSZIkSWo5p2hJGiinXEkLU69/ty8+7tkD6okktYd5kaRBcgSPJEmSJElSyzmCR1JP/OZJkiTpKeZGkkaFI3gkSZIkSZJazhE8krj9ga2s9NsnSZIkSWotCzySJEmSVDjlSlJbWeCRFqBeE5PVywbUEUmSpMocqSxpLtq4Y+jIFHgi4jjgAmAP4OOZuaZyl6SR4TdJktR+5jrS/PCLLEma2UgUeCJiD+DPgF8ANgM3RsSGzLyzbs+kwbBgI0njxVxHkiQN2kgUeICjgI2ZeQ9ARKwHVgAmParGIowkaR6Z62ismEdJ0vCNSoFnCXB/x+PNwNGV+jJWRukf39XLtjs/WpK0UJnrzJNB5i6b1pzQU/vepwqZ60iSBicys3YfiIiTgNdk5q+Xx28GjsrMt+3QbhWwqjz8ceDuAXXpIOAbA7q2Zmfc6zH2dRj3Oox7HYOO+wsy83kDvH5fusl1hpjngH8PajHudRj3Oox7Pca+jkHGvas8Z1RG8GwGDu14fAjw4I6NMnMtsHbQnYmImzJz+aBfR09n3Osx9nUY9zqMex3Gffe5zrDyHPDPoxbjXodxr8O412Ps6xiFuD+j5ot3uBFYGhGHRcSewMnAhsp9kiRJmi/mOpIkaaBGYgRPZm6PiLcCV9NsHXpRZt5RuVuSJEnzwlxHkiQN2kgUeAAy8yrgqtr9KIYyPFo7Me71GPs6jHsdxr2OsY+7uY4w7rUY9zqMez3Gvo7qcR+JRZYlSZIkSZI0d6OyBo8kSZIkSZLmaKwLPBFxXETcHREbI+KsGc7vFRGXlvM3RMTE8Hu58HQR93dFxJ0R8U8R8YWIeEGNfi40u4t7R7sTIyIjwpX350E3cY+IN5b3/B0R8alh93Gh6uKz5j9ExLURcWv5vDm+Rj8Xkoi4KCIejoivzHI+IuJPy5/JP0XEkcPu47gx16nDXKcOc506zHXqMM+pY+Rzncwcyx+aBQ7/BfhRYE/gH4HDd2jz28DHyv2TgUtr97vtP13G/eeBfcr93zLuw4l7afcc4EvA9cDy2v1u+0+X7/elwK3A/uXx82v3eyH8dBn7tcBvlfuHA5tq97vtP8DLgSOBr8xy/njgs0AAxwA31O7zQv4x1xnpuJvrVIh7aWeuM+S4m+tUi7t5zmBiP9K5zjiP4DkK2JiZ92Tm94D1wIod2qwA1pX7lwPHRkQMsY8L0W7jnpnXZuZj5eH1wCFD7uNC1M37HeB9wH8FHh9m5xawbuL+G8CfZeYjAJn58JD7uFB1E/sEnlvu7ws8OMT+LUiZ+SVgyy6arAAuycb1wH4RcfBwejeWzHXqMNepw1ynDnOdOsxzKhn1XGecCzxLgPs7Hm8ux2Zsk5nbga3AgUPp3cLVTdw7nU5TAVV/dhv3iPhp4NDM/NthdmyB6+b9/iLgRRHxDxFxfUQcN7TeLWzdxP6PgDdFxGaanY3eNpyujbVe/w1Qf8x16jDXqcNcpw5znTrMc0ZX1VxnZLZJr2Cmb6d23FKsmzbqTdcxjYg3AcuBVwy0R+Nhl3GPiGcA5wMrh9WhMdHN+30RzdDlSZpvcP8+Io7IzEcH3LeFrpvY/wpwcWaeFxEvBT5RYv/9wXdvbPnv6nCZ69RhrlOHuU4d5jp1mOeMrqr/ro7zCJ7NwKEdjw9h52FrP2gTEYtohrbtajiWdq+buBMRrwLeDbw+M787pL4tZLuL+3OAI4CpiNhEM190g4sP9q3bz5krMvOJzLwXuJsmCVJ/uon96cBlAJl5HfAs4KCh9G58dfVvgOaNuU4d5jp1mOvUYa5Th3nO6Kqa64xzgedGYGlEHBYRe9IsLLhhhzYbgFPL/ROBL2ZZOUlzttu4l+Gzf0GT8DhHd37sMu6ZuTUzD8rMicycoFkP4PWZeVOd7i4Y3XzO/A3NYptExEE0w5jvGWovF6ZuYn8fcCxARLyYJvH5+lB7OX42AG8pO0wcA2zNzIdqd2oBM9epw1ynDnOdOsx16jDPGV1Vc52xnaKVmdsj4q3A1TSrkF+UmXdExHuBmzJzA3AhzVC2jTTfZp1cr8cLQ5dx/2/ADwGfKes83peZr6/W6QWgy7hrnnUZ96uBV0fEncCTwO9l5jfr9Xph6DL2q4G/jIh30gydXel/bPsTEZ+mGYJ/UJnzfw7wTIDM/BjNGgDHAxuBx4DT6vR0PJjr1GGuU4e5Th3mOnWY59Qz6rlO+GcsSZIkSZLUbuM8RUuSJEmSJGlBsMAjSZIkSZLUchZ4JEmSJEmSWs4CjyRJkiRJUstZ4JEkSZIkSWo5CzySJEmSJEktZ4FHkiRJkiSp5SzwSJIkSZIktZwFHkmSJEmSpJazwCNJkiRJktRyFngkSZIkSZJazgKPJEmSJElSy1ngkdS3iNgUEZs6Hk9EREbExfV6JUmSND/MdSS1gQUeSZqDiDghIj4fEZsj4jsRcU9EfCYiXlq7b5IkSf2Ixq9FxPUR8a2IeCwibo2It0fEHrX7J2lmi2p3QNKC9ADwYmBr7Y4MQkR8APh94JvA3wDfAF4IrAD+74h4S2b+j4pdlCRJg7Wgcx1gHfBm4GHgUuDbwKuAC4CXR8RJmZkV+ydpBuHfS0n9mh6ynJkTdXsyeBHxwzRJ3deB/yszH+449/PAF4F7M/NHK3VRkiTNszHLdd4A/DVwL3BUZn6jHH8mcBnwBuC0zLy4WiclzcgpWpK6UobqvjUi7oiIxyPigYj4SETsO0PbGeeldx6PiB+LiMsj4ptl6O/nI+KI0u55EbE2Ih4qr3VjKZ6MghfQfHbe0FncAcjMa4FvAc+r0TFJkjR35jo/8Evl9rzp4g5AZj4B/GF5+Lah90rSbjlFS1K3PgS8HXgIWAs8QTMl6WhgT+B7PVxrArgBuAu4uDz+RWCqrGHzOeDfaYYEHwCcDHw2Il6Umff1/6v05as0v+tREXFQZ+ITES8HnkMzbUuSJLWLuU7jh8vtPTOcmz52ZETsl5mPDqlPkrpggUfSbkXEy2gSnn+hGaq7pRx/N3AtcDDwrz1c8hXAezLz3I7X+EPgvTTJ0GXAb2fm98u5a4BLgHeWn276/DvAfj306bbM3G1hJjO3RMSZwAeBOyPib2jW4vkx4PXANcBv9vC6kiSpMnOdp5n+8uqwGc51TkH/CeD6Hl5f0oBZ4JHUjdPK7bnTCQ9AZj4eEWfTJD692ASs2eHYOpqkZy/g96YTnuJTwEXAT/XwGr9DM52qW+vocuRNZn6ozMW/CPiNjlMbgYt3nLolSZJGnrnOU/4W+BXgXRGxvqPYtQj4zx3t9u/htSUNgQUeSd04stz+rxnO/T2wvcfr3ZaZT+5w7MFy+8+Z+a3OE5n5ZER8DTik2xcY5CKIEfH7wB8Dfwp8BPg3mm+x/gvwyYj4qcz8/UG9viRJmnfmOk9ZD7wJeC3NaOUNwGM0u2j9GM109aXAjr+fpMpcZFlSN6YXF/zajidK8vLNHq+305aimbl9tnPFduCZPb7OvIuISeADwIbMfFdm3pOZj2XmLTRz6x8AVkeEu2hJktQe5jpFGVn0euB3ab7EejPwa8Bm4D/xVCwcsSyNGEfwSOrGdCKymB0W3IuIPYADaQobI2OA89JfV253GqqdmY9FxJdpCj0/zcyLE0qSpNFjSrAMnAAAIABJREFUrtOhFKPOKz+dr7k3zTSy7wB39PDakobAAo+kbtxCM3T5FexctPg5RvOzZFDz0vcqt7NthT59vJedNiRJUl3mOt15M/AsYF3ZNl3SCHGKlqRuXFxu3x0RB0wfjIhn0aw7M3IycyIzo4eflV1e+u/L7aqIWNJ5IiJeC/ws8Djw/83fbyNJkgbs4nJrrgNExHNnOPYfaRaO3kazWLSkETOKlWhJIyYz/yEiPgy8DfhKRFwOPAGsAB4BHqrZvyG7HPg7moUG74qIv6aZn/5imulbAZyVmb3O1ZckSZWY6+zkmoj4DvAV4FvAS4Djge8Cv5SZTkOXRpAFHkndegfwz8AZwG/SLLD318AfAP9YsV9DlZnfj4jjaeJwMs16O/sAW4CrgD/NzM9X7KIkSZobc52nXE6T57wJ2JtmB7CPA2syc1PFfknahcjM2n2QJEmSJElSH1yDR5IkSZIkqeUs8EiSJEmSJLWcBR5JkiRJkqSWs8AjSZIkSZLUcq3dReuggw7KiYmJgVz729/+Ns9+9rMHcm3NzrjXY+zrMO51GPc6Bh33m2+++RuZ+by5PDciLgJeBzycmUeUYwcAlwITwCbgjZn5SEQEcAHNdsGPASsz85bynFOB95TLvj8z15XjPwNcTLMTzVXAO3I3u1wMMs8B/x7UYtzrMO51GPd6jH0dg4x7t3lOaws8ExMT3HTTTQO59tTUFJOTkwO5tmZn3Osx9nUY9zqMex2DjntE/GsfT78Y+AhwScexs4AvZOaaiDirPD4TeC2wtPwcDXwUOLoUhM4BlgMJ3BwRGzLzkdJmFXA9TYHnOOCzu+rQIPMc8O9BLca9DuNeh3Gvx9jXMci4d5vnOEVLkiSNtcz8ErBlh8MrgHXl/jrgDR3HL8nG9cB+EXEw8BrgmszcUoo61wDHlXPPzczryqidSzquJUmSNG9aO4JHkiRpgBZn5kMAmflQRDy/HF8C3N/RbnM5tqvjm2c4vpOIWEUz0ofFixczNTXV/28xi23btg30+pqZca/DuNdh3Osx9nWMQtwt8EiSJHUvZjiWczi+88HMtcBagOXLl+cgh9c7fL8O416Hca/DuNdj7OsYhbg7RUuSJGlnXyvTqyi3D5fjm4FDO9odAjy4m+OHzHBckiRpXjmCR5I0Vm5/YCsrz7qy6/ab1pwwwN5ohG0ATgXWlNsrOo6/NSLW0yyyvLVM4boa+OOI2L+0ezVwdmZuiYhvRcQxwA3AW4APD/MXkSS120QPeQvAxce5g9a4ssAjSZLGWkR8GpgEDoqIzTS7Ya0BLouI04H7gJNK86totkjfSLNN+mkApZDzPuDG0u69mTm9cPNv8dQ26Z9lNztoSZLUj16+zPKLrIXFAo8kqdV6/VZr9bIBdUStlZm/MsupY2dom8AZs1znIuCiGY7fBBzRTx8lSZJ2xzV4JEmSJEmSWs4CjyRJkiRJUstZ4JEkSZIkSWo51+CRJGkXelnjx4UKJUnS7vS6fqDULUfwSJIkSZIktZwjeCRJI8VvtSRJkoaj17zL0cqjzRE8kiRJkiRJLWeBR5IkSZIkqeUs8EiSJEmSJLWcBR5JkiRJkqSW66vAExHvjIg7IuIrEfHpiHhWRBwWETdExFcj4tKI2LO03as83ljOT3Rc5+xy/O6IeE1/v5IkSZIkSdJ4mXOBJyKWAG8HlmfmEcAewMnAB4DzM3Mp8AhwennK6cAjmflC4PzSjog4vDzvJcBxwJ9HxB5z7ZckSZIkSdK46XeK1iJg74hYBOwDPAS8Eri8nF8HvKHcX1EeU84fGxFRjq/PzO9m5r3ARuCoPvslSZIkSZI0NhbN9YmZ+UBE/AlwH/Ad4PPAzcCjmbm9NNsMLCn3lwD3l+duj4itwIHl+PUdl+58ztNExCpgFcDixYuZmpqaa/d3adu2bQO7tmZn3Osx9nUY95mtXrZ99436sHjvwb3Ghz95RU/tly3ZdyD9GEW+3yVJkgZrzgWeiNifZvTNYcCjwGeA187QNKefMsu52Y7vfDBzLbAWYPny5Tk5Odlbp7s0NTXFoK6t2Rn3eox9HcZ9ZivPunKg11+9bDvn3T7nf/7m1aZTJmt3YWh8v0uSFqqJAecuUrf6yXBfBdybmV8HiIi/Al4G7BcRi8oonkOAB0v7zcChwOYypWtfYEvH8Wmdz5EkLQAmPmqriHgn8Os0Xz7dDpwGHAysBw4AbgHenJnfi4i9gEuAnwG+CfxyZm4q1zmbZj3CJ4G3Z+bVQ/5VJEnSAtfPGjz3AcdExD5lLZ1jgTuBa4ETS5tTgenx6hvKY8r5L2ZmluMnl122DgOWAl/uo1+SJEl9c0MJSZLUJnMu8GTmDTSLJd9C843WM2imT50JvCsiNtKssXNhecqFwIHl+LuAs8p17gAuoykOfQ44IzOfnGu/JEmS5pEbSkiSpFboaxGCzDwHOGeHw/cwQ9KSmY8DJ81ynXOBc/vpiyRJ0nwa9oYSw9pMAlz0uhbjXodxr2Oc4j7oDSJ6NcgNJcblz3QuRuE9PxqrTEqSJI2YYW8oMazNJMBFr2sx7nUY9zrGKe6D3iCiV4PcUGKcNojo1Si85/tZg0eSJGkh+8GGEpn5BPC0DSVKm5k2lMANJSRJ0rA5gkeSJGlmP9hQgmaK1rHATTy1ocR6Zt5Q4jo6NpSIiA3ApyLig8CP4IYSkqSW6nVn1E1rThhQTzQTCzySJEkzyMwbImJ6Q4ntwK00U6iuBNZHxPvLsc4NJT5RNpTYQrNzFpl5R0RMbyixHTeUkCRJA2CBR5IkaRZuKCFJktrCNXgkSZIkSZJazgKPJEmSJElSy1ngkSRJkiRJajkLPJIkSZIkSS3nIsuSJEmSJBW9bgUujQoLPJKknpn4SJIkSaPFKVqSJEmSJEktZ4FHkiRJkiSp5SzwSJIkSZIktZwFHkmSJEmSpJazwCNJkiRJktRyfe2iFRH7AR8HjgAS+DXgbuBSYALYBLwxMx+JiAAuAI4HHgNWZuYt5TqnAu8pl31/Zq7rp1+SJLVBr7uRbVpzwoB6IkmSpLbrdwTPBcDnMvMngJ8E7gLOAr6QmUuBL5THAK8FlpafVcBHASLiAOAc4GjgKOCciNi/z35JkiRJkiSNjTkXeCLiucDLgQsBMvN7mfkosAKYHoGzDnhDub8CuCQb1wP7RcTBwGuAazJzS2Y+AlwDHDfXfkmSJEmSJI2bfqZo/SjwdeC/R8RPAjcD7wAWZ+ZDAJn5UEQ8v7RfAtzf8fzN5dhsx3cSEatoRv+wePFipqam+uj+7LZt2zawa2t2xr0eY19Hm+O+etn22l2Ys8V7t7f/bX2/QHvf705HlyRJbdFPgWcRcCTwtsy8ISIu4KnpWDOJGY7lLo7vfDBzLbAWYPny5Tk5OdlTh7s1NTXFoK6t2Rn3eox9HW2O+8oe144ZJauXbee82/tagq6aTadM1u7CnLX4/T49Hf3EiNgT2Af4A5rp6Gsi4iya/OdMnj4d/Wia6ehHd0xHX06T49wcERvKyGVJkqR50U+GuxnYnJk3lMeX0yQ4X4uIg8vonYOBhzvaH9rx/EOAB8vxyR2OT/XRL0mSpL51TEdfCc10dOB7EbGCp3KXdTR5y5l0TEcHro+I6enok5Tp6OW609PRPz2s30WSxl2vGxtIbTTnNXgy89+A+yPix8uhY4E7gQ3AqeXYqcAV5f4G4C3ROAbYWqZyXQ28OiL2L4srv7ockyRJqqlzOvqtEfHxiHg2O0xHB+ZtOrokSdJc9TtG/W3AJ8uQ5XuA02iKRpdFxOnAfcBJpe1VNHPSN9LMSz8NIDO3RMT7gBtLu/dOf8MlSRoOv9WSZjTU6ejDWmsQ2rsmUtsZ9zqMex2jFve2rr83F6O03uAovQcGbRTe830VeDLzNpr55Ds6doa2CZwxy3UuAi7qpy+SJEnzbKjT0Ye11iC0ek2kVjPudRj3OkYt7m1eP7BXI7Xe4O3f7qn5pjUnDKgjgzcK7/k5T9GSJElayJyOLkmS2mREynqSJEkjyenokiSpFSzwSJIkzcLp6JIkqS2coiVJkiRJktRyFngkSZIkSZJazgKPJEmSJElSy1ngkSRJkiRJajkLPJIkSZIkSS3nLlqStABNnHVl7S5IkiRJGiJH8EiSJEmSJLWcI3gkSWqJXkdmbVpzwoB6IklSXY5WlnbmCB5JkiRJkqSWs8AjSZIkSZLUchZ4JEmSJEmSWs4CjyRJkiRJUstZ4JEkSZIkSWq5vgs8EbFHRNwaEX9bHh8WETdExFcj4tKI2LMc36s83ljOT3Rc4+xy/O6IeE2/fZIkSZIkSRon8zGC5x3AXR2PPwCcn5lLgUeA08vx04FHMvOFwPmlHRFxOHAy8BLgOODPI2KPeeiXJEmSJEnSWOirwBMRhwAnAB8vjwN4JXB5abIOeEO5v6I8ppw/trRfAazPzO9m5r3ARuCofvolSZI0XxytLEmS2mBRn8//EPD7wHPK4wOBRzNze3m8GVhS7i8B7gfIzO0RsbW0XwJc33HNzuc8TUSsAlYBLF68mKmpqT67P7Nt27YN7NqanXGvx9jXMci4r162ffeNxtTivccnPqP097rlnzPTo5WfWx5Pj1ZeHxEfoxml/FE6RitHxMml3S/vMFr5R4C/i4gXZeaTw/5FJEnSwjXnAk9EvA54ODNvjojJ6cMzNM3dnNvVc55+MHMtsBZg+fLlOTk5OVOzvk1NTTGoa2t2xr0eY19Hr3GfOOvKHq7eb/1+4Vq9bDvn3T4e8dl0ymTtLvxAWz9nOkYrnwu8q2O08q+WJuuAP6Ip8Kwo96EZrfyRHUcrA/dGxPRo5euG9GtIktQKveS7m9acMMCetFM/Ge7PAq+PiOOBZ9F8q/UhYL+IWFRG8RwCPFjabwYOBTZHxCJgX2BLx/Fpnc+RJEmqaWijlYc1UhlaP6KqtYx7Hca9jkHHfVxG487FuIxWHrW/16PwWTPnAk9mng2cDVBG8PxuZp4SEZ8BTgTWA6cCV5SnbCiPryvnv5iZGREbgE9FxAdphi0vBb48135JkiTNh2GPVh7WSGVo74iqtjPudRj3OgY7UhkcrTy7cRmtPEojlWE0PmsG8ad+JrA+It4P3ApcWI5fCHyiDEveQjMXncy8IyIuA+4EtgNnOCddkiSNAEcrS5Kk1piPbdLJzKnMfF25f09mHpWZL8zMk8p8czLz8fL4heX8PR3PPzczfywzfzwzPzsffZIkSepHZp6dmYdk5gTNF1NfzMxTgGtpRiPDzKOVoWO0cjl+ctll6zAcrSxJkgZg4Y/bkiRJml+OVpYkSSPHAo8kSdJuZOYUMFXu30OzC9aObR4HTprl+efS7MQlSZI0EPMyRUuSJEmSJEn1WOCRJEmSJElqOQs8kiRJkiRJLWeBR5IkSZIkqeVcZFmSJEmSNK9uf2ArK///9u4/2s6qPPD49ykRRRQJUm4zSerFNrZSslR6B9K6pr2KYoQuwx/o4KgkLKaZpfizmY6xOosWdU1sRylYa5uWDKFjBUp/kKXYNIPcsT8MBdSCQCkRU7iQEW1iaqT+uPrMH+++cLg5NznnnnvOe358P2uddc/Z7z7vfe6Ty7kP+93v3ps/XXcY0khxgEeSamLhI0mSJGmxeIuWJEmSJEnSgHMGjyRJQ2q8zRlie7ec16VIJEmS1G3O4JEkSZIkSRpwDvBIkiRJkiQNOAd4JEmSJEmSBpwDPJIkSZIkSQPORZYlaZG0u6DtptVdCkSSJEnSyHEGjyRJkiRJ0oBb8AyeiFgJXAv8GPBDYGtmXhkRJwHXA+PAXuB1mXkgIgK4EjgXeBzYkJlfKOdaD7yvnPoDmbl9oXFJkiRJkhZfO7OVnaks9V4nM3hmgE2Z+UJgDXBpRJwGbAZuycxVwC3lNcCrgVXlsRH4OEAZELoMOAs4E7gsIpZ2EJckSVLHImJlRNwaEfdFxD0R8Y7SflJE7IqIB8rXpaU9IuKqiNgTEXdFxBkN51pf+j9QLmxJkiQtqgXP4MnMfcC+8vxbEXEfsBxYB0yWbtuBKeDdpf3azExgd0ScGBHLSt9dmbkfICJ2AWuBTy40NkmSpEUwezHrCxHxbODOUqdsoLqYtSUiNlNdzHo3T72YdRbVxayzGi5mTQBZzrMjMw/0/CeSJGlItLv+5d4t53Upkv6xKIssR8Q48BLgNmCsDP6Qmfsi4pTSbTnwcMPbpkvbfO3Nvs9Gqtk/jI2NMTU1tRjhH+bQoUNdO7fmZ97rY+4Xx6bVM231Hzuu/feoc+Z9ft38HBjEzxkvZkmSpEHS8QBPRDwL+FPgnZn5r9VSO827NmnLI7Qf3pi5FdgKMDExkZOTk23H24qpqSm6dW7Nz7zXx9wvjg1t76I1w4fvdjPDXjPv89v7hsmunXvQP2d6cTGrVxeyYDAH3IaBea+HeV887Vwg8YJKfcx9c93+HOiHz5qOKtyIeBrV4M4nMvPPSvPXImJZKXiWAY+V9mlgZcPbVwCPlvbJOe1TncQlSYuh3WmfkoZTry5m9epCFgz+gNugMu/1MO+Lp52LWV5QqY+5b66bF7KgPz5rFrzIctkV62rgvsz8SMOhHcDs4oHrgZsa2i8qCxCuAQ6Wq187gXMiYmlZpPCc0iZJklSrI13MKsdbvZjVrF2SJGnRdLKL1kuBNwEvj4gvlce5wBbglRHxAPDK8hrgZuBBYA/wB8BbAMr96O8Hbi+Py2fvUZckSaqLF7MkSdIg6WQXrb+h+ZRjgLOb9E/g0nnOtQ3YttBYJEmSumD2YtbdEfGl0vZrVBevboiIS4CHgNeWYzcD51JdzHocuBiqi1kRMXsxC7yYJalPeDu6NFy8MU+SJKkJL2ZJkqRB0sktWpIkSZIkSeoDzuCRNDKchixJkiRpWDmDR5IkSZIkacA5wCNJkiRJkjTgvEVLkiQB7d3GuHfLeV2MRJK0EN6OLo02B3gkDTQLGUmSJEnyFi1JkiRJkqSB5wCPJEmSJEnSgPMWLUmSJEnqQ96KLqkdDvBI6isWMpIkSZLUPgd4JEmSJEnSUGv3QvIg7hjqAI8kSZIk9YAzlSV1kwM8krrKQkaSJEmSus8BHkltccBGkiTpSdZGkvqF26RLkiRJkiQNuL6ZwRMRa4ErgWOAP8zMLTWHJI2Mux85yAavPklSV1nrSIPBGTmSBlVfDPBExDHAx4BXAtPA7RGxIzPvrTcyaTC1W5hsWt2lQCQNrXY/Z65Ze3yXIhkM1jpSfbyQJWlU9MUAD3AmsCczHwSIiOuAdYBFj4aSV4YkaeRY60hH0M3ayAtZkhZiEC9mRWbWHQMRcQGwNjP/c3n9JuCszHzrnH4bgY3l5U8B93cppJOBb3Tp3Jqfea+Pua+Hea+Hea9Ht/P+vMz80S6evyOt1Do9rHPA/w7qYt7rYd7rYd7rY+7r0c28t1Tn9MsMnmjSdtjIU2ZuBbZ2PZiIOzJzotvfR09l3utj7uth3uth3uth3o9e6/SqzgH/Pepi3uth3uth3utj7uvRD3nvl120poGVDa9XAI/WFIskSdJis9aRJEld1S8DPLcDqyLi1Ig4FrgQ2FFzTJIkSYvFWkeSJHVVX9yilZkzEfFWYCfV1qHbMvOeGkPqyfRoHca818fc18O818O812Ok826to8K818O818O818fc16P2vPfFIsuSJEmSJElauH65RUuSJEmSJEkL5ACPJEmSJEnSgBvpAZ6IWBsR90fEnojY3OT40yPi+nL8togY732Uw6eFvP9KRNwbEXdFxC0R8bw64hw2R8t7Q78LIiIjwq0VF0EreY+I15Xf+Xsi4o97HeOwauGz5scj4taI+GL5vDm3jjiHSURsi4jHIuLL8xyPiLiq/JvcFRFn9DrGUWOtUw9rnXpY69TDWqce1jn16PtaJzNH8kG1wOFXgOcDxwL/AJw2p89bgN8rzy8Erq877kF/tJj3lwHPLM/fbN57k/fS79nA54DdwETdcQ/6o8Xf91XAF4Gl5fUpdcc9DI8Wc78VeHN5fhqwt+64B/0B/AJwBvDleY6fC3wGCGANcFvdMQ/zw1qnr/NurVND3ks/a50e591ap7a8W+d0J/d9XeuM8gyeM4E9mflgZn4PuA5YN6fPOmB7eX4jcHZERA9jHEZHzXtm3pqZj5eXu4EVPY5xGLXy+w7wfuA3ge/0Mrgh1krefxn4WGYeAMjMx3oc47BqJfcJnFCePwd4tIfxDaXM/Byw/whd1gHXZmU3cGJELOtNdCPJWqce1jr1sNaph7VOPaxzatLvtc4oD/AsBx5ueD1d2pr2ycwZ4CDw3J5EN7xayXujS6hGQNWZo+Y9Il4CrMzMT/UysCHXyu/7C4AXRMTfRsTuiFjbs+iGWyu5/3XgjRExDdwMvK03oY20dv8GqDPWOvWw1qmHtU49rHXqYZ3Tv2qtdZb06hv1oWZXp+buGd9KH7Wn5ZxGxBuBCeAXuxrRaDhi3iPiR4ArgA29CmhEtPL7voRq6vIk1RXcv46I0zPzm12Obdi1kvvXA9dk5ocj4ueAPyq5/2H3wxtZ/l3tLWudeljr1MNapx7WOvWwzulftf5dHeUZPNPAyobXKzh82toTfSJiCdXUtiNNx9LRtZJ3IuIVwHuB12Tmd3sU2zA7Wt6fDZwOTEXEXqr7RXe4+GDHWv2cuSkzv5+ZXwXupyqC1JlWcn8JcANAZn4eeAZwck+iG10t/Q3QorHWqYe1Tj2sdephrVMP65z+VWutM8oDPLcDqyLi1Ig4lmphwR1z+uwA1pfnFwCfzbJykhbsqHkv02d/n6rg8R7dxXHEvGfmwcw8OTPHM3Ocaj2A12TmHfWEOzRa+Zz5C6rFNomIk6mmMT/Y0yiHUyu5fwg4GyAiXkhV+Hy9p1GOnh3ARWWHiTXAwczcV3dQQ8xapx7WOvWw1qmHtU49rHP6V621zsjeopWZMxHxVmAn1Srk2zLznoi4HLgjM3cAV1NNZdtDdTXrwvoiHg4t5v23gGcBf1LWeXwoM19TW9BDoMW8a5G1mPedwDkRcS/wA+BXM/Nf6ot6OLSY+03AH0TEu6imzm7wf2w7ExGfpJqCf3K55/8y4GkAmfl7VGsAnAvsAR4HLq4n0tFgrVMPa516WOvUw1qnHtY59en3Wif8N5YkSZIkSRpso3yLliRJkiRJ0lBwgEeSJEmSJGnAOcAjSZIkSZI04BzgkSRJkiRJGnAO8EiSJEmSJA04B3gkSZIkSZIGnAM8kiRJkiRJA84BHkmSJEmSpAHnAI8kSZIkSdKAc4BHkiRJkiRpwDnAI0mSJEmSNOAc4JEkSZIkSRpwDvBIallE7I2IvQ2vxyMiI+Ka+qKSJElqnfWMpGHlAI8kzSMiLoiIj0bEX0fEv5bi738f5T0rImJbRDwaEd8tReRvR8TSXsUtSZI0q1f1jDWQVL8ldQcgaaA9ArwQOFh3IF3yPuBFwCFgGvjpI3WOiJ8A/g44BbgJ+EfgTOAdwNqIeGlm/ktXI5YkSe2ynmmwkHrGGkjqD87gkbRgmfn9zPzHzNxXdyxd8i7gBcAJwJtb6P+7VIXN2zPz/MzcnJkvB64Afgr4YNcilSRJC2I9c5iF1DPWQFIfcIBH0lNE5a0RcU9EfCciHomI34mI5zTp2/Se9cb2iPiJiLgxIv4lIr4VEX8VEaeXfj8aEVsjYl/5XrdHxMt69KMeVWbempkPZGYerW9EPB84B9gLfGzO4cuAbwNviojjFz1QSZL0FNYzT+p2PWMNJPUPB3gkzfXbwEeBpcBW4DpgLfB/gGPbPNc4cBswBlwD/BXwCmAqIlYBu4F/D1wP3EA1ffgzEfHjnf4QNXh5+fpXmfnDxgOZ+S3gb4FnAmt6HZgkSSPIemZhFlLPWANJfcI1eCQ9ISJ+Hng78BXgzMzcX9rfC9wKLAP+uY1T/iLwvsx8YlpuRPx34HKqQukG4C2zxUBE7AKupZpK/K4WY34ncGIbMX0pM/+ijf6t+qny9Z/mOf4A1dWtFwC3dOH7S5IkrGc6tJB6xhpI6hMO8EhqdHH5+sHZYgggM78TEe+hKorasRfYMqdtO1VB9HTgV+dc6fljYBvw4ja+xzuB57XRfzvQjYJodsr3fAs0zra3U7xJkqT2Wc8s3ELqGWsgqU84wCOp0Rnl6/9tcuyvgZk2z/elzPzBnLZHy9d/KtN2n5CZP4iIrwErWv0GmTneZkx1ifL1qPe/S5KkjljPdM9C6hlrIKlHXINHUqPZKzBfm3ugFDbtbm952JWczJyZ71gxAzytze/TD2Z/nsMWbyxOmNNPkiR1h/XMwi2knrEGkvqEM3gkNZr9wzsGPNh4ICKOAZ4LPNLroI6kj+5Zv798fcE8x1eVr/Pdny5JkhaH9czCLaSesQaS+oQDPJIafYFqWvMvMqcgAv4D/fmZ0S/3rM/ez39ORPxI4734EfFs4KXAv1HttCFJkrrHembhFlLPWANJfcJbtCQ1uqZ8fW9EnDTbGBHPAP5HLREdRWaOZ2a08djQpTi+QrVt6jhw6ZzDvwEcD1ybmd/uxveXJElPuKZ8tZ5pP4626xlrIKl/9OPotaSaZObfRsRHgbcBX46IG4HvA+uAA8C+OuPrtYg4Hzi/vPyx8vXnIuKa8vwbmflfG97yFuDvgKsi4mzgPuAs4GVU05Lf2/WgJUkacdYzT9WjesYaSOoDDvBImusdVH+ILwX+C9VChH8O/BrwDzXGVYcXA+vntD2/PAD+GXiiIMrMr0TEBNW2qWuBc6mKyKuA32jcqlWSJHWV9cyTul7PWANJ/SEy3a1OkiRJkiRpkLkGjyRJkiRJ0oBzgEeSJEmSJGnAOcAjSZIkSZI04BzgkSRJkiRJGnADu4vWySefnOPj410597e//W2OP/74rpxb8zPv9TH39TDv9TDv9eh23u+8885vZOaPdu0b9Fg36xzwv4O6mPd6mPd6mPeBEJFpAAAaz0lEQVT6mPt6dDPvrdY5AzvAMz4+zh133NGVc09NTTE5OdmVc2t+5r0+5r4e5r0e5r0e3c57RPxzB+99BvA54OlUtdGNmXlZRJwKXAecBHwBeFNmfi8ing5cC/ws1dbL/zEz95ZzvQe4BPgB8PbM3Fna1wJXAscAf5iZW44UUzfrHPC/g7qY93qY93qY9/qY+3p0M++t1jneoiVJkkbdd4GXZ+aLgBcDayNiDfAh4IrMXAUcoBq4oXw9kJk/CVxR+hERpwEXAj8DrAV+NyKOiYhjgI8BrwZOA15f+kqSJC0aB3gkSdJIy8qh8vJp5ZHAy4EbS/t24PzyfF15TTl+dkREab8uM7+bmV8F9gBnlseezHwwM79HNStoXZd/LEmSNGKOeotWRGwDfgl4LDNPL20nAdcD48Be4HWZeaAUN1cC5wKPAxsy8wvlPeuB95XTfiAzt5f2nwWuAY4DbgbekZm5SD+fJEnSUZVZNncCP0k12+YrwDczc6Z0mQaWl+fLgYcBMnMmIg4Czy3tuxtO2/ieh+e0n9Ukho3ARoCxsTGmpqY6/rnmc+jQoa6eX82Z93qY93qY9/qY+3r0Q95bWYPnGuB3qO41n7UZuCUzt0TE5vL63VRTj1eVx1nAx4GzyoDQZcAE1RWxOyNiR2YeKH02UhVEN1NNaf5M5z+aJElSazLzB8CLI+JE4M+BFzbrVr7GPMfma282Y/qwi1mZuRXYCjAxMZHdXD/B9RnqYd7rYd7rYd7rY+7r0Q95P+oAT2Z+LiLG5zSvAybL8+3AFNUAzzrg2jIDZ3dEnBgRy0rfXZm5HyAidlHd3z4FnJCZny/t11JNf3aAR5LUkvHNn26r/zVr3VVC88vMb5b6ZA1wYkQsKbN4VgCPlm7TwEpgOiKWAM8B9je0z2p8z3ztkqQR027tsnfLeV2KRMNmobtojWXmPoDM3BcRp5T2J6YsF7NTk4/UPt2kvaleTV3uh6lVo8i818fc18O8L45Nq2eO3qnBY/sP8tFP3NRy/9XLn9NuSGqin3/fI+JHge+XwZ3jgFdQLZx8K3AB1Zo564HZX5wd5fXny/HPZmZGxA7gjyPiI8C/o5rR/PdUM3tWlV25HqFaiPk/9ernkyRJo2Gxt0lvd8ryfO1N9Wrqcj9MrRpF5r0+5r4e5n1xbGjzKtim1TN8+O7W//ztfcNkmxGpmT7/fV8GbC/r8PwIcENmfioi7gWui4gPAF8Eri79rwb+KCL2UM3cuRAgM++JiBuAe4EZ4NJy6xcR8VZgJ9U26dsy857e/XiSJGkULHSA52sRsazM3lkGPFba55uaPM2Tt3TNtk+V9hVN+kuSJPVEZt4FvKRJ+4NUO2DNbf8O8Np5zvVB4INN2m+mWmtQkiSpKxa6Tfrs1GQ4fMryRVFZAxwst3LtBM6JiKURsRQ4B9hZjn0rItaUHbguajiXJEmSJEmSWtDKNumfpJp9c3JETFPthrUFuCEiLgEe4smrWDdTbZG+h2qb9IsBMnN/RLwfuL30u3x2wWXgzTy5TfpncIFlSRpp7S48KEmSJKm1XbReP8+hs5v0TeDSec6zDdjWpP0O4PSjxSFJkiRJkqTmFnqLliRJkiRJkvqEAzySJEmSJEkDbrG3SZckSZIkaWS4fqD6hQM8kiQdQTtF294t53UxEkmSJGl+3qIlSZIkSZI04BzgkSRJkiRJGnDeoiVJ6jrvTZckSZK6yxk8kiRJkiRJA84BHkmSJEmSpAHnAI8kSZIkSdKAc4BHkiRJkiRpwDnAI0mSJEmSNOAc4JEkSZIkSRpwDvBIkiRJkiQNuI4GeCLiXRFxT0R8OSI+GRHPiIhTI+K2iHggIq6PiGNL36eX13vK8fGG87yntN8fEa/q7EeSJEmSJEkaLQse4ImI5cDbgYnMPB04BrgQ+BBwRWauAg4Al5S3XAIcyMyfBK4o/YiI08r7fgZYC/xuRByz0LgkSZIkSZJGTae3aC0BjouIJcAzgX3Ay4Eby/HtwPnl+brymnL87IiI0n5dZn43M78K7AHO7DAuSZIkSZKkkbFkoW/MzEci4n8CDwH/BvwVcCfwzcycKd2mgeXl+XLg4fLemYg4CDy3tO9uOHXje54iIjYCGwHGxsaYmppaaPhHdOjQoa6dW/Mz7/Ux9/UYpbxvWj1z9E49MnZc9+IZlX/PhRil33dJkqQ6LHiAJyKWUs2+ORX4JvAnwKubdM3Zt8xzbL72wxsztwJbASYmJnJycrK9oFs0NTVFt86t+Zn3+pj7eoxS3jds/nTdITxh0+oZPnz3gv/8HdHeN0x25bzDYJR+3yVJkurQyS1arwC+mplfz8zvA38G/DxwYrllC2AF8Gh5Pg2sBCjHnwPsb2xv8h5JkiRJkiQdRScDPA8BayLimWUtnbOBe4FbgQtKn/XATeX5jvKacvyzmZml/cKyy9apwCrg7zuIS5IkSZIkaaR0sgbPbRFxI/AFYAb4ItXtU58GrouID5S2q8tbrgb+KCL2UM3cubCc556IuIFqcGgGuDQzf7DQuCRJ3TfeR7dc9ZN287J3y3ldikSSJEmjpqNFCDLzMuCyOc0P0mQXrMz8DvDaec7zQeCDncQiSZIkSZI0qjrdJl2SJEmSJEk1c4BHkiRJkiRpwDnAI0mSJEmSNOAc4JEkSZIkSRpwDvBIkqSRFhErI+LWiLgvIu6JiHeU9pMiYldEPFC+Li3tERFXRcSeiLgrIs5oONf60v+BiFjf0P6zEXF3ec9VERG9/0klSdIwc4BHkiSNuhlgU2a+EFgDXBoRpwGbgVsycxVwS3kN8GpgVXlsBD4O1YAQ1e6iZ1HtKHrZ7KBQ6bOx4X1re/BzSZKkEeIAjyRJGmmZuS8zv1Cefwu4D1gOrAO2l27bgfPL83XAtVnZDZwYEcuAVwG7MnN/Zh4AdgFry7ETMvPzmZnAtQ3nkiRJWhQO8EiSJBURMQ68BLgNGMvMfVANAgGnlG7LgYcb3jZd2o7UPt2kXZIkadEsqTsASZKkfhARzwL+FHhnZv7rEZbJaXYgF9A+9/tvpLqNi7GxMaamplqIemEOHTrU1fOrOfNeD/Nej1HK+6bVM109f7t5HKXc95N+yLsDPJIkaeRFxNOoBnc+kZl/Vpq/FhHLMnNfuc3qsdI+DaxsePsK4NHSPjmnfaq0r2jS/ykycyuwFWBiYiInJyfndlk0U1NTdPP8as6818O812OU8r5h86e7ev69b5hsq/8o5b6f9EPevUVLkiSNtLKj1dXAfZn5kYZDO4DZnbDWAzc1tF9UdtNaAxwst3DtBM6JiKVlceVzgJ3l2LciYk35Xhc1nEuSJGlROINHkiSNupcCbwLujogvlbZfA7YAN0TEJcBDwGvLsZuBc4E9wOPAxQCZuT8i3g/cXvpdnpn7y/M3A9cAxwGfKQ9JkqRF4wCPJInxLk8tlvpZZv4NzdfJATi7Sf8ELp3nXNuAbU3a7wBO7yBMSZKkI/IWLUmSJEmSpAHX0QBPRJwYETdGxD9GxH0R8XMRcVJE7IqIB8rXpaVvRMRVEbEnIu6KiDMazrO+9H8gItbP/x0lSZIkSZI0V6czeK4E/jIzfxp4EXAfsBm4JTNXAbeU1wCvBlaVx0bg4wARcRJwGXAWcCZw2eygkCRJkiRJko5uwQM8EXEC8AtUu06Qmd/LzG8C64Dtpdt24PzyfB1wbVZ2AyeWLUdfBezKzP2ZeQDYBaxdaFySJEmSJEmjppNFlp8PfB34XxHxIuBO4B3AWNkOlMzcFxGnlP7LgYcb3j9d2uZrP0xEbKSa/cPY2BhTU1MdhD+/Q4cOde3cmp95r4+5r0c/5X3T6pm6Q+iZseP65+ftl3//Xuin33dJkqRh1MkAzxLgDOBtmXlbRFzJk7djNdNsd4o8QvvhjZlbga0AExMTOTk52VbArZqamqJb59b8zHt9zH09+invG0ZoF61Nq2f48N39sYnk3jdM1h1Cz/TT77skSdIw6qTCnQamM/O28vpGqgGer0XEsjJ7ZxnwWEP/lQ3vXwE8Wton57RPdRCXJEmSJElDYbzNC3HXrD2+S5Go3y14DZ7M/H/AwxHxU6XpbOBeYAcwuxPWeuCm8nwHcFHZTWsNcLDcyrUTOCcilpbFlc8pbZIkSZIkSWpBp3PU3wZ8IiKOBR4ELqYaNLohIi4BHgJeW/reDJwL7AEeL33JzP0R8X7g9tLv8szc32FckiRJkiRJI6OjAZ7M/BIw0eTQ2U36JnDpPOfZBmzrJBZJkiRJkqRRteBbtCRJkiRJktQf+mMbEUmSRlC7iybu3XJelyKRJEnSoHMGjyRJkiRJ0oBzBo8kDaF2Z4ZIkiRJGmzO4JEkSZIkSRpwDvBIkiRJkiQNOG/RkiRJkiSp8FZ3DSpn8EiSJEmSJA04B3gkSZIkSZIGnAM8kiRJkiRJA84BHkmSJEmSpAHnAI8kSZIkSdKAc4BHkiRJkiRpwDnAI0mSJEmSNOA6HuCJiGMi4osR8any+tSIuC0iHoiI6yPi2NL+9PJ6Tzk+3nCO95T2+yPiVZ3GJEmSJEmSNEoWYwbPO4D7Gl5/CLgiM1cBB4BLSvslwIHM/EngitKPiDgNuBD4GWAt8LsRccwixCVJkiRJkjQSOhrgiYgVwHnAH5bXAbwcuLF02Q6cX56vK68px88u/dcB12XmdzPzq8Ae4MxO4pIkSZIkSRolSzp8/28D/w14dnn9XOCbmTlTXk8Dy8vz5cDDAJk5ExEHS//lwO6Gcza+5ykiYiOwEWBsbIypqakOw2/u0KFDXTu35mfe62Pu69Fu3u9+5GDLfTetXkBAI2LsONi0euboHfvQIP936ueMJElSdy14gCcifgl4LDPvjIjJ2eYmXfMox470nqc2Zm4FtgJMTEzk5ORks24dm5qaolvn1vzMe33MfT3azfuGzZ/uXjAjZNPqGT58d6fXN+qx9w2TdYewYH7OSJIkdVcnFe5LgddExLnAM4ATqGb0nBgRS8osnhXAo6X/NLASmI6IJcBzgP0N7bMa3yNJkiRJkqSjWPAaPJn5nsxckZnjVIskfzYz3wDcClxQuq0HbirPd5TXlOOfzcws7ReWXbZOBVYBf7/QuCRJktoREdsi4rGI+HJD20kRsavsCrorIpaW9oiIq8run3dFxBkN71lf+j8QEesb2n82Iu4u77mqrEEoSZK0qBZjF6253g38SkTsoVpj5+rSfjXw3NL+K8BmgMy8B7gBuBf4S+DSzPxBF+KSJElq5hqqnTwbbQZuKbuC3lJeA7ya6mLUKqp1AT8O1YAQcBlwFtVmEZfNDgqVPhsb3jf3e0mSJHVsURYhyMwpYKo8f5Amu2Bl5neA187z/g8CH1yMWCRJktqRmZ+LiPE5zeuAyfJ8O1Wd8+7Sfm2Zhbw7Ik6MiGWl767M3A8QEbuAtRExBZyQmZ8v7ddS7TD6me79RJIkaRQN5iqTkiSNoPE2F9reu+W8LkUyEsYycx9AZu6LiFNK+xO7ghazu38eqX26SbskSdKicoBHkiSpde3uCtrybqERsZHqVi7Gxsa6uq2829bXw7zXw7zXY5Dzvmn1TN0hdGSQcz/I+iHvDvBIkiQd7msRsazM3lkGPFba59v9c5onb+mabZ8q7Sua9D9MZm4FtgJMTExkN7eVd9v6epj3epj3egxy3je0OWO231yz9viBzf0g64ff+W4ssixJkjToGnf/nLsr6EVlN601wMFyK9dO4JyIWFoWVz4H2FmOfSsi1pTdsy5qOJckSdKicQaPJEkaaRHxSarZNydHxDTVblhbgBsi4hLgIZ7cKOJm4FxgD/A4cDFAZu6PiPcDt5d+l88uuAy8mWqnruOoFld2gWVJkrToHOCRpJrc/cjBgZ8CLA2DzHz9PIfObtI3gUvnOc82YFuT9juA0zuJUZIk6Wi8RUuSJEmSJGnAOcAjSZIkSZI04BzgkSRJkiRJGnAO8EiSJEmSJA04B3gkSZIkSZIGnAM8kiRJkiRJA84BHkmSJEmSpAHnAI8kSZIkSdKAW7LQN0bESuBa4MeAHwJbM/PKiDgJuB4YB/YCr8vMAxERwJXAucDjwIbM/EI513rgfeXUH8jM7QuNS5LqMr75023137S6S4FIkiRJGjmdzOCZATZl5guBNcClEXEasBm4JTNXAbeU1wCvBlaVx0bg4wBlQOgy4CzgTOCyiFjaQVySJEmSJEkjZcEDPJm5b3YGTmZ+C7gPWA6sA2Zn4GwHzi/P1wHXZmU3cGJELANeBezKzP2ZeQDYBaxdaFySJEmSJEmjZsG3aDWKiHHgJcBtwFhm7oNqECgiTindlgMPN7xturTN197s+2ykmv3D2NgYU1NTixH+YQ4dOtS1c2t+5r0+5n5xbFo901b/sePaf486N0p576f/rv2ckSRJ6q6OB3gi4lnAnwLvzMx/rZbaad61SVseof3wxsytwFaAiYmJnJycbDveVkxNTdGtc2t+5r0+5n5xbGh7DZ4ZPnz3ooyzqw2jlPe9b5isO4Qn+DkjSZLUXR3tohURT6Ma3PlEZv5Zaf5aufWK8vWx0j4NrGx4+wrg0SO0S5IkSZIkqQULHuApu2JdDdyXmR9pOLQDWF+erwduami/KCprgIPlVq6dwDkRsbQsrnxOaZMkSZIkSVILOpmj/lLgTcDdEfGl0vZrwBbghoi4BHgIeG05djPVFul7qLZJvxggM/dHxPuB20u/yzNzfwdxSZIkYLzN2wb3bjmvS5FIklSvdv8mDrK7HznY8tIB/u0fLgse4MnMv6H5+jkAZzfpn8Cl85xrG7BtobFIUjeMUiEgSZIkabB1tAaPJEmSJEmS6ucAjyRJkiRJ0oBzgEeSJEmSJGnAOcAjSZIkSZI04BzgkSRJkiRJGnCdbJMuSQPFXbEkSZIkDStn8EiSJEmSJA04B3gkSZIkSZIGnLdoSRpo3nYlSZIkSc7gkSRJkiRJGnjO4JHUV5yRI0mSJEntc4BHkiQB7Q2w7t1yXhcjkSRJUru8RUuSJEmSJGnAOYNHUld5y5UkSZIWmzWmdLi+GeCJiLXAlcAxwB9m5paaQ5LUhH9MJWlhrHUkSVI39cUAT0QcA3wMeCUwDdweETsy8956I5NGw92PHGSDAzeS1DXWOpKkftTuxVvX4OtvfTHAA5wJ7MnMBwEi4jpgHWDRI9H9WTObVnf19JKGULufS9esPb5LkQwMax1JOgJniUud65cBnuXAww2vp4Gz5naKiI3AxvLyUETc36V4Tga+0aVza37mvSZvN/e1MO/1MO/1eNmHup7353Xx3IvhqLVOD+sc8L+Dupj3epj3epj3mnSz1okPdeOsQ6Obv/Mt1Tn9MsATTdrysIbMrcDWrgcTcUdmTnT7++ipzHt9zH09zHs9zHs9zPvRa51e1Tngv0ddzHs9zHs9zHt9zH09+iHv/bJN+jSwsuH1CuDRmmKRJElabNY6kiSpq/plgOd2YFVEnBoRxwIXAjtqjkmSJGmxWOtIkqSu6otbtDJzJiLeCuyk2jp0W2beU2NIPZkercOY9/qY+3qY93qY93qMdN6tdVSY93qY93qY9/qY+3rUnvfIPGypG0mSJEmSJA2QfrlFS5IkSZIkSQvkAI8kSZIkSdKAG+kBnohYGxH3R8SeiNjc5PjTI+L6cvy2iBjvfZTDp4W8/0pE3BsRd0XELRHxvDriHDZHy3tDvwsiIiPCrRUXQSt5j4jXld/5eyLij3sd47Bq4bPmxyPi1oj4Yvm8ObeOOIdJRGyLiMci4svzHI+IuKr8m9wVEWf0OsZRY61TD2udeljr1MNapx7WOfXo+1onM0fyQbXA4VeA5wPHAv8AnDanz1uA3yvPLwSurzvuQX+0mPeXAc8sz99s3nuT99Lv2cDngN3ARN1xD/qjxd/3VcAXgaXl9Sl1xz0MjxZzvxV4c3l+GrC37rgH/QH8AnAG8OV5jp8LfAYIYA1wW90xD/PDWqev826tU0PeSz9rnR7n3Vqntrxb53Qn931d64zyDJ4zgT2Z+WBmfg+4Dlg3p886YHt5fiNwdkRED2McRkfNe2bempmPl5e7gRU9jnEYtfL7DvB+4DeB7/QyuCHWSt5/GfhYZh4AyMzHehzjsGol9wmcUJ4/B3i0h/ENpcz8HLD/CF3WAddmZTdwYkQs6010I8lapx7WOvWw1qmHtU49rHNq0u+1zigP8CwHHm54PV3amvbJzBngIPDcnkQ3vFrJe6NLqEZA1Zmj5j0iXgKszMxP9TKwIdfK7/sLgBdExN9GxO6IWNuz6IZbK7n/deCNETEN3Ay8rTehjbR2/waoM9Y69bDWqYe1Tj2sdephndO/aq11lvTqG/WhZlen5u4Z30oftaflnEbEG4EJ4Be7GtFoOGLeI+JHgCuADb0KaES08vu+hGrq8iTVFdy/jojTM/ObXY5t2LWS+9cD12TmhyPi54A/Krn/YffDG1n+Xe0ta516WOvUw1qnHtY69bDO6V+1/l0d5Rk808DKhtcrOHza2hN9ImIJ1dS2I03H0tG1knci4hXAe4HXZOZ3exTbMDta3p8NnA5MRcReqvtFd7j4YMda/Zy5KTO/n5lfBe6nKoLUmVZyfwlwA0Bmfh54BnByT6IbXS39DdCisdaph7VOPax16mGtUw/rnP5Va60zygM8twOrIuLUiDiWamHBHXP67ADWl+cXAJ/NsnKSFuyoeS/TZ3+fquDxHt3FccS8Z+bBzDw5M8czc5xqPYDXZOYd9YQ7NFr5nPkLqsU2iYiTqaYxP9jTKIdTK7l/CDgbICJeSFX4fL2nUY6eHcBFZYeJNcDBzNxXd1BDzFqnHtY69bDWqYe1Tj2sc/pXrbXOyN6ilZkzEfFWYCfVKuTbMvOeiLgcuCMzdwBXU01l20N1NevC+iIeDi3m/beAZwF/UtZ5fCgzX1Nb0EOgxbxrkbWY953AORFxL/AD4Fcz81/qi3o4tJj7TcAfRMS7qKbObvB/bDsTEZ+kmoJ/crnn/zLgaQCZ+XtUawCcC+wBHgcurifS0WCtUw9rnXpY69TDWqce1jn16fdaJ/w3liRJkiRJGmyjfIuWJEmSJEnSUHCAR5IkSZIkacA5wCNJkiRJkjTgHOCRJEmSJEkacA7wSJIkSZIkDTgHeCRJkiRJkgacAzySJEmSJEkD7v8DGe/Y2/HAGjUAAAAASUVORK5CYII=\n"
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "### cosグラフ"
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "import scipy as sp\nimport scipy.stats as stats\nimport scipy.spatial as spatial\nimport matplotlib.pyplot as plt\n\ntheta = sp.linspace(-180, 180, 1000)\nplt.plot(theta, sp.cos(sp.radians(theta)), label=\"cos\")\nplt.plot(theta, -sp.sin(sp.radians(theta)), linestyle=\"--\", label=\"diff(cos)=-sin\")\nplt.plot(theta, sp.sin(sp.radians(theta)), linestyle=\"--\", label=\"inte(cos)=sin(x)\")\nplt.tight_layout()\nplt.grid()\nplt.show()",
"execution_count": 56,
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAAEYCAYAAAAJeGK1AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzs3Xd4VFX+x/H3yWTSSCEJpBBKKr2H3quACBYURUVFEEERe9ldy65lXbtSFJAm6k9EsSBNWoJ06b2kECCEhJCQkJ7MzPn9MUEjUpLMzdy5k/t6nnmSzNzycRzyzbnn3HOElBKdTqfT6RyNi9oBdDqdTqe7Gr1A6XQ6nc4h6QVKp9PpdA5JL1A6nU6nc0h6gdLpdDqdQ9ILlE6n0+kckl6gdDqdTueQ9AKl0+l0OoekFyidTqfTOSRXtQNUR7169WR4eLjaMaqkoKCAOnXqqB2jyrSaG7SbXau5Qc+uBi3m3r179wUpZf0bbafJAhUeHs6uXbvUjlEl8fHx9OvXT+0YVabV3KDd7FrNDXp2NWgxtxDiVGW20y/x6XQ6nc4h6QVKp9PpdA5JL1A6nU6nc0h6gdLpdDqdQ9ILlE6n0+kckl6gdDqdTueQFClQQoj5QojzQohD13hdCCGmCSEShRAHhBAdK7z2oBAiofzxoBJ5dDqdTqd9SrWgFgJDr/P6MCCm/DER+AxACBEAvAZ0BboArwkh/BXKpNPpdDoNU+RGXSnlb0KI8OtsciuwSEopge1CiLpCiFCgH7BWSpkNIIRYi7XQfaNELp3CLGa4cAI86oJvKGQnQ/w7YDGBEODpD16B0Hw4hLRRO63DKzVZOJGRR1JmPsmZBVwsLCW3qIxz6cUsy9iHl7uBUD9Pwup60iLUl+ggbwwuQu3YDu3ExRMcvnCY9MJ0MgszKTQVEuwVzNOxTwOwInkFri6uxPjH0NinMa4umpyroNaw1/+dMOBMhZ9Ty5+71vN/I4SYiLX1RXBwMPHx8TUStKbk5+drLjOAOeskCV8tJyB7N3VzDmOwlJAU+QBnGo/CoyiDdifikMKAkBZcTXkYTQUcySjlfHAWdfJPEpW0kIv+7cis35Niz2C7ZnfE9zyz0MLOdBOHs8wkXLRQarE+LwAvI3i5CgQWknLSKDZLCsr+3NfdADF1DbQPMtAhyECgp+N1Idv7PT9Xeo5Tpafo5t0NgE8zPuVo8VEAvF288XDxINgYTHyeNdP0tOmcLTsLgIfwIMYjhnZe7ejq3dUhPy+VodXclWGvAnW1P/vkdZ7/+5NSzgHmAHTq1ElqbWoPLU5HQkk+5nfuwmAphcBo6PQghMUS1aQHUXUbW7cZdvdf9zGV0hJJS1d3SBZwupSA5C+ISv4CGnaB2AehzV3g6l7j8R3lPS8xmVm+/xxf7TjF3tM5ADQP8eHeboF0CvenabAPTQK9cHc1AH/NXVhqIvViEYfO5rLvTA6bEy7w1dECvjoKPaMDubtzY4a2CsHN1TGKlT3e88KyQpYlLeOnxJ84nHUYF+HC5MGT8XP3I+xiGG4GNxrUaYDRYPzbvl1NXUnJTSEhJ4G95/eyLW0bxYHF9Ovej7i4ONybutMlpAsGF0ON/jcoyVE+5zXBXgUqFWhU4eeGQFr58/2ueD7eTpl0Vyorgj1fQupOGPU5uHtztMXTtB5wNwRGVe4Yrm5/fh/ZFx7bBhdPwaGlcOBbWPm89RKgHQqU2gpKTCzYcpKFW09xIb+E6CBvXhzanFvahtIowKtSx/Byc6VpsA9Ng324o2NDAJIz81l+4BxLdp1h6jd7aeDnwaR+UYzu1AgPo3Z+sVbH7+d+55mNz5BbkkvzgOa82PlFbgq/CT93PwBi/GOuu7+nqyctAlvQIrAFI6NGAlBqLgXgZMlJPlr7EY18GvFQq4e4PeZ2jC5/L3I6+7FXgVoGTBFCLMY6ICJXSnlOCPEr8N8KAyNuAv5hp0y6yywWOPgdrHsN8s5Bo25QkgfuPlyo36Pyxela/JtA72eg19OQlWTtq5ISFt8H0QOg44Nwlb92tarMbGHxzjN8si6BC/kl9G1an/G9IugdUw8hbO9DiqzvzdSBMUzpH83GhExmbkjk1Z8PMzMukReGNOf2DmG4OFFfVZm5jKziLELqhBDtH02XkC480PIB2ge1V+T4bgbrH1VN3Jvwft/3WXR4EW9sf4NFRxYxtcNUBjcZrMj/N13VKVKghBDfYG0J1RNCpGIdmWcEkFLOAlYCNwOJQCEwrvy1bCHEG8DO8kO9fnnAhM5OspPhh4nWVlODjjBqLoT3qplzCQH1oq3fF12EomxY8SzsWgAjpkHD2Jo5rx3tO5PDS0sPcCw9jy7hAcweG0tsk5oZmOriIujfLIh+TeuzLTmLd1Yf59nv9vP1jlO8fmtrWof51ch57Wlr2lb+u+O/1DHW4Zvh3xDgEcCH/T6skXMZhIGB4QO5qclN/Jb6Gx/v+Zi3drxFtwbd8HXzrZFz6q5PqVF8Y27wugQev8Zr84H5SuTQVYNXPWtr5tZPod0YcLFTX4ZXAIxbBceWWy/7zRsEXSfBwFfB6GmfDAoqKjXz3q/HWbD1JME+Hsy6P5YhrYLt8pe3EIIeUfX4cXIg3+9J5d3Vx7h15haeGBDN4/2jMRoco3+qKgrKCvhg1wd8d+I7wn3DmdJ+Ci7CPv8dQgj6NupLr7BenM0/i6+bLyaLiV+SfmFk1EhN9U9pnfY+uTrbZSVZW02mEvDwhQnroMN99itOlwkBLUbA4zug08Nw4lcwl914PweTkJHHrTM3M3/LSe7r2pg1z/RhaOsQu18WcnERjO7UiPXP9GNE21A+XpfAnZ9t5eSFArvmsFVKbgqjlo3i+xPfM67VOL4f+T29G/a2ew6Di4HGvtbBQPFn4nl166tMXDuR84Xn7Z6lttILVG1zbAXM6QcJa6z3NIG1UKjJww+GfwCTNlkLZlkRHPlZ3UyVtGTXGUbM2Ex2QSmLHu7Cm7e1wddD3f40Py8jH9/TgZn3duRUdiEjp29m7ZEMVTNVRah3KC0DW/LFsC94ptMzuBvUH1AzsPFA3uj5BgcvHOSuX+5i69mtakeqFfQCVVtYLLD+DVh8LwREwsSNjnczrVv5stW7FsCSB2D1P6w3Bzsgs0Xy+i9HeOH7A3Rs7M/Kqb3p0/SGK1jb1fC2oSx/ohfh9erwyKJdfLDmOBbLVe/iUF2JuYQPd39IXmke7gZ3Puz3IR2COqgd6w9CCG6Lvu2PfrDJ6yez9MRStWM5Pb1A1RbrXoVN70OH++HhX60j6xxVl4nQdTJs/xT+724ozlU70V/kl5h4ZNEu5m85ybie4Sx6uAtBvh5qx7qqhv5efDepO3fFNmT6hkSeWLyXEpNjFf3cklwmrpnIgkML2Ja2Te041xVVN4qvb/6aoeFDaRbQTO04Tk+f56O2iB0HvmHWgQhqX9K7EYMrDPsf1G9qHUCxcDjc/yN4q99COZ9XzAPzfifhfD5v3Naasd0cuNCX8zAaePfOtkQHefP2qmNk5Zcwe2wn/DzVH9qfmpfK5HWTOZt/lnf7vMtN4TepHemGvIxevNPnnT9+XpG8ggGNB+Dpqr3BPY5Ob0E5s7wMiHvbOkovMAq6TXb84lRRp4dhzLdQmA2FF9ROw9mcIkbP2saprELmP9RZE8XpMiEEj/aN4uO727P71EXunr2N85eKVc2UnJPM2FVjySrOYs7gOQyLGKZqnupIvJjIPzf/k0lrJ5Ffmq92HKejFyhnlZcOX9wCW6dZ73XSqphB8MQeCGphLbT5marEOHmhgNGztpFVUMpXE7rQ18H6myrrtg5hLHioC6ezCxnz+XZVi5Snqydh3mEsGrqITiGdVMthi2j/aN7p/Q4HMg8wfs14LhZfVDuSU9ELlDO6lGa9LJZ7Fu5favtMEGozlvfvbJsBs3vbveCevFDA6NnbKCoz880j3YhtEmDX8yutV0w9Fo7rwrncYu5RoUil5qVikRZCvUP5ctiXRPtH2/X8ShsaMZRPBnxCUk4Sj6x5hNwSx+oz1TK9QDmb/POw8BZrC2rsD9Ckh9qJlBM1AEzF8MWtkJtql1OezSni/rk7MFsk307s5hSzMwB0iQjgi4e7kHG5SOXZp0gl5SRxz4p7mLZnGoDTTCHUp2Efpg2YRsqlFHam77zxDrpK0QuUs8k4ZJ1C6P4foHE3tdMoK7gVjP0RinPgixHWIlyDMvNKuH/uDi4Vl7Ho4S7EBPvU6PnsrXO4tUidyynmofk7uVRcszdJp+WnMXHtRIwuRkbFjKrRc6mhR4MerLpjFYOaDFI7itPQC5SzkOX3t0QNgKcOQuOu6uapKQ06wH3fWweAfH0nmE01cppLxWWMnbeD9NxiFo7r7DQtpyt1Cg9g1thYTmTkMXHRLorLamYIelZRFo+ufZSisiJmDZpFI99GN95Jg+p7Wfsmt57dyrPxz2Ky1Mzns7bQC5QzsJjhu4dg79fWn92d6y/9v2ncFe5eBD2fsg5JV1iZ2cLjX+8h8Xw+cx6I1Xyf0430bVqf9+9qx/bkbJ5avA+zwjfzWqSFqXFTSS9IZ8bAGbXi/qHU/FTWnFrD2zveRkrHvDlaC/T7oJzB2lfhyE/Od0nveqIrXEY5fwzqN1NkCL2Ukld+OsSmhAu8e2dbesdoc7ReVd3WIYysglLeWH6Et1ce5eVbWip2bBfhwlMdn6LIVETH4I6KHdeRjW42mrP5Z5l/aD4NvBswvs14tSNpkt6C0ro9i6yj27pMtN7nVNukH4RZvayzZCjgs41JLN55hin9oxndyTkvQ13L+F4RPNQjnLmbT7Jk5xlFjpl4MRGAziGd6dOwjyLH1IonOz7JsPBhfLznY1afXK12HE3SC5SWpWyG5c9Y+52GvK12GnUEt4bWd8CGt+D4KpsOtfrQOd5dfZwR7RrwzOCmCgXUlpeHt6B3TD3+9dNBfj9p29JsPyX+xB3L7mBT6iaF0mmLi3DhzV5v0jGoI7sydqkdR5P0AqVlZ3dbJ369c0GN9MVoghAw4hMIbWddQiTzRLUOk5CRx7NL9tO+UV3eu7OtU61IWxWuBhdmjOlII38vJn21mzPZhdU6zr7z+/jPtv/QJbQL3RrUokvPV3AzuDFr8Cz+1fVfakfRJL1AaVnPJ2FiPHjWVTuJuoyecM/XYHCzztZeklel3S8Vl/Hol7vxdDPw2f0d8TDW7gXp/LyMzH2wEyazhYlf7q7yyL4LRRd4Nv5ZQuuE8kHfDzC6qD/nn5o8XT0RQpCck8y/t/5bH9lXBXqB0qJ1/4ZT5evRuHmpGsVh+DWE0Yug1e1grFPp3SwWybNL9nMqu5AZ93Yk1E+f8BMgsr43n9zTgaPnLvHvZYcrvZ9FWnjxtxfJLc3lo34f4efunMPzq+NQ1iGWJizlo90fqR1FM2rpdSEN2/sVbP4IhMG5ZolQQnhP6wOsqwVXwmcbk1h7JINXbmlJt8jAGgynPf2bB/F4/yhmxiXRKTyAO2Mb3nAfgWBI+BBujb61Vgwnr4qRUSM5fOEwi44somNQRwY2Gah2JIenSAtKCDFUCHFcCJEohHjpKq9/JITYV/44IYTIqfCaucJry5TI47TOHYAVz0JEH+j/T7XTOK5z+2FaB3xzj193s10p2Xyw5ji3tA3l4Z7h9smmMU8Pakr3yEBe/ukgx9IvXXfbUnMpQghGNxvNyKiRdkqoLc91eo5Wga14ZesrnM0/q3Ych2dzgRJCGICZwDCgJTBGCPGXmyiklE9LKdtLKdsD04EfKrxcdPk1KaX+qb6W0gLrzbie/jBqPrjU7n6S66rbBFxcaXnkPSi6+uzSuYVlPLl4Hw39vXj7jjZOMyec0lwNLnwypj2+HkYe+2oPBSVX7z9JL0jnlh9v4UjRETsn1Bajwch7fd7DIi3MOzhP7TgOT4kWVBcgUUqZLKUsBRYDt15n+zHANwqct3bZ/YV1Fu87PneIhfscmmdduGsBbqUX4ecpf04DVU5KyUs/HCDjUjHTxnTAx6N2d+LfSJCPB9PGdOBkVgFvrvh7ATJbzPxr87/IKcmhnms9FRJqSyPfRswfMp9/dPmH2lEcnrB1Gg4hxJ3AUCnlhPKfxwJdpZRTrrJtE2A70FBKaS5/zgTsA0zA/6SUP13jPBOBiQDBwcGxixcvtim3veXn5+Pt7V39A0gLfrnHyK2r3B3+lWFzbhXVT/yOVqlfcSJmEmlhfy6GF3+mjIWHSxnd1MjNkW4qJrw6R33PvzteyoqTZTzRwZ3Y4D+7r9fmrmVZzjLuDbyXNrRxyOyVocb7XmgpJMuURSO36t8U7qifl+vp37//binljRcBk1La9ADuAuZW+HksMP0a27545WtAg/KvkUAKEHWjc8bGxkqtiYuLq96Ol85JmZOqaJaqqHZuBxC3YYOUi26X8rtxfzx3Iv2SbPbySnn/3O3SbLaomO7aHPU9Lykzy+HTfpPt//OrTM8tklJKeejCIdn+i/by6binpcVicdjslaFG9olrJsoB3w6QOcU51T6GFt9zYJesRH1R4hJfKlCx/DcE0q6x7T1ccXlPSplW/jUZiAc6KJDJOVgs1ptP5w2u9Kg0XQVCwN1fwijrtf4ys4VnluynjpsrH4xuV2tvxq0uN1cXPr67A0VlZp77bj8Wi2RT6iYCPAN4rftrej9eNUztOJXs4mz+u+O/akdxSEoUqJ1AjBAiQgjhhrUI/W00nhCiGeAPbKvwnL8Qwr38+3pAT0DvZb1sxyw4uRH6vgCu7mqn0Sa3OtZClX2SDUtmcPBsLm/e1pogHw+1k2lSdJA3Lw9vyaaECyzcmsKkdpNYOmKpfr9TNbUKbMXEdhNZeXIlq1P0+fquZHOBklKagCnAr8BRYImU8rAQ4nUhRMVReWOAxeXNu8taALuEEPuBOKx9UHqBAshKgvWvQ8wQ6Pig2mk07+Lqtxhw7N881qyAYW1C1Y6jafd1bUyX5nm8G7eBlAsF1PWo5TOZ2GhCmwm0DmzNm9vfJLMwU+04DkWRG3WllCuBlVc89+oVP//7KvttBdookcGpWCyw7Anr1D0jPlZkGYnarNRk4ZH02/lUrOfZ/PfBdKveIrVBkamInDoLMYaU8fzS5nz7SA/9cqkNjC5G3ur9Fh/v/ljtKA5Hn+rIEZmKwa8RDHkLfBuonUbzpq1PYNd5SOvzDoas4/CbMktz1FbT9k7jXOFZHmj6LDtP5vDl9lNqR9K8SL9Ipg2Y9seKvDorvUA5IjcvuGM2dByrdhLNO3Q2l882JnFnbEPaDxgNbe+GzR9CRuXnl9P9aXfGbr4++jX3Nr+X5/oMo0/T+ryz+li1Zz3X/VVafhrPbXyOrKIstaM4BL1AORIpYdWL+i9PhZgt1hty/b3ceGV4+f1jQ96Gbo9B3cbqhtOgIlMRr255lTDvMJ7s+CRCCN6+ow0uQvDi0gP60uYKKDIVseH0Bt7d+a7aURyCXqAcyZ4vrCP3zvyudhKnsO60iUNnL/Gfka3w8yqfLaJOINz0Brj7/G2GCd31uQpXhkcO5/Uer+NltM6iH1bXk3/c3JytSVksVmgV3tosqm4Uj7R9hJUnV/Jb6m9qx1GdXqAcRf55WPsqhPeG2IfUTqN5Z7ILWZpQysDmQdzcJuTvG6Qfgs8HwMUUu2fTKqPByGPtH6NLaJe/PH9vl8Z0iQjgf6uOcalEL/q2mtB6AtF1o3lj+xsUlBWoHUdVeoFyFGtehtJCGP6hPmrPRlJKXv35EAJ4/bbWV7+B1MMPLpyA5U/rLakbsEgLz298ns1nN1/1dSEE/729NYWlJr49XmrndM7HaDDyWvfXyCjIYO7BuWrHUZVeoBxBymY48C30egrqN1U7jeatOHiOuOOZ3BHjRljdayxAWLcRDHwNkjbAoaX2DagxSxOWsjplNdnF2dfcJjrIh4l9ItmSZmJr0gU7pnNO7YPa817f93i49cNqR1GVXqAcQVgnGPwG9H5W7SSal1tUxr+XHaFtQz8GN7nBbX6dx0Noe/j1X1VeJr62uFB0gY92f0TnkM6MiBxx3W2fGBBDfU/Byz8dosRUtWXidX83JHwIPm4+lFnKMFtq5/upFyi1WSxg9ICeU8GoLzduq4/WniC7oIT/3m4dXXZdLgbrJdX8DNipr81zNR/s+oAiUxEvd3v5hnPteRgNjG3pRnJmAXM2JtspoXPLLs5m9C+jWZpQO1v5eoFSU1YSfNoVzu5WO4lTOHruEou2pXBf1ya0Dqvk3HANY2Hsj9D9b6vD1HoHMg+wPHk541uPJ9IvslL7tK3vyvA2oUyPSyTlQu3u4FeCv7s/AR4BfLLnk+teYnVWeoFS0+qX4NI58NFni7CVlJLXlh3Gz9PIszdVsR8vqj8YXKH4kj5gooLW9VrzXp/3mNBmQpX2e3VES9wMLryxXJ9W01ZCCP7Z9Z8UlhXyyZ5P1I5jd3qBUsuJNZCwBvq9CL765KW2WrY/jd9PZvPC0ObU9arGIoRZSTC9o3Wwio4ySxkuwoWhEUPxcK3azO/Bvh48MSCa9cfOE3f8fA0lrD2i6kYxtuVYfkj4gf2Z+9WOY1d6gVKDqRR+/QcERkOXR9VOo3n5JSb+u/IobcL8GN2pmiuT+kdYZ5dY8zIU5yobUGOyi7MZ/sNw1p9aX+1jjOsZQUS9OrzxyxFKTRYF09VOj7Z7lCCvIL459s2NN3YieoFSw6GlkJVonXbH1fGWHNea6RsSyLhUwn9ubYWhurNqu7jAze9DwYVaP5ns9L3TySzMJMIvotrHcHN14dVbWpJ8oYAvtqYoF66WqmOsw7yb5vFmzzfVjmJXeoFSQ9u7YexP0PQmtZNoXuL5fOZvPsldsQ3p2NjftoOFdYT298L2z6yX/GqhI1lHWHpiKWNajCGybuUGRlxL/+ZB9G9Wn2nrE8jM01eEtlW4XziuLq7klebVmhkm9AJlbyX51r/Wo/qrncQpvLXiCB6uBl4Y2lyZAw54xboO1+EflDmehkgp+d/v/8Pfw59J7SYpcsxXbmlJscnMe78eU+R4tV1eaR4jfhzB7AOz1Y5iF3qBsqezu+GjltaZI3Q225SQSdzxTKYMiKa+j0ILEPqGwmPboM/zyhxPQ/Zl7mPv+b082fFJfN18FTlmZH1vxvWMYMmuVPafyVHkmLWZj5sPPcN68tWRrzhzyfkn59ULlL1ICateAoM7hLRVO43mmS2St1YcpVGAJw/2CFf24P5NrF9zTkMtuoO/Q1AH/u/m/+O26NsUPe4TA6Kp5+3Of345rC/JoYAnOz6Jq4srH+7+UO0oNU4vUHZSP3MrpP4OA18BD2X+Oq3Nvtt1hmPpebw0tAUeRoPyJ8g4AtM7wd4vlT+2A8ovzQegTf02uAhlfy34eBh5fkhT9pzOYdWhdEWPXRsFeQUxvvV41p1ex870nWrHqVGKfBKFEEOFEMeFEIlCiJeu8vpDQohMIcS+8seECq89KIRIKH88qEQeh2MqJTJ5EQS1gvb3qZ1G8/JLTHyw9gSxTfyvvpSGEoJaWAdNrH/D6YedZxVlMWTpEL478V2NnePO2EY0C/bhndXH9GHnCniw1YOE1Akh7kyc2lFqlM0FSghhAGYCw4CWwBghRMurbPqtlLJ9+WNu+b4BwGtAV6AL8JoQwsahWA4oaT2exekw+HXr/G86m8zemERmXgn/Gt7ihvPDVZsQMPRtKMyCTc59KeWz/Z9RUFZAp+BONXYOg4vgpZubcyqrkK+2n6qx89QWHq4eLB6+mBc6v6B2lBqlRAuqC5AopUyWUpYCi4FbK7nvEGCtlDJbSnkRWAsMVSCTY2k2jJ2dPoHogWon0by0nCI+35TMiHYNbB9WfiMNOkCbu6yrHOeerdlzqeRk7km+P/E9dza906b7niqjX9P69Iqux7QNCeQWldXouWqDQM9AALJMWRSZilROUzNusB5BpYQBFYeTpGJtEV1plBCiD3ACeFpKeeYa+4Zd7SRCiInARIDg4GDi4+NtT24HrmV5mIw+5FOP+I0b1Y5TZfn5+Q71Xs85UILJbKGP38Ub5lIiu4fXIDpbfubEqtlkhAyw6ViVZc/3/PPzn2PESLuCdoqc80bZBweZ2ZJYxj8WxTG6mWPdpO5on/XKyDZl88bZN9i9Yjc3+TnhfZVSSpsewF3A3Ao/jwWmX7FNIOBe/v0kYEP5988DL1fY7hXg2RudMzY2VmrCxVNSvhkq5d6vZVxcnNppqsWRch9MzZFNXlwu/7fqaKW2Vyx7QZYyx6kke73naXlpsuOijnL2/tmKHbMy2Z/+dq+M+ddKeSa7QLHzKsGRPutVcc+398juX3eXF4suqh2l0oBdshL1RYlLfKlAxQnQGgJpVxTBLCnl5VvJPwdiK7uvpm14E6QZIvqoncQpvLP6GP5eRib3i7Lvib0CrF8zT9j3vDUs1DuUZbcvY2zLsXY973M3NUMA7/963K7ndVYj6o6gwFTA5wc/VzuK4pQoUDuBGCFEhBDCDbgHWFZxAyFExem6RwJHy7//FbhJCOFfPjjipvLntC9tn3Vm7G6Twa+h2mk0b2viBTYlXODx/tH4ehjtH+DIMpjZGU5ttf+5a8DF4osAhHmH4elq34UyG9T1ZHyvCH7al8bBVOceIWkPDdwaMDJqJN8c+4az+c7VV2pzgZJSmoApWAvLUWCJlPKwEOJ1IcTI8s2mCiEOCyH2A1OBh8r3zQbewFrkdgKvlz+nbVLC2lfAKxB6Pa12Gs2TUvLOr8cJ9fPg/m5N1AkRM9i6btfaVzW/ZlSZuYx7V9zLO7+/o1qGyf2iCKjjxjur9SmQlPB4+8cxuhid7r4oJQZJIKVcCay84rlXK3z/D+Af19h3PjBfiRwOIzsZTm+HwW+ARyVXdtVd06+H09l/Jod3R7WtmZtyK8PoCf3/CcumwNFl0LKyA1Udzw8JP5Can0qPBj1Uy+DjYeSxflG8ueIoWxMv0CO6nmpZnEFInRDW3LkGP3fn+n2jzyRREwKj4Ik90Gmc2kk0z2S28N6vx4mqX4c7Ol51gKf9tBsD9ZvD+tfBrM1h0kWmImYfmE3HoI70Cuulapb7uzUh1M+Dd389rk+BpIDLxSkpx3lm4tcLlNKKyicSoOKzAAAgAElEQVTErNsIXBWawLQW+2HPWZIyC3h+SHNcDSp/XA2uMOjfkH8ezmtzOfPFxxaTWZTJ1I5Ta+4m50ryMBp4cmAM+87ksPZIhqpZnMX60+u57efb2HFuh9pRFKEXKCVZzDB/KPzylNpJnEJxmZmP1p2gXaO6DGkVrHYcq6ZD4akDENpO7SRVZpEWfkj4gV5hvYgNjr3xDnZwZ2xDIuvV4YM1JzBb9FaUrXqF9SKkTgjT9kxzilapXqCUdPB7yDwKkX3VTuIUvtx2inO5xbw4tJnqf+3/QQjw9AeLxdrXqCEuwoVvhn/Da91fUzvKH1wNLjxzU1OOZ+SxbL9zjUBTg7vBnUltJ3HgwgF+S/1N7Tg20wuUUkylEP9f61IaLbTbge4oLhWXMTM+kd4x9egR5YAd6KtegLmDrQtQakBhWSFmixlvN29C6tTQBLvVdHPrUFqG+vLh2hP6RLIKGBk9kkY+jZixbwYWqe33Uy9QStn7JVxMgYGvWlfM1dnk89+SySks44UhCq2Uq7R290DhBes8fRowY98M7lp+F6XmUrWj/I2Li+D5oc04k13Et7ucfxG+mmZ0MTK53WRS81JJuZSidhyb6L9JlSAl7FoAjbtD9CC102jexYJS5m8+yc1tQmjT0EGHzTbsBE2HwdZpfw6McVDpBel8e+xbWge2xs3gWPPfXdavaX26hAcwfX0CRaW1Z5HImnJzxM2sHrWaSL9ItaPYRC9QShACHl4Ft31m/V5nk9m/JVNYZuapQU3VjnJ9/f9pXStq2wy1k1zXrP2zkEgmtZukdpRrEsLaijqfV8IX21LUjqN5BhcDfu5+WKSF9ALtLhKpFyhblRWD2QTuPhBQs8sV1AYX8kv4YmsKI9o2oGmwj9pxri+0LbS6HY6ttA6acEApuSn8lPgTo5uNpoF3A7XjXFfn8AD6N6vPZ/FJ5BVr8z4zR/PKllcYt3ocZRZtvp96gbLV5o/gsx6a6Sx3dLM3JlFiMjN1YIzaUSrn5g9gYrzD9jsuObEEN4MbE9pMuPHGDuCZwc3ILSpj4ZYUtaM4hSHhQ0jNT+XnxJ/VjlItjvmvSiuKLsL2T6FeDLh7q51G885fKmbRtlPc1j6M6CCNvJ91AsHVDcqKHLIv6tnYZ1k0bBH1PB1wJORVtGnox6AWwXy+KZlLeivKZr3DetO2fltm7Z9Fibnkxjs4GL1A2WL7Z1ByCfpddZpBXRV9tjEJk0Vqp/V0WVkxzOxiXV7FgZSZyzC4GGge4KAjIa/hqUExXCo2MX/zSbWjaJ4QgqkdppJRmMH3J75XO06V6QWquoouWgtUi5EQ0lrtNJqXnlvM1ztOM6pjGOH16qgdp2qMHhA1EHYvhJzTaqcBrPOxDfp+kCZnt24d5sdNLYOZt/mkvjS8ArqGdqVLSBdWnVyludkl9AJVXXu/trae+r6odhKn8Gl8IhaL5IkBGms9XdbneesIzk0fqJ0EsI7cKzIVEV03Wu0o1fLUoKbkFZuYp7eiFPF277dZMGSB48zIUkl6gaqubpPhoRV660kBZ3OKWPz7Ge7q1IhGAV5qx6kevzDo+ID1D5ccdW82TbyYyK8pv3Jv83vx9/BXNUt1tWzgy9BWISzYfJLcQr0VZasgryCMBiMl5hJN9UXpBao6LBZwMUC4ussVOIuZcYlIJFMGaPOv/T9cXpzy4BJVY8w6MAtPV08ebPWgqjls9eSgGPJKTMzdrK05Dx1VdnE2w5YOY/GxxWpHqTS9QFVVYTZM72i990VnszPZhSzZeYZ7OjcmrK59lx5XnF9DmLQZej2jWoQzeWdYk7KGe1tot/V0WYtQX25uE8KCLSnkFDreFE1aE+ARQGTdSBYcWkCRqUjtOJWiF6iq2v4pXDwJ/iotPe5kZmxIxMVF8Fj/KLWjKCOoubUvqkydXwCNfBoxb8g8Hmj5gCrnV9qTA5tSUGri8016K0oJk9tNJqs4SzMj+vQCVRWF2bB9lnW57+BWaqfRvDPZhXy/J5V7uzQm1E/jraeKjiyDD5pDrn2Xj7g8QqtzSGfNt54uaxbiw/A2oSzckkJ2gd6KslVscCxdQrow/9B8ik3Fase5IUUKlBBiqBDiuBAiUQjx0lVef0YIcUQIcUAIsV4I0aTCa2YhxL7yxzIl8tSY7Z9CaZ4+ck8hn21MwiAEk/o6SevpstB2UJpvnWXEjl7e8jLT9kyz6znt4cmBMRSWmfVWlEImtZvEhaILrD21Vu0oN2RzgRJCGICZwDCgJTBGCNHyis32Ap2klG2B74F3K7xWJKVsX/4YaWueGlN8qbz1dJveelJAem4x3+9K5c5ODQnx81A7jrL8m0D7e2HPF3ApzS6nTLiYwC9Jv9jlXPYWE+zDiLYN+GKr3opSQueQznw57EtuibxF7Sg3pEQLqguQKKVMllKWAouBv6zYJ6WMk1IWlv+4HWiowHnty8MXxnwDA15WO4lTmPNbMmYpmexsrafLej8L0gKbP7bL6Wbtn4WX0UvzI/eu5YkB0RSVmfXZJRTSPqg9QghMFpPaUa7LVYFjhAEVb/xIBbpeZ/vxwKoKP3sIIXYBJuB/UsqfrraTEGIiMBEgODiY+Ph4WzLb4Gz5o2ry8/NVzFx9NZH7Uonkq22FdAtxJenA7yQpevQ/qf2eNwvqR9CuBWwz9sFkrPzcglXNnVaaxppzaxjiN4S92/ZWI6lyavI9jw0yMG9TIi1c0qhjVP6GU7U/L9VV3dxb8raw4dIGXmrwEkZhVD6YEqSUNj2Au4C5FX4eC0y/xrb3Y21BuVd4rkH510ggBYi60TljY2OlXW18V8oVz0tpNlf7EHFxccrlsaOayP3OqqMy/KXlMvF8nuLHrkj19zznjJTph6q8W1VzP7/xednlqy4ypzinyudSWk2+54fP5somLy6Xn6w7USPHV/3zUk3Vzb0tbZtsvbC1/L+j/6dsoEoAdslK1BclLvGlAo0q/NwQ+NuFdyHEIOBfwEgp5R+3Mksp08q/JgPxQAcFMimnOBe2TIdLZx12SQUtyS0sY9G2U9zcJpSo+hqZsby6/Br+2V9Zg3OgTW43mdd7vo6fu4OuPqyQlg18GdQiiPlbTpJf4tiXprSga0hXOgR1YN7BeZSaHbNvT4nfuDuBGCFEhBDCDbgH+MtoPCFEB2A21uJ0vsLz/kII9/Lv6wE9gSMKZFLOzrlQkgt9nlM7iVNYuDWF/BITU/prfNaIypISfngU1tRc32WEXwRDwofU2PEdyRMDYsgpLOPLbafUjqJ5QggmtZtERmEGPyb8qHacq7K5QEkpTcAU4FfgKLBESnlYCPG6EOLyqLz3AG/guyuGk7cAdgkh9gNxWPugHKdAlRbAtpkQPRgaOFbDTovyS0ws2HqSQS2CaBHqq3Yc+xDCOi3WzrmQf/7G21dBWn4az8Q/w5lL6s79Z0/tGtWlT9P6zN2UTGGp3oqyVffQ7rSr3455h+ZhtpjVjvM3ilyzklKulFI2lVJGSSnfKn/uVSnlsvLvB0kpg+UVw8mllFullG2klO3Kv85TIo9idi+EwizrTNU6m329/RQ5hWU8XltaT5f1egbMpdY/dhQ0/9B84s7EYTQ4aAd3DZk6IJqsglK++b32FOaaIoTgn13/yYyBMzC4GNSO8zd6p8r1xAyBga9B4+sNStRVRnGZmc83naR3TD06NHaOWQ4qrV609f65nXOts5EoILMwkx8TfuTWqFsJqROiyDG1olN4AN0iA5i9MYniMsf7q19rWga2pKl/U7VjXJVeoK6nXjT0Vm/iT2fy7c4zXMgvqX2tp8t6P2udXeL3OYoc7ovDX2CSJsa3Hq/I8bRm6oAYzueV8N0uvRWlhLzSPF7Y+AKrTq668cZ2pBeoqzGXwS9PQYbjdIdpWanJwqyNSXQO96drRIDacdQR0hpGzoDYh2w+1MXiiyw5sYRhEcNo5Nvoxjs4oe5RgcQ28eez+CRKTRa142heHWMdEnISmHNgDhbpOO+nXqCu5uB3sHuBwyzfrXU/7k3lXG4xUwbEaG5FT0V1HAs+tl+OM7gYuL/F/UxoPUGBUNokhOCJAdGk5Rbz495UteNonotwYXyb8STmJBJ3Ok7tOH/QC9SVLGbY9CEEt4GmtWPobk0ymS18Gp9EmzA/+sTUUzuO+s7uhsX32bQch6+bL1M7TiXav5ZeLi3Xt2l92jb0Y2ZcEiaz4/zVr1VDw4fSyKcRcw7O+WNmfLXpBepKR36GrATo86x1iLDOJssPnONUViFTBkTX7tbTZWXFcGw57FlUrd2XJy9n45mNCofSJiEEU/pHczq7kGX77TMprzNzdXFlfOvxHMk6wta0rWrHAfQC9VdSwqYPoF5TaOG4E6trhcUimRmXSLNgHwa3CFY7jmMI7wmNu8OWT8BUtbv3C8sKeff3d1l8XDtLdte0wS2DaR7iw4y4RMwWx/irX8tGRo1kUrtJDjOqTy9QFZlKrJf1+v3DenOlziZrjqSTcD6fx/pH4eKit57+0Oc569RZ+7+p0m5LE5ZyseQiE9tOrKFg2mPti4ohObOAlQfPqR1H84wGI4+3f5z6XvXVjgLoBeqvjB4w8FVofYfaSTRPSsn0DYlE1KvDLW0bqB3HsUQNhND21gUNzZWbDaHUXMrCQwvpHNKZDkH6rCYVDWsdQnSQNzPjErHorShF7EzfyYe7P1Q7hl6g/pC6C46vrtFJPWuT+BOZHE67xOR+URj01tNfCQEDX4HOE0BW7kbTnxJ/4nzReR5p80gNh9MeFxfB4/2jOJaex/pjyk4nVVsdvHCQBYcWcDDzoKo59AJ12drXYPlT1ilpdDaRUjJ9fQJhdT25vUOY2nEcU/Qg6DEFXN0rtbm30ZvBTQbTLbRbDQfTphFtG9A4wIsZGxIcZgSalt3d7G583XyZc1CZG8urSy9QAKe2wanN0GNqpX9h6K5tW3IWe07nMKlvJEaD/hG7JrMJ9n4NSRtuuOnNkTfzYb8P9ZGQ1+BqcOGxflHsT81lU8IFteNoXh1jHe5vcT/xZ+I5nn1ctRz6bw+ATe+DVz2Idc7lsu1tZlwi9X3cuatT7ZzloNKEsH721v37mpeWzRYzvyT94rDr9TiSOzo2JNTPgxkbEtWO4hTubXEvXq5ezD04V7UMeoFK2wuJ66D7Y+BWR+00mrfn9EW2JGYxsXckHkZ9JOR1uRig19Nwbr/1M3gV606v45+b/8nGVP3epxtxc3Xh0T6R/J6SzY7kLLXjaJ6fux+T2k2ibf22qmXQC1RBlnXWiM5657MSZm5IxN/LyL1dG6sdRRva3gO+DeG39//WipJS8vmBzwn3DWdAowEqBdSWe7o0pp63GzPi9FaUEsa1HsfYlmNVO79eoGIGwaRN4FFLFtCrQYfO5rL+2HnG94qgjrur2nG0wdUNej4JZ7bDqS1/eem31N84fvE4E9pMcMi1ehyRh9HAI70j2ZRwgX1nctSO4xTKLGX8lPgTafn2n62jdheo5Hjrzbl6x7MiPo1PxMfdlbHdw9WOoi0dx0JkP6gwi7SUkjkH5hDmHcbNkTerFk2L7uvWhLpeRr0vSiFZRVn8Z9t/mH9ovt3PXXsLVFYSfHm7dWojnc0Sz+ex6lA6D/YIx8+zdq3wajOjJzzwM0T0+eOpS6WXMEkTD7d+GKOL/n5Whbe7Kw/3jGDd0QyOpF1SO47mhdQJ4daoW/kx4UcyCzPteu7aW6A2fwQuRuhUOxd8U9qncUl4uBp4uFeE2lG0qzgXDi0FrB3Ui4cvZlTMKJVDadOD3cPxdndlZrzeilLC+NbjMUkTXxz+wq7nVaRACSGGCiGOCyEShRAvXeV1dyHEt+Wv7xBChFd47R/lzx8XQthnfYucM7B/sXVYuY8+iamtTmcV8vP+NO7r2piAOm5qx9Gu3+fA9w9TmLufnOIchBB631M1+XkZeaB7E1YePEfi+Xy142heI99GDA0fypITS8gptl/fns0FSghhAGYCw4CWwBghRMsrNhsPXJRSRgMfAe+U79sSuAdoBQwFPi0/Xs3aOg2Q1htzdTb7bGMSBhfBI30i1Y6ibZ0ngJsPP1z4intW3ONQK5tq0fheEbi7uvCp3opSxIQ2E2jk04iMwgy7nVOJFlQXIFFKmSylLAUWA7desc2twOW24ffAQGG9Jf5WYLGUskRKeRJILD9ezbFYSEvfS0LrkVBXv5HUVudyi/h+9xnu7tSIYF8PteNom6c/R9qPYodrMXc06IuLqL1X4JUQ6O3OfV2b8PO+NE5nFaodR/Ni/GP4fsT3NAtoZrdzKjEWOAw4U+HnVKDrtbaRUpqEELlAYPnz26/Y96qTtwkhJgITAYKDg4mPj69WWIu08LqbCf+SbJ6s5jGqIz8/v9qZ1XSj3F8fLcFikbRzP+9w/31afM/n56XjbbEwYP824kvi1Y5TZY72nrd2tSCk5NXFm3io1fWnMXO07JVlt9zSgkdxJsWe9usWUaJAXW2M9pXztlxrm8rsa31SyjnAHIBOnTrJfv36VSHiX507eo7//f4/vJt70ymkU7WPUxXx8fHYklkt18udmVfCpvUbuKNjQ+4c1s6+wSpBa+95Uk4S+34+yt0yhGhfT6L79AEXbbWiHPE93118kCU7U3n7/q6E+nlecztHzF4Zdst9bAV8OwkeWgFNetT8+VDmEl8qUPFaWUPgyju6/thGCOEK+AHZldxXcXfE3EGARwCfH/y8pk/l1OZtPkmpycLkflFqR3EKW85uwcPVg3aNp8K932quODmqR/tEYZaSOb8lqx1Fu6S0znbi1wga1mwvTEVK/AvYCcQIISKEEG5YBz0su2KbZcDlmVjvBDZI65z4y4B7ykf5RQAxwO8KZLouT1dPHmj5AFvTtnLowqGaPp1Tyiks5cttKQxv24DI+t5qx3EKD7R6gFV3rMLb1c/6RM5pKNBn5rZVowAvbu8Qxje/nyYzr0TtONqUHAdpe6DXU2Cw3ywxNhcoKaUJmAL8ChwFlkgpDwshXhdCjCzfbB4QKIRIBJ4BXirf9zCwBDgCrAYel7KSK7jZ6O5mdxPgEcDBC+ouyKVVC7emUFBq5vH+eutJCbkluQAEegZanyjMhhmdrffr6Wz2WL8oSkwW5m0+qXYUbfrtA/AJhfb32fW0ilxDkFKulFI2lVJGSSnfKn/uVSnlsvLvi6WUd0kpo6WUXaSUyRX2fat8v2ZSylVK5KkMbzdvVt2xijHNx9jrlE4jv8TEgi0p3NQymOYh+hyGtkovSGfQd4P4MeHHP5/0CoCWt8Gu+dYJjXU2iazvzS1tG/DlthRyCvWlS6rkYgqk/q7Kenm1+iK3l9ELgNS8VJWTaMtX20+RW1TGlAHRakdxCgsPL8RkMdEl9Ipr+72fgbIi2P6pOsGczOP9oygoNbNwa4raUbTFPxye3A+xD9n91LW6QAEsPbGU4T8OJyU3Re0omlBUambupmT6NK1P24Z11Y6jeReKLlg/g5HDCfO+4g6L+s2g5UjrDBNF+szctmoe4stNLYNZsCWFvOIyteNoQ1mR9atvA3Dzsvvpa32B6tuoL0YXI/MOzVM7iiYs3nmaC/mlPKG3nhTx5ZEvKTGXMKHNhKtv0PtZ6y+J09vsG8xJTRkQTW5RGV9tP612FG344RFYbN9+p4pqfYGq51mPUTGjWJ60XJX1TrSkxGRmzm/JdIkIoHN4gNpxNK/UXMqPCT8yJHwI4X7hV98otB08cxSaDbNrNmfVtmFd+jStz9xNyRSV2mU8lnadPwpHf4GgK2eus59aX6DAumokAlXWO9GSH/ac5Vxusd56UoibwY3vRnzH07FPX39D7/rWr4XZNR+qFnhiQDRZBaV887veirquTR+CsQ50m6xaBL1A8ed6J+tOraPErN8ncTUms4VP4xNp19CPXtH11I6jeZcngg2uE0wD7wY33mH96/BpdygrruFkzq9zeABdIwKY/VsSJSa9FXVV2clw6HvoNM46olQleoEq90SHJ1h2+zLcDfYdRqkVP+9L40x2EU8MiEHoKxDbbOHhhYxbPY4iU1HldojoC/npsO+rmg1WSzwxIIaMSyUs3X1W7SiOaftn1vXyejyhagy9QJUL9AzE180Xi7RQatbvk6jIbJHMjE+kRagvA1sEqR1H84pNxSw6vAijixFP12vPDfcXEX2gYWfY/AmY9RFotuoZHUj7RnX5ND6RMrO+rMnfDHzNOt2WT4iqMfQCVUGxqZjRv4xm9oHZakdxKCsPniM5s4AnBkTrrScF/JDwA1nFWTzS9pHK7yQE9Hkeck/DgSU1F66WEEIwpX80qReLWLZPHxz1N+7eENVf7RR6garIw9WDxr6N+eboN+SV5qkdxyFYpGTGhkSig7wZ2krdv6acQZm5jPmH5tMxqCOdgqs4k37MTRDSBnbpt0QoYWCLIFqE+jIzPhGz5aqLKNQ++edhVm845Ri3NegF6gqPtHmEvLI8Fh9brHYUh7DvvJnjGXlM6R+Ni4veerLV8uTlZBRm8EjbR6reGhUC7pgL9/9QM+FqmcutqOTMAlYdOqd2HMewbQZkHII69dVOAugF6m9aBLagd1hvFh1ZRGFZ7V6FU0rJsqQymgR6cUvbULXjOIUh4UN4vcfr9GzQs3oHCGoOnnXBYrEugaCzydDWIUTVr8OMDYnI2v5+FmbDznnQ6nao5xi3kugF6iomtp1ITkkOy5KuXDWkdtl4IpOUSxYe6xeFq0H/qCjBy+jF7TG329aXl3MaZvWC43abW9lpGVwEj/eP5lh6Hvsya/mQ8x2zoTTfOnuJg9B/61xF+6D2zBw4k1FNR6kdRTVSSqZvSCTQQ3B7h4Zqx9E8i7TwVNxTbDyz0faD+TSw/iLZ9L7eilLAyHYNaBTgyS9JZbW3FVWSBztmQbPhENxK7TR/0AvUNfRp2Aeji1HtGKrZlpzF7lMXuTnSiJur/jGxVdzpONafXk9+Wb7tBzO4WheOO7sbkuNtP14t52pwYXLfaJJzLWxOrKULRBq9YPgH0O8ltZP8hf6b5zp+TfmVsSvHUmapffedzNiQSJCPO73D7Ld6prOSUjLn4Bwa+zRmSPgQZQ7a/j7rAnK/va/M8Wq5UbFh+LsLpm9IVDuKOlwM0OZOCG2rdpK/0AvUdXi6erIvcx8rkleoHcWudp/KZmtSFhP7ROJm0Efu2WpL2haOZB1hfJvxuLooVPBd3a0LyJ3aDKd3KHPMWszd1cDNEUZ+P5nNjuRatkDk3q9h0wdgcbw+OL1AXUfvsN40D2jOvIPzMDvg/7yaMn1DIgF13Li3a2O1o2ielJLZ+2cTUieEEZEjlD147ENw2ywI66jscWupPo1cqeftxoy4WtSKKiuGDW9A4nprK8rB6AXqOoQQPNLmEVIupbD21Fq149jFwdRc4o9nMr5XBF5u+uU9JYxpPobnOz2P0aBwn6abF7QfA0oft5ZyNwgm9I5kU8IF9p+pJQtE7v0S8s5B3xfVTnJVNhUoIUSAEGKtECKh/Kv/VbZpL4TYJoQ4LIQ4IIS4u8JrC4UQJ4UQ+8of7W3JUxMGNRlEhF8Ecw7O+WMGamc2fUMCvh6uPNC9idpRnIIQgpsjb+am8Jtq7iS7F8IKxxkarGX3d2uCn6exdrSiTCWw+SNo3N0616MDsrUF9RKwXkoZA6wv//lKhcADUspWwFDgYyFExbXCn5dSti9/7LMxj+JchAsvdn6R5zo9h8C5+2OOpV9izZEMxvWMwMdD/6vcVrvSdzH34FyKTTW8REbuWdg5FzKO1Ox5agFvd1fG9Qxn7ZEMjp67pHacmrX3S7h0Fvq+YJ2lxAHZWqBuBb4o//4L4LYrN5BSnpBSJpR/nwacBxxjHo1K6hnWkx4Nejj9RKnTNyRSx83AuJ7hakfRPCkl0/dO55tj39T856bbZHDzgY3v1Ox5aomHeoTj7e7KTGdvRYW0g26PQaT6k8Jei7DlxjQhRI6Usm6Fny9KKf92ma/C612wFrJWUkqLEGIh0B0oobwFJqW86oqBQoiJwESA4ODg2MWL7TtXXomlhJW5K4lxj6G1V+sq75+fn4+3t3cNJFNGap6FV7YUcUukkVFN3f543tFzX4+a2Y8XHWfG+Rnc6X8nfX37Vmnf6uSOSP6KJqe/Y2enaRR4q3d51lk+L98dL2XlyTL+28uTUG/H7qrX4nvev3//3VLKG8+WLKW87gNYBxy6yuNWIOeKbS9e5zihwHGg2xXPCcAda+F69UZ5pJTExsZKeyszl8nhPwyXo34eJc0Wc5X3j4uLUz6Ugh77ards9epqebGg5C/PO3ru61Ez+4OrHpQDvh0gi03FVd63WrkLsqR8K0zKbx+o+r4KcpbPS2ZesWz28kr5zLf71AtUSVV+z8tKpFz7mpQ5qTWQpnKAXbISv+tv+KeBlHKQlLL1VR4/AxlCiFCA8q/nr3YMIYQvsAJ4WUq5vcKxz5XnLQEWAF1uWFFV4uriyqNtH+X4xePEnY5TO46ijqVfYsXBc4zrGU5dL7cb76C7rp3pO9mdsZuH2zxsvxWavQJg2P+sQ891Nqvn7c69XZrw076znMl2skmj9/+fdXDE+aNqJ7khW9uuy4AHy79/EPj5yg2EEG7Aj8AiKeV3V7x2ubgJrP1Xh2zMU6OGRQyjiW8TPtv/mVON6PtkXQI+7q6M7xWhdhSn4G30Zkj4EEbF2Hkuxw73O8Qic85iYp9IDEIwa2OS2lGUYyq13pQbFgvRA9VOc0O2Fqj/AYOFEAnA4PKfEUJ0EkLMLd9mNNAHeOgqw8m/FkIcBA4C9YA3bcxTo5yxFXX03CVWHUrXW08KahHYgvf7vo+Hq4f9T150EX79F6Q79N96mhDi58GdnRry3a5U0nNreCSmvez/xjobft+XHHbkXkU2FSgpZZaUcqCUMqb8a3b587uklBPKv/9KSmmUfw4l/2M4uZRygJSyTfklwwiHXZQAACAASURBVPullArMpFmzhkUM474W9xFR1zlaG3+2niLVjuIUvjzyJekF6eoFkBL2LNJH9Clkct8ozFI6RyvKXGadAb9BB4gZrHaaSnHs4SkOyNXFlZe6vESkn/Z/oR9Ju8Tqw+mM6xWBn5d+35Otdmfs5t2d77ImZY16IbwCoOskOLoM0g+ql8NJNArw4s6ODfm/Hac5l1ukdhzblOZDk17Q75+aaD2BXqCqLTk3mQ92faDpvqhP1p/Ax0Pve1LKZ/s/I9AjkLua3aVukO6Pgbuv3opSyBMDo5FIZmh9pnNPf7j9M2hag7OaKEwvUNV0JOsICw8vZP3p9WpHqZbDabn8ejiDh3tG4Oept55stSdjDzvO7WBc63F4unqqG8bT33rz7tFf9FaUAhr6e3F350Ys2XVGuyP6kjZAmsNN1HNDeoGqpmHhwwj3DdfsiL5P1iXg4+HKw3rryWayfNaIQI9ARjcbrXYcq26Tod0Y60J0OptN6R+DEILpGxLUjlJ1phJYNhVWPKO5FZj1AlVNBhcDk9pNIuFiguZaUYfO5rLmSAbje+mtJyWUWkpp4N2ASe0mqd96uszTH26fBYFRaidxCiF+HtzXtTFL95zl5IUCteNUzZ5FkHsG+v9LM31Pl+kFygZDw4cS7hvOp/s+1dR6UR+vs85YrreelOFucOetXm9xT/N71I7yd+ePwtbpaqdwCpP7RWE0CD5Zd0LtKJVXVmRddblxD4gaoHaaKtMLlA0MLgamdpxKzwY9KbWUqh2nUvafyWHd0Qwm9I7EV5+x3Gb7zu/jcNZhtWNc25FlsOZlOLtb7SSaF+TjwYPdw/l5fxoJGXlqx6mcnXMhPx0GvKy51hPoBcpmg5sM5rnOzznOpZ0beH/NcQLquOmtJwVYpIU3t7/JCxtfcNx+yO6PgVcgrH9D7SRO4dG+UXgZDXy8Tit9UQJajIDwnmoHqRa9QClASsnWtK0OP7vE1qQLbEq4wGP9ovB211fLtdWaU2s4fvE4k9tPxkU46D8ldx/o9Qwkx8HJ39ROo3kBddwY1zOCFQfPcSRNA+tF9ZgCo79UO0W1Oei/Ku35dN+nvLnjTUrMV10tRHVSSt7/9Tihfh7c301fLddWJouJmXtnEuUXxbDwYWrHub7O48GngbUVpbFRXI7okd6R+Hi48pEj90UV5cCxFdb/3xq8tHeZXqAUIITgyY5Pcr7wPN8e+1btOFe14dh59pzOYerAGDyMBrXjaN7KkytJuZTClA5TMLg4+Ptp9LT2QTTuCmZt9JU6Mj8vIxN6/X979x0eRbXwcfx7smmkEZKQAoQSTCgJNaErEgFBBSmigg2vKHYRxYuKgoqoKEhRVBAVlCavwAWRINIURCnB0EIJhBYglAAhhfTz/jGLRkhIyJaZTc7neebZ3dkpv53M7snMnDknjF8ST7Mz5aLecUq26RNY8ACcM3AhWg6qgLKSNsFt6BDSgZm7ZpKVb6xqqEVFko9+3k99fw8GRNfRO06lkJWfRZvgNnSta/wWoQFo9SDc/i4426n7j0rusZvr4+vhwkc/79c7yrWyzsGfn0Nkf6jZSO80FlEFlBW90PoFLuRe4NvEb/WO8i/Ld51iX2oGw7tH4GJSf3JrGNR4EF/d/pXtu3O3Jinh4BptUCzi7e7Cs11uYkPSOTYdPKd3nH/bOAkKLkOX1/ROYjH1a2VFUQFR3BtxL4HVAvWO8rf8wiI+XrWfxsHe9G5eS+84Di+nIIe1x9YipXSswgm0AmrVm7BihNaytWKRhzvUo1Z1d8av3Helh3D9pZ/QqpY3vx9qRuidxmKqgLKy0R1Gc0+EnTuqu45F8SkcSctmxO2NcHJysB9UA5q7dy7D1g0z9r1PpXFygq5vwvlkSJindxqH5+5iYnj3CHakpBO3W8cuVoq7eAx8alWKoydQBZRNFBQVsDhpMWeyz+iaIye/kClrkmhV15euTYxzVOeo0nPT+WrXV3Su05mogCi941RMRE+o00Zr6Ty/knTCp6P+resQEeTFhJ/3k19ogHvh6nWA5+KhRuWoqasKKBtIzUpl7B9j+WLHF7rm+O6Po5xKz+GV2xs53ukoA/py55dkFWTxYusX9Y5ScUJA19FwyXwqSLGIyUnwSo/GJJ/LYuG24/qG2fuj1jCsU+X5Wa88n8RA6njX4d5G97I4aTHJ6cm6ZLiYnccna5O4NaImHW8K0CVDZXIy8yTz9s3j7oZ3E14jXO84lmnQGZrdp3VuqFisW5NAYurVYMrqJC7n6dQm59FN8P1DsO1rfdZvI6qAspErLVtPip+ky/qnrTtIRm4Br93ZWJf1Vzansk5R26s2z7Z8Vu8o1nHPl9DyAb1TVApCCF69ozFnMnL5+vfD9g8gJfwyWrsZu/Vg+6/fhiwqoIQQfkKIX4QQSebHGqVMVyiESDAPy4qNbyCE2Gye/3shhKsleYzEz92PIc2GsP74eralbrPruo+fz2b2pqMMaF2HxsE+dl13ZRUdFM3SvksJ9gzWO4r1FBbAtm/gwlG9kzi8mPp+dGsSyBe/HuJCln1vhg449yekbIXY18C1cvX/ZekR1KvAGillOLDG/Lokl6WULc3D3cXGjwcmmee/AAyxMI+hPNTkITrW6mj36z8TVu3HyQleut3xq5kawaojq8grzDNue3sVlXUGVr4Ga1VDstbwSo/GZOUW8Nl6O3YNX1hAWPK3ENAIWlS+I2JLv3F9gNnm57OBvuWdUWi/2rcBP1Rkfkfg7uzO9O7TiQ6Ktts6d6ZcZGnCSYbc3ICQ6o7RwrqRbT61mZd/fZlFSYv0jmJ9PrW01s53/R+c2K53GofXKNib/q3rMHvTUft1DZ91hgJnT+g2BkyVrwFoYckNZkKIi1JK32KvL0gprznNJ4QoABKAAuADKeX/hBABwJ9SypvM04QCcVLKEuvvCiGGAkMBgoKCohcsWFDh3PZ2uegya9LW0COgBy7Cdn0wSSkZvzWHE5lFfNjZg2rOlh+5ZWZm4uXlZYV09mdp9iJZxITUCWQWZvJm7Tdt+rcrzp7b3FSQTbvNT5HtEUpCy3ctbli0Ku8vABdyihj522VaBpp4pqW7lZJdX2ZGhpbbgWrqxsbGxkspY8qcUEp53QFYDewuYegDXLxq2gulLKOW+TEMOAI0BGoCB4tNEwrsKiuPlJLo6GjpSDad2CSjZkXJWbtn2XQ9a/amynojl8vZmw5bbZnr1q2z2rLszdLsyw4uk1GzouSyg8usE6ic7L7NN8+QcoyPlPtWWLyoqry/XPHxqv2y3sjlcuvhNKssr1T74qTMPOeQ2xzYJsvxW1/mKT4pZTcpZVQJw1LgtBAiBMD8WOKdqVLKk+bHZGA90Ao4B/gKIa4cl9YBTpZZojqgDrU60MS9CTN2ziA9N90m6ygoLOL9FftoEODJoLZ1bbKOqiQ7P5vJ8ZOJ8o/irrC79I5jW9GPQuNeWt9RisWevDWMIB83xi5PpKjIRk0gXTwG/zcYVo+2zfINwtJrUMuAK/UaBwNLr55ACFFDCOFmfh4AdAISzaXoOmDA9eavLPrU6ENGXgbTd063yfLnbTlG0plMRvZsrBqEtYLzOecJ8gxiZNuRla9yxNVMLjBwLtS/We8klYKHqzP/7dGYHSnpLN1xwjYrWf0WICpNk0alsfSb9wHQXQiRBHQ3v0YIESOEuHKbehNgmxBiB1qB9IGUMtH83kjgJSHEQcAf+MrCPIZV27U2/cP7M3/vfKvfvHshK4+Jqw7QsaE/PSKDrLrsqqqOdx3m3jmXloEt9Y5iP7kZsHYcXL6gdxKH169VbZrXqc6HK/db/+bdY5th9yLo9AJUr9zd51hU7UNKmQZc0yGOlHIb8Lj5+SagWSnzJwNtLcngSJ5v9Tzpuek4C+vWtpm8+gAZOfmM7t1UNWlkBUuSlnBr6K34uVexlhbOH4YNE7SC6o4P9E7j0JycBG/c1ZT7pv/BlxuSeaGrlVofKSqCla+Cdwh0GmadZRpYJT93YSz+1fyZFDuJuj7Wu0a0PzWDOZuP8WC7euqmXCtIOJPA6E2jDdszsk2FNNeuR22ZAWf26Z3G4bVt4MedzYL5fP0hTl+yUsO8eZngWxe6vQWuntZZpoGpAkoHpzJP8f7m98mzsPttKSXvLN+Dl5szL3VXN+VaqkgW8eHWDwmsFsjgyMrVZEy5xb4Bbl6wcqTWhI5ikVd7NqGwSDJ+pZUKfHcfuG82tBhoneUZnCqgdJCcnsy8ffOYs3eORctZlXia3w+m8VL3CGp4VppWonSzPHk5u87tYlj0MDxcKleTMeXm6a8VUsnrYd9PeqdxeHX9PXiicwMWbz/B1iPnLVtYwnw4a8Au5m1IFVA66FS7E13qdGH6jumczT5boWXk5Bcy7qe9RAR58WA7Va3cUpfyLjFx20Sa12xOr7BeesfRV8xj2hDg4K22G8SzsTdRq7o7b/5vNwUV7TPq3EH48QXYONm64QxOFVA6eaXNK+QX5TN5e8V2uJkbkjl2PpvRvSJxVtXKLZZfmE9MUAyj2o2q/NXKy2Jyhl6ToGYjvZNUCh6uzozu3ZR9qRnM+bMCDfNKCXGvgLO7du2pCqni30T91PWpyyNNH2HZoWVsP31j7aAdS8vmk7UHubNZMDeHq76erMG/mj8Tu0ykqX9TvaMYx6WTsOgJ1dq5FfSIDOaW8AAmrjrA2YzcG5t57zI4tBZiR4F31bqNRBVQOhrafCiPRj5KWPWwcs8jpWTMst04OwlG94q0YbqqoUgWMX7LeN06ljS0okLYtxzi/qsqTFhICMHbd0eSU1DI+3F7yz9jXpbW4nxQM2jzuO0CGpQqoHTk4eLByzEv4+vuW/bEZj/vSWXd/rMM7x5BcHX7NEZZmf3v4P+Ys3cOu8/t1juK8fiGai0VHFipFVSKRcJqejG0c9iNV5hoNgDumlApWysviyqgDCD5YjKPrnyUE5nXbxYlK7eAt39MpEmID492rG+fcJVYem46k+In0TqwNb3Deusdx5jaPw1BURA3UruBV7FI8QoT+eWpMOHqCd3fgbrtbR/OgFQBZQDVnKuRmJbIe5vfu9Kye4kmrz7AqfQc3u0bpSpGWMHH8R+TkZfB6+1eVy1wlMbkolWYuHQSNnysdxqH5+HqzJi7I9mXmsHMDdfpHr6oCJY8DUc22i+cAalfOQMI8Qrh2ZbP8lvKb6w9trbEafaeusTXvx9hUNtQoutd0+WWcoO2pm5lcdJiBkcOppGfqq12XaFtod8X0OE5vZNUCj0ig+kZGczk1Qc4fC6r5Iniv4Ed86p8BRVVQBnEA00eIKJGBO9teY/MvMx/vVdQWMTIRTvxrebCyJ6NdUpYuUT6R/Jcy+d4usXTekdxDC0GajfxFhZolScUi7zdJxJXZydeW7zz2rMml07CL2Ogwa3QsvJ1434jVAFlEC5OLozpMIZzl8/xbeK3/3rvq42H2ZmSztt9IvH1UC1GWKpIFuHh4sGTLZ7E3VlVNCm3nHT4qjv8+bneSRxekI87r9/ZhD+Tz7Nw2/F/3pASfnoZigqg92SH6iXXFlQBZSDNazbns66f8Xizf6qTJp/N5ONfDnB70yDuahaiY7rKYU/aHvot7cehi4f0juJ43HzAOxjWjtVaNlAscn9MKO0a+DHup72cudKY7KG1sH8FxL4OfuW//aSyUgWUwXSq3QlXkysZeRlk5mYxctFO3JydeLdvlLqQb6H8onzG/D6GjLwManrU1DuO4xFCqzDh7AZLn1Wn+izk5CR4v38zcgqKGLNsjzYyrAv0mwHtn9EzmmGoAsqAsvOzGbBsAE/HjWXrkQu82aspgT7qVJSlvt71Nfsv7GdUu1H4uKquSSrEOxh6jofjf2rdcigWCavpxbCu4cTtTmXltn3gZIIW91fJe55KogooA/Jw8aBN4C0kpP9Eq4jzDIiu3L1m2kNiWiJf7PiCnvV70rXeNX1sKjeixUAIvx12fq9Vh1Ys8mTnMJ4K3E2H5beRdihe7ziGogooAyooLGLPnk6Q70+WzzwuF1zWO5LDW7BvAX7ufrzR/g29ozg+IaDvF/CfleCkfkIs5Zx9llfyPue4DGLkr7nXvReyqrFo7xJC+AkhfhFCJJkfr7lBRwgRK4RIKDbkCCH6mt+bJYQ4XOy9lpbkqSy++PUQfx3NZkijV0nNOsGHWz/UO5LDG9NhDLN6zqK6W3W9o1QOnv7g4q61LpG0Wu80jktK+HEYpvxskjpOYPWBCyzYerzs+aoIS//9eRVYI6UMB9aYX/+LlHKdlLKllLIlcBuQDawqNskrV96XUiZYmMfh7Uy5yOTVSfRqHsKwm3swpNkQTmSesLj33apq3/l9pF1Ow+RkItQnVO84lc+asTB/IJys8l/divlrDhyIg25v0af7bXS6yZ+xyxM5lpatdzJDsLSA6gPMNj+fDfQtY/oBQJyUUm39ElzOK+TF7xMI8HJjXN9mCCF4tuWzTO8+HVeTuv/pRl0uusywtcMYvn643lEqry6vgmdNWPS41vK2cmNObIP6t0C7p3ByEnw0oAUmIRi+MKF8bfVVcpYWUEFSylMA5sfAMqYfCMy/atw4IcROIcQkIYSbhXkc2nsr9pJ8NouJ97WguocLAM5OzjgJJ1KzUpkcP5kiqXba8pBSMi9tHqezT/NyzMt6x6m8PPy0ZpDSDsLPr+udxvH0ngIPLPz7Wl4t32q82y+K+KMXmPTLAZ3D6U+UdUFOCLEaCC7hrVHAbCmlb7FpL0gpS2woTggRAuwEakkp84uNSwVcgRnAISnlO6XMPxQYChAUFBS9YMGCMj6asWRmZuLl5VXq+1tTC5iWkEuP+s4ManxtOf1H5h/MS5tHH98+dKvezZZR/6Ws3Ea1MWMj35//3u7byxoccZuHHZpN3eOL2dpwOFmhXfSOUyH23O51ji/lvF9rsj1LPu389e5cfkspYESMG1EB169y7oj7S2xsbLyUMqbMCaWUFR6A/UCI+XkIsP860w4DZlzn/S7A8vKsNzo6WjqadevWlfre4bOZMmr0Snn3pxtlbn5hidMUFRXJ4euGy5azW8rtp7fbKOW1rpfbqPal7ZOtv20t71twnywsKnl7GpkjbnOZnyvl0uflpriFeiepMLtt970/STnGR8qVr5c6SXZugez+8XoZPXaVPJ1++bqLc8T9Bdgmy/Fbb+kpvmXAYPPzwcDS60w7iKtO75mPoBBaEwl9gSrXa1xOfiHPzN2Ok5Ng2gOtcHUu+U8ihODtjm8T4hXCiPUjSLucZuekjiPYM5heDXvxUMBDOAlVDdounF3h7qnkutfU7o0qUJV6SpSeAkufgeDm0HV0qZNVczUx7YHWZOYW8OL3CRQWVc2q55Z+ez8AugshkoDu5tcIIWKEEDOvTCSEqA+EAr9eNf9cIcQuYBcQALxrYR6HM3Z5IomnLvHxfS2oU8PjutN6u3ozqcsk0vPSmbx9sp0SOg4pJXmFeVR3q87bHd/G2+Std6SqRxbCggdgxQi9kxhPfg4sfAQK8+HeWVqTUdcRHuTNO3dHselQGlNWV83rURa1pyGlTAOuuS1fSrkNeLzY6yNA7RKmu82S9Tu6H+JTmLv5GE92DqNrk6ByzdPIrxGfdv2USP9IG6dzPN/s+YbVR1czvft0vF1V4aQLYYKgprBhIoS2g1YP6p3IOP6cBifi4f454N+wXLPcG1OHrUfOM3XtQZrW8qFnVNVqMFqd/9BJ/NELvL54Fx0b+jOix411mNc+pD3ert7kFOSQcEbdfwKw8cRGJsdPprZXbbxcHOuCcaUTOwoadIafXoIT2/VOYxwdnoOB86BJ73LPIoRgbN8oWoT68tLCHexPzbBhQONRBZQOTqVf5qk58YT4ujPtgda4VLD79gnbJvDEqidITEu0ckLHcuzSMf7723+JqBHB2x3fVq2+683JBAO+Aa9AmD9I64CvKju1Ey5f0E7pNb7rhmd3dzEx/aFoPFydGfrdNtKz820Q0phUAWVnOfmFDP02nuzcAr58JIYanhW/AfepFk/h6+7L82uf50z2GSumdByX8i7xwtoXMAkTU26bgofL9a/jKXbiGQCDvgdXT8ismvsmAOcPw3f9YNETFi0muLo70x9uzcmLl3lu/vYqcxOvKqDsqLBI8tLCBHafTGfKwFZEBFl2nSSgWgCf3vYpGXkZvLD2hSrZqGxGXgZCCD7u8jG1va65zKnoKagpPLsFapmb2KxqjaBmn4e5A7SKIz3ft3hx0fX8GNevGRuSzvHa4l1VolFZVUDZiZSSd37cw4pdqYy6swndmpavUkRZGvk1Yvwt40lMS+S9ze9ZZZmO4Mp9ErW9avND7x9oE9xG70hKSUzOWrXzX8bAqjeqTiGVn6PVZrx4HAbOh4Bwqyz2vphQhnUN54f4FCatTrLKMo1M9YplJz8dzueHA0d54pYGPH6Ldbtyjq0byzud3qFFzRZWXa6RTf1rKqlZqYztNBZnJ7UbG5oQkJ+tdXDo4Q+3vKR3IttbOxaO/QEDvoZ6Hay66Be7hXPy4mWmrkmitq871vlX15jUEZQdLNx2nB8O5NOnZS1eu6OJTdbR96a+NKjeACklm05sssk6jGLmrpnM3DUTd2d3TMKkdxylLEJovfBGDYA1b0P8LL0T2V7HF6Dv5xB1j9UXLYTgvf7NuDWiJq8v2c221AKrr8MoVAFlY0v+SmHkop1E+Zv4aEALnJxsW8Ms7nAcT65+kpm7ZpY9sQOau3cuU7ZP4Y4Gd/BGuzdUjT1H4eSk/WDf1B2WD4fdi/ROZH1Swo4F2o243kHQ8gGbrcrF5MRnD7amZagvn+/IZXXiaZutS0+qgLKhpQkneHnhDjqE+fNCa7dSmzGyph71e3BX2F1M2T6F6Tum23x99rQkaQkfbPmArnW7Mu7mcZic1NGTQ3F2hfu+hXqdoLI1QSUlrH4LljwJu/7PLqv0dHPmm/+0oa6PE8/M3c76/ZWvtmQl20uMY2nCCYZ/n0DbBn58NbgNrib7/KdvcjIxrtM4eof15tOET/k84XO7rNceQr1D6Va3Gx92/hAXJxe94ygV4eoBg3+EyH7a68pwj1RREcSNhN8nQ8wQaDHIbqv2cXdhRIw7NwV68eR38azdV7mOpFQBZQOzfj/Mi98n0Ka+VjhVc7Xvf/omJxNjO42lT8M+zNg5g6OXjtp1/dYkpfy7tYyY4BgmxU5SnTc6uiunZY/8DlNawrZv9M1jicICWPYcbJmutRRx18R/Pp+deLoI5jzejoggb574Np7F21Psun5bUgWUFUkpmfDzft76MZHuTYKY/VhbPN30qWFmcjLxTqd3mHXHLOr51Ps7nyMpLCrkw60f8nDcw2xN3ap3HMXaarXSmkRa/qLWdbyD7Z8AnE+GxKXQ5XW4/V27F05X+Hm6Mn9oe9o18OOlhTv4auNhXXJYmyqgrCQnv5AR/7eTT9cdZGCbUD57sDXuLvpeI3ESTn9XPV95ZCVP/PIEl/Iu6ZqpvLLys3hx3YvM2TuHh5o8RHRQtN6RFGtz9YBB86H1I7Bhgnb9xlG66chJ1x5rRsBzW6HLSN0Kpyu83Jz5+tE29IwMZuzyRN5atsfhW5xQBZQVnL6Uw/0z/mTR9hSGdQ3n/f7NcK5g+3q2UlBUQHxqPIOWDyLpgrFv8DuReYKH4x5mw4kNvN7udUa2Han6daqsTC7Qeyrc9gbs/B72LNY7UdlO/gXT2sOWL7XXPrX0zVOMu4uJaQ+25vGbGzBr0xEe+WoLF7IcpNAvgfrWW+iPQ2n0+mQjSacz+OKh1gzvHmHIqs+9wnoxs8dMsguyeXDFg/yU/JPekUq1/fR2UjNT+azbZwxqbL8LzopOhIDOr8B/4qD5/dq4K0coRiIlbJ4BX92u1UKs217vRCUyOQne6NWUife2IP7YBe6etpEdxy/qHatCVAFVQXkFRbwft5cHZv6Jt5szS57pZPi+WqKDolnYayFN/Jrw6oZX2XV2l96R/pZTkMNfZ/4CoHfD3izrt4yOtTrqnEqxq3odtcLqwhGY2grWvAMFuXqn0mSfh4UPQ9wrEBYLT/4Gwc30TnVd90TXYeGTHSgslNzz+SY+XZvkcD3zqgKqAhKOX6TvtN+Z/msyA9vUZfkLN9Mo2DE6yKvpUZOZPWby0a0f0aym9gVLzUrVNdOWU1u4Z9k9DF01lHOXzwFaQ7hKFeXhD43u0Do9nBELJw3Q51nqLti/UqsIMWgBePrrnahcWob6EjesM3c0C2HCqgPcN/0Ph+pTShVQNyA9O59RS3bR77PfOZeZy4yHo3m/fzM8XB2rLTgXJxd61u8JQPLFZO5afBcvrnuRlAz7Vk89k32GN39/kyGrhiCRfNL1E1UwKeDmDX2mwQMLITsNvoyFn17W7jeyp7P7IWG+9jzsVnhxJ3R8XmsVw4FU93Bh6sCWTLq/BclnM7lz6gbeW7GXrFzjN5HkWL+sOrmUk883G48wc2MyWbkF/KdjA4Z3D8fb3fFvFq3tXZunWjzFl7u+pM//+jCw8UAGRw4m0CPQpuu9mHOR3kt6k1eUx2NRj/F0i6dxd3a36ToVBxPRA579E9Z/AHlZ/xQMedlaDUBbST8Bv46Hv74D9+rQqCdUq2GoyhA3SghBv1Z16BIRyPiV+5jxWzKL4lN46taGPNS+nt3v1SwviwooIcS9wFtAE6CtlHJbKdP1BKYAJmCmlPID8/gGwALAD9gOPCylNEyVk+Pns5m7+Rjztxwj/XI+tzcN4qXbI2gc7KN3NKtxM7nxRPMnuLvh3Uz9aypz9s5hUdIi1ty7Bk8XT6uu69ilY/xx8g/ub3w/vu6+jGgzgvYh7Qn1DrXqepRKpFoNuGP8P/dIndoJs3pBm8cg5jHwrWu1VblfPg2Lh5rbCRTQdqhWeaNaDautQ281PF354J7mDGxbl4mr9jNuxV6m/5bM8do7eAAACRVJREFUg+3qMrBtKCHVq+kd8V8sPYLaDfQHSm30TQhhAqYB3YEUYKsQYpmUMhEYD0ySUi4QQnwBDAF0bZvnzKUcfk48zcrdp9h0KA0BdG8axHOx4TSrU13PaDYV5BnEuJvH8VTzp0g4m/B34bQgbQFH9xylc53O1Pepf8M1FFMyUvgt5TfiDseRcDYBFycXutbrSkC1AO6NuNcWH0WpjK7sdy4e0DAWNk6GjZO0G30j+2u1/270qEpKOLNXW3ZgE6QQ2nWmNo9D+6ehRn2rfwyjaBnqy3dD2rH1yHmmrTvI1LVJfLI2iS6NAukRGcRtjYOo6e2md0zLCigp5V6grB+ttsBBKWWyedoFQB8hxF7gNuBKk7+z0Y7GbFpA5RcWkZqeQ3ZeIVl5BZy5lMPRtGwOnM4k/uh5jqRlAxAW4Mnzt4UzyID/VdhSqE8ooT7aEU12fjZHc4/y+7bfmbBtArU8axEZEEn/8P7cXPtm8ovyOZJ+BJOTCSklF3MvciHnAlEBUQR7BrMieQUjN4wEILxGOMNaD6NPwz7qOpNScQE3wX2z4eIxreXwhLnw8+v/tByeMF+7buVbF7yDtetZLtX+KWwOrIKT2+H0Hji+GTJPQ3gPeHAhue6BMOIAuFSdU81t6vsx6z9tOX4+m3lbjrEs4SRr950BdnFToBctQ31pHOxNnRoehFR3x9PNhLuLiZDq1TDZuGcGsM81qNrA8WKvU4B2gD9wUUpZUGy8zfvsPn4+m9sm/nrN+AAvV1rVrcGgtnWJbRxIeKCXIe9nsicPFw9G1hpJeEw4G1M2siV1C4lpiZwM0Rr4PJp+lP7L+l8z35gOYxgQMYA2wW14re1rtA9pT5ivdTtpVKo437pw63+1U3CXToCz+b/9xKVwIO7f0wZGwjPmPtJ+/QBObAe/MKh/C4R10YYrqlDhVFyonwcjezbmvz0akXjqEuv2nWH7sYus3XeGH+KvrTyVMLo7vh62bxNTlNU+mxBiNRBcwlujpJRLzdOsB0aUdA3KfJ2qh5TycfPrh9GOqt4B/pBS3mQeHwqskFKWeHOBEGIoMBQgKCgoesGCBeX6gFfLKZBsTS3A3VngZgIfV0FNDyc8XWxbGGVmZuLl5WXTddhCSbmllAghyCzMJCkniUIKEQg8nTzxNHkS6ByIm5P+pwcq0zZ3FEbI7pJ3Cbfcc7jmncdUmEOhyYPz/q0B7TpTnqsvRaZr908jZK8IW+aWUpKVD+cuF3EhV5JXCHmFkg61nHG24AgqNjY2XkoZU9Z0ZR5BSSm7VTiFJgUofhW8DnASOAf4CiGczUdRV8aXlmMGMAMgJiZGdunSpcKBelZ4zopbv349lmTWi6PmBsfN7qi5QWXXg6PmLg97VOjfCoQLIRoIIVyBgcAyqR26rQMGmKcbDCy1Qx5FURTFAVhUQAkh+gkhUoAOwE9CiJ/N42sJIVYAmI+OngN+BvYCC6WUe8yLGAm8JIQ4iHZN6itL8iiKoiiVh6W1+JYAS0oYfxK4s9jrFcCKEqZLRrsepSiKoij/4lhtdiiKoihVhiqgFEVRFENSBZSiKIpiSKqAUhRFUQxJFVCKoiiKIakCSlEURTGkMps6MiIhxFngqN45blAAWusZjsZRc4PjZnfU3KCy68ERc9eTUtYsayKHLKAckRBiW3nanjIaR80NjpvdUXODyq4HR81dHuoUn6IoimJIqoBSFEVRDEkVUPYzQ+8AFeSoucFxsztqblDZ9eCoucukrkEpiqIohqSOoBRFURRDUgWUoiiKYkiqgLIyIcS9Qog9QogiIURMsfH1hRCXhRAJ5uGLYu9FCyF2CSEOCiGmCiFs2//8DWY3v/eaOd9+IUSPYuN7mscdFEK8av/U/yaEeEsIcaLYdr6z2HslfgYjMdr2LIsQ4oh5300QQmwzj/MTQvwihEgyP9YwQM6vhRBnhBC7i40rMafQTDX/DXYKIVrrl7zU7A69n5eblFINVhyAJkAjYD0QU2x8fWB3KfNsQev0UQBxwB0Gy94U2AG4AQ2AQ4DJPBwCwgBX8zRNdd7+bwEjShhf4mfQe3+5KqPhtmc5Mh8BAq4a9yHwqvn5q8B4A+TsDLQu/h0sLSdaX3Zx5u9je2CzAbM77H5+I4M6grIyKeVeKeX+8k4vhAgBfKSUf0htD/sW6GuzgNdxnex9gAVSylwp5WHgIFpHk22Bg1LKZCllHrDAPK0RlfYZjMSRtuf19AFmm5/PRqf9uTgp5W/A+atGl5azD/Ct1PwJ+Jq/p7ooJXtpHGE/LzdVQNlXAyHEX0KIX4UQt5jH1QZSik2TYh5nJLWB48VeX8lY2ni9PWc+NfN1sdNLRs1anCNkvJoEVgkh4oUQQ83jgqSUpwDMj4G6pbu+0nI6yt/BUffzcrOoy/eqSgixGggu4a1RUsqlpcx2CqgrpUwTQkQD/xNCRKKdRriazer+VzB7aRlL+gfH5vctXO8zAJ8DY805xgITgcew83auIEfIeLVOUsqTQohA4BchxD69A1mBI/wdHHk/LzdVQFWAlLJbBebJBXLNz+OFEIeACLT/cOoUm7QOcNIaOUvJccPZ0TKGFntdPGNp422mvJ9BCPElsNz88nqfwSgcIeO/SClPmh/PCCGWoJ1OOi2ECJFSnjKfGjuja8jSlZbT8H8HKeXpK88dcD8vN3WKz06EEDWFECbz8zAgHEg2n1rIEEK0N9feewQo7UhGL8uAgUIINyFEA7TsW4CtQLgQooEQwhUYaJ5WN1ddK+gHXKn5VNpnMBLDbc/rEUJ4CiG8rzwHbkfb3suAwebJBmO8/fmK0nIuAx4x1+ZrD6RfORVoFA6+n5ef3rU0KtuAtrOkoB0tnQZ+No+/B9iDVsNmO9C72DwxaDvYIeBTzC18GCW7+b1R5nz7KVbLEK3G0wHze6MMsP2/A3YBO9G+rCFlfQYjDUbbnmVkDTPvzzvM+/Yo83h/YA2QZH70M0DW+Win2fPN+/iQ0nKinSabZv4b7KJYjVYDZXfo/by8g2rqSFEURTEkdYpPURRFMSRVQCmKoiiGpAooRVEUxZBUAaUoiqIYkiqgFEVRFENSBZSiKIpiSKqAUhRFUQzp/wHnNG1ZQ+g5pQAAAABJRU5ErkJggg==\n",
"text/plain": "<Figure size 432x288 with 1 Axes>"
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "\\begin{eqnarray}\n(cosx)′\n&=& \\lim_{h \\to 0} \\frac{1}{h} (\\cos{(x + h)}−\\cos{(x)} \\\\\n&=& \\lim_{h \\to 0} \\frac{1}{h} (\\cos{(x)}(\\cos{(h)}−1) − \\sin{(x)}\\sin{(h)}) \\\\\n&=& \\cos{x} \\cdot 0 + (− \\sin{(x)}) \\lim_{h \\to 0} \\frac{\\sin{(h)}}{h} \\\\\n&=& (− \\sin{(x)}) \\frac{\\cos{(0)}}{1} \\\\\n&=& - \\sin{(x)}\n\\end{eqnarray}"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "$$\n\\int_{-18deg}^{18deg} \\cos{(x)} dx \n= \\sin(18deg) - \\sin{(-18deg)}\n= \n$$"
},
{
"metadata": {
"scrolled": false,
"trusted": true
},
"cell_type": "code",
"source": "(sp.sin(sp.radians(90)) - sp.sin(sp.radians(0)) ) * 4\n",
"execution_count": 34,
"outputs": [
{
"data": {
"text/plain": "4.0"
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "deg = sp.degrees(sp.math.acos(0.95))\ndeg",
"execution_count": 41,
"outputs": [
{
"data": {
"text/plain": "18.194872338766785"
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"scrolled": true,
"trusted": true
},
"cell_type": "code",
"source": "sp.sin(sp.radians(deg))",
"execution_count": 42,
"outputs": [
{
"data": {
"text/plain": "0.31224989991992"
},
"execution_count": 42,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "sp.sin(sp.radians(-deg))",
"execution_count": 43,
"outputs": [
{
"data": {
"text/plain": "-0.31224989991992"
},
"execution_count": 43,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "area = ((sp.sin(sp.radians(90)) - sp.sin(sp.radians(0)) ) * 2)\narea",
"execution_count": 51,
"outputs": [
{
"data": {
"text/plain": "2.0"
},
"execution_count": 51,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## 相関係数"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "相関を見ると違う\n\nただし,相関の場合,平均値の計算の次元がおかくなる場合があるので注意.\n"
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "# 相関\n\nx_diffM = x - x.mean()\ny_diffM = y - y.mean()\nx_diffM, y_diffM",
"execution_count": 37,
"outputs": [
{
"data": {
"text/plain": "(array([ 0.18181818, 0.18181818, 0.18181818, 0.18181818, -0.81818182,\n 0.18181818, 0.18181818, 0.18181818, -0.81818182, 0.18181818,\n 0.18181818]),\n array([ 0.18181818, 0.18181818, -0.81818182, 0.18181818, 0.18181818,\n 0.18181818, 0.18181818, -0.81818182, 0.18181818, 0.18181818,\n 0.18181818]))"
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "x_diffM.dot(y_diffM) / (linalg.norm(x_diffM) * linalg.norm(y_diffM))",
"execution_count": 38,
"outputs": [
{
"data": {
"text/plain": "-0.2222222222222222"
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {},
"cell_type": "markdown",
"source": "例:人を表すベクトル(身長,体重)として,\nAさんBさんのベクトルの相関を考えると\n\n$$\n\\vec{A} = (170, 65) \\\\\n\\vec{B} = (170, 60) \\\\\n$$\n\nベクトル$A$の平均は,身長と体重の平均$\\frac{170+65}{2}$\nとなる.\n\n主成分分析(PCA)して合成変数を考えたほうがよさげ\n"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "## 偏差パターン類似度"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "https://wikiwiki.jp/cattail/%E9%A1%9E%E4%BC%BC%E5%BA%A6%E3%81%A8%E8%B7%9D%E9%9B%A2"
},
{
"metadata": {},
"cell_type": "markdown",
"source": "偏差パターン類似度は\n\n各次元の平均ベクトルからの偏差をみる"
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "x, y",
"execution_count": 23,
"outputs": [
{
"data": {
"text/plain": "(array([1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1]),\n array([1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1]))"
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "mean = sp.array([x, y]).mean(axis=0)\nmean",
"execution_count": 26,
"outputs": [
{
"data": {
"text/plain": "array([1. , 1. , 0.5, 1. , 0.5, 1. , 1. , 0.5, 0.5, 1. , 1. ])"
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "x_diffM = x - mean\ny_diffM = y - mean\nx_diffM, y_diffM",
"execution_count": 27,
"outputs": [
{
"data": {
"text/plain": "(array([ 0. , 0. , 0.5, 0. , -0.5, 0. , 0. , 0.5, -0.5, 0. , 0. ]),\n array([ 0. , 0. , -0.5, 0. , 0.5, 0. , 0. , -0.5, 0.5, 0. , 0. ]))"
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "linalg.norm(x_diffM), linalg.norm(y_diffM)",
"execution_count": 29,
"outputs": [
{
"data": {
"text/plain": "(1.0, 1.0)"
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "x_diffM.dot(y_diffM)",
"execution_count": 28,
"outputs": [
{
"data": {
"text/plain": "-1.0"
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
]
},
{
"metadata": {
"trusted": true
},
"cell_type": "code",
"source": "",
"execution_count": null,
"outputs": []
}
],
"metadata": {
"_draft": {
"nbviewer_url": "https://gist.github.com/b30084b825d2038a4fcfc64d3d5a5fde"
},
"gist": {
"id": "b30084b825d2038a4fcfc64d3d5a5fde",
"data": {
"description": "類似度",
"public": true
}
},
"hide_input": false,
"kernelspec": {
"name": "python3",
"display_name": "Python 3",
"language": "python"
},
"language_info": {
"name": "python",
"version": "3.7.0",
"mimetype": "text/x-python",
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"pygments_lexer": "ipython3",
"nbconvert_exporter": "python",
"file_extension": ".py"
},
"toc": {
"nav_menu": {},
"number_sections": true,
"sideBar": true,
"skip_h1_title": false,
"base_numbering": 1,
"title_cell": "Table of Contents",
"title_sidebar": "Contents",
"toc_cell": false,
"toc_position": {
"height": "calc(100% - 180px)",
"left": "10px",
"top": "150px",
"width": "165px"
},
"toc_section_display": true,
"toc_window_display": true
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment