{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "title01",
   "metadata": {},
   "source": [
    "# Project 2 - NLP Classification with Imbalanced Data\n",
    "\n",
    "**SID: 253000264**\n",
    "\n",
    "**Methodology:** TF-IDF feature representation + Random Forest classifier, comparing baseline performance against resampling techniques (RandomOverSampler, RandomUnderSampler, SMOTE) for handling class imbalance.\n",
    "\n",
    "Steps:\n",
    "1. Download the NLP dataset for the classification problem.\n",
    "2. Apply data preprocessing.\n",
    "3. Split the dataset.\n",
    "4. Apply feature representation methods (TF-IDF).\n",
    "5. Train and evaluate models (baseline vs. resampling techniques)."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "imports_md",
   "metadata": {},
   "source": [
    "## Import necessary libraries"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "imports_code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-23T20:21:18.216325Z",
     "iopub.status.busy": "2026-08-23T20:21:18.216055Z",
     "iopub.status.idle": "2026-08-23T20:21:24.567778Z",
     "shell.execute_reply": "2026-08-23T20:21:24.567236Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "[nltk_data] Downloading package punkt to /Users/suad/nltk_data...\n",
      "[nltk_data]   Package punkt is already up-to-date!\n",
      "[nltk_data] Downloading package punkt_tab to /Users/suad/nltk_data...\n",
      "[nltk_data]   Package punkt_tab is already up-to-date!\n",
      "[nltk_data] Downloading package stopwords to /Users/suad/nltk_data...\n",
      "[nltk_data]   Package stopwords is already up-to-date!\n",
      "[nltk_data] Downloading package wordnet to /Users/suad/nltk_data...\n",
      "[nltk_data]   Package wordnet is already up-to-date!\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "True"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "from sklearn.model_selection import train_test_split, GridSearchCV\n",
    "from sklearn.ensemble import RandomForestClassifier\n",
    "from sklearn.metrics import confusion_matrix, accuracy_score, precision_score, recall_score, f1_score, classification_report\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "from sklearn.feature_extraction.text import TfidfVectorizer\n",
    "\n",
    "import re\n",
    "import nltk\n",
    "from nltk.corpus import stopwords\n",
    "from nltk.tokenize import word_tokenize\n",
    "from nltk.stem import PorterStemmer\n",
    "\n",
    "from imblearn.over_sampling import RandomOverSampler, SMOTE\n",
    "from imblearn.under_sampling import RandomUnderSampler\n",
    "from collections import Counter\n",
    "\n",
    "import warnings\n",
    "warnings.filterwarnings(\"ignore\")\n",
    "\n",
    "# Download NLTK resources (only first time)\n",
    "nltk.download('punkt')\n",
    "nltk.download('punkt_tab')\n",
    "nltk.download('stopwords')\n",
    "nltk.download('wordnet')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "evalfunc_md",
   "metadata": {},
   "source": [
    "## Function to evaluate model"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "evalfunc_code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-23T20:21:24.569517Z",
     "iopub.status.busy": "2026-08-23T20:21:24.569296Z",
     "iopub.status.idle": "2026-08-23T20:21:24.572959Z",
     "shell.execute_reply": "2026-08-23T20:21:24.572270Z"
    }
   },
   "outputs": [],
   "source": [
    "def evaluate_model(model_name, y_true, y_pred):\n",
    "\n",
    "    # Calculate metrics\n",
    "    accuracy = accuracy_score(y_true, y_pred)\n",
    "    precision = precision_score(y_true, y_pred, average='weighted')\n",
    "    recall = recall_score(y_true, y_pred, average='weighted')\n",
    "    f1 = f1_score(y_true, y_pred, average='weighted')\n",
    "    cm = confusion_matrix(y_true, y_pred)\n",
    "\n",
    "    # Create a report\n",
    "    report = classification_report(y_true, y_pred)\n",
    "\n",
    "    # Plot confusion matrix\n",
    "    plt.figure(figsize=(4, 4))\n",
    "    sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', cbar=False,\n",
    "                xticklabels=np.unique(y_true), yticklabels=np.unique(y_true))\n",
    "    plt.title(f'Confusion Matrix for {model_name}')\n",
    "    plt.xlabel('Predicted Label')\n",
    "    plt.ylabel('True Label')\n",
    "    plt.show()\n",
    "\n",
    "    # Output results\n",
    "    metrics = {\n",
    "        'Model Name': model_name,\n",
    "        'Accuracy': accuracy,\n",
    "        'Precision': precision,\n",
    "        'Recall': recall,\n",
    "        'F1 Score': f1,\n",
    "        'Classification Report': report\n",
    "    }\n",
    "    return metrics"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "rffunc_md",
   "metadata": {},
   "source": [
    "## Function to apply Random Forest with grid search"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "rffunc_code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-23T20:21:24.574376Z",
     "iopub.status.busy": "2026-08-23T20:21:24.574279Z",
     "iopub.status.idle": "2026-08-23T20:21:24.577468Z",
     "shell.execute_reply": "2026-08-23T20:21:24.577084Z"
    }
   },
   "outputs": [],
   "source": [
    "def train_random_forest_classifier_with_grid_search(X_train_vec, y_train, X_test_vec, y_test, evaluate_model_func, experiment_name='RandomForestClassifier'):\n",
    "    # Define the Random Forest Classifier\n",
    "    rf_classifier = RandomForestClassifier(random_state=42)\n",
    "\n",
    "    # Define the hyperparameters for grid search\n",
    "    param_grid = {\n",
    "        'n_estimators': [100, 200, 300],\n",
    "        'max_depth': [None, 10, 20, 30],\n",
    "    }\n",
    "\n",
    "    # Initialize GridSearchCV\n",
    "    grid_search = GridSearchCV(estimator=rf_classifier, param_grid=param_grid, cv=5,\n",
    "                                scoring='accuracy', n_jobs=-1)\n",
    "\n",
    "    # Fit the grid search to the data\n",
    "    grid_search.fit(X_train_vec, y_train)\n",
    "\n",
    "    # Get the best estimator from grid search\n",
    "    best_rf_classifier = grid_search.best_estimator_\n",
    "\n",
    "    # Make predictions using the best model\n",
    "    y_pred = best_rf_classifier.predict(X_test_vec)\n",
    "\n",
    "    # Evaluate the model\n",
    "    evaluation_results = evaluate_model_func(experiment_name, y_test, y_pred)\n",
    "\n",
    "    # Print the evaluation results\n",
    "    for key, value in evaluation_results.items():\n",
    "        if key == 'Classification Report':\n",
    "            print(value)  # Print report separately for better readability\n",
    "        else:\n",
    "            print(f\"{key}: {value:.4f}\" if isinstance(value, float) else f\"{key}: \\n{value}\")\n",
    "\n",
    "    # Print the best parameters found by grid search\n",
    "    print(\"\\nBest hyperparameters found by GridSearchCV:\")\n",
    "    print(grid_search.best_params_)\n",
    "\n",
    "    return evaluation_results"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "read_md",
   "metadata": {},
   "source": [
    "## Reading dataset"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "read_code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-23T20:21:24.578692Z",
     "iopub.status.busy": "2026-08-23T20:21:24.578609Z",
     "iopub.status.idle": "2026-08-23T20:21:24.591551Z",
     "shell.execute_reply": "2026-08-23T20:21:24.591058Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>text</th>\n",
       "      <th>sentiment</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Java Concurrency in Practice is probably the b...</td>\n",
       "      <td>positive</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>haha aww hun i bet you are more creative tha...</td>\n",
       "      <td>positive</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>_pickle lol, thank you very much Hope you`re h...</td>\n",
       "      <td>positive</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Out for an evening on the town with jeremy. Sa...</td>\n",
       "      <td>negative</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>- just took over the #1 Most Endorsed spot on...</td>\n",
       "      <td>positive</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                text sentiment\n",
       "0  Java Concurrency in Practice is probably the b...  positive\n",
       "1    haha aww hun i bet you are more creative tha...  positive\n",
       "2  _pickle lol, thank you very much Hope you`re h...  positive\n",
       "3  Out for an evening on the town with jeremy. Sa...  negative\n",
       "4   - just took over the #1 Most Endorsed spot on...  positive"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.read_csv(\"unbalanceddataset.csv\")\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "value_counts_code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-23T20:21:24.592750Z",
     "iopub.status.busy": "2026-08-23T20:21:24.592627Z",
     "iopub.status.idle": "2026-08-23T20:21:24.597952Z",
     "shell.execute_reply": "2026-08-23T20:21:24.597300Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "sentiment\n",
       "positive    2000\n",
       "negative     600\n",
       "Name: count, dtype: int64"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['sentiment'].value_counts()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "preprocess_md",
   "metadata": {},
   "source": [
    "## Preprocessing English text (Data Preprocessing step)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "preprocess_code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-23T20:21:24.599252Z",
     "iopub.status.busy": "2026-08-23T20:21:24.599158Z",
     "iopub.status.idle": "2026-08-23T20:21:24.817944Z",
     "shell.execute_reply": "2026-08-23T20:21:24.817535Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0       java concurr practic probabl best java book iv...\n",
       "1                                haha aww hun bet creativ\n",
       "2                pickl lol thank much hope your great day\n",
       "3                    even town jeremi sad carri cant come\n",
       "4               took endors spot twindexxcom thank endors\n",
       "                              ...                        \n",
       "2595    what yall made earli night think ima bout take...\n",
       "2596                                                 agre\n",
       "2597                                           yeah thank\n",
       "2598                                    good morn everyon\n",
       "2599           em babi start kindergarten crazi summer go\n",
       "Name: clean_text, Length: 2600, dtype: str"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "stemmer = PorterStemmer()\n",
    "stop_words = set(stopwords.words('english'))\n",
    "\n",
    "def preprocess_text(text):\n",
    "    # 1. Lowercasing\n",
    "    text = text.lower()\n",
    "    # 2. Remove URLs\n",
    "    text = re.sub(r'http\\S+|www.\\S+', '', text)\n",
    "    # 3. Remove HTML tags\n",
    "    text = re.sub(r'<.*?>', '', text)\n",
    "    # 4. Remove Special Characters, Numbers, Punctuation\n",
    "    text = re.sub(r'[^a-zA-Z\\s]', '', text)\n",
    "    # 5. Tokenization\n",
    "    tokens = word_tokenize(text)\n",
    "    # 6. Remove Stop Words\n",
    "    tokens = [word for word in tokens if word not in stop_words]\n",
    "    # 7. Stemming\n",
    "    stemmed_tokens = [stemmer.stem(word) for word in tokens]\n",
    "    # 8. Final clean text reconstruction (optional)\n",
    "    clean_text = ' '.join(stemmed_tokens)\n",
    "\n",
    "    return clean_text\n",
    "\n",
    "df[\"clean_text\"] = df[\"text\"].apply(preprocess_text)\n",
    "df = df.dropna()\n",
    "df['clean_text']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "preprocess_head_code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-23T20:21:24.819222Z",
     "iopub.status.busy": "2026-08-23T20:21:24.819133Z",
     "iopub.status.idle": "2026-08-23T20:21:24.822953Z",
     "shell.execute_reply": "2026-08-23T20:21:24.822368Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>text</th>\n",
       "      <th>sentiment</th>\n",
       "      <th>clean_text</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Java Concurrency in Practice is probably the b...</td>\n",
       "      <td>positive</td>\n",
       "      <td>java concurr practic probabl best java book iv...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>haha aww hun i bet you are more creative tha...</td>\n",
       "      <td>positive</td>\n",
       "      <td>haha aww hun bet creativ</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>_pickle lol, thank you very much Hope you`re h...</td>\n",
       "      <td>positive</td>\n",
       "      <td>pickl lol thank much hope your great day</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Out for an evening on the town with jeremy. Sa...</td>\n",
       "      <td>negative</td>\n",
       "      <td>even town jeremi sad carri cant come</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>- just took over the #1 Most Endorsed spot on...</td>\n",
       "      <td>positive</td>\n",
       "      <td>took endors spot twindexxcom thank endors</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                text sentiment  \\\n",
       "0  Java Concurrency in Practice is probably the b...  positive   \n",
       "1    haha aww hun i bet you are more creative tha...  positive   \n",
       "2  _pickle lol, thank you very much Hope you`re h...  positive   \n",
       "3  Out for an evening on the town with jeremy. Sa...  negative   \n",
       "4   - just took over the #1 Most Endorsed spot on...  positive   \n",
       "\n",
       "                                          clean_text  \n",
       "0  java concurr practic probabl best java book iv...  \n",
       "1                           haha aww hun bet creativ  \n",
       "2           pickl lol thank much hope your great day  \n",
       "3               even town jeremi sad carri cant come  \n",
       "4          took endors spot twindexxcom thank endors  "
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "splitfeat_md",
   "metadata": {},
   "source": [
    "## Splitting the dataset and applying feature representation (TF-IDF)\n",
    "\n",
    "First, we study the effect of applying an ML model directly on the imbalanced dataset (baseline, no resampling)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "splitfeat_code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-23T20:21:24.824419Z",
     "iopub.status.busy": "2026-08-23T20:21:24.824306Z",
     "iopub.status.idle": "2026-08-23T20:21:24.859186Z",
     "shell.execute_reply": "2026-08-23T20:21:24.858692Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train size: (1820, 3657) | Test size: (780, 3657)\n"
     ]
    }
   ],
   "source": [
    "X = df['clean_text']\n",
    "y = df['sentiment']\n",
    "\n",
    "X_train, X_test, y_train, y_test = train_test_split(\n",
    "    X, y, test_size=0.30, random_state=42, stratify=y\n",
    ")\n",
    "\n",
    "vectorizer = TfidfVectorizer()\n",
    "X_train_vec = vectorizer.fit_transform(X_train)\n",
    "X_test_vec = vectorizer.transform(X_test)\n",
    "\n",
    "print(\"Train size:\", X_train_vec.shape, \"| Test size:\", X_test_vec.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "baseline_md",
   "metadata": {},
   "source": [
    "## Baseline: Random Forest Classifier on the imbalanced dataset (no resampling)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "baseline_code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-23T20:21:24.860450Z",
     "iopub.status.busy": "2026-08-23T20:21:24.860359Z",
     "iopub.status.idle": "2026-08-23T20:21:34.758183Z",
     "shell.execute_reply": "2026-08-23T20:21:34.757596Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgwAAAGJCAYAAADmE2v5AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjExLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvctoD+AAAAAlwSFlzAAAPYQAAD2EBqD+naQAARKNJREFUeJzt3QeUFFXaxvGXHAWRnDMISJIggoAgyioqKrouZlgWE5gTu+qKYsK8yprWAIpZVFRABFQkRwEByUlFggQByfR3nivVX3dPqB7o6pl2/r9z5kx3dXXV7VvprZsqTygUChkAAEAm8mb2IQAAAAEDAACICyUMAADAFwEDAADwRcAAAAB8ETAAAABfBAwAAMAXAQMAAPjzBgxbt261KVOm2JgxY2zjxo0JX/6PP/7olr179+6ELzuVBZUvQW/PVDB//nz7+uuvszsZCNj06dPdXyLNmTPHHT9/BosWLbLx48fHPf/q1avtm2++CTyPg95eydqGyivl2ZHIczQjPWql69atswIFCli1atWsYsWKlidPHgva8OHDrW/fvtakSRMrWbKk/fvf/7aTTz45oev43//+Z//4xz9s1apVVqNGDUumDRs22Ny5c93rNm3a2LHHHptmnqVLl9rKlSvd67/85S9ZXsfatWvdgdmpUycrVKhQtuZLMrZnenkr+fLls9KlS1vDhg2tcOHClp0uu+wyFzAoKMsOyhflT3oaNGhg1atXt5xm1qxZtn///kD2FwVwP//8s51xxhmWN2/i7q1OOeUU93/SpEkJW+bZZ5/t9pvvvvvOUt0111xj77zzjm3bts133kOHDlmLFi3stNNOs8cffzzQPE6k9LZXsrbhLbfc4s4zOnayul/nP5IVDhs2zAYNGmS//PKLNW7c2AUJCxYssDJlyth1111nt956qwVFO8gNN9xgV111lQ0ZMiSw9VStWtW6du1qRYoUsWT79ttv7aKLLnKvH330UbvjjjvSzHPFFVeEI+gjiflGjhxp/fv3dwFflSpVsi1fkrU9Y/O2adOmVqFCBXexUeD0+++/28CBA+2mm26y3Eq/X/uFLpDpncRzYsBw1113uQuLTn6JNnjwYBfMqjQtu4NJZHwtWrJkiY0dOzbls6hFixZJOcZ0zDz//PMu73TeDTRgUDDw9NNPu4BBkYp3d6qD6tlnn7WHHnoo0IBh/fr1tmXLFheoBEkXRf1lp8qVK9vrr7+eJmBYvHixCxZ0oU/23Wii8yVZ2zO9g+Zvf/ube71v3z67/PLL7eabb3Z30tm93bOT7jhULQSkgqeeesq6d+9uZcuWtT9DwJ4M5cqVs3POOcflXaABg04kTz75pP3zn/+0AQMGRH2mO05d2Fq2bJnme3v27LF58+a5oKJu3bruQhhbtfHDDz+4YqX8+fO7otFdu3ZZ8+bNrXjx4uH5Fi5caFOnTnWvFVUqPQpYVKyu7+tu+fTTT49a9qZNm2z27NlpivZ1Z6tlqL5cd801a9aMqk7Rhfj777+3jh07prmbTtTv8aOL2COPPGIzZsyw1q1bh6e/9tprLljQ737jjTfS/b2i31O0aFE7/vjjow4o/W4FHaKiKZUMSatWrVzxfGz69VuVT7rzjM0XXWy/+uort/wTTzwxKi1ax5o1a1xxsaoaYmW2PY80ryPTGq+CBQu6ffe9996zjz/+OCpg0PIU1HgXU+XPCSeckKYaR3WPmqa7hO3bt7vi7BIlSrhqloyq6ZRuVQGoOsTvhKc0KI90p6tlartmtH61B9E20j6i/drjTfeqYI7G3r173W/Ufl27dm13DEXSsajt6+0nmle/QcenVwyq72q6lqX06EQWa+fOna76Tdu/fv364X3VKy369ddf3XK8IEf7QJcuXSwoXqneSSedFN7OqoqtU6dOeJ7ffvvNTdf5RvtKZrxl6PjwSmsjKQ+Vl6J8K1WqlFtmPCV88X438jft2LHD7fPFihVzpXAZFVlre6hUWSV0WmZ6x3c821eWLVvmqn60fVXqF6+ZM2e65T/wwANJy+OdmeyPR/LbY9sw6HzXtm3bo9o28axbN0s9evRweajzftxCWXDWWWeF8ufPH9qyZUvc3/nPf/4TOuaYY0I1atQItWzZMlSwYMHQueeeG/r111/D8zz22GMqUw999913obZt24batGkTqlSpUujYY48NjR07NjzfU089FTrllFPcvI0aNQp17do11LNnT/fZjTfeGCpUqFCa9X/66adu/m+//TY8bdq0aaHatWuHKlasGOrYsWOobt26ocaNG4emTJkSnufll19231u1alVgvycj77//vvu+0q60XXvtteHPDhw44NL9r3/9K3TllVe6+SJNnz7d5Yv+zjjjjFDTpk1D+fLlC/3tb38L7du3L/zbGjRo4L576qmnhuefO3duVPpnzpwZatWqlfsrWbJkhvnSp08flw/KV8+KFSvc79VyDx48mO7vzGx7ZjWv00trZnn79ttvR01ftmyZm3755ZdHTX/44YfD+dOpU6dQlSpV3PKHDRsWNZ/yWfNo+fXq1QudfPLJoSJFioROOumk0NatW6Pm3bRpk9vvtL+2bt06VKdOHZcXl156aahy5cpR8+q7PXr0CBUoUCDUokWLUK1atULFixcPPf744+muX+nS+rVcfee2225zn7/66qtuutKj6dofDh06FLWM7t27u33Fj/YBbduqVau69eh3aN2//PJLeJ7nn3/e5eekSZPcMaDtV6JEidDu3bvdPnzXXXeFChcuHDr++OPdMvS6b9++ob1794aX8eSTT7rf2rBhw1CHDh1CFSpUcHmxefNm93mvXr1CpUuXdsv1ttF5550XShRtD/0GpdnTrl079/fBBx+E81P7pXeMar/SdB3zmq481e+N5C3j3Xffdech7SvFihVz2zD2fKP9wvttnTt3DlWvXt0dEy+88ELUfN26dXPfP5Lveun57LPPXNq1vZSeZs2ahTZu3Bg17/79+922075ds2ZN971y5cqFbrnllvA88W7fbdu2ubRpf9T+oePgwQcfDF199dWZHsMezavt4+0PQefxkz77Y1Z+e3rbK71pWdk28a5bNmzY4PJu0KBBoazIUsCgA7NJkyZxz6+DR4kaOHBgeNq8efNCZcqUcRsm9qR//vnnh9asWeOm7dmzx2WUNrZ2Us/ixYvdvDppRcpKwKCLpYKfyAvZokWLQiNHjgy/T+/CGMTv8QsYdFCUKlXKfV+04+gzXeDSCxjSo0BAB2DkzvHss8+6765bty7N/F76lUcrV650077//vsM80Un1ObNm7sLiC6G3vtq1aqlezBHymh7ZjWv00trVgKGl156yU3XSSEzusgqH3UxWLJkSXi6DnSd8Pr37x++QMyfP9+dDBXcRVIgV758ebfPecu8+eabQ/Xr108TMOh36eI8a9as8LTBgwe7tCoIiFy/9q2bbropvF97efjoo4+6C5o3XRc7TY/c30UXt7x584ZGjx4d9TdhwoTwPPqOvnvHHXeEAw5tQwXEunh607yAoUuXLuF8Wrp0qQtalUbly+effx5ervJK+7l34fnhhx/c97WcSCNGjHD7vue0005zgVQQMgoYFMAqP73t7J1jHnroIRfEeMf3mDFj3PS33norarlahi5KV111VTiI//HHH90FQTcusQFGJOWvLnC6cdMNSWYXm3i/6/0mXai99GibKSjQeTVSv3793LbTPuTRdxTce+LZvnLBBReEjjvuuKi06FjRxS6egEE3D7HHS1B5HO/+eFOcvz0rAUO82ybedXt043n22WeHAgkYFKEow3SAxksXDd0hx95hPvLII25ZM2bMiDrpDx8+PGo+vdd0XSgSGTAos6+77rpM057ehTGI3+MXMOiCrpO4ImVRRKu7csksYFi/fn1o4sSJ7qSlk76iTe978QYMsXmcUb5ElijoYqiTZmyJQ0Yy2p5Zzev00ppZ3ioSV77oAqigRHcOuivcsWNHmu8oDQsXLgyNHz/efce74EbegehAV0Ad+/0zzzzTnaA8Cmb0XV30I+miVLZs2agToNapee+99940adIydfKLXf/OnTujTnw6Ieu3/fbbb1HTtS6VDMUGDHny5AnfbXl/kaU+7du3d6Us3snL89xzz7m0esGFFzDoxBtJpRA6EevCE+uee+5xd0S///576IsvvnDf9yuRy0rAoH00MhDSOo4kYFAaY0tZlSfa52MDZJ3sVZoTScvQiT2yREbeeecdt75Ro0ZFTdf20nHi7X86L+icEFnKlFHAEM93lR6dOyNL7uSiiy5ypQien376yZVARZZ4xop3++r8kd6+rWBLNx7xBAw6p2UUJCU6j+PZH3+J87dnNWCIZ9tkZd0e3fxnNdiOuw2Duk6qC5rqWOJx4MABV99y6aWXpqlr8bq8qK49sv4kti7FazGq+iXV2yaKWsmrlaiWq64sqmdVfVRO/D2qh1b9vBo/6v+nn37q0p4R1ROr7cPEiROtUaNGro5N203dKLPa0lvtPuJVq1YtGzp0qJ133nmu14YawKre7UgcSV5nJa0yevRo17ZEdZH6r7YlyuPYNibKb/X8Ub2gGkRGfh7b4FRtRWK/r23utdPw0p1eerVtmjVr5npseLyW/+3atUuTfk174YUXXL3mMcccE16/6jc9qqtVmw8du9483nTtV169bVYaPSr9auOhZWa0XSLboMT+zmnTprntq/rkcePGuX3F6+Vz8OBBd35RWw19T+0iLrzwQrcfaN8/9dRTXfuLI/XWW2/ZPffcE36v40JpySrt66rnjqS0ql1JbPo0Pb18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2Pbt261Fixa2ZMkS93rTpk1ueq1atey6666zvXv3Zud2AgAgWxEwHDZ06FA76aSTbNSoUS5w8FSqVMkqVqxoX3/9dXZtIwAAsh0Bw2HLli2zjh07utd58uSJyqRy5cq56goAAHIrAobDypYta8uXL08TMOzevdumTp1q1atXz54tBABADpCrx2GIdMkll1jr1q2tVatWLkjYs2ePTZs2ze655x4rVqyYtWvXLruTCABAtmEchghqv9CnTx9bv359eFrjxo3tgw8+sHr16ll2YxwGJAvjMCBZGIchdRAwxNi/f78bLnrz5s1WuXJla9q0aZo2DdmFgAHJQsCAZCFgSB0EDBk4cOCA5c+fs2psCBiQLAQMSBYChtRBo8cICxcutAsuuMBKly5tBQsWdCUM/fv3D4/JAABAbkUJw2FLly514y+0b9/eLr74YitTpoytWbPGXnzxRdu3b5/NnTvXChcunK0bixIGJAslDEgWShhSR84qc89Gr732mp1++uk2YsSIqOlXXXWVNWnSxL788ks755xzsi19AABkJ6okDjt48KCdcsopaTKoaNGi7rHWatMAAEBuRcBwmMZZUOmCeklEUhdLjcfQsmXL7Ng+AADkCLm6SmLs2LE2f/788PuVK1fa8ccfb927d3cNH9etW2fvvfee1a9f37Zt22ZVq1bN1vQCAJBdcnXAoJKDyDYLemaERD7Oulq1am7kRw0brUGcAADIjeglkULoJYFkoZcEkoVeEqmDNgwAAMBXrq6SSM/OnTttxYoVtmPHjqjpdevWtfLly2dbugAAyE4EDBHuvvtuGzx4cJqeEvLyyy+7B1MBAJAbETAcNnr0aDd408SJE+2FF15wj7ru3LmzPfroo7Z48WI3gBMAALkVbRgOU6Bw9dVXW5s2baxAgQKWN29e18Xy1VdftT179tjUqVOzd0sBAJCNCBgO0+OsK1Wq5F4fd9xxtnHjRvdaj7Zu0KCBrV69Ovu2EgAA2YyA4bBQKBTOlObNm9u7775ra9eute+//97Gjx9v1atXz65tBABAtiNgOExDP9esWdO97tGjhyttUJCgwZpOPfVU69ChQ3ZuJwAAshUDN2VS4qDulfqvLpU5AQM3IVkYuAnJwsBNqYNeEhlQ24U6deq416+88orVrl3blTQAAJAbUSURB/WQ0LMkAADIrQgYAACALwIGAADg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ar9YsmSJHTp0KDy9adOmds8997jX27Ztc/uN5vX2rbVr10bNs2vXLjdd+2Ck33//3U3X/8hpSrP2MR79g2ylh08ByVC5cuXQxRdfHKpWrVqoWbNmoeLFi4e6d+8eOnjwYHietWvXhk4++eRQ+fLlQ82bN3fz3H333VHLmTJlivtcy6tVq1bo1FNPDdWuXTv02GOPhefp169fqF27dqG2bduGqlSpEqpTp05o9uzZ4c/79u0bKly4sPue5tOf1K9fP/Tss8+61w899FCobt26Ues+dOiQS7+3rnjSi+z18ssvu+1zzjnnuG1XvXr1UOnSpUMTJkyImu/WW291+8QJJ5zgtmPXrl1D27ZtC38+derU8D7XqFEjt+9oX5S3337bLVOmTZsWqlevXqhAgQLhfeuVV16Jmmf37t2hkiVLhoYPHx6Vhv/973+h4447LrR37173/plnnnHzNW7c2KVdaVu4cGHgeQakh4ABSaOTrS7c69evd+9Xr14dKlq0aGjEiBHhi3GLFi1CN910U2j//v1u2sqVK0Nly5YNffjhh+69ggtd1Hv37u3ml4EDB+qJq1EBQyTNd+edd7ogJZJO+M8//3zUtMiAQenLkydPaMaMGeHPv/nmm1DevHlDP/30U1zpRc4IGLR/9O/fPzzt5ptvDlWtWjW0Z88e9/799993wcKsWbPc+40bN7p9QYGnp3PnzqEbb7wx/F7BorfvRgYD8sYbb7ggJVLsPL169QqdddZZUfN06tQpdPXVV7vXI0eOdPvS4sWL3Xvtb7fffnuoSZMmCcoZIGuokkBS/eMf/7AKFSq419WrV3fFtKo+EDUSU9HrmWee6YqQp06d6nostGrVyj7//PPwPCoOfuCBByxPnjxu2p133mnFixdPsy4V5arqY8qUKW493333nXuiYLyUvlNOOcWGDx8enqbXnTp1cu0c4kkvcgbtKwMHDgy/12ttq/Hjx7v3r776qv31r391bVi89ga33367m+45cOCAq2bwqgWqVq1q559//hGn6bLLLrOxY8e6BpKiKrVvvvnGTZf//ve/duqpp7oqDu1b+lMbCFWnrVu37ojXCxyp/Ef8TeAIlCtXLup90aJFw/W1qvfNly+f3X///Wm+16BBA/df9bj6TmTDRA3/XK1ataj5n3rqKTcktNank7/XhkG9IrLymOtLL73ULeeJJ55wy/jggw/c63jTi5xB+0GpUqXC74855hi3D61cudK91//27dun2YbaN7XPKMh96KGHXC+aTz/91E477TQ755xzXMDgBa5ZpWCgfPny9t5779n1119vb7/9ttuP27VrF96/FJzcdtttUd/T57SVQXYgYECOUaRIEXdRHjVqVIYXdZ3o1eBR8+li7dm5c2f4tRoyqvHi119/bR06dHDTvv/+e2vcuHFUQ7V46K7zhhtucHeiaiinvx49esSdXuQMkfuHRxddb7vpf+w8+lzBgDePLtRqqKvGrdof+vfv70qSXnnllSNKU968ea1nz56u1EoBg/4rQPUCEO1fXbt2DQeoQHajSgI5hk7IBQoUiKoC8Hgn82bNmrkT6oQJE8Kf6U4ssohWJ/X8+fOH79Rk9OjRaZapE7KKmDOju1JVOShN+lNXOQUt8aYXOYN6JahqyqOeECrq96ogVI00ZsyYqO9on2nYsKEr0fK2qfa9E0880VVX3HvvvS5YTE88+5YoQFBVw2effeaqzLzqCK8EQmOCxPboYN9CdqGEATlGxYoVXfH+Lbfc4oqB27Zt6+p133nnHXdivfLKK61KlSr297//3Xr16mUPP/ywOzGrPlrVEt6dWfPmzV2bhmuuucYuuugi175g8ODBadanEgedkBs1amQFCxZ07RXSo5O41qc67Pfffz9L6UXOoMDu8ssvd21fdGf/z3/+043DoW0ven/CCSe4ba1qBwUUakMwYsSI8DJOP/1069y5s+t2u2/fPnvhhResS5cu6a5Py9q6dau9/PLLrmojtsrMowBYaejdu7cLXo4//vjwZ3fffbcLJLTOG2+80e3TajejUg21nQGSjRIGJE3r1q1dnW3sRbtGjRrh93fddZd98sknrq2CLvK6K1SjxsiL77PPPmv9+vWzYcOGuXkfe+wx1wDNuxM87rjjXAmE7sweeeQRV+KgemeVCHjziL6nO8gHH3zQrTejgZvOPvtsdweqgOIvf/lL1GfxpBfZT9v0tddec40MVYWg7aP3nsqVK7sgQaVHjz/+uBtnQyUO2vaRgzHpov3iiy+6fe+KK65wAUF6gzLVr1/fzaOL+4ABA9wojxkN3HTTTTdZvXr1XNVXJLWb0FgjKuEaOnSoW5cCY6+hJpBsPN4aKUeD3RQuXDj8XoPs1KlTx7766qsMSwmQe/3vf/+zQYMGZTpQGAB/VEkg5bz++ututL0zzjjDFfuqauKkk06KarMAAEgsqiSQcvr27euKfHXnqDpmFS+rmPZIu7fhz01F+6pSAnB0qJIAAAC+KGEAAAC+CBgAAIAvAgYAAOCLgAEAAPgiYABSiAbymTx5cvj99OnTbdq0aTkiLUHQ8jVS59HKznwC/iwYhwE4ShoK2qORAjW8b+3atQPJVz1uWcNQe2NOPP/8827I6vRGEEyPLprqfqpxKxKdllh6SNPGjRvdA5SOlJ46WqZMGWvZsuVRpDTr+QQgLQIG4CjpiYMa9rpmzZq2fft295TMCy64wN544w333IIg6cKflSdwPvfcc+7BXIkIGPxoOGPlxdEEDAByDgIGIAGuvfZau+qqq8J38XoQ1VlnneWGqtZTCPVMAhWL6+FUml6sWLHwXbiGtq5evbo1bdo0TYCh52F88803bihsPVQrlp6cGAqF0kyfP3++rVy50j34SINcRa5L6/BKRfRApdKlSyckLVmlNC5atCj8VNAmTZq4B3ql57fffnPpUxr0yPLIZ4J4/NIP4OgQMAAJpmJvPWRLgYIu5tdff727gKlIXE8t1GOL9bRDlULooVX6bOHChe47I0eODF/A9VmnTp3ckxZr1arlHoikeSKffBhb1L5lyxa78MIL3cVYpR5axmmnneZKFhYsWOAeA64qiY8//tjNr6J+XVgTkZas0nr04C7ZvHmze8yzHhbWv3//qPn0ZEY9pExVPUrH3r173cPFvGofDQ/ul34AR4+AAUgwXbT1590t6+5YFzQ9ldCjx1+rbv7LL790VQS66J9zzjn2r3/9yz02WW699VarW7eujRo1yl2o9WhjPVo5s4u0HumtdS9dutQ9tVO8i7KerqinNWp9eh5H0GmJpypHf5ENHBXc9OjRI+qJoWpcqaeAqhpl//79roRGjxT3fpeeXOqXfgBHj4ABSABVN6ioXm0Y9IwL3dlefvnl7pHI+fLls+uuuy48765du+y9995zj8bWnb5KIfSni6+euCkqgdAFUXfJukCLSgxUOpGRnTt3umdrDB8+PBwsSPfu3TP8TlBpide2bdtcSYwaR6othpY/b968qIBBVRBemwt9rmChW7durnpC3/FLP4DEIGAAEkB3wSoaVy+Jiy++2Hr37h2+aCt4KFiwYHhetWPQXbCK2pctWxa1HO/x3D/++KO7GNaoUSPqczWs1EU2PVruwYMHrV69enGnO6i0xOPNN990gZSqGqpUqeLySOlX8BApvfUqKFD1ivilH0BiEDAACW70GCv2KZolSpQIF6WreD09Xt27gpBIep/RUzmPPfZY9//XX3+NO91BpcWP17bjmWeesV69eoWnqTFobCPO9NYrqoZQ6Ydf+gEkBs2IgWx43LIa56VXv647filZsqSdcMIJ4caJouoOPcY7I2rop54Gw4YNi5q+adOm8OvixYvbnj17Ak+LH1UnqG2H14NDPv/8czc9lqoWtD6Pql1UKqESnHjSDyAxKGEAssFLL73kxifQ3/nnn+/aH6hBYosWLezhhx9286jHwHnnneeK3HWBVNsINerLjHpNaJlqOKj/6jmgbp5efb56RQwYMMBefPFFFwioW2VQaRFVWUQObOWVDHTp0sWtWyUzKh34+eefbciQIa4dSCy1W+jcubP16dPHNeZUj48PP/wwS3kJ4OgRMABHSW0WVK+eHtW/60IbS40GNQaBeiuoO6FKB9RwTxdGjxr2qfug6voXL15sAwcOdPX7kXfbsQM3afwHdZ987bXXXM+CRo0aucaKHlWbaH71ctCFVQFEotKS3hgRGgkysmRC1NtCAYNKChQkTJo0ycqVK+eWr4AnMi/VDuHMM890PU4UBKgEYty4cdaxY8cs5WVWB7gCkFaeUHqjvgAAAESgDQMAAPBFwAAAAHwRMAAAAF8EDAAAwBcBAwAA8EXAAAAAfBEwAAAAXwQMAADAFwEDAADwRcAAAAB8ETAAAABfBAwAAMD8/B+IcciXsS/0MgAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 400x400 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model Name: \n",
      "RandomForest - Imbalanced (baseline)\n",
      "Accuracy: 0.8462\n",
      "Precision: 0.8428\n",
      "Recall: 0.8462\n",
      "F1 Score: 0.8272\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "    negative       0.82      0.43      0.56       180\n",
      "    positive       0.85      0.97      0.91       600\n",
      "\n",
      "    accuracy                           0.85       780\n",
      "   macro avg       0.83      0.70      0.73       780\n",
      "weighted avg       0.84      0.85      0.83       780\n",
      "\n",
      "\n",
      "Best hyperparameters found by GridSearchCV:\n",
      "{'max_depth': None, 'n_estimators': 200}\n"
     ]
    }
   ],
   "source": [
    "results_baseline = train_random_forest_classifier_with_grid_search(\n",
    "    X_train_vec, y_train, X_test_vec, y_test, evaluate_model,\n",
    "    experiment_name='RandomForest - Imbalanced (baseline)'\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "imb_md",
   "metadata": {},
   "source": [
    "### Resampling Techniques\n",
    "1. **Undersampling** (Reducing Majority Class)\n",
    "2. **Oversampling** (Increasing Minority Class)\n",
    "3. **SMOTE** (Synthetic Minority Oversampling Technique)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ros_md",
   "metadata": {},
   "source": [
    "## RandomOverSampler"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "ros_code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-23T20:21:34.760017Z",
     "iopub.status.busy": "2026-08-23T20:21:34.759924Z",
     "iopub.status.idle": "2026-08-23T20:21:42.959085Z",
     "shell.execute_reply": "2026-08-23T20:21:42.958669Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "After RandomOversampling: Counter({'positive': 1400, 'negative': 1400})\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgUAAAGJCAYAAAAaBkAzAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjExLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvctoD+AAAAAlwSFlzAAAPYQAAD2EBqD+naQAAR65JREFUeJzt3Qd0FNUaB/Av9NAJJHTpvXekF+nSBRRQQVBQsCEWRMWOlGehCEqRjnQVkN47UpXeQouEFiCht3nn//lm3+5m02cL7v93zp5kZ2d37t6ZvfPNbRNgGIYhRERE5PeS+X0OEBERkWJQQERERIpBARERESkGBURERKQYFBAREZFiUEBERESKQQEREREpBgVERET0aAcFV65ckc2bN8vSpUvlwoULln/+2bNn9bNv3bpl+Wc/ytyVL+7en4+CP//8U9auXevtZNAjYOXKlXLw4EFvJ4Pc5P79+1oWnjx5UjwtICkzGiLBZ86ckZQpU8pjjz0mOXPmlICAAHG36dOny0svvSRly5aVTJkyyaBBg+Txxx+3dBvjx4+XF198UUJDQyV//vziSefPn5fdu3fr/9WrV5fMmTNHW+fIkSNy4sQJ/b9p06YJ3sbp06flwIEDUr9+fUmdOrVX88UT+9NV3kLy5Mkla9asUrJkSUmTJo14U9euXTUoQODlDcgX5I8rJUqUkHz58omv2bFjh9y7d88txwuCtL///tv2PFWqVJInTx4pUqSIR8q52KRPn166desmo0aNEm8LDw+XY8eOCU4lhQoVkly5cokvQHpwfkJZlzFjRilcuLCkTZtWHgVXr16VLFmyyLBhw6R///6e3biRCJMnTzaKFCliZMiQwahRo4ZRs2ZNI2PGjEbBggWN4cOHG+704MEDIygoyHjllVfcup2lS5caTZo0McLDww1PmzNnDgI1fQwZMsTlOtWqVbOtkxgjR47U9545c8ar+eKp/emct+XKldPv0aBBAyNHjhx6/H7zzTeGN3Xp0sXInTu317bfunVrIyAgQPPF+bFgwQLDFzVs2NCoVKmS2/YHjpVGjRppHjz++ONG2rRpjWLFihlbtmwxvCldunRGnz59vJqG7du3a9mfJk0azRv8j/xB2bR582avpm358uVG2bJl9RxVvXp1o0KFCkbq1KmNp59+2jh06JDh665cuaLH3rBhwzy+7QSfUfr162ckS5bM+PLLL43bt2/blt+8eVNPYCjg3ens2bOaWWPGjDH+rcwTF04QJUqUiPb6gQMH9PU8efJ4PCh41PenmbczZ860Lbtz547RsWNHXY6gx5+DguTJkxuPEk8EBbdu3XI4XrGPsmXLZly/ft3w16BgxYoVepJt06aNcfnyZdvyq1evGp06dTJSpUplLF682CtpQ/mYMmVKo3nz5poe0549ezRQQNnn6654MShIUJ8CtHF8/fXX8t5778mAAQMcqp0DAwPlnXfekTlz5kR73+3bt2Xbtm1aNRoWFuayGQKfjWpABCq7du2SDRs2yPXr1x3W279/vyxZskT/P3z4sL5nzZo1+vzQoUOyYsWKaJ998eJFXQ/VMfYePnyobXLr1q3TanjnVpTY2s6t+j5xefbZZzWN27dvd1j+008/aTUmqv5j+r54LFu2TLeLZfaQd2Z7JL6Duf7ly5ddpn/Pnj2yfPlyl/ly9+5d3Q6+ozNsA+teu3bN5feLbX8mNq/t0xpfqBbGsQu//PKLw2t79+615Q8+d+fOnXLnzp1on4H+EHgN8H2R73hvbK1zOGZx/DnvH1fOnTunebB161a5efNmrNtH/wxsH0089szlaDZKKuTBH3/8oWlCFa0zLLM/TlAVj+MEvzvTjRs3ZMuWLfoZMfUjwW8Gx9amTZvk0qVLDq/hu+CYjYyMtO0jtLW7U+7cuaV79+6alo0bNzq8hvLHTMeqVav0mHaG/MDrZp6dOnUqxjw04djGbwD73tWxZw/HG/bv6tWrZd++fdGOP+fto+xDPuLYsIdjB+ly1ZyE469Lly7ajDJ79mwJCgqyvYbmPzQHlipVSssv7Bv8hrFNNDG4gu+F/esMaUQaUP6hnInte6CJAHmO42jevHmaZx988IGmx1SuXDndZ5UrV07yfjuRiHxz9RlY176JKr4SmzfxkpAIApFXihQpjIiIiHi/Z8SIEVqFkz9/fqNy5coaQbZq1cohukQ0hKQgkkNzBKp7cuXKZWTOnFmrgUyo3q1Vq5auW6pUKa3Se+aZZ/S1119/XSNXZwsXLtT1N2zYYFu2detWo1ChQkbOnDmNunXralNImTJlHKq8xo0bp+8LDQ112/eJ62oWaUfaXn75Zdtr9+/f13QPHDjQeP7556PVFGzbts1W5du4cWOtJsfVH6rN7t69a/tuqIHAe+vVq2dbf/fu3Q7p/+OPP4wqVaroI1OmTDHmS8+ePTUfkK+m48eP6/fF56KJwJXY9mdC89pVWuNbUwBHjx7V5c8++6zD8sGDB9vyp379+lo7g8+fMmWKw3pmcwQ+v2jRolqdGhgYqFWpiPrtXbx4UY87HK9Vq1Y1ChcurHnhqqYA723fvr1e+eCKGE106dOnj9ZMZ24f6cL28bl4T//+/fX1iRMn6nKkB8txPDx8+DBRNQU4BrBv8+bNq9vB93BuUkLND/Jz48aN+hvA/kMTDa66cQy/9957Wu1cvHhx/Qz8/9JLL2mtjenrr7/W71qyZEmjTp062syDvLh06ZK+3r17dyNr1qz6ueY+wpWrO2sK7I+5efPmOSxv2bKlLR34zjh2cVzjytWE3w3eO3r0aG0yw+vYd2i2efvtt6OlYd26dVp24HvimEJ+4Vh3VVOA5XgdxyfWzZIli5Zz2AfO2x81apTxwgsv6LZxXCAPlyxZomUEyhVcUeOz8JtDc7E9HEv4jAkTJsSYd9OmTdN1vv/+ez3OcNzimHeGcwn2/auvvmpbdvLkSS2XzN8Pfh/4/rNmzYr2PXDV36NHDz1GUE6gmQs11nht9erVMaYvsfttVBLyzT7NWLd06dL6wG+ub9++DuVkTDUFSc2b+EhQUIAMwJeOLxS8SNwnn3xiW7Z3716tekNbrvOPrG3btsapU6d0GZom0EaFg/revXu2dQ8ePKjromCyl5CgACdEBDj2OwEHwG+//WZ77urk547vE1dQ8MUXX+iP22yqWbRokb6Gk5iroMAVnOxRUHz++efxaj4w0488OnHihC7bt29fjPmCQhNtdjhJ4IRnPn/sscdsBXhMYtqfCc1rV2lNSFDw448/6nKciGKDAg75iB/94cOHbctRSOAHisINJz34888/9QSMAM4egrXs2bPbCh185ptvvqlt1c5BAb4XTsA7duywLRs6dKimFYWz/fZxbL3xxhu249rMQxSSCCzN5XPnztXl9se7GRSgaRCFnP3DvnDFe/Ded955xxZUYB/ixIVCylxmBgVPPPGELZ+OHDmihSfSiHyxr15GXuE4R/MkoN3XVbPS/Pnz9dj3VvOBuU9wEj927Fis74+MjNQCvHz58tEKbJSj9oU0gk8sRzu96e+//9bfbdOmTY0bN27oMvyeEBjhRGofFCAgQ9MtgmyzyhzNG+gPgZMcTib228fJyMx/7DMEiSEhIca7777rcFx07dpVjz98FxNONPgM++PfGbaHdZCHgN+MWW7ZM8shXECZeVagQAGjYsWK2lRjnz84eZr5Y34PnPDwmwYElPh8HDvIH/yefvnlF1vexVdkLPstKflmfgbOP/gNmhBc4nhCk3xsQYEVeWNpUIAPxYbwI4wvnBhwpet8pfjVV185/ADMgn369OkO6+E5luNkYGVQgCgrro5trk5+7vg+cQUFOGmjoDYjQRQI+OFDbEHBuXPnjPXr12sbOQp2XI2Z74tvUOCcxzHli33NAE54uIJzrjmISUz7M6F57SqtseUtrlSRL/ghI/DAFSlqdKKioqK9B2nYv3+/sWrVKn2PeVIdO3asw0kZQbPz+5s1a6a1UCYELHgvTuz2cOIJDg52CAqwTaz70UcfRUsTPhNXKs7bt2/nRqGFEwW+m33hhOXYFmp44tPR0L72pnbt2lpbYtY6mXAFZX91ZgYFzp03cfJCbSOujJx9+OGHWpijf9KyZcv0/XHVrCUkKMAxah/sYBvxCQpwjGB9/AZR2GOZc6BnwgkIxybSjfe89dZbur5Zi2IW2LhgcH4fCnbkgck8kSKYsrdy5Updbh8U4OIBy3bt2uWwLk4E2KcI4uy3365dO4f11q5dq8tRE2cPtQxYjosR+ytrLHOuAbOHfWh20oSwsDD9fu+//3603zlqkUzffvutvs+57MAxi6DXDDLM74Hj0xV8Hxyr+O7YLgIEBMb2wXVi9lu7JOSb+RkIKp09+eSTesFjBtWuggKr8iYuKeLbhoFhhxi+hfah+I6zRJsq2p6SJXPsulCrVi39izbQKlWq2Jbb/w/mECi0jWC4mlU6dOggY8aM0c998sknpW7dulKsWDGf/D7oO9CwYUOZNGmS/l24cKGmPba2Z7TlrV+/Xtv1smXLpvsN7UoJHXKH4ZDxVbBgQZk8ebK0adNG2zFHjhwp1apVk8RITF4nJK2AvgwYgof2N/zFEC/kMf7aQ36/8sor2v6NYXn2rzsPHSxevHi092Ofo93cZLb7O6cX+6Z8+fIO7f0Ybgc1a9aMln4sGzt2rERFRUmGDBls20+XLp1tHQybQxs4frvmOuZyHFeu2rGR32iPjAnS36RJE/3MmPaLfV8X5++J9mPsX7T1ov3/fxcm+tqDBw+0fEGbLt6XN29eeeqpp/Q4wLFfr149HT6aWDNmzJAPP/zQ9hy/C6QlLjiWkS/oR4D+Dc2aNXP4HMB3QD+rESNGSI4cOXS/o8+V2baMYyV79uwxlg0YKhccHOywT5CXaK9H2709V8MvcazgMypUqOCwHMPwsF3zuDM5t6sjr2Nbbp8u9B+D2M4F5mvmEEAMU8TQafzGPv30U817/O7wsC/P0OaPYwv9cuyPDzyQP+gzZC+m3z3KdJSBaPNHWYLf4IQJE+SHH36Q0aNHS+/evRO13yonId9iSzP26aJFi7SPVIECBVx+J6vyJi7xDgpQkKDQcdUJwxV0fkCnIudCEswCyrkTH8Zl2jM7MsZnohz8aF116kKHE2foqPfEE0/IggUL9MeNDhgYp44x+DGNd/b097GH8cjPPfecjllNkSKFBjUxwXh/nFiOHj3qMK4cBVlCJzux/zHEh/2JAuOVEysxeZ3QtKKz7NNPP63/R0RESIMGDfTEg0IKPzBAwdCxY0dp3769FmbIe0DnNgRbzseb8/4297l9Ws3C0tV3c14W27pmPmAd839X20cnSlfzXGB5fAN85zQlZb8guDI7d5lBjz0z4MC4cuwLBD7ooIj8Rye71q1ba+Hu6rvGBcckPt+EE1N8/Pbbb7aAGgVzo0aN9Pc4a9Ys2zpTpkyRIUOGaODxzDPP2JYjrT179kz0seIqr5EW81i0X9c+IHTeN3GVTTgeYltuf6wgOAaUMziRumIGt+a6gHxo27atBp0tWrTQvEGAYZ9fOD6wX9Ch3RkCSeeLt7h+9/g+CCbxeP3117WzYb9+/aRHjx56nCV1v6VKQL6ZYvvtx3ZusDpvkhwUAE5GH3/8sf6g8cNwBT1TER3igYLTnGDH3vHjx/WvlZOhhISE6MkEvZXtM93V9hFA4GoaD0Av6k6dOknnzp2j9dg2efr72MMPCd9p6NChmmb7qz5n6JGKk519WnBgOwcE8Zl8JSETtKAmApPv4MeH7SGdKNTNiDkhEpPXSZlMBldjCBQR7WMUAv43r2rxo8ZkTfaFcFJ672OSL8Bx5nxV5/x9zXWxvEaNGtHyAceEfc9vT8D+TMp+QY2SGbyiYI4NagUGDhyoDwQEP//8s7zwwgu6jW+++cbl58cGhb59wZ8YqBHBlSUm2EJ5gSDF/N0h+HL+/KQeKyhr8d3tR3rht+Zcw4F1cbK1rzkClIm4WnW+kk2Kdu3aySeffKInUgTTruA1QEBtQq0sTlQTJ07UizKsg5og+xECOD4wygcjCGIKcuy52v84ebp6L8oV1LChRhN5iCDRHfstLq7OMfhN4byEGryYWJE38ZGgIYlvvPGGZmSfPn20mtrVzFaoPjbhgMBQCMy+Z8IJ4/vvv9cDAQeGVcqUKaN/McTLvpZg2rRpDuthmfPwRFTl4eDG0JDYhpB58vvYQzSNK9vGjRvLyy+/HOu6uMp13je4onFeZp5MUIgkFQoeBIy4gpk5c6Y+EIXjKttVTU18eDqvcYJGwYArBwyVBLPGwD7vkIbvvvsu0dtBtSbyfty4cQ7LMeTMOXDDugiOUOVpP5QPVYyoakSwGN+rXaugEMfwR1TJ2kOVLArd5s2bx/r+qlWraq0cquSdh1KBOWwKtTH23xknxeeff16vyOybbZCXVhzDCfHWW2/pye3999+3pRHHCi6I7IffYqgphucl5eSLk78ZpJpQo+ncrIb9gmMTNSv2cMWLwBavWwVNnwjokC5XTU0YVvzjjz/qRYJ9MILAGvsQTXI4plG17xwY4nXk6bfffuty2/EZvouAEe93LssRXOF3hqAJzWru2m9xmT9/vsMxi/8RIOFCGzVkMbEibyyvKUBhjMgVB1jp0qX1Csrc6RgviYMVhZjpiy++0HYdXD3ipIbX8OVx4saJI7YMSCgURijYkSZEsai+wTZwcrFva0H1DA5qVF8h7UgTXsdB8Nprr8UaXXny+zjD9vCIC77Dm2++qQ9c1ZhjvBGl27cr4soTBS3a93AyRH4hOEpMmy22he2gMDCrrBCIINDCFJ2JOYl6I69x3CDdGN+MpiX0icAD3w9NDDj+sW2kCdF6YgM8FIiozcFJHYETgo7FixdLq1atHPofYF1cVSHgQvMPqqxRkKK6E1fLaE7ytI8++kiDNQRluGLG1OaYmwRBCk4S9r9/V3Ayw/poX0Yfil69eulVLgJyVM3jKgo1NBgD/u6772o+IYjA7xJ5jgLUPjBG/wV83n/+8x9dD8Gou4JzE67S8N1xkTR16lQtrFHVjMCoZcuWetGE/gcoD1Ej8tlnnyVqO7gIwD7HbxpX+8gv/CZwUjPb9U34zuj7gt8KLs7Qnozf5PDhwzV9CDCshO+KgB/fF/M24ISGfWsGBDhH4K8zBAGo8USNHPo71KlTx+F1lEEoL1DF/9dff+lxghoxNIdiP6MGEr/H2OBEj31g7hv8VjDHCX5LmCsBgZLZHOSO/RYXHNMoj7FvcVyjPwMCGPyNjRV5Y3lQAOgEgbbA33//XasycDLFCQUZj3Y/nGxNOMGgah6FBX7wOCGjXwIKM/u2Jnwm2vrMdhgTCmEst2+3QiZgmXO1NDIXnS8QJaKAQiSI/1GIYNtmmw9OJrgiwwkGBTAKe6yLQtm+Kgyfj+3Y//jc8X1cwetYD00icdWO2LeRAgoq3JMAk/DgBIaTGr4brszsm1Wwv9DZDjUpOEmhk9dXX32l3zGm9LvKF0yQgqov/LDMzmaAHzu2ifZY5Ld9/tiLaX8mNa/jyluczJyhFgzNY9geTlLoHIUTIH6smAwGJwMUvPgx4lgrWrSo7b2olnTVToy0onC3hwITxx4KHwQhaOecO3euPnfuDIrCChP/oCDDRDF4HYEWClf7/RnT9hH8uapqRN8Z586CFStWjLNmB78fpB1VsAjQUFWLak2cgOw7z+JE7/z7MeHkjdoYHHuodcCJBOsjgEegBKhxxEkQ6yBAM/s04VgymyAAFwG4ekJasE+QP1YFBdgvOEm4qo1BRzWcoBHA4MSDYwHNZfgdoJkDv0HsW9R84ILJrCJHfiBfzKYh55oh598JylSccFGm4YSGix9sD/mAfLSHbaP8RX6hxgvlB44rs4kjtu0j37DcufkHFw5Y7nyfEyzHMYATKa588Z3Nex+gSt65ucuEfMJvCM1NaLJ1dRH26quv6nfGvketAmoY8D7khXmMxZaPCDQRYOO7o3zChSx+KzimkE4EI/bpScp+S5PAfANsH0EHykc0Y2A9BH5m7QXgt4nlzp0Ok5o3br8hEhEREcXNHFmA0Rbm6Adf9MjeOpmIiIisxaCAiIiIFIMCIiIiNwtMYlu/p7BPARERESnWFBAREZFiUEBERESKQQERERElbvIi8qzQSwm/aQ1RYqRPzeKAPCM4A481X8WaAiIiIlIMCoiIiEgxKCAiIiLFoICIiIgUgwIiIiJSDAqIiIhIMSggIiIixaCAiIiIFIMCIiIiUgwKiIiISDEoICIiIsWggIiIiBSDAiIiIlIMCoiIiEgxKCAiIiLFoICIiIgUgwIiIiJSDAqIiIhIMSggIiIixaCAiIiIFIMCIiIiUgwKiIiISDEoICIiIsWggIiIiBSDAiIiIlIMCoiIiEgxKCAiIiLFoICIiIgUgwIiIiJSDAqIiIhIMSggIiIixaCAiIiIFIMCIiIiUgwKiIiISDEoICIiIsWggIiIiBSDAiIiIlIMCoiIiEgxKCAiIiLFoICIiIgUgwIiIiJSDAqIiIhIMSggIiIixaCAiIiIFIMCIiIiUgwKiIiISDEosNDNmzdl0KBBUr9+ff0LoaGhMm7cOCs3Q0RE5BYMCixiGIa0aNFCli1bJhkzZpSwsDBdni9fPhkzZowcPHjQqk0RERG5BYMCi2zbtk3Onj0rGzZskFatWv0/g5Mlk6ZNm8qsWbOs2hQREZFbMCiwyLFjx6Rq1aqSMmVKCQgIcHgtW7ZscvHiRas2RURE5BYMCiySI0cOOXz4sP7vHBSsWLFCChQoYNWmiIiI3IJBgUXq1q0rkZGRMmDAADl37pzcvXtXdu/eLd27d5eNGzdK586drdoUERGRWwQY6CFHljUhdOnSRbZv325blidPHpk8ebI0aNAgUZ8Zeuk29w55RPrUKZjT5BHBGXis+SoGBW5w9OhROXPmjGTOnFnKli0rKVIk/gfAoIA8hUEBeQqDAt/FcM0iixcv1hEIXbt2laJFi0qRIkWs+mgiIiKPYJ8Ci2TJkkXmzZsnxYoV01EII0aMkAsXLlj18URERG7HoMAiNWrUkP3792vnQnQ6HDp0qOTOnVuaN28uM2bM0NkOiYiIfBn7FLjJw4cPZe3atTJ9+nSZOXOmdkBMzHTH7FNAnsI+BeQp7FPgu1hT4CZoOti7d68+bt26JVmzZnXXpoiIiCzBjoYWioqKkvnz52vtwOrVqyVv3rw6P8HUqVOlRIkSVm6KiIjIcgwKLLJw4ULp1KmTBAYGSocOHeSjjz6SmjVrRpvdkIiIyFcxKLBISEiI9h1Ax0Lc/4CIiOhRw46GPo4dDclT2NGQPIUdDX0XawqS4I8//tC5CTAvAfoP4P+YYJ127dolZXNERERuxaAgCS5duiQ7duzQpgP0JcD/McE6REREvozNBxbB5ER37tzRmQ0T8lpc2HxAnsLmA/IUNh/4Ls5TYBHMWvj2228n+DUiIiJfwaDAA1BTkDZtWk9sioiIKNHYpyCJdu7cKQsWLJA9e/ZIWFiYfPDBBw6vYzbDOXPmyMcff5zUTREREbkVg4IkCg8Pl40bN8q5c+ckMjJS/7eXIUMG6d27tzz77LNJ3ZT4+70k9u76Q65djZC6DZu6nBTqzp3bsn/vbrl7946UKF1OMmV27MOxY+smuX490mFZrtyPSdESpdyefno07d2zUy6ePx9teZrAQKlVp77+f+F8uPy5Z1e0dWrXayipU6f2SDqJrMKgIIlatGihj1WrVsnRo0c1ACBrLZw/S+bPnCISECDnws5I7XqNJHkKx0P3xLEj8uFbr0j6DBklXYYMcuLoYen3/qdSp0Fj2zrjRv1HUqRMKXny5rMtq1ClOoMCitGBfX/Jof37HJZt3rhWihYvaQsK9v+1Vz4fNEDq1m/ksF71mrUZFNAjh0GBRRo2bKgPsl7y5Mll8Hc/yKEDf8lXg95zuc7wzz6QEmXKy8DPhmktwqypE+SbLwdJuYpVHGoMnmjaUtp26srdRPHyTNduDs//Djsrq1culSdbO845kiZNoHwyeDhzlR55DArc0KkQNQaYw8AwDNvy3Llz86ZIidS89VP6F0GBKydPHJUTxw5L3/7v25oVWrZ7WqZNHCtbNqyRpi3/X4CHnwuTTetWSbaQ7FKgUFFJlSpVYpNFfmjxb/MlXbr0Uv+JJg7LHxoPZfvWTdrMVaBgYcmeI6fX0kiUFAwKLDR58mR57bXXtG+Bsx49esj48eOt3Bz9T+jxY/o3X8HCtjxJmy6dZM+RS07+7zXTtk3rtAkCy5MlTybvDvpKSpQuy7ykOOGEv2TRr9KoWQutGbB3//59mfrTOL0QQHNCi9btpN87H0iyZBzgRY8WBgUWOXv2rPTt21dvioT/Mbvhl19+qc+HDBkin3/+uVWbIic3r0dJsuTJ9QrOXsZMmeX69Sjb8xf7viWVqtXQ2oT79+/JsM8+kC8/elvGzfglWiFP5Gzblk3aqbBVm39qrkz58heUmfMW22oHDh3YJ6/0fFby5y8kTz3dhRlJjxSGsRZBEFCnTh158skn9S6JuHLA1Mavv/66tGnTRmsR4oJZD1HLYP/AMopdylSp5OGDB3LXKa9u3brp0DxQufr/b2WdIkVK6dK9l1w8H66dEonisvjXeVK8ZCkpUqyEw/KChYs4NBcUL1laatVtIJs2rGWm0iOHQYFFLl++LDlz/lMwZM2aVc7bDWMqVqyYnD59Os7PGDx4sGTKlMnhMea7YVYl8V8rZ+68+vfC+XMOVb2XLpyXnLnzxPg+NDHAtatXPJBKepRduRIhG9evkZZOtQQxSZcunVy9EuH2dBFZjUGBRew7FZYvX17nK1i/fr2EhobKtGnTpECBAnF+xoABA+TatWsOj5df5/TIcSleqqxkyJhJNqxZYVu2648tEhV5Tao8XkufR0VGyt27dx3et2ntKm12KFzU8cqPyNmyxb9pDWCjJi2ivXbp0sVoNVTbt26W4qVKMyPpkcM+BRYpXLiwrWo6f/780q9fP6lbt64+r1Spkrz00ktxfgYmOnGe7OTy3dvi7w4f3KedAw/u+1Ofr1+9XAKSBUi5ilUlS1BWLaxf7NtPRgz9TJtbMGHUnOmTdNRC/oJF9D3nw8Nk+OcfSs26DSUkew45euiALFu0QLq+0FuCs+fw8jckX7fot/nSsHFzW+2SvdHf/jMMtnTZ8nL/3j1Z+Ms8DTa793zZK2klSgreJdGNIiIitFmhUKFCie6FzLskivz+61zZu3N7tLx5ptuLtpM+YMbDDauXy917d6V8xapSv3Fzh5kPL144L6uWLJS/w05LtuDs8nidBtHah/0Z75LoGmoCRv5niHTt3lOKFC3uspZw/ZqVsmvHdv2/UJGi0rRFa05cFAveJdF3MSjwcQwKyFMYFJCnMCjwXWw+sMjWrVvl559/dvkarlYzZswoVatWlaZNm+oMfURERL6GQYFFrl+/LkuXLpXDhw9LqVKlJG/evNp0sGvXLgkKCpKiRYvKsGHDdNjikiVLXN7Qh4iIyJs4+sAilStX1t7tq1evln379umJf/v27RokYGjht99+K0eOHJEDBw7orZSJiIh8DYMCC5sPypUrJ/Xr/3PnNBM6GWKK48WLF0uePHmkZ8+esnPnTqs2S0REZBk2H1jkypUrDhMW2QsPD7f9j+FzgYGcUpeIiHwPawos0qBBA/nrr7+kd+/e2nyAiYdOnDghQ4cOldGjR0urVq10uNLChQt1KmQiIiJfwyGJFtqwYYP06dNHgwMTpj7GjZG6desmFy5ckP3790drYogNhySSp3BIInkKhyT6LgYFFkNtAGoIcKfE4OBgnenQ/qY8CcWggDyFQQF5CoMC38WgwMcxKCBPYVBAnsKgwHexT4GFbt68KYMGDdLmAfwF3BBp3LhxVm6GiIjILRgUWNhs0KJFC1m2bJnOXhgWFqbL8+XLJ2PGjJGDBw9atSkiIiK3YFBgkW3btmk/AnQ2xEgDWwYnS6ZTG8+aNcuqTREREbkFgwKLHDt2TO9tgHkInKcwzpYtm1y86HjPdSIiIl/DoMAiOXLk0CmNwTkoWLFihRQoUMCqTREREbkFgwKL1K1bVyIjI2XAgAFy7tw5vQ/C7t27pXv37rJx40bp3LmzVZsiIiJyCw5JtLgJoUuXLnojJBPudzB58mSd8TAxOCSRPIVDEslTOCTRdzEocIOjR4/KmTNnJHPmzFK2bFlJkSLxt5hgUECewqCAPIVBge9iUODjGBSQpzAoIE9hUOC7eJdEC2GEwfjx47UZ4c6dOw6vYUIj3EKZiIjIVzEosAg6GVaqVElSp04tVapUiXa/A8xXQERE5MsYFFhk7dq12odg165dSepDQERE5C28fLVwmuNSpUoxICAiokcWgwKLVKtWTXbu3ClRUVFWfSQREZFHsZ7bIuHh4ZI1a1YpX768tG3bVpsS7FWoUEFvmEREROSrGBRY5PTp09qEEBwcrDMYOkuePDmDAiIi8mmcp8DHcZ4C8hTOU0CewnkKfBf7FBAREZFiUEBERESKQQEREREpBgVERESkGBQQERGRYlBAREREikEBERERKQYFREREpBgUEBERkWJQQERERP5374Njx47JtGnT4rVu4cKFpWvXrm5PExERka/wq6Dg8uXLsnLlynite/36dQYFRETkV3hDJB/HGyKRp/CGSOQpvCGS72KfAiIiIlJ+HRQ8ePBARo0aJS1btpTXXntNl0VEROgyIiIif+PXQUHPnj1lxIgREhgYKEeOHNFlQUFB8uuvv8r69eu9nTwiIiKP8tugICwsTE/+W7dulR49eji81qZNG5k6darX0kZEROQNfhsUYHhimTJltGYgICDA4bWQkBC5cOGC19JGRETkDX4bFAQHB0toaKj2K3AOClavXi358uXzWtqIiIi8wa/mKbBXsmRJyZUrl3YwrFq1qhiGobUHkyZNkgkTJmizAhERkT/x63kK0K+gc+fODp0KM2XKpKMPfGU2Q85TQJ7CeQrIUzhPge/y66DAhJEHqCVIly6dVK5cWf/6CgYF5CkMCshTGBT4LgYF/3P//n1JkcL3WlMYFJCnMCggT2FQ4Lv8tqMhREZGysCBA7VTYerUqSVz5szStGlT2bZtm7eTRkRE5HG+d2nsIWg1ad68uYSHh8sbb7yhd0VEkLBo0SKpU6eOrF27Vh5//HFvJ5OIiMhj/Lb5YOfOndKoUSPtT5AtWzaH1zAi4dq1azJ58mTxNjYfkKew+YA8hc0Hvstvmw8wP0Hx4sWjBQRQq1Yt7WNARETkT/w2KChVqpScOnVKDh065LAcFSezZs2SmjVrei1tRERE3uBXfQpOnjwpc+fOtT3HNMcYgtihQwcpVKiQ9ilYsmSJBgudOnXyalqJiIg8za/6FGzevFleeeWVeK2LmoLRo0eLt7FPAXkK+xSQp7BPge/yq6DgUcSggDyFQQF5CoMC3+W3fQqIiIjIj/sUuIJRBuhDgPkK7CtNsmTJop0RiYiI/IVfBwXLly+XF154QW+M5KxJkyaydOlSr6SLiIjIG/y2+eDmzZt6J0RMczxnzhydyOjvv/+WsWPH6twFw4cP93YSiYiIPMpvg4KDBw9Kjhw55OWXX5YMGTLIw4cPJWfOnNKrVy959dVXZdy4cd5OIhERkUf5bVBw6dIlyZUrl/4fFBQkFy5csL2GvgSY04CIiMif+G1QYN+psFixYhIaGqp9DC5fvqz3PMCdE4mIiPyJ33Y0RNNB7dq19f+MGTPK559/Ls2aNdNmhPz588vIkSO9nUQiIiKP4uRFTk0KGImAGyWlTp1afAEnLyJP4eRF5CmcvMh3+W3zgSsYdVCuXDk5fPiwDBs2zNvJISIi8igGBS5gaOKqVas8uyeIiIi8jEEBERERKQYFREREpBgUEBERkX8OSdyzZ48OP4zN+fPnJV26dB5LExERkS/wu6AA8xDcvn071nUyZcoklSpVEl+QM3MabyeB/ESWKn29nQTyE7d2j/J2EigGnKfAx92+7+0UkL9gUECewqDAd7FPARERESkGBURERKQYFBARERGDAiIiIvo/1hQQERGR8uug4MGDBzJq1Chp2bKlvPbaa7osIiJClxEREfkbvw4KevbsKSNGjJDAwEA5cuSILgsKCpJff/1V1q9f7+3kEREReZTfBgVhYWF68t+6dav06NHD4bU2bdrI1KlTvZY2IiIib/DboODYsWNSpkwZrRkICAhweC0kJEQuXLjgtbQRERF5g98GBcHBwRIaGqr9CpyDgtWrV0u+fPm8ljYiIiJv8Lt7H5hKliwpuXLl0g6GVatWFcMwtPZg0qRJMmHCBG1WICIi8id+GxTAvHnzpHPnzvL999/r8yJFiujNkCZOnCgVK1b0dvKIiIg8yq+Dgty5c8u6det05AFqCXC75MqVK/O2yURE5Jf8OigwFS1aVB9ERET+zG+DAtQOoJkgJsWKFZPu3bt7NE1ERETe5LdBQWRkpOzYscNh2Z07d2Tfvn1y//596du3r9fSRkRE5A1+GxSg78DKlSujLb927Zo0a9ZMmjRp4pV0EREReYvfzlMQE4w+6NOnj8yaNcvbSSEiIvIoBgUuREVF6Y2RiIiI/EkKf773wYoVKxyWYQKjkydPysiRI2XIkCFeSxsREZE3+G1QcPToUfnggw8cliVLlkxy5MghAwcO1DsoEhER+RO/DQrq1asnZ8+e9XYyiIiIfIbf9inYs2ePfPHFF95OBhERkc9I5s+dCZcvX+7tZBAREfkMvw0Kypcvr50K2YRARETk530KLl++rLdPxt0Qn3nmGcmTJ48EBATYXi9QoIC0b9/eq2kkIiLyJL8LCg4dOqR3RixTpoycO3dOcuXKpc+d1axZk0EBERH5Fb8LCtBksGDBAunVq5d2NiQiIiI/71NAREREjhgUEBERkX82H8CqVaskc+bMsa7zxBNPyNy5cz2WJiIiIm/zy6CgUKFCcU5jjNEHRERE/sQvg4L8+fNL//79vZ0MIiIin8I+BURERKQYFBAREZF/Nh80bNhQatSo4e1kEBER+Ry/CwpSpkypDyIiInLE5gMiIiJSDAqIiIhIMSggIiIixaCAiIiIFIMCIiIiUgwKiIiISDEoICIiIsWggIiIiBSDAiIiIlIMCoiIiEgxKCAiIiL/vPeBu129elX27t0r6dOnl0qVKsmDBw/EMAxJkYJZTUREvo01BRaaM2eO5MuXTxo0aCBjxozRZWfOnJGyZcvKvXv3rNwUERGR5RgUWOT8+fPy0ksvydSpU2Xs2LG25fnz55cqVarIzz//bNWmiIiI3IJBgUW2bt0qtWvXllatWkmyZI7ZWq5cOdm+fbtVmyIiInILBgUWuXnzpqRKlUr/DwgIcHjt4sWLkiZNGqs2RURE5BYMCizy+OOPy+rVqyUsLMwhKDhy5Ij8+OOPUq9ePas2RURE5BbsEm8R9B3o27evlC9fXgoWLCg3btyQ1q1by7Jly6RJkybSvHlzqzZFRETkFqwpsNCnn34qU6ZMkcKFC0tQUJAORfzuu+9k3rx50ZoUiIiIfE2AgTMXJdm5c+ckQ4YMOj+BlW7ft/TjiGKUpUpf5g55xK3do5jTPoo1BRZZvHixZM+eXTp37iy///673L/PszkRET1aGBRYpGvXrjJp0iQdhdC2bVvJnTu3vPbaaxyKSEREjwwGBRbBkMMOHTrIL7/8IuHh4fLZZ5/Jnj17pHr16lKsWDGZNWuWVZsiIiJyCwYFbpAlSxad3XDVqlUycuRInep4xYoV7tgUERGRZTgk0Q02b94s06dPl9mzZ8v169elZcuW8sILL7hjU0RERJZhUGARTFqEmyDNmDFDTp06JfXr15ehQ4dK+/btJWPGjFZthoiIyG0YFFhk6dKlOgKhT58+8swzz0iuXLms+mgiIiKP4DwFFsGtkVOmTClW4zwF5Cmcp4A8hfMU+C7WFCTBgwcPNBhIkSKF3hnx9u3bMWd0ihT6ICIi8lUcfZAEP/30kwQGBkrv3r1t/8f0wDpERES+jJeuSYBRBRs2bJAcOXLoFMf4PyZYh4iIyJcxKEgCTGuMB2zcuFGOHz8uzz//fLT18NqmTZv0RklkLUwnvWrlckmfLr3UrF0n2usnQ0/IiRMnJDg4REqXKcMbU1GsGtUoIZkzpHVYdvzMRdl14HS0dfPmyCJli+WRM+ci5M8jYdFeT5M6pdQoX0jSpE4h2/4MlctXbzD3yecxKLDIoUOHZOvWrS6DgoMHD8off/zh8jVKmtEjv5Opk3+Sx/LljxYUDP7iM/ntl/lStnwFOXr4sBQoWFBGfv+DpE3rWOgT2Y6ZN9vK3XsP5NjpC7Zlq7YecggKkidPJt8N6CSdmlWWDTuPSuYMgXLpynXp2G+cbZ3SRXLJr6NekSuRN+Va1C0NHnoNmibzV+5mZpNPY1CQRLjJJDocPnz4UP93vhHSrVu3ZMuWLXovBLLW1i2bZeWK5dK6bTvZvWuXw2urV62UubN/lmk/z5ESJUrKlSsR0umptjLuhzHy+ptvcVdQjGYs2iajZqyN8fVP+7aUFnXLSOUOX8qpvy/rsma1S2stlHnT2fGfPSdb956QLu9M1Of9uzeSsR93kXU7jrDGgHwaOxom0YQJE3QoYq9evWTixIn6v/0DExfhfgiYu4Csc/nyZfnogwHyxeAhkjZtumivL174m1SuWk0DAsiSJUhatmojixf9xt1AscqfO6u0ql9WKpV8TFKldLxuSp82tfTuVFe+nrTCFhDAkg37bAFByUI5pVyxPDJy+hrb62NnrZeUKZLLk/XKMvfJp7GmIIlatGgha9as0YmLDhw4IG+//bbD6+iAiBsipU+fPqmbov9B4fvh++9Ku/YdpGy58rJi+bJoeXP06GGpXaeew7LCRYrK+fBwiYyM5CyTFKPmdcpIgTzB2gTw4MFD6fb+JNn+10l9rVKpfJI2MJWs3HJQyhfPI7mzZ9GmhsOh523vx/tg/7FztmXXb97RIKJ0YU5qRr6NQUES5cyZUx/lypXTpgLOZOh+k3+aIDeuX5cXe70c4zrXo65LpkyZHJZlzpxZ/0ZFMSgg1wZ8s0BWbD6o/6dIkUwmfPacTBvygpRr95ncun1PQoIy6Gvvv9RMihfMKafPRUiNCgVl/R9Hpcu7E+T+/YeSMX2g3L//QKJuOM5bEnHthmTKEMisJ5/G5oMkQF8CTFiEfgRoJggKCtLnrh7OfQ1cuXPnjl7F2j+wjP7vwoXzMvK7b6VOvfqyfNlSWfL7YjkZGirXr0fp/5cuXtT1UqVKJTdv3nTIOvN56lSpmaXkkhkQAE7wX/64RPLmDNLmALh9594/f+/elyodv5T2r4+Vap0GS72qRaVXh386ut65e19SpEguqVM5XnOlS5ta30fkyxgU+NDkRYMHD9arW/vHsCGDk5LEf6WGjRrJ4cOHZM3qlfo4ffqk3LxxQ/9HXwPIkzevhJ/7f/UtnPs7TAID00rWbNm8lHJ61ERd/+dqP1uWf5r/Tpy9pH9/Xb3Hts7pc1dk98EzUqFk3v+t809gmjdHkG0ddELMHZJFTv7v/US+is0HPjR50YABA6Rfv34Oy4zkvKq1FxKSXYYO/8Zh2X+GDZFNGzc4LK9dp66M//EHuXHjuqRLl177IaxYtlRq1a7NuQrIJQwtvHn7nty99/+r+dYNy2tTwJ6DZ/T5/mN/S+jZS1Isf3ZZJH/ZmhkK5skmW/eG6vPtf57UEQbtGlWQoRP+6e/SsHpxyZo5nSzduJ+5Tz6NQYFFkxeZz5Nyo6TUqVPrwx5viJQ4HTo9I78smC+9X+whLVu1lu3btsrx48fk48++SOQn0r9dvlxZZdynz8qvq/fKmfAIqVjyMenW5nH5/Iff5ez5q7b1+g2ZI5MHd5P0adPIyb8vy1ONK+rcBd/P/GcY4737D7RvwqgPnpbA1CnlatRNefP5J2Tc3I1y4Lhj7RWRr+FdEi30448/StGiRaVevXpy8eJFadSokezbt0+HI06ePFlvmpRQDArihmGGhw8dlH7933VYfv36dZk1c4aEnjguwSEh0r5DR8mT558qXoqOd0kUyR2SWTo/WVUK5Q2WsAtXZeGavbLn0NloeYU+Bl2erCoZ0qeRI6HnZeL8zXLt+i2HdWpXKiLtG1fQvgXrth+Rn5fs4GH3P7xLou9iUGCRM2fOSMOGDWX//v1aMzBw4ECd3vidd96RN954Q4YOHSpt27ZN8OcyKCBPYVBAnsKgwHexo6FFtm3bJhUrVrQ1FSxZskQ+/PBDncfgxRdf1FkNiYiIfBmDAosgGLh06Z+exeHh4XovhBo1auhzTIGcPHlyqzZFRETkFgwKLFKrVi2tLcB0xx07dpTmzZvbbryzdu1aadCggVWbIiIicgsGBRbJmjWr/P7773L16lUpXry4jB49WpfjdsrBwcHa6ZCIiMiXsaOhj2NHQ/IUdjQkT2FHQ9/FeQrcAH0KTp8+rfMW5M2bN1FDEYmIiDyNZysL/fXXX1KzZk29QVK1atUkf/78UqRIEVm0aJGVmyEiInILBgUWuXHjhjRp0kRCQkJ0umPMW7B7925p166dPv7880+rNkVEROQWbD6wyOrVqzUgmDdvnq25IE+ePFK+fHntfDh79mwpW7asVZsjIiKyHGsKLIITf6FChVz2H8DUx3idiIjIlzEosEi5cuVk1apVcvDg/+/HDggGcN8D1hIQEZGvY/OBRXDSf+qppzQ4aNq0qeTLl09nOFy6dKkULlxYnnvuOas2RURE5BasKbDQ+PHjtU9BlixZ9MZIhmHI4MGD9b4HadKksXJTREREluPkRT6OkxeRp3DyIvIUTl7ku9h8YLHQ0FCdlwBDEjEaoW7dulKlShWrN0NERGQ5Nh9Y6KuvvpJixYrJ8OHDtclgwoQJOolRly5d5MGDB1ZuioiIyHIMCiyyb98++fjjj2XmzJly6tQpncAIIxEwgdGaNWt0BAIREZEvY1Bgkb1790rjxo2lffv2DssxGqFv374aHBAREfkyBgUWwX0Orly54vK1iIgIKVCggFWbIiIicgsGBRZB3wF488035eTJk9qH4MKFCzJ69GiZO3eu9isgIiLyZRySaJGJEyfKiy++KA8fPoyeyQEBDtMf9+jRQ3744Yd4fS6HJJKncEgieQqHJPouDkm0CPoTLF68OF7r5s2b16rNEhERWYZBgUVwR0Q8iIiIHlXsU0BERESKQQEREREpBgVERESkGBQQERGRYlBAREREikEBERERKQYFREREpBgUEBERkWJQQERERIpBARERESkGBURERKQYFBAREZFiUEBERESKQQEREREpBgVERESkGBQQERGRYlBAREREikEBERERKQYFREREpBgUEBERkWJQQERERIpBARERESkGBURERKQYFBAREZFiUEBERESKQQEREREpBgVERESkGBQQERGRYlBAREREikEBERERKQYFREREpBgUEBERkWJQQERERIpBARERESkGBURERKQYFBAREZFiUEBERESKQQEREREpBgVERESkGBQQERGRYlBAREREikEBERERKQYFREREpBgUEBERkWJQQERERIpBARERESkGBURERKQYFBAREZFiUEBEREQqwDAM459/iR59d+7ckcGDB8uAAQMkderU3k4O/YvxWKN/IwYF9K8SGRkpmTJlkmvXrknGjBm9nRz6F+OxRv9GbD4gIiIixaCAiIiIFIMCIiIiUgwK6F8FnQsHDRrETobEY40oEdjRkIiIiBRrCoiIiEgxKCAiIiLFoID82qlTp2Tfvn3eTgY9YjDn28aNG3WugqSsQ+RrGBSQ3zh58qTs37/fYdmYMWPkjTfe8Fqa6NGdzbB27dry559/6vOHDx9qABAVFRXjOkSPAgYF5DdGjRolb731lsOy/PnzS5kyZbyWJno0JUuWTGrWrKmzZ8LNmzc1ALAPOp3XIXoUpPB2Aujf68SJE3q1VKJECTlz5oxOPVysWDFJmTJltHUjIiJ0/dy5c0vOnDldft6hQ4f0b5EiReTvv/+Wq1ev2k7oeI73A6Y3Lly4sKRNm9b23rNnz0pYWJi+B1d0ULJkSWnWrJnUqlVLn1+4cEE/o3r16g7bvXjxohw9elRq1KiRoPSSd9y/f1+2bt0qFSpU0OfYd9hH2bNnj7bu3bt39USeIkUKPR6SJ08ebZ3Tp0/r/saxGxgYqMtwDH/11VeSL18+fb5t2zb9i1oBbD99+vRSrlw5h3V27NghuXLl0oe9nTt3SkhIiOTNm9fW7IBjHZ9TtGhRDq8lz8INkYjcoU+fPkblypWN6tWrGyVLljRy585tFChQwDh69Khtnfv37xt9+/Y1MmTIYFSoUMEIDg42GjVqZFy8eNG2ztWrV43atWsb6dOnN0qXLm3kzZvXaNGihVGzZk3bOrNnz9bneJQqVcpIly6dMWbMGNvr06ZN0+1nzpzZtt769euNd99912jYsKGuc+DAAdwczNi/f7/D90D6zG3FJ73kXdgX2I/dunUzgoKC9HhIlSqVMWjQIIf1fvvtNyNbtmxGwYIF9dh47LHHjK1bt9pej4yMNOrVq6efUbFiRV3366+/1tdu3bql29iwYYM+r1u3rj4vW7asHivYtvM6HTt2NDp06OCQhvPnzxvJkyc3VqxYoc+x/UKFChn58+c3ypQpY2TJksWYMmWK2/OMyMSggNwaFCRLlsxYtmyZPr93754Wns8995xtnU8//dQoX7687aSKgvTJJ580nn32Wds6/fv3N4oWLWpcuHBBn2/fvl0LefugwNm6deuMNGnSOAQgb731ltGkSROH9eyDAsCJ/v3337c9R5pDQkJsAUZ80ku+ERTgpBoREaHL1qxZo8fipk2b9PmlS5eMTJkyGV988YU+f/jwodGjRw89Id+5c0eXjRgxwihWrJjuY8By8zhwPuFHRUXp8y1bttjS4bzOr7/+qsfktWvXbOt89913Rq5cuYwHDx5oWhF4jB8/3vb62rVrjcDAQOPQoUNuzzciYJ8Ccqtq1apJ48aN9X9U0TZv3lz++usv2+vff/+9tGjRQo4dOyZbtmyRXbt2aXX+4sWLbetMnTpVXn/9dQkODtbnVapUkVatWkXbFjp7hYaG6uegPRfVxZs3b05Qert27SozZszQKlxYsWKFNjl07Ngx3ukl34D+I1myZNH/69WrJ40aNZJJkybp83nz5unx+Pbbb+vzgIAArepHk9C6det0GarvzSYGSJUqlfTu3TvR6UFTVbp06WT+/Pm2ZdOnT5dnnnlGj9fZs2dr80WpUqX02MIDzRRoVli+fHkScoIo/tingNwKbaX20M6PTlmAntrh4eHy66+/ytq1ax3WQz+Ee/fuacF8/vx5bVu1h+fnzp2zPUcbMk7oGP712GOPSZo0aeTy5cv6+QmBAhonCgQT6CSGQhuFeVBQULzS66q/BHkH+gA4Pzc7AuLkX6hQIYf9lS1bNn0cP35cA4ju3btrsId+I2ZQ8fzzzye64yC21aFDBz2munXrpoHl9u3b5YcfftDXjxw5Irdu3ZL+/fs7vA/BMAISIk9gUEBevU8BrpDeeecdefbZZ12ugysnFIjXr193WO78/KWXXpI2bdrIsGHD9KoP0NkQtQcJgQ5pDRo00IIbHdV++eUX29VlfNJLvsP5GEFQh06ogL/Or5vvMU/6mTNnlpUrV2on2TVr1sj48ePl66+/1nktUMuQGAhc69SpowEtjjHUCpQvX15fQydGBCVmR1gib2DzAXkNTvaPP/64TJs2LdprZoGNkzBOzqjGt7dq1SqH52g2qFu3ri0gQO9tLLOHQhdX83Hp0qWLVuXOmTNHC/+WLVvGO73kO+yr3FHjtHr1aqlcubKtCerw4cMOxwhqfzBaplKlSg77FNX3zz33nB4PmOzKea4LQM0Ujr24ji+MYMFohJ9//lmDAgQJJtRGoAbDuckLga1Zu0bkbqwpIK/65ptv9Mr8qaee0gLywYMHelV26dIlLTgBdz1s3bq19hFAoY7CFIWnWXgDPuPjjz/Wghl9APC/c1U+hi9iroIFCxZolSyGoLnSvn17eeWVV7QZAelCDUFC0ku+AdXyuNrH0MBx48bJ7du3pU+fPvoamgKwH9E3BccXqu0HDBggPXr0sDVVDR48WI8zBIU4XtDXBDVJro4bBI/FixeXiRMn6kkctQ147gzHZ+fOnfWzcczgf9MTTzwhTz/9tB7rH374oTZ3oIlhwoQJ+jCHWBK5E4MCchu02ZrVtSaM0bY/meOKbe/evXqyHj16tHYMq1+/vhbOJrTpo3MWCnZ07MMkMQgQ7K/YUMX/5ZdfyrfffqufMXz4cFm0aJFt7Ld5skchj89B3wMUzJi8CFeH9jJkyCCvvvqqbNq0ySEd8U0v+YZZs2bJsmXLZMSIEdovAPvTvj8AmoZwvOB4wEn9vffek5dfftn2+ueff641RuhDgnkKUNWPq3gcH+h86DwxEYKG//znPxpkFChQQIMSV5MXoekJtRI4+aP/iz0EvKiJ+u233/T4RWAxZcoUKV26tFvzisjEWyeTz0MBjEIbTQn2oxoQHODkT2QPV+C4st+9e7etvZ6I4oc1BeTzMPoAV+LoDY4hXbgiQ58B/CUiIuswKCCfhyaAgQMHanstpiJGWyvmOnCueiUC9CVBtT2mGiaihGHzARERESkOSSQiIiLFoICIiIgUgwIiIiJSDAqIiIhIMSgg8vHhmJhAxxQWFqZ3+POFtLgDphHGZEFJ5c18InqUMSggSiDcsAZTGuOBmRZ37Nih0x27A4Ze2k+F+8cff+id+uLr7NmzDrfqtTItzjBcFHly48aNRG9jw4YN0qtXL0mqhOYTEf2D8xQQJRBmUUQgUKtWLZ1tEbdtxhz7v//+u06b7E558uTR+y7EF9LWs2dPadeunbjbgQMH9NbTuMkQJpkiokcPgwKiRMCNmcwbIOFuerhZDW6gNHPmTJk7d67ecOfy5ct6fwbMmW/eZAfV2jt37tT58CtWrKjz6Dvbtm2bTtWLGzg5ww15zLs22gsPD9dABfdiqFq1qk7ggyt3zPePO/eZacXNfMqWLWtJWhIK+WHe7RJ3FSxSpIjmjSuoecE9JnDbYtwrA8GQs/ikn4gShkEBURJh5jzc4W7lypV6Jz5cLTdv3lxvzYu59807733wwQd6E6Xq1atLVFSU3gEPN+3BLZ8Bd9dDLQDuuohbNO/bty/aHfnManHc3MmE2R5x90YEKoZhaO0FbqaDkznWR1CAm/8AXkdQYEVaEurKlSu2dOCuhFu2bNHto3kD97Yw4bU6dero7Y5xh8rt27frXQJxS2tTXOknokQyiChBWrdurQ97DRs2NGrXrm1ERUUZ+Fk1atTIuHv3ru312bNnG7ly5TLCwsJsy0aNGmXkyZPHtt7kyZONjBkzGidPntTn165dM0qUKGEkT57c9p4FCxYY6dKlsz2fPn26kTJlSmPz5s22Zbt37zZOnTql/8+ZM8fIlCmTQ1qtSouzNWvW6HcPDQ2NVz7iMwsVKmSMHz/etmzq1Kn6GQMHDrQt++abb/Q7RERExDv9zvlERPHDmgKiREDVNarkcVW+evVqfdj3mu/du7dW4Zt++uknvf0tbr2Lq3U8cBWMjoC4yi1RooT27O/YsaPky5dP34PbTuNWvm+++WaM6Zg8ebLWGuBq3hTXnQHdlZb4QLMAqvyRf7hlNe5fgZoA51tP9+/f3/Z/nz595MMPP5Tly5dLp06d4pV+IkocBgVEiXDu3DmtCk+VKpXesGnPnj1aLY/+BWbbv72TJ09qFTn6G9jDSc50+vRph5M7FChQINZ04D2oQk8Id6UlLsePH5fGjRvrSRxNEWh2wYkcfQLsodMmHiYEV7lz59bhivFNPxElDoMCoiR2NHQlICDA4TmutBE0/PjjjzG+J2vWrNrubs/5uTOcPNGBLyHclZa4fPLJJ3qFb1+j8vTTT2s/DHvoI4D+BPb9DLDtbNmyxTv9RJQ4nKeAyAOaNm2qV7bo/GcP1egmDHFcuHChw5wHcc0xgCtvrGPWUACq5SMjI/V/XI3juSfSEheMkMBtr01Xr16VVatWRVsP20RHSRNGUFy8eNFWcxGf9BNR4rCmgMgD0Ea+ZMkSqVKlirbNo8ocQwgxOgBND4D2evSyx0mvQ4cOOkkSHnF9Lq68q1WrpvMRoGp+xowZOjTSvKLGSIL3339f/0e1vbvSYkIwERwc7LCsTZs2+njvvfe0FgLBytixY7VGwBn6B/Tt21cOHTqkzTNDhw6VF154wdZXID7pJ6LEYVBAlEC1a9eO8TW0f6Nt26zqNuEkiNn6cLLGlW/y5Mn1yhfD6kxBQUF6Yhs5cqT+xUnvtdde0+GGMU1ehLH5GNo3adIk7bAXEhIiU6ZM0TkAIFeuXNpBD1fWCB7MIYlWpMUZto3vjs901qxZM3nllVc0IMDQTWwTzQnXrl2TiIgI23qY/Klbt27Sr18/mTp1qgYGWA8BT0LyMqGTPBHRPwIwBIGZQUREROxTQERERIpBARERESkGBURERKQYFBAREZFiUEBERESKQQEREREpBgVERESkGBQQERGRYlBAREREikEBERERKQYFREREpBgUEBERkcB/AZ1gD06OX/ZaAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 400x400 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model Name: \n",
      "RandomForest - RandomOverSampler\n",
      "Accuracy: 0.8526\n",
      "Precision: 0.8455\n",
      "Recall: 0.8526\n",
      "F1 Score: 0.8467\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "    negative       0.72      0.58      0.65       180\n",
      "    positive       0.88      0.93      0.91       600\n",
      "\n",
      "    accuracy                           0.85       780\n",
      "   macro avg       0.80      0.76      0.78       780\n",
      "weighted avg       0.85      0.85      0.85       780\n",
      "\n",
      "\n",
      "Best hyperparameters found by GridSearchCV:\n",
      "{'max_depth': None, 'n_estimators': 300}\n"
     ]
    }
   ],
   "source": [
    "ros = RandomOverSampler(random_state=42)\n",
    "X_ros, y_ros = ros.fit_resample(X_train_vec, y_train)\n",
    "print(\"After RandomOversampling:\", Counter(y_ros))\n",
    "\n",
    "results_ros = train_random_forest_classifier_with_grid_search(\n",
    "    X_ros, y_ros, X_test_vec, y_test, evaluate_model,\n",
    "    experiment_name='RandomForest - RandomOverSampler'\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "rus_md",
   "metadata": {},
   "source": [
    "## RandomUnderSampler"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "rus_code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-23T20:21:42.960562Z",
     "iopub.status.busy": "2026-08-23T20:21:42.960459Z",
     "iopub.status.idle": "2026-08-23T20:21:46.365184Z",
     "shell.execute_reply": "2026-08-23T20:21:46.364593Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "After undersampling: Counter({'negative': 420, 'positive': 420})\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAhAAAAGJCAYAAADbgQqfAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjExLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvctoD+AAAAAlwSFlzAAAPYQAAD2EBqD+naQAARc5JREFUeJzt3QeYE9X6x/F3WXqHpfcmiCBIkSIg0oUrCghYUEQFe8eCYhexXxuICjYUy7UhyhVQESkKiIXeQar0tvSW//M73uSfZAs7sJPdhe/nefJsdjLJnJw5mXnntIkLBAIBAwAA8CCbl5UBAAAIIAAAwHGhBgIAAHhGAAEAADwjgAAAAJ4RQAAAAM8IIAAAgGcEEAAA4NQJILZv324///yzjRs3zjZt2pTun7927Vr32fv27Uv3z87K/MoXv/dnVjBnzhybNGlSRicDWcD3339vCxcutFPJqfid0+Lw4cPuuPnXX39ZrMWdyEyUSvCaNWssR44cVqFCBStdurTFxcWZ30aNGmXXXXed1alTxwoVKmSPPPKINW3aNF23MWLECOvXr5+tXLnSKlWqZLG0ceNG++OPP9zzJk2aWOHChZOss2TJEluxYoV7fv7553vexurVq23BggXWqlUry5UrV4bmSyz2Z3J5K/Hx8ZaQkGBnnHGG5c6d2zLSFVdc4QIIBWkZQfmi/ElOzZo1rWLFipbZzJo1yw4dOuRLeVFAt379+tD/OXPmtHLlytlpp50Wk+NcavLnz299+vSxIUOGxHzbiYmJNm3aNKtevbpVqVIlyesqv/PmzbMGDRpY8eLFs8R31mlQ5zIdFwsWLGjVqlWzvHnzWlawY8cOK1KkiD333HN29913x3bjgePw3nvvBU477bRAgQIFAuecc06gWbNmgYIFCwaqVKkSeP755wN+OnLkSKBo0aKBm266ydftjBs3LtChQ4fAhg0bArH26aefKqhzj2eeeSbZdRo3bhxa53i8+uqr7r1r1qzJ0HyJ1f6Mztu6deu679G6detAqVKlXPl98cUXAxmpV69egbJly2bY9i+66KJAXFycy5fox5dffhnIjNq0aRNo0KCBb/tDZaVdu3YuD5o2bRrImzdvoEaNGoFffvklkJHy5csXuPnmmzNk23/88YfLlyeeeCLZ14cPH+5e//rrr7PEd54wYUKgTp067nzWpEmTQL169QK5cuUKXHrppYFFixYFMrvt27e7/H7uuedivu3sXgOO/v3720svvWSDBg2yu+66K3T1qirtV1991QYPHuzW8cvff/9t27ZtszPPPNP81KFDB/fISGXLlrV3333X7r333ojlqsabMWOGuxqK9dVqeudLrPZntAEDBtill17qnh88eNCuvPJKu/POO92Vdkbv94yULVs2Vx2K/zdmzJhQ7dS6deuscePG1rlzZ1cDmy9fPrIqC9Ox9F//+pe1a9fOJk+e7GpAZfbs2da7d2/77rvvrEaNGhmdzJOjD4QOLP/+97/dwff++++PqPrOkyePO9F9+umnSd63f/9+d8JT9ax+gNH0Q9RnqypSVUm///67TZkyxXbv3h2x3vz58+3bb791zxcvXuze8+OPP7r/Fy1a5HZ2tM2bN7v1VM0T7ujRo67w/PTTT64pILolJ7W2/vT6Pseik5rSOHPmzIjl77zzjgse1PyQ0vfVY/z48W67WhZOeRdsS9R3CK6/devWZNP/559/2oQJE5LNF518tR19x2jahtbduXNnst8vtf15vHkdnta0UtV0MEgbPXp0xGs6kATzR5/722+/2YEDB5J8hvpv6DXR91W+672ptRCqzKr8Re+flAIt5cH06dNt7969qW5f/Um0fTUzhQsuV9PViVIe/Prrry5NqvqNpmXh5UTNASon+t0F7dmzx3755Rf3GSn1e9FvRmVLVeZbtmyJeE3fRWV2165doX2kdnK/g/qrr77apWXq1KkRr+n4E0zHDz/84Mp0NOWHXg/m2apVq1LMwyCVbf0GtO+TK3vhVN60fydOnOiaEaLLX/T2dexTPqpshFPZUbpSatLywu/vLPosfaaOlTompbZ9NVNo/6jMff75525bDz74YCh4kLp167r927BhwxPexyuOI4+T+wytG96kllbHmzdp4qW6olOnToHs2bMHtm3blub3vPLKK65qqFKlSoGGDRsGcubMGbjwwgsDW7duDa2jqhcl5c8//3RNIqpGKlOmTKBw4cKueilIVczNmzd369aqVctVK1522WXutdtvv91VO0VTNZrWnzJlSmjZ9OnTA1WrVg2ULl060LJlS9ccc+aZZwZ+/vnnJNVwK1eu9O37HKuaXWlX2m688cbQa4cPH3bpHjhwYOCqq65K0oQxY8aMULVz+/btXVV9fHy8q447ePBg6LvVrFnT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",
      "text/plain": [
       "<Figure size 400x400 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model Name: \n",
      "RandomForest - RandomUnderSampler\n",
      "Accuracy: 0.7231\n",
      "Precision: 0.8419\n",
      "Recall: 0.7231\n",
      "F1 Score: 0.7448\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "    negative       0.45      0.91      0.60       180\n",
      "    positive       0.96      0.67      0.79       600\n",
      "\n",
      "    accuracy                           0.72       780\n",
      "   macro avg       0.70      0.79      0.69       780\n",
      "weighted avg       0.84      0.72      0.74       780\n",
      "\n",
      "\n",
      "Best hyperparameters found by GridSearchCV:\n",
      "{'max_depth': 20, 'n_estimators': 200}\n"
     ]
    }
   ],
   "source": [
    "rus = RandomUnderSampler(random_state=42)\n",
    "X_res, y_res = rus.fit_resample(X_train_vec, y_train)\n",
    "print(\"After undersampling:\", Counter(y_res))\n",
    "\n",
    "results_rus = train_random_forest_classifier_with_grid_search(\n",
    "    X_res, y_res, X_test_vec, y_test, evaluate_model,\n",
    "    experiment_name='RandomForest - RandomUnderSampler'\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "smote_md",
   "metadata": {},
   "source": [
    "## SMOTE"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "smote_code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-23T20:21:46.366638Z",
     "iopub.status.busy": "2026-08-23T20:21:46.366542Z",
     "iopub.status.idle": "2026-08-23T20:21:53.772567Z",
     "shell.execute_reply": "2026-08-23T20:21:53.771858Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "After SMOTE: Counter({'positive': 1400, 'negative': 1400})\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 400x400 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Model Name: \n",
      "RandomForest - SMOTE\n",
      "Accuracy: 0.8462\n",
      "Precision: 0.8379\n",
      "Recall: 0.8462\n",
      "F1 Score: 0.8329\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "    negative       0.76      0.48      0.59       180\n",
      "    positive       0.86      0.95      0.91       600\n",
      "\n",
      "    accuracy                           0.85       780\n",
      "   macro avg       0.81      0.72      0.75       780\n",
      "weighted avg       0.84      0.85      0.83       780\n",
      "\n",
      "\n",
      "Best hyperparameters found by GridSearchCV:\n",
      "{'max_depth': None, 'n_estimators': 200}\n"
     ]
    }
   ],
   "source": [
    "smote = SMOTE(random_state=42)\n",
    "X_smote, y_smote = smote.fit_resample(X_train_vec, y_train)\n",
    "print(\"After SMOTE:\", Counter(y_smote))\n",
    "\n",
    "results_smote = train_random_forest_classifier_with_grid_search(\n",
    "    X_smote, y_smote, X_test_vec, y_test, evaluate_model,\n",
    "    experiment_name='RandomForest - SMOTE'\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "summary_md",
   "metadata": {},
   "source": [
    "## Summary comparison of all experiments"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "summary_code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-23T20:21:53.774098Z",
     "iopub.status.busy": "2026-08-23T20:21:53.773990Z",
     "iopub.status.idle": "2026-08-23T20:21:53.781421Z",
     "shell.execute_reply": "2026-08-23T20:21:53.780951Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Experiment</th>\n",
       "      <th>Accuracy</th>\n",
       "      <th>Precision</th>\n",
       "      <th>Recall</th>\n",
       "      <th>F1 Score</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>RandomForest - Imbalanced (baseline)</td>\n",
       "      <td>0.8462</td>\n",
       "      <td>0.8428</td>\n",
       "      <td>0.8462</td>\n",
       "      <td>0.8272</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>RandomForest - RandomOverSampler</td>\n",
       "      <td>0.8526</td>\n",
       "      <td>0.8455</td>\n",
       "      <td>0.8526</td>\n",
       "      <td>0.8467</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>RandomForest - RandomUnderSampler</td>\n",
       "      <td>0.7231</td>\n",
       "      <td>0.8419</td>\n",
       "      <td>0.7231</td>\n",
       "      <td>0.7448</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>RandomForest - SMOTE</td>\n",
       "      <td>0.8462</td>\n",
       "      <td>0.8379</td>\n",
       "      <td>0.8462</td>\n",
       "      <td>0.8329</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                             Experiment  Accuracy  Precision  Recall  F1 Score\n",
       "0  RandomForest - Imbalanced (baseline)    0.8462     0.8428  0.8462    0.8272\n",
       "1      RandomForest - RandomOverSampler    0.8526     0.8455  0.8526    0.8467\n",
       "2     RandomForest - RandomUnderSampler    0.7231     0.8419  0.7231    0.7448\n",
       "3                  RandomForest - SMOTE    0.8462     0.8379  0.8462    0.8329"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "all_results = [results_baseline, results_ros, results_rus, results_smote]\n",
    "\n",
    "summary_df = pd.DataFrame([\n",
    "    {\n",
    "        'Experiment': r['Model Name'],\n",
    "        'Accuracy': round(r['Accuracy'], 4),\n",
    "        'Precision': round(r['Precision'], 4),\n",
    "        'Recall': round(r['Recall'], 4),\n",
    "        'F1 Score': round(r['F1 Score'], 4),\n",
    "    }\n",
    "    for r in all_results\n",
    "])\n",
    "\n",
    "summary_df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "summary_plot_code",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-08-23T20:21:53.782746Z",
     "iopub.status.busy": "2026-08-23T20:21:53.782639Z",
     "iopub.status.idle": "2026-08-23T20:21:54.003440Z",
     "shell.execute_reply": "2026-08-23T20:21:54.002880Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA9oAAAHqCAYAAAD78jbDAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjExLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvctoD+AAAAAlwSFlzAAAPYQAAD2EBqD+naQAAmR5JREFUeJzt3QW4VNX3//FFl3R3t4QBCCKgNAiKhYBiIiZhoKhIqYioiIWBCopBCagYhCDSIqmCiHRKd8r5P5/9+575zwz3Ahfmxtz7fj3PfWDOnDmTe+asvddeO5XneZ4BAAAAAICISB2ZwwAAAAAAAAJtAAAAAAAijBFtAAAAAAAiiEAbAAAAAIAIItAGAAAAACCCCLQBAAAAAIggAm0AAAAAACKIQBsAAAAAgAgi0AYAAAAAIIIItAEgEe3atcs6dOhg+fLls1SpUtlTTz3lti9evNiuuuoqy5o1q9s+Y8aMqHmfdu7cae3atbO8efOGPCecXZ48eez+++8/67bkqHr16tasWbOIH7dBgwZWt27diB8X8eO2226zIkWKJJv3+q+//rImTZpY9uzZ3ffhyJEjE/shAUggBNoAEEGbNm1yJ1Ox/YUHEs8++6z98ssvtmDBAvM8z1566SU7deqU3XrrrS5Q3bp1q9uuE8hIWrhwoXs8Y8eOtUhTYD179mx3H/5zOtfXSiej9erVs6+++irijwtx8/DDD5/xs+z/FShQgJc2mbn++uvde6uOvkOHDp12/d69ey1TpkxuHwXG0fr8/L8MGTJY2bJlrWfPnnbw4MGI3tcdd9xhhw8ftrVr17rvw2h8vQCcHwJtAIgHXbt2dSdV4X8//PBDyH7Tp093I9clSpQIbNuyZYutWrXK2rRpYxdddFHUvT8///yze07FixeP02v133//2aJFiyxnzpx24403xksnQDRShsC7776b4Pf71ltvhXx2lWUhvXv3Dtm+bds2S8qUDTJr1qzEfhhRJ3369Hb06NEY2+EXX3wRCFKjVZo0aQKf4e3bt9tjjz1mL7/8sgvCI+XYsWOuE7Vly5aWK1euiB0XQHQg0AaARPTvv/+6kaHwbRK+PZoCw/N57KlTp7bSpUvbiBEj3P/ffPPNeHl8AM5Obbh58+Y2fPjw0677+OOP7YYbbnDtNDnIkSOHm57Rtm1bmzZtmi1fvjxi34UK5KP1uxzAhUke35AAEGWGDRvmRoP27NljH374YUga42WXXeb2ufnmm93lChUqBG6nFMRnnnnGpTkq3VFzu+++++5AcB68X69evdxtM2bM6EbMu3Tp4uaEa4SqRo0aIfehv+eff/6Mj1kjl/fee68VLFjQjXaVLFnSpYkfOXIk5DkprTT4Oa1bty7OJ72al6zU8nAfffSRXX755ZY5c2aX1qpUfI2CBxs9erTVqlXLHSd37tzWsGFDmzJlSsg+F198ceDxpU2b1goXLuxex/DRWV33+OOP208//WSXXnqpu18de8mSJe76qVOnuvdLJ9KVK1d2+4Xzj6F9L7nkEvd+lCtXzt5///1zej1imqPtH3POnDlWs2ZNd0x1Uuj1CafU30ceecR9VpQh0aJFC9uwYUPE5kQrS+Oaa66xbNmyudfhiiuusEmTJsW4X6NGjdz7on11m5hqD6xZs8aaNm1qWbJkcZ+15557zgUrwfzHfi77xjRv15/SoHahx1y7dm379ddfY5wfrNdfn/twmt4RnIkSl9dD00UaN27sjq399Jn69NNPT3vsMVE70/PXe67XUu/nb7/9dt6vz5nceeedLkMluA3/8ccf7rW66667LugxxvYeXOjn7EL437UbN250/+r7QG1Pnwl95xUrVsx69OjhRvp9yjbR98jq1avdd3OhQoXcZU298D9L3bt3d9uCM5T+/PNP11mh7yi9Tvr+eP3110Pen9iOrfu/9tpr3ffY5s2brVWrVu7Yei31ORK18datW7vvSU3vGDRo0GnPV98h/vegOk2UTaTPzdy5c0P28+9LvzPKNtIx9dnV98rx48dPO65ur/vWPvrs6b2dOHHiaftopF/3qedfrVo15q8j+fEAABGzceNGnSV5Xbt2Paf9s2fP7t1zzz0h23799Vd3jDFjxoRsP3r0qHfFFVd4RYsW9b799ltv//793u+//+7Vrl3bK1++vHfgwAG33+HDh70aNWp4BQoUcMfYtWuXt379eu/NN9/0Bg8efMb7iM2ePXu8UqVKeWXKlPFmzZrl7du3z5swYYKXK1cur0GDBt7JkyfP+Jzi8lrp8aZOndodN1i3bt28jBkzuufx77//eps2bfLuu+8+L3PmzN7SpUvdPtOnT/dSpUrlDRo0yB1Hj3PGjBlekyZNYn0cer30nKpWrerVqVMn5LmkSZPGa9GihdehQwdv7dq13rZt27zmzZt7BQsW9H7++Wfvlltu8f755x9v+/btXqtWrdxz130G0zF0mxtuuMH7+++/3WPv37+/e5xvvPFGyL65c+f2OnfufNZtOqbu79Zbb/VWrVrlnmuXLl3c67lgwYKQfZs1a+bep4kTJ7rHNnv2bO/aa6/1KlSo4DVt2tQ7V4sXL3bH7927d2DbBx984J7Hk08+6W3YsMHbuXOnN3DgQPf+jRs3LrDf0KFD3X6PPPKIew302dV7df311wf2qVatmvsst2nTxvvtt9/cY33rrbfcfX788cchjyUu+9avX9+78sorQ7b16NHDS5cunff22297u3fvdu1Ir9PVV1/tFS5c+LTXP6bPc9u2bb3ixYuHbDuX10Pb9Zm9//77vc2bN3uHDh3yFi5c6N1xxx3en3/+ecb3oFevXu5YOuaOHTvce9+yZUvXLubPn39er09MrrvuOvdZPn78uJcnTx6vT58+gesee+wxr1ixYt6pU6fc51Bt43weY1zeg3P9nMX0Xsf2/PTYw7Vv3969RsuWLfO2bt3qvmsvvfRSb86cOe77debMme57UI8z+LOt26gtvvvuu+6xDR8+3H1f+99x/veub8WKFV7WrFm9q666yj1vPX8dJ3369N4DDzxwTsfWa1quXDnvxhtv9ObOnevt3bvXe+GFF9zrNGXKFPedo7au916vlY7zww8/xPqanDhxwr1Xej+zZcvmrVu3LnCdf18333yzew3Ufr/44gsvbdq07rssmH4X9NrqMevzrNdt3rx57jU/ePCg2+ebb75xt7377rvd96ceu95jPX99vwPJBYE2AESQf2IV29+AAQPOO9AeMmSI2/7LL7+EbNeJp05Y/ZO5V155xe03bdq0WB9nXAPtfv36uf2DT5RFJ+3hxznfQFsn7qtXr3YndTqBVmeCb8mSJW7f8JO6//77z6tcubI7iRMFBDqB0/a4mjp1qrsP3ZdPJ4zqsDhy5Ehgm07CtZ9OuBUk+f744w+3/cMPPww5ro6hQNc/yfQpyMyRI4cL9M8n0M6fP3/IbXXyreN16tQpsE3BrB7Te++9F3J7nYBr+4UE2jo5VrCggDPcTTfd5JUuXdr9X50AWbJkcR0NZ6LgUO+dTryDqdNIQeP57hsefKmzRO3loYceCtlPQW+GDBnOO9A+19dj7Nix7nXU5yUu/MfdsWPHkO36DObLl889z/N5fc4UaIs6cPRZV/tUMKbPnYJpCQ+0z/UxxuU9ONfX9UICbd3H+++/77b5HXxqR+oQUYdeTN8TCmaDg+Hu3bufdj+xBdrqoFObUEdEMHViKFD2O1zOdGx9T+o6BbE+vUdFihRxx1bnYfB2fVYVKJ+NOlcyZcrkvfTSS6fdlzocgqkjR50RPn0+1AlZs2bNWI+vjkw9xrp167rHFd6Zqu+w4O9bIJqROg4ACVgM7UKWuvrmm29cCmB4GmzRokWtfPnyLsVTvvvuO7ef0iwjRfMWlQapNOVgN910U+D68zVkyJBA6mKZMmVcmreqjiut0Pftt98GUt2D6TZXX3114Lkr/fDkyZNueTGl58aU1ihK/Vbapl4npWHr/pXWLErTDKbjK7UxPL1UKeNKJffpPdDjUbpuOKWvK4UymIouKc0+PPX9XOn9DZ776VdODr5/FdsTpZYGq1OnzgUXZ1La94EDB057T0Sv5T///OPSWvXeKH29ffv2Zz1mxYoVrVSpUiHblLIa02sal32DzZw5006cOOFSW4MpLdefUhGfr4dShFWISynJaqvnWuVan2c9bn1ug+kzqLnUKvim4lsX+vrElD6u2+h10+NV+rAqaV/IY4zLe3Cur2tcqfiinzatFR4GDhzoUry//vrrwPet2ommlQSrX7++pUuXLvCd4wt/Lmei70sVjFRqdfj3qX4nwqegxHZspV1r2oFPz0XTUvT5uvLKK0O26/sp/L3XVCL9Vmnaib4/tJ9S5DUdKPx7UPelFPDwz5Om+PjfsyqYqJUyztTW9d2r2+i5hhfT0/up78SlS5fGensgmhBoA0CU0HxB/Skw1J9OphTY6WTl999/dydNohPh8JPDC6Vjx7SMk+YFKoBU0Z8L7ZTQyZrmaCrY7tatm6sE7PPnTitICX7u+lN1bJ2caVk0Ba9Dhw51r4eWCdNyYZqjOnny5MCx1q9f7zorNM9R23USr/ufN2+eu14BQDDNbQ2mk2ydlIZv12NS4KvHEi5//vyxbjvf1y78/kXzV4Pv3/9MaH52uJi2xYX/nqiAVPh74s8p1/379QPO5TN5Ls/pfPYN5r8mZ3pPzkX4XOdzfT3UUaP5qvqcqQNEc5gV0MVUdCymxx1TO9Q2BY7Bz/18X59wqiugDiw9PhVBU4CowOxCHmNc3oNzfV0vpOq4vnsUWGoes+Yfi75/FBD79+nfr9q/3rvw+4zLd+7u3btjfY1i+k6I7dgxvcf+nOyYtge/93remo89YcIEe++991w71XeotuszebbvQf/zpP3379/vLp9LW/ffz0cfffS011Zzwc/3/QSSIgJtAIgSGv1QEKoRW/3ppNU/MdKfRolEozPnM8JzJhr9DA58fRqN02hl+MjM+dAJrAqdaTRbS5w9+OCDgev84ytIDn7uwc/fr4Csk28VbNIJ3SeffOIeo04oVThMxo0b5x6zCg1VrVo1MCqsdW5jEtsSRnFZ2iim187fpmJI5+Nc7t8/dnixvNi2xYX/nqggVWzviV5ffR7lXD6TcXlNz3dpKf81OdN7EkydNeqMCRf+fM719RBla6gYlAIujZwqiFFxMRURi42fgRDb41awogDJF8mltzSCPWbMGPfczlQE7VwfY1zeg7i8rpGkx3jdddcF7jP8+/add9457fvrXGl0+EzPPfz7NLZjX8h304oVK2zhwoWuyJpGkvU594tZxtQZcy7HPJe27j83FYOM7bVV8TwgOSDQBoAoodEvjbqcLdVYowIKMv204Zj4aczBqaZnotRnVeINrxysoNi/PlKU4qhgWceePXu22+aPdIwaNeqcj6ORMaWbarkwnbyFr6WsUelgCsrji1JBVQk+mEY1dXLrV5mPD0p7l/DqzH6Qd6HH1ufobO+Jv9/nn39uSYFGZDWSpgA3mFJeY6p6rdFbZUiE7xveDs/19Qim918p1Qpi1eHjd5bF9rgVcI0fPz5ku9J8v//+e5elEf6ZjhRVY9eor9KK/ekiF/IY4/IenM/rGqnvW6WtX2iHVEz0fan3OrwNqhNQIjnt52wi+T2olRnUaaR11mOj7ztNEdDqEEByR6ANAFFCI7yaI9emTRt3Qqb0wn379tn8+fPdMitK65QHHnjAzXPUPDntpyXEFCS//fbbbvkY0TIwSvtW6rRGd89Gx9dtdEwFaRrh00my0v900qzHFElPP/20O7nWv/7JmeZPavTl1Vdfdc9HgatGrl9++WWXfu7frm/fvrZs2TJ3vUaIlEqu0W6lkotGtxUMPPbYY+4kWqMvWuYmfA51JOn90Kig5pPqfRswYIBL2ezTp0+8rrGrpa30fFUbQPPc9b4pRV7LKgUvG3c+NHqpz5M6MvRaqhNI6fh///23G5n15+lq9O6VV15xwZeWmNNroMehOa6R/tycC6XVamqCRtSU1aD2oaWWtISXUrjDderUyV2vz51SZLXGst8Wz+f10P/VnhYsWOCOpzasx6Fg1O8Yie1xP/HEE275Jj0WpdfqPpRSrRFIvafxRSOVCrSVHRK8RNX5Psa4vAfn+rpG2gsvvBDoCFFHmd4rfV+oA1M1IMI77uJC31EaIdZSWXreev56Ld544w2777773Pz6+KYOTf0pXV7fo/ocjhw50i2jdr7TStR5ou9bjZTrt0Kj5vp90WddbV3/1z5KVdfrqPn/ev767CujSAF6QnYyAPGNQBsA4oFf4Cv8L6Z1d8+VCnLphE8nYgrQVARNxY4U7FaqVMmdzIoCN53EKMXzySefdCe1CjJXrVplt99+e2CfDz74wAVdSuU82zraCpaUeq0COzph0smvggWtPa2RKqWERpJGo3V8jfroxE9ee+01t060RoI1V1sn/zrh1Qm8X2ROwbiC6o4dO7rrlVKqk0h1KGjdXdFrpdFybdf7oeekdEY/qI8PerwK2BQUaP6inoc6PhRsxDetm641n/V50GehX79+9uabb7rrLnQEVIGR1gdfuXJlYO1yjQTqRPvFF18M7KcMBQX6ClK1vrI+u3ocCfH8Y6LCV71793YdHn7attad10hbOGVFKOjS50+fS62PrLbip8nG9fXQZ1aBlDqH9DpoPXoFOApOz5SWLXoc+txo1FGPVR1QmkurImT+5zuxnetjjMt7cK6fs0jSY9Lx9d2p71y935qrrvvTd2B4R0tc6P1Xh6Weh0b51S4HDx7sXjsFqglB39nqLNXa4PoO1G+JClEq8+RCph0o3V6daPpeVqeJnpu+lxVU+52ZylDS81fHjTqX9DpoXXn9lsS03jcQrVKp9HhiPwgAAJIrjeAooNSoblKi4kgaddLoEv5/irTShVUVGQCAC8GINgAAKYxG+DWapKWKAABA5KWNh2MCAIAkQvNYlbqrStdK0VQKr1K5lVZ/psJWAADg/DGijfOmyqA6gVu3bt057a/lG5SSp3loMVV2BQBEnuaFq+CQKh1rnqnmm2r5HK0RrCrSAAAg8pijjThTkQtV/lTgvGTJErcsydlGRfx1bDds2OCq7+oYTZo0cQVg/LVvAQAAACA5IHUccXbq1ClXFbNKlSrnvCyNqnQqyFZgrmrFqhyqyrOfffZZoAoyAAAAACQHDCUizrQUg0al40JrI3bo0MEF2aL1WzWire0AAAAAkJwwoo14d+jQITePW2vXhq8rqxHt2Bw7dsz9BY+k796923Lnzn1BazwCAAAAQFxpZewDBw5YoUKFzjr9lUAb8W7//v3u35w5c4Zs1+i2f11MBgwYYH379o33xwcAAAAA52rjxo1WpEiRM+5DoI1458/jVu9PMF0+0xzvnj172qOPPhq4vG/fPitWrJj7YGfLli0eHzEAAAAAhNIgYdGiRS1r1qx2NgTaiHdat1Xp3uHLgK1du9bKlCkT6+0yZMjg/sIpyCbQBgAAAJAYzmUaK8XQEC+0Tvbnn38euNyqVSu3DJiWBPNHp7/77ju3HQAAAACSE0a0EWdK3f7xxx/t5MmT7vK0adNs7969rrhZ7dq13bZx48bZ8OHDrX379u6y5lrXrFnTWrZsaQ0bNrRRo0a5IgIPPfQQ7wAAAACAZIVAG3G2Z88emzdvnvv/PffcYydOnHCXM2fOHAi0FVRru09zq5cuXWofffSRSyHv2LGj3X333ZYlSxbeAQAAAADJSipPNcqBKCk+kD17dpd2zhxtAAAAAEk1HmGONgAAAAAAEUSgDQAAAABABBFoAwAAAAAQQQTaAAAAAABEEIE2AAAAAAARRKANAAAAAEAEEWgDAAAAABBBBNoAAAAAAEQQgTYAAAAAABFEoA0AAAAAQAQRaAMAAAAAEEEE2gAAAAAARBCBNgAAAAAAEUSgDQAAAABABBFoAwAAAAAQQQTaAAAAAABEEIE2AAAAAAARRKANAAAAAEAEEWgDAAAAABBBBNoAAAAAAEQQgTYAAAAAABFEoA0AAAAAQAQRaAMAAAAAEEEE2gAAAAAARBCBNgAAAAAAEUSgDQAAAABABBFoAwAAAAAQQQTaAAAAAABEEIE2AAAAAAARRKANAAAAAEAEEWgDAAAAABBBBNoAAAAAAEQQgTYAAAAAABFEoA0AAAAAQAQRaAMAAAAAEEEE2gAAAAAARBCBNgAAAAAAEUSgDQAAAABABBFoAwAAAAAQQWkjeTAAACKhxFOT4v2FXPdSy3i/jyojqlhCWH7H8gS5HwAAcG4Y0QYAAAAAIIIY0QYSAaN1546ROsSbPtnj/8UtWSz+78PMVlSoGO/3UXHlini/DwCIpnOt5JQdxflW5BFoA8lVMgoiAADJ9HfE3c++hLkfAEhApI4DAAAAABBBjGgDAAAAwPkggxCxINAGAAAAgBSMWh+RR+o4AAAAAAARxIg2AEvpPaxCRWUAAABECiPaAAAAAABEEIE2AAAAAAARROo4ztuSJUts48aNVr58eStXrtxZ9z9x4oQtWrTIduzYYYULF7bq1atbqlSpeAcAAAAAJCsE2oizo0eP2g033GALFiywatWquX9vv/12e/vtt2MNnJcuXWqtWrWyjBkzuqB88eLFljdvXvvhhx+sQIECvAsAAAAAkg1SxxFnL7/8shvN/v33323atGn2yy+/2LBhw2zs2LGx3ubJJ5+0MmXK2F9//WXffvutrVq1yvbt22cvvfQS7wAAAACAZIVAG3H26aefWvv27QMj0UoBb9SokdsemyNHjlipUqUCI95ZsmSxQoUKudFxAAAAAEhOSB1HnBw+fNhWr15tVatWDdmuy19++WWstxswYIALzp977jk3p3v27Nm2d+9ee+qpp2K9zbFjx9yfb//+/bxbAAAAAJI8Am3EiR/s5syZM2R77ty5XeAcmxIlStill15qn3/+uZujvXz5crv22mvdPO0zBed9+/blHQIAAAAQVUgdR5xkyJAhMLId7ODBg67QWWxUPO3UqVNujvZ3333n/p0zZ4516dIl1tv07NnTzeP2/1ThHAAAAACSOka0EScayc6RI4dt2LAhZLsuaw52bPOz58+fbyNHjrQ0adK4bZkzZ3ZVyLXtTEG9H9gDAAAAQLRgRBtx1rx5cxs3bpx5nhcY3Z40aZLb7lNFclUXl0yZMlmuXLncKHawlStXuvW0AQAAACA5YUQbcaZ50zVr1rS2bdta48aN3ah0tmzZQtLAtW348OG2bds2d/mZZ56xp59+2o4fP26VK1e2WbNm2YQJE9wfAAAAACQnjGgjzsqWLWuLFy+2kiVL2owZM6xhw4a2YMECy549e2CfKlWquNRw36OPPmo//vijnThxwiZPnuxGuLUWtwqiAQAAAEBywog2zouqiA8cODDW6zt06OD+gtWvX9/9AQAAAEByxog2AAAAAAARRKANAAAAAEAEEWgDAAAAABBBBNoAAAAAAEQQgTYAAAAAABFEoA0AAAAAQAQRaAMAAAAAEEEE2gAAAAAARBCBNgAAAAAAEUSgDQAAAABABBFoAwAAAAAQQWkjeTAAAAAgqVlRoWK830fFlSvi/T4ARA9GtAEA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3rCW995r737xhdt+6PBhe2XYMHd9265d7e2RI08bcT50+LC99tFH1ubBB61d9+42fvz4wHWbN2+2p556yg3c+T7++GO78cYb7dprr7UBAwYErotp3+3bt9sTTzxhjRo1crcZPXp0yH0vXrzYpZuvWLHCHnzwQWvWrJl17drVDRImFAJtxNkHH3xgb731ls2cOdN27dplw4YNcx9gXY7Nzz//bJ988ont2bPH/bVt29batGlj69at4x0AAAAAkoiCefPanv373f8XLFtmd/bo4f7/RKdO1rxePTt67Jg1vftum7tkid17yy3WvnVrG/Xdd3bH//aTw0eOWOM777RRkyZZ2xYtrG3Llvbpp5/alClTYkwHf/vtt+2ZZ56x6667zh5++GEXVHfp0iXGfXVdnTp1bMmSJW6fevXq2V133WVvvPFGSBatbnPDDTdYzZo17ZFHHrEFCxa4oDyhkDqOOBs6dKjdeuutVqNGDXf5pptuch/gd999133QY7uNL3Xq1K4hPf/88zZr1iw3yg0AAAAgce0/eNAmTJliNatWDWy7sVkz6/u/oFeGfv65HTl61EYPGWJp0qRx266oVs1KXXONrfjnH6tYurR9NHasrd+82X7/7jvLmT2726ddt252+PDhGO9XqeE333yzdezY0V3WCHRs+yrmUPD99ddfW6ZMmdw2zSfv3bu3derUKbDN37d+/fru/3ny5LErrrjCDRTmzp3b4huBNuLk+PHjtmzZMtfTFEypGRMnTjzn46xatcrN1S5cuDDvAAAAAJBI1q1eZw07drT//vvP/lq71koWKWJv9OoVuL7OJZeE7D/z119t15491uLee935vPszc0H3yv8F2r8sXGj1a9UKBNm+zJkzx/gYFAw//fTTrvZT8+bNrVq1arHu++uvv9rVV18dElC3bNnSpYavXr3aqlSpEtiuwUBfsWLF3L/btm0j0EbSo7RvNcLwXiD1EJ3rnAcF6507d3Yj4n4PU0yOHTvm/nz7/5fCAgAAACAy8hfMb/27dXNVxwvmy2dFChQIqTieJSiglYOHDlm1ihXtyfvuO+1YZf+XqXr4yBErlD//OT+GBx54wNVxGjVqlMuEVZr44MGD3XTTcIoJ8ocd2y+UppTxYMEFm/3npI6BhMCINuJEad9y4sSJ04JnP3XkTNRo2rdv74oaKEXEP15MVAShb9++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4sQJF3QTZCOlzbt+/fXX7bLLLrNmzZq5cynRCPZff/1lGTJkCNn/t99+ozZOMkKgDcA2bdrkUsQ1EtewYUObOnVqyKtStGhRu/XWW13ADSRHJ0+edCMMCgpisnr1anv77bdtyJAhtnHjxsD2jh072uHDh61Ro0YJ+GiBxNG2bVsbOnRojNcp60mj1q+88or98ccfp7UR/bYAKW3etVLD9bsyaNAgW7dunXXo0MHto3Oq//77z3XW6hzspZdessqVK7s2pgAcyQOBNpDCLVu2zC699FJLnTq1+yHQfGylimv+ULAbb7zR9bTu3bs30R4rEF80JSJPnjxurly4J554wmrXru0+/5MnT7aqVavanDlz3HUanVPaHzUMkBIoaBgxYsRp2xV8q5CTfjcWLVrkOm2//PJLd13ZsmXdvFPaCFKCF1980bWTTz75xAXVuXLlsnLlytk111zjzrN8efPmdSPcjz/+uFWvXt0F4e+//77r1FWAjuSBOdpAMqG5Prt27bKCBQvG6XaNGzd2fz169HCX165da7fccoulSpXKFixYENjv33//dQGFKmJWq1Yt4o8fSGwagVABQKX6Zc6c2W1TUDFw4ECbNWuWO2GShx56yH755ReXAqh20r17d1e/YN68eYn8DID4tXjxYtcxqxE3BQ+iz33r1q1t9uzZLqiWN9980/r27etSYLNnz+6yQfr37+9G7qjzgeRMvwsFChQIzLvWMqn+qHWaNGlC9tV2nW+tWLHCKlSokEiPGPGJEW0gmbj//vvtgQceiPE6pfHddtttLi3p7rvvtkOHDgWu08mRAmel/NWrV8+NPOhPJ0rB8uXLZxkzZrSDBw/G+3MBEsP111/vAufx48cHto0aNco6derkAm/9v2XLlvb555+7EYj9+/cH5trNnz+fETske5dccon7HQnO/Bg9erS1adPGSpUqZT/88IObj92rVy+rW7eu6/z102R3795tU6ZMScRHD0SGUr4/+OADl+mk86IcOXK4z7g6lnQ+FVzcTL8PmlYR02df2YPqiFLAjeSJQBuIUqpUefPNNwcu33TTTa7HVD8APvWk6oRIwcHll19uL7zwgv38889uRC54vWydJOl4SmHS8hJvvfVWjEtMpEuXzrJly5YAzw6If5oGoSrIvkyZMrkpEsFBhOaWfvjhhy4V8KOPPrJ27dq5dqa0QJ0giUb4KlWqRLFAJDtqH3v27AnZpsBBhTE9zwu0EdX1UC2PPn36uABbAceECRNc8C25c+d205JimpoBRJOjR49a06ZN3WBE79693TnT119/7bIBdZ6l6XjBNI1Co9UxffYVpOs8LrjQrNqVMqg6d+4cmH6BKOYBiEpLlizRWY63YsWKwLZ169Z5CxcuDFxu0qSJlzp1au+rr74KbJsyZYrbtmHDBne5Q4cOXtWqVb2TJ0+GHF/Xv/DCC4HLp06d8jJkyOAdOHAgnp8ZEH/0OV+9erV3zTXXuPaTJk0a7+GHHw58/n/66Se3bevWre5y9+7dvRw5cngbN2487Vja1zdgwACvbNmyvHWIemoLO3bs8G6++WbXFtRObrzxRu/QoUPu+k2bNrnfkJkzZ7rL7733nrs8f/78M7aRMWPGeJkzZ/YOHz6cgM8GOH///fef9/vvv4dse/rpp70iRYqcdi6kyxUrVvSqVavmzpeC6VxKn/39+/efdh9qR2pjX3zxhffcc895JUuW9C6++GJv4MCB3pYtW3j7ohyBNhDFqlSp4r70fd26dfNq1aoVuPzpp5+6L/B//vkn5HalSpVygYEsXbrUS5cunXfPPfd4Bw8edCdZX3/9tVe+fHnvxx9/DNxGX/jt2rVLkOcFxIdPPvnEq169uleuXDnv9ddfd593dTzlypXL69q1q9tHJ0hFixb1Xn31VXf5jz/+cMFG3759A8dRG9FJUIsWLQLbdu/e7W3fvp03DlHt559/9goXLuw1aNDAdTLt3bvXW7RokVe6dGmvZcuWgf0aNmzoderUyf1f+6gz6rbbbnOBie/LL790nbjHjx93l48ePeqtWbMmEZ4VEHd//vmnC6gVIAcH1YUKFQqcP4WbOHGiO+eaNm1ayPb169d7qVKl8oYPH37abfSbU6JECa9AgQKuzam9Ifkg0Aai2Msvv+wVK1Ys0HuqL2h9yf/111/usgKJiy66yPWUBlOvaaVKlQKXv/32W3dypYA7Y8aM3uWXX+7NmjUrgZ8NEFnhoworV6507UOf72AKCPTZV0aIPPXUU25UwvfGG2+4Ebv69eu7DikF6q1atfL27dvHW4Zk1UY04qbAIk+ePCFZTr/++qtrOwrERQGDgusjR44EfkMyZcrkOrIUgF922WVezZo1A20KiDZTp051wa86Wv0AWZ1GagcffPBBjLc5ceKEly1btpABEJ9+P5RJFRNlWYVnFSJ5YI42EMW0dITmi86cOTOkUI0/3ydLlixu/nXw/B9RYbQ///zTLcMimsO9YcMGV/ly/fr19uuvv9qVV16ZCM8IuHAqWqY505pzrTV8jx075raXL1/erZWdM2fOkP01R07zrb/66qvAHFRVjl2+fLm7/Mgjj7j/q52o0rIqkWtOHvUKEK2mT5/u5o5qjqiWGFKhMr9mh4oC6t/gCsmae6q2o7YlqmWglS6++eYbd1ltQ5XI77rrLitRooSrB6Jq5MWLF0+kZwic3alTp9xqE6qar+Ubg504ccIKFSrkVmXx51erTo0Kn61cuTLG46mivn4jtHJFOP0WzZgxw52zhStduvRpFcmRPBBoA1HwQ/DOO+/YZZdd5tZdvPbaawNf1PoRaNiwYUiRjfBCNbqsQmdansvnr2v62WefBbZpfUd92au6OBBNVKxJga9O7FX1eMCAAW49Up3UqEiTLvvUHnRCdfLkyZDPvirFqpiNKEhXgbPgdqVtWk9by+BdccUVCfwMgQujgmXff/+9W+f6999/d5X0tfyW2oKKOalwZnAb0Zq+4cGCOnL9NnLRRRe5gDy4jagYmo7z9NNPu2JRquAPJGX67lc70GCFzq30ufepI0mBtdqDOqb8865GjRrZ2LFjQwrPhhfZjKmDSQVrtca2v3QkUojEHlIHcGbt27f3ateu7eb8KPVV86Q1X+7YsWOBeadKVfJT+FS0SWmuv/zyi7usOXNKC9ec1GA6VkyFOYBooM+70lJVh0BprhUqVHApfTlz5vQWLFgQ2O+dd95x2/z2oiJPShN///33Q9JnVZNg0KBBgW2jRo3yPvzwwwR+VkDkC/+pIFnBggW9ypUruzRYtYfPP/88sN/kyZPdb4aKnPm3U8psjx49Qo7XvHlzr3PnzoHL+o3p378/bxmiguoDjB492v2tWrUqsP355593dTpUFFPFzPbs2eO2jx071qtbt64rApg1a1bvpZdecttnzJjhfmv8Oh7BNIVCvy9///13Aj4zJGUE2kASoZMbVbcMriKuKq4KIjTX2i86o4A5eI6QrsuSJYubZ+rTPCC/UI088cQT3i233JKgzweITzopUuCg6qx+gKCaBeHF/9RmVHdg3LhxgW2tW7d280kVSKsY4IMPPugCC+0LJBf6rVAnq4KH5cuXu21agUJtJLjQpTqaVOtDBf58jz76qAu+VfRp2bJlgarJCtyBaKJClaqgr+/4tm3bel26dPF69eoVuF4dtipUpsD6hhtucHOp1TGrzqirr77a7XPnnXe63xvfI4884jqt1C527tzpgvO33nrLBezq3AV8BNpAEqAq31rSQQXK6tWr53pY5d1333VFZdRLqkA5e/bsbpmVCRMmBCq5iqq9BleE/fjjj12hGlV5FX80D4hGMRWJUbE+BQwKrn36nKtjKni0WnSS1aZNm5BlhnTbxo0bu6Jn9913H8uoIKopWA4vbKaVIhQM6PMd7NJLLz1ttLpnz55uFQvf4sWLXRvR75EqhyuTKrgTGIgGahN16tRx501nWlZOn3P9RmifK664wmUSqgCalkgVZRSqPfz222+B4w4ZMsSdt2m7Om6vvfZaisjiNATaQBJYQkJf0krfC+cHBEodV9DtpzRJ8EmVbps2bdrA8kJKCVfwThVLRCuleL/55pvus69gIaaRAk2hCK/uqpFupfsFU1tInz69t2vXLndZHVDqiIppqRUgWmjJoREjRrhgIEOGDG7E+cknnwz5bdB14dlM/kh38FJc+h3Sb82SJUsC2xR4P/vsswn0bIDI0wos+lzPmzfvjPsNGzYs8Bvx77//ut8WTUfyBzD8ZR+1hGpM05jCO7kAH8XQgARy6NAhV4hGRTeCCzGpME3u3LldgY1w11xzjasKq8rhnTt3dtUufSrM9Mcff7j/qyCaCtPs3LnTXVbF2FatWlHFEkmWqtzff//9VqZMGff5V6Elvzq4OoFV9X7u3Ln23HPP2datW+2DDz5whZZU4Cy4ev6ECRNCjqvCNbNnzw4UbRJVVVaF8MmTJ7vLGTJksFtuucU++eSTBHu+QFypErgKi1188cWWK1cuVzU/uFiTKn+PGTPG7r33XrddhQDVTlQI0OcXwzx69GhgW7t27VyhM/0e+SpWrOgKbvpVxGMqrAlEmzx58riCZuPHj3ef4yNHjrgVJPTZV5X84JUnVBhNVfVVdPa7775zxdDq1avnrldhP63yogrl4UXQdI5G4T/EKhByA4gzFR47G402K+1Oad9KU82XL59bx9efD6qRO43WKb1J84Nq1arlRhI0B0hrMmrETnNM1eOq22hOqUYolKak64Foo/Q7jShr9E0FajQaoGyN4OkQwaNtGjFQdodG4VSQyaeCM8HpfD6tc923b9+QbRqlCKZCTpqDei5tGEho+lyWKFHCu/32213tDmUnqR6HCjPF1EZ0veZdax1rjcb5I2x+DQ8V9wvWokULd+wztZHNmze7NuKvnQ1EI/0W6HdCWX/6N/gvuA3ovEoZVLFZu3at98MPP4S0O+BsCLSBOPILkyllL2/evGcNdlV0Q0UyVDDDv70C6e7duwf2Wb9+vZtXqmMqMFdQoZOjkSNHui/13r17u0qx+mEoUqSIm5caHJQA0USp3cHVi2Ojz74KNGneteZTP/bYYy6NfNu2bYF9dGLUtWvXkNupGmx4Snk4BSI6AVMwASQ19957ryvKdC5UeV9prTVr1nT1PfQ74a86IQomgmt4iH5jOnTocNZjDx48mLnZiHqaGqFaN3PmzHHnYqrn4ReWnTp1qttH1+syFcMRSQTaQByo0rcfIKuSpeb0fPPNN+6y5kfregXMflAdTtVbdXuNamuE21+SKyaqcKkAPdiZinkASZ3fLjTiHF6gKSYKljVPzq+YrFFvnQjp5N+nedtqT2R3ILnMu1YQoMr4KtB0NlreUR2+06dPD2zLnz9/SEdWeA0PIBqoMzQ+g14NVqjauH+epd8Q/ZaoyBkQKczRBuJAc0ZLlCjh/p8zZ05r2bKlm+c5ceJEq1SpkpsHNHDgQKtataqbe+3T/DjNJ9U8bM2f1vyfAwcO2Ndffx3YR3OGVqxY4ebZ3XTTTW5+teYEBcuUKRPvF6KK6hFoXtwDDzzg5mNv2rTJzRH96KOP7O6777aHHnrImjdvbtWqVbOaNWva4MGDA3NCx40bZw8//LCboyrbtm1z/3766aeB47dt29Z69OhhJ06cSKRnCFwYzfnUX79+/axYsWI2b94810ZUz0O/BV27drXrrrvOLr30Uqtevbqbt+3XM1AbURto0KCBu6y2tn//fhs9enRgH9XweP75590cVCBaaD50jRo1AvUFdH4USfoNUr2Opk2bustp06a1pUuXulogQKSkjdiRgBRg48aNVqtWrcDljh07uhOin3/+2RVa0omQAosbbrjBnfyo6IZObnSSo8Jlf//9tyvKJAULFnSFZlSUSebMmWNTp061zJkzW5MmTVwAr/8D0WrNmjV2+eWXW926dV3BMxVAU0fTs88+6zqNfvnlF1dIpkqVKu5kZ/Hixfboo4+6fdW2VKBJnVH33HOPK9503333Bdrbrl273H4qEvXYY48l9lMFzouC4bJly7pigCqYqd8J/TaILuvzr3ajDl4F0/r/oEGD3PUvvviiayPq6FXhNFHHlNrS/Pnz7c8//3TH1W/Qk08+yTuEqKKCrp06dbK77rrLFi1a5AJh/avgOCbqoNVgSJ06dU67Tm1J7SR79uzuPEyDHWofal/qAPYVKFAgXp8TUp5UGtZO7AcBJAWq3qov8QEDBsS6z1VXXeWC6O7du7vLqkqpk6LixYu72wYH5KVLl3Y9sqoMq6rh2u+dd95x169fv96dXMmWLVtcZUwgOdJJzObNm23fvn2WPn36s+6vUe38+fO76scawVCnk4LsLFmyuCBcQbp+thidQ1Jz+PBhN8KsTKS4fD6VGaUTf1VBLleu3Fn3VyeUAgoFDOpw0oi1MqgUgNx5550uEFcHFm0E0eyll16yZ555xooUKeLOz/TbEFuH7ocffugGLjSQoZUp1AkbTsfSb5GyETVgopVa1E6A+EQeEfA/Onl/44037ODBg7G+Jho908mNT4GDRq6VBh6saNGi7kdBI9SiEQYF3Urn0/IRuqyAvn379i4AAaLZpEmTrH79+m60WlMo/GW0RFMmNBKhv7M5deqUSxMsVKiQu6zROi3TpQBkx44d1qtXL7eMCgEEkiKlbGv0bfr06addt2DBAjdCpyUaNTqttNXgZbTiMjVIAb3fRhRQKBNk9erVblT77bffdplQtBFEG2UqaSqRMph07qTRbE3H02BEyZIlY73dkiVL3JQJLfWoLMKYgmx54YUXbPjw4W560q233kqQjYQRsdneQJRTYTIVKBs+fHis+zzzzDOukFMwVbFUU1q5cmXI9rZt2waqumrplSeeeMIrX76817RpU+/rr7+Op2cBxL/gwmNDhw71ihUr5o0dO9bbtGmT9/bbb7vCS1qGLngJrvnz55+xuviiRYvcknVlypShEjiiVrNmzbw77rgjZNuUKVO83Llzu0KZWrZr3LhxblUJtRm/yGW2bNncqhNnorakIoI6ltoLkFw8+OCDXsmSJV0l8AkTJrgVV/xzpwIFCnhvvPFGYj9E4LwQaANhS6o0bNgw1tfED6p//fXXkO0KDlq1ahVYX1FBu4KPd999l9cXycrcuXPdZ9uv2qr1sP0g+ujRo27ZIFVB1pqkwUtwdenS5bRj3XrrrV7x4sVdB5c6ofr06ePt378/AZ8NEFmfffaZd9FFF4Wsd33ppZcGgmj9Rmi960qVKnlVq1YN7HPXXXd5TZo0iXF5SC3dpeBa7U7taOvWrbxtSDbUgaTq31u2bInxeq3UUqNGjQR/XEAkMEcbKZo6m9577z03F0jpSfny5bOtW7e6OdSaFxQTze1R2p5SmnyqFtu7d29X9KlevXouhUm3V0rtuaTMAtFCxWNUkEzFZf755x83B/vHH3+0r776ysaOHeuqhysVVrUJlEouQ4cOde1DbSy8PajOgSouU1Ef0UoV799//32bNWuWK7ak/6syvr9qRLp06WzYsGGu+NJnn33mCi75hTTz5s3r9lG6eePGjV19D78Ymk8FNlU0TXUKgGj+7Xjrrbds1apVbiWJN99806WE65xL50uqb6Aq41pdYu/evVahQgUrXLiwmxqhQrNqP5pOBEQT5mgjRRsxYoSb96mTH83N7tmzp9uuy7HRHLhvv/3WBdPB81BFVWEVXLzyyisu+CDIRlKmAFdFZvT51WdXhZRUCdynivj33ntvyG00R9qnuXC6rHl1OmHSXLlp06a546gdaM61qI6BahGoTYRTnQOCbEQrfcavueYa95uhOdjqrNXSjMFL0CmYVtVvbZ8yZYotXLjQLSGk7X4bUftTB+7nn39+2n3od4QgG9FGHUS+vn37utUhtKSjzp3U2VS7dm1X10AdS/3793e/GwqkVbvmwQcftFKlSrkOKFXO1+oVzz33nGs7GthQpxYQFSIyLg4kcUpxXbdunUttDXbZZZd5Tz/99Gnp45UrVz7j8TQPVemuy5cvD2zTfLs9e/ZE+JED8UNpepdffrlLX/3ggw+80aNHe+3bt3dTI5577jm3j1LCM2bM6L322muB23377bdepkyZApfr1q3rXXPNNacdf/z48d6QIUMCl3v06OFuCyQnmiqh+dV79+4NbNN80jRp0gRSvPWbUqpUKTelKNhvv/3mPfbYY4HLmp+qedxANDt16pQ3aNAgL1++fN5ff/3lam7od2TDhg2B8zHVKUiXLp3Xr1+/WI/TvHlz13Zk4cKFXpUqVdy5WdeuXb1Vq1Yl2PMBLgSBNpI1ndioCJlOhBQY62/UqFEhc6tfeumlkNto/rWCjbMVm1EQUbBgQXeyBETbiVCdOnVc8bHgwmYycOBA9/n3g2LNOVXQ8P3337vL3333nTtp8s2YMcNd36lTJ2/t2rXuxEpBdcWKFb1t27Yl8DMDzp8KlflFmIIpMHj++ee9iy++2CtdurT38ccfB67r27evCwDC91eQ8eqrr7rLa9as8bJmzeoKpf3555+u0/eVV15x9QmWLVvGW4ZkQR1L+t5XwT51vmrutei3pHDhwu7c6uGHH3Y1PK666irXqRTb4MTOnTvdsSiChmhHoI1kTQWZWrRo4U6g5IsvvnAVkVesWOEut27d2rvuuutOO0lSoKECHGfz888/h4xqA9Fg9uzZ7jOuoDimIPySSy7xatWqFdimrA91UqndKODOkCFDyG0mTZrkghAVtNFJ1COPPOLt2rUrQZ4LECkffvih6zTyizLp+11ZHgoc9Fsyc+ZM1zGrz7nfwapsEFUQD++wuuGGG7xq1aoFLmtE7sorr/RSp07tOn51XAXcQHKiwQv9tihQDv+9KVu2rBvBVsdTTJ599lnXYavzMv2OqMNWv0dANCPQRrKwfft2N9K2ZMmSwBfz6tWr3cjbgQMH3GUtN6Q0PQUJvXv3dtu0zJZOrP7444/AsXQ7/Sjkz5/fLS0BJDeqhq9g4UxTI9QG1K5Eber66693J1HqrEqfPn2Mt/Or7gNJmTpT/eXngu3bt89Ni9Bos/z++++uHVSvXj3khL9ly5aBqvpa0k7t4fPPPw85Vps2bdxtw0esaSOIFrNmzfI6d+7slqcLps+0lrCrV6+eS+P+999/A9dp5Qi1h+COp2PHjrmq+couDKdRbf/4GhHX6Pc333xDNhSSDYqhIeoNGDDAVT5WZWMV1FClb1m7dq0rIvPBBx9Y9erVrXXr1pYhQwZXsKlPnz5uHxWvUaXXa6+91hU4UyEnVYp99NFHrVy5cq76JRCtVGhJxZfUBjZt2hTYrsJK6mhVFfCY1KxZM9CGRAXPRo4c6W7XrVs3d9uYpE7NTwqSvpdfftmtEHHkyJGQ7dmyZbPrrrsuUMiscuXKrhCTfl+CiwCqQKAqKKvAn6oi33///a7Q04oVK9z1CxYssJkzZ1r58uVt4sSJIfdBG0FS9vfff7sVIlSITJ9r/asK4b7Ro0fb1Vdf7drGPffc486ZrrjiCtu9e7e7XitOaCUJtYHggpfPPPOMDR482J2nHT161DZv3myPP/64q9Dv/96oQFrLli3d+Vj+/PkT4dkD8SCxI33gQmg+ndLwNO8tnIpl6COueajTp08PGZHQSLW/zqkKpD3wwANuvrUKQw0dOpR0JUQ9jc5dccUVbg1f/WlEwZ8y4WdtxLbOu4qg6frwgjPr1693beRcplUASZX/+Q8fhRZlRuk6f8RbhQCLFCkS8pugEbpcuXJ5w4YNC1xu27atSwvXWteaj6rpFKpRQOorooUy+/TZv/HGG73FixfHmAmiz/3w4cMD2zRFqECBAl63bt0C2zRFQnOxw7344otuCpLaiWoWaE14CsgiuWMdbUSFlStXuhGC4sWLW9OmTQPbmzRp4kYb3nnnnRhvpzV9tXTE999/HxiR0Gjcww8/bI0aNbI2bdok2HMA4pNG57RG6eTJk90yQVq7V+1Fy9dpZFttRSN2Wu9a6tev70YVli9fftryWk888YTL8PBH6IDk5sorr3TtQb8N4UveaU1fLXk3aNAg2759uxu1VrvSMl6+Bx54wLWPGTNmBLbpska5teavRvGAaKPltbTs1kcffRTjaLcy/ZYuXWpVq1YNySp89dVX7d9//3UZG++99549++yzLmNKv0Ph7Uuj37ly5XLL3QHJHXl+SLIUBKxZs8aefvppd4Izfvx4u/76691ln05qMmbMGOsxhgwZ4tZhvOmmm9wavl988YXVqVPH9uzZ41IEgWg3btw4+/jjj1263e+//+7aiDqlPvzwQ+vcubPbRyc/Tz31lEt39adDqG3oREhtw0/7U0CudeLVcaUUPyDaKY1V6a2aQhG8rq9SXLUtfHqQTv61fvyoUaPcZaWwanpR8LrY/u215nzw7RWkKI2WIBvRSp/rsWPHuo7bw4cPu3Xdmzdv7qbkad13DVgo4A6mNeB37drlztlE7efAgQP2ww8/nHZ8tS8dhyAbKUZiD6kDsVE18AoVKrhlIvw076+++spVDferVqpCZXBlV59fAE3mzJnjqlhWqlTJLa+i9YKBpEhppuFr7Z7NgAED3Hqkd95552lVXoOXqFMRJqW0Bq+JrarKWt83c+bMbk1tFQBUuvm8efMi9IyAxKNiZvp8a+qEUla1Lq+fyq2UVxVt8pfgCqYimWo//moVWuJOqa7+75Dvn3/+SaBnAsTPFAotuRVcoE/Tg1Qos379+l7OnDndqi0qgHn48OFAWriKAQbT74hus3v37sA2Ver/6KOPeNuQ4hFoI0FoTqcC3tioaqXmSgcbO3asO9kZM2ZMyHYFzM8995z7/4IFC9wXfPC6pqp2qaVV/JMkIFo0bdo0UBE/nCrqa43rwYMHB5Yfkg0bNrg2oNoCwTSXWstyBXv88cdd0BFMJ1laqkiVX3WSBUQr/Y5o+SDNMVXlfHUa/fDDD4GgWBXFg+dlqzK4lqULN3nyZPfb41dTVpChudeqXQBEu71797pgWUtoqZNVQbUfSEuDBg288uXLx1j5W8s7qm289dZb7vL+/fvdAEarVq0S9DkA0YLUcSQIzQNVKmuwZcuWWY8ePaxYsWKu2mSePHlcdWSfUmFz5Mjh5v0E09w5VUCWGjVquLlAqgJ755132nPPPWeXX365m6OqeXZANKlXr95pKaqiSt+qxqqUvU8++cQqVKhgs2fPdtcVLVrUpe4tWrTotBRAtZPgCuHapv3+/PPPwDallWtOqWoWqC0C0USf7zfeeMNNl1D1YqVy6/v/kUcesRMnTgRqeqh6cseOHe3dd98N3Fb7aLqF0mN9+/fvt4EDB7rfH6W4imoYrFu3LlAdGYgmmjKhqRD6vKvK95NPPumq6aut6DdFNXBU3yP4d2L16tUxHqtZs2Zu2pGq7KudqX6Bah2MGDEiAZ8REEUSO9JHyvDJJ5+41D0/LfbgwYMuLbxnz57e8uXL3aiaRrC1pnVwuqvSjxo2bBhyLD+1SWs8+qZOneqqXD7yyCOuxxWIRjF9tr/88ktXMXzHjh2BivkaidMIm6odi1L0lObnX5bNmze76q6quB9MbWrhwoUJ9pyAuDifdaYvu+wyNzKn3xmf1vctXrx4yH5qV2pf69atC2zT74amXqhqeIcOHdwo36233uqq9gPRTFlKysLQOZSm4N19991u6l2WLFlC2tkLL7zglShRIjCtQqPUyv5Q9lRslCauKUbbt29PkOcCRCsCbSQIBdb6ch81alSM1ysVVnPlNA+uY8eOge2//PKLCxbC08CV2nT//ffH++MGEoKmO2hetU6Mateu7XXu3DlwnU7+NRUimNLFdcLktyf/xGjcuHEh+zVu3NidXAHRQCftWmYxpuUaZe7cud4777zjOlODA4XXX389ZE61/P3336fVKRDN2VZgEZ4q3rdvX5cOq9sByYGmUGg5roceeiiwTdOP1LEUXAvEn340c+bMwDZ1NoVPMwIQd6SOI0FkyZLFLaWltNdgBw8etE6dOlmlSpVcOquqJKuK8qFDhwJLsGiJos8++yzkdl26dLGyZcvy7iHq/fHHH26plPvvv9/69+9v8+fPt9GjR9uxY8fc9apg7FcF9yldXOnes2bNcpezZs3qquiHp52/8MILLl0QiAb58uVz6drhn2NVMNbUCaW0avUIVTXWShT+70S7du0sbdq0Lg3cp2UfVQE8/DdHU4/Cj6+q4pp29NBDD7nbAUmJBsU0BUKVv2OiFPCJEye66UThU4X026GVKHz6nVFbCV7WTr8nWu7Rn5IX2zQjAHFHoI2I0vqKOmFp3769vfzyy4FgQfyTpOA515ozt379ejcfaNiwYXbXXXe5kyct5SVaSiKmEyMF7Y8++ijvHqKeagtobrbazs8//+zmi2r5Of+kStfNmzfPrecbTPULwpcr0lJ2WpbFpxoG1atXT8BnA1wYfY7VsRocMKiWhz7X6pSaMGGCCwC0ZrW/1KMCdAUiWr4x/FjaFtxO9Hui+doK3oFooPMgDVaEdxqJzreqVKni6gqow0iDE37HbIsWLSx37twhy3FpPnXr1q1jXK4uuIO3SZMmrq6OgnAAF+A8RsGRwmj+p+ZRn8myZcu8KlWquDlxjz32mEsDV9XK66+/PrCP5pYWKlTIGzJkSGCb0sknTpwYuPztt9+6dD9VXw6et6r52/78ISDaqKK+lghSFXClqfpU1VWf9/DltLQMkd92NO1Cy261b98+0AY0/1rTLIJTxdW+lEIORCPVF1D1e61OoVodP/30U+A6pb8OGzYsZH/9jmi6hL+Uo2oZXHTRRa69+Hbu3OnSZCdNmpSAzwSIPC1tmjFjRlcxPPjcTFMtNm3aFEgBL1mypEsZ9z344IOuqngwnWdpaTstcedTTQKdw61cuZK3D4ggAm2cVd26dUPm+MREX9IzZswICYY130dBhOZZBy8vpPV6g4+twk4qrKG1GEuXLu2K02iequatAtFKc0i/+eYbt6yQlqRr0qSJC5YVRPhLDKnAmdrItGnTQm6rEyidCClQ8Iv9qVOqRo0a3l133eXlyZPH69KlS6I8LyDSJkyY4DqTtCRdgQIFXF0Ofc6DA23Nww6mzia1HbUN0ZzTbNmyeZ9++mnIflr6cc2aNbxpiFr6nVAdG7WDDz74ILD9qquuckunhgfkmm/t1xpQXYPwAoA6t8qXL5+rdwAgfhFo46zef/99V/X4+PHj7sv7nnvucUUyVGQppoqTGj1QESbdpnDhwiEnTEuXLnUnRytWrHCXFy9e7EbBtU1VyDUqASQHGmFW0KAsjjfffDOw/dlnn3UVw3W9lC1b1nv00UdDbquiaGoTWgvYp9EKVYFVtsjvv/+egM8EiD8ajVMn0siRIwMj21qTVxkb/tq+1157rdeoUaOQ2ylYUADx9ddfB7bpN4n1fJFc/PXXXy6YzpEjhwuylcFRr169wPW1atVyK62Etwtldrz77ruBbfqNef7550P2+/DDD93gCID4RaCNs9qzZ4+XIUMG75VXXnGBQ58+fdyogUam9QXuj7qJRtkURGiZFaXLDho0KOSESTRqoWW9gvnpf0C0jjgo7TU4bVUUQCtgDl4qSPsqndVfhu69995zgYZOqoKDcS1XdMUVVyTgswDij1JeFUyrsvfWrVtDOnK1pFYwXa802S+++MJd/u6771w7UoZIcPqrfpeCO3v1/+DfGiBaqSP24osvdssxKnjW+dQdd9zhOpfWrl3r9lGQrQGK8Gl15cqV81566aXAZVXU11Q+AAmPQBvn5KabbnLpfP369Qts03xQrb2oOdmi1CSdDAUvzaIgQtv8EyZ/bt0DDzzAK4+opuBZaXya/6ZAWamvGnkInoOtjA19/lXDIJhG3bRsl+gkqnXr1u72Tz75pNuuLA8dRynkQLRSOrdGzRYsWOA6aVu0aOFVrFjRK1KkiPfvv/+6fTTyptG68GBBdQq0v0/LOSr4VuChP6WJ0z4Q7fS5V10CZfMFdxqpzei3Q1MkgtuT5mT7o9NLlixxgXdwO1Dmk6YdTZ8+PbBNbW316tUJ9pwA/H8E2gihUbY777zTreOrImQ+FSzTl35w4TLRvDmd8Cit3A+0f/3118CPglKbdFIVfMIERINZs2a5k3uNDigro2HDhiEnPapBoPoC48ePd59/f+RAo3PBI9saldAIdTCtf60Raz+TQ8G25stpmoVSw5VFAkQ71R5QTQKNugX/Luiy30Grda71u6HAIphqdWiteBUM9ClNXFkiAwYMYN41opqm/yi7SZmBag9lypRxna3+3Gq/xk3w51+6desWMjqtApvKkNJ2tQsNfmh6H4CkgUAbgSBBqUZK61aKuOYB6QtbJ0X+PirApFTwYBqp04+Bn/Z63XXXuTmpChg0Knfvvfe6+dirVq3ilUbUzBlV5VY//U6fcc2Z1kmQRtliS/NTWquqvao9BBesGThwoGtLwSN2alfZs2f3RowYkSDPCYhv6hxSwaZg+swXLVr0tKrHynTS74n/26PrtdKECgj61EmrAEJ1CYDkxB+UUK0bv36H2oKKw7Zt2zbQntTRFJwN6GeA6Lbz588PKYDWsWNHN0Dyww8/JPCzAXAmBNrJnOa6BRdiCi+GoSrf+tJu1qyZ6yX1R+L0r0bm3njjjZARBo3OBQcMfnEzpSv5hWw0504BiuasAtGoVKlSp01vUPaG0vSCaxL4I98ajVBFcAUQN998c0jBGgXumnahqvrB1E5UERaIVhqR05xr1RLQfGm1jwYNGoRkZDz11FOnzQ/16374hcy0fKQCbxXR1G+OMqCuueYat6RX8FQMIBrpvChcnTp13Gc+mIJkBddqV6LguVq1am5+dvB5mH5P9C+ApI9AO5nTyX1wWp6+sJWq9MQTT7iTI63fq+VRNLe0ZcuWIbdVap96XH3qQdWxNI9UI3galVPvq06IgOTkueeec/NGg0+QNGIdPmdOQbfSyocOHRrY9tprr522nIoqJiu7A4gWGl1WJkenTp3cvGotUde/f/+QfXr06OG1a9fOBQhqK2oP6nDS9CPfH3/84dpNeKX8G264wXVK+ZQyq7nXmo6h9uSPdgPR2HbUQaRAOWfOnO7zf/XVV4cUAdRnXFXEg5cx9Veq8AdHNIChqXe6reZwq9NKGSK6Xr8zAJI+Au1kTqPPSlsNXgJCaXr64tf6vj4V19AXePBotQpthBc308iECj9ptFuprwrONWIHJCc66ddnf9y4ce6yitRolPr2228P2c+fR+dPsRBNm9C24OVUlH7uV4oFomFda00BUtCsTI7Zs2e7OgP6XPvLcIVTJ+7YsWPdSJ1SvoMLO6nDVkF5MNU2UHEzVSMHoom+y5W1p6lEWn5LHVDB0x5U8PWyyy5zbUcdrgqYVeOjSZMmgX12797tipZpOdRgWhe7Zs2agcuqlXPbbbe5bVrVhfMtILoQaKcAOkFSYOyPECgdL3zJodjSW6tUqRKyFJd+UDQ6pyqWFGxCcla7dm33pxE7rUuqaq/qZFKmhz/SrSBBHU4KIjRip2Jo6rDq1atXyPIqQDTxKx6Hr7Or9hBTBpOCb9Uw0HXDhw932SAKNnyaZ124cOGQYERtSMUGCRwQLdRhqg5XnU899NBD3pgxY9x3vc6dVIvDF15BX7fT6LbalAYwfMre8Odk+/zigMHLPQKIXgTaKYC+sPXF7c+HU4CtlCWNKASLKb315Zdfduti+z8cGrUI/xEBkiNVAVe7UcC8a9cut03TLPLly+dGMTQiIWpXKp6m7VrndOPGjYn8yIELp+ylu+++O2Sbfh+CpxOJ0sbVEaXsDp9SXTVFyafKyZp7qlR0IFqp2J+q6KszKZiCZf0GhNPyjldeeaXrfFV1cE3BUNX84CJmyuoIHvQQZU4FFzsDEL1SG5K9cuXKWc2aNe3TTz91l7Nly2atW7cOXPbdfvvtNmbMGDt69GjItkGDBtmpU6fc5QwZMliqVKkS+BkA52b79u1244032u7duy/4JWvbtq2lT5/ecuTIYbly5XLbGjZsaPPmzXP3U6dOHVu3bp21atXK1qxZ47YNHz7cihQpwtuFqKfv/rFjx9qRI0fc5ZUrV9o333xjDz30UMh+P/30k9WuXduuuuoqd/m///5z7WLhwoXuNpI/f3778ssvrWrVqonwTIDIKFiwoPsNCD930vnVli1bQrZt2LDB6tWrZzfccIP7fXjhhRfc5c8//9y1EWnZsqVlzpzZnXcF++STT9wxAUQ/Au0k7OTJk/bbb79F5FgdO3a0r7/+2vbu3Rs4ifr2229DAhL9IJw4ccKmT58e2FagQAG75ZZbLE2aNBF5HEB8yp07t/3yyy82cuRImzRpkt166632+++/n9exFFzrRCj8pKpkyZI2Z84c69SpE+0CydZtt91mBw4csKefftratGlj1atXd78Xb7/9tk2dOjWwX40aNWz27Nmu3SnAvvvuu618+fLWuHFjd9mnDrB8+fIl0rMBIkPnTjpH2rRpk7t86NAh1yGl7eEdUNmzZ7dHH33U0qZN67Zt3brVtm3bFmg/6sh966237PLLL+ftAZIpAu0k7Pvvv7crr7zS9uzZ40aUdXJ/vhRw6Bh+z2nTpk3dSN3o0aMD+1x00UX2zz//WPPmzSPy+IGEtnnzZitcuLB17drVXnzxRWvQoIEVK1Ysxn2PHTtm48aNs+uuu86mTZsW4z46eVIQoXYRHtDrBKpo0aLx8jyAxFa8eHE3AqeOJrURZWwo0Fab0u/H66+/Hgig27VrZ9dcc41ddtllroNKvzOTJ0+2Zs2aJfbTACJKAxIahX7ppZfsySeftNKlS9vcuXPtzz//tB9//DGwX6VKldwo94wZM9wAxjvvvGOLFy+2Jk2auH19ajvVqlXjXQKSKQLtJEwnKVmyZHFfxDrp6dKlixthONMIuIJzP807PDBQAO2PzqmH9b777rP9+/eH7KcRbCCa7Nq1y1asWOGmPBw+fNilsYrSuO+//343VSLcH3/8YYUKFbI333zTTaPQqFxMNKKtYFsnSkA00El/r169InIsffb1G6F2oNE5dca++uqrNnToUHv88cddZ5MMGzbMtT21xcGDB7v9gORIQbaC7XfffddlNP3www9ulLpu3brWokUL18ErSv1+5JFH7Oqrr3a3GT9+vBvJ1v7du3dP7KcBIIGk0kTthLozxI1OaJS2pxECjbiphzQmq1atcul8mgOntFZ9oWsuUTilN3Xo0MGlPOXNm5e3A1FNo2sPP/ywO3EpW7ZsIOsjXbp0rq3cfPPN1rdv31g7pTTaENtoNxCt9FuhEefVq1fbokWLbMqUKS4wPh8KsjW/+uWXX3ZBQzBNzdAcbHXYZs2aNUKPHkj6FDBrasSSJUtCRqM/++wzu+uuu9yfRrAViKvzSf8qgxBAysOIdhKi0WiNIKi3VCndGo37+eefXW+pipCdKV1Wo3azZs1yhZpiCrJFI3cE2UgulOkh+kzPnz/ffv3118BcOLUjzdOOjfYjyEZypJFnndhrnrQ6YGvVqhUovhROo9AKDpT+HVPWhn5XlDau4kzhNMr92GOPEWQjxdE0CU1RCq/foYEMncepYKw/h1vZhATZQMrFiHYS0blzZzeXx5/zs2PHDrvpppvcdRUqVHBBRe/evRP7YQIJTmneGqnOkyePXXvttW7E2j+B0YmO0vXCqeJriRIlXIEm1TkAkjNNKVIwrRP6999/31U2VsbHsmXLYr3NRx995FK/r7jiCtcxpaKXftsKphFxtTOlh6t4EwBz52pqFxs3bqQoJoBYEWgnAer5VFGl9evXxzjK9vzzz9uIESPs77//TpTHByQGVXNVALBgwQI3/03LBWnKgwrOaKRN1Y2VwqeCTaqm/++//7o014EDB7rUcY06aKktjcYpVVydV7FlewDRSEWVFCxrXrYqeitrSVOOtL1y5cq2dOnSWJfU0u+NAmfaBBB3Ws3innvucQU1WdIRQGwItBOQKrGqUqtOgjSnVHN4tKyD5sHpJOm1115zQYMCBlUa10i2Tpa0REqpUqUYnUOypmB41KhRVqZMGZfuquWz1A6U2qqpEyp2dumll7pU1gEDBrhUV+2vkTsF2JonqiBDI3vKDvHnqirgVsChoP2VV15J7KcJRIR+N5T9pPRtFSbTdAhV0venGakCuD77gwYN4hUHACAREGjHoyNHjriTntSpU1v//v3dnFGd9GiE4eOPP3Yn/Spkprk+SuPTPgo2NMKgOXYayVMgoRRyVSA/fvy4Pfvss25E76qrrnJptEC00zJASgN/6KGHXLCsdqBAW5WLlTKuYEKF/DQyrYD53nvvdaPWMdGcVHVgKd1cNG9bHVVKj2UpLkQrLQukJeb021GuXDm3TW1DgbQyP/R7EU6duvq9UWqrfoMAAEDCItCOML+Iu0bcNEKtwhgaoVPwrJFsjUwrAJ8wYYILGPQ3ZMiQGI912223BUbtdJKlfTVioZMrpSypwjgQ7dRppLahz7vfFtSppE6qRo0auZTx+vXruxFpdS4FFwZUR5WqjatdzJw50/r16+cqLPv1DYBopu/99u3b286dO13NAaWI6zOuEeyDBw+63xONXKvw2datW90ot7Kk1CGr6RTqXFJqa6tWrVwb0e9TxowZE/tpAQCQIvxfiV5ErCBNlSpVrE6dOi79W0uraM717Nmz3YiDRhZeeOEFt/yW1lhU0Zo2bdrEeKzt27e7UQylz4pG9aZPn847hSRPJ/j6/OrkP6bPtNavDp43qgBaxQCDg2PNHdXUCXU0aZkijXj7lBq+fPlyq169umtnCjyUPq5jas528HIrQDTR6LQKmd15553usgr9aamgHj16uFFpdSY1bNjQLS2kz7l+W7744gt33cUXX+wyonr27OmmImk5Lh3ngQcecNlUmkqhTCoF3QAAIP4xoh1hCrI16qCqx36q6l9//eWCBhVoUgEnLQFRoECBwG00yqDlIHr16uXWJdXohQpt6ARJ6wDrOiApU0Cs7A1VYVWVYhVoeu6559x1GnHWevAffPCB63hSkKwAQpkamTJlcoG52oOqGmtUO3wdeaXIatTOX45IKeaqcaDrgGin7A21GbUNLZmlaROaAqF2oiBbvyXqSFJ70fSJtWvXurTwW2+9NcbjKZBWernaj+oaKBDX/G0F6OrkAgAACYNAOxYaNdPomAIHVXLV0ic+pbIqNVwjbRpF0JxSpfCJ0lYffPBBFzxoPVOf0sdr16592rqLH374oZuL2rZtW5f2pwBboxIarQi+PZAUqZOoW7du7mS+YsWKbnT65ptvDvnsDh482AUOWuddAbU+41dffbULFN588023jz+arbnYwcG7UsU1aqf0WS099O2337piaEoxpwMKyYEynZQWroJ+qi9w/fXXu+0KrPVb0qBBA/vpp59cnQ61ryZNmgTWi/enT6hdKXX8yy+/dMfQyHd4RgkAAEhYBNphlixZ4oJhBQ4aYdCJjQICP3V19OjR7uRH6aoasVaxGY1C//bbb+6yRh40H1sVxhWg+3TSpLWwNQr38MMP2759++ytt95yo3U6iSKoRrRS0KxUbxXpi4k6o/TZf+aZZwLb1CGlAF3BQa5cuWzixImus2nbtm1uLWCfRsM1x3T+/PmWM2dO16Y0PQNIyjSlIXPmzK4TNZg+75s3b3YZTsHXabRZU41UZd+nDil91rVer9qOCgUGT8PQXGv9bijrSenmSh9XLQOljhcvXjyBnikAAIiVh4B169apkpl30003eatWrTrtlTl58qSXN29e7/333w9sO3z4sFe2bFnvtttuC2xr06aNd8stt5x2+08++cQrUaKEu498+fJ5PXr08Pbv3887gKj20UcfeWnSpPG2bdsW2LZy5UpvwYIF7v+lS5f2+vXrF3KbPXv2eKlTp/a++uord/n48eNe7ty5Q9oWEE30W/Dll196LVu29HLkyOFNnTo1cN3OnTu9Dh06eFmzZnW/IRdddJE3YsSIwPUff/yxa0MHDhwIOeall17qXXnlld7Ro0cD27Zv3+7VqlXL+/XXXxPomQEAgPPBmh9BNAqgOdZK3dYc0JhGKXbs2OHWtvZpjqnmo2rUTfPhRKPgX3/9tRu1Dqbtml+nOXkakdASRcGjFEA0Utq3RrSVHq4sDc0xVWV8jdCJ5ldrDmowjVrrTxkgorRwZY6ET60AkjrNodaKEEWKFHHFxpS9oVFrjVL77rjjDrfahDI29KdRas2/Vj0PufHGG10b+uGHH0KOrboFGtnW75KmK3Xp0sUV/VORTFUXBwAASRep42Heffdd69q1q23ZssVVClequE7+VRVZ87QVGGsOnJbX8mlpIgXfWrtXBc8USCt9/OWXXw7ZD4hma9ascSf7+pw3b97cLSHkz5NWcKHpEZpL3bFjRxdk+Gv7KsjWvFIVS9M8U9F0C7UVVSH3q4QrYFHbUT0DIFooHVzTht544w03rSicOldVw0PTkoIr4mtZO6V+q+6AqO2o6rimUYTP4dYKFWofOo4qiZMaDgBA0peiA+2lS5e6kWWd8GhkWjRHToVlFAToBEkBggIHBQgqQKM5ohrV9kciZMGCBW4UT8G5Amzp06ePG+HQSAcQrdQ+tG61sjM0/1MdTlo6SOv4PvHEE4HK3wqiVUlclZI1JzucggNlfeh2WbJkcUGJRvFUKA2Idk2bNg0U0PQpsFZAvGnTJjcK7XfE+j766CO3soSCa/22qA2p0J9+R/LkyZNIzwQAAERKigy0FTToJF9Vw5XOp2qvP//8syu2JLpOxc0UiIcXKfv1119d9XCl/imYPnjwoBvN0+jdpEmTEukZAZGjqROqZKxsjHnz5rkgQBkbSlvV8nR+5oeKLikoUCeVgozChQu7FFlNiQinomYKLFQwTW1K2SHqxAKSg88++8x1yKq4pSp+axkuBdAqqqlRbBX8e+WVV0JGvH/55RerV6+e67hVYO23IS3zqCXsAABAdEsRgbbSUUeOHGkzZsxw64sqFU/riWqd3wMHDrg5pDfccEMgQJgwYYK1adPGrX+t/cMpnVwjETquTo4UNGi5ISqHI9ppuS0FDeqAUvvQKLWqGqttKHOjRo0abj91MKmDSsGzqoVL9+7d3fJc69evdxWQgeRG1e+Vxq2lGPV519xpf313tQdNpVCtAdXjqFu3bmBqheZjqzN32bJlgWrjyupQu9KIt7+fVqDQslwKuAEAQHRL1oG25r5pCZQXX3zRndxoSRXNrz527Jg7MVIBJnnvvffc8imaa6dtCqAViPvLeMVEx1BAoVRxCpohKVIxMn1OlYFxrpSxUbNmTbvvvvtcuxC1By11pznZWprO16FDBxdwfPPNN4H7U6fVtGnTXDE0IDnQyLSmO4wfP95NfdBoswqUabRaWU9+Z6yyORYuXOhSxMMp80PFy9SOVANE05K0NKTamDpqAQBA8pOsh51UVEYj1QqwVQVcxclUFVmpsQoQfBqR0wid5siJqr9qm0bBY6N5qzrBIshGUqWTeH8OdTB1MmmUWvNGlRL+wgsvuDYhGrHWiJo+3z61BxVqCm8PGrVTlWSlvsqll17qRvGUMQJEu++++86tY+130j711FNuxFmrTCiTQx1S6sT1KXVchTFV4C+cOm41Gq40cnX2/vPPP65DiiAbAIDkK2pGtFXFWCMGOpkJt27dOjffTanbKkrjBwn+HDiNRFx//fVum18RXKMJ/nxTf1620l3HjBnjLmtuqkYCZ82aZVdeeWWCPU8gUmbPnu0K/al9aCRNTpw44T7XutytWzf7+++/XQrszTffbB9++KHbR4G35phq6oRPwYMC6eDpFJo2oYJ/CuYfeeQR3jgkm+Xq8ubN61K9FRSrOKbahwplKs3bpxFtLbOlgoEa8VYdArUrBc+vvfZaoj4HAACQ+KJmRLtEiRIxrrGrUQZV/NZJj4o3acRAy6CIRtd0O40y+PzRagUS4aNzSoHdu3evu3zFFVe4KsmXXHJJvD83ID6og0jLAQWPRGudX6Wxfvnll64TSm1G7UojdEobl9tuu80F4Ops8qkdaPQ7uA2qAKDaiPYHkiJ1tvprtZ8rVQpXsT8tZdegQQM3mq1CZmo3Cqp96rxV56w6ckX/13QK/RapEwoAAKRsURNoayRbaXubN28ObBsxYoQNHz7cFZhRmp+CA83JVtAsKjCjIEBBRTBdr8qwmmPtU9EnjfQFj1go7Txz5swJ8vyASNG8Uc2lVrq3RuaCg2ONSKvzSR1OPi0ppGBCAYIfaGgkPLxjS21Jo+TBVAzKr9YPJCUKdjUS/fnnn592naY7PPbYY65DVQGzMpd8/u9Hjhw5AtsaN27sCpT5bURUbV+ZUMHtRLfVyLZWtAAAAClbVATaa9ascXPcihYt6ioi+3TSo5MkVXv1T4xUNVlBtIrS+Cc+WttXa5r6FFCXLl06ZKRPgcf06dNjXAMYiBaqRaAgWQG2Oo80VWLlypWB9qBU7xUrVrhgIDxg1naf2s2oUaPc7X2am6p5pUA0UMaFll4M7zDSVAqtZ602oGkPqrNx9dVX2+TJk9311atXd3Ozg9fE9kerY8qEUptQIU3R74dGvlXnAAAApGxJOtDWib8qtSrFtVGjRu4EJvikSSdKWoYomIIMzanT6LdoPqmK1oSfbKkwmtICgeSkR48e9sQTT1jv3r3dCLQ6j9RB5X/+W7du7daRD8/y0JQJreXr00iggo9du3aFdEb5yxAB0ZIJpWXpgusNqI2o5sfgwYNde1Db0Mi0VpnwO6AUQKsjNriEibapVkFwVXH9hij4Dh79VoAPAACQZANtnfBoPVJVQVaKt0YhlOqnZVX80Wml/WnUIXjUTVTsTFXEw0fngk+atE42Rc4QjbSMltK9lcqqQGHnzp2BNqOAQnUKfNmyZXPLCSn7Q5XFlclx5513WpcuXVwauG6jdeM19aJz586B26mwoAoDqi0B0UYdTPq9GD16tOtACu5o1dQKVdwPpjXjVQncnxqhaReq9aE53j7VKNBo96RJk0JGurWv0sgBAACSVKCtE/0pU6a44jOaY+1TATPNvda6pRoh0EiaqiErJc8/aVLVcAUZr776auB2msOtVFmNbIePajAah2imta21PJ2qIrdq1crNPVUwoIJm/km/plGsWrUq5HZa01pzUrUUl6iScsuWLa1+/fqupoHWkB87dqwrHghEO633rpRxBdjp0qVzy9kFj04r4yl4hFuUSq791ZEr6sRSuwnPhFKauEbEAQAAkmygrYrG//77r1122WXWs2dPVw1ZlY39ysd+1dbguaQKJDTKrQBD16uok4JsnVgpTVYBg9LEtQyYitcEj+ppjjcQzbS8kJbR0mf+3nvvdYHysGHD3Lxsf361RrpVJDA4e8P/vx80KLjWPqrGrOJ/SoVV4A1EO2U+vfTSS64SuH5X+vXr50a1lRXlj05fe+21LosjuBq5fmeUGaXfCp/aWHgaeK5cuRLw2QAAgGiWKIG2TnAUJOhPo3Eq1DR//nxr1qyZm18qqoKstUk12h2sbNmytm3btsB2VVfWeqcajdAawUoRHzp0aGI8LeCCqaiSRpyV2q3PsT7T4dWQ/XWsRTUMlCruB9HqbFLFYwUZ6ow6evSoCzzUoaUR7WPHjgVuq6AiX758vGuIOt9++60LmLW2+5AhQwLbVfhSn3t1uPrUiaQCmH4b0drXWk1CmU4HDhxwQXb//v1dB1Rwh5OWgVSmFQAAQJIMtBUoaOQ6fFRAFZE1yqACND4FCQqalfqaIUMGN2d00KBBtn///sA+v/32m6VNmzYkpU8pr6+//rorcEb6K5IqBQCaX6007eAK3/5InDqaNA90zpw5rhKy1u695ZZbAvs0b97cdSjp+mDK5lA1fo1cFytWzAUh7733nkuR1Z/ai4oDrl271rUrIBpt3LjRdTZpzXd1JCm7SdlLSuXWqLWo2r7osx6sSZMmruaAOp5UuEzzrNUG1T70e6TL6rwNLmoGAABwIVJ5wTmmEaIUPBVXUjCsUTRVBlcA8dVXX7kRadH/NddUo9vBJzdaHkXrVyvlT9ep4rjm2Wl+quZeK+Xv+eefd5WTNZoNJHXK2FBbUKVvjSCrKJnmiGrE2i9ApnmkSgFXcTN/7XbVKVB70LJDqrov+syrdoGWsPOpGr8qi2v+qF9JXyN1Khqo6RW6Doh2+kwrMNYUIi356AfV/rJzKnKmjl193h944AFXed/34osvuo5cBeSqqO93fKkdqlOLNgIAAJJEoK2RAFUxnjFjRiANXPNGlXonmv+pOdcafdA619quwmUqdqYRPT8Y10nTa6+95qog+5Tm+v7777sTKdHxFVirSI0qkKuCMumuiBbqZFKBMlXI1yhzyZIl3ciz2oYCa6WKa4pEMAXIytDQ9ZojqiBb7U00xUJpsGofCqKDR+zKlCnj0s6BaKZMJ3XUqtClUrmVHu7TWtaq4xFc8E/BsqYaqd1oGsWbb77p1sdW8K0Uch1HxTHV7lT0TJ28AAAA8c6Lg5UrV3qXX365V6RIEa9Hjx7ejz/+6L399ttehgwZvG7dusV6uzlz5ngdOnRQQO/99NNPge2dO3f2rr766pB9N2zY4KVKlcqbNWtWXB4akGTdeeedXqVKlUK2zZs3z7WH8M/566+/7uXMmdMbMGCA9++//3rvvvuulylTJm///v2BfcqVK+f169cv5HYbN270jh49Gs/PBLgwJ0+e9BYtWuR+Ew4dOhRy3eTJk7169ep5efPm9dq3b++1bdvWS58+vTdu3LjAPt9//72XJk0ab+fOnSG31e/SY4895v5/6tQp76GHHvJSp07tXXLJJV7u3Lm95557zrWRffv28RYCAIAEEadA++DBg16WLFm8QYMGhWzv0qWLlz17du+///4L2b5gwQJ3oqPA4MUXX/Rq1arlgg6fggwF1Qqugz3xxBPuRAxIDqZNm+aC6oULF4YEDAoE1q1bF9i2d+9eL126dG5/35gxY9xtP/roo8C2/v37e7feemsCPgPg/CnwnTlzptepUycvV65cXpkyZbzMmTO7Dtu1a9cG9tN3/vjx473jx48Htr3wwgteoUKFAtsUqBcoUMB18AYbMmSI2y/4N2jJkiXeV1995W3ZsoW3DwAAJLg4FUNTimubNm3sk08+CdmudD0VLFM6ePB61g0bNnQp45pbreI1mm89btw4l04rV155pZUqVcqtcRpMRc2UHgskB5o3rTmgajeai62pFaq2ryXogpcT0txtzTFVTQJRR5iKnKkAWnAb0VxTP5UcSOq++eYb992vz7qqgmsKkVK/VQFfKd4+fedrqpE+/yrep6rfKoapYpoqViaaSqE1ssN/g1QYTfvpdsG/S/q9KliwYAI+WwAAgPOsOq65pTpZ0nw4UYA9fPhwV/3Vn6Mtc+fOddWOVbwpVapUgUqwKmgzceLEwH5vv/22tWrVKq4PA4gaKt6kuaUffvihFSlSxAXJai8KDFQc0F+qLnfu3K4QoNqYKilrfumhQ4fc9X369Akcz29PQDRo2rSpK3ipQLtQoUJuW+HChd3yWppHHUxLbamKvjpo1UGl3wzVAAnuaFL7UK2C4Hnaqtuhavx+MUAAAICoC7RVmEknSwMGDLBHHnnEFXeaNWuWzZs3zxVA81WtWtVVBv/8889t7969ruiZTo40GrFp06aQkzBVVgaSMwUHCpq1Lq8q8asK8oIFC1x70FJ3WrJIFFCoc0oVkZ977jn78ccfrXr16q6YExCNtKSclqkLXpLRz+AIL2ypQmVqH6ogrsrhCtD1e6Ml6/bs2eP2ueSSS6xKlSpuKchgKpapzl0AAICkIO35jM61b9/erfHbt29fFzxr7V4FEPfff7+7rFHqcuXKuWD8rrvucimwWgNYVcqVKg6kNKp2rOrJWp7OXxtbQYEqJKv9dOrUyS0zpKWHHn/88cR+uEDEO5q0moRGndWxOmzYMLe8naYJBdMqE8qMUlvwM6amT5/u0sm1DraWeRR1UgVnUAEAACSL5b20jq/mv2l9X80z9Wl+nObEafRt1KhRbk63P287ffr0kX3kQJQZMmSIq1Wwffv2QCDh0xJEmosNJFelS5cOBNOqz5ErVy4bP368m7+tTI6cOXO6tqHpFFquTiPXyvTQXG39X51VlStXTuynAQAAEH+BtijQ1l94URoF4UoRfPDBB11aOYD/oznZmpv6wQcfhKwdD6QEvXv3toEDB9qGDRsCKeMqjHbttde6Imfff/+9FS9e3BYvXmxvvfWWZcqUyQXZTJsAAAApKtB+9dVX3YmTRiA0cg3g7GbOnOmKnJH2ipRm9erVbrRa0yeuu+66wPZdu3a5gpjr1693U49UMBAAACDFBtpbt2511WE1785PCQQAIDZawktZHWPHjg3ZriUfd+zY4eoVAAAApOhAGwCAuFABtO7du7uOWs3JBgAASK5YCwUAkCBuvfVWlxoeXgwQAAAguWFEGwAAAACACEodyYMBAAAAAJDSEWgDAAAAABBBBNoAAAAAAEQQgTYAAAAAABFEoA0AAAAAQAQRaAMAAAAAEEEE2gAAAAAARBCBNgAASFF++eUXW7x4cWI/DABAMpY2sR8AAABIPubNm2fr1q07bXvOnDmtadOmlhQMHDjQypQpY5dccoklBT///LNlz57dqlevntgPBQAQIQTaAAAgYt566y2bOnWqNWjQIGR7iRIlkkygXa9ePStQoIAlFQMGDLCLL76YQBsAkhECbQAAEFEKGr/88ssYr9u5c6cLxBs2bGh58+YNbB8/fryVLFnSBZs//fSTu65w4cIuxfvUqVMuOM6QIUPIsTzPs4ULF9qWLVusVKlSVqVKlZDr/eMUKlTI5s+fb5kzZ3YdALVr17aLLrrotP2KFCni7u/kyZNWv359d396vHPnzrUcOXJYnTp1LE2aNOf1GIoVKxZ4LldccYV7LH4GwLZt2yxdunSB1+zaa68NeXwAgOhDoA0AABJMrly57N1337Xhw4fb999/b6lSpbJ33nnHevbsaUuXLnX79OvXzwW769evd0H7ihUrLFOmTDZ9+vTASPTWrVutdevWtm/fPqtYsaItWbLEKlSo4AJ2P4j1j7N582arXLmyC7AVaIenjmu/w4cPu4C3atWqtmzZMnd/TzzxhD3//PPuMShI1jF+/PFH95jj8hj+++8/t6+uW7VqlbusAFsB+G+//Wbbt2+3o0eP2oQJE9xtrr76agJtAIhyBNoAACCiFDiGj2grsL388sstderU9umnn1q1atVsyJAh1qRJE3v88cft/fffd+nlPo0S+4HrkSNH3AjzM888Yx9++KG7/s4773SBsoJ2HfPYsWNunxdffNEFx74//vjDli9f7karz2TTpk0u0Ffwu2vXLjcC3b9/fxdgq3NAI9Z6fAr2r7nmmjg9htWrV7vnkj9/fjt+/Lgb9dZtevXqZQ899JB98803Lph/5ZVXIvYeAAASF4E2AACIqB07dgRGZ32NGzd2gbYULVrU3nvvPbv99ttt6NChdv3119ttt90Wsn+rVq1ckC0aXX7kkUfswQcfdIG2gt7Jkyfbyy+/bF999ZVL39afUrcVCAdr06bNWYNsfz8/lT137txWrlw5F1AryBalnxcvXtyNSGt7XB+DgmxJnz69S0H/66+/zuOVBQBECwJtAACQYHO0fTfffLMb9dWIs6puhwse3RbN3z548KDt3r07UNV89uzZLvU6WI0aNUIuFyxY8Jwes6qiB9P87Ji2KcVb4vIY/GA9+DgHDhw4p8cFAIhOBNoAACDBjRgxwv755x832qyAW9XKg+3Zs+e0yyoYpmWwsmXL5rY9/fTTVrNmzTPejz+fOtLi8hgAAClP6sR+AAAAIGVZs2aNSwUfPHiwffHFFy6N/LvvvgvZR4XSNOfZp/TsWrVquarflSpVcunnmuccToXPEkIkH4MqjPsj5QCA5IERbQAAEO/F0DQ3+YYbbnAVtzUfW/OcO3Xq5K579tln7e6773ZFy/x50ioa1qhRI7fvokWL7LPPPrNp06a561R47KOPPrLrrrvOjXQ3b97c/fvtt9+6bSquFt8i+Rg0d12V11VYLUuWLCzvBQDJAIE2AACIGC2hpSW1wouhKYBUoD1r1iw331oVx30KtFVATUHqXXfd5bZ17tzZramt+dsaxdbtglO0FYRrfvcnn3zi5klrzW0VJtP9+xTM+wXVgmlNbn+ZsNj2U/E2LecVTMF0+fLlL/gxaA538Bzt7t27u+XAdAwtM8byXgAQ/VJ5KpEJAACQRGit67p164YskQUAQDRhjjYAAAAAABFE6jgAAEhSYkv5BgAgWpA6DgAAAABABJE6DgAAAABABBFoAwAAAAAQQQTaAAAAAABEEIE2AAAAAAARRKANAAAAAEAEEWgDAAAAABBBBNoAAAAAAEQQgTYAAAAAABFEoA0AAAAAgEXO/wObmcwGedaTPwAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 1000x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "summary_df.set_index('Experiment')[['Accuracy', 'Precision', 'Recall', 'F1 Score']].plot(\n",
    "    kind='bar', figsize=(10, 5)\n",
    ")\n",
    "plt.title('Effect of Resampling Techniques on Model Performance')\n",
    "plt.ylabel('Score')\n",
    "plt.xticks(rotation=20, ha='right')\n",
    "plt.ylim(0, 1)\n",
    "plt.legend(loc='lower right')\n",
    "plt.tight_layout()\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.14.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
