├── .gitignore ├── README.md ├── asi_io.py ├── example.ipynb ├── maxvol.py ├── maxvol_cpu.py ├── maxvol_gpu.py ├── select_active.py ├── select_extend.py ├── select_gamma.py └── tools.py /.gitignore: -------------------------------------------------------------------------------- 1 | __pycache__ 2 | active_set.asi 3 | nep.txt 4 | *.xyz 5 | *.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Active Learning of NEP 2 | 3 | ## Features 4 | 5 | - Selecting active set with `MaxVol` algorithem by CPU or GPU. 6 | - Calcualting extrapolation grade with `PyNEP`. 7 | - Calcualting extrapolation grade during MD simulations with `GPUMD`. 8 | 9 | ## Installation 10 | 11 | ### 1. (Optional) Create a conda environment 12 | 13 | ```shell 14 | conda create -n nep_active python=3.10 15 | conda activate nep_active 16 | ``` 17 | 18 | If you choose to install it in your current env, jump to the next step. 19 | 20 | ### 2. Install PyNEP 21 | 22 | Install the **latest** `PyNEP`. You can check its own [repository](https://github.com/bigd4/PyNEP) for details. 23 | 24 | ```shell 25 | pip install git+https://github.com/bigd4/PyNEP.git 26 | ``` 27 | 28 | ### 3. (Optional) Install CuPy 29 | 30 | When selecting the active set, you may use `cupy` or `numpy`. `cupy` uses your GPU and is much faster when performing `MaxVol`. Since you are using `GPUMD`, I assume you have a GPU. You can check its [website](https://cupy.dev/) for installation details. 31 | 32 | ```shell 33 | pip install cupy-cuda12x 34 | ``` 35 | 36 | ## Usage 37 | 38 | ### 1. Training an NEP potential 39 | 40 | You need to have a NEP. 41 | 42 | ### 2. Selecting an _Active Set_ 43 | 44 | An active set invsersion (`.asi` file) is needed when calculating the extrapolation grade. The active set can also be considered as the environments with the maximum diversity. You can use `select_active.py` to get an active set inversion (`.asi` file) by `MaxVol` and corresponding structures (`.xyz` file). 45 | 46 | ### 3. Selecting structures with large gamma 47 | 48 | If you want to select some structures to add to the training set, you can calculate their extrapolation grade (`gamma`) and judge if their are outside the training set. 49 | This can be performed by the `compute_extrapolatione` command in `GPUMD` or by `select_gamma.py`. You may modify the gamma cutoff to control how far they are from the training set. The default value in `select_gamma.py` is `1`. 50 | 51 | However, the selected structures can be dupelicated, so you need to perform the next step. 52 | 53 | ### 4. Extending your training set 54 | 55 | If you want to select some structures to add to the training set, your can put them together and perform a `MaxVol` selection. This is in `select_extend.py`. 56 | -------------------------------------------------------------------------------- /asi_io.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | 3 | 4 | def save_asi(asi, filename="active_set.asi"): 5 | with open(filename, "w") as f: 6 | for k, v in asi.items(): 7 | f.write(f"{k} {v.shape[0]} {v.shape[1]}\n") 8 | for i in v.flatten(): 9 | f.write(str(i) + "\n") 10 | 11 | 12 | def load_asi(asi): 13 | ret = {} 14 | with open(asi, "r") as f: 15 | while True: 16 | B = [] 17 | line1 = f.readline() 18 | if len(line1) == 0: 19 | break 20 | line1 = line1.split(" ") 21 | element, shape1, shape2 = line1[0], int(line1[1]), int(line1[2]) 22 | for _ in range(shape1 * shape2): 23 | B.append(float(f.readline())) 24 | ret[element] = np.array(B).reshape((shape1, shape2)) 25 | return ret 26 | -------------------------------------------------------------------------------- /example.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 2, 6 | "metadata": {}, 7 | "outputs": [ 8 | { 9 | "name": "stdout", 10 | "output_type": "stream", 11 | "text": [ 12 | "Elements in the NEP potential: ['Na', 'Cl']\n", 13 | "Calculating B projections...\n" 14 | ] 15 | }, 16 | { 17 | "name": "stderr", 18 | "output_type": "stream", 19 | "text": [ 20 | "100%|██████████| 4725/4725 [00:29<00:00, 160.53it/s]\n" 21 | ] 22 | }, 23 | { 24 | "name": "stdout", 25 | "output_type": "stream", 26 | "text": [ 27 | "Shape of the B matrix:\n", 28 | "Na: (119999, 960)\n", 29 | "Cl: (119999, 960)\n" 30 | ] 31 | } 32 | ], 33 | "source": [ 34 | "from tools import get_B_projections, get_active_set\n", 35 | "from pynep.io import load_nep, dump_nep\n", 36 | "\n", 37 | "nep_file = \"nep.txt\"\n", 38 | "traj = load_nep(\"train.xyz\", ftype=\"exyz\")\n", 39 | "\n", 40 | "B_projections, B_projections_struct_index = get_B_projections(traj, nep_file)" 41 | ] 42 | }, 43 | { 44 | "cell_type": "code", 45 | "execution_count": 3, 46 | "metadata": {}, 47 | "outputs": [ 48 | { 49 | "name": "stdout", 50 | "output_type": "stream", 51 | "text": [ 52 | "Performing MaxVol...\n", 53 | "Maxvol Speed: 330 iters/s\n", 54 | "Batch 0: adding 960 envs. \n", 55 | "Maxvol Speed: 369 iters/s\n", 56 | "Batch 1: adding 545 envs. \n", 57 | "Maxvol Speed: 364 iters/s\n", 58 | "Batch 2: adding 357 envs. \n", 59 | "Maxvol Speed: 348 iters/s\n", 60 | "Batch 3: adding 331 envs. \n", 61 | "Maxvol Speed: 354 iters/s\n", 62 | "Batch 4: adding 316 envs. \n", 63 | "Maxvol Speed: 353 iters/s\n", 64 | "Batch 5: adding 319 envs. \n", 65 | "Maxvol Speed: 322 iters/s\n", 66 | "Batch 6: adding 251 envs. \n", 67 | "Maxvol Speed: 313 iters/s\n", 68 | "Batch 7: adding 196 envs. \n", 69 | "Maxvol Speed: 310 iters/s\n", 70 | "Batch 8: adding 112 envs. \n", 71 | "Maxvol Speed: 143 iters/s\n", 72 | "Batch 9: adding 3 envs. \n", 73 | "Maxvol Speed: 203 iters/s\n", 74 | "Batch 10: adding 19 envs. \n", 75 | "Maxvol Speed: 267 iters/s\n", 76 | "Batch 11: adding 61 envs. \n", 77 | "Refinement round 0: 0 envs out of active set. Max gamma = 0.9997219572219311\n", 78 | "Refinement done.\n", 79 | "Shape of the active set:\n", 80 | "Na: (960, 960)\n", 81 | "Maxvol Speed: 440 iters/s\n", 82 | "Batch 0: adding 960 envs. \n", 83 | "Maxvol Speed: 397 iters/s\n", 84 | "Batch 1: adding 572 envs. \n", 85 | "Maxvol Speed: 415 iters/s\n", 86 | "Batch 2: adding 367 envs. \n", 87 | "Maxvol Speed: 399 iters/s\n", 88 | "Batch 3: adding 326 envs. \n", 89 | "Maxvol Speed: 393 iters/s\n", 90 | "Batch 4: adding 349 envs. \n", 91 | "Maxvol Speed: 372 iters/s\n", 92 | "Batch 5: adding 372 envs. \n", 93 | "Maxvol Speed: 389 iters/s\n", 94 | "Batch 6: adding 290 envs. \n", 95 | "Maxvol Speed: 382 iters/s\n", 96 | "Batch 7: adding 210 envs. \n", 97 | "Maxvol Speed: 369 iters/s\n", 98 | "Batch 8: adding 134 envs. \n", 99 | "Maxvol Speed: 362 iters/s\n", 100 | "Batch 9: adding 5 envs. \n", 101 | "Maxvol Speed: 355 iters/s\n", 102 | "Batch 10: adding 13 envs. \n", 103 | "Maxvol Speed: 387 iters/s\n", 104 | "Batch 11: adding 55 envs. \n", 105 | "Refinement round 0: 0 envs out of active set. Max gamma = 0.9999919673420719\n", 106 | "Refinement done.\n", 107 | "Shape of the active set:\n", 108 | "Cl: (960, 960)\n", 109 | "Finding inverse...\n", 110 | "Saving active set inverse...\n" 111 | ] 112 | } 113 | ], 114 | "source": [ 115 | "active_set_inv, active_set_struct = get_active_set(\n", 116 | " B_projections, B_projections_struct_index\n", 117 | ")" 118 | ] 119 | }, 120 | { 121 | "cell_type": "code", 122 | "execution_count": null, 123 | "metadata": {}, 124 | "outputs": [], 125 | "source": [ 126 | "from tools import get_gamma\n", 127 | "from pynep.io import load_nep, dump_nep\n", 128 | "\n", 129 | "nep_file = \"nep.txt\"\n", 130 | "traj = load_nep(\"train.xyz\", ftype=\"exyz\")\n", 131 | "\n", 132 | "get_gamma(traj, nep_file, \"active_set.asi\")\n", 133 | "\n", 134 | "from ase.io import write\n", 135 | "\n", 136 | "write(\"with_gamma.xyz\", traj, write_results=False)\n", 137 | "\n", 138 | "out_traj = [atoms for atoms in traj if atoms.arrays[\"gamma\"].max() > 1]\n", 139 | "dump_nep(\"large_gamma.xyz\", out_traj, ftype=\"exyz\")" 140 | ] 141 | }, 142 | { 143 | "cell_type": "code", 144 | "execution_count": 4, 145 | "metadata": {}, 146 | "outputs": [ 147 | { 148 | "name": "stdout", 149 | "output_type": "stream", 150 | "text": [ 151 | "Calculating gamma...\n" 152 | ] 153 | }, 154 | { 155 | "name": "stderr", 156 | "output_type": "stream", 157 | "text": [ 158 | "100%|██████████| 4725/4725 [00:38<00:00, 123.68it/s]\n" 159 | ] 160 | }, 161 | { 162 | "data": { 163 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnYAAAHWCAYAAAD6oMSKAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAADgnklEQVR4nOy9e3wU9b3//5rZ3SQbLlmyXJKQLJcgN4FEkSX1QqAKmHrUYqFUKRWwVP3hOSKlVc752h6/9lRbEfGck694VMBDpVKptvTQCMiRi2gMIgkgBCQEQki4uCHBkNte5vfH5jP5zGcuO7vZJJvk83w8fOBuZmc+Mzs7n9fnfRUkSZLA4XA4HA6Hw+n2iF09AA6Hw+FwOBxOdODCjsPhcDgcDqeHwIUdh8PhcDgcTg+BCzsOh8PhcDicHgIXdhwOh8PhcDg9BC7sOBwOh8PhcHoIXNhxOBwOh8Ph9BC4sONwOBwOh8PpIVi7egCxTiAQQFVVFfr16wdBELp6OBwOh8PhcHoZkiTh22+/RVpaGkTR2CbHhV0IqqqqkJGR0dXD4HA4HA6H08s5f/480tPTDbfhwi4E/fr1AxC8mP379+/i0XA4HA6Hw+ltXLt2DRkZGbImMYILOx3y8/ORn58Pv98PAOjfvz8XdhwOh8PhcLoMMyFhgiRJUieMpdty7do1JCUloa6ujgs7DofD4XA4nU44WoRnxXI4HA6Hw+H0ELiw43A4HA6Hw+kh8Bi7KOH3++H1ert6GN0Sm80Gi8XS1cPgcDgcDqfbw4VdO5EkCRcvXkRtbW1XD6Vb43A4kJKSwmsFcjgcDofTDriwaydE1A0ePBiJiYlcmISJJEloaGjA5cuXAQCpqaldPCIOh8PhcLovXNi1A7/fL4s6p9PZ1cPpttjtdgDA5cuXMXjwYO6W5XA4HA4nQnjyRDsgMXWJiYldPJLuD7mGPE6Rw+FwOJzI4cIuCnD3a/vh15DD4XA4nPbDhR2Hw+FwOBxOD4ELO067GT58ONauXdvVw+BwOBwOp9fDkyd0YHvF9jSmT5+O7OzsqAiygwcPok+fPu0fFIfD4XA4nHbBLXY6LFu2DMePH8fBgwe7eihdgiRJ8Pl8prYdNGgQTyDhcDgcDicG4MKuF7Jo0SLs3bsXr776KgRBgCAI2LhxIwRBQEFBASZPnoz4+Hh88sknKCsrw/33348hQ4agb9++mDJlCj766CPF/lhXrCAIePPNNzFnzhwkJibihhtuwLZt2zr5LDkcDofT26jwNGDroUpUeBpiep8dCRd2vZBXX30V3/nOd7B06VJUV1ejuroaGRkZAIBnnnkGL774Ik6cOIFJkyahvr4e3/ve97B7924cPnwYd999N+69915UVFQYHuO5557DD3/4Qxw5cgTf+973sGDBAtTU1HTG6XE4HA6nk4kF8VPhacDstfuw8r0SzF67Lypj6Yh9djRc2MUQnfXDSEpKQlxcHBITE5GSkoKUlBS5KPD//b//FzNnzkRmZiaSk5ORlZWFRx99FBMmTMANN9yA559/HpmZmSEtcIsWLcKDDz6IUaNG4be//S3q6+tRVFTUoefF4XA4nM4nVsRP0dkaNHqDcfGNXj+KzrbfmNAR++xoePJEjEB+GI1eP+w2C3YsnwaXs/Pj1m655RbF6/r6evzrv/4rtm/fjurqavh8PjQ2Noa02E2aNEn+/z59+qB///5y2zAOh8Ph9By0xE9XzF/u4cmw2yzyPOoenmzqcxWeBhSdrYF7eLJq3JHusyvhwi5GiJUfBpvdunLlSuzatQurV6/GqFGjYLfbMXfuXLS0tBjux2azKV4LgoBAIBD18XI4HA6na4kV8eNyJmLH8mm6Ik2LUEaVSPbZ1XBhFyN09g8jLi7OVCmXAwcOYNGiRZgzZw6AoAXv7NmzHTo2DofD4XQfYkn8uJyJYR3fjFEl3H12NVzYxQid/cMYPnw4Pv/8c5w9exZ9+/bVtabdcMMNeP/993HvvfdCEAQ8++yz3PLG4XA4HAXdTfwQYsXaGE148kQM4XImYu7k9E75caxcuRIWiwXjx4/HoEGDdGPm1qxZgwEDBuDWW2/Fvffei9mzZ+Pmm2/u8PFxOBwOh9PREKPK6nlZXRbbHm0ESZKkrh5ELHPt2jUkJSWhrq4O/fv3V/ytqakJ5eXlGDFiBBISErpohD0Dfi05HA6Hw9HGSIuwcIsdh8PhcDicqBILde06i1g7Vx5jx+FwOBwOJ2rESvmuziAWz5Vb7DicbkKsrQo5HA5Hi+5Y1DdSYvFce4Ww+5//+R+MGTMGN9xwA958882uHg6HEzaxUtm9PfAejhxO74BkmgLoMZmmesTiufZ4V6zP58OKFSvw8ccfIykpCZMnT8acOXPgdDqjdgyef9J++DU0JlYKWEdKR7grYtEFwuFwYquuXUfjciZiw6Ip+KD4AuZkD42Jc+3xFruioiLceOONGDp0KPr27Yu8vDzs3LkzKvsm3RUaGri1oL2Qa8h2rOAEicVVYTjwHo4cTu+iM8t3dSUVngYs3ngQWw6ex+KNB2PCexDzFrt9+/bhpZdewqFDh1BdXY0PPvgA3//+9xXb5Ofn46WXXsLFixeRlZWF//iP/4Db7QYAVFVVYejQofK2Q4cOxYULF6IyNovFAofDIfdATUxMhCAIUdl3b0GSJDQ0NODy5ctwOBywWCxdPaSYpLuvgDuiCGhPLCzK4cQKRv1TuxJ2XF09zlj0psS8sLt+/TqysrKwZMkSPPDAA6q/b9myBStWrMC6deswdepUrF27FrNnz8bJkycxePDgDh9fSkoKAPAG9+3E4XDI15KjTVdXdm/PA7QjhGl3F7scTqwSq2EO7Lg2LJqCxRsPduk4Y3GBGfPCLi8vD3l5ebp/X7NmDZYuXYrFixcDANatW4ft27dj/fr1eOaZZ5CWlqaw0F24cEG25mnR3NyM5uZm+fW1a9cMxycIAlJTUzF48GB4vV6zp8WhsNls3FIX40TjQd8RwrSrxS6H0xOJRSsUoB7XB8UXunycsbjAjHlhZ0RLSwsOHTqEVatWye+Jooi77roLn332GQDA7Xbj2LFjuHDhApKSklBQUIBnn31Wd58vvPACnnvuubDHYrFYuDjh9Fhi9UHf0+lqNxOndxKLVihAPa452UOxrbiqy8cZawvMbi3svvnmG/j9fgwZMkTx/pAhQ1BaWgoAsFqtePnllzFjxgwEAgH88pe/NMyIXbVqFVasWCG/vnbtGjIyMjrmBDi9ju46UYf7oO+u5xkpHXG+seoO4/R8YtEKBWiPKxbH2dV0a2Fnlvvuuw/33XefqW3j4+MRHx/fwSPi9Ea660RNRMuGRVNQWdsY8gHaXc8zUjrqfLmVlNOVxJoVisCOi33d2xaVWnRrYTdw4EBYLBZcunRJ8f6lS5faHYifn5+P/Px8+P3+du2HwyF0x4k6EtHSHc+zPXTU+caqO4zTc+hpIkjreQWgR52jGbq1sIuLi8PkyZOxe/duuQRKIBDA7t278cQTT7Rr38uWLcOyZctw7do1JCUlRWG0nN5Od5yoIxEt3fE820NHnS93M3E6kp5oWWefVwXHqrH2o6971DmaIeaFXX19PU6fPi2/Li8vR3FxMZKTk+FyubBixQo8/PDDuOWWW+B2u7F27Vpcv35dzpLlcGKF7jhRRyJauuN5toeOPN9YdYdxuj9dYVnvaAsh+7wC0Ku8B4SYF3ZffPEFZsyYIb8miQ0PP/wwNm7ciPnz5+PKlSv41a9+hYsXLyI7OxsffvihKqEiXLgrltMRdLeJOlLR0h3OM5qTTHc4Xw6HprMt60YWwmj+FpffdQMAIG9CKgAoLHY93XtAECTepNMQ4oqtq6tD//79u3o4HA4nCsSyG6rC04CCY9UAgpNTR0x+HA7QuffU1kOVWPleifx69bwszJ2cHvZvsbDMI/dlzclsq3Cht5+OPMfOvH7haJGYt9hxOF0Fn0jbT6y1/yHEaoJHhacBs17ZiyZfAACwZtcp7HoqFwBiVohyui+daWnWsxCG81ssLPPgR28UAgC2HDyPV+dnwxuQ4B6erLsf+hyj+fyJ5cUhF3Ycjgax+KPtqFppofYZ6XG7uv2P0bhjNcGj6GyNLOoAoNkXQNHZGgC9M1aIEzld9bzQw+VMxIZFU/BB8QXcOtIp39ehfov0MT8oVvZ5X/FeCfwBSX6+kP3EW0V46ptR4WlQiDr2eVRSWQsgMst4rC4OAS7sdOExdr2bWPvRdoSbwYx4bY/A7cr2P6HGHasJHu7hyUiwirK4i7eK8kQXi0KUo09XWqc7YmEazj61zr3C0yAv7LYcPA8A8n70fouFZR4sXP85vP6geHvxgYnyZwHAHwhGkjV6/aisbcSO5dNQcKwar+w6hRcKSrH2o6/lcbLPI7JfIDLLeKwuDgEu7HTh5U56N7H2o9USmkD73HNmxGukArfC0wBPfTPirSKafQHYLAJuHemU2/9orajNEM3VdCwmPLicidj5VK5mjF0sClGWWHG1dzVdbfHviIWp2X3qnTv9eQLZz9zJ6ZqLSlp8NXr98AYkvLs0R7b6PfP+UcUz2uVMhLNvvLwwosdJP9NtFkHeLxCZZTxWF4cAF3Ycjiax9qPVEprtfXjriVd6co5E4NIP9nirCKsIeP0SVm4tweq5Wbh4rUlzRR3OfrtqNd0ZwsXlTMSjuZma70fbXR5NulrMmCWSaxXuZ9jfZv6e01g2fVSXx7O1h3SH3fA1Qe+5RI+JYDS2orM1CvFlswjy9SdJEze5Bqi+F71zp5/p6Q47Fm0oUljG0x12lFTWKhajeudIiMXFIcCFHYejSyz9aPWEJvsAC2cC0tqn1uQcrsClH+zNVLwYEXcrZ43RXFGHs1/aaqk1to4Q5qGES3tiEdsjNIDYSKwws9Awe64dJVQjEZ+RfIYVMVsOnse24qqo3TOh6Ij7v7K20fA1waywCtWekLWwbVoy1ZTV3ejc6e1py3hWukN2E8dZBNmit3jjwZhdoBjBhR2H001gH2LsAwwIf4JnM8by95xWTc56bhIziQkJVhG+QABE35EVeCTWBHbCSHfYQ8bRRfOBbCRcIrVWhfs5Ugplza5TslXhkdtHGAqqzrLmmQmCN3OuHWn5i8TKHclnyG8zf89pOSYsWveMWaJ9/5u1ApoVVqFojzg1cxzaMr71UKX8HbdQVkKz33csWMxpuLDTgSdPcLoD9AOMfjhpuX+MHj70JEPQe3iHm5hQVduoCIDOm5CKvAmpERU9pvcbzoRLzt2MpUAPo4lNq5WRs298VDPrtL4jr1/CW5+Uy+4jdlwdLR7Ye8poIjZ7rh2ZuBSJizJSt6bLmYhl00fJcaWh7pmuTtAKRThCK1qisrO8JvR3HG8VIQBo0vg9aRGLIQhc2OnAkyc4HQ3rTgtH6Gh9Nt1hV7l/3v+yEpuWTAUAhbhiHz4Fx6oVgmH+lAzdmKBwExNczkTsXjFddX6RPPzo/VbVNsouE6MHsJ5oDfcBbDSxsVZKYlEL5bJl3U1GMT3sd0Tw+iWsyhujKSSj6R5l0ZvQ9BYSZmO0Ojpxie5MYOZ822s5MnPPdHSCVrQsSrEUnhItyLWhy59kpTtMLwBjUaBzYceJOWLNrN0RsAkG9ArRjDuOfDbBKkICZBFB6kQR94/XL2HhW59DgiS7Q7VcQmt2nZL3n2AVDQO9I5mQzE4IelXlta7B4o0H4fVLsFkEbFg0RXf/Rtl44d5feudBT+Ce+ma8UFAqH4e2nGqJoQ2Lpsiim47pYcU7/R3FWUQEpKCL226zICvdgZLKWhQcq1YIFqPvirh1X9l1yvS9R39Wy20PBAVohacBW76okMe3Y/k0VUzWB8UXkOawhxUj1R7Ya09aTpmhPYLGzD3Dnmd7CntrfTbWLEos0Ygzbe/ihH2Wmr1OsVZBAeDCjhNjdNVDqLPbztDWFzrBwIzgoIVKE/PZytpGLJs+Cu9/WSnHs3kDyq6BJLuM3h89hqdmjjacTFzOtkKjc7KHRu16sVXl312aoxJ3RPgNSLTJ18DrlzQDuWn3K10bDjDOxosUMoEXlnkU75PAeXLNtMQQXdIhf89pzMkeqijmvPyuGxTf0c9njZbd2ekOOx7eUCT/ndTkIuPREg9aVkwtwa8nOrQsoOkOO2a+slcxTrJfIjj1LMrs9xxty5CeEKXPVavETCTHCec5onWekRb2ZuMvybaxaFGi0TrfUNayaAgywPhZavY6ddRCpD1wYceJKbriIdSRYlJr3wDwCmV9sYmAl5oLQ6XYs24/+qFGHiyr52bhyS3F8mcsAuCXgqJu9dwsbC46h/M1jViYM0y14sybkIq/Hr6AFX8qlj9DT750oVE60y/cjEc23m1T4TnFdpsKzykmfFr4AUCcRUCLjhuWvu5xFgGB1pbYIoAfuTPwWO4olVgxYzkxgmzrqW9W/a3R68eCNwtBxWUrxq0leGixR29DLHRkXAXHqhViitTkol3eRvFuWuMx+k2wnyVue3aBQPPyzpMAoG1RXv85dq+YHrZlyiyh4kcrPA0KQbpm1ymsmDk6bIEXrecI+wxkFwNapVP0hDorqC0CYBOFsMcULuFYHNnzNQoZIdAL40gFGaDOvBUA3WeK1nkRYs1FzYWdDjx5omvoCrN2R4pJvRId9MPo9hsG4eOTV+TXJZW1qhWrVpA6narPbs9a6WhR94utJXLm1/aj1Xh1frYi7qiqtlEhCtnJV++czJQCSXfYZVFIINsn2ZWPo4xkpcBlhd9towbinklpSHfY5TFoiQ86yy0AYHPRedyX1WZpZKvb00KVdpfrTfasSzPeKqoshOQ7IBAxRMaqJXisogBfQEKCVURWukP+jujSDHabBQ/fOkxxHKuIkL8bdvGwwO0yjM0rOFYtZxCmO+yK2EZaZBCxzdLil/BCQalskVFYlP2SqXuIXOtwy6XoCVH6XmGFcbg1FrWuGXmOhCtW2WfgnOyhcgIGoC6dUuFpwO8+LNWMv1yz6xTyJqTixQcm4sktwYXak1uKMaR/gmLRZGaMZq2a4VocWXFFL2j0YkLNLIzNnBPxPpDff7xVxKq8Mbq/82h3/+kouLDTgSdPdD50EGukmYuR4B7e1sYpobWFU6gMUrM/ZNa65qlvRla6Q5GB9SnluouzCKqYJ6BtwrOKwNI7MpE7ehDWfvS14cOSFRdev4RPz3hUEy/dbzFvQqqqHyP5LJnc6YmdBPwbiWNaOLEV38n2Bceq8ecv245rE4GH3ErBwgq91KQEpDvsmqIslNWTWAO1qtsTVyhtKSGT/eqdJ1XWS9ZS0uwL4CF3BjYXnVcfGEGBTUQd7U5adNtwhTDytYrzgCTJrtYEq4inZo5WXOvzNY3y5ywC8NM7RiqOp3W/sq7rPx06D69fksWMe3iyYiyvtAoEAKZjGy0CYLWIqlCDkspabFoyVfG9hcpyZt2MekJbyx354gMTVUIUCGaRkwQWklVM0x7rD11XMpISRKxrb8OiKVjz0SkUlbd1RyBimHV/CwDIL4xYbw+2bkv4oPiC5j1sJKjp47y88yQ+al3okb/rZauHaiVIny+98NNb2BedVfZTnnVjKrYfrZZfV9Y2hnXdK2sb5d9/sy8AZ994zW31FrTkusRbRTkEoqvhwo4TE3R1gK9E/VtV2yhPpOyPNdxx0ta1Na3dFug4EjrQHgBmjk+RH1L0w4M8UHwB4LW9ZXhz/xnZKqf3sHxq5mjFvm0WIShYvqxUiDs/s5852UMV/RgJa3adwtWGFmw8cFZhbVm88aCiATfr5vrxW4WKOnbELUyPq7bBq5icfnpHpuq6PuQehrf2n5FX53/+8gL+9EWlLIAavX787sNSPH33WN3iqYRdxy/KkxErNLccPK95/mT8C9d/jpWzxsgxbqylxGYRcObKdd1jr56bBZczUVGepskXwLq9Z2DVcJMFvytJ3u6rqjrF37cfrUaCVcRjuSOw4cBZrNt7BhsPnMVOg96Xoawk7uHJkKjL0uQLyCVc9GIbi87WKO8rCfjlzNEAgkKA/I3EAGplSuvdQ1rimVjVyG9Jyxrc6PVj5dYSWYg+fOsw1e/77cVurJg5GlcbWiBAwPoD5bKIDqftnZYgY0sQhRO3RT9ztKzcRESxgpS+m0mvYZsoKO7pOdlD5f/XEyz0ebDHafFL2Fx0Ds/kjdO00NHf460jnbKFVk+s0ecbKl6NFdALc4bhf0svK+6bcLwwrAVaz9qtJdzpMIjm1t+IVteYzoYLO05M0JUBvvRDq9kXwKbCc7o/1kjG6XIG+xeSfTZ6/dhz6jJGDe6nsN5pPaRImxvW0uUNtFm/6AmoqrZR7qMIKF1jUkBCSWUt/nvJVOw5dRnnaxoxa/wQud+iRRBw+NxVpDvsmDFG6R4m12Ld3jOq8yNWGLaMBHER0fOOVQRenpetmGw3LZkqlxkgOBJtmtdx5eyxsljViufafrQaH524hF/OHiMLyGCMXZsFDAhOTMQyp2WtobEIQRsIufzeVrciERXk+4uzCJBa/15YXqO7PyLItayqvoDaqiki6EIm/E9JNViafAGcr2mUz0NLiNH3K73gIGKdrttVdLZG5c5/eecp3DbKqVszj7V8JVhF+V6obfDitb1lAILfGxHgZHIEgvcNbbkh75Oxa0HHLtpEQTVm0s4OCP67bu8ZvLHvjPxdNvsC+PFbn8MXaLP4Puh2KRZi4bhk2VgrVgykO+yypdCsGy+UK9no/l1y2wgAwNN/PgIgaEVd88NshRuWHaNNFHDnmj3ys+WpmaOR0j9BYQkEgPM1jarxsc8CEjbg9UuwiAJefGCiqedlqG0evnWYHCOck+kM2ZWHve4ENrueDWtgxxVrSRJ6cGHH6XIqPMqG8ZHE1rUnzoF12znsalFBCCcGkB5TusMOqwhZ5BCBRFa4RNikOeyKyY1YFmwiYBUAX+uTNd4qYvFtw/Ftow9bvqjACwWlCqsIWZ3TBiCfBLxQUKqyQn5T34znt5+AX5LwTlEF3imqMH3tyFiI+zjBKgIAUvonyOKNZukdmbjJNQArZ40B0CYC0xx22X1mFYMTghZ5E1JlFzSdOELT7Avg+e0n5Nd33DAQu0uvgGXLwfP4y+ELuDXTqRKxNH5JwmO5I/HWJ+WK82n0+rGp8Jyu9VXvWtH3DBuNFmcRcLNrgEIYCqIAUIIlAEAQoLCo2SyCKkYRMBYWAORrGYwtGqtwbbKCocUfkK9TzohkZA7qqyqvsmLmaJzzXEd1XRNSkxJQcKwaWekOlF68phjX9qPV2PnVRUiSJN/TL+88iZ/PGoOsdIciyzfeKioWKKyLVxbcAUklPpbekYmNn55VCCM2BNDHWKznTk5XLcSISA63wLWRm9FstqtWzB0dU7qrtTXW1YYWvLm/XLGAkRAMoWiirtWJi9dwP4Yqnk9E5Nc2ePHz94rl51RTq2VUi4xkOyo8DbCJAiyiAH9rPCjdFeWnt4+Ur70/EGwpeJNrQMSiiHUJ7z5xCTupDHCt624TBd2EDFqUEuH/1iflmpnaZL/0cdjnlN5zq7Phwo7TpbBp6+zkEu4+InHjsm47lzNRtqTEtwoV4o7RWrVpiUqtdHytRTURB7uOX0SLX8KaXafw9mI3AGDPqcvyA8wbAB7LHYkBiXGobfBi/YFylfVMK2g9oH4Lzb4ANhedw6jB/ZDusOO3IcQIS5xFwMzxKbjZ5cCpy/VIToyTrTFGE0GCVUTu6EGY9cpeWQTmTUiVr9/vfzBJFoML3izEtNGD8Oi0TEUsEB2DSayZVxtasOHAWV2rhZaoo6+FkagDgsJi+ujB8rV/65MziuSTj05cwtuL3dh38nLIa/f7H0zSDdoHgt8ha+3za3yJEvPWo9NG4o395fLrOIuArHQH/lhUgZyRyRib0h+5owfJQsJmEfDDyRmKGEISW1ThacDmonPw+vWtmIXlNfI4X955EvMmZ8hxemZhrWskwYK1WDb7ArhnYlscFXHxnvnmusplzh49d/QgPOh24XcflirisGi0FpTsYo9eNAHBe3njYrcpkUeeG6xbVi/2jH2eGIlD8qwjHoVxKf2xfEuxfB3Wf1KOm10DFON5c/8ZTB89WLGfFx+YiNU7T5r6/rLSk3Ci+lpQBFGhEQDwwM1D5dhSr1/CG/vLFN8nSZRhYyeD+w1dFJj9zTRRGeBa1w2AbH1krzOg7ulLxkgnixnBehpKKmsN6292FlzYcboUrTpCbIZjOPsI5R7VEmFa5T7yJqTqumPY+BctUalXH0kLesJp9gWw4K3P4Q8EY9FYHs3NxNZDlZoiho1dM+L1vWcghfkZALhvUir+fuwith+tlsdtE0N/bsaYoEgrqayVr0eTL4CfbfoC5d9cR7MvANow5ZeAj09ewccnr+DdpTlIY/rCvvjARDl2j8RJ/evfvkLpxW/NnwxDVnoSSirrVO/fmumULUh2mwW3uAbgU0p8NfsCePCNQpWo0GLFeyUY0j8BaQ47PPXNmtmzkfDanjLF93jbqIH4yfoitLSKs49PXkHpxWsK6wRtmY23ikh32PFiwQmFq9IMLcy+2ovXLynczwlWEbPGD8HO4xcVbemqaht1YyEJlbWNyMl0YmHOMOz46iJ8gWDm4y9nj8GO45ewwO3CTa4BIZNL2EVTky8gu4D1gubZZw37nNGKPavwNCgWPrQ1KlTMXoWnAc+8f1RxH2otFHwBqETlU1uKYeYutNss+N7EVPl34mU+dObKdcUzxRcAHssdIVu7afFcWOZRxN8S2PJK9LVMd9gVlmSrKOD05W9RWOZRCV4AyN9zWiFW2RqedEjCSztOytZOVoBqUeFpwBGN50UswIWdDrzcSefAZo3S2Wx62bFGD0y9tkxaVfZpFyh9LKBNXLLuGDYwlq6n1Oj1Y3PROVxt8GL04L4K1yuLCGCijpAgFhp2ct144Cwecgfrzmnte/SQfjhhUtiQXYczgQPAtiNqqwf7cNfi45NXsP/UFdzCuK5pIaZlXQSAFwtO4DuZA3UnomZfAG/sO4OT7RB18VYRN6b11/w+aIteo9evEHUEs5fRHwhaIy1i0LVoE6FyH4aCjbkD2srZkElMywppZJm8NdOJhW8VmvouO4MAgouOH01xoZ/dil/++YgiExcAHt5QZLgPmyjIYmnxxoPwBSRYBAGzx6fg9ztOotkXQMn5Wjm7FgBe31uGqw0tuNboDTlGOk6PfTboLfhYyxubXfy7glLFwoe4usnzzsi1rpXIo8etI534y+ELaPYFTC3u7stKhT3OijnZQ5HmsMsufBZWRNptFjzkHoaH3MPk8y46WyP3j9Z6PmrVNqSv5duL3dhz6jLeaHU7r9t7Bm/uP6PorFNwrFo1RiIYWbFGLJ5Z6Q7ZZZvAhEyozpPK9CfEt3ogYgEu7HTg5U6ij15hWr1WTHq1xbTSy198YCJWvBd04y3aUISnqFIIesU7F771uewOIvsClCUo6NgeUhOKXiGvYeopaSUXaGG1CJoiwogmXwC/3nYMOSOdyL1hMHYzrj+zoq6r8EnqB78ZiivrUExdKwFqYcNei3Dpn2DF52fCH5sWcRagxWB+9UuAn7imIhBSeh+ZdsNAnLxUj8qrxhnBWoRyR7PkjAgKCT0xHinpA+zy+P0S5LZkBK9fkus8GiW8BAkOjhY8fknCtiNV8hYku/blnSdVCTZGsGJoT2nw/iPPBz0vAnl20F0wyDmlOex4vTWkgXC1oUWzBd0HxRcwenBfxTPyxQcmKj6bMyIZX1ZcRYtfUi0EL15rgtkyxRZBwN+PVsMXAP56+AKemjlaXhSzLmqa+VMycOtIp5yk5B6eLJ+LVtkjGq9fwu8+LMWk9CT5GpJ/K2sbMSAxThGi4AtAUfeR/gwZy5zsoXIpFC1DQbrDDrE1UcroLmBLJAHAPRNT8fTdY2MmoYILO06HQ6xl7EOAFmxEgJFVFp3NRj8Y2fTy331Yilnjh8hdEoC2OC9SVkFrJWsRlBl0pN7T6cvfKlyodHYoWZmTIOrX95UpJpcEmwXeZnMrZr2HYSiIe7KzSU60oaYhtBWDZXDfOFyubwnrM2n941F1Td29gdBeLcHkIgAArtS34EqY49RDS9SF6/KOBKNYwmhzE5PgES1uzhigEKZa2u1qQ/B70iuGTPAGIIuKUELC7O+R1M9jEzw+K6/BZ+U1cn03vSQrrUUmEKwTeM5zXSXaPy/zqDwCb396TvX5Rq8ff2HqTxaW1yDeKuKeicF4WDqh6JznuiKhQosZYwZh36kr8EuS/KMjz1ba3akVU2uzCBg9uK9c6HzLwfOYMWaQQsyGgoR7xFkEOWSBLjPCQkS5BKiqDdAt+mhXL/190PcI3b2F9RBplUj66MQlPH332JDn1FlwYddL6KxeqICy/pHegwxQx4iwNd98gbasOPrBSEPHerE0U64MNkDWz0Sfx1kE1DW0qCxuB05/I8d0WEXBcIX6rUlR1x2JRNQBCFvUATAUdeGiJah+NEW/eHBH0dGirrOpa2yJWnwgTdqABFmwiQhO0vSls4rBhIAWfzBW7rHcEaiqbcQ2jRIwQFBQ/PXwBayem6VY/JF9iYKxOLQIwNJpIzF99GBVWMgKpk4kEBSIv952DM/dN0Gzn7Keu7TJF8CXFbWq9w8zVn02M5se575TamHf7Atg+9Fq7PhKeX3+9EWl7jkDwbjGnJH62eLk2c1mgX4/Ow3bj1bD65fw278rrw29L9aCSLJq460ixqb0U3gzWvwSVuWNgbNvvHz98yakymE7WudcWduoSHKjQ2ZoV+/monOK99l6dlouda2EC7aNX1fDhV0vIJKs0VDtY7RaRMVbRQiAomuCUdyHXjzckco6xQ92RWtTegCoqgvfzeRyqiu3s8ybnKGZHdril/CQOx3vHao0tcrkxBbsV2bTykjhhM0fi85j6ojksKx2g/rGhbSKvrnvDMTWGj30lL0wx4V3D5Ks2zaryoDEOLmemh5NvgCKymuC4oG6IXwB4PHckXhjf5luLKxfAkYN7oe01vARmqx0h6Yl8OOTV3BgzR6IgoAmXwDbiqsUmdxsCywguLAcPaRvyOQfve4tU4Ybfxfs+em5nEUEE7QedLtQZVDkmyQh/JFJmvlLcZubm10801hEEaIgyaLaHwi20JMkSRWiEmcRVHMQXeaFFXhElNGeILoFGRC8jpuLzikW8nEWAf+9ZKpCwL++t0zlUp87OV1hgIi0RFdHwoVdLyDcorp0ZhbQVileKxOUNV8TyHG0VjdxluDqzOsPtkoi+2ZrFBGuNrTIcRFjUvqF5YrMSndoVm5nefdgha5V5d2D56MeS8TpGoIP9M611vVEJIQfL2nG1e2ToGne/ENhhaYLfvWOUsBEtNjmIvXngwWlJYXoecidgS0Hzys7o4iCamEMtLVW00p+obuF0PHC8VZR8zlz26iB2PHVpZDnQdyImwrPKTwVN7kG4FDF1XYvPgNoq31XeMajuY1VFPDI7UFL6Rv7yzS3ITzkzkB1XZNmsXN2kaUnNpfcPkK3nMmjuZlycolejUG2BRkQFH/sgmDm+BTZPUsSPOgY6oTWzHGSrEIfO9YKFnNh1wsIp6guoP4hsGZmtqgjEXesxY5NjiA/vNOXv5VXSnRGmVZdLwCKopEPuYfJrhgzcUt/K6lCbaM3ZLaY0X64qONwuha6NA/txgtavkL/QLW2cPaNx1v7laEX/e021bPg0zPKOLeCY9U4Ulknvxfq6HqLX5rUpISQySA2MSjq0hx2TEpPkmtfJlhFPOh2YWxKPzmmjf4MWy8wFGyRYxVSWyFfoyFbBeCrqmuYkKZOPrQI2nF2Wl00Nh44q6q7R3udQnWqoOc/qyjgp3eMwEPuYGs5WhzPGj9E12gBAItuG645hlgSdAQu7HoB4bZCYVsdWcW2gp2kSwRdwHfJbSPgSLTJtaXYuBL25n+x4ITieOc81/H63jJ8daFOt/QD3aPz6bvHYltJFYYlJ6Lg2EXDB1c062txOJyuY5izD8al9ofDbovod80uBKvrmlTbnK9pVCRlJFhFzMkeir8eviA/79g4W6OyRu4RyZg9fogicUFLvAxz9lF5NoCgKLx91ECMSemHh9zDALRl7ZPEiIU5w+SgfhqSlcqKPSPMCEHSKcTrlwy390lASWUdSirr5GtK3K16C+kVM0fD2Tdesfhv8gWw5qNTCnGdv+e0oq0ajVYY0YZFU2Sr6VuflGP66MFIc9ixwO3CH4sqEADwzPtHsfyuG3Rj7gYkxoXl+epKBEkycIT3Yug6dqdOnUJdXR369+/f1cNS0VFJERWeBvyxqAL/ta9MLsJJdwYgLa3oHpMbFk3Bog1FquKa7FjpHy3QlqYeCdbWhzW/iTmc3oFNDP7mw31kmM1MJs+2AYlxcl0yEiKiJeIWuF2GQpO1/KzKC2ZP0vFZO5ZPQ1Vto6rQNVnokudp0dkarHyvRLF/0gkmuY8NmwrbxvHsPeNw6nK9ooiz1sL5vkmpuHPcEHx6xoPRg/vixQ9LTbl0460iJEkylVE8NqUfTl+uN3zO2yyConadVlgOTZxFwJLbRyi+J7b6gt51s4qAVVQn/6zKGytXZmBrqQLQjFXvyMREGlJ6zYwW4RY7HbpDHbv2ttLS2h99gzoSbYoinMv/VCy3Mmr2BXC1wSv/MEhrLLa4JinaSY81ziLIJScicRXQ+KRgvaaOKL3A4XBij0iLKJsNPyNigjy76E4vvoBaIPbT6NGbmpQgWwRZyw9pnfU205Ks6GyNSnSR102+AP5YVAGLRpeXFr+kWRngtwWlqnZ0Wpdg25Fq7Dh+SSGiRACT0pMU9SNZQvVYphk92DgxRKt4cCCg/qLp7jAtfkk2ELy0oxQWUW0JJS3H3MOTFQLbF4BcdYFAdx3SE2pa7SSjOQdHCy7sujHhJkUYwcYWbFoyVbUN23R8TvZQbCuukj/DNiG/2tCCrYcqke6wK1rY0Cu8Z/LG4t/+fkK1+taqrq+FAGBwvwSTZ8nhcDhBxqf0w3EdsbFu7xmMS+kPb0BStbFiETSSN2g3L91XNt1hl+vfkVZ4xIXqHp5seJx1e8vC8kxo9RjWgz1mAMCxC3WG49n/9TemraDXW3ya788YMwg5I52KYvLEq6Ml4CekaXfr0RJqABQdJOhvKWhcEGTv0qJWCy2gDh3S60ELRHcOjiZc2HVjtJIijMzCRn9jEyIWrv8cq+dm6f5wn7l7LHIynYrYhT9/eUHePs4iyG5aI3Ydv6SZ05Y7ZhDGpPSTEyX0kABFJXkOh9O9CLelWrQ4ebne8O+k7p3dZsHcm9Nldyvdvi3OIuDTsm8M9yMBSHPYkZPpxIsFJxQF1kmvVOIyfHuxGwve/FyzVEi0rpFVCAq3ULrPJwG/mDkaRWc82K1hmfO19rM2ijEkaBXPtlkEPHffBM1qCxZBO9PZ5Uw0VT/xvklpuHFof1kwbj1UqZhHfj5rjCKbliRFkJ7gAFR/07LIhZuY2FlwYdeNYZMiAHUMAGD+BqVN1V6/hJXvleiuxn7z9xMoOV8LvwRVxpetNfbBTHstvbZEH5+8ggOnPZg3OYMnQHA4PZiuio9lLVo3pvTDV5QFjzz7Gr1+vHuw7RlELG17Tl3Gur1nQrYGJFUFqmob8cY+5TOR6BMSuuLsG29Y/y0UY1L6heyZ7Atj93tLr+DTcu2yJ0BrlnIEpSFFAD+cnIGq2kbNIsJ61yAr3SHHzJVdrsdre7XLrRR8VY2Vs8fIcxwrwIjgI6KPzXomcXb0nKhlkQs3MbGz4MKum0Obhtt7g25aMlW2voVqwSNJ2g3hAbTWdhJMJUUY/bnFH+CijsPhdAik2wGBiDqLAPzz98bh9ztOyotV+lHo8weQ5rDjqk43lofcGRAgKJ5d+05ext+OVCtELNva7khlHRbmDNPMjjWDVUBIUafVTs8II1FHiKT5SADBigXkGpFEjFBU1jYiJ9Mpu23/a/8ZTZez1y9pdjXSEmCs6AOg8F6x3Si6AxqhmJzuCrlBAWjeoAQ67oAmJ9OJ3SumY/W8LGxaMlVupgwEH3b3TUqDjoUcohB0v5L9v/XJmZCi7tYRybwTAIfD6VRmjhsMm0XQjUHzS0E344qZo3X//rsPS3HrSKfu31nLzTZG1AHAg1Nc8jMTCLZHXLzxIDYsmoJVeWNx36RUZKUnYWGOy9R5hbLEiQLw/03PNNzGJgZFVjS5b1JaSKHR7AuEzK61iYCnvlluK+lyJmLNvCzFNuRyaokwlzMRcyenK1y/r+8tQ8GxamxYNAWr52Vhx/JpcgtKsp9NS6Zi9bwsbFg0BUVnaxRtLYn7eOV7JZi9dp+q5WVXwcudhCCcFONYgO3bqtWndVXeWDnjK9S+Co5V42pDixwvZ9R4+/HcTFTUNKChxWc6W6qr4ms4HE7PpW+cBfUtkfdutorAy/Oy8cs/H9FNHoi3ivD6Aqokr1fnZ+PitSZVH1ktEqwi7hw3RJHVuipvLF7ZdUqOI4vGM9IiCFjzw6yQ47KKAubf0r7wl2wmm5a1jEYK8QCxpbT+evgC3imqwAK3Cze5Bphyi7LlVNh9svHoetmvWw9VKsqorJ6XhbmT09t9rlrwcie9GDZrR6unHan5Y2Zfj+ZmYuuhSvkh0+KX8HhuJg5XXFWUGLGJglzzTot+8RZ826x+0HJRx+Fwok04oo64J2kB5QsAP3+vGBZR39akJ/h++ecjuDXTiTiLiBa/sZ+yyRdQVRP46kKdIjmgPc9ImyjAL0nwSxKe+lMxxg7pZ7i9LyBhczvDX76qvqZ4HewDq3bZjk3pF7I3LsEqtLUca/IFsLnoHEYN7od0hx3PvH8UjV4/jlbWYcfyaaaEFdvliJRF0Suqr5f9ypMnOF0C208vnABPsmpJd9gVN++DbhcyB/dVCDu/JBnGbmiJOg6Hw+kMbst04kCZdrwYeW6xjy+9EhqhaPYFZI/FjDGDDL0XdpsFdY3KUiD/c7RasxpBJJY7ukZoQIJueRcaM8cQhaAFjfXe2ER1bDZx7dLXMs4iYN7kdPzb9hMhy1pZRAG3DBugmG/e+qRcFQtO4soJJEFCC7a0jF54Er29loCL1eQJ7ooNQXdzxUYLtq7d6rlZck2nytpG1DW0KNrkcDgcTqwSiTvQJgIS1AlgoRLLaHJGJOPw+VqFdei+Sal4aOowuThxVW0jfvRGoeF+SI/T4opa3WLs4VjAwoF1rQJttfn2nLosiyyrKCAQkGShZhWBlCQ7bnY5sK1EmWjXHvcsK3rJ95FgFRGgOmHEW0XsYrof0Wi1HjOCDXPqbDEXjhbhwi4EvUnY0Tcu24KFiDvSUixUAWGrEF5aPYfD4XQEZovommFQ3zh46ltMFU8HgoLsjhsGqqx2r87Pxv03DZWfuXUNLfjt30t1y3wQa51RzbhwBGc46HX2ITHVWl0vWKIVZ5czIhlfnLsqi21SeqaythGe+mZV/KCZmLdIBF5XdJvgMXZRgO4V2xtgb9YNi6ao6tqteK9E/nGGerAJYvBpGm56PYfD4UQLqwisyhun612wCEJYdeOu1Leo3hvcLw6Xv1W/DwTjwsam9FcJuxV/KsbuE5ew/ehF+CUJNlGAKEi6ApSO/dNbVHeEqAMAe5xF8329GnJahBJ1Zr+Hg2drFNdoxczRSGv1ImWlOxTFi+NDuFeJoKN7y67ZdUq28ukV9I/VbhM0XNjp0B16xUaK1gqFLg7Z6PWjpLIWj9w+Am/sOwO/1LrqNanQRLQ9ZAJS6DgTDofD6Qgsoogr9c26fxcEqV3ZCTaLoCvqAMgxyQP7xinEpZ+pA8r2yxYAfHfMYOw+eVnxfmculC0C8Pj0THxVdS30xu3g8dxMSJBUBe1ZS6ug4YLNSndg1it75dZgGxe7UVJZC8DY+kYbMmhIMWlAXexfr9hxrCRM0HBh18tg07xX7ziJ1fOysGbXKXmbeKsoZ9ESgm3C9LO86DIo7BZ7uKjjcDhdQLMvoOr2QLAIkRXXBYJFiIc5++BIZZ2uK/Keial4+u6xcDkT8cgdIwHAdFyyBODjU5dV73eWqLtnYiosgoD//Ni8VY5FEIARzj44V9OgMArEWQRIgFz090F3sE7fhgNn0dxaUuvns8YgK90hd0sClL3KAWD13CyUVNbKFromXwAllbUhS3lVeBqQv+e0ZhFoYuUzssrFasIEDRd2vQw2zdsbCKbB0w+Mu5i6SgSjDLE7bhio2Q8Q4CVNOBxO58Fmj9JWnjvHDMKeU1fgl4LWLwlKsRQqdpjUg7v/pqEAgLf2n9EVdje7HIpJP6m1ybwebF289og4ofU/+lzuHDtI9xnNsvOriyorIs1juSMxffRg/K2kCn88WIGAFEw28VIHlCTg/NWgqKMT8LSSDyo8DXJBaNrStmP5NOTvOY0tB8+rxlB68Vt8fFItfgHtvujEU0XXCASCiSCLbhuOAYlximMbWeXYciixBhd2vQD6JncPT1YVGWZ/vze7HNh5/KIqZsPoQfOpTikBDofD6SwsrapOLzJ6b6uoA5QihDB1RDI+L6/RFXd+SUJReY2c+PBCgb4F7vntJ3BjWhJyMoMdKtIddsXfs9OTMKBPHL6fPVQWPFW1jXJbRzPoFYyXoF5QX2/2m05qMxJ1ADBqcD+kOezY+mUlAq2hOj+9IxMWEQorHx2jffFaE5x94+W/eeqbUXCsWmGZY+usupyJWDZ9FP56+IJCjMVZRFWMn6215GBhmQeLNhShyRdAvFXEipmjVdY/wvwpGVg2fZRCpJH5csOiKXLmciyLOC24sOvhaGXwLLl9hCqegea3fz8RjKsLI5OpUespyeFwOJ2MUbqbTzLOHh0xqA8+0yknQninqALuEcm4eK0ppCt3U+E5OebraoMyFq+4sg7xVhHP3TdBtlpV1jZi05KpKKmsVQT1a2ERgKfvHis/r0Nx8GwN/vl74/DbgtJ2Z6imO+woOFat6KX72t4yGHWIXL2jFN5AW19Ycm5m+pg/NXO0IuN1bGo/HGFKsAACXigoVfQob/YF8EJBqe53Pid7qErUdUXGa7Thwq6Hw8YKFByrxsYDZw0/Q+7/aKSnczgcTmfhlwALjMUdG6xlswgY2CcOU4YnI8lu7C4l/L+9ZRg1qK/iPVpQED48Wi27arV6WDT7Aig4Vo28CamqqgSP3D4ShyuuqjJBCX4J+Le/nzDtsvVLwAsFJ+APBLOFRSF0Zww9Pii+gAGJNs1j6EHW/mzHDrrQsF4yQt6EVKz96Gu5rur9WWkKYWcVBdnKqNWjnC1mTKisbVS87g4Zr2aIbrdfTqdQ4WnA1kOVphoOkwweAPK/tEnbIgTjJaLd+JnD4XC6AkEUcOeYQbp/p50L2elJ8PolVF9rxrYj1XhjXxksooHZqZWvL32riq3TEhS0wDSSUKyg+PFbn+O1vWWa9eNoq1i4a2/y6PcFgCW3D4fRqWalJyFOxwS35eB5rP+kXPfvFkF/xxahzW0KBGPcNi2ZitXzshQWMnqeczkTFSW4Vu88hVfnZ+Oeial4PDcTf3hkqjy/xVtF1bjsNgs2LZmKVXljkdA619ltFqQ77Iq5lJ0vYzHj1QzcYtfNCNdUzGbwAMDqnSfllYtfAq42eFWrKDYAuW+8BfW8LRiHw4lxfAHJsHUWHeTPdlTwSVCnX2oQLWdGvFVEVroDe5gMWFok+in3sd1mwYsPTJQLxdNuTYsAQDAXPmO3WSBAMDyPklZXsYWqr0eXW2nxS1jgdqGqrhH7Tn2jqENnEYFfzhqLlP4J8ljp87FaRDx2RzBhISvdgcraRqQ77HKpEQCqzkefnvEoXLbegIT8BTfL27PzHGmHSfZdWduIvAmpcnvNdIddEdtH5tINi6bgg+ILKjdtd4ILu25GJKZiOoOnsMyDAPVrTrCKmJM9FO9/Wan48bG/9zk3DcWmwvY1h+ZwOJzOoLquSfdvtwxLDhlHZ0SozFk94q0iAoEAkzkq4SfrPzeMpbOKkIXNnOyhyMl04ibXABSdrYFNFLDz+CU47DbUNnoVVsSMAXacv9qo2p8AYOWs0ZoWRhZ2we8eruxC8e7BCk33a4tfQm2DF4/mZuIm1wBVZmuzLyBnobL15Ow2C5bfdYP8ntcv4cktxYr9s9Y0rSxY2vLHGkPmTk7H1kOVqrkUgCz2thVXddsYO+5/62a0x1Rc4WnAwvWfK36IT80cjZxMJ565e6zhZzd/rk43Z0nWiLngcDicWOKz8hrDIH89BASLrb8yP1sOXYmzCJhh4PYl3DlmMG7KcKgycVv8kkrUxVtF2VVpEYCX52XjmfePYsvB81i88SAKyzyyqHtySzG2H63GO0UVKtfw6CF9NUNsJAQzdr+6UAerietAxhJnEXDoXJuos4qCYUzd63vLUFjmkTNb2bG8vPMkfvdhqSpTlby26bp5gQ2LpqiE28r3SjB77T5ViJKWMQTQnkv1tu1ucItdN6M9xRGLztYorHI2i4C8Camo8DTgxQ9LDT4JU+1eahq8psfC4XA4XUUk3bckAB+fvIJPyzxYfNtwCBAgQcKb+/UrDBDYDhJGLL1jBN7YXw4EArBaRFy81qQQGwve+hz+gGQYHwcAu0uvIM4iYIHbhXeK1N6WbUeqYRVC95iVy8P4JYUn54e3BK1eetbGAIAFbxbinZ/mICfTiV1P5eJ3H5bKArTFL2nWACQlT7LSHZqlX/ySMunByItV4WmAp75ZbjVGG0P05tJY7yphBi7suiGRFkekW6HYLAI2LZkKlzMRr+8tC1k3ifd85XA4nKAb0ahcVHuh68A1+wKobfDKz22grVqBmedxi19Cf7u+J8UnAY/dPgJXG7wKVykt9shx2MMNc/bBI7ePNOwZ65eAhes/x+4V0+FyJuLpu8fif0sva9aTm5M9VFE3zuVMxO4V02XrJInVYwWXXosv2gUbbxWxKm+sqs0YO5d2h64SZuDCrpug15BY730t2nPTclHH4XA4nY8j0YYXH5ioijMjpA+wY/Gtw3GlvlklOOOtIg5XXDXcf3FFLUYO6gOrGMyWJTF9O49f0u2qAQAp/RMUrSj18Pol2YpG5iC6A4TNImBO9lCktSY40NDCi8QVsnOX3rxGW/KafQE4+8abmvNivauEGXqFsJszZw727NmDO++8E1u3bu3q4YSNXias2QxZVvzR2xSWeXCksk6uYC4KwaQwouPY7FgOh8Ph6LMwx4V3i86H7N5gBpsIHKmsQ2GLfmefyquNWL3zFHYsn4ZxKf3x2t4yCABSkhJw+6iB+E2I/rSF5TWKhAhfAFi+pRiWEBH4n57xqJIrNM/BIigsbC5nIh7NzURK/wSs+FMxvH4JD28oAhAUYFpzWSgDhpYY07Pk9QZ6hbB78sknsWTJErz99ttdPZSI0IshMJMhayQKNxedU63wyLNIBCBqFNzkcDic3oZNBCakJeGwqtuBmiOVdZqibuTAPjjzzXXTxxyX0g8nLqrr5WlBis+v2XVKFlsnLn6Lj0+a6w3LIgGGXTXiLAIGJNp0W5oRrCLw09tHKt4jPVtf2nFSjt+jBaJWnBxd+mTTkqlymzby91CWPNIpA4DKHdsT6RXCbvr06dizZ09XD0OXUKsRvZWH1vv0vgAgf89phfjL33Mac7KHavbNowkAirIoHA6H05PRK2MiIrjgNSPqgGD9Ny3OhiHqgKAwC4dznuumLGjRICAhZJzhQ+4MvP/lBby2twwbPz2LHcunAYCqvAmBuIJZ6xptwPD6JSx463O880hQ3NGiL8Eq4qmZoxXCjfw765W9cmH+l3aU4g+P5CjEYU+jy4Xdvn378NJLL+HQoUOorq7GBx98gO9///uKbfLz8/HSSy/h4sWLyMrKwn/8x3/A7XZ3zYCjjBl3ql4MgVbxYTpYFFDXIdpy8LyqZp0WcRYBEmC6GTWHw+F0Z9KT7UhOjENJZZ0i/CQARCUepaMlV12jL+zPsGL2ZlcSvqwwFrAWQbvLxtiUfiilxGh1XZMspogVzlPfrGtQeHleNrwBSWXgSHfYFdv5AxJ+/Nbn+MXsMfK+gWBHpRcKSrH2o68V82jR2RpFtyVfQJnQ0RPp8jp2169fR1ZWFvLz8zX/vmXLFqxYsQK//vWv8eWXXyIrKwuzZ8/G5ctt6ePZ2dmYMGGC6r+qqqrOOo2IMVs3x+VMxNzJ6Zqij7zPBovSoi4rPUn+f9I3DwgKuJwRytiDBW4XPloxHavnZkVU74nD4XC6GxU1jShmRF13wWYRMGv8EM26dVZRvyYcKzZn35iKV+dny23VrCKQObCP8jMaF8gmCjjFWBhZN3BdQwte3nlS9xw+PePR9FqxCRVAUFi+UFCKV3adUp0zO4+6hyfLbcQIJKGjp9LlFru8vDzk5eXp/n3NmjVYunQpFi9eDABYt24dtm/fjvXr1+OZZ54BABQXF0dtPM3NzWhubpZfX7t2LWr71iKaAZ70vohZm/CdTCdOXapXNJkuqawFEIw5qKptxAfFF3DrSCe8AQlVtY145v2jwfYvIiBAiEowMIfD4XCih0UICpWVW0vw6LSRinIpQHAemDFmoKl4u8IzHjx33wS888hUbCo8h49OXEIZ40LWmgXMzA1/Mqh5BwS9SduKq7Bh0RRF2RN6XmNp8gWwKi9YXJ/EF7LzqMuZiJ1P5eKPRRV4Y3+Zpru3pyFIkonKs52EIAgKV2xLSwsSExOxdetWhXv24YcfRm1tLf7617+a3veePXvwn//5nyGzYv/1X/8Vzz33nOr9uro69O/f3/TxwiGckiVm95XusOPhDUVo9gUQbxWx66lcANB02xIXMP2elUmc0KpjF+xTCLT4Oyeug8PhcGKB7lYtwGYREAi09Xy1CPpFmvXCeNqL2VZsdF9cOtmPzGsllbVyqRStbYzm0WjOtZ3NtWvXkJSUZEqLdLnFzohvvvkGfr8fQ4YMUbw/ZMgQlJYad0qgueuuu1BSUoLr168jPT0d7733Hr7zne9obrtq1SqsWLFCfn3t2jVkZGREdgImiWbdHHpfu57KlX8M5GaeOzkdAHT75JH3aFFnEQRV5wkRwNyb0zUrmnM4HE5Ppm+cBd+26CefdSSRFIvX6t6ghxlBd+eYwapuGvFWEbdmOnUtgwFA5Uliz8UithVGprNj6XktJ9OJvAmpmjHnZmq5ApDnOzPlwbojMS3sosVHH31ketv4+HjEx8d34Gg6D3JTaiVn6LmAtUzeWu3EAgAXdRwOp1fSVaIOACYNTcJXVdfgDUiGljcj4q0iAgEppAuVFWKEIUnqOXLxbcOx8cBZw/0tvSMTNQ0tcpeLgNRmobNZBKyem4Vn3j8aMjQpUmNIqGRFs7VhY52YFnYDBw6ExWLBpUuXFO9funQJKSkpHXrs/Px85Ofnw+/vuh9wNDCqdbf8rhsAtNX1qfA0YPldN+BqQws2HjiryCTicDgcTtdTXFkHW2tSAxv/ZoYZYwZhbGshYyPmT8nArSOdeOpPxSoL4eai84rXFiEYh200Z8RbRTzodgEAthVXodHrR5xFwG2jBmJMSj885B4GlzNRt8NENAhV+9VMbdjuQJdnxRoRFxeHyZMnY/fu3fJ7gUAAu3fv1nWlRotly5bh+PHjOHjwYIcep6MhljkgaI1Ld9jx+t4y3LVmj5xVBLStVF4oKMXbn57DxsVurMobi7jWbCqLAPn/9bhz7KCOPRkOh8PhwBtARKIOCGarrj9QrplBSzN6cF888/5RU25fv4SQ+5yc4VC0FXssdyRa/BI+PnkF6/aeQVVr9qteBYj2UuFpgKe+Wc6Q1bIIsvNld02w6HKLXX19PU6fPi2/Li8vR3FxMZKTk+FyubBixQo8/PDDuOWWW+B2u7F27Vpcv35dzpLlGMNW32YLEzf5Aig4Vg1n33jFSqWythF5E1Ll9HS/BFgFAY/ljsD6T85qJkwEJKiSLjgcDocTPhkD7LhY1wivScfJ+JR+OG6yqHGzL4DkRJthPN1fS6oMi9hr7dNIK35aXoPVO0qxcvZYuJyJOF+jLGOyqfBcu4sGG/VUp2u8rsobq9mBoj391GOJLhd2X3zxBWbMmCG/JokLDz/8MDZu3Ij58+fjypUr+NWvfoWLFy8iOzsbH374oSqhgqMPWSXRCRMsWjF3BceqFenpzb4ArjZ4dbNgPz55BXEWAUJrv1kOh8PhRMb5q41IsIrIHNxHUfhXjyFJCYbCTmj9jzy9axq8hvv76oK5Tht0jFyogvbvHjyPH97iQtHZGjjsNsXfXMntrwihFx/H1nh19o1XtCxje6l3V0FH6HJhN336dISquPLEE0/giSee6KQRBekpMXY0WvWA4q2ivHKhLXubi87hjX3qljGD+sYZHqPFL4XdE5HD4XA4app8AVOiDmhbWHv9kmYpFgnhlWihNRpd3sUmQmFFfObusUhKjINNFPDklmLDfab0j8eda/bA65dUoT25o9sXymMUH6eXLNhTkiVYYqqOXSwSTu2Y7gBdD4guAkn/feYre3VN9Gx6ener58ThcDg9mcdzM/Fp2Te6PWsjxSIImD8lHUn2OEXihU0UsLK1vdcLBebLkLGsyhsLZ9/4iF2gZjJeWRfr1kOVWPleibzN6nlZckmwWCMcLcKFXQh6mrALBXujhyJnRDIKy3tuaxYOh8PpLnRUcWFCsAsRNOP+EqwipNZjx1tFrJg5Gt82eVWdMNr2JcAqBjNp460iBAQtlAlWEYtuG44BiXGKig1m4t7o7QCYKlisJwZjrZ5djylQ3JX0RFesGdiGy6oCkkzdpJnjh+DLiquGrWI4HA6H0/HclOFQLLSz0pOiarkz0oukvZezb7zsEcqbkIq6Ri82FSprntosAh65fQSmjx6MytpGeOqbZWtfky+AdXuDYUBrdp3C24vdctKfnruUFmFzJ6ebdrHqJUt0dxdtTJc76Up6SrkTlgpPA7YeqkSFp0Hz72zD5Z9NG6lqoEzzQkEp5k5Ox4wxg3DfpDTDY/ObjcPhcDqOg2dr5Oe1KABHoiTq9J7dM8YMkq2EFgFI6Z8A9/BkLN54ECvfK8Gda/ag8qpyTskYYIcAYN3eM1i88SDcw5ORNyFVLjNC0+wL4IPiC5pdkghEhK18rwSz1+6TRZ7RZ2i0yquwn8/fc1p3zoxF+Fzbi9D6AbBCj63j85B7GJ6aOVreh18K/oAJvoCEzUXn8fHJK/jwq2oYlbrj5Y45HA6n4/BLwG2tJUMCUnTin+MsAqaOUNdzswrAc/dNwO9/MEk+9pNbirFu72lZFHlb69TRnL/aKHt46CQHUtuOPfac7KGGteW0RFx769HRnweALQfPy3Nmd4C7YnsR7A+g4Fg11n70tcrczJqm8yakKrabc1OaqvI4AJU7lidWcDgcTufyvzq9WiOlxS/hM404ap8EHK64ir8UX1C8/0eNuUEPWnS5nIkYNbif4u8/nzUGOZlOw9pyehmvbGelcCDzYP6e03L7s+7UiYILu14E+wMAoJkeTtfxqfA0oOBYNRbdOhyORBuy0h0oqayFBUCo6MN7J6Xiw68u8vg7DofD6SQ682n7zx8cxTCm/pyZ41sEYNroQXh0WiaAYNKee3iyao7Km5AKwLg3LGuMAJT90ck+wsXlTMSy6aPk9mfdqRMFF3Y69MTkCa0fwCu7TsmZSOxNy5Y+sYoCRCG4gjNuLhbk22afrqhji2VyOBwOp3txvcVvutsFEHStBqRgCM/HJ6/gwOlvIAgCmn0B2WsUSecHWvjRhfjba2Xrrp0oeIydDj01eYINFCWyS0t+FZ2tUaTN+wKSLNTY7a2M0ou3ijhw+hvdcUjgoo7D4XB6Im6NmDwBwCO3j1S0nGzxS/IcQ4uw9vSKjXa/147qXduRcGHXi6GFW7MvoMoccg9P1m3qbGOyJJZOy5Tfs1kELL5tuMpaZ+N3G4fD4fRorKKABW6Xau4Idr5Qzwlku2i5OomVbfW8rG5XpiRacFdsL0Yv6BRoqwv09mI39py6jDf3l8MXkJBgFfHUzNHISnfItYUSrCIqahrkPoFev4QBiXHyvq2igB/eko66Rh+2H63uqtPlcDgcTgfjC0j4xdYj8AfUPhmBCeKRIODtxW7NLkjtoSf0e20PXNj1YsIpzjh99GBsKjwHV3KinGW0YdEUbCo8h13HLyoEm80iICvdgRcfmIgV75XIJVE4HA6H0/Np8WsH2jgSbYoi976AhMraRs02XrHW+aE7wYWdDj0xeUILrZWNVlmUNbtOyW7bDQfKsXGxG4s2FKGJKUUuImix+8n6zyFJgD+gjt6bPyUDc7KHoqSyFuc81/GnLyoVcRccDofDiU1IRQS2C5EZKq82KD5jE6HpfmWNCze7HPi83IMZYwbjjYentGv8vQEe9aRDT02eMEO6w66Il7va0KJIomjyBbCp8JxK1FnFtoSIFr8Er4ZYs9ssWDZ9FNIcdqzZdQqbi85zUcfhcDjdBD+AGwb2CVvUAVC1FtPbB2tcOFDmgS8A7DpxGUvf7n1zcrhwix1HQYWnAYs3HlTEy204cBZxFkFOhkiwishIVvaUvWdiKhx2G94pavvhWoVgEUubRcDquVnwBiR5dfa7D0s7rFE1h8PhcDqOr7+5HpX9BCSg4Fg1Hs3NVLxPx3+zfHzyclSO3ZPhwo6jgF4pEZpbmzsTSMHHDQfOotkXQJxFwKT0JNQ2eBWfWzotE45EGwBgSP8EVNY24nDFVazcWiILRz0SrCJuy3Rid5SrqHM4HA4ndjjnuY6thyqR7rArkihI/PcHX1biQJlH3n7GmMFdONruARd2HAVaKyVSvZuNxdv1VK4cf/dCQSmsIhBnEdHiDxY8zh09SM6cNYtNBFbOHiuLxz0vfRyywwWHw+FwYgetdpI2i4Dpowdh1wmlxe29Q5WK5Dq6vSUNj7EzDxd2HAX0SoldQWlx5pvrskvVFwCsYtC6lzchFZuLzhmKOqsI/PSOkfi20YequkaMSemHh9zDFMf6+BczsG7vafyx6DzvO8vhcDgxjntEMs5c/hbfXFd6cLx+SSXqrKKg8t6QQsWAsjXY//58Bs+ONQkXdhwVZmoA0VlLNCRsrqq2Eev2ntH9vFUE/vBIDtIcdnk/hWdq8JB7mGosv31gEh7LHYXNRefwxr4zEQXtcjgcDqfjKSqvCb1RK6Q2KpuIl+6wqxIo2tMarLfBhZ0OvaXcSaRoxeIRXtl1CtkZDsPPW0QRaSZ/vIVlHnxQfAEDEm1c1HE4HE4P4oGbh8IvAVsOtrljiadIr4A+xxhBkiQ+VRpw7do1JCUloa6uDv379+/q4XQY4RaDrPA04M41e3STILRiLFgez81E7uhBWLj+c3j9bV0tUvon4NMzHszJHgoA+NEbhfJn6OxcDofD4cQ+D7kzcPOwZLzw9+PwMC5aEcAr87PxzPtHFUXxXc5EXqSYIhwtwoVdCHqDsKPdqvFWEStmjtZMlmApLPNgwVufq4oQ2yzquAktLACsVhHNvgCsogBRgEq0Zac7UFxZK7+eMWYQznoaUB6ldHsOh8PhdBwigKepuGutEB2LKGDNvLaSWL1dxGkRjhbhBYo5Cndosy+AFwpKMXvtPhSWebD1UCUqPA2an8vJdOKdR6bKxYzjrSJW5Y3FpiVTYbdZAARF3rP3jNP8vL/1eEAw1kLLEkeLOgA4cPoblai7Od1h9lQ5HA6H04kIAuQ5ZfrowbAK6m38AQkrt5aoWlsazT8cfXiMHUezxEmj1y+7SPXSz4GguNu9YrrKXM72oL0xLQmbCs/hw6PVuuVLrGJb8oUWqUkJqK5rUr0/e2IKjlTV8Q4WHA6HE2OQ9Xqj14+9p67AahHh8wVgEYLhOuSx7fVLcox1pF4kThBusePIJU5W5Y1FgjV4S9DuVDr9XO/zcyenK3507Hs5mU7kL7gZv6QKHQNBMQcErX0vz8uWrX9aaIm6OIuA2gYv5t+SIe+Lw+FwOLHH63vL5AxYvwT8bNpIWMU2jw9JkNDyIt358sfcemcSbrHjAAgKsUdzM5E3IVWuYUeKC0czIylvQirWfvS1vN8Ni6bIGVBFZ2s0Y/PYRIys9CScqL6GFn/Qffva3jIAwabUFlFQxfxpIaKtry2Hw+FwOh72mTsupT+sogBfQAK9pNfyInkDwLq9p/HbByZ1yli7M1zYcRTQNexYd2q09s/ul2Q+pTvsqsQL94hkzB4/BM9vPyG/951MJ0oq61T79ksATOQCmU3u4HA4HE7H8ceiCtmC1+QLyK5YMk8seLMQ5682ytt/VXWtq4bareDOKx3y8/Mxfvx4TJnSvdqXRDPgVMvFGg3o/VZ4GjDrlb1Y+V4JFm0owuq5WQp3bFF5DV78sBS21js1ziJg+ujBcnKGGayiILtpbRZBdYxoEN29cTgcTs/ASGQUltfIz/YEyhULBOeJlbPGKLZfctuIDhhhz4MLOx2WLVuG48eP4+DBg109FNOQgNOV75Vg9tp9nRKP0F4hWXCsWrFiu3itCbtXTMf8KRnyNl6/BG+rDb/FL6GytlGOCXwsdyTuy0o1PMaowX3lpIzgviSsnpuFaGo7bv/jcDgcNbT79bHckRjUN07xd/JsD0gSCo5VK+aS+28ailfnZ8M9Ihmvzs/G/TcN7YQRd3+4K7YH0dktWCo8DZj5yl40+wKIt4rY9VRuVI7nciZi2fRReP/LSpXLlI73I7F6oaxvowf3RdmVejnDl8QP6nljRaEtU4vD4XA47cdus2D66MH4+5Fqzb+3+CW8UFCKtR99rajCcP9NQ7mgCxNusetBkIBTAJ3SgqXgWLVch67ZF0DBMe0frBF5E1IR3+onjbeKyJvQZn175PYRsLVmTFnFYKeKDYumoOhsDQqOVcsi1iheTgTw4VcX4fVLsFkEOVlDrx0aYCpMj8PhcDgmcY9IxspZo/HjtwpRQcXMAVB5TtgqDLyeXfhwi10PQisxIRYwagvjciZi11O5qmQKYgm0iW3JDusPlGPDgXI0+QJIsIqIb+1awSZDCAKwbHomXt93Bl5/W+Fjr1/C30qqcG9WmmH2rARzLdHMbMPhcDi9naLyGhSVq0tmCQgmvdksAgQErXa0UYKuZ2dUT5WjhAu7Hgad1drR5E1IxSu7TslCi7a2Ecz8MNkx05bAYPxFUD41U9WLm3wBrMobC2ffeKQ77HIxZSBocXttT5mmq/WdogpsLqoIKcjGpvTDiYvfGm4jCNy6x+FwOJFCHp9evyQ/z2kDQGeHF/UUuLDjRIzLmYidjLWNJZIfZm2DV/P9eKsIAZCFJAD5uJuWTMWCNwtlMUdWgVpuWjNaLJSoA3gcHofD4USLrHQHcjKdivfoenadEV7UU+Axdpx2EaokSiRxf45Em+q9+VMysOupXOx8Kher8sZCQlv/wQpPQ7Bv7U9z5EQKu82CeZPTDY8jIJgo0R7uHDOofTvgcDgcDiprG1XvkfCi1fOyuBs2DLjFjtOhRBL3lzchFat3lMpp8AAwJ3uo/Fln33jZLdvo9aPgWDUezc1ETqYTm5ZMxQfFFzAneyhKKmsV+x3UNw5X6lvk1ybrGRvy8ckr7dsBh8Ph9HLimRp2NJ0ZXtRT4BY7TodilDihh8uZiJWzlT1l6dWce3iynEkLAC/vPIkKTwMqPA1YvPEgthw8j8UbDyIr3aHoffsfD96Md5fm4J6JqaqCwpFa7vTaktlM/rKsArDA7Wq35ZDD4XC6KytmjubiLYpwYcfpMNpTMDlvQqqhC9fnb5NULf5gYUs2nq+ythEbF7vlWLvFGw8izWHHpPQkVZzdv3xvXFS7UfzwFlfIbW5KT8IdowfhzJV6Hq/H4XB6PHEaz1gB0Ey840QOF3acDkMrccIIul6RUWxF0dkaVcZrbYNXFc+X7rDjg+ILcgKF3hjuy0pFUmIcNi2ZilV5Y2Urn0UUVDF0Iwf2MXXun53xhNzmcGUdPj55BZ9plAHgcDicnkZAAhbmKBe93x0zSNVxgtM+eIydDvn5+cjPz4ffr1/ItrcTys0aTkaTXlkUUtdu66FK+Tju4cmwigBV/QSORJsino90l6ALEdNjIGVa4iwi/n60GttKquXjZqU75PIpB8o8iLMIaPFLiLeKmHXjEKzbeybktTnzzfUwriSHw+H0fHwBCe8ePI9n7xmHbSVV+OpCHXafvILdJ69gza5TUete1Nvhwk6HZcuWYdmyZbh27RqSkpK6ejgxh54QY8We2cQJvbIoesf5wyM5+PFbhfAFlB0riBh8fW+ZQtTNn5KBZdNHyWPY+VQuCo5V46UdpbJApC16xMrX5Avg8dxMZA7uK4vCN/ad0W1H1hncNykNECRsKwm/0weHw+F0JV6/BF9AwsLvDMfK90rk95t9AV6nLkpwYceJCD03q57VLRR61j26dRgt+HIynfjfn8/QFI0Vngas2XVKfp1gFRWiDggKQGffeIXVz2YR5OMmWEU0tf7xjf1n8IdHpsqfnzZ6kGY2bGd1oth2pEr3b1ZRQCAg6SZ1cDgcTlezZtcpvL3YrXjOGmXGcsKDCztORKQ77KrX4RQjZi17Wta9Ck8DXqEEGvvD1xONRWdrFF0qntLJuKLFpM0iYNOSqfJx7xw3BNuPBi1ivoCEBW8W4p2f5iAn04nvZw9VCbv5UzJw60gnntxSHOLKtRFtIfhY7khca/Ric9F5U9uTOOautD5yOJzeR7MvgMraRtlzAgQTKLi1LjpwYceJCLaYZGVto+mYOqN4OjZJookSaGZT4tlx6GVc6YlJMjYavwQseOtzrJmXhU+ZxAibRcCy6aMABMXVyYvfYkxKP3zb6MM7RRXydmwdve9NTEWT14fdpZHVwouziBif2g9NvgDmTU7HN/Ut+KNJUUfOicPh9GxcA+youKou/ttR2G0iGr3GPgMyP7iciXg0N1N3u0jKZXG4sONEiJaIMxtTZ9ayZ1agsYQaB3lYpDvssiDV6k3I4g9IKoscsfQBSjf0c/dNAABs/bISzb4A4q0i/s894xWfX5gzDB8UXzB1TlrcNsqJz8o8aPIF8Pz2E6q/h7IIWoRglhrXd70DZ6INHp12fWa4c+wgQBKw++TlKI4qNrAKwPcmpeLA6W/guR75NYpFoinqROjX7gSC9UCtovFWM8YMans+UklxLGb6jHO04cKOExF64slMTF0oyx69Sgu3awU9Pjbuzihbljw03MOTVT1m9QTSPRNT4UpOREllLUoqa1Vide7kdOyieukCkDNs4ywC0hx2zMkeii0Hta1sttbMX3JsUpSZuJlDdb0IJdhEQcA9E1Ow7QhPwugNTMpwYM/JK4r7ok+cBddbzGX+f9vsR1pSQscMjsIidK41+b5Jqbhz3JCwwih6K6FidwMS8G2zz3CbxLig7Agl2iLpM84JwoUdJ2IibfViZFHTWqXNDdHzNRT0PlnRBigfGi5nIjYtmSqXOwG0BVK8VcRHJy7JIivOIsiBwLRYpS2BnvpmtLTus8UvyeLv3aU52FR4Dju/qla0UfMGII/XJgp4e7EbaQ478vec1hWD4eANSNh2pBpWAfBxs12PZ8/JKxAZ0TRz/BD8pVg/GYemX5zV9Lbt4Z6JafBLEnZ+dRFepnL3kH5xuPRti84nI+cv7bCcc9QYuX8X5gwzJdrCKZfFUcKFHadLMEp8iPYqjc6s9follbhjHxo5mU7sXjFdJaDmT8nAnOyhqKxthKe+GS8UlMp/a/FLWJU3Bs6+8fK+th6qVFgIRaHNYkcfMyfTiTSHHbtPXII3oFwTk3F6AxIqaxuR5rBj5MA+8n6iASvqQrlbON0TCWpL2MW6JtOfb48L9s6xg0zHkv79WDV8Oq1YhiTZUdPgVS3OwoG1CO77+hs4+8Tpbm8TAG8nL3wG943D5XptAZszIhkHz12FP4J2NQKAhFax1JHkjhmErYcuyM+9+7LSUFXXhAVuF3IynSgs88jPYT3RFkmfcU4QLuw4MUW0V2kVnga8vPOk4r3Vc7PgDUiaMXY0Iwf2QbxVRHOrFY6IunSHHZ76ZvlvQFstPTYBgxaRASkoAB/LHYmH3MMUdf889c2KRBGWBKuIdIdd3m80W8taRQGiAFkoRlPUhePq43Q+hQZdT6KZtb3n5Demt9UTdQBwpLIO8VYRq/LGICvdgZ+s/zzsBY6qa02jF7WN+nF1nS3qAOiKOgAY3C8eS+8YYapQOosEhC3qLIIAvxTeRfhDYQX+zz3j8Pz2EwhIkC29RyvrMKR/AhZvPCgvsjcsmqIr2iL1CvV2uLDjxBTRWqXRgol98HsDksK9y3a2oIVZglXEqryxyEp3qGLz4q0iHs/NhCPRpkjVp62OXr+kmiDP1zSi6GwNqmob5X3GW0VFTScWCVDE8UVrrrEIAnwBCQlWEfdMTJFLvEQLLuqix8iBfTq1o8nYlH44cfHbqOwrXGFgRLMvAGffeKQ57JiQ2h9fVtZFbd9djdia0GTEtiPVsImdE4sYbxXx9mI3NhedC6sgugTgryVqt32j148Pii8ono9shQVO++HCjhNztHeVRguzeKuocFsmMLXw2G1XzByN2gav/OBpap1EKmsbVSvdZl8AmYP7qmIA3cOTZZGWYBXxi9ljFFmru45fxPaj1QprXrMvgMdyR+J8TaOmuKItg8064s8iCir3TFKCFXVN+sHMZMJt8gVw4apxr0Y9C07OiGRDyw+n/cRbRVTUdFwvTasoIDnRprAURUvUkf0LkOANtNZPlIBIJT/pA61Vlqi7Y9a7SmJxWSHItlpsL0tuGyGHiuz46pLus4fFIgTLO7EQz8dfD1+Qn488di76cGHH6TaYrWlEW8yafQGsyhsr/40tgsluS8fNAUohaGdiU/RcxVW1jfD6gw/AgCRh5vgU3JiWhA+KL2BAok12obDxfhsOnMUPbh6q2BeJdyPlXq42tKhcMDPGDMLYlP5Yf6BcJeyMRB1LcQjLR1ZGEorPq7eZMXYwvqy4GrWYP46SGWMGITHOGnVrKo0AydD9Fwk2MajgvIGgezXOIuCx3BGoutqoysQOZY0UAbwyPxvegAT38GRF3GysYBOBH97iUtSujJSxKf1QdvlbeAPBuNy7b0zF345UqRZWrBB8eV42isprDMfwxIxM1FxvwZaDlSEtqf+1rwwSJAxIjDMUdY4EK+pbfLKo9EvA3lPKmMp7Jqbi6buDz2JyVP7E6Bi4sON0C9hs2Q2LpujGx2nVvyPbsG5Xelst6K4VO5ZPQ8GxalxtaMGAxDjNSukVngb8+K1C2UXS4pdQcKwaj+ZmIifTiQpPAzYcOCvXtlt823BZqDX7AqhrVAqxR1tdvUBQMG48cFbx9ziLiOfum6DqtpGVnoSSKLioiLUzwSoiZ6RTJewsooCXd5ZiynAnCs94eNHjDkCrrE20E1xC1JM1RfoAOyqpTMgb0/orFgstfkm3z/KTd96AX2wt0Vwc9ImzoODJtl7Um4vO4Y395YptzLgwIyHOIsIfCJi6r30BYOSgPni2NbbMDDaLAJ9fUgmcm10OnP3mOryBAFr8kmEbQZqL15rwaG6mobC7et2L9w6FFnVAUKCt23sGcRZBs6IAIc4qwsfk4fgCbfepVQRmjR8ih8eQZxXvD9sx9Hhhd/78eSxcuBCXL1+G1WrFs88+i3nz5nX1sDhhwmbLknIkWjWQ9OL02KSGTUumIifTKQu2V3adUsS4aRVFXvvR17LbFoD8d3KsorM1IV0hAvXv9NGD8fan52QRujBnGHafuCS7KXJHD5Lj8LQerELrzlgx+51MZ7uF3RMzMnHD4H54p6gCC9wu3OQaIIvSOIuAGwb3xVfV38IP4ECZJ+T+ONHDkWhDTTuKDYfCJmqLvfsmpeLGoUlI6Z+A5VuKFYLk+9lpeGN/uTxpsxZgvZiwh9wZGNI/AYKg7ewnHWcqPA2Y9cpezTjUjhB1AOAPBKAzLBUSgOe3n5Bb9Zn52LzJ6XgsdxQKjlVj9Y5S+Zr/6YtKwyQSGvo4r+w6ha8uXDPcfnNRRdiWsha/hIfcGbrtCvsk2AAdi69FCIo8UicwzqJM/bKJgmGhYk74CJIUxajWGKS6uhqXLl1CdnY2Ll68iMmTJ+PUqVPo06ePqc9fu3YNSUlJqKurQ//+/Tt4tBw9jGrRrZ6XZarW3dZDlVj5Xon82mYRsHvFdIXw0+tIofV5IBj7JABy/boNi6bg4Q1Fipi4XU/lyvth97F6XpYsCMlx6eMXna1RjZkVd+T8aVd1VW0jfvxWoWLVTLhzzGDsO30FXr+EeKsISQJaWl3H5JErAaqSKu8uzQEAbCo8B1dyIt7cXxYVSw+n/Ux2OXCootZwm+Q+NtyU7sD+0x75+46zCJg5Xp00YyRKyGLqR//1KarqmuX3XQPsmJju0HUZP56bqbpnSA1FvdgwAcAzrclLHxRfiEr9xlhCAPDHpcEe1K/vLVOFgnQl9HMjziLg57PGqMaXMcCOlbPGAEDEBZ7psie8u4Q+4WiRHm+xS01NRWpq0KqSkpKCgQMHoqamxrSw48QGtBWOrg0XTkkUtquEt7VIcKiuGbTgY922tPuz0etHZW0jdhk0ttZrxQboV2KnEyYEBCfI9QfK5TIsdDFkYtlYvPEgfIHghClJAkCt30an9MOv77tRFoEFx6rlBzY9mbNusU2F57Dr+EXdWLpolsfoyZjppUkgtRM3FZ4zjLHTE3UWARiT0g/Hq79FzXUvdp+8gidmZKJfQtC9nzchFX/6Qum2uzGlH74ySJxo9PpRcKxaIeqAYOsqvaK0AoDc0YPgSLQpxAGpoahn5ZaAqIudhTkubCo0FwcXbxXhC0gR1YwzgwRgwZuF+OXdY5HS33xXj1DfkRFms2ktFgEBqqB6Sv8E1WLv/NVGPP3nI/jdDyYhOyMJlVcbcfV6i+H+WWsweR7z7hLRQ4z0gxUVFdi/fz927NiBL7/8Es3NzaE/pMG+fftw7733Ii0tDYIg4C9/+Ytqm/z8fAwfPhwJCQmYOnUqioqKIjrWoUOH4Pf7kZGREdHnOV2Ly5mIuZPTZffp6nlZplZ4JK4OADYtmQpbqyvAjCgklsKV75Vg8caD2LBoClbljZXdCaTjBL0/0tj60dxM1diIQGXHrlWYmWy/YuZo+fMtfgmZg/ti11O5mudf4WlA/p7T8r58AXWpifUHylFFlRjIm5AKu82iOncrUyzPYbcZJkgYzRURP2i6MVaRJBAoadIRdRYBoL1UCVYRy6aPQprDHvEY1vwwWyUitx+9KN+fhyuu4j8/LlP8/cQlbcFAvkO7zYKrDcaJFvdMTAV9R0kAFm0oQla6Q77XEqyiHNIQCZkDI1uc1+j0go2zCLBRwxEAjE/ph3smpMKi/hpl4q0i7puUhpHMeMyemV8KitcVfyrW3caRYMWdYwYhY4AdC3NcEYs6AJg2ehBW5Y3Fq/Oz4R6h//xjPQM7j19qdZcrafIF8OSWYhSfr8M39dqizmYR8Or8bKyel4VZNyrDW8i15d0lokdYFruzZ8/itddew7vvvovKykrQXty4uDjccccd+NnPfoYf/OAHEEVzt/X169eRlZWFJUuW4IEHHlD9fcuWLVixYgXWrVuHqVOnYu3atZg9ezZOnjyJwYMHAwCys7Ph86mz/3bu3Im0tDQAQE1NDX7yk5/gjTfeCOeUOR2I2SxXLcyWRNFqUbZ7xXTTx6Wz74hFLm9CKl7ZdQqABFEQsHGx27DQsZmxGxVmzpuQKsf2sVY+WgDS50qgXcWEZl9AFaO4Y/k0/GzTFyilJowbhijrmKlDvNsQEHx46wm/sSn9cDyK5TM6k0gSFR7PzcTYlH54SmOylhAsEXO10YvyK9fR4g/AZhHwyO0jUHa5HntPXcENg/rivpuGKmodRoI3IOHHU12KYP57JqbI/7/+QLnqM1rGKaso4A+PTJXv881F53SPabdZcLNL7ZJt8gVQUlmriH+tqm1stQRfkt3DhJwRyTh8vlY3G7NMJ4vWKgLzb3Fhyxfn4Quo60g67DZNq9Vtowbik9PfyFtLAA5X1uFwZR2sQvAasHFvRLdvO1KlEn8Pul14//AFuR5mglVErWHpId0/4Z5JafJC8ek/H9Hf0AQfn7yCz8o8kADDTFe2tFJGsl1zezOW+pWzxuD+m4IZ/+kOu+LeWPPDtmxnbq2LDqaF3T/90z/h7bffxuzZs/Gb3/wGbrcbaWlpsNvtqKmpwbFjx7B//3786le/wnPPPYcNGzZgypQpIfebl5eHvLw83b+vWbMGS5cuxeLFiwEA69atw/bt27F+/Xo888wzAIDi4mLDYzQ3N+P73/8+nnnmGdx6660ht6Wtj9euGQeiciJDS3B1xI9ayxI2d3K6aVEYFHBB4ltLnxSdrZGFUpMvgMraRlWMX7ii1agws9bftK4ffa5A0I23bPooAEGBumbXKTT7Agp3NLkm7uHJ+Jqx1JQyQqyu0adbR2/t/GxcvNak6TazisBJHStQdyCSMMI395chIOkH9ReW1yDeKuK/l7hRUlmLNbtOKcrYfHXxW3xVUKpZm5AmOdEGV3IiJqYnqdyLCVYRnvpmuUwOscy99clZ/PAWF1zORAxL7hMyycYqAkvvGIk0hx05mU4AwIBE7RZcpKTFyq0lmn8/UlmHvAmpckwoEa1ahrsvK65i3uQMvHuwwnS2tQjgD48EY9bcI5Kx4k/Fqs9u0dnf2JT+mhnIQKvLWCMcPSC1iSN2n+zv9nDFVVNxaFqi852iCrx/+AJ2LJ+GW0c62x1rqFcI3SIohdbhiquK5CmS6EW7U9mrIiLYUuzA6W/k9ol0ElpOphPvLs3BB8UXMCd7qHxPcaKHaWHXp08fnDlzBk6n+ksYPHgwvvvd7+K73/0ufv3rX+PDDz/E+fPnTQk7I1paWnDo0CGsWrVKfk8URdx111347LPPTO1DkiQsWrQI3/3ud7Fw4cKQ27/wwgt47rnnIh4zxxwd0RNWi/a0KKMFHNCWnVdV22jY5zBS0WpkhWT/pnX92HNdNn2U/JlHczORNyFVN0ax6GyNajJhH9gLc4bh6bvHyiVfrjV6Udfow6zxQ+ANSLKbjbUuRbNgakczLkrdFvRC6GjrX7MvgDf2lyFvYpqu5SRUbFdNgxc1DXW4/YaBcvxTnEXAkttHYMOBs3ihoBRrP/oay++6Qf5Mo9eP/D2nMSd7KHYcv2i4/3smpmL3iUt4bW8Z3vzkjJxJnjchVV4o0Ow+cQlP3z0WC9wuFGkUrd5+tBr/W3pZtRDxBdSJQS1+SVW2wwJlYWP2M3kTU5HmsKPC04CVW0s0BRzbGxkIZuZaTPpO2WNqZRBbRSjETFVtI555/6ipfW9aMlUzUaTR68cfiyqQObiv4v1QFmViUTPTX9ovtXXmqfA04Jn3j6LR68fRyjrZsl90tgYfl15WWN3IMcRWy+bHJ68gwSrisdwRmouAnEwnF3QdiGlh98ILL5je6d133x3RYFi++eYb+P1+DBkyRPH+kCFDUFpqLqD2wIED2LJlCyZNmiTH723atAkTJ07U3H7VqlVYsWKF/PratWs8Jq8DiHZPWD1czkRsWDRFXh2GIx616uERK4NRn8P2ilba2kf2x1rx9JIwSOkWvWtB1+Sj91tV26iyFJAJjKziSR0+2i28YdEUhUgk15qdlDqj/VE0SElKiGrHBcICtws3DRuAssv1eG1vW0zb7tIrGJfa37CWohnePXhenrRb/BLO1zTKoovslz7GloPn8f6Xlbp1yYCghXpSepI8gXv9Ehau/1zOJF8xc7TKQtvUWpeMWLBf21umsvzqLUQ2LJoiWy91hS7zWgAUrfiIcFx+1w2G58by5y8voMXkCmSya4Ci00pqkl2VNLIqbxyAtoQoM/c/EXVpDjtGDuyj2WLwtb1leHV+tnzdSIyikUtVat33HTcMxO5SbYskIc4iwFPfLD+D6OdYwbFqOPvGwz08WeVOJWEYdM/pJl8Ab31SDq9fwtqPvuYZr51I1LJir127hnfeeQdvvfUWvvjii2jttt3cfvvtCATMmwzi4+MRHx/fgSPiANHrCRsK2t2zrbgqrIeL1hi3HqoM2efQjGjVc9WyfWpJHIxFFLBmXpYcp2J0/YjwMnqY0iKPXCN64tErAs3GHNJ9H0kM4rLpo/CXwxcUkw1x77DCxixs8VsgdGxPUoINdU3h1XrrF9/+RyIRwk//+QiaWl3f92alycJ43d4yxbi3H72IHcun4XcflprqLqF13j+akoE395fLQmAXY4nLSneojuH1S7plRnJGJGP5XaOR5rBj9c6TmpnkdOwnwW6zwCYKePrPRzAneyimjxmkEnZ6CxHi6s2bkIp1e0/j3YPnQ9ana/FLeCx3hKIVn5aQZbGKAubfkiFbBM22ygKAK9+qs4FZnt9+At/Ut8jHNxJ1cRYRP581GnkTUlFV24g71+yRSxHdMzFVdU98esYjL6CSE+NM/Z68fgmfmqg16QtIeKGgFK/sOoWNi90KAUnqfBIvBHGn0mOgLa9syAcp1M7peNqdrPbxxx9j4cKFSE1NxfPPP4+pU6dGY1wAgIEDB8JiseDSpUuK9y9duoSUlBSdT0WH/Px8jB8/vt3uZI4+JMu1I1dxetmmZiHdKYrO1qDC0yCLNkA/i0sv85VAZ9rOXrsPFZ62HqD0eJt8gbb4nYCEJ7cUo5B6OGtdP61Vdii0YvN2LJ+mysbUijm8daRTlWXscibi7cVuWFsjy+OtIm5yDcDcyel40O3SzMAF2mroxVtF5DDZehfrmlTbh7LHGIk6vSTHv5u4XkYQUXf/TUOxcbFbntwWbzyIvx6+gPw9p3F/dpriMz+eGox3e/rusbpZovFWEY/nZgbL11DvD+wbh2fvGYeVs8fiAaodHetyIwuQ3SfanqVxFgEWnSS3wvIaLN54EACwem6W4m8k05dYw8n3b7MIWDlrNJ7cUowtB8/jR28Uopgpw5KVnqT6Taz96Gu8UFAq/xaqahuxuSi0qCO8se8Mdn6lFrIbFk1BVnqS5md8AQkuZ6IiQ5cunGsVoPtd6CVtsJRevCZfG4LWfdfiD6DwjAdVtY1yUhMQFJuT0pMUmboAMHpwXyzeeBBbDp7H+gPlclZ+nEXUndCtomCqxA655nSiy+p5WVgxc7S8aGj0+rFu72nkZDrxux9MUvym7TYLNi2ZitXzsrBpyVTFNXx550nFs47TcUS0PL1w4QI2btyIDRs2oLa2FlevXsXmzZvxwx/+UDMdOlLi4uIwefJk7N69G9///vcBAIFAALt378YTTzwRteNosWzZMixbtkwuCsjpnrTX5asVL2fGtWsUL8eKLxI34x6eHLLF2QfFFwxjU9zDkxUunDW7Tmm2PmM/w8bmAeq6emzM4eLbhuOZ949quqUraxvlDEK6bRBtpXnpw1JFvJNFAH46baQck0O7u3wBybClUbiQeCBWPJDaf75AZO5jvxQs1DqkfwIqaxsVFgs6cH5hjgufnPbgx1NdeOSOkQCC98yup3KxekepopfqQ+4MPJY7StXVxGYRsPSOkZg5PgV/PXxB0RWAjfsqu1wPT32z4vvTKkxMo7cQ+vl7xbjJNQAuZ6LiHL1+Ce+1lhUisKVdVuWNCxkrejDMxZdfUpf0KamsVVkTaeKtIvImpMpxp2w9R58E/GLmaM3ezFrYRMCV3Ech+sam9Mej0zKx4K3P5VhJvdvp45NXsP/rK6rvl8Tp0S7vU5frVb2wnX3j4alv1q35F4igDwGb6EJ3xthcdB7lV67jybtGy+WnWO9BYZlHYQlt8Uv4Y1EFnqZ6d3M6hrAsdn/+85/xve99D2PGjEFxcTFefvllVFVVQRRFTJw4MSJRV19fj+LiYjmztby8HMXFxaioCJrIV6xYgTfeeANvv/02Tpw4gccffxzXr1+Xs2Q5vRtSo05vJRjKehYKLQsYWS0v3ngwohUoEV+E1/aWydY7IBj/Nn+KdlznrSOdhucLAHeOa4tJJaLKCK1rZJScAQRX5gMS43Td0vS2JDuTjJnU+fvflTMUljmfBLy5/4zsCqItKPFWEZuWTFXUENTCqlE3TgtRAF75YbbKogIAE9IcWJU3Fu/8NEfz72Z4fV+Z4ntmh1Vz3YuPV06XRR1da/HfH7pZrjH27D3jcPOw4DVKZ+vZSUG32V1r9qiyLTMH91O8fm1vGdZQ1zTeKmLW+CGG52e3WZDusOP0ZaUr1ReAbAlm74kExso1oI8N7y7NwfwpGXi3tcMCjZYFfE72ULDYxGAix7P3jNMdL4FYibREnVUEHssdKXeDoa3eWekOhfU5b0Iqpo8eHPJ4QPCa0KIu3iriQbcLOZlOvPPIVIVV02gf9HablkyVXd7knOKtIuZkD1VcMyK+9OpRApG1XNt+tFq2orqciRifpjRwfFZegx+9UYjCMo/Ke0B6ZrOUXuRVJjqDsCx28+fPx9NPP40tW7agX79+oT9ggi+++AIzZsyQX5PEhYcffhgbN27E/PnzceXKFfzqV7/CxYsXkZ2djQ8//FCVUMGJPu2pM9cZmM0+NVvzTgvWmgVAJXjMFEimr6PLmYinNALP6XIsy6aPwrbiKjnwetroQfh+9lA5S40+X7ozBlvzzKyVkr1GRskZdGIHW1+PPteVs0Zj46dnUV3bKGdnsmO+iQlEJwv8Jl8Aj+dm4o39ZcEiy60z06O5mUjpn4CnthSrMgGtIvDTO0bg20afYRN0cn43uQZg94rpqti24spafFVdh01LpmLTkqlY8Obnphqm0xyrqsPhiqu6FhqH3Sb/f4WnATNf2YtmX0BuQXf/TUNxk2uA3Bs1wSpi0W3DFfsg1hOtTMfRg/vinKdB1SWF6C5JkvDLPx/RtIAGy5tkKvoUs5zzBEUM2xHm4Q3K4vGPTss0zIDUuqcqaxvx7D3j8NuCUvhbLbUkG7fC04AXC0rhZZRKvFXE3JvTUdvoxcKcYUhz2OWYMLr+nC8AjBrcTzM8Qk6KEgU8fOswAEELuRno0UxKT8I/U5bJNEdb262sdId8TdlsVpLNPCAxTmFlr6ptS4Qh/2pZyMi13Fx0zpSV0Qz0M+6OGwZqlsZ5fV+Z6vvV65l94PQ3slDkdBxhCbtHHnkE+fn52LNnDxYuXIj58+djwIAB7RrA9OnTEapd7RNPPNHhrleW/Px85Ofnw++PPFOtO9NZdebaQ2eUTDEjZozQu456ged0e7ANi6bIMTeFZ2qQM9KpGS+o10OX1LGL9JqQEhn0JMMKQPbayGPRKAFBl9kgk1t8a/eBZl8AcRYRASkAXyB4LRyJNnly8AWCGZmblkzFyq0lmuUdfAFg3d4zsAjablaawvIazF67DzuWT8PCnGH48NhFhXjz+iU8+EYhls3IDFvUAcCVb1sUVjR2LPQ1LDhWrZi4SZB5wbFqRb3EQib43ajMxYdfXcR/L5mKkspaSuC0CeegGFQOKs4iQELw3Dd+ehaORJuuK7Ousa3QLrknth6qVLjeLAJ0u2ZoLXbYftBEzNPW4KKzNSpR5x6RjAVuF1ZuLYHXL+F/Sy9jw6Ip8AdIGz5Jvsf0yhPR3Vq8AQnr9p7B25+ew4sPTAy7ZtyRyjr8ZP3nmDk+BSMGJuK1PWXwS209drXE132TUrHj+CWs23tGVfeNFZcfFF/A734wSXcRO2qw2uhC94Bm3ze6u+nrVf6Nee+Ee3iy5v3ZwrRx5HQMYQm7119/HWvXrsWf/vQnrF+/HsuXL8fs2bMhSVJYmafdgd4eY9dZdebaQ0eWTNGaeAismNl6qFLXqql3HVlLh1bnCjZGC4DqfOn905lobB27cM+dFqP0JKN1fUhpC0XGsM7jgC2zQWKEgGA8oM8POV5PKyPzg+ILIePs2D/rTV7Etb72o681xZsEqNptAcH4uCOVdSEL+wJtcXoJVhEBSUKLX0JCa3xXKL66oHRbXb6mTCDpZ7ch94aB2HH8kiqrs8UvoaSyVlG/8PC5qwpLJhlbvFWU29YRKzJ7v7FCfWHOMNV42V7Mfgmaz40KT4PCErmz1S3K3ss0JGHDPTxZNZbZ44dg5XslsuBr9Prx+r4yeRtvAFhwi3aS1l8PX9AsYkz24w1IeHdpDl4oOGHq+ya0+CVV/CJtkT9fo8ykPVfToChPQ1+3OdlDFeJSy1VNk+6wy98DEVeRRKbOGDMIz903oW1Rl6z9LHl0mjrT1eVMxCvzs1UhApHGOcey5ygWCTt5wm634+GHH8bDDz+Mr7/+Ghs2bMAXX3yB2267Dffccw/mzp2r2RqM073orDpz7SGckinhPBxCWSu1LAx6Vk2j6xjKRaxVR48O9iafZWuBhdPeTItQol7rvAHAU98sW0bYyZcWV+yknZXuQCXlbiIWmpxMJzYtmapofzYneyj+eviCbuV8FptFQN6Nqdh2pErz77UNXoVVKmdEssI1rEVWxgA8//2J+OvhC4qJ686xg1R1wugq/oB2TULSoo4IHSL6ztYosy9bGPFZ1+jFtiPVuG9Smub51TYEs4LJfVZ2uV7x959Ny5STdsj9TKzINosgl0ih238ZdQtwORNV35eWdex3H5YqLJHEQmmUOLTxQDnuvymYrLRy9lhFGMOXFbUKK55WHFtVXaPc3ouEBFTVNqqEx4wxg7D/62/gC7SN3+VMxH88eLN8z1tF4HsTU7GtJPwMapsoYOuhSiTZlVPvjWn9cepSveo5UeFpkF3TO45fwoLWuD3yN/Z+qvA04OENRfD6g63UJqUnodhAkOoJvjiLoBB1QLBF2voD5XL3mlnjU7AwZ5jsIteqvUlKotw60hlR27Du4DmKRdpVtOmGG27Ab3/7W/zmN7/B9u3b8dZbb+HBBx9UtOTqrvR2V2xn1ZlrL2bi58J9OJi1VprZrj3XUe+zrMiM9vcUStRrJZSQorJxFgGr8sYib0Kq3I5o1KA+ioxNNtuUCFGtY+ZkOhW9fauobNtQLHC7sPXLSmw7UoV4q4i7xg1BRrJd4QKra2yR23YlWEUcPl8bcr9kciYT1+v7gla9+7KG4pPTbZmANhFydiygf6+6nInY+VSu6jt85LYRCuHxzbctiLMI6BtvRU1DWymXszXXNQXRW5+cwYNulyza3vqk7bxJcD97L9Hu/8UbD2LH8mlyViSpUciKfHrc5PvSKrOj1csYAK42tMjHJ/fyb7cfV5wjnZiTNyEVL+88KXfZyEhWunsfuX0Epo8erGoPZib79tMyj5yBTWd5s7+zorM1CmFHLGQJVhEP3DxUcb/T/Py9YvgCwetPFj9xFgGP5Y6SM5+12gYSjlbW4SZXMPyJfqaRBd3py9/K958EqESdVr9bGpsIrJw9VjOTnmRta4lJMha6NzV51v7uB5N0jxeK7uA5ikXCEna/+tWvcP/992Py5MmK90VRxL333ot7770Xly9fjuoAu4re7ooF2pd00BXoWeXCfTiYtVZqbUcnMtCWs0ivo5nPRvt7Yt3EJJaPHIM976sNLfJkQgL5yZjuv2koKjwN+OBwVau1Q8APb0nH+19ekB/+WokZehbShes/Ny3sahu9iti1Sa01zdpi+gTFBJyd4VBY67LSk3Ci+poqOYFMznabBStnjZYFxMcnr2CB2yW7O70BKKxXRgsKre+QFKNeu/trlLdmXLb4Jdw9IUUx7kduG4GbXAOQv+e0wmVHxzMVHKtWnMcPbh6q+l4BtfufjeNkk3b0FkxaRbLZeolG12HfycuKki/fGdlmIayqbVR02RiX0l/+TuOtIh5yD4PLmYh3l+ZgU+E57Dp+USHyyD2X7rCr4udoqzGJbdP7HetZyoFgWIJWUgsxNDf7AngsdySuNngVZZP0nlsE+juhn2nkPtPKCs8ZkYxhA/tg9OC+eH77CfVFp5g8LNmwiLDWfUqPkw4JYJ+1kbhU6fJNCa29ujmhCUvYVVZWIi8vD3Fxcbj33ntx33334c4770RcXFsvuMGDzaWHczjRxGiSCdetbNYKppVYwa6wY9l9YPSgJa+1rimx7BC3XEllreFxyHUqOFaNV3adwuai84i3irJlz+y1KTpbo3Djhgr8/ujEJXnCT7CKslUxofXYfz18Aceprgi0qLPbLFiVNw5rPzqlcs2SuavR68e//V05UVbVNUa18j7JjqW/h8dyR2HqCKfcnJ0IQLbjR7zBRPinLyqxuei8IsYN0P6t6C2Mwn0/VI1GmoemDsPfjlRDQrBY8MrZbbXP2GSCd4oq8PZityoEISfTicraRkWs2z0TU2WBn5PpxMIcFzYVtsUdxllEtPiD12/LwfOy8GN/x+zih/4NFJ2t0e3JahWCZX3irSI2HjiLJl9AtyOO1vWKby0dRPdlpu8zrUVPtsuB6aMHY9UHoXvV2uO0y6UYQY+T7Ueb3tq3l/z2aUue2d+9xPzLCU1Ywm79+vUIBAI4cOAA/va3v2H58uWorq7GzJkzcf/99+Mf/uEfkJzMFTWn8zGyykXirjRrBaO3o5MHCLHqPjDjnta7pmybtg2LpihW1VqJAS5nIpx94+XYqmZfAM6+8fIxC8s8mtatwjKPLCDpCcRmETBt1EDsPqnf+1KveGtT67EvXlN3swDa2mn9ZP3nhk3TbaKgytDce/IKAghmrK6emyW3FQOClfcBhCVmCWyGMrGG6mEVgbcXu+Xj0HF8tDuOjnED9H8r9HUn9fT0Fkzs++kOu+y6JgKfLna7/pNyDEiMk2MtSdke0uOU1HMjsMkEReU1csa0kTiKswjYefwith8NJsy8+MBEhagDAJ9fO3ZT73fsqW/GP79/RL5P2FZcLIP7xWPF7LGK+9FMGAcRj6/sOoUXCkpll29dow+zxg+RyyCxmfEWARiX0h8/ekNdU04LrUSIUNDjZIskl1TWqkrmkOx4M8ldRWdrFFb3WHyWxiJhx9iJoog77rgDd9xxB37/+9/jxIkT+Nvf/obXX38dP/vZz+B2u3HffffhwQcfxNChxtk7HE60CGWV6wy3stYKO1YTT8y4p/WuKfvZytpGzRgxFr39ERcr6wKsqm2UJ6QtB8/j3aU5sjB4eedJQ1EHtFXuZxMDyLGH9E9QxHERahu92HPqsqGoA4BH7hghW10IAerfbSUXFPUKW/ySbj0/vetmJkOZQE+CvoAyLo2O4/vyXI3ClUti3OhtzcTeGcWAku+ptsGLhzcUyaVGdiyfJotI9roQaHFCEmno65ST6cS7S3Ow5qNTKGq1pnr9wXI4u1dM14xBDYrJk4rMWa1ah3opOezvWC9esMkXQGVto27vX29AkmMW6YQZ+rfAZuOT86msbVQknZDvcPeJS9i42I2SylpcbWjBhgNn5QSHTUumYlPhOZ2zamPEwD54Yc5Ew642RpBxsiV5rja0aArcLQfPm+rd3R2S+GKRdne8HjduHMaNG4df/vKXuHLlCrZt24Zt27YBAFauXNnuAXYVvT15orvREUkE7RmDXgmTWMHMA1PvmuoVLzZznlq18VgXq80iwD08Gfl7Tis+S+p3OfvGhxRdgLIvp9a55I4ZhBNMg3oAGJqUgJMa79PYbRY85A6W/NArBltUXoNf3ztBVa+QWCzoen6RWE3Z74XtTMG+Jt+Rp16Z3CZAwOutTdz1rIl6sXdGv7eXd56S3Zrs+LXqOBLYsj3pDrvKupyT6cRqRxbuXLNHIQL1LF/OvvGqzNkFbpcsDAHtuoB3jhkE90in6roUHKvWHDsRaS5nIialJ6mE3WOUK560+SL/hrKi67mySV9X9nqKrZ2gdh1X9tHVotxk/9tQ0IsJABiQGCePmSQwkWtixpsRC8/17khYwm7u3Ln46U9/itmzZ2u2Dxs0aBAeeeQRPPLII1EbYFfBkye6H9G2ykUS7NsZlsFoEE4coZGLiP2sXvKIkeWJdbESl5pe/a50h11RbFcv1o4thsqey0PuYVj/SblKJCbEWZGRbFdlVRLum5SKlbPHwuVMxLdUoV6W9AHK3rgkxg9Q1/PTCzRPd9g1E3S0ys2Q7FzCnlOXNS0weRNSZVeoVQhmz9KuRDrmTj4XRiTaREFzDOSeeH1vmULUAeoC3FrXhWxHJyMY1YIMVV6FoHWPpTnsckyYRQiWpqFd5wCw++QV7D/9jeJ+rfA0YM2uU/JrvY4R9HUGAAuC/XkBKJJZWvwSCo5Vw9k3PqSI13JlA9qWsWZfAJsKzynu7zvHDMaeU5c16/ZtKjwXscWOEKpEEwD8b+nlsCxw3eWZGkuEJeyuXr2Ke+65B2lpaVi8eDEWLVqEkSNHdtTYOJwuI9wSKV1ZRFNPTIWiPQ9M9rNsgDSBXLtIYiDTHHa5JISttRXW6609T+kydlYmroi29rDuM9bN9d9LpqoSJGaNH4KbXAPwX3vPqCw4T8zIVATyV9U1Qo9f33ujfH6P5mYiK92hch9qjZWNN2RrE76+t0xVbkbL+sUWwSUcrrgqiwKfBEXtmSadOCbWEvPpGY/uGOw2C4axwnCAHZt/mqNyk9IFlI3uXzpO7uPSy0h32OVWZXQ5HKMFCnuPBcVnWzFlb0DCzqdysXJricKSxy4Q6E4hAPDI7SNVje3J74EOwfRDu2CzfI00LK5az6FHczNxtaFFZSlmrXmiAOygys7EWQTsO31FU9QBkPs5t+f5ZeSeJ9CJV1ywdQxhCbvdu3fj3Llz2LBhA/77v/8b//Zv/4bc3Fz89Kc/xQ9+8APEx8d31Dg5nE4lnBIpXVlEUyvWJxbGQCDXjl7Jk8w+ehLREpkFx6oV3QPoODwaViBpFWnWs3Jp9UL1BiS4nInYvDQHP34rWF7FKgr4wyNTVRaNsSn9NS17j+WOVGxb4WlQJWNojVUr3rCytlHu7sFai4jg1br2s8Zr99MO1Uf37Df1qvdYS8yc7KFyL2O7Td1D+WaXA6WUO/sXs8aEZRVm/0634dp+tBrbj1bj3aU5yMl0yp+v8DQYdoGhj8NeRyAopFzORJWL1ibC0LLkSLQpXuv9HqyiIO9Hqyg1cW8TKmsbUVnbqPkcGpAYp9h2QGKcqlVZQFK6lm8bNVDXCg0Es8JnvrIXuzQstlroLWaNvk828SpWKwZ0d8RwPzBs2DD867/+K86cOYNdu3YhLS0NS5cuRWpqKpYtW4ZDhw51xDg5nE6FTGRA6AQILREYKWRyqvCY68sYqtZVtI9ndgwEtk7dqryxEBAMnJ+9dl9Yx9VrJWa3WbBpyVSsnpclx1/NnaxsIaX1HWmNm/6u0xx2/GL2GKzKG4s/PDJVDuKnedDtQrxVVO2DxN8RNhcpXWIzxgzSHKtevCF9HrS1yBsAUvonyPeq4nrp1Ptb4HZpvk/YflQdk0W+P/oa06/zJqQqfi+P5Y7Cq/Oz4R6RjFfnZxtm8JrB5UzEVSbRhS57QsTUyvdK5PvK6N5mryMA+fv99IwyAYC43Ql5E1Ll7zzeKiKlfwKe/vMROXFA7/eQlpSAKqpY9c6ncrF6Xpbs+tZ65ug9h/ImpCKhdQxEGGpdI5r9p67In7Fo1LsD2jJPQ6F1vc0QzWclR592JU9897vfxXe/+118++232Lx5M/75n/8Zr7/+Onw+/biT7gJPnujdhBO0G63MrUgsf+3JxI2WpZG1xq2YOVouXcG6Y+iSJ6HKHmSlOxSv6Zp0T+kcw8wY6etDyrQAwRIhpNtAqGr69Dm9vdiNhW99Dm9Agk1UdiwgsG7RxDir5pj14g3pv7NB/juPX8KO5dPwx6IKvLa3Lc6Ode0RiMh660A5jl2oA6v/7pmYovk51hLDvmZ/Ly6ncUmWcKjwNIDtFHYrVbRYqxsK7RrWSkSgv/t4q6hI0iBoZSK7nG0dGGyiIHcHIZnbete94mowy5u1NNL71Xrm6Lk2tTLR2bhUGp8E/PDmobh5WLJi3DRxFsGUSzbSjhChEnw40aHdWbHl5eXYuHEjNm7ciLq6Otx1113RGFeXw5MnOGZj0KKVuRXJw5I+drgxdtFq1xOpCAaMyx6wcV2LbxuOUYP7RXSN9cZIlyOhS4SYraYPAHtPXZGtY96AhJLKWpXLdmHOMEWG5MIcpUWPRitzmD6Pf8hS9il12G1wORNVLkGtcRDuv2kovAEJK98rUf2tX4JN4xOh0fu9mI0/1dtOz7VJWyTpxvdarmH2O3M5E7FxsRubCs8hI9mOh9zDVJa2+VMydBcd5FyXvfOl4v1NhecwY6xxkf4Pii+o+quGckWHci0TcjKduHPMIN1SQNV1TZoZ5zPGDEJqUgLe+6JSVZJHi0gFGlvMnNyjXRmj3BOJSNg1NTVh69atWL9+Pfbt24eMjAw88sgjWLx4MTIyMqI9Rg4n5mlPIgIhUstfpMeOZo2ocMaw/K4bcKSyTlH2gGQFsmVViJUOADYeOKuZsdmeMbJWwbLL9ajwNKiskLTFjk3IeGO/MhtVC1J7jQSNawkuszXrbkxLUgi7SK8He307ArNW4QpPg1y6xGYRFPXoQrnMSdwW+eyGRVNU+2eFR4WnQa6vR9qQsb8HMwV0XcmJqtehruutI526MZ8zX9krj8lsrBtNYZkH+05/o/v3fvE2Tavko9Myg7GdAe0sbRZ20UW/DlekdWWMck8lLGFXVFSE9evXY8uWLWhqasKcOXPw4Ycf4s4779Qsf8LhcMwTLctfZx4vnIc4694krrB4q4iXdpTK/Vfp1mUrKIuaXsZme8bFTlCv7S3Dxk/PYsfyaap2cVr7Kzpbo8zQFaEryEgWpx5mLah5E1LlEiHxVKcPvff1IC7F1TtLFUKRFbvtwew5rd5ZqqhHt3pnKf79wZsBaLv62TqI5BikoDEL+x6d2dpMdd8w83ug760H3S6sP1AuX/MH3S7VfcviDUia18VT36w5JrNUeBrkZB/CjDGDFAkTfklSiLoZYwYhMc6KPacuG8Z2stCubLbAspFI00saiYbngNNGWMIuJycHWVlZeP7557FgwQIMGDCgo8bF4fRKomH566zjmVlp05Mg695c1Voigog6QP1gpwvZdkTsoJZ1hVgQH83NVLnvtD5vFBMXDkadOdjYtV0a8VV67xvhciZi2ujBCmGnJYwiRU8AsHxZUav72uVs601860inKilE67odrriq2MbGJAvUMkkG9GtPfTMKjlVrusK17i2ta543IRUv7zypWUg73WFHmkZ9woJj1aptw6HgWLVC1NksAh6dlonPyjzy9V+YM0yuIxdnERSij9T0M3sfswWWAWMhT9oD/u4Hk+ANSIrrxbtLRJewhN0XX3yBm2++uaPGwuFwuhGhVtrsJLhh0RRV8VLW4sVaCiKxKoZrAdDyNbyy65RhT1e2aGw0rKxa56onUsOJuwpFuC75cF1tZpq4fz87Df/5cZniNX08UiKDJAaw14K9br/7UGkt23n8kiKRQ2JGI0FChacBs17ZKydUrNl1SuUO1UrSYBcAQPB7GDW4L45XqzuYVNY2ylnF9JhZS2l7Lae3jxqINIddlWRBjrv9SJVC2M0cn4IZYwebioX83YelqgLLj+Zm6t5LhWUeVXtAekHCu0tEl7CEHS3q9u/fj9dffx1lZWXYunUrhg4dik2bNmHEiBG4/fbboz5QDocTW4QSBOwkWFnbqFmcNJTFK5RYYYVGOEKl6GyNoqAywcjtqyW2SJ25aNPRbipy7bRq/+ltH048FF1WxKiJO5uwQb82KulDiwN6v0l25dTGvtaqA8feC1rjZS28RguAK982q95ju2/QnzOKWzMDayX8+OQVFK7dp7o/yTGfZhJnkvvYQt7HRjUryb61RBrbr5btctHZnoqeTkTJE3/+85+xcOFCLFiwAIcPH0Zzc/AGrqurw29/+1v8/e9/j+oguwJe7oTDMSbUSpsVWOkOu2Zx0vas1rWsgkRAmhEqZpMkaDpKbGmJpmgmuJg5XqjzCPfcozF+LXd5qH0Nc/YxfK0V6wVAVQKFPUY4cZ/fGTkQ245Uya+z0x349wdvMgwLaO+1CvaHbbNG6iUmFZ2tATuz/aGwAkvvUFsfabRENhvPyYq0Ck8DGlqUJdDYpBNOdIlI2P3mN7/BunXr8JOf/ATvvvuu/P5tt92G3/zmN1EbXFfCy51wOKExWmmzok1PFLRntc7uk27FZUaosGMk+9QShCRG6NaRzg4RW1rXZ+7k9A5zU0UiUM3GzBHMCvdQiR/EXR5nEfDzWWMM3eRm9udyateB2/lUrhzrpncM1kWqV+pj5ewxKDhWJbfEMxJ1ZEzsvWjUSYNFy/ocbxVlAUsvfGyioKqHKMG45RmgFJ+kniS5Tloueta9Tcb0YIgi2Zz2EZGwO3nyJKZNm6Z6PykpCbW1te0dE4fD6SGwoi3agohNXqBbcZm1pLFj1PoMGyP06vxsVQB4e9GrDdZRbqpILURaQfPthU78SHfY5Y4ELmeiQrC0+CU4+8abEuyhEkm0rqvLmRgyE9Wsy9TlTMSmR3LC6otKxtTeYuUCgKkjkpHtcsgtxuiFjxZG90ComFK98RYcq1aIunsmpuLpu8d2yP3MaSMiYZeSkoLTp09j+PDhivc/+eQTjBw5Mhrj4nA4PYyOCJKm90m7eqPttmRjhHYev4T8BdFNJGtvjFW4RPJ9FByr1gya1yMcgULe13JHk4zNuBBlONj9ReLaD3U9zAri9vRF1UrScPaNh00U8OkZj6oWIhn3ylmj8fz2E5AQ7P36ZcVV2Y1NL3xYrKKAFx+YqBDU9L5DxZTqWX+vNrQotstItnNR1wlEJOyWLl2KJ598EuvXr4cgCKiqqsJnn32GlStX4tlnn432GDkcTg/BaLKNtPo8vc+Ocls2eX2Gr6NROZ+OJdOK72oPkTRsjwbhunu1tk932BVisqq2sUPGbFaEmhXE7YnFZGM/iTuVQDJLSdcGMm627VqLX8LjuSNR09CCW0c68cz7RzUTH3wBCSv+VAy/BNW5s+eh1QZQT+xqJalwOp6IhN0zzzyDQCCAO++8Ew0NDZg2bRri4+OxcuVK/OM//mO0x8jhcHo40ao+31FC5UJtk+7raFbOF5h/o0E0x6eXdKBHONatorM1qnpz6Q47Pii+oHiPtOSKNnpWMi3xZuY+a08yBC0ePfXNmsWOX99XhpxMp2LcrEEuziLIBZS3FVfJMXbpDjv+9W9fofRiWzkW8llWhLLfiVYbQJczUTPjPdolXDjmiEjYCYKAf/mXf8EvfvELnD59GvX19Rg/fjz69u0b7fFxOJxeQKxXnx89uJ9iEhyaZJfFiKe+OSpjp2PJwumyYWa/0bq2ekkHRtuHsm7RwtPGmJwqaxtVje3nZA9ldxEV2BhHUjpESwybsdC2N/SAbF9wrNqwRRkrIF98YCJ2Hr+EjGQ7BiTGyaKQlBwibtTpYwYp7mm9a/HpGY/q7+x9pOd27uzwAk6QiIQdIS4uDuPHj4/WWDgcTi/FbNeFruLGof0VpSv2fn1F0deTZIq2J7avo0qbRHu/4VpFQ23PtgSjSXfYTfXZjQas6GjRScQJN27Q6NzJ/Z3usKvK89DHSbCKeMidgc1FbQL30WmZ8jFYAUmKMReWKUUZLdgG9Y3XHVdJZa3s5h2QaFP9nb2P9BYPHVmuh6OPaWH32GOP4f/8n/+D9PTQhTi3bNkCn8+HBQsWtGtwXQmvY8fhdB5ak1M0XIjREoZ5E1Lx0o6TcssmX0CS/5+0R2PdduEem1yD9raW0ttvLAhkLegSKjZRULQMI2IrVJ/daI2DWMbiLAIEQUCzhliPlgVUq9hvglXEztZuFwXHquW/NfkCuHlYMu7LGqopcPUEpJHFbMfxS6bHF2cRMHN8CmaNH6KZDa4n4GL93uupmBZ2gwYNwo033ojbbrsN9957L2655RakpaUhISEBV69exfHjx/HJJ5/g3XffRVpaGv7rv/6rI8fd4fA6dhxO58JOTu2dQKMZW+ZyJuIPj0zVLBdBYs1CZRKaPTbpjbv2o691PxeJaIzlSdUfCLoZJUmKivUzUogjWBQEbFzs1ixyHS0rlFax3yZfQO5T+/LOk4q/EetlOALXaKwL3C4UldfIry0A/GgrOEyPr8UvYcbYwYq2bDR6MXbkb7F87/VETAu7559/Hk888QTefPNN/L//9/9w/Phxxd/79euHu+66C//1X/+Fu+++O+oD5XA4PRctodLeCdSsMDQrknIyndi9Yjry95xWxHwtum246nORilIzn4umYI0FNhedg7c1fMwnAd8bPwT2eKtu7beOcs+zMY50PBpNtKxQ9P2tNZYWZgERSXya0Vhvcg2ATYRcQHnTIzkoqazVHF+o3197Srtwok9YMXZDhgzBv/zLv+Bf/uVfcPXqVVRUVKCxsREDBw5EZmYmBCGauVwcDqc3YNTovj0TqJmJKVyR5HImYtn0UfjL4QtyMPuGA2fxkHtYVKw6Zj4X64km4XK+RilY/udoNQIS8NfDF2S3JKEjRa1egWgtomGFol3vJFGD7pJBRBeBzU6lYcUu+1prrEVna+T9ewPBuDrWWmz0+6OP0dPuye5OxMkTAwYMwIABA6I5Fg6H0wsxmhTaM4GaEYaRTEguZyKW3DYCr+0tAxCMsdtcdA7P5I0L69h6+9ZzaRF6WkD6wpxh2H60La6QhNgRtyQpgFzhaUD+ntMdJiC6IoPT5Qx2uiCuT/pemXVjquK6fHrGo+kK1eqXTBfqpsUvLcbY+wiAZku7UJnM5Jg96Z7s7rQrK5bD4XDaS0cKlVDCMNJjO5hMwbc+KVdZ7SIRpRWeBizaUIQmX0DTYkX225MC0knW66bCc/DUN6OQivsiaCUa2CyCoVUtXDqyQLQepP/wnOyhKrfviIHK73X04GA5MdYaxy5OPii+oCl+taydbG9aukah0fmzx6ysbVR0gNHqYMHpPLiw43A4XUpXCpVIj80WWvX6pahYj+jemqzFqieT5rDjf0svK4Qb7ZZkEw0sQvCaL954MKruWKm1/60UpT64RvGAbP9h0kmCfO7/7SlTbP9lRS1maogzdnEyJ3sothVXqRYrWtZp2iJX4WkAOWujs6/wNMBT3yyLYIsowCYK8n56Uvxnd4ULOw6H0+V0ZeZcJMdm3XS2MHqYthejODM9IREr9QD1YIXb/CkZirZVtHihe55G0x0bbh/cUISKB2Q7aqz56BRWO7JkK1yAUVcOu01XnLGLE63FSijrdNHZGjlutFmnQLayBIoIAPAHJDy5pRhD+iegsraRx9rFAFzYcTgcTpiwQmPTkqlRmcDMtGDSiwus8DRg1it7ZVcaceNGO+GgI0QiKzrYXqS0WEl32BUxZLEazxUqfpPtqFFUXoPZa/fJVjirCNDNJowK/rKLE63FSijrtJnkEWUJFGUnjA+KL2DZ9FG64pF2O3d0TcLeDhd2HA6HEyYd5T42E8CvN7nruXGjmbEYjkgMRwCywk0rRosWKx1x7cPtgxuKUBaynEwnXp2fjbW7v0b5N9cBKK1wL8/LxlN/KkZAanNLt/e+M7JO06VOyGtWgBnFNJJkH63xsW7nZ+8Zh1OX67nI6yBMC7v//u//jugA2dnZmDRpUkSf5XA4nFilI9zHZpI5wp3co5mcEk5twHCthKFitMyU8GgPLmd4fXDN7C9UuZBn3j+qcEGT74f8LSAF3fxvL3ZHJVOcPX6456qXKfx4bqYs0LTGx7qdn99+AoA6tpATHUwLuw0bNkR0gMWLF3Nhx+FwOCYwK9q0Js+8CalYs+sUmn0BWMU2N240rYtmRWK0CzR3VlHmaAtGo/0ZxRVuPVSp6J8b7dIrWteTvn/idSyWWkWV7TYLHnS7FPtm7zXW7UzzQfEFLuyijGlh9/HHH3fkOGIO3iuWw+F0BZGKC5czEb+cPQa/2X4CvgAUGaPREixmRWJ7CjSTlmJ0yY2eWADXKK6wo2sV6iVh7AphsWRd5mzLNT0BTpe0+fBoNehZdU720JhP7ulu8Bg7HXivWA6H052yTAvLPLKLC+g4AWRGJLbHSqhVciOcrhDdBaNr1F4ra6j7U+96mv1uzVgh2fsvJ9OJkspaRdHlh9wZSHPYeYmUKBOWsPvJT36C/Px89OvXDwBQUlKC8ePHw2azhfgkh8PhdC/0rA+x2quVjWOyCOjSjNFIrIR6JTe6oitEZ2B0jSK1spq5P8O9nmYXOOFaGoc5+/RIa2xXI4az8TvvvIPGxrYb4I477sD589p+cw6Hw+nOaE04Ru93NXOyle2m1vwwu9tMkIVlHjz95yOwiYLc3ooWBkQwsO9z1Ji5P8O5nkQornyvBLPX7kOFp0F+f+Yre7HyvRLMfGUvKjwNcDmDLfHmT8nAhkVTNONA461B2WEVBWSlO3qkNbarCctix1bjjlZ1bg6Hw4k19KwPsdqrlcQxdbdaYWwpjFfnZ8MbkBTWoY4qL9MTiXZmtZ5FbXPROYV1teBYNfImpMo1BrcVV2lmNf/+B5OwcmuJ3Dlk+V03KI7XU6yxXQmPseNwOBwN9Ca/WBYZOZlOhaCLxVhAlk2F5xSvdx6/hPwFN6u264gSJz2R9mRWa6ElFCs8DXjrk3LVtmaymtnOIQBicqHUnQlb2B0/fhwXL14EELTYlZaWor6+XrENL2/C4XB6AnqTX3cQGbEaCwgoBWdGstL1xr7mhE80708tobj1UKUszgDA1upWLamslbOa9frUev2SLO7sNgvyJqQib0JqzC9AuhNhC7s777xT4YL9h3/4BwCAIAiQJAmCIPASIRwOp0cTiSWss61nsRqUzgrODYumYP0n5WjxS4izCHjIPaxLx6ZXyqM3wwpFtqXe6rlZsgs23ipiVd5YuVMGuz35ztnry69z9AhL2JWXq02vHA6HE+tEU1QZZcsadRnobOtZrMYCsoKzsrYRH62Y3uUWG/o7IsSapTNWYK149Hfa7AvA2Tc+quVbOOERlrAbNqzrVlIcDocTCdEWVXpZh0bH6ArrWaxOpt1BcBJiydLZUUS66GGteGYSNnrydYwlTAu7I0eOmN4pj7HjcDixQrRFlZYwCXWMjhAzZibkWJxMWcEJGIvi9mJWuOi1y4oV4dkRRGvRE6uLiN6KaWGXnZ2tiKMzgsfYcTicWCHaokpvEjM6RrQnvlhOjDADLTjpvqjRtpCFc51CtcvqiURz0ROLi4jeimlhR8fXHT58GCtXrsQvfvELfOc73wEAfPbZZ3j55Zfx+9//Pvqj5HA4nAjpCGsCO4mZOUY0J75YSoxob/xiR7pmw71O3V2chPtdxKpbnNM+TAs7Or5u3rx5+Pd//3d873vfk9+bNGkSMjIy8Oyzz+L73/9+VAfJ4XA47aEzJuzOFAWxMiFHw3LYkW68WLlOHU1hmQebCs/hoxOX0NxaasTMdxErLtTuUG+xOxFRgeKjR49ixIgRqvdHjBiB48ePt3tQ0aS2thZ33XUXfD4ffD4fnnzySSxdurSrh8XhcDgRQ1o3kS4TnTUZshNwtCyHZkRxJJN/rAiXjoTu3EEI57voaitldw8riEUiEnbjxo3DCy+8gDfffBNxcXEAgJaWFrzwwgsYN25cVAfYXvr164d9+/YhMTER169fx4QJE/DAAw/A6ewe7XY4HA6HpcLTgEUbitDkC+Cvhy9g51O5HT4Zak3AnWURa8/k39XCpaP5oPiC6r3uZJ2MpbCCnkJEwm7dunW49957kZ6eLmfAHjlyBIIg4G9/+1tUB9heLBYLEhODN0lzczMkSeI9bjkcTrem4Fg1mlr7dDa19ul8NDdTtV00XVxaE/DcyemdYhHr6ZN/e76nOdlDseXgefn147mZeNDt6jbXp7e4yzuTiISd2+3GmTNn8M4776C0tBQAMH/+fDz00EPo06dPWPvat28fXnrpJRw6dAjV1dX44IMPVDF6+fn5eOmll3Dx4kVkZWXhP/7jP+B2u00fo7a2Frm5ufj666/x0ksvYeDAgWGNkcPhcGi6Q0xQtF1cehNwZ1jEevLk397vKSfTiXeX5shuebpXcHegN7jLO5uIhB0A9OnTBz/72c/aPYDr168jKysLS5YswQMPPKD6+5YtW7BixQqsW7cOU6dOxdq1azF79mycPHkSgwcPBhAsxeLz+VSf3blzJ9LS0uBwOFBSUoJLly7hgQcewNy5czFkyJB2j53D4fQ+YiEmKCvdAasowBeQEG8VkTchVbVNtK1cXTkB9+TJPxrfU06ms9sJOpqe7i7vbCIWdtEiLy8PeXl5un9fs2YNli5disWLFwMIuoG3b9+O9evX45lnngEAFBcXmzrWkCFDkJWVhf3792Pu3Lma2zQ3N6O5uVl+fe3aNZNnwuFwegNd7Ras8DRg8caD8AUkWEQBv//BJM3jd4SVqysn4EiPHevW1Z5sjeR0DaaF3YgRI0IWJtZi+fLl+Kd/+qewPwcEEzIOHTqEVatWye+Jooi77roLn332mal9XLp0CYmJiejXrx/q6uqwb98+PP7447rbv/DCC3juueciGi+Hw+n5dPVETAtLf0DCyq0luMk1QCVaerKVyyyxYF0NBf+eONHGtLDbuHFjRAcYPnx4RJ8DgG+++QZ+v1/lNh0yZIgc2xeKc+fO4Wc/+5mcNPGP//iPmDhxou72q1atwooVK+TX165dQ0ZGRmQnwOFwehxdPRG7hyfDZhHg9QeTwLx+SWE1ZC1UvVkodLV11Sxd8T3FuiWTEzmmhV1ubm5HjqPDcLvdpl21ABAfH4/4+PiOGxCHw+n2dLVLctOSqVi4/nN4/ZLCashaqDYsmtIrWmPpke6wG77urXSEJZMLxdihy2PsjBg4cCAsFgsuXbqkeP/SpUtISUnp0GPn5+cjPz+f973lcDgxR06mE7tXTFdNpKyFihZ/seiG7GgqaxsNX/dWomHJpIUcgJh3efcmxK4egBFxcXGYPHkydu/eLb8XCASwe/duuUdtR7Fs2TIcP34cBw8e7NDjcDgcTiS4nImYOzldMYGS+D8ACnctmbx7G/T14IkJbbT3uhCL38r3SjB77T4UHKtWCMX8PadR4WmI+rg55uhyi119fT1Onz4tvy4vL0dxcTGSk5PhcrmwYsUKPPzww7jlllvgdruxdu1aXL9+Xc6S5XA4HE4QutXYrSOdeOb9o70627Kr4yG7ilBu0fZclwpPA/L3nFYIOQByQhEAbDl4HtuKq7jlrovocmH3xRdfYMaMGfJrkrjw8MMPY+PGjZg/fz6uXLmCX/3qV7h48SKys7Px4Ycf8jp0HA6Hw0BKoTR6/dhWXNXrY+yA3lcjzWz8XCTXhd43wW6zIG9CKrLSHVjz0SkUlQctw3ouXh6L1/F0ubCbPn16yBZfTzzxBJ544olOGlEQHmPH4XC6G2zsVGVtI+ZOTu/iUXE6k47MBKb3DQDzp2Rg2fRRACAvKAhaVuLuUH6mJxDTMXZdCY+x43A43Q0eU8YxugcqPA3Yeqgy4vg3dt/Lpo+Cy5moKfi0RJuW6OREny632HE4HA4nOnR0TBl3o8U+evdANKxlevtmi3YTwcfCy890DlzYcTgcTg+io2LKeqMbLRaFrJkxad0DrLWs4Fg1nH3jwz43rX2HWlCQMXvqmxXv8/IzHQMXdjrwGDsOh8Npo7t0cYgWFZ4GzHxlL5p9AcRbRex6KrfLz9esuNYSf7RVLcEqYs2uU2j2BTpcpNNjjrcqo7+4xa5j4DF2OvAYOw6Hw2mjt8XvFRyrRrMvAABo9gVQcKy6i0dkLkaNrTFH4umIVW31vCw8NXO0fG7hxroVlnnw9J+PoLDME/KY7JjJMQkllbWmj8sxDxd2HA6H081obxB8JNDCoDe4YWsbvIavuwIz4tpI/JGi1nkTUiMS6YVlHvzojUJsOXgeP3qjUBZ3Rsekx5xgFRFnEeS/vbzzJC9k3AFwVyyHw+F0I7oy1k0rvioW49CigQTJ8HVXYCY5hk1kSHfYsfVQpWJ7tpA1EWKhvr9NhedUr3Mynapj0kKRHfPmonNYt/cMAKDFL6HgWDUezc1s13XhKOHCTgceY8fhcGKRULFunSm0enJCxYDEOMPXXUWo5BhaSKU77HJ9Ofr7oQtZbzl4HkDQcheqoLUrOVHzdSihWFXbiI9LL6Pscj2+bfQp9hELltCeBhd2OixbtgzLli3DtWvXkJSU1NXD4XA4HABqiwxbp6wzhVZPTqjIm5CKl3eeRItfQpxFQN6E1K4ekmmI+Nt6qFLz+2HrzpG/L1z/Obx+SffeedDtwvoD5XJCyYNuF4DgfffwhiI0+wIKobhj+TRU1TbiR28UyvsQBcUu4Ui0Rfv0ez1c2HE4HE43wsgd19lCy0hkdneqahvR4g+6X1v8EqpqG2OiLqCZz5Bt0h12Tbcs/T7BJgrwtp6v3r3jcibi9z+YhHeKKrDA7ZL/TieaEMg+Pi69rHg/IAFWAfBJQLxV7FaCubvAhR2Hw+F0M/TccZ1dALajCyJ3JWs/OqV6/W7md6Ky7wpPAwqOVeOVXafQFEbJETMWWbZMy9uL3aisbVS5ZTcsmoKSylrZKikIweQGMh4tkV5Y5sGTW4oBAEXlNRjSPwE5mU7NsZJ9nL78repvP502EqMG92vXPdNTYzujARd2HA6H00NgC752RgHYjiqI3NVc+bbZ8HWk0OKMYNa6asYiy5ZpKamsxaO5mSq3bGVtI5x94xVWycdyR+BqgxdzsodqjuWD4guq1zmZTmSlOxTvP56biQdbLXrjUvor/mYTBTzkHtaue6Ynx3ZGA17uRIf8/HyMHz8eU6ZM6eqhcDgcjim6otZcV5Re6Qymjkw2fB0pWvFtRt8VfX3NfL9sMgL5PHG/0p+l9xdvFbHxwFlsOXgeizce1Pw+52QP1XzNLiAyB/eVhdanZzyKv826MUWV7BPu/cN7zhrDLXY68OQJDofT3ehs12hPtpwk94kzfB0pdFxivFXEipmjkTchVbeDBHt9Q32/bDLCloMVeKeoAglWERtb3bJEEBadrZFdskcq67D9aLAIs541MM1hR5xFkBNK0lpd/e7hybIbN8EqKgTnnOyhckIFACzMGWZ4fmbun54c2xkNuLDjcDicHkRHukbZuKaenBVLixHyeuXsse3eL10aZE72UN0YNUDbMjV3crr8N7I/Gjqb19KapAAATZRblhZUcRYBkgR4A211+mhxVljmkcdaySSU0N83+TRb7S8n04l3l+Zonm+k909Pju2MBlzYcTgcDickWtaVnmw5aWrxG76OlMIyj1xWZFtxlaGVSuv6mrFyCYIAIJgQoVVXmRZURKjRkHdIpwkgKGxfnZ+t+X0Xna1RxPXl7zmNZdNHyePKyXQqBJ1e1m44909Pje2MBlzYcTgcDicketajnmo58foDhq8jocLTIIs6IHgdWRFEo2WZ0qtNR6BFli8AWEUBvoCkKC0SKlu62RfQLFWy8/glze/bxhSn23LwvK5oZYVpqKLInPDhwo7D4XA4IdErpdJTLSd94q1oohIR+sS3f7osOlsjizqCkQgC1Nc3lJWU/buWcCqprDUcp16pkoxku+b3vfP4JdU+9Fyr7AKhpLIWzr7xhuPhhAcXdhwOh9OD6Kj6Xl1RSqWrqPA0wGJRWqEGRCF5ghZdFgEgGi+a8WXtjT+bPyVDtiA+5B6G9Z+Uy8kSD7mHaX7GIgia77OWPEB5DRKsItbsOoXmMGr5AW11AAHoJp70Zriw04H3iuVwON2NjnRz9eR4OhqtOnNAmwhrD0R0bS46h5MXv8WnZR40t2aSeuqbUeFpMC3uQvWLNfo7nWBBY7dZFG5hlzMRH62YrhCJWgsHv6R9cT4948H9NwVLotBxdXNuSvv/27v34CiuO1/g33lII8k8hIYAEpKMAcs2YEsO1sPJxkAuj9JN2dd47fUmu1kQuVRShVNrdL1Z2FsV19bdLfbGGBSvVUsqsZGvr3fNNVm8qaW05hEDiTGWjCMlWlvIvCyEhLAHC6En0szcP0Q33T3dPd0zPdMzPd9PVcrV8+g+3dOkf/qdc34H/9k7iKVFM/DPLVOTVIwGt9ICzACw+3AXDm1dweBOgoGdBpY7IaJ0o+zmEsZz5XjdcT/8MmUmolqdOQC4f/4MlU+b1zswij3Hz4vbf1ZViv0f9WBHcycajnwakbVSC6RizcpKv3ekfqWY9SovzhdXp1DOtpUGiVoTN9YumSuWSpES6tz92+8uY+v/a0NIEf+191wXy6cY/WNBOoYQmJrt66TZ2FZgYEdE5BDSrJpXsvbn2GQIzR19+P6KRXHt36nj6aSk11CqyKLl2ZSrN3z6+ZAYqCizVtIZtEJwDiCm2m9q2Vz/NB+y3C4caLuMry30y5YcE/YrDQa1ypNcGRyTHatkVi6eW3sPahb5ZcuQqVmzZB5W3TvHcJBataAAPq9bvGbKunnEwI6IyDGkWbWzV2/IMkNkjHANf7S/Hacu3F7RYHB0QudbxikL9t79lWlovzQgjjMrzs8VV4r481c+wGRIHpz7p/lM1X4T6tAV5GXLs7mvfCCrXSdtk3Q1h7W7j4uFh5vqqlQLEStXu7j05Si2/esf8GDpLLx+6jPd6/Hdmjt1a/kplfrz8FpdFV4/9RlKCnLjXp7MiRjYERE5kHKNTuV6nqSt1J8H5bD/C58PW7JvoWDv66c+w5FP+sVVIbbX3ovy4nxs3NuCsckQsm6VKVEqzs9FlmcqGxut+1Jahw6AmOkSvq8kTOgQ9tvc0YexW5mxsckQjnVdVS1ErFztArgdHObnRr732AOFCIbNB3XAVOZRmlnUmtCRyRjYERE5hLS7LUsxq9PJs1gTQdkVqzbuLlY1i/zoGRgVx6WNTYZw/othfDlyUwykJkJheN1TtegAINvjQnlxPuqaWjERDCPL48LejZWq2SohS3dV0UW6+r65WHXvHM1s7q4/qcBEKKzZLXrp2qisELGQLaxdVoid73RiQlHq7/rITdX9TMvx4uznw+hXtM8IJ692YhUGdkREDiF96AkPfyOZHYqUk+XR3Y6XdH1VYKorVBmM//dvLMSsvKkyK7XLCiN+32NdVyMyXsosnZSQIesOjGDvexensnduYO3SQtXsWe2yQrEcic/rxndr7sSRT/rFbeGe6h0YjQjqAOBX7b34x29/NSLoE2bCttzq6hZmzhqRKbOz48HAjogozWjNilQ+9P7hiftx8nwA6yvmM6thQndgBLnZ8kDuwdJZlh9H2Rk6EQzLVopQGz8mzCIFgD3Hz2Nl2RxZQKacnLHqnq9gzowc2Tqtwji1aOvVlvrzcHjrCvFe06I1ju7OgjtQ6s/Dc+vuxY7mTtXPvNHSbSqwy5TZ2fFgYKeBdeyIKBXprRUqfegV5+eKY5GirUlKt6nVsfN53fh2Vamlx1GW7RC8+FS5ZndoqT8Pa5bMk5UWOdB2WRaYKSdnfP+RRRGBm3Sc2tu/u4z6NWWGCv02d/TJumKFmdYlBeozhpfeKhGjN76zasEs7D/dYypIy4TZ2fFw292AVLVlyxZ8/PHHaG1ttbspREQitTFGatp7Bgx9juSUdeyq7irAa3VVlgcSQnZVaSIUxpPLi2W14/af7kF3YATAVHeqlFArTlCUn4usW0/2LDfQPziGv/7l73HqXED8jPQcxydD2NHciTW7j4vHEAhB7nNvtWNdw4mI978cuQkA+E7VnchWdCNL16Y91iVfc1bqZ8fP47m32rFW5fgUG2bsiIjSiN4YI2m2SfmgjbbwO01R1rFruXANdU2tlmU8pcth7d1YieNdn+Ofjp8T35f+TmrZ2aL8XHF2q8/rjqiv19zRJ45nmwhBrCG3r/US3txcg5pFftVafeOTIfxzy2dYPGe6mD1T/hExoCj5Ioz/k65QUZyfK1vtpDswgp+fkE/U8LhdCIbC8LhdYskVM7UWE7VsnlMwsCMiSiN6Y4ykD2LlclGJmhXrtIdsqT8PezdWYteRLnFwv1WzL5XLYeV43di6pkz2Genv1NzRp5p1VZuZaoTQbSuc47d/fko2zu8Xv7mAyVBYDCKVfwysXTJXNnlCyMhJFeXnyrp+mzv6ZMuxuQEEbwVzQZVyLtFIr6HP68ZhLicWgYEdEVGa0RpjJM3ESAfZA4nJ2OmN94tnn3YGitLxZwKfRasbqC2HBUA1A9sdGMHuw12qbdCbFSqdyaqsVzcrL0tcj7ZnYDRi8oZQN0+r634iFJZNpoi21BgQWby4eFYeur+83eXqdgGhMDQDRSWtcX50GwM7IiKHEDIxwkoD0i6+RGTsrK4plgqBotpaseOTIfQOjMbdFrXgurw4XzUD23Lxmhj4AUDd1xeI7xmdFerC1Dg7oWt2z/HzeO3kZ2I2zg1AOn1Dbd1WI6VF9O4DZfHiywPycXT/87/eh66rQzHP3FYGjsTAjojIMaTZJp/XLdZJS1S9L6triqVCoKi1VmzDkS68uejhmNsCqAfXwmutt8anCe1Trona9N5FQ8tnSbOCyu54YOq6Nnf0oeHIp1DOyf364tn41gNFsoBRGkQC6uvUKgNW6bZyRmwwDPxgxUJ8OTKBry30469/+XuMTYbwb7+7jEMGulVrlxXixUNduBmcav2r713At6tK2R0rwcCOiMghlLMdhQdoourYWV1TLBUCReGcHv3H3+D62KT4encg/iXFlAGQz+tGltslFhSWTnAo9eehfk2ZWP9t7NZ4OkC+fqsyGJJeQ2lgKBBm4qqtpHHPvOl4cnmx7DVpt//+0z2q11MZsEq323sGZO953RAD1J8dPydbssxot2oofPuczI4zzAQsd0JE5BDSEho+rxtN713EvtZLqGtqTVgpiVJ/nqw8R7z7eufZR7DzqXJLumGl18NMoFjqz8NMxRqnXk/8j0tlAPS1RX5ZdzkgL/arzHYV5+dGrN8qzLAVSK9hvWJiRtVdBdi7sRK1ywojSq1kuYGVZXNkpVWUtK6nuet8e7a2UC5Fa1tNy8VrkMaqWR4XV59QYMaOiMghpBm0wNC4mO1JpzU1rSw+G09G8Y/uni0ufSVsx0uZsXv3zOcRn5mZ6xUL9uplwvQI11CYgCEEgtLSLXs3VuLPfnFKnLEaDAEb9rZg/FbX/TvPPoKf/+YcfvlRDypK8vEPT5RrXk+96zy1juwZsazJZCiMxmNnsWXlYmMXTUG6FFuWx4XXN1WnxX2dTMzYERE5hHSigDQrk8lrasaaUXysfL7udiyU3ZJq3vrwklgQOMsdWYuwdlkhfN6pR7fWTFKhqHGvysxXIchv7xmQlSEJ4XYZldGJILb9azteP9WNkZshnDx3DatePCbOqNW7nr0Do7KsX6k/DzufKofHdftc9rVewrqGE3BBfn5CXbxohGa7Xa6IOn7EjB0RkSOoTRQQZshyrVjz/vmD7ohtrTVVrSTMYB2dCOLQx/2y93oGRlGzyK9ackQgvQ+U5U4Exfm5CAyNa7YhN8uD1gvycifBUFgz66u2DJtwDwLAj375ewTD8naMTgSRn5clZt9yDJY7kU4O4fg6dczYaWhsbMSSJUtQWVlpd1OIiKJSThRo7uhDXVNrXGPslMtZZZIjn1zR3Y5F7bJCcbkvLcKKIT6vG0c+6Ze9biTrKr0P1II6YCpAVFu/NcsNbK+9F+88+4jqmEIj5U4EQmZQa03cLI8L5cX5OLR1BXY+VW5oRuxUG12628TAThPXiiWidKIcwA4gYgajGdHWCXW68YmQ7nYsSv15eG7dvarvVd1VgDc31+BI/Upx4oM0IBISXt2BEazdfVxzfVXpfeBRCXqEbnm18Xrf+8ZC+Kf5AAB52fLJFdN9Hs3ASxj3pnYctdp9LtdU0FnX1Ipek/UVlVlM5TaxK5aIyBGUA9gBoOHIpzGXDrG6ply6WfiVO/Dp58OybSvULisUfxdBjteN/3LvHBTdqmMnTHzYeeiMmHWbuNUVGhga1y0RIr0Pro/cxP86+In43g9WLJTVwlOuTvLKb85jIjSVLQwqsmw3xoPiGDs1wl6yPS78j7X3oHZZobjebMRnb314dCKI777yASZCYdXSLWpKCnJ1t4kZOyIix5AObBdWoXi6sgR7N1aaDspiLRWSzqRdz3f45HkP5XaspOVIfvp0Bb51fyFC4TB2NHdiXcMJnDoXwP7TPQCA1zdVI+tW16zwGxgpEVLqz0PVggLsPDS1JJnHBfz06Qpsq71PNpP1e3+0UPY9ISk5PhnCJCIpS6sIlEWR/dN8skLLwn3kdgFeSRLR63aJs2XVSreo+U7VnWJ3dbbHhe9U3Rn1O5mGGTsiIgeSrkLxq7Ze03XhrC4+nOqUk09m5cofj9eGo9dYM6p3YBQHf9+L33z6hbg+KzCVwRJKkGR7XDhSvxKvb6qOaQKMNOMaDEMMoATdgRG88tvzlpyP3soTWiV4AOAbd89WLfmip9SfhyP1Kw0FgZmKgR0RkQNZ0ZVqZU25VKe8XsrAzqqM3alzAXGlCSWPC2IJkpvBMPYcP4sDv+uVBefKEiHKbYFyFY/i/FyxPp7QRapcckyYRSvMVFXSmrUard6etHtZOjzg+48swslzAYxPhjRLt6jpHRgVu6kbjnxqSTFrJ2FgR0TkQFYvz6VFWjsvnR+uyuuVpZgVOqES6MTiZyfOqb7+gxULcebKDVkG6z97ByOC87CiMp1yWyBkypo7+jAwMhFRfFi5Fm2O142muir0DIyiakEBHnnhXdV9qol2r0nvEWUWWK90i5ruwAi+++oH4tjDTBz/GQ0DOyIiC6VKoJOMrlS12nnp+oCVXq/i/Fxs/j8fyt6/Pj4R9zG6AyM40aXe9bh4znSsLJsjC+w2ff0u/PUvfy/WeataUBBRfy5aUV/lRA0hEHpyeTEOb12BPcfP4j97B7Hp63fFXKdP715Tu0ek69GazQq3XLwmK+PCJcUiMbAjIrJIqgU6ie5KddrMWaHtymK7ADDnDl/c+2+5eA1qpeWELFepPw9vbq4Rx9QV5ecidGsKqfDf2mWF2HW4y1D3pVp9OWlGrXdgVFw27S/3tWHujBwxuPO6gElJW71RysVp3WvR7hGzfwhJs4NcUkwdAzsiIos4LdCJJlndvVYxEkSoBUMAcFVnpQajpNdLkOVxyWYt1yzyi8HVz46fE8fB3QyGxdImr9VVGZpQIT1ejteNrWvKxDIkAPD6qc9kn3/91GfisXOzPLhxU97OWOhNrBBq8gkZSSPlTjJtUk8sGNgREVkk3QKdeKXTQ9ZoNlUt+AJiD2ykhOvVeOws9rVOZcomgmHVYsFaugMj2Li3BWOTIfzrRz14fVO1ZheqsntZeRy9mnA+r1sW2I1OhnHqXMB0d63exIrmjj7dmnxaMmlSTyxYx46IyCLSGmV2d8NaTWt5sWiLwqcKtWyqGuE3zFYEctdHp8bYxbvMWqk/D19bKA+OtJbFql1WCN+tFR2EbldpMDQRDOPPX/kgalsCQ+PYsLclYhWRlWVzICwY4XVPbQuujUSOKVRm+IzIxHqIdmPGjojIQk7MJqTa2MFYmMmmlvrzEFYsWn9zMmTJdegOjOCNlm7Za4c+7sd/e3C+oa5iZUHiyVsrUqh9XtpegTSorWtqhTDZdzI0tS2ck9oc4FhWedDL6tYuK8SLh87gZjCMbI/LcLmTVJmglKoY2BERJYEdD6NT5wLiWKxYZzwCyR07mKjrFK3bWHlcr8eNidDt8Mbrccd9HdQCLQA4/PEVnDoXEAtK52Z5sHdjJQ60XRbLkYxPhtBy8VrELFiv+/asUOU56E2eUHtvdCKIxmNnsWXlYtX2x7rKg94fO26XC0D41n+j6w6MYM3u4+LkkcMGxuVlmowJ7EZGRnDffffhqaeews6dO+1uDhGlsFiCC73vWJ3xMtI+aSHcfa2X8ObmmpiDu2TWxEtkZlArwFA77tT53g7shPMWar/5bpUf0TsX5W+kNTHjZjCMXUe6ZEGjtFYbMLUSxbudV7F2yVyxgLB0VqjaOUh/t2yPG/cWTsf3vn4XSv156NUY17ev9RJ+1daref2s1HLxmmyMnZFAubmjTxbsGh2Xl0kyJrD7+7//e9TU1NjdDCJKcbEEF9G+ozW+K5bMlNH2HWi7HLGdiDplVlJep2Q9tNV+n2m+LNk4s2m+LMP70/qNpIGWz+uGCxADm5YLt8f8ZbldsqCu5q4CnLpwDQf/0IeDf+jDT5+uwEQorBk0SmvVvfPsI/iXlm780/Fz+H3PdbGsiXJSQ9VdBWIb1IJPM+euvE+0/hDJtMlGyZIRkyc+/fRTdHZ2ora21u6mEFGKMzrI3sx3lAPIi/Nzsa7hRMRgdivbpxygr9w2K9ZJEmYmG1QtKECO9/ZjadfhrpgnKZihNsB/9h3yLs/Zd2SrZovUaP1G0sk1h7euQFNdFarukgczT1eW4HvfuEv2Wlf/Ddn2yfOBiN9Ca5JCqT8P1xTj8g60XY74/Lolc/UukSFCQCu9r9VeE8Qy2ah2WaF4j+SYWIYsk9ge2J04cQKPPvooioqK4HK58Pbbb0d8prGxEQsWLEBOTg6qq6vR0tJi6hjPPfccduzYYVGLicjJYpnFF+07ygdYz8BoRGbK6vZdGRzT3TYj1pmgeg91tf2W+vOwdU2Z+L4wrsyKtuhRCzD6bsivV9+NsYiJC8ptgd5vJATIwNRkBWmmLjfLgy0rF+M7VXeKs2GByBmq6yvmGzoHrc8L2xu+die+dX8h9m6sRNfVIdVzMUL4TZo7+iICWrUsrPI3N/MHQ6k/D4e2rsDOp8oN1b3LRLZ3xQ4PD6O8vBybNm3CE088EfH+vn37UF9fjz179qC6uhoNDQ1Yt24dzpw5gzlzpqZmV1RUYHJyMuK7hw4dQmtrK8rKylBWVoaTJ08m/HyIKL3F0u1o5DvK8V3SdTp3H+6SFY61un3xUHYr7t1YKa4nGu3YepMNtLory4vzZftQFrRN1Bg85e9TkJuFvutjsm3lxAWt5byM/EbK8XZPV5Zgy8rF4mcPb12BH/7LR2jvuS5+5q7Zd2DH+vtNdal3B0bQMzCKnz5dgZPnA+KKFsIEBAA4+kk//vcfPyDW1tPbl974UZ/XLY7/kwa0t8f5ufDCO2cwGQrH9fs5cea5lWwP7Gpra3W7SHft2oXNmzejrq4OALBnzx4cPHgQr776KrZt2wYAaGtr0/z+qVOn8Oabb+Ktt97C0NAQJiYmMGPGDPz4xz9W/fz4+DjGx29XGB8cHIzhrIgoncXy4DDznVJ/HurXlGFHcycA7YHjWmOTjByrdlkhdh/uEqv6x9plpQzOhEH9ag9mZXv1xlBpBX16BW2TOTv38vWxiG0zy3lF+42U10Ya1Ak+6ZM/f/SCOrWgF4BqILz/dI8Y1AFT999EKCwuZ/a1hX785b62iGOoXW/pbzI+GcL22nvhn+aT3bPvPPsImjv6sPPQVFAHZMbKLHaxPbDTc/PmTZw+fRrbt28XX3O73Vi9ejXef/99Q/vYsWOH2A3b1NSEjo4OzaBO+Pzf/u3fxtdwIqIoapcVigu0q3Wpaj2ojWbqhC6reDN7yrU5hUH9RjJwAPDs6rvF8zUycF4vGEzmYHtlHbtwOIxSfx4OW3BNgchVIaTj8ICp3/mmZALFD1Ys1M3UaY3rUwuEpbN7gamxasL5FEnaoqR2vYvzc8X7IjfLo5p5LvXnwT/NJ5sQkuVxJfT3y2QpHdh98cUXCAaDmDtXPqhz7ty56OzsTMgxt2/fjvr6enF7cHAQJSUlCTkWEWWuaN11amOTpIGgkW4sK7qslAGIsJxVjqLcR7T2KrNbyv0K4wxrlxVqXpdEdkMrs41Li2bg5PnbAc7SohliG6zs/gXUs2rKIDZaDTnljNvA0DjmzciRfUbo1hYCVOk1V5ZM0WuvoDswgrqmVkwEwxFr3uq1T1qmhayX0oGd1TZu3Bj1Mz6fDz6fL/GNIaKMpxckKB/sgHr2xSp6tfGEdnYHRiDkXMKK7yvbOzAyEbW9wrZ0vNfuw104tHWFOMFAKRHjq9SyjSHFCSq3raLVvWw2iBU+39zRh92Hu7CjuTNifVtpt3apPy+ilIxWnT0jbY+25m2yx4ZmspQO7GbPng2Px4P+/n7Z6/39/Zg3b15Cj93Y2IjGxkYEg7HX8yEiZ0jkqhF64+ikD0IAul238bbByKSElovXIlZCED6nzMBt2Hu7eoEyu6e1T8B4oVorqQVXudke2WeU21bR6142G8QKXZ7StWSl3aRqv4H0/pN2q8bbdq32MaBLvJQO7LKzs7F8+XIcPXoUjz/+OAAgFArh6NGjeOaZZxJ67C1btmDLli0YHBzEzJkzE3osIkpdiZyJaWQcnfRYicp4GJ2UEO1BLrRXOTh/65oy3cyk2nivZFI7r+sjN/Humc/Fz/zR4tkJObbVmSzluUhnMQPA/tM94nGUM1pdkAeDyWg71321nu2B3dDQEM6ePStuX7hwAW1tbSgoKEBpaSnq6+uxYcMGPPTQQ6iqqkJDQwOGh4fFWbJERImUyJmYZsfRSbtEpQ/oeBnNvBh9kCv3pzV7VHio/+SPH8Chj/tRWpCHb1eVJv0Br3ZeH3UPyD7zUfcAvmfxcaVBjVbXs1lav5HaHxHKGa2CiWAYHhcgje1ys9TL3saThUv0EnKZyvbA7sMPP8SqVavEbWHiwoYNG9DU1ISnn34an3/+OX784x/jypUrqKiowH/8x39ETKggIkqERM7EjGUcXSIehmYyL0Ye5Eb2pzZQPzfLg29XlcZ+InFQntfMXPnjUbkdr2TW5APU/0DRW+JMmbALhUJQE0/GzcgfTVr7Z6ZPm+2B3cqVKyOmlSs988wzCe96VeIYOyICEjvoO5ZxdGYziEYfgFaPf4q2P7WB+qlU2+xO/x262/FKRk0+6W+v9geK2v3XeOysaqHi8WBkgeJ4g1Np8Wm1ba39M9Onz/bALlVxjB0RCZI16NtIEGkmg5jKD0DpeQiEMh1qKxwkm5lixLFQBjFnr96w9LzVfnu1e0t5b29ZuRi/autVnR2rDD7jDU71ilHr7T+ZharTEQM7IiKbaAVe0TJresGfNEtj5wMwWqZQOYu2vWdALNPRcOTTlApCE0EZxOw5fh6vnfws6moeUnrvqf32RtZkFX6XR154N+I95R8RZocpmFmZRG//ySxUnY4Y2BER2STWwEsr+FNb19WOB6DRTKH0PHoGRsXxXamQhdEr7WIFtYylMIFGWJILgGzWav2aMtViwmrXOJ7gp9SfBzcA6ag6FyILFJsZpqDVXr3va73Pmnj6GNhp4Bg7Iko0qzMPykCxZ2DUlgdgtIBVLdOUalkYZVdplttl6UxkIThp7uiTdfkK6/vmZnnw7Oq7ZbNWpdnMaNfYbPDTHRiRrUSh5Ip45fZxjGQS9QoxxzL2kzXxtDGw08AxdkSUaImuYaZWCy8Z9II0ve7nVMrCtPcMyLaf298uFvq1qpu41D+1+kN5cT4OtF3GrLws7Dl+HsDt2dFqWT3ljFatQNjob98dGMHa3cfFjOmuw13IzXJjeOJ2zu4OgwWatX7fVAvcnYyBHRGRjawMvOINjqwqIaHXDr1MUyplYboDI7JtoWCv1d3EwnqroxNB5HjdYrFmof5f7bJCcZkwIZOnNqPVSEZObzzemKSO3fhkCMsXFeDkudtr5T7+1fmGzsfsEmksW2I9BnZERA6iN/7OaF05K7JSWu1Ih8xNd2AEHb3XZa95XC4Ew9pLc8VKGgiNTYawvfZecYydcP2+v2IRapcVRp3Rqnc+0cbj5XjdYnDn87rx5fCEbB9/6JFfDy1mlkhL5Vnb6YyBnQaOsSOidKNXzDXaAzRZM2iNZprsyuSoFU4GgF1/Uo6JUNiS9ujVlxMmRyjFk800Mh7v0NYVsjF233rpN7J9nPt82NCxzGQSWbYkMRjYaeAYOyJSSuVuI73gzcgD1Egmzcqu2lhmUCaDsnBy1V0FqF9dhppFfkv2b7S+nJWMjsf7/opF4nZQsdKEcluP0SA0HbK36YiBHRGRAanebaQXvBl9sEerj5es87czk6O8VjufLDdcV05LtNqCRurLxSOW8W0el0t3WymW62K2XEqq/lGVahjYEREZkMrFfoHoY5uMPED1Mi3JPP+qBQXiJAKf153UTI70WhXn56Ll4jXx9ViC20TXFox1yTi1cwEgW17MTBtiDfqNZPdS/Y+qVMPAjojIALu6jcwU+41W7DWeh2Gyz9+l+G8yKMe+Ka97LMFtImsLnjoXwHdf/SCmMizKdjV39MnWKVaOMRy6qT3ePNFBP8fimcPATgMnTxCRlF3lGsw81KwsF6I8r2TWmZOW3xhLwKoPapQBtLQ4sJnacUp6tQW7AyMxFz3uDoyIQZ20jUb3o2yXsA/hvzleF8Ymw+Lnp/u069glOujnWDxzGNhp4OQJIlKyo1yDHQ81vSLCyciU2HHOygAagFgCJOdWd3Aswa3eHwTx3DstF6+JQR0AZHlcppcNk7YLgCxjl+11YWxyUvy81+s2fY5GGPnDKJl/VDgBAzsiohglo4vIjoea3V1fdpyzMpgsL86HEDaFJZ+LJbhV+05zR5/mNTY7pjLL48Lrm6pN1y9Utkt6zTftbcH10duBXUFutulzjMZMcJusPyqcgIEdEZGGaA/YeDNLsQ58T7RU6PpK9jkrg8mWi9cwfqs7eNzi7uDuwAh2He4St3MkE0SsGlNpZl9qpuV4dbetYPcfEE7FwI6ISIXWQ1EZjMXTBZWqM/0ytetLGkz2DozK3ivOz9X8ntlxltKgEQC2rikzVXNQrb1axzG6r+7ACNbsPi7ORH6wJF/2/qw79DN2sUiFPyCciIEdEZFCd2AEjcfORjwUAWiOPTMr1bMVdnd9mQ2WrJ7E0t4zELGtVqQ4lgBdbbUJrffiCXaUwahecNrc0SfLULoV05GLZ2l/N1aZ+gdEojGwIyKSUFtSSnjAWhmMJTpbkc4FXc0GS6myUoXRe0IvoLEy2OlRZB2V23q6v5R/9v9+0I3N31iUkDGk6XZ/pjrtaS4ZrrGxEUuWLEFlZaXdTSGiJFIuKfV0ZYkYKAjBGIC4gzHhAb7zqXLLAxEh0HnurXasaziB7sCIZftOBrVgycznmzv6sP90j3jeQlkRM9ehdlkhcm7NBM3xumVZNani/FxkeabSW1YF6MK91nLxWly/nZn7VXm+q+75iuz9cBhRfwdKDczYaWC5E6LMpMykbVm5WAy6rO46MpOtMJOBS/Vu3miEYEkovBstWJL+ZjleN3Yd7sL4ZEhc6aGuqTVqNk+tbt+hrSuiTk6oa2rFRDCMLI8LezdWGu421sswWpWBNHO/Ks+38djZiM/odeVS6mBgR0QkEe1haEfXkdkHfToPSo8lWJL+ZoGhcexo7gQwFdQeaLscNciNtW6fNICeCIYNd3VGC7yNBuZawb5akGqE9LPZnsg1P8x05ZJ9GNgREd0ifSA+ubzY7uaIzGbg0nlQeqzBkhCUdAdGZIV211fMx6/aenWD3FgznLEG0NG+Z2S/erO2rcj2HfnkqmzbdatdWsxklNN5/Gc6YGBHRITULj8SSwBhNrOYKg/beLONakFttCBX65jRrkmsAbSRrHC0/WoFo1Z1w8+d7kPf9TFx+95503VLpRj9t5PK/86cgoEdERGSMy4t1uAp0Rm4VHrYWnGuyqA2WpCrdkwzhYKtaKPZ95XBaHF+Lvaf7kFxfm7MgbH0/txWex/+9OenxPeef3Sp5vfM/NtJ9/Gf6YCBHRERklN+JJ7gSe1Bb1WWLdUetnaMY1QeM9WuiZI0GC3Oz5VNENm7sRI9A6Om7gu1+/PNzTU40HYZ6yvmo+hW4Ki2TzP/dtJ5/Ge6YGBHRITEZ8WsDhSszLLxYRvJTHFfuwjB6P7TPbJ7q2dgVHeMqNofBGr355PLi1GzyB/1XjM7+zZdx3+mCwZ2GhobG9HY2IhgMBj9w0TkCInMFFkdPFkZKPJhGyme4r7JZube0grS9PZh5F6LdfYtWY+BnQbWsSMiK1kdPFkdKMbysE2VCReJkE5ZTDP3llaQprePdLoWBLjC4XDY7kakMiGwu379OmbMmGF3c4iIRN2BETR39AGYWjkgmcFVKk24SBQ7r2+ixPq7CUF8cX6uuI6uU65JOjATizBjR0RkgN3ZKa3jCzXbGo58qrqCQbqMGUxVetfXDLvvH0E8JVoAYO3u4xibDAEAdh3uwuGtKxz5u6czBnZERFHYnZ3SOr5ecBVPm40EIYnqnkuVAAiwLni1+/5RinWMW8vFa2JQBwDjkyHHBvTpjIEdEVEUdmentI4f74B3NWbqt1k94SLVAiCza9Zqsfv+sUrVggLkeN1icOfzujneLgUxsCMiisLuweNax0/EgHczQYjVsxsTURIm1sAzljVrtY5px/2j1o54s6Gl/jwc2rrCceMOnYaBHRHRLVoPPrvLgegdXyu4irXNdgaxVh473uxfLGvWah0z2fePWjsAWJINLfXn4fsrFlndZLIQAzsiIkQPBOyuvRXL8WP9TqxBiBUZIasCoHi6ooXZn2aDTOUxmzv64J/mE88lWfePsh2Nx85i4ew7HNEdTNExsCMignPGQVkh1pp2VmWErLjusWT/lOdgdmku6TF9Xjd2H+7C2GQooeMFo3X9AsC+1kvwed3i+DjWonM2BnZERLB/HF26S7XAOJbsn/Icoi3NpXfMwNA4djR3ivtSux7xZjilgWiWx4XXN1WjZpFfbEfjsbPY13oJwNQM1m/dX4gHimfaUvMwVWY6ZwIGdkREsH8cXbpLxcDYbPbPinMQjtkdGBFr4Knty4pyNIGhcdk4wO+++gGO1q8U27Bl5WL8qq1X/MzBP/Th151XUbus0PR5xSrVZjpnAgZ2GrhWLFHmsWMcnROyGcI5mO26TDVWBvfR9mVFORqf1y2WYwGmgjvpftQyd8nOpqZaJjcTMLDTwLViiSjRnJDNMHoO6RLARgvuzZyH3r6sKEczPhnCD1YsxCu/vaBZa0+ZuUvnmc5kDAM7IiKbOCGbYeQcnBDAAtaeh1XlaL5TdSe+U3Wn7n7sHGbAIQ7Jx8COiMgmTshmGDkHJwSwgPXnYWU5mniyh1pOnQvgQNtlrK+Yj5pFflPfjffYFDsGdkRENnFCNsPIOTghgAVS5zySESidOhfAn/78FICpcilvbq6JK7ij5GFgR0RkIydkM6KdgxMCWMCe80j02ESt/R9ouyz73IG2ywzs0gQDOyKiNOaUSQnpIpnnkeixiXr7L5szTfZZ5TalLgZ2REQpKlrQ5pRJCaQu0WMT9fbfdXVI9lnlNqUut90NICJKN92BEew/3YPuwEhCj7Gu4QSee6sd6xpOqB5L7cFMxiXjd4yHMKYPQELG9Ontf33FfNlnlduUupixIyIyIVlZMiPZmlQZzJ+O0iHbmegxfXr7r1nkx5ubayyZFUvJxcCOiMiEZJXuMBK0OWVSQrJIu7bTpQRLosf06e2/ZpGfAV0aYmBHRGRCsrJkRoM2p0xKSDRlhm7vxkpmO8mRGNgREZmQzCwZgzbrKDN0PQOjzHYmQLrM0nYyBnZERCYx4Eo/aplWrd+RwUls0mHcYibIiMBuwYIFmDFjBtxuN2bNmoV3333X7iYREVESGc20MjiJXbqMW3S6jAjsAODkyZOYNo0FFomIMpWRTCuDk9hxlnZqyJjAjoiIKBoGJ7HjLO3UYHuB4hMnTuDRRx9FUVERXC4X3n777YjPNDY2YsGCBcjJyUF1dTVaWlpMHcPlcmHFihWorKzEG2+8YVHLiYjIaYTgZOdT5eyGjUGpPw9PLi/mdbOR7Rm74eFhlJeXY9OmTXjiiSci3t+3bx/q6+uxZ88eVFdXo6GhAevWrcOZM2cwZ84cAEBFRQUmJycjvnvo0CEUFRXht7/9LebPn4++vj6sXr0a999/Px544IGEnxsREaUfTo6hdOYKh8NhuxshcLlcOHDgAB5//HHxterqalRWVuLll18GAIRCIZSUlOCHP/whtm3bZvoYf/VXf4WlS5di48aNqu+Pj49jfHxc3B4cHERJSQmuX7+OGTNmmD4eERERUTwGBwcxc+ZMQ7GI7V2xem7evInTp09j9erV4mtutxurV6/G+++/b2gfw8PDuHHjBgBgaGgIv/71r7F06VLNz+/YsQMzZ84U/1dSUhLfSRAREcUp1de1pdRhe1esni+++ALBYBBz586VvT537lx0dnYa2kd/fz/Wr18PAAgGg9i8eTMqKys1P799+3bU19eL20LGjogoXmbro7GeGgEswULmpHRgZ4WFCxeivb3d8Od9Ph98Pl8CW0REmcjsw5kPcxKwBAuZkdJdsbNnz4bH40F/f7/s9f7+fsybNy+hx25sbMSSJUt0s3tEREapPZyt/Dw5l1CCBQBLsFBUKR3YZWdnY/ny5Th69Kj4WigUwtGjR/Hwww8n9NhbtmzBxx9/jNbW1oQeh4gyg9mHMx/mJGAJFjLD9q7YoaEhnD17Vty+cOEC2traUFBQgNLSUtTX12PDhg146KGHUFVVhYaGBgwPD6Ours7GVhMRmWO2eCuLvZIUS7CQUbaXOzl27BhWrVoV8fqGDRvQ1NQEAHj55Zfxwgsv4MqVK6ioqMBLL72E6urqpLTPzBRjIqJUwYkXRM5hJhaxPbBLVY2NjWhsbEQwGERXVxcDOyJKG5x4QeQsjqljZyeOsSOidMWJF0SZi4EdEZHDWDnxgoVxidKL7ZMniIjIWlZNvGCXLlH6YWCnQTrGjogo3Vgxi5KFcYnSD7tiNXCMHRFluni6dNmFS2QPZuyIiEhVrF267MIlsg8DOyIi0hRLly67cInsw65YDVwrlogoNlwOjcg+LFAcBVeeICIyjytfEFnHTCzCrlgiIrIc1zYlsge7YomIiIgcgoEdERERkUMwsNPAyRNERESUbjh5IgpOniAiIiI7mYlFmLEjIiIicggGdkREREQOwcCOiIiIyCEY2BERERE5BAM7IiIiIodgYKeB5U6IiIgo3bDcSRQsd0JERER2YrkTIiIiogzEwI6IiIjIIbx2NyDVCT3Vg4ODNreEiIiIMpEQgxgZPcfALoobN24AAEpKSmxuCREREWWyGzduYObMmbqf4eSJKEKhEHp7e/HNb34TH374oW3tqKysRGtra9ofy+p9W7W/wcFBlJSU4NKlS5wk41DJ/DeUbpxybVL5POxsG58fid1nMp4f4XAYN27cQFFREdxu/VF0zNhF4Xa7UVxcDK/Xa+sD3+PxJO34iTyW1fu2en8zZsxgYOdQyfw3lG6ccm1S+TzsbBufH8nZZ6KfH9EydQJOnjBoy5YtGXP8RB7L6n3b/btQ+uC9os0p1yaVz8POtvH5kdx92o1dsURgvUIiIopNqj0/mLEjAuDz+fD888/D5/PZ3RQiIkojqfb8YMaOiIiIyCGYsSMiIiJyCAZ2RERERA7BwI6IiIjIIRjYERERETkEAzsik9avX49Zs2bhySeftLspRESU4v793/8d99xzD+6++2784he/SPjxOCuWyKRjx47hxo0beO2117B//367m0NERClqcnISS5YswbvvvouZM2di+fLlOHnyJPx+f8KOyYwdkUkrV67E9OnT7W4GERGluJaWFixduhTz58/HtGnTUFtbi0OHDiX0mAzsyFFOnDiBRx99FEVFRXC5XHj77bcjPtPY2IgFCxYgJycH1dXVaGlpSX5DiYgo5cX7TOnt7cX8+fPF7fnz5+Py5csJbTMDO3KU4eFhlJeXo7GxUfX9ffv2ob6+Hs8//zw++ugjlJeXY926dbh69ar4mYqKCixbtizif729vck6DSIiSgFWPFOSzWvbkYkSoLa2FrW1tZrv79q1C5s3b0ZdXR0AYM+ePTh48CBeffVVbNu2DQDQ1taWjKYSEVGKi/eZUlRUJMvQXb58GVVVVQltMzN2lDFu3ryJ06dPY/Xq1eJrbrcbq1evxvvvv29jy4iIKN0YeaZUVVWho6MDly9fxtDQEJqbm7Fu3bqEtosZO8oYX3zxBYLBIObOnSt7fe7cuejs7DS8n9WrV6O9vR3Dw8MoLi7GW2+9hYcfftjq5hIRUQoz8kzxer148cUXsWrVKoRCIfzoRz9K6IxYgIEdkWlHjhyxuwlERJQmHnvsMTz22GNJOx67YiljzJ49Gx6PB/39/bLX+/v7MW/ePJtaRURE6ShVnykM7ChjZGdnY/ny5Th69Kj4WigUwtGjR9mVSkREpqTqM4VdseQoQ0NDOHv2rLh94cIFtLW1oaCgAKWlpaivr8eGDRvw0EMPoaqqCg0NDRgeHhZnNBEREQnS8ZnCJcXIUY4dO4ZVq1ZFvL5hwwY0NTUBAF5++WW88MILuHLlCioqKvDSSy+huro6yS0lIqJUl47PFAZ2RERERA7BMXZEREREDsHAjoiIiMghGNgREREROQQDOyIiIiKHYGBHRERE5BAM7IiIiIgcgoEdERERkUMwsCMiIiJyCAZ2RERERA7BwI6IiIjIIRjYERERETkEAzsiogQoKyvDww8/jNHRUfG1cDiMmpoabN++3caWEZGTMbAjIkqAffv24aOPPsJ7770nvvbGG2/gs88+w9/8zd/Y2DIicjIGdkRECfDggw+ioqICnZ2dAICRkRFs374df/d3f4fp06fb3DoicioGdkRECVJWVoYzZ84AAH7yk59g9uzZqKurs7lVRORkXrsbQETkVPfccw9OnDiBnp4evPDCCzh48CDcbv49TUSJw/+HISJKECFjt23bNqxduxYrV660u0lE5HCucDgctrsRRERO1NbWhq9+9avIzs5GR0cHFi9ebHeTiMjhmLEjIkqQsrIyAMAzzzzDoI6IkoKBHRFRgoyNjSEcDuMv/uIv7G4KEWUIBnZERAnS3t6O7Oxs3HfffXY3hYgyBAM7IqIEaW9vx5IlS5CVlWV3U4goQ3DyBBEREZFDMGNHRERE5BAM7IiIiIgcgoEdERERkUMwsCMiIiJyCAZ2RERERA7BwI6IiIjIIRjYERERETkEAzsiIiIih2BgR0REROQQDOyIiIiIHIKBHREREZFD/H/C4GHbgJHYQAAAAABJRU5ErkJggg==", 164 | "text/plain": [ 165 | "
" 166 | ] 167 | }, 168 | "metadata": {}, 169 | "output_type": "display_data" 170 | } 171 | ], 172 | "source": [ 173 | "import numpy as np\n", 174 | "from tqdm import tqdm\n", 175 | "from pynep.calculate import NEP\n", 176 | "from ase.io import read\n", 177 | "import matplotlib.pyplot as plt\n", 178 | "from asi_io import load_asi\n", 179 | "\n", 180 | "nep_file = \"nep.txt\"\n", 181 | "calc = NEP(nep_file)\n", 182 | "\n", 183 | "active_set_inverse = load_asi(\"active_set.asi\")\n", 184 | "\n", 185 | "\n", 186 | "def get_gamma_dF(file):\n", 187 | " traj = read(file, index=\":\")\n", 188 | " gamma = {k: [] for k in active_set_inverse.keys()}\n", 189 | " dF = {k: [] for k in active_set_inverse.keys()}\n", 190 | " phase = {k: [] for k in active_set_inverse.keys()}\n", 191 | "\n", 192 | " print(\"Calculating gamma...\")\n", 193 | "\n", 194 | " for atoms in tqdm(traj):\n", 195 | " dft_F = atoms.arrays[\"force\"]\n", 196 | " calc.calculate(atoms, [\"B_projection\"])\n", 197 | " B_projection = calc.results[\"B_projection\"]\n", 198 | " nep_F = calc.results[\"forces\"]\n", 199 | " F_error = np.linalg.norm(dft_F - nep_F, axis=1)\n", 200 | " for e in active_set_inverse.keys():\n", 201 | " index = [\n", 202 | " ii for ii in range(len(atoms)) if atoms.get_chemical_symbols()[ii] == e\n", 203 | " ]\n", 204 | " g = B_projection[index] @ active_set_inverse[e]\n", 205 | " g = np.max(np.abs(g), axis=1)\n", 206 | " gamma[e].extend(g)\n", 207 | " dF[e].extend(F_error[index])\n", 208 | " phase[e].extend([atoms.info[\"config_type\"]] * len(index))\n", 209 | "\n", 210 | " return gamma, dF, phase\n", 211 | "\n", 212 | "\n", 213 | "gamma, dF, phase = get_gamma_dF(\"train.xyz\")\n", 214 | "plt.scatter(gamma[\"Na\"], dF[\"Na\"], s=3, label=\"train\")\n", 215 | "\n", 216 | "\n", 217 | "plt.gca().set_xscale(\"log\")\n", 218 | "plt.gca().set_yscale(\"log\")\n", 219 | "plt.xlabel(r\"$\\gamma$\")\n", 220 | "plt.ylabel(\"|dF| (eV/A)\")\n", 221 | "plt.tight_layout()\n", 222 | "plt.legend()\n", 223 | "plt.savefig(\"gamma-dF.png\", transparent=False)" 224 | ] 225 | } 226 | ], 227 | "metadata": { 228 | "kernelspec": { 229 | "display_name": "ase", 230 | "language": "python", 231 | "name": "python3" 232 | }, 233 | "language_info": { 234 | "codemirror_mode": { 235 | "name": "ipython", 236 | "version": 3 237 | }, 238 | "file_extension": ".py", 239 | "mimetype": "text/x-python", 240 | "name": "python", 241 | "nbconvert_exporter": "python", 242 | "pygments_lexer": "ipython3", 243 | "version": "3.10.15" 244 | } 245 | }, 246 | "nbformat": 4, 247 | "nbformat_minor": 2 248 | } 249 | -------------------------------------------------------------------------------- /maxvol.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | 3 | 4 | # avoid large value since GPUMD use float 5 | def find_inverse(m): 6 | return np.linalg.pinv(m, rcond=1e-8) 7 | 8 | 9 | def calculate_maxvol( 10 | A, 11 | struct_index, 12 | gamma_tol=1.001, 13 | maxvol_iter=1000, 14 | mode="GPU", 15 | batch_size=None, 16 | n_refinement=10, 17 | ): 18 | if mode == "GPU": 19 | from maxvol_gpu import maxvol 20 | elif mode == "CPU": 21 | from maxvol_cpu import maxvol 22 | else: 23 | raise Exception("mode should be CPU or GPU.") 24 | 25 | # one batch 26 | if batch_size is None: 27 | selected = maxvol(A, gamma_tol, maxvol_iter) 28 | return A[selected], struct_index[selected] 29 | 30 | # multiple batches 31 | batch_num = np.ceil(len(A) / batch_size) 32 | batch_splits_indices = np.array_split( 33 | np.arange(len(A)), 34 | batch_num, 35 | ) 36 | 37 | # stage 1 - cumulative maxvol 38 | A_selected = None 39 | struct_index_selected = None 40 | for i, ind in enumerate(batch_splits_indices): 41 | # first batch 42 | if A_selected is None: 43 | A_joint = A[ind] 44 | struct_index_joint = struct_index[ind] 45 | # other batches 46 | else: 47 | A_joint = np.vstack([A_selected, A[ind]]) 48 | struct_index_joint = np.hstack([struct_index_selected, struct_index[ind]]) 49 | 50 | selected = maxvol(A_joint, gamma_tol, maxvol_iter) 51 | if A_selected is None: 52 | l = 0 53 | else: 54 | l = len(A_selected) 55 | A_selected = A_joint[selected] 56 | struct_index_selected = struct_index_joint[selected] 57 | n_add = (selected >= l).sum() 58 | print(f"Batch {i}: adding {n_add} envs. ") 59 | 60 | # stage 2 - refinement 61 | for ii in range(n_refinement): 62 | # check max gamma, if small enough, no need to refine 63 | inv = find_inverse(A_selected) 64 | gamma = np.abs(A_selected @ inv) 65 | large_gamma = gamma > gamma_tol 66 | print( 67 | f"Refinement round {ii}: {large_gamma.sum()} envs out of active set. Max gamma = {np.max(gamma)}" 68 | ) 69 | if np.max(gamma) < gamma_tol: 70 | print("Refinement done.") 71 | return A_selected, struct_index_selected 72 | 73 | A_joint = np.vstack([A_selected, A[large_gamma]]) 74 | struct_index_joint = np.hstack( 75 | [struct_index_selected, struct_index[large_gamma]] 76 | ) 77 | selected = maxvol(A_joint, gamma_tol, maxvol_iter) 78 | A_selected = A_joint[selected] 79 | struct_index_selected = struct_index_joint[selected] 80 | -------------------------------------------------------------------------------- /maxvol_cpu.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | from scipy.linalg import lu, solve_triangular 3 | from time import time 4 | 5 | """ 6 | The following code comes from https://github.com/AndreiChertkov/teneva 7 | """ 8 | 9 | 10 | def maxvol(A, e, k): 11 | """Compute the maximal-volume submatrix for given tall matrix. 12 | 13 | Args: 14 | A (np.ndarray): tall matrix of the shape [n, r] (n > r). 15 | e (float): accuracy parameter (should be >= 1). If the parameter is 16 | equal to 1, then the maximum number of iterations will be performed 17 | until true convergence is achieved. If the value is greater than 18 | one, the algorithm will complete its work faster, but the accuracy 19 | will be slightly lower (in most cases, the optimal value is within 20 | the range of 1.01 - 1.1). 21 | k (int): maximum number of iterations (should be >= 1). 22 | 23 | Returns: 24 | (np.ndarray, np.ndarray): the row numbers I containing the maximal 25 | volume submatrix in the form of 1D array of length r and coefficient 26 | matrix B in the form of 2D array of shape [n, r], such that 27 | A = B A[I, :] and A (A[I, :])^{-1} = B. 28 | 29 | Note: 30 | The description of the basic implementation of this algorithm is 31 | presented in the work: Goreinov S., Oseledets, I., Savostyanov, D., 32 | Tyrtyshnikov, E., Zamarashkin, N. "How to find a good submatrix". 33 | Matrix Methods: Theory, Algorithms And Applications: Dedicated to the Memory of Gene Golub (2010): 247-256. 34 | 35 | """ 36 | n, r = A.shape 37 | 38 | if n <= r: 39 | raise ValueError('Input matrix should be "tall"') 40 | 41 | P, L, U = lu(A, check_finite=False) 42 | I = P[:, :r].argmax(axis=0) 43 | Q = solve_triangular(U, A.T, trans=1, check_finite=False) 44 | B = solve_triangular( 45 | L[:r, :], Q, trans=1, check_finite=False, unit_diagonal=True, lower=True 46 | ).T 47 | 48 | t0 = time() 49 | for iter in range(k): 50 | i, j = np.divmod(np.abs(B).argmax(), r) 51 | E = np.abs(B[i, j]) 52 | if E <= e: 53 | v = iter / (time() - t0) 54 | print(f"Maxvol Speed: {int(v)} iters/s") 55 | break 56 | 57 | I[j] = i 58 | 59 | bj = B[:, j] 60 | bi = B[i, :].copy() 61 | bi[j] -= 1.0 62 | 63 | B -= np.outer(bj, bi / B[i, j]) 64 | 65 | return I 66 | -------------------------------------------------------------------------------- /maxvol_gpu.py: -------------------------------------------------------------------------------- 1 | import cupy as cp 2 | from cupyx.scipy.linalg import lu, solve_triangular 3 | from time import time 4 | 5 | """ 6 | The following code comes from https://github.com/AndreiChertkov/teneva 7 | """ 8 | 9 | 10 | def maxvol(A, e, k): 11 | A = cp.array(A) 12 | """Compute the maximal-volume submatrix for given tall matrix. 13 | 14 | Args: 15 | A (np.ndarray): tall matrix of the shape [n, r] (n > r). 16 | e (float): accuracy parameter (should be >= 1). If the parameter is 17 | equal to 1, then the maximum number of iterations will be performed 18 | until true convergence is achieved. If the value is greater than 19 | one, the algorithm will complete its work faster, but the accuracy 20 | will be slightly lower (in most cases, the optimal value is within 21 | the range of 1.01 - 1.1). 22 | k (int): maximum number of iterations (should be >= 1). 23 | 24 | Returns: 25 | (np.ndarray, np.ndarray): the row numbers I containing the maximal 26 | volume submatrix in the form of 1D array of length r and coefficient 27 | matrix B in the form of 2D array of shape [n, r], such that 28 | A = B A[I, :] and A (A[I, :])^{-1} = B. 29 | 30 | Note: 31 | The description of the basic implementation of this algorithm is 32 | presented in the work: Goreinov S., Oseledets, I., Savostyanov, D., 33 | Tyrtyshnikov, E., Zamarashkin, N. "How to find a good submatrix". 34 | Matrix Methods: Theory, Algorithms And Applications: Dedicated to the Memory of Gene Golub (2010): 247-256. 35 | 36 | """ 37 | n, r = A.shape 38 | 39 | if n <= r: 40 | raise ValueError('Input matrix should be "tall"') 41 | 42 | P, L, U = lu(A, check_finite=False) 43 | I = P[:, :r].argmax(axis=0) 44 | Q = solve_triangular(U, A.T, trans=1, check_finite=False) 45 | B = solve_triangular( 46 | L[:r, :], Q, trans=1, check_finite=False, unit_diagonal=True, lower=True 47 | ).T 48 | 49 | t0 = time() 50 | for iter in range(k): 51 | i, j = cp.divmod(cp.abs(B).argmax(), r) 52 | E = cp.abs(B[i, j]) 53 | if E <= e: 54 | v = iter / (time() - t0) 55 | print(f"Maxvol Speed: {int(v)} iters/s") 56 | break 57 | 58 | I[j] = i 59 | 60 | bj = B[:, j] 61 | bi = B[i, :].copy() 62 | bi[j] -= 1.0 63 | 64 | B -= cp.outer(bj, bi / B[i, j]) 65 | 66 | return I.get() 67 | -------------------------------------------------------------------------------- /select_active.py: -------------------------------------------------------------------------------- 1 | from ase.io import write 2 | from pynep.io import load_nep, dump_nep 3 | from tools import get_B_projections, get_active_set 4 | 5 | nep_file = "nep.txt" 6 | traj = load_nep("train.xyz") 7 | 8 | B_projections, B_projections_struct_index = get_B_projections(traj, nep_file) 9 | active_set_inv, active_set_struct = get_active_set( 10 | B_projections, B_projections_struct_index 11 | ) 12 | 13 | out_traj = [traj[i] for i in active_set_struct] 14 | try: 15 | dump_nep("active_set.xyz", out_traj) 16 | except: 17 | write("active_set.xyz", out_traj) 18 | -------------------------------------------------------------------------------- /select_extend.py: -------------------------------------------------------------------------------- 1 | from ase.io import write, read 2 | from pynep.io import load_nep, dump_nep 3 | from tools import get_B_projections, get_active_set 4 | 5 | nep_file = "nep.txt" 6 | data1 = load_nep("train.xyz") 7 | try: 8 | data2 = load_nep("large_gamma.xyz") 9 | except: 10 | data2 = read("large_gamma.xyz", index=":") 11 | 12 | data = data1 + data2 13 | 14 | B_projections, B_projections_struct_index = get_B_projections(data, nep_file) 15 | active_set_inv, active_set_struct = get_active_set( 16 | B_projections, B_projections_struct_index, write_asi=False 17 | ) 18 | 19 | out = [data[i] for i in active_set_struct if i >= len(data1)] 20 | 21 | try: 22 | dump_nep("to_add.xyz", out) 23 | except: 24 | write("to_add.xyz", out) 25 | -------------------------------------------------------------------------------- /select_gamma.py: -------------------------------------------------------------------------------- 1 | from ase.io import write 2 | from pynep.io import load_nep, dump_nep 3 | from tools import get_gamma 4 | 5 | nep_file = "nep.txt" 6 | traj = load_nep("to_select.xyz") 7 | 8 | get_gamma(traj, nep_file, "active_set.asi") 9 | 10 | out_traj = [atoms for atoms in traj if atoms.arrays["gamma"].max() > 1] 11 | try: 12 | dump_nep("large_gamma.xyz", out_traj) 13 | except: 14 | write("large_gamma.xyz", out_traj) 15 | -------------------------------------------------------------------------------- /tools.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | from tqdm import tqdm 3 | from pynep.calculate import NEP 4 | from asi_io import save_asi, load_asi 5 | from maxvol import calculate_maxvol, find_inverse 6 | 7 | 8 | def get_gamma(traj, nep_file, asi_file): 9 | calc = NEP(nep_file) 10 | active_set_inverse = load_asi(asi_file) 11 | for atoms in tqdm(traj): 12 | atoms.arrays["gamma"] = np.zeros(len(atoms)) 13 | calc.calculate(atoms, ["B_projection"]) 14 | B_projection = calc.results["B_projection"] 15 | for e in active_set_inverse.keys(): 16 | index = [ 17 | ii for ii in range(len(atoms)) if atoms.get_chemical_symbols()[ii] == e 18 | ] 19 | g = B_projection[index] @ active_set_inverse[e] 20 | g = np.max(np.abs(g), axis=1) 21 | atoms.arrays["gamma"][index] = g 22 | return traj 23 | 24 | 25 | def get_B_projections(traj, nep_file): 26 | calc = NEP(nep_file) 27 | with open(nep_file) as f: 28 | first_line = f.readline() 29 | elements = first_line.split(" ")[2:-1] 30 | print(f"Elements in the NEP potential: {elements}") 31 | 32 | B_projections = {e: [] for e in elements} 33 | B_projections_struct_index = {e: [] for e in elements} 34 | print("Calculating B projections...") 35 | for index, atoms in enumerate(tqdm(traj)): 36 | calc.calculate(atoms, ["B_projection"]) 37 | B_projection = calc.results["B_projection"] 38 | for b, e in zip(B_projection, atoms.get_chemical_symbols()): 39 | B_projections[e].append(b) 40 | B_projections_struct_index[e].append(index) 41 | 42 | B_projections_struct_index = { 43 | e: np.array(i) for e, i in B_projections_struct_index.items() 44 | } 45 | 46 | print("Shape of the B matrix:") 47 | for e, b in B_projections.items(): 48 | B_projections[e] = np.vstack(b) 49 | print(f"{e}: {B_projections[e].shape}") 50 | assert ( 51 | B_projections[e].shape[0] >= B_projections[e].shape[1] 52 | ), f"Not enough environments for {e}." 53 | 54 | return B_projections, B_projections_struct_index 55 | 56 | 57 | def get_active_set( 58 | B_projections, 59 | B_projections_struct_index, 60 | write_asi=True, 61 | batch_size=10000, 62 | mode="GPU", 63 | ): 64 | print("Performing MaxVol...") 65 | active_set = {} 66 | active_set_struct = [] # the index of structure 67 | for e, b in B_projections.items(): 68 | A, selected_index = calculate_maxvol( 69 | b, B_projections_struct_index[e], batch_size=batch_size, mode=mode 70 | ) 71 | active_set[e] = A 72 | active_set_struct.extend(selected_index) 73 | print("Shape of the active set:") 74 | print(f"{e}: {active_set[e].shape}") 75 | 76 | active_set_struct = list(set(active_set_struct)) 77 | active_set_struct.sort() 78 | 79 | print("Finding inverse...") 80 | active_set_inv = {e: find_inverse(b) for e, b in active_set.items()} 81 | 82 | if write_asi: 83 | print("Saving active set inverse...") 84 | save_asi(active_set_inv) 85 | 86 | return active_set_inv, active_set_struct 87 | --------------------------------------------------------------------------------