{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"# Sex-biased tissues per perturbagen analysis- Cancer drugs\n",
"--------------------------------------------------------------------------------\n",
"\n",
"Author: Belén Otero Carrasco\n",
"\n",
"Last updated 19 March 2024\n",
"\n",
"\n",
"--------------------------------------------------------------------------------"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'4.0.1'"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pkg_resources\n",
"# Print version of cmapPy being used in current conda environment \n",
"pkg_resources.get_distribution(\"cmapPy\").version"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\Usuario\\anaconda3\\lib\\site-packages\\pandas\\core\\computation\\expressions.py:20: UserWarning: Pandas requires version '2.7.3' or newer of 'numexpr' (version '2.7.1' currently installed).\n",
" from pandas.core.computation.check import NUMEXPR_INSTALLED\n"
]
}
],
"source": [
"import pandas as pd\n",
"import seaborn as sns\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from pandas import DataFrame\n",
"from cmapPy.pandasGEXpress.parse import parse\n",
"from scipy.stats import hypergeom\n",
"from scipy.stats import fisher_exact\n",
"from tqdm import tqdm"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Functions"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"def signatures_ids_perturbagen(drug):\n",
" sig_pertu_ids = final_sig_original_filter[\"sig_id\"][final_sig_original_filter[\"pert_iname\"] == drug]\n",
" print(\"number of samples treated with this perturbagen:\")\n",
" return sig_pertu_ids"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"def perturbagen_significant_genes(sig_pertu_ids,drug):\n",
" perturbagen_genes_exp = parse(\"./Touchstone/GSE92742_Broad_LINCS_Level5_COMPZ.MODZ_n473647x12328.gctx\", cid=sig_pertu_ids)\n",
" df_perturbagen_genes_exp = perturbagen_genes_exp.data_df\n",
" df_filter_significant = df_perturbagen_genes_exp[(df_perturbagen_genes_exp >2.0) | (df_perturbagen_genes_exp <-2.0)]\n",
" df_bool_sign = df_filter_significant.notna()\n",
" df_bool_sign[\"count\"] = df_bool_sign.sum(axis=1)\n",
" df_bool_sign = df_bool_sign.reset_index()\n",
" df_gene_change = df_bool_sign[df_bool_sign[\"count\"]> 0]\n",
" df_gene_change_id = df_gene_change[[\"rid\",\"count\"]]\n",
" df_gene_change_id[\"perturbagen_name\"] = drug\n",
" df_gene_change_id[\"Signature_id\"] = sig_pertu_ids\n",
" return df_gene_change_id "
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"def filter_by_tissue(tissue_type):\n",
" data_gtex = pd.read_csv(\"signif.sbgenes.txt\", sep=\"\\t\")\n",
" filtered_df_tissue = data_gtex[data_gtex[\"tissue\"] == tissue_type]\n",
" return filtered_df_tissue"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"def filter_by_ids_and_tissue(tissue_type):\n",
" data_total_genes_share = pd.read_csv(\"genes_hugo+ensembl.csv\", sep=\",\")\n",
" data_gtex_filter = data_gtex.merge(data_total_genes_share , on=\"gene\")\n",
" filtered_df_tissue_ids = data_gtex_filter[data_gtex_filter[\"tissue\"] == tissue_type]\n",
" return filtered_df_tissue_ids"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [],
"source": [
"def preprocesing_plot(dataframe,sig_cell_info):\n",
" \n",
" \n",
" info_cell = sig_cell_info[[\"sig_id\",\"Signature_id\",\"cell_id\",\"primary_site\"]]\n",
" info_cell = info_cell.drop_duplicates()\n",
" clue_tiss_sig_gtex_ = dataframe.merge(info_tissue_cell, left_on=[\"Signature\"],right_on=[\"sig_id\"])\n",
" clue_tiss_sig_gtex_['Significant'] = clue_tiss_sig_gtex_.apply(lambda row: 'No' if row['P-value'] > 0.05 else 'Yes', axis=1)\n",
" \n",
" return clue_tiss_sig_gtex_"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [],
"source": [
"def pivot_table_plot(df_general_plus_siggenes):\n",
" \n",
" clue_tiss_sig_gtex_pivot = df_general_plus_siggenes[[\"Signature_id\",\"Tissue_type\", \"Heatmap_values\"]]\n",
" clue_tiss_sig_gtex_pivot = clue_tiss_sig_gtex_pivot.drop_duplicates()\n",
" group_dis = clue_tiss_sig_gtex_pivot.pivot(index='Signature_id', columns='Tissue_type', values='Heatmap_values')\n",
" \n",
" return group_dis"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {},
"outputs": [],
"source": [
"def plot_heatmap(group_dis,drug):\n",
" \n",
" fig, ax = plt.subplots(figsize=(25, 25))\n",
" ax = sns.heatmap(group_dis,linewidth=.5,cmap=[\"#FDEBD0\",\"#82E0AA\",\"#e65caa\",\"#2EC7CE\",\"#117A65\",\"#910956\",\"#175296\"],vmin=1, vmax=7)\n",
" colorbar = ax.collections[0].colorbar\n",
" #colorbar.set_ticks([0, 1, 2])\n",
" plt.title(f'Sex-biased tissues on {drug} application', fontsize = 20) # title with fontsize 20\n",
" plt.xlabel('Tissues', fontsize = 12) # x-axis label with fontsize 15\n",
" plt.ylabel('Signatures', fontsize = 12) # y-axis label with fontsize 15\n",
" plt.tight_layout()\n",
" plt.savefig(f\"./images_sex-biased/heatmap_sig_tissue_{drug}.svg\")\n",
" # plt.show()\n",
" return None "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"def plot_scatter(group_dis,drug):\n",
" \n",
" fig, ax = plt.subplots(figsize=(25, 25))\n",
" ax = sns.heatmap(group_dis,linewidth=.5,cmap=[\"#FDEBD0\",\"#82E0AA\",\"#e65caa\",\"#2EC7CE\",\"#117A65\",\"#910956\",\"#175296\"],vmin=1, vmax=7)\n",
" colorbar = ax.collections[0].colorbar\n",
" #colorbar.set_ticks([0, 1, 2])\n",
" plt.title(f'Sex-biased tissues on {drug} application', fontsize = 20) # title with fontsize 20\n",
" plt.xlabel('Tissues', fontsize = 12) # x-axis label with fontsize 15\n",
" plt.ylabel('Signatures', fontsize = 12) # y-axis label with fontsize 15\n",
" plt.tight_layout()\n",
" plt.savefig(f\"./images_sex-biased/heatmap_sig_tissue_{drug}.svg\")\n",
" # plt.show()\n",
" return None "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Signature information"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"## signatures unique per cell line by TAS and exemplar = 1 "
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" cell_id | \n",
" base_cell_id | \n",
" sample_type | \n",
" primary_site | \n",
" tissue | \n",
" abrev | \n",
" subtype | \n",
" sig_id | \n",
" pert_iname | \n",
" tas | \n",
" is_exemplar | \n",
" Signature_id | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" A375 | \n",
" A375 | \n",
" tumor | \n",
" skin | \n",
" Skin_Not_Sun_Exposed_Suprapubic | \n",
" SKINNS | \n",
" malignant melanoma | \n",
" CPC018_A375_6H:BRD-K06817181-001-01-5:10 | \n",
" 1,2,3,4,5,6-hexabromocyclohexane | \n",
" 0.282354 | \n",
" 1 | \n",
" 1,2,3,4,5,6-hexabromocyclohexane_A375_skin | \n",
"
\n",
" \n",
" 1 | \n",
" A375 | \n",
" A375 | \n",
" tumor | \n",
" skin | \n",
" Skin_Not_Sun_Exposed_Suprapubic | \n",
" SKINNS | \n",
" malignant melanoma | \n",
" CPC017_A375_6H:BRD-K74430258-001-01-2:10 | \n",
" 1,2-dichlorobenzene | \n",
" 0.057646 | \n",
" 1 | \n",
" 1,2-dichlorobenzene_A375_skin | \n",
"
\n",
" \n",
" 2 | \n",
" A375 | \n",
" A375 | \n",
" tumor | \n",
" skin | \n",
" Skin_Not_Sun_Exposed_Suprapubic | \n",
" SKINNS | \n",
" malignant melanoma | \n",
" CPC010_A375_6H:BRD-K32795028-001-10-9:10 | \n",
" 1-benzylimidazole | \n",
" 0.221885 | \n",
" 1 | \n",
" 1-benzylimidazole_A375_skin | \n",
"
\n",
" \n",
" 3 | \n",
" A375 | \n",
" A375 | \n",
" tumor | \n",
" skin | \n",
" Skin_Not_Sun_Exposed_Suprapubic | \n",
" SKINNS | \n",
" malignant melanoma | \n",
" CPC018_A375_6H:BRD-A80928489-001-01-0:10 | \n",
" 1-monopalmitin | \n",
" 0.118443 | \n",
" 1 | \n",
" 1-monopalmitin_A375_skin | \n",
"
\n",
" \n",
" 4 | \n",
" A375 | \n",
" A375 | \n",
" tumor | \n",
" skin | \n",
" Skin_Not_Sun_Exposed_Suprapubic | \n",
" SKINNS | \n",
" malignant melanoma | \n",
" CPC018_A375_6H:BRD-K31491153-001-01-2:10 | \n",
" 1-phenylbiguanide | \n",
" 0.313940 | \n",
" 1 | \n",
" 1-phenylbiguanide_A375_skin | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" cell_id base_cell_id sample_type primary_site \\\n",
"0 A375 A375 tumor skin \n",
"1 A375 A375 tumor skin \n",
"2 A375 A375 tumor skin \n",
"3 A375 A375 tumor skin \n",
"4 A375 A375 tumor skin \n",
"\n",
" tissue abrev subtype \\\n",
"0 Skin_Not_Sun_Exposed_Suprapubic SKINNS malignant melanoma \n",
"1 Skin_Not_Sun_Exposed_Suprapubic SKINNS malignant melanoma \n",
"2 Skin_Not_Sun_Exposed_Suprapubic SKINNS malignant melanoma \n",
"3 Skin_Not_Sun_Exposed_Suprapubic SKINNS malignant melanoma \n",
"4 Skin_Not_Sun_Exposed_Suprapubic SKINNS malignant melanoma \n",
"\n",
" sig_id pert_iname \\\n",
"0 CPC018_A375_6H:BRD-K06817181-001-01-5:10 1,2,3,4,5,6-hexabromocyclohexane \n",
"1 CPC017_A375_6H:BRD-K74430258-001-01-2:10 1,2-dichlorobenzene \n",
"2 CPC010_A375_6H:BRD-K32795028-001-10-9:10 1-benzylimidazole \n",
"3 CPC018_A375_6H:BRD-A80928489-001-01-0:10 1-monopalmitin \n",
"4 CPC018_A375_6H:BRD-K31491153-001-01-2:10 1-phenylbiguanide \n",
"\n",
" tas is_exemplar Signature_id \n",
"0 0.282354 1 1,2,3,4,5,6-hexabromocyclohexane_A375_skin \n",
"1 0.057646 1 1,2-dichlorobenzene_A375_skin \n",
"2 0.221885 1 1-benzylimidazole_A375_skin \n",
"3 0.118443 1 1-monopalmitin_A375_skin \n",
"4 0.313940 1 1-phenylbiguanide_A375_skin "
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sig_cell_info = pd.read_excel((\"new_signame_tas_exemplar.xlsx\"),engine='openpyxl')\n",
"sig_cell_info.head()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"sig_cell_info_filter_site = sig_cell_info[(sig_cell_info[\"primary_site\"]!= \"ovary\")\n",
" & (sig_cell_info[\"primary_site\"]!= \"endometrium\") & (sig_cell_info[\"primary_site\"]!= \"prostate\")]\n",
"## deja mama porque en los de GTEX y puede estar en hombres tambien"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"cancer_drugs = pd.read_csv(\"drugs_cancer_clue.csv\", sep=\",\")"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"drugs_ids = cancer_drugs[[\"pert_iname\"]].drop_duplicates()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"drugs_ids = drugs_ids.values.ravel().tolist()"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"mapping_tissue_GTEX_CLUE = pd.read_excel((\"mapping_tissues_GTEX_CLUE.xlsx\"),engine='openpyxl')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Gene (row) annotations "
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Index(['pr_gene_id', 'pr_gene_symbol', 'pr_gene_title', 'pr_is_lm',\n",
" 'pr_is_bing'],\n",
" dtype='object')"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"gene_info = pd.read_csv(\"./GSE92742_Broad_LINCS_gene_info.txt\", sep=\"\\t\", dtype=str)\n",
"gene_info.columns"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"pertub_id = pd.read_csv(\"./GSE92742_Broad_LINCS_pert_info.txt\", sep=\"\\t\", dtype=str)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [],
"source": [
"per_metrics_id = pd.read_csv(\"./GSE92742_Broad_LINCS_pert_metrics.txt\", sep=\"\\t\", dtype=str)\n",
"per_metrics_id = per_metrics_id.replace({\"-666\":\"Unknown\"})"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"data_total_genes_share = pd.read_csv(\"genes_hugo+ensembl.csv\", sep=\",\")"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [],
"source": [
"data_gtex = pd.read_csv(\"signif.sbgenes.txt\", sep=\"\\t\")"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
"data_gtex['Sex-bias'] = data_gtex.apply(lambda row: 'Female' if row['effsize'] >= 0 else 'Male', axis=1)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [],
"source": [
"data_gtex_filter = data_gtex.merge(data_total_genes_share , on=\"gene\")"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [],
"source": [
"pd.options.mode.chained_assignment = None "
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [],
"source": [
"data_gtex_tissues = data_gtex[\"tissue\"].unique()"
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Unnamed: 0 | \n",
" HUGO_gene_id | \n",
" Sex-bias | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" 0 | \n",
" AC005082.12 | \n",
" Female | \n",
"
\n",
" \n",
" 1 | \n",
" 1 | \n",
" AC006946.16 | \n",
" Male | \n",
"
\n",
" \n",
" 2 | \n",
" 2 | \n",
" AC007278.2 | \n",
" No-dir | \n",
"
\n",
" \n",
" 3 | \n",
" 3 | \n",
" AC068279.3 | \n",
" Female | \n",
"
\n",
" \n",
" 4 | \n",
" 4 | \n",
" ACADL | \n",
" Male | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Unnamed: 0 HUGO_gene_id Sex-bias\n",
"0 0 AC005082.12 Female\n",
"1 1 AC006946.16 Male\n",
"2 2 AC007278.2 No-dir\n",
"3 3 AC068279.3 Female\n",
"4 4 ACADL Male"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"top100 = pd.read_excel((\"df_top100_sexbias.xlsx\"),engine='openpyxl')\n",
"top100.head()"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"100"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(top100[\"HUGO_gene_id\"].unique())"
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {},
"outputs": [],
"source": [
"#drugs_ids_check = [\"sirolimus\"]"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"scrolled": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 0%| | 0/95 [00:00, ?it/s]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"idarubicin\n",
"37\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 1%|▊ | 1/95 [00:16<25:25, 16.22s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"rucaparib\n",
"38\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 2%|█▋ | 2/95 [00:32<25:22, 16.38s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"afatinib\n",
"15\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 3%|██▌ | 3/95 [00:39<20:36, 13.44s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"celecoxib\n",
"13\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 4%|███▍ | 4/95 [00:45<16:51, 11.12s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"exemestane\n",
"11\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 5%|████▎ | 5/95 [00:50<13:53, 9.26s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"mercaptopurine\n",
"5\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 6%|█████▏ | 6/95 [00:52<10:34, 7.13s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"cyclophosphamide\n",
"6\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 7%|██████ | 7/95 [00:55<08:29, 5.80s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"decitabine\n",
"12\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 8%|██████▉ | 8/95 [01:00<08:13, 5.67s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"temsirolimus\n",
"38\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 9%|███████▊ | 9/95 [01:17<13:05, 9.13s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"goserelin\n",
"7\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 11%|████████▋ | 10/95 [01:20<10:23, 7.33s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"vemurafenib\n",
"48\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 12%|█████████▍ | 11/95 [01:42<16:15, 11.62s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"pirfenidone\n",
"11\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 13%|██████████▎ | 12/95 [01:47<13:18, 9.62s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"nilutamide\n",
"11\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 14%|███████████▏ | 13/95 [01:52<11:13, 8.21s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"tivozanib\n",
"43\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 15%|████████████ | 14/95 [02:11<15:28, 11.47s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"axitinib\n",
"11\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 16%|████████████▉ | 15/95 [02:16<12:42, 9.53s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"procarbazine\n",
"11\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 17%|█████████████▊ | 16/95 [02:21<10:48, 8.21s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"formestane\n",
"11\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 18%|██████████████▋ | 17/95 [02:26<09:33, 7.35s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"sorafenib\n",
"18\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 19%|███████████████▌ | 18/95 [02:35<09:58, 7.78s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"fulvestrant\n",
"12\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 20%|████████████████▍ | 19/95 [02:40<08:56, 7.06s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"anastrozole\n",
"7\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 21%|█████████████████▎ | 20/95 [02:44<07:21, 5.89s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"dasatinib\n",
"15\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 22%|██████████████████▏ | 21/95 [02:51<07:40, 6.22s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"letrozole\n",
"5\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 23%|██████████████████▉ | 22/95 [02:53<06:08, 5.05s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"altretamine\n",
"11\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 24%|███████████████████▊ | 23/95 [02:58<06:04, 5.06s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"azacitidine\n",
"6\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 25%|████████████████████▋ | 24/95 [03:01<05:11, 4.38s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"azathioprine\n",
"5\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 26%|█████████████████████▌ | 25/95 [03:03<04:22, 3.75s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"dactinomycin\n",
"10\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 27%|██████████████████████▍ | 26/95 [03:08<04:39, 4.05s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"vinblastine\n",
"13\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 28%|███████████████████████▎ | 27/95 [03:14<05:20, 4.71s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"cladribine\n",
"7\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 29%|████████████████████████▏ | 28/95 [03:17<04:46, 4.27s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"toremifene\n",
"11\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 31%|█████████████████████████ | 29/95 [03:22<04:55, 4.48s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"mitotane\n",
"11\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 32%|█████████████████████████▉ | 30/95 [03:27<05:05, 4.69s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"clofarabine\n",
"11\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 33%|██████████████████████████▊ | 31/95 [03:33<05:10, 4.85s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"capecitabine\n",
"11\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 34%|███████████████████████████▌ | 32/95 [03:38<05:17, 5.04s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"daunorubicin\n",
"17\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 35%|████████████████████████████▍ | 33/95 [03:46<06:11, 6.00s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"ruxolitinib\n",
"17\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 36%|█████████████████████████████▎ | 34/95 [03:55<06:45, 6.65s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"neratinib\n",
"44\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 37%|██████████████████████████████▏ | 35/95 [04:15<10:49, 10.82s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"palbociclib\n",
"17\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 38%|███████████████████████████████ | 36/95 [04:23<09:47, 9.96s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"everolimus\n",
"12\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 39%|███████████████████████████████▉ | 37/95 [04:29<08:24, 8.69s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"tegafur\n",
"5\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 40%|████████████████████████████████▊ | 38/95 [04:31<06:27, 6.79s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"sonidegib\n",
"38\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 41%|█████████████████████████████████▋ | 39/95 [04:50<09:34, 10.25s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"ixazomib\n",
"40\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 42%|██████████████████████████████████▌ | 40/95 [05:10<12:04, 13.18s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"tofacitinib\n",
"11\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 43%|███████████████████████████████████▍ | 41/95 [05:15<09:45, 10.85s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"raltitrexed\n",
"11\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 44%|████████████████████████████████████▎ | 42/95 [05:20<08:04, 9.14s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"vindesine\n",
"4\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 45%|█████████████████████████████████████ | 43/95 [05:22<06:02, 6.97s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"abiraterone\n",
"6\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 46%|█████████████████████████████████████▉ | 44/95 [05:25<04:53, 5.75s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"nilotinib\n",
"17\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 47%|██████████████████████████████████████▊ | 45/95 [05:33<05:26, 6.52s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"tacrolimus\n",
"42\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 48%|███████████████████████████████████████▋ | 46/95 [05:53<08:38, 10.59s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"bosutinib\n",
"13\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 49%|████████████████████████████████████████▌ | 47/95 [05:59<07:24, 9.27s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"methotrexate\n",
"6\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 51%|█████████████████████████████████████████▍ | 48/95 [06:02<05:46, 7.38s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"docetaxel\n",
"9\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 52%|██████████████████████████████████████████▎ | 49/95 [06:07<04:56, 6.45s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"tretinoin\n",
"46\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 53%|███████████████████████████████████████████▏ | 50/95 [06:29<08:20, 11.12s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"belinostat\n",
"11\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 54%|████████████████████████████████████████████ | 51/95 [06:34<06:51, 9.36s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"bicalutamide\n",
"11\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 55%|████████████████████████████████████████████▉ | 52/95 [06:39<05:51, 8.16s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"diethylstilbestrol\n",
"11\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 56%|█████████████████████████████████████████████▋ | 53/95 [06:45<05:06, 7.29s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"sirolimus\n",
"49\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 57%|██████████████████████████████████████████████▌ | 54/95 [07:09<08:31, 12.47s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"epirubicin\n",
"13\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 58%|███████████████████████████████████████████████▍ | 55/95 [07:16<07:06, 10.67s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"paclitaxel\n",
"14\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 59%|████████████████████████████████████████████████▎ | 56/95 [07:23<06:12, 9.55s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"amsacrine\n",
"11\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 60%|█████████████████████████████████████████████████▏ | 57/95 [07:28<05:16, 8.33s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"etoposide\n",
"8\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 61%|██████████████████████████████████████████████████ | 58/95 [07:32<04:19, 7.02s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"teniposide\n",
"42\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 62%|██████████████████████████████████████████████████▉ | 59/95 [07:53<06:38, 11.07s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"thalidomide\n",
"44\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 63%|███████████████████████████████████████████████████▊ | 60/95 [08:15<08:22, 14.36s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"pazopanib\n",
"17\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 64%|████████████████████████████████████████████████████▋ | 61/95 [08:23<07:10, 12.65s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"irinotecan\n",
"11\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 65%|█████████████████████████████████████████████████████▌ | 62/95 [08:29<05:47, 10.54s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"panobinostat\n",
"13\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 66%|██████████████████████████████████████████████████████▍ | 63/95 [08:36<05:01, 9.41s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"aminoglutethimide\n",
"11\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 67%|███████████████████████████████████████████████████████▏ | 64/95 [08:42<04:18, 8.35s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"chlorambucil\n",
"11\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 68%|████████████████████████████████████████████████████████ | 65/95 [08:47<03:46, 7.55s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"olaparib\n",
"38\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 69%|████████████████████████████████████████████████████████▉ | 66/95 [09:07<05:25, 11.21s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"doxorubicin\n",
"10\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 71%|█████████████████████████████████████████████████████████▊ | 67/95 [09:12<04:21, 9.34s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"sunitinib\n",
"12\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 72%|██████████████████████████████████████████████████████████▋ | 68/95 [09:18<03:45, 8.36s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"erlotinib\n",
"17\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 73%|███████████████████████████████████████████████████████████▌ | 69/95 [09:27<03:38, 8.41s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"vinorelbine\n",
"12\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 74%|████████████████████████████████████████████████████████████▍ | 70/95 [09:33<03:12, 7.69s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"lapatinib\n",
"16\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 75%|█████████████████████████████████████████████████████████████▎ | 71/95 [09:41<03:06, 7.79s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"mitoxantrone\n",
"8\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 76%|██████████████████████████████████████████████████████████████▏ | 72/95 [09:45<02:36, 6.79s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"crizotinib\n",
"17\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 77%|███████████████████████████████████████████████████████████████ | 73/95 [09:55<02:48, 7.64s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"midostaurin\n",
"11\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 78%|███████████████████████████████████████████████████████████████▊ | 74/95 [10:01<02:31, 7.20s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"thiotepa\n",
"11\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 79%|████████████████████████████████████████████████████████████████▋ | 75/95 [10:07<02:17, 6.87s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"alitretinoin\n",
"13\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 80%|█████████████████████████████████████████████████████████████████▌ | 76/95 [10:14<02:13, 7.00s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"anagrelide\n",
"11\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 81%|██████████████████████████████████████████████████████████████████▍ | 77/95 [10:21<02:06, 7.03s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"cytarabine\n",
"8\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 82%|███████████████████████████████████████████████████████████████████▎ | 78/95 [10:26<01:46, 6.26s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"flutamide\n",
"43\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 83%|████████████████████████████████████████████████████████████████████▏ | 79/95 [10:49<03:01, 11.37s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"temozolomide\n",
"41\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 84%|█████████████████████████████████████████████████████████████████████ | 80/95 [11:12<03:43, 14.89s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"busulfan\n",
"6\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 85%|█████████████████████████████████████████████████████████████████████▉ | 81/95 [11:15<02:39, 11.41s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"tamoxifen\n",
"45\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 86%|██████████████████████████████████████████████████████████████████████▊ | 82/95 [11:39<03:14, 14.99s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"topotecan\n",
"11\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 87%|███████████████████████████████████████████████████████████████████████▋ | 83/95 [11:45<02:26, 12.20s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"lenalidomide\n",
"43\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 88%|████████████████████████████████████████████████████████████████████████▌ | 84/95 [12:07<02:47, 15.26s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"gemcitabine\n",
"35\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 89%|█████████████████████████████████████████████████████████████████████████▎ | 85/95 [12:25<02:42, 16.23s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"vincristine\n",
"10\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 91%|██████████████████████████████████████████████████████████████████████████▏ | 86/95 [12:31<01:56, 12.97s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"floxuridine\n",
"10\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 92%|███████████████████████████████████████████████████████████████████████████ | 87/95 [12:36<01:25, 10.67s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"gefitinib\n",
"17\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 93%|███████████████████████████████████████████████████████████████████████████▉ | 88/95 [12:45<01:11, 10.18s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"imatinib\n",
"17\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 94%|████████████████████████████████████████████████████████████████████████████▊ | 89/95 [12:54<00:58, 9.81s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"leflunomide\n",
"11\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 95%|█████████████████████████████████████████████████████████████████████████████▋ | 90/95 [13:00<00:43, 8.64s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"vorinostat\n",
"48\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 96%|██████████████████████████████████████████████████████████████████████████████▌ | 91/95 [13:25<00:54, 13.70s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"streptozotocin\n",
"6\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 97%|███████████████████████████████████████████████████████████████████████████████▍ | 92/95 [13:29<00:31, 10.57s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"homoharringtonine\n",
"11\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 98%|████████████████████████████████████████████████████████████████████████████████▎ | 93/95 [13:35<00:18, 9.18s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"5-aminolevulinic-acid\n",
"6\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"\r",
" 99%|█████████████████████████████████████████████████████████████████████████████████▏| 94/95 [13:38<00:07, 7.39s/it]"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"medroxyprogesterone\n",
"6\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████████████████████████████████████████████████████████████████████████████| 95/95 [13:41<00:00, 8.65s/it]\n"
]
}
],
"source": [
"signatures_per_perturbagen = []\n",
"genes_significant_per_perturbagen = []\n",
"p_values_per_tissue_perturbagen = []\n",
"df = pd.DataFrame(columns=[\"Signature\",\"Perturbagen_name\", \"P-value\" ])\n",
"overlap_genes = []\n",
"\n",
"for drug in tqdm(drugs_ids):\n",
" print(drug)\n",
" sig_pertu_ids = sig_cell_info_filter_site[\"sig_id\"][sig_cell_info_filter_site[\"pert_iname\"] == drug]\n",
" sig_pertu_ids = sig_pertu_ids.drop_duplicates()\n",
" print (len(sig_pertu_ids))\n",
" signatures_per_perturbagen.append(sig_pertu_ids)\n",
" \n",
" for num_sig, sig in enumerate(sig_pertu_ids): \n",
" #print (num_sig, sig)\n",
" genes_significant = perturbagen_significant_genes(sig,drug)\n",
" gene_info = pd.read_csv(\"./GSE92742_Broad_LINCS_gene_info.txt\", sep=\"\\t\", dtype=str)\n",
" genes_sig_per_pertur = genes_significant.merge(gene_info, left_on=\"rid\", right_on=\"pr_gene_id\")\n",
" genes_sig_per_pertur = genes_sig_per_pertur[[\"perturbagen_name\",\"Signature_id\",\"pr_gene_id\",\"pr_gene_symbol\"]]\n",
" genes_significant_per_perturbagen.append(genes_sig_per_pertur)\n",
"\n",
" \n",
" overlap = genes_sig_per_pertur.merge(top100,left_on= \"pr_gene_symbol\",right_on=\"HUGO_gene_id\")\n",
" overlap = overlap[[\"perturbagen_name\",\"Signature_id\",\"HUGO_gene_id\",\"Sex-bias\"]]\n",
" overlap_genes.append(overlap)\n",
" df_all = pd.concat(overlap_genes)\n",
"\n",
" # parameters\n",
" population_total = 20000 \n",
" num_genes_change_expression_perturbagen = len(genes_sig_per_pertur) # Number of genes clue significant\n",
" num_genes_escap = len(top100) # GTEX tissue type n-genes\n",
" overlap_len = len(overlap) #overlap\n",
" #test \n",
" #resultado = hypergeom.sf(overlap - 1, population_total, num_genes_change_expression_perturbagen, num_genes_gtex_tissue)\n",
" result = hypergeom.sf(overlap_len - 1, population_total,num_genes_escap,num_genes_change_expression_perturbagen)\n",
" p_values_per_tissue_perturbagen.append(result)\n",
" #print(\"P-value:\", resultado, tissue, drug)\n",
" row = pd.DataFrame({\"P-value\": [result], \"Perturbagen_name\": [drug],\"Signature\":[sig]})\n",
" df = pd.concat([df, row])\n",
" \n",
" \n",
"\n",
" \n",
" "
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Signature | \n",
" Perturbagen_name | \n",
" P-value | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" CPC011_A375_6H:BRD-K69650333-003-11-6:10 | \n",
" idarubicin | \n",
" 0.764110 | \n",
"
\n",
" \n",
" 0 | \n",
" CPC011_A549_6H:BRD-K69650333-003-11-6:10 | \n",
" idarubicin | \n",
" 0.976826 | \n",
"
\n",
" \n",
" 0 | \n",
" CPC006_A673_6H:BRD-A71390734-001-01-7:0.08 | \n",
" idarubicin | \n",
" 1.000000 | \n",
"
\n",
" \n",
" 0 | \n",
" CPC006_AGS_6H:BRD-A71390734-001-01-7:0.08 | \n",
" idarubicin | \n",
" 1.000000 | \n",
"
\n",
" \n",
" 0 | \n",
" CPC006_CL34_6H:BRD-A71390734-001-01-7:0.08 | \n",
" idarubicin | \n",
" 1.000000 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 0 | \n",
" CPC020_A549_6H:BRD-K82216340-001-19-7:10 | \n",
" medroxyprogesterone | \n",
" 1.000000 | \n",
"
\n",
" \n",
" 0 | \n",
" CPC020_HA1E_6H:BRD-K82216340-001-19-7:10 | \n",
" medroxyprogesterone | \n",
" 1.000000 | \n",
"
\n",
" \n",
" 0 | \n",
" CPC020_HCC515_6H:BRD-K82216340-001-19-7:10 | \n",
" medroxyprogesterone | \n",
" 1.000000 | \n",
"
\n",
" \n",
" 0 | \n",
" CPC020_HT29_6H:BRD-K82216340-001-19-7:10 | \n",
" medroxyprogesterone | \n",
" 1.000000 | \n",
"
\n",
" \n",
" 0 | \n",
" CPC020_MCF7_6H:BRD-K82216340-001-19-7:10 | \n",
" medroxyprogesterone | \n",
" 1.000000 | \n",
"
\n",
" \n",
"
\n",
"
1663 rows × 3 columns
\n",
"
"
],
"text/plain": [
" Signature Perturbagen_name P-value\n",
"0 CPC011_A375_6H:BRD-K69650333-003-11-6:10 idarubicin 0.764110\n",
"0 CPC011_A549_6H:BRD-K69650333-003-11-6:10 idarubicin 0.976826\n",
"0 CPC006_A673_6H:BRD-A71390734-001-01-7:0.08 idarubicin 1.000000\n",
"0 CPC006_AGS_6H:BRD-A71390734-001-01-7:0.08 idarubicin 1.000000\n",
"0 CPC006_CL34_6H:BRD-A71390734-001-01-7:0.08 idarubicin 1.000000\n",
".. ... ... ...\n",
"0 CPC020_A549_6H:BRD-K82216340-001-19-7:10 medroxyprogesterone 1.000000\n",
"0 CPC020_HA1E_6H:BRD-K82216340-001-19-7:10 medroxyprogesterone 1.000000\n",
"0 CPC020_HCC515_6H:BRD-K82216340-001-19-7:10 medroxyprogesterone 1.000000\n",
"0 CPC020_HT29_6H:BRD-K82216340-001-19-7:10 medroxyprogesterone 1.000000\n",
"0 CPC020_MCF7_6H:BRD-K82216340-001-19-7:10 medroxyprogesterone 1.000000\n",
"\n",
"[1663 rows x 3 columns]"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" perturbagen_name | \n",
" Signature_id | \n",
" HUGO_gene_id | \n",
" Sex-bias | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" idarubicin | \n",
" CPC011_A375_6H:BRD-K69650333-003-11-6:10 | \n",
" WISP2 | \n",
" Male | \n",
"
\n",
" \n",
" 1 | \n",
" idarubicin | \n",
" CPC011_A375_6H:BRD-K69650333-003-11-6:10 | \n",
" PRSS16 | \n",
" Female | \n",
"
\n",
" \n",
" 2 | \n",
" idarubicin | \n",
" CPC011_A375_6H:BRD-K69650333-003-11-6:10 | \n",
" PPFIA3 | \n",
" Female | \n",
"
\n",
" \n",
" 0 | \n",
" idarubicin | \n",
" CPC011_A549_6H:BRD-K69650333-003-11-6:10 | \n",
" SALL1 | \n",
" Female | \n",
"
\n",
" \n",
" 1 | \n",
" idarubicin | \n",
" CPC011_A549_6H:BRD-K69650333-003-11-6:10 | \n",
" CACNA2D2 | \n",
" Female | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 0 | \n",
" 5-aminolevulinic-acid | \n",
" CPC020_HCC515_6H:BRD-K57631554-001-07-4:10 | \n",
" CDKN2A | \n",
" Female | \n",
"
\n",
" \n",
" 1 | \n",
" 5-aminolevulinic-acid | \n",
" CPC020_HCC515_6H:BRD-K57631554-001-07-4:10 | \n",
" F13A1 | \n",
" Male | \n",
"
\n",
" \n",
" 2 | \n",
" 5-aminolevulinic-acid | \n",
" CPC020_HCC515_6H:BRD-K57631554-001-07-4:10 | \n",
" WISP2 | \n",
" Male | \n",
"
\n",
" \n",
" 3 | \n",
" 5-aminolevulinic-acid | \n",
" CPC020_HCC515_6H:BRD-K57631554-001-07-4:10 | \n",
" SHH | \n",
" Female | \n",
"
\n",
" \n",
" 4 | \n",
" 5-aminolevulinic-acid | \n",
" CPC020_HCC515_6H:BRD-K57631554-001-07-4:10 | \n",
" NLRP2 | \n",
" Female | \n",
"
\n",
" \n",
"
\n",
"
2425 rows × 4 columns
\n",
"
"
],
"text/plain": [
" perturbagen_name Signature_id \\\n",
"0 idarubicin CPC011_A375_6H:BRD-K69650333-003-11-6:10 \n",
"1 idarubicin CPC011_A375_6H:BRD-K69650333-003-11-6:10 \n",
"2 idarubicin CPC011_A375_6H:BRD-K69650333-003-11-6:10 \n",
"0 idarubicin CPC011_A549_6H:BRD-K69650333-003-11-6:10 \n",
"1 idarubicin CPC011_A549_6H:BRD-K69650333-003-11-6:10 \n",
".. ... ... \n",
"0 5-aminolevulinic-acid CPC020_HCC515_6H:BRD-K57631554-001-07-4:10 \n",
"1 5-aminolevulinic-acid CPC020_HCC515_6H:BRD-K57631554-001-07-4:10 \n",
"2 5-aminolevulinic-acid CPC020_HCC515_6H:BRD-K57631554-001-07-4:10 \n",
"3 5-aminolevulinic-acid CPC020_HCC515_6H:BRD-K57631554-001-07-4:10 \n",
"4 5-aminolevulinic-acid CPC020_HCC515_6H:BRD-K57631554-001-07-4:10 \n",
"\n",
" HUGO_gene_id Sex-bias \n",
"0 WISP2 Male \n",
"1 PRSS16 Female \n",
"2 PPFIA3 Female \n",
"0 SALL1 Female \n",
"1 CACNA2D2 Female \n",
".. ... ... \n",
"0 CDKN2A Female \n",
"1 F13A1 Male \n",
"2 WISP2 Male \n",
"3 SHH Female \n",
"4 NLRP2 Female \n",
"\n",
"[2425 rows x 4 columns]"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_all"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [],
"source": [
"info_cell = sig_cell_info[[\"sig_id\",\"Signature_id\",\"cell_id\"]]\n",
"info_cell = info_cell.drop_duplicates()"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" sig_id | \n",
" Signature_id | \n",
" cell_id | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" CPC018_A375_6H:BRD-K06817181-001-01-5:10 | \n",
" 1,2,3,4,5,6-hexabromocyclohexane_A375_skin | \n",
" A375 | \n",
"
\n",
" \n",
" 1 | \n",
" CPC017_A375_6H:BRD-K74430258-001-01-2:10 | \n",
" 1,2-dichlorobenzene_A375_skin | \n",
" A375 | \n",
"
\n",
" \n",
" 2 | \n",
" CPC010_A375_6H:BRD-K32795028-001-10-9:10 | \n",
" 1-benzylimidazole_A375_skin | \n",
" A375 | \n",
"
\n",
" \n",
" 3 | \n",
" CPC018_A375_6H:BRD-A80928489-001-01-0:10 | \n",
" 1-monopalmitin_A375_skin | \n",
" A375 | \n",
"
\n",
" \n",
" 4 | \n",
" CPC018_A375_6H:BRD-K31491153-001-01-2:10 | \n",
" 1-phenylbiguanide_A375_skin | \n",
" A375 | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 258599 | \n",
" KDB008_SKL_96H:TRCN0000020197:-666 | \n",
" ZNF589_SKL_muscle | \n",
" SKL | \n",
"
\n",
" \n",
" 258600 | \n",
" KDB002_SKL_96H:TRCN0000236645:-666 | \n",
" ZNF629_SKL_muscle | \n",
" SKL | \n",
"
\n",
" \n",
" 258601 | \n",
" KDB001_SKL_96H:TRCN0000150938:-666 | \n",
" ZW10_SKL_muscle | \n",
" SKL | \n",
"
\n",
" \n",
" 258602 | \n",
" KDB007_SKL_96H:TRCN0000072242:-666 | \n",
" lacZ_SKL_muscle | \n",
" SKL | \n",
"
\n",
" \n",
" 258603 | \n",
" KDB008_SKL_96H:TRCN0000145620:-666 | \n",
" pgw_SKL_muscle | \n",
" SKL | \n",
"
\n",
" \n",
"
\n",
"
173142 rows × 3 columns
\n",
"
"
],
"text/plain": [
" sig_id \\\n",
"0 CPC018_A375_6H:BRD-K06817181-001-01-5:10 \n",
"1 CPC017_A375_6H:BRD-K74430258-001-01-2:10 \n",
"2 CPC010_A375_6H:BRD-K32795028-001-10-9:10 \n",
"3 CPC018_A375_6H:BRD-A80928489-001-01-0:10 \n",
"4 CPC018_A375_6H:BRD-K31491153-001-01-2:10 \n",
"... ... \n",
"258599 KDB008_SKL_96H:TRCN0000020197:-666 \n",
"258600 KDB002_SKL_96H:TRCN0000236645:-666 \n",
"258601 KDB001_SKL_96H:TRCN0000150938:-666 \n",
"258602 KDB007_SKL_96H:TRCN0000072242:-666 \n",
"258603 KDB008_SKL_96H:TRCN0000145620:-666 \n",
"\n",
" Signature_id cell_id \n",
"0 1,2,3,4,5,6-hexabromocyclohexane_A375_skin A375 \n",
"1 1,2-dichlorobenzene_A375_skin A375 \n",
"2 1-benzylimidazole_A375_skin A375 \n",
"3 1-monopalmitin_A375_skin A375 \n",
"4 1-phenylbiguanide_A375_skin A375 \n",
"... ... ... \n",
"258599 ZNF589_SKL_muscle SKL \n",
"258600 ZNF629_SKL_muscle SKL \n",
"258601 ZW10_SKL_muscle SKL \n",
"258602 lacZ_SKL_muscle SKL \n",
"258603 pgw_SKL_muscle SKL \n",
"\n",
"[173142 rows x 3 columns]"
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"info_cell"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [],
"source": [
"clue_tiss_sig_gtex_ = df.merge(info_cell, left_on=[\"Signature\"],right_on=[\"sig_id\"])\n",
"clue_tiss_sig_gtex_['Significant'] = clue_tiss_sig_gtex_.apply(lambda row: 'No' if row['P-value'] > 0.05 else 'Yes', axis=1)"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Signature | \n",
" Perturbagen_name | \n",
" P-value | \n",
" sig_id | \n",
" Signature_id | \n",
" cell_id | \n",
" Significant | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" CPC011_A375_6H:BRD-K69650333-003-11-6:10 | \n",
" idarubicin | \n",
" 0.764110 | \n",
" CPC011_A375_6H:BRD-K69650333-003-11-6:10 | \n",
" idarubicin_A375_skin | \n",
" A375 | \n",
" No | \n",
"
\n",
" \n",
" 1 | \n",
" CPC011_A549_6H:BRD-K69650333-003-11-6:10 | \n",
" idarubicin | \n",
" 0.976826 | \n",
" CPC011_A549_6H:BRD-K69650333-003-11-6:10 | \n",
" idarubicin_A549_lung | \n",
" A549 | \n",
" No | \n",
"
\n",
" \n",
" 2 | \n",
" CPC006_A673_6H:BRD-A71390734-001-01-7:0.08 | \n",
" idarubicin | \n",
" 1.000000 | \n",
" CPC006_A673_6H:BRD-A71390734-001-01-7:0.08 | \n",
" idarubicin_A673_bone | \n",
" A673 | \n",
" No | \n",
"
\n",
" \n",
" 3 | \n",
" CPC006_AGS_6H:BRD-A71390734-001-01-7:0.08 | \n",
" idarubicin | \n",
" 1.000000 | \n",
" CPC006_AGS_6H:BRD-A71390734-001-01-7:0.08 | \n",
" idarubicin_AGS_stomach | \n",
" AGS | \n",
" No | \n",
"
\n",
" \n",
" 4 | \n",
" CPC006_CL34_6H:BRD-A71390734-001-01-7:0.08 | \n",
" idarubicin | \n",
" 1.000000 | \n",
" CPC006_CL34_6H:BRD-A71390734-001-01-7:0.08 | \n",
" idarubicin_CL34_large intestine | \n",
" CL34 | \n",
" No | \n",
"
\n",
" \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
" ... | \n",
"
\n",
" \n",
" 1658 | \n",
" CPC020_A549_6H:BRD-K82216340-001-19-7:10 | \n",
" medroxyprogesterone | \n",
" 1.000000 | \n",
" CPC020_A549_6H:BRD-K82216340-001-19-7:10 | \n",
" medroxyprogesterone_A549_lung | \n",
" A549 | \n",
" No | \n",
"
\n",
" \n",
" 1659 | \n",
" CPC020_HA1E_6H:BRD-K82216340-001-19-7:10 | \n",
" medroxyprogesterone | \n",
" 1.000000 | \n",
" CPC020_HA1E_6H:BRD-K82216340-001-19-7:10 | \n",
" medroxyprogesterone_HA1E_kidney | \n",
" HA1E | \n",
" No | \n",
"
\n",
" \n",
" 1660 | \n",
" CPC020_HCC515_6H:BRD-K82216340-001-19-7:10 | \n",
" medroxyprogesterone | \n",
" 1.000000 | \n",
" CPC020_HCC515_6H:BRD-K82216340-001-19-7:10 | \n",
" medroxyprogesterone_HCC515_lung | \n",
" HCC515 | \n",
" No | \n",
"
\n",
" \n",
" 1661 | \n",
" CPC020_HT29_6H:BRD-K82216340-001-19-7:10 | \n",
" medroxyprogesterone | \n",
" 1.000000 | \n",
" CPC020_HT29_6H:BRD-K82216340-001-19-7:10 | \n",
" medroxyprogesterone_HT29_large intestine | \n",
" HT29 | \n",
" No | \n",
"
\n",
" \n",
" 1662 | \n",
" CPC020_MCF7_6H:BRD-K82216340-001-19-7:10 | \n",
" medroxyprogesterone | \n",
" 1.000000 | \n",
" CPC020_MCF7_6H:BRD-K82216340-001-19-7:10 | \n",
" medroxyprogesterone_MCF7_breast | \n",
" MCF7 | \n",
" No | \n",
"
\n",
" \n",
"
\n",
"
1663 rows × 7 columns
\n",
"
"
],
"text/plain": [
" Signature Perturbagen_name \\\n",
"0 CPC011_A375_6H:BRD-K69650333-003-11-6:10 idarubicin \n",
"1 CPC011_A549_6H:BRD-K69650333-003-11-6:10 idarubicin \n",
"2 CPC006_A673_6H:BRD-A71390734-001-01-7:0.08 idarubicin \n",
"3 CPC006_AGS_6H:BRD-A71390734-001-01-7:0.08 idarubicin \n",
"4 CPC006_CL34_6H:BRD-A71390734-001-01-7:0.08 idarubicin \n",
"... ... ... \n",
"1658 CPC020_A549_6H:BRD-K82216340-001-19-7:10 medroxyprogesterone \n",
"1659 CPC020_HA1E_6H:BRD-K82216340-001-19-7:10 medroxyprogesterone \n",
"1660 CPC020_HCC515_6H:BRD-K82216340-001-19-7:10 medroxyprogesterone \n",
"1661 CPC020_HT29_6H:BRD-K82216340-001-19-7:10 medroxyprogesterone \n",
"1662 CPC020_MCF7_6H:BRD-K82216340-001-19-7:10 medroxyprogesterone \n",
"\n",
" P-value sig_id \\\n",
"0 0.764110 CPC011_A375_6H:BRD-K69650333-003-11-6:10 \n",
"1 0.976826 CPC011_A549_6H:BRD-K69650333-003-11-6:10 \n",
"2 1.000000 CPC006_A673_6H:BRD-A71390734-001-01-7:0.08 \n",
"3 1.000000 CPC006_AGS_6H:BRD-A71390734-001-01-7:0.08 \n",
"4 1.000000 CPC006_CL34_6H:BRD-A71390734-001-01-7:0.08 \n",
"... ... ... \n",
"1658 1.000000 CPC020_A549_6H:BRD-K82216340-001-19-7:10 \n",
"1659 1.000000 CPC020_HA1E_6H:BRD-K82216340-001-19-7:10 \n",
"1660 1.000000 CPC020_HCC515_6H:BRD-K82216340-001-19-7:10 \n",
"1661 1.000000 CPC020_HT29_6H:BRD-K82216340-001-19-7:10 \n",
"1662 1.000000 CPC020_MCF7_6H:BRD-K82216340-001-19-7:10 \n",
"\n",
" Signature_id cell_id Significant \n",
"0 idarubicin_A375_skin A375 No \n",
"1 idarubicin_A549_lung A549 No \n",
"2 idarubicin_A673_bone A673 No \n",
"3 idarubicin_AGS_stomach AGS No \n",
"4 idarubicin_CL34_large intestine CL34 No \n",
"... ... ... ... \n",
"1658 medroxyprogesterone_A549_lung A549 No \n",
"1659 medroxyprogesterone_HA1E_kidney HA1E No \n",
"1660 medroxyprogesterone_HCC515_lung HCC515 No \n",
"1661 medroxyprogesterone_HT29_large intestine HT29 No \n",
"1662 medroxyprogesterone_MCF7_breast MCF7 No \n",
"\n",
"[1663 rows x 7 columns]"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"clue_tiss_sig_gtex_"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [],
"source": [
"data_sig = clue_tiss_sig_gtex_[clue_tiss_sig_gtex_[\"Significant\"]==\"Yes\"] "
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Signature | \n",
" Perturbagen_name | \n",
" P-value | \n",
" sig_id | \n",
" Signature_id | \n",
" cell_id | \n",
" Significant | \n",
"
\n",
" \n",
" \n",
" \n",
" 128 | \n",
" CPC013_HCC515_6H:BRD-K79254416-001-08-5:10 | \n",
" decitabine | \n",
" 0.014447 | \n",
" CPC013_HCC515_6H:BRD-K79254416-001-08-5:10 | \n",
" decitabine_HCC515_lung | \n",
" HCC515 | \n",
" Yes | \n",
"
\n",
" \n",
" 1365 | \n",
" CPC006_SKLU1_6H:BRD-K32107296-001-03-7:10 | \n",
" temozolomide | \n",
" 0.039682 | \n",
" CPC006_SKLU1_6H:BRD-K32107296-001-03-7:10 | \n",
" temozolomide_SKLU1_lung | \n",
" SKLU1 | \n",
" Yes | \n",
"
\n",
" \n",
" 1386 | \n",
" CPD001_MCF7_6H:BRD-K23204545-001-09-9:10 | \n",
" busulfan | \n",
" 0.031420 | \n",
" CPD001_MCF7_6H:BRD-K23204545-001-09-9:10 | \n",
" busulfan_MCF7_breast | \n",
" MCF7 | \n",
" Yes | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Signature Perturbagen_name P-value \\\n",
"128 CPC013_HCC515_6H:BRD-K79254416-001-08-5:10 decitabine 0.014447 \n",
"1365 CPC006_SKLU1_6H:BRD-K32107296-001-03-7:10 temozolomide 0.039682 \n",
"1386 CPD001_MCF7_6H:BRD-K23204545-001-09-9:10 busulfan 0.031420 \n",
"\n",
" sig_id Signature_id \\\n",
"128 CPC013_HCC515_6H:BRD-K79254416-001-08-5:10 decitabine_HCC515_lung \n",
"1365 CPC006_SKLU1_6H:BRD-K32107296-001-03-7:10 temozolomide_SKLU1_lung \n",
"1386 CPD001_MCF7_6H:BRD-K23204545-001-09-9:10 busulfan_MCF7_breast \n",
"\n",
" cell_id Significant \n",
"128 HCC515 Yes \n",
"1365 SKLU1 Yes \n",
"1386 MCF7 Yes "
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data_sig"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [],
"source": [
"df_genes_tiss_sb = data_sig.merge(df_all, left_on= [\"sig_id\",\"Perturbagen_name\"], right_on=[\"Signature_id\",\"perturbagen_name\"], how =\"inner\")"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Signature | \n",
" Perturbagen_name | \n",
" P-value | \n",
" sig_id | \n",
" Signature_id_x | \n",
" cell_id | \n",
" Significant | \n",
" perturbagen_name | \n",
" Signature_id_y | \n",
" HUGO_gene_id | \n",
" Sex-bias | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" CPC013_HCC515_6H:BRD-K79254416-001-08-5:10 | \n",
" decitabine | \n",
" 0.014447 | \n",
" CPC013_HCC515_6H:BRD-K79254416-001-08-5:10 | \n",
" decitabine_HCC515_lung | \n",
" HCC515 | \n",
" Yes | \n",
" decitabine | \n",
" CPC013_HCC515_6H:BRD-K79254416-001-08-5:10 | \n",
" HSD11B1 | \n",
" Male | \n",
"
\n",
" \n",
" 1 | \n",
" CPC013_HCC515_6H:BRD-K79254416-001-08-5:10 | \n",
" decitabine | \n",
" 0.014447 | \n",
" CPC013_HCC515_6H:BRD-K79254416-001-08-5:10 | \n",
" decitabine_HCC515_lung | \n",
" HCC515 | \n",
" Yes | \n",
" decitabine | \n",
" CPC013_HCC515_6H:BRD-K79254416-001-08-5:10 | \n",
" SALL1 | \n",
" Female | \n",
"
\n",
" \n",
" 2 | \n",
" CPC013_HCC515_6H:BRD-K79254416-001-08-5:10 | \n",
" decitabine | \n",
" 0.014447 | \n",
" CPC013_HCC515_6H:BRD-K79254416-001-08-5:10 | \n",
" decitabine_HCC515_lung | \n",
" HCC515 | \n",
" Yes | \n",
" decitabine | \n",
" CPC013_HCC515_6H:BRD-K79254416-001-08-5:10 | \n",
" HOXD11 | \n",
" No-dir | \n",
"
\n",
" \n",
" 3 | \n",
" CPC013_HCC515_6H:BRD-K79254416-001-08-5:10 | \n",
" decitabine | \n",
" 0.014447 | \n",
" CPC013_HCC515_6H:BRD-K79254416-001-08-5:10 | \n",
" decitabine_HCC515_lung | \n",
" HCC515 | \n",
" Yes | \n",
" decitabine | \n",
" CPC013_HCC515_6H:BRD-K79254416-001-08-5:10 | \n",
" PPFIA3 | \n",
" Female | \n",
"
\n",
" \n",
" 4 | \n",
" CPC013_HCC515_6H:BRD-K79254416-001-08-5:10 | \n",
" decitabine | \n",
" 0.014447 | \n",
" CPC013_HCC515_6H:BRD-K79254416-001-08-5:10 | \n",
" decitabine_HCC515_lung | \n",
" HCC515 | \n",
" Yes | \n",
" decitabine | \n",
" CPC013_HCC515_6H:BRD-K79254416-001-08-5:10 | \n",
" CD1E | \n",
" No-dir | \n",
"
\n",
" \n",
" 5 | \n",
" CPC006_SKLU1_6H:BRD-K32107296-001-03-7:10 | \n",
" temozolomide | \n",
" 0.039682 | \n",
" CPC006_SKLU1_6H:BRD-K32107296-001-03-7:10 | \n",
" temozolomide_SKLU1_lung | \n",
" SKLU1 | \n",
" Yes | \n",
" temozolomide | \n",
" CPC006_SKLU1_6H:BRD-K32107296-001-03-7:10 | \n",
" CDKN2A | \n",
" Female | \n",
"
\n",
" \n",
" 6 | \n",
" CPC006_SKLU1_6H:BRD-K32107296-001-03-7:10 | \n",
" temozolomide | \n",
" 0.039682 | \n",
" CPC006_SKLU1_6H:BRD-K32107296-001-03-7:10 | \n",
" temozolomide_SKLU1_lung | \n",
" SKLU1 | \n",
" Yes | \n",
" temozolomide | \n",
" CPC006_SKLU1_6H:BRD-K32107296-001-03-7:10 | \n",
" MYLK3 | \n",
" Male | \n",
"
\n",
" \n",
" 7 | \n",
" CPD001_MCF7_6H:BRD-K23204545-001-09-9:10 | \n",
" busulfan | \n",
" 0.031420 | \n",
" CPD001_MCF7_6H:BRD-K23204545-001-09-9:10 | \n",
" busulfan_MCF7_breast | \n",
" MCF7 | \n",
" Yes | \n",
" busulfan | \n",
" CPD001_MCF7_6H:BRD-K23204545-001-09-9:10 | \n",
" LMF1 | \n",
" Male | \n",
"
\n",
" \n",
" 8 | \n",
" CPD001_MCF7_6H:BRD-K23204545-001-09-9:10 | \n",
" busulfan | \n",
" 0.031420 | \n",
" CPD001_MCF7_6H:BRD-K23204545-001-09-9:10 | \n",
" busulfan_MCF7_breast | \n",
" MCF7 | \n",
" Yes | \n",
" busulfan | \n",
" CPD001_MCF7_6H:BRD-K23204545-001-09-9:10 | \n",
" DDX43 | \n",
" Male | \n",
"
\n",
" \n",
" 9 | \n",
" CPD001_MCF7_6H:BRD-K23204545-001-09-9:10 | \n",
" busulfan | \n",
" 0.031420 | \n",
" CPD001_MCF7_6H:BRD-K23204545-001-09-9:10 | \n",
" busulfan_MCF7_breast | \n",
" MCF7 | \n",
" Yes | \n",
" busulfan | \n",
" CPD001_MCF7_6H:BRD-K23204545-001-09-9:10 | \n",
" PRX | \n",
" Female | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Signature Perturbagen_name P-value \\\n",
"0 CPC013_HCC515_6H:BRD-K79254416-001-08-5:10 decitabine 0.014447 \n",
"1 CPC013_HCC515_6H:BRD-K79254416-001-08-5:10 decitabine 0.014447 \n",
"2 CPC013_HCC515_6H:BRD-K79254416-001-08-5:10 decitabine 0.014447 \n",
"3 CPC013_HCC515_6H:BRD-K79254416-001-08-5:10 decitabine 0.014447 \n",
"4 CPC013_HCC515_6H:BRD-K79254416-001-08-5:10 decitabine 0.014447 \n",
"5 CPC006_SKLU1_6H:BRD-K32107296-001-03-7:10 temozolomide 0.039682 \n",
"6 CPC006_SKLU1_6H:BRD-K32107296-001-03-7:10 temozolomide 0.039682 \n",
"7 CPD001_MCF7_6H:BRD-K23204545-001-09-9:10 busulfan 0.031420 \n",
"8 CPD001_MCF7_6H:BRD-K23204545-001-09-9:10 busulfan 0.031420 \n",
"9 CPD001_MCF7_6H:BRD-K23204545-001-09-9:10 busulfan 0.031420 \n",
"\n",
" sig_id Signature_id_x \\\n",
"0 CPC013_HCC515_6H:BRD-K79254416-001-08-5:10 decitabine_HCC515_lung \n",
"1 CPC013_HCC515_6H:BRD-K79254416-001-08-5:10 decitabine_HCC515_lung \n",
"2 CPC013_HCC515_6H:BRD-K79254416-001-08-5:10 decitabine_HCC515_lung \n",
"3 CPC013_HCC515_6H:BRD-K79254416-001-08-5:10 decitabine_HCC515_lung \n",
"4 CPC013_HCC515_6H:BRD-K79254416-001-08-5:10 decitabine_HCC515_lung \n",
"5 CPC006_SKLU1_6H:BRD-K32107296-001-03-7:10 temozolomide_SKLU1_lung \n",
"6 CPC006_SKLU1_6H:BRD-K32107296-001-03-7:10 temozolomide_SKLU1_lung \n",
"7 CPD001_MCF7_6H:BRD-K23204545-001-09-9:10 busulfan_MCF7_breast \n",
"8 CPD001_MCF7_6H:BRD-K23204545-001-09-9:10 busulfan_MCF7_breast \n",
"9 CPD001_MCF7_6H:BRD-K23204545-001-09-9:10 busulfan_MCF7_breast \n",
"\n",
" cell_id Significant perturbagen_name \\\n",
"0 HCC515 Yes decitabine \n",
"1 HCC515 Yes decitabine \n",
"2 HCC515 Yes decitabine \n",
"3 HCC515 Yes decitabine \n",
"4 HCC515 Yes decitabine \n",
"5 SKLU1 Yes temozolomide \n",
"6 SKLU1 Yes temozolomide \n",
"7 MCF7 Yes busulfan \n",
"8 MCF7 Yes busulfan \n",
"9 MCF7 Yes busulfan \n",
"\n",
" Signature_id_y HUGO_gene_id Sex-bias \n",
"0 CPC013_HCC515_6H:BRD-K79254416-001-08-5:10 HSD11B1 Male \n",
"1 CPC013_HCC515_6H:BRD-K79254416-001-08-5:10 SALL1 Female \n",
"2 CPC013_HCC515_6H:BRD-K79254416-001-08-5:10 HOXD11 No-dir \n",
"3 CPC013_HCC515_6H:BRD-K79254416-001-08-5:10 PPFIA3 Female \n",
"4 CPC013_HCC515_6H:BRD-K79254416-001-08-5:10 CD1E No-dir \n",
"5 CPC006_SKLU1_6H:BRD-K32107296-001-03-7:10 CDKN2A Female \n",
"6 CPC006_SKLU1_6H:BRD-K32107296-001-03-7:10 MYLK3 Male \n",
"7 CPD001_MCF7_6H:BRD-K23204545-001-09-9:10 LMF1 Male \n",
"8 CPD001_MCF7_6H:BRD-K23204545-001-09-9:10 DDX43 Male \n",
"9 CPD001_MCF7_6H:BRD-K23204545-001-09-9:10 PRX Female "
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_genes_tiss_sb"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {},
"outputs": [],
"source": [
"df_genes_tiss_sb_fil = df_genes_tiss_sb[[\"Signature_id_x\",\"Sex-bias\"]]"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Signature_id_x | \n",
" Sex-bias | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" decitabine_HCC515_lung | \n",
" Male | \n",
"
\n",
" \n",
" 1 | \n",
" decitabine_HCC515_lung | \n",
" Female | \n",
"
\n",
" \n",
" 2 | \n",
" decitabine_HCC515_lung | \n",
" No-dir | \n",
"
\n",
" \n",
" 3 | \n",
" decitabine_HCC515_lung | \n",
" Female | \n",
"
\n",
" \n",
" 4 | \n",
" decitabine_HCC515_lung | \n",
" No-dir | \n",
"
\n",
" \n",
" 5 | \n",
" temozolomide_SKLU1_lung | \n",
" Female | \n",
"
\n",
" \n",
" 6 | \n",
" temozolomide_SKLU1_lung | \n",
" Male | \n",
"
\n",
" \n",
" 7 | \n",
" busulfan_MCF7_breast | \n",
" Male | \n",
"
\n",
" \n",
" 8 | \n",
" busulfan_MCF7_breast | \n",
" Male | \n",
"
\n",
" \n",
" 9 | \n",
" busulfan_MCF7_breast | \n",
" Female | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Signature_id_x Sex-bias\n",
"0 decitabine_HCC515_lung Male\n",
"1 decitabine_HCC515_lung Female\n",
"2 decitabine_HCC515_lung No-dir\n",
"3 decitabine_HCC515_lung Female\n",
"4 decitabine_HCC515_lung No-dir\n",
"5 temozolomide_SKLU1_lung Female\n",
"6 temozolomide_SKLU1_lung Male\n",
"7 busulfan_MCF7_breast Male\n",
"8 busulfan_MCF7_breast Male\n",
"9 busulfan_MCF7_breast Female"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_genes_tiss_sb_fil"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {},
"outputs": [],
"source": [
"# Agrupar por ID y obtener la categoría con el mayor conteo para cada ID\n",
"max_category_by_id = df_genes_tiss_sb_fil.groupby('Signature_id_x')['Sex-bias'].apply(lambda x: x.value_counts().idxmax())\n",
"\n",
"# Convertir la serie resultante en un DataFrame\n",
"result_df = max_category_by_id.reset_index(name='Sex-bias')"
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {},
"outputs": [],
"source": [
"result_df[\"Plot\"]= [2,1,1]"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" | \n",
" Signature_id_x | \n",
" Sex-bias | \n",
" Plot | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
" busulfan_MCF7_breast | \n",
" Male | \n",
" 2 | \n",
"
\n",
" \n",
" 1 | \n",
" decitabine_HCC515_lung | \n",
" Female | \n",
" 1 | \n",
"
\n",
" \n",
" 2 | \n",
" temozolomide_SKLU1_lung | \n",
" Female | \n",
" 1 | \n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" Signature_id_x Sex-bias Plot\n",
"0 busulfan_MCF7_breast Male 2\n",
"1 decitabine_HCC515_lung Female 1\n",
"2 temozolomide_SKLU1_lung Female 1"
]
},
"execution_count": 40,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"result_df\n",
"#altero el valor porque tienen valores igualas las categorias por ello se decide que no hay direccion del sex-bias"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABZgAAAWYCAYAAAA7raPEAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAAsTAAALEwEAmpwYAACsgklEQVR4nOz9e5jde1rXed/frDpmJRioJnRCuokECwIJBBYNwgA2iiBKq4Oj8CAgoCA6cnhQPHNSGBmfEdCRg5xbWhlOKiJnHmjOiL0wTQLpLogEOiQQKAgkK3Vc+c0ftXab7+7K3tWbXbm/u3+v13Xl2klVpfKudO/ro3cvflW6rgsAAAAAAHhzHckOAAAAAADghcmBGQAAAACA58SBGQAAAACA58SBGQAAAACA58SBGQAAAACA52QuOwAyvehFL+rOnj2bnQEAAADAC9h4PP7truveNrsjgwMzvfaiF70oXvOa12RnANCgn/qpn4r3f//3z84AoDH2AYD9lFJ+Nbshi0dkAADsYzqdZicA0CD7AAA1B2Z6bXl5OTsBgEZdvHgxOwGABtkHAKg5MNNrDx48yE4AoFGXL1/OTgCgQfYBAGoOzPTa/Px8dgIAjTp16lR2AgANsg8AUHNgBgAAAADgOXFgptd2dnayEwBo1O3bt7MTAGiQfQCAmgMzvXb06NHsBAAadenSpewEABpkHwCg5sBMr21sbGQnANCoK1euZCcA0CD7AAA1B2YAgH0MBoPsBAAaZB8AoObATK8tLS1lJwDQqNXV1ewEABpkHwCg5sBMr3lEBgCPc/Xq1ewEABpkHwCg5sBMry0sLGQnANCoM2fOZCcA0CD7AAA1B2Z6reu67AQAGrW9vZ2dAECD7AMA1ByY6bWdnZ3sBAAadefOnewEABpkHwCg5sBMrw2Hw+wEABo1Go2yEwBokH0AgJoDM702mUyyEwBo1Hg8zk4AoEH2AQBqDsz02pEj/hUAYH/Ly8vZCQA0yD4AQM11jV5bWFjITgCgUWfPns1OAKBB9gEAag7M9Nrm5mZ2AgCNunbtWnYCAA2yDwBQc2Cm1xYXF7MTAGiUV6gBsB/7AAA1B2Z6bTqdZicA0Kh79+5lJwDQIPsAADUHZnptd3c3OwGARq2vr2cnANAg+wAANQdmem04HGYnANCo0WiUnQBAg+wDANQcmOm1yWSSnQBAo8bjcXYCAA2yDwBQc2Cm1waDQXYCAI06duxYdgIADbIPAFBzYKbX5ufnsxMAaNTp06ezEwBokH0AgJoDM722ubmZnQBAo9bW1rITAGiQfQCAmgMzvba4uJidAECjzp07l50AQIPsAwDUHJjptd3d3ewEABq1vr6enQBAg+wDANQcmOm16XSanQBAo+7evZudAECD7AMA1ByY6bXhcJidAECjRqNRdgIADbIPAFBzYKbXJpNJdgIAjRqPx9kJADTIPgBAzYGZXhsMBtkJADTqxIkT2QkANMg+AEDNgZlem5uby04AoFErKyvZCQA0yD4AQM2BmV7b2trKTgCgUdevX89OAKBB9gEAag7M9NrS0lJ2AgCNWl1dzU4AoEH2AQBqDsz02s7OTnYCAI26detWdgIADbIPAFBzYKbXptNpdgIAjbp//352AgANsg8AUHNgpteGw2F2AgCNGo1G2QkANMg+AEDNgZlem0wm2QkANGo8HmcnANAg+wAANQdmem1ubi47AYBGraysZCcA0CD7AAA1B2Z6bTAYZCcA0Kjjx49nJwDQIPsAADUHZnpta2srOwGARt24cSM7AYAG2QcAqDkw02tLS0vZCQA06vz589kJADTIPgBAzYGZXtve3s5OAKBRXqEGwH7sAwDUHJjptYcPH2YnANCojY2N7AQAGmQfAKDmwEyvDYfD7AQAGjUajbITAGiQfQCAmgMzvTaZTLITAGjUeDzOTgCgQfYBAGoOzPTa/Px8dgIAjTp58mR2AgANsg8AUHNgptdKKdkJADRqYWEhOwGABtkHAKg5MNNr29vb2QkANOrmzZvZCQA0yD4AQM2BmV5bXl7OTgCgURcuXMhOAKBB9gEAag7M9Nrm5mZ2AgCNWltby04AoEH2AQBqDswAAPuYTqfZCQA0yD4AQM2BmV7ziAwAHufixYvZCQA0yD4AQM2BmV578OBBdgIAjbp8+XJ2AgANsg8AUJvLDoBM8/Pz2QkANOT3Nn8vvvUXvjX+x+/+j9j8/c14699463iPF79HdhYADTl16lR2AgA0xYEZAOi9h93D+Jwf/pz4kp/5khiUQUx2JjEog/jq1311vMuL3iX+40f9x3jpH3ppdiYAAEBzPCJjH6WUl5dSbh7S5/6FUsrLn/Sf26pSSldKeaesP39nZyfrjwagIZ/2PZ8WX/Zfvyw2dzdjsjOJiIhpN40HOw/itb/x2njZV78sfuP+byRXAtCC27dvZycAQFOe2IG5lHKjlPIhT+rPa1XXde/Wdd2rD+vzl1JOlFK+vpTyG6WUe6WUtVLK33/k/dVBt5Tyd0opt0sp7/a4A3cp5RNKKT+xz9vf+J9pKeWDSyk/Ukr5vVLKjUP68p53R48ezU4AINkv/tYvxjdc/oZ4sLP/c/mn3TR+Z/N34nN/5HOfcBkALbp06VJ2AgA0xSuY3/J8aUQci4jzEfGHIuLPRsQv7/eBpZR/HBGfGRF/rOu6X/gD/rmTiPj6iPjsP+DneaI2NjayEwBI9i//67+Mnekz/1+07D7cjVf9/Ktisj15QlUAtOrKlSvZCQDQlCdyYC6lfFNEvDQivquUcr+U8ndLKX+0lPJTpZS7pZTXPvrYiFLKq0spXzh7//1SyneVUlZKKf+ulPL7pZT/Vko5+8jHv//sbb83++f7z97+frPf/9SPzadeXVtKWSylfFkp5dbsx5eVUhYf039+1nR39oiLP/vI+76xlPIVpZTvnf0ZP1lKefHs8/1uKeV1pZT3fOTjH33V7/Ls9/9uKeUXI+JlT/tzT5dSvqOU8lullF8ppXz6Af66XxYR/77rut/tuu5h13Wv67ru2/f5mr4wIv5aRHxQ13VrB/i8z6jrup/tuu6bIuJ/PNfPMfs7/muP/Lp65fTs1defWkr5pdl/Fl9eSimz9w1KKf+ilPLbs7+rvzX7eM8ZB+AZ/eSv/WTsdrvP+nHzg/m4/rvXn0ARAC0bDAbZCQDQlCdyfOu67uNKKR8YEX+t67ofKqW8fUT8fER8XER8X0T8iYj4jlLKu3Rd91uz3/bREfFhEfHbEfHTsx9/MyL+Suy9UvbzIuITSylvExHfHRGfHhHfHBF/MSK+u5TyTl3X/XTsvZo3SinzEfFDEfFTs8//jyLij0bEpYjoIuI7I+IfR8TnPNo++33fNfszPzQiPiAivrOU8t5d171+9mF/adb6CxHxPbPWz4uIvx0RXxARXxIRH7zPX83nRcS52Y9hRHzvI3/ukdmf+50R8f+JiDMR8UOllNd3Xff9z/DX/TMR8UWllLeOiJ/ouu6X9vmYL46I94i94/KvPcPnatFHxN4R/a0iYhx7f0ffFxGfHBEfHnv/eU4i4tse9wlKKZ8SEZ8SsfcdoF/96lfH+fPn48aNG7GxsRGj0SjG43GcPHkyFhYW4ubNm3HhwoVYW1uL6XQaFy9ejMuXL7/xu0ffvn07Ll26FFeuXInBYBCrq6tx9erVOHPmTGxvb8edO3fe+DmXl5fj7Nmzce3atTh79mzcu3cv1tfX3/j+Y8eOxenTp2NtbS3OnTsX6+vrcffu3Te+/8SJE7GyshLXr1+P1dXVuHXrVty/f/+N719ZWYnjx4/HjRs3fE2+Jl+Tr8nXdMCvaWf7YM/j77ouxq8Zx8aLNpr/mt4S/3PyNfmafE2+pla+prt378bly5ffor6mt8T/nHxNviZfk6/pSX9NfVa6rnsyf9DeK4efOjD/vYi40HXdxz3y/u+PvVfevrKU8uqI+MGu675o9r5/ERHv2nXdh89+/YqI+Kdd110qpXxcRHxa13Xv88jn+umI+Ddd133jI2/7yoh4SUT82a7rHpZSrs9+3/fM3v9hs99zdvZq6ld1XXdmdhj/tog43XXdw9nHfnNEvL7rus8vpXxjROx0XffJs/d9WkT8za7rzs9+fTEifrzruhP7/D38j9nHft/sfZ8SEZ87+3PfNyK+reu6N37L+lLKP4iI1a7rPvEZ/p6XI+L/GxF/ISLePSJ+dfZ1fu/s/V1E3IuIV3Zd92lP+71v/Lqf9vZPmDV/wNPe/sav5ZG3fUhEfG3XdWcf1/i0z9FFxB/puu6XZ/+5v6rruq/d78+dfewHdl33E7Nff2tE/FzXdV9cSvnhiPiWruv+zSMdPxgR8133+JelvfM7v3P3+te//nHvBqAHPuN7PyO+8jVfGTsPn/nQfGzhWPzWZ/9WLM0tPaEyAFr06le/Ol7+8pdnZwDQmFLKuOu6987uyJD1DOZ3iIi/OHvMwd1Syt3Ye2XwqUc+5jcf+fnGPr8+Nvv56dg7oj7qVyPi7Z/6RSnlr0fEyyPiY546Eu/z+3519ranOx0Rb3jk973J538zWvf93E/7vE95h4g4/bS/o38YEW/3mM8VERFd1210Xfd/dF03ioiViPjWiPi22Su9n/LREfG/lVK+4Jk+1yN2I2J+n7fPR8TBXvb1/PmNR37+IOr/Hjz6d/nozx9rYWHhecoC4IXq09/302Nw5Jn/z50XBgvxiZc+0XEZgDhz5syzfxAA9MiTPDA/+lLpN0TEN3Vdd+KRH8Ou6774OXzeW7F3jH3USyPi1yMiZq9A/qcR8ee6rvv9Z/h9L529bb/P/5LZIyve5PP/Ad2OvVdVP/p5n/KGiPiVp/0dHe+67k8f9JPPvt7/I/Yev/GHH3nXWkR8SET8zVLK3z/Ap/q1iHjpU887jogopRyNiJPxpsf9P4hJRBx95NcvfjN+7+3Ye4zIU17yuA981JN6BT8A7Tr3Nufis9//s+Po/NF93z9/ZD5efOzF8fkv//wnGwZAk7a3t7MTAKApT/LA/JsR8Y6zn78qIl5RSvmw2TdnWyqlvLyU8lz+p+DviYjVUsrHlFLmSikfFRHvGhH/pZTykth7Be/H7/ON7L45Iv5xKeVtSykviojPnXU93X+NvVfK/t1SyvzsMRKviIj/5zm0Pt23RsQ/KKW89exrf/SRFT8bEfdKKX9v9s0AB6WUC6WUl+3/qfaUUj6nlPKyUspCKWUpIj4jIu5GRPUciK7rfiH2jsyfXUr5zKd9jqVHf8Te38FmRPz92duGsfcc59fE7MBcSjky+9j5vV+WpVLKm/vy4MsR8ZGllKOllHeKiL/6Zvzeb42IzyilvH0p5URE/L2D/KadnSf9AmwAWvQFL/+C+KI//kVxfOF4HF84HguDhVg8shhLc0vxwWc/OF7zya+Jt1l+m2f/RAC8xbtz5052AgA05Yl8k7+ZfxYR/3cp5Z9HxBdGxJ+LiH8ee4feaewdVP/Gm/tJu65bL6V8RET8y4j4yoj45Yj4iK7rfnv2DN+3i4hvf+TFt7/add27zRreKva+2WDE3nOWv3Cfz789e+bzV0TEP4i9Vy5/fNd1r3tzW/fxBRHxVRHxK7H3SulviL2DcHRdN519Xf9i9v7F2DsS/+Nn+Zzd7PO8NPYebfHzEfFnuq67/yYf2HWvnT17+gdLKZsR8brYe/THxtM+9I9ExJ+JiC+NvW9cOI2IH4+Iv9T9z5cAf1BE/Mgjv2cjIn409h5NclBfGnvfwO83Z93/LvaO4AfxNRGxOvt9vx8R/2r2Z0+f6TcNh8M3Iw+At1SllPjMP/qZ8Tfe+2/Ed//Sd8eNuzfiyPRIfOTFj4yX/qGXPvsnAKA3RqNRdgIANOWJfZM/eJJKKR8eEV/Vdd3TH59S8U3+AHgc38QJgP3YBwD245v8wQvc7DEif3r2mJS3j4jPi4j/+Gy/78gR/woAsL/l5eXsBAAaZB8AoOa69gJUSvneUsr9fX78w+y2pyulfOBjWt/kkR1/0D8q9h458rsR8d8j4lrsPVf7GS0svLmPiQagL86ePZudAECD7AMA1J7kM5h5nnRd9+HZDQfVdd2PR8SxJ/DnPIi95ze/WTY3Nw+hBoC3BNeuXYu3e7u3y84AoDH2AQBqXsFMry0uLmYnANAor1ADYD/2AQBqDsz02nQ6zU4AoFH37t3LTgCgQfYBAGoOzPTa7u5udgIAjVpfX89OAKBB9gEAag7M9NpwOMxOAKBRo9EoOwGABtkHAKg5MNNrk8kkOwGARo3H4+wEABpkHwCg5sBMrw0Gg+wEABp17Nix7AQAGmQfAKDmwEyvzc/PZycA0KjTp09nJwDQIPsAADUHZnptc3MzOwGARq2trWUnANAg+wAANQdmem1xcTE7AYBGnTt3LjsBgAbZBwCoOTDTa7u7u9kJADRqfX09OwGABtkHAKg5MNNr0+k0OwGARt29ezc7AYAG2QcAqDkw02vD4TA7AYBGjUaj7AQAGmQfAKDmwEyvTSaT7AQAGjUej7MTAGiQfQCAmgMzvTYYDLITAGjUiRMnshMAaJB9AICaAzO9Njc3l50AQKNWVlayEwBokH0AgJoDM722tbWVnQBAo65fv56dAECD7AMA1ByY6bWlpaXsBAAatbq6mp0AQIPsAwDUHJjptZ2dnewEABp169at7AQAGmQfAKDmwEyvTafT7AQAGnX//v3sBAAaZB8AoObATK8Nh8PsBAAaNRqNshMAaJB9AICaAzO9NplMshMAaNR4PM5OAKBB9gEAag7M9Nrc3Fx2AgCNWllZyU4AoEH2AQBqDsz02mAwyE4AoFHHjx/PTgCgQfYBAGoOzPTa1tZWdgIAjbpx40Z2AgANsg8AUHNgpteWlpayEwBo1Pnz57MTAGiQfQCAmgMzvba9vZ2dAECjvEINgP3YBwCoOTDTaw8fPsxOAKBRGxsb2QkANMg+AEDNgZleGw6H2QkANGo0GmUnANAg+wAANQdmem0ymWQnANCo8XicnQBAg+wDANQcmOm1+fn57AQAGnXy5MnsBAAaZB8AoObATK+VUrITAGjUwsJCdgIADbIPAFBzYKbXtre3sxMAaNTNmzezEwBokH0AgJoDM722vLycnQBAoy5cuJCdAECD7AMA1ByY6bXNzc3sBAAatba2lp0AQIPsAwDUHJgBAPYxnU6zEwBokH0AgJoDM73mERkAPM7FixezEwBokH0AgJoDM7324MGD7AQAGnX58uXsBAAaZB8AoObATK/Nz89nJwDQqFOnTmUnANAg+wAANQdmAAAAAACeEwdmem1nZyc7AYBG3b59OzsBgAbZBwCoOTDTa0ePHs1OAKBRly5dyk4AoEH2AQBqDsz02sbGRnYCAI26cuVKdgIADbIPAFBzYAYA2MdgMMhOAKBB9gEAag7M9NrS0lJ2AgCNWl1dzU4AoEH2AQBqDsz0mkdkAPA4V69ezU4AoEH2AQBqDsz02sLCQnYCAI06c+ZMdgIADbIPAFBzYKbXuq7LTgCgUdvb29kJADTIPgBAzYGZXtvZ2clOAKBRd+7cyU4AoEH2AQBqDsz02nA4zE4AoFGj0Sg7AYAG2QcAqDkw02uTySQ7AYBGjcfj7AQAGmQfAKDmwEyvHTniXwEA9re8vJydAECD7AMA1FzX6LWFhYXsBAAadfbs2ewEABpkHwCg5sBMr21ubmYnANCoa9euZScA0CD7AAA1B2Z6bXFxMTsBgEZ5hRoA+7EPAFBzYKbXptNpdgIAjbp37152AgANsg8AUHNgptd2d3ezEwBo1Pr6enYCAA2yDwBQc2Cm14bDYXYCAI0ajUbZCQA0yD4AQM2BmV6bTCbZCQA0ajweZycA0CD7AAA1B2Z6bTAYZCcA0Khjx45lJwDQIPsAADUHZnptfn4+OwGARp0+fTo7AYAG2QcAqDkw02ubm5vZCQA0am1tLTsBgAbZBwCoOTDTa4uLi9kJADTq3Llz2QkANMg+AEDNgZle293dzU4AoFHr6+vZCQA0yD4AQM2BmV6bTqfZCQA06u7du9kJADTIPgBAzYGZXhsOh9kJADRqNBplJwDQIPsAADUHZnptMplkJwDQqPF4nJ0AQIPsAwDUHJjptcFgkJ0AQKNOnDiRnQBAg+wDANQcmOm1ubm57AQAGrWyspKdAECD7AMA1ByY6bWtra3sBAAadf369ewEABpkHwCg5sBMry0tLWUnANCo1dXV7AQAGmQfAKDmwEyv7ezsZCcA0Khbt25lJwDQIPsAADUHZnptOp1mJwDQqPv372cnANAg+wAANQdmem04HGYnANCo0WiUnQBAg+wDANQcmOm1yWSSnQBAo8bjcXYCAA2yDwBQc2Cm1+bm5rITAGjUyspKdgIADbIPAFBzYKbXBoNBdgIAjTp+/Hh2AgANsg8AUHNgpte2trayEwBo1I0bN7ITAGiQfQCAmgMzvba0tJSdAECjzp8/n50AQIPsAwDUHJjpte3t7ewEABrlFWoA7Mc+AEDNgZlee/jwYXYCAI3a2NjITgCgQfYBAGoOzPTacDjMTgCgUaPRKDsBgAbZBwCoOTDTa5PJJDsBgEaNx+PsBAAaZB8AoObATK/Nz89nJwDQqJMnT2YnANAg+wAANQdmeq2Ukp0AQKMWFhayEwBokH0AgJoDM722vb2dnQBAo27evJmdAECD7AMA1ByY6bXl5eXsBAAadeHChewEABpkHwCg5sBMr21ubmYnANCotbW17AQAGmQfAKDmwAwAsI/pdJqdAECD7AMA1ByY6TWPyADgcS5evJidAECD7AMA1ByY6bUHDx5kJwDQqMuXL2cnANAg+wAANQdmem1+fj47AYBGnTp1KjsBgAbZBwCoOTADAAAAAPCcODDTazs7O9kJADTq9u3b2QkANMg+AEDNgZleO3r0aHYCAI26dOlSdgIADbIPAFBzYKbXNjY2shMAaNSVK1eyEwBokH0AgJoDMwDAPgaDQXYCAA2yDwBQc2Cm15aWlrITAGjU6upqdgIADbIPAFBzYKbXPCIDgMe5evVqdgIADbIPAFBzYKbXFhYWshMAaNSZM2eyEwBokH0AgJoDM73WdV12AgCN2t7ezk4AoEH2AQBqDsz02s7OTnYCAI26c+dOdgIADbIPAFBzYKbXhsNhdgIAjRqNRtkJADTIPgBAzYGZXptMJtkJADRqPB5nJwDQIPsAADUHZnrtyBH/CgCwv+Xl5ewEABpkHwCg5rpGry0sLGQnANCos2fPZicA0CD7AAA1B2Z6bXNzMzsBgEZdu3YtOwGABtkHAKg5MNNri4uL2QkANMor1ADYj30AgJoDM702nU6zEwBo1L1797ITAGiQfQCAmgMzvba7u5udAECj1tfXsxMAaJB9AICaAzO9NhwOsxMAaNRoNMpOAKBB9gEAag7M9NpkMslOAKBR4/E4OwGABtkHAKg5MNNrg8EgOwGARh07diw7AYAG2QcAqDkw02vz8/PZCQA06vTp09kJADTIPgBAzYGZXtvc3MxOAKBRa2tr2QkANMg+AEDNgZleW1xczE4AoFHnzp3LTgCgQfYBAGoOzPTa7u5udgIAjVpfX89OAKBB9gEAag7M9Np0Os1OAKBRd+/ezU4AoEH2AQBqDsz02nA4zE4AoFGj0Sg7AYAG2QcAqDkw02uTySQ7AYBGjcfj7AQAGmQfAKDmwEyvDQaD7AQAGnXixInsBAAaZB8AoObATK/Nzc1lJwDQqJWVlewEABpkHwCg5sBMr21tbWUnANCo69evZycA0CD7AAA1B2Z6bWlpKTsBgEatrq5mJwDQIPsAADUHZnptZ2cnOwGARt26dSs7AYAG2QcAqDkw02vT6TQ7AYBG3b9/PzsBgAbZBwCoOTDTa8PhMDsBgEaNRqPsBAAaZB8AoObATK9NJpPsBAAaNR6PsxMAaJB9AICaAzO9Njc3l50AQKNWVlayEwBokH0AgJoDM702GAyyEwBo1PHjx7MTAGiQfQCAmgMzvba1tZWdAECjbty4kZ0AQIPsAwDUHJjptaWlpewEABp1/vz57AQAGmQfAKDmwEyvbW9vZycA0CivUANgP/YBAGoOzPTaw4cPsxMAaNTGxkZ2AgANsg8AUHNgpteGw2F2AgCNGo1G2QkANMg+AEDNgZlem0wm2QkANGo8HmcnANAg+wAANQdmem1+fj47AYBGnTx5MjsBgAbZBwCoOTDTa6WU7AQAGrWwsJCdAECD7AMA1ByY6bXt7e3sBAAadfPmzewEABpkHwCg5sBMry0vL2cnANCoCxcuZCcA0CD7AAA1B2Z6bXNzMzsBgEatra1lJwDQIPsAADUHZgCAfUyn0+wEABpkHwCg5sBMr3lEBgCPc/HixewEABpkHwCg5sBMrz148CA7AYBGXb58OTsBgAbZBwCoOTDTa/Pz89kJADTq1KlT2QkANMg+AEDNgRkAAAAAgOfEgZle29nZyU4AoFG3b9/OTgCgQfYBAGoOzPTa0aNHsxMAaNSlS5eyEwBokH0AgJoDM722sbGRnQBAo65cuZKdAECD7AMA1ByYAQD2MRgMshMAaJB9AICaAzO9trS0lJ0AQKNWV1ezEwBokH0AgJoDM73mERkAPM7Vq1ezEwBokH0AgJoDM722sLCQnQBAo86cOZOdAECD7AMA1ByY6bWu67ITAGjU9vZ2dgIADbIPAFBzYKbXdnZ2shMAaNSdO3eyEwBokH0AgJoDM702HA6zEwBo1Gg0yk4AoEH2AQBqDsz02mQyyU4AoFHj8Tg7AYAG2QcAqDkw02tHjvhXAID9LS8vZycA0CD7AAA11zV6bWFhITsBgEadPXs2OwGABtkHAKg5MNNrm5ub2QkANOratWvZCQA0yD4AQM2BmV5bXFzMTgCgUV6hBsB+7AMA1ByY6bXpdJqdAECj7t27l50AQIPsAwDUHJjptd3d3ewEABq1vr6enQBAg+wDANQcmOm14XCYnQBAo0ajUXYCAA2yDwBQc2Cm1yaTSXYCAI0aj8fZCQA0yD4AQM2BmV4bDAbZCQA06tixY9kJADTIPgBAzYGZXpufn89OAKBRp0+fzk4AoEH2AQBqDsz02ubmZnYCAI1aW1vLTgCgQfYBAGoOzPTa4uJidgIAjTp37lx2AgANsg8AUHNgptd2d3ezEwBo1Pr6enYCAA2yDwBQc2Cm16bTaXYCAI26e/dudgIADbIPAFBzYKbXhsNhdgIAjRqNRtkJADTIPgBAzYGZXptMJtkJADRqPB5nJwDQIPsAADUHZnptMBhkJwDQqBMnTmQnANAg+wAANQdmem1ubi47AYBGraysZCcA0CD7AAA1B2Z6bWtrKzsBgEZdv349OwGABtkHAKg5MNNrS0tL2QkANGp1dTU7AYAG2QcAqDkw02s7OzvZCQA06tatW9kJADTIPgBAzYGZXptOp9kJADTq/v372QkANMg+AEDNgZleGw6H2QkANGo0GmUnANAg+wAANQdmem0ymWQnANCo8XicnQBAg+wDANQcmOm1ubm57AQAGrWyspKdAECD7AMA1ByY6bXBYJCdAECjjh8/np0AQIPsAwDUHJjpta2trewEABp148aN7AQAGmQfAKDmwEyvLS0tZScA0Kjz589nJwDQIPsAADUHZnpte3s7OwGARnmFGgD7sQ8AUHNgptcePnyYnQBAozY2NrITAGiQfQCAmgMzvTYcDrMTAGjUaDTKTgCgQfYBAGoOzPTaZDLJTgCgUePxODsBgAbZBwCoOTDTa/Pz89kJADTq5MmT2QkANMg+AEDNgZleK6VkJwDQqIWFhewEABpkHwCg5sBMr21vb2cnANComzdvZicA0CD7AAA1B2Z6bXl5OTsBgEZduHAhOwGABtkHAKg5MNNrm5ub2QkANGptbS07AYAG2QcAqDkwAwDsYzqdZicA0CD7AAA1B2Z6zSMyAHicixcvZicA0CD7AAA1B2Z67cGDB9kJADTq8uXL2QkANMg+AEDNgZlem5+fz04AoFGnTp3KTgCgQfYBAGoOzAAAAAAAPCcOzPTazs5OdgIAjbp9+3Z2AgANsg8AUHNgpteOHj2anQBAoy5dupSdAECD7AMA1ByY6bWNjY3sBAAadeXKlewEABpkHwCg5sAMALCPwWCQnQBAg+wDANQcmOm1paWl7AQAGrW6upqdAECD7AMA1ByY6TWPyADgca5evZqdAECD7AMA1ByY6bWFhYXsBAAadebMmewEABpkHwCg5sBMr3Vdl50AQKO2t7ezEwBokH0AgJoDM722s7OTnQBAo+7cuZOdAECD7AMA1ByY6bXhcJidAECjRqNRdgIADbIPAFBzYKbXJpNJdgIAjRqPx9kJADTIPgBAzYGZXjtyxL8CAOxveXk5OwGABtkHAKi5rtFrCwsL2QkANOrs2bPZCQA0yD4AQM2BmV7b3NzMTgCgUdeuXctOAKBB9gEAag7M9Nri4mJ2AgCN8go1APZjHwCg5sBMr02n0+wEABp179697AQAGmQfAKDmwEyv7e7uZicA0Kj19fXsBAAaZB8AoObATK8Nh8PsBAAaNRqNshMAaJB9AICaAzO9NplMshMAaNR4PM5OAKBB9gEAag7M9NpgMMhOAKBRx44dy04AoEH2AQBqDsz02vz8fHYCAI06ffp0dgIADbIPAFBzYKbXNjc3sxMAaNTa2lp2AgANsg8AUHNgptcWFxezEwBo1Llz57ITAGiQfQCAmgMzvba7u5udAECj1tfXsxMAaJB9AICaAzO9Np1OsxMAaNTdu3ezEwBokH0AgJoDM702HA6zEwBo1Gg0yk4AoEH2AQBqDsz02mQyyU4AoFHj8Tg7AYAG2QcAqDkw02uDwSA7AYBGnThxIjsBgAbZBwCoOTDTa3Nzc9kJADRqZWUlOwGABtkHAKg5MNNrW1tb2QkANOr69evZCQA0yD4AQM2BmV5bWlrKTgCgUaurq9kJADTIPgBAzYGZXtvZ2clOAKBRt27dyk4AoEH2AQBqDsz02nQ6zU4AoFH379/PTgCgQfYBAGoOzPTacDjMTgCgUaPRKDsBgAbZBwCoOTDTa5PJJDsBgEaNx+PsBAAaZB8AoObATK/Nzc1lJwDQqJWVlewEABpkHwCg5sBMrw0Gg+wEABp1/Pjx7AQAGmQfAKDmwEyvbW1tZScA0KgbN25kJwDQIPsAADUHZnptaWkpOwGARp0/fz47AYAG2QcAqDkw02vb29vZCQA0yivUANiPfQCAmgMzvfbw4cPsBAAatbGxkZ0AQIPsAwDUHJjpteFwmJ0AQKNGo1F2AgANsg8AUHNgptcmk0l2AgCNGo/H2QkANMg+AEDNgZlem5+fz04AoFEnT57MTgCgQfYBAGoOzPRaKSU7AYBGLSwsZCcA0CD7AAA1B2Z6bXt7OzsBgEbdvHkzOwGABtkHAKg5MNNry8vL2QkANOrChQvZCQA0yD4AQM2BmV7b3NzMTgCgUWtra9kJADTIPgBAzYEZAGAf0+k0OwGABtkHAKg5MNNrHpEBwONcvHgxOwGABtkHAKg5MNNrDx48yE4AoFGXL1/OTgCgQfYBAGoOzPTa/Px8dgIAjTp16lR2AgANsg8AUHNgBgAAAADgOXFgptd2dnayEwBo1O3bt7MTAGiQfQCAmgMzvXb06NHsBAAadenSpewEABpkHwCg5sBMr21sbGQnANCoK1euZCcA0CD7AAA1B2YAgH0MBoPsBAAaZB8AoObATK8tLS1lJwDQqNXV1ewEABpkHwCg5sBMr3lEBgCPc/Xq1ewEABpkHwCg5sBMry0sLGQnANCoM2fOZCcA0CD7AAA1B2Z6reu67AQAGrW9vZ2dAECD7AMA1ByY6bWdnZ3sBAAadefOnewEABpkHwCg5sBMrw2Hw+wEABo1Go2yEwBokH0AgJoDM702mUyyEwBo1Hg8zk4AoEH2AQBqDsz02pEj/hUAYH/Ly8vZCQA0yD4AQM11jV5bWFjITgCgUWfPns1OAKBB9gEAag7M9Nrm5mZ2AgCNunbtWnYCAA2yDwBQc2Cm1xYXF7MTAGiUV6gBsB/7AAA1B2Z6bTqdZicA0Kh79+5lJwDQIPsAADUHZnptd3c3OwGARq2vr2cnANAg+wAANQdmem04HGYnANCo0WiUnQBAg+wDANQcmOm1yWSSnQBAo8bjcXYCAA2yDwBQc2Cm1waDQXYCAI06duxYdgIADbIPAFBzYKbX5ufnsxMAaNTp06ezEwBokH0AgJoDM722ubmZnQBAo9bW1rITAGiQfQCAmgMzvba4uJidAECjzp07l50AQIPsAwDUHJjptd3d3ewEABq1vr6enQBAg+wDANQcmOm16XSanQBAo+7evZudAECD7AMA1ByY6bXhcJidAECjRqNRdgIADbIPAFBzYKbXJpNJdgIAjRqPx9kJADTIPgBAzYGZXhsMBtkJADTqxIkT2QkANMg+AEDNgZlem5uby04AoFErKyvZCQA0yD4AQM2BmV7b2trKTgCgUdevX89OAKBB9gEAag7M9NrS0lJ2AgCNWl1dzU4AoEH2AQBqDsz02s7OTnYCAI26detWdgIADbIPAFBzYKbXptNpdgIAjbp//352AgANsg8AUHNgpteGw2F2AgCNGo1G2QkANMg+AEDNgZlem0wm2QkANGo8HmcnANAg+wAANQdmem1ubi47AYBGraysZCcA0CD7AAA1B2Z6bTAYZCcA0Kjjx49nJwDQIPsAADUHZnpta2srOwGARt24cSM7AYAG2QcAqDkw02tLS0vZCQA06vz589kJADTIPgBAzYGZXtve3s5OAKBRXqEGwH7sAwDUHJjptYcPH2YnANCojY2N7AQAGmQfAKDmwEyvDYfD7AQAGjUajbITAGiQfQCAmgMzvTaZTLITAGjUeDzOTgCgQfYBAGoOzPTa/Px8dgIAjTp58mR2AgANsg8AUHNgptdKKdkJADRqYWEhOwGABtkHAKg5MNNr29vb2QkANOrmzZvZCQA0yD4AQM2BmV5bXl7OTgCgURcuXMhOAKBB9gEAag7M9Nrm5mZ2AgCNWltby04AoEH2AQBqDswAAPuYTqfZCQA0yD4AQM2BmV7ziAwAHufixYvZCQA0yD4AQM2BmV578OBBdgIAjbp8+XJ2AgANsg8AUHNgptfm5+ezEwBo1KlTp7ITAGiQfQCAmgMzAAAAAADPiQMzvbazs5OdAECjbt++nZ0AQIPsAwDUHJjptaNHj2YnANCoS5cuZScA0CD7AAA1B2Z6bWNjIzsBgEZduXIlOwGABtkHAKg5MAMA7GMwGGQnANAg+wAANQdmem1paSk7AYBGra6uZicA0CD7AAA1B2Z6zSMyAHicq1evZicA0CD7AAA1B2Z6bWFhITsBgEadOXMmOwGABtkHAKg5MNNrXddlJwDQqO3t7ewEABpkHwCg5sBMr+3s7GQnANCoO3fuZCcA0CD7AAA1B2Z6bTgcZicA0KjRaJSdAECD7AMA1ByY6bXJZJKdAECjxuNxdgIADbIPAFBzYKbXjhzxrwAA+1teXs5OAKBB9gEAaq5r9NrCwkJ2AgCNOnv2bHYCAA2yDwBQc2Cm1zY3N7MTAGjUtWvXshMAaJB9AICaAzO9tri4mJ0AQKO8Qg2A/dgHAKg5MNNr0+k0OwGARt27dy87AYAG2QcAqDkw02u7u7vZCQA0an19PTsBgAbZBwCoOTDTa8PhMDsBgEaNRqPsBAAaZB8AoObATK9NJpPsBAAaNR6PsxMAaJB9AICaAzO9NhgMshMAaNSxY8eyEwBokH0AgJoDM702Pz+fnQBAo06fPp2dAECD7AMA1ByY6bXNzc3sBAAatba2lp0AQIPsAwDUHJjptcXFxewEABp17ty57AQAGmQfAKDmwEyv7e7uZicA0Kj19fXsBAAaZB8AoObATK9Np9PsBAAadffu3ewEABpkHwCg5sBMrw2Hw+wEABo1Go2yEwBokH0AgJoDM702mUyyEwBo1Hg8zk4AoEH2AQBqDsz02mAwyE4AoFEnTpzITgCgQfYBAGoOzPTa3NxcdgIAjVpZWclOAKBB9gEAag7M9NrW1lZ2AgCNun79enYCAA2yDwBQc2Cm15aWlrITAGjU6upqdgIADbIPAFBzYKbXdnZ2shMAaNStW7eyEwBokH0AgJoDM702nU6zEwBo1P3797MTAGiQfQCAmgMzvTYcDrMTAGjUaDTKTgCgQfYBAGoOzPTaZDLJTgCgUePxODsBgAbZBwCoOTDTa3Nzc9kJADRqZWUlOwGABtkHAKg5MNNrg8EgOwGARh0/fjw7AYAG2QcAqDkw02tbW1vZCQA06saNG9kJADTIPgBAzYGZXltaWspOAKBR58+fz04AoEH2AQBqDsz02vb2dnYCAI3yCjUA9mMfAKDmwEyvPXz4MDsBgEZtbGxkJwDQIPsAADUHZnptOBxmJwDQqNFolJ0AQIPsAwDUHJjptclkkp0AQKPG43F2AgANsg8AUHNgptfm5+ezEwBo1MmTJ7MTAGiQfQCAmgMzvVZKyU4AoFELCwvZCQA0yD4AQM2BmV7b3t7OTgCgUTdv3sxOAKBB9gEAag7M9Nry8nJ2AgCNunDhQnYCAA2yDwBQc2Cm1zY3N7MTAGjU2tpadgIADbIPAFBzYAYA2Md0Os1OAKBB9gEAag7M9JpHZADwOBcvXsxOAKBB9gEAag7M9NqDBw+yEwBo1OXLl7MTAGiQfQCAmgMzvTY/P5+dAECjTp06lZ0AQIPsAwDUHJgBAAAAAHhOHJjptZ2dnewEABp1+/bt7AQAGmQfAKDmwEyvHT16NDsBgEZdunQpOwGABtkHAKg5MNNrGxsb2QkANOrKlSvZCQA0yD4AQM2BGQBgH4PBIDsBgAbZBwCoOTDTa0tLS9kJADRqdXU1OwGABtkHAKg5MNNrHpEBwONcvXo1OwGABtkHAKg5MNNrCwsL2QkANOrMmTPZCQA0yD4AQM2BmV7rui47AYBGbW9vZycA0CD7AAA1B2Z6bWdnJzsBgEbduXMnOwGABtkHAKg5MNNrw+EwOwGARo1Go+wEABpkHwCg5sBMr00mk+wEABo1Ho+zEwBokH0AgJoDM7125Ih/BQDY3/LycnYCAA2yDwBQc12j1xYWFrITAGjU2bNnsxMAaJB9AICaAzO9trm5mZ0AQKOuXbuWnQBAg+wDANQcmOm1xcXF7AQAGuUVagDsxz4AQM2BmV6bTqfZCQA06t69e9kJADTIPgBAzYGZXtvd3c1OAKBR6+vr2QkANMg+AEDNgZleGw6H2QkANGo0GmUnANAg+wAANQdmem0ymWQnANCo8XicnQBAg+wDANQcmOm1wWCQnQBAo44dO5adAECD7AMA1ByY6bX5+fnsBAAadfr06ewEABpkHwCg5sBMr21ubmYnANCotbW17AQAGmQfAKDmwEyvLS4uZicA0Khz585lJwDQIPsAADUHZnptd3c3OwGARq2vr2cnANAg+wAANQdmem06nWYnANCou3fvZicA0CD7AAA1B2Z6bTgcZicA0KjRaJSdAECD7AMA1ByY6bXJZJKdAECjxuNxdgIADbIPAFBzYKbXBoNBdgIAjTpx4kR2AgANsg8AUHNgptfm5uayEwBo1MrKSnYCAA2yDwBQc2Cm17a2trITAGjU9evXsxMAaJB9AICaAzO9trS0lJ0AQKNWV1ezEwBokH0AgJoDM722s7OTnQBAo27dupWdAECD7AMA1ByY6bXpdJqdAECj7t+/n50AQIPsAwDUHJjpteFwmJ0AQKNGo1F2AgANsg8AUHNgptcmk0l2AgCNGo/H2QkANMg+AEDNgZlem5uby04AoFErKyvZCQA0yD4AQM2BmV4bDAbZCQA06vjx49kJADTIPgBAzYGZXtva2spOAKBRN27cyE4AoEH2AQBqDsz02tLSUnYCAI06f/58dgIADbIPAFBzYKbXtre3sxMAaJRXqAGwH/sAADUHZnrt4cOH2QkANGpjYyM7AYAG2QcAqDkw02vD4TA7AYBGjUaj7AQAGmQfAKDmwEyvTSaT7AQAGjUej7MTAGiQfQCAmgMzvTY/P5+dAECjTp48mZ0AQIPsAwDUHJjptVJKdgIAjVpYWMhOAKBB9gEAag7M9Nr29nZ2AgCNunnzZnYCAA2yDwBQc2Cm15aXl7MTAGjUhQsXshMAaJB9AICaAzO9trm5mZ0AQKPW1tayEwBokH0AgJoDMwDAPqbTaXYCAA2yDwBQc2Cm1zwiA4DHuXjxYnYCAA2yDwBQc2Cm1x48eJCdAECjLl++nJ0AQIPsAwDUHJjptfn5+ewEABp16tSp7AQAGmQfAKDmwAwAAAAAwHPiwEyv7ezsZCcA0Kjbt29nJwDQIPsAADUHZnrt6NGj2QkANOrSpUvZCQA0yD4AQM2BmV7b2NjITgCgUVeuXMlOAKBB9gEAag7MAAD7GAwG2QkANMg+AEDNgZleW1payk4AoFGrq6vZCQA0yD4AQM2BmV7ziAwAHufq1avZCQA0yD4AQM2BmV5bWFjITgCgUWfOnMlOAKBB9gEAag7M9FrXddkJADRqe3s7OwGABtkHAKg5MNNrOzs72QkANOrOnTvZCQA0yD4AQM2BmV4bDofZCQA0ajQaZScA0CD7AAA1B2Z6bTKZZCcA0KjxeJydAECD7AMA1ByY6bUjR/wrAMD+lpeXsxMAaJB9AICa6xq9trCwkJ0AQKPOnj2bnQBAg+wDANQcmOm1zc3N7AQAGnXt2rXsBAAaZB8AoObATK8tLi5mJwDQKK9QA2A/9gEAag7M9Np0Os1OAKBR9+7dy04AoEH2AQBqDsz02u7ubnYCAI1aX1/PTgCgQfYBAGoOzPTacDjMTgCgUaPRKDsBgAbZBwCoOTDTa5PJJDsBgEaNx+PsBAAaZB8AoObATK8NBoPsBAAadezYsewEABpkHwCg5sBMr83Pz2cnANCo06dPZycA0CD7AAA1B2Z6bXNzMzsBgEatra1lJwDQIPsAADUHZnptcXExOwGARp07dy47AYAG2QcAqDkw02u7u7vZCQA0an19PTsBgAbZBwCoOTDTa9PpNDsBgEbdvXs3OwGABtkHAKg5MNNrw+EwOwGARo1Go+wEABpkHwCg5sBMr00mk+wEABo1Ho+zEwBokH0AgJoDM702GAyyEwBo1IkTJ7ITAGiQfQCAmgMzvTY3N5edAECjVlZWshMAaJB9AICaAzO9trW1lZ0AQKOuX7+enQBAg+wDANQcmOm1paWl7AQAGrW6upqdAECD7AMA1ByY6bWdnZ3sBAAadevWrewEABpkHwCg5sBMr02n0+wEABp1//797AQAGmQfAKDmwEyvDYfD7AQAGjUajbITAGiQfQCAmgMzvTaZTLITAGjUeDzOTgCgQfYBAGoOzPTa3NxcdgIAjVpZWclOAKBB9gEAag7M9NpgMMhOAKBRx48fz04AoEH2AQBqDsz02tbWVnYCAI26ceNGdgIADbIPAFBzYKbXlpaWshMAaNT58+ezEwBokH0AgJoDM722vb2dnQBAo7xCDYD92AcAqDkw02sPHz7MTgCgURsbG9kJADTIPgBAzYGZXhsOh9kJADRqNBplJwDQIPsAADUHZnptMplkJwDQqPF4nJ0AQIPsAwDUHJjptfn5+ewEABp18uTJ7AQAGmQfAKDmwEyvlVKyEwBo1MLCQnYCAA2yDwBQc2Cm17a3t7MTAGjUzZs3sxMAaJB9AICaAzO9try8nJ0AQKMuXLiQnQBAg+wDANQcmOm1zc3N7AQAGrW2tpadAECD7AMA1ByYAQD2MZ1OsxMAaJB9AICaAzO95hEZADzOxYsXsxMAaJB9AICaAzO99uDBg+wEABp1+fLl7AQAGmQfAKDmwEyvzc/PZycA0KhTp05lJwDQIPsAADUHZgAAAAAAnhMHZnptZ2cnOwGARt2+fTs7AYAG2QcAqDkw02tHjx7NTgCgUZcuXcpOAKBB9gEAag7M9NrGxkZ2AgCNunLlSnYCAA2yDwBQc2AGANjHYDDITgCgQfYBAGoOzPTa0tJSdgIAjVpdXc1OAKBB9gEAag7M9JpHZADwOFevXs1OAKBB9gEAag7M9NrCwkJ2AgCNOnPmTHYCAA2yDwBQc2Cm17quy04AoFHb29vZCQA0yD4AQM2BmV7b2dnJTgCgUXfu3MlOAKBB9gEAag7M9NpwOMxOAKBRo9EoOwGABtkHAKg5MNNrk8kkOwGARo3H4+wEABpkHwCg5sBMrx054l8BAPa3vLycnQBAg+wDANRc1+i1hYWF7AQAGnX27NnsBAAaZB8AoObATK9tbm5mJwDQqGvXrmUnANAg+wAANQdmem1xcTE7AYBGeYUaAPuxDwBQc2Cm16bTaXYCAI26d+9edgIADbIPAFBzYKbXdnd3sxMAaNT6+np2AgANsg8AUHNgpteGw2F2AgCNGo1G2QkANMg+AEDNgZlem0wm2QkANGo8HmcnANAg+wAANQdmem0wGGQnANCoY8eOZScA0CD7AAA1B2Z6bX5+PjsBgEadPn06OwGABtkHAKg5MNNrm5ub2QkANGptbS07AYAG2QcAqDkw02uLi4vZCQA06ty5c9kJADTIPgBAzYGZXtvd3c1OAKBR6+vr2QkANMg+AEDNgZlem06n2QkANOru3bvZCQA0yD4AQM2BmV4bDofZCQA0ajQaZScA0CD7AAA1B2Z6bTKZZCcA0KjxeJydAECD7AMA1ByY6bXBYJCdAECjTpw4kZ0AQIPsAwDUHJjptbm5uewEABq1srKSnQBAg+wDANQcmOm1ra2t7AQAGnX9+vXsBAAaZB8AoObATK8tLS1lJwDQqNXV1ewEABpkHwCg5sBMr+3s7GQnANCoW7duZScA0CD7AAA1B2Z6bTqdZicA0Kj79+9nJwDQIPsAADUHZnptOBxmJwDQqNFolJ0AQIPsAwDUHJjptclkkp0AQKPG43F2AgANsg8AUHNgptfm5uayEwBo1MrKSnYCAA2yDwBQc2Cm1waDQXYCAI06fvx4dgIADbIPAFBzYKbXtra2shMAaNSNGzeyEwBokH0AgJoDM722tLSUnQBAo86fP5+dAECD7AMA1ByY6bXt7e3sBAAa5RVqAOzHPgBAzYGZXnv48GF2AgCN2tjYyE4AoEH2AQBqDsz02nA4zE4AoFGj0Sg7AYAG2QcAqDkw02uTySQ7AYBGjcfj7AQAGmQfAKDmwEyvzc/PZycA0KiTJ09mJwDQIPsAADUHZnqtlJKdAECjFhYWshMAaJB9AICaAzO9tr29nZ0AQKNu3ryZnQBAg+wDANQcmOm15eXl7AQAGnXhwoXsBAAaZB8AoObATK9tbm5mJwDQqLW1tewEABpkHwCg5sAMALCP6XSanQBAg+wDANQcmOk1j8gA4HEuXryYnQBAg+wDANQcmOm1Bw8eZCcA0KjLly9nJwDQIPsAADUHZnptfn4+OwGARp06dSo7AYAG2QcAqDkwAwAAAADwnDgw02s7OzvZCQA06vbt29kJADTIPgBAzYGZXjt69Gh2AgCNunTpUnYCAA2yDwBQc2Cm1zY2NrITAGjUlStXshMAaJB9AICaAzMAwD4Gg0F2AgANsg8AUHNgpteWlpayEwBo1OrqanYCAA2yDwBQc2Cm1zwiA4DHuXr1anYCAA2yDwBQc2Cm1xYWFrITAGjUmTNnshMAaJB9AICaAzO91nVddgIAjdre3s5OAKBB9gEAag7M9NrOzk52AgCNunPnTnYCAA2yDwBQc2Cm14bDYXYCAI0ajUbZCQA0yD4AQM2BmV6bTCbZCQA0ajweZycA0CD7AAA1B2Z67cgR/woAsL/l5eXsBAAaZB8AoOa6Rq8tLCxkJwDQqLNnz2YnANAg+wAANQdmem1zczM7AYBGXbt2LTsBgAbZBwCoOTDTa4uLi9kJADTKK9QA2I99AICaAzO9Np1OsxMAaNS9e/eyEwBokH0AgJoDM722u7ubnQBAo9bX17MTAGiQfQCAmgMzvTYcDrMTAGjUaDTKTgCgQfYBAGoOzPTaZDLJTgCgUePxODsBgAbZBwCoOTDTa4PBIDsBgEYdO3YsOwGABtkHAKg5MNNr8/Pz2QkANOr06dPZCQA0yD4AQM2BmV7b3NzMTgCgUWtra9kJADTIPgBAzYGZXltcXMxOAKBR586dy04AoEH2AQBqDsz02u7ubnYCAI1aX1/PTgCgQfYBAGoOzPTadDrNTgCgUXfv3s1OAKBB9gEAag7M9NpwOMxOAKBRo9EoOwGABtkHAKg5MNNrk8kkOwGARo3H4+wEABpkHwCg5sBMrw0Gg+wEABp14sSJ7AQAGmQfAKDmwEyvzc3NZScA0KiVlZXsBAAaZB8AoObATK9tbW1lJwDQqOvXr2cnANAg+wAANQdmem1paSk7AYBGra6uZicA0CD7AAA1B2Z6bWdnJzsBgEbdunUrOwGABtkHAKg5MNNr0+k0OwGARt2/fz87AYAG2QcAqDkw02vD4TA7AYBGjUaj7AQAGmQfAKDmwEyvTSaT7AQAGjUej7MTAGiQfQCAmgMzvTY3N5edAECjVlZWshMAaJB9AIDagQ/MpZT5UsoHllI+avbrYSnF8wV4QRsMBtkJADTq+PHj2QkANMg+AEDtQAfmUsrFiFiLiK+JiK+bvfmPRcTXH1IXPBFbW1vZCQA06saNG9kJADTIPgBA7aCvYP7KiPjcruveJSJ2Zm/70Yj4gEOpgidkaWkpOwGARp0/fz47AYAG2QcAqB30wPxuEfGq2c+7iIiu6yYRsXwYUfCkbG9vZycA0CivUANgP/YBAGoHPTDfiIjRo28opbxPRPzy8x0ET9LDhw+zEwBo1MbGRnYCAA2yDwBQmzvgx31ORHx3KeWrImKhlPIPIuJTI+KTD60MnoDh0PepBGB/o9Ho2T8IgN6xDwBQO9ArmLuu+y8R8aci4m1j79nL7xARH9l13Q8cYhscuslkkp0AQKPG43F2AgANsg8AUHvWVzCXUgYRsRYR79p13d88/CR4cubn57MTAGjUyZMnsxMAaJB9AIDas76Cueu6aURMI2Lp8HPgySqlZCcA0KiFhYXsBAAaZB8AoHbQb/L3ZRHxraWUP1ZKOVdKecenfhxiGxy67e3t7AQAGnXz5s3sBAAaZB8AoHbQb/L3r2f//JNPe3sXEYPnLweerOXl5ewEABp14cKF7AQAGmQfAKB20G/yd+QxPxyXeUHb3NzMTgCgUWtra9kJADTIPgBA7aCPyAAA6JXpdJqdAECD7AMA1A70iIxSyo/H3uMw3kTXdR/0vBbBE+QRGQA8zsWLF7MTAGiQfQCA2kFfwfy1EfF1j/z47oh4cUT80CF1wRPx4MGD7AQAGnX58uXsBAAaZB8AoHagVzB3XffKp7+tlPIdEfENEfFPnu8oeFLm5+ezEwBo1KlTp7ITAGiQfQCA2h/kGcy/HhHv/nyFAAAAAADwwnLQZzB/0tPedDQiPjIifuZ5L4InaGdnJzsBgEbdvn073vmd3zk7A4DG2AcAqB3owBwRH/e0X08i4qci4kuf3xx4so4ePZqdAECjLl26lJ0AQIPsAwDUDvoM5g8+7BDIsLGxkZ0AQKOuXLkSH/iBH5idAUBj7AMA1A70DOZSyu885u13nt8cAIA2DAaD7AQAGmQfAKB20G/yN//0N5RS5iPCsvKCtrS0lJ0AQKNWV1ezEwBokH0AgNozHphLKT9eSvmxiFgqpfzYoz8i4vWx9xxmeMHyiAwAHufq1avZCQA0yD4AQO3ZnsH8tRFRIuJlEfF1j7y9i4jfjIgfPqQueCIWFhayEwBo1JkzZ7ITAGiQfQCA2jMemLuue2VERCnlZ7que92TSYInp+u67AQAGrW9vZ2dAECD7AMA1J7tFcwREdF13etKKW8XEe8TES+KvVc1P/W+rz+kNjh0Ozs72QkANOrOnTvxru/6rtkZADTGPgBA7UAH5lLKn4+IV0XEL0XEu0XEL0TEhYj4iYhwYOYFazgcZicA0KjRaJSdAECD7AMA1J7xm/w94gsj4hO7rnvPiJjM/vkpETE+tDJ4AiaTSXYCAI0aj/0/cwB4U/YBAGoHPTC/tOu6b3va214ZER//PPfAE3XkyEH/FQCgb5aXl7MTAGiQfQCA2kGva3dmz2COiLhRSnm/iDgXEYPDyYInY2FhITsBgEadPXs2OwGABtkHAKgd9MD8NRHxAbOff2lE/EhEvDYivuIwouBJ2dzczE4AoFHXrl3LTgCgQfYBAGoH+iZ/Xdf9n4/8/N+WUl4dEcOu6ywrL2iLi4vZCQA0yivUANiPfQCA2oEOzI8qpRyJiJtP/bzruofPexU8IdPpNDsBgEbdu3cvOwGABtkHAKgd6BEZpZT3KqX8dCllEhE7sx+7s3/CC9bu7m52AgCNWl9fz04AoEH2AQBqB30F8ysj4rsi4pMi4sHh5cCTNRwOsxMAaNRoNMpOAKBB9gEAagf9Jn/vEBH/qOu6a13X/eqjPw4zDg7bZDLJTgCgUePxODsBgAbZBwCoHfTA/B8j4kMPMwQyDAaD7AQAGnXs2LHsBAAaZB8AoHbQR2QsRcR/LKX8RET8xqPv6Lru45/3KnhC5ufnsxMAaNTp06ezEwBokH0AgNpBD8y/OPsBb1E2NzezEwBo1NramiMCAG/CPgBA7UAH5q7rvuCwQyDD4uJidgIAjTp37lx2AgANsg8AUDvQgbmU8scf866tiLjpm/3xQrW7u5udAECj1tfX4yUveUl2BgCNsQ8AUDvoIzK+LiKe+r8BWo+IldnP70TEi0spPx8RH9113S89z31wqKbTaXYCAI26e/dudgIADbIPAFA7csCP+7qI+FcRcaLrutMRcSIiviwivmr28/8WEV/x/OfB4RoOh9kJADRqNBplJwDQIPsAALWDHpg/IyL+Qdd1GxERs3/+44j4zK7rJhHxtyPivQ8nEQ7PZDLJTgCgUePxODsBgAbZBwCoHfTAPImIlz3tbaOIeDD7+cPnrQieoMFgkJ0AQKNOnDiRnQBAg+wDANQO+gzmz42IHyil/OeIeENEnImIV0TEp83e/yci4tuf/zw4XHNzB/1XAIC+WVlZefYPAqB37AMA1A70Cuau6/5tRLxvRLwuIv5QRKxFxPvN3h5d1/2Xrus++dAq4ZBsbW1lJwDQqOvXr2cnANAg+wAAtQO/fLPrul+MiF88xBZ44paWlrITAGjU6upqdgIADbIPAFB77IG5lPLVXdd9yuzn3xQR3X4f13Xdxx9SGxy6nZ2d7AQAGnXr1q04ffp0dgYAjbEPAFB7plcw/8ojP//lww6BDNPpNDsBgEbdv38/OwGABtkHAKiVrtv3hcnQC+/1Xu/V/dzP/Vx2BgANunfvXhw/fjw7A4DG2AcA9lNKGXdd997ZHRme8Zv8lVLeoZRy5pFfHy2lfFEp5TtLKX+/lDI4/EQ4PJPJJDsBgEaNx+PsBAAaZB8AoPaMB+aI+LqIeNkjv/7yiPjoiFiLiE+MiH96SF3wRMzNHfj7XALQMysrK9kJADTIPgBA7dkOzO8eET8QEVFKGUbER0XEX+q67rMj4s/F3rEZXrAGAy/CB2B//s+fAdiPfQCA2rMdmBe6rnvqGQIvi4h7XdeNIyK6rntdRLzoMOPgsG1tbWUnANCoGzduZCcA0CD7AAC1Zzsw/0op5eWzn//ZiPiRp95RSnnbiHhwOFnwZCwtLWUnANCo8+fPZycA0CD7AAC1Zzswf35E/KdSys9FxKdGxJc88r4/FxE/e0hd8ERsb29nJwDQKK9QA2A/9gEAas/4Hc66rvvOUsooIi5FxM91Xfcrj7z7WkT89CG2waF7+PBhdgIAjdrY2MhOAKBB9gEAas94YI6I6LruekRc3+ftP3koRfAEDYfD7AQAGjUajbITAGiQfQCA2rM9IgPeok0mk2f/IAB6aTweZycA0CD7AAA1B2Z6bX5+PjsBgEadPHkyOwGABtkHAKg5MNNrpZTsBAAatbCwkJ0AQIPsAwDUHJjpte3t7ewEABp18+bN7AQAGmQfAKD2Zh+YSyn/+TBCIMPy8nJ2AgCNunDhQnYCAA2yDwBQey6vYP6A570CkmxubmYnANCotbW17AQAGmQfAKDmERkAAPuYTqfZCQA0yD4AQG3u2T6glPK5T3vT0qNv67runzzvVfCEeEQGAI9z8eLF7AQAGmQfAKB2kFcwl2f5AS9YDx48yE4AoFGXL1/OTgCgQfYBAGrP+grmruu+4NFfl1I+4+lvgxeq+fn57AQAGrGxsxHf8gvfEl/2M18Wb/j9N8RczMVHbXxUfPr7fnq809u8U3YeAI04depUdgIANOW5PIP5ib9quZTyjaWUL/wD/P6/XEr5gT/A7391KeWvPeZ9Ly2l3C+lDJ7r5++rUsonlFJ+IrsDAH7993893vUr3jU+7Xs/LV77m6+N39n4nbizcSe+6jVfFe/+le8e3/DfvyE7EQAAoEnP5cD8gjsIdl3377qu+9Cnfl1K6Uopz8tLkbqu+7Wu6451XXdo3+lhvwN3KeXlpZSbT3vbh5VSfqyUcq+U8lullB8tpfzZR95/qpTydaWU27OPeV0p5QtKKcPZ+2+UUjZmB/P7jx7lSykXSinfX0r57VJK95jGzUd+7+uf/7+J59/Ozk52AgDJdh/uxstf+fJ4w++9Ie5v36/et/NwJzZ2N+J//57/PX7kV34kJxCApty+fTs7AQCa8mYfmLuue8VhhPAHU0r53yLi2yLi30bEmYh4u4j43Ih4xez9bxMRPx0RyxHxfl3XHY+IPxkRJyLi3COf6hWzg/mxR4/yEbETEd8aEX/1GTL+1iO/952fn6/scB09ejQ7AYBk37323fEb938jps/wvxVv7G7EP/rhf/QEqwBo1aVLl7ITAKApz+UVzIeulPKepZSfm73K9lsiYumR931EKeVyKeVuKeWnSinv/sj7XlJK+Q+zV++ul1L+9eztb3wUQynlx2Yf/trZK20/qpTy1qWU/zL7fb87+/mZp2WdK6X8bCnl90sp3zk72EYp5ezsFdFzs1+/upTyT0spPznr/4FSyoseafyjs+67pZTXllJe/jz8fZWI+JKI+Kdd131t13W/13Xdw67rfrTruk+efdhnRcS9iPjYrutuRER0XfeGrus+o+u6n3+2P6Prutd3Xfd1EfELf9Dex3wN1d/j7G1vfOX2U/8ZllL+r9l/Rr9SSvnwRz72Dz/y6u0fKqV8eSnlVc/2525sbBzGlwPAC8iX/7cvf5NXLu/nv9/+73Hr3q0nUARAy65cuZKdAABNae7AXEpZiIj/FBHfFBFvE3uvyv0Ls/e9Z0R8fUT89YhYiYh/ExH/uZSyOHsG8n+JiF+NiLMR8fYR8f88/fN3XfdBs5++x+yVtt8Se38P3xAR7xARL42IjYj410/7rR8fEZ8UEaciYjci/tUzfBkfExGfGBEnI2IhIv7OrP/tI+K7I+ILZ1/b34mI7yilvO2z/sU8s3eOiJdExLc/w8d8SET8h67rHj7L5/p3s0P7D5RS3uPN7Phns0do/OTzcTjfx/tGxOsj4kUR8c8j4utmx/WIiH8fET8be/+9+PyI+LhD+PMBeAt08/dvPvsHRcTC3EL85v3fPOQaAFo3GPj2OwDwqLln/5An7o9GxHxEfFnXdV1EfHsp5bNm7/uUiPg3Xdf919mvX1lK+Yez37MdEacj4rO7rtudvf9Az4vuum49Ir7jqV+XUr4oIp7+oMVv6rru6uz9nxMRl0spf+Uxn/Ibuq5bm33st0bEU89B/tiI+J6u675n9usfLKW8JiL+dES88lky/1Up5f965NdzEXF39vOV2T+f6WFgK8/y/oiIvxwRPxd738jxMyLi+0sp79J13d1n/F17/l5E/GLs/efw0RHxXaWUS13XXT/A7z2oX+267msiIkopr4yIr4iIt5v9jxIvi4g/0XXddkT8RCnlPz/uk5RSPiX2/rsUp06dile/+tVx/vz5uHHjRmxsbMRoNIrxeBwnT56MhYWFuHnzZly4cCHW1tZiOp3GxYsX4/Lly2/87tG3b9+OS5cuxZUrV2IwGMTq6mpcvXo1zpw5E9vb23Hnzp03fs7l5eU4e/ZsXLt2Lc6ePRv37t2L9fX1N77/2LFjcfr06VhbW4tz587F+vp63L17943vP3HiRKysrMT169djdXU1bt26Fffv33/j+1dWVuL48eNx48YNX5Ovydfka/I1HfBrWugWDjRCO9OduHb5Wmz/2nbzX9Nb4n9OviZfk6/J19TK13T37t24fPnyW9TX9Jb4n5Ovydfka/I1Pemvqc/K3g23HaWUj46Iv9113cseeds3R8T1iHiviHh57B0xn7IQe88FnkbE3+267r33+ZyfEBF/reu6D5j9uouIP9J13S/Pfn00Ir40Iv5URLz17Lcdj4i5ruumpZRXR8S3dV335bOPH0bE/Yh4cew90/hXImK+67rd2ce+quu6r336n11K+YrYexX05iN587H3aIsvfoa/k+pzzt728tnbzpRS3iUirkXEO3Zd9yuP+Rw/ExHf33Xd5z3uz9nn97wu9g723/XI294pIn6p67ry+N8ZUUr5voj47q7r/u9n+JhPiP/5d3M2Hvl7nL3/1bOv8Wuf/p/h7P1dRPyR2HtF83/uuu7kI+/7ZxHxkq7rPvaZOt/5nd+5e/3rXxDfjxCAQ/I146+Jz/r+z4r7O8/8mIx3ept3irW/tRb/8/94BoA+evWrXx0vf/nLszMAaEwpZbzfXbIPDvSIjFLKkf1+HFLT7Yh4+1L//95eOvvnGyLii7quO/HIj6Nd133z7H0vffQZvm+Gvx17j5l4367r3ioinnqMxqMNL3laz05E/Pab+ee8IfZeCf1o//CZjssH9PrZ5/4Lz/AxPxQR/+ub+Z9bF/XfwZvjzf29k9k/H/2uey8+4O+9HRFvM/sfCp7yksd98KMWFg72qjUA3nJ9zMWPibnBM/8/H4bzw/icD/ocx2UA4syZp3+7HgDot4MeG3dj76Ba/SilbM2+2dq/KKUce56afnr25316KWW+lPKREfE+s/d9TUR8ainlfcueYSnlz5RSjsfe83dvR8QXz96+VEr5Xx7zZ/xmRLzjI78+HnvPXb47++Z9+73K92NLKe86O2L+k4j49q57hm83v79XRcQrSikfVkoZzBpfXt70Gwq+WWaPEvmsiPicUsonllLeavY/AnxAKeWrZx/2JRHxVrH3WJF3iNh7JnQp5UtKKe9eSnlpKeV/KaUszLo+O/ZeGfyTs48tpZSl2HvFeMw+ZnH28xOzr2mplDJXSvnLsXek/74342v4rYj49dj7ex6UUj4pIs4d8Pf+akS8JiI+f9b/fhHxigP+3oMmAvAWargwjO//2O+P4wvHY26f/516OD+Mj3v3j4uPe3eP9wcgYnt7+9k/CAB65KAH5k+LiB+OiA+NiPMR8WER8f+PiL8bEX8jIt4/Ir7s+QiaPUP3IyPiEyLidyLioyLiP8ze95qI+OTY+wZ8vxsRvzz7uJgde18REe8UEb8WETdnv3c/nx97h9a7pZS/NGtfjr1XJP9M7H8Y/aaI+MaI+I2IWIqIT38OX9sbIuLPRcQ/jIjfir1XHX92PA/fbLHrum+Pva/3kyLiVuwd0b8wIr5z9v7fib3/nHYi4r+WUu7F3n+Gvxd7f4/HI+IrY+/v9ddj73EhHz57PnXE3jdA3IiIX5j9eiP2XjkdsfeYjy+cfU2/HXv/ffnzTz2H+s3wybH397EeEe8WET/1ZvzevxwR7zf7vV8YEd8SEVvP9pt2dnbezEQA3hK9z9u/T7z2U18bn/SenxTLc8uxOFiMQRnEe5967/im//Wb4iv+zFd49TIAERFx586d7AQAaMqBnsFcSrkeEe/Vdd3vPfK2ExEx7rruXCnl7Wc/P+gjDeBQlVK+JSJe92zPnH6v93qv7ud+7ueeUBUALwS7D3fjdzd+N6Zb03jx2/h/2gBQu3fvXhw/fjw7A4DGeAbzs3urqJ+NG7Nf/6HZz38j9l4BDClKKS8rpZybPRrkT8XeK8X/07P9vslk8mwfAkDPzB2Zi7cdvm287udfl50CQIPG43F2AgA05aDfEO/fRsQPllL+Zew91uFMRHxGRLxy9v4Pjf/5uASeg1LK4751/Yd3XffjTzTmeVRK+aqI+Nh93vWqrus+9Xn8o14ce49SWYm9x6P8ja7r/vuz/aYjRw7re1UC8EK3vOx/OwfgTdkHAKgd9BEZRyLiUyLiL0bE6dj7ZnrfGhFf03XddPbN30rXdRuHGQvPt/d4j/foXvva12ZnANCg3/zN34y3e7u3y84AoDH2AYD99PkRGQd6BXPXdQ8j4qtmP/Z7/+bzGQVPyuam/+oCsL9r1645IADwJuwDANQOdGAupXzS497Xdd3XP3858GQtLi5mJwDQqLNnz2YnANAg+wAAtYM+g/njnvbrF0fEuYj4yYhwYOYFazqdZicA0Kh79+5lJwDQIPsAALWDPiLjg5/+ttmrms8/70XwBO3u7mYnANCo9fX17AQAGmQfAKB25A/we78xIv7q89QBKYbDYXYCAI0ajUbZCQA0yD4AQO1AB+ZSypGn/TgWEZ8SEXcPtQ4O2WQyyU4AoFHj8Tg7AYAG2QcAqB30Gcy7EdE97W2/HhGf/PzmwJM1GAyyEwBo1LFjx7ITAGiQfQCA2kEPzH/4ab+edF332893DDxp8/Pz2QkANOr06dPZCQA0yD4AQO1ZH5FRShlExA9HxG90Xfersx+Oy7xF2NzczE4AoFFra2vZCQA0yD4AQO1ZD8xd100jYhoRS4efA0/W4uJidgIAjTp37lx2AgANsg8AUDvQN/mLiC+LiG8tpfyxUsq5Uso7PvXjENvg0O3u7mYnANCo9fX17AQAGmQfAKB20Gcw/+vZP//k097eRYTvksYL1nQ6zU4AoFF3797NTgCgQfYBAGoHOjB3XXfQVzrDC8pwOMxOAKBRo9EoOwGABtkHAKg5HNNrk8kkOwGARo3H4+wEABpkHwCg9thXMJdSfjz2HoHxjLqu+6DntQieoMHAE14A2N+JEyeyEwBokH0AgNozPSLjax/5+bmI+KSIeGVE/GpEvDQi/kpEfP3hpcHhm5s76GPIAeiblZWV7AQAGmQfAKD22Ota13WvfOrnpZSfiYgP67ruFx5527+PvQPz5x1qIRyira2t7AQAGnX9+vV4yUtekp0BQGPsAwDUDvoM5vMRcf1pb/uViHiX5zcHnqylpaXsBAAatbq6mp0AQIPsAwDUDnpg/tGI+MZSyh8ppSyXUlYj4usi4scPLw0O387OTnYCAI26detWdgIADbIPAFA76IH5E2b//IWIuB8RVyKiRMQnHkITPDHT6TQ7AYBG3b9/PzsBgAbZBwCoHeg7nHVd9zsR8dGllCMR8bYR8Vtd1z081DJ4AobDYXYCAI0ajUbZCQA0yD4AQO2gr2COiIiu6x52Xfebjsu8pZhMJtkJADRqPB5nJwDQIPsAALU368AMb2nm5g70In4AemhlZSU7AYAG2QcAqDkw02uDwSA7AYBGHT9+PDsBgAbZBwCoPeuBuZQyKKV8Uill8UkEwZO0tbWVnQBAo27cuJGdAECD7AMA1J71wNx13TQivqTrOpc43uIsLS1lJwDQqPPnz2cnANAg+wAAtYM+IuO7SimvONQSSLC9vZ2dAECjvEINgP3YBwCoHfQ7nC1FxLeXUn46It4QEd1T7+i67uMPIwyehIcPH2YnANCojY2N7AQAGmQfAKB20APz1dkPeIsyHA6zEwBo1Gg0yk4AoEH2AQBqBzowd133BYcdAhkmk0l2AgCNGo/H8fKXvzw7A4DG2AcAqB30GcxRSvmTpZSvK6V81+zX711K+eOHlwaHb35+PjsBgEadPHkyOwGABtkHAKgd6MBcSvm0iPjKiPiliPig2Zs3IuILD6kLnohSSnYCAI1aWFjITgCgQfYBAGoHfQXzZ0bEh3Rd98UR8dR3RXtdRLzzYUTBk7K9vZ2dAECjbt68mZ0AQIPsAwDUDnpgPh4Rb5j9vJv9cz4iXOd4QVteXs5OAKBRFy5cyE4AoEH2AQBqBz0w/1hE/P2nve3TI+JHnt8ceLI2NzezEwBo1NraWnYCAA2yDwBQmzvgx31aRHxXKeWTI+J4KeX1EXEvIj7i0MoAABJNp9PsBAAaZB8AoHagA3PXdbdLKS+LiJdFxDvE3uMyfrbruofP/DuhbR6RAcDjXLx4MTsBgAbZBwCoHegRGaWUSxFxpuu6n+267tu6rvuZiHj7Usp7HGodHLIHDx5kJwDQqMuXL2cnANAg+wAAtYM+g/lVsfdN/R61EBHf9PzmwJM1P//0/1oDwJ5Tp05lJwDQIPsAALWDHphf2nXd/3j0DV3XXY+Is897EQAAAAAALwgHPTDfLKW816NvmP361vOfBE/Ozs5OdgIAjbp9+3Z2AgANsg8AUDvQN/mLiC+NiO8spfzziLgeEeci4u9ExBcdVhg8CUePHs1OAKBRly5dyk4AoEH2AQBqB3oFc9d1XxMRnxURfyYi/n+zf/7truu++hDb4NBtbGxkJwDQqCtXrmQnANAg+wAAtYO+gjm6rvu2iPi2Q2wBAGjGYDDITgCgQfYBAGoHPjCXUj40Ii5FxLFH39513ec+z03wxCwtLWUnANCo1dXV7AQAGmQfAKB2oEdklFL+dUS8KiJGEfGSR36cObw0OHwekQHA41y9ejU7AYAG2QcAqB30FcwfExHv0XXdGw4zBp60hYWF7AQAGnXmjP8dHYA3ZR8AoHagVzBHxG9HxN1D7IAUXddlJwDQqO3t7ewEABpkHwCgdtAD87+IiH9XSnm/Uso7PvrjMOPgsO3s7GQnANCoO3fuZCcA0CD7AAC1gz4i4ytn//yIp729iwjfQpcXrOFwmJ0AQKNGo1F2AgANsg8AUDvQK5i7rjvymB+Oy7ygTSaT7AQAGjUej7MTAGiQfQCA2kEfkQFvkY4c8a8AAPtbXl7OTgCgQfYBAGoHekRGKWUuIv5mRPyxiHhRRJSn3td13QcdThocvoWFhewEABp19uzZ7AQAGmQfAKB20JdvfmlE/PWI+LGIGEXEd0TEyYj44UPqgidic3MzOwGARl27di07AYAG2QcAqB30wPyREfHhXdf9y4jYnf3zz0fEBx9WGDwJi4uL2QkANMor1ADYj30AgNpBD8xHI+INs59vlFKOdl33uoh4z8PJgidjOp1mJwDQqHv37mUnANAg+wAAtQM9gzkirkXEyyLiZyPiNRHx+aWU34+IXz+sMHgSdnd3sxMAaNT6+np2AgANsg8AUDvogfkzIuKpl3p+VkR8ZUQcj4hPOYwoeFKGw2F2AgCNGo1G2QkANMg+AEDtQI/I6Lruv3Vd93Ozn/9S13Uf0nXd+3Zd9+OHmweHazKZZCcA0KjxeJydAECD7AMA1J7xwFxK+V9KKf/nY973xaWUP3o4WfBkDAaD7AQAGnXs2LHsBAAaZB8AoPZsr2D+hxHxY495349GxD96fnPgyZqfn89OAKBRp0+fzk4AoEH2AQBqz3ZgvhQR3/eY9/1gRHj4FC9om5ub2QkANGptbS07AYAG2QcAqD3bgfmtImLhMe+bj71v9AcvWIuLi9kJADTq3Llz2QkANMg+AEDt2Q7Mr4uID33M+z509n54wdrd3c1OAKBR6+vr2QkANMg+AEBt7lne/6UR8W9KKYOI+E9d1z0spRyJiD8fEV8eEZ91yH1wqKbTaXYCAI26e/dudgIADbIPAFB7xgNz13X/vpTy4oh4ZUQsllJ+OyJeFBFbEfF5Xdd98xNohEMzHA6zEwBo1GjkW00A8KbsAwDUnu0RGdF13ZdExNtHxCsi4u/M/vn2s7fDC9pkMslOAKBR4/E4OwGABtkHAKg92yMyIiKi67rfj4jvP+QWeOIGg0F2AgCNOnHiRHYCAA2yDwBQe9ZXMMNbsrm5A/1vLAD00MrKSnYCAA2yDwBQc2Cm17a2trITAGjU9evXsxMAaJB9AICaAzO9trS0lJ0AQKNWV1ezEwBokH0AgJoDM722s7OTnQBAo27dupWdAECD7AMA1ByY6bXpdJqdAECj7t+/n50AQIPsAwDUHJjpteFwmJ0AQKNGo1F2AgANsg8AUHNgptcmk0l2AgCNGo/H2QkANMg+AEDNgZlem5uby04AoFErKyvZCQA0yD4AQM2BmV4bDAbZCQA06vjx49kJADTIPgBAzYGZXtva2spOAKBRN27cyE4AoEH2AQBqDsz02tLSUnYCAI06f/58dgIADbIPAFBzYKbXtre3sxMAaJRXqAGwH/sAADUHZnrt4cOH2QkANGpjYyM7AYAG2QcAqDkw02vD4TA7AYBGjUaj7AQAGmQfAKDmwEyvTSaT7AQAGjUej7MTAGiQfQCAmgMzvTY/P5+dAECjTp48mZ0AQIPsAwDUHJjptVJKdgIAjVpYWMhOAKBB9gEAag7M9Nr29nZ2AgCNunnzZnYCAA2yDwBQc2Cm15aXl7MTAGjUhQsXshMAaJB9AICaAzO9trm5mZ0AQKPW1tayEwBokH0AgJoDMwDAPqbTaXYCAA2yDwBQc2Cm1zwiA4DHuXjxYnYCAA2yDwBQc2Cm1x48eJCdAECjLl++nJ0AQIPsAwDUHJjptfn5+ewEABp16tSp7AQAGmQfAKDmwAwAAAAAwHPiwEyv7ezsZCcA0Kjbt29nJwDQIPsAADUHZnrt6NGj2QkANOrSpUvZCQA0yD4AQM2BmV7b2NjITgCgUVeuXMlOAKBB9gEAag7MAAD7GAwG2QkANMg+AEDNgZleW1payk4AoFGrq6vZCQA0yD4AQM2BmV7ziAwAHufq1avZCQA0yD4AQM2BmV5bWFjITgCgUWfOnMlOAKBB9gEAag7M9FrXddkJADRqe3s7OwGABtkHAKg5MNNrOzs72QkANOrOnTvZCQA0yD4AQM2BmV4bDofZCQA0ajQaZScA0CD7AAA1B2Z6bTKZZCcA0KjxeJydAECD7AMA1ByY6bUjR/wrAMD+lpeXsxMAaJB9AICa6xq9trCwkJ0AQKPOnj2bnQBAg+wDANQcmOm1zc3N7AQAGnXt2rXsBAAaZB8AoObATK8tLi5mJwDQKK9QA2A/9gEAag7M9Np0Os1OAKBR9+7dy04AoEH2AQBqDsz02u7ubnYCAI1aX1/PTgCgQfYBAGoOzPTacDjMTgCgUaPRKDsBgAbZBwCoOTDTa5PJJDsBgEaNx+PsBAAaZB8AoObATK8NBoPsBAAadezYsewEABpkHwCg5sBMr83Pz2cnANCo06dPZycA0CD7AAA1B2Z6bXNzMzsBgEatra1lJwDQIPsAADUHZnptcXExOwGARp07dy47AYAG2QcAqDkw02u7u7vZCQA0an19PTsBgAbZBwCoOTDTa9PpNDsBgEbdvXs3OwGABtkHAKg5MNNrw+EwOwGARo1Go+wEABpkHwCg5sBMr00mk+wEABo1Ho+zEwBokH0AgJoDM702GAyyEwBo1IkTJ7ITAGiQfQCAmgMzvTY3N5edAECjVlZWshMAaJB9AICaAzO9trW1lZ0AQKOuX7+enQBAg+wDANQcmOm1paWl7AQAGrW6upqdAECD7AMA1ByY6bWdnZ3sBAAadevWrewEABpkHwCg5sBMr02n0+wEABp1//797AQAGmQfAKDmwEyvDYfD7AQAGjUajbITAGiQfQCAmgMzvTaZTLITAGjUeDzOTgCgQfYBAGoOzPTa3NxcdgIAjVpZWclOAKBB9gEAag7M9NpgMMhOAKBRx48fz04AoEH2AQBqDsz02tbWVnYCAI26ceNGdgIADbIPAFBzYKbXlpaWshMAaNT58+ezEwBokH0AgJoDM722vb2dnQBAo7xCDYD92AcAqDkw02sPHz7MTgCgURsbG9kJADTIPgBAzYGZXhsOh9kJADRqNBplJwDQIPsAADUHZnptMplkJwDQqPF4nJ0AQIPsAwDUHJjptfn5+ewEgP+3vfuPsjvP6zr//vStn7nJEKiZsAkBosHCQCLxXER0xZ1F/MGPWVh0QVR+KD8O6FHxLCjHH8hhkYNHfosruusyAguCrMuKgqJic8SRo1yNJBgoCAQmJBAoJkxyUz9vvvtHVQ/1CZXunmbo94f+PB7n9KE7Val63m663unX3LqhUWfOnMlOAKBB7gMA1AzMdK2Ukp0AQKOWlpayEwBokPsAADUDM13b3d3NTgCgUXfu3MlOAKBB7gMA1AzMdG11dTU7AYBGXb58OTsBgAa5DwBQMzDTte3t7ewEABq1sbGRnQBAg9wHAKgZmAEAjjGfz7MTAGiQ+wAANQMzXfMSGQA8y5UrV7ITAGiQ+wAANQMzXXv8+HF2AgCNunbtWnYCAA1yHwCgZmCma4uLi9kJADTq7Nmz2QkANMh9AICagRkAAAAAgFfEwEzX9vb2shMAaNS9e/eyEwBokPsAADUDM107ceJEdgIAjbp69Wp2AgANch8AoGZgpmtbW1vZCQA06vr169kJADTIfQCAmoEZAOAYo9EoOwGABrkPAFAzMNO1lZWV7AQAGrW+vp6dAECD3AcAqBmY6ZqXyADgWW7cuJGdAECD3AcAqBmY6drS0lJ2AgCNOn/+fHYCAA1yHwCgZmCma8MwZCcA0Kjd3d3sBAAa5D4AQM3ATNf29vayEwBo1P3797MTAGiQ+wAANQMzXRuPx9kJADRqMplkJwDQIPcBAGoGZro2m82yEwBo1HQ6zU4AoEHuAwDUDMx07bnn/CsAwPFWV1ezEwBokPsAADXrGl1bWlrKTgCgURcuXMhOAKBB7gMA1AzMdG17ezs7AYBG3bx5MzsBgAa5DwBQMzDTteXl5ewEABrlGWoAHMd9AICagZmuzefz7AQAGvXw4cPsBAAa5D4AQM3ATNf29/ezEwBo1ObmZnYCAA1yHwCgZmCma+PxODsBgEZNJpPsBAAa5D4AQM3ATNdms1l2AgCNmk6n2QkANMh9AICagZmujUaj7AQAGnXy5MnsBAAa5D4AQM3ATNcWFxezEwBo1Llz57ITAGiQ+wAANQMzXdve3s5OAKBRGxsb2QkANMh9AICagZmuLS8vZycA0KiLFy9mJwDQIPcBAGoGZrq2v7+fnQBAozY3N7MTAGiQ+wAANQMzXZvP59kJADTqwYMH2QkANMh9AICagZmujcfj7AQAGjWZTLITAGiQ+wAANQMzXZvNZtkJADRqOp1mJwDQIPcBAGoGZro2Go2yEwBo1OnTp7MTAGiQ+wAANQMzXVtYWMhOAKBRa2tr2QkANMh9AICagZmu7ezsZCcA0Khbt25lJwDQIPcBAGoGZrq2srKSnQBAo9bX17MTAGiQ+wAANQMzXdvb28tOAKBRd+/ezU4AoEHuAwDUDMx0bT6fZycA0KhHjx5lJwDQIPcBAGoGZro2Ho+zEwBo1GQyyU4AoEHuAwDUDMx0bTabZScA0KjpdJqdAECD3AcAqBmY6drCwkJ2AgCNWltby04AoEHuAwDUDMx0bTQaZScA0KhTp05lJwDQIPcBAGoGZrq2s7OTnQBAo27fvp2dAECD3AcAqBmY6drKykp2AgCNunTpUnYCAA1yHwCgZmCma7u7u9kJADTKM9QAOI77AAA1AzNde/LkSXYCAI3a2trKTgCgQe4DANQMzHRtPB5nJwDQqMlkkp0AQIPcBwCoGZjp2mw2y04AoFHT6TQ7AYAGuQ8AUDMw07XFxcXsBAAadebMmewEABrkPgBAzcBM10op2QkANGppaSk7AYAGuQ8AUDMw07Xd3d3sBAAadefOnewEABrkPgBAzcBM11ZXV7MTAGjU5cuXsxMAaJD7AAA1AzNd297ezk4AoFEbGxvZCQA0yH0AgJqBGQDgGPP5PDsBgAa5DwBQMzDTNS+RAcCzXLlyJTsBgAa5DwBQMzDTtcePH2cnANCoa9euZScA0CD3AQBqBma6tri4mJ0AQKPOnj2bnQBAg9wHAKgZmAEAAAAAeEUMzHRtb28vOwGARt27dy87AYAGuQ8AUDMw07UTJ05kJwDQqKtXr2YnANAg9wEAagZmura1tZWdAECjrl+/np0AQIPcBwCoGZgBAI4xGo2yEwBokPsAADUDM11bWVnJTgCgUevr69kJADTIfQCAmoGZrnmJDACe5caNG9kJADTIfQCAmoGZri0tLWUnANCo8+fPZycA0CD3AQBqBma6NgxDdgIAjdrd3c1OAKBB7gMA1AzMdG1vby87AYBG3b9/PzsBgAa5DwBQMzDTtfF4nJ0AQKMmk0l2AgANch8AoGZgpmuz2Sw7AYBGTafT7AQAGuQ+AEDNwEzXnnvOvwIAHG91dTU7AYAGuQ8AULOu0bWlpaXsBAAadeHChewEABrkPgBAzcBM17a3t7MTAGjUzZs3sxMAaJD7AAA1AzNdW15ezk4AoFGeoQbAcdwHAKgZmOnafD7PTgCgUQ8fPsxOAKBB7gMA1AzMdG1/fz87AYBGbW5uZicA0CD3AQBqBma6Nh6PsxMAaNRkMslOAKBB7gMA1AzMdG02m2UnANCo6XSanQBAg9wHAKgZmOnaaDTKTgCgUSdPnsxOAKBB7gMA1AzMdG1xcTE7AYBGnTt3LjsBgAa5DwBQMzDTte3t7ewEABq1sbGRnQBAg9wHAKgZmOna8vJydgIAjbp48WJ2AgANch8AoGZgpmv7+/vZCQA0anNzMzsBgAa5DwBQMzDTtfl8np0AQKMePHiQnQBAg9wHAKgZmOnaeDzOTgCgUZPJJDsBgAa5DwBQMzDTtdlslp0AQKOm02l2AgANch8AoGZgpmuj0Sg7AYBGnT59OjsBgAa5DwBQMzDTtYWFhewEABq1traWnQBAg9wHAKgZmOnazs5OdgIAjbp161Z2AgANch8AoGZgpmsrKyvZCQA0an19PTsBgAa5DwBQMzDTtb29vewEABp19+7d7AQAGuQ+AEDNwEzX5vN5dgIAjXr06FF2AgANch8AoGZgpmvj8Tg7AYBGTSaT7AQAGuQ+AEDNwEzXZrNZdgIAjZpOp9kJADTIfQCAmoGZri0sLGQnANCotbW17AQAGuQ+AEDNwEzXRqNRdgIAjTp16lR2AgANch8AoGZgpms7OzvZCQA06vbt29kJADTIfQCAmoGZrq2srGQnANCoS5cuZScA0CD3AQBqBma6tru7m50AQKM8Qw2A47gPAFAzMNO1J0+eZCcA0Kitra3sBAAa5D4AQM3ATNfG43F2AgCNmkwm2QkANMh9AICagZmuzWaz7AQAGjWdTrMTAGiQ+wAANQMzXVtcXMxOAKBRZ86cyU4AoEHuAwDUDMx0rZSSnQBAo5aWlrITAGiQ+wAANQMzXdvd3c1OAKBRd+7cyU4AoEHuAwDUDMx0bXV1NTsBgEZdvnw5OwGABrkPAFAzMNO17e3t7AQAGrWxsZGdAECD3AcAqBmYAQCOMZ/PsxMAaJD7AAA1AzNd8xIZADzLlStXshMAaJD7AAA1AzNde/z4cXYCAI26du1adgIADXIfAKBmYKZri4uL2QkANOrs2bPZCQA0yH0AgJqBGQAAAACAV8TATNf29vayEwBo1L1797ITAGiQ+wAANQMzXTtx4kR2AgCNunr1anYCAA1yHwCgZmCma1tbW9kJADTq+vXr2QkANMh9AICagRkA4Bij0Sg7AYAGuQ8AUDMw07WVlZXsBAAatb6+np0AQIPcBwCoGZjpmpfIAOBZbty4kZ0AQIPcBwCoGZjp2tLSUnYCAI06f/58dgIADXIfAKBmYKZrwzBkJwDQqN3d3ewEABrkPgBAzcBM1/b29rITAGjU/fv3sxMAaJD7AAA1AzNdG4/H2QkANGoymWQnANAg9wEAagZmujabzbITAGjUdDrNTgCgQe4DANQMzHTtuef8KwDA8VZXV7MTAGiQ+wAANesaXVtaWspOAKBRFy5cyE4AoEHuAwDUDMx0bXt7OzsBgEbdvHkzOwGABrkPAFAzMNO15eXl7AQAGuUZagAcx30AgJqBma7N5/PsBAAa9fDhw+wEABrkPgBAzcBM1/b397MTAGjU5uZmdgIADXIfAKBmYKZr4/E4OwGARk0mk+wEABrkPgBAzcBM12azWXYCAI2aTqfZCQA0yH0AgJqBma6NRqPsBAAadfLkyewEABrkPgBAzcBM1xYXF7MTAGjUuXPnshMAaJD7AAA1AzNd297ezk4AoFEbGxvZCQA0yH0AgJqBma4tLy9nJwDQqIsXL2YnANAg9wEAagZmura/v5+dAECjNjc3sxMAaJD7AAA1AzNdm8/n2QkANOrBgwfZCQA0yH0AgJqBma6Nx+PsBAAaNZlMshMAaJD7AAA1AzNdm81m2QkANGo6nWYnANAg9wEAagZmujYajbITAGjU6dOnsxMAaJD7AAA1AzNdW1hYyE4AoFFra2vZCQA0yH0AgJqBma7t7OxkJwDQqFu3bmUnANAg9wEAagZmurayspKdAECj1tfXsxMAaJD7AAA1AzNd29vby04AoFF3797NTgCgQe4DANQMzHRtPp9nJwDQqEePHmUnANAg9wEAagZmujYej7MTAGjUZDLJTgCgQe4DANQMzHRtNptlJwDQqOl0mp0AQIPcBwCoGZjp2sLCQnYCAI1aW1vLTgCgQe4DANQMzHRtNBplJwDQqFOnTmUnANAg9wEAagZmurazs5OdAECjbt++nZ0AQIPcBwCoGZjp2srKSnYCAI26dOlSdgIADXIfAKBmYKZru7u72QkANMoz1AA4jvsAADUDM1178uRJdgIAjdra2spOAKBB7gMA1AzMdG08HmcnANCoyWSSnQBAg9wHAKgZmOnabDbLTgCgUdPpNDsBgAa5DwBQMzDTtcXFxewEABp15syZ7AQAGuQ+AEDNwEzXSinZCQA0amlpKTsBgAa5DwBQMzDTtd3d3ewEABp1586d7AQAGuQ+AEDNwEzXVldXsxMAaNTly5ezEwBokPsAADUDM13b3t7OTgCgURsbG9kJADTIfQCAmoEZAOAY8/k8OwGABrkPAFAzMNM1L5EBwLNcuXIlOwGABrkPAFAzMNO1x48fZycA0Khr165lJwDQIPcBAGoGZrq2uLiYnQBAo86ePZudAECD3AcAqBmYAQAAAAB4RQzMdG1vby87AYBG3bt3LzsBgAa5DwBQMzDTtRMnTmQnANCoq1evZicA0CD3AQBqBma6trW1lZ0AQKOuX7+enQBAg9wHAKgZmAEAjjEajbITAGiQ+wAANQMzXVtZWclOAKBR6+vr2QkANMh9AICagZmueYkMAJ7lxo0b2QkANMh9AICagZmuLS0tZScA0Kjz589nJwDQIPcBAGoGZro2DEN2AgCN2t3dzU4AoEHuAwDUDMx0bW9vLzsBgEbdv38/OwGABrkPAFAzMNO18XicnQBAoyaTSXYCAA1yHwCgZmCma7PZLDsBgEZNp9PsBAAa5D4AQM3ATNeee86/AgAcb3V1NTsBgAa5DwBQs67RtaWlpewEABp14cKF7AQAGuQ+AEDNwEzXtre3sxMAaNTNmzezEwBokPsAADUDM11bXl7OTgCgUZ6hBsBx3AcAqBmY6dp8Ps9OAKBRDx8+zE4AoEHuAwDUDMx0bX9/PzsBgEZtbm5mJwDQIPcBAGoGZro2Ho+zEwBo1GQyyU4AoEHuAwDUDMx0bTabZScA0KjpdJqdAECD3AcAqBmY6dpoNMpOAKBRJ0+ezE4AoEHuAwDUDMx0bXFxMTsBgEadO3cuOwGABrkPAFAzMNO17e3t7AQAGrWxsZGdAECD3AcAqBmY6dry8nJ2AgCNunjxYnYCAA1yHwCgZmCma/v7+9kJADRqc3MzOwGABrkPAFAzMNO1+XyenQBAox48eJCdAECD3AcAqBmY6dp4PM5OAKBRk8kkOwGABrkPAFAzMNO12WyWnQBAo6bTaXYCAA1yHwCgZmCma6PRKDsBgEadPn06OwGABrkPAFAzMNO1hYWF7AQAGrW2tpadAECD3AcAqBmY6drOzk52AgCNunXrVnYCAA1yHwCgZmCmaysrK9kJADRqfX09OwGABrkPAFAzMNO1vb297AQAGnX37t3sBAAa5D4AQM3ATNfm83l2AgCNevToUXYCAA1yHwCgZmCma+PxODsBgEZNJpPsBAAa5D4AQM3ATNdms1l2AgCNmk6n2QkANMh9AICagZmuLSwsZCcA0Ki1tbXsBAAa5D4AQM3ATNdGo1F2AgCNOnXqVHYCAA1yHwCgZmCmazs7O9kJADTq9u3b2QkANMh9AICagZmuraysZCcA0KhLly5lJwDQIPcBAGoGZrq2u7ubnQBAozxDDYDjuA8AUDMw07UnT55kJwDQqK2trewEABrkPgBAzcBM18bjcXYCAI2aTCbZCQA0yH0AgJqBma7NZrPsBAAaNZ1OsxMAaJD7AAA1AzNdW1xczE4AoFFnzpzJTgCgQe4DANQMzHStlJKdAECjlpaWshMAaJD7AAA1AzNd293dzU4AoFF37tzJTgCgQe4DANQMzHRtdXU1OwGARl2+fDk7AYAGuQ8AUDMw07Xt7e3sBAAatbGxkZ0AQIPcBwCoGZgBAI4xn8+zEwBokPsAADUDM13zEhkAPMuVK1eyEwBokPsAADUDM117/PhxdgIAjbp27Vp2AgANch8AoGZgpmuLi4vZCQA06uzZs9kJADTIfQCAmoEZAAAAAIBXxMBM1/b29rITAGjUvXv3shMAaJD7AAA1AzNdO3HiRHYCAI26evVqdgIADXIfAKBmYKZrW1tb2QkANOr69evZCQA0yH0AgJqBGQDgGKPRKDsBgAa5DwBQMzDTtZWVlewEABq1vr6enQBAg9wHAKgZmOmal8gA4Flu3LiRnQBAg9wHAKgZmOna0tJSdgIAjTp//nx2AgANch8AoGZgpmvDMGQnANCo3d3d7AQAGuQ+AEDNwEzX9vb2shMAaNT9+/ezEwBokPsAADUDM10bj8fZCQA0ajKZZCcA0CD3AQBqBma6NpvNshMAaNR0Os1OAKBB7gMA1AzMdO255/wrAMDxVldXsxMAaJD7AAA16xpdW1payk4AoFEXLlzITgCgQe4DANQMzHRte3s7OwGARt28eTM7AYAGuQ8AUDMw07Xl5eXsBAAa5RlqABzHfQCAmoGZrs3n8+wEABr18OHD7AQAGuQ+AEDNwEzX9vf3sxMAaNTm5mZ2AgANch8AoGZgpmvj8Tg7AYBGTSaT7AQAGuQ+AEDNwEzXZrNZdgIAjZpOp9kJADTIfQCAmoGZro1Go+wEABp18uTJ7AQAGuQ+AEDNwEzXFhcXsxMAaNS5c+eyEwBokPsAADUDM13b3t7OTgCgURsbG9kJADTIfQCAmoGZri0vL2cnANCoixcvZicA0CD3AQBqBma6tr+/n50AQKM2NzezEwBokPsAADUDM12bz+fZCQA06sGDB9kJADTIfQCAmoGZro3H4+wEABo1mUyyEwBokPsAADUDM12bzWbZCQA0ajqdZicA0CD3AQBqBma6NhqNshMAaNTp06ezEwBokPsAADUDM11bWFjITgCgUWtra9kJADTIfQCAmoGZru3s7GQnANCoW7duZScA0CD3AQBqBma6trKykp0AQKPW19ezEwBokPsAADUDM13b29vLTgCgUXfv3s1OAKBB7gMA1AzMdG0+n2cnANCoR48eZScA0CD3AQBqBma6Nh6PsxMAaNRkMslOAKBB7gMA1AzMdG02m2UnANCo6XSanQBAg9wHAKgZmOnawsJCdgIAjVpbW8tOAKBB7gMA1AzMdG00GmUnANCoU6dOZScA0CD3AQBqBma6trOzk50AQKNu376dnQBAg9wHAKgZmOnayspKdgIAjbp06VJ2AgANch8AoGZgpmu7u7vZCQA0yjPUADiO+wAANQMzXXvy5El2AgCN2trayk4AoEHuAwDUDMx0bTweZycA0KjJZJKdAECD3AcAqBmY6dpsNstOAKBR0+k0OwGABrkPAFAzMNO1xcXF7AQAGnXmzJnsBAAa5D4AQM3ATNdKKdkJADRqaWkpOwGABrkPAFAzMNO13d3d7AQAGnXnzp3sBAAa5D4AQM3ATNdWV1ezEwBo1OXLl7MTAGiQ+wAANQMzXdve3s5OAKBRGxsb2QkANMh9AICagRkA4Bjz+Tw7AYAGuQ8AUDMw0zUvkQHAs1y5ciU7AYAGuQ8AUDMw07XHjx9nJwDQqGvXrmUnANAg9wEAagZmura4uJidAECjzp49m50AQIPcBwCoGZgBAAAAAHhFDMx0bW9vLzsBgEbdu3cvOwGABrkPAFAzMNO1EydOZCcA0KirV69mJwDQIPcBAGoGZrq2tbWVnQBAo65fv56dAECD3AcAqBmYAQCOMRqNshMAaJD7AAA1AzNdW1lZyU4AoFHr6+vZCQA0yH0AgJqBma55iQwAnuXGjRvZCQA0yH0AgJqBma4tLS1lJwDQqPPnz2cnANAg9wEAagZmujYMQ3YCAI3a3d3NTgCgQe4DANQMzHRtb28vOwGARt2/fz87AYAGuQ8AUDMw07XxeJydAECjJpNJdgIADXIfAKBmYKZrs9ksOwGARk2n0+wEABrkPgBAzcBM1557zr8CABxvdXU1OwGABrkPAFCzrtG1paWl7AQAGnXhwoXsBAAa5D4AQM3ATNe2t7ezEwBo1M2bN7MTAGiQ+wAANQMzXVteXs5OAKBRnqEGwHHcBwCoGZjp2nw+z04AoFEPHz7MTgCgQe4DANQMzHRtf38/OwGARm1ubmYnANAg9wEAagZmujYej7MTAGjUZDLJTgCgQe4DANQMzHRtNptlJwDQqOl0mp0AQIPcBwCoGZjp2mg0yk4AoFEnT57MTgCgQe4DANQMzHRtcXExOwGARp07dy47AYAGuQ8AUDMw07Xt7e3sBAAatbGxkZ0AQIPcBwCoGZjp2vLycnYCAI26ePFidgIADXIfAKBmYKZr+/v72QkANGpzczM7AYAGuQ8AUDMw07X5fJ6dAECjHjx4kJ0AQIPcBwCoGZjp2ng8zk4AoFGTySQ7AYAGuQ8AUDMw07XZbJadAECjptNpdgIADXIfAKBmYKZro9EoOwGARp0+fTo7AYAGuQ8AUDMw07WFhYXsBAAatba2lp0AQIPcBwCoGZjp2s7OTnYCAI26detWdgIADXIfAKBmYKZrKysr2QkANGp9fT07AYAGuQ8AUDMw07W9vb3sBAAadffu3ewEABrkPgBAzcBM1+bzeXYCAI169OhRdgIADXIfAKBmYKZr4/E4OwGARk0mk+wEABrkPgBAzcBM12azWXYCAI2aTqfZCQA0yH0AgJqBma4tLCxkJwDQqLW1tewEABrkPgBAzcBM10ajUXYCAI06depUdgIADXIfAKBmYKZrOzs72QkANOr27dvZCQA0yH0AgJqBma6trKxkJwDQqEuXLmUnANAg9wEAagZmura7u5udAECjPEMNgOO4DwBQMzDTtSdPnmQnANCora2t7AQAGuQ+AEDNwEzXxuNxdgIAjZpMJtkJADTIfQCAmoGZrs1ms+wEABo1nU6zEwBokPsAADUDM11bXFzMTgCgUWfOnMlOAKBB7gMA1AzMdK2Ukp0AQKOWlpayEwBokPsAADUDM13b3d3NTgCgUXfu3MlOAKBB7gMA1AzMdG11dTU7AYBGXb58OTsBgAa5DwBQMzDTte3t7ewEABq1sbGRnQBAg9wHAKgZmAEAjjGfz7MTAGiQ+wAANQMzXfMSGQA8y5UrV7ITAGiQ+wAANQMzXXv8+HF2AgCNunbtWnYCAA1yHwCgZmCma4uLi9kJADTq7Nmz2QkANMh9AICagRkAAAAAgFfEwEzX9vb2shMAaNS9e/eyEwBokPsAADUDM107ceJEdgIAjbp69Wp2AgANch8AoGZgpmtbW1vZCQA06vr169kJADTIfQCAmoEZAOAYo9EoOwGABrkPAFAzMNO1lZWV7AQAGrW+vp6dAECD3AcAqBmY6ZqXyADgWW7cuJGdAECD3AcAqBmY6drS0lJ2AgCNOn/+fHYCAA1yHwCgZmCma8MwZCcA0Kjd3d3sBAAa5D4AQM3ATNf29vayEwBo1P3797MTAGiQ+wAANQMzXRuPx9kJADRqMplkJwDQIPcBAGoGZro2m82yEwBo1HQ6zU4AoEHuAwDUDMx07bnn/CsAwPFWV1ezEwBokPsAADXrGl1bWlrKTgCgURcuXMhOAKBB7gMA1AzMdG17ezs7AYBG3bx5MzsBgAa5DwBQMzDTteXl5ewEABrlGWoAHMd9AICagZmuzefz7AQAGvXw4cPsBAAa5D4AQM3ATNf29/ezEwBo1ObmZnYCAA1yHwCgZmCma+PxODsBgEZNJpPsBAAa5D4AQM3ATNdms1l2AgCNmk6n2QkANMh9AICagZmujUaj7AQAGnXy5MnsBAAa5D4AQM3ATNcWFxezEwBo1Llz57ITAGiQ+wAANQMzXdve3s5OAKBRGxsb2QkANMh9AICagZmuLS8vZycA0KiLFy9mJwDQIPcBAGoGZrq2v7+fnQBAozY3N7MTAGiQ+wAANQMzXZvP59kJADTqwYMH2QkANMh9AICagZmujcfj7AQAGjWZTLITAGiQ+wAANQMzXZvNZtkJADRqOp1mJwDQIPcBAGoGZro2Go2yEwBo1OnTp7MTAGiQ+wAANQMzXVtYWMhOAKBRa2tr2QkANMh9AICagZmu7ezsZCcA0Khbt25lJwDQIPcBAGoGZrq2srKSnQBAo9bX17MTAGiQ+wAANQMzXdvb28tOAKBRd+/ezU4AoEHuAwDUDMx0bT6fZycA0KhHjx5lJwDQIPcBAGoGZro2Ho+zEwBo1GQyyU4AoEHuAwDUDMx0bTabZScA0KjpdJqdAECD3AcAqBmY6drCwkJ2AgCNWltby04AoEHuAwDUDMx0bTQaZScA0KhTp05lJwDQIPcBAGoGZrq2s7OTnQBAo27fvp2dAECD3AcAqBmY6drKykp2AgCNunTpUnYCAA1yHwCgZmCma7u7u9kJADTKM9QAOI77AAA1AzNde/LkSXYCAI3a2trKTgCgQe4DANQMzHRtPB5nJwDQqMlkkp0AQIPcBwCoGZjp2mw2y04AoFHT6TQ7AYAGuQ8AUDMw07XFxcXsBAAadebMmewEABrkPgBAzcBM10op2QkANGppaSk7AYAGuQ8AUDMw07Xd3d3sBAAadefOnewEABrkPgBAzcBM11ZXV7MTAGjU5cuXsxMAaJD7AAA1AzNd297ezk4AoFEbGxvZCQA0yH0AgJqBGQDgGPP5PDsBgAa5DwBQMzDTNS+RAcCzXLlyJTsBgAa5DwBQMzDTtcePH2cnANCoa9euZScA0CD3AQBqBma6tri4mJ0AQKPOnj2bnQBAg9wHAKgZmAEAAAAAeEUMzHRtb28vOwGARt27dy87AYAGuQ8AUDMw07UTJ05kJwDQqKtXr2YnANAg9wEAagZmura1tZWdAECjrl+/np0AQIPcBwCoGZgBAI4xGo2yEwBokPsAADUDM11bWVnJTgCgUevr69kJADTIfQCAmoGZrnmJDACe5caNG9kJADTIfQCAmoGZri0tLWUnANCo8+fPZycA0CD3AQBqBma6NgxDdgIAjdrd3c1OAKBB7gMA1AzMdG1vby87AYBG3b9/PzsBgAa5DwBQMzDTtfF4nJ0AQKMmk0l2AgANch8AoGZgpmuz2Sw7AYBGTafT7AQAGuQ+AEDNwEzXnnvOvwIAHG91dTU7AYAGuQ8AULOu0bWlpaXsBAAadeHChewEABrkPgBAzcBM17a3t7MTAGjUzZs3sxMAaJD7AAA1AzNdW15ezk4AoFGeoQbAcdwHAKgZmOnafD7PTgCgUQ8fPsxOAKBB7gMA1AzMdG1/fz87AYBGbW5uZicA0CD3AQBqBma6Nh6PsxMAaNRkMslOAKBB7gMA1AzMdG02m2UnANCo6XSanQBAg9wHAKgZmOnaaDTKTgCgUSdPnsxOAKBB7gMA1AzMdG1xcTE7AYBGnTt3LjsBgAa5DwBQMzDTte3t7ewEABq1sbGRnQBAg9wHAKgZmOna8vJydgIAjbp48WJ2AgANch8AoGZgpmv7+/vZCQA0anNzMzsBgAa5DwBQMzDTtfl8np0AQKMePHiQnQBAg9wHAKgZmOnaeDzOTgCgUZPJJDsBgAa5DwBQMzDTtdlslp0AQKOm02l2AgANch8AoGZgpmuj0Sg7AYBGnT59OjsBgAa5DwBQMzDTtYWFhewEABq1traWnQBAg9wHAKgZmOnazs5OdgIAjbp161Z2AgANch8AoGZgpmsrKyvZCQA0an19PTsBgAa5DwBQMzDTtb29vewEABp19+7d7AQAGuQ+AEDNwEzX5vN5dgIAjXr06FF2AgANch8AoGZgpmvj8Tg7AYBGTSaT7AQAGuQ+AEDNwEzXZrNZdgIAjZpOp9kJADTIfQCAmoGZri0sLGQnANCotbW17AQAGuQ+AEDNwEzXRqNRdgIAjTp16lR2AgANch8AoGZgpms7OzvZCQA06vbt29kJADTIfQCAmoGZrq2srGQnANCoS5cuZScA0CD3AQBqBma6tru7m50AQKM8Qw2A47gPAFAzMNO1J0+eZCcA0Kitra3sBAAa5D4AQM3ATNfG43F2AgCNmkwm2QkANMh9AICagZmuzWaz7AQAGjWdTrMTAGiQ+wAANQMzXVtcXMxOAKBRZ86cyU4AoEHuAwDUDMx0rZSSnQBAo5aWlrITAGiQ+wAANQMzXdvd3c1OAKBRd+7cyU4AoEHuAwDUDMx0bXV1NTsBgEZdvnw5OwGABrkPAFAzMNO17e3t7AQAGrWxsZGdAECD3AcAqBmYAQCOMZ/PsxMAaJD7AAA1AzNd8xIZADzLlStXshMAaJD7AAA1AzNde/z4cXYCAI26du1adgIADXIfAKBmYKZri4uL2QkANOrs2bPZCQA0yH0AgJqBGQAAAACAV8TATNf29vayEwBo1L1797ITAGiQ+wAANQMzXTtx4kR2AgCNunr1anYCAA1yHwCgZmCma1tbW9kJADTq+vXr2QkANMh9AICagRkA4Bij0Sg7AYAGuQ8AUDMw07WVlZXsBAAatb6+np0AQIPcBwCoGZjpmpfIAOBZbty4kZ0AQIPcBwCoGZjp2tLSUnYCAI06f/58dgIADXIfAKBmYKZrwzBkJwDQqN3d3ewEABrkPgBAzcBM1/b29rITAGjU/fv3sxMAaJD7AAA1AzNdG4/H2QkANGoymWQnANAg9wEAagZmujabzbITAGjUdDrNTgCgQe4DANQMzHTtuef8KwDA8VZXV7MTAGiQ+wAANesaXVtaWspOAKBRFy5cyE4AoEHuAwDUDMx0bXt7OzsBgEbdvHkzOwGABrkPAFAzMNO15eXl7AQAGuUZagAcx30AgJqBma7N5/PsBAAa9fDhw+wEABrkPgBAzcBM1/b397MTAGjU5uZmdgIADXIfAKBmYKZr4/E4OwGARk0mk+wEABrkPgBAzcBM12azWXYCAI2aTqfZCQA0yH0AgJqBma6NRqPsBAAadfLkyewEABrkPgBAzcBM1xYXF7MTAGjUuXPnshMAaJD7AAA1AzNd297ezk4AoFEbGxvZCQA0yH0AgJqBma4tLy9nJwDQqIsXL2YnANAg9wEAagZmura/v5+dAECjNjc3sxMAaJD7AAA1AzNdm8/n2QkANOrBgwfZCQA0yH0AgJqBma6Nx+PsBAAaNZlMshMAaJD7AAA1AzNdm81m2QkANGo6nWYnANAg9wEAagZmujYajbITAGjU6dOnsxMAaJD7AAA1AzNdW1hYyE4AoFFra2vZCQA0yH0AgJqBma7t7OxkJwDQqFu3bmUnANAg9wEAagZmurayspKdAECj1tfXsxMAaJD7AAA1AzNd29vby04AoFF3797NTgCgQe4DANQMzHRtPp9nJwDQqEePHmUnANAg9wEAagZmujYej7MTAGjUZDLJTgCgQe4DANQMzHRtNptlJwDQqOl0mp0AQIPcBwCoGZjp2sLCQnYCAI1aW1vLTgCgQe4DANQMzHRtNBplJwDQqFOnTmUnANAg9wEAagZmurazs5OdAECjbt++nZ0AQIPcBwCoGZjp2srKSnYCAI26dOlSdgIADXIfAKBmYKZru7u72QkANMoz1AA4jvsAADUDM1178uRJdgIAjdra2spOAKBB7gMA1AzMdG08HmcnANCoyWSSnQBAg9wHAKgZmOnabDbLTgCgUdPpNDsBgAa5DwBQMzDTtcXFxewEABp15syZ7AQAGuQ+AEDNwEzXSinZCQA0amlpKTsBgAa5DwBQMzDTtd3d3ewEABp1586d7AQAGuQ+AEDNwEzXVldXsxMAaNTly5ezEwBokPsAADUDM13b3t7OTgCgURsbG9kJADTIfQCAmoEZAOAY8/k8OwGABrkPAFAzMNM1L5EBwLNcuXIlOwGABrkPAFAzMNO1x48fZycA0Khr165lJwDQkEePIt7ylohv/Mafil/4hewaAGiHgZmuLS4uZicA0KizZ89mJwDQgM3NiM/8zIgzZyI+8iMj/upf/W3xPu8T8bEfG/HjP55dBwD5FrIDAAAAoEW/8AsRH/zBEffuReztRWxtRUSMIiLiu74r4vnnI37gByK8agYAPXtNPYO5lHK7lPIRr+Lne3Mp5UuO/PXnlFJ+vpTyqJSy9mp1tOLV/vv/rrC3t5edAECj7t27l50AQLJP//RfGZefNgwRb397xJvedPDnANCr19TAnKmUshgRXxkRf2AYhpPDMGz+On2e26WU3VLK65/68f9SShlKKReO/NiHlFK+u5TyoJTyS6WU/1hK+ZOHb3tjKeXJ4Rj+wh/fdfi2r3/qx3dKKQ9/PR7Pu9rh47rzct//xIkTv545APwGdvXq1ewEABLduxfxvd97/Lh81ObmwTOZAaBXBuZ3nfeMiJWI+JFX4XP9VER80gt/UUq5EhHVUlpK+V0R8X0R8f0R8X4RsRYRnxMRH3nk3e4ejuEv/PGmiIhhGD776I9HxLdGxD9+Vz6AUkoTL8+ydfA9bgDwq1y/fj07AYBE/+bfRLyc37Ll0aODl8sAgF41MfK9i/2OUsrXRsTZiPjOOBhV/2hEfMYwDL/nhXcqpQwR8VuGYfiJUspHRcSXR8R7R8TbI+KrhmH48lLKp73YzzvyY+sR8V8O//JBKeU/DsPw4aWUr4mIj4+Id4uIH4+Izx2G4d8d/pwviogPiIjtiPifI+JnIuJTh2H4oZfxGL8pIj4lIv724V9/akR8Y0R8yZH3+VsR8Q+HYfibR35sGhGf8DI+/juUUsYR8Ycj4mNe5k/5VX//h2HYLqW8MSK++bD5L0TEvyqlfGpE/MWI+MyIOB0R/yYiPnsYhl86/Nz/OCI+LCJWI+K/Hn6sHzl826/6ZxYRfzcivicilkspjw571odhuPvUY/qsiPisiIg3vOEN8fzzz8elS5fi9u3bsbW1FZPJJKbTaZw5cyaWlpbizp07cfny5djY2Ij5fB5XrlyJa9euveM3f7p3715cvXo1rl+/HqPRKNbX1+PGjRtx/vz52N3djfv377/jY66ursaFCxfi5s2bceHChXj48GFsbm6+4+0nT56Mc+fOxcbGRly8eDE2NzfjwYMH73j76dOnY21tLW7duhXr6+tx9+7dePTo0Tvevra2FqdOnYrbt297TB6Tx+QxeUy/xsd0+/btOHv27GvqMb0W/zl5TB6Tx+Qx/Xo9pp/7ufeL/f2T8XL+s/n27fvx/PP/rfnH9Fr85+QxeUwek8fUymPqWRleQy8WVUq5HRGP4uBZurOI+K6I+LcR8RPx4gPzvYj4hGEY/l0p5d0j4jcNw/CfX2pgLqW8OSLuDMPwVw9fmuKnImJxGIb9w/f9E3EweP5yRPz5iPj8iLhwOLh+UUR8QRwM0P8yDsbh/3EYhg99GY/xMyLi70TEx0XERkT8dET89xFxOyJ+U0Tcj4iHEfERwzD822d8nDdGxDcPw3D+JT7fp0TEF0XExeEl/p/lWX//D//+vDEi/nVEfEVEfGEcPHv+s+Lgmdh/JCJ+ISK+NiJeNwzDJx1+vD8VB8+c3o2IvxkRbxyG4erh2571z+xlPa4XXL16dbh27drLeVcAOvOLv/iL8frXv/6l3xGA16Tnnz94feVHj178/VZXI770SyM+93NfjSoAWlVKmQ7D8MHZHRleiy+R8XXDMLz18FmwfyOOvJTEi9iLiA8opbxuGIa3DcPwn98VIcMwfPMwDJvDMOwPw/AVEbEcEe9/5F1+YBiG7x6GYR4Hz0r+oHfiw7/wLObfHxE3I+Jnj7zt3ePgn+1L/e5E5w5fn/mFP457dvOnRsQ3vtS4fMSL/f1/EhF/fRiGnWEYtiLisyPirwzDcGcYhp04GLL/yAsvnzEMw/81DMPDI2/7oFLKux1+rHfJPzMvkQHAs9y4cSM7AYBEv/f3Rpw69dLvNwwRn/zJv/49ANCq1+LA/NYjf/7TEXHuZfycPxwRHxURP11K+f7D1y/+NSulfF4p5WYp5ZdLKQ/i4KUyjj4V6ueO/PnjiFh5J16b+Jsi4o9FxKfFwctjHPW2OBhzz77Ex7g7DMPpI398+1P97xMRbzzm47+YF/v7/wvDMGwf+ev3jYj/94WBOw6G8nlEvGcpZVRK+bJSyq1Sytvj4NnZEb/y9+9d8s9saWnplfw0ADpw/vzL+mYYAF6jnnsu4qu+KuLFfl/wEyci/uyfjVhbe/W6AKA1r8WB+b2P/Pn7RMTdOHi5hnf8sqCU8t8d/QnDMPynYRg+NiLOxMHrBr8wtL7oz3sxpZQPi4PXF/6EiHj3YRhOx8FLZZSX/1CebRiGn46Dl+T4qIj4J0+97XFE/Ic4GGF/LT45Iv79MAw/+U78nOP+/r8j7an3fWtEfORTI/fKMAw/Gwfj+cdGxEfEwTB/4fDnlIgX/Wf2Tr3my2vpJWIAeNfa3d3NTgAg2Sd+YsRXf3XEysrBS2G8YGnp4Mc+/dMjvuzL0vIAoAmvxYH5z5RSzpdS3iMi/kpEfFsc/AZxH1hKuVpKWYmDl1uIiIhSylIp5Y+XUt5tGIa9OPgN454cvvmZP+9lOBUR+3Hw2sILpZQvjIjX/Rof29M+PSI+fBiG2TFv+4sR8WmllM8vpaxFRJRSPqiU8o/eiY//KRHx5ney6bi//8/y9RHxN0op73vY94ZSyscevu1UROxExGYcjPxf+sJPeol/Zj8fEWtHXkrjRe3t7b0TDw2Anty/fz87AYAGfOZnRvzMz0R84RcevGzG5cu/HH/mz0T8yI9EfO3XHjzTGQB69lo8hd8SEd8bET8ZEbci4kuGYdiIiC+Og99k7scj4gee+jmfHBG3D1+K4bMj4o9HRLyMn/di/mVE/Iv4ld+Ebzvql4/4NRuG4dYwDD/0jLe9JSI+/PCPnyyl/FJE/P2I+O6X87EPX3LifBz8JnvvjF/19/9F3vdrIuKfRsT3llIeRsQPRsTvPHzbN8bB37efjYj/dvi2o571z+xHI+Jb4+AxPyilvOhLpIzH45f/yADoymQyyU4AoBFveEPEF3xBxPd/f8Rb3vJcfOVXRvzm35xdBQBtKF4igJ69//u///BjP/Zj2RkANOj555+PN77xjdkZADTGfQDgOKWU6TAMH5zdkeG1+AxmeNme8/1sADzD6tEX2wSAQ+4DANQWsgOolVLeJw5eEuI4HzAMw8+8mj1Htdz2Si0tLWUnANCoCxcuZCcA0CD3AQBqBubGHI60J7M7jtNy2yu1vb2dnQBAo27evBnv+Z7vmZ0BQGPcBwCoeX0Aura8vJydAECjPEMNgOO4DwBQMzDTtfl8np0AQKMePnyYnQBAg9wHAKgZmOna/v5+dgIAjdrc3MxOAKBB7gMA1AzMdG08HmcnANCoyWSSnQBAg9wHAKgZmOnabDbLTgCgUdPpNDsBgAa5DwBQMzDTtdFolJ0AQKNOnjyZnQBAg9wHAKgZmOna4uJidgIAjTp37lx2AgANch8AoGZgpmvb29vZCQA0amNjIzsBgAa5DwBQMzDTteXl5ewEABp18eLF7AQAGuQ+AEDNwEzX9vf3sxMAaNTm5mZ2AgANch8AoGZgpmvz+Tw7AYBGPXjwIDsBgAa5DwBQMzDTtfF4nJ0AQKMmk0l2AgANch8AoGZgpmuz2Sw7AYBGTafT7AQAGuQ+AEDNwEzXRqNRdgIAjTp9+nR2AgANch8AoGZgpmsLCwvZCQA0am1tLTsBgAa5DwBQMzDTtZ2dnewEABp169at7AQAGuQ+AEDNwEzXVlZWshMAaNT6+np2AgANch8AoGZgpmt7e3vZCQA06u7du9kJADTIfQCAmoGZrs3n8+wEABr16NGj7AQAGuQ+AEDNwEzXxuNxdgIAjZpMJtkJADTIfQCAmoGZrs1ms+wEABo1nU6zEwBokPsAADUDM11bWFjITgCgUWtra9kJADTIfQCAmoGZro1Go+wEABp16tSp7AQAGuQ+AEDNwEzXdnZ2shMAaNTt27ezEwBokPsAADUDM11bWVnJTgCgUZcuXcpOAKBB7gMA1AzMdG13dzc7AYBGeYYaAMdxHwCgZmCma0+ePMlOAKBRW1tb2QkANMh9AICagZmujcfj7AQAGjWZTLITAGiQ+wAANQMzXZvNZtkJADRqOp1mJwDQIPcBAGoGZrq2uLiYnQBAo86cOZOdAECD3AcAqBmY6VopJTsBgEYtLS1lJwDQIPcBAGoGZrq2u7ubnQBAo+7cuZOdAECD3AcAqBmY6drq6mp2AgCNunz5cnYCAA1yHwCgZmCma9vb29kJADRqY2MjOwGABrkPAFAzMAMAHGM+n2cnANAg9wEAagZmuuYlMgB4litXrmQnANAg9wEAagZmuvb48ePsBAAade3atewEABrkPgBAzcBM1xYXF7MTAGjU2bNnsxMAaJD7AAA1AzMAAAAAAK+IgZmu7e3tZScA0Kh79+5lJwDQIPcBAGoGZrp24sSJ7AQAGnX16tXsBAAa5D4AQM3ATNe2trayEwBo1PXr17MTAGiQ+wAANQMzAMAxRqNRdgIADXIfAKBmYKZrKysr2QkANGp9fT07AYAGuQ8AUDMw0zUvkQHAs9y4cSM7AYAGuQ8AUDMw07WlpaXsBAAadf78+ewEABrkPgBAzcBM14ZhyE4AoFG7u7vZCQA0yH0AgJqBma7t7e1lJwDQqPv372cnANAg9wEAagZmujYej7MTAGjUZDLJTgCgQe4DANQMzHRtNptlJwDQqOl0mp0AQIPcBwCoGZjp2nPP+VcAgOOtrq5mJwDQIPcBAGrWNbq2tLSUnQBAoy5cuJCdAECD3AcAqBmY6dr29nZ2AgCNunnzZnYCAA1yHwCgVoZhyG6ANKWUhxHxY9kdADTp9RHxi9kRADTHfQDgOO8/DMOp7IgMC9kBkOzHhmH44OwIANpTSvkhNwKAp7kPABynlPJD2Q1ZvEQGAAAAAACviIEZAAAAAIBXxMBM7/5+dgAAzXIjADiO+wDAcbq9D36TPwAAAAAAXhHPYAYAAAAA4BUxMAMAAAAA8IoYmAGALpRS3lxK+ZLDP/+wUsqPvUqf9y+XUv7PV+NzAfSilHKhlDKUUhayW45TSvmiUso3v8jbf6SU8sZXryji8O/X+72anxOgNe7HO+/l3A8DMwDQhFLK7VLK/VLK+MiPfUYp5fl39ecahuHfDcPw/u/qj1tKeWMp5c5Tn+tLh2H4jHf15wL4jerw6/1uKeX1T/34fzn8j9gLSWmvmmEYPnAYhuezOwBebYc3YKuU8ujIH+eyu36jaPV+GJgBgJaMIuLPZwa0+mwGgNeYn4qIT3rhL0opVyLiRF4OAK+iNw3DcPLIH3ezg/i1MTADAC35WxHxeaWU08e9sZTyu0sp/6mU8suH//d3P+sDlVJ+eynlP5dSHpZSvi0iVo68rXqm8eEzKf5SKeWHI2JWSlkopXxoKeUtpZQHpZT/evRb0Uop71FK+YZSyt1SyttKKd95+Mzr74mIc0efjfH0t7mVUv6nw29te1BKeb6Ucumpjs8rpfzw4WP8tlLKO7oBXkO+KSI+5chff2pEfOPRdyilfPThs5rfXkp5aynli571wUop71ZK+QellHullJ8tpXxJKWX0jPf9kFLKDx1+3J8vpXzlkbcd+7X/8P78YinlvQ//+oMOv/7/1hd5jCuHX8cfHt6jDzryeW6XUj7iSM9/OPyc90opX1dKWTp8WymlfNXhd/i8vZRyvZRy+fBty6WULy+l/Mzh4/j6Usrqkc/x+Ycf724p5U+9SCdAuhf7Ol5K+bRSyr8//Hr4oJTyk4dflz/t8D7cL6V86pGP5X68yvfDwAwAtOSHIuL5iPi8p99QSnmPiPjnEfG1EbEWEV8ZEf+8lLJ2zPsuRcR3xsGA8R4R8Y8j4g+/xOf+pIj46Ig4HRHvefi5vuTw539eRPw/pZQ3HL7vN8XBM+0+MCLORMRXDcMwi4iPjIi7z3o2RillPSK+NSI+NyLeEBHfHRHf9cIvBA99QkT8oYj4TRHx2yLi016iG+A3oh+MiNeVUi4d/of8H42Ip19zchYHI/TpOPj6/DmllI97xsd7c0TsR8T7RcRvj4g/EBHPenmir4mIrxmG4XURcTEivj0iopTyXvGMr/3DMLwlIv5eRPzDw/8I/+aI+GvDMPzoizzGj42D+/MeEfEtEfGdpZTFY95vHhF/ISJeHxG/KyJ+X0T86cO3/YGI+L0RsR4R7xYHN2Lz8G1fdvjjVw8f93tFxBcePpY/dNj/+yPit0TER7xIJ0AL3hwv/nX8d0bED8fBfwd8S0T8o4j4HYfv/yci4utKKScP39f9eJXvh4EZAGjNF0bEnz0y5r7goyPix4dh+KZhGPaHYfjWiPjRiHjTMR/jQyNiMSK+ehiGvWEYviMi/tNLfN6vHYbhrcMwbMXBL1K/exiG7x6G4ckwDP8qDsbvjyqlnI2DIfmzh2F42+HH//6X+dg+MSL++TAM/2oYhr2I+PKIWI2Io8/E/tphGO4Ow/BLEfFdcfALP4DXoheexfz7I+JmRPzs0TcOw/D8MAzXD78O/3Ac/A90/8PTH6SU8p4R8VER8bnDMMyGYbgfEV8VB6P1cfYi4v1KKa8fhuHRMAw/ePjjz/zaf/j2L4qD/0j/j4etf+clHt90GIbvOPx6/5Vx8J00H/r0Ow3DMB2G4QcPb9vtOBgiXnicexFxKiJ+a0SUYRhuDsNwr5RSIuKzIuIvDMPwS8MwPIyILz3ymD8hIr5hGIYbh/8D6Be9RCvAq+k7D591+6AcfCfgy/k6/lPDMHzDMAzziPi2iHjviPjiYRh2hmH43ojYjYOx1P34ldZX7X4YmAGApgzDcCMi/llEfMFTbzoXET/91I/9dBz8L+5POxcRPzsMw/DU+76Ytx758/eNiP/lyC98H0TE74mIs3Hwi9lfGobhbS/x8Y5TPYZhGJ4cft6jj+Hnjvz544g4GQCvTd8UEX8sDr5T4xuffmMp5XeWUv5tKeUXSim/HBGfHQfP0nra+8bB/6h478jX7L8XB99hcpxPj4Nnbv1oOXi5pY858nGe9bU/Dv9D/80RcTkivuKFG1NK+ePlV14a6XuOfJ533JXDr/d34uAOPP0410sp/6yU8nOllLfHwX/ov/7w531fRHxdHIwR90spf7+U8ro4+C6YExExPdL6Lw5/PA4/z9G79lI3EODV9HHDMJw+/OPj4uV9Hf/5I3++FRExDMPTP3Yywv04/Hmv6v0wMAMALfrrEfGZUQ+vd+PgF29HvU889Yy3Q/ci4r0O/xf6o+/7Yo6O0W+NiG868gvf08MwjIdh+LLDt71HOf51oodjfuyo6jEc9r33Mx4DwGvaMAw/HQe/2d9HRcQ/OeZdviUi/mlEvPcwDO8WEV8fEeWY93trROxExOuPfM1+3TAMH/iMz/vjwzB8UhwMCH8zIr6jHLyO/ot97X/hW6D/ekR8Q0R8RSll+fDj/d9HXhrpI498qvd+4U9KKc9FxPk4uANP+7tx8B05v+Xw267/8tHHOQzD1w7DMImID4iDYePzI+IX42BM+cAjre82DMML/6PkvaOfP176BgJkeqe+jr8M7ke8uvfDwAwANGcYhp+Ig299+3NHfvi7I2K9lPLHysFvwveJcfCLpX92zIf4D3HwWmp/rpSyWEr5+Ij4kHci4Zsj4k2llD9YShmVUlbKwW8MeH4Yhntx8Jv5/e+llHc//Pi/9/Dn/XxErJVS3u0ZH/fbI+KjSym/7/B11P7XOPhF7VveiTaA15JPj4gPP/w23KedioPvGNkupXxIHDzb+Vc5/Lr8vXHwH+2vK6U8V0q5WEr5Vd8OHRFRSvkTh6+L+SQiHhz+8JN4ka/9h/+D4Jsj4h8cNt+LiP/tJR7bpJTy8aWUhTh47f2dOHjt6eMe59sj4lE5+E2fPudI6+84fCbeYhy8puh2RDw5bP8/IuKrSilnDt/3vUopf/Dwp357RHxaKeUDSikn4mDYAGjSO/t1/GVwP17l+2FgBgBa9cURMX7hL4Zh2IyIj4mDUXYzIv5iRHzMMAy/+PRPHIZhNyI+Pg6+7fqX4uC1j497dtyxhmF4axz85hp/OSJ+IQ6elfD58Su/dvrkOHhdsx+NiPtx8Au/GA5+s45vjYifPPyWs3NPfdwfi4PXaPvbcfDsgTdFxJsOewG6MwzDrWEYfugZb/7TEfHFpZSHcfD6/N/+Ih/qUyJiKSL+W0S8LSK+Iw6/NfkYfygifqSU8igOfsOmPzoMw9ZLfO3/c3HwjLW/dvitzX8yIv5kKeXDXqTp/4uD+/O2OLgbH3/4bdJP+7w4GD8exsF/9H/bkbe97vDH3hYH36a8GRF/6/BtfykifiIifvDwW6P/dUS8f0TEMAzfExFfHRHfd/g+3/cinQAteGe+jr8U9+NVvh+lfmlCAAAAAAB4eTyDGQAAAACAV8TADAAAAADAK2JgBgAAAADgFTEwAwAAAADwihiYAQAAAAB4RQzMAAAAAAC8IgZmAAAAAABeEQMzAAAAAACvyP8PtEQZLjV/cdEAAAAASUVORK5CYII=\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"# Define the colors for each category\n",
"category_colors = {\n",
" 1: 'green', # No direction\n",
" 2: 'blue', # Male sex-biased\n",
" 3: 'red' # Female sex-biased\n",
"}\n",
"\n",
"fig, ax = plt.subplots(figsize=(20, 20))\n",
"\n",
"# Plot the scatter plot with colors based on category\n",
"scatter = plt.scatter(result_df['Plot'], result_df['Signature_id_x'], c=result_df['Plot'].map(category_colors), s=100, zorder=2)\n",
"\n",
"# Set labels and x-axis ticks\n",
"#plt.xlabel('Sex-bias', fontsize=12)\n",
"plt.ylabel('Cancer drug + Signature', fontsize=12)\n",
"plt.xticks(range(4), [\" \",'No direction', 'Male sex-biased', 'Female sex-biased'])\n",
"\n",
"# Add grid\n",
"plt.grid(color='grey', linestyle='--', linewidth=0.5)\n",
"\n",
"# Customize font for axes labels\n",
"plt.setp(ax.get_xticklabels(), fontsize=12, color=\"black\", fontweight=\"normal\")\n",
"plt.setp(ax.get_yticklabels(), fontsize=12, color=\"black\", fontweight=\"normal\")\n",
"\n",
"# Save the plot\n",
"plt.tight_layout()\n",
"plt.savefig(\"./images_genes_overlap/enrichment_top100.svg\")\n",
"plt.show()\n"
]
}
],
"metadata": {
"anaconda-cloud": {},
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}