{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# ENRC Demo\n", "\n", "Brief demo showing how ENRC can be applied to the **Concatenated-MNIST** data set introduced in the ENRC paper, reference below:\n", "\n", "`Lukas Miklautz, Dominik Mautz, Muzaffer Can Altinigneli, Christian Böhm, Claudia Plant:\n", "Deep Embedded Non-Redundant Clustering. AAAI 2020: 5174-5181`\n", "\n", "The jupyter notebook can be found [here](notebooks/ENRC/enrc_mnist.ipynb)." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Versions\n", "torch: 1.11.0\n", "torchvision: 0.12.0\n", "numpy: 1.22.3\n", "scikit-learn: 1.0.1\n", "cluspy: 0.0.1\n" ] } ], "source": [ "# Importing all necessary libraries\n", "\n", "%load_ext autoreload\n", "%autoreload 2\n", "\n", "# internal packages\n", "import os\n", "from collections import Counter\n", "# external packages\n", "import torch\n", "import torchvision\n", "import numpy as np\n", "import sklearn\n", "from sklearn.metrics import normalized_mutual_info_score\n", "from matplotlib import pyplot as plt\n", "%matplotlib inline\n", "import seaborn as sns\n", "import pandas as pd\n", "import cluspy\n", "from cluspy.deep import encode_batchwise, get_dataloader\n", "from cluspy.alternative import NrKmeans\n", "from cluspy.metrics.multipe_labelings_scoring import MultipleLabelingsConfusionMatrix\n", "\n", "# specify base paths\n", "\n", "base_path = \"material\"\n", "model_name = \"autoencoder.pth\"\n", "\n", "print(\"Versions\")\n", "print(\"torch: \",torch.__version__)\n", "print(\"torchvision: \",torchvision.__version__)\n", "print(\"numpy: \", np.__version__)\n", "print(\"scikit-learn:\", sklearn.__version__)\n", "print(\"cluspy:\", cluspy.__version__)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# Some helper functions, you can ignore those in the beginning\n", "def denormalize_fn(tensor:torch.Tensor, mean:float, std:float, w:int, h:int)->torch.Tensor:\n", " \"\"\"\n", " This applies an inverse z-transformation and reshaping to visualize the images properly.\n", " \"\"\"\n", " pt_std = torch.as_tensor(std, dtype=torch.float32, device=tensor.device)\n", " pt_mean = torch.as_tensor(mean, dtype=torch.float32, device=tensor.device)\n", " return (tensor.mul(pt_std).add(pt_mean).view(-1, 1, h, w) * 255).int().detach()\n", "\n", "def plot_images(images:torch.Tensor, pad:int=1):\n", " \"\"\"Aligns multiple images on an N by 8 grid\"\"\"\n", " def imshow(img):\n", " plt.figure(figsize=(10, 20))\n", " npimg = img.numpy()\n", " npimg = np.array(npimg)\n", " plt.axis('off')\n", " plt.imshow(np.transpose(npimg, (1, 2, 0)),\n", " vmin=0, vmax=1)\n", " \n", " imshow(torchvision.utils.make_grid(images, pad_value=255, normalize=False, padding=pad))\n", " plt.show();\n", " \n", "def detect_device():\n", " \"\"\"Automatically detects if you have a cuda enabled GPU\"\"\"\n", " if torch.cuda.is_available():\n", " device = torch.device('cuda:1')\n", " else:\n", " device = torch.device('cpu')\n", " return device" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Create Concatenated-MNIST data set\n", "\n", "We create randomly paired MNIST digits to create a data set with classes from 00 to 99, where the left and right digit are independent of each other." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Data Set Information\n", "Number of data points: 60000\n", "Number of dimensions: 784\n", "Mean: 0.13, Standard deviation: 0.31\n", "Min: 0.00, Max: 1.00\n", "Number of classes: 10\n", "Class distribution:\n", " [(0, 5923), (1, 6742), (2, 5958), (3, 6131), (4, 5842), (5, 5421), (6, 5918), (7, 6265), (8, 5851), (9, 5949)]\n" ] } ], "source": [ "def load_mnist(train=True):\n", " # setup normalization function\n", " mnist_mean = 0.1307\n", " mnist_std = 0.3081\n", " normalize = torchvision.transforms.Normalize((mnist_mean,), (mnist_std,))\n", " # download the MNIST data set\n", " trainset = torchvision.datasets.MNIST(root='./data', train=train, download=True)\n", " data = trainset.data\n", " # preprocess the data\n", " # Scale to [0,1]\n", " data = data.float()/255\n", " # Apply z-transformation\n", "# data = normalize(data)\n", " # Flatten from a shape of (-1, 28,28) to (-1, 28*28)\n", " data = data.reshape(-1, data.shape[1] * data.shape[2])\n", " labels = trainset.targets\n", " return data, labels\n", "\n", "data, labels = load_mnist()\n", "\n", "random_state = np.random.randint(100000)\n", "rng = np.random.default_rng(random_state)\n", "subsample_size = 10000\n", "rand_idx = rng.choice(data.shape[0], subsample_size, replace=False)\n", "\n", "data_eval = data[rand_idx]\n", "labels_eval = labels[rand_idx]\n", "\n", "data_train = np.delete(data, rand_idx, axis=0)\n", "labels_train = np.delete(labels, rand_idx, axis=0)\n", "\n", "data_test, labels_test = load_mnist(train=False)\n", "\n", "print(\"Data Set Information\")\n", "print(\"Number of data points: \", data.shape[0])\n", "print(\"Number of dimensions: \", data.shape[1])\n", "print(f\"Mean: {data.mean():.2f}, Standard deviation: {data.std():.2f}\")\n", "print(f\"Min: {data.min():.2f}, Max: {data.max():.2f}\")\n", "print(\"Number of classes: \", len(set(labels.tolist())))\n", "print(\"Class distribution:\\n\", sorted(Counter(labels.tolist()).items()))" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "def create_random_pairings(data, labels, random_state=None, data_cat_dim=3):\n", " \"\"\"Creates a random pairings between two images\"\"\"\n", " if random_state is None:\n", " random_state = np.random.randint(100000)\n", " rng = np.random.default_rng(random_state)\n", " left_idx = rng.choice(data.shape[0], data.shape[0], replace=False)\n", " right_idx = rng.choice(data.shape[0], data.shape[0], replace=False)\n", "\n", " left_data = data[left_idx].clone()\n", " right_data = data[right_idx].clone()\n", " left_labels = labels[left_idx].clone()\n", " right_labels = labels[right_idx].clone()\n", " concat_data = torch.cat([left_data, right_data], data_cat_dim)\n", " concat_labels = torch.stack([left_labels, right_labels], dim=1)\n", " return concat_data, concat_labels" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Data Set Information\n", "Number of data points: 60000\n", "Number of dimensions: 1568\n", "Mean: 0.00, Standard deviation: 1.00\n", "Min: -0.42, Max: 2.82\n", "Number of classes: 10\n", "Class distribution:\n", " [(0, 5923), (1, 6742), (2, 5958), (3, 6131), (4, 5842), (5, 5421), (6, 5918), (7, 6265), (8, 5851), (9, 5949)]\n", "Number of classes: 10\n", "Class distribution:\n", " [(0, 5923), (1, 6742), (2, 5958), (3, 6131), (4, 5842), (5, 5421), (6, 5918), (7, 6265), (8, 5851), (9, 5949)]\n" ] } ], "source": [ "# Specify random state if you want to use the same pairing across runs\n", "random_state = None\n", "concat_data, concat_labels = create_random_pairings(data.reshape(-1, 1, 28, 28), labels, random_state)\n", "# Flatten data for feed forward network\n", "concat_data = concat_data.reshape(-1, 28*56)\n", "# z-transform\n", "mean = concat_data.mean()\n", "std = concat_data.std()\n", "\n", "denormalize = lambda x: denormalize_fn(x, mean=mean, std=std, w=56, h=28)\n", "\n", "concat_data -= mean\n", "concat_data /= std\n", "random_state = np.random.randint(100000)\n", "rng = np.random.default_rng(random_state)\n", "subsample_size = 10000\n", "rand_idx = rng.choice(concat_data.shape[0], subsample_size, replace=False)\n", "\n", "data_eval = concat_data[rand_idx]\n", "labels_eval = concat_labels[rand_idx]\n", "\n", "data_train = np.delete(concat_data, rand_idx, axis=0)\n", "labels_train = np.delete(concat_labels, rand_idx, axis=0)\n", "\n", "\n", "print(\"Data Set Information\")\n", "print(\"Number of data points: \", concat_data.shape[0])\n", "print(\"Number of dimensions: \", concat_data.shape[1])\n", "print(f\"Mean: {concat_data.mean():.2f}, Standard deviation: {concat_data.std():.2f}\")\n", "print(f\"Min: {concat_data.min():.2f}, Max: {concat_data.max():.2f}\")\n", "for labeling in concat_labels.t():\n", " print(\"Number of classes: \", len(set(labeling.tolist())))\n", " print(\"Class distribution:\\n\", sorted(Counter(labeling.tolist()).items()))" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Plot some images to see if everything worked:\n" ] }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjwAAABWCAYAAADL/0yPAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAB1K0lEQVR4nO29d3RU1/W//Uyv6r13CdSQBKKI3iRAYDCYYmNjx4WYFBKnOs35OnGc/JzixE5sJ7aTuIELmN57k0AgkISEGiqo915nNDPvH7xzg0wxSDMSceZZS2vB6GrumTv3nrPP3p+9t8hkMmHDhg0bNmzYsPFVRjzaA7Bhw4YNGzZs2LA2NoPHhg0bNmzYsPGVx2bw2LBhw4YNGza+8tgMHhs2bNiwYcPGVx6bwWPDhg0bNmzY+MpjM3hs2LBhw4YNG195pF/ye9Py5cspLS0dkcH8N7Bs2TKefPJJHnjggdEeyn3Fzp07+ec//8n27dtHeyj3DcHBwXz66adMmTIFvV4/2sO5b3j55ZcxGo38/Oc/H+2h3DfI5XLS09NZsWIF5eXloz2c+4aHHnqIRx99lGXLlo32UO4r9uzZw5tvvsnu3btHeyj3DWFhYXz22WcAotsd82UGDwUFBeTn51tyXP/VjB8/nv7+frKzs0d7KPcV/f39VFZW2q7LDeh0OkwmE9nZ2TaD5wZaW1sxGAy2e+UG5HI5JpOJ/Px8ioqKRns49w2TJk2yzbe3oL+/n4qKCtt1uQGj0filx3ypwWPDhg0bAFqtltDQUORyOe3t7VRVVdHd3T3aw7Jh4ybUajURERFoNBq6urooLi623as2bBoeGzZs3B2RkZG88cYbfPTRR/z85z8nKioKiUQy2sOyYeMmQkNDefPNNzlw4AB/+9vfiIiIGO0h2bgPsHl4bNiwcUdEIhFarZbvfOc7BAcH4+rqiqurK56enrz88sukp6fT19c32sO0YQO4fr9OmTIFjUaDyWTCycmJqVOncvHixdEemo1RZsQMHmdnZ6ZMmcIf//hHSktL2bhxI+Xl5QwMDAz7vVUqFWFhYUyZMoWVK1fi4eGBQqEQft/V1cWOHTuor6+nrq7OJqy9z5BIJCgUCkQiETqdjoGBARQKBXPnzuWJJ54gJCQEkUjElStX2LhxI83NzaM95P8p7OzseP7550lOTsbe3h64Ht5KTExk/fr1XL582WbwAAsXLmTDhg14enpSVFTEli1b2LFjB/8L/QrVajW+vr4sWrSI9evXI5PJbvrc3/72tzl//jwtLS1WG4ebmxsbN27kySefxNnZmTNnzrB161Y2b95stXPeK9/73vfIy8sjLy+PqqqqURtHZGQk8+fPZ+7cuYwdO3bQ706ePMlrr732ldMIjZjBI5FI0Gq1hISE4OLigr29PRKJxGIGT1RUFE888YQQt73R1a7X65FKpfT09NDZ2cnMmTMpKyvj1KlTlJSU0NHRMewx2Lh31Go1fn5+pKamMnbsWMRiMaWlpdTU1BAUFMSUKVOIjo5GIpFQVFREVlYWPT09Qz6fVCrF2dmZdevWERQUhFR6+9u/v7+f2tpaPv30UxoaGujp6cFgMAz53P/NSCQS3N3daW1tpaOjA0dHRxwcHFCr1SQkJBAfH8+FCxdobW212hjUajUzZ86ktraWkpISuru7bylSdHV1JSYmhpUrV/Kvf/2L3Nxcent7rTauG5kzZw7R0dG4u7vj5eWFm5sbu3bt+kreNyKRCH9/fzQaDUlJSYSFheHi4sK4ceMIDQ0V5t8bjZ5vfOMbZGZmkp6ezpkzZ4b1LN8KjUaDj48PQUFBuLm5IRaL6erqoqGhgba2Noueazg4Ozuzdu1ajh07xqeffjoq2qLXX38db29vAgMD8ff3x9XVddDvFQoFdnZ2nD17ltdee80i6/QXiYmJYc2aNTed20xFRQUFBQXCPXT58mVqa2vp6uoa8jlHxOARiUQ4OTnh4+Mj/FsmkyES3TZ77J6QSCRoNBqCgoJuMnYAZDIZkZGRwHUl96RJkygqKsLNzY2jR4+Sn59Pc3PziGTSiEQiZDIZGo2GkJAQnJ2dhetgMBhoa2sjMzPzvtsVikQinJ2dUavVeHh4oFQq6erqIisra8jv5+bmxrRp03jssccEPUhxcTFVVVUEBwfj7+9PZ2cneXl5HD16lIMHDw5r8ZLJZHh5efHQQw8RFxeHTCa77bF9fX1UVVVhMBi4cOECNTU1NDQ0WHV3asbT05OgoCDs7Oxobm6moaGB1tZWent7R2Xx1Ov15OXl0d7ejkgkIjY2lgkTJqDRaPD29iY1NZWWlhays7OtMjHC9cVs2bJlNDY2sm/fPvLz82/6Lvz8/IiPj2f27NnEx8ezefNmxGLryxRFIhF2dnbExsZib2+PQqHA09Nz0LP9VUImk+Hm5sbixYtxdnZm3rx5hIWFoVAocHBwALjl/DVnzhxCQ0PRarWUlZVx9epVi41JpVIRHh7O3LlzCQoKQiQSce3aNYqKiqiurrbYeSyByWRi0qRJ6PV6MjMzycnJGdHzi0Qivva1r6HRaG76XUtLCxqNBj8/P9zd3YmIiODjjz+moaHBYs+2RCLBw8ODFStW8LWvfQ0PD4+bxmcymSgtLSUnJ0e4l9LS0jh27Bh5eXnodLohnXtEDB6pVMrYsWOZM2eOVd6/r6+PsrIyzp07R0JCwqBw1o1IJBKkUikymYxx48YRERFBSEgIu3fv5sSJE1Z/MCQSCWq1GldXVyIiItiwYQMTJkxALBZjNBrp7e0lJyeHNWvWCF+oRCJBLpcjFovp6+sbsQXPvFCYr5darSYpKQk/Pz/mz5+Pp6cn+fn5PPHEE0N6fzs7O6Kjo3nooYeIjo5Gp9Oh0+nw9/cnKCgIo9EoGDuffvophw8f5sqVK8P6TDKZDBcXF+zs7L70WKVSSVhYGL/97W/Zvn07OTk5nDx5kmPHjg1rDF+GSCRi1qxZrF+/njFjxpCens6xY8c4ceIEpaWld9wNikQilEolMpkMvV6PTqezyP3S3d3NW2+9Jfx/1apVaDQa4uPjUalUPPPMM+Tn51NcXGwVb6nZoFiwYAHe3t6Ct/ZGg0ckEpGSksKqVasICQnh+eef58yZM3eVqjpcJBIJYWFheHl53XbuGQ5yuRypVIpEIkEsFiOTyTAYDEgkEgwGAyaTCbFYPOi7Nn9uhUKBwWCgv7+f/v7+Yd8PYrEYFxcX5s6dywsvvICjo+NdC9dVKhURERE0NzeTmZlpUYPH09OTRYsWsXHjRlxcXDAajezYsYMtW7Zw4cIFi53HUsjlciIjI5k5c+aIGzwAPT09SKVSTCaTcE/09PRw4cIFQkJC8PX1Ra1WEx0dzdSpUzl27BgtLS3Dfp7EYjFOTk6kpKTwwx/+UHheTCaT8N4mkwmRSERgYCDBwcHC386YMQOpVEpNTQ319fVDOv+IGDxarZaEhARSUlKs8v6dnZ0cOXKEjIwM3N3dbxuqCA0NJT4+ngkTJpCSkoJSqWTlypUkJiaye/dunnvuOauMz0xISAjJycmkpqYyb9484PpEXVZWRmNjIzqdjsDAQLy9vamurkahUBAaGkpycjIeHh78+9//pqSkxOKu4Fvh5eWFUqlk3LhxTJo0ialTp5KYmGiRrByVSsVjjz3GmjVrmDRpEi0tLezcuZOuri78/Pzw9/eno6ODt956i4sXL1JbW2uRsERHRwfp6ekUFRURGBh4Rw/PjSxdupQJEyZgMpmsbvA4Ozvz2GOPERMTg4ODA0uWLGHJkiV85zvfobm5+Y4Gj1ar5amnnmLBggUcOXKEw4cPc+nSpWGPyWQyDbr+H330EXl5efz9739n3LhxKBQK1Gq1VRZ7AAcHB0JCQpDL5RgMBs6ePUtZWdmgYxwdHZk9e7ZwP41kmFoikRAdHY2vr69VrsGyZcuIj4/H29sbX19fZsyYQXFxMUFBQZSXl9Pb24u7u/sgA6KpqUn424KCAnbu3MnmzZu5fPnysMbi5+fHwoUL+c1vfiPoue6VqKgovva1r/HJJ58Mayw3EhYWRlhYGFqtFrgeDtm6dSu5ubkjYvQOBTs7u5u8GyOByWTiz3/+M5MmTaK5uZmKigr6+/v57W9/C1zX9qxbt44f//jHiMViPvnkEzZs2MC+ffuoqKgY1rmDgoJITU3l5ZdfHvSs9PT0UFNTA1x3YKjVapycnHB2dhaOcXZ2xs3NDXt7+/vb4Onv76ehoYHKykr8/f2tdp6urq47GgPl5eWcOHECjUbDT37yEx5//HHs7OxQKBQ4OjpabVwAycnJ/OxnP2PMmDFotVqMRiPFxcW88847nDp1iurqaoxGIx4eHtTX1xMZGcnSpUtJSUlh7NixSCQSUlNT+frXv86JEycsPr7g4GC8vLwIDg4mNTWVcePGCe55mUyGXC5HIpFw7do1ysrKyMnJ4dSpU0M614wZM1i8eDETJkygu7ubf//73/z+979Hp9MhFouRSCSYTCZ6enrQ6/UW9Wr19fXx7W9/m5dffpndu3dz+fJl3NzcePHFF/H09BRCEGKxGJVKhZeX14iEJWQyGT4+Prz55ptMmjQJrVYrnPduwpsBAQGsWLGCn/3sZygUChITE1Gr1RYxeL7IwMAA7e3tFBcXExsbK3hXmpqa+OCDDyx6rsDAQJYvX853v/tdXFxcKC8vp6ysjPb29kHHrVmzhsjISBQKBT09PRQUFIzoQmf+rqxxrzg5ObFgwQJBGyMSiQgJCUEsFhMcHCzsiF1cXIR75cbPHhoayrx58zh58uSwDZ7Vq1fz/PPPC4bFFz+vyWQiIyOD0tJSent7cXJyYuLEiXh7ewvH2tnZERkZyRNPPMEHH3ww7Oc7MDCQp59+mvnz5wserW9+85tcvnx5xPRb/2289tpryGQyjEaj4CU0U1RUxNtvv01FRQV/+9vfhDB2Tk7OsA2e6OhoHnvsMZRKJXDdMD1z5gzHjh3jzJkzAPT29qLVanF1dSU8PJwVK1Ywb948SktLKSwsFAyjoTAiBs+0adOYNGkSLi4uGAwG/vnPf1JdXT3kONztuNE9dyvMrt3e3l62bdvGokWLUCqViEQiq8X6ze74559/ntjYWKRSKU1NTeTm5vKXv/yFoqIiGhsbBUOts7OT/v5+nJycGDNmDCEhIfT09ODg4IC/vz9qtXpY41EoFEJGlMFgwN3dndTUVBITE/Hy8sLBwQFfX1+cnJwwGAzo9XpaW1upqqoiOzubo0eP0tTURHNzM42Njfd8fqVSycKFCwkNDaWnp4fs7Gw2b95sEXfp3WAymairq+Mvf/kLlZWVtLW1UV1dzS9/+UtUKpVwnEKhwM/Pj40bNxIYGGj1cSmVSsaPH098fPxNxk53dzdtbW231ZjFxcWRkpLCypUrhV23QqEY9HksTXNzM9u3bychIQE/Pz+0Wu1dhQrvBY1Gw9y5c5k/fz4eHh6IRCK2bNlCU1PTTUbg1KlT8fDwoLa2ltOnTw95BziUMY4dO5YNGzagVquF762/v5+ioiKLaPEOHz5Md3c3MTExjBkzhrFjx1JYWMjBgwfvqD20s7NjwoQJPPPMM4IHJDMzc0jPrRm9Xk9/f/9N3p22tjYKCgrYvHmz4LHW6/X4+fkBDGoNYQ7LDXcuM5OamkpERARarZb+/n6uXLnC1atX6e3tve+0kHB9TTD/jBZ3Ev4ODAxQXV3NmTNnyMvLY+zYschkMot49836VfNnT09PZ+fOnaSnp9PQ0ABcX6elUim1tbUYDAYCAgIQiUSCJGU44xgRgycgIAA/Pz80Gg16vZ4DBw7Q2to6aq5Go9FIQUEB3d3dVtXEyOVy3N3dmTVrFlOnTkUikVBQUEBGRgbHjh3j4MGDN/2NeUfS1tZGUVERcrmchoYGVq1ahYODw7AMM6VSyaxZs/Dx8UEmk9HT00NAQAALFiwgPDwcmUxGd3c33d3d5Ofn09jYSFtbG83NzVRXV3P58mUuXLhAX1/fkCYSc1w2MTERNzc3amtrOXnyJHl5eWg0Guzt7XFwcMDJyQl7e3tqamooLy+nq6vLot/TwMAAmZmZwv91Oh0nT54cdIxZBPnYY48REBBgsXPfCq1WS1hYGAsWLMDJyQmxWCxcX71ez5kzZygpKbntbjUxMZHU1FRBmD8S9Pb2UlBQIAgZ9Xq9xUX/48ePZ/bs2cTExDAwMEBOTg779u0blHEjEonw9PRk7Nix2NvbU1RURHFx8YilyTs6OjJ58mQSExOF+cwseN++fbtFFtySkhLa2tq4cuUK4eHhREREUFxczJEjR2hubr6tmNTR0ZH29naeeeYZlEolKpVq2CG3qqoqcnNzmTlzplBGQq/XU1ZWxpEjR/jss8/o7OwU5oj6+nqCgoJu6oVl1ptZgrlz5+Lp6YlYLKajo4Nt27bR3Nz8pXOGWCxGo9HQ2dlpkXHcDRKJBDs7uztmiN4P9PX1UVdXR25uLhERETg7O99S5Hyv9Pf3D3p+FQoFvb29tLS0DHKAqFQq3NzcCAsLw8fHB8AiusQRu+o3ulrLyspGvbeQVCq1qpVtzkKaPn06//d//0d/fz9dXV0cPXqUjz/+mLS0tDv+fX5+Pp2dnWi1WvR6PQ899BBGo3HIE6hYLCY0NJTvfe97REdHI5fL6erqwtPTk97eXnQ6HVevXqWoqIi6ujr27dtHeXn5sNMAvziGpKQkQkNDsbOzIzMzUwgxjh07lrCwMMLDwwXP1okTJ9i2bRvFxcW0tLRYdRETi8VCKqZEIhEeOLlcLvxepVJhZ2dnsQlSrVYjFouJiIhg4cKFrFq1SjBozYtJfX09f//737l06dJNz4xKpRLSgpOSkoR7w2Aw0N7ebrHv7VZIpVIcHBzw9vYWFjbzDs1S779mzRqmTZuGh4cHdXV1/OMf/yA9PX3QAm/Wz3h7e6NQKNDr9SOa5uvi4sKUKVMGPZvNzc1kZGTw17/+1WKbuubmZpqbm++peN7AwAAtLS2YTCba29tpa2sb9rXJzc3l4MGDREZGIpfLqa+vp62tjYyMDPbs2XPTPdDW1nbL0LdEIsHJyWnY869EIiEmJgZHR0eMRiPNzc28++67X5qGbjZ2xo4dS1lZGV1dXRiNRoxGo9XWJrORFxAQgEKhoL+/f0T0mENFp9NRWFiIyWQiPDzcInqjxsZG8vLyiImJQaVSMX36dKF/3I095AICApg3bx7Lli1Do9FgNBqFTNnh3MMjambeL+5FqVTK0qVLhUnSZDJZfGxarZbZs2fzwx/+EH9/f3bs2MHbb7/NpUuX7sql3N/fT0lJCW5ubsydOxcnJyf6+/uHNIGKxWIcHR35xz/+QWxsLAUFBbS0tBAWFkZxcTH79u0T0iOLi4utlloskUhITk4WQi3m+i6//OUvWblyJa6uroOExLGxsaxZs4bt27ezdetWDh06ZJVxma/P9OnT+fa3v42Pjw9isRi1Wi1oeNzc3Jg3bx6tra289tprFjG+HnjgAdzc3Jg9ezYPPPDAoPGYTCbKy8t599132bVr1y3HvGjRItatW0diYqKQ6QfXU0tffPFF9u/fP+wx3gqZTEZ4eDgvvfQSGo2G4uJidu7caTFBt9k4X7JkCZ6enrS3t3P58mW2bNlyy3tTqVQilUrvyvtpzmCzJuZnarQLZGo0GhITExGJRNTX11NdXT3sWknmEh51dXXY29tz7tw5rl69es91bmQymVBQdKiIxWL8/f25ePEiWq0WtVothNK+DCcnJxISEnjuuecwGAy8//77NDQ00NTURF5e3pDHdCfMpT1mzJiBvb09e/fuveWzfT8SHR0teFqGw7lz56iqqsLOzo7ly5fj4uLC7NmzaWxspLS0lIGBAaRSKUuWLGHlypWMGzcOgPr6eg4ePEhJScmwzj8iBs+cOXOIi4ujp6eHixcvUlJSMuoeHrOOBaCmpuamkMZwcHZ25kc/+hFLlizB29ubI0eO8PTTTw8phObq6srcuXMB2Lp165BS580p3h0dHfT393PixAk+/PBDIavDLAw2GAwjGmYMDg7mySefZPr06bety+Ti4sLatWsJCwvD2dnZopkdZpydnXnhhRd47LHHUKlUiMXim7x/UqmU2NhYvLy8cHR05PTp0zQ3N1NeXj5kvchvf/tbXFxchPRQM2ZvgZeXF0888QQzZ87krbfeYuHChUJ4TSQSMXHiRLRarSA+NL9HRkYG586dG7bA8IsoFApWrlzJqlWrmDlzJkqlkoGBAX70ox9x9uxZi2RGyeVyAgMDSU9PF8T9ubm5vP/++7f0rIlEokHaGalUilarxd3dHYDZs2cTGBiIvb09crmctWvXEhsbK2QxDQd/f3+mTp16U/ZpeXk5p0+fHvb7DxelUjkorddSNDY28vHHHws6wLuZ08w6SfPmsq+vj7Nnzw5rvpHL5axcuZJ58+Zhb2/Prl27ePnll7/UqFMqlcyZM4eNGzeSmJgIwMyZMxkYGKChoYG0tDR+9rOfUVdXZ9GNsFgsxt7eXrhXOzo6RkxrNhScnJz40Y9+hFQqJTs7m8rKymG/p8lkoqmpib/85S/MmjULZ2dnEhMTCQ4OZs6cOaxfv55NmzYRGxsrJBINDAzwk5/8hP379w+7DprVDZ6QkBC8vLzQaDS0tLSQlZU16mIyqVTK2rVr0Wg0NDY2kpubS3p6usXe/+mnn2bevHl4eHhQWVnJW2+9RWdn5z0/3LGxsSxevJh58+YJ1+6L2Sl3i3miMRd10ul0Ixq7vhWurq6MHz8euVxOSUkJb775JmVlZcJ1srOz44c//CHBwcGMGzeOZ555hoyMDMrLyy16/3R1dfHJJ5/w9NNP3zZVXSQSIZVKcXV1Zc2aNaSkpFBdXc3u3bs5dOjQTWnSd4NKpbqjsFilUuHv74+HhwfV1dVMnToVLy8v4bPb29sjFosHeTZMJhP//ve/qaioGPY1MhcJDQ0NJSIiAoPBwLp164iOjqahoYEtW7bQ3NzMhQsXLFbJ1sPDg4cffhg7OztEIhGlpaWkpaVx9OjRm451dXVl3rx5PPvss4IANiQkREjNh+sGs1qtRiqVYjAYyMrKsogHc9y4cUyfPp158+YJGUtmjEaj1byk94JarRay6IqKiiz2HZlMprvesLq7u/PQQw8J84/5njSZTMO+RiKRCC8vL+RyuZDW/GVzg7e396Aq7ubn3dwKQ6lUotFokMlkZGdn89lnn3Ht2rVhjdOMSqVi7dq1Qpjc29ub6OjoW97bo82ECRNYv369oLMqLCy0mHGm0+nIy8vjpz/9KS+88AJ+fn44OzuTlJTE5s2biY+PR6PRIBaLaWtrY8+ePRw5csQiul+rGzyzZ8/Gw8NDsOzOnDkzqqXWvby8WLt2raA8LykpsZj1KpFISEhIYNGiRQQHB9PZ2UlmZuaQdjJJSUmkpKQIgjyzYHgok5ZIJBLSys2hmi9O0iPFjdfBXFfl0KFDHD16lB07dlBTU4PRaBR27lOmTMHe3h5/f3/Gjh1LZGQkFRUVFr2HpFIpvr6+d+Vel8lkBAQEEBAQgEqlsogO4XaYC1WqVCqSkpLw9/dHq9XeckI318o5f/48mZmZFvG2ODg4EB8fz4oVK/Dw8KCjo4OgoCD6+/vJyclhy5YtdHZ20tTUZLEF3sXFhUWLFgn/NxfMU6vVpKSkDDJI3d3dSU5OHlQ1287ODjs7O8LCwgBob2+ntbWVxsZGrl27xo4dOywSjgwNDWXy5MmMGzdO0AMCFBQUcPXq1VFpF3AjSqUSNzc3goKCgOtl+S3h1boXxGIxDg4OxMTEAJaXNEilUiZMmIBMJqOoqIiysrI73vdSqZTU1FRiY2OZOHEiGo2Gjo4OQSwrl8tRKpV4enoyb9482tvbLSashuvPs7mcgFlsHxERcd8ZPBMnTmTZsmXMnz8fk8lETU0Nx48fH3Y4yYzRaKSjo4ODBw8yZ84cZs6cibe3Ny4uLsyaNUs4rr6+ngsXLrB582aLedusavCo1WqWLFmCu7s7vb29VFZWCrn2o4G54vMrr7wiiNOysrK4dOmSRQSeMpmMtWvXkpCQAFy3io8ePXpPlrFZzPfYY4+RnJyMj48PLS0tnDt3bsjjNLezMBfwc3FxEepijKSnzWQy0dDQgF6vx2g0otPpqKqq4m9/+xv79u27yYjR6XQcPHiQsLAw3N3dUavVTJ8+nRMnTtDd3W2xsWu1Wh566CGhcWlnZyednZ3o9fqbzmH+frRaLV1dXbS0tAzZ63a3iEQiIiMj72hY9fX1UV5ezj//+U8aGxuHbYCYa6UsWrSIp59+mra2NkpKSqiurqa6upr09PRBmW6Wws7OjsTEROG629nZERoaSkpKCqmpqYMyRcztWW5M4zcnB5i9lyUlJZSUlFBQUMCFCxc4e/asRYxlT09PQkNDhbRrkUjEwMAAJ06cID09fdT787m5uREREYGbmxutra3DTkf/Msyi/xvT1RUKBQEBAXh5eQ061uwBG65gVywWCwZETU0NdXV1t/U8SSQSXF1dhaKearWarq4u8vPzqaurA657DL28vPD29sbNzQ2dTme1EL+5XIk59DoSfPH76e3tpb+/f9A1c3Z2ZuXKlSxfvpzAwECh2OqBAweG5MW+E+3t7Vy6dInw8HC8vb1v+n1JSQmff/65RbWIVjN45HI548ePZ9KkSdjZ2VFRUUFJSQm1tbXWOuWX4u3tTVhYmHATm2PtlirtrVAo+Na3vgXAsWPH2LJlC7t3777rvzeLeNevX8/SpUtxc3OjqqqKnTt38utf/3rIu0aj0Uh7ezvf+c53eOONNwgLC2PevHkcOnTIqpk8X2RgYIC3336bGTNmEBgYSGVlJTt37rzjNdq1axcBAQHY29szadIkvv/977Np0yaKiooslrVlDvFdunQJkUjE9u3b2bZtG+Xl5Tcd6+zszNe//nUWLVokhAiH6uEx6x++aFTdqHW4EXPRuVuNv6ysjH/84x989NFHQxrLF5k/fz5PPfUUSUlJwPXNwqVLl9i8eTO5ublWbRRqfj7NDSofeeQRHnnkkUHH3CpEYq5avmfPHrZv3w5AaWkpra2t9Pf3W2x85kbIN3YENxqNNDQ0cOLECXJzcy12rqESHx/Pgw8+iNFoZMuWLZw7d85qfeDMov8xY8awevVq4Pp35+DgQFBQEPHx8YOO7+/vp76+nszMzGEZFH19ffzqV7/iN7/5DVFRUYwdOxa1Wn3TPCmRSHBwcGDhwoXExsYil8tpbm4mNzeXV155hSNHjmAymYiKimLu3Lk8+uijJCQkMH78eKsVpDUajTQ1NVnciLiRL9b7iYyMHFQe4NKlS+Tk5AwK2X3ta19j4cKFQnufgYEBnnnmGYtnyEokEmbNmsXKlSsZM2bMTXOduReapbVwVjF4zFVjf/rTnwq1Y/Lz8zlw4IA1TndXjBkzhoULFw7Khvn000/Jysqyym6sqamJ2trau14YJBIJnp6ePP744/zwhz9EJpNx7tw5duzYwXvvvWcRd3RbWxt///vf+f73v8+KFSvw9fXlueeeo7y8fMSK/l25coXFixcTGBhIX1/fXRmbR44cwdPTk0mTJiESiZg3bx4NDQ3Czmy41NfX88QTTwiTw52EmC0tLfz+97/nzTff5IUXXiA0NJTp06ezbdu2ez5vSEjILV+/XYXlb33rWzz00ENMmDBh0OvNzc3k5ORY5PkSiUSMGTOGRYsWERkZKaThv/vuu/z6178W0netRVlZGb/85S958cUX73hcRUUFZ8+eZdeuXfzgBz8gKipKqCN17do1zp49C2CVsfr4+PDII48wZsyYQa+bK3db0xi8W1xcXPD398dgMFBUVGTVJJF33nmHVatWCTo3uHXFabMhb8nCe+ZCdF5eXoIW5IsGj6OjI7NmzeKNN94QtDnvvfceb731FgMDA0IvsoSEBBYvXiwYaPv377doqYUbaWlpIS0tjT179ljl/X19fXnyySeZMmUKkyZNQqFQCFXszZjT8G+cZ6RSKVKplPr6eo4fP86TTz5pUWPH7LFdu3YtX//614Vx6fV6mpubKSwsJCkpCblczsKFC4X2OpbCKgaP2R0+ceJEpFIp3d3dXL161Spl7u8GmUzG0qVLSU1NFeLJcL0pYmhoKFKplLKyMovG3dvb2+/KkFIoFMTFxTF16lSmT59OXFycsMAcO3aMK1euWDS9tbCwkIqKCiZOnDjI2zVSmMNa7e3tdy3ubGhooLS0lKqqKnx8fEhISGD37t3U19cPK6wVEhLC+PHjCQ4O5p133rlro3JgYICOjg5OnjwppLAPhXuZSFatWsXixYtvuRvasmULH3zwgUWysmQyGf/3f/9HUlIS9vb2ZGdn88knn/Dxxx9b3diB69/1e++9x8WLF++4IHZ0dNDU1ERnZyff+MY3Bnl6zBO5NRCJRIJ+y/y9mz2oBw4csNoCeS84OzsL3dp7e3s5e/asxXfoZsPYrKH6otblVuFys0dOLpcTHBzMn//8Z44cOcKRI0coKiq6Zw+UTqdjy5YtLFy4kIkTJ5KUlMSLL77I7t27OXz4sHC/9vf3U1NTQ0tLC+7u7lRXV1NTUyNod8RiMampqSxbtkzomdfY2GhVLVZ/fz99fX0WN0TDw8NZtWoVy5Ytw8PDQ9C0me/V/v5+8vLyGDdu3B17CZpMJjQaDQ8//DDvvfeeRcLATk5OzJ8/nyeffFKowwPXNy8ZGRns2LGDvLw8PvjgA0JCQlCpVIN6aVkCqxg8rq6uJCUl4eDgAMCVK1fIy8uzagz5iyiVSpycnFAqlcTGxjJnzhzGjBkzqPz97NmzSUhIoL6+npKSEqEXV05ODlVVVcPy/NxpITa7xMPCwpg0aRJxcXFERUXh6+tLXV0de/fuZffu3RQXFw9LH2JWuuv1emHCa21t5dy5cwQHBzN+/HgSExOFPl4jxcDAwD1pTDo7OykuLubkyZM89NBDJCQkkJiYSHd395A73NvZ2TF79mySk5NxdXVl7969NDc337UBpVAo8Pb2pqen55ahL0shEomwt7dn9uzZgl7lxjGWlZWRmZlJXl7esMM2UqkUDw8Pxo8fj5ubG42NjVy5coULFy7Q39+Pm5vbPb1fe3s7/f3992SU6nS6u6oXY76HlErlsApy3isikYg5c+YMEv0bDAby8/PJzc0d9cxHuO6B8vHxQSqVCm0WLLmwikQiVCoVS5cuZeHChfj6+t50zO2E9fCfon/jx48XWuYcPnyYc+fOUV9ff9f3sblNjEwmQywW4+XlxezZs3F1dSU4OJjt27fT0NCAUqlEq9UKRlltbS1tbW1oNBrUajVTp05l9erVJCQkoFKpqKur49VXXyU7O9tiBo9MJsPJyQl3d3dEIpFwbku0a7iRFStWsHz5cuLj4zEajVRUVLB//36qqqoG6R5zcnJITU297TOt1WoZM2YMa9eu5dSpU1y7dm1YraC0Wi0LFixg2bJlJCYmCqHCq1evsm/fPg4ePMilS5doaGjg+PHjODg44OHhYfHrY3GDR6FQ4O/vz8yZM4XXrly5QmlpqcV7Z90KiUSCi4sLAQEBhIeH4+DgwNy5c4mPj7/JWpw/fz5wfUFtbGykr6+P9vZ2du/ezYULFygsLKSqquqezm8wGBCLxXh6ehIZGUlnZyft7e3IZDL6+/uRSqXY29vj6+tLUlISS5cuxdHRkf7+fq5du8aePXt49913aWlpGbZVba5A2tTURGZmJiaTif7+fs6dO4efnx9JSUksXryY06dPW0Toai3MVaD3799PSkoK4eHhJCcnU1dXR01NzZAWO6VSSWhoKLGxsTg4ODBp0iTy8vLu+pp7eXkxdepULly4YDVthEKhwNXVldjYWBITE4UNBPynx1ZGRgbFxcUWWWgVCgXBwcFCe4uenh4MBgOenp54enre8/ulpaVRW1t7z4aY+bMNBb1ebzVdmln4umDBgkEbJ4PBQElJCXV1dSMyx30Z8fHxhIeHMzAwwPnz52/Ze2w4SKVS3N3dWbFiBVFRUUKa9b1gNnrGjRsn3HMqlYpTp07ds67F3Jja09MTb29v/Pz8iI2Npb+/n7KyMkHc7ODgIGSs+vv7C9XCH3vsMaZPn45SqaSuro5jx47x6quv3vNnuhMKhQJ3d3cCAwOF7DVLt5gIDw/noYceIj4+ns7OTnJzc8nKymL37t3k5eXR19eHl5cXkydPpq6ujhkzZuDm5iY0966trRXuE7lcjlwuR61W4+zsPOzelwEBATz44IPMnTsXBwcHDAYD1dXVHDhwgE8++WRQWZiMjAymT59ulU7yFjd4/Pz8mDBhApMnTxZeM/dbsTZSqRRHR0cefvhhIRZ7o+jsxof+xn9rNJpBDc3Gjx/P1atX2b17Nz/96U/v+vwmk4nm5mZcXV1ZsmQJS5Ysoauri/379+Pt7U1JSQmurq6EhYURGhrKwMAA/f39XLp0iQMHDrBz506LVvn8+c9/zvTp0zl//jzLli0TLPyamhqKi4vp6ekhNTWVHTt2cOLECatWhjVnigG37ND7ZdTW1nL06FEqKytxdHRk4cKFQsf2oTyIjY2NHD58GE9PTx555BFefPFFPvrooy/NHBGLxUilUmbOnElSUhJqtVro4G1pfH19efjhh9mwYQOurq6Ddjsmk4msrCx27txJaWmpRc6n0WiIjY0VXOAhISGEhITw6KOP3vL4W3XmNr9uMBh4+umnOXz4sFU9uzfqQcwtLrKysqxyLjs7O5YuXUpCQsKg78JajYeHgkgk4mtf+xozZsygrKyMrKwsq1SRj4+PJy4u7p50ODeO48bu8uaqu9HR0SgUCt5+++17Gs+jjz5KcnIyDz30EEuXLsXFxQVfX19effVVRCKRkGFoZt26daxbt+6m92lpaeHQoUM8/fTT93T+u0Eul+Pq6jooq8/S/OUvfxF0gbm5ucyePRuj0ciUKVMIDw8nNjaWlStXMnHiRCH0a95ov/POO/z+978X3svDwwN/f3/Onz9vkbHNnz+fyMhIHB0dMRgMdHR08Mc//pHNmzfftO5oNBqr9Rqz+LtOnTqVefPmWfpt74jZq/Pyyy8THBzMmDFjbumq6+npua22RiQSCd4pmUxGcHAw0dHR9zSO7u5uVqxYwbvvviv0S9FoNCxfvhyxWCwYgXq9nqqqKt59911OnDhBXl6e0PPGkuTl5REaGkpiYiKnTp3iqaeeorq6mra2NkpLS0lPT2fp0qU3NW6zNCqVioSEBP70pz8B18WA+/bto7S0FKlUSltb2z2nqDo7OwvF6YaCu7s78+bNY/LkycKk+8wzz7Bp06bbLtCenp4kJCSwbNkyli5dSn19PWlpaVbRpmk0GsaMGcOKFStueS+bsycqKios8t2p1WoiIiLYsGHDPV3Turo60tLShJCpuZ/Rxx9/TElJiVVDPCqVSui/JpFI6OzspLy8nCtXrljlfC4uLmzcuPEmfcpoNUG+FWFhYahUKkwmE62trVYTxcKdF+1bZRoWFRXh4OCAg4MDKpVqkHDZLGYeKocOHeLSpUvs3buXf/zjH9jb2wuLpoODAwkJCV/6/ocPH+bzzz8f8hjuhE6no7m5mcrKSqFFgyXne5FIRFJSkuB5nDx5Mu3t7Zw+fZrJkycL4TyzcX7mzBkyMzPZuXMnJ0+evOkerq+vt2gV6MjISCElvqOjg02bNvH3v//9lo6QRx55BH9/f4ud+0YsavCYJ+mIiAhLvu2XEhgYyIsvvkhKSgoKhQK5XD7oQero6ODs2bOcPHmS8+fP37JypkQiwdHRkZkzZyIWizEYDPdcYdNcyfWRRx4hIiKC4OBgob6ASCSitraW4uJiKisr6e/vp6Kigp6eniF3H/8y/v3vf2MymVi/fj3h4eF88skntLS0sH//fpqbm4WHYMGCBVRUVFhlcQoJCWHp0qWsXLmSqKgo4Lp7c/HixXR2diKRSOjr6yM7O5ucnByhInVPTw+HDh0iLi4OT09PwsLCmDp1KsHBwYjFYqqrq2lubh7yYtPe3k5WVhZhYWEEBASgVCr51re+RWpqKnv27OHw4cOCPmj9+vXExMTg6ekpZL90dXXxm9/8hrS0NItli5nx9PQkJiaGefPmER4eLkxSZj1WeXk5r776qsWMHbhek6O4uJg33niDP/3pTzctDiaTib1799La2kpfXx/19fUcOnSI3t5eGhsbhVCg2bvT3t5u1TomcF0X4ezsLITgSkpKrJpxaBbb3or7pU/gE088gbe3N1lZWWzdutWqGWN3MlLMxk57ezvnz5/nz3/+M83NzSgUCsaMGcPcuXOZOnXqoPorw7mGJpOJlpYWjhw5wowZMwgPD2fSpElMnz6dmJiYQfVn7vQe1voee3p6KCsr4/Lly3h6enLhwgWys7MtVsPLZDJx6dIlEhIShI2gXC5n8uTJgsC+sLCQvXv3kp2dzalTp+ju7qazs3NECgE3NDQIoW2pVIqbmxvjx48nOzub3t7eQcea57uenh6Le4ctavDI5XKcnJxwcnICrn8JBw4c4MyZM/eshbkXtFotEyZMwNHRcdADaJ5433zzTTIzMykuLqa6uvq2Hh6lUkl7e7uwgxtKYaze3l6uXLlCXV0dOTk5gx60zs5OmpubhQwla8f7Kysr2bdvH1KplGXLlhEYGIi3tzdKpZKOjg5hp9Hb22u1mz4iIoIJEyYQFRWFQqGgsLBQ6GNmb28vCMt9fX0ZP348Op1O0BpNmzaNwMBAnJyccHNzw8/PD41GQ0NDAx9++OGwisjpdDoyMjJwdnbG39+f+Ph4fH19cXFxwd7enokTJ9LR0YHJZGLixIl4enoK3c1bW1t5/fXXSU9Pv2Oxs6ESFBRESkoKc+bMQS6XD8pAunr1Knv27OHAgQMWvX/MHoEDBw7w/e9//5YLWUFBAX19fUJxxqtXrwpu8dHAnAZtrk+kVquFFhPWwGAw0NbWhqurq/BafX09J06cYOfOnaOq3xGLxbi5uTFz5kwcHR3JyMjg/PnzVnmuzXWrdDrdoM3ljbS2tpKfn8+FCxdIS0sjPT0dnU6HWCymsrKS8vJycnJy+Na3viUscK2trTctfveCwWCgs7OTgoICobL2+fPn8fDwuKuKyUVFReTn5w/5/HfC/JyYP19jYyMtLS0WnTteffVVvL29b6upampqorCwkNra2iFrH4dKWloaU6dOxcfHB4VCQUJCAt/73vfIzs6mtLRU2DSNGzdO+AwZGRls3rzZouOwWuFB8y59y5YtgnjRWpi9JQEBAUKZ956eHurq6sjKyuK9996jqqrqjhOSuTR/YWHhsMej0+moq6uz+M7/Xunt7eXixYu0tbUhFotJSkpCo9Hg7OwsZFa0t7cLeh5rUVtby7lz5zAajZw/fx61Wk1fXx8ymUwQGiYlJREWFiZMngaDgalTp6JSqQTBd2trq1BjZcuWLeTn5w95N28ymSgtLSUjI4OoqCihr45cLicxMVFoKngjOp2OxsZGjh07xocffkhzc7NVFhR3d3diYmKIjIwc9HpPTw+5ubns37/fKpqh/v5+iouLKS4utvh7WwPzImJeeK1Nd3c3x48fZ8GCBUIGZHNzM8eOHePo0aOj2hDZbPCYQ1qtra1W22TqdDoaGhrIzc0lJiZGuPbmHlvl5eXk5uZy+vRp0tPTKSgoGOQ9NmdXFhcXExQUJOih6urqLNLiB67XpmpubiY7O9si72dp6urqLC5j2LFjh8Xey9JkZmZy8uRJIfvLrA+cMGECxcXFVFVVMTAwwIwZM/D09GRgYIC8vDyLVlkGCxs8/f39VFZWUlpaioeHB1evXmXv3r00NTVZ1bVdUVHBL37xCzZv3iwILsvKyti7dy/vvfceZWVl943LeSQx73iys7P5/ve/z4wZM/Dz82Py5MmEhoYKx128eNFqWosDBw5w+PBhYVLr7+8fVIBMqVQyduxYNm3ahKOj401iUHMvpfLycs6cOUNtbS3//ve/aWxstMgCU1NTw+nTp1m4cOEd48Z9fX3U1taSkZHBK6+8QmNj44jeUwaDgdLSUi5dumRRYft/M+ZiZQ0NDXh7e1NYWMjVq1et9r00NDTwy1/+Ej8/P4KDg1EoFLS1tdHc3Dzq6egikQitVotCoQCwai2inp4eLl26xGuvvcaLL74oePQNBgMtLS389a9/5bPPPrtjOGJgYIBr166xfv16q4zxfsQcNTCH061ZzuJ+o76+nldffZWysjI2btxIaGiooJkNCAgYdKxOp6O8vFyokm5RbizRfosf09ixY02A7ef//3nyySdNRUVFoz6O++2nqKjI9OSTT476OIbyo1KpTHPmzDH19vaaDAbDLX9efPFF05QpU0z+/v53/b5jx4416XQ6k0wmu6fxLF261HTgwAGTXq836fV6k06nM+Xl5ZkWLlxoUqvVo369hvvz4Ycfmt577z2LvJdSqTT94Q9/MLW3t5v+8Ic/mCZMmDDqn28oP3K53KTX603h4eFD+ns7OzvTr371K1N3d7eptLTU9L3vfc+kUChG/XMN92f9+vWmgoKCUR/H/fZTUlJieuyxx0Z9HPf6I5PJTO7u7qb58+ebjh49ampvb79prn3//fdN06dPN2m12nt675iYGNP/z21tGqt3S7dh436nr6+PtLQ0IiIibivCbG9vp7e3d8RrFRkMBsrKyvjOd75DZmbmsDQOX0X6+/v5zW9+w2uvvUZnZ+eodykfLcRiMc7OzojFYuzt7Xn88ccJDAxk48aNoz00GzYE9Ho9TU1NnDp1ipycHEHPeSNmMbU1NHE2g8fG/zwmk4m+vj6LtGawBJcuXeKPf/wjmzZtwmg00tHRQWZmpiCitvEfzGLr+6F/1Wii0+k4c+YM06ZNw9XVlfr6eovoEW3YsDRGo5G+vj6Ltzu5G2wGjw0b9xkVFRX3jfFl478DnU7HuXPn2LJlC97e3hQUFHDmzJnRHpYNG/cVX2rwuLq6WqXE838r5oJWtmsyGHPLDNt1+Q/m9GUPD49RzeC53zD3v7LdK//BnOnk6uo65Nos3d3dN1Up/m+/xrb59tZIJBKh35SN67i4uHzpMaIvcZGbbC70m7lVJ+D/dWzX5NbYrsvN3FgU1MZ/sN0rt8Z2XW7Gdk1uzf8/t9y2pPaXenimT59OUVGRJcf0X80jjzzCxo0bB/UKswFnz57ltddeY9OmTaM9lPuG8PBwjh07RmBgoM3DcwNvvvkmBoOBb33rW6M9lPsGuVxOeXk506dPH9T36X+ddevW8eyzz5KUlDTaQ7mvOH/+PL///e/59NNPR3so9w2RkZEcP378jsd8qcHT0tJi1eZ//22YS3HbrslgzDV/bNflP5hDWpaqGfRVoa+vz/YMfQFzSMs23w7GNt/eGnMDTtt1+Q8tLS1fesz90+bXhg0bNmzYsGHDSoxKlpadnR329vbo9Xq6u7v/Z2tn2LBhw4Y1kUgkQvV5tVottN1pbm4e7aGNCua+WhKJBIPBQFdXF62trfdVx3sb1mPEDR6JRMLq1av55je/SUFBAdu3b+fTTz+1CbBs3MRoi1tvLIg1UmO4VeHDkf78o33d74X/prGONDKZDHd3d5544gkcHR1ZuHAhWq2W3bt3/0/qp2QyGe+88w5JSUk4OTnR2trK5s2b+dWvfmW1vng27i9G1OCxs7MjKSmJP/7xj6jVary9vYmKiuLxxx8nNzeXX/ziF6PWednG/YFSqSQsLIwnn3ySlJQUGhoaKCkpEXZh7e3tfPjhh9TW1lqtO7WbmxszZszgZz/7GSEhITQ3N/Pss89y8OBBq5xPLpfj7e3N8uXLee6559BqtUIWRl9fH9u2beN3v/sddXV1VvvMGo2GoKAgli9fzrJlyxCJROzdu5cDBw5w8eJF4HqtF71eP+rGhUQiYfLkyaxYsYInn3wSgO3bt1NVVUV2djanTp0a9ca9o41GoyE+Pp4//OEPxMTECJ3l9Xr9/1zChVqtJjw8nPfff5/Q0FDkcjkmkwl7e3seffRRMjIy2LFjx5DLAdj472FEDB5HR0eioqKYOnUqc+fORaPRIBKJUKlUeHh44OrqSnR0NAqFgtdee23YWQrf/OY3mTt3Lvb29gAUFRWRnp5OW1sbcL3S46lTp+js7ByxydvBwYF58+YRGBiIh4cHbm5ufPjhh5w6dcpqi9h/E/7+/syePZvo6GgiIiKIi4vDxcUFLy8vwsLCGBgYwGQyYTAYmDJlCj//+c/Jy8uzqBhYrVYzdepUFi1axKRJkzAYDLzxxhvMmDGDoKAgwsLCqKystHiF0ICAABYsWMCzzz6Lu7v7oAaqGo2GJUuW4OjoyMGDB0lPT7dKBd1x48axcuVKHnjgAdzd3YHrGYnJycnCc1JcXExRUREZGRlkZWXR1dVl8XHcDrFYjIODA8uWLSMhIYGoqChCQ0Oxs7MDICUlhb6+Ph544AGKiop4/vnnKSkpGXHjTK1WM2vWLJKTk7l69Sp/+9vfRnwMM2fOJDk5mdmzZxMZGTmofL/RaESr1RIaGjoq12ekcXBwYOLEiXz7298mODgYuVxOTU0NBQUF5ObmUlNTw+HDh7/ysoro6Gj8/PyEe+HrX/86EomEwsJCzp49y5kzZygrKxvtYVodqxs8M2bMYNy4ccTGxhIdHU14eDgGg4H09HTKy8vR6/X4+fkxf/58xo8fL0xgwyE0NJRp06YJhYjCwsIICgoSJmij0UhQUBCZmZlUVFTQ0tJitR5FIpEItVrNqlWrSElJwcfHBycnJxwdHdHpdKjValpaWmhvb6epqYn6+vqv/CR0I2KxGDc3N1JTU1mwYAHBwcE4OTnh5OSEXC5HIpEIHamNRiMJCQm4uroSEhIifHeWwtXVlQceeIDIyEiampo4duwYJ0+epKmpicjISLy9vblw4QK7d++26HckkUgED0tnZyctLS1cu3aNpqYmpFIp4eHhTJ06FZVKRU9Pj1UMHq1Wi4+Pz6DOxX5+fvj5+QHXQ0ahoaHExsYSGRlJTk4O+fn5FBUVUVVVZdVwgL29PUFBQUyfPp0lS5YQFhaGq6srGo1GOMZspAF4enqyatUq3njjDTo6OkZMn+Hr68vkyZNJTU1l6tSp5OTk8MYbb4zo8xwXF8eDDz7InDlziIiIQCq9PsU3NDQI3dSdnJxYt24dL7300pA2W3Z2dkRHRw96zd3dndDQUEwmE+fOnRt0zU0mE1VVVdTW1o5Y2EgkEuHo6MjUqVNZsmQJSUlJKJVKGhsb2bt3L+np6RQVFdHS0kJNTY3Fzmtvb4+Xl9dNHcClUilarRZfX1/htdbWVhoaGtDpdNTU1FBUVGSxDZzZo+fj48OUKVNISEjAx8dHMHjmzJmDWCwmNDSUgIAAQkJCSE9P58yZM/T09Hxl1yCrGTwSiYSAgAAef/xxZs+ejbe3N2KxmPb2dnJzc3n//fe5ePEiMpmMefPmMX/+fGQyGWLx8BLHtFotcrl8kBbC19d30I1mMpmYOHEiu3fvJi0tjaysLIqLi63SGFKlUhETE8O3vvUtwsLCUCgUws304IMP4unpSX19PVVVVRQWFpKWlkZNTc2IxpPlcjlSqVS4ZiKRCH9/f9rb261qDJrPPXHiRB555BEiIiJob2+nrKyMa9eu4enpSWdnJxcvXqSsrAylUklCQgIajQYnJydUKpXFxiGTyYiLi2PmzJmUlpbyySefsG3bNvr6+mhsbOStt95i3LhxhIaGsm/fPoveK319fTQ3N1NXV0d+fj7FxcWkp6dz9epVFAoFycnJPPPMM0ydOpXc3Fw+//xzi9+r7e3tVFZW0tbWhkKhEF4XiURIJBJkMhk+Pj74+PiQkJBAU1MTaWlpHDx4kG3bttHW1maVe1aj0RAWFkZKSgqPP/44wcHBiMViTCYTRqNROKdEIkEkEiESibC3t+drX/sax48fJysri56eHouPy4xcLsfe3h6NRsOsWbNYvXo1sbGxwrjlcvmI9QySyWQ88MADLF68mICAAEwmE52dnTQ1NZGdnU1YWBiBgYE4OTnx9a9/nbfffpva2tp7upc0Gg1jxozhscceG/R6REQEc+bMwWQy8c477wx6T4PBwKVLl8jKykKv19Pb20tra6tVhdNqtZrExERWr15NcnIy9vb29PT0cPbsWTZt2sSFCxescl94e3szZ84c5s6dO+h1pVKJu7s7cXFxwjxbXl5OUVER3d3dXLp0iZ07d1JeXm4Rz6lYLMbOzk7wHAcEBKBSqRCLxUJY2mQy4efnh5eXF4mJicTGxlJYWEh1dfWIN0m+3WcwP183IpFIUCgUSKVSOjs7aW1tvWvD3WoGj729PW+99RYzZ85EKpViNBppampi69atvPTSSzQ2NmIwGBg/fjxRUVHCB5FKpYjF4iHvyiZPnkxwcPCg3d8XMS/o3/jGN1i6dCmff/45r7zyikUtfbg+GQYHB/PGG28In9H8xSgUClxdXVmyZIlgALW1tbF161Z+8pOfWDxzwLwY3IrQ0FDc3NyEhU4mk/Hhhx+yZcsW3nnnHc6dO2excXwRe3t7nnvuOSZOnMi1a9f429/+xrvvvotEImHu3LlcvXqVa9euodVqmT9/PnDdQ1dZWWmxhpESiQRPT09+/etf09vby/bt29myZYuw2+ru7sZgMODo6EhQUBASicSiE4JKpcJgMPDqq6/y8ccf09DQMOj9T5w4wbJly/Dw8MDJyQlPT0+qqqosdn6Aixcv0tHRgZubG2FhYcK9IpfLcXBwwMfHB7FYLBhAHh4egiehurqac+fOWdTbBtfv2YkTJ7J48WJSU1MJDQ0Frm9YBgYG6O3tFcLULi4uQvaNTCYjMDCQDRs28Itf/ILy8nKLjsuMWCzG39+fBx98kOnTpzN9+nSMRiOtra00NTXh4eGBu7s7NTU1Vl9AzAbp8uXL8fT0RCQS0d7ezpkzZ3jttdfIysri4YcfZvXq1UyZMgVnZ2dWrFjBJ598Qm1t7V2fJzExkccee0zQTn0RkUjEM888c8f3yMrK4r333uP111+3ipEsEomIiori9ddfJzQ0FIPBQHd3N5mZmfzwhz+koqLCajKC8PBwli9fzsyZM4WxmDHXKpPL5ej1etzc3PDx8UEikbB48WJmz57N//t//4/Dhw8PexwymQxfX19ef/11QQ84MDBAV1cX1dXVODo64uzsLGx2XV1dWbp0Ka+++irNzc0jGq7+Iua1ys7OjuDgYJYtWya8bjKZcHBwICIiAnd3dw4cOMA///lPrl69elfvbdWQlvkhz8/P58iRI+zbt4+LFy/S0NAAIIiWw8PDATh37hy9vb1IpdIh35AhISG4ubkJhby+DG9vbx544AEUCgUbNmwY0jlvhUKhYNq0aaxfv57Y2Fj0ej0ffvgh/v7+JCQkDNpFV1ZW0tXVhVKp5PHHH8fR0ZHnn3+e8vJyixg9dnZ2TJ8+nQkTJtzS6ElJSSEsLAytVgv8xx16OwPJUsjlcpydnfHy8kIkErF9+3bOnDkjPGzbt2/HZDIRFBTEsmXLeO655wB44403KCoqspjnyc7OjocffhhPT0/+7//+jxMnTtzStXzy5En+8Ic/WFxYX1BQQGFhISKR6I4LgFqtJjAwkJiYGIsbPHq9noKCAp588slB37tarcbDw4OIiAg2bNiAWq0W+qaNHTsWBwcH1q1bR2trK2fPnrXomNRqNc8++yzLli0b5PktLy9n9+7dbN++nbS0NADWr1/PM888I4RaRCIRiYmJeHl5UVdXZ3Evi5OTE5GRkaSkpLBhwwacnJz44x//yNatW2lqaiIuLo733nuPGTNmsHPnTjo6Oix6/hsJCwtj1apVrF+/Hi8vL8RiMXl5eezYsYPf//73dHV1YTKZ6OnpEeZVkUiERqO5Z4/6tWvXyM7OHtZ4Y2Nj+dWvfkVKSgpLly61qPFh3mS+++67Qji2paWFY8eOsW7dOkELaC0uXLjA66+/TnNzMwqFAgcHB8LDw2lvb2fTpk1s3boVd3d3mpqaUKlUBAYGMnHiRJ577jlmzZrFRx99ZJVx1dTUkJ6ezpYtW9i5cyfR0dE88MADLFq0iISEBOG4lJQUmpqaKCgosMo47oYFCxYwe/ZspkyZQkxMDEqlEhhsPJr/7erqyoEDB0bf4Onq6uI3v/kNO3fuJC8vT9Bb3OhGnD59OsuXL2fs2LH09/fzzjvvUFpaOqw4ptk6NBqNNDc3849//IPz588LhoNGoyE6OprnnntOcPG5u7szffp0Vq9ezZYtWyyy6wgNDWXWrFnMnTsXnU7H7373O1paWvD19aWnp4ddu3Zx+PBhNm7ciEQiIS0tjdOnT7N27VrmzJnDhg0b+Pjjj8nMzBzyGBQKBfPmzeORRx4hMDAQf3//m4wYg8GAWq1Gq9Uik8kEK9q8I7Cm/kEmk+Ho6Ii7uztisZjOzs5BC5PRaGTChAmsWbNGELt//vnnbNq0iYaGBotNXCKRCLFYTG1tLRcuXKC6uhq4voMPCgriN7/5DS4uLhw+fJgLFy5Y5Jw3Yr7ed2L37t2sXr2aqKgoFi9ezL59+6wyji96Ijo6Oujt7RXCbWKxGE9PT6ZPn86LL74IXN/Venl5oVKpLBr+nDx5Mp6enkilUgwGAy0tLbzxxhtcunSJgoICqqqqhMWyqKiIzs7OQX/v5+eHnZ2doGOxFO7u7mzYsIGZM2cSEhJCf38/L730Eu+99x719fXo9Xq0Wi0NDQ24urpa/Pw38vDDD/Pggw+SmJiIh4cH2dnZlJWVceTIEQ4cOCAYO/Cf1P3h9GGqrq7m448/5uzZs8TFxXH58uVbGiwPPvggbm5ueHl5sWTJkkG/E4vFaDQaJk+ePGwJw42IRCJcXV35xje+QWBgIDKZjNraWk6cOMGf/vSnEal23tDQwPHjx8nJyRFCMsHBwQBkZ2fT2NhIRUUFAwMDiMViGhsbBf2Z2YNqCcyVmIuKiggODqa1tZXc3FwOHz6MTqcjPz+f2tpaOjo6UCgUQgQiJiYGJycni4zhbvHw8GDcuHEsWLAAb29vYmNjcXR0RKPRCGs0QFpaGr6+vjg5OVFUVMTmzZvJzc3l8uXLd30uqz2JAwMD5OTkUF1dTWNj401CqMTERCZMmEBISAgymYzz589TWlpqMcGUXq+nsbGRzz//fJCnRKFQUFpayoMPPkhQUBBKpRKFQoGvry9r166lqKiIgoKCYU3cEomEGTNmMG3aNEQiEZ9//jk7duxgypQpAJSVlbFp0yYuX75MSEgICxcuRKPRUFtby7/+9S8CAgKYNm0aZWVl1NbW3nOoTa1W4+PjQ1JSEsnJycyaNQutVitkx3V0dNDe3k5HRwdlZWWUlZWRkpJCYGCg4BkzPyDWjLPr9Xra2tpoaGjAzs5OEFXC9Yc/Pj6eVatWMXv2bOzs7Dh16hTvvvsuhYWFFtcViUQilEolcrlceMDEYjHBwcHExcVx5MgRjh8/btWd+hcRi8UolUpCQkIYM2YMKpWKhoaGES0aZzKZ0Ol06HQ6vLy88PPzIyoqiri4OOEYFxcXnJ2dLW7wREdH4+joKHgnTp8+LaSfd3R0DPK09fb2DtqomL9Ps7bHEpjDRg8//DCpqak4Oztz7do19u/fz+7du6msrGRgYACRSCRsFry9va1m8IwfP545c+YwZcoUPDw8EIvF7N69m6ysLPLy8qisrLS4N0On09HQ0EBjYyN1dXVUV1ffcoMYHx8v6ClvRV9fHxcuXLDohsrsAZ03b54QJs7OzubgwYMj5rEYGBigvb1dSHEXiUTU1dUhFosFmYL5vtVqtXh5eTFz5kxEIhGZmZnU19dbZBzmDcKbb77J5MmTUalUdHR0CCHg3t5eTCaTEK43o9ForGqg34i/vz8pKSmEh4cTHBxMdHQ0Dg4OKJVK+vv7qauro6KiggsXLqDX67ly5QoODg6o1WoaGhrIyMigrq7unrRYVvtkZsHcF3ddcN0dvHjxYhITE3FwcKCxsZEdO3YIX4IlMBgMtLe33+R+7ezspKOjg0OHDjFlyhTCw8NxcnJCq9UyZ84ctm/fTmVl5bAmbldXV6ZOnUpYWBglJSW89957XL58mRkzZtDV1UVpaakQNtm3bx+TJk3Czc0NNzc39uzZw8SJE1m1ahUJCQkUFhZSW1t719dFKpUSExPDlClTWLZsGdHR0djZ2dHe3i70XamoqKCiooL6+nqam5upqKggMTFRcAED9Pf309zcbFXBsk6no6WlhdraWoKDg/H29hayb8x6hMWLF6PRaMjNzeWzzz7jwIEDVhuPs7MzUVFRVFdXU1FRgUKhYNy4cfT19XHy5EkyMzNHLHtBLpcLmVMPPvgg06ZNQ6VScfHiRfLy8pBKpVbXhWg0GhwdHXFxcUEqlTJnzhyioqKIjo4mLCxMOE4sFlt0d2p+z7i4OJydndHr9TQ0NLBt2zZycnJGpUCcuWLxuHHjeOKJJ9BqtVy+fJkDBw7wwQcf0NTUJByr0Whwc3NDpVIxZswY7O3tLV7YztvbmyVLlpCYmCh4CBoaGjh48CA5OTlWT7M2mUxUVFQA1zVoGo0GOzs7vL29gesebvNCdiNNTU20tbVRW1vLpk2bLHZNxGIxvr6+JCUlERERAVz3Rp05c4bTp0+PWtq5yWS6pdbQPN6pU6cyf/58ent72bVrl8VSw41GIx0dHXzwwQfk5+cTHx8vSEnMODk54e7ujqOjo/BaQ0ODVUX2Zq+Xu7s7CxcuZMOGDYSEhKBUKtHr9XR2dnL+/Hmam5uprq4mLy+PnTt30t/fT3d397AN5BGvtCyTyZg5cyaPPPIIvr6+tLS0cPLkSf785z+PmDJcp9Px/e9/n4ULF/L8888LnhilUomPj89d639ux7Rp04S47d69ezl06BBwPTyQn59PVVWV4F69cOECx48fJyoqisjISLZt28Ybb7zB2LFjhVTc06dP37VuRK1W8+Mf/5iFCxcKn6O9vZ1jx46RkZEBQHFxMSUlJfT19bFx40YeeeQRwdtlMpkQiUR4e3szd+5cSktL70nUeK+Ya+uYTCZiY2OJioqis7OTxx9/nEcffZSenh4OHTrE1q1b2bZtm9XGoNfrUalUrF69mra2NlpaWnBzc2PJkiWcOnWKK1eujFhhMolEgre3N5GRkcyYMYMf/OAHwHXxtFkQ6+7uLoT1jEajxQ0xkUjE2LFjWbBgAUuXLsXBwYGAgIBBNYLM5y4vL6esrMyinieJRMK0adNwc3OjpaWFS5cu8f7779/131v6umi1WoKCgkhKSsLHx4ft27fz/vvvc+rUqZs2BQEBAcyYMQMvLy9mzZpFYGAgDQ0NFvMOKpVKHnvsMZ555hnc3NwQiUR0dXWxc+fOO3o/b8xqswTmrNoxY8YQExPDpEmT+MY3vnHTcebvQq/Xc+DAAY4dO0Z2drZFw8NKpZIZM2bw3e9+V3htz549HD58+L7sPq/RaEhKSmL16tXY29uTl5fHv/71L4tr89rb2zly5AhXrly56VkIDg5m7Nix+Pv7C6/t37/f4mMwY9aNBQYG8vDDD/P9739fSFDq7u6msbGRtLQ0XnrpJSoqKqxShHhEDR4HBwfmzJnDhx9+iEKh4OLFi3z88ce8+uqro5L3f/r06ZsqskZFRWFnZzfkOLdEIuHb3/42vr6+7N69m7/97W+DzldWVnZTLDkrK0vIUIPrO5M333yTjRs3smjRIk6cOMGxY8fu6vxyuZxly5YNGntvby+XL19m8uTJ+Pn5CVodhUJBeHi4IGYcGBhALpejVqvv+XMPlf7+fo4ePUpSUhKRkZH87ne/E37X3NzMU089xblz56waxmlvb+fNN99Ep9Pxve99j0WLFuHg4MDUqVOxt7fnL3/5C9euXbPa+b/II488wsMPP8zkyZMFITlcnyRXrlzJkiVLqKys5O2336alpYW0tDSKi4stOgZvb2+efPJJVqxYgbOz8y2PMRqNHDp0iL/85S9cunTJoucfGBhg48aNLF26lPr6et5+++17fo9Tp05RWVk57PRjNzc3xo4dy5w5c3jmmWf46KOP+NWvfiVovW7EwcGBadOmsXbtWgDq6uooLy+3mLFjbhXxwgsvCOHfiooKdu7cyc9//vM7ZtecPn0aPz+/m1Kmh4JcLuf5559n0qRJxMfH4+HhcdtjDQYDp0+f5s9//jPp6ek0NjZafL739PQkMDAQT09P4bWoqKg7jms0eeKJJ1i9ejXx8fF0d3fz8ssvWyzr9FbcatNq3pjfSGlp6S2jMpYgMjKSxYsXs2bNGqKiogTd5pkzZzh8+DAnTpwgKyvLqrbAiBk8dnZ2JCQk8Lvf/Q6FQiGEsSxZxE2lUrFkyZKbij7djludd8GCBfztb38bsnhaKpUKWpiOjo5BqboVFRXU1NTcdN7MzExqa2sHuRbT09MZO3YsM2fOZO7cuXdt8AwMDJCRkUF8fLxgQLm6uvLtb38bhUKBTCYDEKzqgwcP8umnn3L58mW8vb1ZuHAhzz777D1/7qHS3d3NRx99REpKCnFxccICr9PpePHFFzl37pxVJwJA0Ijs2LEDe3t7Zs2axQsvvIBaraa5uZnZs2ezb98+q+18vsikSZOErLkbRZ0HDx6kqqoKqVSKi4sLP/jBDzAajZw9e5bt27dbNMNDKpXeVJ/JjF6vp7CwkJdeeomMjAyampos7gY3mUycPHmSixcvCrqIe8FoNPKvf/3LIsXuWlpahGzO5uZmfv3rX9PY2IhUKhWqxa9bt47Lly/T3t6Oh4cHBoMBo9HIhQsXLBYWVqvVREREsH79esF7m5WVxa5du/jXv/71pWGb0NDQQaHIoeDj48Ps2bP5+c9/LpQCUCqVdyU+jo2NJTAwUBDA5+TkDGssNzJx4kTGjRsnbFQzMzP517/+dcuMMq1Wi4eHB35+fgQEBODr60tGRgZXrlyhrq7O6iHTb37zmzzxxBOEhYVRXl7Oq6++yr59+6xaL+pGzHohb29vodCv0WikpKSEtrY2q4m7w8LCSEhIIDw8XLhf0tPT2b59O8ePH7eK5uyLWMzg0Wq1TJs2DUdHRwYGBmhsbOT06dMYDAYUCgWJiYk8/PDDBAYGYjKZ2LJlCydOnLDoIiKRSPD390er1d5VquPAwADXrl2jsrISPz8/Ifc/OjqaioqKe97VSyQSxo0bh1qt5tq1a1RUVAx6ePR6/S1vpo6ODvR6/SDBWnd3N+Xl5cTHxzN79mw8PT1paGj40hhmb28vb775Jt/85jcJDw8XslRcXV2B65a+ubhUe3s7u3btIj8/X6j9Ym3j4kbMVajHjRuHh4eHYIzB9QWvrKzMInHbu8FkMlFXV8f27dtxcHAgMDAQrVZLR0cHa9aswcfHh3PnzglCfGvi7++Po6OjkB11+fJlzp49S25uLu3t7UgkErRaLUlJSTz66KPEx8cLlaEtVUuqpaWF/Px8oqOjiYmJQSwWC55BqVSKnZ0dERERpKen09/fb5XvqLu7+6ZF3NPTk76+vkEp1l/EaDTS2dnJlStXLLKIREVFMX78eIKDgxkYGCA2NhZfX1/8/f3RaDR0d3ej0Wjw8vISMg/NVbGPHj1qMf1IQkICjz76KD4+PohEInJycti6dSsHDhy45Ubqizg7OwvV54eKp6cnMTExgk7mbhCLxYSFhWFnZ4fBYKCnp4fGxkbq6+u5evUqmzdvvklfcq+o1WohfdlkMnHs2DEuXLgg6BbNxMXFMX36dCIjI/Hx8cHR0RF7e3uSkpIoKiqisLCQy5cvc+bMmWGN51aIxWJcXFxITk4mICCAuro6Dh48yP79+0c0GQKuGx83Fm41l01paGiwmsFjDn13d3cL3snQ0FBSU1MZM2YMdXV1HDhwgCtXrljN6By2wSORSHBycmLy5Mk89NBDuLm5MTAwQHl5OdnZ2ZhMJiIiIliwYAHJyclIJBLOnTvH9u3bycvLs5hVa05JtLe3RyaT0dXV9aW7Qr1eT2lpKRUVFYMEu9HR0WRnZ9+zwWPO6pFIJFRWVt714mMwGOjq6hrkjjaLAqurq0lNTSUyMlJor3AndDodu3fvxt/fn6VLlxIUFCRUd75y5Qp5eXmcP3+ekpISuru77/hge3p64u7ujlartUohKkdHR2JjY1mxYsUg7ZRZU9Pe3j5ibQHgenitvLxcyIzLz8+noKCAyZMnk5ycTHBwMO7u7mzatMmqKa5FRUWCiO/y5ctkZGRw8OBBenp6Bl2PK1euMHbsWCZNmkR0dDRxcXEWM3g6OzvJyMhAqVRSXV2Ng4OD0NJBLpfj4uJCSkoKBQUFnD59mpaWFqtcE0dHR1xdXXF1dUUkEhERESFUD25sbBQWNCcnJ8Fg1uv1VFVVUVNTY5ExRUREEB4ejr29PUajkdWrV+Pu7k5gYCAA58+f59ixY3R0dAjfkVKppK2tjfT0dIvMcU5OTiQmJpKSkoJMJqO5uZl9+/axf/9+Ll++/KX6R5FIhFarRavVCmUQhtII1s7ODjc3t7s6tqenh4GBAezt7YUq3TdiMpnIzc2loKCAc+fOCRlEw8FcWiErK4uamppB3jWZTMbcuXN58MEHGTt27CCPekxMDOPHj+fq1aucPHmS9PR0i889crmcOXPmEBcXh16v58KFC+zdu5fS0lKLnudu6O/vR6FQCJ4Wk8lEe3s7MpkMmUyGTqezuLeltLSUU6dOCfX3QkJChErPSUlJtLa2otVqqaiooKOjwyrenmEbPBqNhkmTJvGHP/wBX19foVJye3s7H330EXZ2djz55JNMnToVHx8furq6+OlPf0pGRoZFM4DEYjHjx48XLMfW1lby8vLu+DcGg4G6urqbUgHNlv9Qx2E+/3BFroWFhWRkZLBu3TpSUlLIyMj40gncZDLR3NwsVNg0Cz8NBgM//elPKSoqoqmp6a6u/bRp08jOzqa0tPRLr+W9IhaLiYyMFHQa5rGbRcxdXV0WrzZ9N4SHhxMeHk5nZyc/+clPKCgoYM6cObzwwgs8/PDDjB8/noMHD1pVyP3Tn/6UsLAwZDIZWVlZtz2uoqKCHTt24OHhQWBgIEuXLuXAgQMW2x2dOnWKU6dOIZVKGTNmDM8++ywzZszAx8cHtVrNpEmTWL9+PQaDgczMTOrq6ixq9EgkEuLi4liwYAFz5swBrguCu7u7qaurIy8vT6hKO2bMGBwcHIDrk3lWVhZNTU0WuRbmcglmA2HVqlVcunSJiooKysvL2bZtG/v37weuGyYxMTFIJBJqa2spKCiwyBhiYmKIi4vD29sbo9HIxYsXeeedd27yIt8OtVqNo6OjEDI2Go00Njbe8/dlrnBtnj8GBgaE8N0XuXbtGh0dHcTExAx6XSaToVKphIzS5cuX09XVNSyvikwmQyqVYjKZ6OvrE+ohmTHXj3rooYeIiIhALpcPmp9lMhlOTk6MHz8eZ2dnoeq6pZBIJLi5ufHLX/4ST09Pjh49ys6dO4WElpGmpqYGiUQifA9yuZwf/OAHNDY2cvHiRWpray2+ye3o6GDPnj2cOHGClJQUvvOd7+Dn5yf0TnRxceHnP/85n332GVevXr3/RMsKhQI/Pz+WLVtGUFAQ2dnZ1NfXCx6fQ4cOCT0vzCGDzZs3c/bsWYt/GKlUytKlSwU3XUVFhTAJ3Q6zi/GLhZY2bdo07HYKZs/RcOjt7aWiooJLly7xgx/8gLfeeuumeiO3o62tjV/96lfDOr+5ds+NVaEtRWhoKPPnzxeMHbjunTKHThwdHfH09KS8vHxE+7o8++yzeHp6cvr0aXJzc4HrGqvW1lZEIhEuLi48+uij/OlPf7Ka21Wn0921gXns2DGSk5OZOHEi8+bNIzY21uKp2wMDA+Tm5vKtb32L8PBwkpOTeeCBB5g9ezZz5swhNjaWgwcPsn37dnbv3m0xo0epVPLNb36TBx98cNDrLi4u+Pv7M3HiRL72ta/d9Hd6vd6incBramrIysoSWhSYPW/79+8XvNhmfHx8hGKJlsTLywsXFxfEYjEGg4Hq6uqbaqjcDplMxoYNG1i7di3R0dGCZu2zzz6750Xt9OnTVFRUCJ619PR0Ll26dE8hqYULF/LLX/6SSZMm3dO5b4dKpWL69OnEx8djNBrp6emhsrJy0H2oVqv57W9/S2xsLFevXmXbtm189tlnwu/nz5/P6tWrSUxMxNnZ2eJV5seOHcuGDRuIiIigsbGRl156ySphs7vBZDKxdu1ali1bxuLFixk/fryQJv/hhx9y/PhxPvzwQ9577z2rnL+rq4utW7eydetWIiIiWLduHStWrBBax6SmpvLpp59apSXMkJ9Kcy+Wp556CmdnZ1555RU++OADenp6WLRoEVOmTBEK3TU1NXH27Fl27drFZ599ZhXLbWBggC1btjB//ny0Wi0BAQGkpqbeUeyrUqmYMWOGUBDQZDKxZ88erly5YhH3qiVobGzk4MGDLF68mJkzZ7J///6bMsssRU1NDWfPniUnJ4eYmBhEIhHTp0+ntraW7Oxsiy2iWq2Wxx9/nNWrVwP/cUNv27aNgIAA4fuwdmuLL2IOn1RXV9+ywrU5/XfXrl0j7nm6HbW1tXR3dwvdmJ2cnKx63UpLS/nggw84ceIEixcvZt26dUI/KYVCQV5eHkVFRRY73516wN2O7u5u9uzZY7Hv6Pjx46SnpyOTyQTjRq/X09fXd5NRNWnSJMaNG4der2f//v1WKRdwt0ilUpycnIiIiOCpp54iKCgIuH59PvnkkyEbptXV1fzpT38CrnvT7uV9wsPDmTJlyqDClcOlr6+PS5cuER4eTkJCAi4uLkycOJHGxkbBi2Pe3IrFYvbs2cOuXbsoLCwU3mPx4sUoFAp6enooLS216PNtZ2cneLIMBgM//vGPLZ5Vea/k5+dTXl7O2bNnWbRoESkpKYwZM0YoDzJ16lTOnDlz1y0bhkpJSQk7d+5ELpcLrYOWLl3K6dOn7x+DRyQSERkZyfjx4/H09OTQoUNs3ryZyspKvLy8cHR0HDRRFRYWcuTIEQ4ePGi1WiZGo5GcnBxByGhuMHYnIiMj8fLyEsRucF0/0dHRMezF3exiHS79/f3CburGmKs16Ojo4Nq1a9TW1gpu6KCgIKKjo3FxcRm2sNCMr68vISEheHl5Ca8dP36crVu3kpSUxJgxY1Cr1UKI1BoG8q2YMmUKgYGBFBYWDlq0Z8yYgZubG62trYLgezTKKNyK7373uyQmJtLc3ExaWhqFhYXDvneVSiVLlixBqVRSXl5Oenq64GUbGBigo6ODkpIStmzZQlFREevXrycuLo6AgAAmTJhgUYPHjMlkor+/n5MnT3L58mX8/f2Ji4u7ZdaRSqUiKSlJ8MoMl/7+/ru6Bz08PIQMu/7+fvLy8qxyn4jFYsLDw/Hz87tlO5Bx48bh5eWFu7s7kZGRBAUFCeUo+vr6qKio4B//+MeQDR5z24J7ZeHChSxdupTp06cP8hoPt4aTyWSitLSUyspKxo8fj0QiYdGiRZw8eXLQenOj3KCtrU2oiv3ggw+yYMEC/P39qaurY+/evRbt7xUfH8/06dPRaDQcPnyYkydPjvqGemBggM7OTi5evEh/fz8SiYSIiAhMJhP29vZMnz6d7u5uwQgZKub2PHPnzuXkyZNcvXp10P06MDCAo6PjoPIBZh2uNRjSimwuqBUXF8fAwAAnT56ksrKSqKgoJk2aJOzQzVy+fJmLFy9SU1ODk5MTOp3OYi0kzJhMJpqamoS0UHOGy60QiUQEBQWRmpqKr68vcP0hbm1tpaqqasgLrMlkEsRWtwqVDQVzZUrA6o3vdDodra2tlJaWMjAwgFQqFZrfTZs2jc8//9wi5zGLfxUKBUajUaiim5ubS0REBHq9HolEQmho6IiVOZdKpcyfPx+VSkVzczONjY2IRCLc3NyYOXMmzs7OlJaWWjTrZqiIxWKhMviaNWsICQnh2rVrHDlyhLq6umHdIyKRCHd3d5YuXYqTkxMZGRmUlJQMEkObQyJlZWVCpmNYWBjOzs6CfsUShoaDg8OgMgpdXV18+umnZGVlERcXh1KpvKXBo1arSU5OFjLbrFkt/EbMhry9vT1Xr169ZbE3SyASiQgJCeHBBx+kvr7+JoPHrPVxdXUlJCRECNGY9X0ZGRlcvHjR4uO6HRKJhJkzZ7JmzRrmzJkjzLkmk4lPP/2UjIyMm7Kp7hWzwQPXr8/EiRNJTk7m4sWLVFdX09PTQ2FhIVOnTiUgIIAxY8agVCoJDAxkzZo1xMbG0t7eTlpaGocPH7aYh0elUhEfH8+ECRMYGBhgx44dVFdXW61b+73S3NxMTk4OWq2WWbNmERISglwuF1p0hIaGDis8LJVKmTt3LqtWrRLKONTU1FBfX4+bmxseHh5MnDiRyMhI4W8KCgqslrU2pNUkISGB5cuXExUVRUFBAWVlZURFRfHUU08xZ84cIfXcTGlpKa2trXh5eREZGUlNTQ2FhYUW/9LN2WGenp5UVVVx5MiRW06+CoWC1NRUnn76adzc3ITd46VLlygvLx+ywWM0GoXGcKGhoQQFBXH69Okhfx6pVIqjoyOhoaFC1pK1G+B1d3eTkZHBY489JvQhCgoKYt26dRYzeCIiIoTQi06n4+zZs+zcuRMXFxc8PDyELs4jZfCIRCLkcjlLliyhsbGR2tpadDodarWayZMnC5W409LS+Pjjj0ctnCUWi5FKpWg0GsLDw3nrrbdwdnZmYGCAqqoqjh07NmxDQyQSCSXvfX19sbe3Jzs7W9AbmHfFMpkMtVpNUlISjo6OSKVS1Gq10PPLEoLHgICAQSLbjo4OPv74YxQKBW5ubrctD6BSqZg5cybPPPMMf/rTnygtLR2RBSY0NBQXFxf6+vooKSm5p6aGX4ZZ0G+uhO7p6clPfvKTe/r7vr4+CgsL2b59u8XGdSckEglKpRIvLy9+/etfC0klBoMBnU5HR0cHjz/+uEU8uFevXuXq1at0dHRgZ2dHYGAgP/nJTzh8+DAHDhzg4sWLnDt3jscee4zk5GRcXV25du0aS5YsISQkhJ6eHo4cOSI0RrUUrq6uxMTECIkQO3bsGJEmprdCKpUKmlq4/izrdDra2to4fPgwH374Id/97ndxcXFBJpPh6urKzJkzKSsrG/K8IpPJWLRoEZMnTxb6AmZkZHD69GkmTpxIUlISc+fOFbRlfX19fPLJJ1areTak1WTatGnCRKtSqVi7di0PPfQQjo6OQqnoGyfGNWvWMGvWLFQqFRMnTmTbtm386Ec/slijNDN9fX18+umnuLq64uvry+LFi0lLS6OqqmpQ89DAwEA2bNggdDIeGBigvr6e3/3ud5w8eXLIC5rRaCQ/P5/W1lbCw8OHXeQrLCyM1NRUnnzySS5evMixY8es3jiytbWVjz/+mFdeeWVQnQZLEhwcjL29veARe/3110lOTmb8+PFMmzYNjUaDXq8XPAgjgVgsxtvbm5KSEjo6OoQ6N7/4xS8ICwvjD3/4A1u2bLF6DZ474enpSVBQEGPHjmXKlCnCzt3cJ80SuyKTyURLS4vQWiMhIYE33nhDyErLzc3F3t6egIAAoVL3jbqShIQEPDw86O7uHrZ3w8XFZVDoQyQSYW9vz4svvsicOXOEkM4XMdd3Wrt2Lb29vXz22WdkZGRY3eiZP38+bm5u9Pf3WyQsfiPmxUmn0yGXy+9Ky/PFa5OWlsbmzZvZvXu3xcZ1J/z9/XnggQf485//PGhMDQ0NpKWl8frrr1ts8e/u7ubo0aM4OzvzwgsvIJFICA4O5umnn2bdunX09vYKmwV7e3tCQkIGXZ+//vWvQgFWS+Lm5oarqytisZiamhqrpVvfDcHBwaSkpBASEoJIJKK8vJwTJ05w8eJFdDodr7zyCqmpqajVaqGWXVFR0bDG29vby09/+lMmT54s/MB/tHlmIx6u6+IOHjzIwYMH7y8Pz2effcbMmTPx8/MjKCiIxx9/HLlcTnd3NxcuXODIkSOcOHGCp556iocffphx48YRExODwWCgra2Nt99+22pank8//ZSJEycSEhLC8uXLSUlJ4Xvf+x579+7F2dmZ1NRUXnjhhUFVbOvr6zl16hSnT58e9u5dr9fzySefCN3YIyIiBonj7gYvLy9Wr17NggULiI+PRyaT8ZOf/GTEilMNDAzwxBNP8Pe//11wP1sCsVjM7NmzSU5OFpoMajQa1qxZw/z583F1dRX0VAaDgZMnT46IfkepVDJlyhShO/n48eOJj4/nu9/9LiKRiP3793Pw4EGraFO+iJ+fH35+fjg7OwsZcmZxfWBgIF5eXjg7OwsVkDdt2sSePXvIyMiwiDFmMpkoLi5m9erVPPfccyxZsgRPT0+hvcSYMWMQiUQWbxZ6K0JCQoRKsFKpFF9fX9LT04X7RCwWMzAwwIEDB7hw4QIFBQXEx8ezfv16HB0dUSgUPP3000ydOpXdu3fz8ssvW8XokclkzJgxg8WLF+Pg4MC+ffvYvHmzRc+xe/du6uvrqaqqYv369UIRyC9jYGCApqYm3nnnHXbs2MGVK1csOq7b8fvf/57k5GRCQkIGvb5z504+/fRTdu7cSV9fn0W9pYWFhbz99ttCqwbzM6JQKG5pJOp0OkpLS/nrX//K9u3bhx1WuxVxcXF4eHjQ1NTEqVOnRqya8q3w9vYmNTWVadOmCdl+Op0Og8HAwMAA+/fvZ9y4cYJXtb+/f9j1iMxRj/fee4/g4GDCw8OJiooSjByzAVxSUsK5c+d45ZVXrNbaAoZo8Jgrq4pEIqGZoLkIVl5eHteuXaO5uZl//vOfTJkyhYCAAFpaWrh48SKbNm3i8uXLVtttmXtCAcKN/p3vfIfly5ejUCjw9fXF0dFREPsdOHCAw4cPc+bMGYt5E3bv3s20adNISkrihz/8IS+//DJlZWV3tJSVSiWurq7ExsbyyCOPEBsbi6urKw0NDWzfvp3s7OwR83aYb0JrpF339PSg1+uFh0ipVLJw4ULc3NyEZoRGo5H+/v4Rq8Mjl8sFT0VUVBReXl6Cl/LVV1/l8OHDFhEDfxkSiUTwKKnVaqGmlUQiwdXVFbVaLWSK5ebmcuLECQ4fPsy1a9cseq0MBgMVFRW8++67lJWVsWLFChITEwHuGGIsLy9n165d1NfXW2QXe+jQIaGQ6bhx45BKpXh7ewsLmbk6+dtvv01BQQHt7e2UlJTQ2trK8uXLmTBhAkqlkvDwcB544AEAtm7dSn5+vkWfJbFYjJ+fHyqVisrKSjIzMy3eW0yn05Gbm0tzczOHDh1i8eLFhIaGCmLP+vp6ent7aW1tFa59Z2enEKYvLy+nrq7OahsIR0dHgoODGTNmDCtXriQuLg53d3fUajUGg4ErV66wfft2jh07xpUrV6xSyNRgMNDU1MSWLVsoLCwkISGB0NBQxowZQ3x8vFD937z2dHR0sH//fi5cuGCxmk1fxMvLC41GQ3Nz8y0zP0cSsx5UqVQK3hWzF99kMpGcnIxKpUKv19Pc3HxXBS3vhp6eHt599100Gg3Ozs4EBgYyYcIE7OzsyMnJEYq9NjQ00NTUdP/10mppaWHbtm1CnxKj0cipU6dIS0ujoaGB/v5+RCIR2dnZ/Pvf/8bT05OOjg6uXLli1UwtM2VlZRQWFiKTybC3tyc2NpaxY8cKi4fJZKKtrY38/Hx2797N0aNHLZoCV1hYSFZWFj4+PsydO5eysjKhV4her0epVOLs7IxWq8XNzQ2VSoVWq8XFxYXIyEjmz59Pd3c3V65cIT09nW3bto24qv/Gh18mk+Hi4kJYWBglJSVDXlhNJhNVVVVs376d+Ph4wsPDCQoKwsfHB4PBQHl5OS0tLbS2tnLt2rUR6WsD13fBNTU1tLa24uzsjKOjI/X19ezdu5cdO3aMiLFjxtnZmbi4OMGzAf8pJllVVUVbWxuVlZXs3buXjIyMYWnO7oR5gTW3cTCXKjB7e7RaLUajUcjqq66u5sqVK5w+fdpiou6rV69y4MABNBoN/v7+ODs7I5PJqK6uprGxkerqakGbYa5C3tPTQ09PD11dXWg0GkJCQtBoNEIJ+88++8ziE6pUKhV61xUVFVFUVGSVFi3t7e20t7dTVFREV1cXAQEBQquI5uZm+vv7aW9vFz5fT08P+fn5VvFcmPHw8CA0NJTIyEhiY2MJCgpiwYIFwka4s7OT3NxcPvvsMw4fPkxZWZlVjB0zer1eaBdUVlaGv78/wcHBZGRk0NraSmZmprCId3d3k5mZaVXPubmwX3d39131m7sx7Ha3BWLvlubmZs6ePUtXVxdTpkxBq9UKmwezLgwQrpOlNJtGo1HwjstkMrKzsykpKUGtVlNUVERjYyPd3d0jsqEfksFTU1PDH/7whzseYzKZ6Ozs5P/9v/83pIENh/T0dNRqNSaTiWnTpiGRSOju7hb6AJkrlW7ZsoWDBw9aPN+/s7OTAwcOYG9vz7Jly/jud79LaGgop0+fpq+vDycnJ0JDQ4US266urqhUKmQyGRKJhJqaGk6dOsXevXs5c+bMsAsYDgWj0Sh4YlQqFf7+/syePZvKysohN4o0mUxUVlby5z//mSlTppCcnMy8efOA617D48ePU1RURHl5OTk5OSPWrLO3t5dTp05x9uxZgoKCkEql5OXl8cYbb4xYCACuX58jR44IYasbuXLlCvn5+dTW1lJZWcnOnTutPh6dTkd+fr6weXj88ceJi4sjPDwcb29vDAYDR48eJTMzk7S0NK5duzakdgV3Ov/Zs2dRqVSEhIQImrhz586Rm5vLpUuXOHbs2CADvLu7m4KCAoqKivDy8mL+/PlC1XSTyUR5ebnFvYbmkJbRaCQ7O9vqtUuMRiPHjx+36jnulqSkJB588EGSkpIGha/a29vp6Ojg6tWrfPLJJ/z9738f0XEZjUby8vIsXiH+XjGHjOzs7AgNDcXV1RW9Xo/BYMBkMgleF4lEImhn3N3d8fDw4Pjx47es9TRUrl27xscff4yDgwM//vGPhYxC84bbrA/Nz89n//79Fm1GbEav19PU1DRq9++IdUsfSS5cuMCVK1c4efIkJ06cAGDXrl2IRCJ8fHzo6+vj0Ucfpa2tzWohk0OHDtHQ0EB7ezvf/e53efTRR1m7di1w++JhBoOB+vp6Vq1axeXLl0csnfZW9Pb2Ultbi7u7O/b29jg7OzNp0iQhy2A4Ho+mpiZ27drFrl27LDjioWM0Gmlqarqpou9ojOPNN9/kzTffHNVx3Ii51YfBYBjxRQsGCxnvBaPRyAsvvMALL7xgpZH9B6lUSnR0NLm5uUL15f8V/vKXvwh9CG/MJPvkk0/48MMPOXXq1CiPcHQpLCykubmZpKQkfvzjH+Pt7U1BQYHgkbS3t2fs2LHY29uTkpKCvb09fX19FBcXk5GRYdGxtLW1CZGCU6dOkZKSQnh4OOPGjWPVqlW89NJLwPXK8qNdGNFafCUNHrjuzj137pywuzMv0ObY5UiIYS9fvszPfvYzfvnLX97135jHNpqVfE0mEyUlJXz44YcoFAomTpwoZD24uLjQ3t4+YiEeGzbud5qamnBwcMBoNKLT6e6bKtwjTVtbG2+88Qa///3v6e3tHdGWMPcr+/bto729nUWLFrFs2TI2bNhw0/1hTp6pqqrio48+Yv/+/aSlpVk9o+vw4cMcOXIEsVjMxo0bBW2T0Wj8yt7DX1mDBxBi+qN5fnMq6X8bZlG30Wiku7ub4uJifve731FRUfFf+Xls2LAmoznPjCYrVqwQSgeYtXCjmXp9v9HV1cXZs2cpLCzkgw8+uGNfwr6+Ppqbm2lpaRmRa3jjpvV/ZU7/Shs8NoZHTk4O77//Pu7u7tTV1ZGRkWGR+io2bNj4anD+/PnRHsJ9jdFoFEJJZWVloz2c/3m+1OCJjIy0WgG6/0b8/f1RKBQkJCSM9lBGhBsnNHPzwVuhUCjw9/f/n7kud0NQUBAikYiEhIRRq656P+Ls7IzBYLDdKzdgrqsTFRUl1EGxcX2+VSqVtnvlC5gL6Nquy38wd1u/E6Iv2a3btvI2bNiwYcOGjf8WbluR88s8PNYtpWrDhg0bNmzYsDECiEd7ADZs2LBhw4YNG9bGZvDYsGHDhg0bNr7y2AweGzZs2LBhw8ZXHpvBY8OGDRs2bNj4ymMzeGzYsGHDhg0bX3lsBo8NGzZs2LBh4yvP/wduZ1l6sBWbjwAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "print(\"Plot some images to see if everything worked:\")\n", "\n", "plot_images(denormalize(concat_data[0:16]))\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Pretrain Autoencoder" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "FlexibleAutoencoder(\n", " (encoder): FullyConnectedBlock(\n", " (block): Sequential(\n", " (0): Linear(in_features=1568, out_features=1024, bias=True)\n", " (1): LeakyReLU(negative_slope=0.01)\n", " (2): Linear(in_features=1024, out_features=512, bias=True)\n", " (3): LeakyReLU(negative_slope=0.01)\n", " (4): Linear(in_features=512, out_features=256, bias=True)\n", " (5): LeakyReLU(negative_slope=0.01)\n", " (6): Linear(in_features=256, out_features=20, bias=True)\n", " )\n", " )\n", " (decoder): FullyConnectedBlock(\n", " (block): Sequential(\n", " (0): Linear(in_features=20, out_features=256, bias=True)\n", " (1): LeakyReLU(negative_slope=0.01)\n", " (2): Linear(in_features=256, out_features=512, bias=True)\n", " (3): LeakyReLU(negative_slope=0.01)\n", " (4): Linear(in_features=512, out_features=1024, bias=True)\n", " (5): LeakyReLU(negative_slope=0.01)\n", " (6): Linear(in_features=1024, out_features=1568, bias=True)\n", " )\n", " )\n", ")" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from cluspy.deep import FlexibleAutoencoder\n", "\n", "model = FlexibleAutoencoder(layers=[concat_data.shape[1], 1024, 512, 256, 20])\n", "model" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Use device: cuda:1\n" ] } ], "source": [ "# Set all parameters needed for training\n", "\n", "# The size of the mini-batch that is passed in each trainings iteration\n", "batch_size = 128\n", "# The learning rate specifies the step size of the gradient descent algorithm\n", "learning_rate = 1e-3\n", "# Set device on which the model should be trained on (For most of you this will be the CPU)\n", "device = detect_device()\n", "print(\"Use device: \", device)\n", "\n", "# load model to device\n", "model.to(device)\n", "\n", "# create a Dataloader to train the autoencoder in mini-batch fashion\n", "trainloader = get_dataloader(data_train, batch_size=batch_size, shuffle=True, drop_last=True, additional_inputs=[labels_train])\n", "\n", "# create a Dataloader to evaluate the autoencoder in mini-batch fashion\n", "evalloader = get_dataloader(data_eval, batch_size=batch_size, shuffle=False, drop_last=False, additional_inputs=[labels_eval])\n", "\n", "\n", "\n", "# create a Dataloader to evaluate the autoencoder in mini-batch fashion on the full data\n", "fullloader = get_dataloader(concat_data, batch_size=batch_size, shuffle=False, drop_last=False, additional_inputs=[concat_labels])\n", "\n", "\n", "# define optimizer (use a high weight decay as regularization and such that the embedded data has a small magnitude)\n", "optimizer = torch.optim.Adam(model.parameters(), lr = learning_rate, weight_decay=1e-2)\n", "\n", "# define loss function\n", "loss_fn = torch.nn.MSELoss()\n", "\n", "# path to were we want to save/load the model to/from\n", "pretrained_model_name = \"pretrained_\" + model_name\n", "pretrained_model_path = os.path.join(base_path, pretrained_model_name)\n" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Epoch 1/199 - Batch Reconstruction loss: 0.285183\n", "Epoch 1 EVAL loss total: 0.283925\n", "Epoch 6/199 - Batch Reconstruction loss: 0.202321\n", "Epoch 6 EVAL loss total: 0.199433\n", "Epoch 11/199 - Batch Reconstruction loss: 0.166647\n", "Epoch 11 EVAL loss total: 0.178877\n", "Epoch 16/199 - Batch Reconstruction loss: 0.166482\n", "Epoch 16 EVAL loss total: 0.170863\n", "Epoch 21/199 - Batch Reconstruction loss: 0.150828\n", "Epoch 21 EVAL loss total: 0.167065\n", "Epoch 26/199 - Batch Reconstruction loss: 0.144441\n", "Epoch 26 EVAL loss total: 0.162418\n", "Epoch 31/199 - Batch Reconstruction loss: 0.140614\n", "Epoch 31 EVAL loss total: 0.161652\n", "Epoch 36/199 - Batch Reconstruction loss: 0.143041\n", "Epoch 36 EVAL loss total: 0.158270\n", "Epoch 41/199 - Batch Reconstruction loss: 0.127747\n", "Epoch 41 EVAL loss total: 0.158987\n", "Epoch 46/199 - Batch Reconstruction loss: 0.140007\n", "Epoch 46 EVAL loss total: 0.156236\n", "Epoch 51/199 - Batch Reconstruction loss: 0.124965\n", "Epoch 51 EVAL loss total: 0.155962\n", "Stop training at epoch 47\n", "Best Loss: 0.155943, Last Loss: 0.156808\n" ] }, { "data": { "text/plain": [ "FlexibleAutoencoder(\n", " (encoder): FullyConnectedBlock(\n", " (block): Sequential(\n", " (0): Linear(in_features=1568, out_features=1024, bias=True)\n", " (1): LeakyReLU(negative_slope=0.01)\n", " (2): Linear(in_features=1024, out_features=512, bias=True)\n", " (3): LeakyReLU(negative_slope=0.01)\n", " (4): Linear(in_features=512, out_features=256, bias=True)\n", " (5): LeakyReLU(negative_slope=0.01)\n", " (6): Linear(in_features=256, out_features=20, bias=True)\n", " )\n", " )\n", " (decoder): FullyConnectedBlock(\n", " (block): Sequential(\n", " (0): Linear(in_features=20, out_features=256, bias=True)\n", " (1): LeakyReLU(negative_slope=0.01)\n", " (2): Linear(in_features=256, out_features=512, bias=True)\n", " (3): LeakyReLU(negative_slope=0.01)\n", " (4): Linear(in_features=512, out_features=1024, bias=True)\n", " (5): LeakyReLU(negative_slope=0.01)\n", " (6): Linear(in_features=1024, out_features=1568, bias=True)\n", " )\n", " )\n", ")" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Train and save model\n", "model_path = \"test_cat.pth\"\n", "scheduler = torch.optim.lr_scheduler.ReduceLROnPlateau\n", "scheduler_params = {\"factor\":0.9, \"patience\":5, \"verbose\":True}\n", "model.fit(n_epochs=200, lr=learning_rate, dataloader=trainloader, evalloader=evalloader, device=device, model_path=model_path,\n", " scheduler=scheduler, scheduler_params=scheduler_params, print_step=5)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "FlexibleAutoencoder(\n", " (encoder): FullyConnectedBlock(\n", " (block): Sequential(\n", " (0): Linear(in_features=1568, out_features=1024, bias=True)\n", " (1): LeakyReLU(negative_slope=0.01)\n", " (2): Linear(in_features=1024, out_features=512, bias=True)\n", " (3): LeakyReLU(negative_slope=0.01)\n", " (4): Linear(in_features=512, out_features=256, bias=True)\n", " (5): LeakyReLU(negative_slope=0.01)\n", " (6): Linear(in_features=256, out_features=20, bias=True)\n", " )\n", " )\n", " (decoder): FullyConnectedBlock(\n", " (block): Sequential(\n", " (0): Linear(in_features=20, out_features=256, bias=True)\n", " (1): LeakyReLU(negative_slope=0.01)\n", " (2): Linear(in_features=256, out_features=512, bias=True)\n", " (3): LeakyReLU(negative_slope=0.01)\n", " (4): Linear(in_features=512, out_features=1024, bias=True)\n", " (5): LeakyReLU(negative_slope=0.01)\n", " (6): Linear(in_features=1024, out_features=1568, bias=True)\n", " )\n", " )\n", ")" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# load best model (can be executed in case model was previously saved)\n", "sd = torch.load(model_path)\n", "model.load_state_dict(sd)\n", "model.eval()" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Original Images\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Reconstructed Images\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Plot how well we are at reconstructing the data:\n", "to_plot = 8\n", "print(\"Original Images\")\n", "plot_images(denormalize(concat_data[0:to_plot]))\n", "print(\"Reconstructed Images\")\n", "reconstruction = model(concat_data[0:to_plot].to(device)).detach().cpu()\n", "plot_images(denormalize(reconstruction))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Apply NrKmeans to the AE Embedding as a baseline" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "from cluspy.alternative import NrKmeans\n", "n_clusters = [10,10]\n", "embedded_data = encode_batchwise(fullloader, model, device)\n", "nrkmeans = NrKmeans(n_clusters=n_clusters)\n", "preds = nrkmeans.fit_predict(embedded_data)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## NMI for all cluster combinations\n", "\n", "We see that two clusterings could be found and the two subspaces are mutually non-redundant (the opposite clusterings are close to zero)." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "cm = MultipleLabelingsConfusionMatrix(labels_true=concat_labels, labels_pred=preds)\n", "cm.plot()" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Clustering 0 dims: [ 3 2 6 10 19 7 12 11 17 16]\n", "Clustering 1 dims: [ 0 4 9 8 18 15 13 5 14 1]\n" ] } ], "source": [ "# Indices of the dimension of each clustering\n", "for i, P_i in enumerate(nrkmeans.P):\n", " print(f\"Clustering {i} dims: {P_i}\")\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Apply ENRC" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "from cluspy.deep.enrc import ENRC\n", "# load best model\n", "sd = torch.load(model_path)\n", "model.load_state_dict(sd)\n", "model.eval()\n", "\n", "scheduler = torch.optim.lr_scheduler.StepLR\n", "scheduler_params = {\"step_size\":40, \"gamma\":0.9}\n", "\n", "enrc = ENRC(n_clusters=[10,10], \n", " batch_size=128, \n", " # Reduce learning_rate by factor of 10 as usually done in Deep Clustering for stable training\n", " clustering_learning_rate=learning_rate*0.1,\n", " clustering_epochs=400,\n", " autoencoder=model,\n", " # Use nrkmeans to initialize ENRC\n", " init=\"nrkmeans\",\n", " # Use a random subsample of the data to speed up the initialization procedure\n", " init_subsample_size=10000,\n", " device=device,\n", " scheduler=scheduler,\n", " scheduler_params=scheduler_params,\n", " # Prints training information\n", " verbose=True,\n", " )" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Run ENRC init: nrkmeans\n", "Round 0: Found solution with: 377665.5636499811 (current best: 377665.5636499811)\n", "Round 1: Found solution with: 381134.3259943916 (current best: 377665.5636499811)\n", "Round 2: Found solution with: 375718.5733686376 (current best: 375718.5733686376)\n", "Round 3: Found solution with: 374316.696198132 (current best: 374316.696198132)\n", "Round 4: Found solution with: 375319.7236772842 (current best: 374316.696198132)\n", "Round 5: Found solution with: 374422.7587405634 (current best: 374316.696198132)\n", "Round 6: Found solution with: 374757.86207669904 (current best: 374316.696198132)\n", "Round 7: Found solution with: 374361.437904591 (current best: 374316.696198132)\n", "Round 8: Found solution with: 376783.771318484 (current best: 374316.696198132)\n", "Round 9: Found solution with: 374257.9725125192 (current best: 374257.9725125192)\n", "Start ENRC training\n", "Epoch 1/399: summed_loss: 0.3399, subspace_losses: 0.0480, rec_loss: 0.2919, rotation_loss: 0.0060\n", "Epoch 11/399: summed_loss: 0.1849, subspace_losses: 0.0155, rec_loss: 0.1694, rotation_loss: 0.0099\n", "Epoch 21/399: summed_loss: 0.1643, subspace_losses: 0.0105, rec_loss: 0.1538, rotation_loss: 0.0176\n", "Epoch 31/399: summed_loss: 0.1508, subspace_losses: 0.0080, rec_loss: 0.1427, rotation_loss: 0.0231\n", "Epoch 41/399: summed_loss: 0.1401, subspace_losses: 0.0069, rec_loss: 0.1332, rotation_loss: 0.0273\n", "Reinitialize cluster 0 in subspace 0\n", "Epoch 51/399: summed_loss: 0.1421, subspace_losses: 0.0055, rec_loss: 0.1366, rotation_loss: 0.0306\n", "Epoch 61/399: summed_loss: 0.1363, subspace_losses: 0.0050, rec_loss: 0.1313, rotation_loss: 0.0333\n", "Reinitialize cluster 6 in subspace 0\n", "Reinitialize cluster 6 in subspace 0\n", "Epoch 71/399: summed_loss: 0.1334, subspace_losses: 0.0046, rec_loss: 0.1288, rotation_loss: 0.0358\n", "Epoch 81/399: summed_loss: 0.1367, subspace_losses: 0.0042, rec_loss: 0.1325, rotation_loss: 0.0378\n", "Epoch 91/399: summed_loss: 0.1350, subspace_losses: 0.0039, rec_loss: 0.1311, rotation_loss: 0.0397\n", "Epoch 101/399: summed_loss: 0.1288, subspace_losses: 0.0037, rec_loss: 0.1251, rotation_loss: 0.0415\n", "Epoch 111/399: summed_loss: 0.1230, subspace_losses: 0.0035, rec_loss: 0.1195, rotation_loss: 0.0431\n", "Epoch 121/399: summed_loss: 0.1343, subspace_losses: 0.0034, rec_loss: 0.1310, rotation_loss: 0.0446\n", "Epoch 131/399: summed_loss: 0.1385, subspace_losses: 0.0032, rec_loss: 0.1353, rotation_loss: 0.0460\n", "Reinitialize cluster 3 in subspace 1\n", "Reinitialize cluster 0 in subspace 1\n", "Epoch 141/399: summed_loss: 0.1276, subspace_losses: 0.0029, rec_loss: 0.1247, rotation_loss: 0.0473\n", "Reinitialize cluster 9 in subspace 1\n", "Reinitialize cluster 9 in subspace 1\n", "Reinitialize cluster 9 in subspace 1\n", "Epoch 151/399: summed_loss: 0.1243, subspace_losses: 0.0029, rec_loss: 0.1213, rotation_loss: 0.0485\n", "Epoch 161/399: summed_loss: 0.1274, subspace_losses: 0.0028, rec_loss: 0.1246, rotation_loss: 0.0497\n", "Epoch 171/399: summed_loss: 0.1251, subspace_losses: 0.0025, rec_loss: 0.1225, rotation_loss: 0.0508\n", "Epoch 181/399: summed_loss: 0.1240, subspace_losses: 0.0025, rec_loss: 0.1215, rotation_loss: 0.0518\n", "Epoch 191/399: summed_loss: 0.1240, subspace_losses: 0.0023, rec_loss: 0.1217, rotation_loss: 0.0528\n", "Epoch 201/399: summed_loss: 0.1262, subspace_losses: 0.0024, rec_loss: 0.1238, rotation_loss: 0.0538\n", "Epoch 211/399: summed_loss: 0.1205, subspace_losses: 0.0023, rec_loss: 0.1182, rotation_loss: 0.0547\n", "Epoch 221/399: summed_loss: 0.1172, subspace_losses: 0.0023, rec_loss: 0.1149, rotation_loss: 0.0555\n", "Epoch 231/399: summed_loss: 0.1153, subspace_losses: 0.0022, rec_loss: 0.1131, rotation_loss: 0.0563\n", "Epoch 241/399: summed_loss: 0.1243, subspace_losses: 0.0021, rec_loss: 0.1222, rotation_loss: 0.0572\n", "Epoch 251/399: summed_loss: 0.1152, subspace_losses: 0.0020, rec_loss: 0.1131, rotation_loss: 0.0579\n", "Epoch 261/399: summed_loss: 0.1189, subspace_losses: 0.0019, rec_loss: 0.1170, rotation_loss: 0.0587\n", "Epoch 271/399: summed_loss: 0.1207, subspace_losses: 0.0019, rec_loss: 0.1187, rotation_loss: 0.0594\n", "Reinitialize cluster 9 in subspace 1\n", "Reinitialize cluster 0 in subspace 1\n", "Epoch 281/399: summed_loss: 0.1211, subspace_losses: 0.0020, rec_loss: 0.1191, rotation_loss: 0.0601\n", "Reinitialize cluster 0 in subspace 1\n", "Reinitialize cluster 6 in subspace 1\n", "Reinitialize cluster 6 in subspace 1\n", "Reinitialize cluster 6 in subspace 1\n", "Reinitialize cluster 0 in subspace 1\n", "Reinitialize cluster 1 in subspace 0\n", "Epoch 291/399: summed_loss: 0.1158, subspace_losses: 0.0019, rec_loss: 0.1139, rotation_loss: 0.0608\n", "Epoch 301/399: summed_loss: 0.1232, subspace_losses: 0.0018, rec_loss: 0.1213, rotation_loss: 0.0614\n", "Epoch 311/399: summed_loss: 0.1179, subspace_losses: 0.0019, rec_loss: 0.1160, rotation_loss: 0.0621\n", "Epoch 321/399: summed_loss: 0.1173, subspace_losses: 0.0018, rec_loss: 0.1155, rotation_loss: 0.0627\n", "Epoch 331/399: summed_loss: 0.1119, subspace_losses: 0.0018, rec_loss: 0.1101, rotation_loss: 0.0633\n", "Epoch 341/399: summed_loss: 0.1179, subspace_losses: 0.0018, rec_loss: 0.1161, rotation_loss: 0.0639\n", "Reinitialize cluster 0 in subspace 1\n", "Reinitialize cluster 0 in subspace 1\n", "Reinitialize cluster 0 in subspace 1\n", "Epoch 351/399: summed_loss: 0.1168, subspace_losses: 0.0017, rec_loss: 0.1151, rotation_loss: 0.0645\n", "Reinitialize cluster 0 in subspace 1\n", "Epoch 361/399: summed_loss: 0.1129, subspace_losses: 0.0016, rec_loss: 0.1113, rotation_loss: 0.0650\n", "Epoch 371/399: summed_loss: 0.1136, subspace_losses: 0.0016, rec_loss: 0.1120, rotation_loss: 0.0655\n", "Reinitialize cluster 0 in subspace 1\n", "Reinitialize cluster 0 in subspace 1\n", "Epoch 381/399: summed_loss: 0.1123, subspace_losses: 0.0016, rec_loss: 0.1107, rotation_loss: 0.0660\n", "Reinitialize cluster 4 in subspace 1\n", "Epoch 391/399: summed_loss: 0.1100, subspace_losses: 0.0016, rec_loss: 0.1084, rotation_loss: 0.0666\n", "Reinitialize cluster 7 in subspace 1\n", "Reinitialize cluster 1 in subspace 1\n", "Epoch 399/399: summed_loss: 0.1164, subspace_losses: 0.0016, rec_loss: 0.1148, rotation_loss: 0.0670\n", "Recluster\n" ] }, { "data": { "text/plain": [ "ENRC(P=[array([ 9, 11, 18, 3, 10, 1, 14, 16, 12, 5]),\n", " array([ 2, 6, 13, 7, 0, 19, 15, 8, 4, 17])],\n", " V=array([[-1.17575228e-01, 3.14788699e-01, -4.08440202e-01,\n", " 3.72170955e-01, -4.85883325e-01, -4.73220319e-01,\n", " -9.35577825e-02, 1.92871183e-01, 4.42588329e-02,\n", " 1.94769815e-01, -1.55951068e-01, -1.48653045e-01,\n", " -2.73746431e-01, 5.13128519e-01, -4.79664564e-01,\n", " -1.75671652e-02, 3.22577000e-0...\n", " (4): Linear(in_features=512, out_features=1024, bias=True)\n", " (5): LeakyReLU(negative_slope=0.01)\n", " (6): Linear(in_features=1024, out_features=1568, bias=True)\n", " )\n", " )\n", "),\n", " clustering_epochs=400, device=device(type='cuda', index=1),\n", " init_subsample_size=10000, n_clusters=[10, 10],\n", " scheduler=,\n", " scheduler_params={'gamma': 0.9, 'step_size': 40}, verbose=True)" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "enrc.fit(concat_data.numpy())" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Clustering 0 dims: [ 9 11 18 3 10 1 14 16 12 5]\n", "Clustering 1 dims: [ 2 6 13 7 0 19 15 8 4 17]\n" ] } ], "source": [ "# Indices of the dimension of each clustering\n", "for i, P_i in enumerate(enrc.P):\n", " print(f\"Clustering {i} dims: {P_i}\")" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Soft Beta Weights\n", "sns.heatmap(enrc.betas, vmin=0, vmax=1.0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## NMI for all cluster combinations\n", "\n", "We see that we could improve upon the results of NrKmeans and the two subspaces are non-redundant." ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "cm = MultipleLabelingsConfusionMatrix(labels_true=concat_labels, labels_pred=enrc.labels_)\n", "cm.plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Plot reconstructed centroids from each clustering\n", "\n", "We see that for the centers of clustering 0 only the left side digits change, while for the clustering 1 only the right side digits change." ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Centers of Clustering 0\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Centers of Clustering 1\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "for subspace_i in range(len(enrc.P)):\n", " rec_centers = enrc.reconstruct_subspace_centroids(subspace_i)\n", " print(\"Centers of Clustering \", subspace_i)\n", " plot_images(denormalize(torch.from_numpy(rec_centers)))\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.10.4" } }, "nbformat": 4, "nbformat_minor": 2 }