{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "2cc83beb-87b5-45c9-b06f-f4b6223c457a",
   "metadata": {},
   "source": "# 🍬 CleanLab之一"
  },
  {
   "cell_type": "markdown",
   "id": "83dbf502bed7f2a",
   "metadata": {},
   "source": [
    "Cleanlab 提供了一个Datalab对象，可以识别机器学习数据集中的各种问题，例如嘈杂的标签、离群值、（近似）重复、漂移以及现实世界数据中常见的其他类型的问题[^1]\n",
    "\n",
    "* 使用交叉验证计算样本数据集的样本外预测概率。\n",
    "\n",
    "* 用于Datalab识别诸如噪声标签、异常值、（近似）重复以及其他类型的问题\n",
    "\n",
    "* 查看问题摘要和有关样本数据集的其他信息\n",
    "\n",
    "[^1]: [Datalab: A unified audit to detect all kinds of issues in data and labels](https://docs.cleanlab.ai/stable/tutorials/datalab/datalab_quickstart.html)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7fc2be4dd18da0cc",
   "metadata": {},
   "source": [
    "## 壹丨导入依赖"
   ]
  },
  {
   "cell_type": "code",
   "id": "695941a72d584655",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2024-07-31T17:04:04.894794Z",
     "start_time": "2024-07-31T17:04:03.486232Z"
    }
   },
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.model_selection import cross_val_predict\n",
    "\n",
    "from cleanlab import Datalab"
   ],
   "outputs": [],
   "execution_count": 1
  },
  {
   "cell_type": "markdown",
   "id": "2af162bb07ce9b9b",
   "metadata": {},
   "source": [
    "## 贰丨加载数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "933b8024d1ca7a8d",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Note: This pulldown content is for docs.cleanlab.ai, if running on local Jupyter or Colab, please ignore it.\n",
    "\n",
    "from sklearn.model_selection import train_test_split\n",
    "from cleanlab.benchmarking.noise_generation import (\n",
    "    generate_noise_matrix_from_trace,\n",
    "    generate_noisy_labels,\n",
    ")\n",
    "\n",
    "SEED = 123\n",
    "np.random.seed(SEED)\n",
    "\n",
    "BINS = {\n",
    "    \"low\": [-np.inf, 3.3],\n",
    "    \"mid\": [3.3, 6.6],\n",
    "    \"high\": [6.6, +np.inf],\n",
    "}\n",
    "\n",
    "BINS_MAP = {\n",
    "    \"low\": 0,\n",
    "    \"mid\": 1,\n",
    "    \"high\": 2,\n",
    "}\n",
    "\n",
    "\n",
    "def create_data():\n",
    "\n",
    "    X = np.random.rand(250, 2) * 5\n",
    "    y = np.sum(X, axis=1)\n",
    "    # Map y to bins based on the BINS dict\n",
    "    y_bin = np.array([k for y_i in y for k, v in BINS.items() if v[0] <= y_i < v[1]])\n",
    "    y_bin_idx = np.array([BINS_MAP[k] for k in y_bin])\n",
    "\n",
    "    # Split into train and test\n",
    "    X_train, X_test, y_train, y_test, y_train_idx, y_test_idx = train_test_split(\n",
    "        X, y_bin, y_bin_idx, test_size=0.5, random_state=SEED\n",
    "    )\n",
    "\n",
    "    # Add several (5) out-of-distribution points. Sliding them along the decision boundaries\n",
    "    # to make them look like they are out-of-frame\n",
    "    X_out = np.array(\n",
    "        [\n",
    "            [-1.5, 3.0],\n",
    "            [-1.75, 6.5],\n",
    "            [1.5, 7.2],\n",
    "            [2.5, -2.0],\n",
    "            [5.5, 7.0],\n",
    "        ]\n",
    "    )\n",
    "    # Add a near duplicate point to the last outlier, with some tiny noise added\n",
    "    near_duplicate = X_out[-1:] + np.random.rand(1, 2) * 1e-6\n",
    "    X_out = np.concatenate([X_out, near_duplicate])\n",
    "\n",
    "    y_out = np.sum(X_out, axis=1)\n",
    "    y_out_bin = np.array([k for y_i in y_out for k, v in BINS.items() if v[0] <= y_i < v[1]])\n",
    "    y_out_bin_idx = np.array([BINS_MAP[k] for k in y_out_bin])\n",
    "\n",
    "    # Add to train\n",
    "    X_train = np.concatenate([X_train, X_out])\n",
    "    y_train = np.concatenate([y_train, y_out])\n",
    "    y_train_idx = np.concatenate([y_train_idx, y_out_bin_idx])\n",
    "\n",
    "    # Add an exact duplicate example to the training set\n",
    "    exact_duplicate_idx = np.random.randint(0, len(X_train))\n",
    "    X_duplicate = X_train[exact_duplicate_idx, None]\n",
    "    y_duplicate = y_train[exact_duplicate_idx, None]\n",
    "    y_duplicate_idx = y_train_idx[exact_duplicate_idx, None]\n",
    "\n",
    "    # Add to train\n",
    "    X_train = np.concatenate([X_train, X_duplicate])\n",
    "    y_train = np.concatenate([y_train, y_duplicate])\n",
    "    y_train_idx = np.concatenate([y_train_idx, y_duplicate_idx])\n",
    "\n",
    "    py = np.bincount(y_train_idx) / float(len(y_train_idx))\n",
    "    m = len(BINS)\n",
    "\n",
    "    noise_matrix = generate_noise_matrix_from_trace(\n",
    "        m,\n",
    "        trace=0.9 * m,\n",
    "        py=py,\n",
    "        valid_noise_matrix=True,\n",
    "        seed=SEED,\n",
    "    )\n",
    "\n",
    "    noisy_labels_idx = generate_noisy_labels(y_train_idx, noise_matrix)\n",
    "    noisy_labels = np.array([list(BINS_MAP.keys())[i] for i in noisy_labels_idx])\n",
    "\n",
    "    return X_train, y_train_idx, noisy_labels, noisy_labels_idx, X_out, X_duplicate"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "5cfadf427ad4b1d1",
   "metadata": {},
   "outputs": [],
   "source": [
    "X_train, y_train_idx, noisy_labels, noisy_labels_idx, X_out, X_duplicate = create_data()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "3313a60a0b5603c9",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Note: This pulldown content is for docs.cleanlab.ai, if running on local Jupyter or Colab, please ignore it.\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "def plot_data(X_train, y_train_idx, noisy_labels_idx, X_out, X_duplicate):\n",
    "    # Plot data with clean labels and noisy labels, use BINS_MAP for the legend\n",
    "    fig, ax = plt.subplots(figsize=(8, 6.5))\n",
    "\n",
    "    low = ax.scatter(X_train[noisy_labels_idx == 0, 0], X_train[noisy_labels_idx == 0, 1], label=\"low\")\n",
    "    mid = ax.scatter(X_train[noisy_labels_idx == 1, 0], X_train[noisy_labels_idx == 1, 1], label=\"mid\")\n",
    "    high = ax.scatter(X_train[noisy_labels_idx == 2, 0], X_train[noisy_labels_idx == 2, 1], label=\"high\")\n",
    "\n",
    "    ax.set_title(\"Noisy labels\")\n",
    "    ax.set_xlabel(r\"$x_1$\", fontsize=16)\n",
    "    ax.set_ylabel(r\"$x_2$\", fontsize=16)\n",
    "\n",
    "    # Plot true boundaries (x+y=3.3, x+y=6.6)\n",
    "    ax.set_xlim(-3.5, 9.0)\n",
    "    ax.set_ylim(-3.5, 9.0)\n",
    "    ax.plot([-0.7, 4.0], [4.0, -0.7], color=\"k\", linestyle=\"--\", alpha=0.5)\n",
    "    ax.plot([-0.7, 7.3], [7.3, -0.7], color=\"k\", linestyle=\"--\", alpha=0.5)\n",
    "\n",
    "    # Draw red circles around the points that are misclassified (i.e. the points that are in the wrong bin)\n",
    "    for i, (X, y) in enumerate(zip([X_train, X_train], [y_train_idx, noisy_labels_idx])):\n",
    "        for j, (k, v) in enumerate(BINS_MAP.items()):\n",
    "            label_err = ax.scatter(\n",
    "                X[(y == v) & (y != y_train_idx), 0],\n",
    "                X[(y == v) & (y != y_train_idx), 1],\n",
    "                s=180,\n",
    "                marker=\"o\",\n",
    "                facecolor=\"none\",\n",
    "                edgecolors=\"red\",\n",
    "                linewidths=2.5,\n",
    "                alpha=0.5,\n",
    "                label=\"Label error\",\n",
    "            )\n",
    "\n",
    "\n",
    "    outlier = ax.scatter(X_out[:, 0], X_out[:, 1], color=\"k\", marker=\"x\", s=100, linewidth=2, label=\"Outlier\")\n",
    "\n",
    "    # Plot the exact duplicate\n",
    "    dups = ax.scatter(\n",
    "        X_duplicate[:, 0],\n",
    "        X_duplicate[:, 1],\n",
    "        color=\"c\",\n",
    "        marker=\"x\",\n",
    "        s=100,\n",
    "        linewidth=2,\n",
    "        label=\"Duplicates\",\n",
    "    )\n",
    "\n",
    "    first_legend = ax.legend(handles=[low, mid, high], loc=[0.75, 0.7], title=\"Given Class Label\", alignment=\"left\", title_fontproperties={\"weight\":\"semibold\"})\n",
    "    second_legend = ax.legend(handles=[label_err, outlier, dups], loc=[0.75, 0.45], title=\"Type of Issue\", alignment=\"left\", title_fontproperties={\"weight\":\"semibold\"})\n",
    "\n",
    "    ax = plt.gca().add_artist(first_legend)\n",
    "    ax = plt.gca().add_artist(second_legend)\n",
    "    plt.tight_layout()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "4bcbd5987ea3be54",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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caFFixbs37/f1mEJIczk4eHB2LFjGTNmDMHBwcbtOp3OhlEJIUQ5odNC/A6IW65+12lL9em6d+/Oq6++yuuvv061atXw9fVl3rx53L17l2effRYPDw8aNGjA+vXrgfynQn3//ffUqVMHV1dXBg8eLFNdq4gKn1jcvHmTzp074+DgwPr16zl69CgzZ86kWrVqtg5NCGEBjUZj0pU7OTmZL7/8krNnz9ouKCGEsLWjq+Hz5rDgcVjxnPr98+bq9lK0YMECatasyb59+3j11Vd58cUXGT58OJ06dSImJobevXszevRo0tLS8jx27969PPfcc7zyyiscOnSIHj168M9//rNU4xXlg6Kv4HUep0yZwp9//smOHTuKfQxLWpULIcrGihUriIuLQ1EUunfvTteuXWWYXQhRYWRkZBAfH0+9evWKP8Xz6GpYOgbIfap2/7MwYiGEDihJmPnq3r07Wq3WeG6l1Wrx8vJiyJAhLFy4EIArV67g7+/P7t27ycjIoEePHty8eRNvb29GjhxJSkoKv/32m/GYTz75JFFRUYUu8BaFs8rvVDFYcp5c4UcsVq9eTbt27Rg+fDg+Pj60bt2aefPm2TosIUQJDRgwgDZt2qDX69m6dSuLFy/O98qYEEJUSjotRE0mb1LBg21RU0ptWlTLli2N/7azs6NGjRq0aNHCuM3X1xeApKSkPI89duwYDz30kMm2jh07lkqconyp8InF2bNnmT17Ng0bNmTDhg28+OKLvPbaayxYsKDAx2RmZpKammryJYQoXxwcHBgwYACDBg3C3t6e06dPM2fOHC5dumTr0IQQovSd3wWplwvZQQ+pl9T9SoGDg4PJbUVRTLYZRpBlLZzIqcInFjqdjjZt2vDpp5/SunVrJkyYwPjx4/n6668LfExkZCReXl7Gr6CgoDKMWAhhiVatWjF+/HiqV69OSkoK3377LRcuXLB1WEIIUbruXLXufmWoadOm7N2712Tbnj17bBSNKEsVPrHw9/cnNDTUZFvTpk0LPfGYOnUqKSkpxq+EhITSDlMIUQK+vr5MmDCBpk2bUrt2bWrXrm3rkIQQonS5+1p3vzL02muvERUVxWeffcapU6f46quviIqKsnVYogxU+MSic+fOeRpqnTx50qRkZW5OTk54enqafAkhyjdnZ2ciIiIYOXIkGo360aXVaqWEoRCicgruBJ4BGBdq56GAZ6C6XznToUMH5s2bxxdffEFYWBgbN27k3XfftXVYogxU+KpQ0dHRdOrUiY8++oiIiAj27dvH+PHjmTt3Lk8//bRZx5CqUEJUTOvXr+fgwYM88cQTJosKhRDC1qxbFQpMF3GXblUoUT5JVagy0L59e1auXMlPP/1E8+bN+fjjj/n888/NTiqEEBWTVqslOTmZe/fusWLFCn777Teys7NtHZYQQlhP6AA1efD0N93uGSBJhSiXKvyIhTXIiIUQFZNOp2Pbtm388ccfAAQGBjJ8+HC8vb1tG5gQosqz6tVlnVat/nTnqrqmIrgTaOysE6ioMGTEQgghSpFGo+GRRx5h5MiRuLi4cOnSJebMmcPp06dtHZoQQliPxg7qdYEWw9TvklSIckoSCyFEhdeoUSMmTpxIQEAA6enpLF++nIyMDFuHJYQQQlQp9rYOQAghrMHb25tx48axYcMGQkJCynSYWAghhBCSWAghKhF7e3see+wxk23nzp3Dzs5OGmEKIYQQpUwSCyFEpZWamsqyZctIT0+nd+/ePPTQQyhKQTXhhRBCCFESssZCCFFpOTk5Ua9ePXQ6HVFRUSxbtozMzExbhyWEEEJUSpJYCCEqLScnJ4YOHUr//v2xs7Pj6NGjzJ07l6tXr9o6NCGEEKLSkcRCCFGpKYpCeHg4zz77LF5eXly/fp358+cTGxtr69CEEKJc6t69O6+//nqB9yuKwqpVq8w+3rZt21AUhVu3bpU4NlG+SWIhhKgSateuzcSJE6lfvz5ZWVmcPXvW1iEJIUSFlJiYSL9+/WwdhiiHZPG2EKLKcHV15emnn2b//v20atXK1uEIIUSF5OfnZ+sQRDklIxZCiCpFo9EQHh6Oo6MjAHq9nl9++YUTJ07YODIhhMifVqcl+ko0686uI/pKNFqdttSfU6fT8fe//53q1avj5+fHhx9+aLwv91SoXbt20apVK5ydnWnXrh2rVq1CURQOHTpkcswDBw7Qrl07XF1d6dSpk3zuVkIyYiGEqNIOHTrEX3/9xV9//cXDDz/MI488gkYj11yEEOXD5vObmb5vOlfTHhSd8HX1ZUr4FHoF9yq1512wYAGTJk1i79697N69m2eeeYbOnTvz6KOPmuyXmprKE088Qf/+/fnxxx85f/58gesz3nnnHWbOnEmtWrV44YUXGDduHH/++WepvQZR9uSvpxCiSmvZsiUdOnQAYOfOnSxcuJA7d+7YOCohhFCTiknbJpkkFQBJaUlM2jaJzec3l9pzt2zZkg8++ICGDRsyZswY2rVrx5YtW/Ls9+OPP6IoCvPmzSM0NJR+/frx9ttv53vMTz75hG7duhEaGsqUKVPYtWsXGRkZpfYaRNmTxEIIUaXZ2dnRt29fhg8fjqOjI+fOnePrr7/m/Pnztg5NCFGFaXVapu+bjh59nvsM22bsm1Fq06Jatmxpctvf35+kpKQ8+504cYKWLVvi7Oxs3BYeHl7kMf39/QHyPaaouCSxEEIIoFmzZkyYMAEfHx/u3LnDggULiImJsXVYQogqKiYpJs9IRU569FxJu0JMUul8Tjk4OJjcVhQFnU5ntWMqigJQ4mOK8kUSCyGEuK9mzZo8//zztGzZEkVRpPKJEMJmktOSrbpfaWncuDFxcXFkZmYat0VHR9swImFLklgIIUQOjo6ODB48mBdeeIGAgADj9px/NIUQorTVcq1l1f1Ky8iRI9HpdEyYMIFjx46xYcMGPvvsM+DBqISoOiSxEEKIXBRFoVatB3+sExMT+c9//iNTo4QQZaaNTxt8XX1RyP/kXEHBz9WPNj5tyjgyU56enqxZs4ZDhw7RqlUr3nnnHd5//30Ak3UXomqQcrNCCFGEmJgYMjIyWL16NQkJCfTv3z/P/GMhhLAmO40dU8KnMGnbJBQUk0XchmRjcvhk7DR2Vn/ubdu25dmWs2+FXm+6oLxTp07ExsYaby9evBgHBwfq1KkDQPfu3fM8plWrVnm2iYpPRiyEEKII/fv3p2fPniiKwsGDB5k/fz7Xr1+3dVhCiEquV3AvZnWfhY+rj8l2X1dfZnWfVap9LCyxcOFCdu7cSXx8PKtWrWLy5MlERETg4uJi69BEGZMRCyGEKIKiKHTp0oXatWuzfPlyrl69yty5cxk0aBBNmza1dXhCiEqsV3AvegT1ICYphuS0ZGq51qKNT5tSGakoritXrvD+++9z5coV/P39GT58OJ988omtwxI2oOhlHIrU1FS8vLxISUnB09PT1uEIIcqx27dvs2zZMi5cuADA6NGjqV+/vo2jEkKUNxkZGcTHx1OvXj1ZayCswla/U5acJ8uIhRBCWMDDw4OxY8eyZcsWkpOTCQkJsXVIQgghRLkgiYUQQljIzs6O3r17o9PpjOUUs7KySExMNC5WFEIIIaoaWbwthBDFpNE8+Ahdt24d3333HTt27JBKJ0III/k8ENZSEX6XJLEQQogS0ul0gPqhv2XLFn766SfS09NtHJUQwpYMJanT0tJsHImoLAy/S+W53Lks3kYWbwshrOPgwYP89ttvZGdn4+3tTUREhEn3biFE1ZKYmMitW7fw8fHB1dVVOlGLYtHr9aSlpZGUlIS3tzf+/v5l+vyWnCdLYoEkFkII67ly5QpLly7lxo0b2NnZ0a9fP9q2bSsnFEJUQXq9nitXrnDr1i1bhyIqAW9vb/z8/Mr874kkFhaSxEIIYU0ZGRmsWrWK48eP4+rqyiuvvIKrq6utwxJC2IhWqyUrK8vWYYgKzMHBATs72/QukXKzQghhQ87OzowYMYLdu3cbp0AIIaouOzs7m50UClGWJLEQQohSoCgKnTp1Mtl28uRJsrKyaNasmY2iEkIIIUqPJBZCCFEGUlJS+OWXX8jIyODChQv07t1brmAKIYSoVKTcrBBClAEPDw/at28PwN69e/nuu+9ISUmxcVRCCCGE9UhiIYQQZUCj0dCzZ09GjhyJs7MzFy9eZM6cOZw+fdrWoQkhhBBWIVWhkKpQQoiydfPmTZYuXUpiYiKKotCtWze6desmJWltRKvTEpMUQ3JaMrVca9HGpw12GvOmqZXksUIIURFIVSghhHXotHB+F9y5Cu6+ENwJ5KSpxKpVq8Zzzz1HVFQU+/fv5+7du2WeVFT2E2JzX9/m85uZvm86V9OuGrf5uvoyJXwKvYJ7FfocJXmsEEJURjJigYxYCJGvo6shajKkXn6wzTMA+s6A0AG2i6uSOX78OA0aNMDeXr3Oo9frSz3JqOwnxOa+vs3nNzNp2yT0mP4ZVFDf/1ndZxX4fpTksUIIUZFYcp4sayyEEHkdXQ1Lx5gmFaDeXjpGvV8Un04L8TsgbjlNnJKx16gnozqdjsWLF7N3715K65qP4YQ450k3QFJaEpO2TWLz+c2l8rxlxdzXp9Vpmb5vep7EADBum7FvBlqdNs/9JXmsEEJUZpJYCCFM6bTqSEU+J00qPURNUfcTlju6Gj5vDgsehxXPqd8/bw5HV3PkyBFOnz7N+vXrWb58OZmZmVZ96sp+QmzJ64tJismTfOTe/0raFWKSYvLcV5LHCiFEZSaJhRDC1PldeUcqcku9pO4nLFPgSFAiLB1Dc+U0fVv6oUk+xpGd65g3dw5JSUlWe/rKfkJsyetLTks265j57VeSxwohRGUmi7eFEKZuJ1p3P6EqdCRI3aasGEcHvY5ARx3LjmZx7fga5p3exxPP/Z2WLVuWOITKfkJsyeur5VrLrH3z268kjxVCiMpMRiyEEKbumnlSae5+QmXOSJBeB0CQl4aJbR2p75pGVuxyfpkTyR9//FHiECr7CbElr6+NTxt8XX2Ni61zU1Dwc/WjjU+bPPeV5LFCCFGZSWIhhDDlZuZJpbn7CdWdgqfo5MfNUeHplvZ0C7bHMX4LTRo1LHEIlf2E2JLXZ6exY0r4FOP23PsBTA6fnG+J2sIeC+qUq4IeK4QQlZkkFkIIUx7+1t1PqNx9LX6IRlHoUc+O11pl4JP+oEN3SkpKsUIoycl0RWDp6+sV3ItZ3Wfh4+pjsq+vq2+R5WINj/V0zFt60cvJq0SvQwghKipJLIQQpoI7qf0qCuMZqO4nzGd8Xy3vUeHuqBhHPBISEvjvf//L77//jk6ns/hYJTmZLm+0Oi3RV6JZd3Yd0Vei0eq0Fr++XsG92DB0A9/2+ZYZXWbwbZ9viRoaZfb7kHovNe+2zNRKUbpXCCEsJQ3ykAZ5QuRhqF4EmC42vn9SHLFQmuQVR4HvqxnGroV6Xdi+fTtbt24FoF69egwdOhR3d3eLQ6nonbeLaoJX2q9Pq9PSZ0WfAqtQKSj4uvoSNTSqQr2vQgiRmyXnyZJYIImFEPnKt/N2IPSdLklFSeT3vioa48LtvBR1pOP1OLh/ghoXF8eaNWu4d+8eHh4eDB8+nDp16pR+7OVEeeh6HX0lmnEbxhW537d9vqW9X/tSjUUIIUqTJefJUm5WCJG/0AHQ5DG1mtGdq+oageBOxpNbUUz5va93r8PyZ+7vkM8IUd/pJu97ixYt8PPzY+nSpSQnJ/P999/Tq1cvOnbsiKJYPtWqIimqCZ6Cwox9M+gR1KNURwoqe+leIYQoDkkshBAF09hBvS62jqLyye991SzMZ4QoIO8IkU4L53dR685Vxvdqypq/fIg7coSNGzdSvXp1mjRpUjavwUYsaYJXmiMFlb10rxBCFIckFkIIUR7kN5IR9BAk7IW45Q9GNjZONSYfjsAQD3/qNB3PBfu6NG7c2LavoQyUl5ECQ2nbpLSkfEdPDGssKmrpXiGEKA5JLIQQxXP/yrlMk7KinCMZR1fDf8OKbKqn3L5C+2Mf0274AuM0qMzMTE6fPk2zZs1KO+IyV15GCgylbSdtm4SCYpJcVNTSvRV9Qb8QwvYksRBCWC7fhd0B0HdG5V3YXZaJlLF6lDm1NfSAgrJhKjR9HL2iYfXq1Rw5coQzZ87Qr18/HBwcSidOGyhPIwWG0rb5VaeaHD65QpXuLarKlhBCmEOqQiFVoYSwSIEnvZW4FG1ZJlI6LXzevMiRinyNXYu+7sPs2LGDrVu3otfr8fPzIyIigurVq1s3ThsyVIUC8h0pKOt+HBX9Sn95qLIlhCi/pNyshSSxEMJMRZ705i2NWuGVdSIVvwMWPF68xw79BloMA+Ds2bMsX76ctLQ0nJ2dGTRoUKVa2J3fFXY/V78KN1Jga9bsx1HREywhRP6k3KwQonSc31XElXQ9pF5S96sM1aR0WnWkIt8pSeoUJKKmqIuurXUCdafgikdFcvc1/jMkJIQXXniBZcuWkZCQwM8//0znzp3p2bMnGo3GCoHaVq/gXvQI6iEnsiVkrSpbMpVKCAFQ8f+6CCHKjrknvSU5OS5PLEmkrCVHcmA+RW1eGNzJZKunpyfPPPMMHTp0AOCvv/4iPT3dCkGWD3YaO9r7tad/SH/a+7WXpKIYrFFlyzCVKneCkpSWxKRtk9h8fnOJYhRCVBwyYiGEMJ+5J73FOjkuh2yRSAV3UqeTpSZi3uLt/JvoGdjZ2dG3b1/q1KmDm5sbbm5upjtIda8qraRVtspLw0IhRPkgiYUQwnxFnvTeX2OR68p5hWWLREpjpy4KXzoGNWkoIrnIr4lePkJDQ01ux8XFkXLoNzonfY9yOzHX8SpxdS8zVKW1AiWtslVeGhYKIcoHSSyEEOYr9KS38CvnRSqPV85tlUiFDlAXheepRBUIfT4F1xolep9SU1NZ882/uHdoGQk1NAxqYo+Lw/2fX2qi+vOtjNW9zFDV1gqUtB9HeWlYKIQoH6QqFFIVSgiL5Vt+NdCsK+fmH6+cXDk3VoWCfBOp0jwBL6VkS6/NJuathqyPTSRbp6eas0JEMwf8PQzL7iphdS8zVOWyq8WtshV9JZpxG8YVefxv+3wrIxZCVFBSbtZCklgIUQzWOumtCH0xrJ1I2dr9kraJt3UsPZLFzQw99hqFfg3saeOvMXbwZuzaylHdywzWLLtaURVnCpjhfStqKlVlft+EqOyk3KwQovRp7Ep+0mmLcq7FETpAjaG8TdUqrvuLzf09NExo68iq49mcuK5lzcksElLtGNjYXk0uKkt1LzPIWoEHVbYsfUxJplIJISoXKTcrhLAdW5RzLS5DItVimPq9Ip8o5Vhs7uKg8GRzex4NsUdBwc1BeTBiUYGqe2l1WqKvRLPu7Dqir0Sj1WkterysFSi+XsG9mNV9Fj6uPibbfV19K/X0MSFEXjJiIYSwnarWF6O8yLUoXVEUOtexp663Bn8PBcMai+zA8ArxR8IaC65LWna1qpOGhUIIkBELIYQtVbW+GOWFoboXYFzLAgR6atAo6p8F7aOf8P3CRURFRaHVWnb1vyxZqzmboeyqkuP9yElBwc/Vr8Cyq0IaFgohJLEQQtiS4cp5ASdzBXWUFlZgKGnr6W+63TMAIhZy2jGUixcvsmfPHr7//ntSU1NtE2chimrOBjBj3wyzpkUZ1goAeZKLKrFWICMDrl6F8+fh4kW4cQN0OltHJYSoYKQqFFIVSgibsmU5V1Foda/jx4+zatUqMjIycHV1ZdiwYYSEhNg44AdKo9RpccuuVkh6PZw9C9HRcOKEejsnDw9o21b98vCwTYxCCJuTcrMWksRCCBsrb+Vcy2OzPhu5ceMGS5cu5cqVKyiKQvfu3enateuDBd42tO7sOibvmFzkfjO6zKB/SH+zj1slOm8fPgxbt8L160Xvq9FAaCj06SMJhhBVkJSbFUJULE0eA2cvtb+CAgQ/bLvKS+W5WZ8NVK9eneeee47169cTExPD1q1bSU9Pp2/fvrYOrdQWXFtadrVCJSJ6PWzbBtu3m/8YnU5NRBISYNQoqCUL2IUQ+ZPEQghhW/meyC+2zYl8Qc36UhPV7VV0WpaDgwMDBgygTp06bN68mfbty0cfB8OC66Kas5XmgmtrVKQqU/klFRoNNG0KzZqBmxtotep6i/37TUc0UlLg++/h+eehWrWyjFoIUUHIVChkKpQQNlMWXbfNndak08LnzQvpq6GWYOX1uCo7LQogKysLBwcH4+3Lly/j7+9vs6lRhqpQQL7N2Uqzj4LhuXMnNWXx3MUSFwcrVphu69QJOnbMf4qTXg/x8bB+PSTn6N9RsyZMnAg5fg+EEJWXJefJUhVKCGEbRXbdRu26rdOqX/E7IG65+t3c5mdHV6vJwoLHYcVz6vfPm6vbc6tIzfpsKGdScfbsWebNm8cvv/zCvXv3bBKPrZqzWbMiVZnQ6eD33023DRgAvXsXvG5CUSAkBJ57DgIDH2y/dg0OHSq1UIUQFZdMhRJC2Ia5J/J/fAYx31u+5sHSaU3SrM9iN2/eRFEU4uLiuHLlChEREdSywfx7WzRni0mKydM7Iyc9eq6kXSEmKcai9Rql5swZuHkTnV5H4t1ELrWsixKgpY1O++B9Kmh0z9kZRo6E//0P7t5V942Ohnbt1ORDCCHuk8RCCGEb5p6gb/s077ai1jwUORqiqKMhTR57MK1JmvVZrG3bttSqVYtly5aRnJzMvHnzeOKJJ2jRokWZx2LpguuSSk5LLnonC/YrddHRnL11lp2XdpKqvcvCRjVJ3/Dzg/Ugd9MKL1rg5gZt2sCOHep9SUlw4QIEB9vm9QghyiWZCiWEsI0SnaDnmiqVW3GmNUmzvmKpU6cOL7zwAiEhIdy7d48VK1bw22+/kZ2dbevQSlVpVaQqFWlpnInewIZzG7iTdYfTgU6kO6l//tUO5W+wee3EvP9nDAm8Yepg27amIxSxsWX0AoQQFYWMWAghbMNwIp+aSP4jC0XJkRzU62J6V3GmNWns1KuzS8egJhf5NOvr86n0t8hnuoybmxujRo1i27Zt/PHHH0RHR1O3bl2aNWtm62hLTXmoSGUu7Y3r/HlxhzHOM4HOxvv06FH0embU8KZHWhqmv825Rve8vSEoSB2pALh5s4xeQcV379490tPTbR2GKGUuLi44OjraOgybksRCCGEbRZ7Im5ls5JdEFHdaU+gAdXpVflNCmg+FDVOrdn+LQnp8aEIH8MgjjxAUFMSZM2cIDQ21XZxlwE5jx5TwKUzaNgkFJd+KVJPDJ5eLfhZHLh3gTtYd423DaIWBXlG4Ym9PjLMT7TMycz06VwLv5vbgroyMUoy6ctDpdJw+fZr09PRy0VRSlC69Xo+LiwsNGjRAo6mak4IqXWIxffp0pk6dyt/+9jc+//xzW4cjhChMYSfybcbmv74it/ySiCJHQ+6Xjs1vWlPoAPXqbM6r8nevw/Jn8h6rKvW3MHMxfMOGDWnYsKHx7vT0dA4ePEiHDh0q3R9aQ0Wq/PpYTA6fbPWKVMVtxHft3i2T2xpd/kl7sl0hxzIk8NocUw8L218AcPr0aTIzM/H398fNzU2Si0pMr9dz9+5drl69yunTp2nUqJGtQ7KJSpVYREdHM2fOHFq2bGnrUIQQ5srvRN5wwh/zffGSA3OmNfWdXvA0Jo3dg+lVhv4WliwEL03Z2ZCeDllZ4OQELi5qg7PSVJzF8Kh/aFeuXMnJkyc5c+YMQ4YMwS3nFe9KoKwqUpWkEV+1av6mt29rSayZd79a2kJK47r7qn0tcvazcHExK/aqyjD9yd/fHx8fn6IfICo8w+dbYmIi9+7dq5LToipNYnHnzh2efvpp5s2bxz//+U9bhyOEsETOE/mcSpIcFDYa0ne6+SMMliwEz+81WINWC8ePqyU+z59XT/AMHBzUrsnt20Pt2paX/zSngWAx3wNFUWjevDnx8fGcOXOGOXPmMHz4cIKCgiyLsZwr7YpUBTXiUxdeTyqyX0fLxj2IdvdCeycVPXqaxadztK6z8XdF0evx1Wppk2caFJgk8GfPmq6rqGQ/R2szTH+qbMm0KJxhZCo9PV0Si4rs5Zdf5rHHHqNXr16SWIgKR6vVYifTCvIqaXJQ0GiIJVeTbdnfQquFXbtg7164cyf/fbKy4K+/1C8/P+jaFcxd31DImglr9fho2bIlfn5+LF26lGvXrvHdd9/Ru3dvHnroIZkWYoaiGvEpKMzYN4MeQT0KHCWxc3CkXb/x7F02EwWFmilZ+N7I4moNR3U9iAKTr9/CrqgEPjr6wV0ajVp+VhRJfs+rlqr+864UicXPP/9MTEwM0Tk/9AqRmZlJZuaDKzOpqamlFZoQRbp48SLLly9n8ODBBEtN+LyKmxzkvhLfbHDxpirZqr9FRgYsXapeJTbXlSvqY7p0gUceKXz0wpIGgiV8D3x8fBg/fjxr1qzh8OHDREVFceHCBQYOHIiTk5N5x66irNWIr03/8XjtP8KfF3dwJ+sOXf+6w8ou3tT0DFDXgxTYx+J+An/sGJw48eC+0FBwd7fGSxRCVCIVPrFISEjgb3/7G5s2bcLZ2bnoBwCRkZF89NFHpRyZEObZtm0bt27dYsGCBfTq1YuOHTtWnCse9+7BrVvqSbBGo865rlbN+nP+DVOlDMnCkZWFJxjmXok3R0kWghdXVhb88ANcvGi63cEBWrZUpzzZ26vv+8mTcPq06fSoHTvU0Y7evfM/vqVrJqzwHjg5OTF06FDq1KnDhg0buHz5MjqdrvD3QVivEV+1atQP70s9z2AS7yaSlpXG6Nv1qfPk37Fzu58gFJTAHz8OK1aY/o6FhxfzFYnKKC0tjTFjxvD7779z8/50Ob0+/yIBonKr8InFgQMHSEpKok2OIVmtVssff/zBV199RWZmZp4pJlOnTmXSpEnG26mpqZVuzq+oOCIiIlizZg1xcXFs3LiRhIQEBg4caHaiXOb0evWENzoajhwxrRID4OqqTpFo21ZNMqzF3GTBkivx5ijpQnBL6fWwcqVpUuHkBD16QKtWkPv3on17uHFDnS61d++D7bt2QfXq0K5d3uewdM2Eld4DRVEIDw8nICAAjUaDiyz+LZJVG/H164fm0iUClfuJ/y1gzlz1d6RNG3UEwrBGRq+Hc+fU/+fHjpkmFR06QJ06lrwMkUtgYCCXLxf2fxAmTZrEzJkzyyiikvnss89YsWIFAI0bNy50JNJw4Wzo0KEsX768TOITZafCJxY9e/YkLi7OZNuzzz5LkyZNmDx5cr7z1p2cnGT4XZQbjo6ODBkyhDp16hAVFcWxY8e4evUqERER+Pn52To8U2fOwKZN6pSbgqSlwc6d8Oef0LAh9O2rnuCWhLnJQjGrFxXJWgvBzZGQAEePPrjt6gpjx4JvIdORqleHfv0gIABWrXpwErh5M4SFqSMdORVnzYQV34PatWub3D5w4ACXL1+mX79+2NtX+D9LVmXVRnze3jByJCxc+KAHRWoq/P47bNsGdeuqfSqysyEpCa5fz3uMZs0KHgkTZmvWrBk1a6qlua5cuUJSUhIATZo0MS74zf3/pDw7cuQIAGFhYRw6dMi2wQibqvBFxT08PGjevLnJl5ubGzVq1KB58+a2Dk8IsyiKQvv27Rk3bhxeXl7cuHGD+fPnc/VqKSwILq7oaHV6TmFJRU56vTpNZ/589WS5uIpMFlCTBcM0KXOvxFsqdAC8fhjGroWh36jfX4+zfv+KnGvFFEU9EcyRVGh1enafuc6vhy6x+8x1tDl7EoSFqWsrDDIy4PDhvM9RkgaCVn4P7t69S1RUFAcOHOCbb74xTqMQKkMjPnjQeM+gWI34AgLguefUJCMnnU5dzxMXp45Q5JdUPPQQDB1a+uWNq4CNGzcSGxtLbGwso0aNMm5ftWoVsbGxhISEMGnSJNq2bWvyuGbNmqEoCk8//TSgjnwoisLLL7/M2LFj8fLywsPDg9GjR5t0+k5PT+eNN94gODgYBwcHqlevTkREBImJiUXG+uOPP9K2bVtcXV1xcnKiadOmJn3CAgMDWbp0KQCxsbEoikJgYKBF78f//d//0aRJE9zc3HBzcyMkJITBgwcb7//999/p2LEj3t7eODk5ERgYyKOPPsrR+xdh3nzzzTzPu27dOhRFQVEUTuRYH7R8+XLat2+Pm5sbzs7OtGvXjrVr11oUryiYXBoSohwJDAxk4sSJrFy5Ejs7u/JT+3z/fvjtN9NtiqKOSLRoAR4e6onJtWtw4ADkTIjS0mDRInj2WfA3radvFkuShdKu4FRQWVxruXvXdLSiYUN1PcV9UYcT+WjNURJTHnQ89vdy5oMnQunb/P5726GDOg3KcFIRHQ2tW5s+T0nWTFj5PXBzc+PJJ59kxYoVJCYmMmfOHAYPHkzjxo2t9hwVndUb8dWqBS++qP5f3b9fnUpXEI0GmjRR11TUrVu8FyAs9vLLL7Nq1SpiYmKIi4ujRYsWnDhxwngiPW7cOJP958+fj6urKx4eHly6dIkffvgBZ2dn5s2bB0C/fv3Yvn07dnZ21K9fn8uXL7Ns2TJiYmKIjY0tsCTu7NmzeemllwCoUaMGTk5OHD9+nDfeeIMrV64wffp0mjVrRlpaGrdu3cLNzY369evjW9gIay579uzh1VdfRa/XU6dOHZycnLh06RKrVq0C1OntQ4cO5datW9SoUYOQkBCuXr3K5s2bOXfuHKHmVsEDvvnmG8aPH49erycgIABFUThw4ACDBg1i1apVPP7442YfS+SvUl522LZtm3TdFhWWq6srI0eOZMiQIca5qPfu3eNGYX/8S1N8fN6konVreO019Wp6ixbqCUdIiHry8cIL6hXRnMP49+7B4sXqibOlLEkWbFXByVr++st0zUr7B1V+og4n8uIPMSZJBcCVlAxe/CGGqMP3rzw6OKhrMfQ6uHkeDm6Gfb+qIzoGhjUTAOQuFFAK60aKUL9+fSZOnEjt2rXJyMjgp59+YvPmzbK4O4dewb3YMHQD3/b5lhldZvBtn2+JGhpV/O7eTk7QqRO8+iqMGqUWBahTB3x81AsAISHQvTu8/jpEREhSUcZ69epl7Nz89ddfA/DTTz8BEBwcTM+ePU329/f3Jz4+nosXL/LEE08AsGDBAq5fv8769evZvn07AGvXruXEiRMcPnwYJycnzpw5Y0w+8vPxxx8DatnohIQEEhISePTRRwH4/PPPuX37Nhs3bjTGExoaSmxsLBs3bjT7tZ44cQK9Xk/dunU5e/YsJ0+eJCUlhfXr1wNw7do1bt26BaiNkI8dO8aNGzfYv38/YWFhZj8PwPvvv49eryciIoKEhAQuXLjAo48+ilar5cMPP7ToWCJ/lTKxEKKiUxTFOM9Wr9ezZs0a5syZw/Hjx8s+mN9/N1242aMHDBhQ8MJsRVEbZ40dCw0aPNh+5w7s22f581uSLBiuxOc5WTYGB56B1q3gZE3Xrj34t6ur8f3T6vR8tOZoYZPB+GjN0QfTopyvwJ7/QeyPcOxX+P5ptXv40dUPHmhYM+GZaxTJM8DyBe5W4OXlxbPPPkuHDh0A2LlzJz/88IMkFzkYGvH1D+lPe7/21unurSjq79mQITBuHLz0EkycCGPGqImFp2fJn0MUy/PPPw/AsmXLyM7O5tdffwXUgh+5Pfroo3jfn9725JNPApCVlcWRI0fYvXu3cb9+/fqhKAp169Y1lt3fs2dPvs9/6dIl41SpAQMG4OLigkajMR4/MzOTgwcPlvh1PvLII3h6enLu3DmqVatGy5YtGTNmjPF+X19fWrVqBUDTpk1p1KgRTzzxBPv27bNoHeLly5eNC+aXLl2KnZ0ddnZ2bNq0CVCncYmSk6lQQpRzWVlZpKSkkJmZyc8//0ynTp3o1asXmrKY53zliun6iJYt1QZsOcrhanVaYpJiSE5LppZrLdr4tFFPeBwc1CudX3/9YKrFgQPq4y1pBmjJtJ2yruBUGHM6WueWkWM0wsPD+D7vi7+RZ6QiJz2QmJLBvvgbdMz8Eza8Bpk59s/GdKG7oayo9h4MnK0+z93k4jUQtCI7Ozv69u1LUFAQv/76K8HBwWXzey5EOTRhwgQ++ugjkpOT+eKLL4zrFwwJR3G0bNkyzzZbFwkJCgrir7/+Yv78+cTExHD8+HF++uknlixZwubNm+nRowc7d+5k3rx57Nq1ixMnTrB+/XrWrl1LYmIi//jHP4yj+9ocI76GUY781K5dm+r5FBXJyMgovxUZKwhJLIQo5xwdHRk7diybN29m9+7d7Nq1i0uXLjFs2DA8PDxK98lzN53s0sUkqdh8fnO+876nhE9Rp2g4Oqpz/tetU++8c0etid+smfkxWJoslGUFp4IUt49Gzv4lOa7UJ90uOKnIKSn1LmydbDrCBPffpvtVsdb8Ddb/HW7nWLRpiK00149YoFmzZgQGBuLl5WXclp6ejrOzc8Xp8SJECXl5eTFkyBAWLVrEe++9h16vJzw83DhFKqfNmzeTkpKCl5eXcSG1g4MDzZo1486dO8b9Jk+ezMiRIwH1otXq1asLLHQTGBiIv78/iYmJrF69mmnTpuHk5MTPP/8MqBU2W+dev1UM586d4+rVq8ZpVwAhISHEx8ezfft2unXrxpYtW3jllVd4/fXXAXj66af58ccf2blzJ4BxPeKNGze4fv06NWrUYNmyZSbPExAQQEBAAJcvX6Z58+asXr0ah/sV8+Li4jhz5owkFVYgl4KEqADs7Ozo06cPERERODk5cf78eebMmcO5c+dK70m1WrVCjEHduuqiz/s2n9/MpG2T8nQFTkpLYtK2SWw+v1nd0LKlmmAYFKcUoaXTdsqqglN+DKVxcy84N4wY5JyOlFvOvg6pqWrZT8DHw7w/dg3S4tTnTc+VWBgvIekh/YZpUmFubGXM29vbmERkZWWxYMEClixZQkaGeUmWEJXBa6+9BmCs8JSzglROV69epW7dusbRPoDRo0dTo0YN+vfvz8MPPwyoJ+T16tWjQYMGeHl5MWzYMM6cOVPg87/33nsA/PXXXwQFBREUFGScOvT6669b5eJWbGwsHTp0oHr16jRp0oTatWsTHx8PqOVrtVotAwcOxNvbmwYNGtCoUSNjcmNIinr37o1GoyErK4uwsDBj4pDb+++/D0BUVBS+vr40bdqUmjVr0rJlS3744YcSvxYhiYUQFUpoaCgTJkzA19eXO3fusGLFCrLvn3xaXVqauujaIMdVLa1Oy/R90/Otq2/YNmPfDLQ6rdrQrWHDBzsUt5yopcmCoXpRi2EPmryVNktK4+YnIODBvzMz1QaEQHi96vh7ORe2cgR/L2eaeqSpGxJzHd+jqI96M2KzoYsXL5KcnMzx48eZO3cuV8wteSxEBdeuXTtjyVlnZ2eTtQc5Pf/88wwdOpTU1FTc3NwYOXIkX375pfH+DRs28PrrrxMcHMzFixe5du0aISEh/O1vfyt01OHFF19k8eLFtGnThrt373Lt2jWaNGnCf/7zH6ZPn26V19ioUSMef/xx3N3dOXfuHDdv3qRx48bMnDmTwYMHY2dnx9NPP01gYCBXr17lwoULBAQEMHHiRGbMUItQtGrVipkzZxIQEMC1a9eoVq2a8b6cJk6cyM8//0z79u3JzMwkPj4eNzc3hgwZwoQJE6zyeqo6RS8910lNTcXLy4uUlBQ8ZaGaqACysrJYt24dLVu2pF69eqXzJElJ8L//Pbg9YgQ0bQpA9JVoxm0YV8ADH/i2z7e092uvVpUyTKtyd4e33iqNiG0vfgcsMKNc4di1+U87uncPZs5UkwpQK2vdn09tqAoF+U4GY/aoNvR1Ow3zH4Nd9x5Mh6qugZY5RoyKG5uNXb58maVLl3Lr1i3s7e3p378/bdqY0RROCBtJSUnh/PnzNGjQAFdX12IfxzDtZ/Dgwfzyyy8m9xk6eFekLt2VXVpaGqdPnyY4ONhkOmdFZsl5soxYCFEBOTg4MHDgQJOk4sSJE8aKF1aRe4F1jkVxyWnJZh3CuF/Oyj6WLNyuaIrTRyMlRe1UvnYtrF6tjhSdPq1WiEpIUEvQAn2b+zN7VBv8vEynRfl5OatJRXN/qNMREj1NM48AC9/v4vb4KGWGK5SNGjUiOzub1atX8+uvv5KVlWXr0IQoFTNnzqRXr14sWbIEjUbD3//+d1uHJESRZPG2EJXAtWvXWLFiBVqtln79+tG2bduSL3LNfYUt+UEyUcu1FuYw7peU9GBjznUElY25pXHdfNTkITpa7U6ec+A4MxMuXlS/nJzU7y++CO3a0be5P4+G+rEv/gZJtzPw8XAmvF517DSKeozNW8ClC7ASUMAZqGHh9aPy2uMDcHFx4amnnmLnzp38/vvvxlKXAwcOtHFkQljf7t272bJlC76+vkybNs1YilmI8kwSCyEqAXd3d0JCQjh+/Dhr164lISGBxx57zNgLo1hcXKBmzQe9FWJijKVi2/i0wdfVl6S0pHzXWSgo+Lr60sanjdqFO2fJ2qCg4sdU3plTGtfZD7aegoTf8z+GqysEB8P582qSceYM/P3v8MQTEBGBXWAgHevXeLC/TgfHjsOePepjajWGZoPhzGZonPGg0pRnIGSlQfqtgmMrqNt2OaIoCl26dKF27dqsW7eO7t272zokIUrF8uXLi9zn0qVLZRCJEOaTxEKISsDZ2ZkRI0awa9cutmzZQmxsLImJiURERFCzZs3iH7hdO4iKUv99+zacOAGhodhp7JgSPoVJ2yahoJgkF8r9Wf+Twyer/Sz27897zMqqqNK4GXrI6goZCXkf6+amJhVaLWg0ak+Lq/enJel08Ouv6rSojh3VtRcODuo+p06pFaRyqtUYxr0J1dNN+2gc/6189Piwgnr16vHSSy+ZjMydOnWKkJAQ7CrzdDshhCjHJLEQopJQFIXOnTsTGBjI8uXLSUpKYu7cuQwcOJBmlvSNyKlVK9iyBQzz2DdvVq+mu7nRK7gXs7rPyrePxeTwyWofiwsXIGdn1uBg8C2/U22soqA+Gi5+oO0OdjmaUWk0EBoK7dtDnToPRhfS09URoh9+gGPHHuwfH6+W7i1sLY29PQwenH+vkPLQ48OKciYVJ06c4KeffqJOnToMHz689Hu8CFFWsrPVtVjp6epnhpub2kBTmkeKckiqQiFVoUTlc/v2bVasWMG5c+fo2LEjffr0Kf7B1q41HXXw84Onn1b/sFFI5+3z5+Gnn0y7SQ8fXnRzvOJ0rC6Pcr+OQ9cgNvbB/dWrq+9jjRoFH0Ovhx9/hOXLH5TpVRQ1Ecm9BsbeHlq0gE6dTPqNmBVbRX2Pczhx4gS//PILmZmZuLm5MWzYsNKrmCaEGUpcFeriRbWwQ2ysaelvAG9vCA9XRzDlvKVcqepVoSSxQBILUTnpdDoOHDhAmzZtSjY1JC0NvvkGrl9/sM3VFdq2Vac15fzg1Ovh0iV1UfLhwyaVpGjWDIYNM+0unVtxO1ZD+T5ZvnsXZs168H54eallZHNcVS8wQQPYsQPWrFFHKm7eBH9/qF9fXdzt6am+t61aVe6F8QXJ8XO/nuXM0t3nuZqcjKIoPPLIIzz88MPSrVvYRLETi1OnYN06dcS3KBqNekFhwAA12RA2J4mFJBaSWIgqQavVsnz5ctq1a0f9+vUte/CNG/Ddd+o6i5wURZ3e5O6urgO4fv3BuoCc6tVTr87bFzL70tCxOs/C4vsnhfl12M752OImJGVhxw51SpnB00+bNA3cfH5zvlPKpoRPUaeU6fUwf76atIHadHDSJNOO5lVRPj/3LDd/1rkM5eA1B0BtvjV48GBcqmLSJWyqWInF7t3wyy+mJbrN4eGhXqyoXdvyQIVVVfXEQiboCVFF7N27l2PHjvHDDz+wfft2LLqmUL26+kfLx8d0u14P586poxNHj+afVDRvXnRSUZKO1YaEJDXXuoPURHX70dWFvLAyoNOZTiWrVg0aNDDe3Hx+M5O2TTJJKgCS0pKYtG0Sm89vVhO48PAHd2ZkqO95VVbAz93h7hUGXvs/Brbwxt7enpMnTxIfH2+jIEVhtDot0VeiWXd2HdFXotGWw67vZWrPHnXaY+6kIjgYBg2C0aPVz9LevdXPkZxu34bZsyExsczCFSI/snhbiCoiPDyc69evc+DAAbZu3UpCQgJDhgwx/0qalxeMHw+HDqlTnXL2pshPgwbqyXDDhoVPfwJ1KkvuxMCEHlIvqfvl7ApdZEKiqAlJk8dsNy3q+nV14aVBu3bG90Or0zJ93/R8S/bq0aOgMGPfDHoE9cCuWTPYsEGdmgZqH4yq2nnajJ976/Nz8R+3iZOnzxAaGlrGAT5Q6BS3KqzIUbqq5tQpWLHCdFvz5moSERiYd/9HH1Uv5vz224PP4owMddrqpEl512CVsS+//JJp06ZxO/cot4UURWHRokWMGjXKSpGJ0iaJhRBVhL29PU888QRBQUH89ttvnD59mjlz5jB8+HBqmzt87uCgLhxu1+5BxacbNx5UK3FxUf8Itm2rjnKYqzgdq6H4CUlZunvX9HaOPh4xSTF5Ripy0qPnStoVYpJiaO/XXl04f/aseqchwaiKzPy5+2Wexa9rV+PWO3fusGPHDnr27FmyHi9mkpPn/BlG6XIn1IZRulndZ1W992fdOtORiq5d1d41BVV+0mjUxCMkBObNe7Ae4+ZNdeplSQp2AMOGDSMlJYVNmzaV6Dii6pHEQogqplWrVvj7+7N06VKuX7/Od999x6BBg2jRooX5BzGsrQgOtk5Q5nZ7zr1fcROSsmQo1Wvg4GD8Z3JaMuYw7pfzZDh3lZiqpBg/d71ez8qVKzlz5gzx8fEl7/FSBDl5zp9Fo3RVZWTn4kXThdrNmxeeVOTk6qpOU50588HI6N690KsXSD+XPHQ6HVqtFoccn8MAGRkZODs7W3y84j6uMpM1FkJUQb6+vkyYMIHQ0FDs7e3x9/e3/CB37qhdoY8cUef7nz5tOuXHEoaO1RQ0ZUpRO0fn7gpd3ISkLDk5md7OUX63lmsRZWFz75ezdG9+f8x0WojfAXHL1e+Vdc56MX7uiqLQtWtX3N3djT1ejhw5UirhFXXyDDBj34wquabAklG6KmPnTtPbvXtb1qPCzU0tO2uQkqJ+LpeiDz/8kEaNGuHi4oKfnx+jR48mJZ/P/x9++IHg4GCcnJzo0qULZ86cMbn/xx9/JDQ0FCcnJ2rXrs1bb71FVu6LMYXQarVMmzaNwMBAnJ2dady4Md9//73x/nXr1qEoCsuXL6dZs2Y4OTmxadMmwsPDGTt2LM899xzVqlWjW7duAKxfv56WLVvi6OhIrVq1ePnll03iKehx4gEZsRCiinJycmL48OHcuHGDGjl6KRR6BUavV6fiREerXbjzWwBev746XapRI/P/OBbVsRry7wptSEhSE8l/vr2i3p87ISlLuStonDypVskC2vi0wdfVl6S0pHxPQhUUfF19aePTRp36lJCjY3fuBnDlvTJWSeUsJ+xas1g/9+DgYF544QWWL1/OuXPnWLZsGRcuXKB3795W7dZt8RS3KsTiUbrKLjvbtL9NcHD+ayqK0qEDbNr0oKR1dDS0bGmdGPNhZ2fHrFmzaNiwISdPnuS1117jlVdeYdGiRcZ9MjIymD59Ot9++y1OTk689NJLDB8+nJgYNWncsGEDEydOJDIykp49e3LixAlefvllAD777DOz4njnnXdYunQpX375JU2bNmXz5s1MnDgRX19f+vXrZ7LfjBkzaNSokXGkcvny5YwZM4bt27cDEB8fz5AhQxg+fDgLFy7k8OHDvPrqqzg7OzNz5kzjsXI/TpiSxEKIKkxRFJOkIj4+np9//pnHH38879So+Hi1WV7Ofhb5OXNG/fLygr59oWlT84IpTlfo4iYkZcnbGwICHnTLPnQIHnkEHByw09gxJXwKk7ZNQkExSS6U+/FPDp+sTgk5eDBvXxCDgkr1GipjFVaqtyLIL2lyqYZxgb4FP3d3d3fGjBnD1q1b2bFjB3v37uXSpUuMGDHCat265eS5YBaP0lV2KSmm0xpbty7ecTw81Is5x46pt69dK3lshXjvvfeM/27cuDHXr1/njTfeMNknOzubL7/8kh49egCwcOFCWrduzfbt2+nWrRsfffQRr776Kq+88goATZs2JTExkQ8++MCsxCI9PZ0vvviCtWvX0rNnT+Mxdu7cyezZs00Siw8++IBBgwaZPD44OJjZs2cbb7/22mv4+fnx/fffo9FoaNWqFZcuXeIf//gH//rXv4wXH3I/TpiSqVBCCKOYmBgyMzNZsWIFv/32G9nZ2eodhw7BokVFJxU5paTAkiWwa5f5jwkdAK8fhrFrYeg36vfX4wo/KTYkJJ65pnN5BpSfE+r2Oa5Kp6er7+d9vYJ7Mav7LHxcTUv5+rr6PpiHn5WlXoE08PZ+ULK2JKV6K4KCygmn31K/u+Qqu2nGz12j0dCzZ0+eeuopnJ2dycjIsOpibjl5LphhlE4pYNqjgoKfq586SlcVpKeb3i5JcuvuXvBxrezXX3+lY8eO+Pj44ObmxgsvvMCtW7dMqkDZ2dnRNUfxhFatWuHh4UFcXBwAx44dY9asWbi6uhq/3njjDZKTk82qJnX06FEyMjJ44oknTI7xyy+/cO7cOZN9O+acKnZfy1wjOsePH6dt27Zocoy0d+vWjbS0NM4aimbk8zhhSkYshBBGgwcPplq1avzxxx9ER0dz+fJlhjdvjveGDaY7ajTqSETr1mo9dUWB1FT1hPnwYXV432DjRrWHRc4+DIXR2FlewSl0gFpStrx23m7eXH0fDH/sN2wAX1+oUwdQk4seQT3yL0uq08HKlXDr1oPjtWv3YJpZRaiMVVzmlBO2d4Yxq+FussU/98aNGzNx4kSys7Nxur8WxtDfpSTdui2a4lbFWDRKVxXkni5qaWO8gh5bigu3T5w4QUREBKNHj+aTTz6hVq1a/P7777z++utkZmaaPfKXnp7O22+/zZNPPpnnPnPKoKempgKwYsUK6tz/LDXIPZ03v5jc3NzMitNaj6sqJLEQQhhpNBoeeeQRgoKC+OWXX7h04gRzli1jSOPGNDRMmQoLUyuO5P6grl4d6tZVFx7+8Yfa7Mlg/Xq1uV7duqUYfDESkrLi4KAurvz9d/V2drY6AjRggDqlSaPBTmOXd759aiqsWaPWuDdwdTXtX1ERKmMVlzlJ0+3LoGigxbBiPUW1XI3G9uzZw+nTpxk6dKj5PV5ykZPnwhlG6fIrxTs5fHLVqpaV+yQ1uQTT43I+thQ7ze/ZswedTsecOXOM04Nyrq0w0Gq17Ny507jA+a+//uL27dvGabahoaGcPHmSZjmndVqgdevWODo6cu7cOZNpT8XVpEkT1qxZg06nM45abN++HTc3N0JCQkp8/KpCEgshRB4NGzZk4sSJLJ0yhcv37vFjXBzPt2lDYJ8+auJQ2NVcV1d1bYWHh7qYENRF3n/8UbqJRXn38MNqV1zDHOisLLUh1pYtat+PZs3U9y47W+1gvn+/ukA+51VIe3t46inT5lcVoTJWcZVx0pSens727dvJyMjg66+/JiIiwvweL7nIyXPhCh2lq0o8PNSpjYYRyejo4pWKvXTJtGRtMX9vc0pNTWX37t0m23x8fGjcuDHZ2dlERkYydOhQtm3bxoIFC/I83t7enldffZUvvvgCBwcHXnnlFcLCwoyJxrvvvktERARvvfUWTz31FBqNhgMHDhAXF8cXX3xRZHze3t688MILTJs2Da1WyyOPPMLNmzfZtm0bXl5exrUb5nrjjTeYN28ezz77LG+88QZHjx5l+vTpTJw40arFHSo7SSyEEPnydnBgnJ8fG1JTycjOJqBlyzxJRaFdhTt1Uk+kDx9Wb589qy4oLMXeAeWaRgNDhsDy5XD8GNxKgHt34aYb3LyhJhiFcXSEiAiTBntAxaiMVVxlnDS5uLgwbtw4lixZYuzx0rt3b8LDw4s1NUpOnguX7yhdVaPRqNNEN25Ub9+8qV58aN7csuPkXsvWuXOJQ9u3bx+dOpl+bkRERLBkyRI++ugj/vvf//LPf/6T9u3b8+GHH/LSSy+Z7Ovs7Mxbb73FmDFjSEpKol27dialYIcMGcLSpUv55z//yVdffYWDgwP16tXjmWeeMTvG//znP9SqVYuZM2fyxhtv4OHhQbNmzXjnnXcsfr316tXjl19+YfLkyYSHh+Pl5cXIkSOZPn26xceqyhS9Pr96kVVLamoqXl5epKSk4Jm7NKQQVdXOnbB5MwA6vR7NqFHQsCEZGRkkJydzQnei6K7CiYkwZ86DY3booI5mVFU6LWz7F/z4OZxNAd39j18nD2jwKNRqnP/jfHxg8GAoqN+IsSoU5FshqbwsYreUTgufNy86aXo9zqrraTIzM1m9erWxz0WzZs0YMGCAcR2GEOZISUnh/PnzNGjQoPBpdamp8PHHD0YnfXzg1VdNRyYLEx+vfs4a+i0EBcHrr5codlF8aWlpnD59muDgYLy8vGwdjlVYcp4sVaGEEPm7X7kDQFO9OtSvb+xe/O5/3mXi/IlcuXvF5CGGrsKbz6sJCf7+pjXZcxyzyjm6Gv5dH/6YDrUzoKMjhNiDswKZd+DISkg+8WB/jQZCQ2HsWHjxxYKTCqgYlbGKw1BOGMjbPLH0ygk7OTkxbNgw+vbti0aj4ciRI3zzzTdotRW0spYo3zw9IWd576QkmDcP7t4t+rHx8fDddw+SClBHi4WwEZkKJYTIX84uqo0bg0aDNjsbOzs7diTs4E7WHbJuZOHR2gONg3qNQo8eBYUZ+2bQI6iHOuWjaVN1/i+ofyizs9W1AlXJ0dWwdLTpNgcF6thDkB2k6iEDcNgDj08CN3d1jrQlpSfLe2Ws4ipOfxMrUBSFDh06EBgYyLJly2jdurXMsxalZ8AAdbqooczqhQswc6Za9KFDh7yfBZcuqdOfDhwwTSoaN1arxglhI1Xsr7sQwmyZmQ/+fb/CiL29PXW71EU5oqDEKWRcyiA7JRuvcC/svdSPkzxdhXNXJ8nMrFqJhbFkagEUBbwU8AK4ATUyoF4x552X58pYJWHDpCkoKIgXX3zRpHxlSkoKbm5u2Fel32NRury94fnnYfZsyMhQt6WkQFSUWgSjUSO1T4VOp1Z/yrlQ26B2bRgzJm8JWyHKkHwqigopNjaWsLCwUttfoJ78G66E5ehLcS39Gq4hrjh4O5ASnUL2nWxubL+BR5gHLsEPkghjV+GcV9MMx61KiiyZmoulFY502so3SpEfGyZNLjmS48zMTBYtWoSjoyMRERF4e3vbJCZRCdWuDa+8At98oy7iNtBqH1STK0jjxmpSkat/gxBlTdJaUeHMmzePVq1amV2pYfr06bRq1Yp58+aVcmSVTM6Fg5cfnBgbugU7VHegevfqOPk6odfquXv8LrpsXZ79SEx8cBw7O7W6UVViaaJgSYWjo6vVxc0LHocVz6nfP2+ubhel4vr169y9e5fLly8zZ84cTp48aeuQRGXi7w+TJqkV+MxZ+BsUBCNGqKMdklSIckASC1GhxMbGMmHCBACmTp1aZHIxffp0pk6dCsCECROIjY0t9RgrjXr1Hvz7zBm4cQN40FVYQUHjpMGrgxfuTd3xau+Fxl6DgoKfq5/aVTgtDe5X1jEeswQdjSskSxIFz0Dzy8IaKkHlHg1JTVS3S3JRKgICAnjhhRcIDAwkPT2dH3/8kd9//x1dSTomC5GTqyv06QPvvKMWbwgNVStFGXpe+PtD+/Zq5afXX1fL1cr0J1FOVLE5CaKiCwsLIzIy0pgsGL6//ffJ7Iu/QdLtDHw8nAmvV51//2uG8X6AyMhImQ5lifbt4dChB7ejo6FPnzxdhdGAWxO1e6yhq/Bwj+GcPnWaxteumUyjon0JatZX1Ck/RfaZMFDMr3BkXLeR3/H06rGipqjrEirCe1TBeHl58eyzz7Jx40b27dvHH3/8QUJCAkOHDsXd3d3W4YnKws4OWrZUv4SoICSxEBXOlClTAEySi/9tO42m1WDjPrpDK0nY8I3xdmRkpPFxwkwBAeqXYRrUvn3qPN66dQvtKjyx/kSOrzvOT5vn8fDNmzxSuzYaRVGH9Rs2LF4sR1cXUBVoRvkvpWoombp0DGqJ1HySAZfq8MQX5r+WItdt6CH1krpfZVzMXQ7Y29vTv39/goKCWLNmDfHx8URFRTFs2DBbhyaEEDYjY2eiQpoyZQqRkZHG2wkbviFlzzIAUvYsk6TCGhQFHnrowW2tFn76SZ0WhdpVeMPQDXzb51tmdJnBt32+JWpoFIPDBtOubl2IjWXnmTMsjI3lzr176rGKM1xfGab8FNRnwqUadJ8Gb5+2LEEyd92Gpes7hMVatGjB+PHjCQkJoW9Vbv4orGrPnj2lun95MGzYMB599FHj7fDwcJ577jkbRiSsQRILUWG9/ffJBPV58CF0a/sCEj4fwa3tC4zbgvo8x9t/L6TUpyhcy5amjZsyM+GHH2DxYjh5EjsU2vu1p39If9r7tsPu/AXsVqyg79mzDG/YEEc7O87dusXX8fGc87VgrYFBkVN+UKf86CpA47LQAfD6YRi7FoZ+o35/+wx0n2z5dCVz121Ysr5DFFutWrUYM2aMyTSogwcPkmEoG1rJaXVaoq9Es+7sOqKvRKOtCP8fy7FZs2bRsWNHpk2bZtb+06ZNo2PHjsyaNcvqsZw5c4aIiAh8fHxwcHAgICCAcePGcfWq+RctTpw4gaIo7N69u9D91q5dy8yZM0sasrAxmQolKqx98TfQtBqMd0a2MZnQZT7oVOrdbSyaVoPZF3+DjvVr2CrMik1RYOBASE+H06fVbXo9nDqlfnl4qFOcFAVSU02a6jXz8cHX3Z2lly6RVK8eCxcvplevXnSypCtsZZvyY62SqUWu21DU+81dCC6sKi4ujl9//ZUdO3YQERGBn5+frUOyCq1OS0xSDMlpydRyrUUbnzZsTdia75TIKeFT6BXcy4bRVkx79uzhzTffBDCOyn/66acF7j9t2jTjfm+++SadOnWiQ4cOVonl2LFjPPzww9SrV48FCxbQoEEDYmNjmTp1Kg899BD79u3Dx8fHKs8FlPhY2dnZKIoijSxtTEYsRIWVdFu9GujVYTgaJzeT+zRObnh1GG6ynygme3t46ilo0ybvfbdvw8WLkJBg2qn7vppt2/L83LmEtW2LTqcjM2fTPXPIlJ/8GdZtAJC7ytb92+YuBBdWV716dby8vLhx4wbz58/nUM4iCBR8hb88X/nffH4zfVb0YdyGcUzeMZlxG8bRbUk33tj2hklSAZCUlsSkbZPYfH6zjaKtuDp06JCn6EhBIxc5kwpQ1xtaK6kAmDhxIg4ODmzfvp1+/frRsGFDhg0bxu+//87Vq1eZNGkSoHap/+GHH0we6+HhwZdffglAkyZNAOjUqROKohAeHp7v8+WeCpWens7EiRPx8fHBxcWFli1bsm7dOuP9X375JR4eHvz444/Ur18fZ2dnThsugAmbKfGIRXJyMpcvX6Z+/fr5VsO4ffs2Bw8epGvXriV9KiFM+HioNbtT9iwzGakAdeQiZc8yvDoMN+4nSsDODgYMUJOLffvUErLaAk56NBpo0gTatYN69XBUFAYNGkRoaCgNcyze1uv1KEWVni3NKT8VtcqUgWHdRr6L2qeX/0XtlVhgYCATJ05k5cqVnDp1ilWrVnHhwgX69evH9svb873C379ef9bFryuXV/43n9/MpG2T0OcaHUu5l/diAoAePQoKM/bNoEdQD+wq0v+rcsAwQmFIGvIbucgvqShsZMNSSUlJ7Ny5kylTpuDmZnrhLigoiEGDBrFmzRqzyixv376dbt268euvv9K6dWucnJzMiuHZZ5/l5MmTLFq0iKCgIJYsWcLgwYM5cOAAzZs3ByAjI4PPPvuMOXPm4OPjQ0BAgOUvVlhVsROL7Oxsxo8fz8KFCwFwdHRk4sSJREZGmnQpPXr0KD169EBb0EmIEMUUXq86ukMrTdZUaJzcjEnGre0L8HC2J7xef1uFWPnUrq1+9ekDsbFw5Yo6TQrU5ky1akGrVuDpafIwRVFo3Lix8XZ2djYLFiygdevWtG7duuAEo7Sm/FTkKlM5hQ5QS8pW5ASpknJ1dWXkyJHs2LGDrVu3EhMTw5a4LWzy3oSdu+nP52raVb478l2eYxiu/M/qPstmyYVWp2X6vul5koqi6NFzJe0KMUkxtPcrQZnpKqqw5KK0kwqAI0eOoNfrCQ0Nzff+pk2b8vPPP5OYswFqAXzvr6+rVasWQUFBZj3/qVOnWL58OadPn6Zu3boAfPTRR2zatImvv/6ar776ClD/lvzvf/+z6kiNKJliJxb//e9/WbJkCf/4xz9o27Yt27dv57///S/bt28nKirK+IskRGn5979mmFR/8u42Fq8Ow0nZs8yYbCRs+IZ//6uBVIWyNjc3sGStRC4xMTEkJCSQkJDAhQsXeOyxx3BwcMi7Y6GlWos55cdQZSr3iZKhylTEwoqVXFhr3YawOkVR6Nq1K7Vr12bpsqWs2b8G+7b2eRKLgpSHK/8xSTF5pjpZIjkt2YrRVC35JRdfffUVt2/fNu5TGklFTnq9ZQmltcTExKDVavMkNvfu3aNatWrG2w4ODgVOrRK2UezE4ttvv+W9994zzgXs27cvo0ePZtCgQXTq1IkNGzbQoEEDqwUqRE45O2qDWv3J0MfCq8NwPJztjUmHYT9JLsqP9u3bk5mZye+//86hQ4dITEwkIiKCGjXyWWRvzSk/0lhO2EBISAgPDXmI+enzcfI3bxqIga2v/Jc0MajlWstKkVRNuZOLskoqQkNDURSFo0eP5nv/sWPH8PT0xN/fH0VR8iQg2TkboxbDnTt3sLOzY8+ePXkWY3vmGBF3cnJCI13Hy5Vi/zTi4+PzVHcJDQ1l9+7dVK9enc6dOxMTE1PiAIXILXdSERkZSfy6efw0vgNfPNmKn8Z3IH7dvDxDxdOnT7dFuCIfiqLQpUsXxowZg5ubG1evXmXu3LkcO3Ys/wfkV6r19TjLRxYsqTIFaiISvwPilqvfy3oxra2fX1hNul06LvUeTBPWpmlJ2ZuCNt28n6mtrvwXNzFQUPBz9aONTz5FH4RFPv30Uzw8PEy2eXh4lOpIha+vL507d+bbb7/l7l3TNYwJCQmsWrWKJ554Ao1GQ7Vq1bh8+cHn6uHDh01KLRvWVFgyJT48PBytVktiYiLNmjUz+TJ3OpWwjWInFjVr1sy3jnGNGjXYunUrzZo1o0ePHmzZsqVEAQqRk6HUnYGh+Z2dRqFj/RoMbBVIx/o1sNMoeZroTZ06ldjYWFuELQpQr149XnjhBYKDg8nMzGTJkiXs27cv/50NU35aDFO/F2dEwZIqU0dXw+fNYcHjsOI59fvnzcuuIZ+tnx8ksbGi3CfoqQdTybicwc1tN7mXfM/ix5eVNj5t8HX1RclTfaxghn0nh0+WhdtWMG3aNJORClBHLsztc1Fcs2fP5t69e3Tr1o2oqCjOnDnDihUr6NmzJ76+vsa+GZ06dWLu3Lns2rWLHTt2MH78eOztH0yICQwMxMnJibVr13Lx4kWuX79e5HO3aNGCgQMHMm7cOBYuXMjx48fZvn0706ZNY8mSJaX2mkXJFTuxaNu2LatWrcr3Pnd3d6KionjkkUd49913i/sUQuQRFhbG3LlzAfM6audMLubOnUtYWFipxygs4+HhwZgxY+jcuTMuLi40atSo9J7M3OpR18/Yttt3eeg2Xh4Sm0ok9wm6R5gH9l72aDO03PrzFndP3s13Prutr/zbaeyYEj7FGEtOhtteTl4m231dfW264Lwyyb1QO+fIRWGlaK2hefPm7N27l7p16zJq1CiaNGnCK6+8QufOndm7d6+x78SXX35JQEAAvXr1YvTo0bz55ps4Oz+oxujg4EBkZCQLFiwgODiYfv36mfX8S5YsISIigqlTp9KiRQuGDx/O/v37qVevXqm8XmEdir6YK3OWL1/OzJkzWbt2bf7zogGdTsdLL73Ehg0biI+PL1GgpSk1NRUvLy9SUlJM5u6J8is2NtaiJMHS/YVtpKWl4erqarx969YtvL29rfcEOq16clxUlSm9Dm4XVO3k/j6vx5XOOgxjjAVN2crx/FA6FaEKWuBuOLGsaAvcywlD2VZQ107os/Xcjr1N+gW1spqTvxOebTzROKrX/Awn7uXhJH3z+c15yuT6ufoxOXwyPYJ65GmcJyMVkJKSwvnz52nQoIHJ55q5Cqr+VBZVoUTxpaWlcfr0aYKDg/Hy8ir6ARWAJefJFiUWKSkpleZNykkSCyHKn5MnT/Lzzz/To0cPHn744aJ7XpjLeNIM+VaZ6j4VtpnxR3rs2tKpxhS/Qx0dKEr3aRDzvfVL5lqS2MjJo8Vyn6Dr9XrcrrpR/Vx1Tlw7QbpjOt6dvLF3tzeeuNs6qTDIr/O2JBAFK0liUVTyIMlF+VXVEwuLqkL16NGDTZs2FThCIYQQ1hIfH49Op2PLli1cuHCBIUOGmPTIKbaiqkxpi57vDpRet29zj5tf8mONkrmWLHAvaWJV0ZsUFkOv4F75XuFPuprEz0t+5mrmVTr16oS/l3+5O3G309hJT4oyYE7SYE4TPSFswaIRC41GQ9OmTdmyZQt+fn6F7puVlZV/XfpySEYshCifDh48yG+//UZ2djbe3t5ERERYr7NqQSe15o4Y2HrEokAlHFGIW66uqSjK0G/UhfTFVVmaFFpReno6mZmZxul/er2e7OzsCvO3VJgqzojFnj176Nixo/F2USMRuZOQ3bt3S7M4G6vqIxYWLd7++9//zrFjx+jSpQsXLlwocL8lS5bQpEkTSw4thBB5tG7dmueff57q1atz69YtvvnmG6Kjo63TtKmgKlOGbt8FVsFRwDPQ8m7f5iry+YuSq2Supcxd4G7ufvkpyeL0SlypysXFxWRN0R9//MG8efO4npxUaV+zMNWhQwdmzpwJmDe96dNPPzVWSpw5c6YkFcLmLF68HRkZyTvvvENQUBCbN2+mYcOGxvv27NnDpEmT2Lt3L2BZzWJbkhELIcq3jIwMVq1axfHjxwF49tlnCQ4OLr0nLGodRmkvXi70+c38yC7uiIK5C9yLOyJSkjUcVWiUIzMzU+2yfHY/Tue2MLBuGqG17r8flfQ1VzYlWWOxZ88ei5IES/cXpUdGLCw0depU/u///o+LFy/StWtX4uLiOHfuHCNGjKBz587s2bOHOnXqsGDBgmK/ACGEyMnZ2ZkRI0bQu3dv2rdvX7pJBTxYh+Hpb7rdM6BsKiIV9vzdzSwvWdwRBY2detIK5B01uX+77/Tir4WwtEmhQXkowVuGnJycmNA1kOCLv5J5N4WlR7KIOp2NVqevtK9ZPGBpkiBJhSgvLFq8bfDiiy/i6enJs88+S5cuXcjMzCQzM5Pq1aszbdo0XnnlFRwdHa0dqxCiClMUhU6dTKcf3b17l/PnzxMaGmr9JwwdAE0es93i4oKeH+5XgypiRKEkU7WKWuBeksTKkiaFBjqtGku+r1cPKBA1RX2/ytFi5xLRafHY8RFjW9mz5azCnwnZ7LmYzaVUHcObOeDppKl8r1kIUeEVK7HQ6XTcvXsXDw8Pbt68iaIoPPnkk8yePbvSDPsIIco3nU7HihUrOHv2LOHh4fTp0wc7OyufYBnWYdhKQc/fd8b9qVK5p0ZZYUTBIL/EJughSNirzvUvbqJVnDUcZVmpqry4/5o1isKj9e0J8lJYdTybhFQd38Tc49WHHLGvbK9ZCFHhWTwVauXKlTRv3pwXX3yRmzdvGq8gbt68uVw3wRNCVD6BgYEA7Nu3j++++46UlBQbR1RGymqqVs4F7uk34b9hJe/EXZzF8cUZ5ajocr2WJjXtmNDWET93DV2D7bHXKPnuJ4QQtmRRYtGpUyeGDRvG8ePHad26NVu3bmXnzp3Mnz+fmzdv8sgjj/Dnn3+WVqxCCGGk0Wjo2bMnI0eOxNnZmYsXLzJnzhxOnz5t69DKRugAeP2wWvZ26Dfq99fjip9UFFZtyZrrG4qzhqMsKlWVN/m8luouCuPbONDG/8Gf7uRMJ9LS0soyMlEG9lh4kcTS/cuTL7/8Eg8PD+PtN998UyqLVmAWJRZ79uwhMDCQBQsWsH//frp16waoFVp+/PFH7t69S58+fdi0aVOpBCuEELk1atSIiRMn4u/vT1paGosXL2br1q3odDpbh1b6CiqZa6mjq9XRh/xGI4pc34A619+SEqiWjrjYugSwLRTwmu00yv0u9ArpLv4s3nGKOXPmcOnSJZuEKaxvVkICHQ8eZNrZs2btP+3sWToePMishASrxTBs2DAURf1ds7e3p0aNGnTu3Jkvvvii1Ct+vv/++2zfvt1qx8uduIjSZVFi8fHHH3Py5ElGjx6d577hw4ezcuVKdDodAwYMYOXKlVYLUgghClOtWjWee+452rVrh16vJy4ujqysLFuHVTEUNRrxx2fFq+JUFEtGXEq7UlV5ZMZrTuvyLho7e1JSUvj222+t1+NF2MyelBTePHMGgMgLF4pMLqadPUvk/b5ib545Y9WRC0PPslOnTrF69Wq6du3KtGnTeOSRR0r189XLywtf30o0+ljFWJRYvPPOOzg7Oxd4f//+/Vm/fj0ODg48+eSTJQ5OCGF7Wp2e3Weu8+uhS+w+c10td1kO2dvb8/jjjzN48GAiIiJwcnKydUjlnzmjEXtnm3es4sz1t2TExdYlgG2hiNdco9MoJkyYQNOmTdFqtfz222/88ssv3Lt3zzbxihLr4OXF1Dp1jLcLSy5yJhUAU+vUoYMVC+g4OTkRFBREvXr16Ny5M5GRkfz888/88ccffPXVV5w4cQJFUdi9e7fxMdeuXUNRFNatWwfAunXrUBSFJUuW0KhRI5ycnAgLC2P//v0FPm9+U6G++OILGjRogKOjI7Vq1WLs2LHG+z788EMaNWqEi4sLfn5+jB492rjebt26dbz22mvcuXPHOALz5ptvAmqn+4kTJ+Lj44OLiwstW7Y0xg1w8uRJHnnkETw9PXFxcaFBgwYsW7as5G9sJVesqlCF6datG5s3b6Z///7WPrQQooxFHU7kozVHSUzJMG7z93LmgydC6dvcv5BH2k5YWJjJ7ejoaLRaLQ899ND9KSTCyJxqS+k3zTtWWaxvsHUJYFso4jU7OzsTERHBnj172LRpE3FxcVy5coWIiAhq1apl4+BFcXwaEgJgTBoM3w3bIf+kIuf9peWJJ56gcePGrFq1yqLzvGnTpjFz5kwCAgKYMmUKAwcO5OzZs2ZdAPrXv/7F+++/z7vvvsvAgQO5efOmyVQpOzs7Zs2aRcOGDTl58iSvvfYar7zyCosWLeKRRx7h448/ZsaMGRw9ehTA2ODt2Wef5eTJkyxatIigoCCWLFnC4MGDOXDgAM2bN2fixIlkZWWxefNmPDw8iI2NlSlVZrB6YgEQHh7Otm3bSuPQQogyEnU4kRd/iMlzLftKSgYv/hDD7FFtym1yYXDt2jWioqLQarUkJCQwYMAAGcnIydxRBpdqkH6LUuubYQlblwC2hSJes6IodOzYkcDAQJYtW0ZycjLbtm1j+PDhZRiksKbCkgtbJRUGDRo04NixYxY9Ztq0aQwaNAiAn3/+mTp16rB48WLGjRtX5GM/++wzJk6cyLvvvmvc1rVrV+O/33vvPeO/GzduzPXr13njjTcANfE2tEEICgoy7nfq1CmWL1/O6dOnqVu3LgAfffQRmzZt4uuvv+arr77i0qVLDBgwgPDwcACaNm1q0WuuqiwuN2uu5s2bl9ahhRClTKvT89Gao4VNkOGjNUfL7bQogxo1atC7d280Gg1Hjhxh7ty5JCUl2Tqs8sPcUYaHXrz/jyqyvqGCqlOnDi+88AKtWrXi8ccft3U4ooQ+DQnJMy3Kc8cOmyYVAHq93uLR35yJgI+PD/Xq1TOOIBTm0qVLJCcn8+ijjxa4z6+//krHjh3x8fHBzc2NF154gVu3bnH79u0CHxMTE4NWqyU0NBRXV1fj1759+4ytE1588UU+//xz2rRpwxtvvMHevXsteMVVV6klFkKIimtf/A2T6U+56YHElAz2xd8ou6CKQVEUHnroIZ599lk8PT25fv068+bN46+//rJ1aOWDudWWur5V9dY3VFBubm4MGjQIFxcXQD0J3LFjB7du3bJtYKJYcicXt3NUZLJFUgHq1f6goCA0GvUUMmfBAGuv73Fzcyv0/hMnThAREUGzZs34+eef2bNnDzNmqEUPMjMzC3zcnTt3sLOzY8+ePURHRxu/YmNj+frrrwF44403OHHiBE899RRHjhzh4Ycf5pNPPrHei6ukJLEQQuSRdLvgpKI4+9laUFAQEydOpH79+mRlZfHLL7+YLNKrsiyptmTtvhmiTBw6dIgtW7ZUrR4vlcynISF42JmOCHrY2dkkqVizZg2nTp1i8ODBBAQEAJiUOt63b1++j9uxY4fx38nJyZw7d47Q0NAin8/b25uAgIAC2xjs2bMHnU7HnDlzeOSRR2jRokWe0suOjo55yo+Hh4ej1WpJTEykWbNmJl85p0zVr1+ft99+m40bNzJx4kQWLFhQZMxVXamssRBCVGw+HgVXfyvOfuWBm5sbTz/9NH/88Qfbt283zrut8gyVh6Immy7k9gxQk4qciUNVXN9QwdWrV4+AgAAuX77M4sWL6dq1K926dTNebRbl37SzZ01GKkAduZh29mypJheZmZkkJCSQnZ3N5cuXWbt2Lf/973/p0aMHL730Evb29oSFhTFjxgwaNGjAlStXeP/99/M9VmRkJDVr1jQu3q5WrRojR440K46pU6fy1ltv4ePjw8CBA0lJSWHbtm288847NG7cmOzsbCIjIxk6dCjbtm3Lc/Jfv3590tLSWL16Ne3bt8fd3Z0WLVowcOBAxo0bR2RkJOHh4Vy9epUNGzYQFhbGiBEjeO6553jssccIDQ3l+vXr7Nixg4YNG5b4fa3sJLEQQuQRXq86/l7OXEnJKGi5Ln5ezoTXq17WoZWIRqOhe/fuNGrUCH//B9N6srKycHBwsGFkNlYVqy1VEd7e3owbN44NGzYQHR3N9u3bSUhIYOjQoUVOMxG2l3uhtoednTHJyK9alDXt2LGDOnXqYGdnh6enJ02bNiUyMpKXX34Zu/sjKN999x3jxo2jY8eO1KtXj8jISAYPHpznWB9//DFvvvkm58+fp0mTJqxcubLQ9gU5vfLKK2RkZPB///d/fPjhh1SrVo3HHnsMgA4dOvDRRx/x3//+l3/+85+0b9+eDz/8kJdeesn4+F69evH0008zduxYbt26xaRJk5g5cyZLlixhypQpTJ06laSkJKpVq0arVq2Mi8y1Wi2vv/46V69exc3Nje7duzN7tpnlt6swRS/ddEhNTcXLy4uUlBRjGTIhqjpDVSgwrQVkmDBTEapCmePevXvMnz+fxo0b06NHD7mSKyqtv/76izVr1pCVlYWnpyfDhw83mfYhrCslJYXz58/ToEEDXF1dLX58QdWfbF0VyhLr1q3jscceIzk5mZo1a9o6nDKRlpbG6dOnCQ4OrjQj45acJ8tfUCFEvvo292f2qDb4eZleVfLzcq40SQXAsWPHSEpKYseOHSxatIg7d+7YOiQhSkXLli0ZP348NWvW5Pbt29JIrxwrLHnIr1pUUR26hSgrMhVKCFGgvs39eTTUj33xN0i6nYGPhzr9yU5j3UZzWp2+1J+jIGFhYdjZ2bF69Wri4+OZM2cOw4YNIzg4uEyeX4iy5OPjw/jx4zl79iz169c3bi9OCVFROswZkTCniZ4QtiBToZCpUELYUnnp7p2cnMzSpUtJTk5Go9HQq1cvOnbsKCdbotK7fv06v/zyCwMGDMDXtww6qFcRxZkKtSclhY4HDxpvFzXNKXcSsrt1azpUkuk3FZVMhRJCCBsxrOPI3TPD0N076nBimcVSq1Ytxo8fT4sWLdDpdGzcuJHt27eX2fOLiic2v2lzOi3E74C45ep3nbbw/cuBDRs2cOnSJebPn09sbKytw6nSOnh5MfP+SJI5aydyTouaWb++JBXC5iSxEELYRHns7u3o6MiQIUN47LHH8PLyom3btmX23KJimXf5Mq3272f6+fMPNh5dDZ83hwWPw4rn1O+fN4ejq5l+/jyt9u9n3uXLBR/URgYNGkSDBg3Iyspi5cqVrFmzhuzsbFuHVWVNCgpid+vWZk9r+jQkhN2tWzNJFuKLckASCyGETZTX7t6KotC+fXteffVVPDw8jNsvXrxYpnGI8iv2zh0mnDwJwNT4eDW5OLoalo4x7QUCkJrI9D2rmBofD8CEkyfL3ciFq6srI0eOpHv37iiKwoEDB/jmm2+4efOmrUOrFIoz49zSkQcZqSg/qvoKA0kshBA2Ud67e9vbP6htceTIEebPn8+vv/5KVlaWTeIR5UeYuzuR9eoZb0+Nj2f6wS2Qz/jb9DpDmBoyxng7sl49wtzdyyJMixh6vIwaNQpXV1cSExOZM2cOV65csXVoFZaLiwt6vZ67d+/aOhRRhu7evYter8fFxcXWodiEVIUSQpSKoio9VaTu3ikpKSiKwsGDB0lMTCQiIoLq1StWc0BRBJ3WogaBU+5XDTOMREwNHAyZt5lyYYVxn+l1hpomFd6K8XHlVf369Zk4cSLLli0D1LVHongcHR1xcXHh6tWrALi5uUkxiErMkERevXoVFxcXHB0dbR2STUhVKKQqlBDWZk6lJ61Oz8Mzfi+yu/fOyY+UWenZwpw9e5YVK1Zw9+5dnJ2dGTRoEE2aNLF1WMIajq6GqMmm05g8A6DvDLUreSGmnz9vTC4AIs8uZMqFFXmTirMLmdK+P7QYZvXwS4NWqyUjI8PYnVun05Geni7dui2k0+k4ffo06enpklRUAYaRigYNGlSqZquWnCdX+MQiMjKSX375hePHj+Pi4kKnTp2YMWMGjRs3NvsYklgIYT2GSk+5P1jy69htze7eZdELIzU1leXLl3PhfnnHzp0707Nnz0r1B6TKMayNKOg3NmJh4clF9j2mL3yRqSGjjZu8s+5wy+HBdCdDssHYtVCvi/ViL0ObNm0iNjaW4cOHS4+XYrh37x7p6em2DkOUsso6UlGlEou+ffvy5JNP0r59e7Kzs5k2bRqHDx/m6NGjZl9ZkcRCCOswjEIUtCg7v1EIa/SxKMteGFqtls2bN7N7924AxowZQ4g0paqYdFq1alPuBddGijpy8XpcwdOidv8fbJiWZ4TCwJhUOHnC5HOFTq+yKG4Lpm2VVFZWFvPmzSMpKQmNRkPPnj3p1KmTXIEXooqoUolFbsnJyfj4+LB9+3a6du1q1mMksRDCOnafuc5T8/YUud9P4zvQsX4N4+2SjDZYMkJiTUePHuXq1av06NHD6scWZSR+h1oStiiFjTSsexv2zQWgWufFJiMV3ll3uPnn0+qNBo/CqOUljbhE07ZK4t69e6xdu5a//voLgCZNmjBo0CCcnW2/BkoIUbqqdIO8lJQUgEIXVmZmZpKammryJYQoueJWerLTKHSsX4OBrQLpWL+G2UmFLXthhIaGmiQVqamp7N69u8qXGqxQ7lwt+X7V6gLqQu2cSQXALQd3ptcZqt6ob4UEtJCStiwdo95fShwdHRk8eDCPP/44dv/f3p3HN1Wn+wP/nKR7acvWnRYKylpsWcouu4CyCAOUQb2AIKCDzij3NUPx3rn+5s444NXrcEdnoCAiIyAWEFlUUCqrLC2UHcpSttIdWlpo6Zac3x+HtEnbtElOkpOkn/fr1WmTnKRPTXTOc77f53nUaqSnpyMxMRE5OfYbYklEjs+lEgutVou3334bgwcPRnR0tNHjli1bhoCAgJqvCA6VIbIKe3d6cpRZGFqtFlu2bMHevXvx1VdfcS+1s2gRLP+4uPlYHjnNYBtUy6raORVLO87C8shpQNx8S6OUaDXSSkVjafSeBINJ39YmCAL69u2LefPmoWXLligqKsKXX36JyspKm/1OInIuLpVYLFq0CBcuXMDmzZsbPW7p0qUoLi6u+crMzLRThESurV9Ua4QGeMHYeoMAqfahX5R1WrU6yiwMQRDQq1cvuLm54erVq0hMTES2A05YtgqtRtpCdH6r9N2GJ7I2136QtI2osU+sf7h0nBHLs3IMCreX3fgXin55Gctu/KvmvqUd/w3Ls2Re2b99tJFaEAAQgZIs6TgbCwsLw8KFC9G5c2c8//zzsotVNVoNUnNT8f2N75GamwqNM3+miJo5l5lj8eabb2L37t04dOgQ2rVr1+ixnp6e8PT0tFNkRM2HWiXgvYnd8caGNAhouNPTexO7W61bk6PMwhAEAb1790ZoaCiSkpJQVFSEtWvX4oUXXkDv3r0du8jVnEJghfb324xKLcWeNAsw9okdt9zoP4/6rWa/rJljIX0XapIO3XEWz7GwxrYtK/L29sbMmTMNPttZWVnw8vJCmzZtGnmmoX2392F5ynLkldXGHewTjIR+CRjdfrRVYyYi23P64m1RFPHWW29h+/btOHDgAJ5++mmzX4PF20TWZa8uTY44C6O8vBzbt2/HlStXAAAxMTGYMGEC3N3d7fL7zWJOoiC3Lasja/CfQ7iUVBj5m+olFVFRSAgPBVLXAEW3pNqLuPnSikbd4yxJLqxRaG5Djx49QmJiIiorKzF58mR069atyefsu70Piw8shljnMyU8+Ux9PPxjJhdEDqBZdYX6zW9+g02bNmHHjh0GsysCAgJMHqfOxILI+uwxVwKw7iwMaxFFEUePHsVP+/bhEXww4IVpCG/tb7N/BhYxJ1GwRltWR2fGys3ZR48Qe/Jkze2mkoW6SciZvn0R06KF0eONxrciWirUNpZGK/gePHz4EFu2bKmZ8TJo0CCMGjUKanXDsWi0GozdNtZgpUKfAAHBPsHYM3UP1M76mSJyEc0qsTC2xWDdunWYM2eOSa/BxILIudlzjoU5MS3918+4Vy5A7RMAAAjx98T/m9Sjfkx2nktgdqLg4FfLlbAmOxsLrl41eQVCl1ys7twZ88PCLPulNckg0GAarfCqkUajQXJyMo4eleo8IiMjMX36dPj5+dU7NjU3FXP3zm3yNT8f+zniQuKsHisRmc6c82Snr7Fw8ryIiKxgXHQonuseYpcVElPUzNZQtYTap/b+2xdPYfaZo/j8P+ZifMyTWjAl6hbMKQSOetbh9vc7gvlhYejn72+48lBeDpw7B2RnA48fA6IIeHkBbdsiISYGz1uyUqGv+yQpeWjw82J825a9qNVqjBkzBhEREfj2229x584drFq1CtOmTUNUVJTBsQVlBSa9pqnHEZFjcPrEgoicm7W2TOlmYSjN2GwNTfkjPL5zHhC1+O1/r8CgtX9Eq+yDDW9H0s0lsNUVaHMTBWu0ZXVBNUlCbi6QkgKcPw9UVTV88P79iOnSBYiLAzp2BCwt6O8+Ceg63r4rXGbq1q0bgoKCkJSUhLy8PKSlpdVLLAJ9Ak16LVOPIyLHwMSCiBTjiFuYGmNKEmRstobaqwV8uz6LsmvHcD8vG//51//FYreN6ORhbC6BIM0l6Dre+ieN5iYKurasTe3vb6Qtq0sSReCnn4CjJrR4FUUgPV366twZmDoVsLQ7oUrt8FvO2rRpg9deew2HDx/G4MGD62336x3RH8E+wcgvy69XvA3U1lj0DuqtQPREZCkmFkSkiJrtQnXuzy0uxxsb0hQpum6MqUlQYzMz3Nu0Qwvf51GWfhiPc65gQ2YWhndQY2h7dQP1YnW2I1mTuYmCzLasLkmrBbZtAy5erP+Yjw/QsiWgUgEPHwLFxYaPX70KfPEFMGsWYGKTEWfk7u6OkSNH1mz3E4uzsOd6NWJC1AgLb4eEfrOwOOMrCBAMkgtdV6gl/ZawcJvIybjUgDwicg7GtgsBtaesf9p1CRqtY9RQ6ZKguisRuiRoz4Xa4WdNzcxQe7VAi2fGoF/nEIgQsf9WNb6+WG28XswWdQu6RAFA/eFwRhIF3f5+/zrJnn+Y7bZsOeowPlEEfvihflIRFQXExwP//u/AggXAa68Bb78NzJkD9OghJRo6OTnA5s1AdbU9I7c/XcF5STbScrQ4kaXB2rQqnEzPxKifluPjTjMR5BNk8JRgn2C2miVyUlyxICK7M7ZdSEcEkFNcjpSbhYrXTTSVBAmQkqDnuodArRJqpo83NlsjtJUv5s+YivNZa/Hd1Wp0aqUyPkTPVnULlhQC23N/vyMP47t6FUhNrb3t5iZtbWpodoMgAB06SF+5ucDGjdIqBgDcvg0cOQIMH26HoBWg1Ujv4ZN/E3oEqXCtUI30exrsvlqFO8UiJvj+CyMWn0XavbMoKCtAoE8gegf15koFkZNiYkFEdtfYdiFLjrMlc5Mgk6ePdwhCbOcIdGiZjQDP2qNKK0X4uAOCoLJ93YIliYI99vcbm7Fh66J2Ux0/XvuzIEirFJ0719yl0WqQlp9W/0Q5JASYPRtYu1bqGgVICcqQIVJy4mrqdB/zchMwo4cbjmYKSL6pwbm8auQevIX4UXsR12eigoESkbVwKxQR2V1T24XMPc6WLEmCxkWHYuUrvRESYBh/SIBXbe3Ik+1ILb0EKYkA8LhKxGdplfjmsgaVGtE+dQu6RKHnNOm70leK61zlNvTkvj0Jym2LKigA9IbdITbWIKnYd3sfxm4bi7l752LJ4SWYu3cuxm4bi32390kHtG0LjBxZ+/zSUuDyZfvEbm8NbOMTBAGDI90wO8YdLTwE5JdqsXr9V0hPT1cgQCKyNhe8REJEjs6U7UIhAVLXJaVZmgSZNFujznakO8VaFFcARcU+yBV/hfjAgWh2zTbNnbFhb3oTtwEA/frV/Ljv9j4sPrC4Xpej/LJ8LD6wuLZu4JlnpG5SlZXSAampQM+eto7c/hrZxte+pQqv9/XA1ktVuKP2ho+Pj9Fjich5MLEgIrszebuQQgPu9MlJgkyaraG3HanLozzMKQa2HL+JgkelWL16NSZNmoSetjzptPfU76Y4+jA+/dWK8HAgVCpm12g1WJ6yvMHWqSJECBDwQcoHGBExAmpPTyAmprZOIzNTKuJ2te1QTXQfa+GhwqwhHXB32n8iMjKy5n6NRgO1mjUWRM6IW6GISBEmbRdyALokCDDaP6nJJEijFXEs4z52nMnCsYz79btd6W1HihwyDa+/8Rt07NgRVVVV2LZtG3bu2o3DV/KMP99Sl3YCK6KB9ROAbfOk7yuipfuV4ujD+MrKan8OD6/5MS0/DXllxpMdESJyy3KRlp8m3REWpvegWFtz4UpM6D6meuEDRHaoHZ6Xn5+Pv//978jIyLBPjERkVS52eYSInIlJ24UcgC4JqjvHIsSEYX6WDAH09fXFK6+8ggMHDuDzrd/hsxVJqGqTBu+OfUx6vkkctUDa0Yfx6U/W1lthKCgrMOnpNcfVXZ0wNrHb2ZnZfezQoUMoLi7Ghg0bMGzYMAwdOhQqFa+BEjkLJhZEpChdi1ZdcpFys9BhkwtzkyA5QwBVKhUqg7rhQPV1PHavgG9ED7Oe36gmC6StOPXb3K1Wjj6Mz8sLqKiQftZbZQj0Ma0apua48jpNAbyUb1RgM2Z0H5s8eTK8vLxw8uRJHDhwAJmZmZg6dSprMIicBBMLIrIJjVY06STckiv6SjGpZuIJc+dfGHu+W+twtGgVZjDnovJeJtzbhDf6/EbZq0Da0lkU5s7YsGediL9/7STta9cAjQZQq9E7qDeCfYKRX5bfYJ2FAAHBPsHoHdRbukO/C5K7u2snFoDJbYrd3NwwYcIEREREYPfu3cjIyEBiYiKmT5+Odu3a2SFQIpKDiQURWZ2pyYKcK/qOTu4QQP3nGyQVeRkou3Ycbi1DkNV5sGVDBO1RIC13q5WpV7ntPUgvOloqtha1QOZFYOffgdi+ULcfhIR+CVh8YDEECAbJhfBkpWVJvyXSPIv79wH9GoK6U7kJMTExCAkJQVJSEu7fv49169Zhzpw5iIiIUDo0ImoE/0tGRFalSxbqnlTrkoU9F3IANH1FH5Cu6FutUNnO5A4BNPp8lRqCyg3VD3Lx6MwPuHjthvnB2bpA2lqzKJqasaFLXuquvuiSF1sUocfEAEXXgeP/BM5uAta9C3wxHlgRjdGlZfh4+McI8gkyeEqwT3Btq1nAcMAeAMTFWT9OFxAcHIwFCxage/fuiIyMRLhesTwROSauWBCR1Ziz/UfuFX1HJ3cIoLH7PQI7QO3bCqWXD0H7uAQn9mxDj4BqDBgwwGBlo1G2LpC2x1Yre9aJ6LvxI5C/Haiolm6XaIFr1cDT2UDSLIyO/xdGTN3b8ORtADh1qrbNLCB1h+IJs1Genp6YPn06qqqqaoq4q6ur8eDBA7Rt21bh6IioLq5YEJHVmJMsyL2i7+h08y+MneoLkLaHGRsC2Njz1T4B8IsZB8/A9iirqMLevXuxZcsWVOiKiptiQhtQWQXS9thqZU7yYi26ZCZCBejXtWRrgMtVQIUI7EmAGkBcSBxe6PgC4kLipKSiogL4+Wdg1y7D1xw2zHrxuShBEODh4VFz+8cff0RiYiLOnTunYFRE1BAmFkRkNeYkC3Kv6DuaurMqAMiaf6E/P6Mhgps7vDoPxv7ScNy4V4bLly8jKyvL9IB1BdL+dWpY/MPkt5q1xywKJQbp6ZIZHxXQ3Q0G72y+BjheARy7BRxMAgoLgQcPpHqM3buB//1f4NAhw9cbORLo0sV68TUDGo0G9+7dQ1VVFb755hvs3r0b1dXVSodFRE9wKxQRWaShrk/mJAtyJlo7msaK1S2dfwFILW7/8VIvvPnVaTRUaiIIAjzDuuACwrDwufbo2LGjeYGb0QbULPaYRaHEID39JKWtGugO4HK1NOAOkL4XaICk7cDBK42/1tChwLMyOm41U2q1Gq+88goOHjyIQ4cO4eTJk8jOzkZ8fDxatmypdHhEzR4TCyIym7ET6T+O72ZysqC7Iv/GhjRj0wqanGjtCEzpbHVkyUiLhwC28vVsMKnQEQEUwg+q4M419xUVFeH48eN47rnn4FZ3EFtdJrYBNYs9ZlEoMUivbpISpAY8BOBqNVCmrb3fw9f4a/j6AmPGSEXgZBGVSoURI0YgIiIC27ZtQ3Z2NhITEzFlyhR07ty56RcgIpvhVigiMktjXZ8WbTqNSTHSVXhTtv/oJlqHBBiudIQEeDlFq1lTO1sBwMBObfBibDgGdmpjVrJkbi2KKIrYsmULTpw4gbVr16KoqMjk32VV1tpqVVoK3LolzX1IT5d+Li21fZ1IQ3TJjP7va6kC4tyBGA9pFcPLH2jZQEvU9u2BadOAxYuZVFjJU089hddffx3h4eF4/Pgxtm/fjvK6gweJyK4EURQbuRbWPJSUlCAgIADFxcXw9/dXOhwih6XRihjywc9GC7R1KxJ/HN8df/7O9KF3pg7TczTHMu5j5prjTR731fwBFne2suR3ZGRkYNu2bSgrK4OXlxemTJmCLkrt5bdkeJ0oSglEaqqUTGi1ho+rVEDXrlKb1rJzwN6EOnMswhsepGcNNfM5gAZXYsYnAq36SFO5RVEafNe2LdDawbb02XOooI1VV1fjxx9/RKdOnZT7nBO5MHPOk7kViohMZmrXp1a+HmZt/zFnorUjsUdnK0tqUTp16oSFCxdiy5YtuHv3Lr766isMGTIEI0eOrGnZCcA+J5fmbrW6cQP4/nvg3j3jx2i1wKVL0lfbtsCknYA61z4nyeZOBXdE9h4qaGNubm544YUXDO67ceMG3NzcEBkZqVBURM0TEwsiMpk5J9LOmiyYwx6drUypRfl1XCR2n8s2SOACAgLw6quv4qeffsLx48dx5MgR3L17F/Hx8fDx8XHMk8vTp6V2rHVXKBpz7x6w6Stg4kSgl52KoW1V9G4PcieiO4Hi4mJs3boV5eXleO6558yb8UJEsjCxICKTuVqLWLns1dlKV4tSt2C+pY87RAB/23e15j79LWdqtRrjxo1DREQEduzYgaqqKmkegCOeXJ47B+zYYXifbstTbCyg6/jz4IGUgFy5UpuAaLXSc93cgJ497ROvLYredWy1kqTUUEFTY7PS3+zt7Y1OnTrh/Pnz2Lt3L+7cuYMXX3wRXl7N479LREpijQVYY0FkKl2NRVMn0keWjJRVI+FMNRe6Ynag4dUEaxah6/9zuXWvFH/bd63eMcZ+77179+Dm5oaW/n7Aimhoi7MgAA1cyX3STent8/Y7uczJAT77DNBoau+LjZXmPBj7b3JJCZCcDJw9W3ufWg289hoQ6thF/42y5UrSzcPA+glNHzd7t+2SpobY4G8WRREnT57Enj17oNFo0Lp1a8THxyMkJMRKQRM1H+acJ7MrFBGZTH9omyVD30yx50IOhnzwM2auOY7fbT6DmWuOY8gHP2PPhRyLX9OW7NnZSre9bMIzYdicmtngMfrdqDR6fWrbtm0r9fl/MuRt/00Nvr5YjfLquimiDSZWN+XQIcOkYvBg4MUXjScVgPTY5MnSsToaDXD4sM3CtDndSlLdieK6laRLO+W9vhJDBZtio79ZEATExcVh7ty5CAgIQGFhIT777DOcOXNGfsxEZBQTCyIyiy1PpBtrZfvGhjSHTi6OLBmJr+YPwP/9OhZfzR+AI0tG2qxdrqlF9Ck3C+s/+CgPJRUijt3VIP2eBoknK5HzsIGaBnudXJaUSJ2fdJ5+Ghg9GtBbSdFoNUjNTcX3N75Ham4qNNonSYggSMc+9VTt89PTpdd0Nk1uU4K0TUmraeBxE1k6VFCrkVY7zm+VvsuJoe7r2vhvDg8Px8KFC/H000+juroat2/ftvi1iKhprLEgIrONiw7Fc91DrLpdqamZEAKkq/DPdQ9xyG1R9ixWl9WNqkUw/D0FzO3ljqSLVSgqF7H2dBVeeNoNvUJUtVujrDmxujGnTtVOrgaAQYMMkop9t/dhecpy5JXVJjrBPsFI6JeA0e2fJCCDBwPXr0sParVAWhowfLh94reWJytJxumtJFm6TcmSoYK23Jplj78ZgI+PD1566SWcOnUKMZwhQmRTXLEgIovoTqQtGfrWEFlX4ZsZWUX0T04uw/zUWNjHA53bqFGtFbHzShV2XKlGlQbSHAhrTqxuzPnztT+3bQt06FBzc9/tfVh8YLFBUgEA+WX5WHxgMfbd3ifd0aGD9Fydc+dsF6+t2GObkrlDBV1oa5YgCOjbty/c3d0BSDUYW7duRbr+ahkRycbEgogcgj1mQrgKXTcqY6mcAKk7VIPdqPROLr3dVZgZ7YZRUW4QIOBMrhb/OlsFcewy+xRui6LU5UmnW7ea1QqNVoPlKcshNnBlXXffBykfSNuiBEF6rk5xseEqiDOwdJuSuUydiO7IW7Os4PTp07hw4QI2b96Mn376CVpzWhwTkVFMLIjIIbCVrelkF9HrnVwKgoBn27thVow73H380HbSf0LbzU6tZqurDWdW+PjU/JiWn1ZvpUKfCBG5ZblIy5c6csHbu/ZBjUZ6bWei26bUWLporZWk7pOAty9I3Z+mrpW+v33ecGuTOduULGXPv7mOmJgYDBw4EADwyy+/YP369Xj48KHVfw9Rc8PEgogcgqyr8M2Q7CL6JyeXKUPX47/c3sFS3//Cmu6r8LvrMTVduAoLC6HRWKlQtyHqOqsieslAQVmBSS9Rc1zdRKLuazs6c7cpWeP3RT0L9Jwmfa/7uo64NcuK1Go1xo4di/j4eHh6euL27dtITEzErVu3rP67iJoTFm8TkUMwZcK03Fa2rkZuEf2eS/l440d3iIiT7njy/wi5xeVY+PlRjFWfx4BukZg2bZptZvyoVNJKw+PH0u2c2q5fgT6BJr1EzXG5ubV3entLr+1sdCtJDRZLL7fv0EJTtx/5BkqdoiwdbKfw39y9e3cEBwcjKSkJeXl5WL9+PSZMmIA+ffrY9PcSuSoOyAMH5BE5kj0XcupNmNafJk3WoRt2aKxgXlOcD+HGEcwZ0A5+LVpg6tSp6Nixo/UD2by5tt2sSgW88w7g5weNVoOx28Yivyy/wToLAQKCfYKxZ+oeqEvLgL/9rXZbVbduwIwZ1o/VXmw1edvcGFZEN95ByrsV4OYJPNRrA21pxyiF/+aqqirs3r0bFy9exLx58xDqzEMWiazMnPNkJhZgYkHkaJxp8razOpZxHzPXHG/0GM3jh5jZ9i58NI8gCAJGjBiBZ599toFp3TJkZABffll7e8QIYNgwAMC+I8uw+PpGAICo9zuFJ//78fCPpZazBw8C+/fXvsasWYAtkiBnJOeEXdcVCkD9NURjpw5P3if9QnAnIYoi7t+/j7Z6HcbKy8vh5cW6LmreOHmbiJyatVvZUn2mdNdSe/uh/7hp6NWrF0RRxM8//4xNmzbhsW7rkjV07Ai01qub+eUXaUvUpZ0Yve8DfJx/D0F16jyCq6vxcaeZUlKRkyM9R6dNGyAqynrxObNLO6VVh/UTgG3zpO8rok1vE9tYBynvVkaeZKWOUQoQBMEgqcjOzsbf/vY3nDp1CrwGS2Qa1lgQETVDpnbXCmvth4FxLyIyMhLfffcdrl27hv379+OFF16wTiCCAPTvD/zwg3S7shL413qg9DNAJWJ02WOMKHuMNC9PFKjVCNRo0Lu8EuriL4HIl4DNX0vP0enf32DAXrNVs9pQ54RYN4PC1BWF7pOAruMNVz20GuDLFxt5knUG2ynt9OnTqKiowK5du3Dnzh1MmDChZg4GETWMiQURUTOk68KVW1xubAc9QvS6cPXq1QuhoaFITk7GqFGjrBtMXJw0OfvaNel29hXg3F0gUAWEqaEOEBBXXiE9JopAsQhcvAVk/jcQEFH7Ok8/DfTta93YnFGTMygEaUWh63jTtkXpOkjpnN9qWhxWGGynpBdeeAEBAQFITk7G2bNnkZOTgxkzZqBNmzZKh0bksLgVioioGbJkFkZISAhefvlleHp6ApD2pKekpKBSf8XAEioVMG0aEPEkSagslRKIfA1wphJIqZS+n6kETjz5XqAByvXmDkREANOnO2c3KGuz9QwKBQfb2ZMgCBgyZAhmz56NFi1aID8/H6tXr8alS5eUDo3IYfG/wEREkArGj2Xcx44zWTiWcR8arevvqZY7CyMlJQXff/891qxZg3v37skLxtNTKrru3h3w8DV87LEIPNBKX+V674vuuO7dped6eMiLwVXYegaFgoPtlNChQwcsXLgQ7du3R0VFBZKSknDjxg2lwyJySNwKRUSOo7paaj1aUACUl0t75b29gdBQ4KmnbHY1ujm3uJUzCyMkJAR+fn4oKCjA6tWrMWnSJERHR1sejLu7tOrQKxb47x+BzPsw2urU0w/o/5xUU9GxI+sq9Nl6RUE32C5pFup3iLLtYDul+Pn5Yfbs2UhOTsa9e/cQxQYBRA1iu1mw3SyR4goLgZMngdOna4el1eXvL+2f790baNHCar96z4UcvLEhrd7pq+401aQp1s3Yo0ePsG3bNty8eRMA0L9/f4wZMwZqOZOvL+0Edv0WKCoEcjXAIxGofvIOuQlACxXwxhqg/0wr/AUuyJQZFP5hwNvn5Z38X9rZwGC7cPsP87MzrVYL1ZOLHFVVVcjOzkb79u0VjorIdjjHwkxMLIgUotUCP/0EHD8u7ak3hVoNjB4NDBgg+yp1U0PidAXMR5aMZMvbRmi1Wuzfvx+HDx8GALRr1w7Tp09HQECA+S9mrJuRjndrYOL/ufSJq1U0OoMC1psz4QjD/BQiiiK+/fZbnDt3DsOHD8fQoUOtO+OFyEFwjgUROT6NBkhKAo4dq59UqFSAry/g41M/edBogL17gT17TE9GjEi5WWg0qQCk07Gc4nKk3CyU9XtcnUqlwqhRo/DSSy/By8sL2dnZePDggfkv1Gg3oyfcvKRuRtS4xmZQWHN4na5jVM9p0vdmklQAUmKhVqshiiL279+PjRs3oqysTOmwiBTFGgsisj9RBHbskOop9IWGSq1Ho6NrC3EfPwbOnAFSU6UtUzonTkj1F8OHWxyGKUPizDmuuevcuTMWLlyIzMxMy7aGNNnNCMDDbKefj2A3Dc2gaEYrCramUqkwadIkRERE4LvvvsP169eRmJiI+Ph4hIeHKx0ekSKYWBCR/aWlAefO1d52dwd+9Suga9f6KxTe3sDAgdLWp9RUaZCabqXiwAEgMlIq3rWAqUPiTD2OgFatWqFVq9qpzAUFBfj5558xceJE+Pj4NP5kW3czao7qzqAgq9PNeElKSkJhYSE+//xzjB07FnFxcdwaRc0Ot0IRkX2JInBUr3++Wg289BLQrVttUqHVADcPS4O4bh6WbgsC0K8fMHmy4esdO2ZxKLohcY00zUSo3pA4Mo8oiti+fTsuX76MVatW4e7du40/oZnMR2hUQ599cnghISFYsGABunXrBo1Gg4MHD+KxsUYURC6MKxZEZF83bwL379feHjIE0G/d2GCnmTCpvWX3SUBMDJCRUbvicf26tEWqtfkn/7ohcW9sSDPWNLPekDgynSAImDx5MpKSknDv3r2aK7n9+vVr+Equbj5CU92MXGQ+Qj1NffaV1owLtU3h5eWF+Ph4HD9+HMHBwU2v0BG5IHaFArtCEdnV118Dly9LP6tUwDvvAH5+0m2jHYHqdLK5exf47LPahwcNAsaMsTikJudYiGJtMlNcLM3YcHOTtml16AD06iUVmzcjGq1o8uyLiooK7Ny5ExcvXgQA9OjRA5MmTaqZ4G3AXt2MHI2pn32lOHrS48DS09NRVVWFnj17Kh0KkUXYbtZMTCyI7EQUgffflwbhAdLE5Ph46eea3vvGinf1eu8LKmD1aiAnR3qobVvgzTdlhdbgiXJlhVQPkpoKFBUZf7JaDfToIW3VatdOVhzOwJKBgqIoIiUlBXv37oVWq0Xbtm0xa9ashv+b29zmI5jz2VdihcDRkx4H9uDBA6xcuRIVFRXo168fxowZAzc3bhYh52LOeTI/3URkP+XltUkFIF3t12myI5AIlGTVdgRq3742sSgtlR2aWiVgYKc2tXfk5QEbNwIlJU0/WaORVjPOnQOGDgVGjHDZSdDGBgrmFpfjjQ1pRgcKCoKA/v37IywsDFu2bIGvry9aGBt02Ny6GZn72benRlsAiwAEYE+C9H656vsjg7+/P/r3749Dhw4hJSUFWVlZmD59Olq2bKl0aEQ2weJtIrKfqirD27qWsoD5HYH0n1tZKS+uuu7eBT7/vH5SoVZL9SA9egBdugANnRwcOgTs2iV7xoYj0mhF/GnXJaOnmADwp12XoNEa/9vDwtsh9rlp8O4yGCduFkGjFaHRaFCtn3ACzWs+giN3wzIn6aF6VCoVRo4ciZdeegne3t7IyspCYmIirl+/rnRoRDbBFQsish/9ZAAAKipqfza3I5B+MtHQXn1LFRYCmzYZxubvL83X6NUL0L/KrtVKtRepqcDVq7X3p6VJdSMjRlgvLgdgzkBBg9WfJ+pvobqG0AAvjG+VhyDVI8THxzfPK7mO3A3LkZMeJ6Kb8ZKUlITs7Gxs3LgRQ4cOxfDhw9mSllwKVyyIyH48PaWZFToZGbU/6zoCNdb81T9cOk5XTK1jbEuNJXbvBvSn53bsCCxaBDz7bP3fo1IBTz8ttcudOlVa0dA5eLB2q5aLkDNQULeFqm5ikl3wAB9//RMOnbmCxMREXNVP0JoLcz779ubISY+TadmyJebOnYu4uDiIoojy8nImFeRymFgQkf0IgjQET+faNeDBA+lnlVrqMCMdWPeJ0rdxy6Xjbt8GCgpqH+7WzTrxFRQAN27U3m7XDpg503BFxNicgZ49gRdfNHy91FTrxOUgLB0o2NgWKsHDC36xz+NorojSsjJs2rQJycnJ0Gq1VojYSZjz2bc3R056nJCbmxvGjx+Pl156CWP0Otmxjw65CiYWRGRfcXG1P4sikJJSe7v7JKnDjH+d4l//MMPOM8eP1zykFQSktIrCjjNZOJZxv9H9/U06edLw9vjxhissl3ZK3XvWTwC2zZO+r4iW7geAZ54xnAJ+/jzgQkOyLB0o2NQWKsHTF5qnhiMgUkoQDx8+jC+//BKPHj2yUuROwNTPvr05ctLjxDp37gz1kxVOrVaLL7/8EsePH2eCQU6PNRZEZF8REUBwsNR1CZAmZ0dG1q5kNNUR6PhxID0dAHA9/yG+KPLGhscXa16+qbanRlVVAWfOGMYZqvcaxlpuluRI9+tO/uLialc9qqqAs2eBAQPMi8VBWTpQ0JQtVIJKjaf6PItO/aOxc+dO3Lx5E1988QV+85vfQKVqJtfAHLUbli7paXCOhYu2ALajixcv4saNG7hx4wbu3LmDF198seEZL0ROgIkFEdmXIEjTtrdtk26LIpCUJK0O9Ool1S3oOgLpq64GDh+WahcgJRW7zuUi+ZnnDA5rqu2pUfn5hgXbffrU/mxOy80uXaTC7YcPpYfv3HGZxAIAxkWHYuUrvevNsQhpJKEzZwtVdKdoBAcHIykpCSNHjmw+SYVOQ599S1lzUrajJj0uIDo6Go8fP8bevXtx6dIl5OXlIT4+HsHBrFsh58PEgojsLzpaaul64oR0W6uVWrQePiyd0MfESCfnoijVYKSlSV9Piqq1oogDVwpwKKo3cvwDDV76yWk+/rTrEp7rHmJ0GnQ9+gXbABAUVPuzuXMG2rSpTSxcaCuUzrjoUDzXPcTkydu6LVS5xeUN11lASkx0W6gCAwPx+uuv12wVAYCcnBy0atUKXl6mJSkOpbxc6hpWUiIlr25u0qT2qCjps2ILtpiUbc2kR8eayY+TEgQB/fr1q5nxcv/+fXz22WeYMGECYmJilA6PyCxMLIjI/gQBGDtWahl7+nTt/Q8eAMnJ0peuW0oDe46zih7jp+DuOB3etd5jQNNtTxuk0Rje1u/wZG7LTf3JunVf10XUGyjYxLHmbqHSTypKSkqwYcMGeHp6Ij4+HiEhIfL/AHvIyZHqds6dqz/DRadTJ2n7XOfO0mqdNZi6bU9ptkh+nFi7du2wcOFCbNu2DRkZGdi+fTuKi4sxdOhQpUMjMlkzW2MmIoehUgGTJgGjRhmeiOuIYsND5jw9cX3wczgR2bPJX2Fqe1QAQN0r4forGOa23NSfBO6MV9htQLeFKiTA8J9HSIBXk9vWHj9+DDc3NxQWFuKzzz7Daf1k1BGVl0uzUBITgVOnjCcVgNQ2efNm4NNPgezGVsVM1OS2PUjb9rQKJ7y65KfuSqAu+dE1RGhmfHx88PLLL2P48OHw9PREN2t1vCOyE65YEJFyBEGaD9Gnj7RycfIkUFTU8LHBwdKV3WeegVfmQ+D08YaP02Pq3n4AQKtWhrcvXpS2qgC1LTdLctDwCZsgPd5+EHD/vuH8irqv24yZu4VKJzg4GAsXLsT27dtx7do17NixA3fu3MELL7wAd/2uXY6gpAT48kvDdsj63N2leqG6SXNhIfDFF0B8PPDUU5b/fnO37SnBnJqlZrYtCpCmdQ8fPhxxcXHw9fWtuf/BgwfNc4AkORUmFkSkPB8fYPBgYOBA4NYt4N49qTZBEABvb6k7U3h4zfYoc/fsmyQgAOjQQfr9gLR9ZfRoacVB13IzadaTV29gM4+u5WbdlrVOtkdaoxXNPvE3hzlbqPT5+PjgpZdewuHDh7F//36cPn0aOTk5iI+PR+vWZrzPtlReDmzcWD+piIqq3e7k5iYlFdnZ0pyTCxekRAOQtgZ+/TUwZ470ebeEM0zKdobkxwHoJxW3b9/G+vXrMWjQoObZ1ICcBhMLInIcKpU0B0J/FkQDLG172qS4uNrEorJSKi4fNky6bUrLzYcPDWtGwsOBsDDzYlDQngs59bo9Wdy+1wYEQcDQoUPRrl07bNu2Dbm5uTh69CgmTJigdGiS776rbaMMSMnqr39t2LYYkBLk8HDpa8wY4NtvpeJuQNo2tXkz8NZbgIeH+TE4w6RsZ0h+HMytW7eg1Wpx5MgR3L17F9OmTUOLFi2UDouoHqa8ROSU5OzZN6prV0D//6wPHJCuKOt0nwS8fQGYvRuYulb6/vZ56f6yMmlffbleXYf+MEAHt+dCDt7YkFZvkJ2ufe+eCzlGnml/HTt2xMKFC9GrVy+MHTvWui9ubLJ6Ux48MPys+PsDc+fWTyrq8vGRkg/9ifQPH0orZpZwhknZzpD8OJhhw4Zh+vTp8PDwwK1bt7Bq1Srcvn1b6bCI6hFEjnlESUkJAgICUFxcDH9/f6XDISIzWH3rzqlTUutbHUEAhg4F+veXTgLrEkVpIN4PP0hbuHSCgoAFCxouTHcwGq2IIR/8bHQ6tm5r2ZElI626LcqaRFHE/v37ERcXBz8/P8teRE6XouRkqV2yzpw50tY6PRqtBmn5aSgoK0CgTyB6B/WGWldDUFkJ/N//1Rb+BwcDr79e2x3N3L8jadaTGw2s5yndFUqrkSbWN1Wz9Pb5Zllj0Zh79+4hKSkJ+fn5UKlUGDVqFAYNGgTBks8JkYnMOU9mYgEmFkRUx5490oRvfW5uQI8eQPfuUoJRXQ3k5ko1FffvGx7r5we89pq0FcYGrJ1MHcu4j5lrmi6G/2r+AIvqI+zhl19+wU8//YQWLVpg2rRp6FDnpL5Jxlq0mnIyXl0N/O1vjSYF+27vw/KU5cgrq93eE+wTjIR+CRjdfvSTg/YBR47Uvu7cudJUeks0mCSFmz4p29bzJRw9+XFglZWV2L17N849WdWaOXMmunTponBU5MrMOU92/EtpRET2NnasdFJ47FjtfdXVwNmz0ldjWrUCXn7ZZkmFLeogTG3La1b7Xjvr2rUrzp07h7y8PKxfvx6jRo3C4MGDTbuSK7dL0d27hi2G4+LqJRWLDyyGWOf188vysfjAYnw8/GMpuejbF/jll9qOUenplicWciZl22O+hCk1S9QgDw8PTJkyBZGRkcjMzETnzp2VDomoBmssiIjq0g3we/FF0xMElQro2ROYNw9o29YmYdmqDsLUtry37pU1fZBC2rRpg9deew2xsbEQRRH79u3DV199hcemTD43p0tRQx49Mryt13xAo9VgecryekmF9KrSfR+kfACNVgO0bGk4ibvu65pLNym75zTpu6lJhb3mSzRWs0SNEgQBffv2xZQpU2qS54qKCpw/f17hyKi5Y2JBRGRMr17A734HzJxpfLaAvz8wYgTwzjvA1KmGxd9WpNGK+NOuS42NPcOfdl2CRmv+7lZd+96mru2v2HfVoYq463J3d8eLL76IiRMnws3NDVevXkViYiJynswV0WhFHMu4jx1nsnAs437tPyu5XYoqKw1ve3rW/JiWn2aw/akuESJyy3KRlp8m3aHfCaqiwrS4rEWJ4XqWJD9UjyiK2LFjB7Zt24YdO3agqrGhjEQ2xK1QRESNUamALl2kr9JSaQBaeblUc+HjI219skNP+ZSbhUaLqwHptC+nuBwpNwvNroPQte99fUNak8f+adclPNc9xGGLuAVBQJ8+fRAWFoakpCSUlJRAFMXGt5DJ7VJUty1sRQXwZAZBQZmRQXl11Bynn6ToJSh2wfkSTi00NBSXL1/G6dOnkZ2djfj4eLRp45g1UeS6uGJBRGQqX1+pfWhUFBARIW1bsdOgKlvXQYyLDsU7o59u9Bj95MXRhYaGYsGCBfj1r3+Nc4VCzRYy/X4lNVvIHkXJa9GqN8gMQO0sFACBPoEmxRvoEwgUFxs2Aqj7urbG+RJOSxAEPPvss5g1axZ8fX2Rl5eH1atX4/Lly0qHRs0MEwsiIidgah2Eqcc1pENb005kHbmIW5+3tzc6dnqqZgtZ9aNCPDq7F5qyYgB6W8h2X4Fm7PInt+omF3UmqzckIsKwFXFKSk0Bdu+g3gj2CYZgJGkRICDEJwS9g3pLrY71GzXau9MP50s4vaioKCxcuBCRkZGoqKjA119/jR9//BEajRW3rxE1gokFEZETaKoOQoC0tadfVGuLf4c9khd7020hE0URjzNOQvPoPh6d3YvKAmm4WM0qjNcQqUuRf53OWv5hTbc+dXOT6nF0cnOBzEwAgFqlRkK/BACol1zobi/ptwRqrQik6W1FCwwE2re37I+2VOl9QGjstMABhutRk/z9/TF79mwMGiS9TxcuXEB5uXNcDCDnx8SCiMgJ6OogAKPX1PHexO6yah/skbzYm251RRAE+HYdAreAYIiaKpRdOYLHN05BfFKInP+wXF6Xoj59DIfZffONNEEbwOj2o/Hx8I8R5BNk8JRgn2Cp1WzESGD7dsMuUHVa1trcpZ3A1jmAqG38uMZWbshhqNVqjBkzBjNmzMD06dPha+9tddRssXibiMhJjIsOxcpXetcrQg6ROcdCR5e8vLEhDQIaHFsmO3mxN/3VFZWnD3yjR6L89jlU3L2Iiux0VD+8D9+uQ2qP03UpMlfr1kC3bsClS9LtBw+Azz+XOooFBWF0+9EYETGi/uTtqmpgyxZAfy+8ry8QE2P5H22uRrtBPSGogWmfsxWsk+nWrZvB7XPnzqG4uBhDhgzhtG6yCZdJLP7xj3/gww8/RG5uLmJiYvDJJ5+gX79+SodFRGRV46JD8Vz3EKtO3q77+rZMXuxNtwqTW1wujboTVPDuEAs3v7You3YMmocFENJ/wlMBI+X/sokTgYIC6QsAioqAlSulVsVxcVA/9RTiQuKkx/LygO9/AM6dM+wE5eYGzJhh345QTXaDAiBqAB92GHJmJSUl2LVrF6qqqpCZmYkpU6bA29tb6bDIxQiifosMJ/X1119j1qxZWLVqFfr3748VK1Zgy5YtuHLlCoKCgpp8vjmjyomImgONVrRZ8mJvusGCgOE1eW35I5SlH8bcYV3xQcIi61zBffAA+PJLw+5OOiqVlDBUVUmT3OtycwOmT7d/0fb5rcC2eU0fN3WtNG+CnNbp06fx3Xffobq6Gi1btkR8fDzCwsKUDoscnDnnyS6RWPTv3x9xcXH49NNPAQBarRYRERF46623kJCQ0OTzmVgQEbk2Y3Ms/vP5zhjVNRBeXtJWqKqqKlRVVcFHv8uTucrKgK1bgRs3TH9OQICUVLRrZ/nvtdTNw8D6CU0fN3s351e4gNzcXCQlJaGwsBBqtRrPP/88+vTpw61RZFSzSiwqKyvh4+ODrVu3YvLkyTX3z549Gw8ePMCOHTvqPaeiogIVehNNS0pKEBERwcSCiMiFmbIKs3PnTmRkZCA+Ph7h4eGW/zJRBO7eBVJTgYsXAWPtPtu3lwq1u3UD1AoVRWs1wIpooCQHDddZCFJ3rLfPs3DbRZSXl+Pbb79Feno6ACAmJgaTJ09mckENMiexcPoai3v37kGj0SA42LCvdnBwcM2/MHUtW7YMf/rTn+wRHhEROQi1Smh0Kvnjx49x+/ZtFBcX4/PPP8fYsWMRFxdn2cmWIEjzLSIigLFjgStXaqe2u7tLcy86dQJM2K5rcyo1MO4DIGkWYKxsn92gXIqXlxdmzJiBY8eOYd++ffD392dSQVbh9CsW2dnZCA8Px9GjRzFw4MCa+//whz/g4MGDOHHiRL3ncMWCiIgaUl5ejp07d+LSk+5O0dHRmDRpEjw8PBSOzA4u7ZS6Q+kXcvuHS0kFu0G5rJycHAQHB0OlkiYQVFVVwd3dXeGoyJE0qxWLtm3bQq1WIy8vz+D+vLw8hISENPgcT09PeNqz4wYRETkFLy8vTJ8+HSdOnMCPP/6ICxcuIDc3FzNmzEBgYKDS4dlW90lA1/FSl6hHedKE7faDuFLh4kJDazu9VVdX44svvkC7du0wZswYqJXankdOy+kH5Hl4eKBPnz5ITk6uuU+r1SI5OdlgBYOIiMgUgiBgwIABmDNnDvz8/HDv3j1s2LABGmN1Eq5EN8ej5zTpO5OKZiUjIwNZWVk4ceIE1q1bh+LiYqVDIifj9IkFACxevBhr1qzB+vXrcfnyZbzxxhsoLS3Fq6++qnRoRETkpCIjI/H666+jU6dOmDhxIq/eksvr0qULZs6cCS8vL9y9exeJiYnIyMhQOixyIk5fY6Hz6aef1gzIi42Nxd///nf079/fpOey3SwRERkjiqJBYevNmzfRqlUrtGzZUrmgiGyoqKgISUlJyMnJgSAIGDZsGIYNG8YC72aqWbWbtQYmFkREZIqioiIkJiZCEAT86le/wtNPP610SEQ2UV1djR9++AGnTp0CAAwcOBBjx45VOCpSgjnnyS6xFYqIiMgeVCoV2rRpg8ePH2PTpk3Yv38/tFqt0mERWZ2bmxsmTpyIKVOmwM/PD/369VM6JHICXLEAVyyIiMh01dXV2Lt3L1JTUwEAHTt2xNSpU+Hr66twZES2UV1dDTe32kaid+/eRXh4OLdGNRNcsSAiIrIRNzc3jB8/HlOnToW7uztu3LiBxMREZGZmKh0akU3oJxXXr1/H2rVrsXXrVoOZYEQAEwsiIiKL9OzZEwsWLEDbtm1RUlKC8+fPKx0Skc0VFxdDEARcvHgRa9asQX5+vtIhkQPhVihwKxQREVmuoqICR48exbPPPmtwZZfIVWVmZmLLli0oKSmBu7s7Jk6ciGeeeUbpsMhGuBWKiIjITjw9PTFixIiapEKr1WLnzp3Iy8tTODIi24iIiMDChQvRqVMnVFVV4ZtvvsF3332H6upqpUMjhTGxICIisqKjR48iLS0Nn332Gc6cOaN0OEQ24evri5dffrlmvkVqaiquXbumdFikMK7ZEhERWVHv3r1x69YtXL9+Hd9++y0yMzPx/PPPc5sUuRyVSoURI0YgIiICGRkZ6Natm9IhkcJYYwHWWBARkXWJoohDhw7hwIEDEEURoaGhiI+PR6tWrZQOjcjmysrKkJaWhkGDBkGl4uYYZ8caCyIiIgUJgoBhw4bhlVdegY+PD3JycpCYmIiMjAylQyOyKVEU8c0332Dfvn348ssvUVpaqnRIZEdMLIiIiGykU6dOWLhwIdq1aweNRgM/Pz+lQyKyKUEQEBMTAw8PD9y8eROrVq3CnTt3lA6L7IRbocCtUEREZFsajQa5ubkIDw+vua/uNGMiV1JQUICkpCQUFBRApVJh9OjRGDhwIKd1OyFuhSIiInIgarXaIKm4c+cOPvnkE9y6dUu5oIhsKDAwEPPnz0fPnj2h1Wrx448/IikpCeXl5UqHRjbExIKIiMjODh06hOLiYqxfvx5HjhwBNw+QK/Lw8MCvfvUrjB8/Hmq1Grm5ufysuzhuhQK3QhERkX1VVlbiu+++w9mzZwEAXbp0wZQpU+Dl5aVwZES2kZWVBbVajZCQEABSkTe3RTkHboUiIiJyYB4eHpg8eTImTpwItVqNK1euIDExETk5OUqHRmQT4eHhNUkFAJw6dQo7d+5EVVWVglGRtTGxICIiUoAgCOjTpw/mzZuHli1boqioCGvXrkVeXp7SoRHZVGlpKfbu3Yu0tDSsXbsWhYWFSodEVsLEgoiISEFhYWFYuHAhOnfujM6dOyMoKEjpkIhsytfXFzNnzoSvry9yc3OxevVqpKenKx0WWQFrLMAaCyIiUp4oiqiuroa7uzsAoKKiAqWlpWjdurXCkRHZRklJCbZs2YLMzEwAwODBgzFq1ChO63YwrLEgIiJyMoIg1CQVoihi586dSExMxOXLlxWOjMg2/P39MWfOHAwcOBAA8Msvv+Bf//oXtFqtwpGRpZhYEBEROZiqqio8fPgQFRUV+Prrr7F3715oNBqlwyKyOrVajbFjxyI+Ph6enp7o1KkTVyycGLdCgVuhiIjI8Wg0GiQnJ+Po0aMAgMjISEybNo3/P0UuS3cepmtDW1ZWBm9vb7alVRi3QhERETk5tVqNMWPGYMaMGfD09MSdO3eQmJiImzdvKh0akU0EBATUJBGVlZX44osvsHnzZjx+/FjhyMhUTCyIiIgcWLdu3bBgwQIEBwejtLQUV69eVTokIpvLzs5GYWEhMjIyUFJSonQ4ZCJuhQK3QhERkeOrqqrCiRMnMHDgQKjVaqXDIbK5nJwcFBUVoXv37kqH0qyZc57sZqeYiIiISAZ3d3cMGTJE6TCI7CY0NBShoaFKh0Fm4FYoIiIiIiKSjYkFERERERHJxsSCiIiIiIhkY2JBRERERESyMbEgIiIiIiLZmFgQEREREZFsTCyIiIiIiEg2JhZERERERCQbEwsiIiIiIpKNiQUREREREcnGxIKIiIiIiGRjYkFERERERLIxsSAiIiIiItmYWBARERERkWxMLIiIiIiISDYmFkREREREJBsTCyIiIiIiko2JBRERERERycbEgoiIiIiIZGNiQUREREREsjGxICIiIiIi2ZhYEBERERGRbEwsiIiIiIhINiYWREREREQkGxMLIiIiIiKSjYkFERERERHJxsSCiIiIiIhkY2JBRERERESyMbEgIiIiIiLZmFgQEREREZFsTCyIiIiIiEg2JhZERERERCQbEwsiIiIiIpKNiQUREREREcnGxIKIiIiIiGRjYkFERERERLIxsSAiIiIiItmYWBARERERkWxMLIiIiIiISDYmFkREREREJBsTCyIiIiIiko2JBRERERERycbEgoiIiIiIZGNiQUREREREsjGxICIiIiIi2ZhYEBERERGRbEwsiIiIiIhINiYWREQk29mzZ216PBEROT4mFkREJMuaNWsQGxuL5cuXm3T88uXLERsbizVr1tg4MiIisicmFkREZLGzZ89iwYIFAIClS5c2mVwsX74cS5cuBQAsWLCAKxdERC7EqROLW7duYd68eYiKioK3tzc6deqE9957D5WVlUqHRkTULMTExGDZsmU1t3XJhUYr4ljGfew4k4VjGfeh0YoGSQUALFu2DDExMUqETURENuCmdABypKenQ6vVIjExEU899RQuXLiA+fPno7S0FB999JHS4RERNQsJCQkAUJM0LF26FP88cB2q2Ck1x2jPbEfm3rU1t5ctW1bzPCIicg2CKIqi0kFY04cffoiVK1fixo0bJj+npKQEAQEBKC4uhr+/vw2jIyJyXXVXJFoOm42AAdNRfHwLHhxcX3M/kwoiIudhznmyU69YNKS4uBitW7dWOgwiombn939Ygn8euF6zMvHg4HqUHN8KbUVpzTERY+fh939YolSIRERkQ05dY1HX9evX8cknn2DhwoWNHldRUYGSkhKDLyIikiflZiFUsVPQctjsmvv0k4qWw2ZDFTsFKTcLlQiPiIhszCETi4SEBAiC0OhXenq6wXOysrIwbtw4TJ8+HfPnz2/09ZctW4aAgICar4iICFv+OUREzUL+w3IAQMCA6VB5+ho8pvL0RcCA6QbHERGRa3HIGouCggLcv3+/0WM6duwIDw8PAEB2djaGDx+OAQMG4IsvvoBK1Xi+VFFRgYqKiprbJSUliIiIYI0FEZEMxzLuY+aa4/VqKnR0NRdfzR+AgZ3aKBAhERGZy+lrLAIDAxEYGGjSsVlZWRgxYgT69OmDdevWNZlUAICnpyc8PT3lhklERHr6RbWG9sx2g6RC5elbsx3qwcH18PNyQ7+oF5QKkYiIbMght0KZKisrC8OHD0dkZCQ++ugjFBQUIDc3F7m5uUqHRkTU7Hz4Px8YtJRtOWw2It7+2qDmInPvWnz4Px8oER4REdmYQ65YmOqnn37C9evXcf36dbRr187gMQfc4UVE5LLqtpqNGDuvZo5FwIDp8PNyq0k6dMex5SwRkWtxyBoLe+McCyIiyzU0Ufv3f1iClJuFyH9YjiA/L/SLao0P/+eDescxuSAicmzmnCczsQATCyIiS509exaxsbE1t5tKFuomIWfOnEFMTIwtQyQiIhnMOU926hoLIiJSVkxMDFavXg3AtBWIhIQELFu2DACwevVqJhVERC6EKxbgigURkVxnz541K0kw93giIlIGVyyIiMiuzE0SmFQQEbkeJhZERERERCQbEwsiIiIiIpKNiQUREREREcnGxIKIiIiIiGRjYkFERERERLIxsSAiIiIiItmYWBARERERkWxMLIiIiIiISDYmFkREREREJBsTCyIiIiIiko2JBRERERERycbEgoiIiIiIZGNiQUREREREsjGxICIiIiIi2ZhYEBERERGRbEwsiIiIiIhINiYWREREREQkGxMLIiIiIiKSjYkFERERERHJxsSCiIiIiIhkY2JBRERERESyMbEgIiIiIiLZmFgQEREREZFsTCyIiIiIiEg2JhZERERERCQbEwsiIiIiIpKNiQUREREREcnGxIKIiIiIiGRjYkFERERERLIxsSAiIiIiItmYWBARERERkWxMLIiIiIiISDYmFkREREREJBsTCyIiIiIiko2JBRERERERycbEgoiIiIiIZGNiQUREREREsjGxICIiIiIi2ZhYEBERERGRbEwsiIiIiIhINiYWREREREQkGxMLIiIiIiKSjYkFERERERHJxsSCiIiIiIhkY2JBRERERESyMbEgIiIiIiLZmFgQEREREZFsTCyIiIiIiEg2JhZERERERCQbEwsiIiIiIpKNiQUREREREcnGxIKIiIiIiGRjYkFERERERLIxsSAiIiIiItmYWBARERERkWxuSgfgCERRBACUlJQoHAkRERERkePQnR/rzpcbw8QCwMOHDwEAERERCkdCREREROR4Hj58iICAgEaPEURT0g8Xp9VqkZ2dDT8/PwiCoHQ4LqGkpAQRERHIzMyEv7+/0uGQDHwvXQPfR9fA99F18L10Dc3hfRRFEQ8fPkRYWBhUqsarKLhiAUClUqFdu3ZKh+GS/P39XfZftOaG76Vr4PvoGvg+ug6+l67B1d/HplYqdFi8TUREREREsjGxICIiIiIi2ZhYkE14enrivffeg6enp9KhkEx8L10D30fXwPfRdfC9dA18Hw2xeJuIiIiIiGTjigUR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WoR+/frh5s2bKCoqYmJBROSAmFgQEZFiBg8ejKNHj8LPzw+HDh1CbGxsvWO0Wi1UKmnn7uuvv449e/YwsSAickCssSAiIkWsW7cOx44dAwBUVFTA39+/weN0SQURETk2/teaiIjsbsuWLZg/fz5at26NGTNmoLKyEkuWLFE6LCIikoGJBRER2dX333+Pl19+Gb6+vti7dy9WrVqF1q1bY+vWrTh69KjS4RERkYWYWBARkd0cPHgQ06ZNg5ubG3bt2oU+ffqgZcuWePfddwEAixcvVjhCIiKyFBMLIiKyi5SUFEycOBEajQbffPMNhg4dWvPYm2++ifbt2+PEiRPYvHmzglESEZGlmFgQEZHNnT9/Hs8//zzKysqwceNGjBs3zuBxT09P/PnPfwYALF26FBUVFUqESUREMrDdLBEROQ22myUiclxuSgdARETUmLKyMnz//fcAgBs3bqCsrAxbt24FAMTFxaF9+/ZKhkdERE9wxYKIiBzarVu3EBUV1eBj69atw5w5c+wbEBERNYiJBRERERERycbibSIiIiIiko2JBRERERERycbEgoiIiIiIZGNiQUREREREsjGxICIiIiIi2ZhYEBERERGRbEwsiIiIiIhINiYWREREREQkGxMLIiIiIiKSjYkFERERERHJxsSCiIiIiIhkY2JBRERERESy/X8LcrUA6DvykQAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 800x650 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_data(X_train, y_train_idx, noisy_labels_idx, X_out, X_duplicate)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5ab32dda-7ace-4a5f-8ca0-8c46be0d2216",
   "metadata": {},
   "source": [
    "不匹配标签用红色圈出，异常值用黑色突出，重复值用青色突出"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "dc6a703ed02c418f",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 转换时数据以传递给Datalab。支持的数据类型包括HuggingFace数据集、DataFrame\n",
    "data = {\"X\": X_train, \"y\": noisy_labels}"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4df2e0a4-324c-465d-bb04-0fe300f99bcb",
   "metadata": {},
   "source": [
    "## 叁丨从分类器获取样本外预测概率"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "8ded0957-eae1-4e83-aafe-01cadb0224aa",
   "metadata": {},
   "outputs": [],
   "source": [
    "model = LogisticRegression()\n",
    "pred_probs = cross_val_predict(\n",
    "    estimator=model, X=data[\"X\"], y=data[\"y\"], cv=5, method=\"predict_proba\"\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "67bff356-7838-4b0d-8707-13ba8eb1ab94",
   "metadata": {},
   "source": [
    "## 肆丨使用Datalab查找数据集中的问题"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "5dde70fd-6caf-4831-966d-2baf312f3bcb",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Finding null issues ...\n",
      "Finding label issues ...\n",
      "Finding outlier issues ...\n",
      "Finding near_duplicate issues ...\n",
      "Finding non_iid issues ...\n",
      "Finding class_imbalance issues ...\n",
      "Finding underperforming_group issues ...\n",
      "\n",
      "Audit complete. 21 issues found in the dataset.\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\Artmallo\\PycharmProjects\\MyNote\\.venv\\Lib\\site-packages\\sklearn\\neighbors\\_base.py:246: EfficiencyWarning: Precomputed sparse input was not sorted by row values. Use the function sklearn.neighbors.sort_graph_by_row_values to sort the input by row values, with warn_when_not_sorted=False to remove this warning.\n",
      "  warnings.warn(\n"
     ]
    }
   ],
   "source": [
    "lab = Datalab(data, label_name=\"y\")\n",
    "lab.find_issues(pred_probs=pred_probs, features=data[\"X\"])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a304af13-4bc0-43d1-94a9-5154f56eeadf",
   "metadata": {},
   "source": [
    "# 查看审计结果"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "0c2ea4b1-4c88-452a-b098-158b23e0903a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Dataset Information: num_examples: 132, num_classes: 3\n",
      "\n",
      "Here is a summary of various issues found in your data:\n",
      "\n",
      "    issue_type  num_issues\n",
      "         label          11\n",
      "       outlier           6\n",
      "near_duplicate           4\n",
      "\n",
      "Learn about each issue: https://docs.cleanlab.ai/stable/cleanlab/datalab/guide/issue_type_description.html\n",
      "See which examples in your dataset exhibit each issue via: `datalab.get_issues(<ISSUE_NAME>)`\n",
      "\n",
      "Data indices corresponding to top examples of each issue are shown below.\n",
      "\n",
      "\n",
      "----------------------- label issues -----------------------\n",
      "\n",
      "About this issue:\n",
      "\tExamples whose given label is estimated to be potentially incorrect\n",
      "    (e.g. due to annotation error) are flagged as having label issues.\n",
      "    \n",
      "\n",
      "Number of examples with this issue: 11\n",
      "Overall dataset quality in terms of this issue: 0.9318\n",
      "\n",
      "Examples representing most severe instances of this issue:\n",
      "     is_label_issue  label_score given_label predicted_label\n",
      "77             True     0.006940        high             mid\n",
      "7              True     0.007830         low             mid\n",
      "40             True     0.014828         mid             low\n",
      "107            True     0.021241        high             mid\n",
      "120            True     0.026407        high             mid\n",
      "\n",
      "\n",
      "---------------------- outlier issues ----------------------\n",
      "\n",
      "About this issue:\n",
      "\tExamples that are very different from the rest of the dataset \n",
      "    (i.e. potentially out-of-distribution or rare/anomalous instances).\n",
      "    \n",
      "\n",
      "Number of examples with this issue: 6\n",
      "Overall dataset quality in terms of this issue: 0.3558\n",
      "\n",
      "Examples representing most severe instances of this issue:\n",
      "     is_outlier_issue  outlier_score\n",
      "126              True       0.006636\n",
      "130              True       0.012571\n",
      "129              True       0.012571\n",
      "127              True       0.014909\n",
      "128              True       0.017443\n",
      "\n",
      "\n",
      "------------------ near_duplicate issues -------------------\n",
      "\n",
      "About this issue:\n",
      "\tA (near) duplicate issue refers to two or more examples in\n",
      "    a dataset that are extremely similar to each other, relative\n",
      "    to the rest of the dataset.  The examples flagged with this issue\n",
      "    may be exactly duplicated, or lie atypically close together when\n",
      "    represented as vectors (i.e. feature embeddings).\n",
      "    \n",
      "\n",
      "Number of examples with this issue: 4\n",
      "Overall dataset quality in terms of this issue: 0.6160\n",
      "\n",
      "Examples representing most severe instances of this issue:\n",
      "     is_near_duplicate_issue  near_duplicate_score near_duplicate_sets  distance_to_nearest_neighbor\n",
      "131                     True              0.000000               [123]                  0.000000e+00\n",
      "123                     True              0.000000               [131]                  0.000000e+00\n",
      "129                     True              0.000002               [130]                  4.463180e-07\n",
      "130                     True              0.000002               [129]                  4.463180e-07\n",
      "51                     False              0.161148                  []                  3.859087e-02\n"
     ]
    }
   ],
   "source": [
    "lab.report()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e3efa65d-9e0e-4938-a736-734f7f0cb6ce",
   "metadata": {},
   "source": [
    "## 伍丨详细了解数据集中的问题"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "812f8361-9c47-4ba5-995d-ee8107f6b38a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>issue_type</th>\n",
       "      <th>score</th>\n",
       "      <th>num_issues</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>null</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>label</td>\n",
       "      <td>0.931818</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>outlier</td>\n",
       "      <td>0.355772</td>\n",
       "      <td>6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>near_duplicate</td>\n",
       "      <td>0.616034</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>non_iid</td>\n",
       "      <td>0.819250</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>class_imbalance</td>\n",
       "      <td>0.212121</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>underperforming_group</td>\n",
       "      <td>0.906167</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "              issue_type     score  num_issues\n",
       "0                   null  1.000000           0\n",
       "1                  label  0.931818          11\n",
       "2                outlier  0.355772           6\n",
       "3         near_duplicate  0.616034           4\n",
       "4                non_iid  0.819250           0\n",
       "5        class_imbalance  0.212121           0\n",
       "6  underperforming_group  0.906167           0"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 获取整个数据集中每种问题总体严重程度汇总\n",
    "lab.get_issue_summary()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "86c8c3b2-74b5-4e75-9ff4-48a3e418391c",
   "metadata": {},
   "source": [
    "score列：较低值表示这种类型的问题总体上更严重\n",
    "\n",
    "num_issues列：较高值表示问题严重"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "f337805f-481b-428c-a094-d81d35539b6c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>issue_type</th>\n",
       "      <th>score</th>\n",
       "      <th>num_issues</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>label</td>\n",
       "      <td>0.931818</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  issue_type     score  num_issues\n",
       "0      label  0.931818          11"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 查看特定类型的问题\n",
    "lab.get_issue_summary(\"label\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "610fd4dd-453d-4ec8-b412-e90fc7edcacb",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>is_null_issue</th>\n",
       "      <th>null_score</th>\n",
       "      <th>is_label_issue</th>\n",
       "      <th>label_score</th>\n",
       "      <th>is_outlier_issue</th>\n",
       "      <th>outlier_score</th>\n",
       "      <th>is_near_duplicate_issue</th>\n",
       "      <th>near_duplicate_score</th>\n",
       "      <th>is_non_iid_issue</th>\n",
       "      <th>non_iid_score</th>\n",
       "      <th>is_class_imbalance_issue</th>\n",
       "      <th>class_imbalance_score</th>\n",
       "      <th>is_underperforming_group_issue</th>\n",
       "      <th>underperforming_group_score</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>False</td>\n",
       "      <td>1.0</td>\n",
       "      <td>False</td>\n",
       "      <td>0.864148</td>\n",
       "      <td>False</td>\n",
       "      <td>0.417707</td>\n",
       "      <td>False</td>\n",
       "      <td>0.664083</td>\n",
       "      <td>False</td>\n",
       "      <td>0.970324</td>\n",
       "      <td>False</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>False</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>False</td>\n",
       "      <td>1.0</td>\n",
       "      <td>False</td>\n",
       "      <td>0.825554</td>\n",
       "      <td>False</td>\n",
       "      <td>0.375317</td>\n",
       "      <td>False</td>\n",
       "      <td>0.641516</td>\n",
       "      <td>False</td>\n",
       "      <td>0.890575</td>\n",
       "      <td>False</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>False</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>False</td>\n",
       "      <td>1.0</td>\n",
       "      <td>False</td>\n",
       "      <td>0.533286</td>\n",
       "      <td>False</td>\n",
       "      <td>0.460593</td>\n",
       "      <td>False</td>\n",
       "      <td>0.601188</td>\n",
       "      <td>False</td>\n",
       "      <td>0.826147</td>\n",
       "      <td>False</td>\n",
       "      <td>0.212121</td>\n",
       "      <td>False</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>False</td>\n",
       "      <td>1.0</td>\n",
       "      <td>False</td>\n",
       "      <td>0.755685</td>\n",
       "      <td>False</td>\n",
       "      <td>0.321635</td>\n",
       "      <td>False</td>\n",
       "      <td>0.562539</td>\n",
       "      <td>False</td>\n",
       "      <td>0.948362</td>\n",
       "      <td>False</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>False</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>False</td>\n",
       "      <td>1.0</td>\n",
       "      <td>True</td>\n",
       "      <td>0.133654</td>\n",
       "      <td>False</td>\n",
       "      <td>0.472909</td>\n",
       "      <td>False</td>\n",
       "      <td>0.746763</td>\n",
       "      <td>False</td>\n",
       "      <td>0.878267</td>\n",
       "      <td>False</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>False</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   is_null_issue  null_score  is_label_issue  label_score  is_outlier_issue  \\\n",
       "0          False         1.0           False     0.864148             False   \n",
       "1          False         1.0           False     0.825554             False   \n",
       "2          False         1.0           False     0.533286             False   \n",
       "3          False         1.0           False     0.755685             False   \n",
       "4          False         1.0            True     0.133654             False   \n",
       "\n",
       "   outlier_score  is_near_duplicate_issue  near_duplicate_score  \\\n",
       "0       0.417707                    False              0.664083   \n",
       "1       0.375317                    False              0.641516   \n",
       "2       0.460593                    False              0.601188   \n",
       "3       0.321635                    False              0.562539   \n",
       "4       0.472909                    False              0.746763   \n",
       "\n",
       "   is_non_iid_issue  non_iid_score  is_class_imbalance_issue  \\\n",
       "0             False       0.970324                     False   \n",
       "1             False       0.890575                     False   \n",
       "2             False       0.826147                     False   \n",
       "3             False       0.948362                     False   \n",
       "4             False       0.878267                     False   \n",
       "\n",
       "   class_imbalance_score  is_underperforming_group_issue  \\\n",
       "0               1.000000                           False   \n",
       "1               1.000000                           False   \n",
       "2               0.212121                           False   \n",
       "3               1.000000                           False   \n",
       "4               1.000000                           False   \n",
       "\n",
       "   underperforming_group_score  \n",
       "0                          1.0  \n",
       "1                          1.0  \n",
       "2                          1.0  \n",
       "3                          1.0  \n",
       "4                          1.0  "
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lab.get_issues().head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "9fc53878-935d-4ba4-8717-f59c153f3e29",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 将问题类型作为参数传递，以`get_issues`获取特定类型的问题\n",
    "examples_w_issue = (\n",
    "    lab.get_issues(\"label\")\n",
    "    .query(\"is_label_issue\")\n",
    "    .sort_values(\"label_score\")\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "7c37fefb-fced-4b6b-957d-d26d56363e49",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>is_label_issue</th>\n",
       "      <th>label_score</th>\n",
       "      <th>given_label</th>\n",
       "      <th>predicted_label</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>77</th>\n",
       "      <td>True</td>\n",
       "      <td>0.006940</td>\n",
       "      <td>high</td>\n",
       "      <td>mid</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>True</td>\n",
       "      <td>0.007830</td>\n",
       "      <td>low</td>\n",
       "      <td>mid</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>40</th>\n",
       "      <td>True</td>\n",
       "      <td>0.014828</td>\n",
       "      <td>mid</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>107</th>\n",
       "      <td>True</td>\n",
       "      <td>0.021241</td>\n",
       "      <td>high</td>\n",
       "      <td>mid</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>120</th>\n",
       "      <td>True</td>\n",
       "      <td>0.026407</td>\n",
       "      <td>high</td>\n",
       "      <td>mid</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     is_label_issue  label_score given_label predicted_label\n",
       "77             True     0.006940        high             mid\n",
       "7              True     0.007830         low             mid\n",
       "40             True     0.014828         mid             low\n",
       "107            True     0.021241        high             mid\n",
       "120            True     0.026407        high             mid"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "examples_w_issue.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "11638e6d-1d12-4dc4-acb8-db3973e11d71",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Class Name</th>\n",
       "      <th>Class Index</th>\n",
       "      <th>Label Issues</th>\n",
       "      <th>Inverse Label Issues</th>\n",
       "      <th>Label Noise</th>\n",
       "      <th>Inverse Label Noise</th>\n",
       "      <th>Label Quality Score</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>high</td>\n",
       "      <td>0</td>\n",
       "      <td>6</td>\n",
       "      <td>1</td>\n",
       "      <td>0.206897</td>\n",
       "      <td>0.041667</td>\n",
       "      <td>0.793103</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>low</td>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>3</td>\n",
       "      <td>0.071429</td>\n",
       "      <td>0.103448</td>\n",
       "      <td>0.928571</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>mid</td>\n",
       "      <td>2</td>\n",
       "      <td>4</td>\n",
       "      <td>8</td>\n",
       "      <td>0.053333</td>\n",
       "      <td>0.101266</td>\n",
       "      <td>0.946667</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  Class Name  Class Index  Label Issues  Inverse Label Issues  Label Noise  \\\n",
       "0       high            0             6                     1     0.206897   \n",
       "1        low            1             2                     3     0.071429   \n",
       "2        mid            2             4                     8     0.053333   \n",
       "\n",
       "   Inverse Label Noise  Label Quality Score  \n",
       "0             0.041667             0.793103  \n",
       "1             0.103448             0.928571  \n",
       "2             0.101266             0.946667  "
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 访问特定问题类型相关的各种附加信息\n",
    "label_issues_info = lab.get_info(\"label\")\n",
    "label_issues_info[\"classes_by_label_quality\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "874fcad6-1a28-4a44-8d61-738daac1b5ab",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>is_near_duplicate_issue</th>\n",
       "      <th>near_duplicate_score</th>\n",
       "      <th>near_duplicate_sets</th>\n",
       "      <th>distance_to_nearest_neighbor</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>123</th>\n",
       "      <td>True</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>[131]</td>\n",
       "      <td>0.000000e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>131</th>\n",
       "      <td>True</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>[123]</td>\n",
       "      <td>0.000000e+00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>129</th>\n",
       "      <td>True</td>\n",
       "      <td>0.000002</td>\n",
       "      <td>[130]</td>\n",
       "      <td>4.463180e-07</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>130</th>\n",
       "      <td>True</td>\n",
       "      <td>0.000002</td>\n",
       "      <td>[129]</td>\n",
       "      <td>4.463180e-07</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     is_near_duplicate_issue  near_duplicate_score near_duplicate_sets  \\\n",
       "123                     True              0.000000               [131]   \n",
       "131                     True              0.000000               [123]   \n",
       "129                     True              0.000002               [130]   \n",
       "130                     True              0.000002               [129]   \n",
       "\n",
       "     distance_to_nearest_neighbor  \n",
       "123                  0.000000e+00  \n",
       "131                  0.000000e+00  \n",
       "129                  4.463180e-07  \n",
       "130                  4.463180e-07  "
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 查看近似重复样本\n",
    "lab.get_issues(\"near_duplicate\").query(\"is_near_duplicate_issue\").sort_values(\"near_duplicate_score\")"
   ]
  },
  {
   "metadata": {},
   "cell_type": "markdown",
   "source": "",
   "id": "290729df-08b5-4e96-99da-d79d7a2ef082"
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
