{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "provenance": []
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    },
    "language_info": {
      "name": "python"
    }
  },
  "cells": [
    {
      "cell_type": "code",
      "execution_count": 1,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "ZGvnN_5dkN2O",
        "outputId": "3a98434d-2fca-440c-ccce-63739163d24a"
      },
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "✅ Libraries imported successfully\n"
          ]
        }
      ],
      "source": [
        "# تثبيت المكتبات المطلوبة\n",
        "!pip install imbalanced-learn -q\n",
        "\n",
        "# استيراد المكتبات\n",
        "import pandas as pd\n",
        "import numpy as np\n",
        "import matplotlib.pyplot as plt\n",
        "import seaborn as sns\n",
        "\n",
        "print(\"✅ Libraries imported successfully\")"
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# تحميل SMS Spam Dataset من الانترنت مباشرة\n",
        "url = \"https://raw.githubusercontent.com/justmarkham/pycon-2016-tutorial/master/data/sms.tsv\"\n",
        "df = pd.read_csv(url, sep='\\t', header=None, names=['label', 'text'])\n",
        "\n",
        "print(df.head(10))\n",
        "print(f\"\\nShape: {df.shape}\")\n",
        "print(f\"\\nClass Distribution:\\n{df['label'].value_counts()}\")"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "DJs_AoJikacr",
        "outputId": "7989fe6d-8170-40b3-f673-66ca2bf2f6d1"
      },
      "execution_count": 2,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "  label                                               text\n",
            "0   ham  Go until jurong point, crazy.. Available only ...\n",
            "1   ham                      Ok lar... Joking wif u oni...\n",
            "2  spam  Free entry in 2 a wkly comp to win FA Cup fina...\n",
            "3   ham  U dun say so early hor... U c already then say...\n",
            "4   ham  Nah I don't think he goes to usf, he lives aro...\n",
            "5  spam  FreeMsg Hey there darling it's been 3 week's n...\n",
            "6   ham  Even my brother is not like to speak with me. ...\n",
            "7   ham  As per your request 'Melle Melle (Oru Minnamin...\n",
            "8  spam  WINNER!! As a valued network customer you have...\n",
            "9  spam  Had your mobile 11 months or more? U R entitle...\n",
            "\n",
            "Shape: (5572, 2)\n",
            "\n",
            "Class Distribution:\n",
            "label\n",
            "ham     4825\n",
            "spam     747\n",
            "Name: count, dtype: int64\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# رسم توزيع الكلاسات\n",
        "plt.figure(figsize=(6, 4))\n",
        "colors = ['#2196F3', '#FF5722']\n",
        "df['label'].value_counts().plot(kind='bar', color=colors, edgecolor='white')\n",
        "plt.title('Class Distribution - SMS Spam Dataset', fontweight='bold')\n",
        "plt.xlabel('Label')\n",
        "plt.ylabel('Count')\n",
        "plt.xticks(rotation=0)\n",
        "\n",
        "for i, v in enumerate(df['label'].value_counts()):\n",
        "    plt.text(i, v + 30, str(v), ha='center', fontweight='bold')\n",
        "\n",
        "plt.tight_layout()\n",
        "plt.show()\n",
        "\n",
        "print(f\"\\nspam  percentage: {747/5572*100:.1f}%\")\n",
        "print(f\"ham percentage: {4825/5572*100:.1f}%\")"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 459
        },
        "id": "h9YBBuEfkirT",
        "outputId": "3de1c9a9-b3ce-4675-a51f-83c62ce4693e"
      },
      "execution_count": 3,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 600x400 with 1 Axes>"
            ],
            "image/png": "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L/Y2LakdO3ZY4/v7+5tp06Y5vGgVJn9N/fr1M5JMkyZNjDHGLFmyxEgXPm7r27dvocGpc+fO1vrHHnvMxMfHm8zMzBLXXrlyZWucV1991Wzbts3k5uYW2T//fatevXoF/r8NGjQw586ds/oX1idveeihh4ocu3bt2gX6v/rqq8bT09Nhnaurq9m1a1ex87xUcMrJyXGoM//Hqnbrt/O4jImJKbJPRESEOXv2rDGmZM9LixcvNl5eXoX2CwkJMb/99luB+V+8EJxKDweHo1ScOnVKv/32m3X5vvvuu+yxWrVqpQ8//FCLFi1SXFycli5dqpdfflmSlJKSounTp0uSTp48qdWrV0uS7rrrLn377bdasmSJpk2bpo4dO8rX11eStGvXLu3Zs0eSFB0draVLl+q7777TlClT1KZNG3l5eV12rZLUtGlTubm5WZcvdcCo3Vri4+PVp08fa7u//e1vio+PV3x8vB599NEC46akpGjSpElatmyZ/va3v9mq+/jx4woODtbChQs1ZcoU+fj4SJKWLl2qRYsW2Rojv2effVbx8fHW5ZCQEKvmr7/+usjtjDHq06ePTp48KUnq1KmTYmNj9frrr8vV1VXGGA0ZMkSHDh0qsO2BAwfUvn17LVq0SF27drXWf/jhhyWuvzh169ZVeHi4JCkjI0P9+/dXWFiYwsLC1KdPHyUkJFxy++eee06StHHjRm3btk0ff/yxJCkmJkbVqlUrdJvo6Gjr72+//Vb33XefypcvrxYtWmjixIk6ffq0rdrzj/PPf/5T9evXV4UKFfTYY4/pq6++kjGmyG2zs7P11VdfaebMmapUqZIkaevWrfroo4+sPv3799dnn32mxYsXKy4uTt9++611P129enWRB2W7ublpwYIFeumllxzqa9KkiRYtWqQOHTpIknJzc63H/eVydXW1PkaXHB+nduu387js0qWLPvnkE8XGxiouLk6xsbHq2bOnJGnnzp2aP3++JPvPBWfOnFGvXr2UmZkpd3d3vfnmm1q2bJmGDx8uSUpOTtYLL7wgSXrttdc0b948q76GDRta9U2ZMuWK/n/Ix8nBDTeIw4cPO7y72blzZ7HbFLX34c8//zTDhg0z9erVM97e3gXeOT355JPGGGPOnDlj7W145JFHzC+//GKys7MLXM+uXbusbXv06GF+/fVXk5OTU6L55b/+i/c4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5El98cUXiouL0/fff6+AgAD17dtXw4YNU1BQkPz9/TV48GBFRUWpefPmkqRWrVopMjJSPXr00FtvvaXk5GSNGjVKAwcOtPYY9e/fX++9956GDx+uZ599VqtWrdLcuXMVGxvrzKkDAIDrkFODU2pqqnr27KmjR48qICBADRo00Pfff69HHnlEkjR58mS5urqqY8eOyszMVExMjN5//31rezc3N3333XcaMGCAoqKi5Ovrq169emn8+PFWn5o1ayo2NlZDhw7VO++8o2rVqmn69OmKiYm55vMFAADXtzJ3HqeyiPM4XcB5nG4unMcJwM3iujyPEwAAQFlHcAIAALCJ4AQAAGDTZQWnWrVq6c8//yywPi0tTbVq1briogAAAMqiywpO+/fvV05OToH1mZmZ+v3336+4KAAAgLKoRKcj+Pbbb62/8861lCcnJ0crV65UjRo1Sq04AACAsqREwemJJ56QJLm4uKhXr14ObR4eHqpRo4YmTpxYasUBAACUJSUKTrm5F87hU7NmTW3cuFGVKlW6KkUBAACURZd15vCkpKTSrgMAAKDMu+yfXFm5cqVWrlyp1NRUa09Unk8++eSKCwMAAChrLis4jRs3TuPHj9fdd9+t0NBQubi4lHZdAAAAZc5lBadp06Zp5syZ6tGjR2nXAwAAUGZd1nmcsrKydM8995R2LQAAAGXaZQWn5557Tl988UVp1wIAAFCmXdZHdefOndNHH32kFStWqEGDBvLw8HBonzRpUqkUBwAAUJZcVnDaunWrGjZsKEnavn27QxsHigMAgBvVZQWn1atXl3YdAAAAZd5lHeMEAABwM7qsPU4PPfTQJT+SW7Vq1WUXBAAAUFZdVnDKO74pT3Z2trZs2aLt27cX+PFfAACAG8VlBafJkycXun7s2LE6derUFRUEAABQVpXqMU7PPPMMv1MHAABuWKUanBISElSuXLnSHBIAAKDMuKyP6jp06OBw2Rijo0ePatOmTXr99ddLpTAAAICy5rKCU0BAgMNlV1dX1atXT+PHj1erVq1KpTAAAICy5rKC04wZM0q7DgAAgDLvsoJTnsTERO3cuVOSdPvtt+uuu+4qlaIAAADKossKTqmpqeratavi4uIUGBgoSUpLS9NDDz2kOXPmqHLlyqVZIwAAQJlwWd+qGzx4sE6ePKkdO3bo+PHjOn78uLZv366MjAy9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\n"
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "\n",
            "spam  percentage: 13.4%\n",
            "ham percentage: 86.6%\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "import re\n",
        "import nltk\n",
        "nltk.download('punkt', quiet=True)\n",
        "nltk.download('stopwords', quiet=True)\n",
        "nltk.download('wordnet', quiet=True)\n",
        "nltk.download('punkt_tab', quiet=True)\n",
        "\n",
        "from nltk.corpus import stopwords\n",
        "from nltk.tokenize import word_tokenize\n",
        "from nltk.stem import PorterStemmer\n",
        "\n",
        "stemmer = PorterStemmer()\n",
        "stop_words = set(stopwords.words('english'))\n",
        "\n",
        "def preprocess_text(text):\n",
        "    # 1. Lowercase\n",
        "    text = text.lower()\n",
        "    # 2. Remove URLs\n",
        "    text = re.sub(r'http\\S+|www.\\S+', '', text)\n",
        "    # 3. Remove HTML tags\n",
        "    text = re.sub(r'<.*?>', '', text)\n",
        "    # 4. Remove special characters & numbers\n",
        "    text = re.sub(r'[^a-zA-Z\\s]', '', text)\n",
        "    # 5. Tokenization\n",
        "    tokens = word_tokenize(text)\n",
        "    # 6. Remove stopwords\n",
        "    tokens = [w for w in tokens if w not in stop_words]\n",
        "    # 7. Stemming\n",
        "    tokens = [stemmer.stem(w) for w in tokens]\n",
        "    # 8. Join tokens\n",
        "    return ' '.join(tokens)\n",
        "\n",
        "df['clean_text'] = df['text'].apply(preprocess_text)\n",
        "df = df.dropna(subset=['clean_text'])\n",
        "df = df[df['clean_text'].str.strip() != '']\n",
        "\n",
        "print(\"Sample results:\")\n",
        "print(df[['text', 'clean_text', 'label']].head(5).to_string())"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "F4Bk9YMPknuJ",
        "outputId": "62afa6e6-6249-472d-e2be-f60c88d432eb"
      },
      "execution_count": 5,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Sample results:\n",
            "                                                                                                                                                          text                                                                                               clean_text label\n",
            "0                                              Go until jurong point, crazy.. Available only in bugis n great world la e buffet... Cine there got amore wat...                             go jurong point crazi avail bugi n great world la e buffet cine got amor wat   ham\n",
            "1                                                                                                                                Ok lar... Joking wif u oni...                                                                                    ok lar joke wif u oni   ham\n",
            "2  Free entry in 2 a wkly comp to win FA Cup final tkts 21st May 2005. Text FA to 87121 to receive entry question(std txt rate)T&C's apply 08452810075over18's  free entri wkli comp win fa cup final tkt st may text fa receiv entri questionstd txt ratetc appli over  spam\n",
            "3                                                                                                            U dun say so early hor... U c already then say...                                                                      u dun say earli hor u c alreadi say   ham\n",
            "4                                                                                                Nah I don't think he goes to usf, he lives around here though                                                                nah dont think goe usf live around though   ham\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "from sklearn.model_selection import train_test_split\n",
        "\n",
        "X = df['clean_text']\n",
        "y = df['label']\n",
        "\n",
        "X_train, X_test, y_train, y_test = train_test_split(\n",
        "    X, y,\n",
        "    test_size=0.30,\n",
        "    random_state=42,\n",
        "    stratify=y\n",
        ")\n",
        "\n",
        "print(f\"Training samples : {len(X_train)}\")\n",
        "print(f\"Testing  samples : {len(X_test)}\")\n",
        "print(f\"\\nTrain distribution:\\n{y_train.value_counts()}\")\n",
        "print(f\"\\nTest  distribution:\\n{y_test.value_counts()}\")"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "jdjwncvvkwBl",
        "outputId": "c00f4016-f140-4ce2-f4aa-2c44c7043d8a"
      },
      "execution_count": 6,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Training samples : 3896\n",
            "Testing  samples : 1670\n",
            "\n",
            "Train distribution:\n",
            "label\n",
            "ham     3373\n",
            "spam     523\n",
            "Name: count, dtype: int64\n",
            "\n",
            "Test  distribution:\n",
            "label\n",
            "ham     1446\n",
            "spam     224\n",
            "Name: count, dtype: int64\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer\n",
        "\n",
        "# 1. Bag of Words\n",
        "bow_vec     = CountVectorizer()\n",
        "X_train_bow = bow_vec.fit_transform(X_train)\n",
        "X_test_bow  = bow_vec.transform(X_test)\n",
        "print(f\"BoW shape (train): {X_train_bow.shape}\")\n",
        "\n",
        "# 2. TF-IDF Unigrams\n",
        "tfidf1      = TfidfVectorizer(ngram_range=(1,1))\n",
        "X_train_tf1 = tfidf1.fit_transform(X_train)\n",
        "X_test_tf1  = tfidf1.transform(X_test)\n",
        "print(f\"TF-IDF (1,1) shape (train): {X_train_tf1.shape}\")\n",
        "\n",
        "# 3. TF-IDF Unigrams + Bigrams\n",
        "tfidf2      = TfidfVectorizer(ngram_range=(1,2))\n",
        "X_train_tf2 = tfidf2.fit_transform(X_train)\n",
        "X_test_tf2  = tfidf2.transform(X_test)\n",
        "print(f\"TF-IDF (1,2) shape (train): {X_train_tf2.shape}\")\n",
        "\n",
        "# 4. TF-IDF Unigrams + Bigrams + Trigrams\n",
        "tfidf3      = TfidfVectorizer(ngram_range=(1,3))\n",
        "X_train_tf3 = tfidf3.fit_transform(X_train)\n",
        "X_test_tf3  = tfidf3.transform(X_test)\n",
        "print(f\"TF-IDF (1,3) shape (train): {X_train_tf3.shape}\")"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "SD2sviKlk2nB",
        "outputId": "1ecd79ba-a821-4a89-cf4c-3ca34b99380c"
      },
      "execution_count": 7,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "BoW shape (train): (3896, 5892)\n",
            "TF-IDF (1,1) shape (train): (3896, 5892)\n",
            "TF-IDF (1,2) shape (train): (3896, 28318)\n",
            "TF-IDF (1,3) shape (train): (3896, 50541)\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "from sklearn.metrics import (accuracy_score, precision_score, recall_score,\n",
        "                              f1_score, classification_report, confusion_matrix,\n",
        "                              ConfusionMatrixDisplay)\n",
        "from sklearn.ensemble import RandomForestClassifier\n",
        "from sklearn.linear_model import LogisticRegression\n",
        "from sklearn.svm import SVC\n",
        "from sklearn.tree import DecisionTreeClassifier\n",
        "from sklearn.neighbors import KNeighborsClassifier\n",
        "from sklearn.model_selection import GridSearchCV\n",
        "\n",
        "def evaluate_model(model_name, y_true, y_pred):\n",
        "    acc  = accuracy_score(y_true, y_pred)\n",
        "    prec = precision_score(y_true, y_pred, average='weighted', zero_division=0)\n",
        "    rec  = recall_score(y_true, y_pred,    average='weighted', zero_division=0)\n",
        "    f1   = f1_score(y_true, y_pred,        average='weighted', zero_division=0)\n",
        "\n",
        "    print(f\"\\n{'='*50}\")\n",
        "    print(f\"Model     : {model_name}\")\n",
        "    print(f\"Accuracy  : {acc:.4f}\")\n",
        "    print(f\"Precision : {prec:.4f}\")\n",
        "    print(f\"Recall    : {rec:.4f}\")\n",
        "    print(f\"F1 Score  : {f1:.4f}\")\n",
        "    print(f\"{'='*50}\")\n",
        "    print(classification_report(y_true, y_pred, zero_division=0))\n",
        "\n",
        "    fig, ax = plt.subplots(figsize=(4, 3))\n",
        "    ConfusionMatrixDisplay(confusion_matrix(y_true, y_pred),\n",
        "                           display_labels=np.unique(y_true)).plot(\n",
        "                           cmap='Blues', ax=ax, colorbar=False)\n",
        "    ax.set_title(f'Confusion Matrix - {model_name}', fontsize=9)\n",
        "    plt.tight_layout()\n",
        "    plt.show()\n",
        "\n",
        "    return {\"Model\": model_name, \"Accuracy\": acc,\n",
        "            \"Precision\": prec, \"Recall\": rec, \"F1\": f1}\n",
        "\n",
        "print(\"✅ evaluate_model function ready\")"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "YuyG81Gbk6Hs",
        "outputId": "e89840ba-6d19-47c0-a975-918f3285ee37"
      },
      "execution_count": 8,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "✅ evaluate_model function ready\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "results = []\n",
        "\n",
        "# 1. Random Forest\n",
        "print(\"Training Random Forest...\")\n",
        "gs_rf = GridSearchCV(RandomForestClassifier(random_state=42),\n",
        "                     {'n_estimators': [100, 200], 'max_depth': [None, 10, 20]},\n",
        "                     cv=5, scoring='accuracy', n_jobs=-1)\n",
        "gs_rf.fit(X_train_tf1, y_train)\n",
        "y_pred = gs_rf.best_estimator_.predict(X_test_tf1)\n",
        "results.append(evaluate_model(\"Random Forest\", y_test, y_pred))\n",
        "print(f\"Best params: {gs_rf.best_params_}\")"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 637
        },
        "id": "QFjjD3GflDBr",
        "outputId": "9a2fbe9a-a2fb-4ee6-d447-874df5bb4017"
      },
      "execution_count": 9,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Training Random Forest...\n",
            "\n",
            "==================================================\n",
            "Model     : Random Forest\n",
            "Accuracy  : 0.9737\n",
            "Precision : 0.9744\n",
            "Recall    : 0.9737\n",
            "F1 Score  : 0.9724\n",
            "==================================================\n",
            "              precision    recall  f1-score   support\n",
            "\n",
            "         ham       0.97      1.00      0.99      1446\n",
            "        spam       1.00      0.80      0.89       224\n",
            "\n",
            "    accuracy                           0.97      1670\n",
            "   macro avg       0.99      0.90      0.94      1670\n",
            "weighted avg       0.97      0.97      0.97      1670\n",
            "\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 400x300 with 1 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Best params: {'max_depth': None, 'n_estimators': 100}\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# 2. Logistic Regression\n",
        "print(\"Training Logistic Regression...\")\n",
        "gs_lr = GridSearchCV(LogisticRegression(random_state=42, max_iter=1000),\n",
        "                     {'solver': ['liblinear', 'lbfgs']},\n",
        "                     cv=5, scoring='accuracy', n_jobs=-1)\n",
        "gs_lr.fit(X_train_tf1, y_train)\n",
        "y_pred = gs_lr.best_estimator_.predict(X_test_tf1)\n",
        "results.append(evaluate_model(\"Logistic Regression\", y_test, y_pred))\n",
        "print(f\"Best params: {gs_lr.best_params_}\")"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 637
        },
        "id": "XOxDPD4IlZUc",
        "outputId": "e060c99e-fc8b-4acc-bc26-88329fcd3e93"
      },
      "execution_count": 10,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Training Logistic Regression...\n",
            "\n",
            "==================================================\n",
            "Model     : Logistic Regression\n",
            "Accuracy  : 0.9593\n",
            "Precision : 0.9608\n",
            "Recall    : 0.9593\n",
            "F1 Score  : 0.9562\n",
            "==================================================\n",
            "              precision    recall  f1-score   support\n",
            "\n",
            "         ham       0.96      1.00      0.98      1446\n",
            "        spam       0.99      0.70      0.82       224\n",
            "\n",
            "    accuracy                           0.96      1670\n",
            "   macro avg       0.97      0.85      0.90      1670\n",
            "weighted avg       0.96      0.96      0.96      1670\n",
            "\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 400x300 with 1 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Best params: {'solver': 'liblinear'}\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# 3. Support Vector Machine\n",
        "print(\"Training SVM...\")\n",
        "gs_svm = GridSearchCV(SVC(random_state=42),\n",
        "                      {'kernel': ['linear', 'rbf']},\n",
        "                      cv=5, scoring='accuracy', n_jobs=-1)\n",
        "gs_svm.fit(X_train_tf1, y_train)\n",
        "y_pred = gs_svm.best_estimator_.predict(X_test_tf1)\n",
        "results.append(evaluate_model(\"SVM\", y_test, y_pred))\n",
        "print(f\"Best params: {gs_svm.best_params_}\")"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 637
        },
        "id": "PGco7GktleS0",
        "outputId": "e7fb2247-741e-49e2-f4af-e4998407e110"
      },
      "execution_count": 11,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Training SVM...\n",
            "\n",
            "==================================================\n",
            "Model     : SVM\n",
            "Accuracy  : 0.9826\n",
            "Precision : 0.9825\n",
            "Recall    : 0.9826\n",
            "F1 Score  : 0.9824\n",
            "==================================================\n",
            "              precision    recall  f1-score   support\n",
            "\n",
            "         ham       0.98      1.00      0.99      1446\n",
            "        spam       0.97      0.90      0.93       224\n",
            "\n",
            "    accuracy                           0.98      1670\n",
            "   macro avg       0.98      0.95      0.96      1670\n",
            "weighted avg       0.98      0.98      0.98      1670\n",
            "\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 400x300 with 1 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Best params: {'kernel': 'linear'}\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# 4. Decision Tree\n",
        "print(\"Training Decision Tree...\")\n",
        "gs_dt = GridSearchCV(DecisionTreeClassifier(random_state=42),\n",
        "                     {'criterion': ['gini', 'entropy'],\n",
        "                      'max_depth': [None, 10, 20]},\n",
        "                     cv=5, scoring='accuracy', n_jobs=-1)\n",
        "gs_dt.fit(X_train_tf1, y_train)\n",
        "y_pred = gs_dt.best_estimator_.predict(X_test_tf1)\n",
        "results.append(evaluate_model(\"Decision Tree\", y_test, y_pred))\n",
        "print(f\"Best params: {gs_dt.best_params_}\")"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 637
        },
        "id": "vnNxp4Znlk1F",
        "outputId": "08f56891-0206-4b40-ffac-4f627f45ed54"
      },
      "execution_count": 12,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Training Decision Tree...\n",
            "\n",
            "==================================================\n",
            "Model     : Decision Tree\n",
            "Accuracy  : 0.9581\n",
            "Precision : 0.9568\n",
            "Recall    : 0.9581\n",
            "F1 Score  : 0.9569\n",
            "==================================================\n",
            "              precision    recall  f1-score   support\n",
            "\n",
            "         ham       0.97      0.99      0.98      1446\n",
            "        spam       0.89      0.78      0.83       224\n",
            "\n",
            "    accuracy                           0.96      1670\n",
            "   macro avg       0.93      0.88      0.90      1670\n",
            "weighted avg       0.96      0.96      0.96      1670\n",
            "\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 400x300 with 1 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Best params: {'criterion': 'entropy', 'max_depth': 20}\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# 5. K-Nearest Neighbors\n",
        "print(\"Training KNN...\")\n",
        "gs_knn = GridSearchCV(KNeighborsClassifier(),\n",
        "                      {'n_neighbors': [3, 5, 7],\n",
        "                       'weights': ['uniform', 'distance'],\n",
        "                       'metric': ['euclidean', 'manhattan']},\n",
        "                      cv=5, scoring='accuracy', n_jobs=-1)\n",
        "gs_knn.fit(X_train_tf1, y_train)\n",
        "y_pred = gs_knn.best_estimator_.predict(X_test_tf1)\n",
        "results.append(evaluate_model(\"KNN\", y_test, y_pred))\n",
        "print(f\"Best params: {gs_knn.best_params_}\")"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 689
        },
        "id": "ovoXiDeklrH_",
        "outputId": "144f49d7-c207-4152-be56-8741c0135034"
      },
      "execution_count": 13,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Training KNN...\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "/usr/local/lib/python3.12/dist-packages/sklearn/model_selection/_search.py:1108: UserWarning: One or more of the test scores are non-finite: [0.93326125 0.94352852 0.95020506 0.95764787 0.95302887 0.96098516\n",
            "        nan 0.9360867         nan 0.93429117        nan 0.92864356]\n",
            "  warnings.warn(\n"
          ]
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "\n",
            "==================================================\n",
            "Model     : KNN\n",
            "Accuracy  : 0.9683\n",
            "Precision : 0.9689\n",
            "Recall    : 0.9683\n",
            "F1 Score  : 0.9666\n",
            "==================================================\n",
            "              precision    recall  f1-score   support\n",
            "\n",
            "         ham       0.97      1.00      0.98      1446\n",
            "        spam       0.99      0.77      0.87       224\n",
            "\n",
            "    accuracy                           0.97      1670\n",
            "   macro avg       0.98      0.89      0.92      1670\n",
            "weighted avg       0.97      0.97      0.97      1670\n",
            "\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 400x300 with 1 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Best params: {'metric': 'euclidean', 'n_neighbors': 7, 'weights': 'distance'}\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# جدول مقارنة جميع النماذج\n",
        "summary = pd.DataFrame(results)\n",
        "summary = summary.sort_values(\"Accuracy\", ascending=False)\n",
        "\n",
        "print(\"=\"*60)\n",
        "print(\"MODELS COMPARISON SUMMARY\")\n",
        "print(\"=\"*60)\n",
        "print(summary[[\"Model\",\"Accuracy\",\"Precision\",\"Recall\",\"F1\"]].to_string(index=False))\n",
        "\n",
        "# رسم بياني\n",
        "fig, ax = plt.subplots(figsize=(8, 5))\n",
        "colors = plt.cm.Blues(np.linspace(0.4, 0.9, len(summary)))\n",
        "bars = ax.barh(summary[\"Model\"], summary[\"Accuracy\"], color=colors, edgecolor='white')\n",
        "ax.set_xlabel(\"Accuracy\", fontsize=11)\n",
        "ax.set_title(\"Models Accuracy Comparison - SMS Spam Detection\",\n",
        "             fontsize=12, fontweight='bold')\n",
        "ax.set_xlim(0, 1.05)\n",
        "for bar, val in zip(bars, summary[\"Accuracy\"]):\n",
        "    ax.text(bar.get_width()+0.005, bar.get_y()+bar.get_height()/2,\n",
        "            f\"{val:.3f}\", va='center', fontsize=9)\n",
        "plt.tight_layout()\n",
        "plt.show()"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 663
        },
        "id": "zDYFzfH4lzFX",
        "outputId": "c1d93343-bf12-4e68-d27a-808bf55fd1a4"
      },
      "execution_count": 14,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "============================================================\n",
            "MODELS COMPARISON SUMMARY\n",
            "============================================================\n",
            "              Model  Accuracy  Precision   Recall       F1\n",
            "                SVM  0.982635   0.982469 0.982635 0.982379\n",
            "      Random Forest  0.973653   0.974431 0.973653 0.972415\n",
            "                KNN  0.968263   0.968929 0.968263 0.966579\n",
            "Logistic Regression  0.959281   0.960783 0.959281 0.956218\n",
            "      Decision Tree  0.958084   0.956845 0.958084 0.956888\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 800x500 with 1 Axes>"
            ],
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxYAAAHqCAYAAACZcdjsAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAZrpJREFUeJzt3Xd4FOX+/vF7QzrptASSEDoBqVJEVJAi5QiIBRCkg3BoR7EgRYJ0ERQpNjrngAhKkSLSBGmKhQACRg0gIL0FAhhSnt8f/DLfLEloQxKB9+u65rqyM88885mZ3c3cOzO7DmOMEQAAAADY4JLTBQAAAAC4+xEsAAAAANhGsAAAAABgG8ECAAAAgG0ECwAAAAC2ESwAAAAA2EawAAAAAGAbwQIAAACAbQQLAAAAALYRLID73MyZM+VwOORwODRkyJAc6wP4pxoyZIj1/J45c2ZOlwPcVzp06GC9/tavX5/T5eAGCBZADkl7sOJwOPTEE0+ka/PTTz85tXE4HPr7779zoNqcdeTIEeXKlcvaBgEBAUpISMjpsu45hw8f1uuvv64KFSrIz89PuXPnVmRkpNq3b6+1a9fmdHnIYpcvX9bQoUNVtmxZeXl5ydvbW+Hh4apdu7ZeeeUVHT161Gq7fv16p/elgIAAXb582am/hIQE5cuXz6ndypUrndps3bpVzZo1U/78+eXm5qa8efOqbNmyat26tT799NObrv1///ufHnnkEfn5+cnDw0MhISGqUqWKXnzxRX333Xf2Nsw/REREhLUdXVxc5OHhoQIFCqh69ep6/fXXdeDAAdvLWL9+vYYMGaIhQ4YoOjradn8348CBA9YyFy9enC3LRBYyAHJEVFSUkWQNLi4u5sCBA05tunXr5tRGkrl8+fIdrWPGjBlW31FRUTnWx/W8++676bbDokWL7vhy7meff/65yZ07d7rtnDr4+/vndIk55s8//zQbN240GzduNMePH8/pcrJESkqKqVOnTqb7X5LZuHGj1f6bb75JN33WrFlOfX766afp2nz11VfW9DVr1hhXV9dMl1e3bt2bqn3IkCHXrXvYsGF3ZiPlsMKFC193Pd3c3MzHH39saxlp/y/NmDHjzhR+A2mfS+3bt083/bfffrNef+fOncuWmnD7XO9MPAFgV0pKiqZNm6ahQ4dKki5evKi5c+fmcFX/DBl9cjlv3jw99dRT2V/Mbbh48aJy586d02VkauvWrXr++eeVmJgoSapWrZp69uypsLAwHTlyRMuWLdPq1atzuMrsl7rfwsPDFR4entPlZKk1a9Zo3bp1kqSiRYtq8ODBCgsL019//aVffvlFn3/++Q37mDp1qtq1a2c9njJlynXbDx48WElJSZKkHj16qEmTJkpKStK+ffu0bt26mzorGR8fr1GjRkmSvLy8NGzYMFWsWFFnzpzR77//rqVLl8rhcNywn7vNhAkTVK5cOf3555+aMWOGNmzYoMTERHXr1k358uVT8+bNc7rEO6ZEiRIqUaJETpeBm5XTyQa4X6X9ZMjX19dIMqGhoSY5OdkYY8y0adOcpqUO156xWLBggaldu7bx9/c37u7upkiRIqZnz57myJEj6Za5du1aU6VKFePh4WGKFi1qJk2adN2zDfv27TNdunQx4eHhxt3d3eTLl8+0aNHC7Nmzx6ldZn3s37/fPP/88yYkJMS4uroaf39/ExkZaTp06GB27NhxU9vpjz/+sPquWbOmCQsLM5KMt7e3iY+Pz3CeuXPnmtq1a5uAgADj7u5uChcubF544QWnT7uSkpLM5MmTzUMPPWT8/PyMp6enKV68uHnxxRetNu3bt7eW/c0339xwfWvVqmWN/+mnn0zHjh1Nnjx5TOpb7a5du0zr1q1NZGSkCQwMNK6uriZfvnymcePGZsOGDenW40Y1Dho0yFre9OnTneYdP368NW3s2LHX3cY1atSw2taoUcNcuXIlXZtr9/nRo0dN7969TdGiRY27u7vx9/c3tWrVMvPnz3dqt3//fqvvWrVqmXXr1pnKlSsbT09PU6lSJWu7fvDBB6ZIkSLGw8PDPPzwwyY6Otqpn7TbdufOnaZHjx4mb968xtvb2/zrX/8yf/zxh1P7qVOnmieeeMKEhYUZb29v4+HhYYoXL2569eplTp48mWnfGe23zD7FjY6ONk2bNjX58uUzrq6uJigoyFSoUMF069bN/Pnnn07LWLt2rWncuLHJkyePcXNzM6GhoaZ9+/bmt99+c2qXdlnTp0837733nilWrJhxd3c35cuXN2vXrs1kL9ozevRoa7kTJkxINz05OdnpvSftp8xp36NiYmKMMVdftw6HI930tGcsPD09jSQTFBSUYU0XL168Yd3fffed1ffTTz99w36ufT5u27bNPPbYY8bLy8uEhISYQYMGmcTERKt9fHy86d69u3nwwQdN/vz5jZubm/Hz8zMPPfSQmTp1qtNy7tRzPTNpz1ikfT9KSUkxzz77rDUtIiLCaR1SUlLM9OnTzcMPP2x8fX2Np6enKV++vBk/frz1/8YYc92zIWmf9zt27DCtWrUywcHBxs3NzRQsWNB07tzZHDp0KF3Nly5dMiNGjDCVKlUyuXPnNt7e3qZMmTLmzTffNMY4v/auHVLPXmT2PmzMP/91dT8iWAA5JO0bXYcOHYybm5uRZJYvX26MMaZ69epGknnxxRczDRavv/56pm/KwcHBZt++fVbbzZs3G3d393Ttypcvn+FB8k8//WQCAgIy7NvHx8d8//33VtuMDrQTExNNyZIlM61vypQpN7Wdhg8fbs3z/vvvm5deesl6PHfu3HTtO3XqlOky9+/fb4wx5sqVK6ZBgwaZtktlJ1gULVo0XZ8ZXRqSOri4uJh169ZZfd1MjbGxsdbB27WXjaRe1uLi4mIOHz6c6fY9ePCgU7/r16+/4T7Zt2+fCQ4OzrS2fv36WW3THmwVKlTIOphMHby8vMyrr76aro9rD47SbttSpUqla1+oUCFz6tQpq/31tl1kZKTT6+hG+y2jYHHq1CmTL1++TJexevVqq//Jkydb++nawdfX12zbts1qm3ZZ19aS2v7MmTM33Ee3avLkydYyypQpYxYvXnzdy07SBovq1aubcuXKGUnmtddeM8YY069fP2tfpd2+aYNF2u33xhtvmF27dpmUlJRbqnv37t1WH35+fuajjz7K8AA3VdrnY2hoaIaX/3Xr1s1qf/To0Uz3sSTz1ltvZdi3ned6ZjILFsZcfR27uLhY09NettauXbtM62/ZsqXV7nrrmfq8X7FihfHw8MiwzbX/c+Li4kzFihUzbFu4cGFjjL1gcTe8ru5HBAsgh6R9o+vXr59p3ry5kWSaN29udu7caU3btm2b0xtg6gFR2k/qPD09zdixY82XX35pHn/8cWt8w4YNreU99NBD1vh69eqZpUuXmmHDhplcuXJZ41MPklNSUswDDzxgjX/llVfMqlWrzNtvv221L1OmjHUQkNGB9q5du5yWt3LlSrNs2TIzceJE06hRIzN79uyb2k5ly5Y1kozD4TCHDx82mzZtsvpt2rSpU9vPP//cmpYrVy7z6quvmhUrVpjZs2eb+vXrW/ewjB071mrn7e1thg0bZlauXGmmTJliqlatavVnJ1i4urqaqKgo8/XXX5v33nvPGGPMzz//bMaNG2cWL15s1q1bZ9auXWs+/PBD6x91/fr1rb5utsa0AeKvv/4yxhhz9uxZK6jWqlXrutt36dKlTtsso7MV12rYsKE1T+3atc2XX35p3n33XacDqe+++84Y43ywJck8+eSTZvny5emu5+/SpYtZtmyZKV26tDVu2bJlGW7bvHnzmhkzZpgFCxY4HST07dvXaj99+nQzffp0s3z5crN+/XqzfPlypwOsOXPm3PR+yyhYpN1uzz//vFm9erVZvHixGTt2rPVptTFXD/hSA72Li4sZNGiQWb58uXnuuees+dO+lq6996pfv37myy+/NBUqVLDGTZo06Yb76Fbt3r3b6b0g9TVXtmxZ89prr6W7/+vaYPH+++8bSaZAgQLm4sWLpkCBAkaSGTNmTKbB4vnnn093gOfv72+aNGli5s2bd1Mh48qVKyY8PDxdP6GhoaZDhw5my5YtTu2vfT4+8cQTGb4Xpp5RjYuLM0OHDjXz5883q1atMt98842ZN2+eKVGihJGufsiSkJCQYd+3+1zPzPWChTHGOpsryUycONEYc/WMduq4UqVKmU8//dQsXbrU6f/BvHnzjDHGbNy40XTs2NEaP2DAAKd7iy5evGiFQVdXVzNixAizatUqpw+40v7P6dWrlzU+KCjIvPfee2blypVm4sSJpkGDBsYYY3bu3GkmTJhgtWvUqJG1zNSzDhm9D98tr6v7EcECyCHXBovly5cb6eoNeC1atDDS1bMJxjh/kpQaLPr06eN04J/q5MmT1oGqw+Ewp0+fNsePH7faenh4mNOnT1vt27Rpk+4gefv27da4ihUrWm/0GzdudLps5scffzTGZHyg/euvv1rj2rZta2JjY51Ou9+MtOGkRo0axpiroadgwYJGknF3dzdnz5612jdr1sxq379//0z7TfvP5Ho3O9oJFgMGDEjXX1JSkhk/frypWrWq8fX1TfdpW2Bg4C3XOGfOHKvduHHjjDHOZ0Y++uijTOc1xpj//e9/VtsCBQpct60xxpw+fdqq28PDw+kswSuvvGL19Z///McY43yw5eXlZeLi4owxzgc84eHh1gHAO++8Y40fP3681XfabZv2bNfq1aut8UWLFrXGHzx40HTt2tW65OTaA8+XX345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at++fab/Fxo0aKC8efNaB/B///231qxZk2n911tmZnLidYWbw+9YAP8ghQsX1uTJk3Xs2LEbXsLy/PPPa8KECZKufqpWsGBBlShRQuPHj7cu/WjQoIF1Gr569er6/vvv9ffff6tVq1bq06ePduzYkeEn/hUqVNADDzygX375RRs2bFC7du303HPPyc3NTQcOHNC2bdu0aNEip4Byrb/++kv16tVTixYtVKZMGRUoUED79+/XyZMnJemGl0KlvQyqZcuWeuSRR5ymL168WGvXrlVycrIWLFignj176oUXXtCSJUskXb08JSkpSY8//rhOnz6t//3vf/roo49UuHBhvfDCC9qxY4ck6eWXX9aJEydUtWpV/fXXX/rkk0+sy71SD5IkadCgQTp37py2bNlyW79CXaBAAXl6eurvv//Wrl279Mknn6hAgQIaNmxYhv9Mb7ZGSapUqZIqVaqk7du3a/PmzZKuHhQ2a9bspmobN26catWqpcTERG3evFmPPvqoevbsqdDQUB09elRLly61LgXJkyePGjRooJUrVyohIUEtWrTQyy+/rNjYWH3wwQdWnzcTam5X//795erqqty5c6t///7W+NT1LVy4sDVu+vTpKlq0qP744w8NHz78jtWwZcsW9enTR88884xKlCihvHnzaufOnbp06ZKk/3t+P/vss+rXr58SExO1cOFCRUVF6aGHHtKsWbOsX7IuU6aM05mjnPDdd9+pR48eaty4sRo1aqRixYopISFBU6dOtdpUqVLlun2knk387rvvVKVKFacDxox07dpV7u7uatmypapVq6aAgAD9+uuvmjFjhtWmatWq1+3jzJkzqlGjhh566CE1b95c5cqVk5ubm9atW2f9crSHh4fKly+fbt6LFy+qZcuW6tWrV7r3wrTPpdTLaQYPHqwGDRrov//9r/bs2XPdurLarl275HA4dODAAU2bNk0bN260po0bN876JL5NmzbWe2Lbtm01cOBAlShRQidPntTvv/+u5cuXq1GjRoqKipLk/Gn+F198oSJFisjNzU1Vq1ZV/fr1lS9fPp08eVKzZ89WUFCQ6tevr+TkZB04cECbN2/Wjh07tGfPHrm4uKh169aaPHmyJKl169Z68803Vbp0ae3bt09ffvmlVqxYkW6ZmzZt0ldffSVfX1+VLFky00vp7pbX1X0pq2/iAJCxa2/e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YWFh8vf3T9e+bNmyWrVqlU6dOqXo6GglJCSoVq1akq6e0fD09Mx0Wbt27VJoaKieffZZubq6KiQkRO3bt9fy5cvv+HpJBIt7TqFChbR+/Xr99ddfatiwYbpTaqkee+wxNWjQQP37979uf66urhoxYoTef/99HTly5IbL9/DwkJ+fn9MAAACA/9OxY0eNGDFCx44d07FjxzRy5Eh16dIlw7Y7d+7UxYsXdeXKFS1cuNC68VuSvLy89MILL1hfzHPu3Dm9/fbbatasmSTpwQcf1JEjR7R48WKlpKTo5MmT+u9//6tKlSplyXoRLO5BhQsX1oYNG3Ts2LHrhovRo0dr6dKl2rp163X7e+6551S2bFm99dZbWVEuAADAfeXNN99UjRo1FBkZqcjISNWsWVMDBgyQJHXv3l3du3e32s6fP1/h4eEKDAzU2LFjtXjxYpUvX96aPn78eBUsWFBFihRRqVKlVLhwYb377ruSpCJFimjevHkaOnSoAgMD9cADDyh//vx67733smS9HCbtbea4q3Xo0EHnzp3T4sWLJUmHDx/W448/rnz58mnlypXq06eP03RJateunRYsWKC///7b+saB9evX6/HHH9fZs2etm4nWrVunBg0aSJKmTJmiDh063FRN58+fl7+/v9p8tEEHLjhuPAMAAMA9omT+3JrernJOl2FL6rFcXFzcDa9E4YzFPSw0NFTr16/XqVOn1KBBgwy/oWno0KE39euLderUUZ06dTL9VUgAAADc3zhjgSzFGQsAAHC/4owFAAAAANwiggUAAAAA2wgWAAAAAGwjWAAAAACwjWABAAAAwDaCBQAAAADbCBYAAAAAbCNYAAAAALCNYAEAAADANoIFAAAAANsIFgAAAABsI1gAAAAAsI1gAQAAAMA2ggUAAAAA2wgWAAAAAGwjWAAAAACwjWABAAAAwDaCBQAAAADbCBYAAAAAbCNYAAAAALCNYAEAAADANoIFAAAAANsIFgAAAABsc83pAnB/CAvylrsXORYAANw/CufxzukSshXBAtmif4OS8vPzy+kyAAAAslVyilEuF0dOl5Et+AgZAAAAyCL3S6iQCBYAAAAA7gCCBQAAAADbCBYAAAAAbCNYAAAAALCNYAEAAADANoIFAAAAANsIFgAAAABsI1gAAAAAsI1gAQAAAMA2ggUAAAAA2wgWAAAAAGwjWAAAAACwjWABAAAAwDaCBQAAAJANUozJ6RKylGtOF4D7w8wfDutcsntOlwEAAJAjQvw81PWhsJwuI0sRLJAtjp1P0IkrKTldBgAAALIIl0IBAAAAsI1gAQAAAMA2ggUAAAAA2wgWAAAAAGwjWAAAAACwjWABAAAAwDaCBQAAAADbCBYAAAAAbCNYAAAAALCNYAEAAADANoIFAAAAANsIFgAAAABsI1gAAAAAsI1gAQAAAMA2ggUAAAAA2wgWAAAAAGwjWAAAAACwjWABAAAAwDaCBQAAAADbCBYAAAAAbCNYAAAAALCNYAEAAADANoLFdTgcDi1evDinywAAAMA9KjExUb169VJgYKCCgoLUu3dvJSUlZdg2NjZWjRo1UmBgoAoVKqQxY8ZY0w4ePCgfHx+nwdXVVU2bNk3Xz/HjxxUUFKSKFSve0XX5RweLDh06yOFwyOFwyM3NTUWKFNHrr7+uv//+O6dLy1Jp1zvt8Mcff+RoTU899VSOLR8AAOBeNHz4cG3atEl79uzR7t27tXHjRo0cOTJdu+TkZDVt2lSVK1fWiRMntG7dOk2aNElz586VJIWHhys+Pt4azpw5o4CAALVq1SpdX7169VKlSpXu+Lr8o4OFJDVs2FBHjx7Vvn379N577+njjz9WVFRUTpeV5VLXO+1QpEiR2+rrypUrd7g6AAAA3AnTp0/XoEGDFBISopCQEA0cOFDTpk1L1y4mJkYxMTGKioqSm5ubSpUqpc6dO+uTTz7JsN/FixcrJSVFTz/9tNP4JUuW6MyZM2rbtu0dX5d/fLDw8PBQcHCwwsLC9NRTT6levXpavXq1Nf306dN6/vnnVahQIXl7e6tcuXL69NNPnfqoXbu2+vTpo9dff11BQUEKDg7WkCFDnNr8/vvveuyxx+Tp6akyZco4LSPVrl27VKdOHXl5eSlPnjx68cUXFR8fb01P/VR/5MiRKlCggAICAjR06FAlJSXptddeU1BQkEJDQzVjxoybXu+0Q65cuSRJGzZsULVq1eTh4aGQkBC98cYbTqfMateurV69eumll15S3rx51aBBA0nSL7/8okaNGsnHx0cFChRQ27ZtderUKWu+zz//XOXKlbPWr169erp48aKGDBmiWbNmacmSJdbZk/Xr199wHQAAAJC5s2fP6vDhw06XJFWsWFEHDx5UXFycU9uUlBRJkjHGadzOnTsz7HvatGlq06aNPD09rXFxcXHq27evPvroozu4Fv/nHx8s0vrll1+0ZcsWubu7W+P+/vtvPfjgg1q+fLl++eUXvfjii2rbtq22bdvmNO+sWbOUO3duff/99xozZoyGDh1qhYfUNOfu7q7vv/9eH330kfr16+c0/8WLF9WgQQMFBgbqhx9+0IIFC7RmzRr16tXLqd26det05MgRffvtt3r33XcVFRWlJ598UoGBgfr+++/VvXt3devWTYcPH76tbfDXX3+pcePGqlq1qnbs2KEPP/xQ06ZN0/Dhw9Otr7u7uzZv3qyPPvpI586dU506dVSpUiX9+OOPWrlypY4fP64WLVpIko4eParnn39enTp10t69e7V+/Xo9/fTTMsbo1VdfVYsWLZzOojz88MMZ1peQkKDz5887DQAAAEgv9QPqgIAAa1zq3xcuXHBqW6pUKUVERGjw4MFKSEjQ7t27NX369AyPtf7880+tWbNGXbp0cRr/+uuvq0OHDipRosSdXZH/zzVLer2Dli1bJh8fHyUlJSkhIUEuLi6aNGmSNb1QoUJ69dVXrce9e/fW119/rfnz56tatWrW+PLly1uXUJUoUUKTJk3S2rVrVb9+fa1Zs0a//vqrvv76axUsWFCSNHLkSDVq1Miaf+7cufr77781e/Zs5c6dW5I0adIkNWnSRG+//bYKFCggSQoKCtKECRPk4uKiUqVKacyYMbp06ZIGDBggSerfv79Gjx6tTZs2ZXjN27XrnapRo0ZasGCBPvjgA4WFhWnSpElyOBwqXbq0jhw5on79+mnw4MFycXGx1jHtDT3Dhw9XpUqVnK7Zmz59usLCwvTbb78pPj5eSUlJevrpp1W4cGFJUrly5ay2Xl5eSkhIUHBw8HX316hRo/TWW29dtw0AAABkHevFxcUpb9681t+S5Ovr69TWzc1NS5Ys0csvv6xChQopNDRUHTt21Mcff5yu3xkzZqhSpUqqUKGCNW7jxo3avHmzfv7556xanX9+sHj88cf14Ycf6uLFi3rvvffk6uqqZ555xpqenJyskSNHav78+frrr7905coVJSQkyNvb26mf8uXLOz0OCQnRiRMnJEl79+5VWFiYFSokqUaNGk7t9+7dqwoVKlihQpJq1qyplJQUxcTEWMGibNmy1sG9JBUoUEAPPPCA9ThXrlzKkyePtewbrXeq1OXu3btXNWrUkMPhcKojPj5ehw8fVnh4uCTpwQcfdOpvx44d+uabb5zCSqrY2Fg98cQTqlu3rsqVK6cGDRroiSee0LPPPqvAwMDr1nmt/v37q2/fvtbj8+fPKyws7Jb6AAAAuB8EBgYqNDRU0dHRKlasmCQpOjpaYWFh8vf3T9e+bNmyWrVqlfW4X79+qlWrllOblJQUzZgxQ/3793cav3btWu3bt8863k1ISNDly5eVN29e7dq1SyEhIbbX5x8fLHLnzq3ixYtLuvoJe4UKFTRt2jR17txZkvTOO+/o/fff1/jx41WuXDnlzp1bL730Uroblt3c3JweOxwO61q1Oymj5dzOstOu9+1IG4Ckq6faUs+uXCskJES5cuXS6tWrtWXLFq1atUoTJ07UwIED9f3339/STeMeHh7y8PC47boBAADuJx07dtSIESNUs2ZNSVevmrn2EqZUO3fuVLFixeTm5qZly5Zp+vTpWrt2rVOb1atX69SpU3r++eedxvft29ep3wULFmjq1Kn6+uuvlT9//juyLnfVPRYuLi4aMGCABg0apMuXL0uSNm/erGbNmumFF15QhQoVVLRoUf3222+31G9kZKQOHTqko0ePWuO+++67dG127NihixcvWuM2b95sXfKUXSIjI7V161anG3c2b94sX19fhYaGZjpf5cqVtXv3bkVERKh48eJOQ2oIcTgcqlmzpt566y1t375d7u7uWrRokSTJ3d1dycnJWbtyAAAA95k333xTNWrUUGRkpCIjI1WzZk3rEvru3bure/fuVtv58+crPDxcgYGBGjt2rBYvXpzuqpxp06bp2WefTXfGw8/PT6GhodYQGBgoNzc3hYaGWl8QZNddFSwk6bnnnlOuXLk0efJkSVfvJUj9pH3v3r3q1q2bjh8/fkt91qtXTyVLllT79u21Y8cObdy4UQMHDnRqk3pXffv27fXLL7/om2++Ue/evdW2bVvrMqjs0KNHDx06dEi9e/fWr7/+qiVLligqKkp9+/Z1ugTrWj179tSZM2f0/PPP64cfflBsbKy+/vprdezYUcnJyfr+++81cuRI/fjjjzp48KAWLlyokydPKjIyUpIUERGhnTt3KiYmRqdOnVJiYmJ2rTIAAMA9y83NTZMnT9bZs2d19uxZTZw4Ua6uVy8q+uijj5y+wWn48OE6ffq0Ll68qC1btlhnOdKaP3++Zs2adcPldujQQdHR0XdsPaS7MFi4urqqV69eGjNmjC5evKhBgwapcuXKatCggWrXrq3g4OBb/iE3FxcXLVq0SJcvX1a1atXUpUsXjRgxwqmNt7e3vv76a505c0ZVq1bVs88+q7p16zrdSJ4dChUqpBUrVmjbtm2qUKGCunfvrs6dO2vQoEHXna9gwYLavHmzkpOT9cQTT6hcuXJ66aWXFBAQIBcXF/n5+enbb79V48aNVbJkSQ0aNEjjxo2zbmDv2rWrSpUqpSpVqihfvnzavHlzdqwuAAAA7hIOk/aaGuAOO3/+vPz9/dV/4c86ccXtxjMAAADcg8IDPTX4idu/fzanpB7LxcXFyc/P77pt77ozFgAAAAD+eQgWAAAAAGwjWAAAAACwjWABAAAAwDaCBQAAAADbCBYAAAAAbCNYAAAAALCNYAEAAADANoIFAAAAANsIFgAAAABsI1gAAAAAsI1gAQAAAMA2ggUAAAAA2wgWAAAAAGwjWAAAAACwjWABAAAAwDaCBQAAAADbCBYAAAAAbCNYAAAAALCNYAEAAADANoIFAAAAANsIFgAAAABsI1gAAAAAsM01pwvA/SHYz0Oeye45XQYAAECOCPHzyOkSshzBAtmiQ9VQ+fn55XQZAAAAOSbFGLk4HDldRpbhUigAAAAgG9zLoUIiWAAAAAC4AwgWAAAAAGwjWAAAAACwjWABAAAAwDaCBQAAAADbCBYAAAAAbCNYAAAAALCNYAEAAADANoIFAAAAANsIFgAAAABsI1gAAAAAsI1gAQAAAMA2ggUAAAAA2wgWAAAAQA5KMSanS7gjXHO6ANwf1v1xSgku8TldBgAAwD9KkLeb6pfMl9Nl3BEEC2SLs5cSdcnBCTIAAIB7FUd6AAAAAGwjWAAAAACwjWABAAAAwDaCBQAAAADbCBYAAAAAbCNYAAAAALCNYAEAAADANoIFAAAAANsIFgAAAABsI1gAAAAAsI1gAQAAAMA2ggUAAAAA2wgWAAAAAGwjWAAAAACwjWABAAAAwDaCBQAAAADbCBYAAAAAbCNYAAAAALCNYAEAAADANoIFAAAAANsIFgAAAABsI1gAAAAAsI1gAQAAAPzDJCYmqlevXgoMDFRQUJB69+6tpKSkDNvGxsaqUaNGCgwMVKFChTRmzBin6Xv27FHdunUVGBio4OBgvfjii7p06ZI1/dlnn1VISIj8/PxUpEgRDR8+/LZqJljcQ06ePKl///vfCg8Pl4eHh4KDg9WgQQNt2LBBefPm1ejRozOcb9iwYSpQoIASExM1c+ZMORwORUZGpmu3YMECORwORUREZPGaAAAA3N+GDx+uTZs2ac+ePdq9e7c2btyokSNHpmuXnJyspk2bqnLlyjpx4oTWrVunSZMmae7cuVab1q1bq1SpUjp+/Lh27dqlHTt2aNiwYdb0qKgoHThwQOfPn9eGDRs0d+5c/e9//7vlmgkW95BnnnlG27dv16xZs/Tbb7/pyy+/VO3atRUXF6cXXnhBM2bMSDePMUYzZ85Uu3bt5ObmJknKnTu3Tpw4oa1btzq1nTZtmsLDw7NlXQAAAO5n06dP16BBgxQSEqKQkBANHDhQ06ZNS9cuJiZGMTExioqKkpubm0qVKqXOnTvrk08+sdrs27dPL7zwgtzd3ZUvXz41bdpUu3btsqaXK1dOHh4ekiSHwyEXFxf9/vvvt1wzweIece7cOW3cuFFvv/22Hn/8cRUuXFjVqlVT//791bRpU3Xu3Fm//fabNm3a5DTfhg0btG/fPnXu3Nka5+rqqtatW2v69OnWuMOHD2v9+vVq3bp1tq0TAADA/ejs2bM6fPiwKlasaI2rWLGiDh48qLi4OKe2KSkpkq5+WJx23M6dO63Hr776qmbPnq3Lly/r2LFjWrRokZo0aeLUT48ePeTt7a3w8HDFx8erQ4cOt1w3weIe4ePjIx8fHy1evFgJCQnpppcrV05Vq1Z1CguSNGPGDD388MMqXbq00/hOnTpp/vz51vV3M2fOVMOGDVWgQIGsWwkAAAAoPj5ekhQQEGCNS/37woULTm1LlSqliIgIDR48WAkJCdq9e7emT5+u8+fPW20aNWqkTZs2ydfXVyEhIQoLC1OnTp2c+vnggw8UHx+vH374Qe3atVNgYOAt102wuEe4urpq5syZmjVrlgICAlSzZk0NGDDAKa127txZCxYssJ6sFy5c0Oeff57uiSVJlSpVUtGiRfX5559bl0tl1O5aCQkJOn/+vNMAAACAm+fj4yNJTmcnUv/29fV1auvm5qYlS5Zo+/btKlSokNq0aaOOHTsqT548kq6e/ahXr566du2qS5cu6cyZM8qdO7deeOGFdMt1cXFRlSpV5Ovrq1dfffWW6yZY3EOeeeYZHTlyRF9++aUaNmyo9evXq3Llypo5c6Yk6fnnn1dycrLmz58vSfrss8/k4uKili1bZthfp06dNGPGDG3YsEEXL15U48aNb1jDqFGj5O/vbw1hYWF3bP0AAADuB4GBgQoNDVV0dLQ1Ljo6WmFhYfL390/XvmzZslq1apVOnTql6OhoJSQkqFatWpKufmPU5cuX1adPH7m7uyswMFDdunXT8uXLM11+YmIi91hA8vT0VP369fXmm29qy5Yt6tChg6KioiRJfn5+evbZZ62buGfMmKEWLVpYqfhabdq00XfffachQ4aobdu2cnV1veHy+/fvr7i4OGs4dOjQnVs5AACA+0THjh01YsQIHTt2TMeOHdPIkSPVpUuXDNvu3LlTFy9e1JUrV7Rw4ULrxm9JKl26tHx8fPTBBx8oKSlJFy5c0JQpU1SpUiVJ0p9//qkvvvhC8fHxSklJ0ZYtWzRhwgQ1aNDglmsmWNzjypQpo4sXL1qPO3furE2bNmnZsmXasmWL003b1woKClLTpk21YcOGm7oMSpI8PDzk5+fnNAAAAODWvPnmm6pRo4YiIyMVGRlpXeYuSd27d1f37t2ttvPnz1d4eLgCAwM1duxYLV68WOXLl5d09bKqpUuX6tNPP1XevHkVERGhc+fOadasWdb848ePV2hoqAICAtSpUyf17t1bb7zxxi3X7DBpbyHHXev06dN67rnn1KlTJ5UvX16+vr768ccf1bt3b/3rX/+yvp7MGKOSJUvq9OnTKlCggPbu3evUz8yZM/XSSy/p3LlzkqTLly/r0qVL1nV648eP1/jx43XgwIGbquv8+fPy9/fX9I2/6pLD446tLwAAwL0gb253taxYMKfLyFTqsVxcXNwNPzC+8bUtuCv4+PioevXqeu+99xQbG6vExESFhYWpa9euVrqVrn43cadOnTRgwAD179//hv16eXnJy8srK0sHAADAPYAzFshSnLEAAADI3L10xoJ7LAAAAADYRrAAAAAAYBvBAgAAAIBtBAsAAAAAthEsAAAAANhGsAAAAABgG8ECAAAAgG0ECwAAAAC2ESwAAAAA2EawAAAAAGAbwQIAAACAbQQLAAAAALYRLAAAAADYRrAAAAAAYBvBAgAAAIBtBAsAAAAAthEsAAAAANhGsAAAAABgG8ECAAAAgG0ECwAAAAC2ESwAAAAA2EawAAAAAGAbwQIAAACAba45XQDuD4HebvJ2cc/pMgAAAP5RgrzdcrqEO4ZggWxRp3he+fn55XQZAAAA/zgpxsjF4cjpMmzjUigAAAAgB90LoUIiWAAAAAC4AwgWAAAAAGwjWAAAAACwjWABAAAAwDaCBQAAAADbCBYAAAAAbCNYAAAAALCNYAEAAADANoIFAAAAANsIFgAAAABsI1gAAAAAsI1gAQAAAMA2ggUAAAAA2wgWAAAAAGwjWAAAAACwjWABAAAAwDbXnC4A9zZjjCTp/PnzOVwJAAAAblXqMVzqMd31ECyQpU6fPi1JCgsLy+FKAAAAcLsuXLggf3//67YhWCBLBQUFSZIOHjx4wycj7i7nz59XWFiYDh06JD8/v5wuB3cY+/fexb69t7F/7105tW+NMbpw4YIKFix4w7YEC2QpF5ert/H4+/vzBneP8vPzY9/ew9i/9y727b2N/Xvvyol9e7MfDnPzNgAAAADbCBYAAAAAbCNYIEt5eHgoKipKHh4eOV0K7jD27b2N/XvvYt/e29i/9667Yd86zM18dxQAAAAAXAdnLAAAAADYRrAAAAAAYBvBAgAAAIBtBAvYNnnyZEVERMjT01PVq1fXtm3brtt+wYIFKl26tDw9PVWuXDmtWLEimyrFrbqVfTtlyhQ9+uijCgwMVGBgoOrVq3fD5wJy1q2+dlPNmzdPDodDTz31VNYWiNt2q/v23Llz6tmzp0JCQuTh4aGSJUvy3vwPdqv7d/z48SpVqpS8vLwUFhaml19+WX///Xc2VYub9e2336pJkyYqWLCgHA6HFi9efMN51q9fr8qVK8vDw0PFixfXzJkzs7zO6zKADfPmzTPu7u5m+vTpZvfu3aZr164mICDAHD9+PMP2mzdvNrly5TJjxowxe/bsMYMGDTJubm5m165d2Vw5buRW923r1q3N5MmTzfbt283evXtNhw4djL+/vzl8+HA2V46bcav7N9X+/ftNoUKFzKOPPmqaNWuWPcXiltzqvk1ISDBVqlQxjRs3Nps2bTL79+8369evN9HR0dlcOW7Gre7fOXPmGA8PDzNnzhyzf/9+8/XXX5uQkBDz8ssvZ3PluJEVK1aYgQMHmoULFxpJZtGiRddtv2/fPuPt7W369u1r9uzZYyZOnGhy5cplVq5cmT0FZ4BgAVuqVatmevbsaT1OTk42BQsWNKNGjcqwfYsWLcy//vUvp3HVq1c33bp1y9I6cetudd9eKykpyfj6+ppZs2ZlVYmw4Xb2b1JSknn44YfN1KlTTfv27QkW/1C3um8//PBDU7RoUXPlypXsKhE23Or+7dmzp6lTp47TuL59+5qaNWtmaZ2w52aCxeuvv27Kli3rNK5ly5amQYMGWVjZ9XEpFG7blStX9NNPP6levXrWOBcXF9WrV09bt27NcJ6tW7c6tZekBg0aZNoeOeN29u21Ll26pMTERAUFBWVVmbhNt7t/hw4dqvz586tz587ZUSZuw+3s2y+//FI1atRQz549VaBAAT3wwAMaOXKkkpOTs6ts3KTb2b8PP/ywfvrpJ+tyqX379mnFihVq3LhxttSMrPNPPKZyzbEl46536tQpJScnq0CBAk7jCxQooF9//TXDeY4dO5Zh+2PHjmVZnbh1t7Nvr9WvXz8VLFgw3Zsect7t7N9NmzZp2rRpio6OzoYKcbtuZ9/u27dP69atU5s2bbRixQr98ccf6tGjhxITExUVFZUdZeMm3c7+bd26tU6dOqVHHnlExhglJSWpe/fuGjBgQHaUjCyU2THV+fPndfnyZXl5eWV7TZyxAHDHjR49WvPmzdOiRYvk6emZ0+XApgsXLqht27aaMmWK8ubNm9Pl4A5LSUlR/vz59cknn+jBBx9Uy5YtNXDgQH300Uc5XRrugPXr12vkyJH64IMP9PPPP2vhwoVavny5hg0bltOl4R7EGQvctrx58ypXrlw6fvy40/jjx48rODg4w3mCg4NvqT1yxu3s21Rjx47V6NGjtWbNGpUvXz4ry8RtutX9GxsbqwMHDqhJkybWuJSUFEmSq6urYmJiVKxYsawtGjfldl67ISEhcnNzU65cuaxxkZGROnbsmK5cuSJ3d/csrRk373b275tvvqm2bduqS5cukqRy5crp4sWLevHFFzVw4EC5uPAZ890qs2MqPz+/HDlbIXHGAja4u7vrwQcf1Nq1a61xKSkpWrt2rWrUqJHhPDVq1HBqL0mrV6/OtD1yxu3sW0kaM2aMhg0bppUrV6pKlSrZUSpuw63u39KlS2vXrl2Kjo62hqZNm+rxxx9XdHS0wsLCsrN8XMftvHZr1qypP/74wwqLkvTbb78pJCSEUPEPczv799KlS+nCQ2qINMZkXbHIcv/IY6ocu20c94R58+YZDw8PM3PmTLNnzx7z4osvmoCAAHPs2DFjjDFt27Y1b7zxhtV+8+bNxtXV1YwdO9bs3bvXREVF8XWz/1C3um9Hjx5t3N3dzeeff26OHj1qDRcuXMipVcB13Or+vRbfCvXPdav79uDBg8bX19f06tXLxMTEmGXLlpn8+fOb4cOH59Qq4Dpudf9GRUUZX19f8+mnn5p9+/aZVatWmWLFipkWLVrk1CogExcuXDDbt28327dvN5LMu+++a7Zv327+/PNPY4wxb7zxhmnbtq3VPvXrZl977TWzd+9eM3nyZL5uFne/iRMnmvDwcOPu7m6qVatmvvvuO2tarVq1TPv27Z3az58/35QsWdK4u7ubsmXLmuXLl2dzxbhZt7JvCxcubCSlG6KiorK/cNyUW33tpkWw+Ge71X27ZcsWU716dePh4WGKFi1qRowYYZKSkrK5atysW9m/iYmJZsiQIaZYsWLG09PThIWFmR49epizZ89mf+G4rm+++SbD/6Op+7N9+/amVq1a6eapWLGicXd3N0WLFjUzZszI9rrTchjDeTAAAAAA9nCPBQAAAADbCBYAAAAAbCNYAAAAALCNYAEAAADANoIFAAAAANsIFgAAAABsI1gAAAAAsI1gAQAAAMA2ggUA4K5XoUIFORwObdy4MadLAYD7FsECAHBX2717t3bu3ClJmjt3bg5XAwD3L4IFAOCuNmfOHLm4uOjxxx/XggULlJiYmNMlSZISEhKUkpKS02UAQLYhWAAA7lrGGH366aeqU6eO+vbtq9OnT2vlypVObfbu3aunn35aQUFB8vb2VoUKFfTpp59a01NSUvTuu+8qMjJSHh4eCg4O1nPPPae4uDhJUocOHfTAAw849Xnu3Dk5HA7NnDnTGhcREaFevXppzJgxKly4sLy8vHTmzBn9+uuvatWqlcLCwuTt7a0yZcpo3Lhx6UJHQkKCBg0apKJFi8rDw0OhoaHq0KGDJGnp0qVyOBz6/fffneY5e/asvLy89MEHH9jdlABgm2tOFwAAwO3asmWLDhw4oMGDB6tBgwbKkyeP5s6dqyZNmkiSfv/9d9WoUUNhYWGaMGGCgoOD9csvv+jgwYNWH71799bHH3+sl19+WfXr19eFCxe0fPlyxcfHy9/f/5bq+eKLL1SiRAm9//77ypUrl3Lnzq0dO3aoVKlSatOmjXx9fRUdHa2oqCjFx8crKirKmveZZ57RunXrNGDAAD300EM6efKkFi5cKElq3LixChUqpOnTp2vUqFHWPKmXfrVu3fq2tyEA3DEGAIC7VI8ePYynp6c5d+6cMcaYbt26GW9vb3PhwgVjjDGtW7c2+fLlM3FxcRnOHxMTYxwOhxk5cmSmy2jfvr0pW7as07izZ88aSWbGjBnWuMKFC5s8efKY+Pj4TPtKSUkxiYmJZsSIESYkJMQav2rVKiPJzJ07N9N5Bw0aZAoWLGiSkpKscZUrVzatW7fOdB4AyE5cCgUAuCslJSVpwYIFaty4sXVmoXXr1rp06ZIWLVokSVq7dq2effZZ+fn5ZdjHunXrZIxR586d70hNtWvXVu7cuZ3G/f3334qKilLx4sXl4eEhNzc3DRw4UEePHlV8fLxVp7e3t1q1apVp3507d9bRo0etS7127typn3/++Y7VDgB2ESwAAHelVatW6eTJk2rSpInOnTunc+fOqVy5cgoJCbEuETp9+rQKFiyYaR+nT5+Wq6ur8ufPf0dqKlCgQLpx/fr10zvvvKOuXbtqxYoV+uGHHzRo0CBJV0NHah0hISFyOByZ9h0REaH69etr2rRpkqTp06erSJEievzxx+9I7QBgF/dYAADuSqnhoWPHjurYsaPTtJMnT+rEiRPKkyePjhw5kmkfefLkUVJSkk6cOJFpuPD09NSVK1ecxp09ezbDthkFgwULFqhbt27q16+fNW758uXp6jh69KiMMdcNF127dlXr1q31119/ac6cOerTp8912wNAduKMBQDgrnPp0iUtWbJETz31lL755hun4dNPP1VSUpI+++wz1atXT59//rkuXLiQYT916tSRw+HQjBkzMl1WaGioDh8+bF22JF09W3KzLl++LHd3d+txcnKy5s2b59SmXr16unTpkubPn3/dvpo1a6bAwEC1bt1aZ86csb41CgD+CThjAQC46yxZskTx8fHq06ePateunW76mDFjNHfuXM2ePVvLli3TI488otdff10hISHas2ePLl26pNdff10lS5ZU9+7dNWjQIJ05c0Z169bVpUuXtHz5cg0ZMkSFChXS008/rcGDB6tTp07q2rWrdu/eralTp950rfXr19eUKVNUpkwZ5c2bVx988IESEhKc2tSrV0+NGzdWp06dFBsbq+rVq+vMmTP6/PPP9dlnn1nt3Nzc1L59e73zzjtq0KCBwsLCbnsbAsCdxhkLAMBdZ+7cuQoPD88wVEhS+/bt9d1338nFxUVbtmxRRESEevTooSZNmmjatGkqXLiw1XbSpEkaOXKkFi1apCeffFL//ve/deHCBfn6+kqSypQpo1mzZmn79u1q1qyZVqxYoTlz5tx0rRMnTlStWrXUu3dvde7cWeXKldOAAQPStfviiy/Up08fffzxx2rUqJH69u0rHx+fdO2aN28uSerUqdNN1wAA2cFhjDE5XQQAALg5gwcP1gcffKC//vpLHh4eOV0OAFi4FAoAgLtATEyMYmJiNHHiRPXs2ZNQAeAfhzMWAADcBWrXrq3vvvtODRs21Jw5c9L9XgYA5DSCBQAAAADbuHkbAAAAgG0ECwAAAAC2ESwAAAAA2EawAAAAAGAbwQIAAACAbQQLAAAAALYRLAAAAADYRrAAAAAAYBvBAgAAAIBt/w9lxzjOcP4OwQAAAABJRU5ErkJggg==\n"
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "from imblearn.over_sampling import RandomOverSampler, SMOTE\n",
        "from imblearn.under_sampling import RandomUnderSampler\n",
        "from collections import Counter\n",
        "\n",
        "bal_results = []\n",
        "\n",
        "# Baseline\n",
        "print(\"Class counts (original):\", Counter(y_train))\n",
        "\n",
        "# 1. RandomOverSampler\n",
        "ros = RandomOverSampler(random_state=42)\n",
        "X_ros, y_ros = ros.fit_resample(X_train_tf1, y_train)\n",
        "print(\"\\nAfter RandomOverSampler:\", Counter(y_ros))\n",
        "gs_rf.fit(X_ros, y_ros)\n",
        "y_pred = gs_rf.best_estimator_.predict(X_test_tf1)\n",
        "bal_results.append(evaluate_model(\"RF - RandomOverSampler\", y_test, y_pred))\n",
        "\n",
        "# 2. RandomUnderSampler\n",
        "rus = RandomUnderSampler(random_state=42)\n",
        "X_rus, y_rus = rus.fit_resample(X_train_tf1, y_train)\n",
        "print(\"\\nAfter RandomUnderSampler:\", Counter(y_rus))\n",
        "gs_rf.fit(X_rus, y_rus)\n",
        "y_pred = gs_rf.best_estimator_.predict(X_test_tf1)\n",
        "bal_results.append(evaluate_model(\"RF - RandomUnderSampler\", y_test, y_pred))\n",
        "\n",
        "# 3. SMOTE\n",
        "smote = SMOTE(random_state=42)\n",
        "X_sm, y_sm = smote.fit_resample(X_train_tf1, y_train)\n",
        "print(\"\\nAfter SMOTE:\", Counter(y_sm))\n",
        "gs_rf.fit(X_sm, y_sm)\n",
        "y_pred = gs_rf.best_estimator_.predict(X_test_tf1)\n",
        "bal_results.append(evaluate_model(\"RF - SMOTE\", y_test, y_pred))"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 1000
        },
        "id": "ugJJQf04l5I4",
        "outputId": "8d50ec9d-49c3-4da5-92e6-f5b253a2e944"
      },
      "execution_count": 15,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Class counts (original): Counter({'ham': 3373, 'spam': 523})\n",
            "\n",
            "After RandomOverSampler: Counter({'ham': 3373, 'spam': 3373})\n",
            "\n",
            "==================================================\n",
            "Model     : RF - RandomOverSampler\n",
            "Accuracy  : 0.9820\n",
            "Precision : 0.9824\n",
            "Recall    : 0.9820\n",
            "F1 Score  : 0.9815\n",
            "==================================================\n",
            "              precision    recall  f1-score   support\n",
            "\n",
            "         ham       0.98      1.00      0.99      1446\n",
            "        spam       1.00      0.87      0.93       224\n",
            "\n",
            "    accuracy                           0.98      1670\n",
            "   macro avg       0.99      0.93      0.96      1670\n",
            "weighted avg       0.98      0.98      0.98      1670\n",
            "\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 400x300 with 1 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "\n",
            "After RandomUnderSampler: Counter({'ham': 523, 'spam': 523})\n",
            "\n",
            "==================================================\n",
            "Model     : RF - RandomUnderSampler\n",
            "Accuracy  : 0.9784\n",
            "Precision : 0.9782\n",
            "Recall    : 0.9784\n",
            "F1 Score  : 0.9783\n",
            "==================================================\n",
            "              precision    recall  f1-score   support\n",
            "\n",
            "         ham       0.98      0.99      0.99      1446\n",
            "        spam       0.94      0.90      0.92       224\n",
            "\n",
            "    accuracy                           0.98      1670\n",
            "   macro avg       0.96      0.95      0.95      1670\n",
            "weighted avg       0.98      0.98      0.98      1670\n",
            "\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 400x300 with 1 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "\n",
            "After SMOTE: Counter({'ham': 3373, 'spam': 3373})\n",
            "\n",
            "==================================================\n",
            "Model     : RF - SMOTE\n",
            "Accuracy  : 0.9778\n",
            "Precision : 0.9784\n",
            "Recall    : 0.9778\n",
            "F1 Score  : 0.9770\n",
            "==================================================\n",
            "              precision    recall  f1-score   support\n",
            "\n",
            "         ham       0.98      1.00      0.99      1446\n",
            "        spam       1.00      0.83      0.91       224\n",
            "\n",
            "    accuracy                           0.98      1670\n",
            "   macro avg       0.99      0.92      0.95      1670\n",
            "weighted avg       0.98      0.98      0.98      1670\n",
            "\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 400x300 with 1 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "feat_results = []\n",
        "\n",
        "# Random Forest على كل نوع feature representation\n",
        "print(\"Training on BoW...\")\n",
        "gs_rf.fit(X_train_bow, y_train)\n",
        "y_pred = gs_rf.best_estimator_.predict(X_test_bow)\n",
        "feat_results.append(evaluate_model(\"RF - BoW\", y_test, y_pred))\n",
        "\n",
        "print(\"Training on TF-IDF Unigrams...\")\n",
        "gs_rf.fit(X_train_tf1, y_train)\n",
        "y_pred = gs_rf.best_estimator_.predict(X_test_tf1)\n",
        "feat_results.append(evaluate_model(\"RF - TF-IDF (1,1)\", y_test, y_pred))\n",
        "\n",
        "print(\"Training on TF-IDF Unigrams + Bigrams...\")\n",
        "gs_rf.fit(X_train_tf2, y_train)\n",
        "y_pred = gs_rf.best_estimator_.predict(X_test_tf2)\n",
        "feat_results.append(evaluate_model(\"RF - TF-IDF (1,2)\", y_test, y_pred))\n",
        "\n",
        "print(\"Training on TF-IDF Unigrams + Bigrams + Trigrams...\")\n",
        "gs_rf.fit(X_train_tf3, y_train)\n",
        "y_pred = gs_rf.best_estimator_.predict(X_test_tf3)\n",
        "feat_results.append(evaluate_model(\"RF - TF-IDF (1,3)\", y_test, y_pred))\n",
        "\n",
        "# مقارنة\n",
        "feat_df = pd.DataFrame(feat_results)\n",
        "print(\"\\nFeature Representation Comparison:\")\n",
        "print(feat_df[[\"Model\",\"Accuracy\",\"F1\"]].to_string(index=False))"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 1000
        },
        "id": "juJRYmKSmx00",
        "outputId": "e4aa0417-4f13-4763-8fdc-fdf6536d43e4"
      },
      "execution_count": 16,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Training on BoW...\n",
            "\n",
            "==================================================\n",
            "Model     : RF - BoW\n",
            "Accuracy  : 0.9737\n",
            "Precision : 0.9744\n",
            "Recall    : 0.9737\n",
            "F1 Score  : 0.9724\n",
            "==================================================\n",
            "              precision    recall  f1-score   support\n",
            "\n",
            "         ham       0.97      1.00      0.99      1446\n",
            "        spam       1.00      0.80      0.89       224\n",
            "\n",
            "    accuracy                           0.97      1670\n",
            "   macro avg       0.99      0.90      0.94      1670\n",
            "weighted avg       0.97      0.97      0.97      1670\n",
            "\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 400x300 with 1 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Training on TF-IDF Unigrams...\n",
            "\n",
            "==================================================\n",
            "Model     : RF - TF-IDF (1,1)\n",
            "Accuracy  : 0.9737\n",
            "Precision : 0.9744\n",
            "Recall    : 0.9737\n",
            "F1 Score  : 0.9724\n",
            "==================================================\n",
            "              precision    recall  f1-score   support\n",
            "\n",
            "         ham       0.97      1.00      0.99      1446\n",
            "        spam       1.00      0.80      0.89       224\n",
            "\n",
            "    accuracy                           0.97      1670\n",
            "   macro avg       0.99      0.90      0.94      1670\n",
            "weighted avg       0.97      0.97      0.97      1670\n",
            "\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 400x300 with 1 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Training on TF-IDF Unigrams + Bigrams...\n",
            "\n",
            "==================================================\n",
            "Model     : RF - TF-IDF (1,2)\n",
            "Accuracy  : 0.9665\n",
            "Precision : 0.9677\n",
            "Recall    : 0.9665\n",
            "F1 Score  : 0.9644\n",
            "==================================================\n",
            "              precision    recall  f1-score   support\n",
            "\n",
            "         ham       0.96      1.00      0.98      1446\n",
            "        spam       1.00      0.75      0.86       224\n",
            "\n",
            "    accuracy                           0.97      1670\n",
            "   macro avg       0.98      0.88      0.92      1670\n",
            "weighted avg       0.97      0.97      0.96      1670\n",
            "\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 400x300 with 1 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Training on TF-IDF Unigrams + Bigrams + Trigrams...\n",
            "\n",
            "==================================================\n",
            "Model     : RF - TF-IDF (1,3)\n",
            "Accuracy  : 0.9647\n",
            "Precision : 0.9661\n",
            "Recall    : 0.9647\n",
            "F1 Score  : 0.9623\n",
            "==================================================\n",
            "              precision    recall  f1-score   support\n",
            "\n",
            "         ham       0.96      1.00      0.98      1446\n",
            "        spam       1.00      0.74      0.85       224\n",
            "\n",
            "    accuracy                           0.96      1670\n",
            "   macro avg       0.98      0.87      0.91      1670\n",
            "weighted avg       0.97      0.96      0.96      1670\n",
            "\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 400x300 with 1 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "\n",
            "Feature Representation Comparison:\n",
            "            Model  Accuracy       F1\n",
            "         RF - BoW  0.973653 0.972415\n",
            "RF - TF-IDF (1,1)  0.973653 0.972415\n",
            "RF - TF-IDF (1,2)  0.966467 0.964390\n",
            "RF - TF-IDF (1,3)  0.964671 0.962345\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "# دمج كل النتائج\n",
        "all_results = pd.DataFrame(results + bal_results + feat_results)\n",
        "all_results = all_results.drop_duplicates(subset=\"Model\")\n",
        "all_results = all_results.sort_values(\"Accuracy\", ascending=False)\n",
        "\n",
        "print(\"=\"*60)\n",
        "print(\"FINAL SUMMARY - SMS Spam Detection\")\n",
        "print(\"=\"*60)\n",
        "print(all_results[[\"Model\",\"Accuracy\",\"Precision\",\"Recall\",\"F1\"]].to_string(index=False))\n",
        "\n",
        "# رسم بياني نهائي\n",
        "fig, ax = plt.subplots(figsize=(10, 7))\n",
        "colors = plt.cm.Blues(np.linspace(0.35, 0.9, len(all_results)))\n",
        "bars = ax.barh(all_results[\"Model\"], all_results[\"Accuracy\"],\n",
        "               color=colors, edgecolor='white')\n",
        "ax.set_xlabel(\"Accuracy\", fontsize=11)\n",
        "ax.set_title(\"Final Results - SMS Spam Detection NLP Assignment\",\n",
        "             fontsize=12, fontweight='bold')\n",
        "ax.set_xlim(0, 1.08)\n",
        "ax.axvline(0.95, color='red', linestyle='--', alpha=0.5, label='0.95 threshold')\n",
        "ax.legend()\n",
        "for bar, val in zip(bars, all_results[\"Accuracy\"]):\n",
        "    ax.text(bar.get_width()+0.005, bar.get_y()+bar.get_height()/2,\n",
        "            f\"{val:.3f}\", va='center', fontsize=9)\n",
        "plt.tight_layout()\n",
        "plt.show()\n",
        "\n",
        "print(\"\\n✅ Assignment Completed Successfully!\")"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 1000
        },
        "id": "_f_79oq9o25j",
        "outputId": "48c8e7c4-ae84-4433-ed4f-0a6af1723a0a"
      },
      "execution_count": 17,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "============================================================\n",
            "FINAL SUMMARY - SMS Spam Detection\n",
            "============================================================\n",
            "                  Model  Accuracy  Precision   Recall       F1\n",
            "                    SVM  0.982635   0.982469 0.982635 0.982379\n",
            " RF - RandomOverSampler  0.982036   0.982401 0.982036 0.981484\n",
            "RF - RandomUnderSampler  0.978443   0.978205 0.978443 0.978277\n",
            "             RF - SMOTE  0.977844   0.978397 0.977844 0.976987\n",
            "      RF - TF-IDF (1,1)  0.973653   0.974431 0.973653 0.972415\n",
            "               RF - BoW  0.973653   0.974431 0.973653 0.972415\n",
            "          Random Forest  0.973653   0.974431 0.973653 0.972415\n",
            "                    KNN  0.968263   0.968929 0.968263 0.966579\n",
            "      RF - TF-IDF (1,2)  0.966467   0.967717 0.966467 0.964390\n",
            "      RF - TF-IDF (1,3)  0.964671   0.966056 0.964671 0.962345\n",
            "    Logistic Regression  0.959281   0.960783 0.959281 0.956218\n",
            "          Decision Tree  0.958084   0.956845 0.958084 0.956888\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 1000x700 with 1 Axes>"
            ],
            "image/png": "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j48PqlatKk6uUFLq1q2LY8eO4cqVK2jRogU8PT0xdepUVKxYUSwTFhaGfv364bvvvoObmxu6deuGM2fOoFKlSiUaKxERERFRUb2UG+Cl3EDXYVAeZELOG7IRUYGlpqbC0tISDYasxuVbz998ABERERFRCavnWh5/Lu6t6zDeSdn5QEpKCiwsLPItyx5vIiIiIiIiIi1i4k1ERERERESkRZxcjYiIiIiIqAzTV6vQ6+7fAIDNFRsgU0/+hiOopDHxJiIiIiIiKsNkEFD5xWNxnUofDjUnIiIiIiIi0iIm3kRERERERERaxMSbiIiIiIiISIuYeBMRERERERFpERNvIiIiIiIiIi3irOZERERERERlXAZvIVaqMfEmIiIiIiIqwzL09DG3Wntdh0H5YOJNVEQ1HK2hb2Ci6zCIiIiIiHKp6Wyj6xAITLyJimzZtz6wsLDQdRhERERERBqp1GrI9Ti9ly4x8SYiIiIiIirLMjOBLVuy1j//HNCXpnlMunWPiTcREREREVFZplYDV6/+t06lDn/6ICIiIiIiItIiJt5EREREREREWsTEm4iIiIiIiEiLmHgTERERERERaRETbyIiIiIiIiItYuJNREREREREpEW8nRgREREREVFZZmAATJuWbxGVWs37eesQE2+iIgpcfhLXH2fqOgwiIiIiIo3cHC2xelgLXYfxXmPiTVREV5NSEZOUruswiIiIiIiolGLiTUREREREVIbJ1Sp0uf03AGCXUwOo9OQ6johex8SbiIiIiIioDNMTBNRMvQsA2CMIUOk4HsqNV9cTERERERERaRETbyIiIiIiIiItYuJNREREREREpEVMvImIiIiIiIi0iIk3ERERERERkRYx8SYiIiIiIiLSIt5OjIiIiIiIqAzL0JNjnntncZ1KHybeREREREREZZlMhgw5U7vSjEPNS5iLiwsWLVpU6OPXrl0LKyurYovnXVLU55aIiIiI6H2SkZGBwMBAWFtbw8bGBsOGDUNmZqbGsgkJCejYsSOsra3h6OiIuXPnSva3atUKhoaGMDMzE5e7d++K+8+ePYvmzZvDwsICVatWxfr167XattKGiXcO/v7+6Natm1bPcebMGQwePLhAZTUlkp9//jmuXLlS6POvXbsWMpkMMpkMenp6cHBwwOeff47ExMRC11lavM1zS0RERET0rpCrVfjo9ll8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adOm+Pjjj+Hj4wNvb2/xtlmaWFlZYdWqVfD29kbdunVx+PBh7N69G+XKlQMAzJgxAzdu3ICrqyvKly+vsY5WrVph27Zt2LVrF+rVq4c2bdrg9OnTb93ukSNHYu/evTh9+jR8fX2xZ88eHDx4EA0bNkSTJk2wcOFCMcGVy+UIDw9HWloaGjZsiIEDB4qzmr9pKPrAgQOxevVqhIWFoU6dOmjZsiXWrl0r9nibm5tj7ty5aNCgARo2bIgbN25g37590NPTe+PzlZNMJsPOnTthbW2NDz/8ED4+PqhatSq2bNny1s8NEREREVGpJpPhhb4hXugbAm/oCCPdkAmv31CNis3z58/h6OiI+fPnY8CAAboOR6tOnDiB5s2b499//4Wrq6uuwykRqampsLS0RJMRWxCTlK7rcIiIiIiINPJwsUHU7I91HcY7JzsfSElJeeNlqBxqXozOnz+Pf/75B40aNUJKSgpmzJgBAOjatauOIyt+O3bsgJmZGapXr45///0X3377Lby9vd+bpJuIiIiIqLSQq1XwuZc179Fh+zpQvcVwcyoZTLyL2bx58xAfHw8DAwPUr18fUVFRGq/NLuuePXuGcePGITExEba2tvDx8cH8+fN1HRYRERER0XtHTxDg9fg6AOBIhQ+Q//TMpAtMvIuRp6cnzp49q+swSkS/fv3Qr18/XYdBRERERERU6nFyNSIiIiIiIiItYuJNREREREREpEVMvImIiIiIiIi0iIk3ERERERERkRYx8SYiIiIiIiLSIs5qTkREREREVIZl6MnxU4324jqVPky8iYiIiIiIyjKZDCkGprqOgvLBoeZEREREREREWsQeb6Iiqu5gAX1DE12HQURERETvKT21CvVvXgAAnK3sAfVrw83dHC11ERblwMSbqIiWDG0GCwsLXYdBRERERO+rV6+AkPNZ6xM7AgYGuYqo1GrI9TjgWVf4zBMREREREb3jmHTrFp99IiIiIiIiIi1i4k1ERERERESkRUy8iYiIiIiIiLSIiTcRERERERGRFjHxJiIiIiIiItIi3k6MiIiIiIioLFMogK+//m+dSh0m3kRERERERGWZTAbY2ek6CsoHh5oTERERERERaRF7vImIiIiIiMoylQqIispab9ECkMvffIhagFxPpuXAKBsTb6IiGrXub9x8qtZ1GERERET0ntLPzEDvPzYBADZ9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IiIiIiLSIibeRERERERERFrExJuIiIiIiIhIi3iNNxERERERURmWqSfH9mrNxXUqfZh4ExERERERlWGCTA/XLCvqOgzKB4eaExEREREREWkRe7yJiIiIiIjKMD21Cu5PEgEAcdaVoOZw81KHiTcREREREVEZJhfU6HjjDADgipUT1GDiXdpwqDkRERERERGRFrHHm6iIXO3NoW+k1nUYRERERPSe0s/MgN11IwDAB85WyNRX5Fu+uoN5SYRFOTDxJiqiBf0bwMLCQtdhEBEREdH76tUrQHYKANBvYlvAwOCNh6jUAuR6Mm1HRv+PQ82JiIiIiIjeM0y6SxYTbyIiIiIiIiItYuJNREREREREpEW8xpuIiIiIiKgs09cHevT4b51KHb4qREREREREZZmeHlC7tq6joHxwqDkRERERERGRFrHHm4iIiIiIqCxTq4G4uKx1d/esHnAqVfiKEBERERERlWWZmcC2bVlLZqauoyENmHgTERERERG9h1RqQdchvDc41JyoiMZtvoBbz3QdBRERERG9r/QzM9Dz5E0AwNaFx5Gpr3jjMdXszLDoC09th0b/j4k3URFde/AcVx6qdB0GEREREb2nFKoMJKcqAQCxd1KRIX9z4k0li0PNiYiIiIiIiLSIiTcRERERERGRFjHxJiIiIiIiItIiXuNNRERERERUhqlkejjo2lRcp9KHiTcREREREVEZptaTI86uqq7DoHzw5xAiIiIiIiIiLWKPNxERERERURkmE9RweZoEALhh5QCBw81LHb4iREREREREZZi+WoUu/0Siyz+R0FerdB0OacDEm4iIiIiIiEiLmHgTERERERERaRETbyrVIiIi4O7uDpVKu0Nmli9fjs6dO2v1HEREREREpV1GRgYCAwNhbW0NGxsbDBs2DJmZmRrLJiQkoGPHjrC2toajoyPmzp2bq8zq1avh5uYGU1NTuLi4YOfOneI+QRAwa9YsuLi4wNTUFDVq1MCpU6e01jZdYuKtRf7+/pDJZJDJZFAoFKhSpQrGjh2L9PR0SbnsMjmX5s2bF/q8rVq10lhn9tKqVSsAgIuLS659Tk5O+dYtk8kQHh6uMXZTU1NUr14d/v7+OHv2rOS4yMhIjbFMnjw53/ONHTsWkydPhlwuBwAkJSWhT58+qFGjBvT09DBixIg3Ph8XLlxA79694ezsDGNjY7i7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pod4+2riOpU+TLyJiIiIiIjKMJWeHEdreus6DMoHfw4hIiIiIiIi0iL2eBMREREREZVlggB9ddZEwZl6+oBMpuOA6HXs8SYiIiIiIirD9NWZGBi1EQOjNooJOJUuTLyJiIiIiIiItIiJNxEREREREZEWMfEmIiIiIiIi0iIm3kRERERERERaxMSbiIiIiIiISIuYeBMRERERERFpEe/jTVRELuVMoDDmb1hEREREpBt6qkyk16gJAKjhYAG1vGBpXlVbE22GRTkw8SYqomndasHCwkLXYRARERHRe61ZoY5SqQXI9WTFHAu9jt10RERERERE7ykm3SWDiTcRERERERGRFnGoORERERERUVn26hUQEpK1PnEiYGCg23goF/Z4ExEREREREWkRE28iIiIiIiIiLWLiTURERERERKRFTLyJiIiIiIiItIiJNxEREREREZEWMfEmIiIiIiIiAIBKLeg6hHcSbydGVESzDlzB/Zf8DYuIiIiIdENPlYlG97JSu9MboqGWFy7Nq1zOBEEf1SzO0Oj/MfEmKqJbj1/gxjOZrsMgIiIiovfYP9VaZq08UgJQ6jQWyo3ddERERERERERaxMSbiIiIiIiISIs41JyIiIiIiKgM08/MQJ9jmwAAG1v2Rqa+QscR0euYeBMREREREZVx+qpMXYdA+eBQcyIiIiIiIiItYuJNREREREREpEVMvImIiIiIiIi0iIk3ERERERERkRYx8SYiIiIiIiLSIs5qTkREREREVIYJMhmSrB3EdSp92OP9HpPJZAgPD9d1GEREREREVAQquT5+b9gRvzfsCJW8+PtWMzIyEBgYCGtra9jY2GDYsGHIzNR8+7KEhAR07NgR1tbWcHR0xNy5c8V9iYmJMDMzkyz6+vro0qVLrnru378PGxsb1KtXr9jbowtMvHXI398fMpkMMpkMCoUCVapUwdixY5Genq7r0LQqZ7tzLv/++69OY+rWrZvOzk9EREREVFoFBwfj+PHjiI2NRUxMDKKiohASEpKrnEqlQpcuXeDl5YXk5GQcOXIES5YswcaNGwEAlSpVQlpamrg8fvwYVlZW6NWrV666AgMD4enpqfW2lRQm3jrWoUMHJCUl4dq1a1i4cCFWrFiBoKAgXYelddntzrlUqVKlUHW9evWqmKMjIiIiIqJsoaGhmDx5MhwcHODg4IBJkyZhzZo1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xcbG6tixY9q9e7dmzJiRIy4rK0vBwcFq2rSpEhIStH37ds2ePVtLly61xPTt21d+fn76/fffdeTIER06dEhTp06VJKWkpCggIED79+9XYmKiXn/9dfXp00exsbGF1tf8ssmId+fOnXXu3DmdPn1as2bN0vz58xUeHp4jLioqSufOnbMsBfGthaurq86dO6fffvtNn332meLi4tSzZ898t1uc7N+/Xy1btlR6ero2bdqkEydOaPr06YqOjlanTp2Unp5us3MbhqHMzExNmTJFs2bN0tSpUxUbG6sdO3bo+eefV2Jios3OXZiysrKUnZ1d1GkAAAAAf8qcmaFmi+eq2eK5MmdmFNp5IyMjNXHiRHl5ecnLy0sTJkxQREREjri4uDjFxcUpPDxcDg4O8vPzU1hYmD7++GNLzOnTp9WvXz85OjqqYsWKCg4O1pEjRyRJNWvW1OjRo1W1alWZzWYFBQXJz89P+/fvL7S+5pdNCm8nJyd5enrKx8dH3bp1U8eOHbV169YcceXKlZOnp6dl8fDwyPe5TSaTPD095eXlpdatWyssLEzfffedkpOTLTGvvPKK6tatqzJlyqhmzZqaNGmSMjL+d4G+9tpratKkiT755BP5+vrKzc1NzzzzjK5evWqJuXbtmp599lk5OzvLy8tL7777bo5crly5omeffVbu7u4qU6aMunTpopMnT1r2R0dHq1y5ctq4caP8/PxUpkwZ9ejRQ6mpqVq0aJF8fX3l7u6uESNGKCsrS9LNwjcsLEz+/v76/PPP9fDDD6t69erq2bOnNmzYoH379mnWrFmSbn5r1Lt3b6ucMjIyVKFCBS1evFiSlJ2drTfeeEM1atRQ6dKl1bhxY61evdoSv3PnTplMJn3xxRdq1qyZnJyctGfPHq1fv14vvviievbsqRo1aqhx48YKCwvT6NGjLcd++eWXatu2rcqVK6fy5cvrySefVHx8vGX/mTNnZDKZtHLlSrVr106lS5dWixYtdOLECX3//fdq3ry5nJ2d1aVLF124cMFyXGhoqLp166YpU6aoYsWKcnV11dChQ+/6hUNaWppGjx4tb29vlS1bVi1bttTOnTtzfBbr169X/fr15eTk9JecKQEAAAAUhCtXrujXX39VkyZNLNuaNGmis2fPKikpySr21oCWcdtofHZ2tg4fPmx5PXr0aC1evFjXr1/X+fPn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AACAB9XAgQM1ffp0tWnTRpI0Y8YMq4G42x0+fFi1atWSg4ODNm7cqMjISMuM4nr16snZ2Vlz587VkCFDdP36dS1YsMBS72RkZKhXr166du2aNm7cWCL/Jrf5Pd5ms1njx4/XxIkTdf369ftqw8XFRbVr17YspUuXvudjX331Va1YscJy//XevXtVvXp1TZgwQc2bN1edOnX0888/5ymfWxfMt99+a9l25coVyxRv6WbRn5mZaRVz6dIlxcXFqX79+nk63+2aNGmievXqadasWTmK0UOHDunrr79Wnz59LNtat24tHx8frVixQkuWLFHPnj0tRe3tDxG7/f2tXbv2fU2jvtWva9euWfo6ceJEdejQQf7+/rpy5cp99/uPDh06ZHU97d+/X87OzrnmHRAQoKysLCUkJOTop6enZ4HlBAAAADxIJk2apFatWsnf31/+/v5q06aNxo8fL0kaOnSohg4daolduXKlqlWrJnd3d73zzjtau3atZbaps7OzNmzYoGXLlqlChQry9fVVYmKiFi1aJOlmDbdu3Tp98803qlChgmUGa24/XVZc2WTE+4969uypMWPGaM6cOVZPvS4MPj4+euqppzR58mRt3LhRderU0dmzZ7V8+XK1aNFCmzZtsroH+l44OzsrLCxMY8aMUfny5VWpUiVNmDDB6mFnderUUdeuXTV48GDNnz9fLi4uevXVV+Xt7a2uXbved39MJpMiIiLUqVMnde/eXePGjZOnp6e+/fZb/etf/1KrVq308ssvWx3Tt29fzZs3TydOnLC6V9rFxUWjR4/WyJEjlZ2drbZt2yopKUnffPONXF1dNWDAgDvm0aNHD7Vp00atW7eWp6enfvrpJ40bN05169ZVvXr1ZDabVb58eX388cfy8vLS2bNn9eqrr953v/8oPT1dYWFhmjhxos6cOaPw8HANHz48xwPnpJuzBEJCQvTss8/q3XffVUBAgC5cuKBt27apUaNGeuKJJwosLwAAAKCwGSazrvjWtqwXFgcHB82ZM0dz5szJsW/evHlWr6dNm6Zp06bdsa02bdpoz549ue575JFH7ulW2+KsUD4Ve3t7DR8+XDNnztS1a9cK45RWRo4cqU2bNum7775TcHCwRo4cqeHDh6tJkybau3evJk2alOc23377bbVr105BQUHq2LGj2rZtq2bNmlnFREVFqVmzZnry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5KTatWsrOjra5nkWJxTewB2sWLFCo0aNUnh4uH788Uc1btxYgYGBSkhIyDV+79696tOnj8LCwnTw4EF169ZN3bp109GjRws5cxS1vF47O3fuVJ8+fbRjxw7t27dPPj4++sc//qHffvutkDNHUcvrtXPLmTNnNHr0aLVr166QMkVxk9drJz09XZ06ddKZM2e0evVqxcXFacGCBfL29i7kzFHU8nrtLF26VK+++qrCw8N1/PhxRUREaMWKFRo/fnwhZ46idO3aNTVu3Fhz5sy5p/iffvpJTzzxhNq3b6+YmBi9/PLLeu655/TVV1/ZONNixACQq4cfftgYNmyY5XVWVpZRpUoV44033sg1vlevXsYTTzxhta1ly5bGkCFDbJonip+8Xjt/lJmZabi4uBiLFi2yVYoopu7n2snMzDRat25tLFy40BgwYIDRtWvXQsgUxU1er52PPvrIqFmzppGenl5YKaKYyuu1M2zYMOOxxx6z2jZq1CijTZs2Ns0TxZckY82aNXeNGTt2rNGgQQOrbb179zYCAwNtmFnxwog3kIv09HQdOHBAHTt2tGwzm83q2LGj9u3bl+sx+/bts4qXpMDAwDvG46/pfq6dP0pNTVVGRoY8PDxslSaKofu9dl5//XVVqlRJYWFhhZEmiqH7uXbWr1+vVq1aadiwYapcubIeeughzZgxQ1lZWYWVNoqB+7l2WrdurQMHDlimo58+fVqbN2/W448/Xig5o2Ti72TJvqgTAIqjixcvKisrS5UrV7baXrlyZf33v//N9Zjz58/nGn/+/Hmb5Yni536unT965ZVXVKVKlRz/B4W/tvu5dvbs2aOIiAjFxMQUQoYoru7n2jl9+rS2b9+ukJAQbd68WadOndKLL76ojIwMhYeHF0baKAbu59rp27evLl68qLZt28owDGVmZmro0KFMNcdd3env5OTkZF2/fl2lS5cuoswKDyPeAFCMvPnmm1q+fLnWrFmjUqVKFXU6KMauXr2q/v37a8GCBapQoUJRp4MSJjs7W5UqVdLHH3+sZs2aqXfv3powYYLmzZtX1KmhmNu5c6dmzJihuXPn6scff9Tnn3+uTZs2aerUqUWdGlCsMeIN5KJChQqys7PT77//brX9999/l6enZ67HeHp65ikef033c+3c8s477+jNN9/U119/rUaNGtkyTRRDeb124uPjdebM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vGLZtmnTphx5nDt3ToZh3LX4Hjx4sPr27avffvtNS5Ys0YgRI+4aDwAoPhjxBgAAJUpqaqrWrVunbt26aceOHVbLsmXLlJmZqRUrVqhjx45avXq1rl69mms7jz32mEwmk6Kiou54rqpVq+rXX3+1TAuXbo6236vr16/L0dHR8jorK0vLly+3iunYsaNSU1O1cuXKu7bVtWtXubu7q2/fvrp8+bLl/nIAQPHHiDcAAChR1q1bp5SUFI0YMUKPPvpojv0zZ87U0qVLtXjxYm3cuFFt27bV2LFj5eXlpdjYWKWmpmrs2LGqW7euhg4dqokTJ+ry5cvq0KGDUlNTtWnTJr322mvy9vbW008/rcmTJ2vQoEEaPHiwjh07poULF95zrp06ddKCBQtUv359VahQQXPnzlVaWppVTMeOHfX4449r0KBBio+PV8uWLXX58mWtXr1aK1assMQ5ODhowIABevvttxUYGCgfH5/7fg8BAIWLEW8AAFCiLF26VNWqVcu16JakAQMGaP/+/TKbzdq7d698fX314osvKigoSBEREapevboldvbs2ZoxY4bWrFmjJ598Ui+88IKuXr0qFxcXSVL9+vW1aNEiHTx4UF27dtXmzZvz9BTxDz/8UI888oheeuklhYWFqWHDhho/fnyOuM8++0wjRozQ/Pnz1aVLF40aNUrOzs454p566ilJ0qBBg+45BwBA0ePnxAAAAEqIyZMna+7cufrtt9/k5ORU1OkAAO4RU80BAACKubi4OMXFxenDDz/UsGHDKLoBoIRhxBsAAKCYe/TRR7V//3517txZS5YsyfF74QCA4o3CGwAAAAAAG+LhagAAAAAA2BCFNwAAAAAANkThDQAAAACADVF4AwAAAABgQxTeAAAAAADYEIU3AAAAAAA2ROENAAAAAIANUXgDAAAAAGBDFN4AAAAAANjQ/wOfv6RtKYDfbQAAAABJRU5ErkJggg==\n"
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "\n",
            "✅ Assignment Completed Successfully!\n"
          ]
        }
      ]
    }
  ]
}