diff --git a/docs/api/datasets.rst b/docs/api/datasets.rst index b02439d26..9b1cace54 100644 --- a/docs/api/datasets.rst +++ b/docs/api/datasets.rst @@ -243,5 +243,6 @@ Available Datasets datasets/pyhealth.datasets.ClinVarDataset datasets/pyhealth.datasets.COSMICDataset datasets/pyhealth.datasets.TCGAPRADDataset + datasets/pyhealth.datasets.ADNIDataset datasets/pyhealth.datasets.splitter datasets/pyhealth.datasets.utils diff --git a/docs/api/datasets/pyhealth.datasets.ADNIDataset.rst b/docs/api/datasets/pyhealth.datasets.ADNIDataset.rst new file mode 100644 index 000000000..c15d17bff --- /dev/null +++ b/docs/api/datasets/pyhealth.datasets.ADNIDataset.rst @@ -0,0 +1,15 @@ +pyhealth.datasets.ADNIDataset +=================================== + +The Alzheimer's Disease Neuroimaging Initiative (ADNI) dataset. A Pyhealth dataset consisting of labelled MRI brain scan images. For more information, and to apply for access, visit `https://adni.loni.usc.edu/data-samples/adni-data/`. + +.. autoclass:: pyhealth.datasets.ADNIDataset + :members: + :undoc-members: + :show-inheritance: + + + + + + \ No newline at end of file diff --git a/docs/api/models.rst b/docs/api/models.rst index 7368dec94..cbc93cac7 100644 --- a/docs/api/models.rst +++ b/docs/api/models.rst @@ -203,4 +203,5 @@ API Reference models/pyhealth.models.VisionEmbeddingModel models/pyhealth.models.TextEmbedding models/pyhealth.models.BIOT + models/pyhealth.models.AlzheimersDiseaseCNN models/pyhealth.models.unified_multimodal_embedding_docs diff --git a/docs/api/models/pyhealth.models.AlzheimersDiseaseCNN.rst b/docs/api/models/pyhealth.models.AlzheimersDiseaseCNN.rst new file mode 100644 index 000000000..75dbd0a27 --- /dev/null +++ b/docs/api/models/pyhealth.models.AlzheimersDiseaseCNN.rst @@ -0,0 +1,9 @@ +pyhealth.models.AlzheimersDiseaseCNN +=================================== + +Pyhealth model to detect Alzheimer's Disease using ADNI datasets, based on the model described in "On the Design of Convolutional Neural Networks for Automatic Detection of Alzheimer's Disease" by Liu et al. (`https://arxiv.org/abs/1911.03740`). + +.. autoclass:: pyhealth.models.AlzheimersDiseaseCNN + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/docs/api/processors.rst b/docs/api/processors.rst index a06e3c955..dd963d37e 100644 --- a/docs/api/processors.rst +++ b/docs/api/processors.rst @@ -46,6 +46,7 @@ Available Processors - ``TimeImageProcessor``: For time-stamped image sequences (e.g., serial X-rays) - ``TensorProcessor``: For pre-processed tensor data - ``RawProcessor``: Pass-through processor for raw data +- ``NIftIImageProcessor``: For NIftI MRI images **Specialized Processors:** @@ -496,4 +497,5 @@ API Reference processors/pyhealth.processors.MultiHotProcessor processors/pyhealth.processors.StageNetProcessor processors/pyhealth.processors.StageNetTensorProcessor - processors/pyhealth.processors.GraphProcessor \ No newline at end of file + processors/pyhealth.processors.GraphProcessor + processors/pyhealth.processors.NIftIImageProcessor \ No newline at end of file diff --git a/docs/api/processors/pyhealth.processors.NIftIImageProcessor.rst b/docs/api/processors/pyhealth.processors.NIftIImageProcessor.rst new file mode 100644 index 000000000..c1436c435 --- /dev/null +++ b/docs/api/processors/pyhealth.processors.NIftIImageProcessor.rst @@ -0,0 +1,9 @@ +pyhealth.processors.NIftIImageProcessor +=================================== + +Processor for Neuroimaging Informatics Technology Initiative (NIftI) images. + +.. autoclass:: pyhealth.processors.NIftIImageProcessor + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/api/tasks.rst b/docs/api/tasks.rst index d85d04bc3..84bdccb94 100644 --- a/docs/api/tasks.rst +++ b/docs/api/tasks.rst @@ -231,3 +231,4 @@ Available Tasks Mutation Pathogenicity (COSMIC) Cancer Survival Prediction (TCGA) Cancer Mutation Burden (TCGA) + Alzheimer's Disease Classification (ADNI) diff --git a/docs/api/tasks/pyhealth.tasks.AlzheimersDiseaseClassification.rst b/docs/api/tasks/pyhealth.tasks.AlzheimersDiseaseClassification.rst new file mode 100644 index 000000000..ad238e2d3 --- /dev/null +++ b/docs/api/tasks/pyhealth.tasks.AlzheimersDiseaseClassification.rst @@ -0,0 +1,7 @@ +pyhealth.tasks.AlzheimersDiseaseClassification +======================================= + +.. autoclass:: pyhealth.tasks.base_task.AlzheimersDiseaseClassification + :members: + :undoc-members: + :show-inheritance: \ No newline at end of file diff --git a/examples/adni_ad_classification.py b/examples/adni_ad_classification.py new file mode 100644 index 000000000..7102f3f9f --- /dev/null +++ b/examples/adni_ad_classification.py @@ -0,0 +1,154 @@ +"""Classification of Alzheimer's Disease using the ADNI Dataset. + +Author: Bryan Lau (bryan16@illinois.edu) + +This script executes the Pyhealth pipeline implementation of the method +described in the paper "On the Design of Convolutional Neural Networks +for Automatic Detection of Alzheimer's Disease" by Liu et al. +(https://arxiv.org/abs/1911.03740). + +The pipeline consists of: + +- ADNIDataset: + Pyhealth-compatible dataset for ADNI data + +- AlzheimersDiseaseClassification: + Task to present the necessary features + +- NIftIImageProcessor: + Image processor to load and process NIftI files + +- AlzheimersDiseaseCNN: + Model that replicates the structure described by Liu et al. + +This script has been tested against 3182 real MRI brain scan image files +downloaded from the ADNI dataset, hosted at the Image & Data Archive (IDA) +at the Laboratory of Neuro Imaging (LONI). Users may apply for access at: + +https://adni.loni.usc.edu/data-samples/adni-data/ + +The required pre-processing parameters are: + +- Multiplanar reconstruction (MPR) +- Gradient warping correction (GradWarp) +- B1 non-uniformity correction +- N3 intensity normalization + +This implementation aligns with the method described by Liu et al. except +that the following are omitted for the sake of simplicity: + +- Image pre-processing using Clinica (e.g. Dartel template registration) +- Training augmentation, i.e. gaussian blurring and random cropping + +""" +import os +import shutil + +from pathlib import Path +from torch.optim import SGD + +from pyhealth.datasets import ADNIDataset, get_dataloader +from pyhealth.datasets.splitter import split_by_patient # New splitter +from pyhealth.models import AlzheimersDiseaseCNN +from pyhealth.tasks import AlzheimersDiseaseClassification +from pyhealth.trainer import Trainer + +from adni_ad_synthetic_data import create_adni_image + +# Initialization +BATCH_SIZE = 4 +EPOCHS = 50 +PATIENCE = 10 +LEARNING_RATE = 0.01 +MOMENTUM = 0.9 +METRICS = ["balanced_accuracy", "accuracy", "f1_macro", "roc_auc_macro_ovr"] +MONITOR = "balanced_accuracy" +NUM_SYNTHETIC_SAMPLES = 30 +NUM_WORKERS = 4 +SEED = 99 + +# Path where the ADNI files are located +ADNI_ROOT = "./adni_root" +CACHE_DIR = "./cache" + +# Set this flag to: +# True to generate and use synthetic data +# False to use real ADNI images that you have downloaded +USE_SYNTHETIC_DATA = True + +if __name__ == '__main__': + + # Convert paths + adni_path = Path(ADNI_ROOT) + cache_path = Path(CACHE_DIR) + + # Generate synthetic ADNI data + if USE_SYNTHETIC_DATA: + adni_path = Path("./adni_synthetic") + cache_path = Path("./cache_synthetic") + + for path in [adni_path, cache_path]: + if os.path.exists(path): + shutil.rmtree(path) + os.makedirs(path, exist_ok=True) + + for i in range(NUM_SYNTHETIC_SAMPLES): + subject_id = f"002_S_{i:04d}" + if i < int(NUM_SYNTHETIC_SAMPLES * 0.33): + group = "CN" + elif i < int(NUM_SYNTHETIC_SAMPLES * 0.66): + group = "MCI" + else: + group = "AD" + print(f"Generating synthetic image for {subject_id} ({group})") + create_adni_image(adni_path, subject_id, group) + + # Instantiate base ADNI dataset + adni_dataset = ADNIDataset(root=str(adni_path), cache_dir=str(cache_path), dev=False, num_workers=NUM_WORKERS) + adni_dataset.stats() + + # Set task and obtain samples + adni_task = AlzheimersDiseaseClassification() + sample_dataset = adni_dataset.set_task(adni_task) + + # Split data by patient into train/val/test (70/15/15) + split_ratios = [0.7, 0.15, 0.15] + train_data, val_data, test_data = split_by_patient( + sample_dataset, ratios=split_ratios, seed=SEED) + + # Create dataloaders + train_loader = get_dataloader(train_data, batch_size=BATCH_SIZE, shuffle=True) + val_loader = get_dataloader(val_data, batch_size=BATCH_SIZE, shuffle=False) + test_loader = get_dataloader(test_data, batch_size=BATCH_SIZE, shuffle=False) + + # Instantiate model using samples + model = AlzheimersDiseaseCNN( + dataset=sample_dataset, + width_factor=4, use_age=True, use_gender=True, norm_method="instance" + ) + + # Instantiate trainer + trainer = Trainer( + model=model, + metrics=METRICS, + output_path="./output" + ) + + # Train the model + trainer.train( + train_dataloader=train_loader, + val_dataloader=val_loader, + test_dataloader=test_loader, + epochs=EPOCHS, + optimizer_class=SGD, + optimizer_params={"lr": LEARNING_RATE, "momentum": MOMENTUM, "weight_decay": 1e-3}, + max_grad_norm=1.0, + monitor=MONITOR, + monitor_criterion="max", + patience=PATIENCE, + load_best_model_at_last=True, + ) + + # Evaluate + scores = trainer.evaluate(test_loader) + print(f"\nTest scores: {scores}") diff --git a/examples/adni_ad_synthetic_data.py b/examples/adni_ad_synthetic_data.py new file mode 100644 index 000000000..8a5946589 --- /dev/null +++ b/examples/adni_ad_synthetic_data.py @@ -0,0 +1,125 @@ +"""Synthetic ADNI data helper. + +Author: Bryan Lau (bryan16@illinois.edu) +Description: + This helper function creates an ADNI image record along with the required + directory structure and metadata files. +""" +import nibabel as nib +import numpy as np +import random + +def create_adni_image(adni_root_path, subject_id=None, group=None): + """Create test ADNI directory structure populated with synthetic data. + + Creates a directory structure for one subject, with the same layout as + the one obtained by downloading actual ADNI data files. + + The directory structure has the following layout: + + - root + - subject id + - pre-processing transform + - date acquired + - image uid + MRI image file + metadata xml file + + Args: + adni_root_path: Path in which to create the ADNI directory structure + subject_id: Subject ID for this directory structure, if None then a + random Subject ID will be generated instead. + group: Label to assign to this subject, if None then a label will be + randomly selected from the three valid choices (i.e. MCI, CN, AD). + + Returns: + Dictionary containing the following values for later comparison: + - subject_id: Subject ID of the patient. + - group: Label assigned to the patient. + - gender: Patient's randomly selected gender. + - age: Patient's randomly selected age. + - weight: Patient's randomly selected weight. + - image_uid: Unique ID of the MRI image. + - image_path: Path to the MRI image file. + """ + + if not subject_id: + subject_id = f"002_S_{random.randint(0, 9999):04d}" + if not group: + group = random.choice(["CN", "MCI", "AD"]) + gender = random.choice(["M", "F"]) + age = round(random.uniform(40.0000, 85.0000), 4) + weight = round(random.uniform(55.0, 120.0), 1) + date_acquired = f"{random.randint(1950, 2000)}-03-15" + + xform_str = "MPR__GradWarp__B1_Correction__N3" + date_dir = f"{date_acquired}_09_45_30.0" + series_id = f"{random.randint(0, 99999):05d}" + image_uid = f"{random.randint(0, 99999):05d}" + + # Create MRI image directory structure + adni_image_dir = adni_root_path / subject_id / \ + xform_str / date_dir / f"I{image_uid}" + adni_image_dir.mkdir(parents=True) + + # Generate test image filename and data + file_date_str = f"{date_acquired.replace("-", "")}{random.randint(100000000, 300000000):9d}" + image_filepath = adni_image_dir / \ + f"ADNI_{subject_id}_MR_{xform_str}_Br_{file_date_str}_S{series_id}_I{image_uid}.nii" + image_data = np.random.rand(121, 145, 121).astype(np.float32) + + # Generate group marking (to simulate image features) + mark_value = 10.0 + if group == "CN": + image_data[10:15, 10:15, 10:15] = mark_value + elif group == "MCI": + image_data[60:65, 60:65, 60:65] = mark_value + elif group == "AD": + image_data[100:105, 100:105, 100:105] = mark_value + + # Save the image + mri_image = nib.Nifti1Image(image_data, affine=np.eye(4)) + nib.save(mri_image, image_filepath) + + # Generate metadata xml + metadata_xml = f""" + + + ADNI + 002 + + {subject_id} + {group} + {gender} + + {age} + {weight} + + {series_id} + {date_acquired} + + + {image_uid} + + + + + + + + """ + metadata_xml_filename = f"ADNI_{subject_id}_{xform_str}_S{series_id}_I{image_uid}.xml" + metadata_xml_path = adni_root_path / metadata_xml_filename + with open(metadata_xml_path, "w", encoding="utf-8") as f: + f.write(metadata_xml) + + # Return test values for later comparison + return { + "subject_id": subject_id, + "group": group, + "gender": gender, + "age": age, + "weight": weight, + "image_uid": image_uid, + "image_path": image_filepath, + } \ No newline at end of file diff --git a/examples/adni_adclassification_cnn.ipynb b/examples/adni_adclassification_cnn.ipynb new file mode 100644 index 000000000..11bc15436 --- /dev/null +++ b/examples/adni_adclassification_cnn.ipynb @@ -0,0 +1,15364 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "bb258f71", + "metadata": {}, + "source": [ + "# Alzheimer's Disease Classification\n", + "\n", + "Alzheimer's Disease classification using the AlzheimersDiseaseCNN model on the ADNI \n", + "dataset, as described in the paper \"On the Design of Convolutional Neural Networks \n", + "for Automatic Detection of Alzheimer's Disease\" by Liu et al.\n", + "(https://arxiv.org/abs/1911.03740).\n", + "\n", + "## Experimental Setup\n", + "Access to real ADNI data was obtained and 3182 MRI image files were downloaded.\n", + "\n", + "This dataset consists of 675 patients, with the images split between the three \n", + "diagnostic labels (MCI/CN/AD) as 1687/937/558. Note the class imbalance, which \n", + "is addressed by using balanced_accuracy rather than the regular accuracy score. \n", + "We have also employed weighted cross-entropy loss using computed class weights \n", + "to attempt to offset the imbalance.\n", + "\n", + "Training is partitioned at the patient level (70/15/15) to prevent scan-level \n", + "leakage. Remaining training parameters are as follows:\n", + "\n", + " Optimizer: SGD, lr=0.01, momentum=0.9, batch_size=4\n", + " Epochs: 50 with early stopping (patience=10)\n", + " Monitor: balanced_accuracy (accounts for the class imbalance)\n", + "\n", + "## Experiments\n", + "Three experiments are performed here, which parallel the hypotheses described by \n", + "Liu et al., namely:\n", + "\n", + "- Width Factor\n", + "- Age Encoding\n", + "- Batch vs Instance Normalization\n", + "\n", + "#### Experiment 1: Width Factor\n", + "Tests the paper's central finding that wider networks outperform deeper ones.\n", + "\n", + "- Compare model widths of 1, 4 and 8.\n", + "\n", + "#### Experiment 2: Age Encoding\n", + "Tests the sinusoidal age encoding described by Liu et al. in Appendix A.\n", + "\n", + "- Compare accuracy with and without age encoding.\n", + "\n", + "#### Experiment 3: Batch vs Instance Normalization\n", + "Tests the effect of batch vs instance normalization on the model's accuracy.\n", + "\n", + "- Compare model using batch normalization vs instance normalization.\n", + "\n", + "\n", + "### Extensions\n", + "\n", + "The following extensions not covered in the paper:\n", + "\n", + "#### Experiment 4: Additional Attributes\n", + "\n", + "Test the effect of including an additional patient attribute to the model's input, \n", + "specifically gender. We will compare the model's accuracy under each of the following \n", + "scenarios:\n", + "\n", + "- Only age\n", + "- Both age and gender" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "b08a5f8b", + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import pandas as pd\n", + "import seaborn as sns\n", + "import torch\n", + "\n", + "from pyhealth.datasets import ADNIDataset, get_dataloader\n", + "from pyhealth.datasets.splitter import split_by_patient # New splitter\n", + "from pyhealth.models import AlzheimersDiseaseCNN\n", + "from pyhealth.tasks import AlzheimersDiseaseClassification\n", + "from pyhealth.trainer import Trainer\n", + "\n", + "from matplotlib.ticker import ScalarFormatter\n", + "from sklearn.metrics import confusion_matrix\n", + "from torch.optim import SGD" + ] + }, + { + "cell_type": "markdown", + "id": "3b96b5c3", + "metadata": {}, + "source": [ + "### Initialize" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "d2ad14cb", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "ADNI Root: ./adni_root\n", + "Cache Directory: ./cache\n" + ] + } + ], + "source": [ + "# Initialization\n", + "BATCH_SIZE = 4\n", + "EPOCHS = 50\n", + "PATIENCE = 10\n", + "LEARNING_RATE = 0.01\n", + "MOMENTUM = 0.9\n", + "METRICS = [\"balanced_accuracy\", \"accuracy\", \"f1_macro\", \"roc_auc_macro_ovr\"]\n", + "MONITOR = \"balanced_accuracy\"\n", + "SEED = 99\n", + "\n", + "# Path where the ADNI files are located\n", + "ADNI_ROOT = r\"./adni_root\"\n", + "CACHE_DIR = r\"./cache\"\n", + "print(f\"ADNI Root: {ADNI_ROOT}\")\n", + "print(f\"Cache Directory: {CACHE_DIR}\")" + ] + }, + { + "cell_type": "markdown", + "id": "c86c62e6", + "metadata": {}, + "source": [ + "Define an experiment runner function:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "aed1a8ac", + "metadata": {}, + "outputs": [], + "source": [ + "def run_experiment(samples, train_ds, val_ds, test_ds, class_weights, model_kwargs, batch_size=BATCH_SIZE, exp_name=\"\", device=\"cpu\"):\n", + " \"\"\"Train and evaluate one model configuration.\n", + "\n", + " Args:\n", + " train_ds (SampleDataset): Training dataset.\n", + " val_ds (SampleDataset): Validation dataset.\n", + " test_ds (SampleDataset): Test dataset.\n", + " model_kwargs (Dict): Keyword arguments passed to AlzheimersDiseaseCNN.\n", + " exp_name (str): Name for logging and checkpointing.\n", + " device (str): Device to use for computations. Default is \"cpu\".\n", + "\n", + " Returns:\n", + " Dict: Test scores for this configuration.\n", + " \"\"\"\n", + " print(f\"\\n{'='*60}\")\n", + " print(f\"Experiment: {exp_name}\")\n", + " print(f\"Config: {model_kwargs}\")\n", + " print(f\"{'='*60}\")\n", + "\n", + " # Create dataloaders\n", + " train_loader = get_dataloader(train_ds, batch_size=batch_size, shuffle=True)\n", + " val_loader = get_dataloader(val_ds, batch_size=batch_size, shuffle=False)\n", + " test_loader = get_dataloader(test_ds, batch_size=batch_size, shuffle=False)\n", + "\n", + " # Pass SampleDataset to the model\n", + " model = AlzheimersDiseaseCNN(dataset=samples, class_weights=class_weights, **model_kwargs)\n", + "\n", + " trainer = Trainer(\n", + " model=model,\n", + " metrics=METRICS,\n", + " output_path=\"./output\",\n", + " exp_name=exp_name,\n", + " )\n", + "\n", + " trainer.train(\n", + " train_dataloader=train_loader,\n", + " val_dataloader=val_loader,\n", + " test_dataloader=test_loader,\n", + " epochs=EPOCHS,\n", + " optimizer_class=SGD,\n", + " optimizer_params={\"lr\": LEARNING_RATE, \"momentum\": MOMENTUM, \"weight_decay\": 1e-3},\n", + " max_grad_norm=1.0,\n", + " monitor=MONITOR,\n", + " monitor_criterion=\"max\",\n", + " patience=PATIENCE,\n", + " load_best_model_at_last=True,\n", + " )\n", + "\n", + " # Retrieve scores\n", + " scores = trainer.evaluate(test_loader)\n", + " y_true, y_prob, _ = trainer.inference(test_loader)\n", + " y_pred = np.argmax(y_prob, axis=1)\n", + "\n", + " print(f\"Test scores: {scores}\")\n", + "\n", + " scores[\"y_true\"] = y_true\n", + " scores[\"y_pred\"] = y_pred\n", + "\n", + " return scores" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "7496f046", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Initializing ADNI dataset from ./adni_root (dev mode: False)\n", + "Using provided cache_dir: cache\\466bcd45-4d0c-51b2-8df9-f16f71654765\n", + "Found cached event dataframe: cache\\466bcd45-4d0c-51b2-8df9-f16f71654765\\global_event_df.parquet\n", + "Dataset: ADNI\n", + "Dev mode: False\n", + "Number of patients: 675\n", + "Number of events: 3182\n", + "Setting task AlzheimersDiseaseClassification for ADNI base dataset...\n", + "Task cache paths: task_df=cache\\466bcd45-4d0c-51b2-8df9-f16f71654765\\tasks\\AlzheimersDiseaseClassification_06d5c45f-c9ae-5777-90a6-76fe4c381637\\task_df.ld, samples=cache\\466bcd45-4d0c-51b2-8df9-f16f71654765\\tasks\\AlzheimersDiseaseClassification_06d5c45f-c9ae-5777-90a6-76fe4c381637\\samples_cdbbc602-34e2-5a41-8643-4c76b08829f6.ld\n", + "Found cached processed samples at cache\\466bcd45-4d0c-51b2-8df9-f16f71654765\\tasks\\AlzheimersDiseaseClassification_06d5c45f-c9ae-5777-90a6-76fe4c381637\\samples_cdbbc602-34e2-5a41-8643-4c76b08829f6.ld, skipping processing.\n" + ] + } + ], + "source": [ + "# Instantiate base ADNI dataset\n", + "adni_dataset = ADNIDataset(root=ADNI_ROOT, cache_dir=CACHE_DIR, dev=False)\n", + "adni_dataset.stats()\n", + "\n", + "# Set task and obtain samples\n", + "adni_task = AlzheimersDiseaseClassification()\n", + "sample_dataset = adni_dataset.set_task(adni_task)\n", + "\n", + "# Split data by patient into train/val/test (70/15/15)\n", + "split_ratios = [0.7, 0.15, 0.15]\n", + "train_data, val_data, test_data = split_by_patient(sample_dataset, ratios=split_ratios, seed=SEED)\n", + "\n", + "# Record all test data\n", + "test_results = {}" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "0159b981", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Train Distribution (2195)\n", + " CN: 600 (27.3%)\n", + " MCI: 1200 (54.7%)\n", + " AD: 395 (18.0%)\n", + "\n", + "Val Distribution (473)\n", + " CN: 161 (34.0%)\n", + " MCI: 232 (49.0%)\n", + " AD: 80 (16.9%)\n", + "\n", + "Test Distribution (514)\n", + " CN: 176 (34.2%)\n", + " MCI: 255 (49.6%)\n", + " AD: 83 (16.1%)\n", + "\n" + ] + } + ], + "source": [ + "from collections import Counter\n", + "\n", + "# Calculate label distribution in given set\n", + "def label_distribution(ds, set_name):\n", + " label_map={0: \"CN\", 1: \"MCI\", 2: \"AD\"}\n", + " labels = [int(ds[i][\"label\"]) for i in range(len(ds))]\n", + " counts = Counter(labels)\n", + " total = len(labels)\n", + " print(f\"{set_name} Distribution ({total})\")\n", + " for idx, name in label_map.items():\n", + " count = counts.get(idx, 0)\n", + " print(f\" {name}: {count} ({count/total:.1%})\")\n", + " print(\"\")\n", + "\n", + "label_distribution(train_data, \"Train\")\n", + "label_distribution(val_data, \"Val\")\n", + "label_distribution(test_data, \"Test\")" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "590fb8e2", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "tensor([0.3312, 0.1656, 0.5031])\n" + ] + } + ], + "source": [ + "# Compute training class weights since the classes are very imbalanced\n", + "train_labels = [int(train_data[i][\"label\"]) for i in range(len(train_data))]\n", + "counts = Counter(train_labels)\n", + "total = len(train_labels)\n", + "class_weights = torch.tensor([\n", + " total / counts[0], # CN\n", + " total / counts[1], # MCI \n", + " total / counts[2], # AD\n", + "], dtype=torch.float32)\n", + "class_weights = class_weights / class_weights.sum()\n", + "print(class_weights)" + ] + }, + { + "cell_type": "markdown", + "id": "99c6feb9", + "metadata": {}, + "source": [ + "### Test 1: Width Factor\n", + "\n", + "In their paper, Liu et al. compare model performance with varying widths and conclude that widening networks produces better classification performance up to a point. Liu et al. find that a width factor of 8 is optimal.\n", + "\n", + "We will determine our optimum width factor by testing values of 1, 4 and 8." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "90274aea", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Test 1: Width Factor\n", + "\n", + "============================================================\n", + "Experiment: Width 1\n", + "Config: {'width_factor': 1, 'use_age': True, 'norm_method': 'instance'}\n", + "============================================================\n", + "AlzheimersDiseaseCNN(\n", + " (block1): Sequential(\n", + " (0): Conv3d(1, 4, kernel_size=(1, 1, 1), stride=(1, 1, 1))\n", + " (1): InstanceNorm3d(4, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False)\n", + " (2): ReLU(inplace=True)\n", + " (3): MaxPool3d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=False)\n", + " )\n", + " (block2): Sequential(\n", + " (0): Conv3d(4, 32, kernel_size=(3, 3, 3), stride=(1, 1, 1), dilation=(2, 2, 2))\n", + " (1): InstanceNorm3d(32, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False)\n", + " (2): ReLU(inplace=True)\n", + " (3): MaxPool3d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=False)\n", + " )\n", + " (block3): Sequential(\n", + " (0): Conv3d(32, 64, kernel_size=(5, 5, 5), stride=(1, 1, 1), padding=(2, 2, 2), dilation=(2, 2, 2))\n", + " (1): InstanceNorm3d(64, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False)\n", + " (2): ReLU(inplace=True)\n", + " (3): MaxPool3d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=False)\n", + " )\n", + " (block4): Sequential(\n", + " (0): Conv3d(64, 64, kernel_size=(3, 3, 3), stride=(1, 1, 1), padding=(1, 1, 1), dilation=(2, 2, 2))\n", + " (1): InstanceNorm3d(64, eps=1e-05, momentum=0.1, affine=False, track_running_stats=False)\n", + " (2): ReLU(inplace=True)\n", + " (3): MaxPool3d(kernel_size=5, stride=2, padding=0, dilation=1, ceil_mode=False)\n", + " )\n", + " (global_pooling): AdaptiveAvgPool3d(output_size=1)\n", + " (fc1): Linear(in_features=64, out_features=1024, bias=True)\n", + " (fc2): Linear(in_features=1024, out_features=3, bias=True)\n", + " (do): Dropout(p=0.2, inplace=False)\n", + " (age_fc1): Linear(in_features=512, out_features=512, bias=True)\n", + " (age_norm): LayerNorm((512,), eps=1e-05, elementwise_affine=True)\n", + " (age_fc2): Linear(in_features=512, out_features=1024, bias=True)\n", + ")\n", + "Metrics: ['balanced_accuracy', 'accuracy', 'f1_macro', 'roc_auc_macro_ovr']\n", + "Device: cuda\n", + "\n", + "Training:\n", + "Batch size: 4\n", + "Optimizer: \n", + "Optimizer params: {'lr': 0.01, 'momentum': 0.9, 'weight_decay': 0.001}\n", + "Weight decay: 0.0\n", + "Max grad norm: 1.0\n", + "Val dataloader: \n", + "Monitor: balanced_accuracy\n", + "Monitor criterion: max\n", + "Epochs: 50\n", + "Patience: 10\n", + "\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "f03d77fbc9b045a8a01a9765962fdbab", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Epoch 0 / 50: 0%| | 0/549 [00:00\n", + "Optimizer params: {'lr': 0.01, 'momentum': 0.9, 'weight_decay': 0.001}\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Weight decay: 0.0\n", + "Max grad norm: 1.0\n", + "Val dataloader: \n", + "Monitor: balanced_accuracy\n", + "Monitor criterion: max\n", + "Epochs: 50\n", + "Patience: 10\n", + "\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "65230306b6a54dc390e0c2ea048bb255", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Epoch 0 / 50: 0%| | 0/549 [00:00\n", + "Optimizer params: {'lr': 0.01, 'momentum': 0.9, 'weight_decay': 0.001}\n", + "Weight decay: 0.0\n", + "Max grad norm: 1.0\n", + "Val dataloader: \n", + "Monitor: balanced_accuracy\n", + "Monitor criterion: max\n", + "Epochs: 50\n", + "Patience: 10\n", + "\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "4c245bbdf5a649e0b921592f5a513b4b", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Epoch 0 / 50: 0%| | 0/549 [00:00\n", + "Optimizer params: {'lr': 0.01, 'momentum': 0.9, 'weight_decay': 0.001}\n", + "Weight decay: 0.0\n", + "Max grad norm: 1.0\n", + "Val dataloader: \n", + "Monitor: balanced_accuracy\n", + "Monitor criterion: max\n", + "Epochs: 50\n", + "Patience: 10\n", + "\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "cd72c8b263a7472dbb5b281806b045e8", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Epoch 0 / 50: 0%| | 0/549 [00:00\n", + "Optimizer params: {'lr': 0.01, 'momentum': 0.9, 'weight_decay': 0.001}\n", + "Weight decay: 0.0\n", + "Max grad norm: 1.0\n", + "Val dataloader: \n", + "Monitor: balanced_accuracy\n", + "Monitor criterion: max\n", + "Epochs: 50\n", + "Patience: 10\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "171b937b53b243df854316911a4a9d9a", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Epoch 0 / 50: 0%| | 0/549 [00:00\n", + "Optimizer params: {'lr': 0.01, 'momentum': 0.9, 'weight_decay': 0.001}\n", + "Weight decay: 0.0\n", + "Max grad norm: 1.0\n", + "Val dataloader: \n", + "Monitor: balanced_accuracy\n", + "Monitor criterion: max\n", + "Epochs: 50\n", + "Patience: 10\n", + "\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "3cfda02bca284a2faf34789e4ada857f", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Epoch 0 / 50: 0%| | 0/549 [00:00\n", + "Optimizer params: {'lr': 0.01, 'momentum': 0.9, 'weight_decay': 0.001}\n", + "Weight decay: 0.0\n", + "Max grad norm: 1.0\n", + "Val dataloader: \n", + "Monitor: balanced_accuracy\n", + "Monitor criterion: max\n", + "Epochs: 50\n", + "Patience: 10\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "ce7dc0953adc453eabe59e47a9f0d0af", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Epoch 0 / 50: 0%| | 0/275 [00:00\n", + "Optimizer params: {'lr': 0.01, 'momentum': 0.9, 'weight_decay': 0.001}\n", + "Weight decay: 0.0\n", + "Max grad norm: 1.0\n", + "Val dataloader: \n", + "Monitor: balanced_accuracy\n", + "Monitor criterion: max\n", + "Epochs: 50\n", + "Patience: 10\n", + "\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "a53b445bb41a4c46b47a078310f07729", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Epoch 0 / 50: 0%| | 0/549 [00:00\n", + "Optimizer params: {'lr': 0.01, 'momentum': 0.9, 'weight_decay': 0.001}\n", + "Weight decay: 0.0\n", + "Max grad norm: 1.0\n", + "Val dataloader: \n", + "Monitor: balanced_accuracy\n", + "Monitor criterion: max\n", + "Epochs: 50\n", + "Patience: 10\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "af89c549fec44f77b7e3b3ea3a2333d0", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Epoch 0 / 50: 0%| | 0/549 [00:00\n", + "Optimizer params: {'lr': 0.01, 'momentum': 0.9, 'weight_decay': 0.001}\n", + "Weight decay: 0.0\n", + "Max grad norm: 1.0\n", + "Val dataloader: \n", + "Monitor: balanced_accuracy\n", + "Monitor criterion: max\n", + "Epochs: 50\n", + "Patience: 10\n", + "\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "bf74763f11264d05a622cd62f33db0ea", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Epoch 0 / 50: 0%| | 0/549 [00:00\n", + "Optimizer params: {'lr': 0.01, 'momentum': 0.9, 'weight_decay': 0.001}\n", + "Weight decay: 0.0\n", + "Max grad norm: 1.0\n", + "Val dataloader: \n", + "Monitor: balanced_accuracy\n", + "Monitor criterion: max\n", + "Epochs: 50\n", + "Patience: 10\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "31b4b6300d2e46e89015664748d46d9b", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Epoch 0 / 50: 0%| | 0/549 [00:00\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Balanced Acc (%)Accuracy (%)F1-MacroMacro-AUCLoss
Experiment
Width (1)50.4354.860.500.702.90
Width (4)40.2548.640.350.591.04
Width (8)40.6147.860.350.551.07
Age (False)33.3349.610.220.561.52
Age (True)42.2451.950.380.662.00
Norm (instance)48.2746.500.460.642.19
Norm (batch)47.0043.000.420.631.51
Only Age41.1546.690.330.591.09
Age + Gender46.6854.860.460.702.05
Best (batch)52.3652.330.500.723.27
Best (instance)55.1253.700.530.732.70
\n", + "" + ], + "text/plain": [ + " Balanced Acc (%) Accuracy (%) F1-Macro Macro-AUC Loss\n", + "Experiment \n", + "Width (1) 50.43 54.86 0.50 0.70 2.90\n", + "Width (4) 40.25 48.64 0.35 0.59 1.04\n", + "Width (8) 40.61 47.86 0.35 0.55 1.07\n", + "Age (False) 33.33 49.61 0.22 0.56 1.52\n", + "Age (True) 42.24 51.95 0.38 0.66 2.00\n", + "Norm (instance) 48.27 46.50 0.46 0.64 2.19\n", + "Norm (batch) 47.00 43.00 0.42 0.63 1.51\n", + "Only Age 41.15 46.69 0.33 0.59 1.09\n", + "Age + Gender 46.68 54.86 0.46 0.70 2.05\n", + "Best (batch) 52.36 52.33 0.50 0.72 3.27\n", + "Best (instance) 55.12 53.70 0.53 0.73 2.70" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Assemble data from experiments\n", + "results_rows = []\n", + "for test_name, configurations in test_results.items():\n", + " for metric, scores in configurations.items():\n", + " test_row = {\"Experiment\": f\"{test_name} ({metric})\"}\n", + " test_row.update(scores)\n", + " results_rows.append(test_row)\n", + "results_df = pd.DataFrame(results_rows)\n", + "results_df = results_df.set_index(\"Experiment\")\n", + "\n", + "# Rename columns\n", + "column_map = {\n", + " \"accuracy\": \"Accuracy (%)\",\n", + " \"balanced_accuracy\": \"Balanced Acc (%)\",\n", + " \"f1_macro\": \"F1-Macro\",\n", + " \"roc_auc_macro_ovr\": \"Macro-AUC\",\n", + " \"loss\": \"Loss\"\n", + "}\n", + "results_df = results_df.rename(columns=column_map)\n", + "\n", + "# Rename experiments\n", + "experiment_map = {\n", + " \"Normalization (instance)\": \"Norm (Instance)\",\n", + " \"Normalization (batch)\": \"Norm (Batch)\",\n", + " \"Gender (False)\": \"Only Age\",\n", + " \"Gender (True)\": \"Age + Gender\"\n", + "}\n", + "results_df = results_df.rename(index=experiment_map)\n", + "\n", + "# Convert percentage columns\n", + "pct_cols = [\"Accuracy (%)\", \"Balanced Acc (%)\"]\n", + "results_df[pct_cols] = results_df[pct_cols] * 100\n", + "results_df.round(2)\n", + "\n", + "# Display table\n", + "display_columns = [\"Balanced Acc (%)\", \"Accuracy (%)\", \"F1-Macro\", \"Macro-AUC\", \"Loss\"]\n", + "results_df[display_columns].round(2)" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "9633859f", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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8az3mTNnTnhb6fhQ4KfgUb97tI94unXr5mrVqmXLrfHROsbee+89uz927Fj7TLLKa5xR9kO89GkF3TpW1VChc5nOVZH02anxoGbNmnacq8FO21QNScrm0fGs57St9VyPHj1c06ZNY/5fWfms9Z46D+o8ogZEbW813Hh0DOl8p+MEAIBsFQJwwP7666+QDqcWLVrY/Ro1aoROOOGE8PP//vtvKG/evKGbbrrJ7hcoUCB01FFHpXmP/v3723t06tQptHfv3vDjc+fODeXPnz9UvHjx0MaNG8OP33vvvfb6a665Js37TJ482R7XbeTIkeHHV69eHSpatGioXLlyob///jvN34waNcpe37179zSP67HGjRtn6rNo166d/d2MGTPs/sKFC0O5cuUKNWrUaJ/Xvv/++/bamjVr2vJF2rVrV2j58uXh+7fddpu99vLLLw/t3r07zWvXr18f2rRpU4aWW5979GffuXNn+5vy5cuHFi1atM/frFixIs37e1555RX7u4EDB6Z5PKPLunTpUtsvmjRpss9733777fYe7733Xmh/9H65c+cOnXbaaTGf9/aV9u3b2++xbtpHIz3zzDP2Nx07drT7kyZNsvvajtHrpM9Tz51xxhmhHTt2hB9fsmRJ6LDDDrP9/Z9//gk//txzz9nru3btGtq5c2f4cf3tueeea8/Nnj17n+U/9NBDQz/++OM+6/fZZ5/Z83pdrOXq0KGD7U+eBx980B7XMdWjR480x9sNN9xgz40ZMyb8mJaxUqVKoSJFitjxGOmLL74I5cmTJ3TOOeekedw7Bm+88cbQnj17wo+/8MIL9vh1112X5vXaX9P7Sv7zzz/3eWzZsmWhsmXLhqpUqRLzfKT9en/0ueTLl8/2w23btqX72t9++83e9+ijj97n/9KtX79++/yNzkF6rmXLlmn2G21Hndeit9uBfNban6L3zUgXXHCBvS7WZwkAQKIQYAPZEGA/+uijdn/mzJl2f8iQIXb/u+++ixtg66JVF7oKSqIpiNbfv/rqq+HHKleubBeo0YGRnHnmmfsE2N4yRb5HpFNOOcWCoQMJsFeuXGnrcNxxx6V5XEGZ3uvXX39N83irVq3s8U8//XS/QYAuuIsVKxZau3btfpcjqwH2E088EcoMBWZqtIgMkDO7rLroVwPE77//nibIOOKII0JHHnlkmsAwngULFtjy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gwcAAAAAIDAp4j169HCnnnqqpYhfdNFFbtasWe65556zm+TKlcvdeuutbuDAgTZOWwF33759XdmyZd3555+f04sPAAAAAEhhSdWDXbduXTdu3Dg3atQoV6NGDXf//ffbtFydOnUKv6ZXr17upptuctdee629fvPmzW7y5MmuYMGCObrsAAAAAIJDnXuaCjhZJfvy7c/ll18err2Vk+bPn+/Kly/vtmzZErwAW8455xw3b948t337dvfLL7+4a665Zp8dacCAAVY1XK/55JNP3HHHHZdjywsAAAAg8bp06WLX/rrly5fPslfV2aYYIOgU66hT8eijj7YhrxUqVHDnnntumqGyfvbDDz+4Dz74wGaM8tx3332uatWq7tBDD3UlSpSwqZk1FDjSeeed5ypWrGidq6rfpSB92bJl4ef//vtvd8YZZ9h76KfuR8eaY8aMSfOYaoA1aNDAPfroo8EMsAEAAABAWrZs6f7991+bzvexxx5zzz77rLv33nsD/eEoKKxdu7b79NNP3cMPP2ydj8rYbdq0qevWrZsLgqeeesp16NDBFS5cOPyYOk2HDRtm6/vll1+6SpUqubPPPtutWrUq/Bp9Bu+8847V7VKgvHDhQnfhhReGn7/ttttcuXLl3Pfff28B+O233x5+7u2333a5c+d27du332d5unbtatNF7969+4DXjQAbAAAAQFJS762KHKsHVzWX1Ks5ZcqU8PNr1qxxl1xyiQVVhxxyiKtZs6YNN43UpEkT6ylV73fJkiXt/dRbGun333+3Hk/1jKpHM/L/8Cjwa9asmStUqJArVaqUDVnVcNXIHncto9KeS5cu7YoXL26Ztwra7rjjDvu/lYo8cuTIdNf5xhtvtF571aNSMKjA84QTTnA9e/Z0M2fOTPPa1atXuwsuuMDWXTWqJkyYEH5uz5497qqrrrKefy3z8ccf75544ok0f+8t8yOPPGIBqdZLQfyuXbvCr9mxY4fr3bu3bQNtj2OPPda9+OKL4ec1rXKrVq0sWC5durT1Kmu54tFyjR492nrkI1166aW2fdVrr/VVj7IKWv/4449panapt1lFsFW7684777TPxFteZUBremd9Flo33Zf169e7e+65xw0fPjzmMp111llu7dq1bvr06e5AEWADAAAAKUiBX7ybgqBEv/ZAKZD7+uuvXf78+cOPKV1cvb2TJk2y5xX0KsBTcBrplVdesbRhpRw/9NBDFvh6QfTevXtdu3bt7H31/DPPPGMBZSSNz23RooWlLn/77bfu3XfftaGq3bt3T/M69TorZfnzzz+3AFG97UpL1t/pva+//np33XXXuX/++SfmOirIU2+1glwtbzQF7ZH69+9vxaEVhLZu3dpqV+k9vPVSQK9l1Tjjfv36ubvuust6gCN99tln1hOsn/qcXn75Zbt5rrjiCmu0ePLJJy1gVRaB1/OswFWNDieffLKbPXu2LbumUNYyxaNl1fTJderUifuanTt3WqHrYsWKuVq1asX9rN544w0LtDWEQPRabRet+8cff+xOPPFEe1wNHPpM1UgQi7b9SSed5L744gt3wEIpZsOGDSGttn4CAAAAQb+23LZtW2j+/Pn2M9KECRPi3mbOnJnmtZMmTYr72q+++irNaydPnhzzdZnVuXPnUJ48eUKHHnpoqECBAvY5586dOzR69Oh0/65Nmzah2267LXy/cePGoUaNGqV5Td26dUO9e/e23z/66KNQ3rx5Q0uXLg0//+GHH9r/N27cOLv/3HPPhUqUKBHavHlzms9Ey7N8+fLw8h511FGhPXv2hF9z/PHHh04//fTw/d27d9v6jBo1Kuayf/PNN/b/jh07dr+fj153zz33hO9r2fSYlj2ebt26hdq3bx++7y2zlsvToUOHUMeOHe33BQsW2HtOmTIl5vvdf//9obPPPjvNY0uWLLG/0d/Gos9U23Xv3r37PPf+++/b55MrV65Q2bJlQ7NmzdrnNb169Qodcsgh9n80aNAgtHr16vBz//zzj23/ChUq2E/dnz59eqhOnTqhNWvW2LpVrlw5dN1114V27NiR5n0vuOCCUJcuXTJ1DMVCDzYAAACApKQxtxpPq95fpf5qrGzkGFr1nmvmIaWGKwVbPasfffSRW7x4cZr38XoyPUqHXrlypf2uXln1bGrqX0/Dhg3TvF6vUe9oZK/yaaedZj2lGg/sUWqzxvl6lDKtZfPkyZPH0rC9/zvaf3FzxkWul5ataNGiad5bKdHq4T/88MPts1GvcPRno2XWcsX6bPTZ67nGjRvHLVamnm+9t3erWrWqPade8Vi2bdtmqeZKg4+3vZWpoPH36gmP/qzUG/3dd99ZD7WWTT3s3uemoQITJ060ddTPww47zFLulZWgqZ6LFCli20tDAtQTH0lp9Fu3bnWBmgcbAAAAwMGhcbPxRAc/KjaV0deeeeaZLlEUNGrMr7z00ksW5Gr8r8YWi4qAaVyxpvZVIKvX33rrrZZiHMlLIY5cZgXHiRbr/8nM/62xw3r+119/zfL/5733W2+9ZUW+hg4dag0GCi71eUVX5k7vPRR0pkdj0DWW+sEHH9znuSOPPDLm3yjoVSCrbRSZ7h+5vXXTWGt9Htreffr0SfP3umlserVq1axxROOwoxtFROPhte+qkUGzUynI1vpqSIDS+VWpPTLl/JhjjnEHih5sAAAAIAXlzZs37i2yRzNRrz1Q6hnWGGIVq1IvqHz11Veubdu27rLLLrPgWwWyfvvtt0y9r4K0JUuWWLVyT3QxMb1GvbWRcyXr/9YyqXhYoqgXXmO91fMca15mjXnOKC2fxierB1djpBW0xutVjkeNFgq24xX/OuWUU9zPP/9sFb+9wPjY/7/FGkMuGussGhe+P/q/VWQtvecl1muUdfDmm29ahoOX7eAVQ9PP6NoBGsOvz+lAEWADAAAA8AVN7aSA3qsGrR5OFStTSrECKhUQU5GtzFDlavWGKgVdQbQKXd19991pXqPiYaowrtcoEFNatHo/VVBNaeCJpHVT8FevXj2bikrpzFo3FRmL1Usbjz4bFR5TyrwaHfr27WsF2jJDgbPW+corr3Tvvfee++uvv9y0adPChdJUOEw9v6rkrvdeuHCh/X9K5Y8OYD1KV1dgrqm4PGpMUOOJGjYWLVrk5syZY//n0qVLbZuLet41jZdSyPUa9UDr/1Wvc/TnopRxFbzT1G5eoK+U/ueff94+y1dffdXuR06Npv9L+8KBIsAGAACAr+iiX72G6gnTTfPbpvd4NF1Ma+omVSj2etPgD+oJV+VuVQJXUKbebAVr6vXVNtUUXJp2KjPUCz1u3DjrFVdQe/XVV7tBgwaleY2mwVLgqGCybt26NveyUuEV8CWaeuHnzp1r45E1r3ONGjVsGqmpU6faXM0ZpcYGpUJ37NjR1a9f36Y0U292Zun/1PrqbzW+WqnWXu+6xq2rp1zBtFKxa9asaSn6qnYeORY9mj5jVQD3qNFEafHetGRKO9fyqrFDY8S9bTB27Fj73HWca5iAxqCrd11juiNprLkaPlTB3aOp2VR1Xp+Fetgj5xRXlXQtv6b/OlC5VOnMpRDNpaaTqUrDqwgAAAAA/EWBtHrTooPjeI9HU5Ck9FRdD6qnUj1iQb62VFChnkfNh6xeWCCnbdu2zYJkNYJlplc+O2gsuHr7lU4e2aud1WOIHuws2F/rqCaPV3EAneDjUYEBtUZpIntNDp+Z8RQAAAQF36nICRrn2qhRo7hjRAFkr0KFClma9urVq3P8o1bFcaWnxwuuM4sq4lmkoDpW66hSjpTbr6p38WiciIJwjSNQNT9Vs1PrqTeWBACAVMJ3KrLCm5pHKb1DhgyxcZ3pPQ4guTRp0sQlA68oW6LQg51AqmKn8QRPPfXUPuMAIql4glpNFVxL69at3WuvvZbIRQEAwNf4TkV6Pv/8c/fjjz/aOFVN16MiTOk9DgAHCwF2Fql1VIP4Nbh+1apV9tijjz5qqQWaZy09ev6TTz5xy5cvtxZWDfDftGmTjQcCACDV8J2KzKpYsaL91Hy2KqikQkjpPQ4ABwsBdhbEah1VuX6V0Vclw/1RRUBN+q6qdkol91KXEjE/IAAAfsJ3KjJL1Ysja9eo+q/mro33OAAcTER0WRDdOqpS8moh1fhrVaAT9U5r7jVNWH/DDTfs8x4qc++Vydd8b+XLl0/aypMAAGQXvlORWZrjWFP5aFogZQJqSiMVS4r3uEfD+M477zy7bd261a7fduzYYdW/dR2m+YwHDx7MBgFwQJimK5PUOrpr1y6b281LC1e1cLXARw/aV/Adbx4+Bd5HHnmkneD1Gs31psnqAQBIFXynIgiYpgsIvu2ZmKaLHuxM2l/raDz9+vWzidivv/56u6+JzFXARfOuqcW0e/fumV0UAAB8je/UYE+/poKvmopH+vTp4zp27GjXP8ryy507txV7ffLJJ2OmcWu2lSeeeCJ8/59//nFnnHGGGzt27EFdDwDILHqwAQAAkPAAWxl+0VOaaoy0lwU4btw4d99999nsKvtTo0YN179/f+vkSDb0YAPBtz0TPdgUOQMAAMBB4QXXorHPuXLl2u/ffPPNN27lypU2dhpIdQsWLHBlypSxGYiyav78+VZ3QMN0kHikiAMAACBbpl/TcLp69eq5IUOGhGdN0eOfffaZ/f7BBx/s931efPFFG06n4rJIrNE//HtQP9ILax2Zpb+bMWOGa9SokWvZsqWbNGmSS2UabqG6TRpiISqyrGNqzpw5NhWwhq4qg8SjWYu6du2aJvujevXqNpORakn17ds3R9YjyOjBBgAAQLZPv+ZRALBkyRI3cOBA17t373TfRz1sb731lrvqqqvYQilMjSwKKrVfLVu2LEeXRfWTcsrixYvdxIkTXZcuXcKP3Xbbba5cuXLu+++/twLKmgrY8/bbb1u9g1hDKxR0jxgxwu3evfugLX+qoAcbAAAA2T79WjQF3Sr+umbNGleqVKmY7/Puu++6E044wXrcpMGQ6dm6pWbe2Thb3x+Zt3nzZgsUZ8+ebQXyXn75ZXfXXXelec3777/vBgwY4ObNm+cKFy7sTj/9dBvjL5qKTcWG33zzTRtqUKFCBesFVqON3kv7Z+T86aodcMEFF1j2hahOgB5TQeJBgwa5RYsWWaHiyZMnWyPRTz/95PLkyeMaNmxohfmOOeaYNMX57rjjDvfRRx/ZclSrVs0NHz7clS5d2golz5o1y9WpUyf8+scff9w99thjNtZXgXG0d955x9WqVcsCas8vv/xiPdGaKliBtxdga53uuece9+mnn8b8XM866yy3du1aN336dHfmmWeyayYQPdgAAABIGPU6RwYso0aNskrheiyy91FBiwLrkiVLpttzSe91alNQWbVqVXf88ce7yy67zL300kvh4FeUMq6AuHXr1u67775zU6dOtWEJHqVPax9UxXoFo88++6wF4Znxxx9/uDFjxlgVe/UUe/t5z549LfDX/6mAWMuh4NtrGGjcuLFbunSpmzBhghXz69Wrlz2vFO7mzZtbtfxIuq8gOVZwLV988UWagFwUcH/yySf2vh9//LE78cQT7XEF9t26dbMGhVjy589vRQj1nkgserCTaKxKVselAADgR9k9/pPv1eSafk1FzTp06OC2bdtmAYTGZCvd1St0dvXVV1shM6+YmYo5KZjJyDhtBJcaWRRYi8Zgaz9Sr2uTJk3sMfUqX3zxxVZlPjLolN9++80C9ClTplhAK9ofs5IWrn3YqyMg0WnXCvz1vAqIqeq9esxXrVrlvv3223Aj0rHHHht+vfZ3ZXCo91lT2mk4hXrgx48fH3c51HseHWA/8sgj7rrrrrOgXcG1GhCUSq9j58EHH3QXXXSRNQJoijw1Miiw9mgKYb0nEosAGwAAIIfmhm7btq0FB7oo1+NHHHGEjYuMvBD3KG30wgsvtMBV4yaVbvrcc8+5EiVKJOT9I6kX7ZVXXnHr1q1LU/k7IxTAqCcxFqXExvPCCy+kua8eywOplAz/UyOL9hkv3Ttv3rw2n7qCbi/AViB5zTXXxPx7Paf0bfUkH4ijjjoqTXAtv//+u6Weq8r96tWrwz3XGietAFv/tzI34mVonH/++dbDrHXTMap09aZNm6YpUBZNjVPRU0QpXVwNVR6lordo0cKOX6WwqxiaPkc1Tij41lh2j84JW7duzfLngthIEQcAADhINJZUF966KVCQa6+91i6AlUKqgFg9W7Got+nLL7+0v9W4T93X+NBEvb9HabBU7EYyUCCtxiTt6wqudVMDkdK11ZMtXoNSLOk9J8qkiEw3l127du3zukMPPXSfx84991wbw/z8889bkK1bZBG0/f3f6klW+rrSwvU36vG+8sor0/0bFQxUo1d6HnjgAeutVkXxadOmWU+7jud27drZ/Uha/uiGAxw4AmwAgaVWYPWAaIyRbrrwlJtvvtmeU1qiN5YqFrVGq1iIWqI1/kvjAHOyeiiA4FFvlMaOemnSmjpH0+7EEtk7rV5sjQHd3zzSmXl/L71bF+hKWwVykgJrpWUPHTo03GikmxqKFHBrXLUoLVpjoGOpWbOmfZcrpTwWBZfKkoicDzq96wKPCvOp0UpFxFQgTNkk0YGvlkvvpSA2HjV2afz0008/beurIDg96hFXNko8GmOuQP3+++8Pnye8BgP91P1IaqjTeyKxCLABBFqs3hylWKoXSClf+2s515go3fSlpZZuVQgFgKxSj5Uu+tVgp/GZ0XSOUS9zPGrkU4OherKUoho57jQR769U24ceeig8xy6QU5T2rKBV+7IauiNv6pXVd7Tce++9Fmzrp76rNY5ZY49FjemqVq+eYRXV0zAL9eJqXLbUr1/fHXLIIVaVfOHChRacKlV7fzQsQwX6NERDBdBUqVsFzyJdcsklrkyZMpYK/tVXX7k///zTet41p7dHgbkavTRdnV6/v15vpX7r76MDZVFPvLJVVIXc63E/7bTTrIddn4saK3Tfo4Y2FWDzxqYjcQiwAaScM844w5UvX36/r1Mrub54lMal3p9WrVq511577aAsI4DUmhta1HOsi/XBgwfHfQ+dj9RgqJ5mZdZoTGWi3l9joDW9VrNmzQ54XYEDpQBa38HFihXb5zkF2Crcpf1dY7E1nZsqdavxSftv5Fh/pZSrYf3GG2+0Y0aNSF6PtcZHv/7661ZITw1TCtSjh13EogZ3zc8+Z84cC/h79OjhHn744X2OVVX1Vt0DZZHo/YcMGWJjwiN52XH7Sw8XXYcoTV693tEU7Gv6r3POOSf8mNZl+/bt1pCgugsa8+3RuiqVfH+dDci8XKHogQcBt3HjRjtQNW6jaNGimf57qogD/qGWax3nOs1pyg59sUWONdLzatHWF3IsGheli1d9QapV+fLLL7cvYZ1HABy4VK4i/u+//9rc0F4RL1UC1gW7LpwzWlRs5syZFiyoxy4R79+pUycL0r0AQNWFNcWPqhonSxppMs6DfaDXlgeDgiz13lauXHmfIlnIWUrnVgOBGgsyQvNoqzFBc2tnlQJ6zZutHvvIXm0k5hiiijiAwNKFonpjNO5I46TUm5OZ6V5URVcXmKo+qgBbLekKtgEgs9RjpnORF9x6c0OLxjvr/v6Ca52P1EiolFaNK9VFuTfnbSLe/4033khzX5k7uujPbBXx7G44AYJA82QrTXvYsGFW7TujNCWX5pRX41lWh3Ko0rnS4gmuswcBNoDAUnAtqp556623Wm9OZujiUulVXrqYen9OOOGEbFlWAKk5N/Q///zjbrvtNruvKXq8YmZeRWJNA6SCTpovV8Hu3XffbY8rwD7llFNsXttEvT+Ag6d79+7W8KUx2hlJD/coRdw7D2SV0sX3N1Ufso4AG0Agpdebk5l0IM05qWImmuNSKeZeZU4ASNTc0OmN1hswYECaaYF0y673z8zfATgwKqaWkYJq8B8CbACBFK83x0uvmjRpklu+fLlV5FSKlQr/eFNmnHfeeXbTeDoVT1ExE/UW3XLLLXEvbgEAAAACbACBlF5vTmTV3VhVdD2qxqmpLQAAAICMYJquJKOqxscff7xVNdZNc/iK5ro89dRTbQxp3bp13c8//5zu+6jHTtMUZLYwCQAAAAAga+jBTkIKqqOnDVJKqyaPV1Xj0aNH289vv/027ntokvljjjnG5sIEAAAAAGQ/erB9YOXKlW727Nnusssus/saV7pkyZLwmNFo6t3W3L533nnnQV5SAAAAAEhd9GAnoSuuuMJSvOvVq2dVixVMH3nkkVaW35s6SNMPaQ676BL7qpp8zTXXuBdffNHlyZMnh9YAAAAczLmhH/nwt2x775l3Ns629waAoKEHO8l8/vnnNs+lUrsPO+ww17lz50z9ff/+/V27du1ctWrVsm0ZAQAAAL+477779hl+mYz+/vtv60j7/vvvXbKZOnWqxReanSWrJk+ebNtBM7MEGT3YSUY905IvXz536623WlGzChUquH///dft3r3berHVu63ea++1kaZPn27PDRs2zF6/ceNGK5ym8dqHH354DqwRktXIkSPdlVde6caNG+fOP/9820e0z23evNlO7o8++qgVyotl3bp1rnv37vY32lc1dZWyLVKlp+jCWkdm6/sDAHAwNBgy/aB+0JnNhlDNoVdeeSV8v2TJklbs96GHHnInnniiS2WjRo2y4aPXX3+9Gz58eLb/f7169XL33HNPOENWM7XoOlKFmJs2bWrbSdtHFIPUr1/fjRgxwjJyPS1btnR9+/Z1b7zxhrv88stdUNGDnUS2bNni1q9fn+bAOfnkk90RRxzhTjnlFPf666/b42PGjHHly5ffJz1cvvjiC7do0SJrAfvyyy9d0aJF7XeCa0TSPvH888+7Bg0a2H012lxwwQWWAfHDDz+4d955x77Utm3bFvOD0wlV++Zvv/1mY/4VmAMAACSagjJ1NOmmXlR1Np1zzjkp/0FrOKiCXsUL27dvz9bPQzHFwoULrQ6U5+qrr7aOGGXdbtiwwT3wwAPh54YOHepOO+20NMG1R9eXTz75ZKC3HwF2ElmxYoW1AKlFrmbNmtYb/eqrr4bn7dVNPdrqKVTvY+QOPmHChBxccviJ0nK0zzz11FOuQIEC9tiaNWvcqlWrXPPmze2+9jNN8fbhhx/u8/cqrqeiez179gw/VqZMmYO4BgAAIFXoWkXXGbopvVhFfFWfSNctnt69e9u1yyGHHOKOPvpo6yVVXaJ4lIF31lln2XDMYsWKucaNG+8z846y+V544QXrgND7VqlSZZ/rbXUyKNhXh1aRIkXc6aefboGoR3+vtOqCBQu6qlWruqeffjrN38+aNcs6LPR8nTp1rFc4I/766y/39ddf22eh9R47duw+r3nppZfcCSecYJ+fajkp89CjDj3NUFS6dGn7v2vUqOEmTpwY9/9766237PPSaz2//PKL1X3S/3/JJZfYffnzzz8t+B80aFDM91LWo64jIz+noCFFPInohBDvwNLc2DNmzIj5nA7eWJQaHtkjDohSv9WqWLt27fAHoi8YnXzVc33RRRfZF8+CBQuspzva/PnzLYPihhtusBNkqVKl3IMPPmhfEAAAANlFw9iU0aksTl1/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L7/80u6rl1Np5c2aNbMx2Ei+3vRSpUq5CRMmxHyd0tQjFStWzMbWg88SAHDwEGADQIoHY+3atbMbAAAADkzGJvMCAAAAAADpIsAGAAAAACABSBEHAKS87JyOzG9TkgEAgKyjBxsAAAAAgASgBxsAgBSaPvDCWke6VJGdmQlkJQAAYiHABgAfy+553AEAAJBxpIgDAAAAAJAABNgAAAAAACQAATYAAAAAAAlAgA0AAAAAQAIQYAMAAAAAkAAE2AAAAAAAJAABNgDAd0aOHOly5crl3nvvPbvftWtXd+KJJ7qTTjrJ1a1b102dOjXu306cONFVrVrVValSxbVr185t3LjxIC45AAAIMubBBgD4yt9//+2ef/5516BBg/Bjjz32mCtevLj9/t1337kzzzzTrV692uXOnbYdefPmze6qq65y06dPtyC7e/fu7v7773eu1DkHfT0AAEDw0IMNAPCNvXv3uquvvto99dRTrkCBAuHHveBaNmzYEPfvP/zwQ3fyySdbcC033nijGzVqVDYvNQAASBX0YAMAfOPRRx91p512mqtdu/Y+z915553u3XffdevWrXNjxozZp/daFi9e7I466qjw/UqVKrl///3Xlduz2+XKw1ciAAA4MPRgA0CCxwIfd9xxrlatWhYIfvvttzH/btmyZa5Fixbu+OOPt7HD7du3d6tWrWJbpOOnn36ywPmee+6J+fyQIUPcwoUL3TvvvON69erldu7cyecJAAAOKgJsAEjgWOALLrjAzZ8/3/3www+uT58+rkOHDjH/Nk+ePK5v375uwYIF7scff3RHH320u+OOO9gW6fjiiy/sM1dxMvU8z5w501177bVuxIgRaV7XvHlzt2nTJjdv3rx93qNixYpu0aJFabbhkUceSe81AABICAJsAEjgWODzzjvP5c37X6qxAu+lS5e63bt37/P3pUuXdo0aNQrfr1+/vgV7iO+GG26wdG59Trrp833uuedsO/zxxx/h182aNcutXLnSGi2itWzZ0s2dO9f9+uuvdv/pp592F198MR87AABICAacAUCCxwJ7nnjiCde6detwwB3Pnj173LBhw1zbtm3ZFlmwa9cu17lzZytups/60EMPdaNHj3YlSpSw5/v16+fKli3rrr/+elekSBH3wgsvuPPPP98aPmrUqOFeeeUV12LE93z2AADggBFgA0AWxwJ//vnncV/z+uuv21jg9F4joVDIKlkrGLzlllvYFpkwbdq08O9fffVV3NcNGDAgzX1lGegGAACQaATYAHAAY4Fl+fLlNhZY6ctKY3777bdd//793dSpUy0VPD0333yzW7JkiRVJi1X1GgAAAP7B1RwAJGgssB5Xr7WqXH/yySdWUGt/wbXGDo8bN87lz5+f7QAAAOBzBNgAkECdOnVy27dvt/HUJ510kt3WrFljzz3zzDM2HthLaVaBNAXoKnCm16kCOZCT08w98MADNnWcsim8x2LZvHmzTTN32GGHueLFix/EJQYAILmRIg4ACRwLrIJb8ajIlkcF0jT+GkimaeY0xZmqql955ZXp/m2+fPlc7969XcmSJV2TJk0OwtICAOAP9GADAJBi4k0zV69evZjTm0XT3zRr1ozeawAAotCDDRzEVEz1Cmm8raYI0jy9V1xxhVu4cKFdrGo+3jPOOCPm3y5evNh169bN/fbbby5Pnjw21vemm25i2yGljP7h35xehJSaZg4AAGQeATaQQ6mYd955p92fPHmy+/bbb2387V9//WWpl5GURqzn9PoOHTrYYytWrGC7Aci2aeYAAEDWkCKOpCuyo57dli1b2hRINWrUiHsROG/ePOvxrVq1qr1OvcPbtm1zfknFVLVpb0xu3bp1XdmyZd306dP3+XtN9aS/84Jr2d/UTwCQkWnmKlWq5GbOnGnTzI0YMYIPDQCAA0SAjaTt2f39998t+L700ktjFo4qWLCgGzZsmPv111/dDz/84LZs2eIefPBB54dUTFWV1jqVKVMm/JgudJUKHm3+/Pnu8MMPt8JDJ598svVm//nnnwdt+QGkzjRzAADgwJAijqTo2b3tttvS9OxqbuDonl1Vt42k3hePxiXrtUp9TCaL//j1gFMxd+/e7T799FPrZTrhhBNsqqeLLrrIzZ49O6HLioxrMGTfTINEmXlnYzYFcszAgQPtHLNq1So7n3bv3t1999131sinKeZ0PvYyb0488UR73caNG1358uVd06ZN3WuvvcbWAwCkNAJs+LZnN5J6r1944QU3ePBgl0x+mftNOBVTli9fbqmY/fv3d3nz5rX73rrqdRUrVtznPfSYeq4VXMvll1/ubrzxRvucosdrA8CBTDN3zz332C2WAQMGpLn/448/8mEDABCFFHHkaJGdeBdymbFz507XsWNHd/bZZ1v6dDJpcVHnuKmYGlOtniJRkbOlS5e6xo337b1s1aqV++eff+x5+eCDD1y1atUIrgEAAIAkQw82crzITlZ7dkW9uAqujzzySPfEE084P9F4cfVG6zPInz+/e/3118NBc2Qq5qGHHmqBeJs2bayieLFixdxbb72V04sPAAAAIAoBNnKEenAjC+o0adLE3XrrrTY/9DfffGMB5X333Zduz67GJqvwV8mSJa1XWJXI/ZSKqUrgH3/8cYZSMdU7rxsAAACA5EWADd/27L799ttu7NixVmhHY5RFY7qHDx+ew2sAAAAAIBURYMO3PbudOnWyGwAAAAAkAwJsAABSSHZOMydMNQcASGVUEQcAAAAAIMgB9pAhQ6xolQpfebZv3+66devmSpUq5QoXLuzat2/vVqxYkaPLCQAAAABA0qaIq3L0s88+a8WrIvXo0cNNmjTJvfvuuzZVUffu3V27du3cV199lWPLCuRkOiapmAAAAEDySLoe7M2bN1vhqueff96VKFEi/PiGDRvciy++6B599FHXrFkzV7t2bTdy5Ej39ddfu5kzZ+boMgMAAAAAkHQ92EoBb9OmjWvevLkbOHBg+PE5c+a4Xbt22eOeqlWruooVK7oZM2a4Bg0a5NASIyvo1QUAAAAQNEkVYL/11ltu7ty5liIebfny5TYncvHixdM8rimd9Fw8O3bssJtn48aNCV5qAAAAAACSKEV8yZIl7pZbbnFvvPGGK1iwYMLed/DgwTZe27tVqFAhYe8NAAAAAEDSBdhKAV+5cqU75ZRTXN68ee02ffp09+STT9rv6qneuXOnW79+fZq/UxXxMmXKxH3fPn362Pht76ZAHgAAAACAwKaIn3nmmW7evHlpHuvatauNs+7du7f1POfLl89NnTrVpueSBQsWuMWLF7uGDRvGfd8CBQrYDQAAAACAlAiwixQp4mrUqJHmsUMPPdTmvPYev+qqq1zPnj1dyZIlXdGiRd1NN91kwTUFzgAAAAAAOS1pAuyMeOyxx1zu3LmtB1uFy1q0aOGefvrpnF4sAAAAAACSO8CeNm1amvsqfjZ8+HC7AQAAAACQTJKmyBkAAAAAAH5GgA0AAAAAQAIQYAMAAAAAkAAE2AAAAAAAJAABNgAAAAAACUCADQAAAABAAhBgAwAAAACQAATYAAAAAAAkAAE2AAAAAAAJQIANAAAAAEACEGADAAAAAJAABNgAAAAAACQAATYAAAAAAAmQ1yVQKBRyn332mduxY4dr1KiRK1KkSCLfHgAAAACA4PVg33333a5p06Zpguuzzz7bnXXWWa5NmzauZs2abuHChYlaTgAAAAAAghlgjxkzxtWrVy98f/To0W7q1Klu4MCBbuLEiW7Pnj3uvvvuS9RyAgAAAAAQzBTxpUuXumOPPTZ8f+zYsa569equT58+dv+GG25wI0aMSMxSAgAAAAAQ1B7svHnz2lhrLz1cvdctW7YMP1+6dGm3evXqxCwlAAAAAABBDbBr1KjhXn/9dbdu3To3cuRIt2bNGht77Vm0aJE77LDDErWcAAAAAAAEM0W8X79+7txzzw0H0aeddlqaomeTJk1ydevWTcxSAvAFFTpcvny5y507t80i8OSTT7qTTz457uPRZsyYYcNLZNeuXTYbgV5boECBHFgbAAAA4CAF2KoWPnfuXDdlyhRXvHhx17Fjx/Bz6tU+44wzXNu2bbP69gB86J133rHzgYwbN8516dLF/fDDD3Efj1arVi337bffunz58rm9e/e69u3bu6efftr16NHjoK8LAAAAcFDnwVZRM92ilShRwj322GMH8tYAfMgLomXDhg0uV65c6T4e7ZBDDgn/vnPnTrdt27a4rwUAAAACFWDLzJkz3WeffeZWrlzpbrzxRlelShW3detW9+uvv7rjjjvOFS5cODFLCsAXrrjiCjsnyAcffLDfx6P9/ffflv2ycOFCq+ug8woAAAAQ6CJn6l1q166djb2+++67bZzkkiVL/nvT3LltzOUTTzyRyGUF4AOvvvqqnQsGDhzoevfuvd/Ho1WqVMnSxzVmWzMVaApAAAAAINABdt++fd3EiRNtrusFCxbYVF2eggULug4dOrjx48cnajkB+Eznzp2tx1ozDGTk8WjKfrn44ovdG2+8kc1LCgAAAORwgD1q1Cir9nvttde6kiVL7vN8tWrV3J9//nmgywfAJ9avX++WLVsWvv/ee++5UqVKWUZLrMdjnTf++OMPqx7uZcmoINqJJ554kNYAAAAAyKEx2BpzXbNmzbjP58mTx8ZiA0gNKl6mzBUVJlNQffjhh1uWy8aNG2M+7hUvu/rqq915551nt08//dSGm+j8sXv3bnfmmWdatgwAAAAQ6AC7QoUKVsgsnq+++sode+yxWX17AD5z1FFH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AAAAEGADAAAAAJAc6MEGAAAAACABCLABAAAAAEgAAmwAAAAAABKAABsAAAAAgAQgwAYAAAAAIAEIsAEAAAAASAACbAAAAAAAEoAAGwAAAACABCDABgAAAAAgAQiwAQAAAABIAAJsAAAAAAASgAAbAAAAAIAEIMAGAAAAACABCLABAAAAAEgAAmwAAAAAABKAABsAAAAAgAQgwAYAAAAAIAEIsAEAAAAASAACbAAAAAAAEoAAGwAAAACABCDABgAAAAAgAQiwAQAAAABIAAJsAAAAAAASgAAbAAAAAAACbAAAAAAAkgM92AAAAAAAJAABNgAAAAAACUCADQAAAABAAhBgAwAAAACQAATYAAAAAAAkAAE2AAAAAAAJQIANAAAAAEACEGADAAAAAJAABNgAAAAAACQAATYAAAAAAEELsAcPHuzq1q3rihQp4o444gh3/vnnuwULFqR5zfbt2123bt1cqVKlXOHChV379u3dihUrcmyZAQAAAABIugB7+vTpFjzPnDnTTZkyxe3atcudffbZbsuWLeHX9OjRw73//vvu3XfftdcvW7bMtWvXLkeXGwAAAACAvMn0EUyePDnN/Zdfftl6sufMmePOOOMMt2HDBvfiiy+6N9980zVr1sxeM3LkSFetWjULyhs0aJBDSw4AAAAASHVJ1YMdTQG1lCxZ0n4q0FavdvPmzcOvqVq1qqtYsaKbMWNGzPfYsWOH27hxY5obAAAAAAApE2Dv3bvX3Xrrre60005zNWrUsMeWL1/u8ufP74oXL57mtaVLl7bn4o3rLlasWPhWoUKFg7L8AAAAAIDUkrQBtsZi//TTT+6tt946oPfp06eP9YR7tyVLliRsGQEAAAAASMox2J7u3bu7iRMnus8//9yVL18+/HiZMmXczp073fr169P0YquKuJ6LpUCBAnYDAAAAACBlerBDoZAF1+PGjXOffvqpq1y5cprna9eu7fLly+emTp0afkzTeC1evNg1bNgwB5YYAAAAAIAk7MFWWrgqhI8fP97mwvbGVWvsdKFCheznVVdd5Xr27GmFz4oWLepuuukmC66pIA4AAAAAyElJFWCPGDHCfjZp0iTN45qKq0uXLvb7Y4895nLnzu3at29vFcJbtGjhnn766RxZXgAAAAAAkjLAVor4/hQsWNANHz7cbgAAAAAAJIukGoMNAAAAAIBfEWADAAAAAJAABNgAAAAAACQAATYAAAAAAAlAgA0AAAAAQAIQYAMAAAAAkAAE2AAAAAAAJAABNgAAAAAACUCADQAAAABAAhBgAwAAAACQAATYAAAAAAAkAAE2AAAAAAAJQIANAAAAAEACEGADAAAAAJAABNgAAAAAACQAATYAAAAAAAlAgA0AAAAAQAIQYAMAAAAAkAAE2AAAAAAAJAABNgAAAAAACUCADQAAAABAAhBgAwAAAACQAATYAAAAAAAkAAE2AAAAAAAJQIANAAAAAEACEGADAAAAAJAABNgAAAAAACQAATYAAAAAAAlAgA0AAAAAQAIQYAMAAAAAkAAE2AAAAAAAJAABNgAAAAAACUCADQAAAABAAhBgAwAAAACQAATYAAAAAAAkAAE2AAAAAAAJQIANAAAAAEACEGADAAAAAJAABNgAAAAAACQAATYAAAAAAAlAgA0AAAAAQAIQYAMAAAAAkAAE2AAAAAAAJAABNgAAAAAACUCADQAAAABAAhBgAwAAAACQAATYAAAAAAAkAAE2AAAAAABBC7A///xzd+6557qyZcu6XLlyuffeey/N86FQyPXr188deeSRrlChQq558+bu999/z7HlBQAAAAAgKQPsLVu2uFq1arnhw4fHfP6hhx5yTz75pHvmmWfcN9984w499FDXokULt3379oO+rAAAAAAARMrrkkirVq3sFot6rx9//HF3zz33uLZt29pjr776qitdurT1dF988cUHeWkBAAAAAEjSHuz0/PXXX2758uWWFu4pVqyYq1+/vpsxY0bcv9uxY4fbuHFjmhsAAAAAACkbYCu4FvVYR9J977lYBg8ebIG4d6tQoUK2LysAAAAAIPX4JsDOqj59+rgNGzaEb0uWLMnpRQIAAAAABJBvAuwyZcrYzxUrVqR5XPe952IpUKCAK1q0aJobAAAAAAApG2BXrlzZAumpU6eGH9N4alUTb9iwYY4uGwAAAAAASVVFfPPmze6PP/5IU9js+++/dyVLlnQVK1Z0t956qxs4cKCrUqWKBdx9+/a1ObPPP//8HF1uAAAAAACSKsCePXu2a9q0afh+z5497Wfnzp3dyy+/7Hr16mVzZV977bVu/fr1rlGjRm7y5MmuYMGCObjUAAAAAAAk2TzYTZo0sfmu48mVK5cbMGCA3QAAAAAASCa+GYMNAAAAAEAyI8AGAAAAACABCLABAAAAAEgAAmwAAAAAABKAABsAAAAAgAQgwAYAAAAAIAEIsAEAAAAASAACbAAAAAAAEoAAGwAAAACABCDABgAAAAAgAQiwAQAAAABIAAJsAAAAAAASgAAbAAAAAIAEIMAGAAAAACABCLABAAAAAEgAAmwAAAAAABKAABsAAAAAgAQgwAYAAAAAIAEIsAEAAAAASAACbAAAAAAAEoAAGwAAAACABCDABgAAAAAgAQiwAQAAAABIAAJsAAAAAAASgAAbAAAAAIAEIMAGAAAAACABCLABAAAAAEgAAmwAAAAAABKAABsAAAAAgAQgwAYAAAAAIAEIsAEAAAAASAACbAAAAAAAEoAAGwAAAACABCDABgAAAAAgAQiwAQAAAABIAAJsAAAAAAASgAAbAAAAAIAEIMAGAAAAACABCLABAAAAAEgAAmwAAAAAABKAABsAAAAAgAQgwAYAAAAAIAEIsAEAAAAASAACbAAAAAAAEoAAGwAAAACABCDABgAAAAAgAQiwAQAAAABIAAJsAAAAAABSNcAePny4q1SpkitYsKCrX7++mzVrVk4vEgAAAAAgxfkuwH777bddz5493b333uvmzp3ratWq5Vq0aOFWrlyZ04sGAAAAAEhhvguwH330UXfNNde4rl27uurVq7tnnnnGHXLIIe6ll17K6UUDAAAAAKSwvM5Hdu7c6ebMmeP69OkTfix37tyuefPmbsaMGTH/ZseOHXbzbNiwwX5u3LgxS8uwdfMml112b9/islNm1jk71zO71zWz25Z1TQz238Rg/40vVc6/qbSunH8TJ1W+V5Np/43+m1AolA1LBMBvcoV8dDZYtmyZK1eunPv6669dw4YNw4/36tXLTZ8+3X3zzTf7/M19993n+vfvf5CXFAAAAKlkyZIlrnz58jm9GABymK96sLNCvd0as+3Zu3evW7t2rStVqpTLlSuXSxZq/axQoYKdnIsWLeqCjHUNHrZpMKXKdk2V9RTWNZhSZbsm63qqr2rTpk2ubNmyOb0oAJKArwLsww47zOXJk8etWLEizeO6X6ZMmZh/U6BAAbtFKl68uEtW+sJIpi+N7MS6Bg/bNJhSZbumynoK6xpMqbJdk3E9ixUrltOLACBJ+KrIWf78+V3t2rXd1KlT0/RI635kyjgAAAAAAAebr3qwRenenTt3dnXq1HH16tVzjz/+uNuyZYtVFQcAAAAAIKf4LsDu2LGjW7VqlevXr59bvny5O+mkk9zkyZNd6dKlnZ8pjV1ze0enswcR6xo8bNNgSpXtmirrKaxrMKXKdk2V9QTgb76qIg4AAAAAQLLy1RhsAAAAAACSFQE2AAAAAAAJQIANAAAAAEACEGADAAD8/9SfAAAcCAJsH0iFL3yv1l4q1dxLhe0aKcjbNnJbptp2TaXtHblOQd7OQdx2+7Nnzx77+e6777qff/450NtXgr5+AJCTqCIOIFvt2rXL5cuXz35ft26dK1GiRCA/8a1bt7pDDjkkHKDkypXLpaKNGzfaFDq6rV692pUsWdLlzp07cMFJ0NYpWiruwzt27HBFihRxc+fOdTVq1HBB4Z13ly1b5jZs2OCqVauWEtta5yIdq99//73bvn27q1Kliv3UZ1G2bNmcXjwAAea7ebBTwZYtW9zrr7/uChYs6H766SeXJ08ed8opp7gKFSrYl0L58uXtsSB8KeqCRvOYa10XLlxoX34NGzZ0lSpVcsWKFQtUwJJK29XTo0cP26ZTpkxxRx11lDvyyCNt/evVq+fOPfdcu+93Tz75pPv888/tom3OnDnusMMOs3345JNPdieccII75phjLBgLelC2fv16d8EFF7hy5cq5L7/80uXNm9c+g8MPP9xVr17dnXXWWe744493fjV27Fjr3TziiCPcH3/8YY81adLEnXrqqa5q1aquVKlS9pjfjl9vv9T2++STT9yLL75o+3D79u3tGNU5yY/rlRW//vqra9asmatYsaILin/++cf17t3bffTRR3Y+2rZtm/v7779dgwYN3EUXXeQ6dOgQ2DmlH3/8cTdixAhXq1Ytu77QeqtxQeejk046ybVq1cqe8zI2gr5/Azh46MFOQp999pkbPHiwBZ81a9a01tcff/zRgk0FZPpSvOKKKwJxsT5x4kT36KOPuiVLltgX3qJFi9x3331nvQjNmzd3N9xwg2vatKkLglTarl6Dwm233WZBli7Yta4rVqywXk1tZ13U6eLu8ssvt15OPwagSit9+OGHbZuql15Blnq/Pv30U7dp0yZ37LHH2j7cqVMnF3QrV650L7/8sjUWVa5c2YIVNTgsXrzYetD02Vx66aXu4osvdn50xx13WOOQegDVMKQgWw1HS5cudXXq1HF33XWXa9u2rfMb77i78sorbd9VYH3vvfe6a6+91j3zzDNu1apVtu38dmxm5TN45513bJ0vu+wy+zyCQN8zOg7POOMMS31Xg4mO1UmTJtn+q+8fBeBXX321K1q0qC/Pw/EsWLDAFS9e3M4/ashes2aN+/DDD+38PH/+fGvEv/POO90555yT04sKIGhCSDrr1q0L/75ly5bw7x9++GHooosuCuXNmzdUr1690PTp0+3xPXv2hPxq6dKl4XVcsWJFaOPGjaE1a9aERo0aFTrjjDNCuXLlCrVp0yb03Xff2Wt2794d8qtU2q772+YffPBBqHv37qFTTjkldNNNN4V27doV8qt4yz537tzQlVdeGcqXL1/o9NNPD82ePdse37t3byiVrF+/PjRx4sTQJZdcEipZsmToqquuCq1evTrkN9u3bw//Hnke+umnn0JdunQJFShQwM5Vuu+X7ewt419//RUqWrRoaN68eXa/fPnydozKE088YdtOx22QbdiwIVSiRAn7zjnqqKNCTz/9dOjff/8NBdmyZctCAwYMCNWpUyd0xx13+Pr7dX+ij8dffvkldM0119hxe91114W2bt2aY8sGIHgIsJNU5BdddKC1aNGiUOfOnUNNmzYNff/99yG/27FjR9znPv/881C7du1CHTt2tIsBv/O2pb7sd+7cGejtGrm+CkKjL3B0f/z48aGaNWuGWrVqFVq+fHnI78er1jf6eP31119Dl19+uW3bzZs3h4Iscv+OFWB+9tlnoTPPPDPUq1evkF+3s7de2qcjt/VXX30Vuvjii21bq1HBD7x1eeSRR0Knnnqq/f7uu++GKlasGA44tM1q1aqVpoEhqLTOU6ZMCV144YWhQw45xAJubc+PPvrIAnC/H5Pe7/rpnbO0zmPHjg1VrVo11Lp168A1pOyvoUsN2uecc05o0KBBB22ZAARfMPKAAkYNH5EpWt7vSkfVTePDHnzwQXfiiSfaGKKvvvrK+Vn+/PltnVUMy6ts6v08/fTTXf/+/a2A1Jlnnmkpbn4vuuKN9fIKf+3cudPWV9t1yJAhgdmukfuuxuNu3rw5zXP6DM477zxLnVfa4rBhw9zu3bt9WcHYG6eq9dWYc4+2q8Yd33333TYWUsMAlK4YVN721rbVmF4dt+JtU41Z1j4+fvx4S63327bWdvbGaWqf1vp6x6/GYvfr18/9+++/7vrrr7exrsnOW5fjjjvO0t/l7bfftjTxQoUK2X2lEpcuXdqGdAS98rQ+Aw1N0lh7pf57w5datmxpw138fkx6x5se885Z2s6qnfDNN99YvYSZM2e6INF667pJ59/p06dbunxk1Xilzl933XXu66+/dr///nsOLy2AoGAMdhL7/wyDdMdDvfHGG1ZUSBeufvTEE09YURmNSY6ksVIah63g2zN06FBXt25d+0L0a5Ekre+8efNct27d3H333Re+yAnadhVvLJ8ubN588033ww8/2LrfeOONFoBE0sWsAu3zzz/fFS5c2PltHdV48MEHH7hXX33VxquqiM4tt9wSDlq817733nuucePG4YJYQeIVwdI2fuCBB6zBTOOw77nnnn3GXWt8ul6noNRP21lB8y+//GIFo1QsSftrNDUs6FjXOntFGpOdGgXUmKmbjlWNzdV5VgFJly5dLNBUEKagJN45y8/7rBr2VHhS66vt26ZNGyvw5vGK2qmmgl8/A52fNP5Y52MVXuzYsaN9n0bSMakGQL9+x8Y6ZlXYTIUoVexM1xl6/P3337c6Cjpve983OgY0XttrWAKAA0GAnWRf9Ao0ZsyYYYW9Ii/CvZ6D6GBbvSfqMVNxEr/59ttvXf369e0LTsGkil117tzZfr/mmmssQNFFrC7UFajowlWfgwpi+W27qtVcBb20XdWj+dprr7kJEyZYVXEVgVKFZfVuelQ0Szc/btdoulDVRZsKQKmRRAWEHnnkEbuY04Wteuz9eMEq3sW2CpmpAUEBo7attvNbb73l1q5da0XddEGr1+lYjQy6g8Lbz7Wd1SikBgYFa6oir8JR2vbTpk2zc5qOafX++iVQ0brpvKNlVTGoUaNG2XGp4l8qeKb9++abb7b1jTwvRzYO+oGOR62fihGqMKHWTcGYMoeef/55F0TePvj000/bOqoHV+djfSfNnj3bGoL0OWiGBz/Sd4gyD9RooO2oLCmdb1X8S1W1FWQqW+HCCy+0xoMgbttLLrnEAmlVFFf2jBr9vvjii3ChtxYtWjBlF4DEy+kcdfzHGxvVrVu3UPHixW0sVO/evUOffPLJPmPf5s+fb+Pk/O6ff/6xcX9333233Y455hgrtHPSSSdZoZk//vgjFJTt2qlTp9DVV18dflzjcatXrx6qX79+qHnz5qE8efKELrvsMl8X+4q13jNmzLD9WWNSNRZO23fOnDn23DvvvGMFzlatWhXyMxWsK1y4sNULkBNOOCH00ksv2e/vv/++FfX67bffQkHmjeccOHCgFUwS1RE44ogjrHCh9oehQ4face7XfVzn4UKFCtl+u2DBgtCPP/4YGjZsWKhx48Y2XlfnLG1vP+6/3vGq9Ro8eLCdn2699dbQK6+8En6dH4q2ZdVhhx0WevPNN+332rVrhx588EH7/YsvvrDiXyoC52e6rmjfvr39vm3bNivEp/XV46qBcfTRRwdy+2qdihUrFvrmm2/s/sknnxx68sknw0XOWrRoERo3blwOLyWAIGIe7CTh9UxPnTrVxt8qPVpjotTro1ZmzVl59tlnW8/Cs88+a6mmanX285Qa6qlW2qHS1pSWqCmqlIqn3qBDDz3UnXbaaTZ116BBg1zt2rWdH3nbRlOl9OnTJ/y41lO995q2S+MblVqscfVKZwtCT4I3tlPbVr25mg5F099oLmzNOyrqvVZPgqbw8nOvrXpBNC2VejC1PsuXL7ex5aKeLz2mlOkg83qilanhpU3ff//9lmqrc5mXgqneQfVe+2VOZWWZ6Dyl84/Sw3UO1vp59RM0r7B6yH777Tc7J3tDXZJ9/bzlmzx5srvqqqus51pjj5V5oGmLYn2vJPP6HMhn4E1Vpe2ofVTbUt+tonRhzQ2uKcv8RNleGqKg9WjXrp2lfOvYE2XQaL/VTdca6t1WT7c+Cz9fT8SirCL12usaSuupXnt9HlKiRAnL2tA+DwCJFpwzaQCogJdS05SypSBa6bTeOD6NGerevbvNI6tUNgWdQXD77bfbF6DmXVWhndatW9tcyRq3qYJBSrFVwOJnunhRMK2Ldfn888+toIoKqxxxxBEWaCpFXD+VkhkE3sW4gmldsCo40RzJuoj1gjGNCaxRo0aagjN+XEddvHnpwOPGjbNUTG94h+Zb1QWttrPfCnplltZPDYFqJNSFusbUq9FMvHGPKhblJxq32bBhQ2voe+qpp2w/VUAWuQ9oyIrWe+DAgdaA5D3uB5UqVbJj89Zbb7V1bNSokTWEKdDU+SgyRT5ovG2kgLJMmTL2Obz44ovulFNOcUcffbQ9p4BMwarfGj3/+usv227alhqyof34lVdeCRcd9GjMsfZvr9ZHkIJrrb+CZzV+qnDbmDFj7HtWDWbeuVrnbV13BP3cDCAH5HQXOv6XyqTULaUrff3112k+lk2bNoU+/fRTm6+ybt26oUMPPTQQH5uXlqhUcU1NpbmuNUWK0vU0nZHSToMwNZdoOiqlRyuNVGlpSqP15pkVpbAplTpoNPd327ZtLRVR66/URO3PEyZMCJUpU8ZSyP0+57dSnps1a2ZTjSmF+OOPP7bHp02bliYl0a+p0ZmxcOFCG/ah47lSpUo2FZ0ee+ihh0JHHnmkr+bZ1TlZKdPvvfee7b8a0qFz77HHHmtDAKKn2fNjanjLli1Dt912W2j06NE2VZOmQ9Q+XK5cOZvbe+bMmaEgipymSucjHb9K9z/uuOPCwztWrFgRatKkiX0+fjx+lyxZEpo8eXKof//+dg4uVaqUbdcePXrYlHKpQsMcChYsaN+9GvagIUl33XVX6JRTTgmfm/38/QMgOVHkLImp10Ct7JG9ISoWpFZXTSPilyJBGUnTGz58uE1LpQI7SrVVi3vQzJ0713qo1VOkqqbq6VMarQoieQV2lCoetDS9jz/+2Ka4UYaGevKVXqvpUFRNvG/fvi4ItF21juopUVGhChUq2DqqN1u9SHosVajCtooJ6XhWdoq2t1Jt77jjDstg8OP+rSJJmq5JhRnVE//ll19a8UWlVV999dX20y+87w2dg1566SUbvhJp9OjRVjlcvX8q9KXebU2p5vfvGo+2m5fi79EwD6XKq/BV165dbb/VTA7qydZnVLZs2aRP+49Hy6308O+++872W30PLVu2zHpydT7WeStIsxrE2k5ad52HVXBRx7J6rbVfK8Mmlc7NAA4eAuwkuSBVqp6qS8cLmnVRqnTpKlWq2DylGgvoxy/8yHWNvtDu1KmTVejVVCmRFXn9KnJdo7eVvuSVIq6gU+PArrzySnfXXXdZOpsft2s0bVuNJ/dSLUUNCgpONB5blVuVVqvt7+f11cWqLsY1jlxznGtMqxqJVGFaNQS8FGk/r2N6vGNYwacqE9erV88qbCsVVTUkZs2aZfUUNO5RQYpf10+V4DVURzdNIagaCprtQce4bhq6oxkB/ERTBaoRSA1gopRwjY9Xg5/GYSudf/78+TZFl4Y6+C1NOh59t6jxQI09kdMgbtmyxRp2R44caeNzVTtC52g/VhD3riMUWHvXDToOlQav41S1EnR8KuBWnQxvaEMQeOfau+++22Zv0HZWA5/OyaoKryFb6qTQcwCQXQiwk4BaUhWMaHofryBQvAtyjd31y9yxGV3XyEYFFSXRND5+m+Imo+uqC3ZtW62vntOFusb/6QIoCC3p3rZUT7ymvlFPpi5ivceDkHXhUdEc1UvQ+imw1HGpICS6dzaowbV421MNROr9U6E+FU8KAi+4/vPPP61GhKbRi5wbWQGpxucqWFEQpvX207ZWAU0VuVLPnqZHjNymmh9ZxSbVcKCGImWbqGfX77SPDhgwwBoW1CikMcgqWqfaH149CFEDkWon+C3TInrfVZEzNQD27Nlzn4YCNQhq31ZGVVB4662GIWUPKUtD02MCwMFGgJ0E1KqsizcFXErFiy4EFD0Htp+DlP2ta+SXpB9TSTO7rpH8vr6R66Bq91r3Xr162b6qVHCl56mnRMX7vGrLfqZifI899pj1BCnlUj20derUsR4ypSAqc8EvwdaBUFCpBiRVW1ZWQuQ5SnPOStWqVZ3feD26119/vfUEqtFImQqRjUXqFVMDmV+pkKTWS0GWgmr17I4fP94qomvYgxo6FZhNnDjRGpGCQMGzjldV91fWgYrxaR217mpA0cwWfsy28HiNPGpMUEaUeql1Po48P6txUMesH3vn0+Mdm8rOWLp0qe3HkZ+JshRUyE6zAqjhCACyi7+v5gNC6UsaU60WV7WuK1VYlaaV2iX6QowMvPwaXGdkXcVbV78HmxlZ10h+X19vHXRhrp559YppXx02bJgF1xrjqIuexx9/3G3fvt35naZXUw+9LtB10aZGA12w33DDDdbj56XeBpVXeVfrqSrp6r3XBa6XoSHaD9TzqYt9v1Fw7Y3P1fb0ppPz1k2VtlU7QeM7/brt1ACmxi/15Gr4hraVenZ1vGpGC+3X6skNSnAtSvPXvqpsKVWAV20A9dTrM/AybtSrrQDcj7xtqyrZajRQcB3dSP/TTz9Z44qGAwSJd2yqASW6EVefgdLkVRsiMvAGgOzAPNhJQCd+XcRoaipNzzV27Fi7aNUXo1qYVfxKvQu6SFXwojl2NTWQH7GuwdyuulDRTRdwurhRmr96C9S7q2JBmmLupptusnXXnLt+biSKRdMb6da/f3+b9kZj7NV7JH5KG84Mb53U26fGJAUsakyKpMYkpaJ605T57XNQg5CWXT3VogYErYP2c63zCy+8YPUwkp332Xs/vd8VRKvhS0MdtJ2UTqygSz3Xqi+g+hBKjw8KrwdXQ600bZXW0TtOdQ7Wd68CT/XueoXQ/LbfekG0xpEri8rLrokcnqTaH8qs0nYOQuZUNM37/dBDD1mxPo219vb5DRs2WMOJtj0AZCdSxJP0ou7NN9+0MXKiCx+ldCmtSfMKqzdFxbOCgHUN1nbVBZwuYnTBrp5dNSJ07NjRDR482HoPFFyrMrEKnvlxqIN3Map0aF2EqyFBRb0iaT5kPa7PIBXoIv6cc86x8cgKTjSPsKqoq9ibirzpc1Avqd8u5L3l1Too+FKhr8j9XL1g1157bTj4TlZegKhGH9V50Phj9dzqeFSgpaBax6F6rlVNWlW2NcTBGwahQC0INTEiPwsVblN2kQLt6OBZDYFK+1eRLD/TfqnzkApK6rjUkBXRcaljUuunANRvDQgZobHll112mTWOXXPNNTY0ad26dVYgVoUolVkDANmJADuJeOlKkV92an1WqqK+KNTTqZ9BwLoGZ7tqjJ8q0yrIUtq0R2M7dbF++eWX2wW6eg5UDOuRRx6x6eb8GGCL1klBidZVPSUay3fiiSdaT5gyUdSjqcyEQYMGBfLiNRY1ACo1Xhf1Cs5UaVtpqM2aNbNeXqXf+nn/ViVi7cMqmKTCYFOmTLHeTt1X1kKy78vKJFCApWKKCjbUQKRgWvdVRVoFvrSfKgtBaeNKlQ4ybVMVNrvvvvtsv1U2gkdBp45tFezza6OQsofUgKJMODVq6rykxk4dh5pKUOcqVb8PKp13VTdADXsKptVwrWsp1RpQw4Iybfy2bQH4CwF2kn456OQf64ItaBfsrKv/t6sq1KpXQEGnLtQ1vY1uGuvoUe+mxmIr6HrrrbecH3kXZJrmRdO9PPfcc27MmDHWQKIxnZqSTCm1upDTFE7qxfXzds0sZdoo6FTwogBFn4eyF5SG7KfPwStupinG1OurRgLNFf3yyy9b9oWCUPVwar/X2F1NO5fsPvjgAys6qAYuNRboWNV+unz5cptCTRX/tQ8rlVhjzRV8Bz0Auf/++22suRpMtI3Vu6+UcdXL0OelhjO/fgbqtVXjgbanMuGUTaRCfWr4UhFGzd2uLAa/rl9m5jlXoUU17ipTTOckPzf2AfAPAmwAB+Svv/6yVEsVj1FPtoIS9cirMJJ6c+vXr2+v0+NKJ1ZPih8v7LxeSl20qhK6AhVRj5BSD5WWqJ4h9Yz5dZ76jPDWSxeymqJKvWRqWNHYc7/WEIhFlc8ViNx+++12X40q6glWz6B6s6OHBiQ7TReoBhBN3dSpUyd7TFXw1XCgRoNU4Z17lDKsea9VyE2NQ2o00TbW3Nd9+vRxfjseFy1aZNkJGsqg848aiiJp3bzpIoO6TbXuqvmh81Ljxo1tPw9SgT4A/kGAnSQiL8aDemHuYV2DSz246jH59ttvLfBWUKreMvUQKZ3aj9M1RdJFuQJJpR8q7dCrNO3xY8NBVnt4H3jgAQvO1KO/evVqW+/mzZvb2EdN16Ve7OjPJ9mpt0vzP2u6JvVQKyhRem00jWNWY4J65/1CDSLaXqqHoOEcmiNYx6Oq/fspoDxQOkYVUEf2ZKoSvLJsVAtDPbt++h72llONQaoVoEBbQ1bU6Bftt99+s0Yibzq9IPDWX+cg7c8qpKmx5+q11nhzZWYo7V/DOfQ7ABwMBNhJzi9f8onAugYnzV891erZVa+2esd0YacpY0aNGuX8xAuYlTqq4l26YFNgojHkCsK07gpcdIxGpiWmAvX4qcK00qQ1hlXp8pq2Sunx+tw09lrj7/1EY6uVLq39VuNY1Vig6v6aw97bv1X466yzzrKsDT8F2B6lCyt9WPu11lOZF0GbDzle9olS/F966SXryVcGgop9KfjyCoD5udFLQ1Y0a4MyFZRRovOtGgO1r+p3UXaNGga1jwfl+9Zbj4cfftimmlMDr/ZtTQWpIUlqaNBNjQ8qwBnUXnwAyYUAO4cv3HXCV2+YWlv1JagWdBUJUoptMhfNyQzWNZjbNRbNDaztXa5cufBjGqOsquHq0VRPdrIXhIpFacEqlqNK7yoOpLTD4cOHuxNOOCH8Gq23Nx1M0KnitMbzajy9xutGUk/SM888YxfzapTw24W8xqmq8UTHqrapeqsVSKt3vk2bNpYSrwBNF+9+zVjQmPLbbrvNjk01igSpRzMWbztpuIoyEtRApv1UjUI6ruvUqWP1AjQPuKqm+5UaTJT2r/VUDQHN0qEsEg1dUc/866+/bgGozlt+Oy73Z/r06XZTxfRous7Scazt7NdjFoC/EGDncCEOpXWpKJAKrKjojKgCsVL4VJRDLet+L8rBugZzu4oXLKuH+qmnnrLeal24KS1cPSe6kPXrBat3AaoeL1WK1oW4eolUMVtBtnpI1FOkYEyFotSjG3Te9lYVan0WKpikaY08QbloV0+g0mzVu6tg1CtuplRiNSioYJ96tf28vjpmlQav/Vn7t3rr/bw+GWn8q1mzptWJ8BqFlKWgbavMGu3PSqHXtGx+zSJST7a+b9UgpAYEZZPopqEPqoGhwm3KOgnKdvbWQ+dmZdLoGkoF6nTsRr8GAA4mAuwcnp5KFWiVvqSLNdGXg4quKOjWeE/Nh62iNH7EugZzu0byegM016oCLwWbukhVGq3uq+dXvfeaL1jBmB+DSTWIqKCZV+xK208X6RpnrkBMAYp6SFQ5Xb2BqUBjGRV8quCbpr1RQ4p+97t4vVsas6uLeI03V4ptUIq5KSC79dZbLYtKPXxBHObgHcc6RjVFoBrDNE43elsrIFUvr997N5WVoO0Y2bCpwFM9934bX55RaiRRY5H24Z07d1qwrUrqkYE2ABxMBNgHmcZH6YutSZMmloqoKUF0Ue598UWOYVWg4ucLV9Y1mNvV412k/f3335ZyqF4STU2l1FqNh1MwojlYVTVcaYtKr/XbhZ0KAmnaIlUW1oW5eoAipx/TuL6ff/7ZUhMVeKkhwY8p8JmlbasUVJ273nvvPdumakxS79+pp57q26wFUer3pEmT3Pz5820ogBrCIud3DwovwNRUXaqXcP755wc6fVbpwaql0L17d6ujEK8h2G+8843Ovxq2oswEBZkq+KWGT513g9hwEk0Nnxq6osZsDV1RvQx9L2m/VuOoH6bTAxAcBNgHmcYlenMGq5VVPWDq9VPlWu/Cxm9BSDysazC3q7cuumndnnjiCUuZ1oWNesLUI6aLPD2n9VdwoirFfrpw9wINVVxW+qx6p3UBp3VR0KX098jpX7xiZ5q+KUjbOZbo9VPv7oQJE6zhSNPknHnmmVYszI9BihoNlPKu9H/1cr766quWhaFiUddff70N8dA29qNUaPhJr0FIQbUyiD788ENr3FT1dI25VsNYEI5H1bfQvqmGLmVLKSVcdM5S48INN9yQpmZEUOnzULaCGspUK+HZZ5+1uglqHAWAg4UAOweo59ob76WUJlUz9aaGUeqlxuYG5QKddQ3mdo2kMcq6cFVlWqVgqudAwx60riqkpAv7xx9/3FeBp7esagjTmEVNMaYGBKWFaxocBeCac1aPKxvF79OPZYa2p3rIdDGvwCWyR1+fjY55FTfzU2+oF3yqYrgyLhSgDBw40C7QFYTdf//9lkKsQpS6cPfTdGqaE1jDHOLx03GZiP1WGSfvvvuuGzdunA1zUNB5yy23WNE+v/GOMZ1zGzVqZOujjBt91+h8rONR+7EaFHTNoYbCoIjcb/X9o2wjZc+op9rrsdfno/ORjmkAOKhCOGj27t0b2r59e5rHfv/999Att9wSKlmyZCh//vyh5s2bh5555pnQTz/95Ostw7oGd7vKiy++GDrnnHPCj69du9Z+jh07NlS8eHF7/tNPPw0deeSRoXfeecee27NnT8hP6zhnzpxQrly5Qlu3bg0/p9+nTZsWGjBgQOiCCy4INWrUKFS9evXQhx9+GAqy3bt328/vv/8+dPPNN9s2Pv7440O9e/cOffDBB6HFixen+Zz8SPun9teZM2fa/ZNOOik0YsQI+33QoEGhDh06hObOnRt+rV8cfvjhdqz++eefvlv2RNq2bZt933pWrlwZ+vjjj+047tWrly8/G295+/fvH7rwwgvt99dff93OSZ6uXbuGhg4dGgoinauvv/76UJUqVUJlypQJHXLIIfZdq+N20aJFOb14AFIYAXYOueyyy/YJtj755JNQu3bt7KLe+7IMAtY1ONvVC7ROOeUUu6jzLFiwILR8+fLQ5s2bQ9dcc40FJ2pcOP/880N+9corr4SuvPJK+33Xrl37XHzrAv29996zgHPNmjVpgvOg8dbr9NNPtwvY2bNnh6pVqxYqWLCg7dd6vE+fPr5uQPruu+9CzZo1C/366692cV65cuVwQD1v3rxQ06ZNQ6tWrQr5zYwZM0JnnHFG6NJLLw1t2rQplCq84/Xff/+1c9XJJ58cqlevnjU2RH8OOr79fPw++uijdt6V2267LXzekuuuuy507733+nr94n0Pvfrqq6GqVauGpkyZYo1/BQoUCLVt29YatcuXLx9q2bKlfScBwMFGgH0QeF9qS5cutZ8LFy60i1K1qO/YsWOfXm29/p9//knzt37BugZzu0YHlrlz57ZeS89pp50W7sXVfj5+/HjrAfYuZP3WM6Ted9F2jOa3dTlQ3r6q4LlEiRLhbAX1jP7www+hqVOnhgPt0aNHh/xKx+vkyZOtsUjHaZ06daw3UB5//PHQscce69tj9/PPPw/VrFkzdOKJJ1oGRirwgrCLL77YguqRI0da41CbNm3s8SVLloTGjBkTmABs2bJl9vOFF14IHXHEEZZN9OWXX1pDpwJQv+67sXjnYGUQeQ29yhg799xz7Xc9pgC7e/fugVpvAP5BgH0QeCd3nex1kaaLHPWURL9Gt7///tt6xfyKdQ3mdo1OR6xfv374cfUcKDVPPUVBoIYBpT/r4tvr2YoVVGu7pkKw7R3TAwcODLVu3dp+f/vtty0NdcuWLZYa3qNHj9A333wTCgo1rHTq1MkaEbQvVKpUKTR8+HB7zq/bXL3vHTt2DNWtW9cCr1Sg/bNQoUJ2TMtxxx1ngbbMmjUrdNFFF9lPP4sOHlevXm2ZUieccII1iCl7KojUeKuGXa/BSNdVb7zxhv2u79suXbqEG4EJsAEcbP6oQONzKsSh4ioqiNSxY0c3b948q7KseYHvu+8+K5qj1+imYjqvv/56mulD/IR1DeZ2Fa+gjKZf03Rc3333nd0fMWKETTtWpkyZcHElv66jllsFulQJXUWCNF2TeMW6VChJhXPE27ZB563j0UcfbQXdREWVVNhNn0ehQoWs6raKNvrdli1bwgXcXnnlFTuOVaTwoYcecldffbW9JtkLt3n756ZNm2xOZFGBNm1HVVTWFGpaJ1VIDyrv/KPiV9pPdUyrQrwKXqkSvKg6/IwZM1z58uWdn2l/VSV/zQWtAm6lSpWy6bpUnFEzlqgIpfj1nJwezcQi69evd4ULF7bzkPeZjBkzxraxpMJ5GkByyZvTC5AqdMHWoUMHq0Kr4FpTWOkLX9NHaM5GVSQ+7rjj7AtRAYyfsa7B3K66SNHUL9WqVbPp5TTnsaY+0XqqAcELTFS52K+8C7EuXbrY/MBqENO0U5pmTFV6o6c5SqULt0suucQCa2nQoIF78803raq6qvfqd1Vm9mtVas0DrUr3W7dutenWTjzxRHf55Ze7G2+80VfV0MX77NVI9P3339tc7freWbFihdu2bZurXLmyHceadmzp0qVW6d+vU4/t7zM45phj7LykSuo6/2oqK1XZFjWeqeL0kUce6btt7FWI1/bVNIlaNzWA6ftG21rbVtcbkfx2TO6Pgmkdn2oUUyCtba0pFdWYpG2rafZKliyZ0tPTAcg5TNN1ELRo0cKmAtE8lFWqVAk/ri+CX375xb4k1Rv4119/WcCiaTX8inUN5naNpuBTQdV7773nfvjhB3f88ce7xo0b2zQpCk7Uwx2Ei3Ztv7vvvtu2Z7ly5Wwd27RpY9O+LFu2zKaoUs+J1lc/g8ZrNNH0a+q91ny63vZXADp16lT7LPSZeD1lfuEFVco0adWqlU2lp/O0Hl+wYIFNQfbUU0/ZhbofqGHAm55IAZh63xVMK4hUIK0ATOurXtxatWpZI5m2q/ZvzQkdVAMGDHCjR4+27Txq1CjLtlE2kXp5r732Wvte9gJWv+27mp9d5x1N86nHtE3VuKt1eeONNyzoDIrIhjtlAT7wwAO2Hb3gWQ1IvXv3tukUNd2eGphq1KjhywY/AAFw0JPSU4wKqNx4441WVblIkSI2dlVjwDZs2LBP4SiNF/P4ccwQ6xrM7Rpd+Cva/PnzbZobjflT5eUGDRpYBW4/ixxfrYrSKnbVrVs3WzcV9NJ6qkKtCum8+eab4YJKQRK5r+bLl88KmkX766+/Qj/++GN4/f2yf2t5vWW96aabrDiSd19jOzVV11lnnRWqUKFCuHhUstOYcVUKV0GzjO6Pmm5O45J1ngoqFa9TFW1Vm86bN69N6aTp2O6///7Qzp07Q34SWXRRMxeUKlUq9Mcff6R5jWphaF01fZVfjsf98c7FqvAvqpiuauGibejXuggAgosA+yBQ0KU5SN99991QkyZNrNpu0aJFQ61atfJ11d1YWNdgblev8JfmtFbhL2+e8+gLOAXhmppLBcIkSBc+2rdVQEjrraBShXREVeODxNumDz30UOjss88O9ezZM3TMMcekeV4X+t62/eKLL3y1nRWY3HnnnaGvvvoqtG7dOivQ9thjj+3zOjWsqNFI520/ePLJJ236vDx58lgxzbvvvtumF4uczSD6eJ0+fboVwgoSBWGDBw8Obdy4Mc3jakTQTAfDhg2zKdn8SIW71PAzYcIEm41EU3BpGjaJPAZVSfzoo4/2/dz0kXTOKVasmDUIqbPCq/Af+bzoeFUjEwDkJP8MOvKxokWLWqqeUoaPOOIIG9+ptDSlLXXt2tVVqlTJXXXVVZZq63esa/C2a2Thr+eee87Gt2kdCxQoEC5qp5s0bdrUjRs3zrVr187u+2lcYzxecSDt2yogpPWuWbOmjXeUggULuiDx0im1/+r3xx57zK1atcr16NHDzmF6TGnj2rYaf3/XXXf5ajtrHPmDDz5oY+svvPBCG8upMawqEOUVCJPixYu7JUuWhMfsJnuRqJtuusnGGisV+qKLLrIU4ZNOOsmOSRUiXLx48T6pstqn3377bed33rb54osvXN++fW2MeZEiRaw+gOoovPjii7aPtmzZ0nXr1s0+Fz/S8mtMscZXa8jGyJEjbV/WOPvIbattXbp0aStAGLlP+5mO03feeceGI2n76hpKQ5L0naTaCd6QJKX9B2WdAfhYjob3KcDrMdC8qmp1nTt3bvhxTSHxzDPPWMqpWma9tFq/pnWxrsHcrh711CrVskCBAjZdk3ouEWxKNz3ssMNCvXv3DtWuXduyb9SDNGTIEMtW0NzK/fr1s9f6qRdb1IOt6Yx0XtZ6afjOyy+/bNM2ffbZZ7ZekdPR+Y3ON+qhvuKKK0LFixcPFS5c2I7b999/PxQ0Xkq8sofuueee8JSB2k81heDJJ59s+6qmKYs31MVPdD3xxBNPWG+29l1lLNx11132XXP11VfbUIEPPvggEN870TQkR1NFjhs3LnT55ZeHKlasaHN9n3nmmTZMQsN3ACCnUeQs+xswrGVZPSSDBg2y3kz1gEW68847rSdBBTr8XO2SdQ3mdk3lwl+pWoHWO5bVE6ReQPXi6uevv/5q1cKVpaDCWSompF407ed+oIrDuimTKNL48eOtGvO0adPs/KwCZ5rKSoUJla3gtyrTElm4S9XDJ06c6B5++GGbRnDo0KGB27dVvK1ixYpWAEsF3US9ncoYq1u3rmVfqLdT02W+8MILzm+UeaECktGUsaAp19S7q55rUUV8FT4LIhVYVHaJMoe0zRctWmTF3T766CM7Z2k6PX0f+fGYBRAcBNgHib7cmzdv7u644w7Xq1evNOlc99xzj/v777+tImYQKl6yrsHcrv9fs8EuWnQhp3RMzSOrtFRtc013owtaXfBp3mClqfrtAj4ysEzlizPvc1BAooYSNaKo4ST6QldVq5U275f9+5lnnrG5ofv167dP5W3RfMJqDFV6tabuUupt2bJlXbLz9ldVUlbavo5HDUvSHNCqGK4K6d6x6AXWQdnHvX1PafBKBf/8889tX9V21nRV2p6axkmv8+a2V0Dqpf77wYYNG6yhR0GzpqbS+qkBRdvRO+50X4GmqqNrrnP99MtxuT/ePvvhhx9aIK0hWNqvJSjrCCBY/DMvhc9pzJcCa00Tsm7dOpteQ63tv//+u7Wma7qUoGBdg7lddRHjXcho3+3UqZP18ilIUU+15ndXT6bGJmu8nF+D6/nz59sUZJruRnOYq6FEgUqqiJy+SoGoPgtd0OvzUS/oH3/84c4//3wL4Dx+ucDVtEUKPFQzQHObK/DS+mof1jpr/9UYXd3UiKTg2g8X8N4YZAVg2n819lZzlIuOR81broCkXr16rkyZMvZ4EIJr8baNGkeUmaDxuNpf9bsaGzQ219unNWWZAm8/Bdfatlrul19+2b5PNLfzlVdeGc5O0LrppvOtpoPUTQFpkHjbWFmAmjbPO/do+2qqQH0Wur6KPCcBQI7K6Rz1oHr22Wdt2qrI8U+qQKzxYSeeeGKoRo0aoWrVqtn4sNtvvz3kZ6xrMLdreoI2rs9bnyVLlti426ZNm4aGDh1q4xunTp1qz2maKlVQDzpvPKsqFLdv395+X79+vU3ppLG8Gst6wQUX+HYf0PbUeHJNzfXLL7+keU7b169Trml6MY0n96pKa/uMHz8+1LlzZ5smskyZMnY/qLRdVfdC1d8jecesagTouPbOy37aztqWmo5qxIgRto3r1asXeuutt+waI+i888yKFStChx56aGj58uV2X2OwtU+fd955NsvB448/nub1AJCTCLCzgaZ+qVSpUmjVqlV2X1+EkdNl6HdNs/Hxxx/bxYA3F6cfvxhY12Bu11TjXYRryibNby2a0kcXbpr+RQXerr32WiualCpUGErF+kQXr/pcVARs8uTJFrB98sknIb9SY0nz5s1tiioV/lJxKJ3LvEDVO3a9x5KZd37R1FOXXHJJzDmt1birhtC1a9em+Zsg0XzlmuNa+6aC7S1btqR5XlMnqmCfF4D79TP47bffQl27dg3VqVPHjsk77rjDGk50vaEGIxVxUxE07cdBou/W6tWr23ZWsVgVtNNUdPLoo49a40nklHQAkJMYg509WQE2ZkqFODQWTlMcKRVR08Jcd911rlWrVi4oWNdgbtf0BK04UiQVQ1L6paaAUc0EFRV69NFH7TmNfVQq4pNPPumLtOEDoZRpFelTITtNZaXfVfBLU+B4acea3kmpx36lc/R7771n4zpVGEsp4Srap31AxdxUtO/+++93tWvXdn4Zg/zss8+6Sy+91KZUixxbniqmTJli6f0aj6zjV8OVNF2V0uVHjx5t0weqPoQfx59H1sDQ9HFKjf7qq6+sToCmmNP4exVw0358wQUX2L4bpH1AUwVqaIpqfWgIVvXq1W1bqkZE//793WeffWZFCv24bQEEDwF2gnkn908++cS+4OWvv/6yE7/GMqoAi8b5XXzxxTZHsl/n4xTWNZjbNVULf2n9VIRQ66sqy2og0wVsjRo1LOBUoahhw4bZuPOgfxaifVvBihoHFXRq7LIoUFFjg8ayBoECFAUsqrStBgVVJm7UqJHt8xrP6s2vm+yNBZoT+M8//7QCV5dcconNf33CCSdYAOKN1w0y7zylQl8aq/zBBx/YttN4e82Jfe+997rLLrvMfg/K8at10/6rMef6XYUHNUZZghRce8aOHWvV/tXopTHXqifw77//2rWWGgEvv/zywDd+AvAHAuxsoAtPnfjVmqwvdVXg1Ze5irCoqrR6TMaMGeNmz55tXxY33XST8yvWNZjbNVULf02YMMGOWU3zo3XWlGTqrX/sscdsm2pqqlSinkCvkraCFVVgVo++gjn1kAU5m8EvIoNFZUypQraCSxUaVOOQpuWqX7++a9KkiUslmmpNDZ+azsnLIgsKr6hdqgaS3nlHUweqsJ8KbM6aNSunFwsAwgiws+nLT8GWLsoVfN1yyy2Wthd5QaTHNSe2UlDV4+DXVlfWNZjbVbxlV4ClNGH1kpxzzjnu9ttvtwyNZs2a2dysStULUg+ZjltN56PtqQtzTUWmlOhrrrnG5tQNalDpbW+tn/Zh9eQqQFPFZa83TL3amp5NQyKi55L2q8hj1K/bduHChbaPRh6Hmttb2Qaas1z7rvbrVOBV0I7ejkHptU5FauhUFXVt2/bt26fJLNFwjk2bNlmWjZ+/bwEECwF2NlLw8cADD7h33nnHtWzZ0nrG1JMQRKxr/UD2XuqCvWfPnpY6q0ajyZMnu+7du1vvri5Y1Xik3t7evXs7P/ICqi1btqTp4dIUVeoJXL16taXZtm7d2lWrVs2eC+pFnBeAKPVSPfmajkufjdKllXKsNMxKlSrl9GIiYnupoevhhx+2AFvTP2oqLs0R3Llz5/DnpEY/7d8au+rXBoSsCtKxqjHWGk+eKrx9dfr06dZBoaxA3VeWhuojXHTRRbafB2k4FoDgIMA+CBSUqECQvujV86P5g4PypR+NdQ3edg1y4S9vmVUUSI0It912m/3up3lyE/k56CJePaEab61GQfUOqXCWUsOVwaAA7vnnnw/MfLMKUsVPPZteQ4i+U1555RVr4KpSpYr16CnbQqmyyrx45plnkr5AGzLegP3444/bsZcqDSTefq6aF6ojoCEpmg9cjUkqTqg5sJVpo1oDKvgGAEklR2uYB4jm2JSvvvrKpkvRdCg//fRT6O+//7bHFy5caPOuFi1aNHTrrbfaNBp+xboGc7vG29Y9e/a06as0rY3Wc968efacpjKqWLGiTZ/ivdaPtNyafkpzXuuWN29em/JF0+t50zWlCk1lpGmromn6m1dffTV06qmn+mLqqni0PTXNkc7N0furn+ZF1lzAhx9+eGjUqFFptpHOR88995w9p7nKNcWcn9YL//H2zdmzZ9vPK664ItS2bdvwPhy57/p1urGMuueee2zO62iaOvHLL78MTZo0ye6znwNIJvRgJ5h6EZRaq14+VfPU1BIqgHXWWWdZiql6gzSeSNUu1fvgZ6xrMLdrqhT+8lLgR44caeNUVZRQPX4ac66Cbh999JGNM9b0a0qb9lLEg16BWdtUKf/qrQ5CMSUv1VRjx/v27Ws9YOrxVZaCxnIqK0PDAPzUqzdgwAArOPjll1/G3Ebq0dN+qx7tVOrFVrV/pcNrBoAgFGnTMah10TRcmtnAmyYv8vyl87OKENapU8cFhXfMqkidMjG0TXWO9jJN/JgtBSC1BKcyURLQl4ACLF3A6YJNX3hKt9TUGSoOpIsdzZmssZ4dO3b0deEV1jWY2zWW8847z/Zpr/CX9nGv8NegQYPsNX4c2+ktr+ZS1YWr5g721kVjru+++24LVDTNnoKVp556ytIVg0gXq5riqWHDhuHGM01ZpkYFv1/UesusWgIq2nbFFVdYKrzGcmoub124a2yr9msV8Utm3raYO3eunXNEx6S3L3vnHQ3rUOOB5gYOeoCtdVawqX32ueees8/i+uuvd36n71g1bKqxT79rWI7qubRp08YKfVWsWNFep6kh1RgYJN7+rO9XNSCoIr7WWRXDlRLux/MQgNRCD3aC6eJc1S51Ya55c3VRF9mavnnzZle4cGEXBKxrcLdrqhT+UgEoFfFS4bbI3iH5/fffrcdTgXefPn1snnON+ytQoIAv1zUWrxfM8+2337qJEye6F1980bJvNMWTAlJlaqhIll/p+FTVewXU3vjx9evXW4+95jpXsTCNv9dFvB/2ZQVe6pH/9NNP475G66tgTOsVpAY/T6x1UvGrBx980GpGBIWuJ5QFpwKDCjh1Htac7eXLl7dzksYha5qqIFAgrWnVInvxFy9ebPv666+/bhkbpUqVsjo2ahBTDz8AJKWczlEPksjxmp988kmofv36oXLlyoUGDRoUWrx4sT2usVN+HasaiXUN5naNHNN3/vnnh44//ngb07lq1apQEGldu3fvHipZsmTos88+C23dujX83MyZM0MlSpSw36dMmRI66aSTQkuXLg0FxYoVK0J9+/YN7dq1a58xjDq+P/zww9CFF14YKl68uI1Nf/bZZ0N+3p/vu+8+25djWbJkSfhz8AONSdU2efzxx0MbNmzY53nViChYsGD4/BSkcbreuowfPz505ZVXht59910ba67aEGXKlAlt3LjRXhOE87HWQ+deb511zE6dOjU0dOjQ0EUXXRTq2LGj72tgRGrVqlXo+eeft9+1TSNt2bIl9P3334fuv//+0AknnGD7v7Y1ACQjerAPvIEiTW/Hzp07w/Mzinq8lL513HHHuW7dulmLs1+xrsHcrvF6h1577TWb8kfUo63eTFXBb9euXXhe5CBQ76bmCVYquNJp1cO5detW68lVr63mE9Y4bVWxVRp1UGj9lPb/wQcf2Lh67c/q8VTqf5EiRcLnNfX0an/X9lfmgh96eKOpQrzGcipl+s4777RhD37PONGc7GPGjLFK/m3btrUeTfXuqUdT00NqO6n6exB7r0Wp08oUUxaK9lelzWv9tR9HZmX4OYvo/ffft5k5lPJes2bNNK+JvtYIglGjRtkwFfXWN2nSxB1zzDHuqquusvOyMoc8a9eudcuWLbMhH0HdvwH4GwH2AfIuNpUuu2nTJvsi0Jd7oUKFbAycvgA1f7AuUPX4I488YmmIfsS6BnO7pnLhL+9CVtNR6eJu9uzZdvGm9VUKotLDNT2VAjKNax0yZIgLIo0v15zmJUqUcI0bN3YdOnRw9erVswYGrb8feRfeKsynQmbaztp31aCiddKFvObS1YW8H61Zs8YafZRCrGBLDUMbNmywwEMNYxqepAYRP9ZHyCjVwZg3b541Kmg4h85VGpqluZHr168fring131X3zWq5XLffffZsalzsAp/6Xedm7Q/B43WXdcamt9dY85VK6Fq1arukksucRdeeKH97rcGPgCphwA7ATROqH///lZNWdU+1Zupi/QFCxZYL4m+7HUhoOfUe+L1LvjxS4J1DeZ29XjLr8A5uvCXejK9wl/lypWzcYFBK/ylRjKNb4y8cH3jjTesJ0nVtVUMKwg0vl43rWfkPqsLWvVq6yK+TJkyNie4xl+roJZ6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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA9gAAAJOCAYAAABMYq+bAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAA13NJREFUeJzs3Qm8TPX/x/GvnbJTdlHJnspeypISKmVJu6XSgoqKtCgiWpVoL+0b2UJKCiVSSmlTKUv2fd+d/+P96X/mN3fMXPcy3HtmXs/HY7h37ty558w5c+b7+X4/3883i+d5ngMAAAAAAIcl6+H9OgAAAAAAIMAGAAAAACBOGMEGAAAAACAOCLABAAAAAIgDAmwAAAAAAOKAABsAAAAAgDggwAYAAAAAIA4IsAEAAAAAiAMCbAAAAAAA4oAAGwiA1157zWXJksX+Pxx6jkaNGsVtu3DkXXLJJa5y5cpu3759ofs6duxox3LRokUJdwi0T9o37WMy0PtR+4vMYcGCBS579uzu2WefzehNAQAEFAE2kEojX7fixYu7vXv3Rn2dfvvtt9DjypUrl9CvZZMmTWw/q1WrltGbkjSmT5/uxo0b5x544AGXLVu2TNPRE37LmjWrK1iwoDv77LPdiBEjMnoTk0rnzp3tGBQpUsTt2rUrozcnIVSsWNFdccUVrl+/fm7Lli0ZvTkAgAAiwAZSoZGMVatWuUmTJkX9+SuvvGIBhm6J7O+//3bTpk2zxvwvv/zivvnmm4zepKRw//33uxNOOMFddtllLjM599xzLejX7Z577nGtWrVy8+fPt4DvrrvuyujNSwoK/j744AN7T65fv96NHTs2ozcpYfTq1cutXr3aDR06NKM3BQAQQIkdFQCH6cwzz3QFChRwr7766gE/06j2W2+95Zo2bepy5MiR0K+19t/zPHfHHXeEOhZwZKkj48svv3RXX311puvA0Tn/4IMP2m3AgAHu9ddfd/PmzXPHHnuse+aZZ9yOHTsyehMT3vvvv++2bdvmevToYecH78n4qV69ujv11FPdSy+95Pbv3x/HZwYAJIPM1WoDMpk8efK4yy+/3E2cONFGNMJNmDDBRrc1aheLGsAa5atUqZLLnTu3K1y4sGvZsqWbOXNm1MdrJOqmm25yxYoVc8ccc4yrXbu2GzNmTKrb+NNPP9k2lihRwuXMmdNGPLt37+7WrVvn4kFzf5UarDTUgQMHupNPPtm99957tm+xKK35/PPPt9/Rfit9/pprrnE///xzisft3r3bDRkyxPYzX758Lm/evK5KlSquZ8+ebsOGDWmaO67njkzP9+coa+T9iSeesOfMlStXaF7v8uXL7bjUq1fPHX/88fYzPcctt9xywHFO67aqIa7XPrV03XPOOceyIv799193MH66dbt27WI+Rn/z0UcfdRUqVLDXuXz58q5///5uz549ocd89tln9lpo36JZuHChBWjNmjVzh0Ovn9Jrte+RqbXqoNEotx7jvw/097744os0P//cuXNdt27dbIqCOr303lQgNHjw4BT7G749um3dutXddtttrmTJknacFTiNGjUq6t9I6/koOk8U3Or9oOctWrSoa9OmzQHnuO+rr75yDRs2tE4InSPt27d3S5cudYdKAbXOJY22Nm7c2E2dOtUtXrw45uNnzJhh8/l1bdH2lilTxrVu3dq2K5w60nTuKeVfqf+6Dun8uvHGG92SJUtSfd+lNq9cnTG6T5kwup6cccYZ9tz++3rTpk3ukUcesddIx0rXMv1/7bXX2jkaTVq2tUGDBvY6rVixIupz6Pm1XbNmzUpxv7JG9Hqm5xwFAMD/gAIQ4Z9//vH09mjWrJn3zTff2NePP/54isdcdNFFXuHChb2dO3d6uXLl8k444YQUP9+xY4dXp04d+90zzjjD6927t9exY0cvT548XrZs2bwPPvggxeO3bdvmVa9e3R5fv3597+677/auuuoqL0eOHF7Lli3t/hEjRqT4nXHjxtnf1nNefvnl3l133RV6bIUKFbz169eneLzub9iwYbqO98SJE+33brnlFvu+X79+UbfF17NnT/u5XpvOnTuH9qN48eLekCFDQo/bvn27d9ZZZ4W2tXv37t6dd97ptWrVyjvmmGO8H374IU3brdc98rXv0KGD/U6LFi1sO6655hqvV69eoWP47rvvescee6x38cUXe7feeqt3xx13eE2aNLHfOfHEE72NGzemeL60bmv//v3tMW+//fYB2/n777/bz3R80uK0006zbdy7d+8BP/P3zz8Hb7rpJtueihUr2v1t2rQJPXb//v3eSSed5BUoUMDOsUg6PvqdkSNHHnSbdMz12EGDBh3ws0WLFtn2li5d+oCf5c6d26tbt6533XXX2d/T8ciXL5+XNWtWb+zY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AAiwAQAAACANzjjjDAuyR48eHbpPXyu4Pv3001OsnTxo0CBXvnx5lydPHlejRg03atQo+9miRYtc48aN7etChQqlGPlu1KiR69atm7v99ttd0aJFXbNmzaKmiP/777/uiiuucIULF3bHHnusq1Wrlvvmm2/sZz/++KM9f758+Vz+/PldzZo13XfffcfxPUpYBxsAAAAA0qhz585uxIgR7qqrrrLvX331VdepUydL+/YpuH7rrbfc888/7ypUqOBmzJjhrr76altPuUGDBu7DDz90bdq0cQsWLLAgWEG47/XXX3c333yzmzlzZtS/v3XrVtewYUNXqlQpN378eBvd/v777y2oF22Xgv3nnnvOZcuWzc2bN++gazcjfgiwAQAAACCNFCj36dPHLV682L5XIKy0cT/A3rVrl3v44YfdZ5995urXr2/3nXjiie6rr75yL7zwggXHGnmW448/3hUsWDDF8ysgf/TRR2P+faWjr1mzxn377beh5zn55JNDP1+yZIm76667XKVKlULPh6OHABsAAAAA0kij0C1btnSvvfaa8zzPvlY6t++vv/5y27dvd+edd94B86nD08hjUUp3ajQirefxg+tIPXv2dNdff7178803XdOmTV27du3cSSedxPE9SgiwAQAAACCdaeKaKy3Dhw8/IIVbJk6caGnc4dJSqExzqlMTnk4ezYMPPuiuvPJK+/sff/yxe+CBB2yE/dJLLz3o38bho8gZAAAAAKTDBRdcYCPSe/bsCRUi81WpUsUCaaVqK3U7/KYCaZIzZ077f9++fel+3U899VQbxV6/fn3Mx5xyyimuR48e7tNPP3WtW7e2OeM4OgiwAQAAACAdVDzst99+c7/++qt9HU7Vu++8804LcFWwbOHChVaE7JlnnrHv5YQTTrDK4BMmTLD51P6od1qoergKm11yySU2//vvv/+2ommzZs2y5cM0sq754Jojrp9rrnblypU5vkcJATYAAAAApJOqf+sWzUMPPeTuv/9+qyau4FYj3krZ1rJdotTxfv36ubvvvtsVK1YslG6eFhr91si0CqS1aNHCVa9e3Q0ePNgCfd3WrVvnrr32WhvFvuyyy1zz5s3tb+HoyOJpZn4S2bx5sytQoIDbtGlTzDcEAAAAkChty507d7p//vnHgrvcuXNn9OYAgZOe91CmG8FetmyZlb4vUqSITeBX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ev70/B6A4Est8yU9KV5aR1QFarRuqVLM/WqrAAAcLSqmlpaCaggeAmwAQCDEynzxU+YmTpzoVq5caVVWlTanIon+MigXX3yx3TRHUgVxVKBGmTW33XZbzI5AAACA9CLABgAEQmqZL+ErFERbccCnCqtargQAAOBIYJku4ChQZeOKFStaZWPdtI6vaG3wM8880+aR1q5d2/3yyy+pPo9G7bT8BIXcAAAAgMyHEWzgKFFQHbl0kNJau3TpYpWNR40aZf9/++23MZ9jyJAh7qSTTrK1wwEAAABkLoxgAxlk9erV7rvvvnNXX321fa+5pUuXLg3NG42k0W2t73v33Xcf5S0FAAAAkBaMYCOqI73e9+Mf/3HEnnv23Q1dZnTttddainedOnWscrGC6RIlSthyC/7yQVqCSGsTRi6doMrJN9xwg3vllVdctmzZMmgPAAAAAKSGEWzgKJgxY4atC67U7qJFi7oOHTqk6/f79evnWrdu7SpXrnzEthEAACARPfjggwdM08uMFi1aZAMu8+bNc5nN1KlTrR2qlTwO1eTJk+04aBWPRMYINnAUaGRacuTI4W6//XYralamTBm3YsUKt3fvXhvF1ui2Rq/9x4abPn26/WzYsGH2+M2bN1vhNM3XPu644ziGSApHMrOmbY0SR+y5gWQ2YsQI17lzZzdmzBh3ySWX2OeWPge3bt1qgcSTTz5pxTuj2bBhg+vWrZv9jj4/taSeMsAQP/UGTz+qL2d6swxVm+b1118PfV+4cGErCvvoo4+6U0891SWzd99916YZ3nTTTW748OFH/O/16tXL3XfffaFMSq3qofe2CvY2btzYjpOOj6itWrduXffcc89Z5qbvggsucPfff797++233TXXXOMSFSPYwBG2bds2t3HjxhQXxNNPP90df/zx7owzznBvvfWW3f/hhx+60qVLH5AeLl9++aVbvHix9Wx+9dVXLn/+/PY1wTUAILPS59RLL73k6tWrZ9+rI/nSSy+1rKwff/zRffDBBxZA7dixI+rvq/Guz8s//vjD6pAoMEfyUVCmAQndNIqqQYkLL7zQJTtNG1TQq3blzp07j+jfUttz4cKFVi/Id/3111vnmLIzN23a5B5++OHQz5544gl31llnpQiufXrPDx061CUyAmzgCFu1apX17KmntXr16jYa/cYbb4TW7tVNI9rqlVdPf/iFa/z48RwfAEDgKAVUn2PPPPOMy5Url923bt06t2bNGte0aVP7Xp99Wnby448/PuD3VfBThUB79uwZuq948eJHcQ+QWej80bHXTenFKvaqOjY6l3y9e/e28+mYY45xJ554oo2Sqn5NLMqKOO+882zaXoECBVzDhg0PWKFFGRYvv/yydQrpeStUqHBAu0wdPwr2NfCRL18+d/bZZ1sg6tPvK606d+7crlKlSu7ZZ59N8ftz5syxTiT9vFatWjYqnBb//POP+/rrr+210H6PHj36gMe8+uqrrmrVqvb6qeaPskF8GvjRSjbFihWzv12tWjU3YcKEmH/vvffes9dLj/X99ttvVh9If/+KK66w7+Xvv/+24H/gwIFRn0uZKHpvh79OiYYUceAI04U+1gVTa2PPmjUr6s90UY5GqeHhI+IAAGQ2Sv3WCFbNmjVD9ymYUUNfI9eXXXaZBTkLFiywke5Iv/76q2V13XzzzdYYL1KkiHvkkUcsGEHy0tQCZf4p20/nhE/B7WuvveZKlizp5s+fb4Gf7tMIbzRbtmyxejjqAFJmhUZcW7RoYenO+j2fsi2Ujv7YY4/ZY6+66irLKFQq9LJly9w555zjGjVq5D7//HMLsmfOnGnp0aI06L59+9r0Pp23agtqu4499lj729oXBecKXLVPCppvu+22NL0OGpBp2bKldQ4oTVwB7ZVXXhn6uVKz1TmlwZvmzZvbCLO2ze/80n16DfR3tfyr3m+pFdFVJmX480uNGjXclClT7Fgos8BP2b/pppvsNQt/HcNpKqQCez2n/nYiIsAGAABA3Pz888827UkFPiONGzfORhsHDRpko2sNGjQIraYRTkGKRveUdqpML41yKxhRMK752EgeGlnNmzdvaNqdOml0X9as/0vE1dzg8IGIO++800ZdYwXYkfP+X3zxRcumUJZhePq50pk1Ois6F5XarPNSaeua96wAV3/HPyc1mut74IEHLHBXkVopX768BbI6nxVgv/POOxbsKjjWyLDeD//++691KqVGv6POBAX8cvnll7s77rjDAnT9DRkwYIDdFx6wa+66fPbZZ7YPGnH2t1eDQalRp4I6LyIHgm655Rb3+OOPW2danz593Jtvvmmj/fpbzZo1s1FqbZ+2J5yeS8+ZqEgRBwAAOIo0+qT007Fjx9r3auxqnrJGuZROqtGfWFT4S6NoahirQa4U0cxGI1MKhJVSq2Bn9uzZrkuXLjaqplEvVRLWaJ5Gz5YvX277EW2Uq1SpUjbFSjTitnv37oRulCM6nQOqqq2b3isK3HQ+hJ8L77//vgV5SiNXMK6AW8VhU5u+p9FknaMKkjX6rBHlyN8JL6SmkWc9bvXq1fa9tkcp4dE6fNQRoODyuuuus+3xbwo0/dRoBbh6/vC06/r16x/0NNCosZ5fI+5+ZohGwZUSLto+va/OPffcqL+v7VZ2SHhnwMGoTkL4doret+qQ0HFQZ4FS8tWpMGzYMNe9e3d35plnWq0Fpa9/9NFHKX43T548bvv27S5RMYINAACQQYW/RMFn//793cUXX+zWr19vczU1ilalSpWohb8USCj9VFauXJnpjp1G4MJH4ZRCqwJlqiKuQlUagRS9DgpaolURV2q5ghktcakgRIGVUnm1AgeSi86R8AKwGjlVUKzzRwGrptqp00np3Aq+/VFljR7HohFk1QR4+umn3QknnGDzlBXcqhMnXGTwrI4xf4kpBYmxKFgXbaOqaYdLLRU7LTTiretE+N/XNum9otcgte062HbHoiBenXupUUq63uelS5d206ZNs2OjY6dUdn2vudc+bX8iF+rNmtnWqNOJG37Th4xPFfK6du1qcy7UC6RKduqBAgAACGLhL1F7x6+toZGpnDlzhpa7SbTCX0rF1ciZRg41qqXlu7T/8vzzz9ucVdF9WvZHo4wKsNX+U9p5+OuG5KRzQ+nhfvV5FftSkHzvvfdaoTCdWwfLdNB85FtvvdVGgf1CYGvXrk3Xdui8VLZGtGJqmmOsNGgV/FLnQPjNT+NWtoqC4vAK4Mr2SI06BTTNQh0I/qi+bsoIUQD86aef2txnZY5oXnSs7VYquqrzp5Wya5TeHov+lkbk/UJq+/btC70u+j987Wztr0bxE7meQqYKsEUnuV+KXzeVhff16NHDLsYjR460lASlP/jzGgAEP/1RDUv19CqFUDfNcYpW/AYAEqXwl3/NVNVjpUUr+NRcz2iBc3jhLz3H+eefn+aqwxlJo1cavRalkKphr2JSqsgcPiKt4kgayfdpH7/55hsLQlQQTZWekXx27dplmRq6KYhT+rFGiP0RUQXUSu1W0KnATfOk1XGTGv2O5gvr+XSOaQQ8vSO7CiY3b95sc4zV8aVzWs+pwn2i0WTVGtD26JxX8TW913UdEBUNU1tJnUh6b0+aNMnmM6dGz6+BRhUJVOVv/6Y2kzoLNLrtD1pqBF9/W9ulCun+nG29j1ScTQOVSjfX3G3VONDUjViUGRAek4VTwKzXQp1n/rz4s846y+aoK0VcHWP6PrwTwc8YSFSZLkVchS6ifaio+p1OGuX4+6lEOknVWNeBCk+1AjKTeoOnH7Hnnn13w4RKf9SHm4pv+JUnhwwZYgU61FsLAIla+EuVftUQV4NbI15qAGskLvIaSeEvJCMFfv60ArUP1IbQYJumHojaFhqEU5CnYFwpyeqwUpAZi2IKtU3OOOMM6+RRp5YKo6WHAl1VD7/rrrvsPavUby0j5geTylZRwS9VINdjlC6t5Vr99dyVjauBQ3UsaQBC73dVyg9fazqS5llr2TA/6yOcfu+aa66xkXilwCvwVTtK+6UU77Zt24Yeq2uR7lcBNw1uaGRd16FY1AGhgnHqPNAKOOHUkaDXXPvuGzp0qF3PFMjrd8P3Set26z69Nokqi6cJLZmE3gg6CTV3QhPp1bOhDxz16OoE1mR9pT+oyp9PKSE6UfXGSgv1NOn5FbBrbk96jfpxhTtSHv847akaRzoYO5L7eaT3Nb1BZzLt69FIf9SIij4gVL3Sn3OnDw69R6+99lpbu1LvbfX2ppbaqEuTgnKNzvgj4Tj652/bGv81ahJ9XzPTfiYrdZprfrFGnnTdUDaLGst+YKn1ZjUaEl50KHxURyM/SkNUaqaeS22HzEQFvnRN81OcNRqndohG4zRX0d9XadeunV1LNbIVTtdNZe6FF2LSPEbNQQ2fo4qj63DblkeDgi2/ynRksSogLdRJoHNdVdAP1dq1ay1A17XMT5UPivS8hzJVirg+TFV2Xj1V+iDSTqg6n9Zp0weR5iSFB9eiD9LUCnzoA0snQ/gNQOZMf/Q1bdrUfq4eaqUYAUhs0TJflLbpzy9UB7zSIKMF17///rs1/NR20Chxp06dDrrMTUbQNmnqm/ZVN+2rUirvueceG9nSQILfANW+a39TK/wlFP4CcLRojrsGNv0ib4di0aJF7tlnnw1ccB3oFHGV3PfpQ1QBtw7kBx98cEgV70Qj4EpdAJD50x99ShPXBXzgwIF208UYQOIX/lLmS6x0Ti13E+vaozaDn0KqeYjKllExIKVwZnZKK1U7R50EGqlXQSBl//jzE1X4SzVnNPodXvhLBZ40Gk7hLwBHgwY51SF4OGrVqmW3RJepAuxoB1KjXaqaqfXdVDpfVTbDR7FVRTy1kTAteh5ebVMj2CzxABzZdU9FmSWa36SiHkr5VPEROfHEE23kRhU8YwXYokIZ/hqVBNhA8mW++DStRIVNlQYejYr7qICPigipzaC1lTXFRFWEM3OArcJf4Vk7c+fOjfo4zc8M5xf+AgBkTpk6wFaFQFUD1IR9faBoLTqVgfcnymuiveYhpVaFTr27LOkAZNy6p6ryqSIbSn9UgUI//TG848unoFzv10KFCtn377//ftSUUACJn/ni09QxFUVUkZ5o1AmnUV6NWmsEWMV21BGvoqnIGNRLAJDMMtWnj6rZqTGutHClQ2kpB6VOqcKdikcoPUyNcq0N6RcGUXBNBXEgMdIf1WF24403WqEijUCddNJJNhqVqIWZ1NGgUX6lemrpHY3QlSpVKgP2AshcmS+aq6wOO10H9B5TXZbUqDquXyFXz6FCixT9Ag6UiWobAwn73slUAbYWPVcwrXlTqorZoEEDW4JLX4tGwZQ2qhFsNWC1Jhupo0DipD/WqVMnEGu6Hqwwk2/UqFFWAyJacK15p1qmQr/fuHFjq4CsjgcVdgOSPfPFXzNZmS/qqNI0sdQoINccbHXO9e7d23Xt2jWhl4ABDqWzWzTd8lDrGgHJbPfu3SneS4EJsP05mrGoJLoqClNVGEDQCzOpw0EprAquRSP39913ny0DkVmXUIkcrVdvrjoQ3nnnHUvtVwrvF198ccDvffLJJxb0+FavXm21MzRvFrzmqdF7SFXB1bkeLjzzRXReas61vwauVioA8D/6vFGn05o1a2zKZeR7CkDqbT69d/QeSsv0o0wVYAPI/MGSRm2Vul29evXQfZpDqfuSyeEWZlI6vKbD+PLly2dTXxQ0qBBcEEbrhw4dassFaR6tllGMtWSiso1082k+rd+xAF7zWJkvoutRWgp/ffzxx5xKQCpUgV5ZHloCV51RANJHnVJablbvpYMhwAaS0OEES34wqLVpk1U8CjMlwmj9Y489Zim8Ol8ktRUdfOpAULHKV1999Yhuc9DxmgOIN12rVe/AT3UFkL73T1ozPwiwgSQTz4Z7sopHYSb1goaPImzZssVt2rTJlSxZ0gVhtF5LHmqZxHHjxtlcc1ERyvbt26f6XOp40DrFxx9//BHf7iDjNU88R7KytrSt8d864EBqFCBk1mlIQKIgwAaSTDwa7tu2bXO1a9e2gkJKL7/33nvTVPQhUcSjMJNef1VUVxq+0qVfeOEFW0UhszV8Yo3Wa/90UwV0FXZTh8OZZ57pKlWqZOsSR6OOB41cK1sCvOYAACQiAmwgicQjWNIcrmXLltkI5Pr16y0If+KJJ9zo/XWP6LbPvruhS6TCTPqZliBTcTMVNtPIdaz52plxtF7z9fPmzeuuvvpqu79cuXLWcfPtt9/GDLA1J137Gj4fG7zmAAAkEgJsIInEI1hSATQ/vVdr0qtQmhUiOuvIBtiJWJhJa4Fr3ntQR+u1pNrkyZPdLbfcYp0tc+bMsfXOU+t46NixY1JlOxwKXnMAAIKLABtIIvFouGuJpUKFCtkyH1oSZ/To0e700093nx7lfUHGGzRokI3UP/vss/a9luLSWubSt29fG5X3OxU0v1znyvz58zN0m4Mu0V5z5iUDABINATaAdDXcv/rqK/teo5BKK2/SpInNwf50yGxeySQbrS9SpIgbP3581Mf56xP7ChQoYHP3wWsOAEAiI8AGktihBEutW7e2GwAAAICU0raYFwAAAAAASBUBNgAAAAAAcUCKOACkU73B04/Yaxak5cgAAACQEiPYAAAAAADEASPYAICYGK1PvOWr2tYoccSeGwCAZEeADSSRI73mLAAAAJDMSBEHAAAAACAOCLABAAAAAIgDAmwAAAAAAOKAABsAAAAAgDggwAYAAAAAIA4IsAEAAAAAiAMCbAAJbcSIES5Llixu7Nix9n2nTp3cqaee6k477TRXu3ZtN3Xq1Ji/O2HCBFepUiVXoUIF17p1a7d58+ajuOUAAAAIGgJsAAlr0aJF7qWXXnL16tUL3TdkyBD3008/uXnz5rkXX3zRtWvXzu3fv/+A3926dau77rrrLDD/888/XcmSJd1DDz10lPcAAAAAQUKADSAhKWi+/vrr3TPPPONy5coVur9gwYKhrzdt2hTz9z/++GN3+umn2wi23HLLLe7dd989wlsNAACAIMue0RsAAEfCk08+6c466yxXs2bNA3529913u5EjR7oNGza4Dz/80GXNemBf45IlS9wJJ5wQ+r5cuXJuxYoVbu/evRwwAAAARMUINoCE8/PPP1vgfN9990X9+eDBg93ChQvdBx984Hr16uV279591LcRwZq3f8opp7gaNWpYp823334b9feWL1/umjVr5ipWrGjz/Nu0aePWrFlzlLceAABkJAJsAAnnyy+/tPnXKk6mkefZs2e7Ll26uOeeey7F45o2beq2bNni5s+ff8BzlC1b1i1evDj0vZ6vRIkSLnt2En+Sbd7+pZde6n799Vf3448/uj59+ti8/WiyZcvm7r//frdgwQKb53/iiSe6u+666yhuPQAAyGgE2AASzs0332zp3AqWdFOwpIJmmpP9119/hR43Z84ct3r1aguEIl1wwQXu+++/d7///rt9/+yzz7rLL7/8qO4HMse8/YsvvjjUsaJzadmyZVGnChQrVsw1aNAg9H3dunXt/AMAAMmDoRgASWPPnj2uQ4cOVtxMAdOxxx7rRo0a5QoVKmQ/79u3r1ULv+mmm1y+fPncyy+/7C655BILpqpVq+Zef/31jN4FZNC8fd/TTz/tWrRocdBMhn379rlhw4a5Vq1aHYEtBQAAmRUBNoCEN23atNDXM2fOjPm4/v37p/heI5e6IXnm7c+YMSPmY9566y2bt5/aY8TzPKs6r46b22677QhsLQAAyKwIsAEASS983r6sXLnS5u1rqoGmHLz//vuuX79+burUqZYKnppbb73VLV261IqkRatQDwAAEhef/ACApBdr3r7u16i1KtJ/9tlnVvzuYMG15vmPGTPG5cyZM+lfVwAAkg0BNgAAqbjqqqvczp07bT71aaedZrd169bZz55//nmbu+9PP1CBNAXoKnCmx6kCeZCWJHv44YdtmTGNvPv3RbN161Zbkqxo0aKuYMGCR3GLAQDI3EgRBwAglXn7Ko4Xiwri+VQgTfOvg7wkmZauU7X8zp07p/q7OXLkcL1793aFCxd2jRo1OgpbCwBAMDCCDQBAkom1JFmdOnWiLlsXSb/TpEkTRq8BAIjACDaAhDPqxxUZvQlA4JckSzRKh9fIvObHa/m91atXu2uvvdYtXLjQOgy01v0555wT9XeXLFniunbt6v744w+XLVs2m5vfvXv3o74PAIDMjwAbAIAkkpYlyRJNtHT4u+++276fPHmy+/bbb22+/D///GPp7+GU9q+f6fHt2rWz+1atWnXU9wEAEAykiAMAkKRLkpUrV87Nnj3bliR77rnnXDKlw6s6vD+Hvnbt2q5kyZJu+vTpB/y+lmbT7/nBtRxsqbbMVLhOI/UXXHCBHe9q1arF7FiZP3++jeBXqlTJHqfR/h07dhzlrQeA4CPABgAgiaS2JFmypMOrCryK1xUvXjx0nzoblAoe6ddff3XHHXecFX87/fTTbTT777//dkEbqf/zzz8t+L7yyiujFu7LnTu3GzZsmPv999/djz/+6LZt2+YeeeSRo7wHABB8pIgDAJJevcEHjlzG0+y7GwbiNR4wYIAtPbZmzRpLJe/WrZv74YcfLMDUcmQa5fVHfU899VR73ObNm13p0qVd48aN3ZtvvukSLR1+79697vPPP7eR/qpVq9rrc9lll7nvvvvOZdaR+jvuuCPFSL3WZo8cqVfF+HAa4fZpnrkeq9cPAJA+BNgAACSx8CXJ7rvvPrtF079//xTf//TTTy5I6fCycuVKS4fv16+fy549u33vj2LrcWXLlj3gOXSfRq4VXMs111zjbrnlFhsFjpyvHeSR+nAavX755ZfdoEGDjug2A0AiIkUcAAAkXTq85lRrNFpU5GzZsmWuYcMDMw2aN2/u/v33X/u5TJo0yVWuXDlTBddL/vrdRupjdY6kx+7du1379u3d+eefb+nwAID0YQQbAAAkHc0v1mi0Rrdz5szp3nrrrVDQHJ4Of+yxx1og3rJlS6soXqBAAffee++5zOS377857JF60Wi3gusSJUq4p59++qjuAwAkCgJsAACQdOnwqgT+6aefpikdXqO5umVWzS7r4F4aeHfo+0aNGrnbb7/d1vv+5ptvrIPgwQcfTHWkXnPNVcitcOHCNsqvSuQAgPQjwAYAAEjykfr333/fjR492orXac65aE738OHDM3gPACBYCLABAACSfKT+qquushsA4PAQYAMAkERYkgwAgCOHKuIAAAAAACRygD148GArsKEiHb6dO3e6rl27uiJFiri8efO6Nm3auFWrVmXodgIAAAAAkGlTxFXl8oUXXrBCG+F69OjhJk6c6EaOHGnLZHTr1s21bt3azZw5M8O2FQAAJF86/Oy7D6zEDQBAphvB3rp1qxXZeOmll1yhQoVC92/atMm98sor7sknn3RNmjRxNWvWdCNGjHBff/21mz17doZuMwAAAAAAmW4EWyngLVu2dE2bNnUDBgwI3T937ly3Z88eu99XqVIlV7ZsWTdr1ixXr169DNpiAACAjMVoPQBkDpkqwH7vvffc999/bynikVauXGnrNxYsWDDF/Vp+Qj+LZdeuXXbzbd68Oc5bDQAAAABAJipytnTpUnfbbbe5t99+2+XOnTtuzzto0CCbr+3fypQpE7fnBgAAAAAg0wXYSgFfvXq1O+OMM1z27NntNn36dDd06FD7WiPVu3fvdhs3bkzxe6oiXrx48ZjP26dPH5u/7d8UyAMAAAAAkLAp4ueee66bP39+ivs6depk86x79+5tI885cuRwU6dOteW5ZMGCBW7JkiWufv36MZ83V65cdgMAAAAAICkC7Hz58rlq1aqluO/YY4+1Na/9+6+77jrXs2dPV7hwYZc/f37XvXt3C64pcAYAAAAAyGiZJsBOiyFDhrisWbPaCLYKlzVr1sw9++yzGb1ZAAAAAABk7gB72rRpKb5X8bPhw4fbDQAAAACAzCTTFDkDAAAAACDICLABAAAAAIgDAmwAAAAAAOKAABsAAAAAgDggwAYAAAAAIA4IsAEAAAAAiAMCbAAAAAAA4oAAGwAAAACAOCDABgAAAAAgDgiwAQAAAACIAwJsAAAAAADigAAbAAAAAIA4IMAGAAAAACAOsrs48jzPffHFF27Xrl2uQYMGLl++fPF8egAAAAAAEm8E+95773WNGzdOEVyff/757rzzznMtW7Z01atXdwsXLozXdgIAAAAAkJgB9ocffujq1KkT+n7UqFFu6tSpbsCAAW7ChAlu37597sEHH4zXdgIAAAAAkJgp4suWLXMnn3xy6PvRo0e7KlWquD59+tj3N998s3vuuefis5UAAAAAACTqCHb27NltrrWfHq7R6wsuuCD082LFirm1a9fGZysBAAAAAEjUALtatWrurbfechs2bHAjRoxw69ats7nXvsWLF7uiRYvGazsBAAAAAEjMFPG+ffu6iy66KBREn3XWWSmKnk2cONHVrl07PlsJAAAA/D8V1l25cqXLmjWrrVozdOhQd/rpp8e8P9KsWbNsOqPs2bPHVr/RY3PlysVrDCBjAmxVC//+++/dlClTXMGCBV379u1DP9Oo9jnnnONatWp1eFsHAAAARPjggw+s/SljxoxxHTt2dD/++GPM+yPVqFHDffvtty5Hjhxu//79rk2bNu7ZZ591PXr04LUGkHHrYKuomW6RChUq5IYMGXI4Tw0AAABE5QfRsmnTJpclS5ZU7490zDHHhL7evXu327FjR8zHAsBRC7Bl9uzZ7osvvnCrV692t9xyi6tQoYLb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YqZibonEfz3UOaLGqwIWNepVAVZFslT8a9q0afYaKTDVaERQGvXaNx1PbauK8b377rt2/FQkSgXPFHTeeuuttr/hxzm8sRsk/nF59tln3UsvvWRZJSpUp0brd999Z50j2m9VZw7qvqkYlBrr6uB588037f373nvvufXr11sBJXUA6nF6r4YH3UGkgETnrQpEqViUjp0CFl2PdXyDfL1RlpeKXOn4KfNAx3L8+PFWVVznrFYuUBZC+OeRbkG8/n777beubt269j5UJ4EKe3Xo0MG+vuGGG6yDSNdWdWzqnFVHn65bKv4VdLrG6rNFnyPqOFDBxccff9zObXUEqk0RhM8SAAkgo3PUkT6aS1SgQAHvm2++se9PP/10b+jQoaEiZ82aNfPGjBkT2Je1a9euXps2bezrHTt2WCGod955x+7X/KkTTzwxUMWE/Hlh2v6CBQva3PHevXt7n3322QFzGn/99Veb/5jI/DmtAwYMsIJ1ovmOxx9/vBXi0ev1xBNPePfee29gi9HouObJk8f74IMPvAULFng//fSTN2zYMK9hw4Y2N1kFhj766CMvURQtWtTeo1KzZk3vkUcesa+//PJLK0ioAlpBpCJRefPmtfmqUrVqVe/VV1+1r3X8VITvjz/+8IJO++lfp3S+Dho0yOYi33777d7rr78eelyQrrs+f7+uuuoq7/rrrw/dr/2rUqWKV7duXa9p06ZetmzZvKuvvjqw15xw//77r82n1zVUt5NOOskK2J122ml27fnrr7+8ROIf41mzZtlnrOpa6FzVPs+dO9d+pmuxCpytWbMmg7cWQLJgHeyA0WiKRnc1oqvRXo3utm7d2n6m9VrVU6tRwaBQ77lSZDUyrf1QmppGFES961pvVjfNidP+alRBIxJBWWbD38apU6faPig9T3PINUqrY6g1vs8//3wbMXrhhRcs1VSvRVD2L7380QONKPlp0w899JClFeu18dNVdQ5o9Doo67RqNEwjRDVr1rT0cB1T7Z8/z1PnsDJP/vjjDzvGfupmUPYvkr/d/vJ52jcdN+2fzl/R1BStq6zlnoK4b8oG0jJyyjhQhtDKlSttHqdoVF73aYpDEPn7qLWSr7vuOhu51vx5fXZomcdo158gnqf+PmhJrj59+qSYtqBRXi3bpfnlmgKg+heafhWkDKlodB1SOr+mWSldWkuPaX+VPXPs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smXAa/70/JFHHjGJiYnmuuuuM6VLlzbNmzc3W7duta8nJCSYunXr2l7vtm3bmr1792arXLt27TL9+vUzlSpVsvsrG+DMmTMB5dENgddee82Xdq/9AQAAchvdEgCQS06cOGGOHj0asE3BYHR0tBkzZoxZvny5efDBB22gWr58efPBBx+YOXPmmAkTJpjrr78+4H0TJ060733iiSfM4cOHzYwZM0z79u3NV199ZQNeWbVqle01b9q0qS+Anzt3rmnXrp1Zs2aNufHGGwOO2bNnT1OvXj07ntnzvHTPRe9PSkoyQ4cOtc+fe+4507lzZzNy5EgTHx9vhgwZYlJSUsyUKVNM//79bVmczJbrrrvusqn1+ozNmzebV155xVStWtVMnjzZvr5gwQIzYMAA+z7dkJA6depk4QoBAABkkwcAyFFz585VtBryUbJkSd9+W7du9aKiorwBAwZ4KSkpXmxsrNesWTPv/Pnzvn2Sk5Pt+/TayZMnfdsXLVpkt8+cOdM+v3TpklevXj2vQ4cO9v/OmTNnvNq1a3u33nqrb9u4cePse3v16pWq7O41f67ce/bs8W1LSEiw22NiYgLKNWrUKLvd7ZuVcvXv3z/g87t27epFR0cHbCtbtqzXt2/fdK8DAABATqMHGwByyYsvvmiuueaagG3FihXz/b9hw4Zm/PjxZtSoUebrr7+2vd0ffvhhyDHQffr0sb3cjib4qlatmnn33XfNsGHDbE/2zp07bc/4sWPHAt57yy232F7fS5cu2d5j5+GHHw77XHSMWrVq+Z7HxcXZn927dw8ol9u+e/duu38kytWqVSuzdOlSc/LkSVOhQoWwywwAAJDTCLABIJcohTmjSc4ef/xx8/bbb5svvvjCpmprjHMoSuX2p3RxjXt2450VxErfvn3TTVnXeGsn1AznaalRo0bAc42NlquuuirkdqWLZ7VcwZ/lXtMxCbABAEB+QoANAPmIenpdEOomDcsK9QLL1KlTTZMmTdJc2sqfG7sdDv+e93C2uzHdWSlXRscEAADILwiwASCfUPCp2a/VK/voo4/aHmylfnfr1i3Vvi4I9w82Ndt248aNAyb50rE0+Vl+kVPlCp7pHAAAIC+wTBcA5BPTp083n332mZk9e7adObxFixZm8ODBqWYel/nz55tTp075ni9evNgcPHjQzs4tmqFbwey0adPMTz/9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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Function to display model accuracy\n", + "def plot_model_accuracy(df, title):\n", + " ax = df[[\"Accuracy (%)\", \"Balanced Acc (%)\"]].plot.bar(\n", + " rot=70,\n", + " figsize=(10, 6),\n", + " width=0.8,\n", + " color=sns.color_palette(\"Blues\", 2)\n", + " )\n", + "\n", + " for container in ax.containers:\n", + " ax.bar_label(container, fmt=\"%.1f\", padding=3, fontsize=8)\n", + "\n", + " ax.set_title(title, fontsize=14)\n", + " ax.set_xlabel(\"Experiment\\n(width=4 unless otherwise indicated)\", fontsize=12)\n", + " ax.set_ylabel(\"Scores\", fontsize=12)\n", + " ax.set_ylim(0, 65)\n", + " ax.axhline(33.3, color='gray', linestyle='--', alpha=0.6, label='Random Chance (33%)')\n", + " ax.legend(title=\"Metrics\", bbox_to_anchor=(1.05, 1), loc=\"upper left\")\n", + "\n", + " plt.tight_layout()\n", + " plt.show()\n", + "\n", + "# Display results in experimental order\n", + "plot_model_accuracy(results_df, \"Model Accuracy (Experimental Order)\")\n", + "\n", + "# Display results sorted by balanced accuracy\n", + "sorted_results_df = results_df.sort_values(by=\"Balanced Acc (%)\", ascending=False)\n", + "plot_model_accuracy(sorted_results_df, \"Model Accuracy (by Balanced Accuracy)\")" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "9d85ee62", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAHqCAYAAAAZLi26AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAgHFJREFUeJzt3Qm8VPP/x/HvTVRoj3YqFUkklOyyVEJZKtmJRJbsESJLWUqIFkvlh1C0aKPSIpW0IS0q7RtpVSnV+T/eH/8zzV3mdpc5d2bufT0fj3nce8+dbjPf+Z5zvp/v8vkmeZ7nOQAAAAAAEHX5ov8nAQAAAAAAQTcAAAAAAAFipBsAAAAAgIAQdAMAAAAAEBCCbgAAAAAAAkLQDQAAAABAQAi6AQAAAAAICEE3AAAAAAABIegGAAAAACAgBN0AAOQxSUlJ7tlnn830v1u+fLn92/79+wfyugAAyI0IugEAiAEFrgpg9ZgyZUqq33ue5ypWrGi/v/zyyxPqM5o4caK97sGDB8f6pQAAEHME3QAAxFDBggXdJ598kur4pEmT3OrVq12BAgVi8roAAEB0EHQDABBDl112mRs0aJDbu3dvsuMKxE877TRXpkyZmL02AACQfQTdAADEUKtWrdxff/3lxo4dGzq2Z88em5p9/fXXp/lvduzY4R5++GGbfq6R8OOPP9699tprNiU93O7du92DDz7ojjrqKFe4cGF35ZVX2uh5WtasWeNuv/12V7p0afubNWvWdB988IEL0u+//+6aN2/uSpQo4Q4//HB35plnupEjR6Z63ltvvWWvR88pXry4O/3005PNDti+fbtr3769q1Spkr32o48+2l1yySVu9uzZgb5+AAAygqAbAIAYUqBYv359N3DgwNCx0aNHu61bt7rrrrsu1fMVWCt4fv31112jRo1c9+7dLeh+9NFH3UMPPZTsuXfccYfr0aOHu/TSS13Xrl3doYce6po0aZLqb27YsMEC3nHjxrl7773XvfHGG65q1aqudevW9u+DoP/zrLPOcl9//bW755573Isvvuj++ecfe29DhgwJPe/dd991999/vzvxxBPttTz33HOudu3a7ocffgg9p23btq5Xr17ummuuce+884575JFHXKFChdyCBQsCee0AAGSKBwAAcly/fv00LO39+OOPXs+ePb3ChQt7O3futN81b97cu/DCC+37Y4891mvSpEno3w0dOtT+3QsvvJDs71177bVeUlKSt2TJEvt57ty59rx77rkn2fOuv/56O96pU6fQsdatW3tly5b1Nm7cmOy51113nVe0aNHQ61q2bJn9W7329EyYMMGeN2jQoIjPad++vT3nu+++Cx3bvn27V7lyZa9SpUrevn377FjTpk29mjVrpvv/6TW2a9cu3ecAABArjHQDABBjLVq0cLt27XIjRoywqdL6Gmlq+ahRo9whhxxio7/hNN1co+AaJfefJymfp2nY4fRvvvjiC3fFFVfY9xs3bgw9GjZsaCPuQUzT1uurW7euO+ecc0LHjjzySNemTRvbmmz+/Pl2rFixYjYl/scff4z4t/QcjXyvXbs26q8TAIDsIugGACDGtOb64osvtnXKX375pdu3b5+79tpr03zuihUrXLly5WyNdrgaNWqEfu9/zZcvnzvuuOOSPU9T0cP9+eefbsuWLa5v3772OsIft912mz3njz/+iOr79V9fyteS1vt4/PHHLRhXgF6tWjXXrl079/333yf7N6+88oqbN2+erXHX87QHudaLAwAQD/LH+gUAAABnI9t33nmnW79+vWvcuLGN3uaE/fv329cbb7zR3XLLLWk+5+STT47ZR6QgfNGiRTb6P2bMGBuV17rtZ555xtZ3+zMFzj33XFsL/s0337hXX33Vvfzyy9aBobIEACCWGOkGACAOXHXVVTYyPX369IhTy+XYY4+1adSahh5u4cKFod/7XxVQL126NNnzFMCG8zOba3Rdo+1pPZQNPNr0+lK+lrTehxxxxBGuZcuWrl+/fm7lypWWDM5PvOYrW7asJWQbOnSoW7ZsmStZsqQ9BwCAWCPoBgAgDmgKtTJwa2q01lent6+3AuSePXsmO65s5klJSaGRXf/rm2++mex5KbORa324sn5rBFlTtFPS9PMg6H3MmDHDTZs2LdlWaJrmrozuylYu2k4t3GGHHWa/0/rzf//918pC687DqZNAU/C1ZRoAALHG9HIAAOJEpOnd4RSQX3jhha5jx46WcOyUU06xKdXDhg2zJGn+Gm5tq6U9wDUVW0GptucaP368W7JkSaq/qe3EJkyY4OrVq2dT3BXUbtq0yRKoaRsxfZ8VCuT9keuU77NDhw62TZo6B5TsTXt1DxgwwEap9e806i/a7qxMmTLu7LPPtj3EtQ2YOhw0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myBeIwAAAAAAeSPo1tRs7e/28ccfu4ULF9oxbcl1ww03hNZWAwAAAACALATdom3B7rzzzmTHfv/9d9e2bVtGuwEAAAAAyGoitUi2b9+eansuAAAAAADysqgF3QAAAAAAIDmCbgAAAAAAAkLQDQAAAABArBOpnXrqqS4pKSni73fu3Bmt1wQAAAAAQN4Kups1axbsKwEAAAAAIK8G3Z06dQr2lQAAAAAAkMuwphsAAAAAgFgG3Y0aNXLTp0/P0F7dL7/8snv77bej8doAAAAAAMj908ubN2/urrnmGle0aFF3xRVXuNNPP92VK1fOFSxY0G3evNnNnz/fTZkyxY0aNco1adLEvfrqq8G/cgAAAAAAckPQ3bp1a3fjjTe6QYMGuc8++8z17dvXbd261X6njOYnnniia9iwofvxxx9djRo1gn7NAAAAAADkrkRqBQoUsMBbD1HQvWvXLleyZEl36KGHBvkaAQAAAADI3UF3SppqrgcAAAAAAEgb2csBAAAAAAgIQTcAAAAAAAEh6AYAAAAAICAE3QAAAAAAxEvQvWrVKrd69erQzzNmzHDt27e3bcQAAAAAAEA2gu7rr7/eTZgwwb5fv369u+SSSyzw7tixo+vcuXNm/xwAAAAAALlWpoPuefPmubp169r3n3/+uTvppJPc1KlT3ccff+z69+8fxGsEAAAAACBvBN3//vuvK1CggH0/btw4d+WVV9r3J5xwglu3bl30XyEAAAAAAHkl6K5Zs6br3bu3++6779zYsWNdo0aN7PjatWtdyZIlg3iNAAAAAADkjaD75Zdfdn369HEXXHCBa9WqlTvllFPs+PDhw0PTzgEAAAAAgHP5M1sICrY3btzotm3b5ooXLx463qZNG3f44YdTpgAAAAAAZHWke9euXW737t2hgHvFihWuR48ebtGiRe7oo4/O7J8DAAAAACDXynTQ3bRpU/fhhx/a91u2bHH16tVz3bp1c82aNXO9evUK4jUCAAAAAJA3gu7Zs2e7c889174fPHiwK126tI12KxB/8803g3iNAAAAAADkjaB7586drnDhwvb9N998466++mqXL18+d+aZZ1rwDQAAAAAAshh0V61a1Q0dOtStWrXKff311+7SSy+143/88YcrUqRIZv8cAAAAAAC5VqaD7meeecY98sgjrlKlSrZFWP369UOj3qeeemoQrxEA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x8aNG12JEiVcvnz092e2QU6ZZQ/37GDaS4ULF3azZ892J510UgD/Q+7k37fXrl3rtm7d6mrUqJHs99TVrN9rdK2cO3eutd2rVatmX1XW5cqVc/Egf6xfAKJjx44d7qOPPrJgcd68ee6QQw5xderUcRUrVrTKVqFCBTvGyZy+sWPHujfeeMOtWrXK1a5d261YscI9/vjjdmO5+OKL3d133+0uvPBCAm7qZEw8+OCDdhNRPT322GNd2bJl7ZyvW7euu+KKK+xnHNybb77pJk+ebDfjWbNmuVKlSlnn2qmnnupq1qzpjjvuOAtyCHaybsuWLe6qq65y5cuXd1OmTHH58+e38j3qqKPciSee6C655BJ3/PHHU10j+PLLL20U8eijj3ZLliyxYxdccIE766yz3AknnOBKlixpx7inJ+efs6p/48aNc++//76d39dcc41dI9UOotyiY+HCha5BgwbumGOO4TzOoNWrV1ub8uuvv7Z7za5du9zy5cvdmWee6Vq0aOGaN2+eK/ajjoUePXq4Xr16uVNOOcUGzVSu6tDQ/Ubt+caNG9vv/BlEsRg4Y6Q7l5gwYYLr0qWL9TzWqlXLenp+/vlnG8VR8K2T+eabb6a3/CDU81isWDErtz/++MMVKlTIRha/+eYbO5m/++47d9lll7kXXnjBTmJNsfJv4qBOBt2x9vDDD1vgokakzu8NGzbY6KE6h3Sj1g37pptustFEAsa06Zx99dVX7VqpGQMKXjRS8+2337rt27e7qlWrWufaDTfcwCmdDbp+9u/f3zp9K1eubA10dXCsXLnSRnpU7tdff7277rrrKOc0PProo9ahppEwdaYp8FZn25o1a9zpp5/unnzySde0aVPKLgX/unf77bfbea1gu1OnTq5Nmzaud+/e7s8//7S6x8yB7Jfx559/bmV64403Wnnj4NQ213XwvPPOs2n5aj/qWjly5Eg7v9X2VFB+xx13uCJFinAfz4RFixZZ+133Fw04/vXXX2706NF2b58/f77NVu3QoYO7/PLLXcx4yBU2b94c+n7Hjh2h70ePHu21aNHCy58/v1e3bl1v0qRJdnzfvn0xeZ2JYPfu3RF/N3nyZO/qq6/2WrZs6a1duzZHX1eioU7mjDVr1nijRo3y7r33Xq9OnTrefffd5/3777859L8npkjlM3v2bO/222/3Dj30UO/cc8/1Zs6cacf379+fw68w99qyZYs3YsQIr1WrVl6JEiW81q1bexs3boz1y4o7//zzT+j7vXv3hr6fN2+ed+utt3oFChTwmjRpYj8LdfRAGSxbtswrUqSI98svv9jPFSpUsGukvPHGG1b3dN1E1m3dutUrXry4l5SU5B177LHeO++8461bt44izQa1KTt37uydfvrp3qOPPprsvEfmpLweLliwwLvzzjvtunnXXXd5O3fu9GKBoDsXCT9BUwbVK1as8G655Rbvwgsv9ObOnRuDV5d4J+yePXtC5RhenrqRX3HFFV6NGjVCDR6kzS83vzzDUSezXp4KGlPeVPTzsGHDvFq1anmNGzf21q9fT7XMwPVSZZryerlw4ULvpptusmvm33//TTlG4fxPKyicMGGCd9FFF3mPPfYYZRyhjvrlpnM+vJ5+//333nXXXWf1VB0ZONDQfu2117yzzjrLvh80aJB3zDHHhBrZqnOnnHJKsk4NZI3KdOzYsd61117rHX744RaEqz5+/fXXFpQj/WtiePvSvx+pTL/88kvvhBNO8C677DI6hzLpYJ2PGni8/PLLvRdffNGLBbKZ5BLqQAmfLuV/r6mUemjNzcsvv+xOPvlkW9fw/fffx/DVxi+t5/7ll19srYemnvrlqOkqe/bsse+VMGT48OGudevWNn0F6Se2EL88ReWo6Wmqk127dqVOZoJfH7U+9u+//072O5XxlVdeaUtNNGWtZ8+ebu/evWSNjsBfFqIy1Tp5n+qm1hp37NjR1t9paY7Of2S9vqpuao2tEteJv6ZOa5R1DRg2bJhN+SfDeeo66q871Dmv8vSvn1rb/cwzz7h169a5tm3b2trQvM4vq+rVq9vUfPnss89sirmWiomm8ZYuXdqW45AxOntUxsp1o9wDWvbQvXt3y4fTqFEjWwqF9K+J/vVOx/z7keqpcmH88MMPlv9i+vTpFGMmqFwV8+jePWnSJJvKH55tX9P677rrLjd16lS3ePFil9NY053L/P/shXTXK3388ceW3EYNHhzw448/unr16rkjjzzSykdrY2+55Rb7/s4773QPPPCAJWXQGm/dbNSI1E1b62eRdiIgvxOjXbt27tlnn424/p06mfF1dLqZfPLJJ+6nn36ysr3nnnus0R1ODSAF382aNbP6jNTlqE6LUaNGuQ8//NDWeCrZis5xv7HuP3fo0KHu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nTp1cmeeeaZ7/PHHXbly5Wy6LgE3coofQA8bNswyld96662WS0CdubrvaAs7Lb855ZRTbMaVchDkxYBb8sYkegAA8hh/nZz2ltbodko333yz7eurdaF+4wlA4tA5q0fDhg3d008/bckQNZtlwoQJsX5pyCP8+4ZGtW+44QYLspXoT/kFlLVcHUH16tVzX3zxhbvnnntsinleRdANAEAuEx5AX3zxxe5///ufNYqUTM2nPaeVQVZJmCSvjj4AiUrnrH/eXnPNNe6nn36yGSxjxoyxY3SkISc6d7dt2+ZmzJhh2fR92h5MU8wHDhxo+UQ++eQT98cff9he8nkV08sBAMhl/Ia4Gt1XX321bSGkwHvWrFnu2GOPdStWrHC///67Bdwakcira+yA3ETbMn311Ve21ls4rxEkP/O47i0FChSw4Fu7OKxfv9799ddfNtKtWVa6t9StW9dt3brVHXbYYXn2QyHoBgAgF/Ab2L/99psF161atQoF0g8++KCrXLmyTfGbOXOmK1asmGUv1xRzALkr8Pblla2YEBt+/dLe2xUqVLCRbeUL0SwqreEuX7586LmzZs1ye/fudaeeemqe/bjIXg4AQC7Sq1cv165dO1ekSBF3+eWX2zq6s846K/R7ZZbVdi3KJgsAQHZohHv69Olu8uTJtsRBQbfuMZpJdd5557mmTZva8gflF3nnnXfybHZ9gm4AAHIR7cGttduTJk1ygwYNctOmTbNsshr5VoKb4447LtYvEQCQC61du9YCcN1/FHzrfqS9uceOHesWLlyYp5czEXQDAJALaS2dRiCWLFnihg8fbvv3/vjjj+6cc85xN954o00FlLzY+AEABEtB9nfffWf3nvz587uPPvootA48LyLoBgAgl9I0PgXfK1eutO2ElK1c+3aLGj8AAATp33//tSRqyjeQV0e5hQVdAADkkgB73LhxNrq9ePFi26tX6+Y0uq3Gjr9X93XXXefq168f+jd5cW0dACBnHHrooaEEf3k14BZGugEASGD+dD2NYPtTxhs0aODq1atn27Poq4JrfS1YsKAluAEAADmHkW4AABKYvz5OW4UpO2yNGjXsa+3atV2jRo1c4cKFkz1f27aQuRwAgJzDSDcAALmAssTOmDHDppgra+yaNWss4K5Vq5aNfOuhbcQAAEDOIugGACCXUcD9/fffuylTprgFCxZY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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Plot final loss\n", + "ax = results_df[\"Loss\"].plot.bar(figsize=(10, 5), rot=70)\n", + "\n", + "ax.set_yscale('log')\n", + "formatter = ScalarFormatter()\n", + "formatter.set_scientific(False)\n", + "ax.yaxis.set_major_formatter(formatter)\n", + "ax.yaxis.set_minor_formatter(formatter)\n", + "\n", + "ax.set_title(\"Model Loss\")\n", + "ax.set_xlabel(\"Experiment\")\n", + "ax.set_ylabel(\"Loss (Log)\")\n", + "ax.grid(axis='y', which='both', linestyle='--', alpha=0.5)\n", + "\n", + "plt.tight_layout()\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "id": "408b9c03", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Confusion Matrix:\n", + "[[103 52 21]\n", + " [ 72 125 58]\n", + " [ 7 28 48]]\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAh8AAAHMCAYAAAB1H8rNAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAgXJJREFUeJzt3QV8E3cbB/BfSr2lLVIoTnF3t+HuDB/DZUPGgBcbvuEM16GD4cPd3d3doRSvABUoeT/Pv0to2hRKCank993nVnJ3uVwul9xzz980Wq1WCyIiIiIzsTLXCxEREREx+CAiIiKzY+aDiIiIzIrBBxEREZkVgw8iIiIyKwYfREREZFYMPoiIiMisGHwQERGRWTH4ICIiIrNi8PEF/Pz88Msvv8DT0xM2NjbQaDQ4e/bst/t0AKRPn15NFD1DhgxRn9PevXu/2SF8+/YtUqVKhQ4dOnyz1yCiuKV06dIoWrRoTO9GrBWrg49Tp06hbdu2yJw5M5ycnODg4ICMGTOiRYsW2LFjh9n3p3fv3pg8eTJy5cqFvn37YvDgwfDw8IAlkUBILuYyXbx40eg6ISEh6mKsW+/u3bvRfr0FCxaobcjf2Grs2LF4/vw5BgwYYDC/bNmy+mOgmyRoTZMmDZo1a4YLFy6YbR+jexx1zws7yfcwW7Zs6NGjh3rfBHVc5POO6yRIl/fSqVMns7xeXPh+f82Nz/Hjx7Fs2bKY3pVYyRqx0IcPH9CrVy9MmDAB1tbWKF++PGrXrq1+uG/fvo1Nmzbhn3/+wbBhwzBw4ECz7dfGjRuRJUsWbNiwwWyvuWvXLsQ2VlahMeu8efMwfvz4CMu3bNkCLy8v9dm9f/8eMalLly5o0qQJ0qZN+82yYePGjUPjxo0jfY2ePXvC2dlZ/fv169cqWyY/SGvXrsX+/ftRqFAhxHYVKlRAqVKl1L+fPXuGbdu2qe/n6tWr1U1CkiRJYnoXiWLdd6ZAgQLqJlV+HyTIolgefMgdpPyw5cuXD//++6/KdoQVEBCAqVOn4sWLF2bdL7mglilTxqyvGf69xwYSBMpxkABw9OjR6nFYEpS4uroib9686uIak5ImTaqmb2XRokUqoPjxxx8jXUcC6fAZMsmW6DJpCxcuRGxXsWJFle3TeffuHapUqYI9e/ZgypQp6i6PiAz98MMPKkO4e/duFYxQGNpY5saNG9oECRJokyRJovX29v7kuoGBgQaPnz17pv3ll1+06dOn19ra2mrd3d21DRs21F64cCHCc1u2bCmj+Wpv376tnTRpkjZr1qzqOWnTptUOGTJEGxISEmHd8NN3332nlg8ePFg93rNnT4TXmT9/vlomf8PavXu3tmrVqtoUKVKo102WLJm2VKlS2lmzZhmsly5dOjWF9/r1a+2gQYPUftvZ2WkTJUqkrV69uvbgwYMR1g27f4sXL9bmzZtXa29vr/Xw8NB269ZN+/bt208e5/D7I6+3dOlStc1Vq1YZLH/69KnWxsZG26lTJ22VKlXUOnfu3NEvDwoK0k6ePFlbuXJlberUqfWfU7169bSnT5822FZkxz3saSufgTwOCAjQ/vbbb9oMGTJora2t1XsO/951OnbsqOaNHDkywvvTLRs1alSUjkfBggW1iRMnNjhfwu/b48ePIyw7f/68WlatWrUIyz58+KCdO3eutkSJEtqECRNqHRwc1OvIvPDkfY8bN06bJ08erYuLi9bR0VF9RnLenz17NsrHMTK689fYsVq2bJlaJuedOHnypLZz587anDlzqn2RcyxXrlzqucHBwRGerzu3X716pZ4n54N893Xflehuz8fHR51/cn7L8ShdurT21KlTap1Hjx5pmzdvrs452V6lSpW0169fN/re5behbdu22jRp0qjzVLYnx/Lu3bv6deS8iuzYhv/Or127Vlu+fHmtm5ub+g7J+xo7dqz2/fv3Ro+5/F2/fr06D5ydnQ1+B/79919tmTJl1PuQbcnvSIUKFdT8r6F7P/I9MHYuy3GX75TsixyTzJkza6dNm/bNzsvongP+/v7qt033+5o7d27typUrjb5n+U0aP368tlChQuo4Ozk5abNnz6799ddftS9fvjRY98mTJ9ru3btrM2bMqLYr16n69esbvcaIBw8eqPfzww8/RPETsByxLvMhZX9SZ6Bjx45Injz5J9e1s7PT/1tSwcWLF8etW7dU2auk2u/cuaMyJ1JMI2liXdo4rP/973/Yt28fatasqe7kJBUud3HBwcEYPny4Wqdu3bqqrsPQoUORLl06tGrVSs2PbkVQ2Z9atWrBzc0NderUQYoUKdT+nzt3Tt1Jf67iYmBgoCqKkvJESet1794dT548wfLly9X7XLp0KRo2bBjheZIt2rp1q3pNeb78W+68pdx+8eLFX/Qe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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Define labels and true/pred data\n", + "labels = [\"CN\", \"MCI\", \"AD\"]\n", + "y_true = test_results[\"Best\"][\"instance\"][\"y_true\"]\n", + "y_pred = test_results[\"Best\"][\"instance\"][\"y_pred\"]\n", + "\n", + "# Generate matrix data\n", + "cm = confusion_matrix(y_true, y_pred)\n", + "cm_pct = cm.astype(\"float\") / cm.sum(axis=1)[:, np.newaxis]\n", + "\n", + "print(\"Confusion Matrix:\")\n", + "print(cm)\n", + "\n", + "# Add percentage annotations\n", + "annotations = (np.asarray([f\"{count}\\n({pct:.1%})\" for count, pct in zip(cm.flatten(), cm_pct.flatten())])).reshape(3, 3)\n", + "\n", + "# Display confusion matrix\n", + "sns.heatmap(cm, annot=annotations, fmt=\"\", xticklabels=labels, yticklabels=labels, cmap=\"Blues\")\n", + "plt.title(f\"Confusion Matrix (Best Parameters: Instance)\", fontsize=14)\n", + "plt.xlabel(\"Predicted Label\", fontsize=12)\n", + "plt.ylabel(\"Actual Label\", fontsize=12)\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6beba906", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": ".venv (3.13.11)", + "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.13.11" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/pyhealth/datasets/__init__.py b/pyhealth/datasets/__init__.py index 7ac05f259..c4d8592c7 100644 --- a/pyhealth/datasets/__init__.py +++ b/pyhealth/datasets/__init__.py @@ -47,6 +47,7 @@ def __init__(self, *args, **kwargs): from .base_dataset import BaseDataset +from .adni import ADNIDataset from .cardiology import CardiologyDataset from .chestxray14 import ChestXray14Dataset from .clinvar import ClinVarDataset diff --git a/pyhealth/datasets/adni.py b/pyhealth/datasets/adni.py new file mode 100644 index 000000000..6dce557b2 --- /dev/null +++ b/pyhealth/datasets/adni.py @@ -0,0 +1,237 @@ +"""Alzheimer's Disease Neuroimaging Initiative (ADNI) dataset. + +Author: Bryan Lau (bryan16@illinois.edu) +Description: + A Pyhealth dataset for Alzheimer's Disease Neuroimaging Initiative (ADNI) MRI + brain scan images in Neuroimaging Informatics Technology Initiative (NIftI) + format. +""" +import os +import pandas as pd +import random + +from lxml import etree +from pyhealth.datasets import BaseDataset +from pathlib import Path +from typing import Optional + + +class ADNIDataset(BaseDataset): + """Alzheimer's Disease Neuroimaging Initiative (ADNI) dataset. + + A Pyhealth dataset for Alzheimer's Disease Neuroimaging Initiative (ADNI) + MRI brain scan images. + + Since the ADNI dataset itself is not public, users wishing to use the + actual files must apply for access at: + + https://adni.loni.usc.edu/data-samples/adni-data/ + + The required pre-processing parameters are: + + - Multiplanar reconstruction (MPR) + - Gradient warping correction (GradWarp) + - B1 non-uniformity correction + - N3 intensity normalization + + These parameters produce the directory structure that this dataset + looks for when it attempts to parse the downloaded files. + + When extracted, the downloaded zip files produce a directory + structure containing: + + - MRI image files in NifTI format (*.nii) + - Corresponding XML metadata files (for each image) + + The directory structure has the following layout: + + - root + - subject id + - pre-processing transform + - date acquired + - image uid + MRI image file + metadata xml file + - subject id + - subject id + metadata xml file + metadata xml file + metadata xml file + + A separate catalog CSV file can also be downloaded, but is not used by + this dataset. + + The dataset provides: + + - Structural brain MRI scans + - Patient diagnostic labels, indicating: + - Cognitively Normal (CN) + - Mild Cognitive Impairment (MCI) + - Alzheimer's Disease (AD) + - Demographic information + - Gender + - Age + - Weight (Kg) + + Args: + root (str ): Root directory of extracted ADNI dataset files. + config_path (str): Path to the configuration file. + dataset_name (str): Name identifying this dataset, default "ADNI". + dev (bool): If True, number of loaded images is restricted to 100. + + Raises: + FileNotFoundError: If either the root directory, subject directories + or MRI images are missing. + + Example: + >>> from pyhealth.datasets import ADNIDataset + >>> from pyhealth.tasks import AlzheimersDiseaseClassification + >>> adni_dataset = ADNIDataset(root="/path/to/adni_data", dev=True) + >>> ad_task = AlzheimersDiseaseClassification() + >>> samples = adni_dataset.set_task(ad_task) + """ + + def __init__( + self, + root: str, + config_path: Optional[str] = str( + Path(__file__).parent / "configs" / "adni.yaml"), + dataset_name: str = "ADNI", + dev: bool = False, + **kwargs + ): + """Initialize the ADNI dataset. + + Args: + root (str): Root directory of extracted ADNI dataset files. + config_path (Optional[str]): Path to the configuration file, + defaults to "../configs/adni-metadata-pyhealth.csv" + dataset_name (str): Name identifying this dataset, default "ADNI". + dev: If True, number of loaded images is restricted to 100. + """ + self.root = Path(root) + self.dev = dev + + self.DEV_LIMIT = 1000 + + # Validate data path + self._validate_data_path(self.root) + + # Write patient catalog + self._write_patient_catalog(self.root) + + super().__init__( + root=root, + tables=["adni"], + config_path=config_path, + dataset_name=dataset_name, + dev=dev, + **kwargs + ) + + def _write_patient_catalog(self, data_path): + """Scan the data path and build a patient catalog from metadata xml files. + + Builds catalog and writes to adni-metadata-pyhealth.csv. + + Args: + data_path: Root directory path of the extracted ADNI files. + """ + + patient_catalog = [] + patient_set = set() + + # Find all metadata xml files located in the root directory + # e.g. ADNI_002_S_0295_MPR__GradWarp__B1_Correction__N3_S13408_I45107.xml + metadata_files = Path(data_path).glob("ADNI*.xml") + + # If a dev limit is requested, then sample the list randomly + if self.dev: + metadata_files = random.sample( + sorted(metadata_files), k=self.DEV_LIMIT) + + # Read MRI subject and image metadata from each xml file + for idx, file in enumerate(metadata_files): + + xml_root = etree.parse(file) + + # Subject node + xml_subject = xml_root.find(".//project/subject") + subject = xml_subject.find("./subjectIdentifier") + gender = xml_subject.find("./subjectSex") + group = xml_subject.find("./researchGroup") + + # Study node + xml_study = xml_root.find(".//project/subject/study") + age = xml_study.find("./subjectAge") + weight = xml_study.find("./weightKg") + + # Series node + xml_series = xml_root.find(".//project/subject/study/series") + date_acquired = xml_series.find("./dateAcquired") + image_uid = xml_series.find( + "./seriesLevelMeta/derivedProduct/imageUID") + + # Dev limit + patient_set.add(subject.text) + if len(patient_set) > self.DEV_LIMIT: + break + + # Locate image + image_glob = Path(data_path).glob( + f"{subject.text}/**/{date_acquired.text}*/I{image_uid.text}/ADNI_{subject.text}_*.nii") + image_path = next(image_glob) + + # Patient record + patient_record = { + "patient_id": subject.text, + "gender": gender.text, + "age": float(age.text), + "weight": float(weight.text), + "group": group.text, + "timestamp": date_acquired.text, + "image_uid": image_uid.text, + "image_path": image_path + } + patient_catalog.append(patient_record) + + patient_catalog_df = pd.DataFrame(patient_catalog) + patient_catalog_df.to_csv(os.path.join( + self.root, "adni-metadata-pyhealth.csv"), index=False) + + def _validate_data_path(self, data_path): + """Validate the provided root data path. + + Checks that the specified root data path: + - Exists + - Contains at least one subject directory + - Contains at least one metadata xml file + - Contains at least one subject MRI image in NifTI format + + Raises: + FileNotFoundError: If the root directory is missing. + FileNotFoundError: If patient subject directories are missing. + FileNotFoundError: If metadata xml files are missing. + FileNotFoundError: If MRI images are missing. + """ + + # Exists + if not os.path.exists(data_path): + msg = "Root dataset path does not exist!" + raise FileNotFoundError(msg) + + # Contains subject directories + subject_dirs = list(Path(data_path).glob("*_S_*/")) + if not subject_dirs: + msg = "Dataset path must contain subject directories!" + raise FileNotFoundError(msg) + + # Contains metadata xml files + if not list(Path(data_path).glob("*.xml")): + msg = "Dataset path must contain metadata xml files!" + raise FileNotFoundError(msg) + + # First subject has at least one NifTI MRI image + if not list(Path(subject_dirs[0]).glob("**/*.nii")): + msg = "Dataset path must contain MRI images!" + raise FileNotFoundError(msg) diff --git a/pyhealth/datasets/configs/adni.yaml b/pyhealth/datasets/configs/adni.yaml new file mode 100644 index 000000000..7a1d39a7f --- /dev/null +++ b/pyhealth/datasets/configs/adni.yaml @@ -0,0 +1,13 @@ +version: "1.0" +tables: + adni: + file_path: "adni-metadata-pyhealth.csv" + patient_id: "patient_id" + timestamp: "timestamp" + attributes: + - "gender" + - "age" + - "weight" + - "group" + - "image_uid" + - "image_path" diff --git a/pyhealth/models/__init__.py b/pyhealth/models/__init__.py index 945822910..021307460 100644 --- a/pyhealth/models/__init__.py +++ b/pyhealth/models/__init__.py @@ -1,5 +1,6 @@ from .adacare import AdaCare, AdaCareLayer from .agent import Agent, AgentLayer +from .alzheimers_cnn import AlzheimersDiseaseCNN from .base_model import BaseModel from .biot import BIOT from .cnn import CNN, CNNLayer diff --git a/pyhealth/models/alzheimers_cnn.py b/pyhealth/models/alzheimers_cnn.py new file mode 100644 index 000000000..58ba55918 --- /dev/null +++ b/pyhealth/models/alzheimers_cnn.py @@ -0,0 +1,333 @@ +"""Implementation of Alzheimer's Disease Classification Model for ADNI Data. + +Author: Bryan Lau (bryan16@illinois.edu) +Description: + Implementation of the Alzheimer's Disease classification model described in the + paper "On the Design of Convolutional Neural Networks for Automatic Detection + of Alzheimer's Disease" by Liu et al. (https://arxiv.org/abs/1911.03740) +""" +import torch +import torch.nn as nn + +from typing import Dict +from pyhealth.datasets import SampleDataset +from pyhealth.models.base_model import BaseModel + + +class AlzheimersDiseaseCNN(BaseModel): + """AlzheimersDiseaseCNN model for detection of Alzheimer's Disease using + ADNI datasets. + + Author: Bryan Lau + + Implements the architecture described in "On the Design of Convolutional + Neural Networks for Automatic Detection of Alzheimer's Disease" by Liu et + al. (https://arxiv.org/abs/1911.03740). + + The model uses MRI brain scans to classify subjects as: + + - Cognitively Normal (CN) + - Mild Cognitive Impairment (MCI) + - Alzheimer's Disease (AD) + + The architecture consists of four convolutional blocks as defined in the + paper, and can optionally incorporate the patient's age via positional + encoding. + + Args: + dataset (SampleDataset): Pyhealth dataset containing: + - input_schema: "image" + - output_schema: "label" + width_factor (int, optional): Channel multiplier for convolutional layers. + Defaults to 4. + dropout (float, optional): Dropout value. Defaults to None. + use_age (bool, optional): Whether to incorporate patient's age via positional + encoding. Liu et al. show that including age provides a minor + performance improvement. Defaults to False. + norm_method (str, optional): Use either "instance" (default) or "batch" + normalization. + class_weights (tensor): Weights for the loss function to handle class + imbalance. Defaults to None. + + Example: + >>> from pyhealth.datasets import ADNIDataset + >>> from pyhealth.tasks import AlzheimersDiseaseClassification + >>> adni_dataset = ADNIDataset(root="/path/to/adni_data", dev=True) + >>> ad_task = AlzheimersDiseaseClassification() + >>> samples = adni_dataset.set_task(ad_task) + >>> model = AlzheimersDiseaseCNN( + ... dataset=adni_dataset, + ... width_factor=4, + ... dropout=0.5, + ... use_age=True, + ... ) + """ + + def __init__( + self, + dataset: SampleDataset, + width_factor=4, + dropout=0.2, + use_age=False, + use_gender=False, + norm_method="instance", + class_weights=None, + **kwargs + ): + """Initialize the model + + Args: + dataset (SampleDataset): Pyhealth dataset containing MRI image and + labels. + width_factor (int): Channel multiplier for convolutional layers. + Defaults to 4. + dropout (float): Dropout value. Defaults to None. + use_age (bool): Whether to encode ages. Defaults to False. + use_gender (bool): Whether to encode genders. Defaults to False. + norm_method (str): Use either "instance" (default) or "batch" + normalization. + class_weights (tensor): Class weights for the loss function. Defaults + to None. + """ + + # Call superclass initialization first + super(AlzheimersDiseaseCNN, self).__init__(dataset=dataset, **kwargs) + + # Store some values + self.label_key = self.label_keys[0] + self.input_channels = 1 + self.dropout = dropout + self.use_age = use_age + self.use_gender = use_gender + self.norm_method = norm_method + self.num_classes = self.get_output_size() + + if class_weights is not None: + self.register_buffer("class_weights", class_weights) + else: + self.class_weights = None + + ####### CNN Layers ####### + + # Input + # Output size: (96, 96, 96) + # k: kernel size + # c: number of channels as a multiple of the widening factor + # f: widening factor + # p: padding size + # s: stride + # d: dilation + + # Block 1 + # k1-c4-f-p0-s1-d1 + # Conv3D -> (96, 96, 96) + # MaxPool3D -> 47x47x47 (approx half) + self.block1 = nn.Sequential( + nn.Conv3d(self.input_channels, 4 * width_factor, + kernel_size=1, stride=1, padding=0, dilation=1), + self._get_normalization_layer(4 * width_factor), + nn.ReLU(inplace=True), + nn.MaxPool3d(kernel_size=3, stride=2) + ) + + # Block 2 + # k3-c32-f-p0-s1-d2 + # Conv3D -> 43x43x43 + # MaxPool3D -> 21x21x21 (approx half) + self.block2 = nn.Sequential( + nn.Conv3d(4 * width_factor, 32 * width_factor, + kernel_size=3, stride=1, padding=0, dilation=2), + self._get_normalization_layer(32 * width_factor), + nn.ReLU(inplace=True), + nn.MaxPool3d(kernel_size=3, stride=2) + ) + + # Block 3 + # k5-c64-f-p2-s1-d2 + # Conv3D -> 17x17x17 + # MaxPool3D -> 8x8x8 (approx half) + self.block3 = nn.Sequential( + nn.Conv3d(32 * width_factor, 64 * width_factor, + kernel_size=5, stride=1, padding=2, dilation=2), + self._get_normalization_layer(64 * width_factor), + nn.ReLU(inplace=True), + nn.MaxPool3d(kernel_size=3, stride=2) + ) + + # Block 4 + # k3-c64-f-p1-s1-d2 + # Conv3D -> 6x6x6 + # MaxPool3D -> 5x5x5 + self.block4 = nn.Sequential( + nn.Conv3d(64 * width_factor, 64 * width_factor, + kernel_size=3, stride=1, padding=1, dilation=2), + self._get_normalization_layer(64 * width_factor), + nn.ReLU(inplace=True), + nn.MaxPool3d(kernel_size=5, stride=2) + ) + + # Table 2 doesn't explain how the model reduces 5x5x5 for the + # first fully connected layer, so here we opt to reduce the + # dimensionality using global average pooling + self.global_pooling = nn.AdaptiveAvgPool3d(1) + + # Fully connected layers + # FC1 1024 + # FC2 3 (final classification output) + self.fc1 = nn.Linear(64 * width_factor, 1024) + self.fc2 = nn.Linear(1024, self.num_classes) + + # Dropout + if self.dropout: + self.do = nn.Dropout(p=self.dropout) + + ####### Age Encoding ####### + # Initialize age encoding per Appendix A + if self.use_age: + + # Dimensionality of age encoding + pos_enc_dim = 512 + + # Fix age values from 0 to 120 years old rounding + # to 0.5 decimals (240 possible age values) + ages = torch.arange(0, 120.5, 0.5) + num_ages = len(ages) + + # Initialize positional encoding table + age_encoding = torch.zeros(num_ages, pos_enc_dim) + + # Compute age positional encodings + position = ages.unsqueeze(1) # -> (240, 1) + div_term = torch.exp(torch.arange(0, pos_enc_dim, 2).float( + ) * -(torch.log(torch.tensor(10000.0)) / pos_enc_dim)) + age_encoding[:, 0::2] = torch.sin(position * div_term) + age_encoding[:, 1::2] = torch.cos(position * div_term) + + # Register PyTorch buffer which is saved with + # the model but isn't a trainable parameter + self.register_buffer("age_encoding_table", age_encoding) + + # Age transformation layers + # Output size: + # Linear (512 -> 512) + # LayerNorm (512) + # Linear (512 -> 1024) + self.age_fc1 = nn.Linear(pos_enc_dim, 512) + self.age_norm = nn.LayerNorm(512) + self.age_fc2 = nn.Linear(512, 1024) + + # Gender embedding layer + if self.use_gender: + self.gender_embed = nn.Embedding(2, 1024) + + def forward(self, **kwargs) -> Dict[str, torch.Tensor]: + """Forward propagation. + + The expected keys in the arguments are: + + image (torch.Tensor): MRI image with shape (batch_size, 1, D, H W) + age (torch.Tensor): Optional patient ages with shape (batch_size, 1) + label (torch.Tensor): Diagnostic labels associated with each patient, + converted to numeric values, i.e. CN, MCI, AD -> 0, 1, 2 + + Args: + **kwargs: Arguments from Pyhealth dataloader + + Returns: + Dictionary (Dict[str, torch.Tensor]) containing: + "loss" + "y_prob" + "y_true" + "logit" + """ + + # Extract image from kwargs + images = kwargs["image"] + if isinstance(images, list): + x = torch.stack(images, dim=0).to(self.device) + else: + x = images.to(self.device) + + # Extract additional attributes + age = kwargs.get("age", None) + gender = kwargs.get("gender", None) + + # Pass MRI image data through CNN blocks + x = self.block1(x) + x = self.block2(x) + x = self.block3(x) + x = self.block4(x) + + # Apply global average pooling to reduce dimensions for fc1 (to 1x1x1) + x = self.global_pooling(x) + + # Flatten for fully connected layer -> (batch_size, 64*width_factor) + x = torch.flatten(x, 1) + + # Fully connected layer 1 + x = self.fc1(x) + x = nn.functional.relu(x) + + # Add age data (optionally) + if self.use_age: + + # Round ages to nearest 0.5 and clamp to range [0, 120] + age_rounded = torch.round(age * 2) / 2 + age_rounded = torch.clamp(age_rounded, 0, 120) + + # Convert age to indices for age encoding table + age_indices = (age_rounded * 2.0).long() + + # Perform lookup of positional encodings + age_pos_enc = self.age_encoding_table[age_indices] + + # Pass age data through age transformation layers + age_embeds = self.age_fc1(age_pos_enc) + age_embeds = self.age_norm(age_embeds) + age_embeds = self.age_fc2(age_embeds) + + # Add age embeddings to CNN features (per Appendix A) + x = x + age_embeds + + # Embed gender (optionally) + if self.use_gender: + + gender_tensor = gender.to(self.device).long() + x = x + self.gender_embed(gender_tensor) + + # Apply dropout + if self.dropout: + x = self.do(x) + + # Compute final classification logits + logits = self.fc2(x) + + # Compute loss and probabilities + y_true = kwargs[self.label_key].to(self.device) + loss = torch.nn.functional.cross_entropy( + logits, y_true, weight=self.class_weights) + y_prob = self.prepare_y_prob(logits) + + return { + "loss": loss, + "y_prob": y_prob, + "y_true": y_true, + "logit": logits, + } + + def _get_normalization_layer(self, num_channels): + """Get an InstanceNorm3d or BatchNorm3d layer according to the + norm_method parameter. + + Args: + num_channels: Number of channels to initialize. + + Returns: + InstanceNorm3d or BatchNorm3d instance. + """ + if self.norm_method == "instance": + return nn.InstanceNorm3d(num_channels) + elif self.norm_method == "batch": + return nn.BatchNorm3d(num_channels) + else: + raise ValueError(f"Unknown normalization type: {self.norm_method}") diff --git a/pyhealth/processors/__init__.py b/pyhealth/processors/__init__.py index b48072270..2198f772a 100644 --- a/pyhealth/processors/__init__.py +++ b/pyhealth/processors/__init__.py @@ -50,6 +50,7 @@ def get_processor(name: str): from .ignore_processor import IgnoreProcessor from .temporal_timeseries_processor import TemporalTimeseriesProcessor from .tuple_time_text_processor import TupleTimeTextProcessor +from .nifti_image_processor import NIftIImageProcessor # Expose public API from .base_processor import ( @@ -66,6 +67,7 @@ def get_processor(name: str): "MultiHotProcessor", "NestedFloatsProcessor", "NestedSequenceProcessor", + "NIftIImageProcessor", "RawProcessor", "SequenceProcessor", "SignalProcessor", diff --git a/pyhealth/processors/nifti_image_processor.py b/pyhealth/processors/nifti_image_processor.py new file mode 100644 index 000000000..a8636aa03 --- /dev/null +++ b/pyhealth/processors/nifti_image_processor.py @@ -0,0 +1,119 @@ +"""Image processor for loading Neuroimaging Informatics Technology Initiative +(NIftI) images. + +Author: Bryan Lau (bryan16@illinois.edu) +Description: Loads and pre-processes NIftI MRI images. +""" +import nibabel as nib +import numpy as np +import torch + +from pathlib import Path +from scipy.ndimage import zoom +from typing import Any, Union + +from . import register_processor +from .base_processor import FeatureProcessor + + +@register_processor("nifti_image") +class NIftIImageProcessor(FeatureProcessor): + """Image processor for loading Neuroimaging Informatics Technology + Initiative (NIftI) images and converting them to tensors. + + Args: + input_shape (tuple): Target image size for pre-processing. Default is (121, 145, 121). + output_shape (tuple): Cropped output dimensions. Default is (96, 96, 96). + """ + + def __init__( + self, + input_shape=(121, 145, 121), + output_shape=(96, 96, 96), + ) -> None: + + # Parameters + self.input_shape = input_shape + self.output_shape = output_shape + + def process(self, value: Union[str, Path]) -> Any: + """Process a single image path into a transformed tensor image. + + Args: + value: Path to image file as string or Path object. + + Returns: + Transformed image tensor. + + Raises: + FileNotFoundError: If the image file does not exist. + """ + # Validate image path + image_path = Path(value) + if not image_path.exists(): + raise FileNotFoundError( + f"NIftI image file not found: {image_path}") + + # Load the image + image = nib.load(str(value)) + image_data = image.get_fdata().astype(np.float32) + + # Resize to input shape + factors = [t / c for t, c in zip(self.input_shape, image_data.shape)] + processed_image = zoom(image_data, factors, order=1) + + # Center crop to output size + d0, h0, w0 = processed_image.shape + crop_d, crop_h, crop_w = self.output_shape + d1 = (d0 - crop_d) // 2 + h1 = (h0 - crop_h) // 2 + w1 = (w0 - crop_w) // 2 + processed_image = processed_image[d1:d1 + + crop_d, h1:h1 + crop_h, w1:w1 + crop_w] + + # Intensity normalization + # 64-bit precision necessary to avoid overflow on some images + mean = np.mean(processed_image, dtype=np.float64) + std = np.std(processed_image, dtype=np.float64) + processed_image = (processed_image - mean) / (std + 1e-8) + + # Convert image data to tensor + if processed_image.ndim == 3: + processed_image = processed_image[np.newaxis, ...] + + return torch.from_numpy(processed_image).float() + + def is_token(self) -> bool: + """Image data is continuous (float-valued pixel intensities), not discrete tokens. + + Returns: + False. + """ + return False + + def schema(self) -> tuple[str, ...]: + """Single tensor output. + + Returns: + ("value",) + """ + return ("value",) + + def dim(self) -> tuple[int, ...]: + """Number of dimensions for each output. + Output is (1, D, H, W). + """ + return (4,) + + def spatial(self): + """Which dimensions are spatial + For NIftI images, the channel is not spatial. + """ + return (False, True, True, True) + + def __repr__(self) -> str: + return ( + f"NIftIImageProcessor(" + f"input_shape={self.input_shape}, output_shape={self.output_shape}, " + f"normalize={self.normalize})" + ) diff --git a/pyhealth/tasks/__init__.py b/pyhealth/tasks/__init__.py index 2f4294a19..a5a2c6b55 100644 --- a/pyhealth/tasks/__init__.py +++ b/pyhealth/tasks/__init__.py @@ -1,4 +1,5 @@ from .base_task import BaseTask +from .ad_classification import AlzheimersDiseaseClassification from .benchmark_ehrshot import BenchmarkEHRShot from .cancer_survival import CancerMutationBurden, CancerSurvivalPrediction from .bmd_hs_disease_classification import BMDHSDiseaseClassification diff --git a/pyhealth/tasks/ad_classification.py b/pyhealth/tasks/ad_classification.py new file mode 100644 index 000000000..c136d1858 --- /dev/null +++ b/pyhealth/tasks/ad_classification.py @@ -0,0 +1,76 @@ +"""AlzheimersDiseaseClassification Task. + +Author: Bryan Lau (bryan16@illinois.edu) +Description: + Task to parse records from an ADNIDataset for model processing. +""" +from .base_task import BaseTask + +class AlzheimersDiseaseClassification(BaseTask): + """Pyhealth task for classification of ADNI records for the purposes + of Alzheimer's Disease classification. + + This task pre-processes ADNI records (patient data, MRI brain scans) + for the purposes of classification as described in the paper "On the + Design of Convolutional Neural Networks for Automatic Detection of + Alzheimer's Disease" by Liu et al. (https://arxiv.org/abs/1911.03740) + + The patients are classified as follows: + + - Cognitively Normal (CN) + - Mild Cognitive Impairment (MCI) + - Alzheimer's Disease (AD) + + The task performs the following actions: + + - Maps the labels (CN, MCI, AD) to numeric values + - Maps gender to numeric values + + Returns: + An image sample containing: + - patient id + - image data + - label + - age + - gender + - weight (Kg) + """ + + LABEL_MAPPING = {"CN": 0, "MCI": 1, "AD": 2} + GENDER_MAPPING = {"M": 0, "F": 1} + + task_name: str = "AlzheimersDiseaseClassification" + input_schema = {"image": "nifti_image", + "age": "tensor", "gender": "tensor"} + output_schema = {"label": "multiclass"} + + def __call__(self, patient): + """Generates MRI image data samples for the given patient. + + Args: + patient: A patient object containing demographic data and MRI images. + + Returns: + List[Dict]: A list of dictionaries for this patient, each containing: + - patient_id: Patient's unique ID + - image: MRI image path + - label: This patient's classification (i.e. CN, MCI, AD) + - age: Subject's age + - gender: Subject's gender + - weight: Subject's weight in Kg + """ + samples = [] + events = patient.get_events(event_type="adni") + for event in events: + + # Add sample + samples.append({ + "patient_id": patient.patient_id, + "image": event["image_path"], + "label": self.LABEL_MAPPING[event["group"]], + "age": float(event["age"]), + "gender": self.GENDER_MAPPING[event["gender"]], + "weight": float(event["weight"]), + }) + + return samples diff --git a/pyproject.toml b/pyproject.toml index c1e0ebcc6..251778e78 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -45,6 +45,8 @@ dependencies = [ "more-itertools~=10.8.0", "einops>=0.8.0", "linear-attention-transformer>=0.19.1", + "nibabel~=5.4.2", + "lxml~=6.0.2", ] license = "BSD-3-Clause" license-files = ["LICENSE.md"] diff --git a/tests/core/test_adni.py b/tests/core/test_adni.py new file mode 100644 index 000000000..7e1414a4c --- /dev/null +++ b/tests/core/test_adni.py @@ -0,0 +1,373 @@ +""" +Unit tests for the ADNIDataset and AlzheimersDiseaseClassification task. + +Components tested: + + Dataset: ADNIDataset + Task: AlzheimersDiseaseClassification + Model: AlzheimersDiseaseCNN + +""" +import nibabel as nib +import numpy as np +import random +import shutil +import tempfile +import torch +import unittest + +from pathlib import Path +from pyhealth.datasets import ADNIDataset +from pyhealth.tasks import AlzheimersDiseaseClassification +from pyhealth.models import AlzheimersDiseaseCNN +from torch.utils.data import DataLoader + + +def create_adni_image(adni_root_path, subject_id=None, group=None): + """Create test ADNI directory structure populated with synthetic data. + + Creates a directory structure for one subject, with the same layout as + the one obtained by downloading actual ADNI data files. + + The directory structure has the following layout: + + - root + - subject id + - pre-processing transform + - date acquired + - image uid + MRI image file + metadata xml file + + Args: + adni_root_path: Path in which to create the ADNI directory structure + subject_id: Subject ID for this directory structure, if None then a + random Subject ID will be generated instead. + group: Label to assign to this subject, if None then a label will be + randomly selected from the three valid choices (i.e. MCI, CN, AD). + + Returns: + Dictionary containing the following values for later comparison: + - subject_id: Subject ID of the patient. + - group: Label assigned to the patient. + - gender: Patient's randomly selected gender. + - age: Patient's randomly selected age. + - weight: Patient's randomly selected weight. + - image_uid: Unique ID of the MRI image. + - image_path: Path to the MRI image file. + """ + + if not subject_id: + subject_id = f"002_S_{random.randint(0, 9999):04d}" + if not group: + group = random.choice(["CN", "MCI", "AD"]) + gender = random.choice(["M", "F"]) + age = round(random.uniform(40.0000, 85.0000), 4) + weight = round(random.uniform(55.0, 120.0), 1) + date_acquired = f"{random.randint(1950, 2000)}-03-15" + + xform_str = "MPR__GradWarp__B1_Correction__N3" + date_dir = f"{date_acquired}_09_45_30.0" + series_id = f"{random.randint(0, 99999):05d}" + image_uid = f"{random.randint(0, 99999):05d}" + + # Create MRI image directory structure + adni_image_dir = adni_root_path / subject_id / \ + xform_str / date_dir / f"I{image_uid}" + adni_image_dir.mkdir(parents=True) + + # Generate test MRI image + file_date_str = f"{date_acquired.replace("-", "")}{random.randint(100000000, 300000000):9d}" + image_filepath = adni_image_dir / \ + f"ADNI_{subject_id}_MR_{xform_str}_Br_{file_date_str}_S{series_id}_I{image_uid}.nii" + image_data = np.random.rand(121, 145, 121).astype(np.float32) + mri_image = nib.Nifti1Image(image_data, affine=np.eye(4)) + nib.save(mri_image, image_filepath) + + # Generate metadata xml + metadata_xml = f""" + + + ADNI + 002 + + {subject_id} + {group} + {gender} + + {age} + {weight} + + {series_id} + {date_acquired} + + + {image_uid} + + + + + + + + """ + metadata_xml_filename = f"ADNI_{subject_id}_{xform_str}_S{series_id}_I{image_uid}.xml" + metadata_xml_path = adni_root_path / metadata_xml_filename + with open(metadata_xml_path, "w", encoding="utf-8") as f: + f.write(metadata_xml) + + # Return test values for later comparison + return { + "subject_id": subject_id, + "group": group, + "gender": gender, + "age": age, + "weight": weight, + "image_uid": image_uid, + "image_path": image_filepath, + } + + +class TestADNIDataset(unittest.TestCase): + + @classmethod + def setUpClass(cls): + """Create test ADNI directory with test images and metadata files. + Note that we're creating this once to be shared amongst all tests. + """ + # Create temporary directory for simulated ADNI files + cls.temp_directory = tempfile.mkdtemp() + cls.adni_root = Path(cls.temp_directory) + + # Create three MRI images and their metadata files + cls.test_vals = [] + cls.test_vals.append(create_adni_image( + cls.adni_root, "002_S_0001", "CN")) + cls.test_vals.append(create_adni_image( + cls.adni_root, "002_S_0010", "MCI")) + cls.test_vals.append(create_adni_image( + cls.adni_root, "002_S_0100", "AD")) + + # Create dataset + cls.dataset = ADNIDataset(root=cls.temp_directory) + + # Get the first record + patient_id = cls.test_vals[0]["subject_id"] + cls.first_patient = cls.dataset.get_patient(patient_id) + + @classmethod + def tearDownClass(cls): + """Clean up the temporary directory""" + shutil.rmtree(cls.temp_directory) + + def test_dataset_initialization(self): + """Dataset can be initialized""" + self.assertIsNotNone(self.dataset) + + def test_patient_structure(self): + """Patient object structure is valid""" + self.assertIsNotNone(self.first_patient) + + patient_events = self.first_patient.get_events(event_type="adni") + self.assertIsNotNone(patient_events) + first_event = patient_events[0] + + self.assertEqual(first_event["gender"], self.test_vals[0]["gender"]) + self.assertEqual(first_event["age"], str(self.test_vals[0]["age"])) + + def test_raises_exception_for_invalid_roots(self): + """Raises FileNotFoundError is root path is invalid""" + with self.assertRaises(FileNotFoundError): + ADNIDataset(root="/some/bogus/path") + + def test_raises_exception_when_no_images(self): + """Raises FileNotFoundError when images are missing""" + empty_directory = tempfile.mkdtemp() + try: + with self.assertRaises(FileNotFoundError): + ADNIDataset(root=empty_directory) + finally: + shutil.rmtree(empty_directory) + + def test_patient_count(self): + """Correct number of patients is created""" + self.assertEqual(len(self.dataset.unique_patient_ids), 3) + + def test_patient_attributes_exist(self): + """Correct patient attributes are created""" + patient_events = self.first_patient.get_events(event_type="adni") + self.assertIn("gender", patient_events[0].attr_dict) + self.assertIn("age", patient_events[0].attr_dict) + self.assertIn("weight", patient_events[0].attr_dict) + self.assertIn("group", patient_events[0].attr_dict) + self.assertIn("image_uid", patient_events[0].attr_dict) + self.assertIn("image_path", patient_events[0].attr_dict) + + def test_patient_attribute_values(self): + """Patient attributes have expected values""" + patient_events = self.first_patient.get_events(event_type="adni") + self.assertEqual(patient_events[0].attr_dict["gender"], str( + self.test_vals[0]["gender"])) + self.assertEqual(patient_events[0].attr_dict["age"], str( + self.test_vals[0]["age"])) + self.assertEqual(patient_events[0].attr_dict["weight"], str( + self.test_vals[0]["weight"])) + self.assertEqual(patient_events[0].attr_dict["group"], str( + self.test_vals[0]["group"])) + self.assertEqual(patient_events[0].attr_dict["image_path"], str( + self.test_vals[0]["image_path"])) + +class TestAlzheimersDiseaseClassification(unittest.TestCase): + + @classmethod + def setUpClass(cls): + """Create test ADNI directory with test images and metadata files. + Note that we're creating this once to be shared amongst all tests. + """ + # Create temporary directory for simulated ADNI files + cls.temp_directory = tempfile.mkdtemp() + cls.adni_root = Path(cls.temp_directory) + + # Create three MRI images and their metadata files, one for each group + cls.test_vals = [] + cls.test_vals.append(create_adni_image( + cls.adni_root, "002_S_0001", "CN")) + cls.test_vals.append(create_adni_image( + cls.adni_root, "002_S_0010", "MCI")) + cls.test_vals.append(create_adni_image( + cls.adni_root, "002_S_0100", "AD")) + + # Create dataset + cls.dataset = ADNIDataset(root=cls.temp_directory) + + # Assign task + cls.task = AlzheimersDiseaseClassification() + cls.samples = cls.dataset.set_task(cls.task) + + @classmethod + def tearDownClass(cls): + """Clean up the temporary directory""" + shutil.rmtree(cls.temp_directory) + + def test_attributes_exist(self): + """Correct attributes are present""" + self.assertIn("image", self.samples[0]) + self.assertIn("label", self.samples[0]) + self.assertIn("age", self.samples[0]) + self.assertIn("gender", self.samples[0]) + self.assertIn("weight", self.samples[0]) + + def test_attribute_types(self): + """Attributes have correct types""" + sample = self.samples[0] + self.assertIsInstance(sample["image"], torch.Tensor) + self.assertIsInstance(sample["label"], (int, torch.Tensor)) + self.assertIsInstance(sample["age"], (float, torch.Tensor)) + self.assertIsInstance(sample["gender"], (int, torch.Tensor)) + self.assertIsInstance(sample["weight"], (float, torch.Tensor)) + + def test_attribute_values(self): + """Attributes have expected values""" + GROUP_MAPPINGS = {"CN": 0, "MCI": 1, "AD": 2} + GENDER_MAPPINGS = {"M": 0, "F": 1} + for i in range(len(self.dataset.unique_patient_ids)): + patient = self.dataset.get_patient(self.test_vals[i]["subject_id"]) + patient_events = patient.get_events(event_type="adni") + self.assertEqual( + self.samples[i]["label"].item(), GROUP_MAPPINGS[patient_events[0].attr_dict["group"]]) + self.assertAlmostEqual( + self.samples[i]["age"].item(), float(patient_events[0].attr_dict["age"]), places=4) + self.assertEqual( + int(self.samples[i]["gender"].item()), GENDER_MAPPINGS[patient_events[0].attr_dict["gender"]]) + self.assertAlmostEqual( + self.samples[i]["weight"], float(str(patient_events[0].attr_dict["weight"])), places=4) + + def test_image_shape(self): + """Output image has correct shape""" + self.assertEqual(self.samples[0]["image"].shape, (1, 96, 96, 96)) + + def test_image_normalization(self): + """Output image has been correctly normalized""" + image = self.samples[0]["image"] + mean_val = image.mean().item() + std_val = image.std().item() + self.assertAlmostEqual(mean_val, 0.0, places=3) + self.assertAlmostEqual(std_val, 1.0, places=3) + + +class TestAlzheimersDiseaseModel(unittest.TestCase): + + @classmethod + def setUpClass(cls): + """Create test ADNI directory with test images and metadata files. + Note that we're creating this once to be shared amongst all tests. + """ + # Create temporary directory for simulated ADNI files + cls.temp_directory = tempfile.mkdtemp() + cls.adni_root = Path(cls.temp_directory) + + # Create three MRI images and their metadata files, one for each group + cls.test_vals = [] + cls.test_vals.append(create_adni_image( + cls.adni_root, "002_S_0001", "CN")) + cls.test_vals.append(create_adni_image( + cls.adni_root, "002_S_0010", "MCI")) + cls.test_vals.append(create_adni_image( + cls.adni_root, "002_S_0100", "AD")) + + # Create dataset + cls.dataset = ADNIDataset(root=cls.temp_directory) + + # Assign task + cls.task = AlzheimersDiseaseClassification() + cls.samples = cls.dataset.set_task(cls.task) + + # Initialize model + cls.model = AlzheimersDiseaseCNN( + dataset=cls.samples, + width_factor=4, + use_age=True, + use_gender=True, + norm_method="instance" + ) + + # Initialize dataloader + cls.loader = DataLoader(cls.samples, batch_size=1) + cls.batch = next(iter(cls.loader)) + + @classmethod + def tearDownClass(cls): + """Clean up the temporary directory""" + shutil.rmtree(cls.temp_directory) + + def test_forward_pass(self): + """Model can process a batch""" + # Execute forward pass + output = self.model(**self.batch) + self.assertIn("y_prob", output) + self.assertEqual(output["y_prob"].shape, (1, 3)) + self.assertIn("loss", output) + + def test_backward_pass(self): + """Model can compute gradients""" + # Execute forward pass + output = self.model(**self.batch) + loss = output["loss"] + + # Execute backward pass + loss.backward() + + # Check model gradients + self.assertIsNotNone(self.model.block1[0].weight.grad) + self.assertIsNotNone(self.model.block2[0].weight.grad) + self.assertIsNotNone(self.model.block3[0].weight.grad) + self.assertIsNotNone(self.model.block4[0].weight.grad) + self.assertIsNotNone(self.model.fc1.weight.grad) + self.assertIsNotNone(self.model.fc2.weight.grad) + self.assertIsNotNone(self.model.age_fc1.weight.grad) + self.assertIsNotNone(self.model.age_norm.weight.grad) + self.assertIsNotNone(self.model.age_fc2.weight.grad) + self.assertIsNotNone(self.model.gender_embed.weight.grad) + +if __name__ == '__main__': + unittest.main()