{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "f60722e2-d4b3-465b-8793-5a9a4df7b9b0",
   "metadata": {},
   "outputs": [],
   "source": [
    "import os, re\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import warnings\n",
    "\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.preprocessing import LabelEncoder\n",
    "from sklearn.feature_extraction.text import TfidfVectorizer\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.naive_bayes import MultinomialNB\n",
    "from sklearn.ensemble import RandomForestClassifier\n",
    "from sklearn.svm import LinearSVC\n",
    "from sklearn.metrics import accuracy_score, precision_recall_fscore_support\n",
    "\n",
    "warnings.filterwarnings(\"ignore\")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "ef3cb767-9509-4e49-aaaf-7eb0b1776cd6",
   "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>Disease</th>\n",
       "      <th>Symptoms</th>\n",
       "      <th>Treatment</th>\n",
       "      <th>Variant</th>\n",
       "      <th>Text</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Influenza (Flu)</td>\n",
       "      <td>fever, mild fever, sore throat, muscle pain, c...</td>\n",
       "      <td>rest, fluids, paracetamol, oseltamivir (if early)</td>\n",
       "      <td>1</td>\n",
       "      <td>fever mild fever sore throat muscle pain cough...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Influenza (Flu)</td>\n",
       "      <td>cough, exhaustion, pyrexia</td>\n",
       "      <td>rest, fluids, paracetamol, oseltamivir (if early)</td>\n",
       "      <td>2</td>\n",
       "      <td>cough exhaustion pyrexia | treatment: rest, fl...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Influenza (Flu)</td>\n",
       "      <td>muscle pain, cough, high temperature, fatigue</td>\n",
       "      <td>rest, fluids, paracetamol, oseltamivir (if early)</td>\n",
       "      <td>3</td>\n",
       "      <td>muscle pain cough high temperature fatigue | t...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Influenza (Flu)</td>\n",
       "      <td>pyrexia, fatigue, muscle pain, pharyngitis, he...</td>\n",
       "      <td>rest, fluids, paracetamol, oseltamivir (if early)</td>\n",
       "      <td>4</td>\n",
       "      <td>pyrexia fatigue muscle pain pharyngitis head p...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Influenza (Flu)</td>\n",
       "      <td>high temperature, coughing, head pain, sore th...</td>\n",
       "      <td>rest, fluids, paracetamol, oseltamivir (if early)</td>\n",
       "      <td>5</td>\n",
       "      <td>high temperature coughing head pain sore throa...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           Disease                                           Symptoms  \\\n",
       "0  Influenza (Flu)  fever, mild fever, sore throat, muscle pain, c...   \n",
       "1  Influenza (Flu)                         cough, exhaustion, pyrexia   \n",
       "2  Influenza (Flu)      muscle pain, cough, high temperature, fatigue   \n",
       "3  Influenza (Flu)  pyrexia, fatigue, muscle pain, pharyngitis, he...   \n",
       "4  Influenza (Flu)  high temperature, coughing, head pain, sore th...   \n",
       "\n",
       "                                           Treatment  Variant  \\\n",
       "0  rest, fluids, paracetamol, oseltamivir (if early)        1   \n",
       "1  rest, fluids, paracetamol, oseltamivir (if early)        2   \n",
       "2  rest, fluids, paracetamol, oseltamivir (if early)        3   \n",
       "3  rest, fluids, paracetamol, oseltamivir (if early)        4   \n",
       "4  rest, fluids, paracetamol, oseltamivir (if early)        5   \n",
       "\n",
       "                                                Text  \n",
       "0  fever mild fever sore throat muscle pain cough...  \n",
       "1  cough exhaustion pyrexia | treatment: rest, fl...  \n",
       "2  muscle pain cough high temperature fatigue | t...  \n",
       "3  pyrexia fatigue muscle pain pharyngitis head p...  \n",
       "4  high temperature coughing head pain sore throa...  "
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "DATA_PATH =\"medical_dataset_diverse_100x6.csv\"\n",
    "\n",
    "df = pd.read_csv(DATA_PATH)\n",
    "df.head()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "d1295a45-61fb-4b38-ad99-7cc78bfa4490",
   "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>Disease</th>\n",
       "      <th>Symptoms</th>\n",
       "      <th>Treatment</th>\n",
       "      <th>Variant</th>\n",
       "      <th>Text</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>360</th>\n",
       "      <td>Gout</td>\n",
       "      <td>swelling big toe , sudden joint pain, redness</td>\n",
       "      <td>nsaids, colchicine, allopurinol prevention</td>\n",
       "      <td>4</td>\n",
       "      <td>swelling (big toe) sudden joint pain redness |...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>73</th>\n",
       "      <td>Viral Gastroenteritis</td>\n",
       "      <td>queasiness, emesis, fatigue, diarrhea, abdomin...</td>\n",
       "      <td>oral rehydration, rest, antiemetics</td>\n",
       "      <td>3</td>\n",
       "      <td>queasiness emesis fatigue diarrhea abdominal c...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>353</th>\n",
       "      <td>Osteoarthritis</td>\n",
       "      <td>crepitus, stiffness, joint pain</td>\n",
       "      <td>exercise, weight loss, analgesics, topicals</td>\n",
       "      <td>2</td>\n",
       "      <td>crepitus stiffness joint pain | treatment: exe...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>86</th>\n",
       "      <td>GERD</td>\n",
       "      <td>heartburn, loss of appetite, chest discomfort,...</td>\n",
       "      <td>ppis, lifestyle changes, weight reduction</td>\n",
       "      <td>5</td>\n",
       "      <td>heartburn loss of appetite chest discomfort re...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>237</th>\n",
       "      <td>Mumps</td>\n",
       "      <td>cephalalgia, parotid swelling, pyrexia</td>\n",
       "      <td>supportive care, analgesics</td>\n",
       "      <td>4</td>\n",
       "      <td>cephalalgia parotid swelling pyrexia | treatme...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   Disease                                           Symptoms  \\\n",
       "360                   Gout      swelling big toe , sudden joint pain, redness   \n",
       "73   Viral Gastroenteritis  queasiness, emesis, fatigue, diarrhea, abdomin...   \n",
       "353         Osteoarthritis                    crepitus, stiffness, joint pain   \n",
       "86                    GERD  heartburn, loss of appetite, chest discomfort,...   \n",
       "237                  Mumps             cephalalgia, parotid swelling, pyrexia   \n",
       "\n",
       "                                       Treatment  Variant  \\\n",
       "360   nsaids, colchicine, allopurinol prevention        4   \n",
       "73           oral rehydration, rest, antiemetics        3   \n",
       "353  exercise, weight loss, analgesics, topicals        2   \n",
       "86     ppis, lifestyle changes, weight reduction        5   \n",
       "237                  supportive care, analgesics        4   \n",
       "\n",
       "                                                  Text  \n",
       "360  swelling (big toe) sudden joint pain redness |...  \n",
       "73   queasiness emesis fatigue diarrhea abdominal c...  \n",
       "353  crepitus stiffness joint pain | treatment: exe...  \n",
       "86   heartburn loss of appetite chest discomfort re...  \n",
       "237  cephalalgia parotid swelling pyrexia | treatme...  "
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def clean_text(s):\n",
    "    if pd.isna(s): \n",
    "        return \"\"\n",
    "    s = str(s).lower()\n",
    "    s = re.sub(r\"[^\\w\\s,]\", \" \", s)       # إزالة الرموز غير الحروف/الأرقام/المسافة/الفاصلة\n",
    "    s = re.sub(r\"\\s+\", \" \", s).strip()    # إزالة المسافات الزائدة\n",
    "    return s\n",
    "\n",
    "df[\"Disease\"]   = df[\"Disease\"].astype(str).str.strip()\n",
    "df[\"Symptoms\"]  = df[\"Symptoms\"].apply(clean_text)\n",
    "df[\"Treatment\"] = df[\"Treatment\"].apply(clean_text)\n",
    "\n",
    "df = df.dropna(subset=[\"Disease\",\"Symptoms\"])\n",
    "df = df.drop_duplicates(subset=[\"Disease\",\"Symptoms\"]).reset_index(drop=True)\n",
    "\n",
    "df.sample(5, random_state=42)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "67af88d8-0b8c-426d-8a2c-c80d28aec83d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((433, 5), (109, 5))"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_df, test_df = train_test_split(\n",
    "    df, test_size=0.2, random_state=42, stratify=df[\"Disease\"]\n",
    ")\n",
    "\n",
    "train_df.shape, test_df.shape\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "7d036cdd-f09e-402f-9287-ced0b4190c16",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((433, 1307), (109, 1307))"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "vectorizer = TfidfVectorizer(\n",
    "    ngram_range=(1,2),\n",
    "    max_features=20000,\n",
    "    strip_accents=\"unicode\"\n",
    ")\n",
    "\n",
    "X_train = vectorizer.fit_transform(train_df[\"Symptoms\"])\n",
    "X_test  = vectorizer.transform(test_df[\"Symptoms\"])\n",
    "\n",
    "X_train.shape, X_test.shape\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "c2577c70-b63d-47cb-9a27-0f6b6b832ce9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(100, array([76, 78, 73, 54,  8]))"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "le = LabelEncoder()\n",
    "y_train = le.fit_transform(train_df[\"Disease\"])\n",
    "y_test  = le.transform(test_df[\"Disease\"])\n",
    "\n",
    "len(le.classes_), y_train[:5]\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "d12139f4-75ac-42fe-ac67-833f10fcab38",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'trained'"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "logreg = LogisticRegression(max_iter=2000, solver=\"lbfgs\", random_state=42).fit(X_train, y_train)\n",
    "mnb    = MultinomialNB().fit(X_train, y_train)\n",
    "rf     = RandomForestClassifier(n_estimators=300, random_state=42, n_jobs=-1).fit(X_train, y_train)\n",
    "svc    = LinearSVC(random_state=42).fit(X_train, y_train)\n",
    "\n",
    "\"trained\"\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "f8bc0f44-41db-49b9-b1c8-4f76a8b73e69",
   "metadata": {},
   "outputs": [],
   "source": [
    "def eval_model(model, X_te, y_te):\n",
    "    y_pred = model.predict(X_te)\n",
    "    acc = accuracy_score(y_te, y_pred)\n",
    "    prec, rec, f1, _ = precision_recall_fscore_support(\n",
    "        y_te, y_pred, average=\"macro\", zero_division=0\n",
    "    )\n",
    "    return acc, prec, rec, f1\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "3117f026-ad39-45f3-b749-0a0ebfa0163b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'تم تدريب النماذج الأربعة'"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "logreg = LogisticRegression(max_iter=2000, solver=\"lbfgs\", random_state=42).fit(X_train, y_train)\n",
    "mnb    = MultinomialNaiveBayes = MultinomialNB().fit(X_train, y_train)\n",
    "rf     = RandomForestClassifier(n_estimators=300, random_state=42, n_jobs=-1).fit(X_train, y_train)\n",
    "svc    = LinearSVC(random_state=42).fit(X_train, y_train)\n",
    "\n",
    "\"تم تدريب النماذج الأربعة\"\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "e7667d82-6aa1-4315-a36b-fec2b3b396af",
   "metadata": {},
   "outputs": [],
   "source": [
    "def eval_model(model, X_te, y_te):\n",
    "    y_pred = model.predict(X_te)\n",
    "    acc = accuracy_score(y_te, y_pred)\n",
    "    prec, rec, f1, _ = precision_recall_fscore_support(y_te, y_pred, average=\"macro\", zero_division=0)\n",
    "    return acc, prec, rec, f1, y_pred\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "459ee7b0-47ac-4f04-9afb-8fc59e2e8d6a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "جدول التقييم (مرتب بحسب F1):\n"
     ]
    },
    {
     "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>Accuracy</th>\n",
       "      <th>Precision</th>\n",
       "      <th>Recall</th>\n",
       "      <th>F1</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>Linear SVC</th>\n",
       "      <td>0.981651</td>\n",
       "      <td>0.970000</td>\n",
       "      <td>0.980</td>\n",
       "      <td>0.973333</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Random Forest</th>\n",
       "      <td>0.963303</td>\n",
       "      <td>0.953333</td>\n",
       "      <td>0.965</td>\n",
       "      <td>0.955000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Logistic Regression</th>\n",
       "      <td>0.917431</td>\n",
       "      <td>0.888333</td>\n",
       "      <td>0.920</td>\n",
       "      <td>0.895000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Multinomial Naive Bayes</th>\n",
       "      <td>0.889908</td>\n",
       "      <td>0.846667</td>\n",
       "      <td>0.895</td>\n",
       "      <td>0.860000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                         Accuracy  Precision  Recall        F1\n",
       "Linear SVC               0.981651   0.970000   0.980  0.973333\n",
       "Random Forest            0.963303   0.953333   0.965  0.955000\n",
       "Logistic Regression      0.917431   0.888333   0.920  0.895000\n",
       "Multinomial Naive Bayes  0.889908   0.846667   0.895  0.860000"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "scores = {}\n",
    "\n",
    "acc, prec, rec, f1, y_pred_lr  = eval_model(logreg, X_test, y_test)\n",
    "scores[\"Logistic Regression\"] = (acc, prec, rec, f1)\n",
    "\n",
    "acc, prec, rec, f1, y_pred_nb  = eval_model(mnb, X_test, y_test)\n",
    "scores[\"Multinomial Naive Bayes\"] = (acc, prec, rec, f1)\n",
    "\n",
    "acc, prec, rec, f1, y_pred_rf  = eval_model(rf, X_test, y_test)\n",
    "scores[\"Random Forest\"] = (acc, prec, rec, f1)\n",
    "\n",
    "acc, prec, rec, f1, y_pred_svc = eval_model(svc, X_test, y_test)\n",
    "scores[\"Linear SVC\"] = (acc, prec, rec, f1)\n",
    "\n",
    "results_df = pd.DataFrame(scores, index=[\"Accuracy\", \"Precision\", \"Recall\", \"F1\"]).T\n",
    "results_df = results_df.sort_values(\"F1\", ascending=False)\n",
    "\n",
    "print(\"جدول التقييم (مرتب بحسب F1):\")\n",
    "results_df\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "35162120-873f-4050-abb2-fd9a195abd36",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABEEAAAHqCAYAAADrglBeAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABl50lEQVR4nO3dd3xO5+P/8fedvcQIEiMhxIg9QovaatZuaxUxq2kp6aLaGq1RVTVqtEiClkZRtYqUGkXViiqpTfQjqqU1KxI5vz98c/96SxBEbnFez8fjfrT3da5zrusc93WPd65zjsUwDEMAAAAAAACPOQd7dwAAAAAAACArEIIAAAAAAABTIAQBAAAAAACmQAgCAAAAAABMgRAEAAAAAACYAiEIAAAAAAAwBUIQAAAAAABgCoQgAAAAAADAFAhBAAAAAACAKRCCAAAeO1FRUbJYLLJYLNqwYUOa5YZhKCgoSBaLRfXq1cvUti0Wi4YPH37P6504cUIWi0VRUVEZqpf6cHBwkI+Pj5o3b65t27bdX6fvYMqUKQoKCpKLi4ssFov++eefTG/DbI4dO6ZXXnlFJUuWlLu7uzw8PFS2bFm98847+t///mfv7j10w4cPl8VisXc3AAAmRQgCAHhs5ciRQ7Nnz05TvnHjRh09elQ5cuSwQ68yR//+/bVt2zZt3rxZY8aM0d69e1W/fn3t2bMn09qIjY3VgAEDVL9+fa1fv17btm3L1sfsUbBixQpVqFBBK1asUN++fbVixQrr/y9fvlzPPPOMvbv40PXu3fuhBHYAAGSEk707AADAw9KhQwd9+eWXmjp1qry9va3ls2fPVo0aNXTx4kU79u7BBAQE6Mknn5Qk1apVS0FBQWrYsKGmTZummTNnPtC2r169Kg8PD+3fv1+S1KdPH1WvXv2B+/zfbZvR8ePH1bFjR5UsWVI//PCDcubMaV3WoEEDDRgwQN98840de/hwpf7bFy5cWIULF7Z3dwAAJsVMEADAY6tTp06SpAULFljLLly4oMWLF6tnz57prnP+/HmFhYWpUKFCcnFxUbFixTR06FAlJiba1Lt48aL69OkjHx8feXl5qWnTpjp06FC62zx8+LA6d+6s/Pnzy9XVVcHBwZo6dWom7eVNqYHIyZMnrWXff/+9GjZsKG9vb3l4eKhWrVpat26dzXqppybs3r1bzz77rHLnzq3ixYurXr16euGFFyRJTzzxhCwWi0JDQ63rRUREqGLFinJzc1OePHnUtm1bxcXF2Ww7NDRUXl5e2rdvnxo3bqwcOXKoYcOGkm6eNvTKK68oMjJSpUqVkru7u0JCQvTTTz/JMAx99NFHCgwMlJeXlxo0aKAjR47YbDsmJkatW7dW4cKF5ebmpqCgIL344ov666+/0t2//fv3q1OnTsqZM6d8fX3Vs2dPXbhwwaZuSkqKpkyZokqVKsnd3V25cuXSk08+qWXLltnUi46OVo0aNeTp6SkvLy81adIkQzNwJkyYoCtXrmjatGk2AUgqi8Widu3a2ZTdy3H+7bff1KRJE3l6eqpAgQIaO3asJOmnn37SU089JU9PT5UsWVJz5syxWT/19LGYmBj16NFDefLkkaenp1q2bKljx4490HG/9XX132X/tX79etWrV08+Pj5yd3dXQECA2rdvr6tXr1rrZHRspr625s2bp+DgYHl4eKhixYpasWLFbf9tAADmQQgCAHhseXt769lnn1VERIS1bMGCBXJwcFCHDh3S1L927Zrq16+vuXPnKjw8XCtXrtQLL7ygcePG2fw4NQxDbdq00bx58/Taa6/pm2++0ZNPPqlmzZql2eaBAwdUrVo1/frrr/r444+1YsUKtWjRQgMGDNCIESMybV9TQ4J8+fJJkr744gs1btxY3t7emjNnjhYuXKg8efKoSZMmaYIQSWrXrp2CgoL09ddfa8aMGZo2bZreeecdSVJkZKS2bdumd999V5I0ZswY9erVS2XLltWSJUs0adIk/fLLL6pRo4YOHz5ss93r16+rVatWatCggb799lubfV6xYoVmzZqlsWPHasGCBbp06ZJatGih1157TVu2bNGnn36qzz//XAcOHFD79u1lGIZ13aNHj6pGjRqaPn261q5dq/fee0/bt2/XU089paSkpDT71759e5UsWVKLFy/W4MGDNX/+fA0aNMimTmhoqF599VVVq1ZN0dHR+uqrr9SqVSudOHHCWmf06NHq1KmTypQpo4ULF2revHm6dOmSateurQMHDtzx32jt2rXy9fW1BlZ3cy/HOSkpSe3atVOLFi307bffqlmzZhoyZIjefvttde/eXT179tQ333yjUqVKKTQ0VLt27UrTXq9eveTg4KD58+dr4sSJ+vnnn1WvXj2b68Dc63G/9XWVnhMnTqhFixZycXFRRESEVq9erbFjx8rT01PXr1+XlPGxmWrlypX69NNPNXLkSC1evNgaIN0a6gAATMgAAOAxExkZaUgyduzYYfzwww+GJOPXX381DMMwqlWrZoSGhhqGYRhly5Y16tata11vxowZhiRj4cKFNtv78MMPDUnG2rVrDcMwjO+++86QZEyaNMmm3qhRowxJxrBhw6xlTZo0MQoXLmxcuHDBpu4rr7xiuLm5GefPnzcMwzCOHz9uSDIiIyPvuG+p9T788EMjKSnJuHbtmrFr1y6jWrVqhiRj5cqVxpUrV4w8efIYLVu2tFn3xo0bRsWKFY3q1atby4YNG2ZIMt577707HsdUf//9t+Hu7m40b97cpm58fLzh6upqdO7c2VrWvXt3Q5IRERGRZtuSDD8/P+Py5cvWsqVLlxqSjEqVKhkpKSnW8okTJxqSjF9++SXdY5KSkmIkJSUZJ0+eNCQZ3377bZr9GzdunM06YWFhhpubm7WdTZs2GZKMoUOHpttG6j46OTkZ/fv3tym/dOmS4efnZzz//PO3XdcwDMPNzc148skn71gn1f0c58WLF1vLkpKSjHz58hmSjN27d1vLz507Zzg6Ohrh4eHWstR/57Zt29q0tWXLFkOS8cEHH6Tbx4wc9/ReV6nLUi1atMiQZMTGxt72eGR0bBrGzdeWr6+vcfHiRWvZmTNnDAcHB2PMmDG3bQMAYA7MBAEAPNbq1q2r4sWLKyIiQvv27dOOHTtueyrM+vXr5enpqWeffdamPPU0kNQZFD/88IMkqUuXLjb1OnfubPP82rVrWrdundq2bSsPDw8lJydbH82bN9e1a9f0008/3dd+vfXWW3J2dpabm5uqVq2q+Ph4ffbZZ2revLm2bt2q8+fPq3v37jZtpqSkqGnTptqxY4euXLlis7327dtnqN1t27bp33//tTk1RpL8/f3VoEGDdGeZ3G7b9evXl6enp/V5cHCwJKlZs2Y2p0uklv/3VJ+zZ8+qX79+8vf3l5OTk5ydnVWkSBFJSnO6iCS1atXK5nmFChV07do1nT17VpL03XffSZJefvnl9Hdc0po1a5ScnKxu3brZHFc3NzfVrVs33TsR3a97Pc4Wi0XNmze3PndyclJQUJAKFCigypUrW8vz5Mmj/Pnz2xzLVLe+nmvWrKkiRYpYX+/SvR/3jLyuKlWqJBcXF/Xt21dz5sxJd7ZGRsdmqvr169tcxNfX1/e2+w0AMBcujAoAeKxZLBb16NFDkydP1rVr11SyZEnVrl073brnzp2Tn59fmusV5M+fX05OTjp37py1npOTk3x8fGzq+fn5pdlecnKypkyZoilTpqTb5q3XUsioV199VS+88IIcHByUK1cuBQYGWvv9xx9/SFKaH4z/df78eZsAokCBAhlqN/UYpFe/YMGCiomJsSnz8PCwuSjtf+XJk8fmuYuLyx3Lr127JunmtTsaN26s06dP691331X58uXl6emplJQUPfnkk/r333/TtHXrv5Wrq6skWev++eefcnR0TPNv+F+px7VatWrpLndwuPPflgICAnT8+PE71kl1P8fZzc3NpszFxSXNsUwtTz2W/5Xevvv5+Vn7cj/HPSOvq+LFi+v777/XuHHj9PLLL+vKlSsqVqyYBgwYoFdffVVSxsdmqlv/vaWb/+bp9REAYC6EIACAx15oaKjee+89zZgxQ6NGjbptPR8fH23fvl2GYdj82Dp79qySk5OVN29ea73k5GSdO3fO5sfWmTNnbLaXO3duOTo6qmvXrredYRAYGHhf+1S4cGGFhISkuyy1n1OmTLnt9Sd8fX1tnt/64/J2Uvc3ISEhzbLTp09b277X7d6LX3/9VXv37lVUVJS6d+9uLb/14qn3Il++fLpx44bOnDlz2x/uqfu2aNEi6+yHe9GkSRNNmTJFP/30012vC3Kvxzkz3Pr6TS0LCgqSdH/HPaP//rVr11bt2rV148YN7dy5U1OmTNHAgQPl6+urjh07ZnhsAgBwN5wOAwB47BUqVEhvvPGGWrZsafPj7VYNGzbU5cuXtXTpUpvyuXPnWpdLN6faS9KXX35pU2/+/Pk2zz08PFS/fn3t2bNHFSpUUEhISJpHen+xflC1atVSrly5dODAgXTbDAkJsc6uuFc1atSQu7u7vvjiC5vy33//XevXr7ceo4cp9Udw6myOVJ999tl9bzP1orbTp0+/bZ0mTZrIyclJR48eve1xvZNBgwbJ09NTYWFhae5MI9284G7qLXLtcZxvfT1v3bpVJ0+eVL169SQ9nON+K0dHRz3xxBPWuyft3r1bUsbHJgAAd8NMEACAKaTeLvROunXrpqlTp6p79+46ceKEypcvrx9//FGjR49W8+bN1ahRI0lS48aNVadOHb355pu6cuWKQkJCtGXL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yZo7d64+/vhjxcbGWh979+5VkSJF9OWXX6pChQpat25duuuXL19eKSkp2rhxY7rL8+XLp0uXLunKlSvWstRrftzJuXPnFBcXp3feeUcNGzZUcHCw/v77b5s6FSpUUGxsrM6fP3/b7fTu3Vvff/+9pk2bpqSkJJsLugIAgAdjtxDk+vXr2rVrlxo3bmxT3rhxY23dujVD20hJSdGlS5duO6UUAAA8flasWKG///5bvXr1Urly5Wwezz77rGbPnq1hw4ZpwYIFGjZsmOLi4rRv3z6NGzdOklS0aFF1795dPXv21NKlS3X8+HFt2LBBCxculCQ98cQT8vDw0Ntvv60jR45o/vz5ae48k57cuXPLx8dHn3/+uY4cOaL169crPDzcpk6nTp3k5+enNm3aaMuWLTp27JgWL16sbdu2WesEBwfrySef1FtvvaVOnTrddfYIAADIOLtdGPWvv/7SjRs35Ovra1Pu6+urM2fOZGgbH3/8sa5cuaLnn3/+tnUSExOVmJhofX7x4kVJN6e1pje11QxcHe17i70kBze7tu8qV7u2f8PV0W5tm/U1j5vMPPbNPO6l24/9pKQkGYahlJQU691L7OFe2541a5YaNmyoHDlypFm3bdu2Gj16tLy8vBQdHa1Ro0Zp7Nix8vb2Vu3ata31p06dqqFDhyosLEznzp1TQECABg8erJSUFOXKlUtz587VW2+9pc8//1wNGzbUe++9p379+lnXTz1d5tb258+fr4EDB6pcuXIqVaqUJk6cqAYNGliPsZOTk1avXq3XX39dzZs3V3JyssqUKaMpU6bYbKtHjx7aunWrQkND73h8UlJSZBiGkpKS5OiY9nVm5nEvMfb53Dcvxr55x76Zx31G991i2Omm86dPn1ahQoW0detW1ahRw1o+atQozZs3T7/99tsd11+wYIF69+6tb7/91npl9/QMHz7c5srwqebPny8PD4/73wEAALI5Jycn+fn5yd/fXy4uLvbuDv5j/PjxWrJkyV1nx16/fl2nTp3SmTNnlJycnEW9AwDg0XP16lV17txZFy5ckLe3923r2W0mSN68eeXo6Jhm1sfZs2fTzA65VXR0tHr16qWvv/76jgGIJA0ZMsRmKurFixfl7++vxo0b3/HAPM7KDbfvHXV+de1l1/ZrFPG3a/tRE+z3JbXUzh12axv2Z+axb+ZxL91+7F+7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TvLz87N5uLi4SJL27dunBg0ayN3dXT4+Purbt68uX76cZn/HjBmjggULqmTJkpKk//3vf+rQoYNy584tHx8ftW7dWidOnLCut2HDBlWvXl2enp7KlSuXatWqpZMnTyoqKkojRozQ3r17rX8helT+cofsa+PGjapevbpcXV1VoEABDR482OYPApcuXVKXLl3k6empAgUK6JNPPklzisatszuGDx+ugIAAubq6qmDBgtbZkPXq1dPJkyc1aNAg62tYSv90mGXLlikkJERubm7Kmzev2rVrd8f9sFgs8vPzU4ECBRQSEqJBgwbp5MmTOnjwoLXO3b43JCQkqEWLFtb3n/nz56fZN4vFohkzZqh169by9PTUBx98IElavny5qlatKjc3NxUrVkwjRoywOY63OyaSNG3aNJUoUUJubm7y9fXVs88+a11267H++++/1a1bN+XOnVseHh5q1qyZDh8+bF2eeizXrFmj4OBgeXl5WUNsZA9VqlRRQECAlixZYi1bsmSJ/P39VblyZZu66c2sutPshsDAQElS5cqVZbFYVK9ePUlpZ4zVq1dPAwYM0Jtvvqk8efLIz88vzTYf1mfxrafDvPXWWypZsqQ8PDxUrFgxvfvuu/cVPvbv318TJkyw+S1wq4z+dvjnn3904cIFubu7a/Xq1TbbWLJkiTw9Pa3fB+72mX87Pj4+8vPzU5EiRdSlSxfVrFlTu3fvti7fsWOHnn76aeXNm1c5c+ZU3bp1bZb37NlTzzzzjM02k5OT5efnZw1TDMPQuHHjVKxYMbm7u6tixYpatGiRtf7ff/+tLl26KF++fHJ3d1eJEiUUGRl5175nJ4QgeOQMHTpUr7/+umJjY1WyZEl16tTJ+oVi3759atKkidq1a6dffvlF0dHR+vHHH/XKK69Y179+/bref/997d27V0uXLtXx48fTnUL45ptvasyYMYqLi1OFChXSLPfz81NCQoI2bdp027726tVLx44d08aNG61lV65c0cKFC62zQGJjY7V//3699tprcnBIO+QelQQeuJtjx45p9erVcnZ2tpalpKSocOHCWrhwoQ4cOKD33ntPb7/9thYuXGiz7g8//KCjR4/qhx9+0Jw5cxQVFWXzQz40NFQnTpzQ+vXrtWjRIk2bNs3mC4hhGGrTpo3Onz+vjRs3KiYmRkePHlWHDh1s2jl69Ki+++47rV69WgsWLFBERIRatGih33//XRs3btSHH36od955Rz/99NN9HYOrV6+qadOmyp07t3bs2KGvv/5a33//vc17kCStW7dOcXFxiomJ0YoVK3T16lXVr19fXl5e2rRpk3788Ufrj5Tr168rOTlZbdq0Ud26dfXLL79o27Zt6tu3rywWizp06KDXXnvNZnbKrfsN3Iv//e9/at68uapVq6a9e/dq+vTpmj17tvWHvSSFh4dry5YtWrZsmWJiYrR582abL9q3WrRokT755BN99tlnOnz4sJYuXary5ctLuvnjoHDhwho5cqT1NZyelStXql27dmrRooX27NmjdevWKSQkJMP79c8//2j+/PmSZH2fysj3hm7duun06dPasGGDFi9erM8//zzdH0zDhg1T69attW/fPvXs2VNr1qzRCy+8oAEDBujAgQP67LPPFBUVZf1xd6djsnPnTg0YMEAjR47UwYMHtXr16jvONgsNDdXOnTu1bNkybdu2TYZhqHnz5jY/Cq9evarx48dr3rx52rRpk+Lj4/X6669n+PjB/nr06GHzYzMiIkI9e/Z84O3+/PPPkv7/LIP/Bi23mjNnjjw9PbV9+3aNGzdOI0eOVExMjKSs/SzOkSOHoqKidODAAU2aNEkzZ87UJ598cs/73qlTJwUFBWnkyJG3rZPR3w7SzdkzLVq0SPPHmvnz51vDobt95mfUzp07tXv3bj3xxBPWskuXLql79+7avHmzfvrpJ5UoUULNmze3nvLTu3dvrV692uZ9dtWqVbp8+bKef/55SdI777yjyMhITZ8+Xfv379egQYP0wgsvWH/PvPvuuzpw4IC+++47xcXFafr06cqbN2+G+50tGMBD1L17d6N169a3XS7J+OabbwzDMIzjx48bkoxZs2ZZl+/fv9+QZMTFxRmGYRhdu3Y1+vbta7ONzZs3Gw4ODsa///6bbhs///yzIcm4dOmSYRiG8cMPPxiSjKVLl96x78nJyUZoaKghyfDz8zPatGljTJkyxbhw4YJNvSeeeMLo1q2b9XlERITh7u5u/P3334ZhGEZ0dLQhydi9e/cd2wMeNd27dzccHR0NT09Pw83NzZBkSDImTJhwx/XCwsKM9u3b22ynSJEiRnJysrXsueeeMzp06GAYhmEcPHjQkGT89NNP1uVxcXGGJOOTTz4xDMMw1q5dazg6Ohrx8fHW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1kwrVqzQnj17NHTo0Ae64PHYsWMVHR2tPXv22JTfy2+HVC4uLnr22Wetp9/Nnz9fHTp0kJOTk6SMfebfjr+/v4KCghQcHKznn39eAwcO1Mcff6xr165Junlq3K5duzRx4kRt3bpVsbGx8vHxselrt27ddOzYMW3btk1ffPGFihYtqtq1a1v7Jt08/fC/fTtw4ID1uiDNmjXTyZMnNXDgQJ0+fVoNGzZ87E6tIwRBtlKlShXt37/f5sdJ6sPFxUW//fab/vrrL40dO1a1a9dW6dKlM/WvILlz51aBAgVsLqiWI0cOPffcc4qMjFRERISKFStmTZClmxeqKlOmjD7++ON03+y55ziyk2HDhmn8+PE6ffq0JGnz5s2qWbOmwsLCVLlyZQUFBd31rxy3Cg4OVnJyss3tog8ePGgzNsqUKaP4+HidOnXKWnbgwAFduHBBwcHBD7ZT96BMmTKKjY21eQ/YsmWLHBwcrIFneqpUqaLDhw8rf/78ad67/nvLvcqVK2vIkCHaunWrypUrZ/2C5eLiohs3bjy8HYOplClTRlu3brX5EbV161blyJFDhQoVUvHixeXs7Gy9joAkXbx40eZCnOlxd3dXq1atNHnyZG3YsEHbtm3Tvn37JGXsNVyhQgWtW7fuAfZMGjRokPbu3Wv9EXO37w2lS5dWcnKyzQ+jI0eOZOizuUqVKjp48GC62079i/edjomTk5MaNWqkcePG6ZdffrFeF+lWZcqUUXJysrZv324tO3funA4dOpSl73/IGqnXjbh+/bqaNGmSbp18+fLZzBa8ePGidUZ0elJnJj7o50hWfRZv2bJFRYoU0dChQxUSEqISJUro5MmTD7TN6tWrq127djazKiTd92+HLl26aPXq1dq/f79++OEHdenSxboso5/5GeHo6Kjk5GRryLF582YNGDBAzZs3V9myZeXq6qq//vrLZh0fHx+1adNGkZGRioyMVI8ePazLypQpI1dXV8XHx6fp239n+OTLl0+hoaH64osvNHHiRH3++ef31O9HHSEIHroLFy6kSULvdzrbW2+9pW3btunll19WbGysDh8+rGXLllmn5wcEBMjFxUVTpkzRsWPHtGzZMr3//vv31dZnn32ml156SWvXrtXRo0e1f/9+vfXWW9q/f79atmxpU7dXr17aunWrpk+frp49e9qk4RaLRZGRkTp06JDq1KmjVatW6dixY/rll180atQotW7d+r76B9hDvXr1VLZsWY0ePVrSzWnjO3fu1Jo1a3To0CG9++672rFjxz1ts1SpUmratKn69Omj7du3a9euXerdu7fNX4UbNWqkChUqqEuXLtq9e7d+/vlndevWTXXr1r2nCyc+qC5dusjNzU3du3fXr7/+qh9++EH9+/dX165d5evre8f18ubNq9atW2vz5s06fvy4Nm7cqFdffVW///67jh8/riFDhmjbtm06efKk1q5da/MDp2jRojp+/LhiY2P1119/KTExMat2GdnY7T5/w8LCdOrUKfXv31+//fabvv32Ww0bNkzh4eFycHBQjhw51L17d73xxhv64YcftH//fvXs2VMODg63nQkVFRWl2bNn69dff9WxY8c0b948ubu7q0iRIpJuvoY3bdqk//3vf2m+sKcaNmyYFixYoGHDhikuLk779u3TuHHj7mmfvb291bt3bw0bNkyGYdz1e0Pp0qXVqFEj9e3bVz///LP27Nmjvn37yt3d/a6nsb733nuaO3euhg8frv379ysuLk7R0dF655137npMVqxYocmTJys2NlYnT57U3LlzlZKSku4pRyVKlFDr1q3Vp08f/fjjj9q7d69eeOEFFSpUiO8QjyFHR0fFxcUpLi7O5jTS/2rQoIHmzZunzZs369dff1X37t1vW1eS8ufPb72jyR9//KELFy7cV9+y6rM4KChI8fHx+uqrr3T06FFNnjzZGmw+iFGjRmn9+vU2p6/e72+HunXrytfXV126dFHRokX15JNPWpfd7TP/Ts6dO6czZ87o999/13fffadJkyapfv368vb2lnTz2MybN09xcXHavn27unTpku4sut69e2vOnDmKi4tT9+7dreU5cuTQ66+/rkGDBmnOnDk6evSo9uzZo6lTp2rOnDmSbr63ffvttzpy5Ij279+vFStWPHaBKyEIHroNGzaocuXKNo/33nvvvrZVoUIFbdy4UYcPH1bt2rVVuXJlvfvuu9Zrh+TLl09RUVH6+uuvVaZMGY0dO/a+7w1evXp1Xb58Wf369VPZsmVVt25d/fTTT1q6dKnq1q1rU/epp55SqVKldPHiRZs3mv9ua+fOnSpevLj69Omj4OBgtWrVSvv3709zizPgURceHq6ZM2fq1KlT6tevn9q1a6cOHTroiSee0Llz5xQWFnbP24yMjJS/v7/q1q2rdu3aqW/fvsqfP791eeqt83Lnzq06deqoUaNGKlasmKKjozNz1+7Kw8NDa9as0fnz51WtWjU9++yzatiwoT799NO7rrdp0yYFBASoXbt2Cg4OVs+ePfXvv//K29tbHh4e+u2339S+fXuVLFlSffv21SuvvKIXX3xRktS+fXs1bdpU9evXV758+bRgwYKs2F1kc7f7/C1UqJBWrVqln3/+WRUrVlS/fv3Uq1cv6493SZowYYJq1KihZ555Ro0aNVKtWrUUHBwsNze3dNvKlSuXZs6cqVq1allndCxfvlw+Pj6SpJEjR+rEiRMqXry48uXLl+426tWrp6+//lrLli1TpUqV1KBBA5vZDxn16quvKi4uTl9//fVdvzdI0ty5c+Xr66s6deqobdu26tOnj3LkyHHbfU3VpEkTrVixQjExMapWrZqefPJJTZgwwRr83OmY5MqVS0uWLFGDBg0UHBysGTNmaMGCBSpbtmy6bUVGRqpq1ap65plnVKNGDRmGoVWrVqU5xQCPB29vb+uP3vQMGTJEderU0TPPPKPmzZurTZs2NteDuZWTk5MmT56szz77TAULFrzv8CyrPotbt26tQYMG6ZVXXlGlSpW0devW217P416ULFlSPXv2tJ5aIt3/bweLxaJOnTpp7969NrNApLt/5t9Jo0aNVKBAARUtWlR9+/ZV8+bNbY5vRESE/v77b1WuXFldu3bVgAEDbL4v3bqdJk2aqGDBgjbL3n//fb333nsaM2aMgoOD1aRJEy1fvtx6K2UXFxcNGTJEFSpUUJ06deTo6KivvvrqrsckO7EYnCwIAACAO7hy5YoKFSqkjz/+2Oa6V4+j33//Xf7+/vr+++/v+UKtAPAouHr1qgoWLGi9YQNsOdm7AwAAAHi07NmzR7/99puqV6+uCxcuaOTIkZL0WJ5+sX79el2+fFnly5dXQkKC3nzzTRUtWlR16tSxd9cA4J6kpKTozJkz+vjjj5UzZ061atXK3l16JBGCAAAAII3x48fr4MGDcnFxUdWqVbV58+Ysv11nVkhKStLbb7+tY8eOKUeOHKpZs6a+/PJLTjUBkO3Ex8crMDBQhQsXVlRUlPWONbDF6TAAAAAAAMAUuDAqAAAAAAAwBUIQAAAAAABgCoQgAAAAAADAFAhBAAAAAACAKRCCAAAAAAAAUyAEAQAAprJhwwZZLBb9888/GV6naNGimjhx4kPrEwAAyBqEIAAA4JESGhoqi8Wifv36pVkWFhYmi8Wi0NDQrO8YAADI9ghBAADAI8ff319fffWV/v33X2vZtWvXtGDBAgUEBNixZwAAIDsjBAEAAI+cKlWqKCAgQEuWLLGWLVmyRP7+/qpcubK1LDExUQMGDFD+/Pnl5uamp556Sjt27LDZ1qpVq1SyZEm5u7urfv36OnHiRJr2tm7dqjp16sjd3V3+/v4aMGCArly58tD2DwAA2AchCAAAeCT16NFDkZGR1ucRERHq2bOnTZ0333xTixcv1pw5c7R7924FBQWpSZMmOn/+vCTp1KlTateunZo3b67Y2Fj17t1bgwcPttnGvn371KRJE7Vr106//PKLoqOj9eOPP+qVV155+DsJAACyFCEIAAB4JHXt2lU//vijTpw4oZMnT2rLli164YUXrMuvXLmi6dOn66OPPlKzZs1UpkwZzZw5U+7u7po9e7Ykafr06SpWrJg++eQTlSpVSl26dElzPZGPPvpInTt31sCBA1WiRAnVrFlTkydP1ty5c3Xt2rWs3GUAAPCQOdm7AwAAAOnJmzevWrRooTlz5sgwDLVo0UJ58+a1Lj969KiSkpJUq1Yta5mzs7OqV6+uuLg4SVJcXJyefPJJWSwWa50aNWrYtLNr1y4dOXJEX375pbXMMAylpKTo+PHjCg4Ofli7CAAAshghCAAAeGT17NnTelrK1KlTbZYZhiFJNgFHanlqWWqdO0lJSdGLL76oAQMGpFnGRVgBAHi8cDoMAAB4ZDVt2lTXr1/X9evX1aRJE5tlQUFBcnFx0Y8//mgtS0pK0s6dO62zN8qUKaOffvrJZr1bn1epUkX79+9XUFBQmoeLi8tD2jMAAGAPhCAAAOCR5ejoqLi4OMXFxcnR0dFmmaenp1566SW98cYbWr16tQ4cOKA+ffro6tWr6tWrlySpX79+Onr0qMLDw3Xw4EHNnz9fUVFRNtt56623tG3bNr388suKjY3V4cOHtWzZMvXv3z+rdhMAAGQRQhAAAPBI8/b2lre3d7rLxo4dq/bt26tr166qUqWKjhw5ojVr1ih37tySbp7OsnjxYi1fvlwVK1bUjBkzNHr0aJttVKhQQRs3btThw4dVu3ZtVa5cWe+++64KFCjw0PcNAABkLYuRkZNlAQAAAAAAsjlmggAAAAAAAFMgBAEAAAAAAKZACAIAAAAAAEyBEAQAAAAAAJgCIQgAAAAAADAFQhAAAAAAAGAKhCAAAAAAAMAUCEEAAAAAAIApEIIAAAAAAABTIAQBAAAAAACmQAgCAAAAAABMgRAEAAAAAACYwv8DkQ2qa2OzQs8AAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 1100x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "ax = results_df[[\"Accuracy\", \"Precision\", \"Recall\", \"F1\"]].plot(kind=\"bar\", figsize=(11,5))\n",
    "ax.set_title(\"Model Performance Comparison\")\n",
    "ax.set_ylabel(\"Score\")\n",
    "ax.set_xlabel(\"Model\")\n",
    "ax.grid(axis=\"y\")\n",
    "plt.xticks(rotation=0)\n",
    "plt.tight_layout()\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "e5bd08e9-50a0-4dac-ba30-a6ba876caabd",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
