{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "provenance": [],
      "collapsed_sections": [
        "ot-o-LWf1sjs"
      ]
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    },
    "language_info": {
      "name": "python"
    }
  },
  "cells": [
    {
      "cell_type": "markdown",
      "source": [
        "# Imports & NLTK setup"
      ],
      "metadata": {
        "id": "ot-o-LWf1sjs"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "import pandas as pd\n",
        "import numpy as np\n",
        "import re\n",
        "import nltk\n",
        "\n",
        "from nltk.corpus import stopwords\n",
        "from nltk.tokenize import word_tokenize\n",
        "\n",
        "from sklearn.model_selection import train_test_split, GridSearchCV\n",
        "from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer\n",
        "from sklearn.metrics import (\n",
        "    accuracy_score, precision_score, recall_score, f1_score,\n",
        "    confusion_matrix, classification_report\n",
        ")\n",
        "\n",
        "from sklearn.linear_model import LogisticRegression\n",
        "from sklearn.svm import LinearSVC\n",
        "from sklearn.ensemble import RandomForestClassifier\n",
        "from sklearn.tree import DecisionTreeClassifier\n",
        "\n",
        "import matplotlib.pyplot as plt\n",
        "import seaborn as sns\n",
        "\n",
        "nltk.download(\"punkt\")\n",
        "nltk.download(\"stopwords\")\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "05K4fTh_CAsW",
        "outputId": "579101d3-31d2-46af-d7bd-d915962da566"
      },
      "execution_count": 64,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stderr",
          "text": [
            "[nltk_data] Downloading package punkt to /root/nltk_data...\n",
            "[nltk_data]   Package punkt is already up-to-date!\n",
            "[nltk_data] Downloading package stopwords to /root/nltk_data...\n",
            "[nltk_data]   Package stopwords is already up-to-date!\n"
          ]
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "True"
            ]
          },
          "metadata": {},
          "execution_count": 64
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Load the Dataset"
      ],
      "metadata": {
        "id": "yszGhUYcCEac"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "FILE_PATH = \"/content/twitter_training.csv\"  # change if needed\n",
        "\n",
        "df = pd.read_csv(FILE_PATH, engine=\"python\", on_bad_lines=\"warn\")\n",
        "\n",
        "print(\"Shape:\", df.shape)\n",
        "print(\"Columns:\", df.columns.tolist())\n",
        "print(\"\\nLabel distribution:\")\n",
        "print(df[\"sentiment\"].value_counts())\n",
        "df.head()"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 380
        },
        "id": "rdXHAX7oCD0u",
        "outputId": "773ded94-60ef-498d-f173-5d0f7f05ef06"
      },
      "execution_count": 90,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Shape: (74682, 2)\n",
            "Columns: ['sentiment', 'text']\n",
            "\n",
            "Label distribution:\n",
            "sentiment\n",
            "Negative      22542\n",
            "Positive      20832\n",
            "Neutral       18318\n",
            "Irrelevant    12990\n",
            "Name: count, dtype: int64\n"
          ]
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "  sentiment                                               text\n",
              "0  Positive  im getting on borderlands and i will murder yo...\n",
              "1  Positive  I am coming to the borders and I will kill you...\n",
              "2  Positive  im getting on borderlands and i will kill you ...\n",
              "3  Positive  im coming on borderlands and i will murder you...\n",
              "4  Positive  im getting on borderlands 2 and i will murder ..."
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-58451556-3fd2-4087-8ce1-687dc78115a8\" class=\"colab-df-container\">\n",
              "    <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>sentiment</th>\n",
              "      <th>text</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>Positive</td>\n",
              "      <td>im getting on borderlands and i will murder yo...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>Positive</td>\n",
              "      <td>I am coming to the borders and I will kill you...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>Positive</td>\n",
              "      <td>im getting on borderlands and i will kill you ...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>Positive</td>\n",
              "      <td>im coming on borderlands and i will murder you...</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>Positive</td>\n",
              "      <td>im getting on borderlands 2 and i will murder ...</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "    <div class=\"colab-df-buttons\">\n",
              "\n",
              "  <div class=\"colab-df-container\">\n",
              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-58451556-3fd2-4087-8ce1-687dc78115a8')\"\n",
              "            title=\"Convert this dataframe to an interactive table.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "\n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    .colab-df-buttons div {\n",
              "      margin-bottom: 4px;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "    <script>\n",
              "      const buttonEl =\n",
              "        document.querySelector('#df-58451556-3fd2-4087-8ce1-687dc78115a8 button.colab-df-convert');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      async function convertToInteractive(key) {\n",
              "        const element = document.querySelector('#df-58451556-3fd2-4087-8ce1-687dc78115a8');\n",
              "        const dataTable =\n",
              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                    [key], {});\n",
              "        if (!dataTable) return;\n",
              "\n",
              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "          + ' to learn more about interactive tables.';\n",
              "        element.innerHTML = '';\n",
              "        dataTable['output_type'] = 'display_data';\n",
              "        await google.colab.output.renderOutput(dataTable, element);\n",
              "        const docLink = document.createElement('div');\n",
              "        docLink.innerHTML = docLinkHtml;\n",
              "        element.appendChild(docLink);\n",
              "      }\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "\n",
              "    <div id=\"df-b9d249ba-0d11-4389-b827-197c0bd00c09\">\n",
              "      <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-b9d249ba-0d11-4389-b827-197c0bd00c09')\"\n",
              "                title=\"Suggest charts\"\n",
              "                style=\"display:none;\">\n",
              "\n",
              "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "     width=\"24px\">\n",
              "    <g>\n",
              "        <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
              "    </g>\n",
              "</svg>\n",
              "      </button>\n",
              "\n",
              "<style>\n",
              "  .colab-df-quickchart {\n",
              "      --bg-color: #E8F0FE;\n",
              "      --fill-color: #1967D2;\n",
              "      --hover-bg-color: #E2EBFA;\n",
              "      --hover-fill-color: #174EA6;\n",
              "      --disabled-fill-color: #AAA;\n",
              "      --disabled-bg-color: #DDD;\n",
              "  }\n",
              "\n",
              "  [theme=dark] .colab-df-quickchart {\n",
              "      --bg-color: #3B4455;\n",
              "      --fill-color: #D2E3FC;\n",
              "      --hover-bg-color: #434B5C;\n",
              "      --hover-fill-color: #FFFFFF;\n",
              "      --disabled-bg-color: #3B4455;\n",
              "      --disabled-fill-color: #666;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart {\n",
              "    background-color: var(--bg-color);\n",
              "    border: none;\n",
              "    border-radius: 50%;\n",
              "    cursor: pointer;\n",
              "    display: none;\n",
              "    fill: var(--fill-color);\n",
              "    height: 32px;\n",
              "    padding: 0;\n",
              "    width: 32px;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart:hover {\n",
              "    background-color: var(--hover-bg-color);\n",
              "    box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "    fill: var(--button-hover-fill-color);\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart-complete:disabled,\n",
              "  .colab-df-quickchart-complete:disabled:hover {\n",
              "    background-color: var(--disabled-bg-color);\n",
              "    fill: var(--disabled-fill-color);\n",
              "    box-shadow: none;\n",
              "  }\n",
              "\n",
              "  .colab-df-spinner {\n",
              "    border: 2px solid var(--fill-color);\n",
              "    border-color: transparent;\n",
              "    border-bottom-color: var(--fill-color);\n",
              "    animation:\n",
              "      spin 1s steps(1) infinite;\n",
              "  }\n",
              "\n",
              "  @keyframes spin {\n",
              "    0% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "      border-left-color: var(--fill-color);\n",
              "    }\n",
              "    20% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    30% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    40% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    60% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    80% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "    90% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "  }\n",
              "</style>\n",
              "\n",
              "      <script>\n",
              "        async function quickchart(key) {\n",
              "          const quickchartButtonEl =\n",
              "            document.querySelector('#' + key + ' button');\n",
              "          quickchartButtonEl.disabled = true;  // To prevent multiple clicks.\n",
              "          quickchartButtonEl.classList.add('colab-df-spinner');\n",
              "          try {\n",
              "            const charts = await google.colab.kernel.invokeFunction(\n",
              "                'suggestCharts', [key], {});\n",
              "          } catch (error) {\n",
              "            console.error('Error during call to suggestCharts:', error);\n",
              "          }\n",
              "          quickchartButtonEl.classList.remove('colab-df-spinner');\n",
              "          quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",
              "        }\n",
              "        (() => {\n",
              "          let quickchartButtonEl =\n",
              "            document.querySelector('#df-b9d249ba-0d11-4389-b827-197c0bd00c09 button');\n",
              "          quickchartButtonEl.style.display =\n",
              "            google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "        })();\n",
              "      </script>\n",
              "    </div>\n",
              "\n",
              "    </div>\n",
              "  </div>\n"
            ],
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "dataframe",
              "variable_name": "df",
              "summary": "{\n  \"name\": \"df\",\n  \"rows\": 74682,\n  \"fields\": [\n    {\n      \"column\": \"sentiment\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 4,\n        \"samples\": [\n          \"Neutral\",\n          \"Irrelevant\",\n          \"Positive\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"text\",\n      \"properties\": {\n        \"dtype\": \"string\",\n        \"num_unique_values\": 69489,\n        \"samples\": [\n          \"I \\u2019 m totally not gonna spend any more money trying on\",\n          \"Bernthal is great as Walker in Breakpoint.  \",\n          \"And they're awesome\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    }\n  ]\n}"
            }
          },
          "metadata": {},
          "execution_count": 90
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Data Preprocessing"
      ],
      "metadata": {
        "id": "lyJthyW2CN_k"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "## remove missing values"
      ],
      "metadata": {
        "id": "wW1T1-GyCPjd"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "TEXT_COL  = \"text\"\n",
        "LABEL_COL = \"sentiment\"\n",
        "\n",
        "df_work = df.dropna(subset=[TEXT_COL, LABEL_COL]).copy()"
      ],
      "metadata": {
        "id": "Uk1LyGQkCVNQ"
      },
      "execution_count": 92,
      "outputs": []
    },
    {
      "cell_type": "code",
      "source": [
        "TASK = \"multiclass\"   # choose: \"multiclass\" or \"binary\"\n",
        "\n",
        "print(\"Label distribution after task selection:\")\n",
        "print(df_work[LABEL_COL].value_counts())\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "LKYuand0Cl1a",
        "outputId": "5bec1c2f-e778-4d37-9aed-0fed0875bbb6"
      },
      "execution_count": 93,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Label distribution after task selection:\n",
            "sentiment\n",
            "Negative      22358\n",
            "Positive      20655\n",
            "Neutral       18108\n",
            "Irrelevant    12875\n",
            "Name: count, dtype: int64\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "## Clean text"
      ],
      "metadata": {
        "id": "CxWQbaOcCtRZ"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "stop_words = set(stopwords.words(\"english\"))\n",
        "\n",
        "def preprocess_text(text):\n",
        "    text = str(text).lower()\n",
        "    text = re.sub(r\"http\\S+|www\\S+\", \"\", text)         # remove URLs\n",
        "    text = re.sub(r\"<.*?>\", \"\", text)                 # remove HTML\n",
        "    text = re.sub(r\"[^a-zA-Z\\s]\", \" \", text)          # keep letters only\n",
        "    tokens = word_tokenize(text)\n",
        "    tokens = [w for w in tokens if w not in stop_words]\n",
        "    return \" \".join(tokens)\n",
        "\n",
        "df_work[\"clean_text\"] = df_work[TEXT_COL].apply(preprocess_text)\n",
        "df_work = df_work.dropna(subset=[\"clean_text\"]).copy()\n",
        "\n",
        "df_work[[\"clean_text\", LABEL_COL]].head()\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 206
        },
        "id": "5RxVdczACu0L",
        "outputId": "993ade17-dfbb-4488-d239-f8b143b7dbfd"
      },
      "execution_count": 94,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "                      clean_text sentiment\n",
              "0  im getting borderlands murder  Positive\n",
              "1            coming borders kill  Positive\n",
              "2    im getting borderlands kill  Positive\n",
              "3   im coming borderlands murder  Positive\n",
              "4  im getting borderlands murder  Positive"
            ],
            "text/html": [
              "\n",
              "  <div id=\"df-3cccf75a-e1de-43a0-acf6-6b2c416f36ca\" class=\"colab-df-container\">\n",
              "    <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>clean_text</th>\n",
              "      <th>sentiment</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>im getting borderlands murder</td>\n",
              "      <td>Positive</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>coming borders kill</td>\n",
              "      <td>Positive</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>im getting borderlands kill</td>\n",
              "      <td>Positive</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>im coming borderlands murder</td>\n",
              "      <td>Positive</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>im getting borderlands murder</td>\n",
              "      <td>Positive</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>\n",
              "    <div class=\"colab-df-buttons\">\n",
              "\n",
              "  <div class=\"colab-df-container\">\n",
              "    <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-3cccf75a-e1de-43a0-acf6-6b2c416f36ca')\"\n",
              "            title=\"Convert this dataframe to an interactive table.\"\n",
              "            style=\"display:none;\">\n",
              "\n",
              "  <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\">\n",
              "    <path d=\"M120-120v-720h720v720H120Zm60-500h600v-160H180v160Zm220 220h160v-160H400v160Zm0 220h160v-160H400v160ZM180-400h160v-160H180v160Zm440 0h160v-160H620v160ZM180-180h160v-160H180v160Zm440 0h160v-160H620v160Z\"/>\n",
              "  </svg>\n",
              "    </button>\n",
              "\n",
              "  <style>\n",
              "    .colab-df-container {\n",
              "      display:flex;\n",
              "      gap: 12px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert {\n",
              "      background-color: #E8F0FE;\n",
              "      border: none;\n",
              "      border-radius: 50%;\n",
              "      cursor: pointer;\n",
              "      display: none;\n",
              "      fill: #1967D2;\n",
              "      height: 32px;\n",
              "      padding: 0 0 0 0;\n",
              "      width: 32px;\n",
              "    }\n",
              "\n",
              "    .colab-df-convert:hover {\n",
              "      background-color: #E2EBFA;\n",
              "      box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "      fill: #174EA6;\n",
              "    }\n",
              "\n",
              "    .colab-df-buttons div {\n",
              "      margin-bottom: 4px;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert {\n",
              "      background-color: #3B4455;\n",
              "      fill: #D2E3FC;\n",
              "    }\n",
              "\n",
              "    [theme=dark] .colab-df-convert:hover {\n",
              "      background-color: #434B5C;\n",
              "      box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n",
              "      filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n",
              "      fill: #FFFFFF;\n",
              "    }\n",
              "  </style>\n",
              "\n",
              "    <script>\n",
              "      const buttonEl =\n",
              "        document.querySelector('#df-3cccf75a-e1de-43a0-acf6-6b2c416f36ca button.colab-df-convert');\n",
              "      buttonEl.style.display =\n",
              "        google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "\n",
              "      async function convertToInteractive(key) {\n",
              "        const element = document.querySelector('#df-3cccf75a-e1de-43a0-acf6-6b2c416f36ca');\n",
              "        const dataTable =\n",
              "          await google.colab.kernel.invokeFunction('convertToInteractive',\n",
              "                                                    [key], {});\n",
              "        if (!dataTable) return;\n",
              "\n",
              "        const docLinkHtml = 'Like what you see? Visit the ' +\n",
              "          '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n",
              "          + ' to learn more about interactive tables.';\n",
              "        element.innerHTML = '';\n",
              "        dataTable['output_type'] = 'display_data';\n",
              "        await google.colab.output.renderOutput(dataTable, element);\n",
              "        const docLink = document.createElement('div');\n",
              "        docLink.innerHTML = docLinkHtml;\n",
              "        element.appendChild(docLink);\n",
              "      }\n",
              "    </script>\n",
              "  </div>\n",
              "\n",
              "\n",
              "    <div id=\"df-3937fb96-9b25-4929-8f3b-fb9157f5ddd0\">\n",
              "      <button class=\"colab-df-quickchart\" onclick=\"quickchart('df-3937fb96-9b25-4929-8f3b-fb9157f5ddd0')\"\n",
              "                title=\"Suggest charts\"\n",
              "                style=\"display:none;\">\n",
              "\n",
              "<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n",
              "     width=\"24px\">\n",
              "    <g>\n",
              "        <path d=\"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z\"/>\n",
              "    </g>\n",
              "</svg>\n",
              "      </button>\n",
              "\n",
              "<style>\n",
              "  .colab-df-quickchart {\n",
              "      --bg-color: #E8F0FE;\n",
              "      --fill-color: #1967D2;\n",
              "      --hover-bg-color: #E2EBFA;\n",
              "      --hover-fill-color: #174EA6;\n",
              "      --disabled-fill-color: #AAA;\n",
              "      --disabled-bg-color: #DDD;\n",
              "  }\n",
              "\n",
              "  [theme=dark] .colab-df-quickchart {\n",
              "      --bg-color: #3B4455;\n",
              "      --fill-color: #D2E3FC;\n",
              "      --hover-bg-color: #434B5C;\n",
              "      --hover-fill-color: #FFFFFF;\n",
              "      --disabled-bg-color: #3B4455;\n",
              "      --disabled-fill-color: #666;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart {\n",
              "    background-color: var(--bg-color);\n",
              "    border: none;\n",
              "    border-radius: 50%;\n",
              "    cursor: pointer;\n",
              "    display: none;\n",
              "    fill: var(--fill-color);\n",
              "    height: 32px;\n",
              "    padding: 0;\n",
              "    width: 32px;\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart:hover {\n",
              "    background-color: var(--hover-bg-color);\n",
              "    box-shadow: 0 1px 2px rgba(60, 64, 67, 0.3), 0 1px 3px 1px rgba(60, 64, 67, 0.15);\n",
              "    fill: var(--button-hover-fill-color);\n",
              "  }\n",
              "\n",
              "  .colab-df-quickchart-complete:disabled,\n",
              "  .colab-df-quickchart-complete:disabled:hover {\n",
              "    background-color: var(--disabled-bg-color);\n",
              "    fill: var(--disabled-fill-color);\n",
              "    box-shadow: none;\n",
              "  }\n",
              "\n",
              "  .colab-df-spinner {\n",
              "    border: 2px solid var(--fill-color);\n",
              "    border-color: transparent;\n",
              "    border-bottom-color: var(--fill-color);\n",
              "    animation:\n",
              "      spin 1s steps(1) infinite;\n",
              "  }\n",
              "\n",
              "  @keyframes spin {\n",
              "    0% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "      border-left-color: var(--fill-color);\n",
              "    }\n",
              "    20% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    30% {\n",
              "      border-color: transparent;\n",
              "      border-left-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    40% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-top-color: var(--fill-color);\n",
              "    }\n",
              "    60% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "    }\n",
              "    80% {\n",
              "      border-color: transparent;\n",
              "      border-right-color: var(--fill-color);\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "    90% {\n",
              "      border-color: transparent;\n",
              "      border-bottom-color: var(--fill-color);\n",
              "    }\n",
              "  }\n",
              "</style>\n",
              "\n",
              "      <script>\n",
              "        async function quickchart(key) {\n",
              "          const quickchartButtonEl =\n",
              "            document.querySelector('#' + key + ' button');\n",
              "          quickchartButtonEl.disabled = true;  // To prevent multiple clicks.\n",
              "          quickchartButtonEl.classList.add('colab-df-spinner');\n",
              "          try {\n",
              "            const charts = await google.colab.kernel.invokeFunction(\n",
              "                'suggestCharts', [key], {});\n",
              "          } catch (error) {\n",
              "            console.error('Error during call to suggestCharts:', error);\n",
              "          }\n",
              "          quickchartButtonEl.classList.remove('colab-df-spinner');\n",
              "          quickchartButtonEl.classList.add('colab-df-quickchart-complete');\n",
              "        }\n",
              "        (() => {\n",
              "          let quickchartButtonEl =\n",
              "            document.querySelector('#df-3937fb96-9b25-4929-8f3b-fb9157f5ddd0 button');\n",
              "          quickchartButtonEl.style.display =\n",
              "            google.colab.kernel.accessAllowed ? 'block' : 'none';\n",
              "        })();\n",
              "      </script>\n",
              "    </div>\n",
              "\n",
              "    </div>\n",
              "  </div>\n"
            ],
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "dataframe",
              "summary": "{\n  \"name\": \"df_work[[\\\"clean_text\\\", LABEL_COL]]\",\n  \"rows\": 5,\n  \"fields\": [\n    {\n      \"column\": \"clean_text\",\n      \"properties\": {\n        \"dtype\": \"string\",\n        \"num_unique_values\": 4,\n        \"samples\": [\n          \"coming borders kill\",\n          \"im coming borderlands murder\",\n          \"im getting borderlands murder\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    },\n    {\n      \"column\": \"sentiment\",\n      \"properties\": {\n        \"dtype\": \"category\",\n        \"num_unique_values\": 1,\n        \"samples\": [\n          \"Positive\"\n        ],\n        \"semantic_type\": \"\",\n        \"description\": \"\"\n      }\n    }\n  ]\n}"
            }
          },
          "metadata": {},
          "execution_count": 94
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "## Remove duplicates"
      ],
      "metadata": {
        "id": "FH0AWhspC0D2"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "before = len(df_work)\n",
        "df_work = df_work.drop_duplicates(subset=[\"clean_text\"]).copy()\n",
        "after = len(df_work)\n",
        "\n",
        "print(f\"Removed duplicates: {before-after} | Remaining samples: {after}\")\n",
        "print(\"\\nLabel distribution after cleaning:\")\n",
        "print(df_work[LABEL_COL].value_counts())\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "vs-A73JpC2aU",
        "outputId": "6221770d-a167-44ae-fc41-64ad11bbeb7d"
      },
      "execution_count": 95,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Removed duplicates: 13900 | Remaining samples: 60096\n",
            "\n",
            "Label distribution after cleaning:\n",
            "sentiment\n",
            "Negative      18376\n",
            "Positive      15968\n",
            "Neutral       15109\n",
            "Irrelevant    10643\n",
            "Name: count, dtype: int64\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Split the Dataset"
      ],
      "metadata": {
        "id": "FPyeC2Z6C9VV"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "X = df_work[\"clean_text\"].values\n",
        "y = df_work[LABEL_COL].values\n",
        "\n",
        "X_train, X_test, y_train, y_test = train_test_split(\n",
        "    X, y,\n",
        "    test_size=0.2,\n",
        "    random_state=42,\n",
        "    stratify=y\n",
        ")\n",
        "\n",
        "print(\"Train size:\", len(X_train), \"Test size:\", len(X_test))\n",
        "print(\"Test distribution:\\n\", pd.Series(y_test).value_counts())\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "9V6QKODPC_p1",
        "outputId": "d12977f6-89c0-4689-96fc-887a7455cf33"
      },
      "execution_count": 96,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Train size: 48076 Test size: 12020\n",
            "Test distribution:\n",
            " Negative      3675\n",
            "Positive      3194\n",
            "Neutral       3022\n",
            "Irrelevant    2129\n",
            "Name: count, dtype: int64\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Feature Representation"
      ],
      "metadata": {
        "id": "vpiZObtMDEkY"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "## Bag of Words"
      ],
      "metadata": {
        "id": "DUj4uzEsDK1l"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "bow = CountVectorizer(max_features=30000)\n",
        "\n",
        "X_train_bow = bow.fit_transform(X_train)   # fit on train only\n",
        "X_test_bow  = bow.transform(X_test)\n",
        "\n",
        "print(\"BoW shapes:\", X_train_bow.shape, X_test_bow.shape)\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "Vj7CgAn8DGQc",
        "outputId": "6b2d023b-1bdc-4d48-f6b0-fe699d736368"
      },
      "execution_count": 97,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "BoW shapes: (48076, 27703) (12020, 27703)\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "## TF-IDF"
      ],
      "metadata": {
        "id": "-4YjeWG_DPA8"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "tfidf = TfidfVectorizer(ngram_range=(1,2), max_features=50000)\n",
        "\n",
        "X_train_tfidf = tfidf.fit_transform(X_train)  # fit on train only\n",
        "X_test_tfidf  = tfidf.transform(X_test)\n",
        "\n",
        "print(\"TF-IDF shapes:\", X_train_tfidf.shape, X_test_tfidf.shape)\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "hlf0jmGdDQli",
        "outputId": "9114edc6-aab5-4340-faa3-ec133f9fc11d"
      },
      "execution_count": 98,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "TF-IDF shapes: (48076, 50000) (12020, 50000)\n"
          ]
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "#  Evaluation Function"
      ],
      "metadata": {
        "id": "aigFIOe_DWlr"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "def evaluate_model(model_name, y_true, y_pred):\n",
        "    print(\"=\"*60)\n",
        "    print(\"Model:\", model_name)\n",
        "\n",
        "    acc = accuracy_score(y_true, y_pred)\n",
        "    prec = precision_score(y_true, y_pred, average=\"macro\", zero_division=0)\n",
        "    rec = recall_score(y_true, y_pred, average=\"macro\", zero_division=0)\n",
        "    f1 = f1_score(y_true, y_pred, average=\"macro\", zero_division=0)\n",
        "\n",
        "    print(f\"Accuracy        : {acc:.4f}\")\n",
        "    print(f\"Macro Precision : {prec:.4f}\")\n",
        "    print(f\"Macro Recall    : {rec:.4f}\")\n",
        "    print(f\"Macro F1-score  : {f1:.4f}\")\n",
        "\n",
        "    print(\"\\nClassification Report:\\n\", classification_report(y_true, y_pred, zero_division=0))\n",
        "\n",
        "    labels = np.unique(np.concatenate([y_true, y_pred]))\n",
        "    cm = confusion_matrix(y_true, y_pred, labels=labels)\n",
        "\n",
        "    plt.figure(figsize=(5,5))\n",
        "    sns.heatmap(cm, annot=True, fmt=\"d\", cbar=False,\n",
        "                xticklabels=labels, yticklabels=labels)\n",
        "    plt.title(f\"Confusion Matrix — {model_name}\")\n",
        "    plt.xlabel(\"Predicted\")\n",
        "    plt.ylabel(\"True\")\n",
        "    plt.show()\n"
      ],
      "metadata": {
        "id": "HFlyIZV9DZQu"
      },
      "execution_count": 99,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "source": [
        "# Train & Evaluate Models"
      ],
      "metadata": {
        "id": "TGcSpAh8DdTv"
      }
    },
    {
      "cell_type": "markdown",
      "source": [
        "## Logistic Regression"
      ],
      "metadata": {
        "id": "AB0Dz2ODDfkw"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "lr = LogisticRegression(max_iter=2000, class_weight=\"balanced\")\n",
        "lr.fit(X_train_tfidf, y_train)\n",
        "\n",
        "y_pred = lr.predict(X_test_tfidf)\n",
        "evaluate_model(\"Logistic Regression (TF-IDF, balanced)\", y_test, y_pred)\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 817
        },
        "id": "vWqfiUgjDn-l",
        "outputId": "da77a6d1-d0b6-46af-ec91-c0700eb9dc59"
      },
      "execution_count": 100,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "============================================================\n",
            "Model: Logistic Regression (TF-IDF, balanced)\n",
            "Accuracy        : 0.8211\n",
            "Macro Precision : 0.8169\n",
            "Macro Recall    : 0.8200\n",
            "Macro F1-score  : 0.8180\n",
            "\n",
            "Classification Report:\n",
            "               precision    recall  f1-score   support\n",
            "\n",
            "  Irrelevant       0.77      0.82      0.80      2129\n",
            "    Negative       0.86      0.85      0.85      3675\n",
            "     Neutral       0.83      0.78      0.81      3022\n",
            "    Positive       0.80      0.82      0.81      3194\n",
            "\n",
            "    accuracy                           0.82     12020\n",
            "   macro avg       0.82      0.82      0.82     12020\n",
            "weighted avg       0.82      0.82      0.82     12020\n",
            "\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 500x500 with 1 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "## Linear SVM"
      ],
      "metadata": {
        "id": "TUxL-O8ADxH3"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "svm = LinearSVC(class_weight=\"balanced\")\n",
        "svm.fit(X_train_tfidf, y_train)\n",
        "\n",
        "y_pred = svm.predict(X_test_tfidf)\n",
        "evaluate_model(\"LinearSVC (TF-IDF, balanced)\", y_test, y_pred)\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 817
        },
        "id": "9onWYYnOD0fu",
        "outputId": "d4abb16b-078c-4459-b55e-942514c8c9dd"
      },
      "execution_count": 101,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "============================================================\n",
            "Model: LinearSVC (TF-IDF, balanced)\n",
            "Accuracy        : 0.8980\n",
            "Macro Precision : 0.8962\n",
            "Macro Recall    : 0.8951\n",
            "Macro F1-score  : 0.8955\n",
            "\n",
            "Classification Report:\n",
            "               precision    recall  f1-score   support\n",
            "\n",
            "  Irrelevant       0.88      0.88      0.88      2129\n",
            "    Negative       0.92      0.92      0.92      3675\n",
            "     Neutral       0.91      0.88      0.90      3022\n",
            "    Positive       0.87      0.90      0.88      3194\n",
            "\n",
            "    accuracy                           0.90     12020\n",
            "   macro avg       0.90      0.90      0.90     12020\n",
            "weighted avg       0.90      0.90      0.90     12020\n",
            "\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 500x500 with 1 Axes>"
            ],
            "image/png": "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\n"
          },
          "metadata": {}
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "## Random Forest + GridSearch (BoW)"
      ],
      "metadata": {
        "id": "IcXvIriQD5Gu"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "from sklearn.model_selection import RandomizedSearchCV\n",
        "from scipy.stats import randint\n",
        "\n",
        "rf = RandomForestClassifier(random_state=42, n_jobs=-1)\n",
        "\n",
        "param_dist = {\n",
        "    \"n_estimators\": randint(50, 201),\n",
        "    \"max_depth\": [None, 10, 20],\n",
        "    \"min_samples_split\": randint(2, 11),\n",
        "    \"min_samples_leaf\": randint(1, 6),\n",
        "    \"max_features\": [\"sqrt\", \"log2\"]\n",
        "}\n",
        "\n",
        "search = RandomizedSearchCV(\n",
        "    rf, param_distributions=param_dist,\n",
        "    n_iter=8, cv=2,\n",
        "    scoring=\"accuracy\",\n",
        "    n_jobs=-1,\n",
        "    random_state=42,\n",
        "    verbose=1\n",
        ")\n",
        "\n",
        "search.fit(X_train_bow, y_train)\n",
        "best_rf = search.best_estimator_\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "mVpBEBSjGlMX",
        "outputId": "e8c09ede-262c-4c1b-d1d7-615df2deecf5"
      },
      "execution_count": 102,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Fitting 2 folds for each of 8 candidates, totalling 16 fits\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "rf = RandomForestClassifier(random_state=42, n_jobs=-1)\n",
        "\n",
        "rf_grid = {\n",
        "    \"n_estimators\": [100],\n",
        "    \"max_depth\": [20],\n",
        "}\n",
        "\n",
        "rf_search = GridSearchCV(\n",
        "    rf, rf_grid,\n",
        "    cv=2,\n",
        "    scoring=\"accuracy\",\n",
        "    n_jobs=-1,\n",
        "    verbose=1\n",
        ")\n",
        "\n",
        "rf_search.fit(X_train_bow, y_train)\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 183
        },
        "id": "VAylfvfOD4qS",
        "outputId": "23de91b9-bbd6-48fc-b0fc-1f4d736f31dd"
      },
      "execution_count": 103,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Fitting 2 folds for each of 1 candidates, totalling 2 fits\n"
          ]
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "GridSearchCV(cv=2, estimator=RandomForestClassifier(n_jobs=-1, random_state=42),\n",
              "             n_jobs=-1, param_grid={'max_depth': [20], 'n_estimators': [100]},\n",
              "             scoring='accuracy', verbose=1)"
            ],
            "text/html": [
              "<style>#sk-container-id-3 {\n",
              "  /* Definition of color scheme common for light and dark mode */\n",
              "  --sklearn-color-text: #000;\n",
              "  --sklearn-color-text-muted: #666;\n",
              "  --sklearn-color-line: gray;\n",
              "  /* Definition of color scheme for unfitted estimators */\n",
              "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
              "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
              "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
              "  --sklearn-color-unfitted-level-3: chocolate;\n",
              "  /* Definition of color scheme for fitted estimators */\n",
              "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
              "  --sklearn-color-fitted-level-1: #d4ebff;\n",
              "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
              "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
              "\n",
              "  /* Specific color for light theme */\n",
              "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
              "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
              "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
              "  --sklearn-color-icon: #696969;\n",
              "\n",
              "  @media (prefers-color-scheme: dark) {\n",
              "    /* Redefinition of color scheme for dark theme */\n",
              "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
              "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
              "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
              "    --sklearn-color-icon: #878787;\n",
              "  }\n",
              "}\n",
              "\n",
              "#sk-container-id-3 {\n",
              "  color: var(--sklearn-color-text);\n",
              "}\n",
              "\n",
              "#sk-container-id-3 pre {\n",
              "  padding: 0;\n",
              "}\n",
              "\n",
              "#sk-container-id-3 input.sk-hidden--visually {\n",
              "  border: 0;\n",
              "  clip: rect(1px 1px 1px 1px);\n",
              "  clip: rect(1px, 1px, 1px, 1px);\n",
              "  height: 1px;\n",
              "  margin: -1px;\n",
              "  overflow: hidden;\n",
              "  padding: 0;\n",
              "  position: absolute;\n",
              "  width: 1px;\n",
              "}\n",
              "\n",
              "#sk-container-id-3 div.sk-dashed-wrapped {\n",
              "  border: 1px dashed var(--sklearn-color-line);\n",
              "  margin: 0 0.4em 0.5em 0.4em;\n",
              "  box-sizing: border-box;\n",
              "  padding-bottom: 0.4em;\n",
              "  background-color: var(--sklearn-color-background);\n",
              "}\n",
              "\n",
              "#sk-container-id-3 div.sk-container {\n",
              "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
              "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
              "     so we also need the `!important` here to be able to override the\n",
              "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
              "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
              "  display: inline-block !important;\n",
              "  position: relative;\n",
              "}\n",
              "\n",
              "#sk-container-id-3 div.sk-text-repr-fallback {\n",
              "  display: none;\n",
              "}\n",
              "\n",
              "div.sk-parallel-item,\n",
              "div.sk-serial,\n",
              "div.sk-item {\n",
              "  /* draw centered vertical line to link estimators */\n",
              "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
              "  background-size: 2px 100%;\n",
              "  background-repeat: no-repeat;\n",
              "  background-position: center center;\n",
              "}\n",
              "\n",
              "/* Parallel-specific style estimator block */\n",
              "\n",
              "#sk-container-id-3 div.sk-parallel-item::after {\n",
              "  content: \"\";\n",
              "  width: 100%;\n",
              "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
              "  flex-grow: 1;\n",
              "}\n",
              "\n",
              "#sk-container-id-3 div.sk-parallel {\n",
              "  display: flex;\n",
              "  align-items: stretch;\n",
              "  justify-content: center;\n",
              "  background-color: var(--sklearn-color-background);\n",
              "  position: relative;\n",
              "}\n",
              "\n",
              "#sk-container-id-3 div.sk-parallel-item {\n",
              "  display: flex;\n",
              "  flex-direction: column;\n",
              "}\n",
              "\n",
              "#sk-container-id-3 div.sk-parallel-item:first-child::after {\n",
              "  align-self: flex-end;\n",
              "  width: 50%;\n",
              "}\n",
              "\n",
              "#sk-container-id-3 div.sk-parallel-item:last-child::after {\n",
              "  align-self: flex-start;\n",
              "  width: 50%;\n",
              "}\n",
              "\n",
              "#sk-container-id-3 div.sk-parallel-item:only-child::after {\n",
              "  width: 0;\n",
              "}\n",
              "\n",
              "/* Serial-specific style estimator block */\n",
              "\n",
              "#sk-container-id-3 div.sk-serial {\n",
              "  display: flex;\n",
              "  flex-direction: column;\n",
              "  align-items: center;\n",
              "  background-color: var(--sklearn-color-background);\n",
              "  padding-right: 1em;\n",
              "  padding-left: 1em;\n",
              "}\n",
              "\n",
              "\n",
              "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
              "clickable and can be expanded/collapsed.\n",
              "- Pipeline and ColumnTransformer use this feature and define the default style\n",
              "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
              "*/\n",
              "\n",
              "/* Pipeline and ColumnTransformer style (default) */\n",
              "\n",
              "#sk-container-id-3 div.sk-toggleable {\n",
              "  /* Default theme specific background. It is overwritten whether we have a\n",
              "  specific estimator or a Pipeline/ColumnTransformer */\n",
              "  background-color: var(--sklearn-color-background);\n",
              "}\n",
              "\n",
              "/* Toggleable label */\n",
              "#sk-container-id-3 label.sk-toggleable__label {\n",
              "  cursor: pointer;\n",
              "  display: flex;\n",
              "  width: 100%;\n",
              "  margin-bottom: 0;\n",
              "  padding: 0.5em;\n",
              "  box-sizing: border-box;\n",
              "  text-align: center;\n",
              "  align-items: start;\n",
              "  justify-content: space-between;\n",
              "  gap: 0.5em;\n",
              "}\n",
              "\n",
              "#sk-container-id-3 label.sk-toggleable__label .caption {\n",
              "  font-size: 0.6rem;\n",
              "  font-weight: lighter;\n",
              "  color: var(--sklearn-color-text-muted);\n",
              "}\n",
              "\n",
              "#sk-container-id-3 label.sk-toggleable__label-arrow:before {\n",
              "  /* Arrow on the left of the label */\n",
              "  content: \"▸\";\n",
              "  float: left;\n",
              "  margin-right: 0.25em;\n",
              "  color: var(--sklearn-color-icon);\n",
              "}\n",
              "\n",
              "#sk-container-id-3 label.sk-toggleable__label-arrow:hover:before {\n",
              "  color: var(--sklearn-color-text);\n",
              "}\n",
              "\n",
              "/* Toggleable content - dropdown */\n",
              "\n",
              "#sk-container-id-3 div.sk-toggleable__content {\n",
              "  max-height: 0;\n",
              "  max-width: 0;\n",
              "  overflow: hidden;\n",
              "  text-align: left;\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-0);\n",
              "}\n",
              "\n",
              "#sk-container-id-3 div.sk-toggleable__content.fitted {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-0);\n",
              "}\n",
              "\n",
              "#sk-container-id-3 div.sk-toggleable__content pre {\n",
              "  margin: 0.2em;\n",
              "  border-radius: 0.25em;\n",
              "  color: var(--sklearn-color-text);\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-0);\n",
              "}\n",
              "\n",
              "#sk-container-id-3 div.sk-toggleable__content.fitted pre {\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-0);\n",
              "}\n",
              "\n",
              "#sk-container-id-3 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
              "  /* Expand drop-down */\n",
              "  max-height: 200px;\n",
              "  max-width: 100%;\n",
              "  overflow: auto;\n",
              "}\n",
              "\n",
              "#sk-container-id-3 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
              "  content: \"▾\";\n",
              "}\n",
              "\n",
              "/* Pipeline/ColumnTransformer-specific style */\n",
              "\n",
              "#sk-container-id-3 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
              "  color: var(--sklearn-color-text);\n",
              "  background-color: var(--sklearn-color-unfitted-level-2);\n",
              "}\n",
              "\n",
              "#sk-container-id-3 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
              "  background-color: var(--sklearn-color-fitted-level-2);\n",
              "}\n",
              "\n",
              "/* Estimator-specific style */\n",
              "\n",
              "/* Colorize estimator box */\n",
              "#sk-container-id-3 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-2);\n",
              "}\n",
              "\n",
              "#sk-container-id-3 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-2);\n",
              "}\n",
              "\n",
              "#sk-container-id-3 div.sk-label label.sk-toggleable__label,\n",
              "#sk-container-id-3 div.sk-label label {\n",
              "  /* The background is the default theme color */\n",
              "  color: var(--sklearn-color-text-on-default-background);\n",
              "}\n",
              "\n",
              "/* On hover, darken the color of the background */\n",
              "#sk-container-id-3 div.sk-label:hover label.sk-toggleable__label {\n",
              "  color: var(--sklearn-color-text);\n",
              "  background-color: var(--sklearn-color-unfitted-level-2);\n",
              "}\n",
              "\n",
              "/* Label box, darken color on hover, fitted */\n",
              "#sk-container-id-3 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
              "  color: var(--sklearn-color-text);\n",
              "  background-color: var(--sklearn-color-fitted-level-2);\n",
              "}\n",
              "\n",
              "/* Estimator label */\n",
              "\n",
              "#sk-container-id-3 div.sk-label label {\n",
              "  font-family: monospace;\n",
              "  font-weight: bold;\n",
              "  display: inline-block;\n",
              "  line-height: 1.2em;\n",
              "}\n",
              "\n",
              "#sk-container-id-3 div.sk-label-container {\n",
              "  text-align: center;\n",
              "}\n",
              "\n",
              "/* Estimator-specific */\n",
              "#sk-container-id-3 div.sk-estimator {\n",
              "  font-family: monospace;\n",
              "  border: 1px dotted var(--sklearn-color-border-box);\n",
              "  border-radius: 0.25em;\n",
              "  box-sizing: border-box;\n",
              "  margin-bottom: 0.5em;\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-0);\n",
              "}\n",
              "\n",
              "#sk-container-id-3 div.sk-estimator.fitted {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-0);\n",
              "}\n",
              "\n",
              "/* on hover */\n",
              "#sk-container-id-3 div.sk-estimator:hover {\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-2);\n",
              "}\n",
              "\n",
              "#sk-container-id-3 div.sk-estimator.fitted:hover {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-2);\n",
              "}\n",
              "\n",
              "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
              "\n",
              "/* Common style for \"i\" and \"?\" */\n",
              "\n",
              ".sk-estimator-doc-link,\n",
              "a:link.sk-estimator-doc-link,\n",
              "a:visited.sk-estimator-doc-link {\n",
              "  float: right;\n",
              "  font-size: smaller;\n",
              "  line-height: 1em;\n",
              "  font-family: monospace;\n",
              "  background-color: var(--sklearn-color-background);\n",
              "  border-radius: 1em;\n",
              "  height: 1em;\n",
              "  width: 1em;\n",
              "  text-decoration: none !important;\n",
              "  margin-left: 0.5em;\n",
              "  text-align: center;\n",
              "  /* unfitted */\n",
              "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
              "  color: var(--sklearn-color-unfitted-level-1);\n",
              "}\n",
              "\n",
              ".sk-estimator-doc-link.fitted,\n",
              "a:link.sk-estimator-doc-link.fitted,\n",
              "a:visited.sk-estimator-doc-link.fitted {\n",
              "  /* fitted */\n",
              "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
              "  color: var(--sklearn-color-fitted-level-1);\n",
              "}\n",
              "\n",
              "/* On hover */\n",
              "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
              ".sk-estimator-doc-link:hover,\n",
              "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
              ".sk-estimator-doc-link:hover {\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-3);\n",
              "  color: var(--sklearn-color-background);\n",
              "  text-decoration: none;\n",
              "}\n",
              "\n",
              "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
              ".sk-estimator-doc-link.fitted:hover,\n",
              "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
              ".sk-estimator-doc-link.fitted:hover {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-3);\n",
              "  color: var(--sklearn-color-background);\n",
              "  text-decoration: none;\n",
              "}\n",
              "\n",
              "/* Span, style for the box shown on hovering the info icon */\n",
              ".sk-estimator-doc-link span {\n",
              "  display: none;\n",
              "  z-index: 9999;\n",
              "  position: relative;\n",
              "  font-weight: normal;\n",
              "  right: .2ex;\n",
              "  padding: .5ex;\n",
              "  margin: .5ex;\n",
              "  width: min-content;\n",
              "  min-width: 20ex;\n",
              "  max-width: 50ex;\n",
              "  color: var(--sklearn-color-text);\n",
              "  box-shadow: 2pt 2pt 4pt #999;\n",
              "  /* unfitted */\n",
              "  background: var(--sklearn-color-unfitted-level-0);\n",
              "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
              "}\n",
              "\n",
              ".sk-estimator-doc-link.fitted span {\n",
              "  /* fitted */\n",
              "  background: var(--sklearn-color-fitted-level-0);\n",
              "  border: var(--sklearn-color-fitted-level-3);\n",
              "}\n",
              "\n",
              ".sk-estimator-doc-link:hover span {\n",
              "  display: block;\n",
              "}\n",
              "\n",
              "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
              "\n",
              "#sk-container-id-3 a.estimator_doc_link {\n",
              "  float: right;\n",
              "  font-size: 1rem;\n",
              "  line-height: 1em;\n",
              "  font-family: monospace;\n",
              "  background-color: var(--sklearn-color-background);\n",
              "  border-radius: 1rem;\n",
              "  height: 1rem;\n",
              "  width: 1rem;\n",
              "  text-decoration: none;\n",
              "  /* unfitted */\n",
              "  color: var(--sklearn-color-unfitted-level-1);\n",
              "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
              "}\n",
              "\n",
              "#sk-container-id-3 a.estimator_doc_link.fitted {\n",
              "  /* fitted */\n",
              "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
              "  color: var(--sklearn-color-fitted-level-1);\n",
              "}\n",
              "\n",
              "/* On hover */\n",
              "#sk-container-id-3 a.estimator_doc_link:hover {\n",
              "  /* unfitted */\n",
              "  background-color: var(--sklearn-color-unfitted-level-3);\n",
              "  color: var(--sklearn-color-background);\n",
              "  text-decoration: none;\n",
              "}\n",
              "\n",
              "#sk-container-id-3 a.estimator_doc_link.fitted:hover {\n",
              "  /* fitted */\n",
              "  background-color: var(--sklearn-color-fitted-level-3);\n",
              "}\n",
              "</style><div id=\"sk-container-id-3\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>GridSearchCV(cv=2, estimator=RandomForestClassifier(n_jobs=-1, random_state=42),\n",
              "             n_jobs=-1, param_grid={&#x27;max_depth&#x27;: [20], &#x27;n_estimators&#x27;: [100]},\n",
              "             scoring=&#x27;accuracy&#x27;, verbose=1)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item sk-dashed-wrapped\"><div class=\"sk-label-container\"><div class=\"sk-label fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-7\" type=\"checkbox\" ><label for=\"sk-estimator-id-7\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow\"><div><div>GridSearchCV</div></div><div><a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.6/modules/generated/sklearn.model_selection.GridSearchCV.html\">?<span>Documentation for GridSearchCV</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></div></label><div class=\"sk-toggleable__content fitted\"><pre>GridSearchCV(cv=2, estimator=RandomForestClassifier(n_jobs=-1, random_state=42),\n",
              "             n_jobs=-1, param_grid={&#x27;max_depth&#x27;: [20], &#x27;n_estimators&#x27;: [100]},\n",
              "             scoring=&#x27;accuracy&#x27;, verbose=1)</pre></div> </div></div><div class=\"sk-parallel\"><div class=\"sk-parallel-item\"><div class=\"sk-item\"><div class=\"sk-label-container\"><div class=\"sk-label fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-8\" type=\"checkbox\" ><label for=\"sk-estimator-id-8\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow\"><div><div>best_estimator_: RandomForestClassifier</div></div></label><div class=\"sk-toggleable__content fitted\"><pre>RandomForestClassifier(max_depth=20, n_jobs=-1, random_state=42)</pre></div> </div></div><div class=\"sk-serial\"><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-9\" type=\"checkbox\" ><label for=\"sk-estimator-id-9\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow\"><div><div>RandomForestClassifier</div></div><div><a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.6/modules/generated/sklearn.ensemble.RandomForestClassifier.html\">?<span>Documentation for RandomForestClassifier</span></a></div></label><div class=\"sk-toggleable__content fitted\"><pre>RandomForestClassifier(max_depth=20, n_jobs=-1, random_state=42)</pre></div> </div></div></div></div></div></div></div></div></div>"
            ]
          },
          "metadata": {},
          "execution_count": 103
        }
      ]
    },
    {
      "cell_type": "markdown",
      "source": [
        "## Decision Tree + GridSearch (TF-IDF)"
      ],
      "metadata": {
        "id": "-Pg6RRI6FPiW"
      }
    },
    {
      "cell_type": "code",
      "source": [
        "dt = DecisionTreeClassifier(random_state=42)\n",
        "\n",
        "dt_grid = {\n",
        "    \"criterion\": [\"gini\", \"entropy\"],\n",
        "    \"max_depth\": [None, 10, 20]\n",
        "}\n",
        "\n",
        "dt_search = GridSearchCV(\n",
        "    dt, dt_grid,\n",
        "    cv=2, # Changed from cv=1 to cv=2 to resolve InvalidParameterError\n",
        "    scoring=\"accuracy\",\n",
        "    n_jobs=-1,\n",
        "    verbose=1\n",
        ")\n",
        "\n",
        "dt_search.fit(X_train_tfidf, y_train)\n",
        "\n",
        "best_dt = dt_search.best_estimator_\n",
        "y_pred = best_dt.predict(X_test_tfidf)\n",
        "\n",
        "evaluate_model(\"Decision Tree (TF-IDF + GridSearch)\", y_test, y_pred)\n",
        "print(\"Best DT Params:\", dt_search.best_params_)"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 852
        },
        "id": "x4LAWF2PFR5f",
        "outputId": "ca3c7a1d-c384-4c09-b85e-091fb5a085ce"
      },
      "execution_count": 104,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Fitting 2 folds for each of 6 candidates, totalling 12 fits\n",
            "============================================================\n",
            "Model: Decision Tree (TF-IDF + GridSearch)\n",
            "Accuracy        : 0.7789\n",
            "Macro Precision : 0.7758\n",
            "Macro Recall    : 0.7689\n",
            "Macro F1-score  : 0.7718\n",
            "\n",
            "Classification Report:\n",
            "               precision    recall  f1-score   support\n",
            "\n",
            "  Irrelevant       0.75      0.68      0.71      2129\n",
            "    Negative       0.79      0.83      0.81      3675\n",
            "     Neutral       0.80      0.78      0.79      3022\n",
            "    Positive       0.76      0.78      0.77      3194\n",
            "\n",
            "    accuracy                           0.78     12020\n",
            "   macro avg       0.78      0.77      0.77     12020\n",
            "weighted avg       0.78      0.78      0.78     12020\n",
            "\n"
          ]
        },
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 500x500 with 1 Axes>"
            ],
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAekAAAHWCAYAAABT4nHvAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAdrBJREFUeJzt3XdUFFcbBvBnaUsvFsSKNAuKGruiYseuMfaGNWpi78YYEXtvib0rJnZj770X7AUBUSyIiHSk7v3+4GPjuqBgYUZ5fudwdO/cmXlnd2bfnTt37iiEEAJEREQkOzpSB0BERETpY5ImIiKSKSZpIiIimWKSJiIikikmaSIiIplikiYiIpIpJmkiIiKZYpImIiKSKSZpIiIimfrmk7Sfnx8aNmwICwsLKBQK7Nq164su//Hjx1AoFFi7du0XXe63rHbt2qhdu7bUYche0aJF0b179yzN4+npCYVC8XUC+g48ffoUhoaGOHfunNSh0Du6d++OokWLfrTe9/R9mrYts2fP/mjdMWPGoEqVKp+0ni+SpAMCAtC3b1/Y29vD0NAQ5ubmcHV1xYIFC/D27dsvsYoMeXh44Pbt25gyZQo2bNiAihUrftX1Zafu3btDoVDA3Nw83ffRz88PCoUi0zvK+168eAFPT0/cuHHjC0QrL2kHUNqfvr4+8uTJg+rVq+O3335DUFCQ1CHKRtp+9rG/rP7g+Bq8vLxQpUoVuLq64uTJk5mKO+1Hz9q1azOcPmbMmI+uW6FQYMCAAerXn7KPfSjmDh06fLk3KpMCAwMxYMAAFCtWDMbGxjA2NoazszN+/fVX3Lp1K9viOHv2LBo3boyCBQvC0NAQRYoUQfPmzbFp06Zsi+FrGjJkCG7evIndu3dneV69z135vn370LZtWyiVSnTr1g2lS5dGYmIizp49i5EjR+Lu3btYvnz5564mXW/fvsWFCxcwbtw4jYPnS7K1tcXbt2+hr6//VZb/MXp6eoiLi8OePXvQrl07jWne3t4wNDREfHz8Jy37xYsXmDhxIooWLYpy5cpler7Dhw9/0vqk0LFjRzRp0gQqlQrh4eG4cuUK5s+fjwULFmDVqlVf9YvR19cXOjpZ+x38+++/ZyphfEl9+/ZF/fr11a8DAwPxxx9/4Oeff0bNmjXV5Q4ODtka1/tCQ0Oxbt06rFu3DgBQsmRJbNiwQaPO2LFjYWpqinHjxmW4HC8vL9jZ2WmUlS5d+pPj+pR9bNCgQahUqZJGWWbORL+kvXv3on379tDT00Pnzp1RtmxZ6Ojo4MGDB9ixYweWLFmCwMBA2NrafnRZK1asgEql+qQ4tm7divbt26NcuXIYPHgwrKysEBgYiNOnT2PFihXo1KnTJy1XTmxsbNCyZUvMnj0bLVq0yNrM4jM8evRImJqaihIlSogXL15oTffz8xPz58//nFV80JMnTwQAMWvWrK+2Dil5eHgIExMT0bBhQ9GqVSut6U5OTuKnn3765PfgypUrAoBYs2ZNpurHxsZmeR1SCQwMzPB9efz4sShWrJgwMDAQN27ckCA6ecvsfhETE5M9Af3f3LlzhZGRkYiOjs6wTqlSpYSbm1u609asWSMAiCtXrnzS+gGIX3/9Vf36U/axEydOCABi69atnxTD+2xtbcWECROyPJ+/v78wMTERJUuWTPe7OykpSSxYsEAEBQV9cDlZ3QfS3rN39y1nZ2dRqlQpkZCQoFU/JCQkS8v/EjL7Pfehzz8927ZtEwqFQgQEBGQpns9q7p45cyZiYmKwatUq5M+fX2u6o6MjBg8erH6dnJyMSZMmwcHBAUqlEkWLFsVvv/2GhIQEjfmKFi2KZs2a4ezZs6hcuTIMDQ1hb2+P9evXq+t4enqqf+GNHDkSCoVC/Us0o+sj6V3vO3LkCGrUqAFLS0uYmpqiePHi+O2339TTM7qGcvz4cdSsWRMmJiawtLREy5Ytcf/+/XTX5+/vj+7du8PS0hIWFhbo0aMH4uLiMn5j39OpUyccOHAAERER6rIrV67Az88v3V+Zb968wYgRI+Di4gJTU1OYm5ujcePGuHnzprrOyZMn1b/ke/TooW5yS9vO2rVro3Tp0rh27Rpq1aoFY2Nj9fvy/jVpDw8PGBoaam2/u7s7rKys8OLFi0xva3awtbXF2rVrkZiYiJkzZ2pMi4iIwJAhQ1C4cGEolUo4OjpixowZWmcJKpUKCxYsgIuLCwwNDZE3b140atQIV69eVdd5/5p0UlISJk6cCCcnJxgaGiJ37tyoUaMGjhw5oq6T3j76JY+bT5XWVHzq1Cn88ssvsLa2RqFChdTTDxw4oD4ezMzM0LRpU9y9e1drOQ8ePECbNm2QK1cuGBoaomLFipluAty1axeqVKkCU1PTz96er+1D+5gczJw5E7GxsVizZk263916enoYNGgQChcurC7r3r07TE1NERAQgCZNmsDMzAydO3dWT3v/OzciIgLdu3eHhYUFLC0t4eHhofEdliYgIACVKlWCgYGB1jRra2uN1yqVCvPnz0epUqVgaGiIfPnyoW/fvggPD9eo9++//6Jp06YoUKAAlEolHBwcMGnSJKSkpGjU+9D3XHx8PDw9PVGsWDEYGhoif/78aN26NQICArTiXL58ufr4rFSpEq5cuaJVJ6216t9//9Wa9iGf1dy9Z88e2Nvbo3r16pmq37t3b6xbtw5t2rTB8OHDcenSJUybNg3379/Hzp07Ner6+/ujTZs26NWrFzw8PLB69Wp0794dFSpUQKlSpdC6dWtYWlpi6NCh6uamrB68d+/eRbNmzVCmTBl4eXlBqVTC39//o51Sjh49isaNG8Pe3h6enp54+/YtFi1aBFdXV/j4+GjtrO3atYOdnR2mTZsGHx8frFy5EtbW1pgxY0am4mzdujX69euHHTt2oGfPngCATZs2oUSJEihfvrxW/UePHmHXrl1o27Yt7OzsEBISgmXLlsHNzQ337t1DgQIFULJkSXh5eWk1a777WYaFhaFx48bo0KEDunTpgnz58qUb34IFC3D8+HF4eHjgwoUL0NXVxbJly3D48GFs2LABBQoUyNR2Zqdq1arBwcFBI0HGxcXBzc0Nz58/R9++fVGkSBGcP38eY8eORXBwMObPn6+u26tXL6xduxaNGzdG7969kZycjDNnzuDixYsZ9ovw9PTEtGnT0Lt3b1SuXBlRUVG4evUqfHx80KBBgwxj/ZLHzef65ZdfkDdvXvzxxx+IjY0FAGzYsAEeHh5wd3fHjBkzEBcXhyVLlqBGjRq4fv26+ni4e/cuXF1dUbBgQYwZMwYmJibYsmULWrVqhe3bt+PHH3/McL1JSUm4cuUK+vfv/9nbEBkZidevX2uU5cmT57OX+7709rE00dHRWjHkypUry5dHPtXevXvh6OiY5c5MycnJcHd3R40aNTB79mwYGxunW08IgZYtW+Ls2bPo168fSpYsiZ07d8LDw0Orrq2tLY4dO4Znz55p/PBLT9++fbF27Vr06NEDgwYNQmBgIP78809cv34d586dU1+WXLt2LUxNTTFs2DCYmpri+PHj+OOPPxAVFYVZs2ZpLDO977mUlBQ0a9YMx44dQ4cOHTB48GBER0fjyJEjuHPnjsaln02bNiE6Ohp9+/aFQqHAzJkz0bp1azx69EjjMqmFhQUcHBxw7tw5DB06NNPv+Sc3d0dGRgoAomXLlpmqf+PGDQFA9O7dW6N8xIgRAoA4fvy4uszW1lYAEKdPn1aXvXr1SiiVSjF8+HB1WUbNDR4eHsLW1lYrhgkTJoh3N3nevHkCgAgNDc0w7vSaZ8qVKyesra1FWFiYuuzmzZtCR0dHdOvWTWt9PXv21Fjmjz/+KHLnzp3hOt/dDhMTEyGEEG3atBH16tUTQgiRkpIibGxsxMSJE9N9D+Lj40VKSorWdiiVSuHl5aUu+1CzppubmwAgli5dmu6095sUDx06JACIyZMnqy+DpNdEn10y0xTVsmVLAUBERkYKIYSYNGmSMDExEQ8fPtSoN2bMGKGrq6tu+jt+/LgAIAYNGqS1TJVKpf6/ra2t8PDwUL8uW7asaNq06Qfjfn8f/RrHzcekt1+kNRXXqFFDJCcnq8ujo6OFpaWl6NOnj8YyXr58KSwsLDTK69WrJ1xcXER8fLy6TKVSierVqwsnJ6cPxuTv7y8AiEWLFn2wXmaau9P7ywxkobk7zfv7WFpzd3p/gYGBmYrjXZ/S3J323Z3e8RkeHi5CQ0PVf3FxceppHh4eAoAYM2aM1nzvf+fu2rVLABAzZ85UlyUnJ4uaNWtq7VurVq0SAISBgYGoU6eOGD9+vDhz5ozWd9iZM2cEAOHt7a1RfvDgQa3yd+NO07dvX2FsbKyx/2X0Pbd69WoBQMydO1drOWnHeNrnnzt3bvHmzRv19H///VcAEHv27NGat2HDhqJkyZJa5R/yyT/boqKiAABmZmaZqr9//34AwLBhwzTKhw8fDiC1A9q7nJ2dNTqt5M2bF8WLF8ejR48+NWQtlpaWAFKbHzLb6SE4OBg3btxA9+7dkStXLnV5mTJl0KBBA/V2vqtfv34ar2vWrImwsDD1e5gZnTp1wsmTJ/Hy5UscP34cL1++zLBDhVKpVP8iT0lJQVhYmLop38fHJ9PrVCqV6NGjR6bqNmzYEH379oWXlxdat24NQ0NDLFu2LNPrkkJay0t0dDSA1A4sNWvWhJWVFV6/fq3+q1+/PlJSUnD69GkAwPbt26FQKDBhwgStZX7o9ilLS0vcvXsXfn5+mY5RbsdNnz59oKurq3595MgRREREoGPHjhrvma6uLqpUqYITJ04ASL0Ec/z4cbRr1059Fvn69WuEhYXB3d0dfn5+eP78eYbrDQsLAwBYWVl99jb89ddfOHLkiMbf1/L+Ppbmjz/+0IrBxsbmg8tKSEjQeI9fv34NlUqFuLg4rfIPSfveSa/lsXbt2sibN6/676+//tKqk5nWjP3790NPT0+jrq6uLgYOHKhVt2fPnjh48CBq166Ns2fPYtKkSahZsyacnJxw/vx5db2tW7fCwsICDRo00NjWChUqwNTUVL2vAYCRkZH6/2n7W82aNREXF4cHDx5orD+977nt27cjT5486cb7/jHevn17jf0y7fhL75hL+27Jik9u7jY3NwegvfNl5MmTJ9DR0YGjo6NGuY2NDSwtLfHkyRON8iJFimgtw8rKSuvaw+do3749Vq5cid69e2PMmDGoV68eWrdujTZt2mTY7JQWZ/HixbWmlSxZEocOHUJsbCxMTEzU5e9vS9oHGh4ern4fPybtGtDmzZtx48YNVKpUCY6Ojnj8+LFW3bTrpYsXL0ZgYKDGdZjcuXNnan0AULBgwXSvE2Vk9uzZ+Pfff3Hjxg1s2rRJ63pSekJDQ7WuE2VW3rx5NRJGVsXExAD474emn58fbt26hbx586Zb/9WrVwBSr6EVKFBA40daZnh5eaFly5YoVqwYSpcujUaNGqFr164oU6ZMhvPI7bh5v1d02g+OunXrpls/bf/29/eHEALjx4/H+PHj06376tUrFCxY8IPrF0JkNWQtlStXzvCSxJs3b5CYmKh+bWRkBAsLi09e1/v7WBoXFxeNHvWZ8ffff6f7o3nWrFlaTbgfep/SYkmL7V3Lli1DdHQ0QkJC0KVLF63penp6H22SBlL32/z582v9EEjvexNI7b/i7u6OuLg4XLt2DZs3b8bSpUvRrFkzPHjwANbW1vDz80NkZGSG3ytpxyeQemnl999/x/Hjx7VOhiIjIzVep/c9FxAQgOLFi0NP7+Mp8kPf7+8TQmR5HITPStIFChTAnTt3sjRfZgPM6Ms3MwdpRut4PxkYGRnh9OnTOHHiBPbt24eDBw9i8+bNqFu3Lg4fPvxZCeBdn7MtaZRKJVq3bo1169bh0aNH8PT0zLDu1KlTMX78ePTs2ROTJk1SX+saMmRIlm6TePfXaGZcv35dfaDcvn0bHTt2/Og8lSpV0ko0mRUYGPhZt63cuXMH1tbW6kSiUqnQoEEDjBo1Kt36xYoV++R1AUCtWrUQEBCAf//9F4cPH8bKlSsxb948LF26FL179/7gvNlx3GTG+/tE2v60YcOGdM8E077k0uqNGDEC7u7u6S77/R8i70r7cfklf6Snp3Xr1jh16pT6tYeHx2cNvPH+PvY53N3dtc76u3TpgoYNG6Jbt26ZXo6FhQXy58+f7nd32jXq9H78A5qtdF+DsbExatasiZo1ayJPnjyYOHEiDhw4AA8PD6hUKlhbW8Pb2zvdedN+XEdERMDNzQ3m5ubw8vKCg4MDDA0N4ePjg9GjR2t9B2b1e+59WTnmwsPDs9z/4bM6jjVr1gzLly/HhQsXUK1atQ/WtbW1hUqlgp+fH0qWLKkuDwkJQURERKbuxcssKyurdHsRppcMdHR0UK9ePdSrVw9z587F1KlTMW7cOJw4cSLdX7ppcfr6+mpNe/DgAfLkyaNxFv0lderUCatXr4aOjs4H7+/dtm0b6tSpg1WrVmmUR0REaOwgX3Jkq9jYWPTo0QPOzs6oXr06Zs6ciR9//FHrXtD3eXt7f/KANx9rHvyQCxcuICAgQONswcHBATExMR89w3FwcMChQ4fw5s2bLJ9N58qVCz169ECPHj0QExODWrVqwdPTM8MknZ3HzadI60BjbW39wffN3t4eAKCvr5/lM0gg9WzFyMgIgYGBnxZoJs2ZM0fjh8DndHpMbx/7HPnz59fqiZ3Wgz+r72nTpk2xcuVKXL58GZUrV/4i8b0rrTNYTEyMxtl0et+bGUlr7QgODgaQuq8dPXoUrq6uH0ysJ0+eRFhYGHbs2IFatWqpy7Oy7zg4OODSpUtISkr6omNkBAYGomzZslma57N+Eo0aNQomJibo3bs3QkJCtKYHBARgwYIFAFKbawFo9JAFgLlz5wJI3Wm+FAcHB0RGRmqMmBMcHKzVE/bNmzda86YN6vH+7S1p8ufPj3LlymHdunUaPwTu3LmDw4cPq7fza6hTpw4mTZqEP//884MJSldXV+tX3NatW7Wu+aX9mEjvB01WjR49GkFBQVi3bh3mzp2LokWLwsPDI8P3MY2rqyvq16//SX+GhoafFOuTJ0/QvXt3GBgYYOTIkerydu3a4cKFCzh06JDWPBEREUhOTgYA/PTTTxBCYOLEiVr1PnTGmnZdNY2pqSkcHR0/+B5l53HzKdzd3WFubo6pU6ciKSlJa3poaCiA1CReu3ZtLFu2TP2lm169jOjr66NixYoat7h9DRUqVNDYx5ydnT9pORntY3IxatQoGBsbo2fPnul+d39uy0uTJk2QnJyMJUuWqMtSUlKwaNEirbrHjh1Ldxlp/THSmsjbtWuHlJQUTJo0SatucnKy+nss7cz23W1ITEzE4sWLMx3/Tz/9hNevX+PPP//Umvap701kZCQCAgIyfTdUms86k3ZwcMCmTZvQvn17lCxZUmPEsfPnz2Pr1q3q+0TLli0LDw8PLF++XN0ccfnyZaxbtw6tWrVCnTp1PicUDR06dMDo0aPx448/YtCgQepbQooVK6bRccrLywunT59G06ZNYWtri1evXmHx4sUoVKgQatSokeHyZ82ahcaNG6NatWro1auX+hYsCwuLDzZDfy4dHR38/vvvH63XrFkzeHl5oUePHqhevTpu374Nb29v9dlMGgcHB1haWmLp0qUwMzODiYkJqlSponXd8WOOHz+OxYsXY8KECepbwtasWYPatWtj/Pjxkt4n6uPjg40bN0KlUiEiIgJXrlxRd/zasGGDxvXgkSNHYvfu3WjWrJn6tqXY2Fjcvn0b27Ztw+PHj5EnTx7UqVMHXbt2xcKFC+Hn54dGjRpBpVLhzJkzqFOnToaj3zk7O6N27dqoUKECcuXKhatXr2Lbtm0fHC0vO4+bT2Fubo4lS5aga9euKF++PDp06IC8efMiKCgI+/btg6urq/qL7q+//kKNGjXg4uKCPn36wN7eHiEhIbhw4QKePXumcR9/elq2bIlx48YhKirqizQffylZ2cfkwsnJCZs2bULHjh1RvHhx9YhjQggEBgZi06ZN0NHRydT15/Q0b94crq6uGDNmDB4/fgxnZ2fs2LFD63owkPq52tnZoXnz5nBwcEBsbCyOHj2KPXv2oFKlSmjevDkAwM3NDX379sW0adNw48YNNGzYEPr6+vDz88PWrVuxYMECtGnTBtWrV4eVlRU8PDwwaNAg9eeQleTarVs3rF+/HsOGDcPly5dRs2ZNdVy//PILWrZsmeX35OjRo+pb07IkS33BM/Dw4UPRp08fUbRoUWFgYCDMzMyEq6urWLRokUZ396SkJDFx4kRhZ2cn9PX1ReHChcXYsWM16giReltBereqvH/rz4dugTh8+LAoXbq0MDAwEMWLFxcbN27Uur3l2LFjomXLlqJAgQLCwMBAFChQQHTs2FHjFpz0bsESQoijR48KV1dXYWRkJMzNzUXz5s3FvXv3NOqkre/9W7zSbgX52C0X796ClZGMbsEaPny4yJ8/vzAyMhKurq7iwoUL6d469e+//wpnZ2ehp6ensZ1ubm6iVKlS6a7z3eVERUUJW1tbUb58eZGUlKRRb+jQoUJHR0dcuHDhg9vwNaS9L2l/enp6IleuXKJKlSpi7Nix4smTJ+nOFx0dLcaOHSscHR2FgYGByJMnj6hevbqYPXu2SExMVNdLTk4Ws2bNEiVKlBAGBgYib968onHjxuLatWvqOu/fgjV58mRRuXJlYWlpKYyMjESJEiXElClTNJb7/j4qxJc/bj7mQ7dgZTRa14kTJ4S7u7uwsLAQhoaGwsHBQXTv3l1cvXpVo15AQIDo1q2bsLGxEfr6+qJgwYKiWbNmYtu2bR+NKyQkROjp6YkNGzZkWEeKEceyso/JZcSxNP7+/qJ///7C0dFRGBoaqvfLfv36aY3G96Hvo/Ruew0LCxNdu3YV5ubmwsLCQnTt2lVcv35da9/6+++/RYcOHYSDg4MwMjIShoaGwtnZWYwbN05ERUVprWv58uWiQoUKwsjISJiZmQkXFxcxatQojZHTzp07J6pWrSqMjIxEgQIFxKhRo9S3iZ44cUJd70Pfc3FxcWLcuHHq487Gxka0adNGPWLYh/IPAK3PpX379qJGjRrprutDFP9fIBGR7PXq1QsPHz7EmTNnpA6FKNNevnwJOzs7/PPPP1k+k2aSJqJvRlBQEIoVK4Zjx47B1dVV6nCIMmXMmDE4fvw4Ll++nOV5maSJiIhkKnsGiiUiIqIsY5ImIiKSKSZpIiIimWKSJiIikikmaSIiIpn6rBHH5Gp/vozHtabs0SEm67ca0Jf1NunDQ7LS12dq8HkPb6DPFx7jL3UIn4Vn0kRERDLFJE1ERCRTTNJEREQyxSRNREQkU0zSREREMsUkTUREJFNM0kRERDLFJE1ERCRTTNJEREQyxSRNREQkU0zSREREMsUkTUREJFNM0kRERDLFJE1ERCRTTNJEREQyxSRNREQkU0zSREREMiWLJN2zZ09ER0drlcfGxqJnz54SRERERCQ9WSTpdevW4e3bt1rlb9++xfr16yWIiIiISHp6Uq48KioKQggIIRAdHQ1DQ0P1tJSUFOzfvx/W1tYSRkhERCQdSZO0paUlFAoFFAoFihUrpjVdoVBg4sSJEkRGREQkPUmT9IkTJyCEQN26dbF9+3bkypVLPc3AwAC2trYoUKCAhBESERFJR9Ik7ebmBgAIDAxE4cKFoaMji0vkREREsiBpkk5ja2uLiIgIXL58Ga9evYJKpdKY3q1bN4kiIyIiko4skvSePXvQuXNnxMTEwNzcHAqFQj1NoVAwSRMRUY4ki/bl4cOHo2fPnoiJiUFERATCw8PVf2/evJE6PCIiIknIIkk/f/4cgwYNgrGxsdShEBERyYYskrS7uzuuXr0qdRhERESyIotr0k2bNsXIkSNx7949uLi4QF9fX2N6ixYtJIqMiIhIOgohhJA6iA/deqVQKJCSkpKl5e3P1+FzQ6LP1CHmstQh5HhvkxKkDiHHMzUwkjqEHC88xl/qED6LLM6k37/lioiIiGRyTZqIiIi0yeJMGkh9LOWpU6cQFBSExMREjWmDBg2SKCoiIiLpyCJJX79+HU2aNEFcXBxiY2ORK1cuvH79GsbGxrC2tmaSJiKiHEkWzd1Dhw5F8+bNER4eDiMjI1y8eBFPnjxBhQoVMHv2bKnDIyIikoQskvSNGzcwfPhw6OjoQFdXFwkJCShcuDBmzpyJ3377TerwiIiIJCGLJK2vr6++Dcva2hpBQUEAAAsLCzx9+lTK0IiIiCQji2vSP/zwA65cuQInJye4ubnhjz/+wOvXr7FhwwaULl1a6vCIiIgkIYsz6alTpyJ//vwAgClTpsDKygr9+/dHaGgoli9fLnF0RERE0pDFmXTFihXV/7e2tsbBgwcljIaIiEgeZHEmPXnyZAQGBkodBhERkazIIklv3boVjo6OqF69OhYvXozXr19LHdJns6paAhU2jETdm4vRJOQf5GtcMcO6pWf2QpOQf1D058Ya5bWvLEKTkH80/uwHaj9sxK5/M7idnwf3oA2oe2MxHIa0+tKb880bNqI/Tp7ehecvbyHg8WVs+mcpHJ3sMqy/fedqRMU+QtNmDdRluXJZYseuNfD1v4DQN/dxz/csZs/xhJmZaXZswnehRo0q2LlzLZ48voakxOdo0cJdq06JEo7YsWMNXofeR0S4Hy6c34fChQuku7w9uzdkuBzSNnR4Pxw7tQNBwTfwMPASNv69JN3joFLlH/Dvvg14FnILT17cwL5Dm2BoqNSo09C9No6c2IYXoXcQ+PQaNv69JLs2I0eRRXP3zZs3cffuXXh7e2P27NkYMmQIGjRogM6dO6NVq1bf5HOm9YwNEX33CZ5tOokKa4dnWC9f40qwrOCE+OA36U5/OH0LgjYeU79OiY3XmO48xQN53Mrg/sSNiL4fBH1LUxhYMmm8r0aNyli+fAN8rt2Cnp4uJniOxK7d61G5QkPExb3VqPvrgJ5I77EzKpUK+/YexaSJc/H6dRjsHYpiztyJsMpliV49hmTPhnzjTEyMcevWPaxd+w+2bV2lNd3e3hYnT+zCmrV/w8trNqKiYuDsXAzx8doPCxk8qA9k8Hygb0r1GpWxcvlGXPe5DT1dXYz3HI4d/65F1YqN1MdBpco/YNvO1Zg3ZylGj/BCcnIySruUhEr133vdvKU7FiyagkkT5+D0qQvQ09NDSediUm3Wd00WT8F637lz57Bp0yZs3boV8fHxiIqKytL8cnsKVpOQf3Ct+2yEHNB8ZrbSxgrVD0zGlQ7TUHHjaDxesR+Plx9QT699ZZFW2btMnAqg5omZOOM2ErEBwV91G7JK7k/Byp0nFwKfXEWjhu1x/twVdblLmZLYsm0l3Gq2hP+jy+jYvi/27T2S4XL69ffAoCF94Fy8RnaEnSVyfwpWUuJz/NSmJ3bvPqQu27hxMZKTktG9x4dHGSxbthR27VyHqtUa49nTG1rLkQu5PwUrd55c8H98GU3dO6qPg8PHt+HkibOYOml+uvPo6uri5r1TmD5lATau35qN0X6ab/0pWLJo7n6fiYkJjIyMYGBggKSkJKnD+ToUCpT961cELt6LGN9nGVZzGNgS9e+vgOvRabD7pRkUuv99ZPkaVkDck1ewblAeta8sRO0ri+Ay92foW5pkxxZ80yzMzQAA4eGR6jIjI0OsWj0fw4dOwKuQj19ysbGxRvMW7jh3Vt4/SL4VCoUCTRrXw0O/R9i31xvPn93EubN7tJqyjYwMsX79nxg0+DeEhIRKFO33wVx9HEQAAPLkzYVKlcshNDQMh45uge+ji9h7cBOqVqugnqdsuVIoWNAGKpUKp87txn3/89i6YxVKOjtJsQnfPdkk6cDAQEyZMgWlSpVCxYoVcf36dUycOBEvX76UOrSvwmFgC4hkFR6vSP8sGQCerDyA630X4tJPk/B0/TE4Dm6FEn90Vk83trWGUaE8sGlRFTcHLMatwUtgXsYOP6wamh2b8M1SKBSYPnM8Lpy/ivv3HqrLp834HZcu+WD/vqMfnH/12gV4GXoXDwMuIjo6BgN+GfO1Q84RrK3zwMzMFKNG/orDh0+iSdNO2PXvQWzdshI1a1ZV15szeyIuXriKPXsOSxjtt0+hUGDajHG4eP4q7t/zAwAULVoEADBm7CCsW7sZbVr1xM0bd7Fr7wbYO9im1rErnFrnt0GYPfMvdGjTBxERkdhzwBuWVhbSbMx3TBbXpKtWrYorV66gTJky6NGjBzp27IiCBQtmat6EhAQkJGg26yWJFOgrdL9GqF+EeRk7FO3TGGfrj/1gvcBl+9X/j74XBFVSMkrP6g3fKX9DlZgM6OhA19AAtwYsRuyj1Obu20OXocbR6TBxyC+7JnC5mDPPCyWdi8G9fjt1WeMm9eDmVh01qjf76PxjRk/CtKkL4OhoB8+JIzFt+u8YNvSPrxlyjpA26uDuPYewYOEKAMDNm3dRrVpF/PxzV5w5cxHNmjVA7dquqFS5oZShfhdmz/NESediaNzgv8uDOjoKAMDa1f9g08btAIDbt+7BrXY1dOnaFl6es6GjSP2c5sxajD3/pl5i+LXfGNx9eBatfmyMtav/yeYt+b7JIknXq1cPq1evhrOzc5bnnTZtGiZOnKhR1sm4FDqbynekslxVS8Agjznq+PypLtPR00VJz64o2qcJTlYamO58ET7+0NHXg1HhvIgNCEZCSDhUScnqBA0AMX7PAQBGBfMwSadj9hxPNGpcB40bdsCLF/+10rjVrg47+yJ4+uKGRv2Nmxbj/LkraNq4k7rsVchrvAp5Db+HjxAeHonDR7dgxoxFCHnJptfP8fr1GyQlJeH+fT+N8gcP/OBavTIAoE7tGnBwsMXr0PsadbZsXoGzZy+hfoO22Rbvt2zmnAlwb1QXTdw7ahwHL/+/D/s+0LyO6+sbgEKFUwecehmiXScxMRGPA4NQKINe+PTpZJGkp0yZAiD1gw4MDISDgwP09DIX2tixYzFs2DCNshOOvb54jF/S861n8Pr0bY2yyv/8hufbzuDZ3ycznM+8tC1EigoJr1M70oVffggdfT0Y2+ZD3JMQAICJfeqB9PbZt38b25c2e44nmrVoiKaNOuHJE81+AHPnLMG6tZs1yi5dOYixoyfjwP5jyEjamYfSwODLB5zDJCUl4erVmyhezEGj3MnJHk+CUj+vmbP+xOo1mzSm37h+HCNGeGLvvow7+NF/Zs6ZgKbNG6B5484Ieu84CHryDC9evIRjMc3bshwd7XD08CkAwM3rdxAfnwBHJ3tcvHANAKCnp4citoXwNOh59mxEDiKLJP327VsMGDAA69atAwA8fPgQ9vb2GDhwIAoWLIgxYzK+5qdUKqFUat6/J4embl1jJYztbNSvjYpYw6yULZIiYhD/PAxJ4TEa9VVJKUh4FaE++7Ws6ATL8o4IO3sXybHxsKrohJJe3fB82xkkR8YCAF6fvo3Im4/gMr8v7o9fD+goUGp6T4SevKVxdk3A3HleaNOuBTq2/xnRMTGwzpcHABAVGY34+AT12fH7nj59oU7oDd1rI691Hvhcu4XYmFiULFkMk6aMwYXzVxHEL6dMMTExhqPjfwnArmgRlC1bCm/ehOPp0xeYM3cJNnkvwZkzF3Hy1Hm4N6yNZk0boH79NgCAkJDQdDuLBT19jseP+TCej5k9byLatG2OTh36ISY6FtbW/z8OoqLVt7ktmr8SY8cNxp3bD3D71n107PwjnIrZw6PLAABAdHQM1qzahDHjBuP5s2A8ffocAwf3AQDs2plxHxv6NLJI0mPGjMHNmzdx8uRJNGrUSF1ev359eHp6fjBJy5VFOQdU3fnfdUpnr24AgGf/nMKtwR+/6V+VkIT8rarDaUQb6BjoIy7oFR4v24/Apfv+qyQErnadhVJTu6PqvxOQEpeA0GM3cN9zwxffnm9d75+7AAAOHNK8Xtav70j1tbePefs2Ht27t8e06b9DqTTA82fB2L37EObN4SAOmVWhQlkcO7pN/Xr2bE8AwPr1W9Cr91D8++9B/PrrGIwaNRDz5nnh4cNHaNe+D86dv5LBEikrevVJ7Xi676Bma8QvfUfhb+8dAICli9fC0FCJqdPHwdLKAndvP0DrFh54HBikrv/HuBlITk7B0pWzYWhoiGtXb6Bl066IjMja7bL0cbK4T9rW1habN29G1apVYWZmhps3b8Le3h7+/v4oX778N3+fdE4k9/ukcwK53yedE8j9PumcgPdJfwGhoaGwtrbWKo+NjYVCoZAgIiIiIunJIklXrFgR+/b914yblphXrlyJatWqSRUWERGRpGRxTXrq1Klo3Lgx7t27h+TkZCxYsAD37t3D+fPncerUKanDIyIikoQszqRr1KiBGzduIDk5GS4uLjh8+DCsra1x4cIFVKhQ4eMLICIi+g7J4kwaABwcHLBixQqpwyAiIpINyZJ0Vnpsm5ubf8VIiIiI5EmyJG1pafnRnttCCCgUCqSkpGRTVERERPIhWZI+ceKEVKsmIiL6JkiWpN3c3KRaNRER0TdBFr27AeDMmTPo0qULqlevjufPU8dB3rBhA86ePStxZERERNKQRZLevn073N3dYWRkBB8fH/XzoSMjIzF16lSJoyMiIpKGLJL05MmTsXTpUqxYsQL6+vrqcldXV/j4+EgYGRERkXRkkaR9fX1Rq1YtrXILCwtERERkf0BEREQyIIskbWNjA39/7SeVnD17Fvb29hJEREREJD1ZJOk+ffpg8ODBuHTpEhQKBV68eAFvb2+MGDEC/fv3lzo8IiIiSchiWNAxY8ZApVKhXr16iIuLQ61ataBUKjFixAgMHDhQ6vCIiIgkoRBCCCkDSElJwblz51CmTBkYGxvD398fMTExcHZ2hqmp6Sctc3++Dl84SsqqDjGXpQ4hx3ublCB1CDmeqYGR1CHkeOEx2pdSvyWSn0nr6uqiYcOGuH//PiwtLeHs7Cx1SERERLIgi2vSpUuXxqNHj6QOg4iISFZkkaQnT56MESNGYO/evQgODkZUVJTGHxERUU4keXM3ADRp0gQA0KJFC40nY/EpWERElJPJIknziVhERETaJE/SSUlJ8PLywtKlS+Hk5CR1OERERLIh+TVpfX193Lp1S+owiIiIZEfyJA0AXbp0wapVq6QOg4iISFYkb+4GgOTkZKxevRpHjx5FhQoVYGJiojF97ty5EkVGREQkHVkk6Tt37qB8+fIAgIcPH0ocDRERkTzIIkmzdzcREZE2SZN069atP1pHoVBg+/bt2RANERGRvEiapC0sLKRcPRERkaxJmqTXrFkj5eqJiIhkTRa3YBEREZE2JmkiIiKZYpImIiKSKSZpIiIimWKSJiIikikmaSIiIplikiYiIpIpJmkiIiKZYpImIiKSKSZpIiIimWKSJiIikikmaSIiIplSCCGE1EF8aXoGBaUOIcd7++KM1CHkeOaF60gdQo6nr6MrdQg5XlTsI6lD+Cw8kyYiIpIpJmkiIiKZYpImIiKSKSZpIiIimWKSJiIikikmaSIiIplikiYiIpIpJmkiIiKZYpImIiKSKSZpIiIimWKSJiIikikmaSIiIplikiYiIpIpJmkiIiKZYpImIiKSKSZpIiIimWKSJiIikikmaSIiIplikiYiIpIpJmkiIiKZkk2SPnPmDLp06YJq1arh+fPnAIANGzbg7NmzEkdGREQkDVkk6e3bt8Pd3R1GRka4fv06EhISAACRkZGYOnWqxNERERFJQxZJevLkyVi6dClWrFgBfX19dbmrqyt8fHwkjIyIiEg6skjSvr6+qFWrlla5hYUFIiIisj8gIiIiGZBFkraxsYG/v79W+dmzZ2Fvby9BRERERNKTRZLu06cPBg8ejEuXLkGhUODFixfw9vbGiBEj0L9/f6nDIyIikoSe1AEAwJgxY6BSqVCvXj3ExcWhVq1aUCqVGDFiBAYOHCh1eERERJJQCCGE1EGkSUxMhL+/P2JiYuDs7AxTU9NPWo6eQcEvHBll1dsXZ6QOIcczL1xH6hByPH0dXalDyPGiYh9JHcJnkUVz98aNGxEXFwcDAwM4OzujcuXKn5ygiYiIvheySNJDhw6FtbU1OnXqhP379yMlJUXqkIiIiCQniyQdHByMf/75BwqFAu3atUP+/Pnx66+/4vz581KHRkREJBlZXZMGgLi4OOzcuRObNm3C0aNHUahQIQQEBGRpGbwmLT1ek5Yer0lLj9ekpfetX5OWRe/udxkbG8Pd3R3h4eF48uQJ7t+/L3VIREREkpBFczeQegbt7e2NJk2aoGDBgpg/fz5+/PFH3L17V+rQiIiIJCGLM+kOHTpg7969MDY2Rrt27TB+/HhUq1ZN6rCIiIgkJYskrauriy1btsDd3R26uryGQ0REBMgkSXt7e0sdAhERkexIlqQXLlyIn3/+GYaGhli4cOEH6w4aNCiboiIiIpIPyW7BsrOzw9WrV5E7d27Y2dllWE+hUODRo6x1oectWNLjLVjS4y1Y0uMtWNLjLVifKDAwMN3/ExERUSpZ3ILl5eWFuLg4rfK3b9/Cy8tLgoiIiIikJ4sRx3R1dREcHAxra2uN8rCwMFhbW2d5LG82d0uPzd3SY3O39NjcLb1vvblbFmfSQggoFAqt8ps3byJXrlwSRPTl1axRBbt2rkXQ42tITnyOFi3cNaavWjkPyYnPNf727dmY7rIMDAxw9cphJCc+R9mypbIj/G/OPzv34sdu/VGlQWtUadAanX8eijMXrqinJyQkYvKcv+DauB0q1f8RQ36bjNdvwrWWs2vfEfzYrT/K12mBWk07YPKcvzSm+/oHolv/EShfpwXq/dgVq723fvVt+1aNGPELzp7djVev7uLJk2vYsmU5nJzsNer07NkRhw79g5CQO3j79gksLMy1ljNq1ACcOLEDYWEPEBx8K7vC/y4MG9EfJ0/vwvOXtxDw+DI2/bMUjk6afYL2HdiEqNhHGn/zFkzWqFOoUAFs3b4KL0PvIuDxZUyaMoa3z34lkt6CZWVlBYVCAYVCgWLFimkk6pSUFMTExKBfv34SRvjlmJgY49ate1iz9h9s37oq3ToHDx5Hrz7D1K8TEhLTrTd92jgEv3iJckzQGbLJmwdD+/WAbeGCEELg3wNHMXCMF7at+ROO9raYsXAZTl+4grmTf4OpiQmmzl2MIb9Nxsalc9TLWPfPDqz7eweG/9oLLs7F8TY+AS+CQ9TTY2Jj8fPQcahasRz+GDkQDx8F4o+p82FmaoK2LZtIsdmyVrNmFSxduh7Xrt2Enp4eJk4chb17N+CHH+ojLu4tAMDY2AhHjpzCkSOnMGnSmHSXY2Cgjx079uHSJR94eLTLzk345tWoURnLl2+Az7Vb0NPTxQTPkdi1ez0qV2io/gwAYM3qvzFl8jz167dx8er/6+joYOuOVQgJCUWDem1gY2ONZctnIykpGV6es7N1e3ICSZP0/PnzIYRAz549MXHiRFhYWKinGRgYoGjRot/NyGMHD53AwUMnPlgnITERISGhH6zTyL0OGjRwQ7v2fdC4cb0vGeJ3pXaNqhqvB/ftjs079+Hm3QfIZ50HO/YexkzPUahSoRwAYNK4YWjR6WfcvHMfZUuXRGRUNBYtX48/Z05A1Yo/qJdT3PG/s469h08gKSkJk38bCn19fTja28LX7xHW/7OTSTodLVt6aLz++efhePr0On74wQXnzl0GAPz552oAQM2aVbXmTzP5/8mjS5c2XynS71frVj00XvfrOxKBT66i3A+lcf7cfy1Nb9/G41XI63SXUa9+TZQo4YgWzboi9NVr3L51H5MnzcPESaMxbcoCJCUlfdVtyGkkTdIeHqkHrZ2dHapXrw59fX0pw5GcW61qePHsJsIjInHixDn8MWEm3rzTBGttnQdLl8zCT216avzqpQ9LSUnBoRNn8DY+HuVKl8A9Xz8kJydrJF9728LIn88aN+88QNnSJXHhynWohAohoWFo3ulnxMXFoZyLM0YM6IP8+fICAG7eeYCK5Vw09lvXyhWwauNWREZFw8LcLNu39Vti/v/3Jzw8QtpAcjAL9WcQqVHerl0LtG/fEiGvQnFg/3HMnL4Ib9+mnk1XrvwD7t71Reir/5L4saOnMX/hZJR0dsKtm/eybwNyAFmMOObm5qb+f3x8PBITNZt5zc21r0ulSUhIQEJCgkZZRte45ezQ4RPYuWs/Hj9+Cnt7W0yeNAb79myAa80WUKlUAIDVK+dh+YoNuOZzC7a2hSSOWP4eBgSic99hSExMhLGRERZMHQ8HO1s88HsEfX09mJuZatTPncsSr9+8AQA8e/ESKpXAyvWbMWZIP5iaGGPRivX4echv2LF+MfT19fE67A0KFbDRWgYAvH4TziT9AQqFArNmTcD581dw795DqcPJkRQKBabPHI8L56/i/jufwdYtu/H06XMEB79C6dIlMHHSKDg52aNLp/4AAOt8eTUSNAC8+v/rfP//AUtfjiySdFxcHEaNGoUtW7YgLCxMa/qHendPmzYNEydO1ChT6JhCoZtxYpejLVt2q/9/584D3L59H36+F1DbrTqOnziLAb/2hJmZKabPWCRhlN8WuyKFsH3tX4iOicXhE2cxbsocrP1zZqbmValUSE5Oxpgh/eBapQIAYKbnaNRu0RmXfW6py+jTzJ8/CaVKFUO9emyylsqceV4o6VwM7vU1r+uvXfOP+v/37vri5ctX2LvfG3Z2RRAYGJTdYeZ4sujdPXLkSBw/fhxLliyBUqnEypUrMXHiRBQoUADr16//4Lxjx45FZGSkxp9C59s/gwkMDEJoaBgcHIoCAOrUcUXVqhUQFxOI+Lgn8L1/DgBw6cJ+rF41X7pAZUxfXx9FChVAqRJOGNq/B4o72mPj1n+RJ7cVkpKSERUdo1E/7E0E8vz/boK8eVL/dbArop6ey8oSlhbmCA55BQDIkzsXwt5EaC0DAPLksvpKW/XtmzfPC02a1IO7e0c8f/5S6nBypNlzPNGocR00a9wJL158+DO4euUGAMDewRYA8CokFHmt82jUsf7/64/1qaGsk0WS3rNnDxYvXoyffvoJenp6qFmzJn7//XdMnTr1ow/fUCqVMDc31/j71pq601OwYH7kzm2F4JepvYmHDB2P8hUboEKlhqhQqSGat+gKAOjYuT/G/zFDylC/GSqVQGJiEpyLO0FPTw+Xrt5QTwt88gzBIa9QtnQJAMAPLs4AgMdBz9R1IqOiEREZhfz5Uu/nL1u6BK7euI2k5GR1nfNXrsOuSCE2dWdg3jwvtGjhjkaNOuLJk6dSh5MjzZ7jiWYtGqJ5ky548uTZR+u7lEk9Fl6+TE3Aly9fR6lSxZEnb251nTp1ayAyMhoP7vt/naBzMFk0d7958wb29qn3S5qbm+PN/68L1qhRA/3795cytC/GxMQYju/0DLYrWgRly5bCmzfhePMmAn/8Pgw7du7Hy5BXcLAvimnTxsE/4DEOHz4FAHj69IXG8mJiYgEAjx49wfPnwdm3Id+IeUvWoGa1isifzxqxcXHYd/gkrly/hWVzJ8PM1AStmzXEzEUrYGFuBhMTY0ydtwRlS5dE2dIlAQBFixRC3ZrVMH3+MkwYPQimJsaYv3QN7IoUQuUKZQEATRvUwZLVm/DHtPno1bkt/B49hvfWXRg16GcpN1225s+fjPbtW6Bt2z6IiYlVX7+MjIxCfHxqv5J8+fIiX7686hak0qWLIzo6Fk+fPld3bipcuACsrCxRuHAB6Orqosz/k0hAwGPExmqPXEj/mTvPC23atUDH9j8jOiYG1vlSz4CjIqMRH58AO7siaNuuBQ4fOok3b8JRqnQJTJ/xO86euYS7dx4AAI4dPYMHD/yxYuUcjP99OvLly4vxE4ZhxfINWv2J6PPJYsSxMmXKYNGiRXBzc0P9+vVRrlw5zJ49GwsXLsTMmTPx7NnHf+29S44jjrnVqoZjR7dpla9bvwW/DhiLHdtWoVy50rC0NMeLFyE4cvQUJnjOUnfIeJ+tbSEE+F1ChUoNcfPm3a8dfpZJPeLY+GnzcOnqDYSGvYGZiQmKOdqhZ+e2qF65PIDUe9Bn/bkC+4+cRFJSEqpXroDxI35Fntz/DZ4TExuLGQuX49ip81AoFKhYzgVjhvRT9+4GUgczmTLnL9x58BBWFubo1KYFenWRx727chtx7O3bJ+mW9+kzHBs3ph4b48YNwe+/D/1gneXLZ6Nr17ZadRo2bI8zZy5+wYg/n9xGHMto9K1+fUdi08btKFgwP1asmgtn52IwNjHG82fB2LPnEGbN+AvR71weKly4AOYtmIwaNasgLjYOmzbtwITxM7M8OmR2+NZHHJNFkp43bx50dXUxaNAgHD16FM2bN4cQAklJSZg7dy4GDx6cpeXJMUnnNFInaZJfks6J5JakcyIm6a/gyZMnuHbtGhwdHVGmTJksz88kLT0maekxSUuPSVp633qSlsU16ffZ2trC1tZW6jCIiIgkJYskvXDhwnTLFQoFDA0N4ejoiFq1anEAdyIiylFkkaTnzZuH0NBQxMXFwcoq9f7S8PBwGBsbw9TUFK9evYK9vT1OnDiBwoULSxwtERFR9pDFfdJTp05FpUqV4Ofnh7CwMISFheHhw4eoUqUKFixYgKCgINjY2GDoUO1en0RERN8rWXQcc3BwwPbt21GuXDmN8uvXr+Onn37Co0ePcP78efz0008IDv74PcHsOCY9dhyTHjuOSY8dx6T3rXcck8WZdHBwMJLfGbUpTXJyMl6+TB2yrkCBAoiOjs7u0IiIiCQjiyRdp04d9O3bF9evX1eXXb9+Hf3790fdunUBALdv34adnV1GiyAiIvruyCJJr1q1Crly5UKFChWgVCqhVCpRsWJF5MqVC6tWrQIAmJqaYs6cORJHSkRElH1kcU06zYMHD/DwYepzTYsXL47ixYt/0nJ4TVp6vCYtPV6Tlh6vSUvvW78mLYtbsNLY29tDoVDAwcEBenqyCo2IiCjbyaK5Oy4uDr169YKxsTFKlSqFoKDUB4sPHDgQ06dPlzg6IiIiacgiSY8dOxY3b97EyZMnYWhoqC6vX78+Nm/eLGFkRERE0pFFm/KuXbuwefNmVK1aFQqFQl1eqlQpBAQESBgZERGRdGRxJh0aGgpra2ut8tjYWI2kTURElJPIIklXrFgR+/btU79OS8wrV65EtWrVpAqLiIhIUrJo7p46dSoaN26Me/fuITk5GQsWLMC9e/dw/vx5nDp1SurwiIiIJCGLM+kaNWrgxo0bSE5OhouLCw4fPgxra2tcuHABFSpUkDo8IiIiSchqMJMvhYOZSI+DmUiPg5lIj4OZSI+DmXwGHR2dj3YMUygU6T58g4iI6HsnaZLeuXNnhtMuXLiAhQsXQqVSZWNERERE8iFpkm7ZsqVWma+vL8aMGYM9e/agc+fO8PLykiAyIiIi6cmi4xgAvHjxAn369IGLiwuSk5Nx48YNrFu3Dra2tlKHRkREJAnJk3RkZCRGjx4NR0dH3L17F8eOHcOePXtQunRpqUMjIiKSlKTN3TNnzsSMGTNgY2ODv//+O93mbyIiopxK0luwdHR0YGRkhPr160NXN+NbFXbs2JGl5fIWLOnxFizp8RYs6fEWLOnxFqzP0K1bN47NTURElAFJk/TatWulXD0REZGsSd5xjIiIiNLHJE1ERCRTn5Skz5w5gy5duqBatWp4/vw5AGDDhg04e/bsFw2OiIgoJ8tykt6+fTvc3d1hZGSE69evIyEhAUDq/c5Tp0794gESERHlVFlO0pMnT8bSpUuxYsUK6Ovrq8tdXV3h4+PzRYMjIiLKybKcpH19fVGrVi2tcgsLC0RERHyJmIiIiAifkKRtbGzg7++vVX727FnY29t/kaCIiIjoE5J0nz59MHjwYFy6dAkKhQIvXryAt7c3RowYgf79+3+NGImIiHKkLA9mMmbMGKhUKtSrVw9xcXGoVasWlEolRowYgYEDB36NGImIiHKkTx67OzExEf7+/oiJiYGzszNMTU2/dGyfjGN3S49jd0uPY3dLj2N3Sy/Hjt1tYGAAZ2fnLxkLERERvSPLSbpOnToffCjG8ePHPysgIiIiSpXlJF2uXDmN10lJSbhx4wbu3LkDDw+PLxUXERFRjpflJD1v3rx0yz09PRETE/PZAREREVGqT+449j5/f39UrlwZb968+RKL+yzsOCY9Y32l1CHkeC89a0sdQo5XcOJpqUPI8cJjtMf1+JZ8sadgXbhwAYaGhl9qcURERDlelpu7W7durfFaCIHg4GBcvXoV48eP/2KBERER5XRZTtIWFhYar3V0dFC8eHF4eXmhYcOGXywwIiKinC5LSTolJQU9evSAi4sLrKysvlZMREREhCxek9bV1UXDhg35tCsiIqJskOWOY6VLl8ajR9/2MGtERETfgiwn6cmTJ2PEiBHYu3cvgoODERUVpfFHREREX0amr0l7eXlh+PDhaNKkCQCgRYsWGsODCiGgUCiQkpLy5aMkIiLKgTKdpCdOnIh+/frhxIkTXzMeIiIi+r9MJ+m0gcnc3Ny+WjBERET0nyxdk/7Q06+IiIjoy8rSfdLFihX7aKKWw9jdRERE34MsJemJEydqjThGREREX0eWknSHDh1gbW39tWIhIiKid2T6mjSvRxMREWWvTCfpL/TYaSIiIsqkTDd3q1SqrxkHERERvSfLw4ISERFR9mCSJiIikikmaSIiIplikiYiIpIpJmkiIiKZYpImIiKSKSZpIiIimWKSJiIikikmaSIiIpnK0gM2vqSoqKhM1zU3N/+KkRAREcmTZEna0tLyow/tEEJAoVAgJSUlm6IiIiKSD8mS9IkTJ6RaNRER0TdBsiTt5uYm1aqJiIi+CZIl6fTExcUhKCgIiYmJGuVlypSRKCIiIiLpyCJJh4aGokePHjhw4EC603lNmoiIciJZ3II1ZMgQRERE4NKlSzAyMsLBgwexbt06ODk5Yffu3VKHR0REJAlZnEkfP34c//77LypWrAgdHR3Y2tqiQYMGMDc3x7Rp09C0aVOpQyQiIsp2sjiTjo2NhbW1NQDAysoKoaGhAAAXFxf4+PhIGRoREZFkZJGkixcvDl9fXwBA2bJlsWzZMjx//hxLly5F/vz5JY6OiIhIGrJo7h48eDCCg4MBABMmTECjRo3g7e0NAwMDrF27VtrgiIiIJCKLJN2lSxf1/ytUqIAnT57gwYMHKFKkCPLkySNhZERERNKRvLk7KSkJDg4OuH//vrrM2NgY5cuXZ4ImIqIcTfIkra+vj/j4eKnDICIikh3JkzQA/Prrr5gxYwaSk5OlDoWIiEg2ZHFN+sqVKzh27BgOHz4MFxcXmJiYaEzfsWOHRJERERFJRxZJ2tLSEj/99JPUYXxVNWtUwfDh/VH+BxcUKGCD1m16YvfuQ+rpq1bOg0e3dhrzHDp0Ak2b/9epzsrKEgvmT0Kzpg2gUqmwY+d+DB32B2Jj47JtO75Vw0b0R4sW7nAqZo/4+HhcuuiDP8bPgL9foLrOvgObULNWVY35Vq3chKGDfwcAlHYpgWHD+6NqtQrInTsXgp48w+pVm7Bk8drs3JRvhl6VJtB1qgCd3PmBpESkvPBH0qltEOEv1XX0G3aDrq0zFCaWQFICUp77I+n0Vog3/9UxHrlaa9kJe5Yi5cFl9WudwsVhUKcDFLkLQES/QdKFvUi5e+6rbt+3aOjwfmjWouH/j4MEXL7oA88/ZqqPg8JFCuLWvVPpztu960D8uzN16OZChfJjznwv1KhVFbGxcfjHewcmTpjNIZy/Alkk6TVr1kgdwldnYmKMW7fuYc3af7B966p06xw8eBy9+gxTv05I0HzQyIZ1i2CTPx8aNe4IfX09rFwxD0uXzETXbgO+auzfgxo1KmP58g3wuXYLenq6mOA5Ert2r0flCg0RF/dWXW/N6r8xZfI89eu3cf/1lyj3gwtCQ1+jT69heP4sGFWqlseCRVORkpKC5cs2ZOv2fAt0CxdH8vXjUL0MBHR0YVCzNZRthyF+ze9AUuq+rXr5BCn3LkJEhQGGJtB3bQll2+GIXz4KEEK9rIT9q5Dy+PZ/C4//74epwiIPlK2HIPnmSSTvXQ5d25IwaNQdCbERUD2+m23b+y2oXqMyVi7fiOs+t6Gnq4vxnsOx49+1qFqxEeLi3uL5s2AUt9f8oerRswMGDu6No4dTk7eOjg42b1+JkJBQuNdrBxubvFiyYjaSkpIxaeIcKTbruyaLJF23bl3s2LEDlpaWGuVRUVFo1aoVjh8/Lk1gX9DBQydw8NCHn6GdkJiIkJDQdKeVKOGIRo3qokrVxrjmcwsAMGTo79izewNGjZ6E4OCQLx7z96R1qx4ar/v1HYnAJ1dR7ofSOH/uirr87dt4vAp5ne4yNq7fqvH68eOnqFy5PJq3dGeSTkfCtnmarw+shvGABdDJVxSqZw8BACm33jlriwpD0tmdMOruBYVFHoiId46FhDggNird9eiVrQ0RGYqkk5sBAMlvgqFT0An6FRsigUlaQ9sfe2q8/qXfaPg/vqw+DlQqFV690tz/mzVviF07Dqhb7OrWq4HiJRzRqnk3hL4Kw53b9zF10jx4eo3C9KkLkZSUlG3bkxPIouPYyZMntR5PCQDx8fE4c+aMBBFJw61WNbx4dhN375zGn4umIVcuK/W0qlUqIDw8Qp2gAeDosTNQqVSoXPkHKcL9plmYmwEAwsMjNcrbtWuBwCdXcfHKAUyYOBJGRoYfXI65hRnC30R+sA6lUiiNAAAiPjb9CvoG0CtdA6qIUIioN5qT6neB0a8LoOzyO3RL19CYplPAASlP7muUpTy+C50CDl8u+O+Uufo4iEh3etlypVCmrDM2rt+iLqtU5Qfcu+uL0Fdh6rJjR8/A3MIMJUo6fdV4cyJJz6Rv3fov4dy7dw8vX/53HSolJQUHDx5EwYIFP7iMhIQEJCQkaJQJIaBQKL5ssF/ZocMnsHPXfjx+/BT29raYPGkM9u3ZANeaLaBSqWBjY41XoWEa86SkpODNmwjY5LOWKOpvk0KhwPSZ43Hh/FXcv/dQXb51y248ffocwcGvULp0CUycNApOTvbo0ql/usupXKU8Wv/UFG1/6pVdoX/DFDCo2xEpz/wgXj/XmKJXrg703dpCYWAIVVgwErbOBlT/XdtMPLsTqqD7EEmJ0C1aCgYNuiLJwBDJPkdTl2xiARGn+UNJxEZCoTQG9PSBZJ7ZpUehUGDajHG4eP4q7t/zS7dOV492ePDAH5cvXVeXWefLi1evNL+LQv9/9p0vXx7cBn1JkibpcuXKQaFQQKFQoG7dulrTjYyMsGjRog8uY9q0aZg4caJGmULHFApd8y8a69e2Zct/j+S8c+cBbt++Dz/fC6jtVh3HT5yVMLLvz5x5XijpXAzu9TU76q1d84/6//fu+uLly1fYu98bdnZFEBgYpFG3pHMx/LN5GaZPXYjjx/j5fIx+gy5Q5CmIhE3TtKYl37uIlMd3oTC1hF4ldyib90f8pqlASuotmckX9vxX91UQFPpK6FVqpE7S9Glmz/NESediaNygQ7rTDQ2VaNO2OWbN+CubI6N3SdrcHRgYiICAAAghcPnyZQQGBqr/nj9/jqioKPTs2fODyxg7diwiIyM1/hQ6Ztm0BV9PYGAQQkPD4OBQFADw8uUrWOfNrVFHV1cXuXJZ4mXIKwki/DbNnuOJRo3roFnjTnjx4uUH6169cgMAYO9gq1FevIQj9uzbiDVr/sGsmfwC+xj9ep2ha18WCZtnQsSEa1dIfAsR8QqqZw+R+O9iKHLlh65ThQyXlxL8CDrmuQDd1HMMERsJhbGFRh2FiQVEQhzPojMwc84EuDeqi+ZNumR4HLRs1RhGxob45++dGuWvQkJhba35XZTXOnV0yJAM+nPQp5P0TNrWNvXLT6VSffIylEollEqlRtm31tSdnoIF8yN3bisEv0ztEHbx0jVYWVmi/A8u8Lme2qBUt44rdHR0cPny9Q8tiv5v9hxPNGvREE0bdcKTJ88+Wt+ljDMA4OXL/zowlSjphL37vbHJezt7smaCfr3O0HUqj4R/ZkBEZuILXKEAFFAn4PToWBeBeBujPtNWvQiArn0ZvJuOdW2doXoR8HnBf6dmzpmAps0boHnjzgj6wHHQxaMtDuw/jrDXmv0Drly6juEjf0GevLnwOjR1Wp26roiKjIbvA/+vGntOJIve3evXr//g9G7dumVTJF+PiYkxHB3t1K/tihZB2bKl8OZNON68icAfvw/Djp378TLkFRzsi2LatHHwD3iMw/+/7eHBA38cPHgcS5fOwq+/joG+vh4WLJiCzVv+Zc/uTJg7zwtt2rVAx/Y/IzomBtb5Un/5R0VGIz4+AXZ2RdC2XQscPnQSb96Eo1TpEpg+43ecPXMJd+88AJDaxL13/0YcO3oGfy5apV5GSopK64uMUjt76ZWsioSdCyGS4gGT/1+CSngLJCdBYZEXuiUqIeXxXSAuGgozK+hVaQIkJyElMLW/iq5DWcDYHKrgR0ByEnSLOkO/SlMkXz2oXk/yzZPQ+6Ee9N3aIvn2GegWKQndEpWQsH2+BFstb7PnTUSbts3RqUM/xETHwvr/Z8BRUanHQRo7e1tUd62Edq17ay3j+LGz8H3gj6Ur5sDz9xmwzpcX4/4YhpXLN6bbAZg+j0KId25GlIiVlZXG66SkJMTFxcHAwADGxsZ48yZrX4B6Bh/ubCYFt1rVcOzoNq3ydeu34NcBY7Fj2yqUK1calpbmePEiBEeOnsIEz1kat0NYWVli4YLJGoOZDBk6XpaDmRjrKz9eKRtFxT5Kt7xf35HYtHE7ChbMjxWr5sLZuRiMTYzx/Fkw9uw5hFkz/kJ0dAwAYOxvgzF23GCtZTx58gwuzrW+avyf4qVnbUnXn94gJMD/73m+ew4KE0sYNOoOnXy2gKEJRGwUVM98kXR+j3rAE52ipWFQ6ycorPIBAETEKyTfOIHkm6cB/PfVpTGYSUw4ks7vkcVgJgUnnpY6BA3hMemf6f7SdxT+9v5vZMfxE4ajXYeWKOPshvRSROHCBTBnvhdca1ZBXNxb/O29AxP/mCXLwUwy2uZvhSySdHr8/PzQv39/jBw5Eu7u7lmaV45JOqeRW5LOiaRO0iS/JJ0TfetJWhb3SafHyckJ06dPx+DB2mcuREREOYFskzQA6Onp4cWLF1KHQUREJAlZdBzbvXu3xmshBIKDg/Hnn3/C1dVVoqiIiIikJYsk3apVK43XCoUCefPmRd26dTFnDm9zISKinEkWSfpz7pMmIiL6XsnqmnRiYiJ8fX2RnJwsdShERESSk0WSjouLQ8+ePWFsbIxSpUohKCh1nOSBAwdi+vTpEkdHREQkDVkk6bFjx+LWrVs4efIkDA3/ezRg/fr1sXnzZgkjIyIiko4srknv2rULmzdvRtWqVTXG3S5VqhQCAjj+LhER5UyyOJMODQ2FtbX2M5FjY2O/i4dlEBERfQpZJOmKFSti37596tdpiXnlypWoVq2aVGERERFJShbN3VOnTkXjxo1x7949JCcnY8GCBbh37x7Onz+PU6dOSR0eERGRJGRxJl2jRg3cuHEDycnJcHFxweHDh2FtbY0LFy6gQoWMH/5ORET0PZPFmTQAODg4YMWKFVKHQUREJBuSJmkdHZ2PdgxTKBQc3ISIiHIkSZP0zp07M5x24cIFLFy4kEOGEhFRjiVpkm7ZsqVWma+vL8aMGYM9e/agc+fO8PLykiAyIiIi6cmi4xgAvHjxAn369IGLiwuSk5Nx48YNrFu3Dra2tlKHRkREJAnJk3RkZCRGjx4NR0dH3L17F8eOHcOePXtQunRpqUMjIiKSlKTN3TNnzsSMGTNgY2ODv//+O93mbyIiopxKIYQQUq1cR0cHRkZGqF+/PnR1dTOst2PHjiwtV8+g4OeGRp/JWF8pdQg53kvP2lKHkOMVnHha6hByvPAYf6lD+CySnkl369aNY3MTERFlQNIkvXbtWilXT0REJGuSdxwjIiKi9DFJExERyRSTNBERkUwxSRMREckUkzQREZFMMUkTERHJFJM0ERGRTDFJExERyRSTNBERkUwxSRMREckUkzQREZFMMUkTERHJFJM0ERGRTDFJExERyRSTNBERkUwxSRMREckUkzQREZFMMUkTERHJFJM0ERGRTOlJHcDXoKvD3x5SM9IzkDqEHC/X+KNSh5DjhS/rJHUI9I1jNiMiIpIpJmkiIiKZYpImIiKSKSZpIiIimWKSJiIikikmaSIiIplikiYiIpIpJmkiIiKZYpImIiKSKSZpIiIimWKSJiIikikmaSIiIplikiYiIpIpJmkiIiKZYpImIiKSKSZpIiIimWKSJiIikikmaSIiIplikiYiIpIpJmkiIiKZYpImIiKSKSZpIiIimWKSJiIikikmaSIiIplikiYiIpIp2STpM2fOoEuXLqhWrRqeP38OANiwYQPOnj0rcWRERETSkEWS3r59O9zd3WFkZITr168jISEBABAZGYmpU6dKHB0REZE0ZJGkJ0+ejKVLl2LFihXQ19dXl7u6usLHx0fCyIiIiKQjiyTt6+uLWrVqaZVbWFggIiIi+wMiIiKSAVkkaRsbG/j7+2uVnz17Fvb29hJEREREJD1ZJOk+ffpg8ODBuHTpEhQKBV68eAFvb2+MGDEC/fv3lzo8IiIiSehJHQAAjBkzBiqVCvXq1UNcXBxq1aoFpVKJESNGYODAgVKHR0REJAmFEEJIHUSaxMRE+Pv7IyYmBs7OzjA1Nf2k5SgNC3/hyCirLJUmUoeQ40UmxEkdQo4XvqyT1CHkeEYe06UO4bPIorl748aNiIuLg4GBAZydnVG5cuVPTtBERETfC1kk6aFDh8La2hqdOnXC/v37kZKSInVIREREkpNFkg4ODsY///wDhUKBdu3aIX/+/Pj1119x/vx5qUMjIiKSjCyStJ6eHpo1awZvb2+8evUK8+bNw+PHj1GnTh04ODhIHR4REZEkZNG7+13GxsZwd3dHeHg4njx5gvv370sdEhERkSRkcSYNAHFxcfD29kaTJk1QsGBBzJ8/Hz/++CPu3r0rdWhERESSkMWZdIcOHbB3714YGxujXbt2GD9+PKpVqyZ1WERERJKSRZLW1dXFli1b4O7uDl1dXanDISIikgVZJGlvb2+pQyAiIpIdyZL0woUL8fPPP8PQ0BALFy78YN1BgwZlU1RfT40aVTBsaF/88EMZFCiQD23b9sbuPYfU001MjDFl8lg0b+6O3Lmt8PhxEP76aw1WrNyorpMvX15MmzYO9erWhJmZKR4+DMD0GYuwa9cBKTbpm+LRqwO69+yIwkUKAgB8H/hjzoy/cPzoGQBA1+7t8GObZihT1hlm5qZwKlIJUZHRGsuwtLLA1Jm/o2GjOlCpVNi35zDGjZ6KuFiO7JUZI0f+ipYtG6F4cQe8fRuPixevYdy4afDze6Suo1QqMWPG72jbtgWUSgMcOXIKgwf/jlevXqvrFC5cAAsXToGbW3XExMRi48ZtGD9+BsdXSMeq87445vsCj8NioNTTQdlCuTGkTikUzW2mVVcIgQGbL+DcoxDM/akK6hYvoJ52KfAV/jp9H/6hUTDS10VzlyIYUNsZejo6GvOvv+SP7TcCERz5FpZGBmhXwR59XItny7Z+ryRL0vPmzUPnzp1haGiIefPmZVhPoVB8F0naxNgIt27fx9p1W7B1ywqt6bNm/oHatV3Ro+cgPHnyDPXr18LCBVMQHByCvfuOAABWr5oPCwtz/NSmF8LC3qB9+1bY5L0E1ao3xc2b7GD3IcHPQzDZcw4eBTyBQqFA+06tsO7vv1C/Zmv4PvCHkZEhThw7gxPHzuB3z+HpLmPxilnIly8v2rXqCT19PSxYPBVzFnihf+8R2bw136aaNatg2bJ1uHr1FvT0dOHlNQr79m1EuXL1EBf3FgAwa9YfaNy4Ljp37o/IyGjMm+eFzZuXo06d1gAAHR0d7Ny5FiEhoahd+0fY2Fhj1ap5SE5Oxh9/zJRy82TpWtBrtK9gj1L5rZCiElh08i76/30OO36uDyMDza//jVcCAIX2MnxDIjFgywX0rl4ck5tXwKvoeEw5eB0qITCsnou63swjt3Dh0SsMq+sCJ2tzRL5NRGR80tfexO+erMbu/lLkPnZ3QvxTrTNpn2tHsXXbHkybtkBdduH8Phw6fBKenrMAAGGvH2DgoN+wadMOdZ0Xz29h3O9TsWbNP9m3AZnwLYzd/eDxRXiNn4VNG7ary6rXqIyd+9ZrnUk7FbPH2Sv70bB2G9y8fgcAUKdeDWzathzlStZGyMtX2R7/x8h97O48eXLh2bMbqF+/Dc6evQxzczM8e3YdHh6DsHPnfgBAsWIOuHXrBGrVaonLl6+jYcPa2LlzDezsKqnPrnv37oIpU8agUKEfkJQkr6Qgt7G738QmoO6C/VjVpSYqFMmjLn8QEoFBWy5gU486qL/wgMaZ9MKTd3Ex8BU29aijrn/KLxijdl7G8cFNYKLUx6PXUWi38ji29amX7lm6lDh29xfg5eWFuDjtL5S3b9/Cy8tLgoiy38WLV9GsaQMUKGADAHBzqwYnJ3scPXr6nTrX0LZNc1hZWUKhUKBt2xYwNFTi9KmLUoX9TdLR0UGrn5rA2NgYVy/fyNQ8FSuXQ0REpDpBA8DpkxegUqlQvmKZrxTp983cPPXL/M2bCABA+fIuMDAwwPHjZ9V1Hj4MQFDQM1SpUh4AULVqedy580Cj+fvo0VOwsDCHs3Ox7Av+GxWTkPojxsLQQF32NikZv+26irHuZZHH1FBrnqRkFZTvdehV6ukiIVmFey8jAACn/F6ioKUJTvu/RJO/DqHxX4cwcZ8PIt8mfr2NySFkkaQnTpyImJgYrfK4uDhMnDhRgoiy35Chf+D+g4cIfHQFMdGPsGf3Bgwe8jvOnr2krtOpc3/o6+vjZfBtREcF4K8/p6Fd+z4IePRYusC/ISWdi+HR82t4GnoLM+d6okfnAXjoG5Cpea3z5cXr0DcaZSkpKYgIj4R1vjwZzEUZUSgUmD3bE+fPX8G9ew8BpPa5SEhIQGRklEbdkJDXyJfP+v91rDUSdOr0UPX8lDGVEJh19BbKFcoFR2tzdfnsI7dRtlAu1ClWIN35qtlb4+bzMBy4+xQpKoGQ6LdYfvYBAOB1TDwA4HlELIIj43Dk/nNMbl4BXs3K497LCIzYcSndZVLmyaJ3txACCoX2xZCbN28iV65cH5w3ISEBCQkJmVqenP36Sw9UqVwerVv3wJOgZ6hZowoWzJ+M4OAQ9ZmF54QRsLAwR6PGHfD69Ru0aOEO742LUbdeG9y9+0DiLZA/f79A1K35I8zNzdC8pTsWLp2OH5t0zXSipi9nwYLJKFWqGOrW/UnqUHKMaQdvwj80Gmu71lKXnXwYjMtPQrG5V90M56tunw9D65bGlIM38Pvua9DX08HPrsXh8zQMOv//nlUJIDFFhcnNK8D2/83dnk3Lo+PqE3gcFi27JvBviaRJ2srKCgqFAgqFAsWKFdNIrCkpKYiJiUG/fv0+uIxp06ZpnW3r6JpBT8/iq8T8NRgaGsLLaxTateuDAwePAwDu3HmAMmVLYeiQvjh+/Czs7W3xyy89UO6Herh/P/XM4/bt+6jhWhn9+3XDgIG/SbkJ34SkpCQ8fhQEALh14y7KlS+NPv27YeSQCR+d91VIKPLk1fzBqKurC0srC7wKeZ3BXJSeefO80KRJPdSv3xbPn79Ul4eEhEKpVMLCwlzjbDpfvjwICXn1/zqvULFiWY3lpZ1Bp51Rk7Zph27itP9LrO5aE/nMjdTll5+E4ll4LGrO2atRf8SOS/ihcB6s6lITANC1ihO6VHZEaEw8zA0N8CIyFgtP3kNBy9S+J3lMDaGno1AnaACw+///g6PeMkl/BkmT9Pz58yGEQM+ePTFx4kRYWPyXWA0MDFC0aNGPjjw2duxYDBs2TKMsT17nrxLv16KvrwcDAwOoVCqNclVKCnT+f4uDkVHqgSXeq5OSolLXoazR0dGBgYHBxysCuHr5BiwtLVCmXCncupHak76GW1Xo6OjA5+qtrxnmd2XePC+0aNEIDRu2w+PHTzWm+fjcRmJiIurUcVXfVujkZI8iRQrh0iUfAMDFiz4YPXog8ubNjdDQMABAvXo1ERkZhfv3/bJ3Y74BQghMP3wLx31fYGWXmuqkmqZntWJoXbaoRlmblccwon4ZuDnZaJQrFApYm6V+Dx28+ww25kYoaWMJAChXKBeSVQJPw2NQ2MoUAPDkTeolzALv/CigrJM0SXt4eAAA7OzsUL16dejr62d5GUqlEkqlUqNMjk3dJibGcHAoqn5dtGhhlCnjjPDwCDx9+gKnTl/AtGm/4218PIKCnqNmzaro3LkNRo1K7Tjn6+sPf/9A/PnXdIwZMxlv3oSjRXN31KtXEz/+2F2ajfqGjJswDMeOnMbzZ8EwNTVB67bNUL1GZbRv3RsAkNc6D6zz5YGdfREAqdevY2Ji8fxZMCLCI+H38BGOHTmNOQu9MGqIJ/T09TBt1njs2r5flj275WjBgslo374l2rbtjZiYWPUZcGRkFOLjExAVFY21azdj5szxCA+PQFRUDObOnYgLF67i8uXrAICjR0/j/n0/rF49H7/9NhX58uXFhAkjsGzZeiQmspPS+6YeuokDd59hfpuqMDHQU19DNlXqw1BfF3lMDdPtLGZjbqSR0NdefAhX+3xQKBQ47vsCqy88xMwfK0NXJ/W7tqqdNUraWMJzrw9GNigDlRCYdugmqtpZa5xdU9ZJdgtWVFQUzM3N1f//kLR6mSXHW7Bq1aqKI4e3apWv37AVffoMQ758eTFp0hjUr1cLuXJZIijoGVat2oQFC/+7p9rRoSgmTx6L6tUrwdTUBAEBjzFv/jKNW7LkQm63YM37czJq1KqGfDZ5ER0VjXt3fbFo/kqcPpH6zPIRYwZg5NgBWvMN6j8WmzftBJA6mMm0WeP/G8xk92H8NnqKbAczkdstWPHxQemW9+kzDBs2bAPw32Am7dq11BjM5N2m7CJFCmLhwimoVasaYmPjsHHjNvz++3RZDmYi9S1Y5abuTLd8YrPyaFnGNsN53h/MpI/3Gdx/GYmklBQUs7ZA35olUMNB80z7VfRbzDh8CxcCX8FIXxeuDvkwvJ4LLIwy11r1tXzrt2BJlqR1dXURHBwMa2tr6OjopHv2m9YBLKsHnxyTdE4jtySdE8ktSedEUidp+vaTtGTN3cePH1f33D5x4oRUYRAREcmWZEnazc0t3f8TERFRKll0Cz548CDOnv1vlKG//voL5cqVQ6dOnRAeHi5hZERERNKRRZIeOXKkuvPY7du3MWzYMDRp0gSBgYFat1cRERHlFLIYcSwwMBDOzqn3Nm/fvh3NmzfH1KlT4ePjgyZNmkgcHRERkTRkcSZtYGCgfsDG0aNH0bBhQwBArly5Pnp7FhER0fdKFmfSNWrUwLBhw+Dq6orLly9j8+bNAICHDx+iUKFCEkdHREQkDVmcSf/555/Q09PDtm3bsGTJEhQsWBAAcODAATRq1Eji6IiIiKQh2WAmXxMHM5EeBzORHgczkR4HM5EeBzP5QlJSUrBr1y7cv38fAFCqVCm0aNECuu89bJyIiCinkEWS9vf3R5MmTfD8+XMUL14cQOojKAsXLox9+/bBwcFB4giJiIiynyyuSQ8aNAgODg54+vQpfHx84OPjg6CgINjZ2WHQoEFSh0dERCQJWZxJnzp1ChcvXlSP5Q0AuXPnxvTp0+Hq6iphZERERNKRxZm0UqlEdHS0VnlMTAwMDKR9zBkREZFUZJGkmzVrhp9//hmXLl2CEAJCCFy8eBH9+vVDixYtpA6PiIhIErJI0gsXLoSjoyOqV68OQ0NDGBoawtXVFY6OjliwYIHU4REREUlC0mvSKpUKs2bNwu7du5GYmIhWrVrBw8MDCoUCJUuWhKOjo5ThERERSUrSJD1lyhR4enqifv36MDIywv79+2FhYYHVq1dLGRYREZEsSNrcvX79eixevBiHDh3Crl27sGfPHnh7e0OlUkkZFhERkSxImqSDgoI0HkVZv359KBQKvHjxQsKoiIiI5EHSJJ2cnAxDQ0ONMn19fSQlJUkUERERkXxIek1aCIHu3btDqVSqy+Lj49GvXz+YmPz3gIYdO3ZIER4REZGkJE3SHh4eWmVdunSRIBIiIiL5kTRJr1mzRsrVExERyZosBjMhIiIibUzSREREMsUkTUREJFNM0kRERDLFJE1ERCRTTNJEREQyxSRNREQkU0zSREREMsUkTUREJFNM0kRERDLFJE1ERCRTTNJEREQyxSRNREQkU0zSREREMsUkTUREJFNM0kRERDLFJE1ERCRTTNJEREQyxSRNREQkUwohhJA6CNKUkJCAadOmYezYsVAqlVKHkyPxM5AW33/p8TOQByZpGYqKioKFhQUiIyNhbm4udTg5Ej8DafH9lx4/A3lgczcREZFMMUkTERHJFJM0ERGRTDFJy5BSqcSECRPYWUNC/AykxfdfevwM5IEdx4iIiGSKZ9JEREQyxSRNREQkU0zSREREMsUknc1OnjwJhUKBiIgIqUOhL6ho0aKYP3++1GFQJvAY/LDMvj/c57MHk3QGunfvjlatWkkdRraR8xdX9+7doVAoMH36dI3yXbt2QaFQZGssa9euhaWlpVb5lStX8PPPP2drLFLLrs/l8ePHUCgUuHHjxhdb5vcg7f1XKBQwMDCAo6MjvLy8kJyc/FnLrV69OoKDg2FhYQGA+7zUmKQ/QWJiolaZEOKzDw7KmKGhIWbMmIHw8HCpQ0lX3rx5YWxsLHUY2U5On0t6x+X3rlGjRggODoafnx+GDx8OT09PzJo167OWaWBgABsbm4/+0Mqp+3x2Y5LOhNq1a2PAgAEYMmQI8uTJA3d3d/WZ54EDB1ChQgUolUqcPXsWKpUK06ZNg52dHYyMjFC2bFls27btg8s/e/YsatasCSMjIxQuXBiDBg1CbGwsAOC3335DlSpVtOYpW7YsvLy8AKT+om3QoAHy5MkDCwsLuLm5wcfHR6O+QqHAypUr8eOPP8LY2BhOTk7YvXs3gNQzlTp16gAArKysoFAo0L179899276o+vXrw8bGBtOmTcuwzofeRwAIDg5G06ZNYWRkBDs7O2zatEmryW7u3LlwcXGBiYkJChcujF9++QUxMTEAUlsbevTogcjISPUZjKenJwDNpr9OnTqhffv2GrElJSUhT548WL9+PQB80n4iR1/ic1EoFNi1a5fGPJaWlli7di0AwM7ODgDwww8/QKFQoHbt2gD+a+2aMmUKChQogOLFiwMANmzYgIoVK8LMzAw2Njbo1KkTXr169eU2WkaUSiVsbGxga2uL/v37o379+ti9ezfCw8PRrVs3WFlZwdjYGI0bN4afn596vidPnqB58+awsrKCiYkJSpUqhf379wPQbFXjPi8DgtLl4eEhWrZsKYQQws3NTZiamoqRI0eKBw8eiAcPHogTJ04IAKJMmTLi8OHDwt/fX4SFhYnJkyeLEiVKiIMHD4qAgACxZs0aoVQqxcmTJ4UQQj1feHi4EEIIf39/YWJiIubNmycePnwozp07J3744QfRvXt3IYQQd+7cEQCEv7+/Ora0Mj8/PyGEEMeOHRMbNmwQ9+/fF/fu3RO9evUS+fLlE1FRUep5AIhChQqJTZs2CT8/PzFo0CBhamoqwsLCRHJysti+fbsAIHx9fUVwcLCIiIjIhnc5c9I+ix07dghDQ0Px9OlTIYQQO3fuFGm78MfeRyGEqF+/vihXrpy4ePGiuHbtmnBzcxNGRkZi3rx56jrz5s0Tx48fF4GBgeLYsWOiePHion///kIIIRISEsT8+fOFubm5CA4OFsHBwSI6OloIIYStra16OXv37hVGRkbqaUIIsWfPHmFkZKT+TD62n3wLvtTnAkDs3LlTY9kWFhZizZo1QgghLl++LACIo0ePiuDgYBEWFqZev6mpqejatau4c+eOuHPnjhBCiFWrVon9+/eLgIAAceHCBVGtWjXRuHFj9bLfPwa/Ve9+R6Vp0aKFKF++vGjRooUoWbKkOH36tLhx44Zwd3cXjo6OIjExUQghRNOmTUWDBg3ErVu3REBAgNizZ484deqUEELz/eE+Lz0m6Qy8n6R/+OEHjelpO/KuXbvUZfHx8cLY2FicP39eo26vXr1Ex44dNeZL+4Lo1auX+PnnnzXqnzlzRujo6Ii3b98KIYQoW7as8PLyUk8fO3asqFKlSoaxp6SkCDMzM7Fnzx51GQDx+++/q1/HxMQIAOLAgQPpxiUn734WVatWFT179hRCaCaDj72P9+/fFwDElStX1NP9/PwEAI0k/b6tW7eK3Llzq1+vWbNGWFhYaNV79wsrKSlJ5MmTR6xfv149vWPHjqJ9+/ZCiMztJ9+CL/G5CPHxJB0YGCgAiOvXr2utP1++fCIhIeGDcV65ckUAUCcQOe/rWfHu+69SqcSRI0eEUqkUrVq1EgDEuXPn1HVfv34tjIyMxJYtW4QQQri4uAhPT890l/v++8N9Xlps7s6kChUqpFtesWJF9f/9/f0RFxeHBg0awNTUVP23fv16BAQEpDv/zZs3sXbtWo367u7uUKlUCAwMBAB07twZmzZtApB67fvvv/9G586d1csICQlBnz594OTkBAsLC5ibmyMmJgZBQUEa6ypTpoz6/yYmJjA3N//mmgFnzJiBdevW4f79+xrlH3sffX19oaenh/Lly6vncXR0hJWVlcZyjh49inr16qFgwYIwMzND165dERYWhri4uEzHqKenh3bt2sHb2xsAEBsbi3///Vf9mX3KfiJ3n/q5fC4XFxcYGBholF27dg3NmzdHkSJFYGZmBjc3NwDQOh6+B3v37oWpqSkMDQ3RuHFjtG/fHt27d4eenp7GZbLcuXOjePHi6s9n0KBBmDx5MlxdXTFhwgTcunXrs+LIift8dtGTOoBvhYmJyUfL065d7tu3DwULFtSol9H4tzExMejbty8GDRqkNa1IkSIAgI4dO2L06NHw8fHB27dv8fTpU43rPx4eHggLC8OCBQtga2sLpVKJatWqaXWk0dfX13itUCigUqky2mRZqlWrFtzd3TF27FiN6+Yfex8fPnz40WU/fvwYzZo1Q//+/TFlyhTkypULZ8+eRa9evZCYmJilTjKdO3eGm5sbXr16hSNHjsDIyAiNGjVSxwpkbT+Ru0/9XIDU/VC8NzpxUlJSptb7/nEZGxsLd3d3uLu7w9vbG3nz5kVQUBDc3d2/y45lderUwZIlS2BgYIACBQpAT09P3dfkQ3r37g13d3fs27cPhw8fxrRp0zBnzhwMHDjwk2PJaft8dmGS/oKcnZ2hVCoRFBSk/vX+MeXLl8e9e/fg6OiYYZ1ChQrBzc0N3t7eePv2LRo0aABra2v19HPnzmHx4sVo0qQJAODp06d4/fp1lmJPOxtJSUnJ0nxSmD59OsqVK6fuKAR8/H0sXrw4kpOTcf36dXWriL+/v0av5GvXrkGlUmHOnDnQ0UltZNqyZYvGcgwMDDL1HlWvXh2FCxfG5s2bceDAAbRt21b9I+lT9pNvwad8LkBqL+Hg4GD1az8/P42Wi6zsmw8ePEBYWBimT5+OwoULAwCuXr2a5W35VpiYmGi9tyVLlkRycjIuXbqE6tWrAwDCwsLg6+sLZ2dndb3ChQujX79+6NevH8aOHYsVK1akm6S5z0uLSfoLMjMzw4gRIzB06FCoVCrUqFEDkZGROHfuHMzNzeHh4aE1z+jRo1G1alUMGDAAvXv3homJCe7du4cjR47gzz//VNfr3LkzJkyYgMTERMybN09jGU5OTuoerVFRURg5ciSMjIyyFLutrS0UCgX27t2LJk2awMjICKampp/2RnxlLi4u6Ny5MxYuXKgu+9j7WKJECdSvXx8///wzlixZAn19fQwfPhxGRkbqW00cHR2RlJSERYsWoXnz5jh37hyWLl2qse6iRYsiJiYGx44dQ9myZWFsbJzhGXanTp2wdOlSPHz4ECdOnFCXf8p+8i34lM8FAOrWrYs///wT1apVQ0pKCkaPHq3R6mNtbQ0jIyMcPHgQhQoVgqGhofoe3vcVKVIEBgYGWLRoEfr164c7d+5g0qRJX3fDZcbJyQktW7ZEnz59sGzZMpiZmWHMmDEoWLAgWrZsCQAYMmQIGjdujGLFiiE8PBwnTpxAyZIl010e93mJSX1RXK7e7zg2ePBgjekZdT5RqVRi/vz5onjx4kJfX1/kzZtXuLu7p9tzMs3ly5dFgwYNhKmpqTAxMRFlypQRU6ZM0VhueHi4UCqVwtjYWKMHpRBC+Pj4iIoVKwpDQ0Ph5OQktm7dqtGpQ4iPd84RQggvLy9hY2MjFAqF8PDwyOxb9dWl14s1MDBQGBgYiHd34Y+9jy9evBCNGzcWSqVS2Nraik2bNglra2uxdOlSdZ25c+eK/PnzCyMjI+Hu7i7Wr1+v9Xn169dP5M6dWwAQEyZMEEIIrfdbCCHu3bsnAAhbW1uhUqk0pn1sP/kWfKnP5fnz56Jhw4bCxMREODk5if3792vtmytWrBCFCxcWOjo6ws3NLcP1CyHEpk2bRNGiRYVSqRTVqlUTu3fv1uh49j12HHvfmzdvRNeuXYWFhYV6X3748KF6+oABA4SDg4NQKpUib968omvXruL169dCiPTfH+7z0uGjKinHevbsGQoXLqzuLEZEJDdM0pRjHD9+HDExMXBxcUFwcDBGjRqF58+f4+HDh1qd6oiI5IDXpCnHSEpKwm+//YZHjx7BzMwM1atXh7e3NxM0EckWz6SJiIhkioOZEBERyRSTNBERkUwxSRMREckUkzQREZFMMUkTERHJFJM00Xege/fuaNWqlfp17dq1MWTIkGyP4+TJk1AoFIiIiMj2dRN9j5ikib6i7t27Q6FQQKFQwMDAAI6OjvDy8kJycvJXXe+OHTsyPWY1EyuRfHEwE6KvrFGjRlizZg0SEhKwf/9+/Prrr9DX18fYsWM16iUmJmo9G/lT5cqV64ssh4ikxTNpoq9MqVTCxsYGtra26N+/P+rXr4/du3erm6inTJmCAgUKqB/x+PTpU7Rr1w6WlpbIlSsXWrZsicePH6uXl5KSgmHDhsHS0hK5c+fGqFGjtJ7H/H5zd0JCAkaPHo3ChQtDqVTC0dERq1atwuPHj1GnTh0AgJWVFRQKhfp50CqVCtOmTYOdnR2MjIxQtmxZbNu2TWM9+/fvR7FixWBkZIQ6depoxElEn49JmiibGRkZITExEQBw7Ngx+Pr64siRI9i7dy+SkpLg7u4OMzMznDlzBufOnYOpqSkaNWqknmfOnDlYu3YtVq9ejbNnz+LNmzfYuXPnB9fZrVs3/P3331i4cCHu37+PZcuWwdTUFIULF8b27dsBAL6+vggODsaCBQsAANOmTcP69euxdOlS3L17F0OHDkWXLl1w6tQpAKk/Jlq3bo3mzZvjxo0b6N27N8aMGfO13jainEnCJ3ARfffefZygSqUSR44cEUqlUowYMUJ4eHiIfPnyiYSEBHX9DRs2iOLFi2s85i8hIUEYGRmJQ4cOCSGEyJ8/v5g5c6Z6elJSkihUqJDGYwvffbyqr6+vACCOHDmSbozpPZowPj5eGBsbi/Pnz2vU7dWrl+jYsaMQQoixY8cKZ2dnjemjR4/+Lh4DSSQXvCZN9JXt3bsXpqamSEpKgkqlQqdOneDp6Ylff/0VLi4uGtehb968CX9/f5iZmWksIz4+HgEBAYiMjERwcDCqVKminqanp4eKFStqNXmnuXHjBnR1deHm5pbpmP39/REXF4cGDRpolCcmJuKHH34AANy/f18jDgCoVq1aptdBRB/HJE30ldWpUwdLliyBgYEBChQoAD29/w47ExMTjboxMTGoUKECvL29tZaTN2/eT1q/kZFRlueJiYkBAOzbtw8FCxbUmKZUKj8pDiLKOiZpoq/MxMQEjo6Omapbvnx5bN68GdbW1jA3N0+3Tv78+XHp0iXUqlULAJCcnIxr166hfPny6dZ3cXGBSqXCqVOnUL9+fa3paWfyKSkp6jJnZ2colUoEBQVleAZesmRJ7N69W6Ps4sWLH99IIso0dhwjkpHOnTsjT548aNmyJc6cOYPAwECcPHkSgwYNwrNnzwAAgwcPxvTp07Fr1y48ePAAv/zyywfvcS5atCg8PDzQs2dP7Nq1S73MLVu2AABsbW2hUCiwd+9ehIaGIiYmBmZmZhgxYgSGDh2KdevWISAgAD4+Pli0aBHWrVsHAOjXrx/8/PwwcuRI+Pr6YtOmTVi7du3XfouIchQmaSIZMTY2xunTp1GkSBG0bt0aJUuWRK9evRAfH68+sx4+fDi6du0KDw8PVKtWDWZmZvjxxx8/uNwlS5agTZs2+OWXX1CiRAn06dMHsbGxAICCBQti4sSJGDNmDPLly4cBAwYAACZNmoTx48dj2rRpKFmyJBo1aoR9+/bBzs4OAFCkSBFs374du3btQtmyZbF06VJMnTr1K747RDmPQmTU24SIiIgkxTNpIiIimWKSJiIikikmaSIiIplikiYiIpIpJmkiIiKZYpImIiKSKSZpIiIimWKSJiIikikmaSIiIplikiYiIpIpJmkiIiKZ+h/utKmRyvl+TgAAAABJRU5ErkJggg==\n"
          },
          "metadata": {}
        },
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "Best DT Params: {'criterion': 'gini', 'max_depth': None}\n"
          ]
        }
      ]
    },
    {
      "cell_type": "code",
      "source": [
        "from sklearn.svm import LinearSVC\n",
        "from sklearn.metrics import classification_report\n",
        "\n",
        "svm = LinearSVC(class_weight=\"balanced\", random_state=42)\n",
        "svm.fit(X_train_tfidf, y_train)\n",
        "\n",
        "y_pred = svm.predict(X_test_tfidf)\n",
        "print(classification_report(y_test, y_pred, zero_division=0))\n"
      ],
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "AXKRMxJ8IPrJ",
        "outputId": "2e261ce6-e879-460a-b2fe-1d293d8c8626"
      },
      "execution_count": 105,
      "outputs": [
        {
          "output_type": "stream",
          "name": "stdout",
          "text": [
            "              precision    recall  f1-score   support\n",
            "\n",
            "  Irrelevant       0.88      0.88      0.88      2129\n",
            "    Negative       0.92      0.92      0.92      3675\n",
            "     Neutral       0.91      0.88      0.90      3022\n",
            "    Positive       0.87      0.90      0.88      3194\n",
            "\n",
            "    accuracy                           0.90     12020\n",
            "   macro avg       0.90      0.90      0.90     12020\n",
            "weighted avg       0.90      0.90      0.90     12020\n",
            "\n"
          ]
        }
      ]
    }
  ]
}