{
 "cells": [
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Kuramoto model\n",
    "\n",
    "In this example, we give an introduction to the Kuramoto model, and implement it from scratch.\n",
    "Then, we use the `jaxkuramoto` package to solve the model, which is essentially the same as the from-scratch implementation.\n",
    "\n",
    "If you are rushing into the conclusion, here is the copy-and-pastable code using `jaxkuramoto`:\n",
    "    \n",
    "```python\n",
    "import jax; jax.config.update(\"jax_enable_x64\", True)\n",
    "from jax import random\n",
    "import jax.numpy as jnp\n",
    "from jaxkuramoto import odeint, Kuramoto\n",
    "from jaxkuramoto.distribution import Normal\n",
    "from jaxkuramoto.solver import runge_kutta\n",
    "\n",
    "n_oscillator = 100\n",
    "K = 3.0\n",
    "omegas = Normal(0.0, 1.0).sample(random.PRNGKey(0), (n_oscillator,))\n",
    "\n",
    "model = Kuramoto(omegas, K)\n",
    "init_thetas = random.uniform(random.PRNGKey(1), (n_oscillator,)) * 2 * jnp.pi\n",
    "sol = odeint(\n",
    "    model.vector_fn,\n",
    "    runge_kutta, 0, 100, 0.01, init_thetas,\n",
    "    observable_fn=model.orderparameter\n",
    ")\n",
    "```\n"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Governing equations\n",
    "\n",
    "Kuramoto model is a model of coupled oscillators {cite}`kuramoto1975`. It is a simple model of synchronization phenomena. The model is described by the following equations:\n",
    "\n",
    "$$\n",
    "\\frac{\\mathrm{d}\\theta_{i}}{\\mathrm{d}t} = \\omega_{i} + \\frac{K}{N}\\sum_{j=1}^{N}\\sin(\\theta_{j}-\\theta_{i})\n",
    "$$\n",
    "\n",
    "Here,\n",
    "- $\\theta_{i}$ is the phase of the $i$-th oscillator\n",
    "- $\\omega_{i}$ is the natural frequency of the $i$-th oscillator\n",
    "- $K$ is the coupling strength\n",
    "- $N$ is the number of oscillators.\n",
    "\n",
    "If the coupling strength $K$ is zero, the system is decoupled and the oscillators evolve independently. If $K$ is large enough, the oscillators are expected to synchronize.\n",
    "Then, we have a natural question:\n",
    "\n",
    "> _how does the synchronization depend on the coupling strength $K$?_\n",
    "\n",
    "In the following, we will answer this question by numerical simulations."
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Order parameter\n",
    "\n",
    "To observe the synchronization phenomena, we will use the following **order parameters** :\n",
    "\n",
    "$$\n",
    "z = re^{i\\phi} = \\frac{1}{N}\\sum_{j=1}^{N}\\exp(i\\theta_{j})\n",
    "$$\n",
    "\n",
    "The order parameter $z$ is a complex number, and it is calculated as the centroid of the oscillators moving on a circle.\n",
    "$r$ is the absolute value of $z$, and it is the average distance of the oscillators from the center of the circle.\n",
    "If $r$ is nearly zero, the oscillators are distributed uniformly on the circle, and they are not synchronized.\n",
    "If $r$ is close to one, the oscillators are concentrated on the circle, and they are synchronized.\n",
    "\n",
    "Let's visualize the order parameter $z$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAmIAAAE/CAYAAADlrq9SAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAABteElEQVR4nO3deXzV1Z34/9fJvpOEhBACSVhCIEDYAogQNkVQUdyqIrXW2lrbOnaZ6XztdH7tTGc6X6edmX5ra2ud1qpV1CpVUEAIe5AtIawJhIRAyL5D9uQu5/fHvYkRA2S5yecu7+fjcR+593629yc3Off9Oed8zlFaa4QQQgghxPDzMjoAIYQQQghPJYmYEEIIIYRBJBETQgghhDCIJGJCCCGEEAaRREwIIYQQwiCSiAkhhBBCGEQSMTFoSqlEpZRWSvkM0/FylVLLHLzP15RS/+7IfQohhpeURcIVSSI2TJRSl5RSVUqp4B7vfV0ptdfAsFyS1nqa1nqv0XEMlFLqMaVUsVKqRSn1oVIq8gbrJiql9iilWpVS55RSt/dY9k9KqeYejzallFUpFWVf/l9KqQKlVJN9268Mx/kJ0UUptVgpdVApdVUpVa+U+lQpNc/ouBzFw8qiW5VSR+3lySml1OIey5RS6sdKqctKqUal1DtKqbAey19TSnVeU155D/X5uQpJxIaXD/Bdo4Mw2nBdrQ6X/pyPUmoa8AfgcSAGaAV+d4NN3gaOAyOBHwPvK6WiAbTW/6G1Dul6AP8J7NVa19q3bQHuAUYATwC/Vkrd2q+TE2KA7F/EHwO/ASKBOOBfgQ4j4+pJyqK+lUX2BG0z8EsgHPgF8JFSKsK+ylfs+1kEjAECsX3uPf2iZ3mltbb0NVZ3J4nY8Pol8A9KqfDeFtqvOLLsV49ZPb80lVJ7lVL/Zr+ibFJK7eiq+bjOvr6qlCqyr3tRKbVeKeVvvyqd0WO9UfaalGil1DKlVKlS6u+VUtVKqQql1JM91g1USv23/QrqqlLqgFIqsMdh19uviGqVUj/usd2/KKXeV0q9qZRqBL6qlBqjlNpsj6dQKfWNa9b/q1LqDXv8uUqptB7LL3XVDCmlrvS4wmpRtmaJRPuyNUqpE/Z1DiqlUnvsY7ZSKse+/3eBgBt/dF/43X6qlPqVUqoe+Je+bgusBz7SWu/XWjcD/x/wgFIqtJfjTAbmAD/VWrdprTcCp4EHe1lXYSsIX+96T2v9U631Oa21VWt9BMgEFvYjViEGYzKA1vptrbXF/je8Q2t9Ssoi1yqLgFuBKq31e/bP8k2gBnjAvvwe4E9a6xL7vv4TeEQpFdSPeDyWJGLDKxvYC/zDtQuU7YpjC/AittqP/wG2KKVG9ljtMeBJYBTg19t+7PsKtu/nTq11KLZ/ohNa6w7gHeDLPVZfB+zUWtfYX4/GVoMSBzwFvKQ+u+r5L2CufX+RwD8C1h77WgwkA7cBP1FKTe2xbC3wPrarqbew1fSUYrt6egj4D6XUbT3Wv9ceazi2K7Hf9nauWuvwHjVCv8aWbJQppeYArwLfxPb7/AOw2f4F4Ad8CPzFfh7vcU1yYy8wF3N9C4AibJ/Fz5WtCebKDR5d+5oGnOwR/wWgE/uX1jWmAUVa66Ye7520v3+tdGxXtRt7C9b+JTUPyL3BOQnhSOcBi1LqdaXUnT3KEaQscrmySNkf1743/TrLFeAPJPV479v2ZPeYUuoLF5MeTWstj2F4AJeA27H94V4FooGvY2tKAlttxtFrtjkEfNX+fC/wzz2WfRv45DrHCgauYPuHDrxm2QKgBPCyv84GHrY/Xwa0AT491q8GbsGWtLcBM3s5XiKggbE93jsKPGp//i/A/h7LxgEWILTHe/8XeK3H+jt7LEsB2q79XV4TwyP296Ptr38P/Ns16+QDS4ElQDmgeiw7CPx7Hz/LrwKXB/h3sAt45pr3yoBlvaz7OHD4mvd+3vV7uub9P/X2fo/lrwOf9DxnechjqB/AVOA1bImOGVsiE2NfJmWR65RFI7F9p6wDfLF1dbACf7Av/zq2xDsRW/K82f45LLQvn2Pfhw9wF9AELDL679NZHlIjNsy01mew9Zt4/ppFY4Dia94rxnY12KWyx/NWIARAKfVyjyrxf9Jat2ArDJ4BKpRSW5RSU+zHP4Kt79BS+3uTsP3TdKnTWpt7OU4UtirzCzc4vV7jsyu55lzr9edrem52rgHqOv0flFKzsV2l3q8/u5pOAP6+55UgtkJ3jP1Rpu0lRI/j90fJzVfpVTMQds17YdgKpgGta6/t+hI9miWvWf5LbBcAD19zzkIMKa31Wa31V7XWY7H9DY4B/p99mZRFLlIWaa3rsNUk/gCoAlYDO7El2GCr8XsbW4VBLrDH/n6pffscrXWd1tqstd6KrSbyAQQgTZNG+SnwDT7/z16O7R+2p3hsVyg3pLV+Rn/WAfI/7O9t11qvBGKBc8D/9tjkdWxNAo8D72ut2/sQcy3QDkzsw7q9htnjeTkQeU1fhD6d67WUreP6B8CzWuvjPRaVAD/XtuaCrkeQ1vptoAKIU0r1rEqP7+ehP5fQKKXS1efvCLr2kW5fNReY2WO7Cdiq8M/3coxcYMI1v6eZfLF58QGgHlsh+DlKqX8F7gTu0Fo39u8UhXAcrfU5bLVj03u8LWWRa5RFaK33aa3naa0jsX1eydhqG9G2fqg/1Von2pPuXGy/w+v9HjVfbOr0WJKIGUBrXQi8CzzX4+2twGRlu53YRyn1CLZq8I/7u3+lVIxS6l57X7EObFc+Pe9Q+QtwP7YC8I0+xmzFdtXzP8rWudVbKbVQKeXf3/i01iXYqt//r1IqwN5x9SlsV0l9Zr8q3Qi8pbV+95rF/ws8o5RaoGyClVJ32wvcQ9iaSZ6z/64fAOb39zyuOadM/fk7gq59ZNpXfQu4x15YBgM/A/52zRV51z7PAyeAn9p/T/cDqXyxH9gTwBvX1nYppX6ErV/hSvsVrRDDRik1Rdk624+1vx6HrWnrcI/VpCxygbLIfo6zlVK+ynY37H8BpVrr7fZlkUqpifbzS8HWx/ln9s8KpdRDSqkQpZSXUuoObJ/35t6O44kkETPOz7D15QK6q37XAH8P1GHrfLpGfzYUQX942fdTjq2mZCm2PmVdxyoFcrBdlWT2toPr+Adsd+1l2ff7nwz8b2gdtv4E5diuIn+qtc7o5z7GYuuk/r1rrvjitdbZ2Godfws0AIXY+lOgte7EVov0VfuyR4C/9dzxNVeODqO1zsXWZPwWtj4vofT4bOzNzC/32ORRIM0e5wvAQz2aPFBKxQEr6P1L7D+wXV0X9Gy6dvApCXE9Tdj6gR1RSrVgS8DOYCubACmLXKws+kdstZEl2Fpa7u+xLApbZUILsA14VWv9So/l38VWO3YF2+gB39AuPP6aoynpMuKZlFKvAuVa6382OhYhhOeSskh4OrcazE70jbKNbfMAMNvgUIQQHkzKIiGkadLjKKX+DVvzwC+11heNjkcI4ZmkLBLCRpomhRBCCCEMIjViQgghhBAGkURMCCGEEMIgLtlZPyoqSicmJhodhhBiGB07dqxWax1tdByDJeWXEJ7nRuWXSyZiiYmJZGdnGx2GEGIYKaX6O/WLU5LySwjPc6PyS5omhRBCCCEMIomYEEIIIYRBJBETQgghhDCIJGJCCCGEEAaRREwIIYQQwiCSiAkhhBBCGEQSMSGEEEIIgzgkEVNKvaqUqlZKnbnOcqWUelEpVaiUOqWUmtNj2WqlVL592fOOiEcIIfpKyi8hhJEcVSP2GrD6BsvvBJLsj6eB3wMopbyBl+zLU4B1SqkUB8UkXFRGXhU/2XSGjLyq6y5/8s9HefLPR6+7jhD98BpSfgkhDOKQkfW11vuVUok3WGUt8IbWWgOHlVLhSqlYIBEo1FoXASil3rGvm+eIuITr0Fqz5UQJ72Rd5khxIyaL5t2jl/nZneN5ZPFUtNacPHmSI6Vt/PJgPWarbbsDBbX87stzuX3qKJqbmwkKCsLb25uMvCoyC2pIT4pmZUqMsScnnJqUX8IRTCYTLS0tdHR00NnZSUdHB2azmSlTpgBQXFxMfX09AD4+Pvj4+ODv78+ECRMAaG1txdvbGz8/P5RShp2HGH7DNcVRHFDS43Wp/b3e3l/Q2w6UUk9juxolPj5+aKIUQyYjr4qM0yVMG+lFckgn9fX1XL16lbi4OJYsWUJGXhXfffcEFry7t+mwaLYcu9CdiG3atIlDneMwWz9LrExWbUu4Jozgf/7nfwAoV1Hsao3HjBfvHr3Mb9fPZUVyFKWlpURHRxMUFATAL7fnszOvkttTRvPDVcnD+wsRrkTKL0Frays1NTXU19dTX19PQ0MDLS0tfOUrX0EpxbZt2zh+/PjntvH19eWf/umfAMjOzubMmc+3foeEhPD3f//3AGzatInz58/j7e1NUFAQYWFhjB49mjVr1gBQUVGBv78/4eHheHlJ9253MlyJWG/pvb7B+198U+tXgFcA0tLSel1HOIeWlhbKy8upqqrCy8uLlvCJPPf2cdpMFryxsMyviEmBbYSHhxMTY0uqDhTWfi4JAwjwUTy0eBoASimee+45Zl1o4B8+OIfJYvsT8PVSpCdF4+XlxV133UVbWxt/OtGEudW2jw6LLVGbGaV47bXXAAgKCuKUTiCzPhiA/KpC9p+v5rnbJkvtmeiNlF8exGw2U1lZSVVVFZWVldx2220EBARw5MgR9u/fD4CXlxcjRowgLCwMk8mEn58fM2fOZOzYsQQEBODn54e/vz/+/v7d+129ejW33XYbABaLBbPZjK2S1Wbu3LnEx8fT1tZGS0sLjY2NtLe3dy/fvHkzlZWV+Pj4EBUVRVRUFBMmTGD27NnD9JsRQ2W4ErFSYFyP12OBcsDvOu8LF7Rv3z5OnTrVXf0OMG7cOC6NDKPNZAHAgjejUpfy/IOzPlf9np4UzXvZpbSZLPh5e7Fo0kgeW5DQnRgppYiIiGBtWgRBQcFsOGKbP7XnOvPmzQOgI6qKo/bEL9DXm/SkaEaMGMH69eupqamhpqaG97Ktn4v9dFkj3/5LFt9M9eW+eROJj4/Hz89v6H5ZwpVI+eUBLl++zM6dOykvL8disZVX/v7+zJ07l9GjRzNjxgzi4+OJjIxkxIgRX6iVSkhIICEh4br7Dw4OvuHxJ0+ezOTJk6+7fM2aNVRVVVFbW0tNTQ0lJSUopZg9ezZaa15//XUiIiJISEggMTGR8PDwvp+8MNRwJWKbgWftfSgWAFe11hVKqRogSSk1HigDHgUeG6aYxAA1NzdTVFREUVERpaWlfOtb38Lb2xur1Up0dDRz5swhLi6OmJgYAgMDycir6k6yAn29WZEy5gt9IFamxPDiutl96te1MiXmpst729ekSZOYNGkSAPn++by0p/Bz25m0YlduOS3nD6OUIi4uji996UuEhYUN9Fcl3IOUX27EbDZTUlLChQsXKCoqIj09nalTp+Lr6wvA/PnzGTduHKNHjyY8PLy7rOqqhTJKXFwccXFxn3uvK2E0mUz4+/uTn5/PiRMnAAgPD2f58uWkpqYCSL9ZJ+aQREwp9TawDIhSSpUCPwV8AbTWLwNbgbuAQqAVeNK+zKyUehbYDngDr2qtcx0Rk3C8oqIidu3aRXm57aI/MDCQiRMn0t7eTnBwMMuXL+91u74mWTdLsPrjZvvq6hP24fFSqho7MFs1gb7ePPellUwO7uDSpUuUlZV1X8Xu27eP+vp6kpKSSEpK+lyTg3BtUn55ho6ODjZt2kRhYSEmkwkvLy/GjRuHj4/tazA2Npavfe1rBkfZP97etu4cfn5+rFu3Dq011dXVXLp0iUuXLhEQEADAXz89x48/LsSkFX/NKmFa3AguVDdx66Rofrd+zo0OIYaB6tlG7SrS0tJ0dna20WG4vdraWk6dOkVycjJxcXFcvnyZHTt2kJyczMSJE4mNjXWLu3v6cqW4e/dujh071n1n0+TJk5k5cybJydLJf7gopY5prdOMjmOwpPwaHu3t7eTl5dHZ2cktt9yC1po///nPxMTEkJSUREJCgsdcUH3vLwf5MLehxzufdXFMiAzin9ekSC3ZELtR+SWJmPic1tZWzpw5w8mTJykvL0cpxapVq1iwoNebwTyK1WqltLSU3Nxc8vLyGD9+PA888AAAZWVljBnzxSZX4TiSiImbsVqtXLhwgVOnTnHu3DnMZjNjx47lqaeeMjo0Q2XkVXXfMNWbAB8vvrownlazlqbLISKJmLiunrVBK5Kj+NWvfkVLSwsxMTHMnDmTGTNmEBISYnSYTsdqtdLR0UFgYCDV1dX8/ve/JzIyktmzZzNr1iz5nQ0BScTEzXzyySccOXKEwMBApk+fzsyZM+UCya6rrM8tb+RYccMXlis0GoUCQgJ8sFqtLE2OkaZLB5FETPRq68lSvvfXk3RaINDXmxfXzWacVwMRERHdw0qImzOZTJw9e5acnByKi4vx8vIiJSWFlStXSkd/B5JETPSktaaoqIjs7GwWL15MXFwctbW11NbWkpSU1N1/SnzRt9/KYV9+Fe0mKxYN3gos10kFAny8eCp9goy1OEg3Kr+G665J4USampo4cuQIL+0vo9NiuwuozWQhs6CGn62dbnB0rsfX15fU1FRSU1Opra3l2LFj5OXldQ9/cfXqVUJDQ2UQRiEcwGKxcObMGQ4ePEh1dTVBQUHdg0MbfWejq+iq5eqqJQsN8OXlvYW9JmPtZisv7Snklf0XCA3wYd38BEnKHEwSMQ9TWlrKa6+9htVqZd646RQWKzrMunu8LTE4UVFRrFq1ipUrV+Ll5YXWmg0bNmA2m0lPTyc1NVUSMiEGSGvN//7v/1JVVUV0dDRr165l+vTp3Xc+iv659u7y3+8txHqdmjGTRVPfYuKlPTIAtqNJ06QHuHLlCvX19UyYMAGLxcLu3buZO3cukZGRMrbMENNac/bsWTIzM6msrCQiIoLFixczc+ZMaTrpJ2ma9Exms5m8vDxmzJiBUoqcnBxCQkJISkqSvl8OlpFXxYYjxRwrbqCx3XzT9b0U/OHxNPnu6APpI+ahGhsbyczMJCcnh9DQUJ577jmpjTGI1prz58+zf/9+ysvLue+++5g5c6bRYbkUScQ8i8Vi4cSJE+zfv5/GxkaeeOIJEhMTjQ7LY2TkVfHvH+dSXN9203WjQ/z4jwdSJSG7Aekj5mE6Ozs5cOAAhw4dwmq1MmfOHNLT0yUJM5BSiuTkZCZPnkxRURHjx48HIC8vj6CgIPmCEcKu66Jlx44d1NfXM3bsWO677z75HxlmXc2WGXlVvLjrPBdrW2jpsPQ6mWpNcyffeCObu2bEyl2WAyCJmBvpamZMCjVTlJnJ9OnTWbFiBREREUaHJuyUUkycOBGwfeEcOHCAiooKJk+ezKpVq4iMjDQ4QiGMZbFY2Lp1a/do8dIEaaye/ch+uf2LU8P1tPV0BUt/sZt/XjNNasf6QZom3cQ7mXn85JOL3UNR/NtdE3ho4fUnkBXOwWQyceTIETIzM7FYLCxevJhFixZ1z3snPiNNk+6rvb2dgwcPsmTJEnx8fKirqyM8PFz6UTqhX27P53d7CnutGbs3dw//uP8NxjTWUjUimtp/+ikz/vHbwx6jM7pR+SVtVS6uo6ODbdu28fonR+i0D5rcZrJwqrrT2MBEn/j6+rJ48WKeffZZpk6dyr59+7h8+bLRYQkxLLTWnDlzht/+9rccOHCA4uJiAEaOHClJmJP64apkLr5wN5deuBt/n89qKu/N3cMLn/yWsY01eKGJvVrNxB//gJ88/CMDo3UN0jTpojLyqth89Dy6Io/ozkqWTknj4nkv2k1WGYrCBYWGhvLggw+yePHi7sF0z507R3x8PEFBQQZHJ4TjXblyhS1btlBYWEhsbCzr168nNjbW6LBEP+T/+13c8h87qWzs4B/3v0GQueNzy4PMHTy9/U8k/3M6+f9+l0FROj9JxFxQRl4Vf7chh3azFR81hn+/azGPpk9jrgxF4fK6krDW1lb+9re/4efnx1133cWWEm925lVye8poGUxRuIUPP/yQiooKVq9ezbx58+RmIhd1+J9uB0D/Z22vy8c01tJh1kz80RZWTZfO/L2RRMzF1NTUkFlQQ7vZCoBZe5FXb2utv3ZwPuG6goKCeOqpp9i0aRPPb/iUU+ZYQJFfZesoK8mYcEVNTU34+PgQGBjIPffcg4+PDyNGjDA6LOEAbdFRBNXUfOH98jDbTAcWbevMP+0n28j92Z3DHZ5Tk0sQF2EymdiyZQu/+93vmBxma34EpBnSjcXExPD1r3+d+oA44LO+GDvzKo0LSogBysvL4/e//z07duwAbP3AJAlzDzU1NWxLT6fzmpuMWn38+cWSr3zuvZZOK4nPb+HB3x8czhCdmtSIuYDa2lree+89qqurueWWW7gtPYWYmBhphvQAXl5erJ038XO3jN+eMhqttdzSL1yC2Wxm+/btZGdnM2bMGBYtWmR0SMLBdu/ezbnUVCaMH8/s99+Hy5dpGx3HzxetZ/PE9F63OVbcwKx/3c6Jn64a5midjyRiTu706dN89NFH+Pr6sn79eiZNmgRIM6Qn6WqG7Ooj9sAkH1577TUeeughQkNDDY5OiOtraGjgr3/9K5WVlSxcuJDbbrtN7oZ0MyUlJZw7dw5fX1+S/uVf4L/+C4BA4Of2x7SfbKOl0/qFba+0mXnw9wfZ+K1bhzNkpyNNk04oI6+Kn2w6Q0ZeFZ2dncTGxvLNb36zOwkTnueHq5LZ/v2l/HBVMp2dnVRUVPDKK6903+4vhDPy9vbGZDLx6KOPcscdd0gS5ma01mRkZACwcOFCQkJCel0v92d3Eh7Ye73PseIG1vzmABl5VUMWp7OTRMzJdN0R+cahYp57+zh1AXE88cQThIWFGR2acBJTp07l61//On5+frzxxhscPnwYVxyYWbgnrTWnTp1Ca01YWBjf/va3SU6Wm0vc0fnz5ykpKSEoKIhbb71xrdaJn65ibkLvs7ycKbvKN97I5pfb84ciTKcniZiT+eT4xe47IttMFg4U1spt3eILRo0axTe+8Q2SkpLYvn07BQUFRockBB0dHbz77rt88MEHnDt3DkDKLzdltVrZtWsXAEuWLMHf3/+m22z81q18Z/kkAnx6/5t4aU+hRyZj0kfMSWTkVfHh4XOUXizAhxjMeMkdkeKGAgICeOSRR8jPzycpKQlAOvELw1y5coUNGzZQW1vL6tWrmTJlitEhiSF04sQJampqCA8PJy2t7zOP/XBVMj9clXzdeSu73vOkIXockogppVYDvwa8gT9qrV+4ZvkPgfU9jjkViNZa1yulLgFNgAUwu8Nccv21I7eSZzcco9MCvmo0X1ucSLsFuSNS3JRSqvsLr7a2lg8//JDIGUs5Udkhfz/9IGXY4FRUVLBhwwbMZjNf/vKXmTBhgtEhiSFkMpnYu3cvACtWrBhQ378frkrmcFEdx4obvrDspT2FXKxt8ZjBXwddZ6yU8gZeAu4EUoB1SqmUnutorX+ptZ6ltZ4F/AjYp7Wu77HKcvtyjyvAAA4U1HbPE2nSinYL/GztdPkSFf3S3t5OTpWJf/zgXHcfQ0/uANtXUoYNXmdnJ35+fjz55JOShHmAI0eO0NTURGxsLNOnTx/wfjZ+61bumtH7tFZbT1d4TDOlIxrv5wOFWusirXUn8A6w9gbrrwPedsBxXZ7ZbObKlSukT44m0Nf2UUhzpBiosWPHEjppHmb7v3WbyUJmwRdHuhZfIGXYANXW2qa1SUhI4Dvf+Q6jRo0yOCIx1FpbWzlw4AAAt99++6C7Qvxu/Ry+s7z3EQE8ZfBqRyRicUBJj9el9ve+QCkVBKwGNvZ4WwM7lFLHlFJPOyAel9DZ2cnbb7/Nn//8Z5ZOiuDFdXP4ysIEXlw3W2rCxIDdPmNcd0dYbyxMGSF3U/aBlGEDkJWVxUsvvcT58+cB6ZTvKQ4cOEBHRwcTJkxwWO3nD1cl91IzpjG1NrPqV/vcvmbMEX3EekuHr1f63wN8ek2V/iKtdblSahSQoZQ6p7Xe/4WD2Aq4pwHi4+MHG7OhOjo62LBhAyUlJdx77734+fnJAK3CIVamxPCbx+aw92wFI9or+NIi6TDdB0NehrlT+QXw6aefsnPnTiZPnixNkR7kypUrHD16FLDVhjnS79bPISOvihd3nae+pZMgZaKgwQJNzW4/x64jErFSYFyP12OB8uus+yjXVOlrrcvtP6uVUh9gayb4QiKmtX4FeAUgLS3NZS/z29raePPNN6msrOTBBx9k2rRpRock3MxnSf0swNZ37NKlS3IX2/UNeRnmLuWX1pp9+/axb98+pk2bxv333y+DtHqQvXv3YrFYmDFjBrGxvfftGoyeFRKrfrUPaO5e9ubhS8waF+6WFRaOqEvOApKUUuOVUn7YCqrN166klBoBLAU29XgvWCkV2vUcuAM444CYnNbOnTupqqri4YcfliRMDIv9+/fz7rvvcvz4caNDcVZShvVRSUkJ+/btY9asWTzwwAOShHmQqqoqTp48iZeXF8uXLx/y492eMrrHK83VNjN/93aOW96ANOgaMa21WSn1LLAd263fr2qtc5VSz9iXv2xf9X5gh9a6pcfmMcAH9s5+PsAGrfUng43Jmd1xxx2kpqaSkJBgdCjCQ6xYsYKamho2b96M1po5czzjlvC+kjKs7+Lj41m/fj0TJ06U8eo8TNfgrfPmzSMiovcR8h2pqxnyrcOXuNJmBqDdZGVffpXb1YopV5waJS0tTWdnZxsdRp91jbmydOlS/Pz8jA5HeCCz2cw777zDhQsXeOihh1yyNlYpdcwdhodwtfILIDs7m9GjRzN27FijQxEGuHTpEq+//jp+fn4899xzBAcHD9uxM/KqeO7t47SZLHhj4csTTPz06/e73M0hNyq/XOtMXND2MxV8+VebeSczl8uXLxsdjvBQPj4+PPLII8THx7N7924sFovRIQkXceLECbZs2UJWVpbRoQgDaK3ZuXMnAIsWLRrWJAxs/cZeXDebryxM4PsLwvGqOON236UyxdEQ6hox32QNwM87iUc7Q+l9tBQhhp6vry/r1q2jo6ND+vaIPikoKGDz5s1MmDCBe+65x+hwhAHOnj1LWVkZISEh3HLLLYbE0LMTf/WiKW43Xp3UiA2hd/aewGS19aPotCCDawrDBQQEMGLECKxWKxkZGdTV1RkdknBS5eXlvPfee8TExPDwww/j4yPX7Z7GYrF09w1zlq41XUlYYWFh91Aark4SsSHS2tpK4NVifL1sffBkxHzhTJqbmzlx4gQbNmygtbXV6HCEE8rOziY4OJj169fj7+9vdDjCADk5OdTX1zNy5Ehmz55tdDifc+LECbZt20Z+vusP9iqXOA6WkVdFZkEN6UnR/N9n17G2pIUDhXUyAbNwKmFhYTz66KO8/vrr/OxPH+AzdgZLk2VQYfGZNWvW0NzcTEhIiNGhCAN0dnayb98+YOATew+ltWvX0tDQwMaNG3nyySeHZFyz4SI1Yg6UkVfFt986xhuHivnOW8c4UtrGHdNiZQJv4ZTGjRvH6Lkrea8slDePlMgk4QKr1cqOHTtobGzEy8uLsLAwo0MSBjl06BAtLS3ExcUxdepUo8P5Al9fXx599FECAwN5++23aWxsNDqkAZNEzIHePHgRk8XWFNlp0Ww4UmxwRELc2OXOYCzYrnRlknCxa9cuDh06xIULF4wORRiopaWFgwcPAo6Z2HuohIaG8thjj9HR0eHSA1ZLIuYgO3IrOHGp2ugwhOiX9KRoAn1tiZj0Y/Rsp06d4uDBg6SlpTldfyAxvPbv309nZydJSUkkJiYaHc4NxcTE8M1vfpMlS5YYHcqASR8xB8jIq+LZt3LotH7Whu7n7cVjC2T0fOHcusbo6erXeOnSJZ7PLeO2aXHSnO5Bqqur+eijj0hISGD16tVGhyMMVF9fT9eAw46e2HuoREZGAlBXV0d1dbVTNqXeiNSIOcDu3HI6rZ+9To4J4aX1c+SLTLiElSkx/GztdNrb2/jP/dW8c6zCbed0E73btWsX/v7+PPTQQ07XKVsMrz179mC1Wpk1a5bLjde1a9cuNm7cSHl5udGh9IskYg6wYtoYAnxsbeiBvt78w6opkoQJl5NV0ozZXiS0m6z81/Zzkox5iAceeIAvf/nLcoekhysvL+fMmTN4e3uzbNkyo8PptzVr1hAcHMz7779PR0eH0eH0mSRig2C1WikqKmJlSgy/eWwuX1mYwIvrZksSJlxSz/5ioMmvapY7Kd1ccXExJpMJf39/Ro8ebXQ4wmBdg7cuWLCAESNGGBxN/wUFBfHggw9y5coVtm7danQ4fSaJ2CD85m/7+Paf9vJOZm53844kYcJVdfUXmxwTDNhqeOVOSvdVV1fHW2+9xY4dO4wORTiBCxcuUFRUREBAAIsXLzY6nAGLj49nyZIlnDp1irNnzxodTp9IZ/0B+unGbN7IbkETw7/uKGHkyChJwoTL6/ob/rsNObSbrXInpZuyWq188MEHeHt7k56ebnQ4wmA9J/ZevHgxgYGBBkc0OEuWLMHf359Jk1xjdmdJxAbgk9PlvJFVib6m1kASMeEObE3tc7rvpFw6KcLokISDZWZmUlZWxkMPPSSDtgrOnDlDZWUlYWFhzJ8/3+hwBs3Ly4uFCxcCYDKZ8PHxcdqx0ECaJgfknb0nupMwAG8vJbUGwq10NbXHWmv49a9/zdWrV40OSThIeXk5+/btIzU1lWnTphkdjjCY2Wxm9+7dACxbtgxfX1+DI3Kc5uZmfv/73zv95OCSiA3ArRMi8LP/5rwVPLN0otSGCbcUFxeHyWRi8+bNaK2NDkc4gK+vL8nJydx5551GhyKcQHZ2NleuXCE6OpqZM2caHY5DBQcHM3LkSHbt2kV9fb3R4VyXJGID8PTdC3npy2l8ZWECLz+exg9XJRsdkhBDIiIigpUrV1JUVEROTo7R4QgHiI6O5pFHHiEgIMDoUITB2tvb2b9/PwC33XYbXl7ulRIopbjnnnvw8vJy6otJ9/qtD7FDhw5x9OhRtNZyl6TwGGlpaSQmJrJz506am5uNDkcMUG1tLR9++CGtra1GhyKcxMGDB2lrayM+Pp7JkycbHc6QCAsL44477qC4uJgTJ04YHU6vJBHro78dKeDftuSz9WSpU3f6E8LRlFLcfffdmM1mLl68aHQ4YgC01nz88cfk5+djtVpvvoFwe01NTRw+fBhw7om9HWH27NnEx8dz7tw5o0Ppldw12Qc7civ5Px/mY9LRFF32YlFeldSECY8SFRXF9773PYKDg40ORQzAmTNnKC4uZs2aNTJ6vgBg3759mEwmpkyZwrhx44wOZ0gppXjkkUecdlgOqRHrg4+zCjFp29VCu8kqA1wKj9SVhJWUlGCxWAyORvRVZ2cnGRkZxMbGMnv2bKPDEU6gtraWnJwclFLcdtttRoczLIKCglBK0dLSQk2Nc32HOyQRU0qtVkrlK6UKlVLP97J8mVLqqlLqhP3xk75ua7TtZyo4fbEcL2zV+TLApfBkFRUVvPrqq2RlZRkdikO5cxl24MABmpqauPPOO92uM7YYmN27d6O1Zvbs2URFRRkdzrDRWvPGG2/w4YcfOlXH/UE3TSqlvIGXgJVAKZCllNqstc67ZtVMrfWaAW5riG+/lcO20xVogvH1UixNiuKxBQnSLCk81ujRo5kwYQL79+9n5syZTlvV3x/uXIYBzJs3j/DwcLdvfhJ9U1paytmzZ/Hx8XHJib0HQynFrbfeyocffsjp06dJTU01OiTAMTVi84FCrXWR1roTeAdYOwzbDqlfbs9n6+kKunJmk1UzLjJIkjDh0ZRSrFy5kra2tu7b3t2AW5ZhXUJDQ5kzZ47RYQgnoLUmIyMDgIULFxIaGmpwRMMvNTWV2NhYdu3ahclkMjocwDGJWBxQ0uN1qf29ay1USp1USm1TSnUN59zXbYfdzrzKz71WIE2SQmCrFZs1axbvHczn/7ybTUZeldEhDZZblmFlZWW89tprNDQ0GB2KcBIFBQVcvnyZwMBAbr31VqPDMYRSijvuuIPGxsbuu0aN5ohErLd7Xq9tfM0BErTWM4HfAB/2Y1vbiko9rZTKVkplD0dHu8XjR3wulDtnxEptmBB2auxM9naM593jVTz39nFXT8aGvAwb7vKraxLnmpoagoKChvx4wvlZrVZ27doF2CbF9uQBfRMTE5kyZYrTjLbviESsFOjZ+WAsUN5zBa11o9a62f58K+CrlIrqy7Y99vGK1jpNa50WHT30NVPTrEXM8qtiUnQQ31k+id+tl6p9IbpklzZjthcfbSYLG44UGxzRoAx5GTbc5deFCxe4dOkSS5Yswd/ff8iPJ5zfqVOnqK6uJjw8nLS0NKPDMdyXvvQl1q51jl4EjkjEsoAkpdR4pZQf8CiwuecKSqnRyj5anFJqvv24dX3Z1gjV1dWcPn2aZ5cksPPvl8sURkJcIz0pGj/vz4qPzIJaV64Vc6syTGvNnj17CA8PZ+7cuUaGIpyEyWRiz549ACxfvhwfHxlCtOsO4pqaGlpaWoyNZbA70FqbgWeB7cBZ4K9a61yl1DNKqWfsqz0EnFFKnQReBB7VNr1uO9iYBuvAgQP4+vp6bBu6EDezMiWG5NGfDQxqtmpe3HXewIgGzt3KsAsXLlBeXk56erp84QoAjh49SmNjIzExMcyYMcPocJxGc3MzL7/8Mp9++qmhcTjkv9ReVb/1mvde7vH8t8Bv+7qt0ZYsWUJycrL0rRDiBqJCPt/klVvWSIaLzjrhTmVYfHw8d955JzNnzjQ6FOEE2traOHDgAOD+Uxn1V0hICDNmzCArK4tbb73VsFknZHS/XkRFRTFt2rSbryiEB3tsQQJePcp0K8isE07Az8+P+fPn4+3tbXQowgkcOHCA9vZ2xo8fz8SJE40Ox+mkp6djNps5cuSIYTFIItbDlStXeO+99+R2byH6YGVKDN9aNglvezLm66VliBeDffTRR5w9e9boMISTuHr1aneCIbVhvRs5ciRTp04lOzubjo4OQ2KQRKyHI0eOcO7cOZkGRIg++uGqZF5+PI2lY2BNZDUrkj1nuhRnU1FRQU5OjtPcki+Mt3fvXiwWC9OmTWPMmDFGh+O0Fi1ahNlspqyszJDjS09Ou46ODnJyckhJSWHEiBFGhyOEy1iZEsOSibfj6+srFzEGOnz4ML6+vnKnpABsd/+fPHkSLy8vVqxYYXQ4Ti0uLo4f/OAHhk3ZJqWm3fHjx+ns7OSWW24xOhQhXI6/vz9eXl6YzWbMZrPR4XicpqYmzpw5w+zZsz16oE7xmV27dqG1Zu7cuURGRhodjtPrSsKMaJ6URAzbiMNHjhxh3LhxxMU5xewkQricxsZGfvWrX3Hy5EmjQ/E4WVlZWK1WFixYYHQowgkUFxdz/vx5/Pz8WLp0qdHhuIz333+fDRs2DPtxJREDtp8p56R3Mt7xs40ORQiXFRoaSmhoKFlZWWjd60xlYojExMSwePFiqfkQ3dNbgW1i7+DgYIMjch1jxozh8uXLVFUN7+DUHp+IZeRV8YP3zrC71MIL+6pceXRwIQyllGLevHlUVVVRUlJy8w2Ew0ybNo3bbrvN6DCEEzh37hylpaUEBwfLoOT9NHv2bHx8fMjKyhrW43p8IvbGp0W0mSyAbc48GQdJiIGbMWMG/v7+ZGdnGx2Kx8jNzaW1tdXoMIQT6Dmx99KlS/Hz8zM4ItcSGBjI9OnTOXXq1LD2FfPoRCwjr4qDRZ/d6u3n7SXjIAkxCH5+fsyYMYNPTpfx440npIZ5iDU0NPD+++8P+xW8cE7Hjx+nrq6OyMhI5syZY3Q4Lmnu3LmYTCby8vKG7ZgenYi9daQYS4+uLJNHh7rk9CxCOJOOqMnsM03krawynnv7uCRjQ+j48eMopZg9W/q3errOzk727t0LwIoVK2RmhQGKi4vjwQcfJCUlZdiO6dGJWHtb2+deR4dINa4Qg3WisoMOs+0KR5r7h47WmlOnTjFx4kTCwsKMDkcY7PDhwzQ3NzNmzJhhTSLcjVKK6dOn4+/vf/OVHcSjE7HU4Ca8sAK2ZsnHFiQYHJEQri89KZoAH1vREuAjzf1DpaSkhKtXrzJjxgyjQxEGa21t5dNPPwVkKiNH0Fpz5MgRjh07NizH89iR9bXWjGwv46tJMZijxpOeFC3NkkI4wMqUGH5x/1R+97fdrEqNl/+rIVJaWoqvry/JyclGhyIMtn//fjo7O5k0aRLjx483OhyXp5Ti/PnzNDQ0MGfOnCFPbD02EVNK8fTTT9PR0SEjUQvhYPfOTaT+tBdtdQXA7UaH45ZuvfVWZs+ePaxNKML5NDQ0dN+sIUOYOM60adP46KOPqKysJDY2dkiP5dFNk0opScKEGCIpKSlUV1dTW1trdChuy6i58YTz2LNnD1arldTUVEaPHm10OG5jypQpKKWG5e5Jj0zELBYLL730kkzFIsQQmjp1KpctI3j+vRy5c9LBPvnkE95//32jwxAGq6io4PTp03h7e7N8+XKjw3ErQUFBjB8/nry8vCGfKcQjE7Hi4mJqa2ulNkyIIXS4pJW9pknsLDbxnbckGXMUrTW5ubkyjZToHrx13rx5hIeHGxuMG5o2bRojRowY8sFdPbKP2Llz5/Dx8WHChAlGhyKE29pwpBiLtnVy7bRY+fePc6XjvgOUlZXR3NwsnfQ9XFFRERcuXMDf35/09HSjw3FLc+bMGZaBcT2uRkxrTX5+PpMmTcLX19focITwGMX1bfxye77RYbi8/Px8lFIkJSUZHYowSM+JvRctWkRQUJDBEbm3zs7OId2/xyVi1dXVNDY2MnnyZKNDEcKt9TYu3868SgMicS8FBQUkJCRIR30PlpubS0VFBaGhodxyyy1Gh+PWjh07xn/+538O6XyuHpeI+fj4MHfuXCZOnGh0KEK4tZUpMdw14/O3fd+eInd1DYbWmqlTp8qURh7MYrGwe/duAJYtWyYtO0MsJiYGq9XKhQsXhuwYDknElFKrlVL5SqlCpdTzvSxfr5Q6ZX8cVErN7LHsklLqtFLqhFIq2xHx3MjIkSNZs2aNTAkixDD43fo5rJsZSTDtJEX5M2tcuNEh9cpVyjClFEuXLiU1NXUoDyOc2LFjx2hoaCAqKopZs2YZHY7bGzNmDEFBQRQWFg7ZMQadiCmlvIGXgDuBFGCdUuraia4uAku11qnAvwGvXLN8udZ6ltY6bbDx3IjZbKaiokLuNhJiGC2ZNo52fCmo7XDKScBdqQyrrKwc8v4qwnl1dHSwb98+wDZ4q5eXxzVqDTsvLy/Gjx/PpUuXhix3cMSnOB8o1FoXaa07gXeAtT1X0Fof1Fo32F8eBsY64Lj9VlJSwiuvvEJBQYERhxfCIx26eAUL3oDTTgLuEmWY1poNGzawefPm4T60cBIHDx6ktbWVcePGyV2zwyghIYHGxkYaGhpuvvIAOCIRiwNKerwutb93PU8B23q81sAOpdQxpdTTDojnuoqLi1FKkZAgk3sLMVzSk6Lx97YNYxHo6+2Mk4C7RBnW0NBAU1MTiYmJQ3UI4cSam5s5dOgQIBN7D7ekpCRWrVo1ZNOJOWIcsd7+Gnqtv1NKLcdWiC3u8fYirXW5UmoUkKGUOqe13t/Ltk8DTwPEx8cPKNCSkhJGjRolc7MJMYxWpsTw2/VzySyoIT0p2hnHEhvyMsxR5RfAuHHjBrS9cG379u3DZDKRnJw84L8hMTDh4eFDeneqI2rESoGeJcNYoPzalZRSqcAfgbVa67qu97XW5faf1cAH2JoJvkBr/YrWOk1rnRYd3f8raqvVSmlpqRRiQhhgZUoM35o/kpQRZqND6c2Ql2GDLb/Aloj5+/szatSoAW0vXFddXR05OTkopWRib4M0NTWRnz804yA6IhHLApKUUuOVUn7Ao8DnOjEopeKBvwGPa63P93g/WCkV2vUcuAM444CYvqC6uprOzk65khDCIJs2bWLPnj1Gh9EblyjDSkpKGDdunDRJeaDdu3djtVqZNWsWA03kxeCcPn2ad955h5aWFofve9BNk1prs1LqWWA74A28qrXOVUo9Y1/+MvATYCTwO3shYrbfXRQDfGB/zwfYoLX+ZLAx9SYyMpL169cTGxt785WFEA43ZswYzp07h9baqZIJVynD7rvvPqxW61DsWjixsrIy8vLy8PHxYdmyZUaH47Hi4mzdRsvKyhw+ILxD5prUWm8Ftl7z3ss9nn8d+Hov2xUBM699fyj4+fkxadKk4TiUEKIXcXFxHD9+nIaGBiIjI40O53NcoQyTi0jP03MqowULFsj4lwaKjY1FKUV5ebnDEzGPGYQkJyeHsrIyo8MQwmP1vKIU/VNcXMzp06dlDEQPU1hYyKVLlwgICGDx4sU330AMGT8/P6Kjo4ek/PKIRMxisbB161by8vKMDkUIjxUdHU2pjuC/95Y43aCuzu748ePs2LHDqZp0xdCyWq3dtWHp6ekEBAQYHJEYM2YMFRUVDt+vRyRiNTU1WCwWqdoXwkC782vZ0zmRvWWa77yVI8lYP1RUVEj55WFOnz5NdXU1I0aMYP78XgcTEMMsPT2dr33taw6vmfaIRKyqylbgjx4tEw4LYZQNR4ox2/uad1qsbDhSbGxALsJisVBbW0tMjNONvyaGiNls7r7DePny5fj4OKQ7txikyMhIIiMjHV4z7RGJWE1NDV5eXk7XQVgIIW6mvr4eq9UqwxZ4kKysLK5evcqoUaOYMWOG0eEIO4vFwpEjR7h06ZJD9+sRiVh9fT0REREyQaoQBnpsQQK+9n9BX2/FYwtkqrG+qKuzjR07cuRIgyMRw6G9vZ3MzEzANpWRfG85Dy8vL/bs2UNubq5D9+sR9Z0PPvjgkAzCJoTou5UpMfxibTJ/2Lyf+xdOdcapjpxScnIyP/jBDwgKCjI6FDEMDhw4QFtbG4mJiTLkkpNRShEdHU1tba1D9+sRqba3t7eMvyKEE7g3bTxjvZs4UnxVOuv3kVKK0NBQvL29jQ5FDLHGxkaOHDkCyMTezioiIoKGhgaH7tPtE7Gmpia2bdtGTU2N0aEI4fF259eyt3MCu0ssPPf2cUnG+iAzM5PTp08bHYYYBnv37sVsNpOSktI97p5wLuHh4TQ2NmKxWBy2T7dPxOrr6zl69CiNjY1GhyKEx8ssqMFsL3baTBYyC+QC6WaOHTtGYWGh0WGIIVZTU8OJEydQSrFixQqjwxHXERERgdbaoTmF2/cRu3r1KgAjRowwOBIhRHpSNH/NLqHdZCXQ15v0JLkT8EasViuNjY3StcID7Nq1C601aWlpcmOGE5s+fTrTp0/H19fXYft0+0SsK2uVgkwI461MieE36+aQWVBDelK0dNi/iebmZrTWciHp5i5fvkx+fj6+vr4sXbrU6HDEDTgyAevi9k2TV69eJTAwED8/P6NDEUIA0yOszPe+xK0JIUaH4vSkRt/99ZzYe+HChYSEyP+FM9Nas337ds6dO+ewfbp9ItbR0SG1YUI4kcbGRo4dO9adZIjra2trw8vLi9DQUKNDEUMkPz+fkpISgoKCuPXWW40OR9yEUorjx49z8eJFh+3T7ZsmH3jgAYfPCyWEGLiuK/7m5maDI3F+kydP5p//+Z+NDkMMEavVyq5duwBYsmQJ/v7+Bkck+iIkJMShY5O6fY0YIGOxCOFEQkJCuGwZwf/sK5XhK/pAKSVlmJs6ceIEtbW1REREkJaWZnQ4oo9CQkJoampy2P7cPhH79z9v5juv7pMCXwgncai4mb2dE/jkQpuMJXYTOTk5bNmyxegwxBAwmUzs3bsXgBUrVsiAvS4kKCiItrY2h+3PrROxHbkV/DkftpxvlgJfCCdxsKgBC7YvHRlL7MaKi4tlDDE3deTIEZqamoiNjWXatGlGhyP6ISAgwKH7c+s+YvvOVX2hwJfb5YUwVvrkaN47VkqbySJjid1Ee3u7wwt9YbzW1lYOHDgAyFRGrujee+916P7cukYsyM8L+KyjfmiA48f/EEL0z8qUGL62eDzJMSF8bfF4uTi6AZPJJEPvuKHMzEw6OjqYOHEiEyZMMDocYTC3TsTOVjQCn11p5JXL7fJCGC0jr4o/7C0kv6qZ/91fJF0GbsBkMuHj49YNFx7nypUrZGVlAXDbbbcZHI0YiAsXLvDee+/R2dnpkP25dSImo1YI4Xw2HCnGbP/f7LRY2XCk2NiAnJifn58M8Olm9u7di8ViYcaMGcTGxhodjhiA+vp68vLynCsRU0qtVkrlK6UKlVLP97JcKaVetC8/pZSa09dtB2NW4uf7nqSMkdGphRBf5Kxl2OOPP87999/vyF0KA1VVVXHy5Em8vLxYvny50eGIAfLysqVOVqvVMfsb7A6UUt7AS8CdQAqwTimVcs1qdwJJ9sfTwO/7se2ANbWbbvhaCDH8HluQgLe976aftxePLUgwNB5nLsOEe+maymjevHlEREQYHI0YKKdLxID5QKHWukhr3Qm8A6y9Zp21wBva5jAQrpSK7eO2AzYj2hdfZSvw5e4s12axWKitrcVisfS+wltvQWIieHnZfr711nCGJ/phZUoMj8a3kDaihZfWz3GGzvpOW4Zt2rSJI0eOOGp3wkAXL16ksLAQPz8/0tPTjQ5HDELXmG/X/T7qJ0f0Ao0DSnq8LgUW9GGduD5uO2DzxvizxLeQ0KT53D13ojMU+GKAampq+MMf/oBSioiICKKiohg5ciQjR44k/sABon70I1TXAHvFxfD007bn69cbF7S4rrRYP1JGtDrL/6TTlmFFRUWO2pUwUM+JvRctWkRwcLDBEYnBcHTfTUckYr0NgHJtN/nrrdOXbW07UOppbE0CxMfH9zm4eO+rPJE+hsREpyjwxQC1t7cTHh7OlStXqK+vp76+vnvZd3/1q8+SsC6trfDjH0si5qTCw8MJDAw0OowuQ16GDbT8Eu6ho6ODkJAQQkJCuOWWW4wORwxSQEAAsbGxDruj2RF7KQXG9Xg9Fijv4zp+fdgWAK31K8ArAGlpaXI/pIdJTEzku9/9LiaTifr6eurq6qitraWuro4RV68zLMnly8MbpOizsrIy2tvbjQ6jy5CXYVJ+ebaAgADWrVtHa2urjAvnBhobGykoKMBsNjtkf45IxLKAJKXUeKAMeBR47Jp1NgPPKqXewVZtf1VrXaGUqunDtgPWNVqxozrUCeP5+voSExNDTEyPGs6EBFtz5LWk5sFpWSwWZ5pbz6nLMC3j8LiNoKAgo0MQDtDVN8xRZdigEzGttVkp9SywHfAGXtVa5yqlnrEvfxnYCtwFFAKtwJM32nawMXXx9/cnMjKy+w4H4aZ+/nNbn7DW1s/eCwqyvS+c0sMPP+w0CYYzl2EjR450piZcIQQwffp0Jk2a5LC+fspZCsP+SEtL09nZ2UaHIZzJW2/Z+oRdvmyrCfv5z6V/mJtRSh3TWqcZHcdgSfklhOe5Ufnl9nNnZORVkVlQQ3pStLPcoSWGwvr1kni5kEOHDjFixAhSUmTILSGEa7l48SLFxcUsWbLEIS1ubt1mt+XEZb79lyzeOFTMc28flznthHASG/ad4T+2F8r/5E1kZGTw8ccfGx2GEKKHixcvsn///u5+6IPl1onYwaIGTNr2i2ozWcgsqDE4IiFERl4V266M5kCVt1wg3URdXR0lJSU3X1EIMWza29vx9/eXRKwvlibH4I3t7gYZWV8I55B5vgazveiRC6QbCwwMpO3aMfKEEIbq6OggICDAYftz60TsjmmjWR1azpLRmhfXzZY+YkI4gVsSR8gFUh9JIiaE8+mqEXMUt++sPy3CSlSU00ylIoTHuzUxlGV+RfjFz+SBW1Pkf/MGgoKCMJvNmEwmfH19jQ5HCIEtEXPksDJun4jFxcU5NHMVQgxOeHg4f/jJswAOmyLEXUVERDB27FhJxIRwIk888QQmk8lh+3P7UnDt2rVGhyCEuIYkYH0zbdo0pk2bZnQYQogevLy8HFrB49Z9xMB2h9ZPNp2RO7OEcBKFhYVs27bNoVeUQggxHDo6Oti8eTOXHTiXsVsnYhl5VTz71jHeOFTM372dI8mYEE5gU1YRLx6oZM/5WqNDcXodHR28/PLL5OTkGB2KEAJoamri+PHjXLlyxWH7dOtELLOghg6LbQqndpOVDUd6mRhaCDFsMvKqePl0J2cto/juOyfl4ugm/Pz8qK2tpa6uzuhQhBDA1atXAQgLC3PYPt06EUtPisbX+7MB1z4trJOCXwgDZRbUYLLKIMt9pZQiLCyMxsZGo0MRQgANDQ2A7UYaR3HrRGxlSgy3JH72y+q0WKXgF8JA6UnR+GAFZAyxvoqIiOgu/IUQxmpoaMDb21tqxPpjxrgIQHe/Dg2QW8CFMMryySNZFVbO7Qm+MshyH0VGRlJXV4fW+uYrCyGGVGdnJyNHjnTY9EbgAcNXNHeYgc9+YU3tcqeWEEbx8fHhpX/6JlprhxZk7iwhIYH29nYsFosM+yGEwe6++26HXxS5fY1YelI0gb7egDSFCOEsJAnru+nTp/Pggw9KEiaEk3B0+eX2idjKlBheXDebx2+J59ePzpKmECEMlJWVxfvvvy/NbP2ktcZisRgdhhAe7cqVK/zlL3+htLTUoft1+0QMYIJ/M/5nNjEjUgp/IYx08eJFKisrpUasH7TWvPjii2RkZBgdihAerbKykqKiIqkRG4iIiAgsFguVlZVGhyKER6uurmbUqFFGh+FSlFKEhIRI+SWEwaqrqwGIjnZsFyePScT8/PykIBPCQCaTifr6eocXYp4gJiaGyspKadIVwkDV1dWEh4fj5+fn0P16RCKmlOJKcDyvnmyWAV2FMEhXIhEbG2t0KC5n9OjRdHR0dI/qLYQYfuXl5UNSfnlEIpaRV8UHleFkXQniOZlzUghDmM1mYmNjiYuLMzoUlzN69GgAKioqDI5ECM9ksViIjIxk/PjxDt/3oBIxpVSkUipDKVVg//mFMf+VUuOUUnuUUmeVUrlKqe/2WPYvSqkypdQJ++OuwcRzPZkFNXTaBvOmzSSj6wthhPHjx/P0008TGhpqdCjdXKUMGz16NAsWLHDotCpCiL7z9vbmy1/+MvPmzXP4vgdbI/Y8sEtrnQTssr++lhn4e631VOAW4DtKqZQey3+ltZ5lf2wdZDy9krHEhDCek/ZvcokyzMfHh9WrV3fXjAkhhtdQll+DTcTWAq/bn78O3HftClrrCq11jv15E3AWGNa2ia6xxB6bF8e/rk6UscSEGGYtLS288MILnDp1yuhQruUSZRjYmkbKyspkPDEhDPD222/z17/+dUj2PdhELEZrXQG2wgq44X3pSqlEYDZwpMfbzyqlTimlXu2tWcBRVqbEkGo6R1WOjMUjxHArLi6ms7PTGZvWXKYMy8/P549//KP0ExNimFmtVoqLiwkODh6S/d80EVNK7VRKnenlsbY/B1JKhQAbge9prRvtb/8emAjMAiqA/77B9k8rpbKVUtk1NQPr4zVu3Djq6+tpamoa0PZCiIHZfOwiR82J5F0d/ml6nKEMc0T5FR8fD9iSWiHE8CkvL6ezs5PExMQh2f9NEzGt9e1a6+m9PDYBVUqpWAD7z+re9qGU8sVWgL2ltf5bj31Xaa0tWmsr8L/A/BvE8YrWOk1rnTbQcYi67na4ePHigLYXQvTfL7fn84dcTa4piu+9e3LY71p2hjLMEeVXSEgIUVFRUn4JMcwuXboEQEJCwpDsf7BNk5uBJ+zPnwA2XbuCss0F8CfgrNb6f65Z1nNAjvuBM4OM54ZiY2MJDAykqKhoKA8jhLDLyKvi5b2FaGxTgrSZLM5217JLlWETJkyguLgYs9k8lIcRQvRQXFxMdHQ0ISEhQ7L/wSZiLwArlVIFwEr7a5RSY5RSXXcPLQIeB1b0cov3L5RSp5VSp4DlwPcHGc8NKaUYP348RUVFznoHlxBuJbOgBkuPfzVvL+Vsdy27VBk2YcIEzGYzJSUlQ3kYIUQP06dPZ8GCBUO2f+WKCUlaWprOzs4e0LbV1dUopYiKipKJh4UYYhl5VTz39nHaTBa8FTyzbBI/XJU8oH0ppY5prdMcHOKwG0z51dnZSVlZGePGjcPHZ/j72wkhBuZG5ZfH/SfLhMNCDJ/bpkTz/NIYCpq8WZocI0PHDJKfn9+QjOwthOhdSUkJI0aMICwsbMiO4RFTHF3rwoUL7Nu3z+gwhHB75eXlXPp0M49MUpKEOcjVq1fJyMiQeSeFGAYffvghH3300ZAewyMTseLiYvbt20dra6vRoQjh1s6fP49SikmTJhkditswm80cPHiQ/Px8o0MRwq3V1dVRX19PUlLSkB7HIxOxKVOmoLWmoKDA6FCEcGvnzp1j3LhxBAYGGh2K2xg5ciRRUVGSiAkxxM6dOwfA5MmTh/Q4HpmIxcbGEhoa2v1LFkI4Xk1NDTU1NUybNs3oUNzO5MmTuXTpEu3t7UaHIoTbysvLIy4ujvDw8CE9jkcmYkoppkyZQmFhIR0dHUaHI4Rb6qpxnjp1qsGRuJ+UlBSsVitnz541OhQh3FJTUxPl5eWkpKQM+bE87q7JLjNmzKCwsJCGhgZGjx5tdDhCuJ2FCxcyadIkQkNDjQ7F7YwZM4aYmBjp5yrEEAkNDeUHP/jBsAwT47GJ2NixY/m7v/s7GUtMiCGilJLhYoaIUopvfvObUn4JMYSG6yLSI5smwVaQKaWwWCyYTCajwxHCrWRmZrJt2zaZwWIIdSVh0r1CCMeqrq7mzTffpLa2dliO57GJGEBzczP//d//TU5OjtGhCOE2rFYrR48e5cqVK1JjM8Tef/993njjDaPDEMKtnDhxgosXLw7b3d4enYiFhIQQHh7OuwfO8pMPz5CRV2V0SEK4vAsXLtDc3MysWbOMDsXtjR07lvLyciorK40ORQi3YLFYOHXqFJMnTyY4OHhYjunRiRiAZXQKH9ZE8sbhYr7zVo4kY0IM0smTJwkMDBzysXcEzJw5E29vb6nVF8JBLly4QEtLy7BeSHp8Ina4xgcr3gB0WqxsOFJscERCuK6WlhbOnTvHjBkz8Pb2NjoctxcYGMjUqVM5ffq09HUVwgFycnIIDg4e1tlAPD4R8/Ly+F+BEA6z82w150Nm0RI+0ehQPMacOXNob2+XMcWEcICEhATS09OH9ULSY4ev6PLYggQOFNZismj8vL14bEGC0SEJ4ZIy8qp4flM+bSZF1tYiRowYIRN9D4PExEQeeOABpkyZYnQoQri8hQsXDvsxPT4RW5kSw+/WzyWzoIbQAF8yC2q63xdC9N2r+/JpM1kAaDNZyCyokf+jYaCUYsaMGUaHIYRLM5lM5OXlMW3atGEZxLUnaZfDlnQtSAjjf/cV8MahYp57+7h02heiHzLyqjh6ubH7tZ+3F+lJ0QZG5HlycnLYsWOH0WEI4ZLOnDnDhx9+SElJybAfWxIxu8MXr9JptY151HU1L4Tom1f3nceiPxszbNGkkVIbNsxqa2s5fPgwV69eNToUIVyK1ppDhw4xatQoEhMTh/34kojZLUkehZ+9b16Aj1zNC9FXttqwz778pa+lMebPnw/AkSNHDI5ECNdy/vx5ampqWLRokSGDUEsiZrcyJYb/96VUpvnVsi6xTa7mheijjNMlUhvmBMLDw5k+fTrZ2dkyGbgQfaS15sCBA93/P0aQRKyHu2aN4wdLx0LZ6WGbY0oIVzc1QuGDFYBAX2+pDTNQeno6JpNJasWE6KP29nZMJhMLFy40bDgrj79r8lq33HILbW1t+Pn5GR2KEC7hyTvmMmbMGD69UEd6UrTUhhkoOjqaJUuWEB8fb3QoQriEwMBAvvnNb6K1NiyGQSViSqlI4F0gEbgEPKy1buhlvUtAE2ABzFrrtP5sP5yCg4NZs2aNkSEI4TLKy8uJjY1l1XTbw9W4Yxm2fPlyIw8vhMuor68nMDCQwMBAQ/qGdRlsPdzzwC6tdRKwy/76epZrrWd1FWAD2H5YlZeX8+LGvfxkk0wGLkRv6uvr+eMf/8iBAweMDmUw3LIMa2trY9euXbS1tRkdihBOSWvN5s2befXVVw2tDYPBJ2Jrgdftz18H7hvm7YfMhn2n+XVWo4wrJsR17N+/H29v72GdHHcIuGUZ1tjYyIEDB1w9SRZiyFy8eJHi4mLmzZtnaG0YDD4Ri9FaVwDYf466znoa2KGUOqaUenoA2w+7er8YLPbJwGVcMSE+r7q6mlOnTjFv3jxCQ0ONDmcw3LIMi4mJITU1laNHj9LY2HjzDYTwIFprdu3aRVhYGHPmzDE6nJsnYkqpnUqpM7081vbjOIu01nOAO4HvKKWW9DdQpdTTSqlspVR2Tc3QJ0XLp8Z2jyvm76NkXDEhetixYwf+/v4sXrzY6FBuyhnKsOEuvwCWLVuG1Wpl7969w3I8IVzF6dOnKS8vZ8WKFcM+nVFvbpqIaa1v11pP7+WxCahSSsUC2H9WX2cf5faf1cAHwHz7oj5tb9/2Fa11mtY6LTp66JOilSkxvPjILFIDGrhnZC23T3WKC10hDNfa2kp9fT1LliwhKCjI6HBuyhnKsOEuvwAiIiJIS0vjxIkTVFVJ1wohupSWlhIbG0tqaqrRoQCDH75iM/AE8IL956ZrV1BKBQNeWusm+/M7gJ/1dXsjrU6NY5z3bGpra7FarXh7exsdkhCGCwoK4tvf/rbh/SocxK3LsGXLltHa2oqvr6/RoQjhNO666y46OzudpgxTg7lbQCk1EvgrEA9cBr6kta5XSo0B/qi1vkspNQHbFSTYEr8NWuuf32j7mx03LS1NZ2dnDzhuIcTAlJaWEhMTY8gXu1Lq2DV3LDpin8Nehkn5JYQxmpqaaG9vZ7hqpXu6Ufk1qBoxrXUdcFsv75cDd9mfFwEz+7O9Mzp37hx1dXUsWrTI6FCEMERzczNvvvkmycnJ3H///UaH4xCeUoY1NDRw4MABVq9eLbVjwmN98sknXLhwge9///v4+/sbHU43meKojwoKCti1a5f0tRAea8eOHZjNZtLT040ORfRTY2MjOTk57N+/3+hQhDBEYWEheXl53HrrrU6VhIEkYn122223ERgYyEcffYTVajU6HCGGVVFREadPn2bRokVERUUZHY7op4SEBGbNmsXBgwflYlJ4HJPJxNatWxk5ciS33nqr0eF8gSRifRQUFMTq1aspKysjKyvL6HCEGDZms5mtW7cSERHhEsNViN6tXLmSgIAAuZgUHiczM5OGhgbuvvtupxiu4lqSiPXD9OnTmTRpErt27aKpqcnocIQYchl5Vfx/H5ymxBrB3XffLf2LXFjPi8ljx44ZHY4Qw2rWrFmMHz/e6DB65XypoRNTSnH33XdTXFzMocstHCgsJj0pmpUpMUaHJoTDZeRV8dzbx2kzWQj0HcntHSFMNDooMSjTp0+ntbWVGTNmGB2KEMNmxYoVhs8neSNSI9ZP4eHhVPuO5rvvnJB5KIVb25dfRZvJAsg0X+5CKcWCBQsICAjAbDZLE6Vwa4cPH+bixYsATjNmWG8kERuAzIIa+YISbi0jr4rjBSV4YfuiDvT1lmm+3Eh7ezt//OMf+fTTT40ORYghUVZWxo4dOzh16pTRodyUJGIDkJ4UTYCP7Vfno6wsmjjS4IiEcJyMvCqefesYufXgpbxYnhzNi+tmSxO8G/H39ycqKoq9e/dSUVFhdDhCOFRHRwcbN24kLCyMVatWGR3OTUkiNgArU2L4zWNzWJMcylLfC/hU5RkdkhAO86sd5+iw2PpTmDWMiwySJMzNdPV3DQoKYuPGjXR2dhodkhAOobVmy5YtXLlyhQceeICAgACjQ7opScQGaGVKDL99cglr0yZw4MABCgsLjQ5JiEH75fZ88io/uyPYx0tJk6SbCgwM5IEHHqC+vp4tW7Y4dWdmIfrqwoULnD59mqVLlxIfH290OH0iidgg3XnnncTExFBSUmJ0KEIM2s68SuCzTq0xYf5SG+bGxo8fz9KlS6mqqqKjo8PocIQYtIkTJ/LAAw+41AwgMnzFIPn6+vLUU0/J+ErC5b1/6Dy+3p+/Nrtv9liDohHDJT09nUWLFjnlQJdC9FVHRwetra1ERES43PAsUiPmAF1JWFlZGfv27TM4GiH674OjF3h+Uz5nyhvx8VLEjQjgO8sn8cNVyUaHJoaYl5cXPj4+dHR0sHXrVlpbW40OSYh+0Vrz4Ycf8qc//ckla3YlEXOgvLw89u7dS05OjtGhCNFnn5wq4z8+OoXZXhyYrZrbUmIkCfMwdXV15OTk8P7778v4YsKlHDhwgHPnzrF48WKnm9C7LyQRc6DbbruNCRMmsGXLFjbsO8NPNp2RwV6FU/vFJ+f41obj1Jj8ut+TMcM805gxY1izZg0XL15k+/btRocjRJ/k5+eze/duZsyYwYIFC4wOZ0AkEXMgLy8vHnroIWr9x/CTbRdl5H3h1DLyqnh53wV0j875yTEhMmaYB5s1axYLFizg6NGjUrMvnF51dTUbN27svohw5tHzb0QSMQcLDAzELz61u5lHRt4XziqzoAZrjxELvBX8w6opkoR5uDvuuIOJEyeyd+9eTCaT0eEIcV0RERHMmjWLdevW4efnd/MNnJTcJjME7kiN56MztbSbrdLMI5xSY2Mj6UnRvJddSpvJgreX4pmlEyUJE3h5efGlL32J1tZWuRtcOKWOjg601gQEBHDXXXcZHc6gSSI2BLpG3s8sqGHeuBC8K3PRU0e5bLWpcC8VFRW89tprLFmyhBfXzSazoIb0pGhJwkQ3f39//P390VqTmZnJjBkziIiIMDosITCbzbzzzju0tbXxjW98A29vb6NDGjRJxIbIypQYVqbEkJWVxdbMTNrb27nzzjslGROGqq2t5c033yQwMJAZM2YQFhYmCZi4rsbGRg4dOsTJkyd58sknCQkJMTok4cGsVivvv/8+ly5d4v7773eLJAykj9iQS0tLY+HChWRlZbFz506ZRkQY5urVq/zlL38B4PHHHycsLMzgiISzGzFiBOvWraOpqYm//OUvMsaYMIzWms2bN5Ofn8+dd95Jamqq0SE5jCRiQ0wpxcqVK0lLS+PgwYPs37/f6JCEB7Jarbz11lt0dHTw5S9/mZEjRxodknAR8fHxPProo9TV1fHmm2/S3t5udEjCA2VmZnLy5EmWLVvG/PnzjQ7HoQaViCmlIpVSGUqpAvvPL3QiUEolK6VO9Hg0KqW+Z1/2L0qpsh7LXL/XXS+UUtx1113MnDmTM2fO0NnZaXRIwkNk5FXxk01n2HWuhqVLl/LYY48RGxtrdFhOQ8qwvpkwYQIPP/wwtbW1lJeXGx2O8ECzZs3i9ttvZ8mSJUaH4nBqME1lSqlfAPVa6xeUUs8DEVrr/3OD9b2BMmCB1rpYKfUvQLPW+r/6c9y0tDSdnZ094LiNYrVa6ejoIDAwEKvVipeXVEiKoZORV8XfbcjpvnvX1ccHU0od01qnOXifw16GuWr5BdDS0kJwcDCAlGFiyGmtOXnyJKmpqS7/t3aj8muwZ7YWeN3+/HXgvpusfxtwQWtdPMjjuiQvL6/uJOz9999n165d0mdMDJlduWW0m21T1ch4dtclZVg/dCVhubm5/OlPf6KlpcXgiIS70lqzZcsWNm3aRF5entHhDKnBJmIxWusKAPvPUTdZ/1Hg7Wvee1YpdUop9WpvzQLuSClFYGAgBw4cYMeOHZKMCYerqamhpTAbH2yJmIxnd11Shg2Av78/1dXVvP766zQ1NRkdjnAzFouFjRs3cuzYMRYtWsS0adOMDmlI3bRpUim1Exjdy6IfA69rrcN7rNugte61IFJK+QHlwDStdZX9vRigFtDAvwGxWuuvXWf7p4GnAeLj4+cWF7v2BanWmu3bt3PkyBFSU1O599573eZWXGGssrIy3nrrLby8vIhfuIYztWa3GCdsoE2TzlCGuVv5BXDp0iU2bNhAcHAw69evJyoqyuiQhBvo7Ozkr3/9KxcuXOD2229n0aJFRofkEDcqv246jpjW+vYb7LhKKRWrta5QSsUC1TfY1Z1ATlcBZt9393Ol1P8CH98gjleAV8DWx+JmcTs7pRSrVq0iKCiIPXv2YLFYeOihh4wOS7iB/Px8/P39efzxx4mMjORhowMymDOUYe5WfgEkJibyxBNPsGHDBl599VW+9a1vERoaanRYwsXV1dVRWlrKvffey+zZs40OZ1gMdkDXzcATwAv2n5tusO46rqnS7yoA7S/vB84MMh6XopRiyZIlhIWFyXACYtC6OlIvX76chQsXEhgYaHRIrkDKsEGIi4vjqaee4uzZs5KEiUHpKr9iY2N57rnnCAoKMjqkYTPYPmIvACuVUgXASvtrlFJjlFJbu1ZSSgXZl//tmu1/oZQ6rZQ6BSwHvj/IeFzSrFmzGDduHACHDh2ioqLiJlsI8Rmr1cr27dv5/e9/T2NjY3cfRNEnUoYNUmRkZHfzUUVFBYcOHZJ+r6JfioqK+M1vfsOJEycAPCoJg0HWiGmt67DdRXTt++XAXT1etwJfqPLRWj8+mOO7m46ODo4cOcLu3btZu3Yt06dPNzok4eS2nizljR1HCW66zEMLp8kUNP0kZZhjnThxgqNHj1JZWck999yDj4/MoiduLDs7m61btxIdHU1iYqLR4RhC/kuciL+/P9/4xjd499132bhxI9XV1SxfvlzmpxS9ev/QeZ7fnI9Z++PnncSjCXNcfqwd4dpWr15NcHAwe/bsoa6ujkceeUSaLEWvzGYz27ZtIycnh0mTJvHQQw/h7+9vdFiGkFLbyQQHB/PEE08we/ZsMjMzeffdd6WaX/Tqw8PnMGvbv3CnBRknTBiuq9/rww8/THV1NX/4wx+oq6szOizhhIqLi8nJyWHx4sWsW7fOY5MwkBoxp+Tt7c0999xDXFwcSimpERPdLBYLbW1thISE8NiKOWS/d7p75HwZJ0w4i6lTpzJy5EgOHz5MRIRHDK0m+qixsZGwsDAmTpzIt7/9baKjpdySRMxJKaWYO3du9+szZ87Q0NDA4sWLJTHzUHV1dWzcuBGtNd/4xje4a+ZYfH19ySyocYtxwoR7GTVqFPfeey8Azc3N7NixgzvuuEP6MXoos9nMzp07yc7O5sknnyQuLk6SMDtJxFxEUVERx48f58KFC4RPSyenvE2+fD2E1prjx4/zySef4OPjwz333NPdF2xlSoz8DQinV1FRwdmzZ7lw4QJr1qxh6tSpRockhlFNTQ0bN26kqqqKefPmMWrUzSaw8CyDmvTbKK48ae5Aaa05ceIEL390kF2t8ZjxcouJnMX1ZeRVsfdsBT51F/CqOMP48eO57777CAsLMzo0QwzFpN9G8MTyC2xfxh988AEVFRXMnDmT1atXExAQYHRYYohlZWWxY8cO/P39Wbt2LUlJSUaHZIhBjawvnINSitmzZxNeYMWcUwnYJnLecKRYmqbcUEZeFc+9fZw2kwUf5cdzaUt5/IGl0iwtXFZ0dDRPPfUU+/bt48CBA/j4+LBmzRqjwxJDrKWlhfHjx3PvvfdKs/R1SCLmYm6fPpbNp6tpM1nx8/bi08I6Oi01vJddKrVjbmJT9kVe2JJLm8mWdJm1F7U+UZKECZfn7e3NihUrmDx5cncn/oaGBvz8/AgODjY4OuEIVquVgwcPEhMTQ1JSEkuWLJGbzm5CEjEXszIlhhfXzSGzoIaS+lb25NuGLGgzWXhhy5nudYTrsVgs/G5TJr8+2oS5x8gyckekcDdjx47tfr5582aqqqpYuXIls2bNki9sF1ZcXMy2bduoqqoiLS2NpKQkGduwDyQRc0FdHbQz8qo4XFRPm8kCaC7UtfOdN7P51cMzuHtWvNFhij7KyKtiy7ELqKpznG0AM58l0skxIfzDqimSXAu3ddddd/Hxxx+zefNmcnJyWL16NXFxcUaHJfqhqamJnTt3curUKcLCwnj44Yflhox+kFTVhdlqx2aTHBMC2K4iO63w8of7MJlMxgYnbigjr4qfbDrDL7fn89zbx/kwt4GPaqOZNW0Kgb7egK0mTJIw4e6io6P56le/yr333ktDQwN//OMfOXfunNFhiX4oKioiNzeX9PR0vvOd70gS1k9SI+biur6kuzp2B/h4cffcCfj6+gK2quL4+Hip7nciv9yez8v7CrFYwVuBxX7jshkv/ILDeHHdRLkBQ3iUrpuRUlJSOHLkCBMnTgSgsrKS8PBwubvSyVitVk6ePInWmjlz5pCamkpCQgLh4eFGh+aSJBFzA101Y9d+eZeUlPDaa68xZswYVqxYwYQJEyQhM1BGXhX/L+McuRXN3e9ZNHh7KSxW3d0XTMYGE57K39+fJUuWALYhe9577z3a2tpYtGgR8+fP777AFMbQWpOfn8/u3bupqalh4sSJzJ49G6WUJGGDIOOIubGuq5Z9+/Zx9epVEhISWLJkCePHj5eEbJhl5FXxrTezMVs//763l+KZpRNpajdJDdhNyDhinqe8vJw9e/ZQWFhISEgIixYtYs6cOfj5+Rkdmsfp2RE/MjKSFStWkJKSIt8lfSTjiHkoLy8vZs+ezYwZM8jJySEzM5P333+f73//+3JlOUw+yikm63ITJQ2tX0jCAJ5ZOpEfrkoe/sCEcAFjxoxh/fr1XL58mT179rB9+3bCwsJISUkxOjSPYLFY6OzsJDAwEKUUZrOZ++67jxkzZsjdkA4kNWIexGw2U1NTQ2xsLFarlXfeeYdJkyYxc+ZM/P39jQ7PrZSXl/OnT47y2nkvLHjj5+2FVWvMVtv/m5eCby2bJElYP0iNmCgrKyM2NhYvLy8OHjzIlStXmD9/PlFRUUaH5lZaW1vJzs4mKyuLKVOmcPfddwO2pkmpARsYqRETAPj4+BAbGwvYRjtuaWlh27Zt7Nq1i9TUVObPny+TsA5QRl4V+/OrSQxow6syl8uXL3PUkogF2xdEp8XK8uTPfrePLUiQZkgh+qnnsBZNTU0cO3aMrKwsxo8fz/z585k8ebLU1AxCRUUFWVlZnD59GrPZzMSJE5kyZUr3cknChobUiHm4srIysrKyOHPmDBaLhSeffJL4eBmDrD+2nLjMP2zMs01HhJW7Iip5bOkM6gPi+PuNubSZLDIvqANIjZi4VnNzMzk5ORw7dozGxkbmzp0r0yb1U1tbGwEBASil+Pjjjzl58iSpqaksWLBAJud2IKkRE9cVFxdHXFwcK1eu5NSpU90jXu/fv5+amhpawidS0OhNWJCfdCjv4cqVK+Tm5pKbm8vWqhDaTCMA2xAU4ckLueWW6QD4+vnJUBRCDJGQkBCWLFnC4sWLOX/+PKGhoYBtgvFNmzYxc+ZMUlJSZPqka5hMJs6fP09ubi7nz5/niSeeYNy4cSxbtozbb79dhgsZZpKICQCCg4NZuHBh92ur1UpGXhUZLb5Y8AY0oDx+TsuCggL2799PaWkpYOtMvHLGWM4da6HdZLUNQTH5syZIGYpCiKHn5eX1uSa01tZWTCYTW7duZdu2bSQkJDB16lRmzZrl0XdcNjc3s337dvLz8zGZTAQHBzN37tzuybhlUm5jSCImerVs2TJ2NkRiOVJif8fWN6DNZCGzoIZRpkri4+O7J+7NyKtym5qfrnNZNHEkySEdFBQUMHv2bKKiojCZTJhMJlasWMH06dO7z3/yZPc5fyFcXUJCAs888wxVVVXk5eVx9uxZduzYwcyZMwG4ePEi3t7ejB071q37lNXX13P+/Hn8/f2ZPXs2AQEBlJeXk5qayrRp00hISHDr83cVkoiJ61qaHMPGnHL7XJY2gb7ezI4N5MMP3wQgMjKS5hETeC1f0WHRLl9jtvVECd977xSdFthw6CJL/S6Q6NvE6NGjiYqKYurUqb3eOi81X0I4F6UUo0ePZvTo0axYsYLGxsbuu8P37NlDSUkJ/v7+jB8/noSEBBITExk9erTBUQ9ebm4uBQUFXLp0iatXrwKQnJzM7Nmz8fHx4dlnn5VO905mUImYUupLwL8AU4H5Wutee6AqpVYDvwa8gT9qrV+wvx8JvAskApeAh7XWDYOJSThOzxH7QwN8u/uI3T51FOkTvsOFCxe4cOECn5yrpcNiuzuwzWRh5+kSgq9c4EJ7MHn1VlakjHG6JEVrTV1dHeXl5ZSXlxMdHc3cuXP5tKieTnveacaLoPFz+cfH5ncX4FKAuRcpwzxHWFhY9/N169Zx8eJFCgsLKSoq4ty5cyQlJfHYY48BcPDgQUaMGMHo0aOJjIx0yv/7lpaW7vLrypUrrF27FoC8vDwuXbpEQkICt956K0lJSd019yBlmDMabI3YGeAB4A/XW0Ep5Q28BKwESoEspdRmrXUe8DywS2v9glLqefvr/zPImIQDXa+mJyoqiqioKBYsWEBUbgXPvX2cdrNtmp7xQR386ZMs9nZOwII372WX8kh8K//ny3cSFhZGY2MjJpOJESNG4ONj+xO8UdNmX5o9e1tHa01LSwtXr15Fa919I8Jf/vIXLl++jNlsBsDX15e5c+cCsGzKaDYeL+/u73Xvgskyxpp7kzLMAwUGBpKSktJdu93Y2EhnZycAHR0d7Nq1C6vVNgKzr68vMTExzJs3j9TUVCwWC9XV1URERODv7z+kiU1HRweNjY1cvXqVxMREfHx8OHr0KPv376elpaV7vaioKDo7O/Hz8+Oee+4Z8riEYw0qEdNan4WbZtjzgUKtdZF93XeAtUCe/ecy+3qvA3uRQszl3DEtlt885vW5ROhyZzCWrDLAVrN0roHuTrLZ2dlkZmYCtgKxwiuaj+uiMWnbzQDPL41hUmAr/v7+5FSZ+e+D9Z9r9kwO6aChoQGz2YzZbOZwSSsvHW+l0wLvZZfyxGQrQQ2FNDY2YrHYqrdiYmJ45plnABg9ejSjRo1i1KhRxMXFERUV1d1PYmVKDL9ZN0f6e3kIKcMEfL62zN/fnx/96EfU1NRQWVlJZWUlVVVV3YlZQ0MDr7zyCmAbmzE0NJSQkBDS09NJSkqisbGREydOEBAQgJ+fH15eXnh5eREfH999IXrp0iXMZjMWiwWTyUR7eztz5swhPDycgoICdu3axdWrV2lvb++O65lnniEmJoYRI0YwefJkoqKiGDNmDLGxsZ+7WJQ7Hl3PcPQRiwNKerwuBRbYn8dorSsAtNYVSqnrDlqilHoaeBqQca6c0LU1Z8unxvLBicruMbSeuX9ZdwGRmppKZGQkjY2NNDU1cfxsJyb92c0AO0+XcqkxB4BDnePosMR0L8ssqOGq6Ry5ubndxzrUOY7OHuucb/Tm7rg4pk6dyogRIxgxYsTnJqRduXJlv85FeLxBl2FSfrmWrsGvuwbA7ikkJISHH36YhoYGmpubaWpqorm5uTuZr6+vZ8+ePV/Y7pFHHiEsLIzKyko++OCDzy1TSpGYmEh4eDi+vr6Eh4cTHx/fXX6FhYV1Ny8mJyeTnCwzcriTmyZiSqmdQG89GH+std7Uh2P0dqnZ71FktdavAK+AbUDE/m4vhlfP/mXX1ix1NWt28RtfxYm3j3cnbY/fMZdlSavo6OhgZ14VP/qogHazfWiIpGgWjI1nxYoV+Pj44OPjw/7CBr7/3unu7dctd92bBYTjOUMZJuWX+wgICGDq1KnXXZ6YmMiPf/xjOjs76ejowGq1orXuHuMsMTGRZ599Fh8fH7y9vfHx8flcU2JiYiKJiYnDcSrCSdw0EdNa3z7IY5QC43q8HguU259XKaVi7VeSsUD1II8lnEhfa5aul7T5+flx/4JQQkJDb9hUuDo1CG8fH2lOFL2SMkwMt66LxKCgoC8s8/PzY+TIkQZEJZzVcDRNZgFJSqnxQBnwKPCYfdlm4AngBfvPvlydCjd0o6StLwmdNCeKISRlmBBiyAxqJDel1P1KqVJgIbBFKbXd/v4YpdRWAK21GXgW2A6cBf6qte7q4PMCsFIpVYDtjqQXBhOPEEL0h5RhQgijyaTfQgiXIJN+CyFc1Y3KL5nbQAghhBDCIJKICSGEEEIYRBIxIYQQQgiDSCImhBBCCGEQScSEEEIIIQwiiZgQQgghhEEkERNCCCGEMIhLjiOmlKoBivu4ehRQO4ThOAs5T/fhCecI/T/PBK119FAFM1z6WX6BZ/w9eMI5gpynO3FY+eWSiVh/KKWy3WEQyJuR83QfnnCO4DnnOVie8HvyhHMEOU934shzlKZJIYQQQgiDSCImhBBCCGEQT0jEXjE6gGEi5+k+POEcwXPOc7A84ffkCecIcp7uxGHn6PZ9xIQQQgghnJUn1IgJIYQQQjglt0vElFJfUkrlKqWsSqnr3tGglFqtlMpXShUqpZ4fzhgdQSkVqZTKUEoV2H9GXGe9S0qp00qpE0qp7OGOcyBu9tkomxfty08ppeYYEedg9eE8lymlrto/uxNKqZ8YEedgKKVeVUpVK6XOXGe5W3yWjuQJZZg7l1/gGWWYJ5RfMExlmNbarR7AVCAZ2AukXWcdb+ACMAHwA04CKUbH3s/z/AXwvP3588B/Xme9S0CU0fH247xu+tkAdwHbAAXcAhwxOu4hOs9lwMdGxzrI81wCzAHOXGe5y3+WQ/A7c/syzF3Lr75+Nq7+d+8p5Zf9PIa8DHO7GjGt9Vmtdf5NVpsPFGqti7TWncA7wNqhj86h1gKv25+/DtxnXCgO1ZfPZi3whrY5DIQrpWKHO9BBcoe/wZvSWu8H6m+wijt8lg7lIWWYu5Zf4BllmKv//fXZcJRhbpeI9VEcUNLjdan9PVcSo7WuALD/HHWd9TSwQyl1TCn19LBFN3B9+Wzc4fPr6zksVEqdVEptU0pNG57QhpU7fJZGcPXfm7uWX+AZZZiUX58Z9Gfp49BwholSaicwupdFP9Zab+rLLnp5z+luH73RefZjN4u01uVKqVFAhlLqnD3Dd1Z9+Wxc4vO7ib6cQw62aTGalVJ3AR8CSUMd2DBzh8+y3zyhDPPQ8gs8owyT8uszg/4sXTIR01rfPshdlALjerweC5QPcp8Od6PzVEpVKaVitdYV9mrQ6uvso9z+s1op9QG2KmVnLsj68tm4xOd3Ezc9B611Y4/nW5VSv1NKRWmt3WkON3f4LPvNE8owDy2/wDPKMCm/PjPoz9JTmyazgCSl1HillB/wKLDZ4Jj6azPwhP35E8AXrqKVUsFKqdCu58AdQK93fjiRvnw2m4Gv2O9WuQW42tXM4UJuep5KqdFKKWV/Ph/b/2vdsEc6tNzhszSCq5dh7lp+gWeUYVJ+fWbwn6XRdyQ4+gHcjy1D7QCqgO3298cAW3usdxdwHtudHz82Ou4BnOdIYBdQYP8Zee15Yruj5aT9kesq59nbZwM8Azxjf66Al+zLT3OdO8uc/dGH83zW/rmdBA4Dtxod8wDO8W2gAjDZ/y+fcsfP0sG/M7cvw9y5/LreZ+Nuf/eeUH7Zz2PIyzAZWV8IIYQQwiCe2jQphBBCCGE4ScSEEEIIIQwiiZgQQgghhEEkERNCCCGEMIgkYkIIIYQQBpFETAghhBDCIJKICSGEEEIYRBIxIYQQQgiD/P+0n1LeHhRZnQAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 720x360 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import jax; jax.config.update(\"jax_enable_x64\", True)\n",
    "from jax import random\n",
    "import jax.numpy as jnp\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "n_oscillator = 100\n",
    "\n",
    "_thetas = jnp.arange(0, 2*jnp.pi, 0.01)\n",
    "thetas_nonsync = random.uniform(random.PRNGKey(0), (n_oscillator,), maxval=2*jnp.pi)\n",
    "thetas_sync = random.normal(random.PRNGKey(1), (n_oscillator,)) * 0.1 + jnp.pi / 3\n",
    "rx_nonsync = jnp.mean(jnp.cos(thetas_nonsync))\n",
    "ry_nonsync = jnp.mean(jnp.sin(thetas_nonsync))\n",
    "r_nonsync = jnp.sqrt(rx_nonsync**2 + ry_nonsync**2)\n",
    "rx_sync = jnp.mean(jnp.cos(thetas_sync))\n",
    "ry_sync = jnp.mean(jnp.sin(thetas_sync))\n",
    "r_sync = jnp.sqrt(rx_sync**2 + ry_sync**2)\n",
    "\n",
    "plt.figure(figsize=(10, 5))\n",
    "plt.subplot(1, 2, 1)\n",
    "plt.xlim(-1.1, 1.1)\n",
    "plt.ylim(-1.1, 1.1)\n",
    "plt.plot(jnp.cos(_thetas), jnp.sin(_thetas), color=\"gray\", ls=\"dashed\", zorder=0)\n",
    "plt.scatter(jnp.cos(thetas_nonsync), jnp.sin(thetas_nonsync), s=10, zorder=10)\n",
    "plt.plot([0, rx_nonsync], [0, ry_nonsync], color=\"gray\", lw=2, zorder=20)\n",
    "plt.scatter([rx_nonsync], [ry_nonsync], color=\"red\", zorder=30)\n",
    "plt.title(f\"Non-synchronized: r={r_nonsync:.3f}\")\n",
    "\n",
    "plt.subplot(1, 2, 2)\n",
    "plt.xlim(-1.1, 1.1)\n",
    "plt.ylim(-1.1, 1.1)\n",
    "plt.plot(jnp.cos(_thetas), jnp.sin(_thetas), color=\"gray\", ls=\"dashed\", zorder=0)\n",
    "plt.scatter(jnp.cos(thetas_sync), jnp.sin(thetas_sync), s=10, zorder=10)\n",
    "plt.plot([0, rx_sync], [0, ry_sync], color=\"gray\", lw=2, zorder=20)\n",
    "plt.scatter([rx_sync], [ry_sync], color=\"red\", zorder=30)\n",
    "plt.title(f\"Synchronized: r={r_sync:.3f}\")\n",
    "plt.show()"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We see that the order parameter is a nice tool to observe the synchronization phenomena.\n",
    "Now we want to know the dependence of the order parameter $r$ on the coupling strength $K$.\n",
    "Let's observe this dependency by numerical simulations."
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## From scratch\n",
    "\n",
    "Let's implement the Kuramoto model from scratch.\n",
    "\n",
    "We first implement the vector field of the Kuramoto model and the order parameter."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "def kuramoto_vector_field(thetas, K, omegas):\n",
    "    coss, sins = jnp.cos(thetas), jnp.sin(thetas)\n",
    "    rx, ry = jnp.mean(coss), jnp.mean(sins)\n",
    "    return omegas + K * (ry * coss - rx * sins)\n",
    "def orderparameter(thetas):\n",
    "    rx, ry = jnp.mean(jnp.cos(thetas)), jnp.mean(jnp.sin(thetas))\n",
    "    return jnp.sqrt(rx**2 + ry**2)"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "```{note}\n",
    "You might notice that the vector field is implemented in a way that is not same as the equation above.\n",
    "This is because the original equation is not suitable for numerical simulations. For each oscillator, we need to calculate $N$ number of sum.\n",
    "Hence the computational cost of the vector field is $\\mathcal{O}(N^2)$, this is not acceptable for large $N$!!!\n",
    "\n",
    "Instead, what we are doing here is to use the mean-field description of the Kuramoto model using the order parameter.\n",
    "By defining the $x$-axis order parameter $r_x=\\sum \\cos\\theta_{j}/N$ and the $y$-axis order parameter $r_y=\\sum \\sin\\theta_{j}/N$, we can rewrite the equation as follows:\n",
    "\n",
    "$$\n",
    "\\frac{\\mathrm{d}\\theta_{i}}{\\mathrm{d}t} = \\omega_{i} + K(r_{y}\\cos\\theta_{i}-r_{x}\\sin\\theta_{i})\n",
    "$$\n",
    "\n",
    "In this formulation, the computational cost is $\\mathcal{O}(N)$, which is super fast compared to the original equation!!!\n",
    "We also note that this formulation is easily vectorized, which is also very important for the performance.\n",
    "```"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Next we implement the numerical integrator for ODEs. Here we use the fourth-order Runge-Kutta method."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "from jax import jit\n",
    "from jax.lax import fori_loop\n",
    "\n",
    "def rk4(func, state, dt):\n",
    "    k1 = func(state)\n",
    "    k2 = func(state + k1 * dt / 2)\n",
    "    k3 = func(state + k2 * dt / 2)\n",
    "    k4 = func(state + k3 * dt)\n",
    "    return state + (k1 + 2 * k2 + 2 * k3 + k4) * dt / 6\n",
    "def run(func, solver, init_state, dt, t_max, observable_fn):\n",
    "    update_fn = jit(lambda state: solver(func, state, dt))\n",
    "    ts = jnp.arange(0, t_max, dt)\n",
    "    n_step = ts.shape[0]\n",
    "    observables = jnp.zeros((n_step, ))\n",
    "    observables = observables.at[0].set(observable_fn(init_state))\n",
    "    def body_fn(i, val):\n",
    "        state, _observables = val\n",
    "        new_state = update_fn(state)\n",
    "        _observables = _observables.at[i].set(observable_fn(new_state))\n",
    "        return new_state, _observables\n",
    "    final_state, observables = fori_loop(1, n_step, body_fn, (init_state, observables))\n",
    "    return ts, observables, final_state"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now all the ingredients are ready. Let's run the simulation.\n",
    "In many research papers, natural frequencies $\\omega_{i}$ are chosen randomly from some distribution.\n",
    "In this example, let's set the distribution to the normal distribution with mean zero and standard deviation one.\n",
    "We also set the initial phases $\\theta_{i}$ to be uniformly distributed on the circle.\n",
    "\n",
    "The setting is:\n",
    "- $N=100$ oscillators\n",
    "- $K=1.0$ coupling strength\n",
    "- $\\omega_{i}\\sim\\mathcal{N}(0,1)$\n",
    "\n",
    "We run the simulation from $t=0$ to $t=20$ with the time step $dt=0.01$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "n_oscillator = 10**2\n",
    "K = 1.0\n",
    "omegas = random.normal(random.PRNGKey(0), (n_oscillator,))\n",
    "init_thetas = random.uniform(random.PRNGKey(1), (n_oscillator,), maxval=2*jnp.pi)\n",
    "\n",
    "dt, t_max = 0.01, 20.0\n",
    "ts, orderparams, final_thetas_0 = run(lambda thetas: kuramoto_vector_field(thetas, K, omegas), rk4, init_thetas, dt, t_max, orderparameter)"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's visualize the time evolution of the order parameter $r$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.xlim(0, t_max)\n",
    "plt.ylim(0, 1.0)\n",
    "plt.xlabel(\"Time\")\n",
    "plt.ylabel(\"Order parameter\")\n",
    "plt.plot(ts, orderparams)\n",
    "plt.show()"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "It seems like the order parameter $r$ is not changing much.\n",
    "The coupling strength $K$ is too small that the oscillators are not synchronized.\n",
    "Next, let's increase the coupling strength $K$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "K = 3.0\n",
    "ts, orderparams, final_thetas_1 = run(lambda thetas: kuramoto_vector_field(thetas, K, omegas), rk4, init_thetas, dt, t_max, orderparameter)\n",
    "\n",
    "plt.xlim(0, t_max)\n",
    "plt.ylim(0, 1.0)\n",
    "plt.xlabel(\"Time\")\n",
    "plt.ylabel(\"Order parameter\")\n",
    "plt.plot(ts, orderparams)\n",
    "plt.show()"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Wow, the oscillators are synchronized! The order parameter $r$ is close to one.\n",
    "Let's observe the final state of the oscillators for $K=1.0$ and $K=3.0$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 720x360 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "n_oscillator = 100\n",
    "\n",
    "_thetas = jnp.arange(0, 2*jnp.pi, 0.01)\n",
    "rx_nonsync = jnp.mean(jnp.cos(final_thetas_0))\n",
    "ry_nonsync = jnp.mean(jnp.sin(final_thetas_0))\n",
    "r_nonsync = jnp.sqrt(rx_nonsync**2 + ry_nonsync**2)\n",
    "rx_sync = jnp.mean(jnp.cos(final_thetas_1))\n",
    "ry_sync = jnp.mean(jnp.sin(final_thetas_1))\n",
    "r_sync = jnp.sqrt(rx_sync**2 + ry_sync**2)\n",
    "\n",
    "plt.figure(figsize=(10, 5))\n",
    "plt.subplot(1, 2, 1)\n",
    "plt.xlim(-1.1, 1.1)\n",
    "plt.ylim(-1.1, 1.1)\n",
    "plt.plot(jnp.cos(_thetas), jnp.sin(_thetas), color=\"gray\", ls=\"dashed\", zorder=0)\n",
    "plt.scatter(jnp.cos(final_thetas_0), jnp.sin(final_thetas_0), s=10, zorder=10)\n",
    "plt.plot([0, rx_nonsync], [0, ry_nonsync], color=\"gray\", lw=2, zorder=20)\n",
    "plt.scatter([rx_nonsync], [ry_nonsync], color=\"red\", zorder=30)\n",
    "plt.title(f\"K=1.0: r={r_nonsync:.3f}\")\n",
    "\n",
    "plt.subplot(1, 2, 2)\n",
    "plt.xlim(-1.1, 1.1)\n",
    "plt.ylim(-1.1, 1.1)\n",
    "plt.plot(jnp.cos(_thetas), jnp.sin(_thetas), color=\"gray\", ls=\"dashed\", zorder=0)\n",
    "plt.scatter(jnp.cos(final_thetas_1), jnp.sin(final_thetas_1), s=10, zorder=10)\n",
    "plt.plot([0, rx_sync], [0, ry_sync], color=\"gray\", lw=2, zorder=20)\n",
    "plt.scatter([rx_sync], [ry_sync], color=\"red\", zorder=30)\n",
    "plt.title(f\"K=3.0: r={r_sync:.3f}\")\n",
    "plt.show()"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We have been using the from-scrtach implementation of the Kuramoto model.\n",
    "This package, `jaxkuramoto`, provides the same implementation as above with few lines of code."
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Use `jaxkuramoto` instead\n",
    "\n",
    "We introduce `jaxkuramoto` package, which provides the Kuramoto model and the numerical integrator.\n",
    "There are mainly three steps to use `jaxkuramoto`:\n",
    "1. Define the distribution of the natural frequencies\n",
    "2. Define the model\n",
    "3. Run the simulation"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Define the distribution of the natural frequencies\n",
    "In many research papers, natural frequencies $\\omega_{i}$ are chosen randomly from some distribution.\n",
    "`jaxkuramoto` provides several distributions, and also allows you to define your own distribution.\n",
    "If you want to use the normal distribution, you can do as follows."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "from jaxkuramoto.distribution import Normal\n",
    "\n",
    "dist = Normal(0.0, 1.0)\n",
    "omegas = dist.sample(random.PRNGKey(0), (n_oscillator,))"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We are also creating other distributions. Check out [here](../distributions) for more details!!"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Define the model\n",
    "Now we define the model.\n",
    "We have `Kuramoto` class, which takes the natural frequencies and the coupling strength as arguments."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "from jaxkuramoto import Kuramoto\n",
    "\n",
    "K = 3.0\n",
    "model = Kuramoto(omegas, K)"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Run the simulation\n",
    "\n",
    "```{warning}\n",
    "Currently, we are using `jaxkuramoto.odeint` for integrating ODEs.\n",
    "This is because other ODE libraries are not supporting `observable_fn` option.\n",
    "However, [`diffrax`](https://github.com/patrick-kidger/diffrax), numerical differentiation library for JAX, is currently implementing this functionality and will be released in the future.\n",
    "We will switch to `diffrax` when it is released.\n",
    "See [this issue](https://github.com/patrick-kidger/diffrax/issues/221) and [this pull request](https://github.com/patrick-kidger/diffrax/pull/220) for more details.\n",
    "```\n",
    "\n",
    "That's it! Now we can run the simulation.\n",
    "We can also specify the numerical integrator, the initial time, the final time, and the time step.\n",
    "`Kuramoto` class has `vector_fn` method, which returns the vector field of the Kuramoto model, and `orderparameter` method, which returns the order parameter $r$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "from jaxkuramoto.solver import runge_kutta\n",
    "from jaxkuramoto import odeint\n",
    "\n",
    "t0, t1, dt = 0.0, 20.0, 0.01\n",
    "init_thetas = random.uniform(random.PRNGKey(1), (n_oscillator,), maxval=2*jnp.pi)\n",
    "sol = odeint(model.vector_fn, runge_kutta, t0, t1, dt, init_thetas, model.orderparameter)"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "`odeint` returns the solution of the ODEs, which is a `Solution` class.\n",
    "Let's visualize the time evolution of the order parameter $r$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.xlim(0, t_max)\n",
    "plt.ylim(0, 1.0)\n",
    "plt.xlabel(\"Time\")\n",
    "plt.ylabel(\"Order parameter\")\n",
    "plt.plot(sol.ts, sol.observables)\n",
    "plt.show()"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "`Solution` class also has a `final_state` attribute, which returns the final state of the system."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAUsAAAE/CAYAAADPBOFJAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAA8W0lEQVR4nO3deXgU15no/+/brQVtCCGBQEIIgQRmscAggzHYmLCY4AU7tmMb29jZHMfjZJI7yYwzub9Mnsn9zc1MMpNJvI5jO/GCl0DigA0YY7xgwGYR+yZLiE1oRRtoAanV5/7RLbkttLTU3aqW+v08Tz/qrqpT5221+tWpOlXniDEGpZRSXbNZHYBSSvUHmiyVUsoLmiyVUsoLmiyVUsoLmiyVUsoLmiyVUsoLmiyVUsoLmiyV10TkpIgs9Hh9j4hUi8i8HuwjSUS2iUiliNSIyKciMqeL7SNF5EUROS8ipSLyv3x9Hz2IdYGIHBORBhH5UETSu9h2ooh8ICK1IlIgIrd7rIsQkdXu358RkRvalf2FiDSLSJ3HY2zg3pnqDU2WqldE5EHgKeAmY8zHPShaB3wTGAYkAP8OvC0iYZ1s/wsgC0gH5gP/KCJLehlzZ3V0tG0S8Ffg/wOGAruBN7vY7xrgHfe2DwOvish4j822AvcDpZ1U+aYxJtbjUehtrKpvaLJUPSYiDwP/CdxojNnek7LGmIvGmDxjjBMQoAVX0hzaSZEVwC+NMdXGmKPAH4CHvIzzBhEpEpF/EpFS4I89CPVrwGFjzCpjzEVcSXuqiFzRwbZXACnAb40xLcaYD4BtwAMAxpgmY8x/G2O24nq/qh/SZKl66nvAL4EFxpjdnivch9WdPR5vt+0B4CKwFnjeGFPeviIRScCVhPZ7LN4PTPbcj4gs7yLeEbgScTrwsIiM7ibO1n1N9qzXGFMPHPes2zPUTpZN6SKu9m4RkSoROSwi3+tBOdVHvD4sUcptEfAhcLD9CmPMEG93YozJFpFBwO1ARCebxbp/1nosqwXiPPfTTVVO4F+MMZfcr08D3sQZC1S0W/aluj0cA8qBn4jIb3GdLpiH6/fkjT8DzwFlwCzgLyJSY4x53cvyqg9oy1L11CPAeOB5EemoReU19yH568DjIjK1g03q3D8HeywbDFzoQTUV7sPonqprV2+ndRtjmoHbgJtwnZP8B1wJsMibiowxR4wxxe5D+O3A74A7exGzCiBNlqqnyoEFwHXA054r2vXmtn/8cxf7DAcu6/01xlQDJYBnIp0KHO5BvF8aVst9GN5VnPe5Nz3sWa+IxADjOqvbGHPAGDPPGJNojLnR/X529iDO9jH79I9I+Z8ehqseM8YUi8hXgC0i8ltjzI/cy2O7KYqIXIPr724nYAd+ACQDOzop8jLwv0Vkt3u77wDf8CH203xxeN+Vt4Bfi8gdwDrg58ABY8yxjjYWkWzgc1wNkEeBkcCfPNZH8kUCjHCfgrhkjDEisgzYAtQAV+P6nXT1z0VZQFuWqleMMWeArwB3isj/7UHRSFyXHFUCZ4GluC4/KgYQkftExLP19i+4OlZOAR8DvzbGvNu60t0hch9+ZoypAO4A/n+gGte5xHs86v1nEdngUeQBXK3g1pb3Io/zpAB5QCOQCmx0P2+9bvMeoADXIf7LwL8bY17y93tSvhEd/FcppbqnLUullPKCJkullPKCJkullPKCJkullPKCJkullPJCv7zOMikpyYwZM8bqMJRSA0xubu45Y8ywjtb1y2Q5ZswYdu/e3f2GSinVAyJyqrN1ehiulFJe0GSplFJe0GSplFJe0GSplFJe0GSplFJe0GSplFJe0GSplFJe8EuydM/rXC4ihzpZLyLye/d8ygdEZLrHuiUikude93hH5ZVSymr+aln+CehqLuev4pr7OQvXnMrPAIiIHddAsF8FJgH3isgkP8WklFJ+45c7eIwxW0RkTBebLANeNq6Rhj8TkSEiMhIYAxS0TigvIm+4tz3ij7jUwNfU1ERlZSVNTU1tD6fTyejRo4mPj+f8+fMUFBRgs9kICwtre6SkpBAdHY3D4cDhcBAZGYmP86+pAa6vbndMBc54vC5yL+to+ayOdiAiD+NqlTJ69OjARKmCgsPhwOl0EhERQV1dHZ999hm1tbXU1dVRX19PfX09N954I9nZ2ZSVlfHiiy9eto+77rqL+Ph4KioqePvtty9bf99995GZmUl+fj5//vOfEREGDRpEbGwsgwcP5sYbb2TYsGFUV1dTWVlJYmIi8fHx2Gx6mj9U9VWy7Ohfdmcz2HU4z4Ux5jlccyuTk5Ojc2EMEA6HgyNHjlBRUdH2qK6uZv78+Vx33XU4nU4+/fRTBg8eTFxcHImJiYwePZohQ4YAkJSUxN13301ERETbw263ExvrmpNs9OjR/PCHP8TpdLa1Ih0OB0lJSQAMHz6cxYsX09jYSGNjI/X19Zw/f74tKX7++ee8+65ryh+73c7QoUNJTExk6dKlxMXF0dzcTFhYmLZKQ0BfJcsiIM3j9SigGIjoZLkaYIwxVFVVUVRURHFxMUOHDmXWrFmICGvWrAFg6NChjBgxgilTptA6qlRcXBw/+9nPOm3RRUVFccUVV3Rab3h4OPHx8Z2uT0xMZPbs2Z2uz87OZsSIEVRWVlJZWUlVVRVVVVUMGjQIgA8//JDc3FySk5NJSUkhLS2NtLQ0Bg9uP+W46u/6KlmuBR5zn5OcBdQaY0pEpALIEpEMXDP93QMs76OYVB955513OHbsGPX19YArgU2d6pqS22638+ijjzJkyBDsdvtlZUXE0lZbVFQU6enppKend7h+7NixtLS0UFpaSm5uLjt27CAqKoqf/OQniAinT58mLi6OhISEPo5c+ZtfkqWIvA7cACSJSBGu6UvDAYwxzwLrcU15WgA04J732RjjEJHHcE0NagdeNMZ0OIm9Cn4XL17k+PHj5OfnU11dzTe+4ZreW0QYN24co0ePJi0tjaSkpC+1FBMTE60K2WeZmZlkZmYC0NLSQllZGefPn29L8GvWrKGqqoqEhATGjh3b9mhtmar+o19OhZuTk2N0PMvgcezYMT799FPOnDmDMYaoqCgyMzNZtmxZh63FUHLu3DkKCwspLCzkxIkTNDU1kZ2dze233w5AXV1d2/lVZT0RyTXG5HS0rl8O/qusVV1dzZEjR5gyZQrx8fE0NzfT1NTE3LlzycrKIjU1VXuN3ZKSkkhKSmLmzJm0tLRQVFREZGQkABUVFTz99NOkpqYyefJkpkyZQlxcnMURq85oy1J5pbGxkcOHD7Nv3z7Onj0LwLJly5g2bRrGGO0N7oULFy6wd+9ejh49SmlpKSJCRkYGN910E0OHDrU6vJCkLUvlk0uXLvHb3/6W5uZmhg8fzsKFC5k8eXLb5TuaKHsnLi6O66+/nuuvv56KigoOHjzIsWPHiImJAeDkyZOEhYWRmpqqv+MgoC1LdZnGxkb27t1LZWUlt9xyCwC7du0iNTWVkSNH6he3j/zxj3/k9OnTJCcnM336dLKzs7VjKMC6allqslRtSktL2blzJwcPHsThcJCens79999PWJgegFjh0qVLHDp0iNzcXEpKSoiIiGD+/Plcc801Voc2YOlhuOrWgQMHeOuttwgLCyM7O5urr76aESNGWB1WSIuMjGTGjBnMmDGD4uJiduzY0dZzfvHiRc6dO8eoUaMsjjJ0aMsyRBljyMvLIyIigrFjx9LY2Ehubi4zZswgKirK6vBUN7Zv386mTZsYM2YM8+bNa7vjSflGW5aqTWuS/PDDDykvL+eKK65g7NixREVFMXfuXKvDU17KycnBZrOxbds2XnrpJdLT07n++usZO3as1aENWJosQ8jJkyfZtGlT273Zt99+O1OmTLE6LNULERERXHPNNcyYMYM9e/awbds2tm3bpskygDRZhpCqqirq6+u59dZbmTp1ql44PgCEh4cza9YsZsyYQUNDAwC1tbVs2rSJ+fPn9+tbSYONJssB7MKFC2zevJnU1FSuvvpqpk2bRnZ2tvZuD0BhYWFtIx2VlpaSn5/PkSNHmDFjBjfccEPbtZuq9/RbMwA1Nzfz6aefsnXrVpxOZ1vrwmazaWsyBEyYMIHvf//7bNmyhdzcXA4dOsSCBQvIyemw30J5SZPlAHPq1CnWrFlDdXU1EydOZNGiRTo8WAiKjY1l6dKlXH311WzYsIGzZ89qsvSRJssBxul0YrPZWLFiBRkZGVaHoyw2bNgwHnjgAVpaWgAoLi5m9+7dLF68WO8G6iFNlv2cMYY9e/ZQV1fHvHnzyMjI4NFHH9XDbdVGRNrOUxcXF7Nv3z4KCgq46aabmDBhgsXR9R+aLPux8+fPs3btWo4fP87YsWPbWpWaKFVncnJySElJYe3atbzxxhtMmTKFJUuWaAeQFzRZ9kPGGA4ePMiGDRtoaWlh6dKl5OTk6AAXyispKSl85zvfYevWrWzZsoVhw4Zx/fXXWx1W0NNk2Q/V1tayZs0aUlNTue2223TsQ9VjdrudefPmMXny5LYOwPLychISEggPD7c4uuCkybIfqa6uJiEhgSFDhvCNb3yDlJQUPeRWPmmdEtjhcPDqq68SGRnJHXfcoYOodEC/af2AMYatW7fyxBNPcOzYMQBGjRqliVL5TVhYGMuWLePixYs8//zz5Obm0h8H2Qkk/bYFuYaGBlauXMnmzZuZNGmSji6jAmbcuHF873vfY8yYMbzzzjusWbMGh8NhdVhBw19T4S4BfodrOtvnjTG/arf+J8B9HnVOBIYZY6pE5CRwAWgBHJ0NjxSKSktLefPNN7lw4QI333wz06dP104cFVDR0dEsX76cLVu2UFpaGvKzc3ryOVmKiB14ClgEFAG7RGStMeZI6zbGmF8Dv3ZvfwvwI2NMlcdu5htjzvkay0BTXl5OS0sLDz30kA7yqvqMzWbjhhtuaJuI7vz585w7dy7kRzTyR8tyJlBgjCkEEJE3gGXAkU62vxd43Q/1DkjGGEpLSxk5ciTZ2dlMmDChbepUpfpS61HM5s2bOXjwIEuWLGHmzJkWR2Udf5yzTAXOeLwuci+7jIhEA0uAv3gsNsB7IpIrIg/7IZ5+y+FwsHr1al544QVqamoANFEqyy1dupSsrCw2bNjAunXrcDqdVodkCX+0LDs6idZZN9otwLZ2h+BzjDHFIjIc2CQix4wxWy6rxJVIHwYYPXq0rzEHnYaGBt544w3OnDnDokWLiI+PtzokpQDXP+y7776b999/n08//ZTq6mq+/vWvExERYXVofcofLcsiIM3j9SiguJNt76HdIbgxptj9sxx4C9dh/WWMMc8ZY3KMMTnDhg3zOehgUlVVxQsvvEBxcTF33nkn1157rXbkqKBis9lYvHgxt9xyC/X19W0Dc4QSf7QsdwFZIpIBnMWVEJe330hE4oF5wP0ey2IAmzHmgvv5YuBf/RBTv7Jv3z4aGxt58MEHSUtL676AUhaZPn0606ZNw2az4XA4qK+vD5mjIJ+TpTHGISKPARtxXTr0ojHmsIg84l7/rHvT24H3jDH1HsWTgbfcragw4DVjzLu+xtRftA58MX/+fHJyctpGulYqmLXeDLFu3TqOHz/O/fffz/Dhwy2OKvB0KlyLnDhxgvXr13PfffcxZMgQq8NRqsfKy8t59dVXcTgcrFixYkDcItnVVLh6B48FCgoKWLlyJSKiF/2qfmv48OE89NBDhIeH8/LLL1NSUmJ1SAGlybKPFRYW8sYbbzBs2DAeeugh4uLirA5JqV4bOnQoDz30EBEREaxatWpAd/zoqEN9qKioiNdff53ExEQeeOABoqOjrQ5JKZ8lJCTw0EMP0djYOKCPlLRl2YeSkpKYMmUKK1as0ESpBpQhQ4YwcuRIAD777DPOnRt4dy9rsuwDlZWVNDc3M2jQIJYtW6ZD+KsBq6Ghga1bt/LKK6+03YU2UGiyDLDq6mr+9Kc/sXbtWqtDUSrgoqOjeeCBB2hqauKVV16hrq7O6pD8RpNlANXX17ddWqFznKhQkZyczPLly7lw4QKvvfYaTU1NVofkF5osA6SpqYnXXnuN8+fPs3z5cgbaLZpKdSUtLY0777yTsrIyTpw4YXU4fqG94QGyYcMGSkpKuPvuu/UWRhWSxo8fzw9+8IMBczukJssAmTNnDunp6TqJvQpprYkyPz+fmpoarr76aosj6j1Nln5WUVFBUlJS20Mp5Ros5ujRoyQlJZGRkWF1OL2i5yz96OzZs/zP//wP27dvtzoUpYLKrbfeSlJSEqtWreq3lxRpsvSThoYGVq1aRWxsLFdddZXV4SgVVFoHEHY6nbz55ps0NzdbHVKPabL0A2MMf/vb36irq+PrX/+63p2jVAcSExP52te+RmlpKQcOHLA6nB7Tc5Z+sHXrVvLz81m6dCkpKSlWh6NU0Bo/fjzf/va3++X3RJOlH4wYMYKrr76anByd8lyp7qSmuuYzrKysBFwtzv5Ak6UPWudVzsrKIisry+pwlOo3nE4nr776KpGRkXz7298mLCz4U5Ges+yl1vOU27ZtszoUpfodm83G0qVLKSsr47333rM6HK9osuylgwcPcuDAgZCdQ1kpX2VlZTFr1ix27dpFYWGh1eF0S5NlL9TU1LB+/XpGjx7NnDlzrA5HqX5rwYIFJCYmsmbNGi5evGh1OF3SZNlDxhjeeecdnE4nt912W9tMd0qpngsPD+e2225jwoQJQf9dCv6zqkGmtLSUwsJCbrzxRhISEqwOR6l+b9SoUYwaNcrqMLrll1QuIktEJE9ECkTk8Q7W3yAitSKyz/34ubdlg83IkSN55JFH+vWAAEoFo7Nnz7Jy5cqgHf/S52QpInbgKeCrwCTgXhGZ1MGmnxhjprkf/9rDskGhvLwccE0BGuyHDEr1Nw6Hg4KCArZs2WJ1KB3yxzd+JlBgjCk0xjQBbwDL+qBsnyosLOSZZ54hLy/P6lCUGpDS09OZNm0an376aVvDJJj4I1mmAmc8Xhe5l7U3W0T2i8gGEZncw7KWamlpYcOGDSQkJDBu3Dirw1FqwFq0aBGRkZGsW7cOY4zV4XyJP5KldLCs/bvcA6QbY6YCTwB/60FZ14YiD4vIbhHZXVFR0dtYe2Xnzp2cO3eOG2+8sV/caaBUfxUdHc3ChQs5ffo0R48etTqcL/HHN78I8Jw3YRRQ7LmBMea8x/P1IvK0iCR5U9aj3HPAcwA5OTl99i+nrq6Ojz/+mMzMTMaPH99X1SoVsq666irCw8ODbpYBf7QsdwFZIpIhIhHAPcCX5n0VkREiIu7nM931VnpT1molJSXY7XaWLFmC+y0opQJIRLjyyiux2+1BdSjuc7I0xjiAx4CNwFHgz8aYwyLyiIg84t7sTuCQiOwHfg/cY1w6LOtrTP6UlZXFj370o34zMopSA8Xx48d58skng2bucb+cgDPGrAfWt1v2rMfzJ4EnvS0bLE6fPk1aWpqep1TKAkOGDKGmpoaPPvqIm2++2epw9HbHzhQVFfHHP/6R3bt3Wx2KUiEpMTGRGTNmsHfvXqqrq60OR5NlZzZv3kxMTAxTp061OhSlQtZ1112HzWYLigvVNVl24NSpU5w8eZK5c+cSERFhdThKhay4uDhycnLYv3+/5bNC6sm4DnzyySfExMQwY8YMq0NRKuTNmTOHzMxM4uPjLY1Dk2U7Fy9epLKyktmzZxMeHm51OEqFvNjYWGJjY60OQ5Nle4MGDeKxxx4Lquu7lFLw/vvvA7Bw4UJL6tdzlh4aGxtxOBzY7Xa9XEipIFNfX8+OHTtoaGiwpH5Nlh42b97ME088QUtLi9WhKKXamT17Ng6Hg127dllSvyZLt8bGRg4cOMDYsWOx2+1Wh6OUamf48OFkZWWxc+dOHA5Hn9evydJtz549NDc3c80111gdilKqE9dccw0NDQ0cOXKkz+vWZIlrwvedO3eSkZFBcnKy1eEopTqRkZHBtddea8n3VHsxgJMnT3L+/HmWLFlidShKqS6ICIsWLbKkbm1Z4vpv9c1vflPHq1SqnyguLubAgQN9WqcmS1z/rdLS0rRjR6l+YufOnaxbt47m5uY+qzPkk+WuXbtYt24dTqfT6lCUUl6aOnUqTU1NfTqBoCbLXbsoKyvTqW2V6kfGjBnD4MGD+/RQPKQzRHl5ORUVFVx55ZVWh6KU6oHWqScKCgr6bCT1kE6Whw4dQkSYNGmS1aEopXooOzubyMjIPptjPGQvHTLGcPjwYTIyMoiJibE6HKVUDw0fPpwf//jHfdYxG7LJ0uFwkJGRwZgxY6wORSnVS60zQBpjAt7vELKH4eHh4dx8881MmTLF6lCUUr1UX1/Pk08+yd69ewNeV8gmy7KyMh2zUql+Ljo6GmMMx44dC3hdfkmWIrJERPJEpEBEHu9g/X0icsD92C4iUz3WnRSRgyKyT0T6ZCrF2tpann32WXbs2NEX1SmlAkREuOKKKygsLOTSpUsBrcvnZCkiduAp4KvAJOBeEWnfvXwCmGeMyQZ+CTzXbv18Y8w0Y0yOr/F4Iz8/H4DMzMy+qE4pFUDjx4/H6XRy8uTJgNbjj5blTKDAGFNojGkC3gCWeW5gjNlujGmd+PczYJQf6u21zz//nISEBBITE60MQynlB2lpaYSHh3P8+PGA1uOPZJkKnPF4XeRe1plvARs8XhvgPRHJFZGH/RBPl1paWjh58iSZmZmISKCrU0oFmN1uZ/78+QE/UvTHpUMdZZwOe05EZD6uZDnXY/EcY0yxiAwHNonIMWPMZTOquxPpwwCjR4/udbDFxcU0NzfrJUNKDSCzZ88OeB3+aFkWAWker0cBxe03EpFs4HlgmTGmsnW5MabY/bMceAvXYf1ljDHPGWNyjDE5w4YN63WwycnJLF++nLFjx/Z6H0qp4GKMabt9OVD8kSx3AVkikiEiEcA9wFrPDURkNPBX4AFjzOcey2NEJK71ObAYOOSHmDoVERFBVlYWgwYNCmQ1Sqk+9tJLL7Ft27aA7d/nw3BjjENEHgM2AnbgRWPMYRF5xL3+WeDnQCLwtPs8ocPd850MvOVeFga8Zox519eYOtPS0sLWrVuZMmWKdu4oNYC0jkl75syZ7jfuJb/c7miMWQ+sb7fsWY/n3wa+3UG5QmBq++WBUl5ezkcffURiYqImS6UGmLS0NPLy8qirqyM2Ntbv+w+pO3jOnj0LQGpqV531Sqn+KC3N1XUSqNZlyCXL6OhohgwZYnUoSik/S0lJwWaztTWK/C2kRh0qLi4mJSVFr69UagAKCwtjxYoVJCUlBWT/IdOydDgcVFVVkZKSYnUoSqkASU9PD9j4tCHTsgwLC+OnP/0pDofD6lCUUgFSU1PDoUOHmD59OtHR0X7dd8i0LAFsNhsRERFWh6GUCpCamho2b95McfFl98X4LGSSZW5uLhs3brQ6DKVUACUnJwME5E6ekDkM//zzz6mpqbE6DKVUAEVFRREVFUVlZWX3G/dQyLQsKyoq8OWecqVU/zB06FCqqqr8vt+QSJZOp5Pa2lq9vlKpEJCYmEh1dXX3G/ZQSByG19XV4XQ6NVkqFQKWLFkSkI7ckEiWjY2NxMfHk5CQYHUoSqkAi4qKCsh+Q+IwPDk5mR/+8IeMGzfO6lCUUgFWW1vL+vXrKSsr8+t+QyJZKqVCR3NzM7t27dJk2Rvbt2/nz3/+s9VhKKX6QFxcHAAXLlzw635DIlmWlJRQWlpqdRhKqT4QGRlJRESEJsveaGhoCNjN9Uqp4BMTE0NDQ4Nf9xkSybK+vl6TpVIhJDo6GqfT6dd9hsylQyNHjrQ6DKVUH/nWt77l93FrQ6JlmZSUpHPuKBVCAjHAd0i0LB944AGrQ1BK9aF9+/Zx+vRpbr31Vr/tMyRalkqp0FJcXMzRo0f9uk+/JEsRWSIieSJSICKPd7BeROT37vUHRGS6t2V9denSJZ555hkOHjzo710rpYKU3W73ewePz8lSROzAU8BXgUnAvSIyqd1mXwWy3I+HgWd6UNYnzc3NlJeXc/HiRX/uVikVxGw2Gy0tLf7dpx/2MRMoMMYUGmOagDeAZe22WQa8bFw+A4aIyEgvy/qFzuioVOiw2+1BmSxTAc9ZzYvcy7zZxpuyPjHG+HN3Sql+ICoqiri4OL8eivujN7yjJlv7DNXZNt6Ude1A5GFch/CMHj26J/EppULM7NmzmT17tl/36Y+WZRGQ5vF6FNB+arXOtvGmLADGmOeMMTnGmJyeTA9ht9vJyMhou7leKTXw1dTUUFRU5Nd9+iNZ7gKyRCRDRCKAe4C17bZZC6xw94pfA9QaY0q8LOuT6OhoVqxYwYQJE/y5W6VUENu1axcvvfSSX/fp82G4McYhIo8BGwE78KIx5rCIPOJe/yywHlgKFAANwDe6KutrTEqp0NbS0oLdbvfrPv1yB48xZj2uhOi57FmP5wb4O2/L+pMxhieffJKcnBy/n8NQSgWnQCTLAX8Hj4hQW1tLXV2d1aEopfqIw+EgLMy/d3MP+GQJEB4eTnNzs9VhKKX6SGNjo98nLguJgTQiIyO5dOmS1WEopfrIdddd5/fvfEgky+joaL+PmqyUCl6pqX69twUIkWSZmZmptzsqFUIKCgqIj4+nJ9dkdyckzll+5StfYf78+VaHoZTqA8YY3nzzTfbu3evX/YZEsgS9R1ypUHHx4kUcDoff79oLiWS5Z88e/u3f/k07eZQKAefPnwdg8ODBft1vSCTLyMhIHA4HNTU1VoeilAqw1vnCtWXZC/Hx8QCaLJUKAYFqWYZEb/iQIUMAqK2ttTYQpVTATZw4kSFDhvi9ZRkSyTImJoawsDBtWSoVAqKiohg7dqzf9xsSh+EiwsyZMwNyoapSKrjs3buXM2fOdL9hD4VEyxJg0aJFVoeglAowYwwbNmxg+vTppKWldV+gB0KiZQmuX2J9fb3fJzFSSgWPCxcu0NzcTGJiot/3HTLJ8tixY/zmN7+hoqLC6lCUUgFSVlYG4NfbHFuFTLJs/U9TXl5ucSRKqUApLS0FYMSIEX7fd0gly7CwMEpKSqwORSkVIOXl5QwZMoRBgwb5fd8h08Fjt9sZMWIExcUdTh6plBoAbr/99rY7ePwtZFqWACkpKZSUlPh14nWlVPCw2Wxtd+z5W8i0LAGys7NJSUnB6XRis4XU/wmlBryioiL279/PvHnziI2N9fv+QypjpKamMnXqVL9PZKSUsl5+fj65ubmEh4cHZP8+JUsRGSoim0Qk3/0zoYNt0kTkQxE5KiKHReTvPdb9QkTOisg+92OpL/F449y5cxQWFga6GqVUHztz5gzJyclERkYGZP++tiwfBzYbY7KAze7X7TmAfzDGTASuAf5ORCZ5rP+tMWaa+xGw+cNbffDBB7z99tuBrkYp1YdaWlooKipi9OjRAavD12S5DHjJ/fwl4Lb2GxhjSowxe9zPLwBHActu0k5PT6empkYH1VBqACktLaW5udnvtzh68jVZJhtjSsCVFIHhXW0sImOAq4AdHosfE5EDIvJiR4fx/jZmzBgATp48GeiqlFJ9pK6ujri4ODIyMgJWR7c9HSLyPtDR5fA/60lFIhIL/AX4oTHmvHvxM8AvAeP++Z/ANzsp/zDwMOBTU3v48OFER0dz4sQJpk2b1uv9KKWCx4QJExg/fnxAZ3HtNlkaYxZ2tk5EykRkpDGmRERGAh3eSygi4bgS5UpjzF899l3msc0fgHe6iOM54DmAnJycXs8+JiKMGzeOwsJCjDE6Ra5S/VzrZISB/i77ehi+FnjQ/fxBYE37DcT1Dl4Ajhpj/qvdupEeL28HDvkYj1cWLFjAo48+qolSqQEgLy+P//7v/6aysjKg9fiaLH8FLBKRfGCR+zUikiIirT3bc4AHgK90cInQf4jIQRE5AMwHfuRjPF6Jj48nKiqqL6pSSgVYfn4+Fy9ebJs+JlB8ujrbGFMJLOhgeTGw1P18K9BhE84Y84Av9fvi0KFDnDhxgltuucWqEJRSPnI6neTl5ZGVlYXdbg9oXSF1B4+n2tpa9uzZo5cQKdWPnTlzhvr6eiZOnBjwukI2WU6a5Lou/vDhwxZHopTqraNHj2K328nMzAx4XSGbLBMSEkhJSdFkqVQ/NmHCBBYtWhSwWxw9hWyyBJg8eTIlJSVUVVVZHYpSqhcyMjKYNWtWn9QV8skyPT2dixcvWh2KUqqHjhw50qfTxIR0soyPj+ehhx4iJSXF6lCUUj3gcDhYu3Yt27Zt67M6QzpZtmpoaKC2ttbqMJRSXsrLy+PSpUtMnTq1z+oM+WTZ0tLCP/zXSzz24hY2HSnrvoBSynL79+8nLi6ubWCcvhDyyfKDvHO835DGJ2U2vv/6Hk2YSgW5mpoa8vPzmTZtWp9ODxPyyfKT/Aqana4bjC42O/kkv8LiiJRSXSkuLiYiIoIZM2b0ab0hnyyvyxpGVLjrNikbTk5XNWjrUqkgNmnSJH784x8HbBbHzoR8slw0KZnf33sVM0a6Lmr9KK+CH7y+VxOmUkHo0qVLAAGblKwrIZ8swZUwJ44ejtP962hsbtHDcaWCjDGGV155hdWrV1tSvyZLt3kTktsOx6PC7VyXNcziiJRSnk6dOsXZs2f7tAfckyZLt0WTkvndPdOYM9zBA5kOFk1KtjokpZSHbdu2ERMT06fXVnrSZOlh8eQR3DvejvPMPs6fP999AaVUnygrK6OgoICZM2dacr4SNFleZs6cOTidTrZv3251KEopt927dxMeHs7VV19tWQyaLNtJSEggOzub3Nxc6uvrrQ5HKQUsXryY++67z9LpYDRZdmDu3Lk4HA4+++wzq0NRKuQZYwgPDyc9Pd3SODRZdiApKYmvfe1rzJ492+pQlApppaWlPPHEExQXF1sdim8Tlg1kV155pdUhKBXyPvroIxoaGkhISLA6FG1ZdqWiooLnn3+ec+fOWR2KUiHn9OnT5OXlMXv27KCYutqnZCkiQ0Vkk4jku392mP5F5KR7fvB9IrK7p+WtEh0dTXl5OR988IHVoSgVUowxbNy4kbi4uKA5HeZry/JxYLMxJgvY7H7dmfnGmGnGmJxelu9zMTExzJkzh6NHj3Ly5Emrw1EqZOTn51NcXMyCBQuIiIiwOhzA92S5DHjJ/fwl4LY+Lh9w1157LfHx8bz77rs4nU6rw1EqJGRlZXHvvfeSnZ1tdShtfE2WycaYEgD3z+GdbGeA90QkV0Qe7kV5y4SHh7N48WLKyso4cOCA1eEoNeA1NzcjIowfPx4RsTqcNt32hovI+8CIDlb9rAf1zDHGFIvIcGCTiBwzxmzpQXncSfZhgNGjR/ekqM8mTpzIHXfcwcSJE/u0XqVCzblz53jxxRe5/fbbycrKsjqcL+k2WRpjFna2TkTKRGSkMaZEREYCHc5LaYwpdv8sF5G3gJnAFsCr8u6yzwHPAeTk5Jju4vYnEWHKlClsOlLGx3llzJuQrANtKOVnxhjWr1+P0+lk5MiRVodzGV8Pw9cCD7qfPwisab+BiMSISFzrc2AxcMjb8sFi05Eyvv/aHl7dcYbHXsvVwYGV8rMDBw5w4sQJFi5cSGxsrNXhXMbXZPkrYJGI5AOL3K8RkRQRWe/eJhnYKiL7gZ3AOmPMu12VD0af5Fdw0eHq4LnkMHx0rNTiiJQaOBoaGnjvvfcYNWpUn8+t4y2f7uAxxlQCCzpYXgwsdT8vBDocgK6z8sHouqxhrNpdRGNzC3ZaiG8soZO3pZTqodZ5wG+++eag6tTxpLc7eql1rp5P8isYVHOSi8d3cvr0pD7vbFJqoNl0pIxPToczY8lykpODty9Ak2UPLJrk6ti5dCmLZ589zqFDhzRZKuWDt/ec5Md/PcIlh2FVuJ3o6Jig7TzVZNkLkZGRfOtb3yImJsbqUJTqt4wxrNy8h0sO18yqrRMFBmuy1IE0eik2NhYRoaqqihMnTlgdjlL9zs6dO4m5cJoI1zyBQT9RoLYsffT2229TVlbGd7/73T6f9F2p/qqkpIRNmzaxcOI47s6ewdaCc1yXNSxoW5WgLUuf3XzzzbS0tLBq1SpaWlqsDkepoNfU1MTq1auJjo5m2bJlLJ48gn9dNiWoEyVosvRZYmIiy5Yt4+zZs7z33ntWh6NU0AsLC2Pq1KnccccdREdHWx2O1zRZ+sGkSZOYNWsWO3fu5PPPP7c6HKWCVnNzMzabjeuvv97yOXV6SpOlnyxatIivfOUrZGRkWB2KUkHpxIkT/O53v6OkpMTqUHpFO3j8xG63c9111wFw8eJFnE5nvzrEUCqQampqWLVqFbGxsQwdOtTqcHpFk6WfOZ1OXn75ZQovxRI+6kqunzA86E9cKxVITU1NvPnmmzidTu6++24iIyOtDqlX9DDcz2w2G7a0qaw6G8srO07zg9f36ghFKmQ5nU5Wr15NWVkZd955J4mJiVaH1GuaLAPgdFMMLbiutG29K0GpUOR0OgkPD+emm24iMzPT6nB8oskyAK7LGkZUuCtZ2mlhdES9xREp1fdaWloICwvjzjvvDNph13pCz1kGQOsIRVvyyompO8PdcydZHZJSfWr//v1s376d+++/n7i4OKvD8QtNlgHSOkIRXAm4Dkfe2nmc/WWXgv62LqV8cfToUdasWcOYMWOIioqyOhy/0WTZR37z+kaeO+jAgY2VO07zyLxx/OTGCVaHpZRfHT9+nL/85S+kpqZyzz33EBY2cFKMnrPsI1URyTjcv+4Wp+HZjwq0l1wNKEVFRbzxxhskJSWxfPlyIiIirA7JrzRZ9pEFk1Oxe4yW32LQXnI1IGw6UsbP1xxib7mDcePGcf/99w+ow+9Wmiz7yKJJyTxyQ2ZbwgwTJ3Mz++81Z0pB66ynubz86Sn+8a1jJGbPD8qZGf1h4JxQ6Ad+cuMEpqUNYdOBM0wbOYjFk4NvbmSleuKd3QVcdBgg+Ec695Umyz72RS+5y44dO0hOTmbMmDHWBaVULxw7doyGwlzCJAOHsQX9SOe+8ilZishQ4E1gDHAS+LoxprrdNhPc27QaC/zcGPPfIvIL4DtA68m7fzbGrCdEOBwOcnNzqa6u5q677mL8+PFWh6SUV3Jzc1m3bh2zRqWwbMZUdp4+P+AviRNjTO8Li/wHUGWM+ZWIPA4kGGP+qYvt7cBZYJYx5pQ7WdYZY37Tk3pzcnLM7t27ex13MGloaODVV1+ltLSU4VctoNgZP+D/6FT/Vl9fzxNPPEFaWhp33XXXgOr1FpFcY0xOh+t8TJZ5wA3GmBIRGQl8ZIzp9OJBEVkM/IsxZo779S8I8WQJrlFZfvnC33jt1CBasBMVbuf3916lCVMFFafTiYggIpSXl5OYmIjdbrc6LL/qKln62huebIwpAXD/HN7N9vcAr7db9piIHBCRF0Ukwcd4+qWIiAgYOfFLg2/8fvPn3Pjbj/n1xjyLo1MKGhsbWblyJZ999hkAw4cPH3CJsjvdJksReV9EDnXwWNaTikQkArgVWOWx+BlgHDANKAH+s4vyD4vIbhHZXVEx8K5PvH788LbBN8JswsGz58krq+OpDwt4dOUei6NToayyspIXXniBkydPMmjQIKvDsUyfHYa7k+vfGWMWd7J+DPCOMWZKd/UOtMPwVpuOlPFJfgXv7C+mqqH5S+v+sCJHD8tVnyssLGTVqlWICHfffXe/mzenpwJ5GL4WeND9/EFgTRfb3ku7Q3B3gm11O3DIx3j6tUWTkvnXZVNITbj87ge920f1tdraWlauXElcXBzf+c53Bnyi7I6vLctE4M/AaOA0cJcxpkpEUoDnjTFL3dtFA2eAscaYWo/yr+A6BDe4Lj36bus50K4M1JZlq01HyvjuK7txuj8aG04WphqS0zK4frxOU6ECq6Wlpe185LFjx8jIyOi3U0H0VMB6w60y0JMluBLmaztOYTDEXKpm0+kWmpxoT7kKqOLiYlavXs3SpUv7/cjmvdFVstQ7eIKU550+P19ziKaTpwBXT/lb24+ycOJwRKSrXSjltfcOl7BqyyFM6VEmD2kJ6Y6czuhAGv2A5zQV4TbDpdP7WL16NQ0NDRZHpgaC/7N2P4+8ksumU0183DSWrBvuYNSoUVaHFXS0ZdkPtE5T8Ul+BXMzE4muHsKHH37IqVOn2B+bw8GyS1ybOYyn75tudaiqn9l0pIwXtxfhxHWU0myEnafPc/NVFgcWhDRZ9hNfHoBjJFlZWaz4n4/JO1cHCOsPlnDHM9v5y/eutTJM1U9cuHCB8vJyPslvxOmx3G6TAT0Yhi/0MLyfSk5OpszEA1+ct8w9Vc17h0utC0oFPWMMe/bs4amnnuJvf/sb144d+sVMpAKPzBunnYed0JZlP3Zt5jDWH/zylVYvrt/OrFELiI+PtygqFazOnTvH+vXrOXHiBOnp6dx6660MHToUu93OJ/kVOoBLN/TSoX7ujme2k3vKNSpehB1uiDjBmPDzzJs3j7r4sWw7XqlfAkV1dTVPPvkk4eHhLFy4kBkzZujVFB3Q6ywHuNbbJK/LGsbVKZFs2LCB94+W8XHzOBzGht0mOptkCHrvcCkb959iybQxLJqUzO7du5k4cSIxMTFWhxa0NFmGoL9/eRtrjtS0vRbghgnDWD4rXVuZA1jrP87TZVV8XHgegzAozMYTy6fr5+6FQN4broLUzTmZ2G1fHGYZ4MO8Cr7/2h6dgneAck0etoeXPz3FR+5ECXDR4dSxBfxAk+UAtWhSMo/MG/el6XfB9cV5ZdNuLly40DaFqSbPgeHDoyVcdLReCPTFB28X9HIgP9BkOYD95MYJPPtADvMnDCPC7vqoI2yGiKrj/Pi3L/P9112tkB+8vlcTZj9VWVnJ1q1bAZg/cSSR7f472m3CIzdk6iG4H+ilQwNc68Xsnp1AOSPn8NPVe7l4vBFw3W++6eAZ9p2p4f0jpSycNEI7g4LYpiNlbNx/isENxXD2AHa7nSlTprBoUjJP3jeDT/IriBsUzoWLzXolhB9pB0+I2nSkjB+8vpfG5hbCaCHVVsMp51BaD9/+bn6mJswg0ToC1fGKei40NlHb2IwTIQwn382O4NFlc7WH20901CF1Gc/7za9Oi+VX6w5D/Rfr3z1QpMkyCPx6Yx5Pf1jAl5s0rn9oDmxciEnVRNlHNFmGMM/7zY9VXOKpDwvcawwL3cuLioqIjIxk2DDtIOgLradL5mYmUVVVxdMfFrb1arcXFW7Xjps+pMlSAbS1Itufs3zvvfc4c+YMqampXHXVVUyePJn/9ZcjbC+o0JGO/Mzz1Mhrn50gWc5jGNLhtlNS4/n7BVl6PrIP6TlL1aW6ujoOHDjAvn37qKio4KPmcZxwfDFjcfrQaP73zZP0S9tDnh1uzc3NvLO7gAvOCD45Xt22zVUjwjlc4aCp5Yvv6NCYcO6dma6nSAJE7+BRPjPGUFxczKKn99HQ8uV1NoH4qHAGDwpj7LBYvUuoE7/emMfrO0/R5HDS0NSC04ANAxic2AizgU1sNLU426YPAXhth2uUfP29Bp528CifiQipqancMKnsspGOnAaqG5qpbmjmVFUjH39ewfdu0N50+KIFeehsLXtO11y23jXorrvDxgnzJySSNjT6S5f8aIIMDposVY88fd90Hl25h4/zyrjY7KSlgwMTp4FnPyogNbKJ7CThRFMsu87Uhcw1f60JMtLm5OXPirjU4mo90klHjU1cv7OocLu2HoOYHoarXtt0pIzfb/6cg2fPd7h+bnILkdWFfNQ0lhbsRNgMt14xmMoW12RYk1LiOVLsmhm5PyaJ1qQYNyic841NTBsxiMGDB7d10oCT7m6Si7Db+M71Y/UC8iARsHOWInIX8AtgIjDTGNNhBhORJcDvADuu+cR/5V4+FHgTGINr3vCvG2OqO9qHJ02WweXXG/P4294iLjmcVNU14cTVSvrdPVPZuO8UfzlY6bF1xy0suw0SoiKoaWxiUHgYsZF2quqbuHLUEMunyvj1xjzeP1LKuOFxNDY5XPGaFj74vMo9JYPrPdlpYW7mMD4uqGoraxc6bH3PSE9gcspgTZBBJpDJciKuf5//A/y4o2QpInbgc2ARUATsAu41xhwRkf8AqowxvxKRx4EEY8w/dVevJsvg5dnL23qbZWtLy24TWpw9/3sbHGlDxMa1mUk8c/+MtuWtpwOiI8IZER9JbaODukvNpA6J4gcLxrNoUjKPrtzD9oIKxg2PY3LK4LbbADu6HbC1pVxV38Qt2SNYMS2B3394gjcO1rhr7PxQutW8rER2nqyhsbmFqHA735yb0VZff25Fh4qA94aLyEd0nixnA78wxtzofv1TAGPM/xWRPOAGY0yJiIwEPjLGdNsroMmyf/E8XP3DlkKaWpzdF/qS1iRlyEm2s/pHX+WRV3bz7uFSOkteYTbIHBrBsXNNXe45wgb3jW2iubmJ107FtM1yCJAdVsxpxxBqiPYqSs8ebJ2moX+yujc8FTjj8boImOV+nmyMKQFwJ8zhne1ERB4GHgYYPXp0gEJVgeB5p9C0tCFtl8K0nrM8V3eJQ2fP0/m/bWn7mVfjevbp8XN01cpzOOHzc424zvx0rskJe0sasdvtX0qUAOdj01mWOZSXdnc+IpPdJtw4eQRJsRHagz3AdZssReR9YEQHq35mjFnjRR0d/UX3uDlrjHkOeA5cLcuellfB4ctT+n5h05Ey/s87hzlb0/ilc5bREXZqGh1t21033lV2Ttbwyy5h8hRmg0nJgzlQUt/pNuBqDf7dHQsA+N6ruTg8ThPcdJXr4u/YuMvPWU5KiddOmRDTbbI0xiz0sY4iIM3j9Sig2P28TERGehyGl/tYl+qnOkuiQNt5R8/bKz0vYfLXOctn7p/Rds7ytqtGtV0n+pMbJ+g1o6pPzlmG4ergWQCcxdXBs9wYc1hEfg1UenTwDDXG/GN39ek5S6VUIARsDh4RuV1EioDZwDoR2eheniIi6wGMMQ7gMWAjcBT4szHmsHsXvwIWiUg+rt7yX/kSj1JKBYpelK6UUm46u6NSSvlIk6VSSnlBk6VSSnlBk6VSSnlBk6VSSnlBk6VSSnlBk6VSSnmhX15nKSIVwKkeFksCzgUgnGCvO9TrD+X3Hur196budGNMh/ML98tk2Rsisruzi00Hct2hXn8ov/dQr9/fdethuFJKeUGTpVJKeSGUkuVzIVp3qNcfyu891Ov3a90hc85SKaV8EUotS6WU6rUBkyxF5C4ROSwiThHptAdMRJaISJ6IFLgHHG5dPlRENolIvvtnQg/r77a8iEwQkX0ej/Mi8kP3ul+IyFmPdUv9Xb97u5MictBdx+6elvfhvaeJyIcictT9Of29x7pevffOPkuP9SIiv3evPyAi070t66f673PXe0BEtovIVI91HX4Ofqz7BhGp9fid/tzbsn6q/ycedR8SkRZxTX3tj/f+ooiUi8ihTtYH5nM3xgyIB665yycAHwE5nWxjB44DY4EIYD8wyb3uP4DH3c8fB/69h/X3qLw7llJc13WBa/71H/vw/r2qH9f87Em+xt/TssBIYLr7eRyu0fNbf/c9fu9dfZYe2ywFNuCaB+oaYIe3Zf1U/7W4pncG+Gpr/V19Dn6s+wbgnd6U9Uf97ba/BfjAH+/dXf56YDpwqJP1AfncB0zL0hhz1BiT181mM4ECY0yhMaYJeANY5l63DHjJ/fwl4LYehtDT8guA48aYnl5c76/6/Vm+27LGmBJjzB738wu4Rs1P7WGMnrr6LD3jetm4fAYMEddcT96U9bl+Y8x2Y0y1++VnuOaf8gdf4u+T997OvcDrPayjU8aYLUBVF5sE5HMfMMnSSx1Ny9v6hf3StLxAp9PydqKn5e/h8j+gx9yHDS/29DRAD+o3wHsikiuu6YV7G39v6gZARMYAVwE7PBb39L139Vl2t403Zf1Rv6dv4WrttOrsc/Bn3bNFZL+IbBCRyb2M25f6EZFoYAnwF4/Fvrx3X+Lz6b33xbzhfiMWT8vbVf3e7sO9nwjgVuCnHoufAX7pjueXwH8C3wxA/XOMMcXimqN9k4gcc/+n7i5mf733WFxfnB8aY867F3f73jvaVQfL2n+WnW3jj+mZvd6HiMzHlSzneizu1efQg7r34DrFU+c+B/w3IKsncftYf6tbgG3GGM+WoC/v3Zf4fHrv/SpZGoun5e2qfhHpybS+XwX2GGPKPPbd9lxE/gC8E4j6jTHF7p/lIvIWrkOTLXTz/v1Rt4iE40qUK40xf+3Je+9AV59ld9tEeFHWH/UjItnA88BXjTGVrcu7+Bz8UrfHPyKMMetF5GkRSfI2bl/r93DZEZSP792X+Hz63EPtMHwXkCUiGe7W3T3AWve6tcCD7ucPAt60VD31pPxl53DcSabV7UCHPX2+1C8iMSIS1/ocWOxRjy/v35u6BXgBOGqM+a9263rz3rv6LD3jWuHuHb0GqHWfJvCmrM/1i8ho4K/AA8aYzz2Wd/U5+KvuEe7fOSIyE9d3vdKbsv6o311vPDAPj78HP7x3bwTmc+9tj1SwPXB9yYqAS0AZsNG9PAVY77HdUlw9scdxHb63Lk8ENgP57p9De1h/h+U7qD8a1x9tfLvyrwAHgQPuD3Ckv+vH1Qu43/047K/372Xdc3Ed8hwA9rkfS3157x19lsAjwCPu5wI85V5/EI+rJDr7O+jh77y7+p8Hqj3e7+7uPgc/1v2Ye9/7cXUuXduX7939+iHgjXbl/PHeXwdKgGZc3/lv9cXnrnfwKKWUF0LtMFwppXpFk6VSSnlBk6VSSnlBk6VSSnlBk6VSSnlBk6VSSnlBk6VSSnlBk6VSSnnh/wFNYgRQHRVFswAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 360x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(5, 5))\n",
    "plt.xlim(-1.1, 1.1)\n",
    "plt.ylim(-1.1, 1.1)\n",
    "plt.plot(jnp.cos(_thetas), jnp.sin(_thetas), color=\"gray\", ls=\"dashed\", zorder=0)\n",
    "plt.scatter(jnp.cos(sol.final_state), jnp.sin(sol.final_state), s=10, zorder=10)\n",
    "plt.title(f\"K=3.0: r={sol.observables[-1]:.3f}\")\n",
    "plt.show()"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Conclusion\n",
    "\n",
    "In this example, we have learned how to use `jaxkuramoto` package to simulate the Kuramoto model.\n",
    "I hope that this package will be useful for your research.\n",
    "\n",
    "We have obseved that synchoronization can occur when the coupling strength $K$ is large.\n",
    "In the next page, we calculate the exact value of $r$ with respect to $K$!!\n"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## References\n",
    "\n",
    "We recommend {cite}`strogatz2000` for the introduction to the Kuramoto model for those who are new to this topic.\n",
    "\n",
    "```{bibliography}\n",
    "```"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "base",
   "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.9.7 | packaged by conda-forge | (default, Sep 29 2021, 19:24:02) \n[Clang 11.1.0 ]"
  },
  "orig_nbformat": 4,
  "vscode": {
   "interpreter": {
    "hash": "7d3977cd516aab4e7ac34ec0977b1608119a96f0bf9dd8c065a30d2af58323e0"
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
