From bc903de00ea60f06d139d845440eefb0582194b8 Mon Sep 17 00:00:00 2001 From: piradiusquared Date: Thu, 2 Oct 2025 08:25:28 +1000 Subject: [PATCH 01/49] Setup folder configuration. Add README --- recognition/MAMBA_s4885380/README.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 recognition/MAMBA_s4885380/README.md diff --git a/recognition/MAMBA_s4885380/README.md b/recognition/MAMBA_s4885380/README.md new file mode 100644 index 000000000..e69de29bb From a495b755037cf935bb4a55e7bfd7d1a5e865c212 Mon Sep 17 00:00:00 2001 From: piradiusquared Date: Sat, 4 Oct 2025 10:56:03 +1000 Subject: [PATCH 02/49] Renamed topic folder. Added skeleton files --- recognition/{MAMBA_s4885380 => FLAN_s4885380}/README.md | 0 recognition/FLAN_s4885380/dataset.py | 0 recognition/FLAN_s4885380/modules.py | 2 ++ recognition/FLAN_s4885380/predict.py | 0 recognition/FLAN_s4885380/train.py | 0 5 files changed, 2 insertions(+) rename recognition/{MAMBA_s4885380 => FLAN_s4885380}/README.md (100%) create mode 100644 recognition/FLAN_s4885380/dataset.py create mode 100644 recognition/FLAN_s4885380/modules.py create mode 100644 recognition/FLAN_s4885380/predict.py create mode 100644 recognition/FLAN_s4885380/train.py diff --git a/recognition/MAMBA_s4885380/README.md b/recognition/FLAN_s4885380/README.md similarity index 100% rename from recognition/MAMBA_s4885380/README.md rename to recognition/FLAN_s4885380/README.md diff --git a/recognition/FLAN_s4885380/dataset.py b/recognition/FLAN_s4885380/dataset.py new file mode 100644 index 000000000..e69de29bb diff --git a/recognition/FLAN_s4885380/modules.py b/recognition/FLAN_s4885380/modules.py new file mode 100644 index 000000000..055b2b753 --- /dev/null +++ b/recognition/FLAN_s4885380/modules.py @@ -0,0 +1,2 @@ +import torch +import torch.nn as nn diff --git a/recognition/FLAN_s4885380/predict.py b/recognition/FLAN_s4885380/predict.py new file mode 100644 index 000000000..e69de29bb diff --git a/recognition/FLAN_s4885380/train.py b/recognition/FLAN_s4885380/train.py new file mode 100644 index 000000000..e69de29bb From 6d91d174e816371b621278b1b84a065d68b35469 Mon Sep 17 00:00:00 2001 From: piradiusquared Date: Wed, 8 Oct 2025 11:48:10 +1000 Subject: [PATCH 03/49] Added basic imports to load dataset from HuggingFace. --- recognition/FLAN_s4885380/dataset.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/recognition/FLAN_s4885380/dataset.py b/recognition/FLAN_s4885380/dataset.py index e69de29bb..95995774c 100644 --- a/recognition/FLAN_s4885380/dataset.py +++ b/recognition/FLAN_s4885380/dataset.py @@ -0,0 +1,4 @@ +from datasets import load_dataset +from transformers import AutoTokenizer + + From bb8a7cd12a85534f8b19dcae408bfbba73024988 Mon Sep 17 00:00:00 2001 From: piradiusquared Date: Wed, 8 Oct 2025 11:48:39 +1000 Subject: [PATCH 04/49] Some basic imports --- recognition/FLAN_s4885380/requirements.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 recognition/FLAN_s4885380/requirements.txt diff --git a/recognition/FLAN_s4885380/requirements.txt b/recognition/FLAN_s4885380/requirements.txt new file mode 100644 index 000000000..d3b562dc6 --- /dev/null +++ b/recognition/FLAN_s4885380/requirements.txt @@ -0,0 +1,3 @@ +torch +transformers +datasets From 3e09217a56d15542b01fa91f95ad49daef6ed1a3 Mon Sep 17 00:00:00 2001 From: piradiusquared Date: Wed, 8 Oct 2025 11:49:19 +1000 Subject: [PATCH 05/49] Added dataset loading. Columns are as expected (in modules for now) --- recognition/FLAN_s4885380/modules.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/recognition/FLAN_s4885380/modules.py b/recognition/FLAN_s4885380/modules.py index 055b2b753..f46775683 100644 --- a/recognition/FLAN_s4885380/modules.py +++ b/recognition/FLAN_s4885380/modules.py @@ -1,2 +1,15 @@ import torch -import torch.nn as nn + +device = torch.device("cuda" if torch.cuda.is_available() else "cpu") +print("Device:", device) + + +# Testing for dataset loading +from datasets import load_dataset +from transformers import AutoTokenizer + +dataset = load_dataset("BioLaySumm/BioLaySumm2025-LaymanRRG-opensource-track") +tokenizer = AutoTokenizer.from_pretrained("google/flan-t5-base") + + +print(dataset["train"].column_names) From fa8bed24fac26d531c861503c989313c6ed7b22f Mon Sep 17 00:00:00 2001 From: piradiusquared Date: Tue, 14 Oct 2025 16:19:48 +1000 Subject: [PATCH 06/49] Updated requirements. Found additional library for t5 tokenizer --- recognition/FLAN_s4885380/requirements.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/recognition/FLAN_s4885380/requirements.txt b/recognition/FLAN_s4885380/requirements.txt index d3b562dc6..06178e563 100644 --- a/recognition/FLAN_s4885380/requirements.txt +++ b/recognition/FLAN_s4885380/requirements.txt @@ -1,3 +1,9 @@ torch transformers datasets +peft +evaluate +rouge-score +accelerate +bitsandbytes +sentencepiece \ No newline at end of file From 85d233c672a18c1d72f48251a66235ef49c4a3d9 Mon Sep 17 00:00:00 2001 From: piradiusquared Date: Tue, 14 Oct 2025 16:20:16 +1000 Subject: [PATCH 07/49] Test preprocessor function. Added additional requirements for t5 models --- recognition/FLAN_s4885380/modules.py | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/recognition/FLAN_s4885380/modules.py b/recognition/FLAN_s4885380/modules.py index f46775683..3e335075a 100644 --- a/recognition/FLAN_s4885380/modules.py +++ b/recognition/FLAN_s4885380/modules.py @@ -3,13 +3,29 @@ device = torch.device("cuda" if torch.cuda.is_available() else "cpu") print("Device:", device) - -# Testing for dataset loading from datasets import load_dataset -from transformers import AutoTokenizer +from transformers import ( + AutoTokenizer, + AutoModelForSeq2SeqLM, + Seq2SeqTrainer, + Seq2SeqTrainingArguments, + DataCollatorForSeq2Seq +) dataset = load_dataset("BioLaySumm/BioLaySumm2025-LaymanRRG-opensource-track") tokenizer = AutoTokenizer.from_pretrained("google/flan-t5-base") print(dataset["train"].column_names) + +def preprocess_function(batch): + prefix = "translate this radiology report into a summary for a layperson: " + inputs = [prefix + report for report in batch["radiology_report"]] + targets = [report for report in batch["layman_report"]] + + model_inputs = tokenizer(inputs, max_length=1024, truncation=True) + with tokenizer.as_target_tokenizer(): + labels = tokenizer(targets, max_length=256, truncation=True) + model_inputs["labels"] = labels["input_ids"] + return model_inputs + From 5aea675544babbfbd77ef8ac573d845626974c8e Mon Sep 17 00:00:00 2001 From: piradiusquared Date: Tue, 14 Oct 2025 16:45:15 +1000 Subject: [PATCH 08/49] Preprocessing works without error for now. --- recognition/FLAN_s4885380/modules.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/recognition/FLAN_s4885380/modules.py b/recognition/FLAN_s4885380/modules.py index 3e335075a..10f413103 100644 --- a/recognition/FLAN_s4885380/modules.py +++ b/recognition/FLAN_s4885380/modules.py @@ -29,3 +29,24 @@ def preprocess_function(batch): model_inputs["labels"] = labels["input_ids"] return model_inputs +from datasets import Dataset, DatasetDict + +test_data = { + 'train': Dataset.from_dict({ + 'radiology_report': ["The chest shows significant air trapping. Bilateral apical chronic changes are present. Dorsal kyphosis is noted. No evidence of pneumothorax."], + 'layman_report': ["The chest shows a large amount of trapped air. There are long-term changes at the top of both lungs. The upper back is curved outward. There is no sign of air in the space around the lungs."] + }), + 'validation': Dataset.from_dict({ + 'radiology_report': ["Central venous catheter traversing the left jugular vein with its tip in the superior vena cava. The remainder is unchanged."], + 'layman_report': ["A central venous catheter is going through the left jugular vein and its tip is in the superior vena cava. Everything else is the same as before."] + }), + 'test': Dataset.from_dict({ + 'radiology_report': ["Chronic pulmonary changes"], + 'layman_report': ["Long-term changes in the lungs are seen."] + }) +} +dataset_test = DatasetDict(test_data) +tokenised_dataset = dataset.map(preprocess_function, batched=True, remove_columns=['radiology_report', 'layman_report']) + +print("Dataset preprocessed successfully!") +print(tokenised_dataset['train'][0].keys()) \ No newline at end of file From b00fbb20132b72cae0afba946b4cfcbcebb29020 Mon Sep 17 00:00:00 2001 From: piradiusquared Date: Tue, 14 Oct 2025 17:11:01 +1000 Subject: [PATCH 09/49] Import basic LoRA adapter from HuggingFace. Runs in rangpur --- recognition/FLAN_s4885380/modules.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/recognition/FLAN_s4885380/modules.py b/recognition/FLAN_s4885380/modules.py index 10f413103..e60966b12 100644 --- a/recognition/FLAN_s4885380/modules.py +++ b/recognition/FLAN_s4885380/modules.py @@ -49,4 +49,19 @@ def preprocess_function(batch): tokenised_dataset = dataset.map(preprocess_function, batched=True, remove_columns=['radiology_report', 'layman_report']) print("Dataset preprocessed successfully!") -print(tokenised_dataset['train'][0].keys()) \ No newline at end of file +print(tokenised_dataset['train'][0].keys()) + +# Directly from hugging face +from transformers import AutoModelForSeq2SeqLM +from peft import LoraModel, LoraConfig + +config = LoraConfig( + task_type="SEQ_2_SEQ_LM", + r=8, + lora_alpha=32, + target_modules=["q", "v"], + lora_dropout=0.01, +) + +model = AutoModelForSeq2SeqLM.from_pretrained("t5-base") +lora_model = LoraModel(model, config, "default") \ No newline at end of file From 4fc6f5d95342875c287aabb808307f095d519e32 Mon Sep 17 00:00:00 2001 From: piradiusquared Date: Tue, 14 Oct 2025 17:25:09 +1000 Subject: [PATCH 10/49] Basic README skeleton. Created folder for model diagrams. --- recognition/FLAN_s4885380/README.md | 18 ++++++++++++++++++ .../assets/flant5_architecture.jpg | Bin 0 -> 253640 bytes 2 files changed, 18 insertions(+) create mode 100644 recognition/FLAN_s4885380/assets/flant5_architecture.jpg diff --git a/recognition/FLAN_s4885380/README.md b/recognition/FLAN_s4885380/README.md index e69de29bb..a0ab4f9f0 100644 --- a/recognition/FLAN_s4885380/README.md +++ b/recognition/FLAN_s4885380/README.md @@ -0,0 +1,18 @@ +# Fine-Tuning a Flan-T5 Model for Layman Summarisation + +> Author: Yufan Pan +> ID: 4885380 + +## Flan-T5 + +### Problem + +### Architecture + +## Dataset Loading + +## Training Specification + +## Output + +## Reproducing Requirements \ No newline at end of file diff --git a/recognition/FLAN_s4885380/assets/flant5_architecture.jpg b/recognition/FLAN_s4885380/assets/flant5_architecture.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6043beeffd6e0dddb737917e5a946d171fffa293 GIT binary patch literal 253640 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

