{ "cells": [ { "cell_type": "markdown", "id": "061b8ed3-022e-4f94-b5dc-5ceabb0eebfc", "metadata": {}, "source": [ "# Optimizer - cavity modes" ] }, { "cell_type": "code", "execution_count": 1, "id": "fa52e5ca", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Run Optimizer instance with id: opt id \n", "\n", "Starting optimizer with 1 provided measurement dependencies and 1 fit parameter(s):\n", "\n", " no. | id | initial value | min | max\n", " 0 | Pt top thickness | 3 | 0 | 10\n", "\n", "Using 0 equality constraint(s) on parameter(s):\n", "\n", "Using 0 inequality constraint(s).\n", "\n", "Residual start value: 0.0207539\n", "\n", "\n", "Calling ceres solver with fit method LevMar\n", "\n", "Ceres Solver Report: Iterations: 15, Initial cost: 2.153615e-04, Final cost: 1.042534e-05, Termination: CONVERGENCE\n", "\n", "Optimizer finished with 1 fit parameter(s):\n", "\n", " no. | id | fit value | initial value | min | max\n", " 0 | Pt top thickness | 2.41489 | 3 | 0 | 10\n", "\n", "and 0 equality constraint(s) on parameter(s):\n", "\n", "and 0 inequality constraint(s).\n", "\n", "Optimized residual from 0.0207539 to 0.00456625\n", "\n", "Optimizer instance finished. id:opt id\n", "\n", "\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkIAAAGwCAYAAABFFQqPAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/SrBM8AAAACXBIWXMAAA9hAAAPYQGoP6dpAABvJElEQVR4nO3deXwb5bU//s9IsiQv8h47dmLHCUkIDtk3AgQIhELYtxYoF1JKofQXSkugBdpSShfoLVwILemlQGmA+6UshdKFnUAI0EBCSEISZ8fZHTuxHcuWbcmS5vfHaEaybNmSPNKMZj7v14sXiS1Lz9iWdHLOec4jiKIogoiIiMiELFovgIiIiEgrDISIiIjItBgIERERkWkxECIiIiLTYiBEREREpsVAiIiIiEyLgRARERGZlk3rBehZMBjEoUOH4HK5IAiC1sshIiKiOIiiiPb2dlRWVsJiGTjnw0BoAIcOHUJVVZXWyyAiIqIk7N+/HyNHjhzwNgyEBuByuQBI38j8/HyNV0NERETxcLvdqKqqUt7HB8JAaAByOSw/P5+BEBERUYaJp62FzdJERERkWgyEiIiIyLQYCBEREZFpMRAiIiIi02IgRERERKbFQIiIiIhMi4EQERERmRYDISIiIjItwwdC//73v3H88cdj3LhxeOqpp7ReDhEREemIoSdL+/1+LFmyBB988AEKCgowY8YMXHrppSgpKdF6aURERKQDhs4IrVmzBhMnTsSIESOQl5eHhQsX4p133tF6WURERKQTug6EVq1ahQsvvBCVlZUQBAGvvfZan9ssW7YMNTU1cDqdmDNnDtasWaN87tChQxgxYoTy9xEjRuDgwYPpWDoRERFlAF0HQh6PB1OmTMGyZcv6/fyLL76IJUuW4N5778UXX3yBKVOm4JxzzkFTU1NSj+f1euF2u3v9lyq7mjpwtMMLfyCYsscgIiKigem6R2jhwoVYuHBhzM8//PDDuPHGG3H99dcDAB5//HG8/vrrePrpp3HXXXehsrKyVwbo4MGDmD17dsz7e+CBB3DfffepdwEx+ANBLHj4Q+Xv+U4binPtKMq1ozjHjpI8O4pzHSjJlf9sR0muQ/mzM8ua8jUSERGZga4DoYH4fD6sW7cOd999t/Ixi8WCBQsWYPXq1QCA2bNnY/PmzTh48CAKCgrw5ptv4p577ol5n3fffTeWLFmi/N3tdqOqqkr1tbd3+1GYk4W2rh6IIuDu9sPd7cee5s64vj7XbkVxXig4yg0FSnmRf5Y+J92GgRMREVEsGRsIHT16FIFAAOXl5b0+Xl5ejm3btgEAbDYb/ud//gfz589HMBjEj3/84wF3jDkcDjgcjpSuGwCKcu3Y8POvIRAU0dbVgxaPD62dPjR3+NDi8aHF40WzJ/x36c9etHh88AdFeHwBeFq6sL+lK67HkwOn4lwHSkPBUnGeHaW5jt5/ZuBEREQmk7GBULwuuugiXHTRRVovo19WiyAFIrn2uG4viiLc3X4pOOqQgqW+f/aF/uxFc0dygVOO3dq7PBcKloblOTDM5UBpxP8Ls7NgsQhD+TYQERFpJmMDodLSUlitVjQ2Nvb6eGNjI4YPH67RqlJLEAQUZGehIDsLo0tzB719PIFTi8eHox1S4NTi8aEnIKLTF0BnnIGTzSKgJM+OYS4HhuX1DpKGuXr/Od9pgyAwaCIiIv3I2EDIbrdjxowZWLFiBS655BIAQDAYxIoVK3DLLbdouzidGErg1OLxhgIkOViS/n603YsjHV4c7fDiWGcP/EERjW4vGt3eQe/fbrNIwZLLgWGh4EkJmPIcKMt3oDzfiTKXE3abrjc0EhGRQeg6EOro6MCuXbuUv9fX12PDhg0oLi5GdXU1lixZgkWLFmHmzJmYPXs2li5dCo/Ho+wio8QkGjh5/QE0d0hB0pF2b8T/fTgiB0zt0sfavX74/EEcPNaFg8cGzzSV5NpRnu/E8AInyvOdKM93YHi+E+UFTpS7pI8X5WQxw0REREMiiKIoar2IWFauXIn58+f3+fiiRYuwfPlyAMBjjz2GBx98EIcPH8bUqVPx+9//HnPmzFHl8d1uNwoKCtDW1ob8/HxV7tOsunsCMYKlbhxt96GpvRtN7V40ub3wxTlbyW61oCwiQBoeCpgqC7NRWZiNkYXZKM1zsIeJiMhkEnn/1nUgpJVly5Zh2bJlCAQC2LFjBwOhNBJFES0eHw67u9Hk9uKwuxuH27rR1C79/7DbiyZ3N5o9vrjuz261oKLQiRGh4GiE/F+R9P+KQiccNu6SIyIyEgZCKmFGSL+8/gCa3N5QgOQNBU7daGjrxqFjXTh0rAuH3d0IxvHbPcwlZZGqi3NQU5KDUSW5GFWSg1ElORiW52D5jYgowyTy/q3rHiGiWBw2K6qKc1BVnBPzNj2BIBrd3TjY2oVDbV042NoV6lHqxsHWThw81oXunqBUomv3YuP+Y33uI8duDQVIcnCUi5qSHIwty8MwF4MkLQSDIr466oHH68eokhwU5sQ3foKIqD8MhMiwsqwWjCzKwcii/oMlURTR2tkTCpA6sa+lE3uaO7G32YO9zZ04dKwLnb4Ath1ux7bD7X2+3uW0YVxZHsaVuTCuPA/HleVhXFkeKguy2ZeUIh/uOIJ7XtuMfS3hKezHl7tw6fQRuGz6CJS5nBqujogyEUtjA2BpzNx8/iAOtHZibyg42tMsBUv1Rz3Y2+yJWXbLsVsxrtyFiZX5OLGyACeOyMf4chcndg/Rf3YfxXV/XgN/UITDZkFRjh2H3d3K5+1WC66YORI3n3YcqktiZwqJyPjYI6QSBkIUi9cfQP1RD3Y1dWBnY4f0/6Z21B/1oCfQ9yllswgYW5aHiZUFmFpVgBmjinH8cBeszBzFxesP4PTfrcRhdzfOmzQcD14xBbkOG1o9PrxTdxgvrN2P9fuOAZAmtl8+fQRuO3s8KgqytV04EWmCgZBKGAhRonoCQext7sS2w25sPujGlkNt2HywDa2dPX1u63LYMLW6EDNHFWPW6CLMGFXEHWwxvLBmH+56dRPK8x348Efz+82uralvwWMf7MKqHUcAAA6bBdefMhrfO/04FORkpXvJRKQhBkIqYSBEahBFEQ1t3dh8sA2bD7nxxd5WrN/XCo8v0Ot22VlWzD2uBKeNK8Vp44dhdGkum7FDLvjDR9h80I2fnX8CvjNvzIC3Xbe3Fb99cyvW7mkFABRkZ2Hx/ONw3dwalieJTIKBkEoYCFGq+ANBbDvcjnV7W/H53lZ8+lUzjrT3PqbkuGG5OH9yJS6cXIFx5S6NVqq9I+1ezPrNewCAtT9dgGEux6BfI4oi3t/WhP9+axt2NHYAAKqKs/Gz82vxtdpyBphEBsdAaIg4UJHSTRRFbG1ox6qdR7BqxxGs3dPSq9downAXrppVhctmjES+01xlnr+vP4DbXtyI2op8vPGDeQl9bSAo4tUvDuChd7Yr5+GdOrYU915Ya+rgksjoGAiphBkh0kp7dw/e29qIf29swKqdR5SgKMduxSXTRuCmeWNQE8d5cEPx4tp9+PPH9Wjx+DCxsgDXzR2FMyeUpT2bcvtLG/HKFwfwvTOOw53nTkjqPjxeP/64chee/KgePn8QVouA6+aOwg8XjEdBtrkCSyIzYCCkEgZCpAdtnT3458aDeHb1Xuxskso8VouAy6aNwA8WjIs5J2koXly7D3e+sqnPx2ePLsb/fH3KgIMs1Xbeox+hrsGNJ6+bibNry4d0X/uaO/Hr1+vwTl0jAKA0z457L5yICyZXsFxGZCAMhFTCQIj0RBRFrKlvwZ9WfYX3tzUBkBqsbzt7HK4/ZTSyrBZVHqfT58cpv30frZ09uOm0MVh44nC8tfkwnvt0Lzp9AeTYrXjgskm4eOoIVR5vIIGgiNqfvwWvP4gPf3QGRpWokwX7eOdR/OJfW7ArFFieNaEMv7rkRFQWcrs9kREwEFIJAyHSq/X7WvHAm9uwpr4FAHDiiHz87zUzVMnUyD05VcXZ+OD2M2ALBVj7mjtxx982Ko/5/TPH4rYF41M6RXvPUQ/OeGglHDYL6n55rqpzl3z+IP535W489sFO9ARE5NqtuGvhBPzXSaOYHSLKcIm8f6vzT0giSqtp1UV48aaT8LsrJqMwJwubD7pxwR8+VmboDMV7dVK26eIpI5QgCACqS3Lw1xtPwndPl7av/+H9Xfjpa5sQjOdk2yTJpcCxZXmqD5+02yz4wYJxeOPWeZheXQiPL4B7/rEF316+Fkc7vIPfAREZAgMhogwlCAK+MbMKb9w6D1OqCtHW1YNvL1+LNzc1DOl+P98rZXzmjSvt8zmrRcDdC0/Af18+CRYB+Oua/fjxK1+mLBja0Sid8TY+hTu8xpW78LebT8a9F9bCbrPgg+1HcO7Sj7Bye1PKHpOI9IOBEFGGqyzMxkvfPQkXTqmEPyjilr+uTzoz1OjuRqPbC4sATBpZEPN2V86qxiNXToXVIuBv6w7gv9/aluzyB7SvWTpcdXSKd8hZLAKuP2U0/nnLKTi+3IWjHV586y9r8ci7O1Ka8SIi7TEQIjIAh82KpVdOxUVTKhEIilj8/BdKI3Ai5AzM6NJc5NhtA9724qkj8LvLJwMA/rTqKzz36d7EFz6IxnbpUNXh+ek5VX7C8Hz845ZTcO1JowAAj67YiZueW4f27r5HpBCRMTAQIjIIq0XAg1+fjJmjitDe7ceSlzbAHwgmdB97EszAXD5jJG5bMB4AcN8/t2Dj/mMJPd5gmkJDEMvyB58mrRZnlhW/uuREPHjFZNhtFry3tRGX/+9/0NDWlbY1EFH6MBDqx7Jly1BbW4tZs2ZpvRSihDhsVvzxmunId9rw5YE2PPlRfUJfv+eoBwBQk8A29VvPGovzJ1XAHxRx6wvrVc2eNIUyQmWu9GSEIn19ZhVe+u5clLkc2NHYgcv/+J+ksmxa2t/SiZfW7seyD3bhhTX7sOlAG7hRmKg3BkL9WLx4Merq6rB27Vqtl0KUsLJ8J+65oBYA8PsVO5VgIh4HWqWMUHVJ/NvwBUHA/ZdNwojCbOxt7sR9/6pLbMEx9ASCONrhAwCUpzEjFGlqVSFe/f9OxpjSXBxq68bXH/8Ptja4NVlLIlo9Pnz/r+tx2oMf4MevfIkH396Ou17dhAsf+xin/vcH+PPH9eiKOvSXyKwYCBEZ0BUzRmJqVSG6egL44we74/46+eDXRDMwBdlZePSqqRAE4G/rDiizhoZC3sJuswgoyrEP+f6SNbIoBy/fPBeTRxagtbMH//XUZ9jV1K7ZegbT6O7Gxcs+wb82HoIoArNrinH59JGYN64UOXYrDh7rwq/+XYevLf0Qn+w6qvVyiTTHQIjIgARBwO1fk3p3Xly7H21d8ZWrmkKBUDwnvEebWVOMq2ZVAwDueW1zwv1J0eRDUoe5HCkd2hiPkjwHnrthDiZW5qPZ48M3n/xM2dGmJz5/EN9evhb7WjpRVZyNf91yKl66eS7+5xtT8NwNc/DFPWfjgcsmoaLAif0tXbjmqc9w/xtbEeDOODIxBkJEBnXq2FKML89DV08Ar6w7MOjtRVFUAqGyJAIhAPjxOcejMCcL2xvb8Y8Nh5K6D1mTO9QflKYdY4MpyM7CczfMwfHlLjS1e3H98jVxB5jpsuyDXdhyyI3iXDue/85JfUYgOLOsuHp2Nd5dcrqyM+6JVV/h28vXosPr12LJKRMIimho68KOxnY0urvZG0UxMRAiMihBEHDt3BoAUrlqMO5uP3x+KYuTTEYIAIpy7fjuaccBAP7w/s4hZYUahxiUpUJxrh3P3jAbFQVO7D7iwS3PfzHkzJdajrR78adVUhn0vosmDnjcSp7Dhl9dciIe++Y0OLMs+HDHEVz358/gNsCYgB2N7Vjy4gZM/eU7mPvA+/jaI6sw5/4VmPHr93DL81/gg21NnA1FvTAQIjKw8ydVwGoRUNfgVnaExdLqkRqTc+xWOLOsST/mdXNHoTjXjj3NnfjnxuSzQs2hHqHSPP0EQgBQnu/EU4tmIsduxUc7j+KR93ZovSQAwFMff4XuniCmVBXigskVcX3NBZMr8dJ356IgOwtf7DuGa/+8Bp4MzQwFgyIeens7Fj76EV5dfxDt3X7YLAIKc7JgtQho8fjw7y8bcP3ytTj/Dx/j/W2NWi+ZdIKBEJGBFefacfJxJQCANzcfHvC2cpmnIDtrSI+Z67DhhlNHAwCeWZ38kEV3l1+V9aTCxMoC/O4KaZjkH1fuxsc7tW069vmDeGntfgDALfPHJnRo7OSRhXj+xjkoysnCxv3H8P2/rtdNlite/kAQP3xxAx77YBcCQRHnTCzHyzfPxfZfL8SGn38NW395Ll753lxcf0oN8hw2bG1w49vLP8ctz3+h/AOAzIuBEJHBfa22HADw0c6Bj92QyyJqBB5XzqpCllXAxv3HsPlgW1L3Ic8jcjkHnnCtlQsmV+Lq2dUQReCHL27AsU7t3lDf39aE1s4elLkcmH/8sIS/fmJlAf78rVlw2Cx4f1sTfv361hSsMnV+88ZW/HPjIdgsAh7+xhT86dqZmFVTrBzUa7dZMGNUMe69cCI++vF83HTaGFgtAv79ZQPOfXSV6oNAKbMwECIyuLmhjNC6va3w+mPPjpEzQvnOoQdCpXkOnHuiVJ75f58llxVq7/aH1qPPQAgA7r2wFmPL8nC0w4v739AuePhXqAR56bQRsFmTe1mfXl2EpVdKIxCW/2ePcp96t2JrI/7yyR4AwO+vnobLpo8c8PZFuXb85LwT8Pf/72QcNywXjW4vvvGn1fj3l5lxvaQ+BkJEBnfcsDyU5tnh9QexcX/s7IxcispXqRR1zRxpK/2/Nzaguyfx4X1yhkqt9aSCM8uK/758EgDgpc8P4D+7018i8weCWBXK9p1z4vAh3dfCSRVYfMZYAMDdr27C3uaB+8q01unz46d/3wwA+M6po3HepPh6owCpJPja4lNw1oQyeP1B3PrX9XHtriTjYSBEZHCCIGDOaCkrtKa+OebtlIxQtjoZmNk1xRie70S714+PkuihkTNCei2NyWaMKsZ/nSQFfT/7+2b0pLm/5ot9x9De7UdRThamjCwc8v39cME4zKopQofXjx++uEHXM4ae/rgeh93dGFmUjTvOOT7hr3c5s/DEdTNx9exqBEXgjr9txKtfMBgyGwZC/eBZY2Q0U6sKAQB1AxwPoWaPEABYLILyL/TXkyg7hHuE9JsRkv343AkozrXjq6MevPT5/rQ+ttz7deq4YUpPzFDYrBY8etU0uBw2rN93DM+t3jPk+0wFj9ePJ1Z9BQD40TnHJ73T0WoRcP+lJ+K6uaMgisCP//al5s3vlF4MhPrBs8bIaCZUuAAA2xpiHw0hb5vOc6iXgVk4SSrVrNxxJOHMglvpEdJ/IJTvzML3z5RKSo++tzOt53h9sa8VADB3TIlq91lZmI0fL5wAAHjw7e04eKxLtftWy9/WHYC724+akhxcOLlySPclCAJ+ceFEXDy1Ev6giJv/bx12NOr3GBVSFwMhIhOYMDwfALCn2RPzTboz9PFse/IzhKJNqyqEy2nDsc4ebDxwLO6vE0VR97vGon1zTjVGFmWjqd2Lpz+pT8tjBoKi0vc1rbpQ1fu+ZnY1Zo4qgscX0LQRvD+iKOK5T6Um/G+fOlqVI1gsFgG/u2Iy5owuRofXj+/937qMnalEiWEgRGQCw1wOlObZERSBnTEODJUDpJwhDFOMZrNaMG9cKQBg5faBt+9H8vqD6AlIGaRMCYQcNiuWnC2d7/b0x/VJNYgnamdTOzq8fuTYrRhf7lL1vi0WAb+65EQIAvD6lw3YoKMt5psOtmFXUwccNgsumTZCtft12Kz44zXTMTxfmhz+k79v4tEcJsBAiMgk5KxQrPJYp0/612+OXd3A47Rx0lybz76K3agdzR1q3BYEIFfl9aTSRVMqMaIwG80eX1zHmgzVhn3HAABTRhaq0h8U7YSKfFwe2o7+wBtbdRMUvPrFQQDAOROHq146Lclz4LFvToPVIuAfGw7htQ0HVb1/0h8GQkQmUVMqnT21v7X/U9NTURoDgFmjiwEAG/YfU84yG4zcH+Ry2DQ/eT4RNqtFmar91EdfpfxMq22HpaB2YmV+yh5jydnj4bBZ8Fl9C1buiD+rlyqiKOLdOul4jIumDK03KJaZNcW4bcE4AMAv/lmHpvbulDwO6QMDISKTGFEoBUIHWvtvfO0KlXJyVA6ExpTmojhXmmO0+VB8U6YzacdYtCtnVcHltGFPcyc+SfFcIbmhd/xwdctikSoLs3HdXOmk+v9duTtljxOvrQ3tOHisC84sC04NlV1T4bunH4eJlflo6+rBPa9tTtnjkPYYCBGZxMiibADAgTRnhARBwMxRRQCAtfUtcX2NO0NmCPUn12HDpaG+lRfWpHYr/Y7GDgBQvT8o2g2njkGWVcCa+hZll5pWVmyVskGnjh02pMOBB5NlteChr0+BzSLg7S2NWLm9KWWPRdpiIERkEnIgdDBWRkhulk5BT860aikQ2hTnuWPtGTBVeiBXzqoCALxTdxjNHd6UPEarx4ejofseV5aXkseQDS9w4pKpUnD3uMZZoY93SVm2M5I4Uy1RJ1Tk41sn1wAAfvXvurQPy6T0YCBEZBIjQoHQYXd3v7064WZp9f+VLfew1B2KPdAxUipmGqXTxMoCTB5ZgJ6AiH9sSM0ZVnJZbERhNnLT8H367uljAADv1DWi/qg2R2909wSwPrR7TT5DL9W+f9Y4FOfasfuIB//3aXLn5pG+MRAiMolheQ44bBYEReBwW9/mT6U0loJygxwI1Td74prN0pWiMl06yRmUNzY1pOT+5WBkbIqzQbKxZS7lZPsX1uxLy2NG+2JfK3z+IMpcDowpzU3LYxZkZ+GOr0nHd/x+xU7OFjIgBkJEJiEIAkYU9t8nFAyK8IayRKkIPkryHBie74QoAlsHOOZD1tUjrcVpy9xASJ6q/fne1n4Dz6GSd/9VF+eoft+xXD1bOlPt5XUH4PWnb3q2bE2ox+ykMSUQhPTtJvzGzJEYXZqL1s4ePLuaWSGjYSBEZCIVhU4AUnkski+i9yFVDai1oaxQPIGQPIzQmZW5L1EVBdmYEWoSf3Oz+lmh/S1Sr1c6A6EzJ5ShPN+BFo8P72xpTNvjyjaGymLTVZ6iPRib1aIcofLEqt3MChlM5r7KEFHCSvMcAIDmDl+vj3sjeobs1tS8LMgNvbuPDN5f0u1PXZkuneRDZ9/afFj1+97XImWEqoqzVb/vWGxWC74+Q2oE//v69A4aFEURGw9IzfZTQocIp9NFUyqVrNBz7BUyFAZC/eDp82RUciB0NGonU2SZI8uampLDmGFST8fuIx2D3rbbJ2eEMjsQOvuEcgDAur2tyk44tcjlzZFF6csIAcAl06Qhhqt2HEGrxzfIrdVzoLULLR4fsqwCTqhI3QDJWGxWCxbPl7JCyz/Zwx1kBsJAqB88fZ6MqiTPDgA4EhUIybvIHDZLynovxgyTMkJfxZMR6kldv1I6VZfkoKYkB/6giNW74z9iZDCdPj+OhrJ61SXpDYTGlrlQW5EPf1DEGyko+cXyZSgbdEJFvmYB8oVTKlCa58BhdzfeTEGWj7TBQIjIRMIZod7/kpcDIbstdS8J8i6fQ21dgx5IKpfGHClcT7qcNl7aabVqp3rHU8j9QQXZWaqftRWPi6ZKWaF/pmg0QH+2H5Z6y2o1yAbJHDYr/uskqWH8L5/Ua7YOUlfmv8oQUdxKQxmhFk90aUzOCKXuX9rFuXbkO20QRQw6h6bLIKUxIHzo7Ic7jqh2aOmhNikQqixMX39QpAsmS71Pa/e0pK08Jk/RHpfiKdqDuWbOKNitFqzfdwwbQs3blNkYCBGZSEG2FAi1dfXuV4ksjaWKIAhKeWywQKhb3spvgEBo7nElyLIK2N/SFfOct0Q1hXb9Dc93qHJ/iRpZlIMJw10IisAHaTp6YkdT6Fy18vTMTYplmMuhBIJazVMidTEQIjKRwhypjHKsMyoQCqS+NAaEj/k4dGzggCC8fT7zA6Fchw0TKwsAAJ/vje+stcE0uaWMXnm+U5X7S8bZtVIj+IqtqQ+EvP4A9jZLzeGpPlctHt8IHaHy7y8blOwlZS4GQkQmUhg6u6u92w9/xK4Xb0/qM0IAlIGOh44NPGDQCHOEIsmHzn6+R50DSxvbpe9fmYaB0FmhHXEf7jjS75EtavrqiAeBoIh8pw1lLm2yYJFm1xSjqjgbHV4/3t7CpulMZ4xXGSKKS0HEIaaR5TFfQAo8Up0RqixMLCNkhNIYAMyskQKhdXtVCoRCGSEtg4LJIwowzOVAh9ePz/eok+mKRT5XbXy5K60TpWOxWARcPn0kAOBv6w5ovBoaKgZCRCZis1rgCh3QeSwiEJIzQqkapihTAqG2wQKhUIbKIIHQ9FBGaHtjO9wqzBOSe4S0LI1ZLAJOHVsKAPiPiqMB+rNTJ43SkeRA6JPdRwcN7EnfGAgRmUxBP31Cco+QI8WlqMrQER+DvXF0Gaw0VuZyoro4B6IIbNh3bMj316j0CGlbJjo5dAL8J7uPpvRxduqkUTpSVXEOZtcUQxRTd7AupYcxXmWIKG55oYxQ5HlJ8vb5VGeE5B6hox2+AWcJGa00BkA5d2z9EAOhQFBUBmJqmRECgJNDGaEvD7SpPjk7ktwoPTpNJ87HSz5Yl31CmY2BEJHJuJxSINTRTyCUyjlCgNSjlBOaFt0wwInsRto1JpuYwKGzA2nx+BAIihAEoCTXrsbSkjaiMBs1JTkIBEXlZHi1iaKI/cq5aumdoj2YcyZKgdDne1vR1D7wBgDSLwZCRCYjZ4Q6usOBUDomSwPSLKGKAimL0RCjTygQFNETkAYPGikjJJ+PtfXw0AIh+Zy44hw7bCnO4MXj5BT3CbV29sAT2qI+QqMBkrFUFmZjSlUhRBF4Z0uj1suhJGn/LCKitMoLHckQmRGSA6GsNLyxysd8NHf0P5E4smRmpIyQHAjtbe7s9b1PlDzJuVjjbJBsdk0xAOCLfersiIsmZ4PK8x26/H1YeCLLY5mOgRCRySgZoYg3Y3mmUKpOno8UPu/M2+/nuyICISOcNSYrzrUrzc3bh5AVaumUAqEinQRC06oLAQBbDrrh9as/XHB/a6gsVqSvspjs3FB57D+7m/tMbKfMYJxXGSKKS389Qv6gVIqypSUQkt7AYwVCckbIYbPAYtF+Zoya5AND6w4lHwgpGaEcfQRC1cU5KMm1wxcIYssQrisW+YBZvfUHyWpKczFmWC4CQRGrU7x7jlKDgRCRycgZofbuyEBIygjZLKl/SSgZtDQmrUWPZZChkstjdQ3tSd9Hi0fKOuglIyQIAqZVSzvivlBpYGSkcEZIX/1BkcIH6zIQykQMhPqxbNky1NbWYtasWVovhUh1/ZfGpIyQHkpjRjteI5LSMD2EnWOtnXKPUNYgt0wfuTw21NEA/ZF7hEbqNCMEAKeNlxrGV+04AlEUNV4NJcp4rzQqWLx4Merq6rB27Vqtl0KkulyHlGnp8oUDIXmXVjp2IZUopbGBm6WNtGNMNi40EHD3kY6k3zBbQqWxIp2UxgBgerU8I0n9jNCB1lBpTKc9QgBw0pgS2K0WHDzWhfqjHq2XQwliIERkMnLJKbIpWS6NZaWhJ2fwjJBxS2M1JbkQBKksGSsQHEw4I6SfQGjSyAIAwKG2bqWHSQ3BoIiDciBUrN/SWI7dppwnt2rHEY1XQ4liIERkMnKmpdMXDoTSmRGSm6Vj9QjJO49SPdNIC84sK0aGel2+OtKR1H0oGSEdBUJ5DhtGlUgZm6EOjIx0tMMLXyAIiwAM13iK9mDmhfqEVu1kn1CmMd4rDRENKMcu9Qh1RQRC8vb59OwakzJCXT2BXsd8yHoC6TnuQytjSqXy2FdJllD0tmtMpuyIUzEQks9UG+Zy6GJ45EDmjZP6hNbUtyAQZJ9QJtH3bxYRqS7bLj3te5fGQs3Sadg1luuwKY3Q/WWFepTGbWO+PI0ZJp2XlXRGSIelMUCd0QDRGt3SsRVlLn1ngwCpEd7lsKHD61c1K0apZ8xXGiKKSekR6lUaS19GCAAKs6U38f4G0MlryTJgaQwAxgwLZYSOJJ4R6u4JKD1UhTn62TUGALWV6meEmtqljFCZy6HafaaK1SJgRqhP6LMUnbtGqWHMVxoiikkpjUVmhOQeoTQNMMzPltbg7ufE8nBpzFjDFGWjQtvA5fk4iXCHAkeLEB6DoBdyILSrqaPXMSlDoWSEdN4fJJs9WjpuZC0DoYzCQIjIZLL7yQiFJ0un5yWhIFvKZrj7yQj5DF4akyck72/pSngLvRw4upxZEAR9BYrD850oysmCPyhiZ2NyZb9omZQRAsLnrq3d08J5QhnEmK80RBSTHAj5g6KSfQlPlk5TRih08Gu/pTG/XKYz5stTZaETgiBl5BLdQu8OTQOXM2p6IggCjh/uAgDsbEp+cnakplBGqDxDMkKTRhbAYbOg2ePD7iRKn6QNY77SEFFM2fbwfB55C70/zVmYfDkjNEBpLB1TrrXgsFmVreCJlsfkDJrLoa/+INnYsvDASDVkWkbIYbNicmim0sb9x7RdDMWNgRCRyWRZBVhDmR+5PJbuZmm5NDZQs7RRt88D4SnJ8vER8dJzRggAjgs1gu9uUicb0phhGSEAmDKyEACwgYFQxjDuKw0R9UsQBDhDO7Lk4YVKj1Aats8DQL4z1Czd1XeOkNF7hABgZGhKsnx8RLzaQxk0ubSoN0ogpEJGKBAUlenjZfmZkRECgClVhQCAjQeOaboOip9xX2mIKCZ5arMv1I/jT3M5aqDSWHgtxn15SjojFAocXXoNhEKlsT3NHuXnmKzmDi+CorRDrkRnM5MGMjUUCG1tcKu2e45Sy7ivNEQUk8Mm9Ql5Q4FQOo/YAMKB0MBzhIzZIwQAIwqljFBDW3dCX6dkhHRaGqvIdyI7y4qegIj9CWa7osn9QSV5+p8qHWlkUTZKcu3oCYiqzlSi1Mmc3y4iUo1dKY313jWWjkNXgYG3z8tBmZF7hIYXSD0vhxMMhCK3z+uRxSIok7N3NQ2tPBbuD8qcshgglZ6V8hj7hDKCcV9piCgmR3SPULozQgNsn/eZoDQmB0INbYn2CIWapZ36zAgB6vUJyeeMZcLxGtHknWObDrRpvBKKh3FfaYgopugeoZ5QRsia7oxQdz+HrvrNEwi5u/3o9PX9HsQiZ9Dk0qIehXeODS0QavFIgVBpXub0B8lScQAtpY5xX2mIKCZHVGksoOzUSvMRGwP1CBl0jhAAuBw25IbmOSVSHnNnQEZoVEnyR4hEavFIvxtFGdQoLZOPG9l9pEP5xwbpFwMhIhOSm6XDGaE0b58PZTS8/mCfnTVGP30ekPpIkukT0vv2eQCoCo0G2N8ytGbp1k5p6nZxTuYFQiMKs5HvtKEnIKo2ZZtSx7ivNEQUU3SzdEA5ayw9WZhcezij0enrHQiZoUcIACoKEt85pvft80B4NEBDW5eS3UuGHAhlYkZIEAQlK1R3iOUxvTP2Kw0R9Su6WVoOhCxpOsjTahGUNUT3yJihNAaEpyUfdieeEXLpuDQ2zOWAw2ZBUAQOHUs+K9TqydyMEADUVkgN0+wT0j8GQv1YtmwZamtrMWvWLK2XQpQS0c3SSkYoTc3SAJDrkN7MozNC8g42eY1GJW8LPxKalzOYYFBEZ6iMKH/v9EgQBFQVywMjkw+EWjI4IwSE+4S2MhDSPWO/0iRp8eLFqKurw9q1a7VeClFKRA9UlAOhdO0aA4DsLGkNZi2NleYlFgh1+wMQpR8Tch3WgW+ssaoiqey3L8HJ2ZFaQ83SxRkaCJ1Q4QIAbG1ohyj/4EiXjP1KQ0T96pMREtMfCMlv5p3eWKUxY788lYZOVD/SEV8g5PFKAaMghINIvVIyQknuHPP6A+gI/V5kamnsuGF5sAjSrKx4f8akDWO/0hBRv2L1CKU1I2TvvzRmlh4heT7O0bgDISkwyLXbIKSplytZyZ6lJjvWKWWDrBZB1/1QA3FmWTGqJDRlu3Hoh9BS6jAQIjIhR4weoXQ1SwNQ5uh4opul/cY/YgMAykIZoaNxlsbk71OOXd/ZICBiC32S5421hBqli3KyYEljcK62saFDaHcOcbgkpZaxX2mIqF+R2+eDwXD/QjqbpeU39K4YGaFMOmgzGXKPkLvbr2TmBiJnzvTcKC0LN0snlxFqVQKhzCyLycYpgRBnCemZsV9piKhfcv9NT0CEPyIQSue/vnNCpTFPzGbpzM0ExKMgO0u5xuYO36C3V0pjOm+UBoCRhVIg1OLx9RmYGY9M3zEmG1ceCoRYGtM1BkJEJiQPTvQHgghG7GhJZ49QOCNkzmZpQRBQkhsqj8XRJyRnhHLs+s8I5Wfb4MySfn6JTM6WZfoMIdm4Mmnn2C6WxnTN2K80RNQvuf/GHxSV/iAg3aWx/jNCZpkjBAClrvgbpjuUZmn9Z4QEQVAmZycyMFKWyeeMRTpuWB4EAWj2+NDMnWO6ZfxXGiLqQw54fIFg79JYGpulY/UImWWOEAAMS2CWkDxmICcDeoSA8MDIpDJC8jljufo9SiQe2XYrRoZmKjErpF/Gf6Uhoj7kRmR/oHezdFpLY6FeF0/MOULG7hECgOJQaUzOgAxEzpzlZUBpDMAQM0LGaJYGgNGlUp/QnmaPxiuhWBgIEZmQPVazdBpjjxx5snSM0+eNvn0ekLaHA8CxzsGbpeUz2XIyoFkaiDhLbUgZIQMEQiVS43j90eSnbFNqGf+Vhoj6kJuleyKapa0WIa2D+uQST+Rk6UBEz5IZSmNyD0xrHIGQPFk6N0MyQsOHUBqTByoW5mR2aQwAakqloYp7jjIjpFfGf6Uhoj6ylNKYqMlUaSDcIxQ5WVouiwFAlgmapeU3+tbOOEpj3szKCA0fQmnM3S19PwqyDRQIsTSmW8Z/pSGiPrIiMkJKIJTmYxty+zliIzIQSucONq3IPTDydvGByN+nvAxplh5ekHxpzN0lBUL5zswPhEaXhAOhyH480g8GQkQmZLOEeoSC2mWEspWMULg0JvcHAeYojYUzQnGUxpQjNjIjEKoIBUJHOry9RjQMRhRFuLula803QEZoZFE2bBYB3T1BNLYnHhRS6hn/lYaI+pDLTj3+oCYnzwMDZ4SsFiHt69GCnBE6lkBpLBPmCAHSESJWi4BAUIz7YFlA+n2QAycjZIRsVouyhb6efUK6xECIyISyQkGGPxjUPCMUuX3eTFvngYhAqKsHojhw1kRuls6UOUJWi6AcLNuQQHlM7g/KsgrKdOpMF26Y5s4xPTLGbxkRJUTOCEU2S6dzmCIA5U3O6w/3BcmlMTOUxYBwaSwQDJeDYunqkY/YyIyMEJDcFnp3V6gs5sxK6y7GVKopYcO0npnj1YaIeomcLC0HQuluTnbYrMoa5GyInBEywwwhAHBmWZEdmqc02CwheQK3fPtMMMwV/1lqMjkjZIT+IFlNaJbQ/hZmhPTIHK82RNSLHrbPO0IZIVEMZ4J8/nCPkFnIQxVbBtk5JmeEsjMoI1QaOkKkuWPwZnBZeMdYZpQA4zGyKBQItTIQ0iMGQkQmlKVMlg43S1vS/GoQmfXx+qU3eXm4o1lKYwBQGGfDtBwIOTMoI1SaF/+hsjIjZoSqiqVA6EBrl8Yrof6Y59WGiBS2fuYI2dIcCTlskYGQlAnya5Sd0pLcJ9TWFTsQCgZFJVuWSaUxJSPkSSAQiugRMooRoV1jxzp70N49+A5BvQsERexv6USTu3vQJv9MYJzcIxHFLfKssXCzdHrXIAgC7DYLfP6gEghp1a+kJfkNf6A3yG5/eMRAJgVCJXJGqD2J0li2cd6e8hw2FOVkobWzBwdau3BCRWYGeU3ubixdsRP/WH9QOQR4ZFE2rj9lNBbNHaUc5pxpMnPVRDQkckbIHwyfPp/ujBAQzgp5Q2Uff8B8GSFXqBdmoF1jXRGzlhwZdPSInBE6mkhGqNs4U6UjyX1CmVoe+8/uozj7kVV4/rN98PgCsNsssFoEHGjtwq/+XYernvg0rgnpepQ5zygiUk1WP6fPWzQIPuSdY9EZITMFQnIvjHuA0pjcH+SwWTT5OSVL6RFqT6I0ZqAeIQDKUMUDGdgwvWJrI7719Fq0dfXgxBH5+OuNJ2HrL8/F5l+cg99ceiJcThs+39uKq5/8NCNLfwyEiEwoy9K3P0eLrLac3fApPULS/20mGagIhDMfA2WEuntC/UEZtGMMCGeE3N1+5Wc8mHBGyDilMSBzG6a3Nrjx/b+uhy8QxLkTh+NvN5+MuceVwGoRkG234po5o/Dq907GMJcD2w6347YXN2Rc3xADISITskYEGuEt6xqUxqKGKoYzQuZ5aQqXxgboEerJvBlCgBTkyf1e8TZMG3HXGBDOCGXSLCGP14/vPrcOnb4A5o0rxWPfnNbvrsVx5S48vWgW7DYL3tvahJfXHdBgtckzz6sNESkim5F9AelNVoskTLg0FuoRMmOzdLbcLD1Aj1CGBkIWi6A0TMc7S6jNQCfPRwqXxjInI/Tg29uxr6UTIwqz8Yerpw3YDD1pZAGWnD0eAPCrf9ehyZ05B8wyECIyocgeHC2HGNqVZmkT9wjJGaGBeoRCzdKODAuEAKAkVyqPHYlzllC4R8hYpbFMG6q4fl8rnlm9BwDw28snKfOuBvKdU0dj8sgCtHf78dgHu1K8QvUwECIyIWvEGU5eDQMhZddY1BwhM2WEXEqP0ODN0tkZeAhpqSux6dJG3TVWWShlhNq7/ejwDnyunNZEUcQDb2yDKAKXTR+BeeOGxfV1NqsFd507AQDw1zX7MqYMmHnPKiIaMotFgBwLaZkRCgdC0ht9IGi+IzbkzMdApbHuDDxeQ1aaG/90aVEUI+YIGSsQynPY4HJIP+tEDqHVwvvbmrBmTwscNgt+dM7xCX3tyWNLccrYEvQERPzvh7tTtEJ1MRDqx7Jly1BbW4tZs2ZpvRSilIk8eBVI/+nzQN/t82acI6TsGhugNCYHQk5bBgZCSkZo8EDI4wsglBQ0XEYIAIYXOAEADW367RMSRRGPvLcDAHD9KaNRUZCd8H3cMn8cAODvXxxE2yBHx+gBA6F+LF68GHV1dVi7dq3WSyFKGTnY6PFrF3wou8Z65IyQ+Upj8hu+1x9UMmPR5B4hZwZmhEqUjNDgpTE5GLRZBDgzsAw4mIpQeaxBxxmh1V81Y/NBN5xZFnz3tDFJ3cdJY4pxfLkLXT0BvLxuv8orVJ/xftOIKC7yJOkeTTNCoTlCoTXIB8CaKSOUFzEvJ1Z5rKsn884ZkxWHAqGWOKYOy70zLqcNgga/j6lWkS9lhPRcGnvqo3oAwNdnVKEod/AG6f4IgoBFJ9cAAP7v0726nyvEQIjIpORYIxwIpX8NSmmsJ/qsMfO8NFktgtI7Eqs8lqlzhACgKLTb6Fhn/IFQrsNYO8Zk4dKYPgOhXU3teH9bEwQBuOHU0UO6r0umVSLHbsWe5k6s339MnQWmiHlebYioF3kmiJyN0eJf4H12jZmwRwgY/LwxpUcoA8tFRblS6a81jl6RjtD15xk0EKookDNC+uwRenb1XgDA2SeUo6Y0d0j3lWO34ZyJwwEA/1h/cMhrS6XMe1YRkSqUHqFQIGTVNBAyb48QEC6PeWJsq87UgYoAlPkz8WSE5Os3aiCk54xQd08Ar4UClmvnjlLlPi+aWgkA+PeXDcrrjB4xECIyKVtUs7QW1ahYc4TMlhGSS0Gx5stkcrN0YXb4LDX/IG+G7XIgZLBzxmSVOm6WfreuEe5uPyoLnDj5uFJV7vPUsaUoybWj2ePD6t3NqtxnKjAQIjIpuTm6R8vSWFZ0j5D5Dl0FgFy79Mbf6YtRGvNnbrN0QcQ8oLYBRgQA4YyQ0XuE2rp6Yv6stSKfD3b5jJGq/UMky2rB2bXlAKQT7PWKgRCRScnBhrZzhHqXxsybEZICnA7vINvnMzAQslktyjEig/UJyYGQy6CBkMthQ24oq6ennWMNbV34aOcRAMAVM0aqet9nnRAKhLY16Xb3GAMhIpPq2yOU/jX02T5vwl1jQDgDEqtHKJObpYFwn1Bb18B9Qu0GzwgJgqBkhfQUCL3+ZQNEEZhdU4xRJUNrko52ytgS2G0WHGjtws6mDlXvWy2Z+awioiFTeoRCO7U0nSzdY+4eobxBAiE5Y5aJpTEAKMoJ7RzzmLs0BoTLY4d1dDr7G5saAADnT65Q/b5z7DacclwJAOA9nZbHGAgRmZQ1lHWRzxrTpkeod7O0WXeN5dgHbpaWvz92W2a+ZMsZodZBdo7J2+eNWhoDgDKXFAgdaR/8yJF0ONzWjS/2HQMAnHvi8JQ8xpkTygAAH+04mpL7H6qknlWLFi3CqlWr1F4LEaVRaIxQRI9Q+tfQp0dIzk6ZLBDKC/UIdcboEZIzZo4MPGsMAApDGaHBmqXlHikjZ4SGhc5ea9JJIPT2lsMAgBmjilAemnyttrmhXWjr9rUqZV49SSoQamtrw4IFCzBu3Djcf//9OHhQ38OSiKgvOSMkb2nWohxlt0VnhEK7xkwWCCnb52PsJJKD1UzNCBXFmRHyGHz7PACU6SwQenOzVBZbmKJsEAAcNywXZS4HfP4gvtjXmrLHSVZSz6rXXnsNBw8exPe+9z28+OKLqKmpwcKFC/G3v/0NPT36P2mWiPr2CGkzWVrKcMj/SjRrj9BgzdLyobSODA2E5IzQYLvGOpSBipmZ+YqHnBE60q59j1Bzhxdr6lsApK4sBkivLXNDfUKf6nCeUNLPqmHDhmHJkiXYuHEjPvvsM4wdOxbXXnstKisrcdttt2Hnzp1qrpOIVCYHG3KPkBaxh5zhkIOxoGjOHiF5jlDsZukML42FZgkNNl06PFk6a8DbZTI9lcZW7TyCoAjUVuRjZFFOSh9r7hgpEFr9lYECIVlDQwPeffddvPvuu7BarTjvvPOwadMm1NbW4pFHHlFjjUSUAtaogYpa7BqzRW3hD581lpmZj2TJc4Q8MXqEfBneLC2fYn5skIxQePt8ZgZ88dBTs/TK7dLsoDOOH5byx5IzQhv2H9Ndn1BSz6qenh688soruOCCCzBq1Ci8/PLL+OEPf4hDhw7hmWeewXvvvYeXXnoJv/zlL9VeLxGpRB6o2BPUrkcoyypnhMy9a0zZPh+jRyicEcrMQCi8ayzegYrGzwi1d/s1DQgCQRGrdkiB0OnjUx8IVRfnoDTPgZ6AiC2H2lL+eIlIqiOtoqICwWAQV199NdasWYOpU6f2uc38+fNRWFg4xOURUapYo84a0yAhpARCciaIPUJ9AyFRFJVm6YwNhOIojQWCIjp98q4x42aE8p02OGwWeP1BHGn3oqo4tSWpWDYdbENrZw9cDhumjypK+eMJgoBp1YV4t64R6/cdw4xRxSl/zHglFQg98sgj+PrXvw6nM/ZWu8LCQtTX1ye9MCJKLTnrouURG1lRx3woGSGTnTWWN8Chq3I2CMjg0ljO4KWxyGyYkXeNCYKAYS4HDrR2oam9W7NAaOX2JgDAKWNLlX+QpNr06iIlENKTpK7+gw8+6Hd3mMfjwbe//e0hL4qIUk85dFXDZum+GSHtynRayrHLu+eCSjAoiwyEMrZZOlfKCHX1BGKWg+RsWJZVyNjrjFeZsnNMuz6hD3ekrz9INq26EACwXmdb6JMKhJ555hl0dXX1+XhXVxeeffbZIS+KiFIvukdIiyGG7BGSRA4QjO4T8kUEQlkZminLs9uU0qu7u/+skDxVOs/AwxRlWu8cc3f3YOP+YwCA09LQHySbPLIAFgE41Natq7PWEgqE3G432traIIoi2tvb4Xa7lf9aW1vxxhtvoKysLFVrJSIVyTuztDxrTA7G/EERoihG9AhlZgkoWQ6bRQn+ovuE5KnbDptFk1lParBYBOXYDHdX/w3hHSY4Z0ym9c6xz/e0ICgCo0pyUFmYnbbHzbHbMGF4PgBgw379ZIUS+o0rLCyEIAgQBAHjx4/v83lBEHDfffeptjgiSh35jVfOwmhZGgOkYMisGSFBEJBtt6K92680DMsyfceYLD87C+5uf+yMkNc8GSFlurRbm0Dos6+kIYonjS5J+2NPHlmAugY3thxy49wT1T/kNRkJ/cZ98MEHEEURZ555Jl555RUUF4e7vu12O0aNGoXKykrVF0lE6ovOAGnZLA1I5bHwHCFzBUKA1CfU3u1HV1QgFJ4hlNl9M/nOLABdaO/uPyPkMVEgpEyX7tAmEPo0NNRwzpj079yqrZQyQlsOudP+2LEk9Bt3+umnAwDq6+tRXV2dsWlaIuqbddEmEApnOXoC5s0IAfIJ9F509Rg1IySXxmJlhIx/4KqsODRgstkz8KTtVGjv7sHmUBAyZ0z6M0K1FVIgVJeJgdCXX36JE088ERaLBW1tbdi0aVPM206ePFmVxRFR6kS34Wg5WRoIZYQ0bNzWmjMrdAJ9jIyQIyvDAyGntHMsdrO09HEjb52XleRJgVCLJ/0Zoc/3tiIQFFFVnI0RaewPkk2oyIcgAIfd3Wju8KIkz5H2NUSL+zdu6tSpOHz4MMrKyjB16lQIggBRFPvcThAEBAL6Gp9NRH31LY2lfw2CICDLKqAnIMJv+oyQFAhFl8bkZml7mma9pIpLDoRiNEt7QtedZzdBIJQrvfm3dKQ/I6RlfxAglT5rSnJRf9SDugY35o1L3661WOL+jauvr8ewYcOUPxNRZovuw9EqC2OzWNATCIQyQubtEcoOZYS6eqJ2jfXIGaEM7xGSS2ODNEubojQWygh5fNJcJWcaf7Zr6uX+IG0CIUAqj9Uf9aDuUIYFQqNGjVL+XF5ePuBUaSLSPz00SwNSw3RXj1QaC2eEMjv7kYxsJSMU7PVx5XiNDM8IKaWxGD1C4WbpzA744uFy2GC3WuALBNHs8aWtROXzB5X+oBlpOFYjltrKfLy+qUE3DdNJPbPKysqwaNEivPvuuwgGg4N/ARHpjh5KY0DkUMVwaczMGaFOX4w5QpneI5Qt9whxjpAgCOGG6TTuHNva4IbPH0RhThZqSrQ52gMATqhwAQB2NLZrtoZISU+W7uzsxMUXX4wRI0bghz/8IT7//HO110ZEKRSdYNAuIxSeLm3Ws8aAyGM2onqEegyyayzUBN0eozQmZ4RyTBAIAdrsHJOPtphaVajpru9xZVIgtPtIhzJVXktJPbMuvfRSvPzyy2hsbMT999+Puro6nHTSSRg/fjx++ctfqr1GIkqB6J4grV4XlaM+TN4jFHPXWECeI5ThgVD2wKUx+brNUBoDwjvHmtPYML0+dKzGtCrtymIAMKIwG7l2K3oCIvYc9Wi6FiDJQEjmcrlw/fXX45133sGXX36J3NxcTpYmyhDRGSCtgg/l4FUTT5YGInaNxcwIZXaA4HLKzdKDlMZMsGsMAEpy07+FfoMcCIUOP9WKxSJgXLlcHuvQdC3AEAOh7u5uvPTSS7jkkkswffp0tLS04Ec/+pFaayOiFLLqqFkaAHr8QdOePg9E7BqLkRHK/NJYvM3SJgmEQvNz0lUaa+7wYm9zJwBgSlVhWh5zIOPL8wAA23XQJ5TUb9zbb7+N559/Hq+99hpsNhuuuOIKvPPOOzjttNPUXh8RpUh0aUyr2EPeIdbTKyOU2W/6yZB3jfU5ayyUIcr00lhB9sADFT2hydKm6xFKU2lMzgYdNyxX+VloabycETqcoYHQpZdeigsuuADPPvsszjvvPGRlaf9NJaLE9MkIaVUaC73BSxkh8/YI5YRKQoY9YiOUEeruCcLrD/Qp9XWYaPs8EFkaS28gNK1a2/4g2fHDQ4FQU4YGQo2NjXC5XGqvhYjSKDrW0Kw0FlqIPxhEIGDeHqFsuxTo9J0sbYxm6cijM9q7/XDk9Q545LEBZtg+D0SUxtK0fX7zwTYA0unveiBnhPYc9aR9qGS0uJ9Zbnd48JEoinC73TH/IyL900tpTG6W9gVEU2eEsrMGywhldqbEahHgcvR/8KrXH0BPKAg2SyCU7u3zdQ3Se/PE0OnvWitzOVCQnYWgCHx1RNudY3H/xhUVFaGhoQFlZWUoLOx/BoEoijxrjChDRAcbWs0VkbfP+yPmCJkyEIrVIyQPVMzwjBAgbaFv9/rRHrVzTO4PAoCcDD9KJF6ladw+f7TDi0a3F4IATBiuj0BIEASML8/D2j2t2NHYjloNA7S4A6H3338fxcXFAIAPPvggZQsiovSIjjWie4bSxR4xUFHeNWbG0lisgYo+g5TGgMgt9L0zQvKOMWeWBbYMP0okXnJGqKsngC5fQAmEU6EudJTF6JJcXWXcxpe7sHZPq+Y7x+L+jpx++unKn0ePHo2qqqo+/4IURRH79+9Xb3VElDJ9jtjQ6P1Hzgj5AiJCCSFzZoRiHrFhjNIYELmFPioj5DPX1nlAulabRYA/KOJYlw/Z9tSdNyaf6XWCTspiMrlheqfGgVBSL32jR4/GkSNH+ny8paUFo0ePHvKiiCj1+pw+r/ERG96ITIiZt8/3mSNkoIxQrBPoPSY6Z0wmCAIKc6TAsNXT/0gBteitP0gmH7WhdUYoqWeW3AsUraOjg6fSE2UIvfQIyYFQZEnIasKzxpSBin2apQ3UIxRjqGKHPEPIJFOlZYU5UnnsWFdq+4S2HJJ2jNVW6CsQkocqHmjt6pMJTaeEfuuWLFkCQHrBvOeee5CTEz69NhAI4LPPPsPUqVNVXSARpUZ04KNVj5A8WbqrV0bIfIGQ3CPUExDREwiGM2UGmSMERJ5A339GyCwzhGSFoe/Hsc7UZYQ6fX7Uh87zmlipj63zspI8B1753skYW5anaRCc0COvX78egJQR2rRpE+x2u/I5u92OKVOm4I477lB3hUSUEn2P2NBmHTYlIxQ+hdqMPUKRc1S6ewLhsQJGKo3JzdJRPUIdJiyNAREZoRQGQlsb2iGK0nb1YS5Hyh4nWTNGaT/gMaHfOnm32PXXX49HH30U+fn6SrMRUfyiN+doVRqz91ca02gtWnLYLBAEQBSl7JgrVEYyUrO0fE3tURmhTpMGQkVyj1Bn6kpj2w6HGqV1VhbTk6T+ibF06VL4/X3reS0tLbocqHjppZeiqKgIV1xxhdZLIdKN6MBHu7PGepfGLIJ2x31oSRAEOEPBTrcvnB2TM0KOLANkhLL7P4HeE2oQz03hFnI9kpulj6UwENoZOt1d7sehvpJ6Zl111VV44YUX+nz8pZdewlVXXTXkRantBz/4AZ599lmtl0GkK9FZF63KUfJZY94eeYZQ5r/hJ0veOdbtD2fH5GZpuwHm68RuljZnRigdpbFdTVIgJO/Qor6SemZ99tlnmD9/fp+Pn3HGGfjss8+GvCi1nXHGGTwbjSiKbrbPR2WEzNgfJFN2jvkiAyEpQHQaIiMkBUJtXbGapc0WCMmlsdQFQjtDh5qOZUYopqSeWV6vt9/SWE9PD7q6uhK6r1WrVuHCCy9EZWUlBEHAa6+91uc2y5YtQ01NDZxOJ+bMmYM1a9Yks2wiihBdftKqLSd6+7wZd4zJ5GAncged0ixtzfyyUb7SI8RmaQAoCmWE2lK0fd7d3YNGt3So69gyBkKxJBUIzZ49G0888USfjz/++OOYMWNGQvfl8XgwZcoULFu2rN/Pv/jii1iyZAnuvfdefPHFF5gyZQrOOeccNDU1KbeZOnUqTjzxxD7/HTp0KLELIzIRvZw+L+8aUzJCJpwhJJN3jkU2jnsN2SMU3Sxt7h6hVGWE5LLY8HynEoRSX0mF37/+9a+xYMECbNy4EWeddRYAYMWKFVi7di3eeeedhO5r4cKFWLhwYczPP/zww7jxxhtx/fXXA5CCrddffx1PP/007rrrLgDAhg0bkrmMPrxeL7xer/J3PTZ+E6lFNz1CocBH3j5vxh1jsuyoQCjyIFpDzBEKvRl3+gK9ZiXJR2yYLSNUmC33CKUmI7Qr1Cg9jmWxASX1zDrllFOwevVqjBw5Ei+99BL+9a9/YezYsfjyyy8xb9481Rbn8/mwbt06LFiwILxgiwULFizA6tWrVXsc2QMPPICCggLlv6qqKtUfg0gv9FoaM3WPkL33dGlfILx7zAhzhORDV4He5THTlsZywwMVRVFU/f7l/qDjhjEQGkjSv3VTp07F888/r+Za+jh69CgCgQDKy8t7fby8vBzbtm2L+37k7JXH48HIkSPx8ssvY+7cuX1ud/fddyvTswEpI8RgiIyqz6GrOjliw9w9QnKztBQAeSOGTBph15jNakGu3QqPLwB3V49yArtZm6XlHiF/UESH16/MWVLLziZmhOKR9G/d7t278Ze//AVfffUVli5dirKyMrz55puorq7GxIkT1VzjkL333ntx3c7hcMDh0N/kTaJUiH5f1a5HSC6NsUcoukdIzgjZLILSS5XpCrKz4PEFeu0c88g9QiYLhJxZVjhsFnj9QRzr7FE/EGrk1vl4JPXM+vDDDzFp0iR89tlneOWVV9DRIX2zN27ciHvvvVe1xZWWlsJqtaKxsbHXxxsbGzF8+HDVHofIjKIDH63eZ+1RR2yYeo5Q1K4xOSNkhLKYrL/zxpQeIZM1SwPhrJDas4Q8Xj8OHpN2cY/jjrEBJfXsuuuuu/DrX/8a7777bq/zxs4880x8+umnqi3ObrdjxowZWLFihfKxYDCIFStW9FvaIqL46eX0eZuVc4Rk0c3SRjp5XhYeqhjuEfKYtEcIiNw5pm7DtHzQanGuHUW59kFubW5J/dZt2rSp3/6gsrIyHD16NKH76ujowK5du5S/19fXY8OGDSguLkZ1dTWWLFmCRYsWYebMmZg9ezaWLl0Kj8ej7CIjouTopUcouieIPUKRgZARM0K9t9B7/QH0BKRGYQZC6tnTLAVCo0tzVb1fI0rqt66wsBANDQ0YPXp0r4+vX78eI0aMSOi+Pv/8815TquVm5UWLFmH58uW48sorceTIEfz85z/H4cOHMXXqVLz11lt9GqiJKDF9AyFt1hFdCjNzRkhplo4KhIxw4Kos+pgNuT8IMGdpTN5CH33+2lDtbe4EAIwqzlH1fo0oqUDoqquuwp133omXX34ZgiAgGAzik08+wR133IHrrrsuofs644wzBt02eMstt+CWW25JZqlEFINejtiwWZkRkinb5+VdY0YsjUX1CMllMYfNYpiG8EQoGbIudXuE9oYyQqNKmBEaTFK/dffffz8mTJiAqqoqdHR0oLa2FqeddhpOPvlk/OxnP1N7jWm3bNky1NbWYtasWVovhShl9DJZOsvKjJAsukfIZ8TSmFN+45cCILlR2mxb52WxDqIdqj2hjFBNKTNCg0nqN89ut+PJJ5/EPffcg82bN6OjowPTpk3DuHHj1F6fJhYvXozFixfD7XajoKBA6+UQpUT0QEWtNmv17REyzpt+ouSzxqJ7hMyQETJjfxAgjRMA+h47MlRyRqiapbFBDek3r7q6GtXV1WqthYjSKPooC63PGpOZOSMU3SPkM2KPUHbvDEhHqEcox4T9QUDk90O9HqEuX0A5bLWGpbFBxR0IRU5cHszDDz+c1GKIKH10u2vMxAMVs2M0SxurNCZnQKQ3fjkgkgMCs5F7hNpULI3ta5HKYvlOm7IrjWKLOxBav359XLfTahYJESUmugKl2a4xqz4CMj0Ib583crN07+ZgOQAoMGsg5FS/NCZvna8pzeV7chziDoQeffRRTJw4EVarOdOXREajl11j0c3S3DVm9GZp6Y2/jYEQgIgeIRUzQuwPSkzcz65p06ahpaUFADBmzBg0NzenbFFElHq66RGKCnzM3COklMZ8xp0jFN0c7DZ5IBRuHlevR0ieIcT+oPjEHQgVFhbiq6++AgDs2bMHwWBwkK8gIj2LTplrtVmrT0bIxD1CfQYqhkpkjizjZYS6e4Lw+gNKQGTaQCgiQzbYTL14KcMUS5gRikfcpbHLL78cp59+OioqKiAIAmbOnBmzTCYHTESkX3opjUWvw8rt8xGnz0v/txto0GCeM/y2097tZ2ksdN2BoIhOX0CVMQKRPUI0uLi/40888QQuu+wy7Nq1C7feeituvPFGuFyuVK5NM8uWLcOyZcsQCAQGvzFRhtJNaYyTpRVyaczrDyIYFMMZIQP1CFktAlwOG9q9fri7ekwfCDmzLMiyCugJiHB39ww5EOoJBHEodOo8e4Tik9B3/NxzzwUArFu3Dj/4wQ8MGwhxoCKZQXTco1lpjGeNKbIjZul0+wPhHqEs4/QIAVJfTLvXj2MRgZC8m8xsBEFAvjMLzR4f3F1+VAzxLafR3Y2gKGURh+U51FmkwSX10veXv/wFLpcLu3btwttvv42uLin6VKu+SUSpp5fSGDNCYc6Ipmi5hwYwVkYIAIpzpYNGWz0+02eEgHDDtBqzhA62Su/HFYXOPtPjqX9JPbtaWlpw1llnYfz48TjvvPPQ0NAAALjhhhtw++23q7pAIkoNvQRCPGsszGIRlK3yXT0BZZ6Q02AZITkQagllQQAGQoA6W+gPhspiIwqzh3xfZpFUIPTDH/4QWVlZ2LdvH3JywjXIK6+8Em+99ZZqiyOi1Ok7WVqbdfQ9a8y8gRDQewu90TNCzR6fsmvMrJOlgYiDaFUYqihnhBgIxS+pouw777yDt99+GyNHjuz18XHjxmHv3r2qLIyIUqvP6fMaBSDcNdZbdpYVbV096O4JGPLQVQAoypECoX0tnZA7KpgRUqc0dqhNCoQqGQjFLalnl8fj6ZUJkrW0tMDhYHMWUSbQS2lMEIReWSAD7RRPSuQWeq9BS2MleVIgVH9E2ubtzLIYamhkopRjNlQ4ePWAnBEqYiAUr6RecubNm4dnn31W+bsgCAgGg/jd736H+fPnq7Y4Ikqd6AyQlhWpyIbp6J4hs4kcqtht0NJYaSgQ2tnUDgAozLZruRzNRU/bHgq5R2gkM0JxS6o09uCDD+LMM8/E559/Dp/Phx//+MfYsmULWlpa8Mknn6i9RiJKAb2cPg9IW+i7IWU/bCYPhOQt9F2+QMRkaWNlS8rznQCAox2+0N/NXUmIPog2WaIoKjOEmBGKX8KBUE9PD2699Vb861//wrvvvguXy4WOjg5cdtllWLx4MSoqKlKxTiJSmV4GKgJRGSE2SwMAuv3G3T4/vMDZ6+9yYGRW0QfRJqvF40N3TxCC0Pd7TLElHAhlZWXhyy+/RFFREX7605+mYk2a42RpMoPonmQt44/IBuksg73pJ0oujXX7ws3SRusRGh4V+Jj9TTtfpdKYXBYblucwdc9VopJ6xfmv//ov/PnPf1Z7LbqxePFi1NXVYe3atVovhShl9JQRskdkhLh9PqJHyIBHbABST0xexFESZs8IuULfC493aP/4lsti3DGWmKR6hPx+P55++mm89957mDFjBnJzex/s9vDDD6uyOCJKnejAR8M4SBkiGP1nM4psljZqaUwQBJxQ4cLaPa0AgAnDjXlcU7xcoTlC7UPMCB1u6wYAVJg8w5aopAKhzZs3Y/r06QCAHTt29PqcoOWrKRHFLXrXmJbP3cidYjaTzxHqtX3eoGeNAUBtRb4SCE2tKtR2MRrLCwVCHd6hbZ8/7PYCYIYtUUkFQh988IHa6yAiE4vMAkWfPWY2kZOlfXKPkMEyQgBw42ljcKTDi7HD8lBi8sNB5TJhe/fQAqFGt5QRMnvPVaLMedwvEelKZEbIzu3zAHrvIDJiRmhkUQ7+eM0MrZehCy6H1Czt9Qfh8weTLg/LpbHoZnQamLlfcYhIF5gRCpN7hI51RgRCBswIUZhcGgOGVh6TM0IsjSWGzy4i0lzkGz17hEKBUJc0bNAicCed0VktAnJCmcCOIZTHwoGQuUuNiTL3Kw4R6UKv0pjN3G/62VEZIWeWlZtQTEDpE/Imt3OsvbsHHp+0y5A9QolhIEREmrNz15gi2y5dv9wjxLKYOSg7x5LMCMnZIJfThhw7238TwWcYEWkucpq06Q9dtfXOCHFCsDnIQxWT7RE63CZtnWejdOLM/YpDRLoQmRHKMnuztD08UBEAHFl8mTYDV+i8sWS30B9mo3TS+Azrx7Jly1BbW4tZs2ZpvRQiU4jsCzL96fNRW+WdzAiZQrhHaGilMQZCiTP3K04MPGuMKL2YEQqLDoSYETIHtXqEhhdwx1ii+AwjIs1lWdkjJIs+aZ7N0uaQp/QIJbdrjBmh5PEZRkSa6zVQ0eQzc/pkhFgaM4X8IWaEjrRLzdLDTH5cSTIYCBGR5uzcNaZw2ntfv5OlMVPIcw7tvLGjHdIAzlIXA6FE8RlGRLpi+kCIGSFTygudN5Zss/TRDmaEkmXuVxwi0oXIN/viXLuGK9Fe39IYX6bNYCjN0p0+PzpDU6WZEUocx08SkeYunz4COxrbcc2c6qRP3jaKLKsFNosAf1AE0PtATjKuoQxUPNoulcWcWRbk2plBTBSfYUSkubJ8Jx65cqrWy9CN7CyrUiJxMRAyBfnnnEwgdCRUFivNc/BcuiSY+59eREQ65Igoj8m9I2Rs4WbpxLfPyzvGStkflBQGQkREOpMdsXOMpTFzUCZLJ9EjpDRKsz8oKQyEiIh0JrJhOp+BkCm4Qpk/rz8Inz+Y0Nce7WBGaCgYCBER6Yx8ACcQzhSQseU6wsFvon1C4a3z5t5xmSwGQkTEoX06U54f/pd9ZFBExmWzWpTnoSfRQKidwxSHgq9+/eDp82Q2OXZmHfSkzBU+Lyo/mz8bs5Czf/JMoHixNDY0DIT6wdPnyWyih/iRtiJLI2NK8zRcCaWT/A+SpEtjzAglhYEQESGbQ9h0Zc7oYgDSbBmzD5g0k5zQ87DTl1ggxO3zQ8OcKxFxGq3OXDptBCyCgNmhgIjMQS6NJdIj1N0TgCdUSiths3RSGAgRmZjLaUN7tx9nTijXeikUwWa14PIZI7VeBqVZjhIIxd8j1OKRGqWzrIJyTAclht81IhN78wfz8Mmuo7h0Gt90ibSWF9pC70mgNCYHQkU5dh6vkSQGQkQmNrIoB1fOqtZ6GUSEcLN0Ihmh1k4pECrOZVksWezCIyIi0oFkeoQiM0KUHAZCREREOiDvGkukNNbqYUZoqBgIERER6UBuMhmhTum0+qJcTiBPFgMhIiIiHchVMkIJ9AjJGSGWxpLGQIiIiEgHkssIhXqEWBpLGgMhIiIiHZADoc5Edo2xR2jIGAgRERHpgNwsnchZY9w1NnQMhIiIiHQgfPp8ArvGOEdoyBgIERER6UD49Pn4SmOiKKLVI+0aYyCUPAZCREREOpBoRsjjC8AXCAJgaWwoGAj1Y9myZaitrcWsWbO0XgoREZlETuissU5fAMGgOOjtWzqkslh2lhXZof4iShwDoX4sXrwYdXV1WLt2rdZLISIik8iLOD2+s2fw8lgL+4NUwUCIiIhIBxw2CyyhA+Q749g5Jm+d51TpoWEgREREpAOCICizhOLZQs+t8+pgIERERKQTuXa5YXrw0pi7W9oxVpDNjNBQMBAiIiLSCblhOp6MkLtLuk0+A6EhYSBERESkE4lsoW/rkjJC+U4GQkPBQIiIiEgnwsdsxF8ay8+2DXJLGggDISIiIp1QMkJxlcaYEVIDAyEiIiKdCB+zEUcgpGSEGAgNBQMhIiIinch1JLBrLNQszV1jQ8NAiIiISCdyQz1CnkQyQk72CA0FAyEiIiKdkDNCnjh2jSk9QswIDQkDISIiIp3IdcgZoYFLY8GgiPZQ1ojN0kPDQIiIiEgn5GbpwUpj7V4/xNAB9S6WxoaEgRAREZFO5MVZGpPLYg6bBc4sa8rXZWQMhIiIiHQixx5faYxb59XDQIiIiEgnlIzQIKUx5ZwxlsWGjIEQERGRTuTEGwjx5HnVMBAiIiLSibzQrrHOnkFKY9w6rxoGQkRERDoh7xrrHLRHiFvn1cJAiIiISCdyQ4GQLxCEzx+MebtwRog9QkPFQKgfy5YtQ21tLWbNmqX1UoiIyESy7eGt8F0DnDfWxpPnVcNAqB+LFy9GXV0d1q5dq/VSiIjIROw2C+xW6a15oFlC3D6vHgZCREREOpIjN0wPFAh1sUdILQyEiIiIdCRXOWYjdmmM2+fVw0CIiIhIR5Tp0gNmhNgsrRYGQkRERDoiD1UcaAt9O7fPq4aBEBERkY7kJpQRYiA0VAyEiIiIdEQZqhhj+3wgKKLdy7PG1MJAiIiISEdyHfIJ9P1nhNpDjdIA4GJpbMgYCBEREenIYBkheet8dpYVdhvfxoeK30EiIiIdGaxHKDxMkWUxNTAQIiIi0pHBdo3JjdKcIaQOBkJEREQ6EndGiP1BqmAgREREpCODZ4RCO8aYEVIFAyEiIiIdiT8jxB4hNTAQIiIi0pFcx8C7xto4TFFVDISIiIh0JHzoaoyMUBd7hNTEQIiIiEhHchyDlcbkHiGWxtTAQIiIiEhH5IwQt8+nBwMhIiIiHcnh9vm0YiBERESkI3KzdHdPEIGg2Ofz3D6vLgZCREREOiJnhACgs5+sEDNC6mIgREREpCMOmwVWiwCg/y30yq4xNkurgoEQERGRjgiCEO4TitpC3xMIwhMKjpgRUgcDISIiIp1Rdo5FZYTau8OBkYuTpVXBQIiIiEhnlFlCURkhuSyWa7fCZuVbuBr4XSQiItKZWBkhuVGaM4TUw0CIiIhIZ2LNEuLWefUxECIiItIZ5eBVb/8ZITZKq4eBEBERkc7Ezghx67zaGAgRERHpTKweoTaePK86BkL9WLZsGWprazFr1iytl0JERCYUc9eYXBpjj5BqGAj1Y/Hixairq8PatWu1XgoREZlQzF1jcrM0ZwiphoEQERGRzjAjlD4MhIiIiHQmzxErI8RASG0MhIiIiHQmJ1Qa67NrrFsujTEQUgsDISIiIp3JDW2f7zNHiNvnVcdAiIiISGdyHLEyQtw+rzYGQkRERDqjZIRizBHiWWPqYSBERESkM0qPUMSuMa8/gO6eIABmhNTEQIiIiEhnch19M0Lt3eGgKI9zhFTDQIiIiEhnIneNiaIIINwo7XLaYLUImq3NaBgIERER6YycERJFKOUwbp1PDQZCREREOuO0WSGEkj7yzjEOU0wNBkJEREQ6Y7EIyMnqfcxGeOs8+4PUxECIiIhIh1yhEpjcJK0cuMqMkKoYCBEREemQPD1aLokd6/JJH2ePkKoYCBEREemQHPDIJbG2Tun/RTkMhNTEQIiIiEiH5BKYXBI7FgqEChkIqYqBEBERkQ65Qk3RckZILo0V5Ng1W5MRMRAiIiLSoXBprHdGiKUxdTEQIiIi0qHoZmn5wNXCbGaE1MRAiIiISIeim6XZI5QaDISIiIh0KLpZurUz1CPEOUKqYiBERESkQ5EZoe6eALx+6cwxZoTUxUCIiIhIh5RdY109SlnMZhGQ5+ARG2piIERERKRDcmmsvduvbJ0vzMmCIJ/GSqpgIERERKRD+f1khNgfpD4GQkRERDqkZIS8frR42CidKgyEiIiIdCjycNVdTR0AgNI8h1bLMSwGQkRERDpkt1mUDNDWBjcAYJiLgZDaGAgRERHplBz41IUCoTKXU8vlGBIDISIiIp0qzZOO09jb3AmAGaFUYCBERESkU9E9QQyE1MdAiIiISKcqCnqXwkaV5Gi0EuNiIERERKRTo0vzlD8LAlBdzEBIbQyEiIiIdOq4YbnKnysLsuHMsmq4GmNiIERERKRTEyrylT9PrMwf4JaULAZCREREOlWQnYVfXXIiqotzcPvXjtd6OYYkiKIoar0IvXK73SgoKEBbWxvy8xmJExERZYJE3r+ZESIiIiLTYiBEREREpsVAiIiIiEyLgRARERGZFgMhIiIiMi0GQkRERGRaDISIiIjItBgIERERkWkxECIiIiLTMnwgtH//fpxxxhmora3F5MmT8fLLL2u9JCIiItIJm9YLSDWbzYalS5di6tSpOHz4MGbMmIHzzjsPubm5g38xERERGZrhA6GKigpUVFQAAIYPH47S0lK0tLQwECIiIiLtS2OrVq3ChRdeiMrKSgiCgNdee63PbZYtW4aamho4nU7MmTMHa9asSeqx1q1bh0AggKqqqiGumoiIiIxA84yQx+PBlClT8O1vfxuXXXZZn8+/+OKLWLJkCR5//HHMmTMHS5cuxTnnnIPt27ejrKwMADB16lT4/f4+X/vOO++gsrISANDS0oLrrrsOTz75ZMy1eL1eeL1e5e9ut3uol0dEREQ6JoiiKGq9CJkgCPj73/+OSy65RPnYnDlzMGvWLDz22GMAgGAwiKqqKnz/+9/HXXfdFdf9er1enH322bjxxhtx7bXXxrzdL37xC9x33319Pr5//37k5+cndjFERESkCbfbjaqqKhw7dgwFBQUD3lbzjNBAfD4f1q1bh7vvvlv5mMViwYIFC7B69eq47kMURXzrW9/CmWeeOWAQBAB33303lixZovz94MGDqK2tZSmNiIgoA7W3t2d2IHT06FEEAgGUl5f3+nh5eTm2bdsW13188sknePHFFzF58mSl/+i5557DpEmT+tzW4XDA4XAof8/Ly8P+/fvhcrkgCMKAjyNHn0bPHvE6jYXXaRxmuEaA12k0qbpOURTR3t6utMcMRNeBkBpOPfVUBIPBpL7WYrFg5MiRCX1Nfn6+oX9pZbxOY+F1GocZrhHgdRpNKq5zsEyQTPNdYwMpLS2F1WpFY2Njr483NjZi+PDhGq2KiIiIjELXgZDdbseMGTOwYsUK5WPBYBArVqzA3LlzNVwZERERGYHmpbGOjg7s2rVL+Xt9fT02bNiA4uJiVFdXY8mSJVi0aBFmzpyJ2bNnY+nSpfB4PLj++us1XHVfDocD9957b68eIyPidRoLr9M4zHCNAK/TaPRwnZpvn1+5ciXmz5/f5+OLFi3C8uXLAQCPPfYYHnzwQRw+fBhTp07F73//e8yZMyfNKyUiIiKj0TwQIiIiItKKrnuEiIiIiFKJgRARERGZFgMhIiIiMi0GQgNI9NT7l19+GRMmTIDT6cSkSZPwxhtv9Pq8KIr4+c9/joqKCmRnZ2PBggXYuXNnKi8hLmpf57e+9S0IgtDrv3PPPTeVlxCXRK5zy5YtuPzyy1FTUwNBELB06dIh32c6qH2Nv/jFL/r8LCdMmJDCK4hPItf55JNPYt68eSgqKkJRUREWLFjQ5/ZGeG7Gc51GeG6++uqrmDlzJgoLC5Gbm4upU6fiueee63UbI/w847lOPf48k31NfOGFFyAIQq+zRoE0/SxF6tcLL7wg2u128emnnxa3bNki3njjjWJhYaHY2NjY7+0/+eQT0Wq1ir/73e/Euro68Wc/+5mYlZUlbtq0SbnNb3/7W7GgoEB87bXXxI0bN4oXXXSROHr0aLGrqytdl9VHKq5z0aJF4rnnnis2NDQo/7W0tKTrkvqV6HWuWbNGvOOOO8S//vWv4vDhw8VHHnlkyPeZaqm4xnvvvVecOHFir5/lkSNHUnwlA0v0Or/5zW+Ky5YtE9evXy9u3bpV/Na3viUWFBSIBw4cUG5jhOdmPNdphOfmBx98IL766qtiXV2duGvXLnHp0qWi1WoV33rrLeU2Rvh5xnOdevt5JvuaWF9fL44YMUKcN2+eePHFF/f6XDp+lgyEYpg9e7a4ePFi5e+BQECsrKwUH3jggX5v/41vfEM8//zze31szpw54ne/+11RFEUxGAyKw4cPFx988EHl88eOHRMdDof417/+NQVXEB+1r1MUpSdn9C+z1hK9zkijRo3qN0gYyn2mQiqu8d577xWnTJmi4iqHbqjfd7/fL7pcLvGZZ54RRdE4z81o0dcpisZ7bsqmTZsm/uxnPxNF0bg/T1HsfZ2iqL+fZzLX6Pf7xZNPPll86qmn+lxPun6WLI31Qz71fsGCBcrHBjv1fvXq1b1uDwDnnHOOcvv6+nocPny4120KCgowZ86cmPeZaqm4TtnKlStRVlaG448/Ht/73vfQ3Nys/gXEKZnr1OI+hyKV69m5cycqKysxZswYXHPNNdi3b99Ql5s0Na6zs7MTPT09KC4uBmCc52a06OuUGem5KYoiVqxYge3bt+O0004DYMyfZ3/XKdPLzzPZa/zlL3+JsrIy3HDDDX0+l66fpeaTpfUomVPvDx8+3O/tDx8+rHxe/lis26RbKq4TAM4991xcdtllGD16NHbv3o2f/OQnWLhwIVavXg2r1ar+hQwimevU4j6HIlXrmTNnDpYvX47jjz8eDQ0NuO+++zBv3jxs3rwZLpdrqMtOmBrXeeedd6KyslJ5cTXKczNa9HUCxnlutrW1YcSIEfB6vbBarfjjH/+Is88+G4Cxfp4DXSegr59nMtf48ccf489//jM2bNjQ7+fT9bNkIESqu+qqq5Q/T5o0CZMnT8Zxxx2HlStX4qyzztJwZZSohQsXKn+ePHky5syZg1GjRuGll17q919wevfb3/4WL7zwAlauXAmn06n1clIm1nUa5bnpcrmwYcMGdHR0YMWKFViyZAnGjBmDM844Q+ulqWqw68zkn2d7ezuuvfZaPPnkkygtLdV0LSyN9SOZU++HDx8+4O3l/ydyn6mWiuvsz5gxY1BaWtrrTLl0SuY6tbjPoUjXegoLCzF+/PiM/Fk+9NBD+O1vf4t33nkHkydPVj5ulOemLNZ19idTn5sWiwVjx47F1KlTcfvtt+OKK67AAw88AMBYP8+BrrM/Wv48E73G3bt3Y8+ePbjwwgths9lgs9nw7LPP4p///CdsNht2796dtp8lA6F+JHPq/dy5c3vdHgDeffdd5fajR4/G8OHDe93G7Xbjs88+i3mfqZaK6+zPgQMH0NzcjIqKCnUWnqBkrlOL+xyKdK2no6MDu3fvzrif5e9+9zv86le/wltvvYWZM2f2+pxRnpvAwNfZH6M8N4PBILxeLwBj/TyjRV5nf7T8eSZ6jRMmTMCmTZuwYcMG5b+LLroI8+fPx4YNG1BVVZW+n6VqbdcG88ILL4gOh0Ncvny5WFdXJ950001iYWGhePjwYVEURfHaa68V77rrLuX2n3zyiWiz2cSHHnpI3Lp1q3jvvff2u32+sLBQ/Mc//iF++eWX4sUXX6yLLZ1qXmd7e7t4xx13iKtXrxbr6+vF9957T5w+fbo4btw4sbu7W5NrFMXEr9Pr9Yrr168X169fL1ZUVIh33HGHuH79enHnzp1x32e6peIab7/9dnHlypVifX29+Mknn4gLFiwQS0tLxaamprRfnyzR6/ztb38r2u128W9/+1uvbcbt7e29bpPpz83BrtMoz837779ffOedd8Tdu3eLdXV14kMPPSTabDbxySefVG5jhJ/nYNepx59notcYrb9dcOn4WTIQGsAf/vAHsbq6WrTb7eLs2bPFTz/9VPnc6aefLi5atKjX7V966SVx/Pjxot1uFydOnCi+/vrrvT4fDAbFe+65RywvLxcdDod41llnidu3b0/HpQxIzevs7OwUv/a1r4nDhg0Ts7KyxFGjRok33nijZsFBpESus76+XgTQ57/TTz897vvUgtrXeOWVV4oVFRWi3W4XR4wYIV555ZXirl270nhF/UvkOkeNGtXvdd57773KbYzw3BzsOo3y3PzpT38qjh07VnQ6nWJRUZE4d+5c8YUXXuh1f0b4eQ52nXr9eSb6fhKpv0AoHT9Lnj5PREREpsUeISIiIjItBkJERERkWgyEiIiIyLQYCBEREZFpMRAiIiIi02IgRERERKbFQIiIiIhMi4EQERERmRYDISIyhF/84heYOnXqkO+nubkZZWVl2LNnT8zbrFy5EoIg4NixY0N+PJnP50NNTQ0+//xz1e6TiAbHQIiIKMJvfvMbXHzxxaipqUnr49rtdtxxxx2488470/q4RGbHQIiIKKSzsxN//vOfccMNN2jy+Ndccw0+/vhjbNmyRZPHJzIjBkJElFJvvfUWTj31VBQWFqKkpAQXXHABdu/erXx+z549EAQBr776KubPn4+cnBxMmTIFq1ev7nU/Tz75JKqqqpCTk4NLL70UDz/8MAoLCwd87KeeegonnHACnE4nJkyYgD/+8Y8D3v6NN96Aw+HASSed1Ofj48ePR3Z2NubPn99v2ezjjz/GvHnzkJ2djaqqKtx6663weDzK5xsaGnD++ecjOzsbo0ePxvPPP4+amhosXbpUuU1RURFOOeUUvPDCCwOuk4jUw0CIiFLK4/FgyZIl+Pzzz7FixQpYLBZceumlCAaDvW7305/+FHfccQc2bNiA8ePH4+qrr4bf7wcAfPLJJ7j55pvxgx/8ABs2bMDZZ5+N3/zmNwM+7v/7f/8PP//5z/Gb3/wGW7duxf3334977rkHzzzzTMyv+eijjzBjxoxeH9u/fz8uu+wyXHjhhdiwYQO+853v4K677up1m927d+Pcc8/F5Zdfji+//BIvvvgiPv74Y9xyyy3Kba677jocOnQIK1euxCuvvIInnngCTU1NfdYwe/ZsfPTRRwNeGxGpSNWz7ImIBnHkyBERgLhp0yZRFEWxvr5eBCA+9dRTym22bNkiAhC3bt0qiqIoXnnlleL555/f636uueYasaCgQPn7vffeK06ZMkX5+3HHHSc+//zzvb7mV7/6lTh37tyYa7v44ovFb3/7270+dvfdd4u1tbW9PnbnnXeKAMTW1lZRFEXxhhtuEG+66aZet/noo49Ei8UidnV1iVu3bhUBiGvXrlU+v3PnThGA+Mgjj/T6ukcffVSsqamJuUYiUhczQkSUUjt37sTVV1+NMWPGID8/X2lC3rdvX6/bTZ48WflzRUUFACgZk+3bt2P27Nm9bh/990gejwe7d+/GDTfcgLy8POW/X//6173KctG6urrgdDp7fWzr1q2YM2dOr4/NnTu31983btyI5cuX93qsc845B8FgEPX19di+fTtsNhumT5+ufM3YsWNRVFTUZw3Z2dno7OyMuUYiUpdN6wUQkbFdeOGFGDVqFJ588klUVlYiGAzixBNPhM/n63W7rKws5c+CIABAn/JZvDo6OgBIfUXRQYzVao35daWlpWhtbU3q8b773e/i1ltv7fO56upq7NixI+77amlpwbBhwxJeAxElh4EQEaVMc3Mztm/fjieffBLz5s0DIDUVJ+r444/H2rVre30s+u+RysvLUVlZia+++grXXHNN3I8zbdo0/N///V+vj51wwgn45z//2etjn376aa+/T58+HXV1dRg7dmzM9fv9fqxfv17pQdq1a1e/QdfmzZsxbdq0uNdMREPD0hgRpUxRURFKSkrwxBNPYNeuXXj//fexZMmShO/n+9//Pt544w08/PDD2LlzJ/70pz/hzTffVDJH/bnvvvvwwAMP4Pe//z127NiBTZs24S9/+QsefvjhmF9zzjnnYMuWLb0ClJtvvhk7d+7Ej370I2zfvh3PP/88li9f3uvr7rzzTvznP//BLbfcgg0bNmDnzp34xz/+oTRLT5gwAQsWLMBNN92ENWvWYP369bjpppuQnZ3d5xo++ugjfO1rX0v4e0REyWEgREQpY7FY8MILL2DdunU48cQTcdttt+HBBx9M+H5OOeUUPP7443j44YcxZcoUvPXWW7jtttv69PNE+s53voOnnnoKf/nLXzBp0iScfvrpWL58OUaPHh3zayZNmoTp06fjpZdeUj5WXV2NV155Ba+99hqmTJmCxx9/HPfff3+vr5s8eTI+/PBD7NixA/PmzcO0adPw85//HJWVlcptnn32WZSXl+O0007DpZdeihtvvBEul6vXNaxevRptbW244oorEv4eEVFyBFEURa0XQUSUqBtvvBHbtm1Tfav566+/jh/96EfYvHkzLJbU/VvxwIEDqKqqwnvvvYezzjoLAHDllVdiypQp+MlPfpKyxyWi3tgjREQZ4aGHHsLZZ5+N3NxcvPnmm3jmmWcGHZCYjPPPPx87d+7EwYMHUVVVpdr9vv/+++jo6MCkSZPQ0NCAH//4x6ipqcFpp50GQDprbNKkSbjttttUe0wiGhwzQkSUEb7xjW9g5cqVaG9vx5gxY/D9738fN998s9bLitvbb7+N22+/HV999RVcLhdOPvlkLF26FKNGjdJ6aUSmxkCIiIiITIvN0kRERGRaDISIiIjItBgIERERkWkxECIiIiLTYiBEREREpsVAiIiIiEyLgRARERGZFgMhIiIiMq3/H2Fe4DXZtALJAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import nexus as nx\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from scipy.signal import argrelextrema\n", "\n", "# ------------------------- layers --------------------------\n", "\n", "# the initial guess for the top layer is 3 nm here\n", "# set it to a Var object with reasonable bounds\n", "lay_Pt_top = nx.Layer(id = \"Pt top\",\n", " material = nx.Material.Template(nx.lib.material.Pt),\n", " thickness = nx.Var(3, min = 0, max = 10, fit = True, id = \"Pt top thickness\"))\n", "\n", "lay_B4C = nx.Layer(id = \"B4C\",\n", " material = nx.Material.Template(nx.lib.material.B4C),\n", " thickness = 15)\n", "\n", "lay_Fe = nx.Layer(id = \"Fe\",\n", " material = nx.Material.Template(nx.lib.material.Fe_enriched),\n", " thickness = 2)\n", "\n", "lay_Pt_bottom = nx.Layer(id = \"Pt bottom\",\n", " material = nx.Material.Template(nx.lib.material.Pt),\n", " thickness = 15)\n", "\n", "lay_substrate = nx.Layer(id = \"substrate\",\n", " material = nx.Material.Template(nx.lib.material.Si),\n", " thickness = nx.inf)\n", "\n", "sample = nx.Sample(id = \"cavity\",\n", " layers = [lay_Pt_top,\n", " lay_B4C,\n", " lay_Fe,\n", " lay_B4C,\n", " lay_Pt_bottom,\n", " lay_substrate],\n", " geometry = \"r\")\n", "\n", "beam = nx.Beam()\n", "beam.LinearSigma()\n", "\n", "exp = nx.Experiment(beam = beam,\n", " objects = sample,\n", " id = \"my exp\")\n", "\n", "# initialize a reflectivity object used for the optimization\n", "angles = np.linspace(0.01, 0.4, 1001)\n", "\n", "reflectivity = nx.Reflectivity(experiment = exp,\n", " sample = sample,\n", " energy = nx.lib.energy.Fe57,\n", " angles = angles)\n", "\n", "# setup the optimizer\n", "class NexusOptimizer(nx.Optimizer):\n", " def __init__(self, measurements, id):\n", " super().__init__(measurements, id)\n", "\n", " # the defienition of the residual calculation\n", " def Residual(self):\n", " # calculate the reflectivity\n", " intensity = reflectivity()\n", " # get the index of the 1st minimum\n", " min_index_1st = np.squeeze(argrelextrema(intensity, np.less))[0]\n", " # get the index of the 3rd minimum\n", " min_index_3rd = np.squeeze(argrelextrema(intensity, np.less))[2]\n", " # optimize for the intensity at both positions\n", " residual = intensity[min_index_1st]**2 + intensity[min_index_3rd]**2\n", " return residual\n", "\n", "# pass the reflectivity object to the optimizer\n", "opt = NexusOptimizer(measurements = [reflectivity],\n", " id = \"opt id\")\n", "\n", "# let's just use a local gradient-free algorithm here\n", "opt.options.method = \"LevMar\"\n", "\n", "# run the optimization\n", "opt.Evaluate() # or simply call opt()\n", "\n", "plt.semilogy(angles, reflectivity.result)\n", "plt.xlabel('angle (deg)')\n", "plt.ylabel('reflectivity')\n", "plt.show()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.12.0" } }, "nbformat": 4, "nbformat_minor": 5 }