(<%{p?TaRW*T-wB>AzHfCOfoY%6WiaL zBZq3zZmXn59BD7G1j^pNU9*MXi5iE7((}CI0(PM83o({6str9Fy(^}qO2ojTcwNKf zdd$!W8WFeg>y$9#B6YmEMm3G1y@8`jTb(H+jhZF$r`0`AcH*z;y`@ge4AdB5RDln? z*fYpB<;|_}Y4gv&^4bSoX0TEb+;S;%%+YzfqqY({`Dt$-->Fi)>j&!buh#3DnUSy# zt~R{VYi*rmIXl&`Js7s1=`;y#+MHkA|1vmamk~6vs|kD#)bvuA4)QN z_>>#$fWccy7{K&&L>Z#z#DTn^>q%N}eSyamM>*dWVN z_J?WMN2aP*PGKYfi}Bz;xMN$8l%tqb4-7l~thE5mfpAaruZ`a=<<4<@ny%}rjoFpL zh-U&<%yz?cvP{CYv@Oy&>zQSP!2oln_VS7vYYdTBt_QH+DekOe zi-9pYCK=&UG?}PU3(R!I-9g$8wJ5Dg?>BDDy{yHa9sudEiQnzKS)%iX8;5Y~-2vc; zOxmW&_aZi|8cb-H&K}w!bMO1ogV3QsqhLb15eBVJN1W9wzeR67ighNSoY*~_`ppxf zSy$VfvTGp$O*gSt$XJt#kHZ(=lb}D7B|~W|BGnrdif8kBlQVcvbS8E>GdlAuZOn+# zyleZLEtM04OZR@hgWQYDIs+j{TLk5V=4SN1_$nq`llC%GAf@(JUIi-G);S5VEsAj> zcwno-yVZt(rn_p2$MQ!@Z47)~t9m`|4Y|C!301l9&HY{#2VK7>i~1jy@87*uB0Jan z!UxL~iiiSy*mh*N*}asm{ug`i9oE#g?u`aPP$^Lq=|lwuK|s3HfJze~D7{7n1*G>t zfKa42K@mkI6p>Cqdhbny&{2BmorD@7#BZ*(&pO++&i>9h-+AtR?sM;5e;^^wnK{SE zm}89heSc-^P7q0UbF?vCTn@+ir*9G9S&^)$=zG<7i_h)1;N6>n`ZW<_A)bfkzNd}0Z&}yy?C70SNQ8& zZNJMYIj19_S_xKzLc;Mz0Hv~1k%jU5@_zW?^@8#iAcB^fc^}}KZTM`7&Wj+e%00ya zX_t@+A)N!(q%+LE{4J`o(fM*wW*s}7OY$LnOn@1NL=)+;zGH~@n_jJv7au&ho{YF_ zPmG#O8Ee?OpV4#_eH|~wN(Z(8y20=pzAgQ!FK%6Itz7$?UneVn%xMT84R^Vm0W02u zti-l|9Gn3_we+j%!3b_eeCbeYTdZZTy3D%EQ_lm}5A-cV>&(rE@X*wXNR84X8Pj{u zUVB9yeV9JKeLf~A<3w>Uj?9DVIKck|k?R3*`r9GdK1Kt111)u|!xBhWg@`W_`O{sX zfJ&;_l{6zEH-@dm3| z`|MeW&pdX5Xa0SR$VjP`GTyV%*$fc+E6#AIxx!oFg2wU^B!;F|ykQ|bOUZkP8+Lpx;!_8XakJ;n?avm;2sIb4Ln`c1_pv{ z+B{t`EwJX#=JMW8pIO&I`bqNiEyiY;AN?~r;_2V4#uq{8w;$X%`L5?{L1t7*v1l-` zxjY6m68WBEqUU9%S|$XVMn9)Yya@-&8J!%-@KK(tg&BZ8uElDMruW4R+_A7h{lF$B z-)HQj%$=*b2T^qIaIQ*aCrGw~yBZJ#h*jGrFS_jpalDpy6o| zA@H;l>P#$*XolmI>0g)-$BLU~CJJ;3Fbgy`*agwTxFx>IjubE?RU;9@e6M)c z^;jr*Uo~th@~t4W-e-*?iedP2{|%-W!=43I@yUI6_LTq?nD}} zaa$g(3^NYPoAOGWt)TRbcMZk}W?aVJ>nZ@{o^B-SxLr4LNe^H^L#aGzGR%k`$>-mU zY1iNj-b>_BJ6=(@oCuGwI_c6L`(D0kTU!GdM=lfZej7)MTKCnRaL^lbe$>^nw6vN+ zZ2|)9i1qa}_J_CHKo{t_-w{K>!5eN!H90+>;Wzcq4Z>0{l?14*fmtk)RudBXeiQBP zxHNapNCwz*ilfetHB%QoD;H@ZTRy73uCx1)0i5wX?S^$0Ao>Z)p$2ii24}7O5oP^{ zNb{G-Q-9FmP5b@oYK!1N=GW+_4^bIL1?)4EWmQmrVGH{3%_3WtUHbicLhsbu6wM#3 zs1xf+kQ15$;NAUx88jdX_l<3-4oE|HN{>KSfhYMHlVii7m^Ig#{*pzrFYO>3)%5aj z&G;M2y2Q7NMCW|qxj?No1sL~9I|fajE-mU8Bx$-$S=U!b9q?>jirtt-zLeSHU^v*l zH}A)OLV?rT>n8|}TCvSZxsn%Hvj|LXn^0>A^Szp!A9lP`0I)d#qx?+w;kVm>RJ=EZ zIT9}fL1YAMZ92+jsqb`2Ltd#WNl40nj^O+B)~EF0ULic#U_rpfRUj#l6> z{XU6mQo`LNXtI07+JosbkNSRs2++g~5VVnPcj|?EIo>Kvs|8FBm4*uQ`h)jP%2PWO zCNbvx646pK`UzYKxh48sJpNCH=R*eH0!gextBTz@Z~dR3Ksjeud!X&7$|F2YR0lzQ&+l zY?HPRMn;&n6I`DT@oR1~Q zKQJgW_&Uik^!^TkDddw_q*suF%xk%uq;O1j-!P!TOBY4)Q0AN>*G=f$k}&EYIPbiX zSKtE~+Npn}&Q`_$2pK6j+et_bGLEb_122vxc_Bi{RZ67f+Ok=)Jg|T`0SF?zrj(G}OP~_9fCS@ASBa%LPWSxj^q>v-))k9P8ZH zLdno0owkEZw=4EX=g0}|B*EDGb;Mi@n(>C{%A{S$gpfb9W}AUT*@kPA1#+U+1oLd% zF<2>S)m%fr^semVcT7>4M>(0<;uP}`if6$j*i6wg=V$X=m#6`W?DE*utQuu2Kqr4) zB2&pJVD_6R6ZfTru)eGwfDS_~v!qayOrvb!%r#e2#^dcK z9^a^3;dz@&ehk96-c_45oYl@sIjP42VrZ&?&%R0Y&0GPh4>!1l-1ZIUZ*|B0%0))45J1u4MI(KM zJ za$8FB&(RIA16~?({Zq1rDYWVPPS<8c)dAs3vrzs*hkgGN_U}!ty3ce9k?QEY*2}sl9H5cP9_*UwoU)OE4_HRqPUbmXgw8f2_TCB$tTM#gju* zy4^8XbB)tD3%^CQ=^PK~3?^+ser!BYsGpI(YkL+k`qwUyHD7*#3Yd^c#tKgZl&Rna4_Pzt1r z@o0qV5p;bDAGe&WGV$Z+_Qs)o&)SiNIK^C@{D9yZ)EY`}YLb>(n>6gD$kKI?p-#FT zJ6r;_uDxxzlTWL8+b1_1SoAiu`5=ckN4T>PA8X)*>gLfBr%uj*n(~m2jtWtg`04VQ z*1C_f1}MUjBKiS7|4qJK)cWW9ZHl$}QlN{ZGnmEXK?-yR$*QDZJXcd@q;WJ&$)2&r z|6DH}%A*o^2H@vr3H8Ba8gSa@H?_We0&Jh1Zr_rpaZ)4M{_r_BD+st*LCR{%DxxOB z8mh|2rCP5^ckE#AjO%;G`dwX4rjD4DjCRBc@DDb5S$j$4=HwP3X#aIoBES9_jh-jRLv+==;Kjr}zJ6j>2Pqgob3&#E1==wt>|3F*y^o403eH!X(w2<2x_#J!@nnU2D+8LUOS-Kbbtz1 z)lGf`1oRDNm|J?Osw4vx)W2d8p_w_Uzyjhu1PA$uAd4?zW=`E3!}tEEXnfTN1RN7b zgb^fA=A}*Pi}HR`#yCTIoF1Czgw{D;IHs}N#i*xH>77c|1*JR!2(f=?oBx>`Vm<6v za~i+#nMTJ(nCx#&*-;0iH9O_uhewHr2I(Uoe9m1W$#abW!uD&WOaE>$TL5nx^$gp! zWjCQev3?^x>5;I|o%OgYKS36|8(=^_ZqVQzNq0~PTIwU6+L@)1X=5Cy#J$uP`A(uMW>iqqy$f$#06*W7G5eT`e+G|Fj+j08- z=s-uGxqK>^$I52%i`@;80a;h#uvKKu$!SMA#FLd{5+f5VcHTK(Ts$W4ofv4M? zWS*rApyoy`0Zr5MsO3A_THlIr=o8~aY_p7C=FCTn2kuBW6BEO0-{acSDc)b&@MxRy z{RtBA<4k;rhqj#Z;r7hZM16XGwxo>Fl%wW8#Z`4+LmU_LAy6b#;DCp<2%EYh$L_`uJ2ArSUBfl^_20?1Azc?9EZ z$GRf3zTib0-ZzR?Qt>^QLJuUJ=$u>>$s-1l8Dj$ylZyG&pOv=c)KcaK+aWD2k!%>> znMgF94<~-x=13(SX@9b`Sn}qJOhGIM#Z)EJy)g~6`te7HCzZG3yBr2y%PV?O{Fc7S zF&7#Dg85TEkZg%+Qxlt2hkX&c?emvtGV5q&6@mN>r4}?~lxjE)D5X;2(LTol2DtKYciDBQalZs>FgZ2t>l33!Y;yfgbL5BA#oh=L*a?z&U4No(c~Ob& zHBGYT=-ip~sm1A->787K6ON|~KIS|(XX-C_6u={L@B0%6x<_%vt{l6wnda7P`c~lS zWA^*RNcy(a8TdJK^*r&ldJBy>=J?vORGQdKNVK_r3gmFS1#1-&N>-gAowL-0_Yahqhh5g!qo z9F6RyH!t&Ec5!cRp#`?6IZ)?M(6E{ZB~g_Wt-RLPObmC6zGGI?XYUYIzGorUcEyJm zHq$n~b&F=Cces=~G{%;mIiikl#TXneksB?mSrYBn`TW%>eHTS(9z2Za@X$@7e~Ih# zAW3irajnnYixAc+L-M=D+5N`A1tHCc6XQEoZwt(`Tk3PTT zLV0{03!CGBn18fQtQfdLL=l*qhZWccH@N6kP(s_9UOo-sFQqKXsp69Tbb#a_`dw}T zHk-KGUaoNA%OLN-j<2Kya@oFz>)EXXC6aT@2S(Rcy^%Tyb~;}OkfGEt7`#$h1edV} zOe|ehr0t>@e#k9mT6DucO)BA_QQo@+*;mFI^RK{cBw<_2%&;QrSiFAFVA=vFf~?z0z} zoosqjmY{3-`VzP)aNjst8joyJ_evkNZPy#Luy#NnGfF$tS`0aFY7`i*cxSc?Pc~Qj?6>msj^_b&L?>!5?n`)OProY!Ctz?%h4o8_ zcG|Nyv%5`QVprN@?c8J1m{}ynA6t>X1N-#3JT%L)&PqMyI^z%8F2|?#&V}y$S=IHI z)Jc3?BSr5&BbYTt#Ft887Z5oMzUK2(1s1h;&sx3Ak#2(uE9uK!_C!i%&p<%%l`Xg` zQxQ^N_mxmlA>}6Jprg)6AlObXmX0Wk!-kQd_Sq)OZ`O>jieW}AzrkYP-kfSowW}V!9f$;NQ+nL z((JV^qoS9h0qvvb{NUeSEFPB?U~nGc*J7uuy$W0$-7iX&(@m)R89?zIemuPr-`54& zB)T|Zy2N?+%;iMv6Nek;goG@P2+hHQC3{a4S@$tk7%>3f_3A}Ez}8g*2-|!dRV?J2 zcqKenjL!qygvG;{m7cp|f-Pe$U%xSbph#BhkUM9#P%T-TN4&yXBmN|iyvH{#7hB$? zVj7YKV|%>o7-Plrl7~=f z5I1{fwPVBO!r@>dn!yjUYEHU^o=C}6|?y)Sp&53 z#wk(Or=ktPNddit&64POKAKlYSw%pHq|!l4_OPFGVzxdO(DZVE_XT=|x|yoTz}$zGshJ_(57?vnR#exr1NF#Mm*na0wGQ>aDA;P8Wv&e%o$6phm1b;GLvt zjxRmN2K!y%eGyW4SPl+S`A-Fckd0?*KxNc#6pgbJRaju(!@ntRSZ1#eRy(f zliN0&sX0c9Y5bPFFO+`_Pkuj53+Lj5-tPat@ zKW5lSK2%kxyt>7186FTveTp{*NR`2xY9A<_p^&}>FcSGT8VVo8D{}3&KWAHCgI?H) zz9L&FzPx7n#;~x$>SUp7R7_BWYKz)%$~n!m#}tjjp0*~R z4?&b5J%V{3^;5^8dE8cD`L?Fbdy(oXJ#sCU*v~3_tT?~31Z6;UD9kmvL$sZ|@?b%p z!!i!hzPO{zh!KObnpfDs+f3+`4y>sKB(zqnt=waDzh&x_&Eef}XI~2!t15&R?!x1^ zuqW~f75iKzXA2Ur`gy{PfN|4rSd(%>00UgM!BUng|-W0?PN}m33 z)XVc6cB-QM%|)IYVcKyUBIb9d;Y>z83guP!%!rz<)9Z^~mp`<0b979!^}?RG4xk^H zw;Cy2sp%7+5Zo;7v)wcFqILtnT1wgF?bW7tmqWKI@CUVVDd1g}2>18&4+CFUA-VaPE@!q}A?&N)|t^*|umGc&*16{Te2-~T7hLj|#o@U1ILkUfTS zVD7awU0eeyf?R%lz}z0YBObN*MINxmO8EvD=Kdec>~1?ob1}YeF+XRf3ezVK^^H#` z>TEKRCAdh`Tq`u*FiJ!Ygc<~N$?0o;nA&_nQn%O z&-jV$0F?E|%TJID&Aj|bMgxD9+c*KSA-)_o$>PVDWv3Mx`zEYCA1+i+zL7I*CwHg& zH(<<(|KjJ&$f0{ow*8*{?ViaEx{$5KD499W#!XmhNm)^uhOI0je_AOxg6CB34rN5r zKbxOb^)ztBK3nj^iGx>Nws9=mXAT`!V@{d?J(P?3{C%Zt>e-;+rK%t&MI_L)yp^yZQ!%s`|8_59T8FuRg2=CNi-mql&=|^_T?& zw(A5?$X+aJ*ZGdzS@U7XX~1ZReu9$Yp|45%=Pjs>z&bl?G$|>exkbGOl!W+WJ2Hp) zT`jf^!xZ?@lJxP}5npq4!pWZ?oFFka1#ugaOlx(dxx@)tQQH3wB@h(niUjv$!5IirS`dcXuwn!jiX5eeE)3wn> zf>|r?$^y>68AZ6z^vRK7|_Nhtt*Od=%tAw%FcWk)#{cqk1JSf9OImM`jH0qmdg+|+dLIu9yvqLd!Mi$ zY%FV%^_2do%l2*0bUek>!MPE%@xtzAkhk8lO$jow@b&gQbdwvZHMN)s18|EM${Kp4hS!NsR>W32#%YDd0lROn84=hI95<>M}oHWTAY?)(7y9-6)+o1P)@a^G3B*A>u ztWlo^`Y$b7RAJuPgbxu^xzuhiLBIsM)}oI z>p$>`6a}e$FLxd(wR%BGVk0l=m$>tPf~J=0i4)#K7bxcH@mO^)?d*F*N(}}_^Z;%5&8WJw)?7k^><_nj2X<-N-`!vl zxV-yR{&?026>`^@PNUVw^1VSKnVE|QC>y9EUi zAc5EL(8Gr$B}X>e$f@;fEFz9@-ec|9&*M8>wJ83Tr4$BKYw|VxW~kdP{2Z3e#4IFA z1z!>ff8Ymr#0m<8!VO-LxLNw?36t!O1BQ#R^=>koY1x;x+F95+@g=z zrGqr*zEF(mxp9L;V_+O@245!k^tyN1ew4oz>3aFQLVWhv4pjswc2+1Mg{aZM<`}wz zG+a-bA!-&fnl*8s_y*&B^Pn3E3AMK@!neJ$;uGMx=+rX3$L|lBH-C!5yclg=48KBv z#O&$~3Z-67E7KRMRgp1ii8Mdwp?_9;0U*Aqme>C^www-Yg)gCHB={q&>scPn4*Xf~eNE*Z78p4MMmq3m@f$4!z#rr$R2&o{0c$ zty4~W1b=@1U}`0C#JDBy>_h1W!!4PoUcAd6kZj8&;b~5RCgZZqY(tnA&uFAWf|Wae zy@=!MlPq(|pMD!D&SaiJ5_A3vfhcB%a1ge-lu;5kojvyQPCzh^TVrRB03$d+;Y`Td z{XY18|HaPu#koT#isR=~E$|R+#9(ul(S&cPQ5i_tIjFQjnxd$qaj7|O(=>69w{0hK zjnbs-=B(qWTt|3&!OVMLfi0oXX%#Ux^YO(O#C>XIQ~u0zrtfyj4J2y@H|1w$>e^w$ z^d!J&*NEGlf2sL$z{;r&0W6u*=O&D19G3gs6Ftf{-*I_yF7MHYveWb7@`mIOi@i&f zo$hFVGO-5HYtr)KRDbR5sh1z?NjW47pNa|0A;Tlv!vq&K|dVOqZ3Mgziba5|aE@hi46 zU#DBoLYIaYiv&q_vi1k67QHcvYDD3z?vSBU7W?#D*Z3&nVh2BfP%=AaG!5olc!H6j z-HUR8pCDmoi0tB^2gLsZ#e&D=MM7wcMoZoBB2t56o-Vh9;wR|-EIE^PS7N1(9sec{ zXA2jAl^?ItsXOzELI)3#41iCt@V_kpU5aZ&U;htq$*z%1ip~NYKROP z4lpvg(^KLYs=!Ks2JNs<+-`|1etgO%^=104Q=o|$@Ca+ch$6lx4u`x}+JB>ef@OZ} z>N{+%$lP#rZH?rczOk{pFB=(O#E6^nXDxv^PiiRg#LbJ@lzG>;Yw9;^m&MEs+h3xI zZl`&Ropzlp2XK!s>KFzv!&~wa8E*C+ufFy~peA_H?GnR6?;cgXf39H#s{2h|Lq)Es z?tRs4fc_F=#ES0VPM5reCK^^B+Fkn5qmyfZET1(eZ+Lu+)quH`=B`A9vKEXgOQ6iOE zx5hr!hCUwvRF*E3`d(=_>t7gf=aV~fub6!neaZ_h>wAspvKBLMmkY)JR z01r;FfmJT~q^2_EEnig}Z_qCLLbb0n&eOi9@Loq0YGMg!g*ssEqZ%x374mgbR)B>m z!?#k7BL15f&$PR=oPLI+TEBJj^#|rszlrtz4thE91&9Ny-n=6~T8x=PO2QfUMz51c ze4SZjEuvK0k>5Rk;`3?2z~h}Q-8czI~2HbTNYRDTXg1o^D({D=MAgjP9^4Ch&3oO8inq&Z0J0zfoOA#hSWjhR8ulfwV|oKDv7d;=Qc8R5`6 zHi9xx?PUk=_Nl7Z0aORvbs-l|~*7e|_9@|!ts z=(|dj&L*8UGg_QF<<4%#jk6z4Me;?APA(YnxPAxKV;=DfhrBT`=Orj)&aU4RO?zg2 z<6M2PH=~08Nvw-;1%z^01{+;+wVC3!x=C-t{B-+yIi87TwT!^sQCRpkl^bqipt zsWcUm%^iUPK&Fnl-%-{G=C-Qfc)(^*LtTA>-CLmv8b@6Q1V*gHa>uR4nRSJ`Yfo9B zd8!8kk_*1EdTBMeM>Mm{$MiA=$M|~Ev)DCA6nsZ~8NS~HfTjS|la5_ufv@$2ej=#e zfeh3X?N3mfHMx-pwBU|b0${rUlq*9cEYnYi8*9OIA=v$vB6Tg+AVrVsgso3 zy-{N_g9&G>`-o$gcAMb&`0BY1DNohu)bfrg+S!ac67Sl~W|=la;2jbYt0*0NDn?$K zCQBC_vOFmdz8oSR!^5Jh4C31Xxux8gT$GxgqFnZ)D-n=x4^zjfU_COqbH>}2J#uj>-=r^ldeJO$capW!04sSkk zo&R~$(58B+2>f5f5z#&fu+_J_likOQ% z!g%PN@pNP51?_M!$b2W$tQyz#&7j#QC+!pE9H`?Z?2Rg(Q^g@S?MJPwa@355PMe5F1ysAN@TKjvEO_vFsk_S z=2%(;)Go>VE&4en^@{6)22tdw9?xN5pd|Xr;&O-p;vtKL+D!EAv`bA{93Yy>%xD^8H3niwAIIS4XKrzv;5drCH@{OKT4o&d z{`gtjsF?6K!PH<25ONw|mK-M4rx9iUvI%Z9~zE$VTk?Pars#}`%KIIF4fQSG1O)(prX>1EEvETccb(^;YdGcjjOF)H6 zg`BT#_N(Smt6+(@v$90XHmz_gMMj+Kr;KEZ2nd6vX5N3pEa$nDL8MH z@0%3mttgcuHo`ub7?{M58XFt8ocvgGwoOGb_(afwUc`bAYnHlTRF!>?a`!7QORj39 zpCR{FLDGk7nM^#ly55-rshlr?|Dp!MKsmD*_=$iDmg_nR9X)hqj})yDLwQl`gDfVL zElIM3*M36y!;){zI;AZJaa;@=*w{O<4RanCJq#-`blS|I`EVPt+4ulm5>=M^DCo*# z()|nWSmzPB7;ApfV)+vh3v!&Z9|hXGzniy?`3npU=AD{}l zgF}X)?;p$4&hD6Jj^*nTeWz{nWmX)|BjUQ-!-PfKy|6FAj+)^7wc0d!_z-O2i14-vBTl4JJ@;4-| zpT$>1yNIn^07}$egweWpG2$US5fZ1uQuTBnfn+Gmz3`|8CnB^d&g?$rO44f^iRRgj z>#TlKJc*f&91XTn4P}4G54i6|sHLNphUwa7iv7%YY^Gn#&qwmhI zU9UEo7;BXiy4m+NAfYaWpg5THeY;j_hUUet9`%^{7pfigPh0P|eAq@cwVIU26NkUa z-_1eg>kN|ViRX1aJbTm2Uj76zeTqH{!JqXYCjfBmVr<}#FV}`%dJ6&@f8CUN>z>^8 zJ^1!M%`piwt2(w;zqkQDB0}3Lp+qYbH458<0Z=`s0gdhlKS6Yx)7XQ9Apq%o8A^Q{Z?f)Knu`0;q2{%M!)Ne(osJDH!=m>|Z)Tn`@wB^_LUG zee1f&e!!LMgGjajT_VI2Z$%=l0O*0UXp%DIuT4pj&x{-X$YeeB+ zyot>3|4J+Er2u4}{`6y5Cpco#tiUuVkx8zF7Oy2EQ*`2S3L+mBz-C{X*_^e>9esB{kx>p4qczM=?F)ir7ohf{%EOku znR*%lpY}F(j&*(psE8u7W1S!((Xi?Rk-I5=h0TXfds6d!;mcUXPZrDZzM=OY?@ggxQ$l56jwfh{gyW=tL5^UlJCt({J?BZXpcnh{nh z%{x94yV{q5S(p0MdFF-98%dX2z@CxxWiWY}y^O=-O}ZU~->JLF@UE%vb{ zP*xs zMhtfZr9*gQ)xSjRU5cW4BppZCmfq#*rFmzAV%sb^HkX%bBST)P+lYksao&!77~KhX zg7w!%NHbc;8%~%@Q6#*cyD5K4qK%}B-z})e1N(ciyPuJKTpN@3eL6a%&Vnnb{3Nv1vOV)K-Mg$h7x?P4> z1-8C|=vpB9g4q7rH#3v$)i(A8Pt+eJ+*4JG(GZETqw6n*M=lH#BfZSQn+zJaz%7Z)h%P~N- z9JEVBI}DLG1*-8(g9z|UEjm(yrmvKiw}1C_&n1_89je-*6m-xklyP1?XANTnlku@G z9Z0YcL|X0g@trlJH6#p2&cNso2os7O4y-djD$-A6V&p6#k4}QTW7{zY*M5Tbj+nQe zuaE)7f=*fd{&5fvQ0-85L37p50Z5s#HF#%kE)fafXg8au_P_woTIm8s|G$v>qL}-$ z79!yD_Os6V-d(4D_RD%+p!dNtrld9V)s=poUA817m(hj_jA+xpSsA5*b}N=BU- z?iWUth)0^#%yqH|lK1Z%E)<1UORFxDpE>tyK}FXuJTPJV-&v7yK?o?^r(QK5D;(eC zDEWkCO~hcr4cV_LsI%ltGBMtZa+nZ5aa+kf+1+lDQd+eRgPJmSGw2k=lec^VTk9)f zE;|biHV#4O)<^hITp6AEP}=sfA;!sjohAmEJzLS3Vp9V9Oftkfd`c%@YZ}7pRz;_C z6WXSR%U-o9u(*FE#;S9Z>n(stZ(Cm041cZOWfT=9CuNhi%IEQoC#)%NYLku$y6N|< zDubvxZSunC@ql65EWbtd%WST8cQMPc@5@k}5PsyC&KO3fZvP2t1;X0Xo+0&1Px?`K zNhld`6Cvs(1MzN(Wj&Dz2+5dKN!PJdz!xV9C!GNzyoeM(LLY!aH^X5LSxV3(`dHw- zbTZ>6J*v0$6A+@>p-6hJXndv|5W6aNqVW7MGJot}K2s6duKJhj#u7DZB!FVuMc^6% zMLMFQ8WSlf1dP`#e(aB&iC;~Y=1vTE07i*m4==)*b zto$WJd71Y$Ydh)G9J#by(WtgZtg)U!9CNySj5X;eNZ%*1=B>-=)e;nVB;MDyI7jAl z(dVVI&x<;>f&J%54=Y&rD6Vf zQ)7UGG1^tn2Ruy+p&6?IsKRzbnUH1X7-{LboW&IE404aMFokiY35XC=F#N>a>J|ka ze0k6#p4y4tBqwOFSc%lMTr<%i(|pood01@H>}!!pLx?(O6@S1ha}++NX|}aaY>0dr z-qOi1YoEytFm>BbLzJ5qE1#wGq<<+|k4U}1?|%Wn7oIWxi)hn-S^W5)6iohKa?T?} z8$j4r;CiP!qY-!+p1OKSc`&q2-Fzf=x3r9#;k@flP>mNfJCEL#e63Dwz^(6_{%rSa zkKINR5HS?yJ>JxPU2OyGv4`#VdVvDd_ul`ualpUl0xC8m>bLGoY#vTScO(khifRl} zfQ={&hdgFphdw(peJr>Be$R!$W6mlwALKGcRX_K}rhd2I@t9@kn_nMli=q#@x(rCu zvF*fCA>ib*o3tj@XuBh;_?}76g!zr}*18QCCjTi3kfH}Rr^mqwm_77&g)Ra0>W*zs zOAD6qiWCNnCcp&LLmxW$V-3P&d>XY{w5W&%3W?XVODKi)Yj?22^Ht^}8 zQ+I=bw!Cg8_ta?Zn~jahwtkc9%6N8!ZcV&&Q%=mMq-``i2~tcD%5l%XcCho&@MX`^ zr%zEbQdCTi&IeXWEkV;$;Sx6Kk*$7WRkZ`Nk2I?^d4dTWinWn#vfAzUTvuKMLMn*7Jw9ZwZIsIgbSfcO3MNx5}+Y||>7 zmbkFlB5Ckd@Uwp-Q^eT%x$9%GXlLxi&Z0ywvAjvfAZo{Bpj2%Pv=L!VM7$q@?JQZJ z_~r+}lZx`gTMjyVHXK&ZJlesvrbff4IK*b9n0<@pg_|MHv%-CGBNrlY3ThL`jAu6xc z5=JeU2QT#g2mgmeK=z7fiahm%tZ4>so;u+51A^*8AL!w!&xn1XeujTfbUfl-pL%k< zrLl0JU^Rhd8JG99HE14%0g<)aIxlvc-0tx5pjvWsROEx@>~;!0|G!aTe=W<)pMd8dhx~OWd0$=@&}ZNdirWTlf=5D{GI#0Tr;CuF&Vey z8>!|X7VtYTDk=RflkvOp&HS$s6L$oF6b%?~jwm3>5SaZX)Jr!**Y=HlLfv~_9$3Wg zsp@mRJqWEAzwqfWp#~d;-fq4}ngs%LxnEw7;zwG2DNV18?!neR-sQwNdUzCUOiMSA z7{H~T_ZnY|zSNBhlwo_8&08#o`9|#g36c}X0H!DDzr4oir3GvqBzq{ohL*wt^U@7M%qrLwPHLKR5%Z3JILx zFJG$);UjZnm6G;-xz&q%OCrsLVK0{(*Oxq>Qpd9&p^bNra`fUO)oo4l}E`BtjA z*;ryiburiCPtf2^foE|+p1(U>{O?kj|NnYl-=W@fkCS@O$*D;+#}`YvEBe!ySbkbqiO)mvA0R^zUQ-?w`NM z#{Y+&3ruwE7GP^&O;{wBWkL?<211)+!(^~s7~*zk*zsHu!yWK_`oP*R5hvERG4wtc z@TkyFCgJvQ-D(}QBrz0pbcq6W6ISbeB})&`VW9?bW?QEK)AXN9_W!NFe-o3q2?z#` z)EDgnI<&|D#;@IWVY<{kG~cEdqjomU131FP)o<9ba^AVl*|@C8kQTA+K^(#r&tAoM z*A}F^x{X9WE4~}{M95Ic1%8VPkg@{pMEo9LVMK||v%XeMl80C8f_c<^vrI+7qBjrp zKo&F;!~XJ;5sws1FMXYzhrh#80&c+qCjF%yT)w;yO6$VeEow{B6!W8|=z)5mYl-(uYHzxuh@~1qRQ7Yfivy0ONZ6O>=Nm9` z?Dy6kQ|G*=cY63J&3{K#VCzTRKJqV&j%g3(3tCmlK8mqPVAFYdGbP!JJ2T(ir=EkazH}lJHFEi`Ad7xm}-{vyIiW zTBOvU7hg}H;YjFFeQ+=w{FfzFd&11*`)HTDr<{{XOUB$Al`~oC**pLaL4wIZYjDjS zDN!?kxl~=|a=V){^r2E?BZoT%3JAzdF%usxb2qcWN8@qdHFMFaf8c7r-5{COqYi^=!K zr|#vre0BP9;}oSQ2&CR9FXIqSzJk!fB^P;SYcP~zS|#mYhydCuYg9NrjdO{&xXUv@ z-u6tLK9VC6Q)h{iQ`!Wk#2=1Hs@ihJkhekU>+)jQ`Q+W<-hbjwxJA?6JUI~%4^!li zNyuL|o&zhq${L-z8(lOx`rwj&o0HmRkRtQauR2Z`iT|R}25CnBs>O=u|3&%z4<^L_ z@o$6cv)S+RZma<*RwMUYAnyRcPUcEg)trPd@vV>IzRk78qbW4wV(0r7`$=}YE@TeDoO!visFB<_ufHKbxXhS5F{#~Fa!|< z2`WjV5+q5^aR3D*CjkjENX|&k3^}UgAUWqW!~ur!E}!R|I_Ir=@2&TK->v(_KP+b# zd+*h|yH|IwUaNn-G;mou72t#Rn6mh_e+f2-JCaY54~;_cF*o61&16Uu@9OgR=Jr>g zOas)=crQSom2HjxX^Q{zuV-bIVfVvlPX_QA+-HbNOlAd~Q-%Ht;Rg1GDY&PsJDbVO zJB-NCCd&}Qnpm}RJ?L2?3nnxM%*#ZxPd1YO)dvYk;s>>LJ`yD|L+Hs!! z$)3wo=D+zb8MXf-hVcKgXMUL~8he<&&I^4NvV*S+IagS^7Kh61_LUqROfa}DG=*RA zl;W|k;TtsfMpQ5z{1nmt1^b|S?V%+-TuUtmp((sFPv9JcR0xuQ!MJSWbj)jBcnN5m zT=e9E<1GNs9X{2}*#CC-NM}ybkEyRk^y(FY3o?hQScanHys0Is4{b(Eo$M^IRs@&@ z!C?XgsJ`b!sJFyH+~z!OCFm1L?qd0lpI-yi8;e~x8}rTdeto&tz<3|l_6ya|R{(O~ z2lK&-diEZ#^qD_h?!DH#8dLWiohODZxgm4AF3#o@U+oSxB|p3O8`5l?PAXT2#3b1v z@upkhZyVyCr$Gh3%NyOp8@KzMFd%=t$6ZuPa$tv6Ls&9XSedUyws8ikW%BhnoO4f9 z&d=t+a}5mpF(q@H@y(%x&^|x0f$Q!7xCHsOsmSt?Pt{a!wxUV0rRHN>H_CIs)hRU= z2SXPmIffI?>`k9Z`i1wg8%gu!uSwXvKxo>=s1I&8`OxKBERxw=2MS>=Md3(O?uMKO!FC^z5e*M7fF7kXwumi2{E4>d*QX6hS(0e~-x-rUIjOU-X zWg}#0>GilTy_ZJ9WnmECM&rar=?1+*(-@x{4bOtd3h`(`zA-+6auspVM34Cp;f1*Z z3C+T>cO^GYQ*4~rZ`@3yjQJW@U<=umS{6+w{VeecDW`zs?3gEY_tQ1vOU!=vHgHIy z%f;~=$5r4={8acD|9zudj{AUg-FPu;ZAC?Od`3*^!<>hC#xnvmSiw-;BeiRtOih>a zsKV!Wi*J0eBSN;A-6OlA+#W-}%Gd;`U3LJc0=Xk}uI_Opf4j3v20wwtPjp=fYyBdz zdzRI1rE1XGK;hM4B%O}7F|$Lf=!L%?6A`NYt9$oLOs@r>(Co8yQ)ZQi%=bZvTrL*pSlD2lv{L(F z=Eu916`u5n$vp}YLx;#wtlhLb$R}}&jEpBL#_PQ`FRP?!EoqK583&k0k%q5-Ln=8+ zMx3ZWoM?{#lOL79a^3eaYn`8L~TUWj4Xk|!J=8ba2EPyE5 zL<0+w_b~5JL!|-8CEIW*_uYTf?qfIs3Ur7{O`Px~i@uZ9rf{{lfsECD%>WT$@X`+1 z@)a6!R*Pz8K~kkNX^ebz=Y6AEu5{CQiqy8`sifE`F3!A!@{$jLmlCSaDRpG^7u5tc zqrWuVIKh^WJy+>_v>tPKWoG`grEXw+CWAc3((UuPY}qo=v(3%qLp5xRVYKo1I?^tT zpRKl{Jhj~}t4p;*^u`hC-l61Vq$(b1QwIC+<5UfEgX_68(HK6PHs8g^T zLp46}_Owrsy&~R-8^_k(&AiZmq}U~XaUK^OQgT|Jr$iEzFIHM(#_;A{pvgOUi*KyO|A?_iYsrEAKxSq_i+{|5Ys$){TEgWTw zJ>eVb{waFugwKwztI7J{si}&UFfYVcDkJH;Z&_}!jTk3oh6-PPeKzooG$X&r+TblT z$cSEe8#vj`kw&@?u}#HG-L(bcd)Mo>1P)Uj1){7VJI?!2^~zQbueR%%zGf0C5(~9E zM!C}9lG@*JV-iIEOk9W{x?y<5SzD8479?OrnH2J(9j#%CWF=I!g529lMtDbnEeW2JIM3K~gU%{>}%Ho}%$nr`s=YA&SS7tK|g5+YD( z;wl)_yIxj8e(E+H3&l0EB7ahJ=Jp-yO=lEN?`d&-)Ng}|NS+_wtF<_ zSqtp(vP)@q*EaDtCb@I-Gs;BIkR@YeLF%oq%6(rG^w8quICZ*sMs@H)6;Uv=r7PK= ztGp$dA>(tB#hm+MII&pE$%ut{g3Y-b2PXiP#E!17taR!Q@sY|MskbJhN2#79+&>T& zg$Xvq(nBmbKC7E9GV{i}I7iXy_$3<`sh;CuCIxa7W%3@_sv&o=0>0szjFW~* zz;fK>G>3(z`>h+ozG%rYaK9^X{nD4|s^h}*$oy+bY}XJE4{s5`E7ZnSzI8}qp`AO#}i?#1Z&m2PeWmz!`6@{$tZ$0c=Rv6AC*UwtVgkCoNYk|+2w4f5eE@hj4u*Ql52!8|NOel(dOFzU|2o3t1qF_ufFb{4)E_@B#e&#oO2O&My)635+6~I@iXmQ1Wks7) zcu5bl3ue2mEeZO2)(;^r?58+!hA$m1Wj6PDf}b9Y=fiAh+tu1gOCaxjMT-XL*%3D} z4_~=Id}`qA!~3{KDVRQTaL2cn%kQ+e)UNDXgMhf_Kt{l!Rcovd&yv;@J(r*I@a<{+?$6}{@ zdYms~~pPFviL-;<{ph7X2Hdb10f-0nv#*qp$lZ=@2DropC_jF-zTz{J|Kj zY~zEymoWa$c6!7y<}Aql^ms*EEz6RMjwBH;C1;wWDT|2mCLWZ0OU-F?BFx=*_}W$O z$xzOdZ&R%}jrlZfD_L)VU`it3fTv9kzT&8)Of)p1k5_5xa7nq!RlZtNTy}Zi_RWNZ z%Z7DjiQH1emL=kb@MR8h!%hTI8N++lo8ho|4FC*B?0eT@jwnvAer%V2k6&0UL3X_7 z14M-U%Xjg*Qh88!7;?(p3>q9a)Om&hQIQ(r;`bxW7)@2(t z$v!{hd<5TpRBerim&dhU_cC?bPSwtuGt{#jcQQ0oW1t$$_uz=BF7Tg81}F3*siIYo zIIZ{0>2h)%q`G6C&;}>bL~%|gcFH3!JHq&CGTl|JYpOKszABrE z*_5WAKrmNUH^ed$OOKwoFN<2nxZXR%!Cl_E=4^60`l zZbvS^-__9->6{NTWFAf*5vp6OsS0#0;7B>zQx)T^le7*%a)vsS-tvBXkWjj);ADTM zF7G_|G|J;hdYvsbp9L->%@l`J1J+^jF24{VOGDg?#*r`Su^cZM%-S;&IQ+K+TO_ox z4vdzbge=bTjkN8X! z;Z2~Sm8=+?cxA{~1Xjf0#C^tavDy!&_;=Y&p_xjgSI66i%hC+l@F>t&>LYa;Nx;-@ zX))Uo2i)qM#pdONE9@i57fVpo5S-;MqB-n*^+Y^4@r7gF(7S1}nZmmM`z`17M}re- z-V9)kKGCty;2u_x6#l&ClArB9^CxSK|53zXf#aodl`d3hnQg-_J6c75H^tfzYqiU# zOJ;dHbgz+oxtOin^X1&8&20&uTV5W1q&Fo6BMBrHqU1K@oylHJ>%GcOr9#SEg{&6c z^^0jJVn8a3?K8^5MN?(M+Ryitm?@3$A3yap64kW`ZHK;=r=HA@O;A zxMKN}!qxP4k?+dp8F3@E`4SGxO@b}D22GgU8{c~!L}EkU73hgS9r!NY&74>I@Syw8 z`T{n7hr7E1f6kD5+{o|l;@?%~hbc8*-7z2Mju+(^DIpT@8tM(+mBB;o8-?ZxP| zUMts=yYA2uR%R@ZrRf7`Y>6+Fizrpn`_7UCVZ>{`73EfDc#F{aLr>!ie;=( zZJ8i*X!ZW)X++)UsQ8JmJmTx=lx0Zb7uKZ2jSi`jBOe{b`3UU>O_2HCgxPme7C*C3 zUv8JJi+jF5Q&^4qKH+k=D;{50X?Fvm<)l(KsxdNT)qk-bBD9OmIN|j6#e-;0zWLxc zd)C}-hCFph-rXt5Ec;fX0HQM9Sa;kjtb#fAgRz`lqYmo*^+zqqdsecAhD zHA1| zkAi%MBR%+{Y=^B<>%;YMO0EqAX;wu9T3s+9Hl*%ZAL#wNnhNuW&Fs z*fC#pKTCV7Q>kbxn+Bm}r*{sTGeqr58NqAT505ID-;MB>vW@KU@!#o#tt(^k8xFB(@%^VZCnPS)~qsZPQY&|lm!$Bwwk7ps@7MC=` zbFz|sV$H8ug9cIiwdMynzae8y`aC`rAJ}6Jy_c}RG@vz^c0^N^qft7CA+gw*E+&+_^t!dGd28b(*BqkZTW)vt()GG z4R8%V8PC@Ois=D_CY3h>Jl`jC1U`>ddOABTtyz-dV6B{lAUWYx(@IfKyEuH68GbvX zt_OD|)mQGQhHrm&)eJ)?16EodO7?rdnnhv29=;$m=a9C49pcW2Ues zZt&If%vSUQc2VeUL+Yz36#C2Kf=xow$VJX=qG$VV>HSAtO-rS>^e1(;lylo}+Jx19 zWnpk(h?}cMLrKFbXWva(vCnO;2Yt!Hx1+@+50W^LH<6(K;Iqj+b&9Fv6Ak3dGH8hN zmZ=@%IkvE^yi5!d`s6V!YU{f>kmKI%9XfM>$rCOn8NY-Gg#_bNkdSV1ky3S)qtsq% zZ?L>YE3lnV1|PKkY7~By7UtXno9D7T?9x%Swx&K0oUxwHG>VxTlBeu&{tw3$9GU2U zLsXH5Re3H%b1#^mr^47NM-69)m5IaN58wUu8^W5rjwZA<8Ps)M%}q*?N_RlF7MT|- zmTH;vno}M<^8DwSGco26DKaME1I@Y5{=So+(}tofwMCgfa=_@;Fy!t%sIYdBkJ9zG zIBB};K`rpKy}T6bzzg|)PqNc9-b19rD0nJWcNjI_`na>W^+G4p4X-j!y6wR{oZVJ7Cu<_>C1(*qpz zdB>bVgsiK&+{f8!7C%T!p~%_RY@#}Cz`vV4pWDFZCk1MXPXjZj-C?rj!#v-E=7w1* z-pUe_iKjvycpjI44&k1-^JK6^p~PMOyj7jYKbsX_`{US5r}|-SPb5RkKX^;xx5I+g zs0hrfYhn+P-N-&_C#Q}36kb^Ru$@ig{zXP@jl?^8{fF66S_GN!A5%@*dc$ufoW*DF zEWOGIIHU?v_~5sw^Lim#LCq?65lTGiF5W(9QSbEg^q}IK$0W7!_ouxO64d4(5d<_D z#T*h!$Sv(x_2n1nKa2HHweP@-ZpQb%C5Y0tL?(8g0%UHEEB{)xT}CCU>LAGc!|}z* z$QC}2la>NsZWQBJ_b~l9oyz9=;nF*>2X-uYPn^d576QB$Fci_=cn9^H)DIK2J>xsa zdSCJ$DK^_utXr)rLZSs*C0x>P@V|dZoQ=Latow}nS-F0lRQQezNWRNXupV5~dpU|W zS`x#W^>D?G+j=#NIOZtTuO8gBkq}_=$BpAC(lY+RaB~fputKa$#3XgO)N0_sDBySi zB=jsj^%Ebov+s&a_H&CFQ@Cj2&^({=lR%t?)V?x3D2eAuGiW@!^^`l#Fa4c925YLR znfgOP7T*W10PJY{CIkt03KHRW3}f2-Hf5Dz>Q2*0-qIprdcqJuAWBQK!-eo`X5564 z7Tet(*|W7}LdIvuI@X;#`Q6877C>*{3^X%>F#l-zEW9f2sN0IY=E>PySw8qI6X8AK zK9o3Um=N%GbZw-B-#qbojOmxXFFGr>Z1kG2M$p3=JB97zvbk7Wfa<+bb^Jiz0TD9& zn$Q#FkY#E&@~%Vf``5JBjpt=`j&>Eg#cP_7!GRLuUaqJ0l%t_%eDqeSJruE?-i18_ zD!+=i2Yy|)x#=!j-JCI+ZW}%?wxs7wAaU}KXXmdG{)HN7xe$r0tSlePv>y_%;A3Sq z{g_tEe)D~o49x;KBVNqxCxM@BsQ?SEG^-4GFf!8;DI2+_(2I656kN~|VzfT}Ai_jn zp(x}TCJ_;_B88dKdr!ORf=|lN#bUI z9{V@Ljs}y48WvH*2348sg4-jhHlH>wyLZI;8JneX}Nb4@}xF+`_$|mY@(?HJ5S<-iC8xVrl}tu5TH8 z`j%^;&%Cne@Ze^PBVTpoPPv&`)8*d>`1|7qI2}2vs(P%fRiLRCz``b3DA_QP zan%9GzMndQjG7?N>6%V@?_eLT#~)dfOzgY=Wa8WSZ2YSb0smtgB<6P0S{;-YEjcV< ze|l?++)z(nr_RE>!bO3$8@D{|0ai&dmWC#ej(mqW8-dfD; zIF|+(?}sh zKzBqz)6DpIU6x$whFiVL_X_!ID=OEc2(jAINChQddGJPP%js1g1v<#|!hirk4|TBJyTG-`(GP+HJMxQcTy~K_@&OmoK+A zrJvJFE-ID&elh@yX~|EF`F)|K-9f2rB<-^C*6O!*j{XYDi>OU~^G+!03)VgEvoqJuF$!hzrC`CEwILbjMLjS-Ng0 z6uX41qRBj5{#bv`^^jt-Mv@Tfm7h*h(8#uQHTvA!_&{+~Um;g^NNE^K1ce=$UcAwk z8rwVRM@_fribM%b?z+gwuzyGhSh|H9Lq0)^OJ@IoG#g?!yG7+nb<1dWR_;cYWz(7) z7WTy&0EqBSPkVq`UV@Tm)clH_{ctUq<<`ffvS8NM-!Dde6Tb|Wl^QUE}V~2Va zLqNCe>#H3W&;K5V03dHq}ML?OW;5-kF9MoG5mhNc=>tC7uneR_wPfx@pC=lt-iz~62uw3*_)2~{nz6vcg}c< zRzKntdSFcFXMiQuwIyu zm=3koGE$5=I{kXngLMoQyxYPhjN|QKC51s8nY3e8JXFh35kzBFWAh-NV`XhIFhCV! zCAj-BjI?)^ayuD6xU%%R<@3#Y$ze`iV|{*@ZeSq8l}2<{zFYxIhX!)b zwVqO$zof%66IG|Uc_zJ*b{D6hloSO{e2~NGP!k=wF_K-A)4x{S*ba!|cjG$Or~3(A zWo}c>1h46bn|e)%FTk-k4Y7y!c!ct8vm-qk*S&JJymxVEHJ?XHiYG%h3wvP}HVQj% zQr1eX^HP2jSxHSffh*aGVr}kaD8$lG%triDYw1+zTTGVX?yRQ%7lfB%>ebxjmIcmB z;4n@VJ{(7gmfWaHeSROPISc;D4-ekokU!t7cUSEPRh*TGm+?afu>GpUJ;NP8?2VOe z$@Flv@zssamHNo^@K~OoIYPMk=hEs5v%oi|lS*EFUH57*y1qdMpEI1R@ZW=gjPy`Y zQ^p)_HAwigeq53cm4whxen-6rQAUWw^DOJL3F?4lB{O%{h|$MN%?CP^?1%WWkF+(V znV11+V#noa+R(fD?(FG8QOu@>hYb1`R4Et9pl89%cgk^7CW6RFF$L}EVAa<~Yvh%5AA2Z&0GafXivhf3Vba&K3#5!9(Z zdc*1XC{;q`YE?4oTnLgWcQB$y9FuK%2Ro%BV@|TcA$6UmOMF6bk(t~b+JWI1eJ3PI z!Z>AloqxG9{PD~J<(nR{pQ0<*Lst_|T}NaN^*W~Vzs{I>JYdFU12P9*=2aOz> ztj??&WEAfMcTo=d^ATwLOw^f5(1<2ETTACc8Xnd%XWj~#OiNGq8%^}JgMDR`kF^IC z+zF(d!;5+1;s^RuvHV2Oqt>OFY!gdR=*+yz$T}^W$4B8P9cXst zJLJw7sy)oU-77x(sH}&_eX4Nw2gG*kY&(0S=HmUbO>tvf>IGKLM8O-nzcz-zV(tQGX!f(EVoI zPon=nHGEIOX?ybhspKiaqs}bd@Jr*{?S~%no^}CfYS1-UK2CXfr7nS%)AHBet5^MG z_?qehfs6$=m|N(y!j@IkI@R?JmGi8)dT)Q`N1C0HiM%sI0|H;> zR^#E~(k)Y&e_4$~A5M*$1N>dW(vte6sR1pL!I|E+8#|0op|d?^oMlX7+sW&ZKxeP` zlrLwE2Qx}mB5C7SKAjSzAF8cxhqk~_(#;R1^jq+!Rnr!|7mBZ!?d@gxxu!B@(lUw` zB{kEca29`laayu2^sr6tydL9IZL`peX1NQwr3&d0!ush=(@=-h?qsHP&pBjc$YEtp zfUTyT(Q9u}@%U2iyR5(}PU9pI@App%vv1pIA+xmD_HQHMmm5uvY|!ts=ujTz{C9kwzLQMG8oDY;A@J|;uZ(GwDjL?ejbwPq|HK#imhAd3`^b5 ztPZDsu=bz3b9GPPBZjLowLWl&-WfHk*pgS&hz&0)sdpA5rKcy9P&Q4b3ES1je>mB7 zHP5dK&ZdnQ&xdO335C(?AMtelhFqfosj9$t8-|3#$K3voX=a^0m*q+dy~jA&YNe3+coC~;y1%jlLpYZCchzX zOD-yef8h0ZP{~dmh!Rc53@(1U)Rv;kveXJ+Ef+4ve`I_2Yu1+QL*JVb#eA%_*4#JQ zy6FQP$vIh^d+};#@dlnF8zsJQPp9xTy=lI~+Uvs^{59E=6Ui+>tR6!h#o90R) zJ-~p~eW%O}Ws)s96f0hs_mxxXMYO#n7F+JRf%CTd`!CsVPhAluLFBnFltlDwOB{wL z@sPy{3CW+5!=FB4jp=2%9?;?l_UGLTUmP4&dP-FqIcFOvzL02)#j)KGAK8%r5o&#h zZhTqotJ{|`)YtI)YeuB5Jja?~?R2n@88WVn98r79wCz}%d-ujVhVx(Cs4=biHD4sje14OUI$02$*-xbyA2lXNwC;4 zubI0_rqBYzUq4HBj(y)EakWpsau`?*ogPQu%iXR%jaEHsrOdl6RKt~ti#5aaxiEn% zN`e6{sJc5fe_N9-wfw2>6`zOASx~974XNrldMN4hLkd_y&-GxbCf`);BFp-druCrA zadw-sk6}M5$-kA(EjW$RmHA}pZqbQbI^kW4v&dA2mk0z%c3smNM2lIb{~EBg<2jNM zv^7mF#OflskN;d}qEog>cmT_=oac?-g*kj( zFPSvZd7dQLTHb@xAt*tX_~wQFLREI_y_Q+g&TLR|w)Y)}&w#nlwNQtG;59O{j-UJ(^Ib~~Nkx66Q zNetGO+6x7{wx)X;w*%F&{r&KzxrugPWaM$Wp1?AMay>>}n5J1RGC~(0$^IK$;dN%3 znJaj^h^VOL!!9WKz-Dqo`m|4+Oj$6^ZAx~pG_@^j;%?j-nAv8ZM{Vr}6bm>xZC!{u zga*ftn`T=}tz7v;PEs-nHX|t z81$G01b9&}q|2_eI({gu%^Yct`9J_#regS_P|q+t0P@S98Y2ndttP65q?y3URYG_t z{DKS|x9CQo>YJKgd6^o8U7?$N|SNmWaO4hb<$PwMx*expM~n zPV68-D{O88bW9( zLm(oCB;3>(G9N*VmjP%HZ4D9$<8vvwo!P&5i>~j|#mYDmuB?AcCw74sZVg$ShB*k? zZv7-D3||TG0`kb)s@I_FESR2=2n}6q4fk^j5P!cdO#?glqVpRvP~43X#|R<*{Q`hS z%2W=V?}OE!4@g>&E1+4X%+Y560i}5YoOwzoJl?0$wbDlF%H#GOnqMpP_fspavKyy@ zFDf%Wyb!N_TWiVo6Q?|;hwa;0@f3tR8Qzuf@a$IG_{6nL#}9tB>{mn01u#xk4An&)~D7FjgYypwi^H{V4!pU>KK7m zVLo_oi8w;K01Ej5h0^p>K0BTf;o1(|T#AHP^^p!&TtBqFl}D+Tg%00&tJn&uF|5N> zz4a5U@_BoMj%FoIj6rc)S{h(8MWIwdg5~_Q9-WA`HqstSAAb`mwi1JDQ|n<0d;W^~ zAYgO;9|NJ(L0m#O{^d7BYQhLWZbs;jNIW+$m@b1k%jO}i-4n9q{ ze$2M6OJdQ6y0t8`)GPA7*@(~Uq9>r2u{oOakvaO{kI1P3mTC5%kwNw+jT-h>Z$OO! zl*~KW`WC=f0Ln@PUAzX0&)|hoXgBm-90esLM_Q@#_$gAgBu_ty0?SW&N3Hms7GKO_ zp$*e+32Uy|l(4Y>Wj@cLen({^N)x@jqsDc1U?9Z$*59*&2oi@O zj}XMT&w^P%{12ekE-;NGY{4`N1k{VgThcCEin}qP5Www4kzw%gmx-$bXjc?U-U|+V zJO##uBNvTPJ12qwxezud0uJrL_Wd!!Lu~l+4nuyo>x@t`ywLSSyUP`AO*#*U0-We{ zB8ZFWRvK&hFyAfW_|FY@kYzG7y-dwx#X89YL5t(Iu^xQv;TiAR{Ji3>EU;_Pcc!$@ z`2M^VSdSD-qnSFOEcmD~ATeIp`YCwx^FMTyqA@=Jg`tqC;i`U>*L}PnGW)uAxA65Z zFSX)LEs}9{SyQ{kd)IbrRX^eW3|M|^8Ur%}V_$>lf~yH7%x?D|_Iz?5QDVQY?}TXqrX>Fl zDK%(JKOlt&-=DV?f43ZoX-Oxk2CJ0o5eglyj|?V$l}OABTG+)q-iQ5pfUqR)H$;v3 z4EVWHwJ|h5RjJQuZk_wj!3Np)!+Eead^;d_AdY!#KR#HSW!7)VNcYv{Z^-s|T4Isz z)+XE3eupXET;+N<|0`G;x3aH^dN#{a+X0kVP9lJ{rJL{f78< zqlUm|GC+?2P{!3I^RhJEP4{-C1dWJi(_aF@bDi`~`s5be-=vAjAH{~#GwH13ZyOju zD5GFY22j;TFTMBtpFjT`?OAzS&7C^t&B>IX*XufALu)Ukp40_lY958`qn;f{?E?$s zy9rwq9ELWDTwNA`kLv^<2eg?I9mg+a>*^& zT-F%Lu6RJxzPyGb+KPYi2g8_v0(MLWyF7+=`3XT69}GhgfEr<5MCfrt%E$DG)p<5t z{jXc9+}s$lyT2hDEc0jEK#(tAp?G=uU)NE8@482MdhY&{#9`d;Q2{7R7broi<-9U@ zY9rXg9=_-&D=!CBATkR0XbwQc+rlkFQWZJ%RDKWv2u>+`^FxWgC)8zcQUP$0xrjQMJpGwqYH8rmIQha-_(_3Gkhg0L5k)!W17*VEN|o4d)7%zsj3`iCO0 zB6WtH?*dT^g9%P>3oK3_18sz3`l3+MiI@OR3=qVr23D2zlFx&~Epc}qMLe@ z{hMy$*eRrZ1Mh|4{d~>?Ew96dy@$pa03+CyfQlQC%qtKzC?oj+Y4A5E_4I% zE*g5t1=-pueLc#nwKf~}xWiAeTQ0Or!#P6yl3OKm00W%G7 z)<)HSLs($on~MRbd?SEbk^;3%L34G&KOXmAW>wcDC2Rj2RF8ZQ9sUMe1nxX95hD$b zfEDb;Ei&&ksd5k0cr+XC$MsF820U817{pfrWyN?r&0NE*@k?GoB;lID39|}|UIygb3KUB0j7+7bl}8E_rx(coRst9X}3W?<(fykX{VcaSF(SOELGo*#WBa&=*M0N}@G zsWHA$e|{Gkp`=qV0c?LO1ds~=e7tFN3GBo#b$ofV(#`samYS;6#t-BX;iAmXbzOdJ zG*jBJJ*R#G_C4aKSC>nd4LBf_p>sS#>e03Ug1%4_!twsn2NMJfyjRtFp&?z}VUHf$eF20-gPL$GyF<1i1x8lu%>I9{($ z_Vg@0sOmPDe&*3KP-3-?W_bY{l!5I}fJs%6QLI9)qD!!oo+h5+z8+Yka69N_xG7z1 z;iMitHvw)~lvJE^HUf~Jv zcTEon(yvFMl#bQTuYN;%)G!pVHth`9z&=J6c2LBOk_ILYehfr!j<)zijNLiNKw+-n z$n+cge?P^1whJa%)pE?85RULwfVOdhS6lk`b3nKDe*yQlQ~c)PX>^?1u0V-yZI>Wv+*1J?LwOMWkfzt}0gUrpkdIpJdx>i>>)_f&mNV!T4Zm`Oc$( znf#FZuS;$Kxb%Spc8>XroJ+K8oYda~tO9pUkLFh0B6qM9Vp-@3 z_q#APt{p&0??Klu_%A^j@*m^-Bn(X8KOS2I_543xYD)rx$Jh<*8z9%4PVL_ww9k4F z#1Qb{o@H4{&zR=|mTEeYNc~TE?z7tsbvG6JYq7JCBi~MiLDLT(dJHTPgR(m)@MSp| zo%(@xyE()D#+WeZ1qg7gIWc6)@bjxM%()QO5UfoN*tkR3{0$7HW4A{6Xw6lu1Ak(~ zB(90%qpKT^(1QSd5T@@y&w7goNGu*~1g(Eh;y9{awqT#UKCsNJ30#Y>?((Y; zNzVli{#U8cWtiFPVjeRrNj!PT3&5F_KL%w5a7OPhN&MR-cMACPt!)g975o*feF6+% z11n&xbdpc*i3;pk-bv7%8kAPCeeZ%^wu@c0TBiFY4^FU{Mc%1 zL&x!x-3aNfS1^rz0rI;8d?^%(Q9yHb6~Da*N|elaP^g%WJ&VsW!3M<1u@1W4oiiV# zlfW^zRG2Za;uvE=~UahZ)(BJ2TwoY()6ERZi+C$HhhksrdEBp?HYJ8jGes}BqX~Nf`*S{@3r5P2u0|-7B13HU%gn` z65AbPf9Kb+;&7aP1FZiQh2X#r1!FFN8@a)Wfh_>VD~tnQNUaXEA;stiqAdy~<3f6V zUWJ|pYrfj*`hY|JhjW?<63dQhf-kiU{d1JFHsNoRhUPuqSBku8T# z=1&oUmLD%M^TV(WR{X1zXGlR?ky3=kl83;e0gE}IbaEB1zb7(_6@DMtyjgr*xp4K z{n`W-nSCJ6C%R>=YxFpssH_Uz#%QWZD#s8v%Sp(2fjrg06d3hnHj`EHzWDV=56*`|6!@TU@hHZAuxJ)DL zl~NV(;8mlXaY|SIdX0UhgtPrQ;AcU2nH@dvwiVCT;{$fn*Ty62Gs{?*NX4DHu ze;&rV8J`%r+B6PTFtKk5LTe)L)tGYH;_=*I}b-fhB;Z~lED+$9p= zBHIyM4a~7O=#IjPW_?t8wu=DoqrjT_`%bXh29F6lirvx~SNvr_WA;i_hH@Rmp&zyo z^MGZ|11N2Woav^VBpbUsBAvG~O>(5ui8Zfvt`_IaSI)GP>^H25>R$=IoDg4%xV5ii z{qmg&le*3HG^4}rt~4EDn$G+R*9N+O2og=q|Gc;W7Y@)rL(Kg>1aOQ5s)bkEu*)4l zC&bO(=+~^6vRCaL`v+QLIAoIU;CPI?dHY1Y>Q|n#JGUcl%9NEmMf*q==BGoVvDg<# zvc{mhJ|dWahw!s=SXWVB_M!{pD@Drn`GY{KW-!JXh%bmBd(f)m`3nMF*gSCEbkM5G ze_a5tzeqIJWCKDGz#Ui{WufOZi0|3~r#7tmwrCa2*jV02%k#=vlFOOnszvnD<#*>% z3PWThSBopI)z$^wej**ywtkd{sB+#1M&}hTHE8~? zhL+USq%NyVk0I~gou!i`$0R*h79dJDjkSkl=kXg`?(nfbvx~i>IgpR5jtiSghW*>? zp;ba4Nr?FeZEYYPqb>B50qXZBW)jrG0MCEuCtkX%0>!|J5r4@{51;LJ<2Huuhu-Bk zKxE&s&@~fvPrqxBM_-c<$7kDAoUXrnV!wygz5G&}a|uQ|Z&jb_G|gj1MHcL2k_u8R zI2o7`@FaZN?(zb$tZ*71jK)mE=EuO-0&~201N^8Xy+VV)Y}V*9`p*!MV;bAnwX-W~ z3=N(;_LJxW-E|4>OoL7A{aqRSlnUE%a84cLGBk)|FfPQm^QRJVf$06^lWq*`kMux^ ze1wQbP3*o>ea%N4_LzA6R409AG;2KqeH4bl5JC14l_2SNIFG@Uq6USDZ`HSO5pmF;^|B^`gEn+$0RkAKD0%;1fXql;fDK52sc&%ZkmXN9`w;&yT= z;=c$d;rmGCT^>|S5NqXbdxFRw0E zvudVqCfCeyR0kHPU1moTf z(z#5HWASD#*RvkPL@UVNGkC}S6>OTD5Zx_O@#+{)W}2L(vks!Yd9MpU zU$VfAgVKZO#dGbqvy}ZPSZBGlXGrD4+bm>t4tMPF#7*YvL)BB?mfn1#q_hDFhyK$p z=-B_Z8UJ7V&7D$)^nMgnDKuHk-s}3D)ghcu6{eJ=Dqtyof6Ab5&`xn*U1EPh4%RDHG`&Zl`@aMbIC=IxcGv^v_#%2R`o2JZ4*%D}~aa=B8E9u^CZkJuX33kv^@y|)aCtL@f=n?N9V zaCg@PcL@m|=->`XNU+8lcMTzUfB?bWp>cP2cZbFyxHbCBe%?7#=ggU!ujW*psZ-z7 z`-6g__U_(&_gd?|*SfBCtpZ`9CM8~Voge@55i^7SQ*lWhkrG5BHjSE~4TN!&5MRsh za52v@oM`KPP8Mu5GW1Oh5(C;~e8InY_<#MDVdi~~x5iXFyNP+4eN$YI9C(+wDN4fE4&4<_Yi7_=;==UO=x)iA4LZL zkFVddYn$+4&{do;54OD92)-nm(_w(0TzZ?oZT=H`WO~#9M$8I4QCveVfG1oVKP>ov z1(ySS0R(KGL=|mko=b(JSoURGQiTHh4nxmVTW@m|K1rkQS|iOn8h_38?H=p1eDz@t z%zB4a{v^|wPGjh1#3zWan-^9M|~*U%yL{t8CW)k>UTP|0U#*eqDIC0E3&dln-hiiGggHfzXj z^)G%*Wq#$y7%BbQ_tBkjl|CypIWo{WFD9;9!fXd%!6C00%3=`sO$vVi=L>Al5f~h- z^13!AJ}+MW*d$3ZWSnyEe>Z1Swy#{WH?9J;AOAtmC#*H9x(q~c`!vc4V9+EZF2}nN zGKY5a6#uBX%iIu$U)d-@dIJM;eR-DU`{HAH@|NxA!|@y5k?1r*Bp$~JrgV`zcZARx z#~8^BCz!JSZv{`G?_H;A>`Xxa$Eh~&M&_0A&t=e<9 z#qua8ol(8bxaVHpN4HdUXGptzT9G&bs?-%zNryb-fuq|3s z;zK?ADdBw!0qe7OAKT+Z_Mme>dDdtyLfkxG{~`(-;o|N5bw%v0S-8+k zzJ`i+h2^W4kq#(*{=?V-8i9XUDIU@^Omum-#q_W+#c%hw(qy zqd6XF>S(x&Q#+&MFbW2RT-nq=Iq$YoPaF#r4{*VMb>S=zZ>I6J_xZ^0>ubW`@T@Y2 zU9G%dTE`y3XWXG?=ijqY|7?nEUhM1p1t6ik^uROz1h>P41!3{^*iZH`Skv{s5FSI! zscekAUqCRf8sZPxHFJYM;38iL=c-mWEVFayekkTPC(F)mY^kY;8g8tQB$B`^C%f~Q zA#GO9R-ug$Aa$iig=_kl)niNc{srnKudW;u!Dt?!BYPpn9y&SmfX-A}kN}QXPC!8o z`Ss;KG|Em}ISFsvc-F>I*205CEm{o>#V(OE2#I0s({=&*)P!t&Yn!TOQPIQt{7et? z^=F1&PwM44(i;Lqol(!oq=5le^v-Kcau2L4Q+?GoPVJ=DAf?inDQ(ve z2!T{rTK26^b*8@80fDk{2YJlSc7jH6g7(x#vw_GfI)m@+c=5X|8O3q!2R<0nwpaUk zp}J3F;(2cwgjmrBNUx8K_DDbQs-kJ=You(g@mARXN_N#IE;hCzj>ijbY5>+vsFv@N zYOk$XMGBmD{3b30({yfJC(-g+X!X@BQ;cOf+6d#fFSLI^PjLcP^#Y{DwJJ&}rHrtJ zy;+Z)MBi6&|HH;IB&;k1#4rn+lRbyrzx28=`la{lV3)cH-P5-p5bHSbNxyylDL~}l z#burwI=_m(@IJn{0mGKq&RB+LL|A{~jtnV5>Wpx^+ORTr>mRH|kM%Q!3JQu#&X?PV} zH`!>UCq^78u8{adc||jHRU$<)c;my7B-~-95=~1ribj*jzx|_ziNB7b^q7s&gKDQP zPgik!#kdDZE?q?!PKiEG-pxMI2u`}~ykGw%(s6SM;{_v$Er?&3R2j!{FBlfu){mL= zRyCvXhm`&Pl^XMIsn1pf?cr|XsEDm#RPen-$#hK2@@1t=p&2dG087nRWw;G7nV?`c zj_(3f@D9h%GnXpK%wpd!ONx~!_7N8!#cl>JX(nNBHmE@QLFwAsDUn9Z(i!&{RPIVD z8p^8c2LrX4a*yKlA+}X;FkO;ZVLPNOoBMDh7EJ;~erjmf@qrw~u-!P}_ z)HPZpX7$mb1P<%z9y5p#=#M`({s;OplE0B}lOTBa`C?Z7+BcM?MWTf@se+ha>SOMZ zFn3MS&|E|}sjNJehdd9z*4O@2BrwN9GlUvahpo@e@bB4{*{1P-eH^ypmDv^9&2vzd zILv9BII(HwO)`!XMJL&|q>N)yWZWd%+DT#8ge3MU6OoM^%myu$y|ff`Al+>XGPKvE z>h^|C=2y;eI=@uOoz^fd(BAT)f<#R|5PhKo7#_K++=^0-p;}13-Lp(9Rc?+wmP9GT zPX?Ll9zUTS4`&|^rz3Ki^5Jibg%6oB_iw5m<9p%2#~k|adIJ}0ppKox%3*gr8CCBA zax@2&e;(eprafbyUB%P^Xk7m;)wK4q)x$g~m zK$Ct(!1*m*(|bD2M6Kj{6q>R_1A{+Ko~+sKpKI%+8NfX4RH9#Q%0vU7n0;R&9pwEf zztI$VQZ^cG$z*Oq;Zd|db_=C}xiVPYLX<(w;u0W_F@2ZO89FZM~7+oW8@TTQ7YESDvrY``*tm z7XM=BZ2;dT*`cCN!EQhNThUl@e4j7>ghBV@2)#V{mH9`|g9^Y5P|LDgc+4jDrSx&@ zF?CCqnQ``(6TDbgMxh0nP)O(oPCp4eUkkYWHMtwJcrKU3x^P3Hj)UqBaw<+$s`ILt zaAns>U1Jwh$c=Q1SIE(0_!Re51nsN@OmIki?IF9RW-M3dFH-`c#o?6~J{;dEm!vjQ z*^JA7nsi@5x8#4S~g-6dY9{@7WM0lIo9V$oO69wU5TBm_>RUkkYU zqHw%5UGt_sPIngW`+mz0T>ns9G)tgbKc!ElWU*QI%a3gNm4qDnNe|QmH}LcHW&f+Z zMyCsONnL3-l&F2}CwjwAoc}OwDO#z-!f)FcTm!xx_1SE4aa$38fp9JEjFVAf_NTlv zlYL?NM ztrBY-o58hO6DgITW) zaaY$}%BJftgaja5`P01rkV$IKc)4Jw_@?K&)=VhnR|iCwid^(=dlug-zsx(>Ar&&W z`@P{9SwG^w7JLR=+n|5%t6(+vjH-gU6hsZK!5?WwPf@NCwaLd!&Dc?6n^RS@y&x( z%}zzW}xnxsx_qu%Ptgpo_PQYK%xxPBGD{| zq*rkrHKapLI2DAJWzf72720^%~>#ly|?dG|e?+uxOLV}&;RF09zK?0$y?}+0efO_hBZi9A5&-GWYzorAfYy^umg$9 z;((`PA3?=}#?ND}d$?cOeNhgU)_S)4u@AJnM5%3Cy}V3Y_L)jgM7YP=MO!~LKBr{X zm1m@`K%@UI5_l^1|E_0lbzX*jJ1fZ@@Z2u(tAz>Gi!GY%qi9IkDaB(L99ENfg>7)pyr}Y%;hSAD(poDx z<0;Mo_r>0`Y0kUK>Me(T-sfoZ>dxD20xDc$Av3WyZ!;GbSC&@0c9y`D6PL>oNlDE^ zT^fLZSG``}>v$5Epir8)K4Gcd)f#aqY=p8)sm8&tz;Xf1B0+M#^=Mh5bZzTkU?HIA z;K-L(e?}Yyp^G$5KOf8m--gb)qjfD z-IXR-YK2h0LgY6a;OniR!|_>HbEx*_`-K69l;*vA@2H|)?9rE!t!fF$o#Vw(9;WHD z&TmK949`*S96uJS#Jg;#8J>|K=%}=6 zwARr{aCjG9|6PErb1UWIKvB3T&hlRV1xKV7)95Cl%k1Bt(V(nczirP~O-bpEE8x)_ z{AbD{jWu$GafOqhK-*a8nfwJ>uE&)Y1}w{KaD+%HJN0DTI)+iLI_CAe4|<7_Aml<| ztKyy0SCLuaU%Ebz=d3aq>R?R6!7YC{Y@FtjT+1J`+#&7m|4>dwOMV^}!Nzb#bFIl+ zRhCwM!jNWf5-Y!AkbPqd1X`THlT;_fVLd1Yy# zXJ>hglI?N#)^{|Ji%<;~z54V65@Hw?s)WM~O#?UC}gSA{`(7w0N=^J;&GY=-=%)_<3_ zumWid7)V=Q{7c%>d~cX=l*XMXfSx8y?8{kBwm>QoJeA&CXDd#WZ@kEvByj55Kj4nc zM&q|WeeV%t7tJMk?p?CA#y)@S5gvMezlKOeJmhN$Sq1OqAm1Sy?L?SEb1V++-0iDK z9o}M{wm`@71$OS3bD!rmJ99MuOy0r};p~2icBo9ian5F0P%L(y=h4zL(~@KSb@;3^ zv3H-8b!<~@$%$tUBs5*ouI(q0B$Y;i{s0sErk!kGPhjE z!ld+BL`BN0YT6Hq5sE{a)nb4;RO6`MzgF#7K`^=9M?Sc0rL%!9uY4=|-;H+8GyMqP z$5*}jE4ylB=WiaMe}O8s1)QN#>09O++6jqsfIj~}1{VA$%^o29UtS0351$XSfWB|@ zV4L0@e<^>_}^p78ytH#;Mw@X)xlV;g`S^BGR)soGF z;#l3j%~xGl!jkl1r**%9Q|vFKl?g+Z2X4FIwM!oPzd(LdzGna=vV-vc3-p%I7lAGG z7YI+9YJ~`Z3;*YT%Ky8Y{`o@xT%&(y693+0{%J@5^tFF)6aNo~5oyH8=|c*@zM*+S z9sxRFKA^eEI+D9~o1j_2@Ta2Wv2DfYwoo?6>9?o0e}}ry4l(4ixBdbbM#9ESp!;;6Oh_Lp<5k1^PyNWnzu)W zey2d&H|na0ri{l?N|01AfXSDq3Xw_WB>uVvF zHj~0X!eMO7xY3=&v{ zz;Tp$vFjsz8k0xIv*(+jkCJ%4d>fJlr@+XsLl1%tfp(dXJ}utXuQl<}u*axal{ zYwtz65^$8BqEVR0tcr`yRqt6q?_i8wTOw*>xW1_kAwO?}cv?gcKfJ5IwYKqpdI$$9 zH>F&URZ9>2{)E&r3TtvUYtvd~1PGH4vse7}0gx{t^e<4t+pice(PkU9D+5%d{_tj4 zy#LJGI^P4X`jszuS4{6tnaez?v#~Y)`2F~0*BE{qlfAr+SGYK@eT+nF11utMsu|6dt3N?ARa<;JnzTx&LZavs`$TA7 zcA0}Id#HF3i(26dbM}VVP?*ecj6s9CW`G=yn^c6oG0B8=O;gBvLwyVz(ObEfQNJD2 zviFU1qU9+$FtUEkxO_wQ6a8GT0&cH^8YNyPCVUdnG-Dt5gX>XrxwZTivgA1+$X#fgl{;9S z%e@MV-a2hLl~%+kf$otK++plABl+4O8!e8|_i+a42~pbiI&joCrOlG+8Y^Q#h1tDk zL3qoKhMcQt%Cq;XvA&p#B4Vyvn<*dhW-Cg`*hB4SSFjG)*b3z}OnN$Eg@(e~n zB}uGOjtsYAAKJ(VPLHahP#^@fV%s>9nE<^52H`LnKf0taaMSk{z1HULw#NgS$QmTP ziO@226S(KIW*BjOG2q!XDnEC*gmhX7InR^(-_G z-eAam|1)E98`>la#0`Nq4vKL>V*UAMD_hM$dl%uxXj0)V^9JlpykJ9kJiQn?=d zE)YN$BW6JRb#z=5iyssy!j2$JI}% z4OM=dF>5P1l(jmRLKswW)kjkb^~L47u_8$Ts3JNq!S{Or&*&?xt(%yHJTF2ZwW>Ep zK_?L%85B5Aqm;j4gyD@d>UM0*60gVidw>B1oyPTO=u|HyvB6Uhb0*k}#I~VpJhQH? zo2*u38V)^vfdZ8EZhD*v5Cn>~{<}$c+YE0Se#f=b#DU>pv{d!2)dhv<<=2mJDU7Gv zKM*WH%SlM=Q+?_?<*DJ6a+)_Ij-D*2Q$hE9)bhkr5hEtpdyNEZxyR|g0^L6yOzly5 zUu=EUmWs?1qGr$~i6vC}eIp_@tz(yI;c`b6{hgszUL;25wJyNPJJJ<0#&2snlfV8I zYv7$S3e$14U98{C>h%VRkjq|P1y}^=@Y`TSxyfAj;HyZsVJTg%i|J<)EnD27Z zap{TIM+(Yg$v#&^WM9D`^3{r7S`Zt`G$)AtYeesrM#|*7MH(u7#Cix$g9rwt|-0 zv+Ea(OKs0-9--P^tXW+hKq-)y@%IziQz%<2`{~hB6V!Tkaw*5YkTmW$W$Yi^j8ZbE z!oHxk%5}HyHS?FppJjGQO{XMVihcAv^;B2*1-28a9qQhOoiYNDMDx*D9DyJJf7~S< ziYvl(ofO0it_M6ew^WCY*EUu&PxFJhofw>M)MZY%$6M7{K;{zCS42@oZX8Birv^R#JQ^|VN=U3%4R{+|9NZJ<{$~3fe(fP187|Xwl1|g<^hC84Y z7G>npxW=!V<~rxU8s4dOsdEDxu9NT7cFITv0QTt zKAo}Ll;|MFzv-d^97Tw4<`}(q0r2M;_<~3SPI+I0DdsbP=X<}m`L`S8cj>=N;*Q}m zvslz%5Ce`O=>=4NMaFEWU5DQ}!YuK)O^ts0gtvHHpWMz)=DsREXDTfI))K|OJUu=^ zH(rgH`SrA+&~X5bHDrl26QX7WY@AZb&od?cfWx!1m85y%WUH~+E$VoXJ{w<7L1h0( zZN*LL=>#}bIjGoNJBs%ItCh>jicG3)m*?fOTk1B!mt2B7POyAk=*Uw%o}nSMaD(e! zK1Lod*%RC*pDn{cPamHEQEM#M*NRyE)FOn%Y{%H{k2n6#n4Vd8)XEhBH=+kjnIY(w;_%1LvNGj>-mXE%B%I^fmjgpkwnPtB7Vriv~I`9hCdHc^ZATPPL4gnrS*RxmfM#euTSS zZSVCijgRd6zd((Ae+#&n>q$~h=1f#ORVPO0E)Q>`Gcex!FAAjfkLQ5pln~4r+zM9g0Rdl1R7xb=%to+7Go8aR5WB=Ktq=v zO@srvx&IY~xB99<2-m}pTpb&j>N<`+DhGL}Rb`TnoQApk(32j1oif%@eTz4Lsr==N=j*?R3$?FJhTuIA`UYN4Da z2ZcFErC7d%hoP!8RvMOaymti_%JBO zohJR{Ww%d#nMRr9%mcQYT~4y9#VQ$TxtvW&;t{~!2~X$DDl=mrR2|`%Kk!m1=*zdz z;T%PY$&BP#j^XK>Ds_~?Il6H4c936@4W}stKmfY;CeN%i7R8oV@eZ18Px!SNKqA=@!Vx8X57exNN}k6-zsMe5oLib`69NtMDaCQr;hViq37hK$13 zq-eL~m-|$oL$+**2rKR|HZR-IO_tn#TDdwJ@VZCQX_~RH2p^z18p-9N%;|rfX~rt% ztl(vH^yB4Ognj!;#3oQ|noImESw78;hy0?)*8&<7dY)bgxVaguPjC8?4AZhPrGHo# znM`{yc6+lbh6 zoS)VRQc#R~y=4VY00elpymXbMbA)8tOZqwf`$l|X7`f@^hQqRipg|4B}WN-BC zk5LC56fEXsF^} zhpI)fAF#?^qO00%Idv5wI-ZXO@EF06)Pn$3ln?zaII# z@Ii6?qR23Li49-uJ596vhRK>l#HT1U#P?lmA%cPs5BJ!3D@IvaWY>}Ms>EJ$pB|DF$OGo zuSiG6Zyzh30v8M15;_M;kLm+tLyu6G>sFw9zP&Z6sQZlZP4f-vwy81Gxj-Uk}(FCb-#|tHAFO?!##&~sI`Ugg$PpC zk;ZX2YNsxl0=pO#8b9_#e+y5`iH%NIm15tT>ZGQfvR$aYj{}|U$a4=z0j2Q6!cww< zo*L)*q)?T-+0@W9#?xhTEFMu4GHUJikXSUTQOC=N!`xG)zONf0+<6~=Op1s1Rr;Y_ z3M9I(dutytBq<|y8bvPj&8?AoLBfmx6Q)jS>Un$+PU>rUOfp5#eQC<>ZIY&?fYwm_ zV23KUN|SDHL(S<)m~GC>QJ*>TfGrtv! zkGuXg6b4n?iK3O}tge5YAACz+B3N|(PHk*wG@Z?U_WwP3@oLsFe79NRcrS!a`Oo3< znzz1kI+9|6ia*CvCBE=&rG`|xK(~b?RsEd4DMbmiTf}r!H_+ecsUma0aieF_3204h zl0VV)uXdcLb_^ANm8FuoKiOq})?BG%2pot>K{(O?ek`X^NW>MxA1B0?%T)qx#hErx zo{Px2eOE835%|E3O9PYNG1^+}T=Z@8>lm)Gute-nIOA#-ys_B67Jtl~W|c8&o^bR@loec*(PUYL-xJ zz;ztwbefax5Fo^|YTEESrUK+S>V2P1XbLJ13~`pLMvJ}ax~TZ3HGLvU%1-A6~1K0L3?;n0ZVRA$K`Bhu)A)Gc_q-$0SW87 z{lQWo;BoZ$tAU$fP3|@a>GFj8tb@GC>{d6Z8 z(T?p@t+^8I;^=!?_5e_!WOkAP6z5R>fdhz}zT*u*gW0<1oT4m8d6P&RLg(ovAlv4s z0?6VzXFm}EeG5{1hEu+$RFIskuzz0h&-M7Hef-lK{(lx7G9DyP{ehC!x4*+$8>SHx zp;6F6*8$CoW}*T*nuTWzWAe3eKcl+De3f=_yG}?EOc8Vb&5GjVY|BoEm9M*|(tiSC z_%(-48tN8S?>C!?&H|Qnr%?mp5WXzP;F5U58{J$x*)ewTM~|}rN8@y3=%xvv3eP_k zuA@NT65%^>JmKRumU(4jH-whdi!k4e&`_OSYnSA45D*rwY;sJmrln*vo!=>%%#5W3brc@Iw_!iqmjK zC0(YPRbKc;)o`wgHQSgRnqi>JvJu zzbs2Jf&{PwLRm{O|Bt(O0AZT{ifcupsK&P4JO`=F5_PD%Sne?PI6vNV1=X}YoQG(f zlfq1U+V=HlLq3Y&3f@pJ{7vya=p~=3$?1q=3{94uO?e><>2ynuCijfQ78(=k-!4GeDSj>3^?r z9@dT~SxT|94Q&g1DMfzn`)!e^XTABXx8{CDN880BF?cyjLOu`bzn5WJYJj)_`c~?K z#o4U4zs!_#!(z8CGqfQJ;~#GcswuE)bcubLpw?DX6@E$%*9xb}Q<2YyG|Itr zEgN&=Hq_#YFN&kDKxf8wz`%|(x4c;?BDe8@f;E$ZcnVjCiY~HkY0#Zxq#t$S4h)gK zA(_N!pmv(_Di7k4JyIul9*6(>i6GVwEbVp!PyP8PN;#{lnoU5&iGyYKldkhCR?J^= zC}@=UFE-PfJ?8jIy|hn9BMJxdPnudAe!#UVgNN~=rwM)vpM=BXf=uhO%A5H%u}OMn z%LJoccldSjyAQM#E~aSz0`c_doXJP=m7$g%YYv$G&9%NC9pt>LlG+gy@KoNZ z&YM<>7)uiMrckmh>0nE+usPSbcW=IpwHU6t}a35WX+A zp2sReIyyAG=}f2GBY!i^d14lAS0nME`kjn{NA0t%>#g+B)aGE*71k0e(_T?#|DvV+ z#niQhoivg}Wx7Q?B*xgKAaU2CG@`SouuY1gCU2G_#>E0NchkiZbXvSoPuFL8!^u=C zMBNY*qGrBqD+kN_;}h6t;W+Ee3zRR;C|fvUo5H0)?Rx0lnbEI0QI&z;ol>4i>Xj^c zns;}RYzsk&ZL(k79J?1yLaTRMC-W@n6yJkeFe=MI>w$k{nXBO5d@`+5C1qcsjs-*8 z2J+;@oD0ZxZ!T~wb+JRg8w^>ngp$GNBK1@mMmCHHrcwyNFSUzwb<&WL+%tdM9n zP1R6LpYpGKXU6h%wNLZ=7BB)uM8k%+j&_*pnyV%MFfnse@aF~z5N(S2 z8d2g|Sg+unWT0S#owp;TL^XO0^G$>57$4d$mE@tCx##o5{b?P#bze$LYPRag(cT?P z*pW@P5URqwqaXUf;fT)c69>Zd-E_{>aDvdB8a|UUYxBrAXOtLJc`tK9z0l#KJ(zD7 zHUId72}+Emkik~iqcuMF0KtKTM6axDk=spIBX^-|zLiiO`Vm)8ck<6oOIpy21I176 zxn{(o`W)XTeYo9Bv}UrV>Q)w2_@0NrHs)bq=@%?yH$ARS`W>cXMsu8ABH3d_2kQJT z<)%wqGKpHm*oGp^G}5GQ zv4^hHaLndM6dYanfnywRQUQ=E&?9|Tl204BtZvouX6h+k^Rq!9wRHW-(mV@W0WslRlja!JqOJq<{3WX-?>}iqrH>^ibJiLhH2vh~Vqi>* zRd&P}e8}5s?1<+rr5*V#?6*w;-+8pY@oR+Mh7C*S;`id54#8w^Q)I)p;;!lh4RX@A zzpr|QJ9ditUF3@<3=@KzKbRuSKf$@63oeT#3HT@jwl2r*SL;s#s+;h&AiB1Ssz^8- z4(Y&C!_vdM^&?tVB$ayIPevd2yJV#0ZLcVIA{_Dx*T|6ffFzWh@rBa40+~eRo6>`w z8nH2K`Ar*Upa+R%&MYD#r4)5X3n}FG-pTG9@(oe9S?ozM#6{hw)>PY8)e>q@f$oG# zpIi}r6Fe-OHAe;W=y|+qP0U|5F&fxjTI!t~M2r&2DYh3$Ql3#K!%LZ*xwy4G9ky{U z*$2A{7|tIKr4-Jhf**9U4urHL=ZFRSha4(9r8%l&1kakExBwTn@KCuN*Fibr`BahuUNZ=VGxadP0hd74z7NrnOKiSFrUzsgN`TJn3RZjv^|QTB>b=u`!+o+aeqvE^J^~pUn6%z2MUylIb~R$J2xk9b&n8iy_>h zpm;Vz(fh5~*sBpS?(E6~mua2!2a&2XoIvklgq;?N5V=ik;nc}jjo`Nrv^VRKVw9l` zWnSv1tNw+pN#};Et8!3IZ8i7re0!?WW3_Hs9j4V;4P%&yO_?)~LH^=+zHUCI=7Gw0 z)b+;_y_SvnQC?zM2MHc7*&ZL$CYKEr8*l_;K%mH+cuEZI&lQsshRm^Nj-7X~QsUIs z<4MckoGPw3Jq{kAH^O7B9F=Wt)suhBT3hRtJuP&cVj9}jWCMDVI7WRpoDtxW-WBCP z_qC73f7+U!+#fkw%G;`EIO$p|Qdw#fUFGR1zZ2?ZRG3vXzkz#;b(ws68t45Bl(&rO z)?B@Ek(PK#6a|+GX{9_J&3;UUa^C24ophMf{2sX40s-6ThLc{WYd)PR zJq}NLEYTQ~7?133rZ!tpL@u*ccxWlw4H4JMMyPh!UU^nvh%AwV^tL2Jv&-f(GUP^x zIxO2r#kmShddxYDb;WaDtX^aPSlI7pq0#U+lKRmspYLX(EE-?P&}U64-|(_xV88uN z&5YQrhN#1;jpTtN*F@RM`1o+ZJ7&ZNXK$hf6PS)^*7(SvTRvCa?@T4QVasJkreh3D za_eUppRB?pDfk~m-GBMbG3LYRrgas8y<1bqLQiAc z;?Yk4PuRkpF_yXqwBYLm|0@pX|JCm)LMAok!`R!RJ&6^KAb42TF*1z$E;ad}Qo449 z^iU(2&2q;IYplpFayVW{lfXy}sqs-!m8|W*vlePL z0G7H;U&QRVE*q4$+(kM`1V8n2OhJa50j(hxh7IsNYWib+nM%oSL&^>CJ!JfZA#aL1 zNOf^sP}|3JjzxiANqmdVqzY)X^9BK^eNyhQ8QgzOG`szhfe3(Eq8w zp5^C49|I}!Vk0=%hbqbUTkzYNBU>)=bwgQ3$9HPee3X=w)VD;@8Hh4ngnNEju( zmEpb!Fwk3;L#b@_x$W;K9jkk99&31?S9RLgY_3&kq3noq=SYE_1?KHp;zq;Y(JX92&R=+FtfgSfpoxBEuhB=q_RXP-6 z&PVBhDgNaz5TBm@PFcx=rh*eT%e!g*6{>BWme$rN^TB*EO$YQ*VE)WcQLLl`A7)EF z<tB^9y<)>J9M*c zD2&V^(8-(YndE8M=X^Kja{{|WHPy4_>Ge8ck*_tsfda(HH+^32*WH;#l`=iXjbslL zDbjPE@qhhQwDDb@VKqUHJG}qwDFIUQ@aZ%n;?HMgcX~4?+i=3FkM~qHD{hllmtbV8 zn|NtiPU7(LU!?O2?F>{rDNjVBZV4)F>65%-3=xl^%p5Yf+XH1!HXNvE<5`Fr187|^s8$gq=t+>#Jm@el7dg+Sz(9V!MmIw*T zIfd|+Dacdvj?b#Djr32=kO{^?l5FZoQDz<+D7W4WFY1n-vjPQ0=Oi{ zahL2unj6dx^lr&+Fsr>Cm29DYsBwS$h4SBEvb z#zIqe$4`uI><5d3I}lIz9KI3C_X95nAK|EIn@VCKwr>F}K`5$iFH0G~761t(ijE|g z+}sEIX)b3QwHmRS$;vqP z#7V&c*H;Hl6J@;8fsp3Pg{W=paPz>v8sa3Iy9c+{Y5l=1-P(8tgIEIhudU!;f;?%s z)YDkOn?X7F2qajV0N;{f@8?(=-mUfZC#k^%c*O-EaRsHt=3uJemKSf_Df2QeZ=Qal zF&K^#SbNht*GfE+r`N52^XIhkog3$eVxrwvqz4NlBqzpM zI}=$1STfTL#T9SgvSR#WF(HViOC;}sbNtU`6w-dx8~n$tYohx4WE#FI2P8>9%FhLE zCYtqU3EyGje8q0QYE$AZ;szu9XK~urHn+TJQawkyjkuxCWx?9WU9AkKPucFz3pp&k zKau>dWOhITL*`5k^l;Dc z=AA_L&;9rYim(5_mKO=P4^x5Z6xm4J%DlEAyoXux>p(}xgKwM%PCA21p8nu2_h~lI z6(h!`&nsPHD_>lgO$irEQ$63icOT@wd`5O`Cxi99my1%Wl2C8~_lyCKTS zC&7y&HMz}oB=|DVWbsMN#Db+o1OlNXVV7&)(Zt@oM|;OY=)u zxk4MD+nd_}ExE@%t?mrR4iDjT^0xL=yN)^66;tL@+7e#xFi(A*F|G)$(~(i1zmr%x zjvI&aWErKvFkU(z8ZGhXCC4?23dDzNg83#m#GCuD%k}h7{Z=3H&S(7T(|gw4g55gR zN3l7~oCmqnozxuJPuXq|llsYzU^erBc7AI#l-PQ6i2*Y4Ips4NnU*see`hKo@XmgK zC^K}&=HrqtCG;e8yV@i~NV`!WFR~SLcC^e6qn&GV&D!9XsaOcjCv!VULDD2uVw9Xydav(!xoUKb*u;Kf#a;4&9R32muqIuh2} zdaaK8UONs@78W-u)dlBUN+QqL*up+^*O7#(G4%JIBue++NNs2p>c>LJAIm~~P)w`@ z;}31fs?SFnFMkw2XP2noTq0^Z9g?q{lBC&ZUPaMqtWyqIv*YE%I``ZZrtYjL6Q^^` z@WN{z=i2lfI;o0x_Qy-q+1jX2=LbO~cyPwC+rtKMM6zZMZ|u0?czc6E zrh0|nePkTW$gfGM2< z7*0ov@QB`2C5y>P`OPJ``F7R$us)_`PX3|N-d~lE&|MeNn?GV%qekxs&u^IANZfzZlaY2pJT)7rUH%pb9WJiA9RYqp1)PW>j263lT-zQu9 zM1pZf0^Sne_tEZ(pyfJd!&8SWd;30|s@5@=3~UcraXAu3gj0jX!1wuO9yRMGm6QN>T{dd_v9jJblj-);%ga}QjbY~rRH2H?6LC%{cbz{7umj#!V~ z(87N@cA!kw^$ZolU(dU77$vANJR|uQgncZ{LgSY=bM@BhE-fbEwM2LPzPJtlN0M-1 z&W8QyX`SDe0Lj<&n=`gN_;e?(_+SoKB<9$F6uXzAo?C$t$6HQur`8K?!$`YFz{ai{ z|M~1y{0e*K*iXNgMH0Qhb{H?X~qnIAzFv}RA-n!s}Z8&u*3_G^PUPsDcVx?Rfdk0yxCRi3eO=x(-h~jLj zuj*x?(aq06n@cV}8Jff)a2vZ#lHi9o1$(aA`o6L3?;n*?gywSS?cw%DUW^&*-2BuN-+@*CY*LJ6*uw$W?o z*KI19i1H+meCGSED$4M*w}w!WYB}kf%Xwuu8R{E#Z-tKCwSBd{#>leMG)N1oU&lRZXGO@^$n1=uwYAy(iB4Gx>-bE=={{uEro(6vUS_l8w%kFXoMGUuF}ycc;7>?7eG?|5$*jMiRQJSlS%;tl?9?7an0n^C(i z8j7`eX>n_@BE_Y+7Apk`w79gz-3kN^QlPjMDDLhpPH+iQ+#P~Dp-6y`-tXW0?7Q!O z=H7ke&N(w@W;2sXCge-9@~!V(>wVtmeV(4bAkw-qDusfvvVFv2x=q50r^=(7_K#B0 zbH$qR@hV@i%za-Y`V-;AIIH?5U>}2@&E0JUjkAViM!b6qA_D^`TUf7XK{JvtPlJ;@ zLAhdK{*oD%VB>26_j7`oJZY;ryAE~Ns}v4v&N?BiSm%Atq%indT_7fax^~l;LAwRX zkY{ss>%Kf!+ha+;C_+`BRlB||GthOouTgVHADM4GOYIcK^`+IvIwY@?r2jq14Q(>r z;AvKK74dpYqz}*I1*Lc=r?P?CD*wGshH>4(r3VeQ4<0@TJ-g=|LzCGw-nxO)k7sp- z+dWFo6?S_E+aS1Gc<4pl13{U;r^sJs|ylUvzxsa@8hsdfjXF7xazn zcn1Cgt?s7s7gXa0*=y!pDz`qeZ2+?L9{>XJPsjg{01N-ey*9Ts!(c(f*;|1|6oq4J z+lz1?16p%DWP6mc%n*R0o~;$PUc=kWL<=5_PHj1_rBe+7VLzEp^v5|({Vcl1JD#wL z&;7*TDPuiuV*gZ%rD<*l$rV*T1z6cE<1@1|&b*G5w-`;)qF^}Ejq_WZBX`4H+;$r<*t$|#4mJm?0ia#s9 z57t00>lV$Wg6GicO5NF4gwl5|Ch7WPZlWguV?g#fVDEwPAKY-0*Y?nYh}B|?Vr1l- z2Ea~OHBbU=boji5b3z7dodII9g<(>FgM<5qt!Q2tc*ke|4$f8Fs~S(%**JWju3oSA zDPDLmgydfSf`aX^Vaol}e9SMmGjI&C=Dt*&cX-B4B2gKjcY%2>on#dAI$0<|SXT)n z>H8LmH;FX{P*4T|9|C%+TcfU$Y`{~?-qqttowIq(!75WqZI?j zXSFYOl2iqInP!Zlu))7^r8M=Jt;G9RWrKeJrUlGwfPHsq;eU0Fuu~-|>Icy81d#vJ z*ZqILl!$qx&)w2A?t=lsoWh{ViU}iRYgaJ)4)+y0GNG-dA*R0^;AyZ&0bIa;|KR_D z#~f{!mqn=-LdTcA9#=J0`z%R8WwCBr8WK9Q=SCWgFoHM6E29resF<_g>IN(?+e*_w zHJ_1=*sPC;8L^puUlutAHPF+GHZcp`!RhX|+bDJeSZ5wYisw@H(qbeAy$ z+LxN8SIV-_Dxk*I=<7ZyQK;*3eOu}0;QgTz6nUG#+sUIZb`LAQ9O@lc=27ZxQZksj zop=d3{&e#rSWevn`^r1sAHacz}9jsk1Lr@CdeNUTzH2>=h zB>*)DSxH0m9bk;`Eg$_9Hxv*xe^Cxu16acdvcspEzk5=%GyuFAvj=kVWTxY^3CKkw zq&H;1PUs--#`|kv!~EE!R)O}n=zqT9fBuI5Ic@&)O8L*=@PAZ1%oSuq+xc1PM95Aw z7BeJ7m?Gu;8Nr6vtCWb0#@b@W$%~A~dzj>=_c(1P5xzi}??gInip!T)g>AO+)u|~3 zaPz(^IrVff~!bS!T(ScOZN%f6o21@b8->(p@Ec#RTP)_3B*go?3Vtr z3(3^$UEBi!sBVxaMpSj_iP79QEv)Jf?tuInsZl#(WZ^np<&*hT^ZmPjG%e_|Y$gl9 ziuMQm?b2gbmmx_x?Q$rM&PZGnW=KAhxKSx z#C=Rlgp4dGIL@2eV168-K@IpP4j{GBUB!U&%70kx%Zu2Q;;>5*!wul6vR{U|@fm)J z_b%ETq`z|uK9qZ~Q;2xdZJ_W+-{dfP&^gR5567=~JP8Z)vT{XQ^XH8H$P|vM&7+0mmWW`ApJnMshy|W0WM~z+8C&g zOZ1x3bWZES^$Zb}f0?t=wh82{u_xK&`IMuCX|-Wb$$@utZ-~JLX2qLgM=}k}IR5|; z2gA2pwd^2wE}DKZI;e+$61d@7Qzn!KNdI%4fBcjgpU=}%+JIHz0}c(hK872k_lswEv+I_7&hLN06mrDZI}S776= z%cjhZ{LIMttx+qtw>g^#%Fc4=c24V8#Q6|hJkmySD_NMJLNeO9gBbcecVu0hCh}Np z_4e>x*jRJc0UuMdqd#Id5Oz3QilV?-QbXWmMD?#ueTaXqBf7|oBmG84)~q(Y-=8K} zJ>^}Bex0FSA+KPTB?Js&kvUL*xUO9%O$mndR_zzq))*@Xb5Ra8(YNYh#`@}}__CZO zXO=G?8nl->rbJ?+;+DF2SEyfMui308;1S&EWcNuv81C`VG2t1n%&nQW=T7u$l!@e^ z=k0X%>b%AZRv)^eOFHs4U+m9x0=R{4CUPm)cqTNiYvO?k$_#<1GP|WE2eDDZ;lW9K zaLShi(N4_+yAh$%0I6e!PB4DBY`yc;(wRReNB-*an~p z3XYX)MYj5*IrOUpSJ<)0J<1=&6J$7AnuKLs9>NNB5WC+{gq7BoYIs9-lC}$zs`@!U zc{4((u%bK$>A&KMDh>HWUsV_HCoJ~)c#%OxW@)8HtHbjSKDysH72RrSV}YOFmU zf_83&UQYBSQ_}g{J4k1Gh4qG8At=J67zSTP6ZYr6G+Y6*os=d>eVr@WTO}PA#CS9% zn6B#eSuM!@n^%G7@TKUrU_}Kd&4<`3aJk&sV(zSv2p4`-o+!(_cL)`;54?f1&%Lq! ztg+8Q!vNtJ&4o_#q{bKTU{<501exImfSKl+4&`*Qs=SlK;Fb8j5xYv$>#c13dj(;d z2k+MdPb2Ef4yhf(%$)L%rhtnDK{4*XA1Dyq@8jkzI16lS?8#Cj~dgv$&^E0%WOR zws17nfv)b_Lw7@;B9A+grpE9L+8ckpPjgc)3^MH5I4G9`bro-?y<#CwE2PCmoJwG zW+=&PLoU~K(ZghT!?~R@j9PMuI%E4u7rzWHlYR(}?7q4dyPPI25G-eYMem}(H9-04 zfS=QG=T7wu9hYcq)MfGM0SA-v-Fpykj#V{gp%1yfkCtgz4A6LkG8aI7z>&G~RQHqR^lf?|HAOknl953xJ?g97Z zWD&i2ehR6`CW7ojGn5u00N}M(F-~17SGqSmhCW7BY~!!TRXk+E=-}8bYC{@tHXYmN zHbttm>yzbzbI5Uw`qjvIs!Cz2YAVKP?#5FuPDMU9Z_ z($$LrguHxJ1oqcQHl<4|t1K;&-Tj?OpK)Aq)d4HxF{Fm<T0#3FzTgRh5-gkMKmO~Wb3lV3gW`*j}6M2@HTMFgWss(##8{md~zg2k=E zrs18Qt+zD=$(S8w6so|Su4#-mRt{Uce#oPFpE=;s3y^1(IwU-cpaClU6PW8GxL7%s zMt?z24AWU4kEcN<{{`tG-8LfaynG|GA4~9RFd_nER&i@TOB2LgF6$w2yJxB2?3d>0 zt3Fh#_#;jUVhch%|>t1r)XJStY)4&=K1H44K#!|K_wDZih8jI;e$CEf!l<-I@s(81UY{)J-Yy9_VdrFV*5^?9Ddr(lOSqQE zG)Kv90IsYtef&BD;S$n==FvsEYCf~fn8XB5f-cj}=iQ9N#JQO1ic074{YuBm(@L|J zx-8M-ZR0^^dn!HeAPy}|b{$X65*~4N_?cxy0qNvM^n{Lt=>8~PBsX3 zuY;06uF6hxOl80^6(pxm{e?dm3H`MD=c#MN*lg!R|^}U_J%a++P zdmoW*J=F*sZlL&Vx0L(Y%DSQs$-Ed}asuA^6RRDYQ~qwz$d?<@A6c|$OFSCu3z%p3yfoCU6Nt;o@1JNx4&1J z5Wu$kVPCnvQgNMI7-6IbZ?&e6#Cu)nAp<;dPamo#qF1$ ztii>$j~AFrwjS-gaHAIspkR2*0Iya;Cc!z&#c7;~tYIFF6^-!^wSQ}7QH>STS{?Z4 zav^YgX4}cnl)hd>%6<>~5b3jtqr}no<6h%}uJpC0q(JW~Z6iWG?#p3$d8;+5FY$L> z9MhInR2+B*I^35{vc27WI|2BHy=3XgVp&eEr4LMZ)QBnoP;Aq+DF&9A;ot#`+h~uF%0R4YE37 ziSvSY{e@XdAIoywnX`hR9h%6-N*nUfQ_VB-Tsy~y+RRhOMp?lu9NB#<-c*jzSNUry zf?{e*_~n;hNk;>s*kCApMAxxGI$gTBayu)S-)HP+@i#8tZjbFo4y*ffVRZdWInKKw zSuFF%t5DbLK2yBYFP>90O4b|fwFZ)}?1~w{!UEZl(d>2Ur>6UVLD=p-gH&k_Y{P`* z%Hj@Msbe2ai*x#j7;E>a=VG9I8;8|D57PRe6qptA+{2f6j~Jq@_o;VMsu%sr-?Rsv zkT@H#j!x|6v=w1gyv z7l%20(VLweGm5X|u4JN&YIy&EB4>LVaX)on{d4|htYQm-KGMR|#m2pKu}88_%6E`C z@QqU3E843;h93pvD3tg!8) zoZ6`lUc9{c_JfK#9+<@_Lva|*)~!9oo3uYFkR>Y=NCLfO768@*m6eNdc8C<(|_uLsFeA{ z5yl5e4EF3@VF=zO^{7+s6F;CtSn}+Dwy^QP>p0FBWa`Figl_Q3=NO4KgJ2iiPPZl^ zT{M=+?fO+!e*}4enJ+8C5ZT%(tm{eY)YiZ{yB)rrDbvH?TBvf(+UkvP3N}TsBTi!^ zq@Xe>53IHCa>R+Z25)rhW_N&7@(#l&EEF;Y)vUBtN+R5Ten|yf<7ATuo~EBCPpaI4 zpT6xmjFC3zJCm%A-?oyZ~1k+xYKdWS^2g1rfVwv;9%XRWTN{0NegKUZwx_J>zF_ z^4f>ZTPsAR?Un>ROk>(zl2rb;78TQ&%Xs#%4a%;%G@sj=Gf{1o?Z1sE<@rST05krb zvMwL6o+TiQyF70#+NGvtk_j>%9Ju0c0(nGnUVuc09I_)%e-E*MOgT32sJ0HG`9{A2 z*fB;$5edxUGR!teP*ok$3mBW6-wqgp{oS_pnB$L=Uo#Q(?oy%)))B^0v%)F-FB2EL zIICA|0Ii_$w5-hWlUUlb;_ywR$(+{TYV#RndUv!RmUtFCT!M2y>X-ntqBPjh9lPNzp zMkx{4(3<7t1>ml;ua%gV?qrigw)obw@9>M!Uy~+L$^awLtr{{{4taB6UFh6A;wuR} z|k3w7ftT{*|s8-iw~xmPJS-tOAlKJ}MNx7~Eo9&Ts!%A!CthMu>-XIu)>j?#V>|Fc=YfhRH2h3H$f!LAcm|47h%V^wr zst?oUY!*ydkK=4bxEzk(6+$1&6>NPQXM1s0=wh_%ix+AdddvKAy&;==_n^MhmknT( zg*k);3t4kJT*fwvy|k1fI`TXoM^pCOEtD1s@;}03cjl#`jqQ&N8RM9#vOu~ZSnqmY z3I9^vxVIJ5-wE-g@lq6v1xQhyF=C&qY$4>wJd0}@XKx7sW)mqJ-kEZ3fAdYGmCgQI z&VdG{)c2vPLSuP$fTbR+X}GYs_<*Z2_v;8DWZXxg$zX;=#e=&P_UAHR{HLB~zVbKUk8=@GOy+K=cdb0XYFu~o5~JJv9--_e4qE0H3cH$A^~l|3Whn_D^mV39rp=>^ zCU(?eJ?ZIf-jkeaa)#`w>)%L797G0~<6H*me(7i9K(>C^bX-n4-BZu3PAK%b{nkKb z02fP*f)=7Eul+Hys}P)`8Dv(d^3fp;JmoPrjJPemWw5<$vCA9y$EiG^G^gek&(cOX z>D13jkuDv0D2&wiO>0oOcQNhIN#pHFe1eadcJuF3looT%2J|?f;&W|2Z3c;U(q7Zm z#>X2sfq*}v0Im4=;7MSXJw^t@J8;2c^60VgV?(XEDmv`i(2->2(RFpb!1$;r0zfS7 zP{K3sz*8D0TYYg(EQ-8g=VOO}_;a}}?+ez}rk9mm##yV2l&S5A7~X<=fX(CF+>4Sz zj3&bU#MU%^{+T@=os_O)j$da7v3H%0cudbklhnTc@Y1!H!0J%FpcibJ0=MyHN2vBw zf4y=W$*&*k^LfeH)Y)4bJ#euRczcgAgNW^=;i0lo+i=1yxQ)Kb{|5NbF)Gl@e)a^~ z-=aVoLWczp9x^?<#K{YqT%7Y}HCfdzHPIXa40}#AY{X~aP$sQ~F zN01x4Y-s1@iyc^l_=FvBo?&W#+;Lidb;yR>N4E;#(#eRxOtmBtCh;Fu`$r7}C6a3- zdJ3W`UrN*0RWI`_|2Yj4^Up5>hZ!LHi*2u>OOGQaaW}p)QNB1JlWKaAOGeRUdV>j2 ze6J`{fa<@&#Q_^I-<)Dh&(+h>?QnGcUUCOwpZMO*bX#lU&F#ZK48dzYeUK}P#9M&u zr9ik$)4U^%^%t~-4N&XmO-%2x*^r!oEVLg4-F*(w2RKbK6@+1KzkPx0mjwdInCaV1 zmE2j!(KFMm9jdWhX7sPS-eY8ckSc=C!C&#QLr%{X}UjOkafc&L41;wZLr7PeD^uL+`W(-pxlL!5)_D2?bc zDO8{!8V*AP(&FdkGxmE9ic_YdlPtBt=<|JZ zR=5`aMb#&oy}^#!ynE;OF3q=o-50qcSUx2cemt8}(R7UqC{^s$q_S?|G5n=k>^5E6 z*xY;XxuR(ba-9?lwUG(|vOV)CVQDeX6Y*;a2Dom7lds!GvtwN=`!Pzic%b6?6@K0F zkb37+Z^B-{PRPYLC04Laam7~%e$TN`RXh>!ihTb%iyTwr)>V34|JdY5SxN4DP|in? z$kVzL3JEwQ+W#r_r?g4c^2i<2l?A`d;1tQH84ibg8k>e5S80ur?R2Vka2l|^(na## z{gY?B3=JZ*A;5X)&R9KAC zo)(N0oI+`DR9fAAeq5WixT61p2^sdx4LzzDL@W2YG5 zIC)=r@fU>Ex!7Lm!WdAE6-jHC{iDGnEAy7901>?Zw(Q`;G=F^1!vP_(w#>>L#>GWS zdH3^iZU{$uu2F&{+TbSL_c!5^w^cj)w5GD`f8n0trexoUj=Vs3jr;}WZB;u~KmKPn zm7$W^hZ-Qw>HnYI8-qhrfi@vNI6%m%Mh82Y~|ANrjmycCEwIEr`waoKAEmGYh?Mj zl}`h`k3tOM(z*3{&g?Q!f7wdxQms(BYhB@ni{_;IpPx7vU|w=S))~`&jlYtlkJ$26 z`U`qQ-?px*j}mZAZiya}=VNKu#@i}+k-O!u*g{CniTq;7Ra0#YprYai!Cv!)%yWR&hdBr&ho~aLpGKS z7omh_sBt)%H=Yfk4|xf10M$W5f1=5p315bS`K6o>s^(mQ*BMc@C>7SU#m#-UaDaLn z>C5i&2vHrDqb8>N=;~N9@}>E0^vI3NaoWY97rdn*0{)0x*+K@ZT&qsx)`W4{pkW>g>$5FLr` zajVFKcA;=L<1L+ZVb{@R$7@?hea%iMnzB%UYTQS! zZ>a>hj(BKM0B>l`gIaaff|ua9p}Eb?h}XBq1uqd54g0B8rYqAm>enkx zO(!MXAnP3@wzyi4oUYPU`zc+a&OXaK>mBsP;Z;?2<#&$+M_hkf`iK&_N<)jM;%{Qw?26lG1n>DY z>+$al72LkQdh+s9Y=iR1XBl5Q2)v};$L?6z&$@3*@obe-oJYceFvwX$WK`-q#+0Us z3tY{~1VIta(6vg{M(t|Q%R22&*qSO3#dvovN!-*ms?%zt zDIcAb8LDNDQQnX8iJJIWd-z?K4p>2H`*M&RYlgLv$4}P2&Gxf0_+@%NkU7GYjyu&O z0aL(qXY+1>p{IDXBu4)QS%pZuQK9!S0;B^_do_B1I%%e(np3~&QywUfU6rv7wPUJ% z!oY0Qhi%J;UeAJ2W=q@qBesB|d)jQ9RTa`qCzVS=wU|las$`sGDG;B{1f#3#h)Ai@ z832GJG+*@@Lo|Z>s)>rR>l}bwY9Ua7UGJ>bt)E{SP^`A03yZ0~tR?`P$pEINWxsDj zb6p#(G*eRfGOR=;P(9gZ#!6p(dAv4~S`9l$)(+7A-BR;?(4PXC%`d8ywpXFquq;}H zVsA zW-h96z#d<$uf}UqIh;AJ_O*Lb2;=yt?O|&b(cKz*7CX463oKhPfxa#Mo z`KS(@Cp_D(!KZb}61%0A(AYHAKtDDm0584C(yO~l)zz#s;YWr6@vfX|u3S*svRW@b;2_Hu0C<5<$yL>3nY(*1$ zyR$X~mEH*JttJ8+b{!TSB&w${ZfteS>3!U!jV%Sky;} zxjJ7n*`Kp~Q;=)3=wOayT9>6PtFoP}SqNajpwhUPc{bPm8IwDlu+yI0v_hW5>XHW^XgA!;U`A zI%@4|DhFh}-y69hK*adWW;z>$HkK-!sR@;wthhfZl7F=bqG^n4mdYIYwC4@9^f_$| zbLpJ+HB!q-;Bjr#1Km4jzvF_MU&@N?2fyhuo3+DLM_42m!rQcaYUQ094O}^gnL_5f z0+^gcPnYqwfEqqHOiP0lsiD(>t2-qdK`8tFNhkr?w@r~}4BA_+#y9oo*%))|<9vP?fYkM)W((p!KU{-%(^QUx2K= zE5AqW)h2EHdmhyD&B_P;YPzb3%GE+o$0DU)Em1#qFcY4Vi`@F>B?ZAsCro_2Hf`Lq zgB!D0ri>O%UQ#+he-sj6Vq~qrYRTer_t3(KjYh8^U~HV@C(8bfELj4)#P44F!uvD{%dD{eiXyiJ_y%B{~v$o+tb&dV(Q68=JZ}%UERi@*AyO&HX$6paWP+DG86GCde7*U)AuO2NiogV$0FsQ zXr7H`&85s~_K!dBI-lwHjMEUIYg0Z>+s^Lv7bUm6^o4*It5(qJzYUYoCjwDE$0&9^ z9Z9K(KU}YRZ+9d8No~bK3PxaUSYZP-k;gpc#$0-#O z{f@&tROQ7W7WyCZUQcy1z}kJfX-U_SP*oqF7bvD#?g@j}prr=BGGb=liEAF%!EHRv=3mmgmIBfX2nU4E@@uh&P&P=~P zqdMYgaPY)rE+@`wG>UI5#WI_;5&9(fR2LTxmawV@=YDZu-MBEO7I~d$`zAL_2Yv7- zKI-nv3rTFZv?*};#@8#cx>e?;*$aI~a+(syIquXk4wV-IlNj4rL#4z5;N~3heJbZ-d7nQW08xVx+4s&s@J(ndYcQm)1ezs^1X2+r6JfIC zhu0?-?>i3z$1WH$9rv&DhSeMD8P11<h9SG)M0hS zr_=Y}+y5b^hXUT|f4z7H0AT+M_n%0*H(+m-sb-FZ0q|Frk{&BY2OE3WxDynRF+Gd9 zRMnlzpQ&p;TEhh27~WNgF^tywGL?yjU)ZfBoR25HThUiSLSE|NFPF?I-K6q(cM4M00R8z(5f_WiC;!%oLDr2jXr8G9HrG;x`Kx0# zk_8B8^plT2pVS2(Cu<|$)nj?S{~*cvF82LIMLp#iQ%fK#eb;w}LlcE{CwkkK>OTCh ztu3h+ekxT=HPK@Og%3Y9q95>G3Qp3++T=AkMM^zu0aE?It>kXcpsOA5dZ_Z)?}AJi zLr^?&?n4oCnt!lmTJ-2mZlkP=MD_I#w&mVz-^rQ^)4Y;}Lj#?B_6V5v&z5*EPOO71 zf6&aN3|3-*SfUL6+cfLS4V&U5#&AXbm7u^&*3zZJG=-J9h01zEsw(N-@176GZZOlj zkePo$%u4_Rpc-=j;~nmYr?n%b!%r&Wn}%9wL+Nv-4inEpON;ljiJ@Y1*H;aJ70(x~ zQq9H&#LVZk2_}r>e#vsEK8Y&N$I+qhefNN+mw%YqWte7=3S&l(6liE%EU41%$s(Bi z!tmr!tS#wi%Gk77;PpAqW5>_EAKm5v(q0 zMQb|hTOVCR!;{rIjOaOj|BK74SRUK304+#TB?njYeZ^(8z&q}j^_=2~l*2ay<;V0$ zi4U>$hBx$(Y>LFcAjwzJZ7y?#AXNot^g~45>ht!woN4Bt;r32xt4qV;syWOLTwyN) zCtLN4B34gVs7@Vo z8@|zcB`QCL2*?mMH8<9M9dVO**Gq&yupxs|BVF#oVzjZ05s8uVbf(D4n9KD2*j6_U ztl%0J?u5S;;m>#EpSj=lG*wnVM(U~|JcH{F>D12+mCYW%`Kfr&!Ta{($@-a^I1%iV zg1n6bUFLW4T5`S~>i)tQbx`Nv>10`7we=t4`vfk7e$|Z4LDjE3*=o%r`EZMA!} zfSSANvEt;++DXNqGV)vVajbLWC3y*FRTokvLRa7w&K7BK=$4l+kLn|qRKDn`Xo5>y4qvOg->T5V}7M}=IZuxF+M zEGi~G+e%Dn2h`TdAHoY|nOsZs%AE+0?P`IMy(;&_F z^?q7w3X|NI;+1HH3N_BJRG&ddl6He;h~mh4>2LJZuRP9e#3WH8S3VM`^M2gb#12tP zTH+l8U20v)tOz(tWrO(fA$8BHO}kL*WM%3Hg^G8McrshN;KPe*NrX^r)E8qn_3^qj zI$P?ZYF}5bUVps^DSr=#UCiL69O-XKU7T6R3eHj@2=3}!{k<&uNjjFfOSxyN;W#=H zAZq!n8_D~7PJTeGiErxI@ZA*3tJLVA7J$K6UElK8py>*~(J$bh0V&S3b(KI5y+oKU z(u*hDiSc}OR1|yJ=Kg}}x!VD+%ypmZqHs8T?VATaoKC*)Rf|ylAeW6raY8N$DaPlA zW9m0jn}xvg-mKu&5#nCyDT^ovbM|_6EK1qqY-+SK5i>?@8?J3THZwVCJ*-wPnE5)c zso=GfyRJcQ3{c91|AI)W9deSb5=6-7<4F^g-}!cpyCB~MT!@A49ITG=2p_=Nm_}a> zZ7BK|K{YzltfHU}xvHhH^rj0po`kq5+f)Jp#iFayZTpM$Xm*?HG~F(weLdkDwKoTx zb!(oC$2R<c5|HOb} z=zvPug6UasoPu&lUVa3)SZjPJ0p$FKS41k~-BfQvg&N1p*z0#SSohc<6$J$sH|zpJ z$=`?`())d8=Q62+X<>t+?9y_fko(GcQ|QN3bJ!eC0M`V-4A%tQuX&zoY-l`Mu@&aB zpR4_Gr6Bz*)VW}t#M`n_F#3(8s#<-98vY3LBj!jN%(}Qon-Xq-^jW%3t6jZiLsNu> z;$r_R!n#{p&(iW?DWc^rn;dYcPwHkU+06C|a}}A=P@78io1cJ&K3h}+1wca%4jO+` zg>f6KR*nhy$yFfhkLm3?ekzpf4Z3A`u{($S*>4mrzzHFv{ndlBCj36urTg?FzhBuK z5L?M4*gSqyMYBKynj6S@NyhU3Sz+|@0$K+%CLu?(Yq#8Qt_~1S0N_Nl06<$sJ1&fp zj%VsTgbcBtYQFvSAM_1k{0INT{brMW?nciJtbyJDVk>-kAhf+`h01_MK#u4;ZVB7G zqb($VZ#Mz1$;=^MrZELlPmt+3$o}_cMXFS_P#M(E$UtcwraDazhW{b|0M^6Np@O|ra$BqutQ1~T zngsgVje+F3KKyg6*I*~**6nn{M_-i*Rs?QNVmcQUw82yVn z1W)jh0sH%v#qKy`h3r&1MSi8+egHPon=>||Z$2wlm=V&QvFEP-;wLAkI&8+;xpm3x zAuY#VSs~5j)^EaIe-;~h;x4)&W%7DDwMmH)HJVZoAif@})q9VftcEnf;TCt8bPVj>+cy=f(?SY@00F z@p?kWA;aW`_5>AXe*R>wgQp?g0XQHSPA1HaVtoviNcalfqV^Y*PyK7`zm%9f&{Su~ z#Qfd}^J&P!Jr%+iYz$i|ZzKo5KjO`0vdd%R|O_bR2?x3ayd-wiq0 zUZFd^Qq9`j8r#J{V+Eb2lrKEIIw%)+4(B+g%`QXJbXDtDv_X0nO~dQ@r!MV2WIgaC z`W?OSJw`T{_pN2~MkPh>S!Y_?chC4Pw$;Y@pHzX9~rAQQ%@*2WEWzXE^jBDw9AdbBqG}H4f(m6 zR1bg@^p7XL6t~PtC{^{D>zheA?40#x;f#k#wTWBRyQ5#82`9oYgH(Hj+KxMJBZn=Q zI6V7(qW++2^^zGL9Z_foT^r828@p64ec>~GYak@GzAOE9bDEl)f)CIL1GF)y&irO- zl8ptFpaFc2hQlBSu1@rcn7h!y)iue=l9G!PhbloC9kYDgkQWwp47z*neN9^bEmqc| z`vS8gKc#LKLvV5}=i&l5+qiy;Hgi^U+4qN}Qt=KUS6?%3@V1)SrbeVtBqMWe#HzSF z$NgNKJuUrT(81D0sf0LC6T0r}xZEa22NHTp(Vv~9ZuqeXu5hdk1*-2bZ)e8pm@Uuv z@I0E=Lw0B)1htmamypTqnyJ1uPuXY`1+wGZU$lvbjEVyy2cf9P|0Z(Kx&lEfjA*0V zSOCcbLTvr z{J8lCU;*@?fP^aH6JW0~r_ym@rppCCCYrt5bT6Q;+}_Tt%KuEh>SF`_wZpAAGB4>e zH51|;7V0Z*v!RAZNZ+rr)%dkmCo|BkIg&OGbl}Iq^AxQ52H~IfvR?Vek$7I3K!bAn zjK+n8c6+X$y7&jA*+wPLo94D@ltOi%1?dw3$t%URw+_3Ke5(yd66|@azI;*)lf?;s z+y^To&?(miS7XDRz23(#+riik?1J;&7TCATHl0y&g5(qm+~G|iP#k`4-RHI!Y+{Pg zKdyZKzSs5ysO=D?9^puR7beWYCu;VDJKG^#OfhQ6o1eXzR9 zX=q)!E)&-q_!w8=9WU;-iQ(BFjk-Ch=iu~yo$-*L0yI9tFj8UM)MvNr3`nYKojh4a z{4pc~;1O3jpvp)6A1-zA^z_<1k6t=Y?AWwvtE|)08yd3Ghg-kMvc(hCFaMR4;3HEJiM8$b$7aX1qSTwA3LEE zT337&8W7}Ro&_t=QYY7Ry1Zw+RJcL1bZs1&u#lIIzLXL#&zB<~+b6Gn{&|zGODWnf z(0MHPF%@=@eeQ?=mQ8x%t)y8nG5R$zF>rdnO5cJ?xh2@mT-Libtdh6%BF!8AVDhBa zy98&LNqFmo#uv%w1EJKSRe5|-t|nhu_Vd$^Rv-fOQ(+2;yDrGN9@Oa~BC)#y7sf-G z`;4#gTi|kZDVnjBi>KRzS|i-u*yE9-!J*dDE^|~N1)XpJ21B?|JRB05rWEd;G&8bt zm0e>0@Q?lw$pENxRCbrv+@tsl1+SB(8pTyWLv#BlTI#IKEyDp6_nH5RpT7~LGpy2E zv9M&xM$BR~*NX$@_#!X z*`8Xz%s79Y)(A`%^&wVlt`|+>B1e$h`NDicsv)rdq@B~kl5yI5wnkSK37NkjH@1!u zHSg>IptvgoB&zpdd7vIkZ2`i~7hdi zifd6ZbdoHDS`MEiA5#Qmb(Y&2?D_9MR-0H&UB{z&8!46<_j#6PyGm83j0FDgMqd^| zSpLkj#{^V6!jN+pv9S9fT=bv;;0p+Rg=9NZWyr-B_j-!2M~sM!Rd#(x{}ryrg*5)* z?U2nlz6?};n;wES&<-B`;83wG!TR{bsd^hxTc@nZ3a+C(kKDjZ8(KV z|J+h`Jk4upFbtz22_|7_-jwjXE+<7vw$=VjxZQ@um zZxFuFJFAeQYgb|U70Mj*>LpghyH9$wen&oLiT#{uzmRIyp=|CvB!>oBnUAnva&v1W z!eoY*eF(IhPTnC&R;_~Fg}KdF%9K@kyX;{M%(@b38%R&P&1}NZ`GGa-$+>pcZUlPI zTsp8?=dAiGP}jrVzZN$5k_gpat{?XLT~N-e8CXX^z*c7R4C$ALOzbuAZ}htgbhD`A zP#hwascgcV;lQJ?h{N( zgfi_8+fFU7E(2Htw8ihd!`G^2>@UbvXiCeTYCA1twSH4N+#oyD;c_^WMs0FK7gC$~ zOI_J0b4BK+J%dQJN*fLfV?LV;=eAnav4>7kd|Bt@!@2*+utSR#gyhq#=_n` zJXI4EoY=FwR+>x>?Cb+}xKA}@fZg=dmEivr?p82We8@dtPZ5inJu;4yR) z@j#*hnOhsr)9$igOzh66$rM}I-Y%L7Erab7Byj?&2*8*j8UBkh@ws?3q^=v0kn z+>^KUQ6;gB0QsBC{W5kVlK3A-EcW)0irrLSIzp0hHw?+1ex4?~{tM!_DOUm*P@G!b z{~c-={|2c2|GIC!hxCMLCh=5Q+)3qAti(Cf&0_He$oQgZi?Emf81hCz8l=pD`dC1@_tOiJY@)6Va`Po7yl@oE1}otcx)r1H5+a{90) zUpMeC8uWZQK%SHIckoe)w??^);&|oPP}*&nhSIZ6YAyAoMHj{th6qpLhd$vXe(!Bn-n zN!v3&?fHkgK7Au#WYgjcfk`zNB0U{fsgSX7$ipQy<}~xih0~9itcG8btosw;woe!r z|5vNjRvqz;2oD)#UW(!V0k!TjPt(89I#YpmkK3Ebn?WOV_=X*X%=ZJruf34DvPjnT z=ZJ002dl)FPh4o%eSrpYvhjaDLaFC3=!SzH=;?4zfeMTycZ zP@N_(!pY(zl)pw@z9<>E*xxsh5{Q6M`@X3;Gg}@eig$9j8lDNSu@GH{>`ANj-oF0} zqC}sDK#q9mWH(i;&P;pDiK*J^e%ZVtUo&g7PGM!rB1Q*aE-JamJs1l|Q&@XQ(YJJ* z9g*6kWo8gFYxN0a^J0rC5~#})#KNW`Oha3QV!ufdEZBH|S2R>vH08rgdhz5Jk&>iL zes9N<3pJ&lYaM!;EH#by(7??Iwp^F(pklY$k03mL2(dcAIPU7WVYxNE0|XD}3M=ag z?Omh^p|~5zhPsF+Ci<SwWhR>F| zl{-c%%}tnawiT4UX_GfAX6fMdvpIA=(AeY&^;S&ES+>ifj8NnJFvawWZxE~U4;Ix& z*%vj^bBw?IpB+ZSH3HK-st(9i!$0$5??cITU=6aBr}QYfaahQy;4vebP(y3_vz^|v zUoPy!(FK{!{TS=+FUUrbhp$t5Ixy-+IDEa%R3CrG%n&EHWC;AsX3UNMd;h5Y3E1_I zlFsbMF-tnDqIaTdp7AL#E)3LnqfjvPl^rPV>m0cld$<_s!A<0`iE;N zOh-g?Klnr==RsQ#G_qT)FB_O^6yV^Vw2QnU{PJI3W^O!>2P)?qWjpB?u(V{Nsw2=3 zYR=X|&8JaP%)c5FUPoL_m|MokW|aS5%)ND3RQw5m+x&{^(GyK+X{l4{y z7b&6C;L-i;)tJ>^YCJ$(s_eK8g$g0Tai^7fJ-h|>vpRdk6ReGbi`nQNYH8a@8XkRk zk|~_3V>8(V$cD|}H`vqMyKmAJg1GjFNp~!1Z^v#&>Ze9rt7=0N3GWIWr~JM%mhl}i z9z;A`D3aY!WasKeMzUPl^O2%eV5n=mLEyBKKkEGMcOBGd^j3}8p==kT9Ao-;?de>P zGk{XtUv+k{fc^m@;H`_8GL!>9&llqnSbS=0Gw0L~s4MD>S>Q9?L$}RiluGv+CjyK2 zRZpyqJW}|k?+N-8v zk3pexxUufDOcSSI#f(-|3q}tK4zH-#{#f^s;b(oQ5$`4`@fr3>Jo&9$)CDbCL#t1; zodYwx?lbA5USc|k8t|wKPkT;!sOjDxQM<@wh^cfmJI|6W6sWGQIK9a2Ju#4F z1_pvsvmN`xyR!7aOUW_#{Lv)8G)cmDu&@Sj#|Rtx;Y zxA`u3r_IIjEBD!fNi}V{w@fe%J7RI&99(6wZz*B>75wYlVT^j-e1c>Q&3TpMT%Rt7E2uDB57cUsbRZ$pXeYz3)3CL0|j7MN|F^sXTC*N;b#HzrWRo+4aw^+?)7>nvFupe5N@#p(mT~*wNR~vkOYMryng*niESg9a)phLKL_&jKLAv{LOY$iWQ+oqsQT68^_`Pld!}c$0 zadU4!l%V?Mp5K5DP4!^g%3=NEFpVDo_+5~Fty^w6)W}WOBMX`H;iB+tj&mFsuuR_7$ZOiVt$7z5k~*4>W%BmRAZ z^XRLm3wGTJ;AQ)LzE(Png@HUUKxMUTOzEMJ-tjQwcC64Qf44{tDcbs+DlUWk$scP<03S> zAj|I+S&k$g$uYT+OgXH-M-?rbzP{bqlJf^hXG`F2nZ9{a^ViOh9>zQC8lEE9IVR}F zo($W8aF+lD9zri}+i1L^6KYU|W~N8jMS|mQ0MXhqxTht6>e9Ac$-@^4$?7+BUcws7 zA`axr?I-Yck)?6`#LB1LdjJ|CS1ru#^f0x=M{CAa?KFs9dYyWh_t?>7kYtaqffP=+ zqbr?cBR>QPp)7KvZD;IeGSuTlXSEX*Z4sYoG{vNBu(R%Ap(`!)6lyVWv`Y60CP1dX zs+widd?AwOt*x@J#O-7Exk|?Xia$V!vK>HA%@=-3QLtfkov;d)J9x-(8%`v(C$%TG zv4t4d0Q9S`6t5&_^%67pE7l4@!ODTZ;7pQa#upjmWYD`VMrvw}9vJ#nvC7@i#_| zM(_TLxveay`8)@dMmGNr9ONH=S6cBoFgp5x21F2N0c?L`wN5qPq}=9~v>x!LXFzY% zd4CGZd1S{6RFGw?|1I8M#f_`kdD3z7l8|a?3m<4efSK*RigH=rUgMwsryRk4jAzqhf0;=c=P;wvqBfc; zkuw$T6AcHZ{3|Wa95h#je)x-@Gs;(03N2+nlBx%NX>N>H40m|!9d?+deRp@kD<{R8 zC@vfUXfVc=k=uaaxu*5z$6;013UU#;$Uf2WMaMf?U-KYto~(D}W#G>`@-Sf) zBKEaWNAu!ev03qm$2h^lJ5|i9y)Ex^srjzOCpgYMO<_&?b7HQ);W5=77H$7AoioY> z@?`S$1fz5{)JmMs2Em*ryXex>$eT4{IFJ9dJrL7MR(f1FMhUHU+=XP>JY@brRk)MQHU*jGt)K^`0gxVxA3K%LoIO;Y>Maeo-H;xJ~*=@?!^ zk<`*O#fuhd4s1*5Vt4V@;zDa!$#Q}|Tq{Y*gf0_jL@TkDvc5nj<-D&8{@eYp655D- zcLpJVN$;7OzXPCwEZ_62!?I98sk5Cw50Tz`-|kEr`q*3#n4v=y+wf)SAr#5{-;+cXVr$VolUq-a$vcX0vacC!vZkC(CEsUYS#Ek zBf$WBK?HL6+x+&=8LkG9&2l6wVz-Fe-7!hl|0&s(eb%R8Q!CV302$h>(&_GplgjAmHevc#D8q&{P!9*=05Mh z=d;mH!nRw~aDTazu4}ndu07Xk=E;NCtsmBzbq7|*fFP2MaxVN@IaBW`2ZwFDe%;Or zk{dKM2;3^WSRETFu9V*^1@y+I{#%dLzo9$&um0Y@=6e3!D+oB5?&eRNZcU}@ic%Ke z7`* zPtfF%2xu{ZOGg!txDLth#M!Pxh<9gFOc!?2NV>#(hc>zIoLovSSg?ru1$bUv;uY-nwa z-dItHjMgWvkinCtP5r3zHw1mMCWwNe?FW@xRAq6zeP%&_*ZW)MV9J#hIy2be;d(r^ zjdmG5AS^>1e5aFw(9ij;>D!jK-iAZ|g5haDU+S=w_G5_(s$f;;l^cK;4%?^Ct?HD{ zvs)3_$RHW_S@Js!?U~jNUhW>ww$4O-LpZ)KqYQqs(^# z=HWMHI7bxx3~c$fus;MBbju#20QMfO$aaf(j3UiA0YFPvs5zQmzg16 zDAr@in=YTn2Z&0TXlu4>fOCKWb(Z46mF7S`cPIb$-&aE_}L z1bF)FMg9zj=P9-xUW}r{JoqC5lgUyBYIhf7Tsm%9>I40_d>H$BCfq63Gg+p;X3 zr+c+kvRqTUV{bH`1C+N-T9EwRV1UpEqA(rR_%exD{W5Q6`g?Rsee-EqTL)r}KGy?S zxx2Mz&IHe9Ul@B?$gcbnkPDXQIXG&Ew# zf1$$aKfO52uQkO>IdR^mdc@7I2>O;kuVx3h#$$u^w zyVF^AAHV2BFldOQUd7eR)dw$Q0apAj3pcI@3lj}W`#f4aXJOIh<8JFLGTi=LNR70% zFQ?TwHle#xNB+U`{G!!DTjfuLnCLGz^z)GM=20e;Z;9Dr57d>R4I$7&=t#j5_vCZw z4v7AaF3=oTbhUG~w-r4{KY5)v#2I(@*kd|gGS@F78pK88bXd|9x?u(@%pm+w`08H4 zVAq2GD?j}y?K=i^>XWN_8fq2JahL3U%>w)%sK!Kv;ybd<{sZUAHRsSktB*q@`E6l@ zwC{&En#a-jOk5iW21(^T&$jt&7MQ7B+t?cR5K;avO=)n)O@ZQd^xwDDtj3p`j18zd zH`Ld~>PPl^lunTgzzscN)Z&<${`?4w&JdLoQZ-TwSU?p`eS6HBEYQmMaZjb*BvN7g zaA7)sqM`u$SgDq`B@9o-n?9iVyb}M>-JF6Vhs(Y)Adjs)TH}!7h!w}3vdh2tY^wG4 zS}yq+4lDU){tAL(s^WW>DsoW|wpy&~TpgL~W5`%GgKrLFADoMnYynu-kkFk^ag zwwsH9)&M&~MalD(7h%O?{n$`$DGk(ZT!9A9!s~Q9J6441*ppIYKQ~E#!&DWbUa>o| zf&)y3Tz%B^BvbT0d3a8Bi$o%<>IB?SgQOqvU!IoIBp8a*=lbz^E)p!p_{WrUJ8U&L zkE!uI8zyuAmMmBjGC5}O`O%%P%E|rXgV8&k<=lj!;FsLFF`brV5hx45Dox@wuA8iU zr|kE!AcJuodFoqMG+*|*46hf_^KT9PI+Qz;-uJO%6EwM_Q7?y)5QbIQhQEpR`Y)3kCGtBzxBse&->dc4MA&eAZrTYT zmI?ejvzWhx`G^0+C7VtEKS7+{UkIhGE0OCbQ}n@B`;A&e&f-JzOxdH)zRp5YujpYj7S~TREBgy;bdEN`x;RMre^*LUy3i^P!DE)9{}@SD*7dGETrTVrh+%@V967Tk(Mpy;N7!Y@`ya&9`@GGo~mD$CS_>y7jaf zs}7X+`cEfw_~iE}qI4Ai5OJWp1vo_7mOtw7nCFaJ!M4(2!q+GbS?t@xU(V4CQ6PRDU`q&b4@$1nYy)W0jy>E zey$S2Fa^>_@BmNl9o8+jBhBlWemHd?f;$lJU2joK$70TvsF zddlhQsPiOOii;>OZ0aQe`WN7gCo+O`SaX*zHuj9*WY-)oE~n3qQY%b4#g-NZDEsw~ z^urlse9yWnR>>UFfijBWWn<%v?F4(%q(VcpYEN4Kn>9YqeM!i4=kM&d9~0)m^bFL_2Z+|Al|yZYzYo+s&uoYoSyT246~O4^Sq8|@ z)|>IZwz0Ne|D6e|vHrL~N<72iu!-_ZD0*`%HMWL2?p)LmT+}whFt-}2r-E<^kCt8} z#Ro#?4nbz(AnLm!pdfOm@Uau|YZasx?Y>_HBW3fKiPL3K4;Q;8EkQM7yQ~ND^mcid z8H=d++KsMiiyc|cFD8uCZ@=t$*F28U8Th6t(35ogJ+vaEbJMP)hKD#HK{8agn>+a*{9{_ z50kf6WD>9#F(5y(v26w=i|GKR4c7;ly^HQ!n%0I%=E(x1mbQ$C+%-(}Tv>p($(rx3 zxlf<7TwjY(IE#jB?@UY4`$km?qE9`K+^9oE&!|V<1acMuym9`x?;Bu@@;20`_O@%D zYJsA5n)n$5`OxA<^h@U% zR$jkx6{hrdsumB|xDbCVuMQBLu- zL+p^8X7N+zHX+ri^%+knujUd7#T2Jt*c1*;*98MN)dv4{N}K;JVkKoA!1h(*-nLPu z%vs>Cl1eLm#u)W{*}HV?-KCh|olwoJC41#QiYpF@GetK>jYcBKJSyhNlfCuLw3QWW z6RF~_>2E3g`!d95uQ@(D_$xqTyp2z8P=Y15mv<4FO4A9k&H&xbHy-JD=;0UnrSaQ9 zZYlM(Lm}QNJhGj=8Lbi?zLHm(@s@1J)w8tqNlUKgDyQiWRBlYY1-vJRWtQ!iQaxg_ zDvMG&;9X(p(#aIKbC#nVDDhEY&~~|+<)6j*_WTD|LBAA#HppDG2Sr&_g%<#=lWQik zyREM*1l8CWE?R`XToaIBw8su!@A@6b1n8hzMhzw*nijeaugE@5RRrm#>jevq5?s!T zp`4}7J)xqtDH@EBE4|;}*^lKK4%`!-?FEqnO?j5Dm*()Dfzlvc_>iR5tD_)=NxUDhmSuJ3=#SJ^B z4gu~G?i^W;Uv#5=-tD;9W^7Vns7(7$=(QC9YBQ;XFG6k@7#I@0rKF(mjt;Gx!yAA z_$F0|?pfNW+8HpYDif|^c7)S503sIzT)FZjiv^dE{#o33S(Uq=hK0rE_xWn-s}oE205fBs#biz+b0&ur_p3GLV)X#cO zNdJsEdKOtwy(RZp#hh^2s&9pL_FB(pee|9R6f#G=xU9Tm%K|?t?b>FFk7Q*GeqDk} z4^vJ;`rlY0`@)Q;h8yRPUJ8633_jp8BUD{i7UYWT+A@BPws^lu^n}-7;YH9nvAo;| zN8u%58utxXS{U*9j1`qkPRXYwRc8N1<8uU|A1R35>u^MJJ9-+Ef`lI9spK!sv3m4) zc{IFQY%Yv_u?~KzATE3y>#^8_`mU???I`t=YRI0|550l4``1JsjG__7b)yk(7Mv%^ zTk~v0H)}Ovx&7g#yqb+Y1jyg@UL9!q1t;29H3Cb-CQP7ubatb{&YE)cBuv8lI$=}GiP2}HZMg>R6LN6D*apmFJN6)A#;W6hb-N!#`vP!Yzn`|&T))}U$tAJF-{W;nC zK>s2rr5n+OXiZ;Ds#NMj6)np^H|W@@%*#cqah@|X!GM_3-e|DF8SWB&LU)seVrR}n zNw2{vSyqe6q^P%BX8QVbD#K0bYc?X&Fb>7Ao_3P2fCcltj!@o%bS@Av&3E@uWr?%= zg>E}3bnbKLapZ}`Q*d_4D8o0BDZ)d!0y|VWBQIKa02LAVMvQ>%Fq#Lp$Ec0Vh;)|= z_iAa+W~~0S>M(({odVzIX!yw@R|z9d3gn3Ltj57Gnt$Z2m(Vz{D~%Uw0)~%w>>wyw z$^z5OTZ##AFv54;{$oJXS>>Z1_uStYh{TOIxWD1rzGHEf3c-?pvs2My^+U?-jnE&U zpiUsQG#HH)o#5k=3Z;;H45VCI)c_m0k6^tTe|`Wv1}_7ti-`TL3bsXJ|B~?)@9Yu*ny6ZI7~sYA}p`Mhs{(EwoGOy6U7ETBNGXmUrTwqWza|^f*j$ZOTGfxz9*dKA&bg!DG_+2O$=2^w%2UtpusKMcrCHK`CLShlTA+j;2tf1FF($%ht+O7SAtP(ZS1%6 z*|C71{#6Hu=V(@fBx z;F$Exu^UwdY4 zJQL9Mr-2>!t7uQ2zMVWQtZ#AW%NMqLsWMJtl+~a}>K5l-|RP_1DER)!s=sU8VrI>zR~%hZB+@* zSVJ)5U*fgYX9LWDLT<*i>ci!my%cq(tdSy{U#Z!epiyc5ee>C_I<)(E#lnb&FbsaE zwat@>xLvI22NVJ@z>t+Seqh%f$PO9vF${msR^|4Otaer0FNpqi6!>foz^QYv+UnE$ zM(xUW8cFeT&Szw*u^8V5<1+Yr#5Zr`qI}b65Jt8VSlTfL-X9=sVTs@^+Im@mQCDye zuNnt;i(wQqZW&xa3lhwM688GyRRaZdfB+eXwc|qz&U_&nr2H$3J%id~V<1H)^7{dm zG+%iA5z6&DZHA0}*Fv)DoJ;*Zj`FH}>G& z{g-O2hvvz~$r|pfxIq`u0Q8ZcM~3>5Sf;81vS5#KCPkFPsh@V}xjEjdt^Ph*hPaf~YZI=DOopnxIEkaA3Z)vMbdV+u_zDL(~EmK6@* z)e1&jNujO0!%B{d)k|{kyh=UkL}i~kx9=(K2rQy*?G{=v*6}NN>rqbzXu}N{f-9=Q z_BuOhN@}F$Lnj&>Wv7hY4V-#0M(-Qp)8Tj>QAfZ)ty1Ie|6jPw|9l@X`M=^ekNAHa z1v)ca_wgT98EuHY+d?&ly4KU_-kV<}#7<~AaL?_0bxVGy(Wi1(GGK#XS@+w5-h@OI z3H2@Z^ps~3#dsJCVT4|ylJ96_J1GXXQ=?UF+FtZ|nJH~=!y#8{?o~*rq+PY1Q2=B; zTcxvhUuP&F1?H@fGa~wCq9-Jcx*xQ^nuQgTqB-cTV(VWzw_9`HwVLj15=vvk*dx}cHj&40s^7bVny-Sv|5fj}g`xyPQZN2FuvaU|>aXj@DGL~eOg>hbj zJ*D@Ot)qL`;~APiGB$0&tMA*w>b!64;5P*c8i^gc9ryUt!!h2mvt5p8cBN$fC)@Zm z!ApU-mC}iM$?{mq8oud$a=&S%@BJrv1X(RV)3J$F3Sgn?axd=#`Wlg@X%g20We8o? zch2lREO%wstIYn9wPac=3v@TY>9 zmo4?PH8-W%jhxdky@-E%wg=5cHAIR<%1Vf)&FU^KDwc@N)7qpNYvSn!Mp@6=WIUU{$wLI z?wlgZ`XViu)5g?6VGAw}cD8x~hS-iGuEX?>YtfIWaVba) z$>nOhoBEZ+@q4a@&a^WT6Bo%8>Quaie>dz-zdUoTq&$%FmhvBVRh!&;u(FqCIFS=2 z(#-8(8{Yl<-AdotTjS) z^S{Hcmt2-(-NgI6hnSy*AiX@Lft?HOJ_0I6XIVj0On`~pxl@L3lRe^MD40p7PNx@s!J>j~`O zeiaKc{W=BU3spCDRB99lJVM>f#DCrYq6Wa&R9Tx5$#z7D*z6`IkR-8`-VOu!iJ_79 zH$_ewZ2C~H%JcFPhY*dMo60=bmOnZ6lkAAAb?jNum<>5%b+?nQf;}Q^;_bv{>x5!G zxv0;ps0f(pcf32R&LY0C^%i=s0Cm3tkuSWga>RnE+J$<&=a@vFRBV<4xTp^7>SgaEKqm%3cC zy>f^3n};}y9uE~f1h6Cqq+ccEA!z^^55Kdt>S9OR@Q4Dys`wa>!$jb$t2}ir=&{xv zhnAQ7viQ@L2ld}MNjA(JvVIpZJy00j@i-18_OP7Kca&RXgiO{8=4&k1d89(RO%zzp z^7HJw{~~&zi&4~{JROZ(VSrv;naR&QI28I(v%Se6=pf4h9}=CF+h6?y^qS&3jB33h zrW~fO1rW3d_KeaEhrWF0z8Ast_+7qgKNbDu79eZymnEd+jz5fD#-k}%6-#66PoiUK zHNQLddv?~%v@gpwM?NOEOk~T7_;9gDj^tWvoz9^!<$0)ZO9-peZ`)9Ma98KW0@qCK z+6}%Ir6tr-V&;&eF@>OH!Q9;UKE4k%j~HXNI0tKj(uF5!dH~M_pt}qhJ5be68pdC@q7GYkGb#%;*bt~6+wP$23hJz|u^Tvk z3gBCiVrF%DEOr~NmFFo#{MpK}#rp&K>gvJ*&Q-B*n)HpJO^}`&>uhZ4l*MU{W zR(n3WX|d+ZzTEVI!B09bFM|c5RaMUjpymF9l>R0gIqbWvnlxG)T&C#ZySzf(09>|0 z7yy;77A~;YLRr+XjToKm_p0V`Ij+L0r8CYYX}>IxeAH1Fx~DCuCJr*7v+z)DZxTJv zC`#?^sc>6jY1|}+jt1DfNZX)E2fFTVnFVrj!y6nK^{k6dtxAA{y}fqMpwfTsB653t z$)2)fexZUTu(Dh84^Y4xEK)7p+0uQbbnUNuelm8$)%NEXR<^l@HPPGRzbw}&PEI*Q zx-i=&Xv*+48J1_z4+-zQICcAuUf9H*@|A!#uM5PH?gNgkwkX#wl!H3d>*a;dJ-Dy; ziMY4R!DBax!{1vmJ_HOH2^tDh3*~+~pQf~5E8-6heJu^}OUAO+jB*0Ro7={&b*f;L zzjlxECqqYVc_MipIt7%VJTK{I`BC4y(ik5(zebv#@Kre1(@+w~J+64Ei?c1x!f^+5 zNed`YeI3>QI%R!Q;c|HN>CZhSxxGiEMvm5K{g%qQ;I>Fj4^gyKUSO*ZZWjPxwU)MR z5!GY^?ohu>3lGI{f_0mnmny zZ#V1M`|Pq!BCkz8g@_F^D}U_Yeu2AhNrc2kQDzqN)vi^Vu6#HDn#9P~@NqOl@D4V8 ze55RfX4gAf@z+CIr_XviwPCH~Q(A-0B~;GBgngn9dMQD6iw$YsBm?KDM@GyP>2=acys8vZT?S;sio-*h#M% znmh@hX2)1H2vsoCXF0RP+E9;D_e)KDF}_gu|G)M)70H&#BC%ZzRv3F@rd_jWyw~DgOg(3{upEBXe?RRx(B{a+ zgl|M$bFNEOD)&`poC`4ymTW#4A?YJa z_CY%!l0}GS7%$9HrC=lxD%6P{Bl*vt_1GAqXp zQzsdD@U17xsGfeF$rwp5eLgntXy_wYvZ88dWPJvjO@^A{p*aTp+XSIeFTbW}DYvR- zI%Ejc9gOBXH=mPtkRnJ5Fp5ta(Hs$L&SKg%%?U*06^eJ=2U$H7gEzj&e(})N`U(yC@yZRX za{w&`Wahi!k+R&gIy?w&EVxzCzynl!L=Fy1{yuQiim&oM!vyEmIlZo}2Q?q40vig2re|}sZHxM!!bT+G_)V(c$;rH^sMz@s8ly*cJ;K;uY$w2JdomtGo$*nhH^iVSbh)I)vt+1ZwOG@aovmeM>lxkCh5jA&tE^@h?E2#K7P^yfsE5TVSGczn-6L zo(hc{z11=m2IkUn!q%=v--{KD%@JH#=AJ73bintcn#5kToeg!fk^nPSbPJ}`{H%ce z`0@eKOBjE*-)ICuUnwljLU)+?!J<6ci3H@g?S9zL{RPmH_V|F(dMme1T+`8T<+E@* z3%f8wsBA#Up}J7hEEdYO;=#NNg8ki2tSX^lsAKzs+e!3D+=f-7FMPhHB`|kr z^kdWGk;A3HW5tOUzelYUKSoI$Ad9yQ9TNb9jOEbn17bO|!LD6U==TK71CafA3-4*5 z)ymzzNhYDntaZ8e>DQE#ocfe_&s~-R;|^ViQ|>Js80GjZHonXI<^7H#*PUj`V~jYg z$a_l1O+0}vK)fEEQ(NRnW*L}!VCOWnd3=IgqI2;f>gXGl^J_VLGI@AuI}L!)`A5Sy zR$~vB@J6K0%7t~@nnTu(iNN#)lir+9%?i-_xb|ZC^9k##x0#`GGj?evU z+RV`KNccK8s{SbIy!z`+iQO@x?aI5Qad~ibdBF0lS&2LRTZTcx`RfE*>n-10+s1f? zEB98%kSy;Ju6Y`2VI6r!=Rj1;UXNj}9?GRdG~y(CV&Pzw0AfAo|G+&*K(iL(P`W2J zzJlrL^?(xLm=ahs4(eP9SVr!K94Gbp$^5wu-`rB8EE>YrIxxyETNcXmZ(~@5Esee2 zs8J6MSTC6EUQT=8F|^4`kkF-Ddu&M}ENP!AOL%XndR3;^D=6 zUgURcyL_?p`O1z2?n5+g)5T&^zil1TKv>Z`q!-^)rbeQk7yhb1%V~T@sRrW2rBnJop zt0H?|-B38ef$P~vuQ(2aDPgJKBd?SDHOe2#sA19PV8mrV=HC^sCWYyaK0&*_fx3n>S`?jiC6Z&o9Aq9fu z9a3RjpYV>}xS|h5cT*t2dRtW#@=(2xz<(>VFz>!D%h&ai+5;Qcd$!b;Y ztiLu?PqIJb1iEW|O6~Pvq(VhrvzQLN{sFQ*x*14m9bUejSx*?8)dC*T5te}ryKsb}Pw`Gh--*fI zL`|Tq@h?`rRifAzNn<&h0wdhG2B^CZeiU0p8*mCo$>I9A*6&1Zld12-_39Fhk0d$) zS(jAr6>gMw3X+ccu%0!^l5+W8FK>ftLI9-GEl{RBP3x`OvO4L04#!NrzxW41Q!R-( z_x+(80sRk?!a*d9(hx%7w;vyyKf|zKOqE$qup#|rJ90$zV8Z=w3y$8|2RpBkqk$ry zM&R?yxp^a!cd};l6bZdi1B3zqaEN{iius}DDh2qudjS6&> z<}9*S;{!N=@KqA2nR32bvt^q;{0lMKnj?_3zi&aP_Omx>TS}ksawAviA^kuY;^7}4 zypPifi|x}l`QEcud)~gjw-AKK*+x06y7Lz-z1NiQb4Kquw0MxdJ0|fD&|?W)76&9v z*G4NoaL59XH>SVvHyXRW6Zhd%(iVlwIL6HIdYstx7;7rrMT&!rpj6wUr#7{X#$8v# z)0ul(BAar5ZGM|7lW1iuWIXDFIzNeiRQ~8+;l}^Jxc={8(W~S(g2LQ4`0rRPnB*t# z$<+3Sm8VKD`6p%h1FQ2$-mRS)leyle(lc{n<=D_5mh_Z#Yh_D;jyohQI0!ZR94?vO zBg^f|*xrgQ$}U4Hz1Zcah7%AgN}e!)rZ;TQU&|$QOpo|=p;(i#9&f7n;9f$xO*PU? zw4veLaD36Ui~ND|28lo;*|c-)}9Y<%XJhud=ifg7n|C`3_Pnnwu&3 zxU#kV5E#Y|gAOo97&5+PtWPR|iS_tt^q3plr#*h&8M^;q1dL61io1|HW^J4rW&@^m~?Vy#vU&T;nGk4bg)Q8YKvT%xyFrrzsZfPq`d@8Z(NG zvC-}jYxJXdJImuE9EbNEVt959eI~=L8I9&=nLO0pWqDBe9Y4|-7?k%vx$-RXq*D5J z0{IJd*3ZizUE@p6CEadCWg#M%grcXnShZ`9;@#k$pWoPrq;NFVt=dZ4A0SItbFYyQ z_YJvufZtVHtH?Ixois{HT&2Gma-{5j9DOF0Y0uAF*w_*(v6kozE0X`#GZxlGZf2%n z=gd%FLDGe7&ww$Q_}=~aZHjf*s2uvK06AB-+j6LNAfYv%^HCwm*CuN5QJq|^ zZDYTCW9ZqwEi`Ya#Q3Sd9+aquQ%5+`+dcPU5rs9=8mH1_Ni$tdw0s_EE7C(>7r{i6 z(98g*ovo{_|5C4RCIz7Hkko(TzdPi`KkesPFq&;xJe%!VW$>(2*H1r~5psxlC>2&G zYE^dKAz)cx4TqM^_4(Thjyga3@rGZSre8^^Z0FLY_HI|%oSEg*60X`_dd@SNUA+ZU zv$=%!kr<2jYx55AJ3!}5@Fe6#iIA2d7<=-So_pK@Fm3e$5 zHi;n!ADGmMgLDG#jR9LMBIgC#s8{g;j@F^_0{HoHI>qp{I3qzz?UWrlHjQ_K%!^|I zUY~`P@Z#EQ#C-&gf8J^#+T9P0s^qDx{Mif_^od|oPHmQWiTlG>I#fjsl$oda=tKiY#o zL8LZzg|M&V_nXG~NmT~WPkV77Ipcs!(7RI$F3!V}gy*$tm4HiD%-x7^%{LE_ToTe? zJwq4g%46QbhL%vyf4KdhF2hHqF)!jO_hgySh2K2NmZ_b6h@X<68^89|QM281*~ZXz#4xRUDW%o#zHp|~?oepJk> zlQew!OD~QS##AV&q648$XCgC`4nBxdAfZK|ANSd}3B<$oLt^A1?dt?PXE`kq7P`)J zjwCbv$98OJsav%MpiH&=19bJcJO{vyBw_XZ0Xka;-v)EL?9HrPE~rCWVO30t)*Go< z<=`h^oNQNDqDp{z_h$eu)sGheEVbo9Yxw*{01njx>sFJX&*~f;2{4Z%npeT_ZV@ju zRv*WJ7WAe#-PSo>*NvIvt{aul_emE36Mbws%$R9Sna`Kckowi~N4{;d@q5)hf#BiT zq|W^vuC(fP3tY=owrRisy-fRs8mo=BjLmx8uO!$aU zZwJY>oO7P0@UZ5p&J>@Gfa#*Cc+!G0H4RqYw)C`BDEya(GkhPhdP(6$YZrDcQD838 zpZjUv>_=x9bFbKoGf+<0uBo?aVA@9~-U?o(x<>3Ia*}sbWPk(Av%MLDa?x# zQXGIs=DeB+<0ehzWmh_iq~S5^W#7}P`vU|O$7Sro>}MgfZYhrHBg_6g?c25&MTkhh zZET*UZqQ}!`QHk&-_KDg{Jy^1E@cnM3Xz9tlKjYVax|3KBvETlWb6qU$ghTd7T9Ug z*IU$L{P;S>G+*79@*WX>*5<>0{Wmbi;%e>XuGSo*jm5CF(dZU<3}1mqq27P1ETFMxAi9YN)7$`C7t|K=-R2v?wyj2u2+OZco_JSN7j!g1yPc)-&Z-x$3~ zj`&Nn$9>WKh71x+;T-Xg1G)2SfYg9snavAl=Fqu+cochtQeUQjr0_;4XL{C13b480 z@PN5&p>A^~$(nLmK?76qk?2qRr55xFJ^5nquH82vbiYXzZ9K~z?6wGLNW4Sm{s0B@ zZ>Sz>{*#$iI=N04sS+WS-u~`qrcP}skfc7PsdGd|GFy0R{pZ0g6=P<7!hv#nVy!kR zf*c>D>u>H`+{^EVvj5j7&d}*1LFOPoA5UdbOXFyYa1yt)?|%Ke!D}wFOsM~N2i~f@ zXc#MxH+f;yHU1A-jM!|`b*5zVMV{h5N zG^DG{AWe9Ws+@bH$O~w2nUGoAd(9hd-V-A;-P62IhxrYS2@jdW?=qj{fY#nP$|!2o zOjpv*>ePnrEjJ7N2$_{_lDXMw&-WNXC<58^rTzo<)K5DZEBWqR14Kpd1q7UO-gK!# zGz)L7gM^qA>CEN&}idSuFidr5oI$EM0%j+8bWX%dvZWG$LK{P@LMFdEx zIDblkgu+QVIZ*VoO5kv58JsLn%&CUlfo)hFkyC6%Pr(Bfj-{Da<`!}qVrmI0%C=6MKbUSVmFGN6uvrLt-;@3 zWHS2f&<+`|b12GuK5=lcnI1)pXFvef#MN@Fu`Ql+NE%`Q_U|XvKliV3kHB82pRGV{@LN+Sov3u2m7FTW zPdL(Mnb}V8{{VS52*u+vPVFxe$Y{<1JT?U%7gcsnBq=9L3HHmFJ*uhKsesj-KjiWv z0pOxgxFnI-C_UBwTyRIe6Kf(ZG4y`{(*g7U)%MDg`7dU`4e|ZuF94=f?El^32~8w) zt7+3GcMi6?!C7fjMzsDjW51%LIja#U3JViI{ns)Ap#P12j`iaf0KxsE_XNV|pWG>I z{~u}^{9}Fm@4lAS`)9L<6MkCY^A2M4Zo5i=c0czdRN}}^rW>$N2ILU_M|vyVTA^gBYB5 z1*!EZLAkJyVs2g3faEssN3@)1GDdW=FhezQa5&YIGj~zK&2-_;KRHT2@$#UF{dD2h zF!MULD6y4BMI93gm?e0NXMXj2dUVQPZadvzL>f0T=)@VL&Y8z-xdD2w>fBeoZT9d; zJbaDGnHcoyxgnhN$Abh*eAUg zmz(*9D$z6@jo%c5Xc6+(T-8!9(YYF)EOCob+=c9an=GY!MupM>k-lZ~fnOn^MI3VP zg$ZCe3XCUeelDwWGAn%82UD97yL7eqllkPKI8;F{OF_e@c<>B;{CLCsTBx{~Ia>8y zrb(i?4!C<1awF7YWS&gv16r^0U&=TC-SCu!0^{zVY{bEl|0?p1komi3%cK9p*^SpD zI{Hg0o*Gb|k_$X#@;PHXM*izkQ=7BtIuEQ{Nsps=M*=wZe6st>i@<_PS#wLfO?C%# z6)*0r$M_&EPEEYN@CNHkUjb5XzMv-Y>5PL+XGuw+LHDTcU82?c%7fP}A8Z;jq`tVM zB#GZC*;aP(@#<2zH8WE|x%2k;ncvC0TJQWNN|7y$SK=A!dD(J1i_!2(yfBE=EQ}6b zJ0yh5LhmFcry`w02<)JDw>{eK9>qnkI7AbQ8HYt4niML%Xnc0#xiqQjmhsduxcH=7 zud!L!;k*VUd+}I?66Kv~#Yx)Q#BqFH-jMTPQqWJ`cLiPOQaYQLWROkx>$w!c7q&;3 zZHgLYYX`)6?n>o7Q_#!Ly^ajJ_g~d;X5rxMY1=PyPq@pGi1|O?+K1Qj)DpaGjbyk@ zS0=wuhFhcTeVx_^x^249i$CoDwl+&uY@zMP+!6k=Zw_y}-kmR>f(tDv#>S?CyT%PK zHz8IlNY*u7m}$}kNt*>vDhD6+d$}Lg_fT{_*Wz=!@Per`nc2{TJguMv*$)=hl6VU4 zu9C$meJP_a+m2MSOVDYcF)rcjhHHiuM7jx%`T%kaKILs5>xA475CK0w*tHB>WHMY- zXI|zBO-OQ34iE(^S5wmZZm)PE8bR-#sxDRS2T&UWc6ibcBSl>w*KtOT3m@te@aQv) z`11z0q5D^iWd16J-mIYYGM)RJ<)p8=?f{Y9h1=9zCfb+1=Tynm&5lZ z)ejuc`vS>9tn1p=ydq?Wc8q<9z7~RsopgJTAdP)1_6K+UWKbQ(5H( zhx4N$)eFWd?(HzQnKgyDW44vxhvvH(U}@YdY=VPGjpZM=a?xVe{OMDEk^5z zu6vONYRo%ZobxM4!3q*Tlz=xWhjU4l!AC3I-1}b+5U;R+duZQY{a7n2(Xl0NuKj84 zUrvg9ae3Fc!)`e|0O@OE`S9`r5TI4^vGZbyf1Y0_c1XSxz%U6!+j=d=U|fXApo|YU zbFxXwe>K**>uA!qX`UEOA>CP6w_dd_ojX`9J?I_ibLqg?AAbYL#eXcB!kQE!myWd{ zqn8&znjOkXxLx0>LSn7~fjN5l=j`53m0KflxDylAXl9&`d4@U+gL35UOq02J_+wGeg3u4Vovdkxm3X@CHi0_d*n4|JLJ9XHr{5(ePjXzwJ**dxMeq{$EDDbM zao8sBPMaAfta2xMsoy=<#$4(>h&{6SV}HY%V|LKDse`ZSOP0!<6GX1IwM1k<>5V~R1Na3&^{^6kt7E;R*EdL(bX*Bmbbw#vd3qk$=(z9P zj-v^-Uv(Ek_;I7bB1zhH&jbKBDllyG=h?B+g{d;;sT1c#gmUq%AM8wgtp7eSvGsM_ zBtBA}6TmZFbam}|R|z&}I;dg#&8yk*kXbOGnjHc#DriT}5&k`ii|m6&^Th)~^B=~r z1W|mw)*hmIq%~_SREkrMr^x4r`zIjcp`rvNVNjAfvMWbs3UnL&8%Oylc4MI}`8>(- zm56K&QV&0Ya7(V`gT@e_hp0Y9rJo*ZB(`jz;7cuWDS>x~mXdM2Gk&#OW8`Y14c?W*ZatUg;nv^cb+US#i^(5* zCP}!!&Y9!1Xx~`8jXIgdih@;$M|p?Zl1Q%P;i)~nxfWTu9r_+OuZ!S0X{dRX^LVz5 zx?8_AETl$@x$B5&xvS-x(4#Ao0-SMzjSEj0y5~C`KZmcXDHOSjfajE=yV_Anm9v?e z_;`G324$QAx6cSTN&W3+L(|8`bwjUfCT|sN#@EsVEqRfK;g-5zdVyho*voa#ldja# zi^8OyX|>)?=)fDhqEI8r;C(RJli_#~QC-jL&2sn-u<87UH0>alaOcX&HR?a&>d7So zTVw1lghxI6V<3>M0E?381cJ#wPNr4)O}Tf#7XUaRNvXu7d7(%6e440MQO;!yi@#do zz$!E@N}{*)9Cm;m6-7aR8j_Ah5OLr8zq@Y4WZ~>N0TM zC`G&V_&7(^r@-o)43UGMWX8&QN%P_dPb##i0A~nUQ_^yhTF`w+*3AQ1^sNC7_AQ{? z6$HLlFDp_8_J`ifhzq@KymPx&jaJgr!cHb`$t2`?cg@(i$^GfxC8D_*#C*Tp@T5t( zw30Kf-Hk9FO}toW2n;?Q>Svb^?n4;5XNK8)j2CCne;1jP&YH7!FIvbjn}lW*UC@`o z7J^($)@$bFY~Rg`^#XbnN;?Pdd1<>>w?YM9H+f}jPN;DRe|CDqvtLm5f{0)zYuuXF z#zR?evKo12Dn9oD@)mv}#8;E_NaNd&wML^lwZ8|7e>Z;n=f`9sXfMDhVy!Rm45&w1 zYn*>QG7k?tHj}jhgjN;KEvxM-Q~%98?Ef@>`*YqAh#9~^#GtZbyBc!8vH6W+?*YDY zlWVToOg)PvM=uC|LRyY(oX=e=2v+e^b`-;2{8YlXq*$!W*>t1*lWFi0^kUgSl(u2x zhlhM0L0jIbN$;$?z9B#*3VD^gQ5%|wp|8Rk4UzK?k6p#x`(yxD*x0D(C9L)}y!`3uJN+%Pr#;9?1=Bqhkxq?Bs8u zdiN>Pm%3}`pg&uusBZ+M>taaloE^fhk`Wl@Fqt%@`8$Slw>}UX5ozp zlgd!?0LUBTuF*9%a&%y?xVCsNyj@UvqWi{8EASw%pu<@SM? z!<^>Qo!xi`w>x|1QlxJa9(6v6`&6Az_v8nb3H>0D4lTR@iPbshzekWHqbZ{<`)$jG z@8G?ws~VfeJPIn&Mu0AqWp9q{JxC0+c5+NzX%yvjIs|}jZ~8`KbvsA zW}M2d2ps4E2Vy$~0SVWgCB5Lw+QvvRB8=7ARs8K(tNKc+=Mi%Ii5eWf;gT}Aa!osv z!QQL2P}P+ya~!*NR3czLoa_y+3iFk6g1^cp#tG1lIop~`41UNpCM%uG;E~BjYt)Cb zS8JrD(&AMqYN=9UPEH)X@b7g57XavRV$A)wY0_aaRTI*M@0Da@`99`+@rok=_HdII z!k{Rh`9^c1{WD*p;syz4XW`HDn@V_BB>}MvEH0p-eHNt;mj-1E$&09%gCFNPf1*tlh=35O*U; zSiQ)fXxpGvu<{;^PvBh%ezyyiGCSMCYo%)voiV6#Av$%STGSWT{DHY|=&Sx68FEFr zUd_sRb0b@?Mn+2_xziVQ-NeC9zA+H@%fcd#7apP4R{Tf+#)$~j_(R&dIzaghE__vsu6Fub8cdac@J`m9=$T_YgzE>L70c1 zssmaC-=Fe?7U1?-Nv`O_GQ^AtzT~2=dP!Cf35|AN@>GsJUkI+)HQh#EE>Z07E*guD;D<4*$cG;g`LWJ`2V47!K1UalNWsrAtSd{pwLOA50P z^#iV^<=;4@eq^j=6%IoPcsaqjXR*Z%hOS?81}9w1$?-6Fd(Zc?hiyD)BbIv}!I#Ef zaZ>4S8@J{ej&`Y&H?eCVCT{q zK!gZB(}($Mus%SWvPS2bIUvm1D@fk<(Kb0mR!Mlb+}a$$;RtdWofd=o`HEF{Zu{vA zb1b%gfAPJmey+iWHT`DIjwx3R;54CfL~tGA6nOelKW(tc#D1yHD&P37wJlf(FW+qPrn7e22;j2DtG>UW z>R+{-zdU|CgD?cuOJYyfJuqZuqy+M@W`g;4dgc^ihpg2sdYbE z_%N_7thxr%d8{1iKA0OOFOE9(F)Qz9$DNQ?!KLUAG{2KTABVvKRg29721G;v%Akr2(DTkXi4V;vl;-M$ z!w&9d*gEETbE>@(Ng)}*Wq04Irq5H2C7 z#ThbcyV{+MdJe-47e(s7x>EUK&*&gi?rlD7J9!6>8Snc__{&aa*n6FP$Vqi?u3Bz(#y&Ez4iwa2Txjto_wdsS-V}*zIfUz z-kGMb@`xAp3>-bIV22$&zSzoDxYi3iY;#app;;`k60cdQv|lxJc6=tGVdXm9@Dx7? z^yV1*;Cm)vk)zJiN-}T#3-pH)zYB)CheDGA9R2 zx09~(_tS!ZGC?BwCnfO+WRG&Ul8rOCLIJ#1DCOlVZY?A-d48?s$8Q|zki*z=fOkfU zdAQ6*g*KW!5dFcX`@yf}2VzzE{aS3V7b%(9XCxwsAFYGk>I$To?7}njH&$(H6fsoi z%UAsn^!C-abCtD{C;eie9`e16(Z1+b;^$Kb?;NZ6sE}k#xeGlv>Zlny-YPQu#<7JT zhSx8JH?+x1dxjJVO}%?7!c=PM6~%`sQWsF!7nk-rBOnJ5CjaPgaN|`1dLa847CS&` z(#zX5`Nw?=FLqA?`sE;ARWr}{?&iz_8mszGVFdUr;TdBUO8|uQ2jnXN+R0kF#4Y7q z#xPXa>n+__(v4hiY7Zk$rzpBVz;hVvHqDwd6|zEh%Qiq_EPqN6qg}e-kbGm}Qw#30 zU(OA3wf?<1nlX&%)ZKA;Vq<$R@?lZ&LD?iu9)_Qh#*+9SCUfe4$kL%s`i(U9QuVsV zezq(ii;pvC4;Ykq3fb)2Hdyq7>zByw7?}*vVVAr+`6(aiZto9`doHS7E%<}`#U}JK z{O-Z3OIX<_ieYRz-zEim#J%FYyrWa`Zyh}P8n|rsxmvT#H}b&koRtWLO@C85YdBN? z!rqWBaEFpMjXfll|GS4AnVS)#Kx7Hn_gVb&iOSH{Ld)7dhRh__=LSiER7TV~-{Xl< z4?dKESLNQ4=o`bRR2tfo$-9Nf_`;b*m@!{*I?gPNnmu#fP+O~E$@#PP`ufrWHB9mM zHZJJr@qQp-r0*p;S<@@og4>S?0DZ50K|ySAJ$MeQ0q_*DwNp#RH1M7_$tf{^=RR82 zTjPRe-J>7p%@XdKuHaEQ0dxBss`DKB7%tHGTjcKh)X9cViMRGkLVHgmXdt(f*$Z z_y5}V_&e3)AFttV>|Bi^+@8;krj>{vIxn=NqX6qt!SDhsC0QJRdC}i&s0rVX=q}#> zddL5%Qy}9xV)mVV15h*n-1Xly2I?FtWnQf<=KqW1K6Jwco-8kAsUA9$C{$kujS zR@0^0*iPOioDW%bi0NfD9dtB>u5WSVWbchuW4zXo1UeJ1r`=6i7n!aK8(%WjHFDy` zNNtlChOCYh*bp|rp$rwhWr9C-7Ab#h!Kg;a*3QI+(c#aJ;-frbiF-2Q65Sl}eLf1! z*^R4A$Wl1X9}j#uUJqsdFqyZ;FR-TBH0cMdWC@2rO0X}Gdr7Ii26Q(+I;;XRumy{@s&zM*9Al^W3R6Pzk>n1~! zR|qoOyJ{W9brID&w7#9ztfx}7aLPPJjvUL~(#QUyfuQQ1!JQy1FMC-z>c2O@Y}6`N zH6t>_2_srENk-^HF-qm~lH-tAkzS*~Sg3-vb8$n&+~O?PVupaXiHB@%09{Cksxg5v zLjd=Y)Up}4TTk5A_9)vxZ^0R3cmGSWEd*yN><`WA(kMybp z6Z9Eff5I}s1d$%bhw_L`xbROrpt%Hc!Tb zQ{S;!G}6q04?*=UX#dJiQHuKaGn$+Z^=}x+YZG^ZZ@vbnX|?CBv4skLsclLcA-qpH z&-u(ECdKd8>qpXYZ4fxPmchx7sY(eS#5ZAgLBwoZls?nffkU7JviA?E*=R%zFXZme zS#i2PN(J|RdGAfMDVzupRjZczAhJ@cgVkikdckvVC#N5!)-&W;SX3Du~!YuoRIOYE}PH zEjg5)BrC3M7W=913F@5Wxk985V8HA30)RALIg1Q@|Ck@CWR_)-^~2@RtkEPqSWs5C zT>i^fa4^}o*^#wR`mhSftwaM10{2(e>5t-uFI==Sq=_~tWej^-WAw|EyZT#15PGtqWHf9X z^9&~D>-=pyhXPKg@A8ef^sy3Npm(ku!FPu95)8uxgoUFE5!+T~=i)2{TYt|Lnecs< zeqI7MK}~k-oHP{lajXYX9dn@)?o@^T87FUDf-b;nR)+uvJ_zUQTN*>-0%z4Y=t1+^ z+-{%H>#B19Ex@m#&rs1?P7UAvP0re_MnBc!rO~6zuEw!hlL4EX(0t>MkufewwXa2R zKfpZB3Q9dh&U|fwiZ*=o8SItjo1z*2BL1aM-bBoaONWBj$Gl@_t(5)d<5i+9+mxE# z2~~tw;mnUtIZDNP!COz^?uXPnSaB5cOKTG(qSM>5-N&|R!ym*|BKxqj^Q-=E94d&Z zb)S|*cN-O4UoZQa@4=gy1ggIMt;RNj;{yK>{}>i3?eA^Z*^p8v=B8R3hzgeiH+P5s zt$ngLX5pw&&HBjzHoF@L>L+gR>V`U857s!7m#XB0zX2oNW#uqf|B|F0|Tkvq!2>QzdsGFJiUaR>=s^s(n70GY0n3#qFM6ruRRotmGfYB#FnVD4wziy+o^O zwKt$E*N6x9tKLGsQ~VMcpyE-F10<8#y1t3FKE7HhiS~QkTpUumIJ=vsvP!(i?bp?j zdKaXGF%?O0>m0^;aU>X3kM!!tlD5=MijhdXjMt8Ph@Ev@Z|NB+V0o^}r$A*Y7}dVs z1eU?JZvK&7tdUi6Sv99a*LC@PMSEf=RUxo^p^9(GfcT@GB@Rn;kWlVpH&ek#_qktK zA+*jV6K^`-aF)eP; zcqL%3Xj3*nQjKzkYOM?|@T{$Dw)t&;etPJfEAY&(LUP~5DChreRen|7_F(sNDiaWn zKsD5{Rz8}!-`q&d(j;e)oY;S5z}of+cM>C}r6CAF#u)3VI=yd;YBBHXc9nm77Bad( zto1J%4EoAN{l26r4y;AeCgyw^Tq)E%b!$mD$c%1uw1bO3>Nk#ILw#fFsyBO=G9{h0 zOgIjy7D(HJ2lHs0?-VFnYdKO9IrC3!dgJ`c&T?A6!uxPq<)z;c-QCVy&r~Ug&s(9y zsqfPFh&d?Wt(+SGH0-c13G*|pL^E}JN}ESu#J++6-%Lk08-P8L686*;FSep-E@YHN zCKJn81NVEgHiNOMu&do^pnde&eb2Cu^Q|j!g8%2NYoRRb+|MIEj!teznZ__H)ETw` z;aUl)&>KIbT|!#aaCyoXSAb6pVNk1;Cefp15+7cOm9KAjBiGN@Dn56Pg?VjyXpQ=V zG2RN%_1WU4pl7gq24}>^F6kU^VkGgZ6$5EUgh_-C`?2?qv_qbwJVVP2Mveuu151s+ z_TLT}B>=iLvNm{f^h}r42q$?mQ_ZrjLI3NIn{Rkl;2`#c5g+C$=Ww0-Xp3(E_&LlzxFzx6`oY!`9 zhr$iG9>)kHI|&jy%eDo=2s&eh=}^#|ds##fEsa(EjE!G@w>TK~g^4f$DduY=^+pQk zT+#2wl*^>CHvhlLaL_7)%4F?Uy zxy6L^q>+?kbf-^y{8LI z(9hw-3O5|QK*GOj7oU(Scglv1NYQt&PRYk0Di8Z)_+6*Fnu`-{+?-HL>B~G-a|U5t z^y?ons;ydi=xPJBcS&`)ETFTkaUk zA~W~Uy_$?L*w}Dh1;4f};Mb2I^rMZ>Y?8HNvxmKxBE_5u&^GoPk)ZG_v(l(-cLHZ5Nz`*TqD@S^JH1x?=bk*%ruwnz`#xtZ^hpt&fNeqUm4!a zlt$QudW?`r#I!4B_(R9?v3(28%pN3`2S8LT+7-hotoco8$%A-;O6XZ?5Z}qdQ|VaQ z(M;kg%vh7;q9FN-&Y96ZkKVn88hF{RoN!?FPX)UAoi7T%OMW7jgU%1C1dz+lM#A_${E8oCN1*cDQ;Eh1USdaPE+pdhp@b22dO z&M2R}qCk$3gY!WjP#f9b(AqYvW8P2^t_Uz8hmuOtq?h63l(AYL78A{M>fx;N#c~>m6=lip06YHF`F$yyCtQYXvGT ziT&R=Bo&s~kM$XaOZR$MF(=yc06`ZCwcxWHEL#|seSHxpi)2fGgVyIq&Gj_;JWuf`jVE+q zgq(kQe>_~;NxO`>9&;IE-kP7T23tJUqU&PxjN2v*o3%*srR5O(mE?j3evpR?6Y~`I4`udyI!YY$Ohz@+5Hg0px+6Ow&dq zyE@e)0vEj6wDoiOsV{5S0@H@*?iD7cnV!_+r$gHd^bf5&&t)8Jo*Z#S0VTo~-)JrI zEj83svqbj!jAGJGyrRgD&Qr;~s5H!%F&N-2_NU~N_qGt+}HS{x2CeJ6|=Pp2m8rHDU0}T94uW2 zETGrzoNd2d5GnuC+qk`@g?7!3;9G4^SSSCfrqed*PQ*#yvRr^p z;Iaw?E4U3eO6$J5Dq98B&)!TWayfZ8kIQh%o)}+JWCKoCJ|YW~brFn_6?rShEyzK! zON+A-i9<5@i!_~mD;VI`uNfZML}8dpiQI|YSspA3i488aS!D%_=U3t4c@oJleUL6@ z0jZ+|F%j}?fI^uc+a*p_F!anL)w3xE) z?p~uA4l)p?)G1Ttbpif72B1tK14qX zBLn1ZEK7*NFOccCuYWM{& zJWuh~MjyAUi1lM09I2iIIk-h#(_1lq5!z`&j5q;dkN+*Q=8UtiM`RH>tS~=<)lsy8 zJX6qs&BMM*+g4JL;HjMY{`@gfSyD4~%J{CRo_;t~xforb7OgYMMfn&boZHIerN%K6tk`yaCv9G>_m{QADWEg%Yb!arqUWc++=|y5Nk6r(XUIVx zXZ1FT`*dD9-XhWXRNIqI3Pg&LMD>Rr^ls+9$^7=HZe&x%{KBo{@K%1zwVJ*lp8S}bczJjb@qV{Im54D}qnbY@u}G_!HxE=E-iv=0S1_}# zYfkDXjT#NDYMU;e2`pOvAUk4dMKCE#)}gPf%v)npRBlJhxS1`GTZSkau4wm>xF+OC z@b9(W4j>-$lPWPYuxoInY2EZYvomdsv0&heBib=OeQ}e7NqG_@SJYd);|bJF>LY5@ zF6w~9W02A(d9fg~8=>1DQF->u(aSy+_4!`z&>INpf%ul))iBKKk1sV_k38Kt^rdw} zb8nK#J>~+-@-Jt4%<+2$&1_wxMCgEP!Ake@q)m}#iSG#m-!6l|qirIlDb%K+Lkn(- zld|e1EDHJ!S6XH7vF4u#PDsOfl*((3pNN$s1{tBGVd5(5G#vPBT}Amp!hQ-Xl^k8? zf;I&RVq4ZH93=a_pO2CZlE-et0R+MtWGNI&b#!xYabc&;bSPX{-T7|3_ZjF(p9Qv@eK348tdLKM{2Kv#*Nsi!KM^#vq*Bj3lQ>TtHW|NEEuj=D=XMb_8eL2H- zCHubFB*PZ6NL@9e^cJ0k!aCe?KQXhGl!}!BbdLnH z+0Igfc|%jxP2>5e;~ME4u8%qyn1P??#g36yTx3yq@y?jH`1>0i@owU{oH+(b-dwGw z`9YF^Z3$V32k%ykztoDC<4D7aFbCU(4_PPGG7=LIHa<*scNR2y)07hBSCvl<9!u;zn7dN~} zlSiLkhgsxi<}I)L>J?Y6AbCwQemZJQkNPrvJl`6!npq=Ic*w9VDMj<=>%^pTX3#|` zee&SxmQ&h$CF+Rx424Y<9TtEoSrb!Gc)BD{r*gtmsByc@Fsvw3Z}Fw;*@vOH3wur)M_%vf-!Y>kq&+{eBjw6fRS=JB$w^Q)FG3o$e>^<$S^Cfng z(@L$AfpzLWHEwR9ZH8w^VSmw1Ll+bGg=0jEBvT|;Drb&*mCnWTMew0BL{Z$Ink|I9|xb3A`B@z<2(j6ZC3xso?*3}!#V+#A?cCU zt)87&wU8|svYFq)$^D$=&P>YP3S4XH9<4NFp*r2)BDYR+^U-V$6fXoFV)O}^`Q|E< z5Tx9`n5No6Wo}ZOG}{YR_NzFDGT)!4p?}>FUOjH|xpnCWf8A9Rd&Vsc+wO z09=!({|A4rzj4TAU$TAlyYCeUC2nNZ`g&n!@ID|URY7BZ%EOq2N-OgP%!zUlPBVY7 zb;??Jj#ugJ6(-uU6pa-HQSLSzl7-gy-}{MB!nS@mkY-in^LbB~W1n9oS)M)GS$%t8 zB_6l?K7ytlmWgybxcW)&7Zng4a%N!`s!UT>`adl0|D(wN&qv%<+NJH>dN`CV9%8q* zafM09y-vXD?uu=)(dt5Zj|980qBzm2zj20m zv8pQ|o$-F-Sc)Na*K=`B%Riz0ZP}o5>7LChkxU&sO+(wYD1i_fQSy`8IRU(?!TsXG{#>4 zd0Rn(6q#B+bO}rC1jH!HOnQJ@wllz2v;{iOOcjCSDpT!;bH8zp5K?#vr%``>++X+Z zuYvN{toUn1`QKeW?G#p2?6*RW==3-y2LrJ(s_d?;kuGjG3;D%{j=Cw&yqS68d!}!$ zvc<46PpCIennI$_WptRHzi52d4!YVBO$F)=i_x5e0yWk4h-lK@Dcs9-Axx|nmIVcX z#<+3EPosUkT|%U8ZYZF{2QVU0_BeUoo+&`9qE~@ZjNT)VRc6Lcr~xhd`8cL~-oxBA zz^NdPcaCo#S$`$@ZhtwB*!C5ti^_Lh?J+0tkqO%cRKk+tvNMWyl1xM}&i<~~bSG8jm*{Wc- zi~^Gq%SQdu>uE<7$Lg0HlIy%{SvFso;}%23T*TabqK-AmA{m!LoFOtC~ z+fIgx2QJsb)J0C~!NH=uO4mLSYJbP(L_f zhg2!J0P&FcvO!KnT_OT%dSs+Ofw^xbkp87+)}_qEuPE*Nj~(pp`elNM8Du#ZZ^!KB zxN=xl=!TzI?_hk6^_hH-Creusms)?hfY9!6s|=`N!hOzBenf}`Qm;v^Cc_hR8=_2O z75Z;|t^Y6F+W&uC15Nem9>2~wQjAzlpmOO@S@sPKdkea!hbCT*)c_>%1w}Vyf8*qX zj<>c~f-pj6*~&QJX^cqUCn#5>Sg2VyFP1v6TXrY+RK$TT1Be5C`KfW&%u%D#HrIC$ z{hRG8su+=xbRg{!ulZGt)~_8`WEK03bLXTuaBR3Dz~Qg6|GH~`jh4S=$^X{s@Z{Wc zJZm+Oe2-Ff!HXUHdRjT(j}j#xeeb9HH0-`vtUuRh1seL7=%`a^Zrp@!8tB72LWM5u ih|(w=?QNVL5K!>_cgS*oo%`4Q`)dsReGL4b{l5Ss3t5%` literal 0 HcmV?d00001 From df063cafbabc9b5ee2b2fd512e479410052594a6 Mon Sep 17 00:00:00 2001 From: piradiusquared Date: Tue, 14 Oct 2025 17:34:12 +1000 Subject: [PATCH 11/49] Reformatting of current code for easier refactoring. Loaded model for fine tuning --- recognition/FLAN_s4885380/modules.py | 34 +++++++++++++--------------- 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/recognition/FLAN_s4885380/modules.py b/recognition/FLAN_s4885380/modules.py index e60966b12..31b40cf24 100644 --- a/recognition/FLAN_s4885380/modules.py +++ b/recognition/FLAN_s4885380/modules.py @@ -1,9 +1,6 @@ import torch - -device = torch.device("cuda" if torch.cuda.is_available() else "cpu") -print("Device:", device) - -from datasets import load_dataset +from datasets import load_dataset, Dataset +from peft import LoraModel, LoraConfig from transformers import ( AutoTokenizer, AutoModelForSeq2SeqLM, @@ -12,11 +9,17 @@ DataCollatorForSeq2Seq ) -dataset = load_dataset("BioLaySumm/BioLaySumm2025-LaymanRRG-opensource-track") -tokenizer = AutoTokenizer.from_pretrained("google/flan-t5-base") +# Constant values +FLAN_MODEL = "google/flan-t5-base" +DATASET_URL = "BioLaySumm/BioLaySumm2025-LaymanRRG-opensource-track" +MAX_INPUT = 1024 # Sufficient length +MAX_LABEL = 256 -print(dataset["train"].column_names) +device = torch.device("cuda" if torch.cuda.is_available() else "cpu") +print("Device:", device) + +tokenizer = AutoTokenizer.from_pretrained(FLAN_MODEL) def preprocess_function(batch): prefix = "translate this radiology report into a summary for a layperson: " @@ -29,8 +32,6 @@ def preprocess_function(batch): model_inputs["labels"] = labels["input_ids"] return model_inputs -from datasets import Dataset, DatasetDict - test_data = { 'train': Dataset.from_dict({ 'radiology_report': ["The chest shows significant air trapping. Bilateral apical chronic changes are present. Dorsal kyphosis is noted. No evidence of pneumothorax."], @@ -45,15 +46,12 @@ def preprocess_function(batch): 'layman_report': ["Long-term changes in the lungs are seen."] }) } -dataset_test = DatasetDict(test_data) -tokenised_dataset = dataset.map(preprocess_function, batched=True, remove_columns=['radiology_report', 'layman_report']) +biolay_dataset = load_dataset(DATASET_URL) +original_columns = biolay_dataset["train"].column_names +tokenised_dataset = biolay_dataset.map(preprocess_function, batched=True, remove_columns=original_columns) print("Dataset preprocessed successfully!") -print(tokenised_dataset['train'][0].keys()) - -# Directly from hugging face -from transformers import AutoModelForSeq2SeqLM -from peft import LoraModel, LoraConfig +print(tokenised_dataset["train"][0].keys()) config = LoraConfig( task_type="SEQ_2_SEQ_LM", @@ -63,5 +61,5 @@ def preprocess_function(batch): lora_dropout=0.01, ) -model = AutoModelForSeq2SeqLM.from_pretrained("t5-base") +model = AutoModelForSeq2SeqLM.from_pretrained(FLAN_MODEL) lora_model = LoraModel(model, config, "default") \ No newline at end of file From b0649ddda1b9035386970f2ff7290f012646da96 Mon Sep 17 00:00:00 2001 From: piradiusquared Date: Tue, 14 Oct 2025 17:54:20 +1000 Subject: [PATCH 12/49] Update to README. Some details filled out --- recognition/FLAN_s4885380/README.md | 40 ++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/recognition/FLAN_s4885380/README.md b/recognition/FLAN_s4885380/README.md index a0ab4f9f0..8f34f824c 100644 --- a/recognition/FLAN_s4885380/README.md +++ b/recognition/FLAN_s4885380/README.md @@ -15,4 +15,42 @@ ## Output -## Reproducing Requirements \ No newline at end of file +### Rouge Score + +## Reproducing Requirements +### Implementation Details +| Parameter | Description | +| --------- | ----------- | +| Model | `T5-Base` | +| Parameter count | Base Model: ~250M, Trainable: (Find and UPDATE) | +| Fine-Tuning Strategy | LoRA (INSERT specifications) | +| Epochs | | +| Learning Rate | | +| Training Time | 10 BILLION hours (UPDATE later) | + +### Hardware Specification: +| Hardware | Description | +| -------- | ----------- | +| CPU | 8x vCPU cores (AMD Zen 2) | +| GPU Type | NVDIA A100 | +| VRAM | 40 GB | +| RAM | 64 GB | + + +### Library Installation: +The following libraries are required to reproduce the fine-tuning process: +``` Bash +torch +transformers +datasets +evaluate +peft +accelerate +bitsandbytes +sentencepiece +rouge-score +``` +Or, you may install through the provided ```requirements.txt``` file by running: +``` Bash +pip install -r requirements.txt +``` \ No newline at end of file From 4dc7fe89e6ebd23337fd067443b3e9a4b645aca9 Mon Sep 17 00:00:00 2001 From: piradiusquared Date: Thu, 23 Oct 2025 22:36:47 +1000 Subject: [PATCH 13/49] Created helper file constants.py. Contains all values which are used for argument purposes. --- recognition/FLAN_s4885380/constants.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 recognition/FLAN_s4885380/constants.py diff --git a/recognition/FLAN_s4885380/constants.py b/recognition/FLAN_s4885380/constants.py new file mode 100644 index 000000000..527aeab19 --- /dev/null +++ b/recognition/FLAN_s4885380/constants.py @@ -0,0 +1,23 @@ + +MODEL_NAME = "google/flan-t5-base" + +TRAIN_FILE = "hf://datasets/BioLaySumm/BioLaySumm2025-LaymanRRG-opensource-track/data/train-00000-of-00001.parquet" +VALIDATION_FILE = "hf://datasets/BioLaySumm/BioLaySumm2025-LaymanRRG-opensource-track/data/validation-00000-of-00001.parquet" +TEST_FILE = "hf://datasets/BioLaySumm/BioLaySumm2025-LaymanRRG-opensource-track/data/test-00000-of-00001.parquet" + +INPUT_COLUMN = "radiology_report" +TARGET_COLUMN = "layman_report" + +EPOCHS = 3 +LEARNING_RATE = 1e-4 +TRAIN_BATCH_SIZE = 8 +VALID_BATCH_SIZE = 16 +MAX_INPUT_LENGTH = 1024 +MAX_TARGET_LENGTH = 512 + +LORA_R = 16 +LORA_ALPHA = 32 +LORA_DROPOUT = 0.05 +LORA_TARGET_MODULES = ["q", "v"] + +OUTPUT_DIR = "t5-base-lora-tuned" \ No newline at end of file From f1ca52e845de7a628edeba60c88d2ee3abb863f5 Mon Sep 17 00:00:00 2001 From: piradiusquared Date: Thu, 23 Oct 2025 22:37:40 +1000 Subject: [PATCH 14/49] Dataset function. Uses Pandas to load in dataset directly from HuggingFace without their API. Still under testing. --- recognition/FLAN_s4885380/dataset.py | 38 ++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/recognition/FLAN_s4885380/dataset.py b/recognition/FLAN_s4885380/dataset.py index 95995774c..a2abaabf6 100644 --- a/recognition/FLAN_s4885380/dataset.py +++ b/recognition/FLAN_s4885380/dataset.py @@ -1,4 +1,38 @@ -from datasets import load_dataset -from transformers import AutoTokenizer +import torch +import pandas as pd +from torch.utils.data import Dataset, DataLoader +from constants import * + +class FlanDataset(Dataset): + def __init__(self, file_path: str, tokenizer, config): + self.tokenizer = tokenizer + self.config = config + self.prefix = "translate this radiology report into a summary for a layperson: " + + # Biolaysumm dataset is of .parquet file type + self.dataframe = pd.read_parquet(file_path) + + def __len__(self): + return len(self.dataframe) + + def __getitem__(self, index: int): + row = self.dataframe.iloc[index] + report = self.prefix + str(row[INPUT_COLUMN]) + summary = str(row[TARGET_COLUMN]) + + model_inputs = self.tokenizer( + report, + max_length=MAX_INPUT_LENGTH, + truncation=True + ) + + with self.tokenizer.as_target_tokenizer(): + labels = self.tokenizer( + summary, + max_length=MAX_TARGET_LENGTH, + truncation=True + ) + + return model_inputs From 7787f51fab0e8ed4293211436a2d9ee606f4666f Mon Sep 17 00:00:00 2001 From: piradiusquared Date: Thu, 23 Oct 2025 22:38:42 +1000 Subject: [PATCH 15/49] Removed HuggingFace API related code. Re-visiting modules (dataset for now) --- recognition/FLAN_s4885380/modules.py | 65 ---------------------------- 1 file changed, 65 deletions(-) diff --git a/recognition/FLAN_s4885380/modules.py b/recognition/FLAN_s4885380/modules.py index 31b40cf24..e69de29bb 100644 --- a/recognition/FLAN_s4885380/modules.py +++ b/recognition/FLAN_s4885380/modules.py @@ -1,65 +0,0 @@ -import torch -from datasets import load_dataset, Dataset -from peft import LoraModel, LoraConfig -from transformers import ( - AutoTokenizer, - AutoModelForSeq2SeqLM, - Seq2SeqTrainer, - Seq2SeqTrainingArguments, - DataCollatorForSeq2Seq -) - -# Constant values -FLAN_MODEL = "google/flan-t5-base" -DATASET_URL = "BioLaySumm/BioLaySumm2025-LaymanRRG-opensource-track" - -MAX_INPUT = 1024 # Sufficient length -MAX_LABEL = 256 - -device = torch.device("cuda" if torch.cuda.is_available() else "cpu") -print("Device:", device) - -tokenizer = AutoTokenizer.from_pretrained(FLAN_MODEL) - -def preprocess_function(batch): - prefix = "translate this radiology report into a summary for a layperson: " - inputs = [prefix + report for report in batch["radiology_report"]] - targets = [report for report in batch["layman_report"]] - - model_inputs = tokenizer(inputs, max_length=1024, truncation=True) - with tokenizer.as_target_tokenizer(): - labels = tokenizer(targets, max_length=256, truncation=True) - model_inputs["labels"] = labels["input_ids"] - return model_inputs - -test_data = { - 'train': Dataset.from_dict({ - 'radiology_report': ["The chest shows significant air trapping. Bilateral apical chronic changes are present. Dorsal kyphosis is noted. No evidence of pneumothorax."], - 'layman_report': ["The chest shows a large amount of trapped air. There are long-term changes at the top of both lungs. The upper back is curved outward. There is no sign of air in the space around the lungs."] - }), - 'validation': Dataset.from_dict({ - 'radiology_report': ["Central venous catheter traversing the left jugular vein with its tip in the superior vena cava. The remainder is unchanged."], - 'layman_report': ["A central venous catheter is going through the left jugular vein and its tip is in the superior vena cava. Everything else is the same as before."] - }), - 'test': Dataset.from_dict({ - 'radiology_report': ["Chronic pulmonary changes"], - 'layman_report': ["Long-term changes in the lungs are seen."] - }) -} -biolay_dataset = load_dataset(DATASET_URL) -original_columns = biolay_dataset["train"].column_names -tokenised_dataset = biolay_dataset.map(preprocess_function, batched=True, remove_columns=original_columns) - -print("Dataset preprocessed successfully!") -print(tokenised_dataset["train"][0].keys()) - -config = LoraConfig( - task_type="SEQ_2_SEQ_LM", - r=8, - lora_alpha=32, - target_modules=["q", "v"], - lora_dropout=0.01, -) - -model = AutoModelForSeq2SeqLM.from_pretrained(FLAN_MODEL) -lora_model = LoraModel(model, config, "default") \ No newline at end of file From a966c5f2a6f333a8077b9f1d2400bf46d1c03bf4 Mon Sep 17 00:00:00 2001 From: piradiusquared Date: Sun, 26 Oct 2025 11:22:56 +1000 Subject: [PATCH 16/49] Load LoRA into modules.py. Test with some optimal LoRA configuration values for Seq2Seq training. Optimiser used is AdamW, as used before in demos. --- recognition/FLAN_s4885380/modules.py | 52 ++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/recognition/FLAN_s4885380/modules.py b/recognition/FLAN_s4885380/modules.py index e69de29bb..c160e1317 100644 --- a/recognition/FLAN_s4885380/modules.py +++ b/recognition/FLAN_s4885380/modules.py @@ -0,0 +1,52 @@ +from typing import Tuple +import torch +import pandas as pd +import numpy as np +import evaluate +from tqdm.auto import tqdm + +from torch.utils.data import Dataset, DataLoader +from torch.optim import AdamW +from transformers import ( + AutoTokenizer, + AutoModelForSeq2SeqLM, + get_scheduler +) +from peft import LoraConfig, get_peft_model, TaskType + +from dataset import * +from constants import * + +class FlanModel: + def __init__(self): + pass + + def build(self) -> Tuple[AutoModelForSeq2SeqLM, AutoTokenizer]: + # Load actual Flan-T5 models + tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME) + model = AutoModelForSeq2SeqLM.from_pretrained(MODEL_NAME) + + # Load LoRA + lora_config = LoraConfig( + r=LORA_R, + lora_alpha=LORA_ALPHA, + target_modules=LORA_TARGET_MODULES, + lora_dropout=LORA_DROPOUT, + bias="none", + task_type=TaskType.SEQ_2_SEQ_LM + ) + + model = get_peft_model(model, lora_config) + model.print_trainable_parameters() + return model, tokenizer + # model.to(device) + + def setup_optimiser(self, model, train_dataloader) -> Tuple[AdamW, get_scheduler]: + optimizer = AdamW(model.parameters(), lr=LEARNING_RATE) + num_training_steps = EPOCHS * len(train_dataloader) + lr_scheduler = get_scheduler( + "linear", optimizer=optimizer, num_warmup_steps=0, num_training_steps=num_training_steps + ) + + return optimizer, lr_scheduler + From 10ffdd8a624f1005bdc118112f7f78e0f66c8b36 Mon Sep 17 00:00:00 2001 From: piradiusquared Date: Mon, 27 Oct 2025 11:28:24 +1000 Subject: [PATCH 17/49] Minor updates to dataset configurations. For testing purposes, 50 rows is sampled from total "train" dataset --- recognition/FLAN_s4885380/dataset.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/recognition/FLAN_s4885380/dataset.py b/recognition/FLAN_s4885380/dataset.py index a2abaabf6..fbe55fa40 100644 --- a/recognition/FLAN_s4885380/dataset.py +++ b/recognition/FLAN_s4885380/dataset.py @@ -1,18 +1,18 @@ -import torch import pandas as pd -from torch.utils.data import Dataset, DataLoader +from torch.utils.data import Dataset from constants import * class FlanDataset(Dataset): - def __init__(self, file_path: str, tokenizer, config): + def __init__(self, file_path: str, tokenizer): self.tokenizer = tokenizer - self.config = config self.prefix = "translate this radiology report into a summary for a layperson: " # Biolaysumm dataset is of .parquet file type + # Future addition: add support for basic files self.dataframe = pd.read_parquet(file_path) + self.dataframe = self.dataframe[0:50] # Slice data for subset def __len__(self): return len(self.dataframe) @@ -34,5 +34,5 @@ def __getitem__(self, index: int): max_length=MAX_TARGET_LENGTH, truncation=True ) - + model_inputs["labels"] = labels["input_ids"] return model_inputs From c6377a6ae4d1a465990c6e2ddca3b5e31262ff2c Mon Sep 17 00:00:00 2001 From: piradiusquared Date: Mon, 27 Oct 2025 13:25:42 +1000 Subject: [PATCH 18/49] Added held-out dataset splitting. Dataset is split into 70/30 ratios for training and validation respectively --- recognition/FLAN_s4885380/dataset.py | 38 ++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/recognition/FLAN_s4885380/dataset.py b/recognition/FLAN_s4885380/dataset.py index fbe55fa40..e13b18b82 100644 --- a/recognition/FLAN_s4885380/dataset.py +++ b/recognition/FLAN_s4885380/dataset.py @@ -1,23 +1,38 @@ import pandas as pd +import numpy as np from torch.utils.data import Dataset from constants import * +class SplitData: + def __init__(self, file_path: str) -> None: + self.dataframe = pd.read_parquet(file_path) + self.dataframe = self.dataframe[0:200] # Remove when actually training + + def get_splits(self) -> tuple[pd.DataFrame, pd.DataFrame]: + split_index = np.random.random(len(self.dataframe)) < 0.7 + train = self.dataframe[split_index] + validation = self.dataframe[~split_index] + + return train, validation + class FlanDataset(Dataset): - def __init__(self, file_path: str, tokenizer): + def __init__(self, dataframe: pd.DataFrame, tokenizer) -> None: self.tokenizer = tokenizer self.prefix = "translate this radiology report into a summary for a layperson: " - + + self.dataframe = dataframe + # Biolaysumm dataset is of .parquet file type - # Future addition: add support for basic files - self.dataframe = pd.read_parquet(file_path) - self.dataframe = self.dataframe[0:50] # Slice data for subset - - def __len__(self): + # Future addition: add support for basic files + # self.dataframe = pd.read_parquet(file_path) + # self.dataframe = self.dataframe[0:50] # Slice data for subset + + def __len__(self) -> int: return len(self.dataframe) - def __getitem__(self, index: int): + def __getitem__(self, index: int) -> list: row = self.dataframe.iloc[index] report = self.prefix + str(row[INPUT_COLUMN]) summary = str(row[TARGET_COLUMN]) @@ -36,3 +51,10 @@ def __getitem__(self, index: int): ) model_inputs["labels"] = labels["input_ids"] return model_inputs + + +# dataframe = SplitData(file_path=TRAIN_FILE) +# train, validation = dataframe.get_splits() + +# print(len(train)) +# print(len(validation)) From 5bcbbad0953ed559ddfb3421225e3433b2b20b7d Mon Sep 17 00:00:00 2001 From: piradiusquared Date: Mon, 27 Oct 2025 13:26:19 +1000 Subject: [PATCH 19/49] Update to constant values. Testing with t5-small (will revert back to base later) --- recognition/FLAN_s4885380/constants.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/recognition/FLAN_s4885380/constants.py b/recognition/FLAN_s4885380/constants.py index 527aeab19..4a396a4d3 100644 --- a/recognition/FLAN_s4885380/constants.py +++ b/recognition/FLAN_s4885380/constants.py @@ -1,5 +1,5 @@ -MODEL_NAME = "google/flan-t5-base" +MODEL_NAME = "google/flan-t5-small" TRAIN_FILE = "hf://datasets/BioLaySumm/BioLaySumm2025-LaymanRRG-opensource-track/data/train-00000-of-00001.parquet" VALIDATION_FILE = "hf://datasets/BioLaySumm/BioLaySumm2025-LaymanRRG-opensource-track/data/validation-00000-of-00001.parquet" @@ -8,6 +8,9 @@ INPUT_COLUMN = "radiology_report" TARGET_COLUMN = "layman_report" +TRAIN_SPLIT = 0.7 +VALIDATION_SPLIT = 0.3 + EPOCHS = 3 LEARNING_RATE = 1e-4 TRAIN_BATCH_SIZE = 8 From c8d6e75b8492844e8a02ce2c39c89377251e2be3 Mon Sep 17 00:00:00 2001 From: piradiusquared Date: Mon, 27 Oct 2025 13:28:51 +1000 Subject: [PATCH 20/49] Skeleton for train.py. Should be the required variables for the training loop. --- recognition/FLAN_s4885380/train.py | 41 ++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/recognition/FLAN_s4885380/train.py b/recognition/FLAN_s4885380/train.py index e69de29bb..bf867ccf6 100644 --- a/recognition/FLAN_s4885380/train.py +++ b/recognition/FLAN_s4885380/train.py @@ -0,0 +1,41 @@ +import time +import torch +import numpy as np +import evaluate +from transformers import DataCollatorForSeq2Seq +from tqdm.auto import tqdm +from torch.cuda.amp import GradScaler, autocast +from torch.utils.data import DataLoader + +from dataset import * +from modules import * +from constants import * + +class FlanTrainer: + def __init__(self, + model: AutoModelForSeq2SeqLM, + tokenizer: AutoTokenizer, + train_dataloader: DataLoader, + eval_dataloader: DataLoader, + optimizer: AdamW, + lr_scheduler, + device: torch.device + ) -> None: + self.model = model + self.tokenizer = tokenizer + self.train_dataloader = train_dataloader + self.eval_dataloader = eval_dataloader + self.optimizer = optimizer + self.lr_scheduler = lr_scheduler + self.device = device + + + def train(self): + pass + + def train_epoch(self, epoch: int) -> None: + pass + + + def evaluate_epoch(self, epoch): + pass \ No newline at end of file From 39495594b961f2ba4fa3c61ffa9cf40035bb68c1 Mon Sep 17 00:00:00 2001 From: piradiusquared Date: Mon, 27 Oct 2025 14:35:34 +1000 Subject: [PATCH 21/49] Added scaler and rouge evaluator into train.py. Adapted basic pytorch training loop from pytorch.org and huggingface tutorials. --- recognition/FLAN_s4885380/train.py | 37 ++++++++++++++++++++++++++---- 1 file changed, 33 insertions(+), 4 deletions(-) diff --git a/recognition/FLAN_s4885380/train.py b/recognition/FLAN_s4885380/train.py index bf867ccf6..86cc351bc 100644 --- a/recognition/FLAN_s4885380/train.py +++ b/recognition/FLAN_s4885380/train.py @@ -28,14 +28,43 @@ def __init__(self, self.optimizer = optimizer self.lr_scheduler = lr_scheduler self.device = device + self.scaler = GradScaler() # New version doesn't work on rangpur + self.metric = evaluate.load("rouge") - + self._train_loss = [] # Loss list for plotting + def train(self): - pass + for epoch in range(EPOCHS): + self.train_epoch(epoch=epoch) + """ + References: https://docs.pytorch.org/tutorials/beginner/introyt/trainingyt.html + https://huggingface.co/learn/llm-course/en/chapter3/4#next-steps-and-best-practices + """ def train_epoch(self, epoch: int) -> None: - pass + self.model.train() + train_progress = tqdm(self.train_dataloader, desc=f"Epoch {epoch + 1} Training") + + for batch in train_progress: + batch = {k: v.to(self.device) for k, v in batch.items()} + with torch.no_grad(): + outputs = self.model(**batch) + loss = outputs.loss + + self.scaler.scale(loss).backward() # Step optimiser and scalers + self.scaler.step(optimizer=self.optimizer) + self.scaler.update() + self.lr_scheduler.step() + self.optimizer.zero_grad() + + self._train_loss.append(loss.item()) # Add loss per batch to list + + train_progress.set_postfix(loss=loss.item()) + train_progress.update(1) def evaluate_epoch(self, epoch): - pass \ No newline at end of file + pass + + def get_train_loss(self) -> list: + return self._train_loss \ No newline at end of file From 0524281c43bd9df52a8ec39a3767f3e9a2562e87 Mon Sep 17 00:00:00 2001 From: piradiusquared Date: Mon, 27 Oct 2025 22:45:07 +1000 Subject: [PATCH 22/49] Adapted evaluation loop from Pytorch and online videos. Currently the most basic implementation. Rouge scores are printed at the end of each epoch. --- recognition/FLAN_s4885380/train.py | 32 +++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/recognition/FLAN_s4885380/train.py b/recognition/FLAN_s4885380/train.py index 86cc351bc..122967e5e 100644 --- a/recognition/FLAN_s4885380/train.py +++ b/recognition/FLAN_s4885380/train.py @@ -36,6 +36,7 @@ def __init__(self, def train(self): for epoch in range(EPOCHS): self.train_epoch(epoch=epoch) + self.evaluate_epoch(epoch=epoch) """ References: https://docs.pytorch.org/tutorials/beginner/introyt/trainingyt.html @@ -64,7 +65,36 @@ def train_epoch(self, epoch: int) -> None: def evaluate_epoch(self, epoch): - pass + self.model.eval() + + all_preds = [] + all_labels = [] + + eval_progress = tqdm(self.eval_dataloader, desc="Evaluating") + for batch in eval_progress: + batch = {k: v.to(self.device) for k, v in batch.items()} + with torch.no_grad(): + generated_tokens = self.model.generate( + input_ids=batch["input_ids"], + attention_mask=batch["attention_mask"], + max_new_tokens=MAX_TARGET_LENGTH, + ) + + decoded_preds = self.tokenizer.batch_decode(generated_tokens, skip_special_tokens=True) + labels = np.where(batch["labels"].cpu() != -100, batch["labels"].cpu(), self.tokenizer.pad_token_id) + decoded_labels = self.tokenizer.batch_decode(labels, skip_special_tokens=True) + + all_preds.extend(decoded_preds) + all_labels.extend(decoded_labels) + + result = self.metric.compute(predictions=all_preds, references=all_labels, use_stemmer=True) + result = {k: v * 100 for k, v in result.items()} + print(f"Rouge score: {result}") + + # Save per epoch in case something goes wrong + epoch_output_dir = f"{OUTPUT_DIR}/epoch_{epoch+1}" + self.model.save_pretrained(epoch_output_dir) + self.tokenizer.save_pretrained(epoch_output_dir) def get_train_loss(self) -> list: return self._train_loss \ No newline at end of file From e5f754dd6403000bec77486725be13fabb38218f Mon Sep 17 00:00:00 2001 From: piradiusquared Date: Mon, 27 Oct 2025 22:45:49 +1000 Subject: [PATCH 23/49] Added sampling feature to dataset loading. Can now get specified amount of rows (not random, starting from 0) --- recognition/FLAN_s4885380/dataset.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/recognition/FLAN_s4885380/dataset.py b/recognition/FLAN_s4885380/dataset.py index e13b18b82..1e01d6bc6 100644 --- a/recognition/FLAN_s4885380/dataset.py +++ b/recognition/FLAN_s4885380/dataset.py @@ -1,3 +1,4 @@ +from typing import Any import pandas as pd import numpy as np @@ -5,9 +6,12 @@ from constants import * class SplitData: - def __init__(self, file_path: str) -> None: + def __init__(self, file_path: str, sample_size: int | None = None) -> None: self.dataframe = pd.read_parquet(file_path) - self.dataframe = self.dataframe[0:200] # Remove when actually training + if sample_size != None: + self.dataframe = self.dataframe[0:sample_size] # Remove when actually training + else: + self.dataframe = self.dataframe[100:300] def get_splits(self) -> tuple[pd.DataFrame, pd.DataFrame]: split_index = np.random.random(len(self.dataframe)) < 0.7 From b64fba887611b5e8471410c0a3e3ed201bc13df7 Mon Sep 17 00:00:00 2001 From: piradiusquared Date: Mon, 27 Oct 2025 22:47:56 +1000 Subject: [PATCH 24/49] Added gitignore for pycache files --- recognition/FLAN_s4885380/.gitignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 recognition/FLAN_s4885380/.gitignore diff --git a/recognition/FLAN_s4885380/.gitignore b/recognition/FLAN_s4885380/.gitignore new file mode 100644 index 000000000..9372c7b50 --- /dev/null +++ b/recognition/FLAN_s4885380/.gitignore @@ -0,0 +1 @@ +/__pycache__/* \ No newline at end of file From 20769c689d2890e6eb523691d833aeb3a67e80c2 Mon Sep 17 00:00:00 2001 From: piradiusquared Date: Thu, 30 Oct 2025 10:40:14 +1000 Subject: [PATCH 25/49] Prediction of unseen data from validation set. Compares scores from official layman report in the dataset to fine tuned model. --- recognition/FLAN_s4885380/predict.py | 47 ++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/recognition/FLAN_s4885380/predict.py b/recognition/FLAN_s4885380/predict.py index e69de29bb..a8af715ae 100644 --- a/recognition/FLAN_s4885380/predict.py +++ b/recognition/FLAN_s4885380/predict.py @@ -0,0 +1,47 @@ +import torch +import evaluate +from transformers import AutoModelForSeq2SeqLM, AutoTokenizer +from peft import PeftModel +from datasets import load_dataset + +BASE_MODEL = "google/flan-t5-base" +FINETUNED_MODEL = "t5-base-lora-tuned/epoch_3" # Take last epoch + +base_model = AutoModelForSeq2SeqLM.from_pretrained(BASE_MODEL, torch_dtype=torch.bfloat16, device_map="auto") + +model = PeftModel.from_pretrained(base_model, FINETUNED_MODEL) +tokenizer = AutoTokenizer.from_pretrained(BASE_MODEL) + +predict_dataset = load_dataset("BioLaySumm/BioLaySumm2025-LaymanRRG-opensource-track") +predict_dataset = predict_dataset.shuffle(seed=889) +random_predict = predict_dataset["validation"] + +predictions = [] +references = [] + +for i in range(5): # Number of comparisons + radiology_report = random_predict[i]['radiology_report'] + layman_report = random_predict[i]['layman_report'] + + prompt = f"translate this radiology report into a summary for a layperson: {radiology_report}" + inputs = tokenizer(prompt, return_tensors="pt").to("cuda") + + # Get fine tuned model to generate + with torch.no_grad(): + outputs = model.generate(**inputs, max_new_tokens=256) # constant for 256 + + prediction = tokenizer.decode(outputs[0], skip_special_tokens=True) + + print(f"\nExample {i + 1}") + print(f"Official Layman Report: {layman_report}") + print(f"Fine tuned Model's Layman Report: {prediction}") + + predictions.append(prediction) + references.append(layman_report) # Official report from dataset + +rouge_scores = evaluate.load("rouge") +scores = rouge_scores.compute(predictions=predictions, references=references, use_stemmer=True) + +print(f"Final ROUGE scores after predictions") +for key, value in scores.items(): + print(f"{key}: {value * 100: .4f}") From 36682f8729f077b2644185df2147306c79596dc5 Mon Sep 17 00:00:00 2001 From: piradiusquared Date: Thu, 30 Oct 2025 11:05:19 +1000 Subject: [PATCH 26/49] Training loop now prints out live stats after each epoch when training. --- recognition/FLAN_s4885380/train.py | 93 +++++++++++++++++++++++++----- 1 file changed, 77 insertions(+), 16 deletions(-) diff --git a/recognition/FLAN_s4885380/train.py b/recognition/FLAN_s4885380/train.py index 122967e5e..8ffe72a8a 100644 --- a/recognition/FLAN_s4885380/train.py +++ b/recognition/FLAN_s4885380/train.py @@ -28,43 +28,54 @@ def __init__(self, self.optimizer = optimizer self.lr_scheduler = lr_scheduler self.device = device - self.scaler = GradScaler() # New version doesn't work on rangpur + self.scaler = GradScaler() self.metric = evaluate.load("rouge") - self._train_loss = [] # Loss list for plotting + self._train_loss = [] def train(self): + start_time = time.time() for epoch in range(EPOCHS): - self.train_epoch(epoch=epoch) - self.evaluate_epoch(epoch=epoch) + epoch_start = time.time() + + self.train_epoch(epoch) + self.evaluate_epoch(epoch) + + epoch_time = time.time() - epoch_start + print(f"Epoch {epoch + 1} took {epoch_time/60 : .2f} minutes") + + total_time = time.time() - start_time + hours, rem = divmod(total_time, 3600) + minutes, seconds = divmod(rem, 60) + print(f"\nTotal training time: {int(hours)}h {int(minutes)}m {seconds:.2f}s") - """ - References: https://docs.pytorch.org/tutorials/beginner/introyt/trainingyt.html - https://huggingface.co/learn/llm-course/en/chapter3/4#next-steps-and-best-practices - """ def train_epoch(self, epoch: int) -> None: + print(f"\nStarting Epoch {epoch+1}/{EPOCHS}") self.model.train() train_progress = tqdm(self.train_dataloader, desc=f"Epoch {epoch + 1} Training") + batch_num = 0 for batch in train_progress: batch = {k: v.to(self.device) for k, v in batch.items()} - with torch.no_grad(): + with autocast(dtype=torch.bfloat16): outputs = self.model(**batch) loss = outputs.loss - self.scaler.scale(loss).backward() # Step optimiser and scalers + self.scaler.scale(loss).backward() self.scaler.step(optimizer=self.optimizer) self.scaler.update() self.lr_scheduler.step() self.optimizer.zero_grad() - self._train_loss.append(loss.item()) # Add loss per batch to list + self._train_loss.append(loss.item()) train_progress.set_postfix(loss=loss.item()) - train_progress.update(1) + tqdm.write(f"Batch: {batch_num} Loss: {loss.item(): .4f}") + batch_num += 1 def evaluate_epoch(self, epoch): + print(f"Evaluation for Epoch {epoch + 1}") self.model.eval() all_preds = [] @@ -89,12 +100,62 @@ def evaluate_epoch(self, epoch): result = self.metric.compute(predictions=all_preds, references=all_labels, use_stemmer=True) result = {k: v * 100 for k, v in result.items()} - print(f"Rouge score: {result}") + print(f"Evaluation ROUGE scores for Epoch {epoch+1}:") + print(f"rouge1: {result['rouge1']:.4f}, rouge2: {result['rouge2']:.4f}, rougeL: {result['rougeL']:.4f}, rougeLsum: {result['rougeLsum']:.4f}") - # Save per epoch in case something goes wrong - epoch_output_dir = f"{OUTPUT_DIR}/epoch_{epoch+1}" + epoch_output_dir = f"{OUTPUT_DIR}/epoch_{epoch + 1}" self.model.save_pretrained(epoch_output_dir) self.tokenizer.save_pretrained(epoch_output_dir) + print(f"Epoch {epoch + 1} Model is saved to: {OUTPUT_DIR}/epoch_{epoch + 1}") def get_train_loss(self) -> list: - return self._train_loss \ No newline at end of file + return self._train_loss + + +""" +Actual training script +""" +device = torch.device("cuda" if torch.cuda.is_available() else "cpu") +print(f"Using device: {device}\n") + +builder = FlanModel() + +model, tokenizer = builder.build() +model.to(device) + +# Preprocess data into splits: + +dataframe = SplitData(file_path=TRAIN_FILE, sample_size=1000) +train_split, validation_split = dataframe.get_splits() + +# Create Datasets and DataLoaders +train_dataset = FlanDataset(dataframe=train_split, tokenizer=tokenizer) +validation_dataset = FlanDataset(dataframe=validation_split, tokenizer=tokenizer) + +data_collator = DataCollatorForSeq2Seq(tokenizer=tokenizer, model=model) + +train_dataloader = DataLoader( + train_dataset, shuffle=True, collate_fn=data_collator, batch_size=TRAIN_BATCH_SIZE +) + +eval_dataloader = DataLoader( + validation_dataset, shuffle=True, collate_fn=data_collator, batch_size=VALID_BATCH_SIZE +) + +optimizer, scheduler = builder.setup_optimiser(model=model, train_dataloader=train_dataloader) +trainer = FlanTrainer(model=model, + tokenizer=tokenizer, + train_dataloader=train_dataloader, + eval_dataloader=eval_dataloader, + optimizer=optimizer, + lr_scheduler=scheduler, + device=device) + +trainer.train() + +import matplotlib.pyplot as plt +plt.plot(trainer.get_train_loss(), label="Train loss") +plt.xlabel("batch") +plt.ylabel("loss") +plt.legend() +plt.show() From c6ea43759e97638e1ffd9c680c28d25e9c4f0e48 Mon Sep 17 00:00:00 2001 From: piradiusquared Date: Thu, 30 Oct 2025 19:20:53 +1000 Subject: [PATCH 27/49] Added data augmentation for prefixes when preprocessing. --- recognition/FLAN_s4885380/dataset.py | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/recognition/FLAN_s4885380/dataset.py b/recognition/FLAN_s4885380/dataset.py index 1e01d6bc6..cd08e86f2 100644 --- a/recognition/FLAN_s4885380/dataset.py +++ b/recognition/FLAN_s4885380/dataset.py @@ -1,4 +1,4 @@ -from typing import Any +import random import pandas as pd import numpy as np @@ -9,9 +9,9 @@ class SplitData: def __init__(self, file_path: str, sample_size: int | None = None) -> None: self.dataframe = pd.read_parquet(file_path) if sample_size != None: - self.dataframe = self.dataframe[0:sample_size] # Remove when actually training - else: - self.dataframe = self.dataframe[100:300] + self.dataframe = self.dataframe[0:sample_size] + # else: + # self.dataframe = self.dataframe[100:300] # Testing split def get_splits(self) -> tuple[pd.DataFrame, pd.DataFrame]: split_index = np.random.random(len(self.dataframe)) < 0.7 @@ -24,7 +24,13 @@ def get_splits(self) -> tuple[pd.DataFrame, pd.DataFrame]: class FlanDataset(Dataset): def __init__(self, dataframe: pd.DataFrame, tokenizer) -> None: self.tokenizer = tokenizer - self.prefix = "translate this radiology report into a summary for a layperson: " + # self.prefix = MODEL_PROMPT + self._prompts = [ + "Translate this radiology report into a summary for a layperson: ", + "Summarise the following medical report in simple, easy-to-understand terms: ", + "Explain this radiology report to a patient with no medical background: ", + "Provide a layperson's summary for this report: " + ] self.dataframe = dataframe @@ -38,7 +44,9 @@ def __len__(self) -> int: def __getitem__(self, index: int) -> list: row = self.dataframe.iloc[index] - report = self.prefix + str(row[INPUT_COLUMN]) + + rand_prefix = random.choice(self._prompts) + report = rand_prefix + str(row[INPUT_COLUMN]) summary = str(row[TARGET_COLUMN]) model_inputs = self.tokenizer( @@ -55,10 +63,3 @@ def __getitem__(self, index: int) -> list: ) model_inputs["labels"] = labels["input_ids"] return model_inputs - - -# dataframe = SplitData(file_path=TRAIN_FILE) -# train, validation = dataframe.get_splits() - -# print(len(train)) -# print(len(validation)) From a49c3ae4229e8c78251624cd51d81064889b6014 Mon Sep 17 00:00:00 2001 From: piradiusquared Date: Thu, 30 Oct 2025 19:21:19 +1000 Subject: [PATCH 28/49] Update constants to best performing values (LoRA parameters, training parameters) --- recognition/FLAN_s4885380/constants.py | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/recognition/FLAN_s4885380/constants.py b/recognition/FLAN_s4885380/constants.py index 4a396a4d3..103790d14 100644 --- a/recognition/FLAN_s4885380/constants.py +++ b/recognition/FLAN_s4885380/constants.py @@ -8,18 +8,20 @@ INPUT_COLUMN = "radiology_report" TARGET_COLUMN = "layman_report" +MODEL_PROMPT = "translate this radiology report into a summary for a layperson: " + TRAIN_SPLIT = 0.7 VALIDATION_SPLIT = 0.3 EPOCHS = 3 -LEARNING_RATE = 1e-4 -TRAIN_BATCH_SIZE = 8 -VALID_BATCH_SIZE = 16 -MAX_INPUT_LENGTH = 1024 -MAX_TARGET_LENGTH = 512 - -LORA_R = 16 -LORA_ALPHA = 32 +LEARNING_RATE = 3e-4 +TRAIN_BATCH_SIZE = 64 +VALID_BATCH_SIZE = 128 +MAX_INPUT_LENGTH = 256 +MAX_TARGET_LENGTH = 128 + +LORA_R = 32 +LORA_ALPHA = 64 LORA_DROPOUT = 0.05 LORA_TARGET_MODULES = ["q", "v"] From 0e6c2b89b7b00f589494d067cdff173b6d49d1db Mon Sep 17 00:00:00 2001 From: piradiusquared Date: Thu, 30 Oct 2025 19:21:34 +1000 Subject: [PATCH 29/49] Update requirements to what is used in rangpur --- recognition/FLAN_s4885380/requirements.txt | 27 ++++++++++++++-------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/recognition/FLAN_s4885380/requirements.txt b/recognition/FLAN_s4885380/requirements.txt index 06178e563..14397f78a 100644 --- a/recognition/FLAN_s4885380/requirements.txt +++ b/recognition/FLAN_s4885380/requirements.txt @@ -1,9 +1,18 @@ -torch -transformers -datasets -peft -evaluate -rouge-score -accelerate -bitsandbytes -sentencepiece \ No newline at end of file +# Core Fine Tuning and NLP packages +accelerate==1.10.1 +bitsandbytes==0.48.1 +datasets==4.2.0 +evaluate==0.4.6 +peft==0.17.1 +safetensors==0.6.2 +tokenizers==0.22.1 +torch==2.8.0 +transformers==4.57.0 + +# Other Utilities +matplotlib==3.10.7 +nltk==3.9.2 +numpy==2.3.3 +pandas=2.3.3 +rouge-score==0.1.2 +tqdm==4.67.1 \ No newline at end of file From ad17bbe888305d22fe87849a0b9b840ad4073322 Mon Sep 17 00:00:00 2001 From: piradiusquared Date: Thu, 30 Oct 2025 19:21:50 +1000 Subject: [PATCH 30/49] Minor refactoring to code --- recognition/FLAN_s4885380/modules.py | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/recognition/FLAN_s4885380/modules.py b/recognition/FLAN_s4885380/modules.py index c160e1317..686b7d7b7 100644 --- a/recognition/FLAN_s4885380/modules.py +++ b/recognition/FLAN_s4885380/modules.py @@ -1,11 +1,5 @@ from typing import Tuple -import torch -import pandas as pd -import numpy as np -import evaluate -from tqdm.auto import tqdm -from torch.utils.data import Dataset, DataLoader from torch.optim import AdamW from transformers import ( AutoTokenizer, @@ -39,13 +33,15 @@ def build(self) -> Tuple[AutoModelForSeq2SeqLM, AutoTokenizer]: model = get_peft_model(model, lora_config) model.print_trainable_parameters() return model, tokenizer - # model.to(device) def setup_optimiser(self, model, train_dataloader) -> Tuple[AdamW, get_scheduler]: optimizer = AdamW(model.parameters(), lr=LEARNING_RATE) num_training_steps = EPOCHS * len(train_dataloader) lr_scheduler = get_scheduler( - "linear", optimizer=optimizer, num_warmup_steps=0, num_training_steps=num_training_steps + "linear", + optimizer=optimizer, + num_warmup_steps=0, + num_training_steps=num_training_steps ) return optimizer, lr_scheduler From 11c91772e013c265665a2286a907eaa7495e49b6 Mon Sep 17 00:00:00 2001 From: piradiusquared Date: Thu, 30 Oct 2025 19:22:45 +1000 Subject: [PATCH 31/49] Added additioanl Perplexity scoring in model benchmarking. This code uses the HuggingFace Dataset API for convenience (might change to custom dataset later) --- recognition/FLAN_s4885380/predict.py | 35 ++++++++++++++++++++++++---- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/recognition/FLAN_s4885380/predict.py b/recognition/FLAN_s4885380/predict.py index a8af715ae..812a92a83 100644 --- a/recognition/FLAN_s4885380/predict.py +++ b/recognition/FLAN_s4885380/predict.py @@ -7,11 +7,32 @@ BASE_MODEL = "google/flan-t5-base" FINETUNED_MODEL = "t5-base-lora-tuned/epoch_3" # Take last epoch +def perplexity_score(model: AutoModelForSeq2SeqLM, + tokenizer: AutoTokenizer, + prompt: str, + target_text: str, + device="cuda") -> dict: + inputs = tokenizer(prompt, return_tensors="pt").to(device) + labels = tokenizer(target_text, return_tensors="pt").input_ids.to(device) + + with torch.no_grad(): + outputs = model(**inputs, labels=labels) + loss = outputs.loss + + perplexity = torch.exp(loss) + return perplexity.item() + +# Get new base flan-t5 model, and load in saved trained model base_model = AutoModelForSeq2SeqLM.from_pretrained(BASE_MODEL, torch_dtype=torch.bfloat16, device_map="auto") +base_model.eval() + +new_t5 = AutoModelForSeq2SeqLM.from_pretrained(BASE_MODEL, torch_dtype=torch.bfloat16, device_map="auto") +fine_tuned_model = PeftModel.from_pretrained(new_t5, FINETUNED_MODEL) +fine_tuned_model.eval() -model = PeftModel.from_pretrained(base_model, FINETUNED_MODEL) tokenizer = AutoTokenizer.from_pretrained(BASE_MODEL) +# Use API for loading in dataset predict_dataset = load_dataset("BioLaySumm/BioLaySumm2025-LaymanRRG-opensource-track") predict_dataset = predict_dataset.shuffle(seed=889) random_predict = predict_dataset["validation"] @@ -19,23 +40,29 @@ predictions = [] references = [] -for i in range(5): # Number of comparisons +for i in range(5): # Number of evaluations radiology_report = random_predict[i]['radiology_report'] layman_report = random_predict[i]['layman_report'] prompt = f"translate this radiology report into a summary for a layperson: {radiology_report}" inputs = tokenizer(prompt, return_tensors="pt").to("cuda") - # Get fine tuned model to generate + # Get fine tuned model to generate a summary with torch.no_grad(): - outputs = model.generate(**inputs, max_new_tokens=256) # constant for 256 + outputs = fine_tuned_model.generate(**inputs, max_new_tokens=256) # constant for 256 prediction = tokenizer.decode(outputs[0], skip_special_tokens=True) + fine_tune_perplexity = perplexity_score(fine_tuned_model, tokenizer, prompt, layman_report) + base_model_perplexity = perplexity_score(base_model, tokenizer, prompt, layman_report) + print(f"\nExample {i + 1}") print(f"Official Layman Report: {layman_report}") print(f"Fine tuned Model's Layman Report: {prediction}") + print(f"\nFine Tuned Model Perplexity on Official Report: {fine_tune_perplexity:.4f}") + print(f"\nBase Model Perplexity on Official Report: {base_model_perplexity:.4f}") + predictions.append(prediction) references.append(layman_report) # Official report from dataset From b96beb3a5ab0ff8039ca53343903b43fa910f5cc Mon Sep 17 00:00:00 2001 From: piradiusquared Date: Thu, 30 Oct 2025 19:23:05 +1000 Subject: [PATCH 32/49] Loss image plots --- recognition/FLAN_s4885380/assets/loss1.png | Bin 0 -> 35373 bytes recognition/FLAN_s4885380/assets/loss2.png | Bin 0 -> 26184 bytes recognition/FLAN_s4885380/assets/loss3.png | Bin 0 -> 23563 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 recognition/FLAN_s4885380/assets/loss1.png create mode 100644 recognition/FLAN_s4885380/assets/loss2.png create mode 100644 recognition/FLAN_s4885380/assets/loss3.png diff --git a/recognition/FLAN_s4885380/assets/loss1.png b/recognition/FLAN_s4885380/assets/loss1.png new file mode 100644 index 0000000000000000000000000000000000000000..40280815a0fb5ea23cc477cb7a98ab23cb09ecc1 GIT binary patch literal 35373 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 u6(LG27Mea36kv*&4iu4W%Bb$-Q7` z*OfA}x>~H82VM-=TFU+3+21_BphUu{2J2b(2w*`3f|_rA$7LOv&`SdAxlDg!%PeI& z3?enZmi_ym=<&;G1m(%-(?|9<6#be7p(TsQZjbjrCj&bg3?lbLe&L_<#GS8jexZ;( zyd(cNFvXM+U%;fRvTr^38>NchK~ql>vIUB>|NS7WG5qnD)6u@l*ggDtva7ojr5^R# zYY09wIf~ddghYaw6ioJMtTp2ShG@xP@KPM-bD&e%VG6vz5exCl((b3Ww zeX5CH7Ut$3ynp}nTprHTe+%yD?nvd+Wc6#;{6T1TbZjh~{G|KJsEjQs3rvV77lNwf zzj=ZPrHrq5v^xb2!TC5jU*zVV6BE-dG~nUlx{g}u$!>xD792SDwWO~vE)wnk`V0~h zYEPK~+I|`OR6l$6Y-MF-se>YxM;rF*KN$*s5fKrzbac0G-AY1mBZXX_l$6&XEX8n2 zhG|jK5Qy=wL5wfTXN`|)q0KESg7ERm)vH$h^+)@QU{?B=ya%)@AS3x>Wu^Xh3#CeH zx&1fz#OC$zhYz=whGMC8b#$<9qY#1&a@Htoa&dF_j#XDnM@<0_ZL`!0-aVEbCVM-J zH1*UebZ}Z4Yt&TATA=zX-TZ#t{+tPu*Zt52aW#ZW@l@#M>O`i?*G(`{zWDax;bAs8 z&vW#ovg)&bYMMR8>U1iQx%ueEIw7WXzET;%{{(Z!n8;HQjJboatEVRurJ=4~gFP^> z@n|DNjW+}}oJ841bJ|#2%O6JEyL$EU9cK(DSl2fg&g-E`Vq)od?D9xezr$A5L}30L z0fVLN9OQa@HeN&eDvx&_gF#eaDjuh%rsnb9AueIJT6%!F4VK6D@ni)CBZv>X^8omt z+}vDP9-Et+-Ac#ue0&k4t`{y`xOM9m;LjoUQp?WE%i|2qdGn@B)d;jf4^@rM+kJ5Y zkK^Rz6q2*H zaV02p)LF3hv(9}4=+o3+St=teX}ICom!^!Mm&g}#>G1L4a8HH_e|hQ@CmaMx2=Iz9 z7%rHu1RWK2>KH{h?QP!1r-G@6tE{geXn~JeFR%WyoO^j-`2#$Jrjdud1!NFnIN?s@ArajF9KWw*!b9(iJ_!HkPGT^~1S_4Mv;TO4U*I-0 ul+@O!|G85b+)0d_F9rXv+c*_~KBlU1rq3u5Vxvaj>#C~Or6Lu}2mcqp^$XYl literal 0 HcmV?d00001 diff --git a/recognition/FLAN_s4885380/assets/loss2.png b/recognition/FLAN_s4885380/assets/loss2.png new file mode 100644 index 0000000000000000000000000000000000000000..92b6d70cc6132fc5a489a30372a8de2328f5ba9d GIT binary patch literal 26184 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 literal 0 HcmV?d00001 diff --git a/recognition/FLAN_s4885380/assets/loss3.png b/recognition/FLAN_s4885380/assets/loss3.png new file mode 100644 index 0000000000000000000000000000000000000000..0bac71a0252008ce3e3f5379a3eb3d1943a6eb32 GIT binary patch literal 23563 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 ZprN2{kHAC-u4i~O4; literal 0 HcmV?d00001 From 06e50ed1456163cf564127392a53ba368a3a7a82 Mon Sep 17 00:00:00 2001 From: piradiusquared Date: Thu, 30 Oct 2025 20:19:11 +1000 Subject: [PATCH 33/49] Replaced loss3 with updated graph (with data augmentation) --- recognition/FLAN_s4885380/assets/loss3.png | Bin 23563 -> 27666 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/recognition/FLAN_s4885380/assets/loss3.png b/recognition/FLAN_s4885380/assets/loss3.png index 0bac71a0252008ce3e3f5379a3eb3d1943a6eb32..2d5d86968a4d68ebe5095a1826eb551c62031641 100644 GIT binary patch literal 27666 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 ZprN2{kHAC-u4i~O4; From 3b9595f8cade7e9f58a33ef65100f320d37dbc06 Mon Sep 17 00:00:00 2001 From: piradiusquared Date: Thu, 30 Oct 2025 20:27:30 +1000 Subject: [PATCH 34/49] Transformer architecture. --- .../FLAN_s4885380/assets/t5_transformer.png | Bin 0 -> 89797 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 recognition/FLAN_s4885380/assets/t5_transformer.png diff --git a/recognition/FLAN_s4885380/assets/t5_transformer.png b/recognition/FLAN_s4885380/assets/t5_transformer.png new file mode 100644 index 0000000000000000000000000000000000000000..14ed0cbdc0bf3a3fb303f0a40a12f8958d3b5325 GIT binary patch literal 89797 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

a6R-80liCviYsfZa*@&N&Sm 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 G Date: Thu, 30 Oct 2025 23:15:28 +1000 Subject: [PATCH 35/49] Update constants to use t5-base instead of small. --- recognition/FLAN_s4885380/constants.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/recognition/FLAN_s4885380/constants.py b/recognition/FLAN_s4885380/constants.py index 103790d14..2d0f8c2a6 100644 --- a/recognition/FLAN_s4885380/constants.py +++ b/recognition/FLAN_s4885380/constants.py @@ -1,5 +1,5 @@ -MODEL_NAME = "google/flan-t5-small" +MODEL_NAME = "google/flan-t5-base" TRAIN_FILE = "hf://datasets/BioLaySumm/BioLaySumm2025-LaymanRRG-opensource-track/data/train-00000-of-00001.parquet" VALIDATION_FILE = "hf://datasets/BioLaySumm/BioLaySumm2025-LaymanRRG-opensource-track/data/validation-00000-of-00001.parquet" From e0126dc63d8326a8a958ea1eed4372fbcf5680b6 Mon Sep 17 00:00:00 2001 From: piradiusquared Date: Thu, 30 Oct 2025 23:16:15 +1000 Subject: [PATCH 36/49] Checkpoint for README. Implemented all sections except for benchmark examples. Minor improvements and grammatical checks required. --- recognition/FLAN_s4885380/README.md | 489 ++++++++++++++++++++++++++-- 1 file changed, 457 insertions(+), 32 deletions(-) diff --git a/recognition/FLAN_s4885380/README.md b/recognition/FLAN_s4885380/README.md index 8f34f824c..8f95601a0 100644 --- a/recognition/FLAN_s4885380/README.md +++ b/recognition/FLAN_s4885380/README.md @@ -1,34 +1,156 @@ -# Fine-Tuning a Flan-T5 Model for Layman Summarisation +# Fine-Tuning Flan-T5 for Layman Summarisation > Author: Yufan Pan > ID: 4885380 -## Flan-T5 +## Table of Contents +- [Fine-Tuning Flan-T5 for Layman Summarisation](#fine-tuning-flan-t5-for-layman-summarisation) + - [Table of Contents](#table-of-contents) + - [Introduction](#introduction) + - [Dataset](#dataset) + - [Project Goals](#project-goals) + - [File Structure](#file-structure) + - [Model Architecture](#model-architecture) + - [T5 (Original Model)](#t5-original-model) + - [Encoding](#encoding) + - [Decoding](#decoding) + - [Flan-T5](#flan-t5) + - [Data Augmentation](#data-augmentation) + - [Training and Reproducing Results](#training-and-reproducing-results) + - [Hardware Requirements](#hardware-requirements) + - [Parameters](#parameters) + - [Training Runs](#training-runs) + - [Test Run 1](#test-run-1) + - [Test Run 2](#test-run-2) + - [Results](#results) + - [Training Loss](#training-loss) + - [Model Benchmarking](#model-benchmarking) + - [Rouge](#rouge) + - [Perplexity](#perplexity) + - [Benchmark Examples and Explanation](#benchmark-examples-and-explanation) + - [Example 1](#example-1) + - [Example 2](#example-2) + - [Example 3](#example-3) + - [Example 4](#example-4) + - [Example 5](#example-5) + - [Analysis](#analysis) + - [Training/Inference Instructions](#traininginference-instructions) + - [Dependencies](#dependencies) + - [Future Improvements](#future-improvements) + - [References](#references) -### Problem +## Introduction +The Flan-T5 Model is an open-source large language model published by Google Researchers. Derived from the encoder-decoder T5 (Text-to-Text Transfer Transformer), Flan-T5 is fine tuned and optimised to comprehend a broad range of natural language processing instructions. Flan-T5 is flexible and can be further fine tuned to achieve a desired Language Processing Task. -### Architecture +## Dataset +Biomedical publications often contains the latest research in preventing and treating prominent health-related issues. These publications are of great importance for a wide range of audiences, whether they are medical professionals or members of the public. The BioLaySumm dataset focuses on summarising complex biomedical articles, with an emphasis on catering for non-expert readers. +The dataset used is BioLaySumm Subtask 2.1 - Radiology Report Translation. It is comprised of radiology and layman reports from four datasets (PadChest, BIMCV-COVID 19 GitHub, Open-i and MIMIC-CXR). These datasets make up the model training and evaluation splits. -## Dataset Loading +Fine-tuning the model will be performed on a held-out training split (~150,000 rows). The `train` split will be further split into a 70/30 configuration (70% used for training, 30% used for evaluation). +As for prediction and model benchmarking, a random sample of 5 unseen rows will be chosen from the `validation` split (~10,000 rows). -## Training Specification +## Project Goals +This project aims to fine-tune a pre-trained Flan-T5 model to accurately summarise technical radiology reports in the BioLaySumm dataset. After training, this model will be able to translate complex medical terms into simpler summaries. The accuracy of these summaries will be evaluated using the `Rouge` and `Perplexity` metrics. -## Output +## File Structure +- `constants.py` - File containing training and LoRA parameters, dataset links and other model specific settings. +- `dataset.py` - Contains the class used to load and preprocess the data. +- `modules.py` - This file builds and creates the model and optimisers +- `predict.py` - Usage of the fine-tuned model on unseen data. +- `train.py` - Training and evaluation loop of fine tuning the project. -### Rouge Score +`train.py` is adapted from PyTorch training loop tutorial found [here](https://docs.pytorch.org/tutorials/beginner/introyt/trainingyt.html) and the HuggingFace tutorial [here](https://huggingface.co/learn/llm-course/en/chapter3/4). -## Reproducing Requirements -### Implementation Details -| Parameter | Description | -| --------- | ----------- | -| Model | `T5-Base` | -| Parameter count | Base Model: ~250M, Trainable: (Find and UPDATE) | -| Fine-Tuning Strategy | LoRA (INSERT specifications) | -| Epochs | | -| Learning Rate | | -| Training Time | 10 BILLION hours (UPDATE later) | - -### Hardware Specification: +## Model Architecture +### T5 (Original Model) + +Introduced by Google in 2019, the T5 model was a significant milestone in Natural Language Processing (NLP). The T5 model revolutionised how NLP tasks could be completed. By converting all tasks (translation, summarisation, classification, etc) into a "text-to-text" framework, T5 allows for flexible and consistent problem solving approaches. +This is achieved by adding prompts (or "prefixes") to the input text. +- For translation, the input may look like `translate this English text into German: [input sentence]` +- Summarising would be `summarise the following text: [input text]`. + +As a result of uniform NLP strategies, the T5 model is able to transfer its learning across a range of different tasks. By first training on a massive dataset then fine-tuning into specific NLP areas, T5 is able to achieve improved performance and efficiency. +The specific dataset used for training was the *Colossal Clean Crawled Corpus* (C4). Using `Common Crawl`, a monthly snapshot of the entire internet was pulled and used as training data. The C4 dataset was cleaned with the following heuristics: +- Only contains lines ending in a terminal punctuation mark. +- Discarded pages with less than 3 sentences. Sentences must contain at least 5 words. +- Removed any page with any inappropriate words ([list of words](https://github.com/LDNOOBW/List-of-Dirty-Naughty-Obscene-and-Otherwise-Bad-Words)) +- Cleaned of all `javascript`, `lorem ipsum` and other non-text sentences or pages. +- Deleted all duplicates. + + +Being a transformer-based encoder-decoder, the T5 architecture follows closely to the original transformer proposal in *Attention is All you Need* ([Vaswani et al., 2017](https://proceedings.neurips.cc/paper_files/paper/2017/file/3f5ee243547dee91fbd053c1c4a845aa-Paper.pdf)). + + +

+ Figure 1: Transformer Architecture +
Figure 1: Transformer Architecture
+
+ +#### Encoding +Firstly, the input sequence is broken down into a series of tokens. In this scenario, the tokens would be the individual words of the prompt or radiology report to summarise. Afterwards, the token sequence is transformed into a vector, which contains semantic information represented by numbers. +Positional encoding adds information indicating each token's respective position in the sequence. This allows the model to maintain the order of the input. + +Transformers contains `N` layers of transformer blocks. Each layer contains two subcomponents: a multi-head self-attention mechanism followed being a simple feed-forward network. Between these components are layer normalisation operations. + +Multi-head self-attention allows the model to view different parts of the sequence at once, and mapping each to a weighted average representing the importance. These average values are compared to against the entire sequence. +The T5 transformer uses a simplified Layer Normalisation, where activations are only rescaled (bias are not applied). T5 also applies a skip connection transferring each subcomponent's input to the output. This helps mitigate the vanishing gradient problem. +Finally, each layer of the encoder and decoder contains a fully connected feed-forward network. It consists of two linear transformations with a ReLU activation in between. +Dropout is applied throughout the entire process (feed-forward network, skip connection, attention weights and input/output of the full stack) to reduce overfitting. + +#### Decoding +The decoder is similar in structure with the addition of a third subsection - a standard attention mechanism. It uses a form of causal self-attention, which restricts the model to attend to past outputs of the encoder stack. This enables the decoder to access useful information about the input sequence to generate a relevant output. +The final decoder's output is fed into a linear block and a softmax function. The linear layer performs a direct mapping from the vector space to the input domain. The output is a set of scores for each possible prediction token. Afterwards, the softmax function normalises the scores and generates a probability for each. + +### Flan-T5 +Flan (Fine-tuned LAnguage Net) -T5 is an *instruction-tuned* version of the T5 model, with the main endgoal of enhancing the model's ability to perform zero-shot or few-shot prompting. + +
+ loss1 +
Figure 2: Flan-T5 instruction fine-tuning.
+
+ +The process involved taking a pre-trained T5 model, which is fine-tuned on a massive set of various Natural Language Processing Tasks, such as "Translate this sentence to German", or "Classify this movie review as positive or negative". The goal of this tuning method is to teach the model how to generalise seen and *unseen* tasks. The model not only becomes proficient in solving the given NLP tasks, but also becomes good at "following instructions" in general. + +Instruction tuning significantly improves Flan-T5's usability and ability to perform zero-shot reasoning. On the other hand, the T5 model would require multiple task-specific fine-tuning operations to achieve the same result. + +Overall, the Flan-T5 model enhances T5's existing text-to-text architecture by layering a broad understanding of following human instructions, making it more versatile and capable without additional tuning. + +## Data Augmentation +When fine tuning in the training loop, rather than only having 1 prompt (prefix), a random prefix is chosen from a list of 4 similar prompts. This gives the model a broader understanding of different zero-shot prompts, increasing its flexibility in a real-world scenario. +No other augmentation method is used due to the sensitivity of medical terminology in the radiology reports. For example, words "lesion" and "spot" may change the intended meaning of the report, resulting in unwanted behaviour. + +Below is taken from [`dataset.py`](./dataset.py) +``` Python +class FlanDataset(Dataset): + def __init__(self, dataframe: pd.DataFrame, tokenizer) -> None: + self.tokenizer = tokenizer + # self.prefix = MODEL_PROMPT + self._prompts = [ + "Translate this radiology report into a summary for a layperson: ", + "Summarise the following medical report in simple, easy-to-understand terms: ", + "Explain this radiology report to a patient with no medical background: ", + "Provide a layperson's summary for this report: " + ] + + ... + + def __getitem__(self, index: int) -> list: + row = self.dataframe.iloc[index] + + rand_prefix = random.choice(self._prompts) # Random Prefix selection + report = rand_prefix + str(row[INPUT_COLUMN]) + summary = str(row[TARGET_COLUMN]) + + ... +``` + +## Training and Reproducing Results +### Hardware Requirements | Hardware | Description | | -------- | ----------- | | CPU | 8x vCPU cores (AMD Zen 2) | @@ -36,21 +158,324 @@ | VRAM | 40 GB | | RAM | 64 GB | +### Parameters +| Parameter | Description | +| --------- | ----------- | +| Model | `google/flan-t5-base` | +| Parameter count | Base Model: ~250M, Trainable: ~3.5M (1.4093%) | +| Fine-Tuning Strategy | LoRA (see below) | +| Epochs | 3 | +| Learning Rate | 3e-4 | +| Training Time (epoch) | ~30 minutes | +| Training Time (total) | ~1 hour 30 minutes | + + +| LoRA Setting | Value | +| ----------- | -------| +| `r` | 64 | +| `lora_alpha` | 128 | +| `lora_dropout` | 0.05 | +| `target_modules` | `["q", "v"]` | + + +## Training Runs + +### Test Run 1 +For the first initial test run, there were several parameter issues when fine-tuning. The learning rate was standard (`1e-4`), accompanied with a small batch size (`8`) and low LoRA rank (`8`). This configuration resulted in a tedious 10+ hours of training for 3 epochs, and lower `Rouge` scores by the end of training. +` +rouge1: 61.4408 +rouge2: 38.9073 +rougeL: 55.1041 +rougeLsum: 55.1024 +` + +
+ loss1 +
Figure 3: First test run loss plot.
+
+ +> Note: `x` axis 'epoch' is a typo, it should be 'batch' + +The combination of a small batch size resulted in unstable and noisy gradient updates, which is indicated by plotting the loss. With only 8 examples per step, the gradient varies greatly. This stopped the model from converging to an optimal solution, as shown above. As for the `rouge` scores, the low `LoRA` rank prevented the model from extracting features from more complex summarisation tasks. + +### Test Run 2 +Based on the first run to test training functionality, the second run aimed to stabilise the training process. The batch size was increased to `64`, and the learning rate is reduced to `5e-5` to identify any improvements. Furthermore, the model's `LoRA` rank was increased to 16. +Furthermore, the `input` and `output` tokens had to be decreased. The new values are 128 and 256 respectively. The original 512 and 1024 tokens caused an Out of Memory error even on the NVDIA `a100` hardware. +While the `rouge` scores were better compared to [Test Run 1](#test-run-1), the improvement was not great. +` +rouge1: 65.2291 +rouge2: 43.3993 +rougeL: 59.1551 +rougeLsum: 59.1569 +` + +
+ loss2 +
Figure 4: Second test run loss plot.
+
+ +Increasing the batch size successfully stabilised the loss during training. However, the learning rate decrease was unnecessary, as the model adjusted parameters too cautiously. As a result, the model could not effectively traverse the loss function, which inhibited convergence. Although the `LoRA` rank was doubled to 16, the combination of the previous parameters rendered this change uneffective. + +## Results +From [Test Run 2](#test-run-2), the key insight was to increase the learning rate. The batch size was kept the same as the loss was much more stable, and the `LoRA` rank was upscaled to `32`, allowing the model to capitalise on the learning rate (as well as to make the most of the `a100` hardware). +After tuning the training parameters, the final `Rouge` output of the model is as follows: +| Rouge`x` | Value | +| -------- | ----- | +| Rouge`1` | 71.1907 | +| Rouge`2` | 51.8309 | +| Rouge`L` | 65.8092 | +| Rouge`Lsum` | 65.8156 | + +## Training Loss + +
+ loss2 +
Figure 5: Resulting run loss plot.
+
+ +This loss plot highlights the synergy between a high learning rate and batch size. The graph clearly indicates a steeper negative gradient for the first 500 batches, as well as converging slightly earlier due to the larger learning rate. As a result, the loss has fully stabilised before epoch 3 started (~3200 on the `x` axis). +The increased `LoRA` rank enabled the model to learn more complex patterns in the data. + +## Model Benchmarking +The fine-tuned model was benchmarked using the `validation` section of the dataset. As all training occurred in the `train` split, the model has never seen the radiology reports from this section. + +### Rouge +`Rouge` (Recall-Oriented Understudy for Gisting Evaluation) is a set of metrics used to evaluate summarisation in Natural Language Processing. It is used against a reference of the "expected" summary. +All types of `rouge` scores are calculated based on three metrics: +- Recall: How many words from the reference summary are present in the model's prediction? +- Precision: How many words in the model's prediction were relevant? +- F1-Score: Harmonic mean of both Recall and Precision. + +`rouge1`: this metric counts how many individual words appear in both the generated and reference summaries. No order is required. `rouge1` is mainly used to identify if the model has captured the key points in the radiology report. + +`rouge2`: this metric is similar to `rouge1`, except it measures pairs of words. Order within the pair must be identical. `rouge2` is used to check for fluency and grammatical correctness. More matching pairs likely correlate to coherent output. + +`rougeL` measures the longest matching sequence of words that is shared between the generated and reference summaries (whole text). These words must be in the same order, but do not need to be consecutive. `rougeL` gives the model leniency when it comes to rephrasing, and can identify sentence-level similarity. `rougeL` is often the most critical metric. + +`rougeLsum` is structurally similar to `rougeL`. `rougeLsum` computes the longest matching sequence for each individual sentence (if applicable) rather than the entire text. This metric is normally identical to `rougeL` except when the input contains several sentences. + +### Perplexity +`Perplexity` is not required for analysing the model's output, but it is an interesting benchmarking tool. `Perplexity` seeks to quantify the "uncertainty" a model experiences when predicting the next token in a sequence [(Morgan, 2024)](https://www.comet.com/site/blog/perplexity-for-llm-evaluation/). Higher values means the model is uncertain about which word to pick next, indicating low training coverage of the specific task. + +This metric is particularly relevant in the context of the `BioLaySumm` dataset. Due to the sensitivity of medical reports, an overconfident wrong answer could result in serious consequences. This metric will provide further insight into the shortcomings of the current fine-tuning method. + +### Benchmark Examples and Explanation + +#### Example 1 +`validation` split - row 10 + +`radiology_report`: "Within normal limits" + +`layman_report`: "Everything looks normal" + +`model_prediction`: "Everything looks normal" + +| `rouge` | Score | +| ------- | ----- | +| `rouge1` | 100.0000 | +| `rouge2` | 100.0000 | +| `rougeL` | 100.0000 | +| `rougeLsum` | 100.0000 | + +Given a very simple radiology report, the model is able to accurately summarise it into simpler terms. The model does not attempt to overcomplicate the summary, and stops when required. + +| `Perplexity` | Score | +| ------- | ----- | +| `fine-tuned-model` | 1.0156 | +| `base-model` | 43.2500 | + +#### Example 2 -### Library Installation: -The following libraries are required to reproduce the fine-tuning process: +`validation` split: row 9905 + +`radiology_report`: "The technique is compared with a previous X-ray from October 8, 2020. A questionable peribronchovascular opacity is noted in the left mid lung field. Slight blunting of both costophrenic angles, likely chronic in nature. Elongation of the descending thoracic aorta. Signs of diffuse osteopenia." + +`layman_report`: "I compared the imaging technique with a previous X-ray from October 8, 2020. There's a possible cloudiness around the airways in the middle of the left lung. Both sides of the chest where the ribs meet the diaphragm are slightly rounded, probably from a long-term condition. The large blood vessel in the chest is elongated. There are signs of reduced bone density throughout the body." + +`model_prediction`: "The X-ray was compared to a previous one from October 8, 2020. There might be a possible cloudiness around the airways in the middle of the left lung. The angles where the lungs meet the diaphragm are slightly less sharp, probably because of a long-term issue. The main blood vessel coming out of the chest is elongated. There are signs of widespread osteopenia." + +| `rouge` | Score | +| ------- | ----- | +| `rouge1` | 72.1805 | +| `rouge2` | 51.9084 | +| `rougeL` | 66.1654 | +| `rougeLsum` | 66.1654 | + +This example contained more colloquial phrases compared to other radiology reports. + +| `Perplexity` | Score | +| ------- | ----- | +| `fine-tuned-model` | 1.9453 | +| `base-model` | 9.1875 | + + +#### Example 3 +`validation` split - row 6773 + +`radiology_report`: "Tracheostomy cannula in place. Central venous catheter inserted through the right subclavian vein into the superior vena cava. Bilateral interstitial and alveolar infiltrates, predominantly at the hilar and bibasal levels, associated with pleural effusion." + +`layman_report`: "A breathing tube is in place. A central vein catheter is inserted through the right shoulder vein into the large vein near the heart. There are signs of fluid and inflammation in both lungs, mainly at the lower parts and near the windpipe, with fluid around the lungs. +" + +`model_prediction`: "A tube is in place for breathing. A central vein catheter is inserted through the right collarbone vein into the large vein near the heart. There are signs of fluid in both lungs, mainly at the top and lower parts, along with fluid around the lungs." + +| `rouge` | Score | +| ------- | ----- | +| `rouge1` | 89.3617 | +| `rouge2` | 71.7391 | +| `rougeL` | 85.1064 | +| `rougeLsum` | 85.1064 | + +As for this case, the radiology report is short, but is almost fully comprised of technical terms. There are little casual phrasing or "everyday" terms. Despite this, the model is able to predict with a high 85 `rougeL` score. This indicates the model has correctly learnt how to summarise medical jargon into layperson terms, whilst maintaining fluency and coherence. On the other hand, the `rouge1/2` scores are also very high, showing that key summarisation information has stayed intact. + +However, a key error with the model's prediction is how it interpreted "hilar and bibasal levels". The official meaning of bibasal is lower parts, and hilar means near the windpipes. As a result, this shows the minor issues with `rouge`, and highlights the importance of manual review. + +| `Perplexity` | Score | +| ------- | ----- | +| `fine-tuned-model` | 1.7188 | +| `base-model` | 15.1875 | + +#### Example 4 + +`validation` split - row 1640 + +`radiology_report`: "A study with oral and intravenous contrast was performed in arterial and venous phases. In the chest, there is a significant increase in the consolidation in the right posterior inferior segment, which has grown from 20x15mm to 42x25mm. It shows a pseudotriangular morphology with a central cystic area and isolated punctate calcifications, delimited by vessels and dense linear tracts in contact with the pleura. Peripheral to the lesion, pseudonodular infiltrates with diffuse contours are observed, larger in size with dilated bronchi within. No mediastinal or hilar adenopathies are noted. Known bilateral elastofibromas dorsi. Hiatal hernia. In the abdomen and pelvis, no new hepatic nodules suspicious for metastasis are observed. Subcentimetric hypodense nodules similar to the reference study persist. The biliary tract, gallbladder, pancreas, and kidneys show no alterations. The uterus and bladder are preserved. The colon and small bowel loops are of normal caliber and distribution. Bone evaluation does not reveal suspicious focal lesions. Conclusion: The mass in the LID has significantly increased. Suspicion of a neoplastic process, either metastatic or primary. Consider performing bronchoscopy and/or PET-CT." + +`layman_report`: "A study was done using both oral and intravenous contrast during different phases. In the chest area, there is a noticeable growth in a particular area of the lung on the right side, which has increased in size from 20x15mm to 42x25mm. This area has a triangular shape with a central cystic part and some small calcified spots, surrounded by blood vessels and dense lines that are in contact with the lung lining. Around this area, there are pseudonodular infiltrates with unclear edges, larger in size with widened air passages within. There are no enlarged lymph nodes in the mediastinum or hilum. Known bilateral elastofibromas dorsi are present. A hiatal hernia is also noted. In the abdomen and pelvis, no new liver nodules that could indicate metastasis are observed. Small hypodense nodules similar to the previous study persist. The bile ducts, gallbladder, pancreas, and kidneys show no changes. The uterus and bladder are normal. The colon and small intestine loops are of normal size and distribution. Bone evaluation does not reveal any suspicious focal lesions. Conclusion: The mass in the lower lobe of the right lung has significantly increased. There is suspicion of a neoplastic process, either metastatic or primary. It is recommended to consider performing bronchoscopy and/or PET-CT." + +`model_prediction`: "A study was done with contrast dye in the blood vessels and veins. In the chest, there's a big increase in the lung tissue in the right back part, which has grown from 20x15mm to 42x25mm. It has a pseudotriangular shape with a central cystic area and isolated punctate calcifications, delimited by vessels and dense linear tracts in contact with the pleura. Peripheral to the lesion, pseudonodular infiltrates with diffuse contours are observed, larger in size with dilated bronchi within. No mediastinal or hilar adenopathies are noted. Known bilateral elastofibromas dorsi. Hiatal hernia. In the abdomen and pelvis, no new hepatic nodules suspicious for metastasis are observed. Subcentimetric hypodense nodules similar to the reference study persist. The biliary tract, gallbladder, pancreas, and kidneys" + +| `rouge` | Score | +| ------- | ----- | +| `rouge1` | 54.9254 | +| `rouge2` | 30.6306 | +| `rougeL` | 45.3731 | +| `rougeLsum` | 45.3731 | + +In the Test Runs, the model's input and output tokens were severely decreased. This design decision's consequence is apparent for longer reports as shown here. It is evident that the long input was not fully summarised because of the abrupt ending and low `rouge` scores. Another aspect which is key to note is the very low `rouge2` score, which indicates less fluent summarisation. Overall, extremely long reports will be a critical point for future improvement. + +| `Perplexity` | Score | +| ------- | ----- | +| `fine-tuned-model` | 2.7812 | +| `base-model` | 4.7812 | + + +#### Example 5 + +`validation` split - row 206 + +`radiology_report`: "The cardiomediastinal silhouette is normal size and configuration. Pulmonary vasculature within normal limits. There is right middle lobe airspace disease, may reflect atelectasis or pneumonia. No pleural effusion. No pneumothorax. Elevated right hemidiaphragm. Right middle lobe airspace disease may reflect atelectasis or pneumonia. ." + +`layman_report`: "The heart and the area around it appear normal in size and shape. The blood vessels in the lungs are also normal. There is a problem with the lung tissue in the middle of the right lung, which could be due to the lung collapsing or an infection like pneumonia. There is no fluid around the lungs and no air outside the lungs. The right side of the diaphragm, the muscle that separates the chest from the abdomen, is higher than normal. The issue in the middle of the right lung could be due to the lung collapsing or pneumonia." + +`model_prediction`: "The heart and middle chest area look normal in size and shape. The blood vessels in the lungs are within the normal range. There is a condition called right middle lobe airspace disease, which could be due to lung collapse or pneumonia. There is no fluid around the lungs. There is no air outside the lungs. The right side of the diaphragm, which is the muscle that separates the chest from the abdomen, is raised. The right middle lobe airspace disease may be due to lung collapse or pneumonia." + +| `rouge` | Score | +| ------- | ----- | +| `rouge1` | 74.0741 | +| `rouge2` | 56.6845 | +| `rougeL` | 70.8995 | +| `rougeLsum` | 70.8995 | + +For a medium length and complexity + +| `Perplexity` | Score | +| ------- | ----- | +| `fine-tuned-model` | 1.6562 | +| `base-model` | 8.9375 | + + +### Analysis + +Overall, the `rouge` scores provide strong quantitative evidence of the model's ability to summarise expert radiology reports into layperson terms. The high `rouge1` scores indicate excellent recall of key content and medical terms. Moreover, an average `rouge2` of above 50 suggests the model can summarise and arrange words into fluent and grammatically correct phrases. This is critical as to allow a wide range of audiences to read and comprehend the summary. The primary metric `rougeL` often scores above 70 for the average length report, confirming the model's ability to replicate sentence-level structure. +When testing on individual samples, drops in `rouge` scores provided a clear signal for truncated or incorrect outputs. These samples are key for future improvement identification. + +Throughout all examples, the `perplexity` score is consistently between 2 - 4 times lower for the fine-tuned model. This strongly indicates the model is no longer suprised to see medical terminology, and is confident in knowing how to summarise radiology jargon. Additionally, it has adapted to the style of the `BioLaySumm` dataset. +However, in [Example 4](#example-4), the gap between `perplexity` scores is extremely low. Due to the length of the input, the fine-tuned model has difficulty consistently predicting specifics (anatomical locations, sizes, shapes). Contrastingly, the base model had the best performance in all runs. Long, sophisticated medical documents as likely found in its huge pre-training dataset, improving its ability to predict outputs. + + +### Training/Inference Instructions +**Basic Setup** +``` +~$ git clone https://github.com/piradiusquared/PatternAnalysis-2025.git ./flan_setup && cd ./flan_setup +flan_setup$ git checkout 'topic-recognition' +flan_setup$ cd recognition/FLAN_s4885380 + +``` + +**Rangpur Steps** +``` +~$ source miniconda/bin/activate +(base) ~$ conda activate [env_name] +(env_name) ~$ cd ./flan_setup/recognition/FLAN_s4885380 +(env_name) FLAN_s4885380$ pip install -r requirements.txt +``` + +**Running Training** + + +**Running Benchmarking** + +### Dependencies +The following libraries are required to reproduce the fine-tuning process (as of `31/10/2025`): ``` Bash -torch -transformers -datasets -evaluate -peft -accelerate -bitsandbytes -sentencepiece -rouge-score +# Core Fine Tuning and NLP packages +accelerate==1.10.1 +bitsandbytes==0.48.1 +datasets==4.2.0 +evaluate==0.4.6 +peft==0.17.1 +safetensors==0.6.2 +tokenizers==0.22.1 +torch==2.8.0 +transformers==4.57.0 + +# Other Utilities +matplotlib==3.10.7 +nltk==3.9.2 +numpy==2.3.3 +pandas=2.3.3 +rouge-score==0.1.2 +tqdm==4.67.1 ``` Or, you may install through the provided ```requirements.txt``` file by running: ``` Bash pip install -r requirements.txt -``` \ No newline at end of file +``` + +## Future Improvements +- Continue testing with the parameters to find ideal settings +- Increase input and output tokens (if hardware is suitable) +- Research into Data Augmentation for further model usability + +## References + +Biolaysumm. +Available at: https://biolaysumm.org/ (Accessed: 24 October 2025). + +(2022) Training with PyTorch - PyTorch Tutorials 2.9.0+cu128 documentation. +Available at: https://docs.pytorch.org/tutorials/beginner/introyt/trainingyt.html (Accessed: 24 October 2025). + +A full training loop - Hugging Face. +Available at: https://huggingface.co/learn/llm-course/en/chapter3/4 (Accessed: 24 October 2025). + +What are transformers? - transformers in Artificial Intelligence explained - AWS. +Available at: https://aws.amazon.com/what-is/transformers-in-artificial-intelligence/ (Accessed: 29 October 2025). + +Vaswani, A. et al. (2023) Attention is all you need, arXiv.org. +Available at: https://arxiv.org/abs/1706.03762 (Accessed: 29 October 2025). + +Raffel, C. et al. (2023) Exploring the limits of transfer learning with a unified text-to-text transformer, arXiv.org. +Available at: https://arxiv.org/abs/1910.10683 (Accessed: 29 October 2025). + +Chung, H.W. et al. (2022b) Scaling instruction-finetuned language models, arXiv.org. +Available at: https://arxiv.org/abs/2210.11416 (Accessed: 29 October 2025). \ No newline at end of file From 81445f674830ea5f901e0691190f594ea9f09f60 Mon Sep 17 00:00:00 2001 From: piradiusquared Date: Fri, 31 Oct 2025 00:10:26 +1000 Subject: [PATCH 37/49] Added rangpur cluster run files. --- recognition/FLAN_s4885380/runners/benchmark | 11 +++++++++++ recognition/FLAN_s4885380/runners/trainer | 11 +++++++++++ 2 files changed, 22 insertions(+) create mode 100644 recognition/FLAN_s4885380/runners/benchmark create mode 100644 recognition/FLAN_s4885380/runners/trainer diff --git a/recognition/FLAN_s4885380/runners/benchmark b/recognition/FLAN_s4885380/runners/benchmark new file mode 100644 index 000000000..605e2b116 --- /dev/null +++ b/recognition/FLAN_s4885380/runners/benchmark @@ -0,0 +1,11 @@ +#!/bin/bash +#SBATCH --nodes=1 +#SBATCH --cpus-per-task=4 +#SBATCH --gres=gpu:1 +#SBATCH --partition=a100 +#SBATCH --time=5:00:00 +#SBATCH --job-name=flanbenchmark +#SBATCH -o benchmark.out + +conda activate flan +python predict.py \ No newline at end of file diff --git a/recognition/FLAN_s4885380/runners/trainer b/recognition/FLAN_s4885380/runners/trainer new file mode 100644 index 000000000..f42426876 --- /dev/null +++ b/recognition/FLAN_s4885380/runners/trainer @@ -0,0 +1,11 @@ +#!/bin/bash +#SBATCH --nodes=1 +#SBATCH --cpus-per-task=4 +#SBATCH --gres=gpu:1 +#SBATCH --partition=a100 +#SBATCH --time=5:00:00 +#SBATCH --job-name=flant5finetune +#SBATCH -o flantune.out + +conda activate flan +python train.py \ No newline at end of file From c29259bc07083ac742eecd2367e3239ad5c59230 Mon Sep 17 00:00:00 2001 From: piradiusquared Date: Fri, 31 Oct 2025 00:13:54 +1000 Subject: [PATCH 38/49] Minor change to sample size of training data. Removed call to subset for real training. --- recognition/FLAN_s4885380/train.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/recognition/FLAN_s4885380/train.py b/recognition/FLAN_s4885380/train.py index 8ffe72a8a..91635b43e 100644 --- a/recognition/FLAN_s4885380/train.py +++ b/recognition/FLAN_s4885380/train.py @@ -38,6 +38,7 @@ def train(self): for epoch in range(EPOCHS): epoch_start = time.time() + # Train and eval per epoch self.train_epoch(epoch) self.evaluate_epoch(epoch) @@ -61,12 +62,14 @@ def train_epoch(self, epoch: int) -> None: outputs = self.model(**batch) loss = outputs.loss + # Scale and optimise self.scaler.scale(loss).backward() self.scaler.step(optimizer=self.optimizer) self.scaler.update() self.lr_scheduler.step() self.optimizer.zero_grad() + # Add loss for plotting self._train_loss.append(loss.item()) train_progress.set_postfix(loss=loss.item()) @@ -92,12 +95,15 @@ def evaluate_epoch(self, epoch): ) decoded_preds = self.tokenizer.batch_decode(generated_tokens, skip_special_tokens=True) + # -100 for padding reasons labels = np.where(batch["labels"].cpu() != -100, batch["labels"].cpu(), self.tokenizer.pad_token_id) decoded_labels = self.tokenizer.batch_decode(labels, skip_special_tokens=True) + # Add in decoded all_preds.extend(decoded_preds) all_labels.extend(decoded_labels) + # Compute rouge scores result = self.metric.compute(predictions=all_preds, references=all_labels, use_stemmer=True) result = {k: v * 100 for k, v in result.items()} print(f"Evaluation ROUGE scores for Epoch {epoch+1}:") @@ -125,7 +131,7 @@ def get_train_loss(self) -> list: # Preprocess data into splits: -dataframe = SplitData(file_path=TRAIN_FILE, sample_size=1000) +dataframe = SplitData(file_path=TRAIN_FILE) train_split, validation_split = dataframe.get_splits() # Create Datasets and DataLoaders @@ -134,6 +140,7 @@ def get_train_loss(self) -> list: data_collator = DataCollatorForSeq2Seq(tokenizer=tokenizer, model=model) +# Load in from Pandas train_dataloader = DataLoader( train_dataset, shuffle=True, collate_fn=data_collator, batch_size=TRAIN_BATCH_SIZE ) @@ -158,4 +165,4 @@ def get_train_loss(self) -> list: plt.xlabel("batch") plt.ylabel("loss") plt.legend() -plt.show() +plt.savefig(LOSS_OUT) # Save plot \ No newline at end of file From d9c7f4b90f67bf2e971ad0e695ec5933c0f5d03a Mon Sep 17 00:00:00 2001 From: piradiusquared Date: Fri, 31 Oct 2025 00:14:38 +1000 Subject: [PATCH 39/49] Removed some hard coded constants with those in constants.py. Set default benchmark to 5 samples from validation split. --- recognition/FLAN_s4885380/predict.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/recognition/FLAN_s4885380/predict.py b/recognition/FLAN_s4885380/predict.py index 812a92a83..715ea650e 100644 --- a/recognition/FLAN_s4885380/predict.py +++ b/recognition/FLAN_s4885380/predict.py @@ -4,8 +4,9 @@ from peft import PeftModel from datasets import load_dataset -BASE_MODEL = "google/flan-t5-base" -FINETUNED_MODEL = "t5-base-lora-tuned/epoch_3" # Take last epoch +from constants import * + +FINETUNED_MODEL = "t5-base-lora-tuned/epoch_3" # Take last epoch for best performance def perplexity_score(model: AutoModelForSeq2SeqLM, tokenizer: AutoTokenizer, @@ -23,18 +24,18 @@ def perplexity_score(model: AutoModelForSeq2SeqLM, return perplexity.item() # Get new base flan-t5 model, and load in saved trained model -base_model = AutoModelForSeq2SeqLM.from_pretrained(BASE_MODEL, torch_dtype=torch.bfloat16, device_map="auto") +base_model = AutoModelForSeq2SeqLM.from_pretrained(MODEL_NAME, torch_dtype=torch.bfloat16, device_map="auto") base_model.eval() -new_t5 = AutoModelForSeq2SeqLM.from_pretrained(BASE_MODEL, torch_dtype=torch.bfloat16, device_map="auto") +new_t5 = AutoModelForSeq2SeqLM.from_pretrained(MODEL_NAME, torch_dtype=torch.bfloat16, device_map="auto") fine_tuned_model = PeftModel.from_pretrained(new_t5, FINETUNED_MODEL) fine_tuned_model.eval() -tokenizer = AutoTokenizer.from_pretrained(BASE_MODEL) +tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME) # Use API for loading in dataset predict_dataset = load_dataset("BioLaySumm/BioLaySumm2025-LaymanRRG-opensource-track") -predict_dataset = predict_dataset.shuffle(seed=889) +predict_dataset = predict_dataset.shuffle(seed=3710) random_predict = predict_dataset["validation"] predictions = [] @@ -49,10 +50,11 @@ def perplexity_score(model: AutoModelForSeq2SeqLM, # Get fine tuned model to generate a summary with torch.no_grad(): - outputs = fine_tuned_model.generate(**inputs, max_new_tokens=256) # constant for 256 + outputs = fine_tuned_model.generate(**inputs, max_new_tokens=MAX_INPUT_LENGTH) prediction = tokenizer.decode(outputs[0], skip_special_tokens=True) + # Compare perplexity fine_tune_perplexity = perplexity_score(fine_tuned_model, tokenizer, prompt, layman_report) base_model_perplexity = perplexity_score(base_model, tokenizer, prompt, layman_report) From 5bc31f844a5f1a97915781cbeb1813e810b44d43 Mon Sep 17 00:00:00 2001 From: piradiusquared Date: Fri, 31 Oct 2025 00:18:12 +1000 Subject: [PATCH 40/49] Updates to README. Added section for running training/benchmark locally or via rangpur. --- recognition/FLAN_s4885380/README.md | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/recognition/FLAN_s4885380/README.md b/recognition/FLAN_s4885380/README.md index 8f95601a0..cace2189d 100644 --- a/recognition/FLAN_s4885380/README.md +++ b/recognition/FLAN_s4885380/README.md @@ -53,6 +53,7 @@ As for prediction and model benchmarking, a random sample of 5 unseen rows will This project aims to fine-tune a pre-trained Flan-T5 model to accurately summarise technical radiology reports in the BioLaySumm dataset. After training, this model will be able to translate complex medical terms into simpler summaries. The accuracy of these summaries will be evaluated using the `Rouge` and `Perplexity` metrics. ## File Structure +- `runners/` - Directory containing files to help run training and benchmarking code on `rangpur`. Contains `trainer` and `benchmark`. - `constants.py` - File containing training and LoRA parameters, dataset links and other model specific settings. - `dataset.py` - Contains the class used to load and preprocess the data. - `modules.py` - This file builds and creates the model and optimisers @@ -310,7 +311,8 @@ Given a very simple radiology report, the model is able to accurately summarise | `rougeL` | 66.1654 | | `rougeLsum` | 66.1654 | -This example contained more colloquial phrases compared to other radiology reports. +This example contained more colloquial phrases compared to other radiology reports. By manual inspection, some phrases were not accurately summarised. For example, the model failed on the term "osteopenia". Instead of describing it as "reduced bone density", it paraphrased "diffused osteopenia" into "widespread osteopenia". +This suggests that the model has difficulty choosing the more important term to simplify. In this scenario, the word "osteopenia" may be less common in the training data, leading to this error. | `Perplexity` | Score | | ------- | ----- | @@ -409,7 +411,6 @@ However, in [Example 4](#example-4), the gap between `perplexity` scores is extr ~$ git clone https://github.com/piradiusquared/PatternAnalysis-2025.git ./flan_setup && cd ./flan_setup flan_setup$ git checkout 'topic-recognition' flan_setup$ cd recognition/FLAN_s4885380 - ``` **Rangpur Steps** @@ -421,11 +422,29 @@ flan_setup$ cd recognition/FLAN_s4885380 ``` **Running Training** - +> :memo: **Note:** These steps assume you have activated your environment, and the default directory is ~/flan_setup/recognition/FLAN_s4885380. +``` +FLAN_s4885380$ cd runners +FLAN_s4885380$ sbatch trainer +``` **Running Benchmarking** +> :memo: **Note:** Benchmarking 1 sample is very fast, so the a100-test partition can handle it perfectly fine. If benchmarking more, then please use the benchmark file +``` +FLAN_s4885380$ srun -p a100-test --gres=shard:1 python train.py +--- OR --- +FLAN_s4885380$ cd runners +FLAN_s4885380$ sbatch benchmark +``` + +**Running Locally** +``` +FLAN_s4885380$ python [train/predict].py +``` ### Dependencies +> :warning: **Warning:** CUDA version for this project is **11.8** + The following libraries are required to reproduce the fine-tuning process (as of `31/10/2025`): ``` Bash # Core Fine Tuning and NLP packages @@ -452,6 +471,8 @@ Or, you may install through the provided ```requirements.txt``` file by running: pip install -r requirements.txt ``` +*Latest Python version was used + ## Future Improvements - Continue testing with the parameters to find ideal settings - Increase input and output tokens (if hardware is suitable) From f9bd91f7148752da1cdf62068d410b2e3d1ea0aa Mon Sep 17 00:00:00 2001 From: piradiusquared Date: Fri, 31 Oct 2025 00:33:28 +1000 Subject: [PATCH 41/49] Update to constants for saving the loss plot. --- recognition/FLAN_s4885380/constants.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/recognition/FLAN_s4885380/constants.py b/recognition/FLAN_s4885380/constants.py index 2d0f8c2a6..c2cdb1439 100644 --- a/recognition/FLAN_s4885380/constants.py +++ b/recognition/FLAN_s4885380/constants.py @@ -25,4 +25,5 @@ LORA_DROPOUT = 0.05 LORA_TARGET_MODULES = ["q", "v"] -OUTPUT_DIR = "t5-base-lora-tuned" \ No newline at end of file +OUTPUT_DIR = "t5-base-lora-tuned" +LOSS_OUT = "loss.png" \ No newline at end of file From 0d32c89a76424e46c81d5f71fa7655a7a8dd9a8c Mon Sep 17 00:00:00 2001 From: Kevin Pan Date: Fri, 31 Oct 2025 13:10:24 +1000 Subject: [PATCH 42/49] Minor typo fixes. Added some explanations to improvements. --- recognition/FLAN_s4885380/README.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/recognition/FLAN_s4885380/README.md b/recognition/FLAN_s4885380/README.md index cace2189d..240f31303 100644 --- a/recognition/FLAN_s4885380/README.md +++ b/recognition/FLAN_s4885380/README.md @@ -117,9 +117,9 @@ Flan (Fine-tuned LAnguage Net) -T5 is an *instruction-tuned* version of the T5 m The process involved taking a pre-trained T5 model, which is fine-tuned on a massive set of various Natural Language Processing Tasks, such as "Translate this sentence to German", or "Classify this movie review as positive or negative". The goal of this tuning method is to teach the model how to generalise seen and *unseen* tasks. The model not only becomes proficient in solving the given NLP tasks, but also becomes good at "following instructions" in general. -Instruction tuning significantly improves Flan-T5's usability and ability to perform zero-shot reasoning. On the other hand, the T5 model would require multiple task-specific fine-tuning operations to achieve the same result. +Instruction tuning significantly improves Flan-T5's usability and ability to perform zero-shot reasoning. As for the T5 model, it would require multiple task-specific fine-tuning operations to achieve the same result. -Overall, the Flan-T5 model enhances T5's existing text-to-text architecture by layering a broad understanding of following human instructions, making it more versatile and capable without additional tuning. +Overall, the Flan-T5 model enhances T5's existing text-to-text architecture and performance by layering a broad understanding of following human instructions, making it more versatile and capable without additional tuning. ## Data Augmentation When fine tuning in the training loop, rather than only having 1 prompt (prefix), a random prefix is chosen from a list of 4 similar prompts. This gives the model a broader understanding of different zero-shot prompts, increasing its flexibility in a real-world scenario. @@ -224,7 +224,7 @@ rougeLsum: 59.1569 Increasing the batch size successfully stabilised the loss during training. However, the learning rate decrease was unnecessary, as the model adjusted parameters too cautiously. As a result, the model could not effectively traverse the loss function, which inhibited convergence. Although the `LoRA` rank was doubled to 16, the combination of the previous parameters rendered this change uneffective. ## Results -From [Test Run 2](#test-run-2), the key insight was to increase the learning rate. The batch size was kept the same as the loss was much more stable, and the `LoRA` rank was upscaled to `32`, allowing the model to capitalise on the learning rate (as well as to make the most of the `a100` hardware). +From [Test Run 2](#test-run-2), the key insight was to increase the learning rate. The batch size was kept the same as the loss was much more stable, and the `LoRA` rank was upscaled to `64`, allowing the model to capitalise on the learning rate (as well as to make the most of the `a100` hardware). After tuning the training parameters, the final `Rouge` output of the model is as follows: | Rouge`x` | Value | | -------- | ----- | @@ -401,7 +401,7 @@ For a medium length and complexity Overall, the `rouge` scores provide strong quantitative evidence of the model's ability to summarise expert radiology reports into layperson terms. The high `rouge1` scores indicate excellent recall of key content and medical terms. Moreover, an average `rouge2` of above 50 suggests the model can summarise and arrange words into fluent and grammatically correct phrases. This is critical as to allow a wide range of audiences to read and comprehend the summary. The primary metric `rougeL` often scores above 70 for the average length report, confirming the model's ability to replicate sentence-level structure. When testing on individual samples, drops in `rouge` scores provided a clear signal for truncated or incorrect outputs. These samples are key for future improvement identification. -Throughout all examples, the `perplexity` score is consistently between 2 - 4 times lower for the fine-tuned model. This strongly indicates the model is no longer suprised to see medical terminology, and is confident in knowing how to summarise radiology jargon. Additionally, it has adapted to the style of the `BioLaySumm` dataset. +Throughout all examples, the `perplexity` score is consistently between 2 - 4 times lower for the fine-tuned model. This strongly indicates the model is no longer suprised to see medical terminology, and is confident in its predictions to summarise radiology jargon. Additionally, it has adapted to the style of the `BioLaySumm` dataset. However, in [Example 4](#example-4), the gap between `perplexity` scores is extremely low. Due to the length of the input, the fine-tuned model has difficulty consistently predicting specifics (anatomical locations, sizes, shapes). Contrastingly, the base model had the best performance in all runs. Long, sophisticated medical documents as likely found in its huge pre-training dataset, improving its ability to predict outputs. @@ -474,9 +474,9 @@ pip install -r requirements.txt *Latest Python version was used ## Future Improvements -- Continue testing with the parameters to find ideal settings -- Increase input and output tokens (if hardware is suitable) -- Research into Data Augmentation for further model usability +- Continue testing with the parameters to find ideal settings. It may be possible to further converge the loss during training. +- Increase input and output tokens (if hardware is suitable). The addition of more tokens will solve the issue when training and benchmarking on huge radiology reports. +- Research into Data Augmentation for further model usability. Potential methods are back-translation or using medical synonyms. ## References @@ -499,4 +499,4 @@ Raffel, C. et al. (2023) Exploring the limits of transfer learning with a unifie Available at: https://arxiv.org/abs/1910.10683 (Accessed: 29 October 2025). Chung, H.W. et al. (2022b) Scaling instruction-finetuned language models, arXiv.org. -Available at: https://arxiv.org/abs/2210.11416 (Accessed: 29 October 2025). \ No newline at end of file +Available at: https://arxiv.org/abs/2210.11416 (Accessed: 29 October 2025). From 7fd0ae881132b0e3f96a20d93373218425d9a35b Mon Sep 17 00:00:00 2001 From: Kevin Pan Date: Fri, 31 Oct 2025 13:26:05 +1000 Subject: [PATCH 43/49] Minor update to README indicating where model was trained. Added note about training completion and hardware requirements. --- recognition/FLAN_s4885380/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/recognition/FLAN_s4885380/README.md b/recognition/FLAN_s4885380/README.md index 240f31303..817e10890 100644 --- a/recognition/FLAN_s4885380/README.md +++ b/recognition/FLAN_s4885380/README.md @@ -151,6 +151,7 @@ class FlanDataset(Dataset): ``` ## Training and Reproducing Results +> :memo: **Note:** All training was completed on the UQ `rangpur` cluster through remove `ssh` access. ### Hardware Requirements | Hardware | Description | | -------- | ----------- | From be16c2132d36bf1d5166779cc95ae4e33aeadd09 Mon Sep 17 00:00:00 2001 From: Kevin Pan Date: Fri, 31 Oct 2025 13:26:35 +1000 Subject: [PATCH 44/49] Fix typo in README regarding SSH access Corrected 'remove' to 'remote' in training note. --- recognition/FLAN_s4885380/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/recognition/FLAN_s4885380/README.md b/recognition/FLAN_s4885380/README.md index 817e10890..26a037bcd 100644 --- a/recognition/FLAN_s4885380/README.md +++ b/recognition/FLAN_s4885380/README.md @@ -151,7 +151,7 @@ class FlanDataset(Dataset): ``` ## Training and Reproducing Results -> :memo: **Note:** All training was completed on the UQ `rangpur` cluster through remove `ssh` access. +> :memo: **Note:** All training was completed on the UQ `rangpur` cluster through remote `ssh` access. ### Hardware Requirements | Hardware | Description | | -------- | ----------- | From cf5d01cc83979d87bd902f7c8fdd2983366b0873 Mon Sep 17 00:00:00 2001 From: Kevin Pan Date: Fri, 31 Oct 2025 13:44:29 +1000 Subject: [PATCH 45/49] Add constants for model and training configuration Added constants for dataset links, training parameters, and model prompt. --- recognition/FLAN_s4885380/constants.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/recognition/FLAN_s4885380/constants.py b/recognition/FLAN_s4885380/constants.py index c2cdb1439..3e99d4f82 100644 --- a/recognition/FLAN_s4885380/constants.py +++ b/recognition/FLAN_s4885380/constants.py @@ -1,6 +1,7 @@ - +# File containing all constants used MODEL_NAME = "google/flan-t5-base" +# Pandas dataframe link for BioLaySumm dataset TRAIN_FILE = "hf://datasets/BioLaySumm/BioLaySumm2025-LaymanRRG-opensource-track/data/train-00000-of-00001.parquet" VALIDATION_FILE = "hf://datasets/BioLaySumm/BioLaySumm2025-LaymanRRG-opensource-track/data/validation-00000-of-00001.parquet" TEST_FILE = "hf://datasets/BioLaySumm/BioLaySumm2025-LaymanRRG-opensource-track/data/test-00000-of-00001.parquet" @@ -8,11 +9,14 @@ INPUT_COLUMN = "radiology_report" TARGET_COLUMN = "layman_report" +# Prompt used exclusively in predict.py MODEL_PROMPT = "translate this radiology report into a summary for a layperson: " +# Held-out splits TRAIN_SPLIT = 0.7 VALIDATION_SPLIT = 0.3 +# Training parameters EPOCHS = 3 LEARNING_RATE = 3e-4 TRAIN_BATCH_SIZE = 64 @@ -20,10 +24,12 @@ MAX_INPUT_LENGTH = 256 MAX_TARGET_LENGTH = 128 +# LoRA Parameters LORA_R = 32 LORA_ALPHA = 64 LORA_DROPOUT = 0.05 LORA_TARGET_MODULES = ["q", "v"] +# File paths for model saving and loss plotting OUTPUT_DIR = "t5-base-lora-tuned" -LOSS_OUT = "loss.png" \ No newline at end of file +LOSS_OUT = "loss.png" From e43907a36990579d809fe1d1f79bd1d944c6521f Mon Sep 17 00:00:00 2001 From: Kevin Pan Date: Fri, 31 Oct 2025 13:50:00 +1000 Subject: [PATCH 46/49] Enhance documentation with method docstrings Added docstrings to methods for better documentation. --- recognition/FLAN_s4885380/dataset.py | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/recognition/FLAN_s4885380/dataset.py b/recognition/FLAN_s4885380/dataset.py index cd08e86f2..c89f3811f 100644 --- a/recognition/FLAN_s4885380/dataset.py +++ b/recognition/FLAN_s4885380/dataset.py @@ -5,6 +5,10 @@ from torch.utils.data import Dataset from constants import * +""" +Held-out data splitter for training and evaluation. +Splits the data into 70/30 ratio +""" class SplitData: def __init__(self, file_path: str, sample_size: int | None = None) -> None: self.dataframe = pd.read_parquet(file_path) @@ -13,6 +17,9 @@ def __init__(self, file_path: str, sample_size: int | None = None) -> None: # else: # self.dataframe = self.dataframe[100:300] # Testing split + """ + Returns both splits at once from the original dataframe + """ def get_splits(self) -> tuple[pd.DataFrame, pd.DataFrame]: split_index = np.random.random(len(self.dataframe)) < 0.7 train = self.dataframe[split_index] @@ -21,6 +28,9 @@ def get_splits(self) -> tuple[pd.DataFrame, pd.DataFrame]: return train, validation +""" +Custom dataset loader and preprocessor. Prepends 1 of 4 similar prompts for training and evaluation. +""" class FlanDataset(Dataset): def __init__(self, dataframe: pd.DataFrame, tokenizer) -> None: self.tokenizer = tokenizer @@ -41,25 +51,28 @@ def __init__(self, dataframe: pd.DataFrame, tokenizer) -> None: def __len__(self) -> int: return len(self.dataframe) - + + """ + Tokenises the inputs using the tokenizer API. Converts strings into NLP suitable tensors + """ def __getitem__(self, index: int) -> list: - row = self.dataframe.iloc[index] + row = self.dataframe.iloc[index] # Selects slices using iloc index - rand_prefix = random.choice(self._prompts) + rand_prefix = random.choice(self._prompts) # Selects random prefix report = rand_prefix + str(row[INPUT_COLUMN]) summary = str(row[TARGET_COLUMN]) - model_inputs = self.tokenizer( + model_inputs = self.tokenizer( # Tokenises the radiology report report, max_length=MAX_INPUT_LENGTH, truncation=True ) - with self.tokenizer.as_target_tokenizer(): + with self.tokenizer.as_target_tokenizer(): # Tokenises the layman summary labels = self.tokenizer( summary, max_length=MAX_TARGET_LENGTH, truncation=True ) - model_inputs["labels"] = labels["input_ids"] + model_inputs["labels"] = labels["input_ids"] # Join report and summary together return model_inputs From 4d3e2b687fdb9e48eccd352dafd8846d1d78be26 Mon Sep 17 00:00:00 2001 From: Kevin Pan Date: Fri, 31 Oct 2025 13:51:29 +1000 Subject: [PATCH 47/49] Enhance FlanModel with method docstrings Added docstrings to FlanModel methods for clarity. --- recognition/FLAN_s4885380/modules.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/recognition/FLAN_s4885380/modules.py b/recognition/FLAN_s4885380/modules.py index 686b7d7b7..aa6a04561 100644 --- a/recognition/FLAN_s4885380/modules.py +++ b/recognition/FLAN_s4885380/modules.py @@ -11,10 +11,16 @@ from dataset import * from constants import * +""" +Build and loads the pre-trained model as well as LoRA and AdamW optimiser +""" class FlanModel: def __init__(self): pass + """ + Loads the tokeniser and Flan-T5 base model. Configures LoRA to parameters described in constant.py + """ def build(self) -> Tuple[AutoModelForSeq2SeqLM, AutoTokenizer]: # Load actual Flan-T5 models tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME) @@ -31,9 +37,12 @@ def build(self) -> Tuple[AutoModelForSeq2SeqLM, AutoTokenizer]: ) model = get_peft_model(model, lora_config) - model.print_trainable_parameters() + model.print_trainable_parameters() # Show trainable parameters return model, tokenizer + """ + Setup optimiser and scheduler + """ def setup_optimiser(self, model, train_dataloader) -> Tuple[AdamW, get_scheduler]: optimizer = AdamW(model.parameters(), lr=LEARNING_RATE) num_training_steps = EPOCHS * len(train_dataloader) From 4a8db21ca68e9a066f9c533e31ecf958029bb0e2 Mon Sep 17 00:00:00 2001 From: Kevin Pan Date: Fri, 31 Oct 2025 13:52:48 +1000 Subject: [PATCH 48/49] Clarify perplexity calculation in predict.py Added a comment to clarify the perplexity calculation. --- recognition/FLAN_s4885380/predict.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/recognition/FLAN_s4885380/predict.py b/recognition/FLAN_s4885380/predict.py index 715ea650e..2477d2541 100644 --- a/recognition/FLAN_s4885380/predict.py +++ b/recognition/FLAN_s4885380/predict.py @@ -8,6 +8,9 @@ FINETUNED_MODEL = "t5-base-lora-tuned/epoch_3" # Take last epoch for best performance +""" +Computes the perplexity score using the model loss +""" def perplexity_score(model: AutoModelForSeq2SeqLM, tokenizer: AutoTokenizer, prompt: str, @@ -16,17 +19,19 @@ def perplexity_score(model: AutoModelForSeq2SeqLM, inputs = tokenizer(prompt, return_tensors="pt").to(device) labels = tokenizer(target_text, return_tensors="pt").input_ids.to(device) + # Gets the loss during benchmarking with torch.no_grad(): outputs = model(**inputs, labels=labels) loss = outputs.loss - perplexity = torch.exp(loss) + perplexity = torch.exp(loss) # Calculate perplexity return perplexity.item() # Get new base flan-t5 model, and load in saved trained model base_model = AutoModelForSeq2SeqLM.from_pretrained(MODEL_NAME, torch_dtype=torch.bfloat16, device_map="auto") base_model.eval() +# Use completely fresh Flan-T5 model new_t5 = AutoModelForSeq2SeqLM.from_pretrained(MODEL_NAME, torch_dtype=torch.bfloat16, device_map="auto") fine_tuned_model = PeftModel.from_pretrained(new_t5, FINETUNED_MODEL) fine_tuned_model.eval() From cb3f5424aed5b7e9b5420054fff37eaf1b2a9661 Mon Sep 17 00:00:00 2001 From: Kevin Pan Date: Fri, 31 Oct 2025 13:57:54 +1000 Subject: [PATCH 49/49] Enhance documentation and setup in train.py Added detailed docstrings for training and evaluation methods, improved comments for clarity, and included optimizer setup in the training script. --- recognition/FLAN_s4885380/train.py | 32 +++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/recognition/FLAN_s4885380/train.py b/recognition/FLAN_s4885380/train.py index 91635b43e..b070a7e7d 100644 --- a/recognition/FLAN_s4885380/train.py +++ b/recognition/FLAN_s4885380/train.py @@ -11,6 +11,9 @@ from modules import * from constants import * +""" +Custom training loop for fine-tuning. Handles all aspects of training and evaluation. +""" class FlanTrainer: def __init__(self, model: AutoModelForSeq2SeqLM, @@ -31,8 +34,11 @@ def __init__(self, self.scaler = GradScaler() self.metric = evaluate.load("rouge") - self._train_loss = [] - + self._train_loss = [] # List of losses per batch + + """ + High level loop for managing the training and evaluation process. Prints out epoch and total time used for training + """ def train(self): start_time = time.time() for epoch in range(EPOCHS): @@ -45,11 +51,15 @@ def train(self): epoch_time = time.time() - epoch_start print(f"Epoch {epoch + 1} took {epoch_time/60 : .2f} minutes") + # Divmod to get remainder to calculate hours, minutes, seconds total_time = time.time() - start_time hours, rem = divmod(total_time, 3600) minutes, seconds = divmod(rem, 60) print(f"\nTotal training time: {int(hours)}h {int(minutes)}m {seconds:.2f}s") + """ + Inner training per epoch. Handles scaler steps, optimising and loss records + """ def train_epoch(self, epoch: int) -> None: print(f"\nStarting Epoch {epoch+1}/{EPOCHS}") self.model.train() @@ -76,7 +86,9 @@ def train_epoch(self, epoch: int) -> None: tqdm.write(f"Batch: {batch_num} Loss: {loss.item(): .4f}") batch_num += 1 - + """ + Evaluates each epoch through model generation. Saves the model at each epoch checkpoint + """ def evaluate_epoch(self, epoch): print(f"Evaluation for Epoch {epoch + 1}") self.model.eval() @@ -86,6 +98,7 @@ def evaluate_epoch(self, epoch): eval_progress = tqdm(self.eval_dataloader, desc="Evaluating") for batch in eval_progress: + # Get key value pairs and parse input_ids and attention_mask batch = {k: v.to(self.device) for k, v in batch.items()} with torch.no_grad(): generated_tokens = self.model.generate( @@ -113,7 +126,10 @@ def evaluate_epoch(self, epoch): self.model.save_pretrained(epoch_output_dir) self.tokenizer.save_pretrained(epoch_output_dir) print(f"Epoch {epoch + 1} Model is saved to: {OUTPUT_DIR}/epoch_{epoch + 1}") - + + """ + Helper used to pass the private variable into Matplotlib or other graphing libraries + """ def get_train_loss(self) -> list: return self._train_loss @@ -130,7 +146,6 @@ def get_train_loss(self) -> list: model.to(device) # Preprocess data into splits: - dataframe = SplitData(file_path=TRAIN_FILE) train_split, validation_split = dataframe.get_splits() @@ -144,12 +159,14 @@ def get_train_loss(self) -> list: train_dataloader = DataLoader( train_dataset, shuffle=True, collate_fn=data_collator, batch_size=TRAIN_BATCH_SIZE ) - eval_dataloader = DataLoader( validation_dataset, shuffle=True, collate_fn=data_collator, batch_size=VALID_BATCH_SIZE ) +# Build optimiser and scheduler optimizer, scheduler = builder.setup_optimiser(model=model, train_dataloader=train_dataloader) + +# Setup the trainer with all arguments trainer = FlanTrainer(model=model, tokenizer=tokenizer, train_dataloader=train_dataloader, @@ -158,6 +175,7 @@ def get_train_loss(self) -> list: lr_scheduler=scheduler, device=device) +# Start actual training trainer.train() import matplotlib.pyplot as plt @@ -165,4 +183,4 @@ def get_train_loss(self) -> list: plt.xlabel("batch") plt.ylabel("loss") plt.legend() -plt.savefig(LOSS_OUT) # Save plot \ No newline at end of file +plt.savefig(LOSS_OUT) # Save plot