From fce112a97b03a2758332355f210ef6fcdb5d191d Mon Sep 17 00:00:00 2001 From: sowmyasris Date: Fri, 12 Jul 2024 10:52:22 +0200 Subject: [PATCH 1/5] Feature/SK-935 | Add fedn run startup (#654) --- fedn/cli/run_cmd.py | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/fedn/cli/run_cmd.py b/fedn/cli/run_cmd.py index 123f17320..20836cf96 100644 --- a/fedn/cli/run_cmd.py +++ b/fedn/cli/run_cmd.py @@ -45,6 +45,36 @@ def run_cmd(ctx): """ pass +@run_cmd.command("startup") +@click.option("-p", "--path", required=True, help="Path to package directory containing fedn.yaml") +@click.pass_context +def startup_cmd(ctx, path): + """Execute 'startup' entrypoint in fedn.yaml. + + :param ctx: + :param path: Path to folder containing fedn.yaml + :type path: str + """ + path = os.path.abspath(path) + yaml_file = os.path.join(path, "fedn.yaml") + if not os.path.exists(yaml_file): + logger.error(f"Could not find fedn.yaml in {path}") + exit(-1) + + config = _read_yaml_file(yaml_file) + # Check that startup is defined in fedn.yaml under entry_points + if "startup" not in config["entry_points"]: + logger.error("No startup command defined in fedn.yaml") + exit(-1) + + dispatcher = Dispatcher(config, path) + _ = dispatcher._get_or_create_python_env() + dispatcher.run_cmd("startup") + + # delete the virtualenv + if dispatcher.python_env_path: + logger.info(f"Removing virtualenv {dispatcher.python_env_path}") + shutil.rmtree(dispatcher.python_env_path) @run_cmd.command("build") @click.option("-p", "--path", required=True, help="Path to package directory containing fedn.yaml") From 9011d7588b2970c16bff27a804880b5a2994a97d Mon Sep 17 00:00:00 2001 From: sowmyasris Date: Tue, 16 Jul 2024 14:24:14 +0200 Subject: [PATCH 2/5] Feature/SK-940 | CLI command for train and validate (#658) --- fedn/cli/run_cmd.py | 64 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 63 insertions(+), 1 deletion(-) diff --git a/fedn/cli/run_cmd.py b/fedn/cli/run_cmd.py index 20836cf96..0aa069046 100644 --- a/fedn/cli/run_cmd.py +++ b/fedn/cli/run_cmd.py @@ -4,7 +4,6 @@ import click import yaml - from fedn.common.exceptions import InvalidClientConfig from fedn.common.log_config import logger from fedn.network.clients.client import Client @@ -44,7 +43,70 @@ def run_cmd(ctx): """:param ctx: """ pass +@run_cmd.command("validate") +@click.option("-p", "--path", required=True, help="Path to package directory containing fedn.yaml") +@click.option("-i", "--input", required=True, help="Path to input model" ) +@click.option("-o", "--output", required=True,help="Path to write the output JSON containing validation metrics") +@click.pass_context +def validate_cmd(ctx, path,input,output): + """Execute 'validate' entrypoint in fedn.yaml. + + :param ctx: + :param path: Path to folder containing fedn.yaml + :type path: str + """ + path = os.path.abspath(path) + yaml_file = os.path.join(path, "fedn.yaml") + if not os.path.exists(yaml_file): + logger.error(f"Could not find fedn.yaml in {path}") + exit(-1) + + config = _read_yaml_file(yaml_file) + # Check that validate is defined in fedn.yaml under entry_points + if "validate" not in config["entry_points"]: + logger.error("No validate command defined in fedn.yaml") + exit(-1) + + dispatcher = Dispatcher(config, path) + _ = dispatcher._get_or_create_python_env() + dispatcher.run_cmd("validate {} {}".format(input, output)) + + # delete the virtualenv + if dispatcher.python_env_path: + logger.info(f"Removing virtualenv {dispatcher.python_env_path}") + shutil.rmtree(dispatcher.python_env_path) +@run_cmd.command("train") +@click.option("-p", "--path", required=True, help="Path to package directory containing fedn.yaml") +@click.option("-i", "--input", required=True, help="Path to input model parameters" ) +@click.option("-o", "--output", required=True,help="Path to write the updated model parameters ") +@click.pass_context +def train_cmd(ctx, path,input,output): + """Execute 'train' entrypoint in fedn.yaml. + :param ctx: + :param path: Path to folder containing fedn.yaml + :type path: str + """ + path = os.path.abspath(path) + yaml_file = os.path.join(path, "fedn.yaml") + if not os.path.exists(yaml_file): + logger.error(f"Could not find fedn.yaml in {path}") + exit(-1) + + config = _read_yaml_file(yaml_file) + # Check that train is defined in fedn.yaml under entry_points + if "train" not in config["entry_points"]: + logger.error("No train command defined in fedn.yaml") + exit(-1) + + dispatcher = Dispatcher(config, path) + _ = dispatcher._get_or_create_python_env() + dispatcher.run_cmd("train {} {}".format(input, output)) + + # delete the virtualenv + if dispatcher.python_env_path: + logger.info(f"Removing virtualenv {dispatcher.python_env_path}") + shutil.rmtree(dispatcher.python_env_path) @run_cmd.command("startup") @click.option("-p", "--path", required=True, help="Path to package directory containing fedn.yaml") @click.pass_context From cf9b98276678b5855bfd866a36e7e7fe697e5c49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20Frankem=C3=B6lle?= <48800769+FrankJonasmoelle@users.noreply.github.com> Date: Tue, 16 Jul 2024 14:25:30 +0200 Subject: [PATCH 3/5] Docs/SK-943 | Updated README for FedSimSiam example (#660) --- examples/FedSimSiam/README.rst | 112 +++++------------- .../FedSimSiam/figs/fedsimsiam_monitoring.png | Bin 0 -> 118672 bytes 2 files changed, 29 insertions(+), 83 deletions(-) create mode 100644 examples/FedSimSiam/figs/fedsimsiam_monitoring.png diff --git a/examples/FedSimSiam/README.rst b/examples/FedSimSiam/README.rst index 54434c6dc..e9afd02e5 100644 --- a/examples/FedSimSiam/README.rst +++ b/examples/FedSimSiam/README.rst @@ -1,18 +1,23 @@ + **Note: If you are new to FEDn, we recommend that you start with the MNIST-Pytorch example instead: https://github.com/scaleoutsystems/fedn/tree/master/examples/mnist-pytorch** + FEDn Project: FedSimSiam on CIFAR-10 ------------------------------------ -This is an example FEDn Project that runs the federated self-supervised learning algorithm FedSimSiam on -the CIFAR-10 dataset. This is a standard example often used for benchmarking. To be able to run this example, you -need to have GPU access. +This is an example FEDn Project that trains the federated self-supervised learning algorithm FedSimSiam on +the CIFAR-10 dataset. CIFAR-10 is a popular benchmark dataset that contains images of 10 different classes, such as cars, dogs, and ships. +In short, FedSimSiam trains an encoder to learn useful feature embeddings for images, without the use of labels. +After the self-supervised training stage, the resulting encoder can be downloaded and trained for a downstream task (e.g., image classification) via supervised learning on labeled data. +To learn more about self-supervised learning and FedSimSiam, have a look at our blog-post: https://www.scaleoutsystems.com/post/federated-self-supervised-learning-and-autonomous-driving + +To run the example, follow the steps below. For a more detailed explanation, follow the Quickstart Tutorial: https://fedn.readthedocs.io/en/stable/quickstart.html - **Note: We recommend all new users to start by following the Quickstart Tutorial: https://fedn.readthedocs.io/en/stable/quickstart.html** +**Note: To be able to run this example, you need to have GPU access.** Prerequisites ------------- -- `Python 3.8, 3.9, 3.10 or 3.11 `__ -- `A FEDn Studio account `__ -- Change the dependencies in the 'client/python_env.yaml' file to match your cuda version. +- `Python >=3.8, <=3.12 `__ +- `A project in FEDn Studio `__ Creating the compute package and seed model ------------------------------------------- @@ -36,90 +41,31 @@ Create the compute package: fedn package create --path client -This should create a file 'package.tgz' in the project folder. +This creates a file 'package.tgz' in the project folder. -Next, generate a seed model (the first model in a global model trail): +Next, generate the seed model: .. code-block:: fedn run build --path client -This will create a seed model called 'seed.npz' in the root of the project. This step will take a few minutes, depending on hardware and internet connection (builds a virtualenv). - -Using FEDn Studio ------------------ - -Follow the instructions to register for FEDN Studio and start a project (https://fedn.readthedocs.io/en/stable/studio.html). - -In your Studio project: - -- Go to the 'Sessions' menu, click on 'New session', and upload the compute package (package.tgz) and seed model (seed.npz). -- In the 'Clients' menu, click on 'Connect client' and download the client configuration file (client.yaml) -- Save the client configuration file to the FedSimSiam example directory (fedn/examples/FedSimSiam) - -To connect a client, run the following command in your terminal: - -.. code-block:: - - fedn client start -in client.yaml --secure=True --force-ssl - - -Running the example -------------------- +This will create a model file 'seed.npz' in the root of the project. This step will take a few minutes, depending on hardware and internet connection (builds a virtualenv). -After everything is set up, go to 'Sessions' and click on 'New Session'. Click on 'Start run' and the example will execute. You can follow the training progress on 'Events' and 'Models', where you -can monitor the training progress. The monitoring is done using a kNN classifier that is fitted on the feature embeddings of the training images that are obtained by -FedSimSiam's encoder, and evaluated on the feature embeddings of the test images. This process is repeated after each training round. +Running the project on FEDn Studio +---------------------------------- -This is a common method to track FedSimSiam's training progress, as FedSimSiam aims to minimize the distance between the embeddings of similar images. -A high accuracy implies that the feature embeddings for images within the same class are indeed close to each other in the -embedding space, i.e., FedSimSiam learned useful feature embeddings. +To learn how to set up your FEDn Studio project and connect clients, take the quickstart tutorial: https://fedn.readthedocs.io/en/stable/quickstart.html. -Running FEDn in local development mode: ---------------------------------------- - -Follow the steps above to install FEDn, generate 'package.tgz' and 'seed.tgz'. - -Start a pseudo-distributed FEDn network using docker-compose: -.. code-block:: - - docker compose \ - -f ../../docker-compose.yaml \ - -f docker-compose.override.yaml \ - up - -This starts up local services for MongoDB, Minio, the API Server, one Combiner and two clients. -You can verify the deployment using these urls: - -- API Server: http://localhost:8092/get_controller_status -- Minio: http://localhost:9000 -- Mongo Express: http://localhost:8081 - -Upload the package and seed model to FEDn controller using the APIClient: - -.. code-block:: - - from fedn import APIClient - client = APIClient(host="localhost", port=8092) - client.set_active_package("package.tgz", helper="numpyhelper") - client.set_active_model("seed.npz") - - -You can now start a training session with 100 rounds using the API client: - -.. code-block:: - - client.start_session(rounds=100) - -Clean up --------- - -You can clean up by running - -.. code-block:: +When running the example in FEDn Studio, you can follow the training progress of FedSimSiam under 'Models'. +After each training round, a kNN classifier is fitted to the feature embeddings of the training images obtained +by FedSimSiam's encoder and evaluated on the feature embeddings of the test images. +This is a common method to track FedSimSiam's training progress, +as FedSimSiam aims to minimize the distance between the embeddings of similar images. +If training progresses as intended, accuracy increases as the feature embeddings for +images within the same class are getting closer to each other in the embedding space. +In the figure below we can see that the kNN accuracy increases over the training rounds, +indicating that the training of FedSimSiam is proceeding as intended. - docker-compose \ - -f ../../docker-compose.yaml \ - -f docker-compose.override.yaml \ - down -v +.. image:: figs/fedsimsiam_monitoring.png + :width: 50% \ No newline at end of file diff --git a/examples/FedSimSiam/figs/fedsimsiam_monitoring.png b/examples/FedSimSiam/figs/fedsimsiam_monitoring.png new file mode 100644 index 0000000000000000000000000000000000000000..236ef29c1c20e5f7c4f1976a3493d98cbc47e274 GIT binary patch literal 118672 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

rjAkuT&?K#wR(6igNq2TU)(ZLA*{Y-y zrGRAxqdKqRkJYvhJiq9&+qcAf0f69F`W#^&|0(o}P-5t!W9No#J0_$~=p^Xwn};-s zujeDXfoX)O;VsJyNEe3TJBg|f5{B`vny>oyoY$}@rw$E{_-!jXp7}YqA5`Z(54qOd zVeon%SiXvV7Q(B5yR|txDLg&^+M=r7$pgkkPzJj_g+@i_D|gZH?H#FDd)Il42;bK7 z@`@p)Sk%SW8`p3%ZN}0l`9Yt0Ka1&rLYwn>;y=%hNGkEI%Wu(HB>Weg0bu4tSsK zUs3YRoPZ*Aw;L);Z+YG?aQe^QFEIkE+Azzk_+M%v^BrnB;MVc%BF~eU&98=8y;tf* ze3@yKb0Hsj8O-D>ghzN_V*zF;S9jn#g&d;ON` z-k(2h2goxAH%@iLnTyMX2F%qWbxywAUod>E4yzF=+))+9g%*Z8*QROVy*_KpjT4vv z2m|L5mAhC8L8M2d{ZAJhUZ_)Idmab4EEZhJ8h)|)ZkekSsmAzABuk1ZCv-h4^4SPn2jO;zKZzZ*-=CPSx$^%zS z{I8||SN&W<)Vn`U8#X)s@PBSh5#mbF!it{t=F{@!*`#{|eIJyG5DHyoLY9VO@FQLu zHV_818Runhw-pEmu`CBGewTdRHjyAEaJY5cOif>lGq@V{xyjU`ErMt$uKmjjb88!L zJzX|}a3mSxW(wqAaCUS&pbvzV7P8Dub+&!H%;2;w$O_^VX%$84scav_I1ayV+IBu7 zFcSP$7cev>;{azjP>qiYV>FZeiyv-KA|mLs->MbULj6PdJWj+zYn^({&Bc`PO%y%* zPSZBM$jx<*QWETyA8!iW^asVQvaKoSVAskWczV|5nhAA=%>zG3&|%t;F;fE1(>3cE zEm=|h*z-QI7ecdH{RQyvM+QSHs$G-a8bhQL*gT=HQlNo%Rhb@RpN&x?uB3$A*`utY{Y+lAUBeP=Z4}9G@WaLIQl@K}Do+Lc z6XK;Zx|OdD6>1`R0Qtc*o|WN~%U2_0RwnCPcgrJZ8Cg{nwu#4^!e~639vVH+@8B|#*RAL&rZ5z;yjQk|KOgM2Mk#hZ9W*xR?s}~F#j8GF-8Q`$#xqjh z$3ENe71_~zp`f!Q`~bb)=c&wqYUyK}pGF4hk`B|d+552)VuO85PYDhC@4I(wDDP76 zddZ8uS?xbwQ^GLv@Z-xoZ;53GR$}miGr2M7 zVe!GovtQmf!r>q8aS$8Ok2QV@egPAE@rY@}Aa*q6D75CAszK5Go1+KE`o&AZg>!mI zv1ICurn76$$NEGH>L{E^c_&N#2AQhmp&09)s9i70;8Y(cVd$~#kKCqQ8*a+tkSj?Q z4cYohXLu}403;GKzLvHzod)-SS2fFjST9?$w~!)ns7t-)RjJ`5)GnC!W<@9EwTFAJ zyNVH8AbAD1qP^%~PR`9Z3l5xb1hW^|ls~UQ+_g$7C zDx*F)iz`_D<6H{2J>N7!CqiuG1iIDc3@u(-O{!Z?bJC)WK_pFzX4}896et$l^f+Pj zxVZo}irD@Spy0rp)(GXCrvJ$km0z;oSn>hNlf}xUJp`Tc?I_xIIJ^Ip@gqY1qB;?B>nu$UL&ziR)A>&BW>h%H#-sT#qjipuRg6*{Liu zyQXl{q@kGV@V};%?*$a0YTc<%`@=k12%fK%g!g9a{h3OTDgvC!MROOus#bLF-xalA z_-MK+se!dqAldu09g`s6E~<)WxoIq~W9iBwIm%rpGF%pG?yvlApxPr}Qu}`amOt7O zUI3zZH17ki{llh8$aF35cJWzzY=i?;oZa(5B&m5@g(-itEV#_1^SSHXq-=g3ltrqS z&Gq#YKp|C-8Q#S&Kx3cVH-!yRy;lApfP$~PV)e;8&`hI|;q#q;+~j{MuvI-^7_7)# ze^iJx9U|}(O3GfMUgP=Hwl%IMI=|FHTUMjp{3I$F=Il0?1`@8}b_R8req&)gwu?_G zh&7Dxg4%GI*ts(Cv*(fC2=P&!gY~X?O0$aneUN$1%00ioLc!p0d^u3qRwexC)BsWD!TXNO zb|3EHYc2|tchYv}wQ0oPKAfb<+^wyUBGc^^yQ}<^LUuHPx4}TQ{IIn#Xor(1K@7s5 zJy^m6n~4T2a{`@hUDM{FQW+ln5#LFIn3sb~>)QwYwvOr~hLV4j7G3hdFk%-g0g2FD z?Y}iQ6t1}zTu0pZaq|?L@p&Rw5@7#aBrJ5l$_;az_$9DDEA;)!)HgAl>8Xxod4evV z4%(z+g4$x`cF8=tVUPp@IM#fG*^9mYvCvccu&L{IbNrg~E~I!S9s3_lN9ebDSe)3D ze;QTSxtAS^WybWdhQ4~u>o4y4>u@D09%rkO6U4V|6KC)m2#&f)NHBV z$g@d1q^pQujkB=-P~@`Y&y(8tBJPpaV#am;_GE__O0)*ujAK zzjUsNby=5*5iYV|iw;rD74l!U(*60eP=wHYlx*>`sondwzF%b}m)DO++?vfQVAZtW zKjk!3ZM|PA@v)=xZt?Dy7*$c8wCDcy1jqX9OE5jIkh*tcRIxO*uBvA zj$~g)yI|IR)=YlUf-75OCK@Q&=H9|4si8gnJK$!tu_dXN^dT+9cwU>%6~hdC{`DsZ zc?WvO^!~c7y%t+pUaQw*#HfmQ7p7&61idO?AS@@r!kO?;(~W&IzU5oe2Ku$7xM+Qj z6l4c>?-M`ee?O%8fESJYb+-3Zil$VwxMS|BrJ25O-ZG8s)|7Y~UGrG;0C<(88N6My z1#>C>l6Eoo4t1~}gHQ(TF00#`$fli<269~1u9W=GS#!)v;<^x#3e7`qpeieJ?2j_r zguczDvkqoKR>TloJ$8O@CG%clXJoonQ(TSbbU5R)&c9qLRH9%5uqnqYvv#MO%1VVR z*>I-p+n7>OWb5<0Ql{*@HWYSyXvdl2T88dq2WK-Uh|KG|{@Gh9rVKZ-%f0X0esZe2 z>7ZDklzN1_>oW3gPE3!5)n0k!j8h~i{7h+iZef>Hed|P6A}mkA|pA9I$n=R@YPhYw+^e*D0z_*{5IKV7NYcCmNA3*FWyo zp>}l+r&erDY?J$fy97v_-i=z>Hi__i6j`1eVkzT$l4Q`%#ZcHJjgsD5`?XK?I%X?H zh@6hxJ$7U+_9~}T-Sg=mwENS)r{tsM3h}en55{lqn)mVQ$;*~}QZK}}>&=lbr2O4i zc8l`v8A-T$A5?z6%(MQ}AE_XuMbjE88qNDVw+*#LBd!@ET8K2dkdOXpQP)Roh7Xt{ zjO7qEakJmx|9BbY0j(437x$`}*SbUr-$O2O%GT5jt_AFt{CMPGGC z^x?i5CQIJ3B56N*7R{IY!!}zV{9#c$Yskk5#ecQGvU z_2Yf+s=~Ji=)Nd_MP0!zzg%UgOUyeOKHa`&>{b8oEwC%)8`1qHR;-UD&BOH!>Yg!$ ztk?RscFkn6<@7e+ru|gO<0h$r$MZsMaK$(nD$@l)gr+KL;a@`d)kK;m?tECN)jzsO4e}2^*u%*%^}~5_4~@DUX$hBFGwMG=H6~JBm&C75>t!?_SA<`Y>9isytj-B zKi(~6(Mxed^!H}!cJ2wuWxN`5^(G4!orrrV_}5btLV>xLTOXPo zIJt`^QLRJ|eqw!g@rqD+lnj@T8#GGOcoEIDcorRxefqw)H6+f&^-@_`+sR=B#RX%2 z%6ZM)-@4rfvgr+%(N&i?|G`K9AYfD?X?CDqeF|sW{^)!;t;B>c!U&;)71)BR%~Z;m zBTLyQc^ysvxPq9elupcP&w5%be%k!ara3B(d*yoftXEsqSAwO?2Ug8e&nR#39Av02 zhRDI}6e0rrQm>QfuTFQ%zrmsNDyF}{Cx61h%5>RVo7a7k!f^BiTYWp8&L;lu>#NQU zWf)7xCm7C_d+LH!SuMhuvz5vv{+D}pg2rwMgHVU(cp2@f$dui|)zrFEr^`&bCh#PK zJ6>&!RmYwGCX+jVW-i_I@ZI8;E?HXVX`e)$?R@cCUj@x7?$M$L9GAaT6b|x!_^Wu} zL?9?J0END-5#s)7KYefq_idZ*5=mm<93IMYb+_^rJbIN01pAK*CD(V{ie6M4WF3cl zSIvK~sUM^HU^oybPN`0|d+lA;ueCDRKS1RVZ1sEtMiWX~=EkC&80`31@r-95CG z!Zv9@66881#E90N(*d#vCLfW@{i~^g3&u^{x2I zAUCd$t=am-xswa`;0jIv@1412q)evIF4vuV5A)ntWZ-Wv|GCy%8skgT%AJqe)`!Ca z+7@2!ui#-Qd@%&Yj`zK`i&x;@u0-Ft_;X+wrq#Z%G0&B=28u7CAIcRE;cIiBu*mHP zC%K*h`^_r?$GWn^2q@0JUJsNv(wZjo2K5;4gn~-{vDDNiidyO#b%X!a9RCpj;Fm+M z_H?XPjK2zTSHf4Mdfg`~HG9{byI%_z4<3iAYZ_97z7l08%$Hhotdw!yx$NE)D(Z;J z?k~`iAjnmSzhqyBah7GLY4|YwtlTQNPqYPJBkHj5bzGgT-_IGzm;_Z*o6;69yN9tE zeu%-ccqKmYUBTF(zc^Ort#RZxqmd}Lb61v-2d?buV*AMHe}u34BhLcWOPYjc{hBOu zq>3OY+7r!~gUnT|6Kh>J?H(+wi3An|(A_u>@yPBhAiU38fWS z@afS@TtbKre7o1w(8d%*A}6UZ2OqJ;cSYuC)5JLXdbP{a0(WX#52!^Onb{ti6|x8w zWtkT&W%KxF)zU}M&S%qEdG*Q(>r1C2&gz?`xNdsVT*d(G(nc0x^W7=34y4z{bi}7! z471|fH?;0qEV~?j7-LY0cP@Cg+5VhN&-bzzHLYO13sfN;Lag`Qu;+R*B-o{su znP80g)?jM(U&QdVf~<|Cd6>b8qM+nJ;Mo|TSuz~76vBGeDH1>8h&xPCVZaV*d{^)= z2gn0+oR_j3hA5VYMhN?k2lIM!J`LeLo3xE&jg+;r$~#pI|MQPL_>_UWo0z3Zk9p$n zN-rTsN6Hq|k33@2U)CQkw`ONnc+UhIMtB?2;Btdl_LEcU%hFbEb7lvwAM&Vnpe^;ZJg>E+=L)7&~IBciNUVR zR5xMeApKRxhUCZ5!%2;qPOjpRG&~C}Uw%%q!M_M{0lVF_Xt(HBG}l*Dq8Vq%Sbxa= zmg{puQ1S1D*iWQUFBtE3$>q#>cx95x9Uh3+WcFm0V+)4W)NUq1FZ%jdbpt-*fO2uO zrOkyWdgxZMhX$PpKxJ=gnjT=XniOX=Epno&w|H#d^)s7o&jtnA-^>1i;*+>G+kC-r~&Y1w*9 zGVFnNk!{|{)`WW^HwH-2KcxteRJ3`yP}?9-&fmzoqtrMN9P;M!U&I2m3y%YLT;QC- zeey;UJ}OiJc_MI)aNLEGL6%0RsIl1Tjz?@}v9np=ejk6R3FpQDC2s7i(NsZo0?fKd z)HdS+?KyvyRh`@jpB|Jt@!x5YJxQJ1iiW3jczYlb#29S;<1(?-?0+zGXw(v7!`<Tgv-Fd z>@LY7S`i)-D#!zW#HLdvOSR(pY=AkZvoe6*YBWGfP${e^qtC9ZBr`ACpeFf3HjiXr zWPAJ|RI0qTiZt8|-xB#@!$g8S<-f-}{Y?&106rU_m{_-% z<@tUl?|2TvE|&xGZuTPBf0+~C#oyfBGMe#37HhnKN` zUmbt_($x`9F3KkuDDNZAp<`-Dl|QZ2KdmxMc!$*XS)bhmGe-nZL-Ee*q!9$a)P+qn z&@ntziQa2wwWxvkf|c-@7*D{^tV6fU>(L4X6oQtyO_ss$SVry9+?*LNaX_O`rd+!5 zNFjBWj>&mb%nga^tn+mGsi?{&nA?4Qhc}+P{)Xi(oI}_Cr=dX`$|Cm;h<0EJs?Jty zu=|%|2`vtwqiqGr_g;ws(pvI{somR*>(LK$f>2_`qbvGs{mg$AXrHj=L%^EUGx8e= zCj|aRG~VW#my+77w9s%@Cn~pbP{Iu5{st3f)@3RtST~Kg&l~6Z+IJ6vyqq~w0_=hF zw=cR87Lwc&aJ-j5T zmuW~|=(Dp2RTyY|_9Aie^@%9eCS{zilpCzv5{&z+EayZyhu1)s#Qi%r@gF`Az_x^9 zBmVVO;vu$qB~2g1H%)qU7F2c$o&o@HNAzy?z9qdi^9-2Iij7v5f%TZHS-P@mAx?R$YJr^Q3;4~4mz>ki%iuevXJ zy1pE=q)%sFXqd1dW1iz?F}-i>`el2txZZJ=zckd=_yyUb*83o`2%2l>l#|>Wa5PcJ zAKVltN2^87n)b``gbXw1=yc44#n4R)+}AN2*fAN#-*nX9X=fVn&B49pQ=bz%*ZVl9 zQ-FSi#TZ-9J7^ix@mY*GLF7@-@A``?Ni>@J<#wJAyIk^I#{t;oX!RY%Nf-p=YvVvi zDnrMILmW(YUC{f{Qj>7cJbyZTlVdNQlR^7-)#tDX=ZVkMeWcd=#C!RAB_E;G#41;|sU6p<^e;Ro7 zF$Kw8{=@GGO3b2$^+j=)xkczRyC1R5m=x>`xu9?JUJ#<;fHcvp`o`%~Gl?v=*W-p! zWEp93u=}P(KT7%P+SGDAHBUc49m3)M#@i1HGj_Jx;3Gi?oM^>`x)sSXg~q=8$HQq0 z*24o4y0E^w#opQdnbIF}=BSw++4fB$_ zo;$(*(+YcvxBkAXb@9zUs_R`~*1kRO?^XK`A!Pu)fY(^bFu`Vi zK8p?<~GT7(%WQNXic2L{PzWU18*to`whxvL~1#*iHRaf{0j ztY{@Si*I-Dss8QlK;T{i2w2MQDDFuX3FO~wE{zAQG1XJXFAk6dEwwS?7g_pBZ7SF7H8!!HSk0eDy9r_r-X3+8l+OQ>?DRLe zNIrQz9y+N%K|C|0>PMS7U$HDJnBsu##Siyuc~R|RQe(D@manm}#tx9M(YI6Nt*oHa*l>P7 z>jLp5_(P~+t$DihfD~K?x{bQYeu5x2ewGB(jfk%w}MCru?F^t{<8I?ow@wakl8`Z!L6SDHATmiZ>khY z)aC-^1>u#~_MAqdDnKDk0c+mobTIIdJ4bH+)s}MN_M}N8Sh35^y`9ZJK|Yam4ER9} zZ%OXq;_zmyvli{%^)Km3n}gkqZj!l-k^Lf4ZXulYHs_jdIr8$^I|Id$9}!zDl)_(O zpF$;(@hlQe4?;!Ws9(G3S6M;en^g!DK1!9Y6fS0#C2g>S=@VjQJ{UKd=^nl)l4{i# zZgKjC{c7;g@jD|5^HNyu`PLKXdQ? zC?q`^AhrIQbU_e|4o~8nv|fEvYTD#hq)KwLxMnOTx3_J_FAz_CQ7@d(bWpn}TR-JN zU8ty-I&h&UHy63GN2W@m)vljQ{Q&V%DhD<`<-O%eXqV3u31kuQYp?M5KcM}jcfVYn z_Q5T+;%9NuWmLe4#5;6PJakK{9*mH5-q_39uKKE6?En1B%u#<(JG=XwNh(M{;k+oO+UFG z^!odwdtZMERIR5+x;8J{ee3)7T_#G(Xgjqe`?sJCgh2lrk^q0w@Pk5-X1+)qf3?>?c1advi3<;J2*>nl?yK@SXJ36MD>4n*udr=08yzK4f5v-!3T6R86)M zB3jOOVP=%UM)qrMJBxC!zXe-b5>5n}`DNNAz7 zCwY;4)fD^DfcfZ#v3|r~?=3hbuQVlitWW4{^$EF^(JB)oMXYk}7bT{S2oF|1>jCke zNP7zUfx~&dknKM6aB;MV{n>h5msRJkepX%0$>FtELKtZ&(V+TODyGV|jURbrtP?+Y zHeRlo`q?S>{x2X5{`94x&O(9U2Xii>PpRg@l)O>g zY@x3j?XQf5PBF1*+^Yfm? z8*w10AyqegPXGf0y@ks{f%oLiio_C5qW$g`Wc$wL_Kbu&d->p6YEJq(KkB@^TsJQe z3<_&Z8GBzzW2sZ^ZCmony-32%eU+bj!lv1U^dxDr65hf-BYfJ!LrOec&7OFRMw{i!F8Fz=AqrEDIpM;{0=imzuSHskZao@`VwQ+ z{{!2e@kUQ`iB@T6iFC@u5)Y%@YW@@zNGF)Y4%|O(t=f5A^X9m;G#LLpP`Kn7f%%q0EC zud;)MFC46YW?2q;`f8-7uj84Xt2BVtc_RgAxmJZO2u1h8!{KU&4owbqj1NHnU}_P4 z@2}=&FDojWA$HUBW-2_KbEN_hm~ViZfhwO_gW>Ct54NW-YrsB7;cC0o9eVHg(5FX? zIWJ;OBk0`2{xiSn-y`rPumfavYt~sCiU5LcKTx5>$PmQ|=7_nGGLnIMD*Z!P`3HEQ zYW=P;IUAnsd6ftR>l+kka~MM>fpqj6jRbSL!=)?6<9O-YPf!jO~(GV;p0s0 z`@iS_1!LB#@dY7>ajOa*kcVf{FZV;+zs%iC98~b(na)##!kng_UkR3JyX$lVo%jrc zX=hB&$)C4!JxU$?>Kjg!+8g!p`lY;wU!51(L|knHfR|`iTEo1axRlY#Evroq3IOlA zwexDOn&hgJXdZttOA5G9lq|1-5|z(mm`NwcQyKStplu_SARlispyRLn!5UnUp|yfr z!b|kT-?1Z8fO(?02ul{vMYJGm8SV>itII*kA40B_oS>cp8WZEJM!43%c^ecF_?gz4 zRj994GTL>esYYZ@5IfqhhssNsJsK(3jHxUZ#6O?T0`mP6id-D5zPbr{l256|H6&k1 zBq(Qqkql#RoFnT7qTheq;9wWy4haS`#YzfAKqcb3(uU;!aoiUmo=q9B^OX{)Gtkl| ztS*_}N;ny*rD&DvHIiWG#=93%NS&LZj5%{1Ed-jBAa9gfHZB zkcyzg_U=E2oObB2*D&!Wl@`tOu?4v>p(?;T=5d80P$yfreQ!=g)fT=#>xIH}W@k`D zzAXYwpMrz#UQ2}l*AJgm+=?fO|F6sYPmM9?@dkm8hbyaXW8>Vvr6(2ALp%x_N8QV9 zKY%{nM`%)50u+^GPSeQ6H80SuDS_SY=E00eB$(NB-k|}Te+iVe+^^=@PDnIU!0p=3 znj2yVov%|qy%Yo#HEuNa6Wu0ekQ<^HEfGmKLVf%F-fi>Q&o1n?w3CHF0;#&> zyax9$<#v-t`n386E->&n(o6tKjyODWbOOjk%X4DzDEyPV_S`!G?6q*a5gPc9FV07Hldk!b<1}hEVFdg8nz)&@cxc8vb^DP5RM_ zWT|QFh9OH^(nYIyfM%iJ1Q5Cb!>N*EMnIJ5@axEtJ_$};VU8Nck9=jv7gHo4A<>Pk zLj4RyrS)*WiBCtVW5|5P@r{uP(i4UgUkAd!=UqmlYe;*cc)blvjU3jV7BiTNDES) zivUCN#18BUJ3~LzMbo6rhk_r=blXNckwSv*%7^a{+Dq;=2#2i1_)}P)FyNUV3D3co zL9KE(|UUnIrE@^rQfvg$MRfCSb1to za@X3t2Z&JrJ#pZl6AUA2*k3*g%z3V3ThMIEVNMi)S`cv`aw=)fCWZp6I^`W5`0Qs2SACk*|NYkVV*`percrfLJ zT1o5vozUumo2u}n?UnRaI(IMEo9A;E5F_b=C<*a3Qb|Zy~t8I2rf=*bw+s4&cuz(NMP&3ShIR=(Bw#(+)B+O?Y}Y)5|XIT(ZhuA>f5QR-zTklIgETG59Yq2ThP~wOb_{j|%n}3?}z9_)WU{BJJW|$G8x8aR4nA ztRr0xf&8nq40qx}Fv~S@g4pyiQ#fJaEJynPm!Oy3`889{zjqR!qKt*lNAvEsUp5zI zzwz+O#JvUPh5v)b5TsRm+jS43F_Gu2UtrVF#u zx|8W4t8)plE`(~g`AAVu%Zz(^C5Y8Ds@;^Aa&%w$F+H;1`S2fLw^(St3l&8i6xi9l z{Tt-Y4i1;?Nkd=VWy4U|o$jk3j8HFL^tZc^M5tMjVADOJDbU=f~CZx&2n zv7)mio2Gkj#5q-3jwzyJ%P@_5AzV1S!qJ5AhwG;Md>QZcWmbO8_a3e{M)Le$XU`ji zVk4^Wjv({{yIRTXCRmSAN#7%HnbfCmo_(OuM?3(gLKI!-C-V_$f^Yw68u7f1D*o-u z`m!h6^piBruMx)_4Bb@6o1Rj_5)tOe_Tvyz{735k{Y`@Lh@-!Zls08xmiqQ0i72p&QRJ1cO{wZ6DE% zsK&?!cAg5ziIn{NgO3=<%dIDI&JcEai@Mn!08M2l=MQNNXIf2P3>lkqkwc_O41do5 zPnqd|nTKxz`gU797lfm!5Gm-SnkVwHt&-NBH049H@G(P|8Zhf(>v9+2S>4ji}rs;-r_T`d##xC90Pq23_k``<5G6v#+0JDIUkv>QafeBqm2E)FIK z(ZA*n3KO}dRVEm_M{(RTth~Eu)twcGtv%0u--C|{6_uU2jvDte0%C=N)^kg87pJB9 zU%Rho`9lkdyLUCG_xH@u9w~49|{|ogQ#E^!Sb4HgI2#LtNyVEU-Pwt=I`;> zT`}V{Y~wL8Vy}}Z*l9(?+51G@vLdM>#Dq{FL zCdMcM;a%?Adqd@m+m<2c&h5chcn#2Q|0>=+1Vmbr4mStx7%|0k3YVRU{kjU2m8%5E z$JVe3!~fpb=_98k;WZZ1W{ub1UGn6Y0Kpqx!>=*n zB!$G!aoj3q`HP4C>`5J%kJSf;2S}*QRd5;5w%&pSTUp>3-kfCRJHvI*H}G%Xu;_mk zSq;|i_lB3wc_*d#Yi>1eZg0mwn-Sd(V(z&}j*h~6{oc~6G3CVT>QmuI+#PXl~%y+Ed3#Dk9xIrIRXzFi}* z-Yv?zGsN%8`A-`Ib}y>uj6p^~l%Te-+m;EhNvz4{T3YS@k(|Urb9QyGv-ddQpp|hH zfVcBf`B>fS(nphwd6R&=oY@I=;ZQ-vW(y&AVJmjZ zGiyV%RCxxZ>9%4|ERd$F5T7Jj#?EoTF1+`mPyhrTWT%$hAnK4qTxVnMvBJH6e#a7b zZdiP7glkB7z*la))1>xM)XxM(*@EKqIt(e!VrdSAeNq~4Q@s_Xq4AZmrvR}d}Rl6Q_ z*P;*5?YCfWMsv?!I$wf3@|1;PPXr4+VC!4B=zT%F8Fsvi)pFTp3vBon?42a;b*V%= z0_XJ<7a+|rZ8QQlQJy>^!G5Y@<$_wj3!J!d%);`>Xs_*g;*FJ}I^r$q^Geas6nwW= zL$i8HsVFAUIy;$sz zYSx8QfbC+?P$}Ec&bBAp(QF{~w~Os^>fXHIxwpY{6_iCbi1@VX5NBr;S1g1ztep0S zea9lWgImXlv^P_6FFLC%_+BhstTr~0g%09mN;*T0T*iLrtp3lWkOjLYwOF-Sbj3S4 zDT-l9;byD6!6owNZy2?xoX=fzRH17#*4>5^tObibjeoirFch1z_Z_M9F3?<>DCD2)PXLS_@p3ymu z3Iw{&s?xz%lE@s9Nk|jjnJ{Y!$stKxlU*f!M8nioFPo^nyBEZ})5c>jxIFu* z@5A?r_p-U(PiD7VZcGmZg8KDaRZ{0wj|X2Su;WF0SKr_BB**$Z9r(?VxoUqVY1@vq zfCI++dFN7Gu3*WX%@2JOSYsSgiK;tg2?>#+_d+o5r2*+^4E#iA7#zpVu)r z`XzwEt9Vh|8Ue?+8vbC6upJ2&I^jrL>p02{&YnziMTuMvD= zWt5~74CU7Gt5eKXmwFk;9ove0vr76R3SNUK`0HoPT~B>1T+LTOvKfJIDu5)y=}p{(QeXA2reWc| z1M45Nb*g*jQbWZNxw>|2v1zbIW~D}y#EU2#fN00QR4>nFfXGF}Fbb+mq6skGev_H| zY)fi0YWvV;Y+q%L)6#N;DMphzyMgQ(j|`Qg$hK0-tijz`%im2?19KIt{niE-+N-?x zNJ|#|5@4T5cG6l|l3(U@*#mNNS-UgU6~Dv>xiBru&=t!stO^fh%D1%#JuS_wz|X*u z+J>RI^V%JbeEQTbZ~n9f;2MpPUwfX_s!6!<;{%ol1Cgd+R#f4%q zKXz2(YQ&Zmza>+A{h?9X(M4~k&?#Mv3D+IC1MUjWa9}J-9anF<&Imead6hF%uN%)*R^%E zt@ugOODBo&Zy9cWi9k!*$(eIv#J5Nz4a}jHlB&6@ADM%~vo~1&<#p3D@vG;Q&n3?h z8gQ5I6~~6rOu`^k8ya^#ph*y0sP7tkC8IMLDOzG5^(-R?%m`ah@dM8QJ_=@h=2ASR zqPc=wO$>+Re4O*jRiBvsjEe}K1YS#NrebId`*}C*5tVbh=oAV_h7v%b_K!^E@%VVWL|N zsk!RTRHPiRjOoanstK)Gt>XEp^ST+Ha~ojWVlnfdNF`EQ#Ruq(l=XK~dwJf4_!y(_ z$48GU!6$^tlseLe<2V%NTkvcBb0y;g2pua%&@Tel@D*seDr55*q!J0Din@umc(2aV z@1l!RcU>K;*D(Bacj}C412(L6I_)uY3z#P4^!@69S5lYKv|qDT-znOIQ&n~BP`q&A zRsjI*?`bw)M=B8_!bkd?xi7sr5dceDq z>;u;93wvr_IuT8YFkllxr#dntu&dT83M=qOOTMr8_8bhKH>dsT5I-ANwMN1NQT+|9 zn6DS__*{-2xjex4B*|0Xo}HWB!M=NIbF(Z>-Bc}W$xQeqMo&R0qi@@D=VIlZ9o_bj z^1iUQjfI$-1je9#;H+f@_gNtUVlJiGpLenP5j^u{VsAMC`*PiWQ-}mlU5P8GZn*2o zJGIz=c;|%G-VTWMT4`GSHa0ACe5YpKjG(J$u9^wQi`Yrs3Kfl8kE|ZzcTUW1BZ#`d zH#=vCww*8W_+kq~5-;6S5tC)}XJoZMB<6MiKnl?vznK)zB%fmF8~0a=u6jr10(M z#1@MHm1~MP;69go<;pf#TutM1$;>;tb}0eZ3?XVVoYfT`tZH^k@~UICX{D43CylYV z;E@rFB4hJGbDoI&F*nU_)A8A#BY2$>7xIxD;G-zI$`{!Ebe<*{eu->$?3=~5KHH** z^SW$LWJ1U0MPJU3Hf;$`cRe8=@7Q(1@Jl{!6#Y3j=urniW`yaj+!`uCO7iz+n{k7S zp91ZDga`@Ks*)wo0}l^A0>De0lyo5Us`*)7*sL!MI&~4MzY}#^h+GO0^JC<|4TXQ{%wa2GmKzO50%P9g>^S6_ ze9BDV+B!niv^8JdZ=Uz#i1IRkUe4eKp(G0uM6qeBca##Ja)s@Px`77}%F`E_--O{O zI4ug|8-WquVPxN_dm?AUbRwvyi+4K*o3%-VsGnjQU10x+I;4T)MjU{TggTrC@A)>r z`6_8j{V;+g_>B+g(k~~xHqt;sbtT&I8x#>a61eKFnxX9FCES_=6TwS)z$H(K3X8jO zdATp>xu|*CMeAGe1BJx)bygb@NdX(T85SZ3t)g!(q*+{kz@=gY_%_0)_%a3sBNt4N zx;-|Y7sqwdFlsXV{*8;6MwJwB|I=U%eh;{)r>-AlFBwJG&8DF%sJQlDs)yX+pB-HMkxa~_8xF)LsPI{MbkYvKrZ7g{u z57btLQ>LaVoF}<42Kc@aBlsDjU*s8>M1Z?d5OKmpKzx8y&nQHy7bLepXXj1&=}B>T z)7y!`pW?;QN0M?m5lvz*Dl*sA%vBW!bFy^-AQ%-}uw&PKT66&~nFN4Ud)b|?At2f! z6$p`{7k}r#4;At)1S4K6?uYU!&P*Plqu|3ng>UiBkmZ$;q$lA^P|$Mag8lTUQ;OrpP`pEKq=}DVgCVeNGASSx`#sU= z*kX3nsE7Xi8VHE05LWt@pdsV|UqrkX;c~rD>>8C&zBKBg>Bx%;6}&cBA#+UQe(>f{ z10?<+4%XQI=DvH~RV5Z)GXBm*AX6D5Q>IhK`KB?LK$*e z`#u|K zvU6@Y2q=gFpSdLbM>Fb;w5$Glp^q^2L-`f=$!eS*>=<3fXr%L7MDQ~?^7R}P!tdqc z7kcNq-s`(Fa-MczDPw4<-XBA#Hyro@Cet<-IwZgl*_mj{7tL)6NVd~SX%s!&f?bco zDcHr|PCit~jD?~Ihl)Yjz2A7waT?&85@|5Lg7)hsH6l{ZHGf)hb#pl*e&Z#Jv}JCU zLav`pE&xOAAz~D-%2Hf#w(%L@Dh|8oXc7U3qA3DTQ$03trb-1)JTM`xDrgLByK(~( zjI+-^S!Q{^`vPIS@p%_gV`Kd|s7sul#wpQxa*|&#a-&8|a)L?y%;bEBCOzsFg{Xb< zZZ&C>Vq36x5RZ2>blP5U6fP>j@L_w^5(!U{6{gG$&0}kbiTj5-aYX#9En%`&G_qJW zX_2HMHqN!jCh|N77bOqK5st0;#51*NkW>V;vdB^R8B=-!Wkpw37hi2Kk|Mk%?XVyV zV{md$)m+ay?^N-5@L59%nD3mp$exi{xb)eN-1!;To>O{zZpSxhRTfleKRvpF;MX90 z0cPT3LIYp@VT60l^Ulo%!t|nE0I>%LxG{hgwcrS=(XKf_r(I|JdV!++H$uFW2X7+4 z$egth_T?H5k$}Z5S-g9t|5G^S75_z#l!YD%g@`?SZ}f)}U|b7(5GcnvE}YW)``Yt6 z=d~RzAaO@%vylvvor0DgTzi=S!D!7rf}Me^C%*NtvF z%sxpP(BIedx&xxzq1IsF!C990?_Jyk7_^NrqTBEzKY)q_he)u3`-A7thZG|QjCNUX zogwO!1|(m3rprKei{S7R>)La4KSyQnHcGods~PeFtu~{IO>!S3Y1Vww4G)Z$)zX$L z2hCm`5?n4;@41Nc4H?0g$W?FD5rZsSewPiiPmdj~0KtO*69B~aQ8>4|S^xjvTM7~7 zUlhL^*W&y+sb*y}DoEAHB6sC7-381|l(!5-ZAfy(3rR(F+z5DU())W>?4;BIcKl13 z|Bt=*jB0A@!bXpRq9R}gr3Ixa9qAoKdKD0mDx%T}y(fqWs7ROI1f+@d&qnlryY zB=U?SH^C)SoUo5ibKfn#XTEc|EuwpWZ%COE+2HcYdz@&ZR0kDf?`Lug1JbQKeD$}@ zT~R?f{1f$CHznwWe=h#Rtbn17^MFXRHZQI8$?Z(31pVI7dB(3oxLG^R!7KxwpsqT0 z?{`G##8an5Kv!-i`zj6)8O#wBq8Ig?@7W=KhPugza~X${T>69UCn|hGS}QzbA|=?Q z4>&F=#rLAEda0koosT>hvnHu|9&d@%G24G32E}?mgDqFD;R}*y3O_wZuG3d6Qr2v4 zwI>_zDL93`1n2WEAbO|jcfgvw33;Xj)&y)@Fklpyz-uzbo{qPM>x#S8aY}AEzR(XK z8UhPJ3(vXS_^j$DFG2?o%&$}EZi!qYR~|99U_CF&;&<(TJ(b|QTdd$1p!%UstMh^d zguYxa+Z6?owfT!5{^{6%`3nKt7-H%7|I2^(oaEv6nB4I}CE{$I?5A?@w}w8juCT_6 zb3b`wnp6YzGok9_q7NB~Apt`ZkPh|C%(s~xqt7T%vo%AF_g&*r9zuuOPK6T0@ow)J zSmXj^{Y%B^>O`XNU;aaY1+iM&6_PkDBLB(Q zYb8e^?VO+V-gBkpaqT{A5d8 z6QD^m^=UW?g0a$<>RtA^Z{=|kiF4;xd4Qu#mQTG@oem-e-2jS)C+))#^Y*#i0GDn= z2T#$guOYMcN{NQ@TF~D&r{S*1yE5{%k)09XF62V<(y^_LE1c6Q!dVpb%m;YZVzfrS~q6r7I6M7~?x39QR~ z^mP)Cf7iL4y1CW&ZT0z4`7_Ni$rMDR7wHxM+h>8neP!D~+w#7t@K4C?JdT@U9=Y_+ zikQbRO;2Nh$x)o4?o^%8R7`uj4oR#Ns>5y+^a&BGn}FOzyB!4#nD&CN)2v#RVWI}6 z^7{Lk2INVKc`=d`nN7?|{_=m=NJ-{L1t1}zV;rOzDs^+xr>F6qN^!bKO*WBs+$-=E zSwMV{oF-kqAPL{C{u`It@*)DmS7AD1djITcfz^{O0PWy{Ah3y@r?*wJHWv4FB3tDG zJc98R#9JQVIlcg^dVIct^xWsu;U+L)HQw&5HNau*_x2tWrS-vLJps1#^{ueK2@hW_ z;*zug-u3ea{+o{+H0fdA<@ZDbOeDCm@1WN#d&Q1Gl=Yjeo`cZW6pihu{xcPTN3Q`l z<@UswrC8!jl*PxWxsNuT!FyAXDCQWV!369!h|q~)KBVpmvQc-$fg+o`onHkd?WswW zI{kaYN$F|(tL{JbIIqUj9n@ANO{0Fu?1Q>CMsEM7ogV}p=G>fFT7Q!}8+j${a(Q*} z-M+<05lKZgexuO8w!eb7)el_(uWM5M0Xxmjvr&m(O4!JHN0a#k zzAz;c{Or!dVIm+B6n({spvbckU%xzZ=Cl;lOYF@9u@q}eQ|iW^RNKIxF2oF0nvoTD z4w2iK!=ZTBEv4>K*ZSV34pCwdEcD7{D>F@Y7-)7%`CDe2k*Cr6+)Es3IzXDEjv|S2 zy1*!h{(F`9#ve`3_pvlGG+j2iNZzAkC{AgS+g)Lpm<$Fy65}aFjsitx$Z2ktVlAFP zl;{bKIXv%U_ZOtrMH!#@fY%gxZ;37;9ihm~jmMKZ^K8`8K&axV*)pCS{rE-(nDF#J z-KX$vuo{=SVdv+Kr+Hh`E})XVSrc0VfX7wtqAr^Z5Q%7@`A}$0+>!)4VhQ385k=~Xn7+}{pKbVW!j9(;mvn$9u+7Ose( zWSBAY-5M=kU`Ab39Y{%+9KIYzfenHoC)0}x^0#s%cCJY@f4AaKrYH&`M{ioaLitUb z+!E7JCK{?5^*~Ori}{SbG@{^N%?CN0^6)+gX_-2>#NpQ+m(z5RS56km@)qtmJwL{< zOMD&AlG5iPPH~x>7Yu2%K=TGa!|pOi4M`N@558?Mlc8#-)(?qMfU-{~!BVbd_eX+~ z!PkB(Ys2|qB8W^U6-tFQh3i}KBJB5{P!Zn*Zi0ES&Px+|&4!7T4Sok9eQ(3u*C_n# zQ4+C5F>+!cngk|vq%CC~Y>cwEKB%_1#q}7!Q|GMcxji0~VfhEMeGKl%h;>PdwBr7> zMI0klnd)%3whiaCW=(o;Gtm)#E$j*eFWZIo_%-;LSaHEr+;TchckG!~5wl|%DSmm` zWhO8oq;I9cXP=uQfZ~xN@mx0X9E7K&i>td}ub)0Qzjx%vY!+(j=7aU$z^CIfY>7c8 zAQ`(0zLgS%H95Um44t{s*uB zuU50U@UrJJx?QVgcWh;QEy);v9Kgw|xQ(HLrHc+Yx!jOXga1k62$l{ofZ2P!^?I`4(rw{=VcCh z?X6{q2^c{=bsvCz$*)oT6>l0l%i=P<=rPili0bNq681l8%>|Wd^eAVaC+3plTS=mM z^hf0@=9n!cT%kezbegB@?PO_*IQZJ&X5q$3shF~|xD1ENKb0Wo=8b@O6SZQw zGtN@nD@+5r{qb=7O^}9_4E!3+>jbZ}sR%4>E4NSv6J>RP@EwqH^S-Aj{Cr5eF~2aVqE*M+Y8CgNad?;|oQ7V&7(p zumAywo;Nie8s3QKH7Rydh7%PO3_Zl{(tZK@8_5|1S>w= zX}K|etM|@y#Jr>Di@lCSIY1f#!C2yRabmGQLXL1vp2SJw|`hrPJq_0X}RuFxRBt1KGY&&?kF;wuwOGhOCzeB_Ni|wim7TP}#*QqJ6^}C~s&m{KHvY&o|O*XWb@3QP9C6vdW z)*LW1pY$71Z+fshlToIs96cHh)aABxqpzA7q_#u`4~g+*OugbDzZI0lzASAyZTWI` zlEPz;{zA)xTNC4SWb{!cmw?`>#>`JFn(r`d{n!mhOe_zof;xho!_I`BWS^Hz1FdN( z6>Gn?RKAJ6G`L5)@de&NWgaP$_BF>BGlpZlVk&pVw25O6Sx%6K5VKzr2V&0=e#kL{ z&7=7^#+b4^YpO)WQUHju^rPh2l{1Nl5kv+-bX)jEY_hnqy1In05A``fIvwUtk+WvU z7@V^*?_}VW47iZHpNIl0ZlG)Jbyl@`U~~&;4IMMEj%eA>E9gQM>EN&jKHlbtsHcZp zO%KO3I7Z*}Rq9{SAX?I2vU&_GQqSbccFisS1>mgtK!?Z6t=B}A;~lP>)Y;IZhK#L< z>p*W5RC8KOKi;wZ?Q|Ke^qj*qtfu0-h6T2^f!k18Ckx zVRcnO%k868jrSyRplK)%qVr?De#r{8X>@fb&=;wohJl&`2mqAFe{~$goMsnkEO~+g zovjbtL623U7M#1fO}qw-y#~@n`wO8wI^YAaTi%kj(dpi0MWwbg2I{w$va~3BG?4Y3 zx9A)lleHgr5xt)R0@e40)7CVJ+90waJ&Ld9QTtiu)C9OxcykB{%8I1)w<(DtBSS(r z_YBRikHWk_;%OMUDwf1ov$uxbYw@Cwdeywx^gP})Ie(4XVPy*PhYSLQ&T9q2x3;Ur z{)Q3+p{FA6$*x(b%Z-O3E@MjWY=dk*(u1IlO-~uxQDB05;Ed=Wq&pQfkL4{&4XYWS zyyQfDyE1??an}?ZNfjjU(H+Vhbrri7uyd)q2e*{ecd#4sPCLG2>qa?x^h65X#jGJ& zeGkS$tQ*=2rIUuD-~X!)Clby>2u`usCb}Spj!-Z9Lon77OLT?l4faMC=rrkvY+j`Y+Oza$3?N{nuk@BD(o+2H5WJT5HL#fcCM~4&Ndo!gHMnr8(#=D3zFY}Dj9YqEyRA)k53NnIZ%mWZt62_9(ti#vH> zaMsw)^@xcJdUts(#v*|@6S8_1+|p!mhX`Mr zLfc)|B1zN(F?t{~U0)Tu_CB!n-KUkv^)%@#COm*iYEF^+6V-wE(l~b0$;j>Z@AB-% z5P`U+m_XY{4S+@>&`_qeb$pj8T`zuKtJCXNGkY5ZFJ-4>d?-RExTncLfl8!R#l$Kc z%2lxwC#hvWWf30R+Y4&vY!>e+?fnhtJgEqL6_C;{?UKisP!?Qr^mIQo7SH+Ytp6go zS)sFW!ZF@+hkMf^{JT0g(VUI|!VbCo!c~fHTX*YQlKi^`i`*DS(aWi6(vUOsQQ!NZ z%ON%B!c9$Scj2FPw$cn9>4TRYmS{D`R|+JzHe^NJ>THpdyZ=;z5qLFKg7FPHJ4`;W z|ENrjEXtHgUKOJ+jCq+6&H|38i5qPm_ON4dS)!+-r0bk=B=G(n6GOrW~>i%j}(S)-jZ z+N?KS%dc^q_?^s)W__k#r~hJVidP5k0O;`BGGwE+d|=(PTg|q;SmVrBG{Embbmdm# z0Sy$^CxQup z)UXvq=|aHYYJ##4rcs+ctY3({p@PnGttYXUn$gAdAyRbpemmU=Uth?IB-J;Kuf9Pc zGTKE<7Yuf;v6aBJI1Ke`9-)5?^c_t}c$P+eyTt?gtTY^6^jiiX8E|v`nok=UpQ^mA zD9^a?;wRB38aWT1C`Aj}4~5(AsZ^CZax<9NmoDx+%W}@OD6Y84)4kvl+^nNh^l;l# z=fwU`Y#8YfFW5eKek|tT;GIApJtmJn>mz;MNA7kYx8ch$JnCQe)f&hHXnBgwS$Jr2HSUY)^e$S|mHPm-`_SVU(e#k5AMHO^>v1Gx^s zo+u}kQPv?gBC+vRV-SFz!ry--rtt3gaUv)*6{3BxjV6yI#+9~22V=>_ROpX^Qas)u zSveT>#EuHPHx)%(K?ojej__C_wt4JP6Xd*-dXUb>zz<{Mmr*J74%R@VQI&T^E zxoYeRN{e$W=Mt^E32g!bYmC5$YO`8zK~4763^=&5qPcmgn|Ek1Y9Nu3iJ#42jw|Fc zCJ#ZcV61nH1&mKx=R5oO){Ew$U_O!*qqrw5Fq%vsEDeI@23 z?j)`dd8upGUuAY4OPTzkuwY2^qcT0rX=d4GGHG^-V7PNtWeZx1Jnny@i~qBVoyS+( zPnu6;Ob>kp!;zp7BjdjDZE?&n6kuOTmM}O-gI0!ABa?qXo3c;Kz-A=HbS}9lrv|b> zn;%qv?EYkM=S`aUk$-Rbx04({;pyI0MGke|?m%dlsq#XKF5_YYH}Pg1aPi*+J6VVw z&%t}ngJI7tZ&c^!WR{=?d<1=Qy;6PUyTX+2l)BnHH2v$$g6Spt#z9Cx;0soK&(vQwIMg z7X{S0G+-(|53E90C_P*uN`K(=m>lQ8c*sPR`9M7wNw{ac9&(a)tdk~j{cviq{Dp;d z?`8H-#sXg#P(d;T(&6%VH)$F!7Y5nRtT$~simsY5V)Eva=&(9ECEs9C^3c&kA0Ub& zk|VyH7TGIm`c=7aui~#6E^|H9)^CIkzFw;-KU|R!NuRHqR6Emj^oy>WYI8q?Ms8uV zbLL>H(|pqgDq7;IDC#~AOE0pYyB`eIfO97PK0ZxJOr=j)nu-TtX^hfG-e9UKM6cHK zU54cB42RXR+PTLy+UQ7Xp9j%VHRe@wXzXn2=+1TffPtCSshnmR?-SEGdk)6a36F+|+d#yq6T& zmTo`o9r4Niwx+H-CyU?Nai3<8g5G$nRohml?ug0AP=gG8t-IUw0&lnRMV%0rTN64s z*K;YEMUb9rX1{I|i~N826PhtqkG`?_!hvy1N^cqqmQqnnLdq*ko$i!1&pdl!`7QM0 zlFFw~y-y5xuj{K0%z#E2*U6IcDkbPiYjK!rUYuNGr`nTSgAt}^P>31E!qwDVZW<_#$Ia^t z@VjHu%CIFvk41X12;^6FA`BV0j1iccETjp4`N6iKQ5m z))!xiyB1k_=vRuCPA+~(kcxDWip`pg-e&v12RUa{ukyYDO*5lm-zbYXFwc!RT6owq zQ(Sq)^E}jKI8&Txdjn`1&j@3Ao9K?-u8*^CWT|8Xys-2k!g-TxTnWFw)n`*>)2^R4Y%b z4c&4t9X~3!?_TuXDB0P?Rmxx(bk*^P#&l$GwCqFr4?p($hysnj{MRnuap=4?fNRngKzRFu|QLa$eZXbK0jpdcpy9v0M;0dkPs$(veS z*P6(J*T*Y18NPri7bBp!D6lWAl|~9eqGW#co8AfX@3^e;hlC+m2|}n#QBRE`b|GPs z0=go@cy_E316hu?2p{A4=5JFCI!~ZnvT>Pg7@edTJ)&5FM}`rJNZ?+J3r-K81bQ0D ztXLS`-DvvRvavj2b=dJBYj0x;H?ZgaIPAH*SaKR@(Rqs zfac9P+z@;Rv^w9LdO}ep#aAUrO4~S0M!uJ*j51K-B=#P<5N~?^<^P+&=XAS0!RGS( z3=dw&?om9JDaHEdB27XIl<4h)o81dyF+_99zh$s4Mkx2gRpb4|r6PHhk z3KgsoB8P)!l0N(_786P(%>WS-(~2?4e)0lHA<>dsSTah+(~iY>Ns2}ao6hiKQj4K+ zs!0~;=*NXcua^%G{8)E%{7igum{3!610Hhqh}O=Vv?VZ%4-Y|I{jC9c0$0T8`c>s% z7qd|wnN)kh^;)J@s%AQ?DO6?VV3zV_9Cg#+>@I#Su!3)d5tFE7R`>@;QfCFUgl=ca z<~IVTlh=l!oI9C8n)fW>MDVY<;m@29GTw7aUXnINLypP)g#JCT{rXgWW-Q6aQ=u}k zF>lTU454$E?=F|G9jVu!;H83_=JboQ)9mR|)mHv)5Uj1d4WO}=!blTMZRb{#L5bKs zirR>Sc!_o=I5zW6yr!XFnxI3X0p1!kEhxD+U2IvtPW)D0$zDA#s-5?aI`evvGlKJ~ zV>}q~zTdQ{w@+sdj+6N3p0839NQ~0{alxL<7zWC~4!+5P1C=KKOR9Jvj1}5bLa~7*%PLQNr7>;b4=|B2qRk$Vcke+z= z)XJN1k7gN16dOu_Ua}XfBn(L%QQ&OCUVMSY5pR2)6U-q5g+kRr#TY5=rC-&3LJQGd zsHefre`r_8e##>lyN#Hk1s^D!({n}=G+qLT1861dT2uMP^wjsZM3?YKIJgjeh(n)Q z3Y;}Si!t<~S5O(wz=!F+7bV*MV(Q%i(NDeM;Q{@0Utzk{v@P1HxcSy>KQXI(1rBcp za>2^y2RAm}fA8C#qaZT{CuqFuSMzSTalt${llKoonpd*h!0QB0XwlAZM!)wh=z-$p zh57BoIl@62uPOf!O2J!H8gI$i#^gsbF4JGM4_xs>wyJdka++22f+Gr4zV15BvSoi^c06jM+Sq1 z!V1)dkMlbl2+`4=DBBDg&v0NAzs)iy!ZxgiwFLKETy{w)-9;a&5x1d#_s_T?0n+`| zBDA>-l$VK|mqLI!hAM!_&WbIoW^+Ms(mCFs0?d$&DiDFRstzn=J!8c-g9ZG9oa`^~ zB4W^Su}EqvcOdBX;y+E#CHp2s*bO=(=2HK~EHUo7|k#8d%^=X6BTZpWmR{=Cx< zmay*M&Vh9{0^z=+ZKX~51g}MjytC0X3iG=BPfHaq^Ej>J(OY{N}VDtBV90$%gw68i=)j4tl z1;qpR;DA@n>Sh-pM7_IF9rXCCtP!Th*R6nfNwHS}z^o&Q@1`@sw(`*(n5W_Ht>6_x3krmuj9@zGh5nIx+X4VJ zBCWh*SE)>bJ~h=_D6vP&$BgLEKd4IleF5h?Z;N!67-I%J`3O6;WyW587(Tb)58TiJ zkl_6o_C~uSKy?q|?Wp4s7*+V}L`(_{%nMLtKU(gUw=zMOXdOf&VGKUBQ!d2+mNd}} zIPt-7?h6G^1g8eQi3Gm{y^Rpj`5LAO8DLCD1y39leGz3&jo&DPCwTJxi3y5jpFRN! zQ?obrS4B&~)FTN4$+$2jB~Nz|d4 zdf%MpJlU;0PiC!Da7*i4pkwY8*B`ORDOVIM)e*!^P6XV1U4cP&o6lzr#$ebQ;gAcx zX5x)?5H8}L8l72Y4VyyUnl3H~nYJK$A64fG=={_#PC9a~u)U%xF_9tUY$7?)zh#Qx z1$W?EpuestVQi29CPJPD%dOK45&h$l-P3EercX)!Dl6MgudQ_<(fr!5a`fOX*H7Lz z_4TQ{G9Q~$P0|I_{0_RctjyFDWj6L=Y8m^Ji02Nb2y$>~q1dIXCkG`PiwpJi^*g_E zng@66MBR6udajVLH&gjy$eJWj-WXakP|Ht;qgjEAWW)%1-91wBS6SC9SjlU*8pQikquwW2+P0h9#HoriV~ z08V0F_(_N~Y<0yx^j$nSz-#3SIB?ZA-U(SBLwWH}8_ zW$rk=D@g*a!4z%`;WUFF$JJ(r^(Vo8Tche{=ot^zvB8*wFfzF-KXbV;o}E%NGgu_E z?}^_wd8Y&uemO)FVceMRUQcX%6kNZT_H@foeCts6Y*J6%CDX5~f=V5lC;Qm!Z$ZoY z>(Wj}`}G)KtLlSInWJq!0XoQK-L=Xw3@_fp4<=unKIV5)pYDj6Y>P`ON@*}gt`a$J z;qM0(Bxu1?vb;*KIOfJy>Rx#`%!z^Hj+f92X1=TiQ27_`?$VOm6QgK-@9el{X--)+&UBjju^pircFAT!%wXcM zg^ely4NZJb8q{-Dd+ZVM7A`ns%U|}`PaXQ&e{KF!;fH!gMF;AH66#k_Ea;Wb1?kp5{pP+G4@&!v%Um@Rha@4toy`%;R95;6&cGP-;@0?k$bqJkudTs{&Q(7Tt z6MOf~20gr=OY9%Rngcq`(vlM$MBgWjR_{zTrq(0s6FT0_wSn_-z}v28Vm1W)u==sv zqDM_9N4(7#zn!$eXC+$5wLflq3Srw>M=PsYRw&J! zVTbS6HZ>e9LW1JVsxNh$)m?EAb7q3g9x2VqDvc=`l@ER)@QBetX??$+fJw@*sg@4wp+vzw!{HekvO(dLg*ZpMzKECU> zdU7a|Ry4r;rbu$r&ii=CBDnuh?=g?AyO3_D|4jNH#+`w6S*ZXq?yo1YP#zTb&tA>D~RUXpB#fQPa0$pUlb+Vd`A$Fby6`ioM{plTpa~ z^)xY@O?+ws1+*UX&=onRG<70zf??0^ay;70BtDKzh$4cSKo#kxmsOT2b+m!?^E~KY zsNV?PD8hHO$?aNY>6_Nxz<(<`g4{aK!Gb1hzyx$Ql%K?qUX;d@`BfY(V5K*$)(X&v zS2d*|_*T?`;*90VR8f!&Y-f9>1w=F8QV}e9_|-Wxa+za~6Q@Ib+QB;vIYZ1Qu>%7M zUi&HG%#o^lz^{Wm2(GA!reRCh^LKSz6ZEJX!hMpr?wu>WB?URC*zkw?7?oGgpo*lO z#991kV{n*ifuoe4>u(icCPcF=h$RwtK@KE2o&g6&n4O^DcYWK)P$_%yiK!-q?Eb+G zyE-zL@Ns5`qJ5Y`+XaHUwGk<)tfjQCLUu?jm zBUUT^&gEem`p zekLOK^?!fhU(5Rc!6N!UsMg*Rv12CA^n%MIDuV$3(vZS}XdME~U5rrpEj8T~{=-&V zu>r&Rzd!K*`x;pFELBnX1fO9mR1a)x*q`6JBQ7!COa}4xxkKGjuAixJD~iafxV|9-l7Jg$bAS>Q1qR`r%__ zT94bysnOJf?v;t^?QUE>GT5ulW@7r8*Fhj<6tj;oFE91gZTNv4eBUXO%cMe~)Ut=8 z+(tKc+`;Zj&rF&SoxDY%amj~koZ5WU=}sU1@@G~IYxh8%*f^74|H&RVRL}G@bfkNX zIy@B_%5U#n@1a*T`J6|ioCD43S3lz0_J)I^qU9==hEY9aa>On~aZY6|e&=MY&!X+( zqtpqpf?U2zezwYs43eG(dIjSwbRzcA6iJmGv3?%!Yf_BrBCc^7YrUtw%e0_>hdbfk z3ulpc%Q^O&i|u1KbhLSzR;$Th48+=NqmQ;f4+So;zZl3ZpzDgatMx;0Ga_?^Td#dB zUK=UbXM;-*9C2?fpz?pB{(8(A6LT2%>*Gs(6KcEY+=bB_I)j>tBuxJ~C|vsVO%1Vj z%T(nMQp7X!ron`6^&PI!8kl~@ZQH5OsS^`lA_v_W>l6jJP3jfKq(_=DmmVi4;Y1ES zF2myK*IZ}6pTBwUNatX_tZ0_ui`C5Od+SK)-&A2|Lh!K;u&KRmTZ4w!x`{RO_80-5 zI(wa{bbf1<4wATNcFp!Y9rmu~!izWWeV*UgtSIMBwA+7?bhijp-9Di_wwK7&f9 zzoRrc`$LmFHr{q`a^5`K`EL5|)v})zo`NswEWBsXl`qCVcm?fj^A{=QU6H@q%vm$Z zk(2R&^A^f$SFAl*>>kx^`w;dU3O0T+XIq~eNz$6xv<-IMO&idRTe%CN_*j}1f-5Q5 zw?x{x*Oy&U$?E3jK=*J)_Hrm2zO+y~Y-;|<`}@bVxyAf+I`jEd%>?b1&&|jJ^m33} z)Q%6|x0JJ7VDTw>TH{ZTToJ-84ix>ENTcaYu}@Tu3$wpku8z=uub@^jDFckgR43_K zKPJUb56UO6-T-x3=vdNU-3iPHGa);eT)-86!XEKTZ@)^87O8}~zt6V+&|cvKKU2ZY zHhbP|mA~mu-Cwp$RT}rT{&N-p*ur--pQw_*8@0HquQ|-(*$+F6GTDOa-ceHb#-Y07 z_QD%h>y+!6MrPkGEXm=hf_M3-UZ0qj=#3#TY@C`W=9e}D4ptre5n}KdiZfdayRkOt zpWCpYBoQkKDG`>`w0i#G&87R@0r(%k%8zU9a|RuJ!v&E`PP}2?)plt23rE+fa?Yr- zMB8tYN>uVp26tRpP)B_KOjlIf|25lheu>VbPpP6Mb0L0=pFzs|XTDukO<&f#Lc87( zTfHKd!<6EUaP-#r?2E*hS+F%T8h6U;A#yD*z%E(Ze0SX$@iToPcdTmrJ>Rak3K6yT zZoy1_LlN>_kz@2mbbX26LNl)l=6+_Ao^Wn+4aG@^3lbHzg7FmRz@8#p)lNrk++#Ji zEtP?bQ?ErT`PaU-1o)yoHXQuxi`MM;-x63~506!Qcm-x+PX99%gY<0=nXL>I3?KNI z^T(N(POp_Esgn>A)b?*?esd!=;i>I$>Z_Y?cn@xvUo(9r1kU#N|9oC+CPJ_%zTkMC zTn_1=wmkTSV=}EqlMUW$_S;w57@oSBdL-?GI67RzZ5<;j(Vd$`9k#q4v9%7!p%6`o z?lRry5+$K8k3VXne4gyADcHw2bs~E@!y8&dF_%K;Rv`ODNU5P!!*H?RDO2}cI{4=J zmqTfOLTJV7ABK$AdQvGH3PG6yOnueXtpX!U`w{MdS@;Lwd;*4vFcXL;N}oo@{kKJTvKPw?6&oIl2VIg!%@-qkG^FcpY6L^ zb~k%YgHv_wS!oxnN44k_vpj?`%e|DFZG0VKAEMY9V$WZVZ8H>unOdJ<&^--_E0YVA z)#>k!gttjgZ7HQANu`$r)7{g&To1 zPbt8Q8JMh3>x!~;akAM$U8b}L3SSAjRV^rZ`D~Oq>vSq)ubj2NlFV(S*SGFb`n;XX zYkNLwR-XKw@J;wu=n__JQ{Oo5NpGTrwwn`gQM_8FbJf1}Y8E=3uZ&EaS7vt70u%IDY=W_m93a z9+>+Y|3Urvl^5by4^lQGCj{ZTW}C--B38^Pb|K0qMWG3z&B-r2UsBAMVR7w3p}f&5 z-J%rUsC4C8D0q3u4TM9VmI4z0I?uCLvcPq53i@VXQtP?l6+&jrwC6u?U&t+hCQfd> zsoPxl6p*cLO`>hD_;;e>X0B+N52IMXrL4xjz?wcb(v?OXI5ZSaAXc&p!zXWzy;mRj zSsiJ6U~i#TsO&6l(l&2LS72`!^3Jo#%=!c01>Q#5b4(Faq&Eb|nmFry(c-*caO+m+ z9ZcG{Br1{gfZLVzh3OxTJii>32$oLnypgET3#!}g80fd$xRY>*rrPS~%zTdA-t*2O z8-M63s{xBhS0;N+K9pA1noiPEFuoDvl{;D8Y!6R2^YY?Okc5S8U)uROJ`U&n{8Rzu zeK?zR@NTNPX4mLv&EZo;)Rw(LL&fvXMAp9XV57bY&k4`Yn7g;+a8lMBbUW!?%qC=s zaQs!;ojT*us`~!&@h~NJVDsB$x3UYy-EZ0ye80FVGKxH#DRbO( z^+GkVXP2(I^4aD%-}evpn{UnuSh;_#hXgQ6DrMVmTD>iKZ;cD9au7op*HZP6yepNs zj&r#1)sDP8v=;6xZ6BhHlOO&Jy)Lu8&k*%1ua`^$ze*J2kMl|F=F;U*&HL^ z4)eCcW?DDwE#5)Zx|Ewy3NrqTL;FsH+Wx1sIg^C8l?pm~NgicR5=un@% zne)xwzT8LidCkQ#?$pn*NCRIPHdZ#U#UmD%b%F+B_MhAfu0PZ7^zm7OT}V5UDo=Z< zE+Qt>@a9amx>1EsKHaFrapcn+ULQ)H=-(wb%$Lc-F|}gM)ein+W=Oi zpJ|d&zkuXc&0x{0dCp&Exh8SYa1w=gbVDzlBH@e)_u;&A#XQyV@a*1kAKYtlKB;Jc zT{HC~Zmc{aF4gbH*R8c=vn*In9ILhnPCn$CAkGbS&TY<7rku*+n8ZjYv(vVAbZQ|j zhm3<~$(2N2#pKl5@8v)qY$6jt)GSz05)vC4sc-!vE^z+Q7pm8(DnxI4fuzkIlgJ;# z^JK7Ud0gXAmfyg+?QyTaiklQ_UOIyFQC%_Ay)?%@q)jTa5z{z$1RspI3u&u}pTJzQ zH@UuyjT-OQYU6n;U&@_bmjjtz8;9uk(fyo`?>T-4O&ETEztTq@CVS%@At7oAx6T{d zvWACQXPInQbGstyWX65s5k9%WN2PpwlcHmn{tYA0;P(-~ij0DA^@sjmc|W)p)}{Q7 zlxKhA;5>M6_S!G%=|~lT%=26<2=BN0`<*|?v{!vrGxb!#3@ z$n`>Bo~+gtcqC!2;___`!rh$JPSJqpS;#}bjzXG3MKM!Vpr!d59(_ZceY)< z+WEKAdiMQFV6ac`PfdI&q30v<_p?ddLU}F-WM9cZ3+*C@?v^FnW?#ROIFY^jZSVR! zNnn&NDh2VrkcxUS=ht-;1pz3JNXq(kQ<~82vOH9~oChj5I>Vw*?Z`JafoBQf`Tijx zp0JPCgB;$bkXf45qia}??-mtk4Tl~K-q&fz-Mt`L~Yw!H}w7IzK#V_>te-mgvNe zxU%@I`&bRN7cS$PkL43_9JlJqdHEmY?Lud)?}yRW5VCvQUv)Bs`Ruf)D)q(`<{!3yx*oj4zd1`R~d4qi?%>G9!3I7*T}ZxPYo zSE%j_u|c_83~1H9GpGl}(0yO_rwcSKaS z(z*y#A$7#WeFs@A{~Bf0?zisybTT|aO;wP5-;x;sLdBlD+9+Gg6}X*XKdPiFX;7en ze8>FP6q4-oTGwzqic|a!k`l2}5oJ6270&YBVFWfp9UYdC*`Qx8gJrL6U^}jnx&63D zrbi+imCQ5fz312Va|JW@O#Xsrr|ay-l3tL{-a58Za~VIXo@g>T114{yB4dE5`lT7wm0R zkJ%k;h5d|fY)koks+321-Vv`ZQ`*7!w3($Hnf>+rxj3tSvfM)kNIS?<#B2m+#cbswi(;vw zEExk2+I40dA&?y)y*dDa1x$%Z&0PFz9miITDOJ)O2Vl$0=KIdbapeyWjY=zTDFj_u zW1;Ad`J5DZJ^IfC0kMD>4Zh)@*c$6$4vOWWw(8*qixj!<%(axITfrGP=f>O2@@h;VN{t^vb*0xTeFX88U(FA=D9i!_pyx_reEEE z_1z>jxhGkyG^u{?Ds2^y7*2g%xS}O`WV@=aJ8*0FP5M>?Z++a8ZaUliVf!l#BfCxH z9HP)6k&iVR!oZ&8(6#xiYcdBJu8had-?Vvej!Ke{zEOwS01SieW*7yn4^ahTduHV=5hdTX9g4NU3uXn_3(Lq{F z^ik4-m>?^F&^D#?2}B(L35s*2ceDM5>^{cii^Ol4Oe`s=wLKE=xw&vlHw)n|pK0Q* z>)O#k`Gzj^xsKZ5iD@lcU;Rn>6$8%QeEqu^gz*<^c!m@H{MrCmW<5F!l^?wx31PU5 z>r`|iEsxoR+&SKtzm^fw;d)lOh6g3W&LK!IMm)Rq@UYK-8lr1X?TvPAce|$1#C+Qk}2JA=pzGLan_}#K6nr&>>9-TtYJ}db!5#>HXwD_j)$CV8| z@KLAWTDV?>M2CR zI_PNbqM>2V-WlgYfe{mysQLqG*YBcU^*xTGRbmc&Ki=%+le`WC?1J@~5=9%mqC2B0 z7b29{LzhOUpzQ$2iIc#JGzZsryZXeo{o*!t>SJ0dc!aqjSIW)r>5Z+^+s-bO{e0Dy z!dUnC_sL<-QMp|?fyXcW>JjI<4%9i7>|5meR z2y%CCP3F!v951&Ak>rXSuI6(bc;2N`c(qNTniBJ{niBea+(Q^Gek7D>94wLnK3gUM zxJzafm+3Haf)6^%PuwmDTaIHcCC!eO`=m+ktv+3lhDRDtF7`k5y}vyL5l{~bO=kM_ z<)aIpv4hSvW&Y(DprHP3Pf*2lnfw$5whw>nWE2my}b_a&muQVj!JeQ zd4ARu?Q<88j*pK5*@Bb@UbYLfV^ARu|@j>Gbyl|=PKwKN$O12wET%g<^tyh5+QlgESh)-9ClD9;IUjC7I@}!9z=uXezc%rcaV>4Sj6JS9+c>yhujY+&N^yAY zN9Q#amg8t##Qsa+iC`<;k1PAbY)*^ea4WKUyKs z$GvoQEDdvy&SERHC-wv<-1a;(vWR8?*e#yaY9<0-C}v52<`hcgVvVbvEh8n=qgBmC4U7Lc3jb z{4Z3l3(N`6yVtNEzTD&0{%Upq=2&Ifgr|wzK+Sz4Lo1O7H&f!v?=fjBx7}O>puViu z+wDsy4(jT`_+dEi%R(AEsAxr~y4}>?xrAJ&4lQ|hpsn5GrE@}^lkr(;<|sQRK-zP- zgn_4K<47qGT?xTOWKcw6)144y2A#M;p6);Pk!e%pp4mVF`@X2fxs-oJYDOr<# zn3-veGs}GHQgKWPaAl?ON|l=j%H4#o>66zX_Q!>sz$*NtZtctGrdlpk&yCa^Bx%zq z{ETer{|+xU4r`^n_@ z!`s%7X$RVol}C3?O5-I~V5ZKGj9)bIlE-z-Fe`Q$34?lqOFT9pdnS`D;r%6Oz%`9U ziqfRBJHCR-0rZs)eM*SHplnvZB6p9g(V7L94xWDx`K^B2-oY0~GO3PM6r?PSp-tqe ztx7arb}hOd&!Nv{(K_n5jl-@khH^)Wxv=T@XLiOG8Lt#xDbWPRt3ohflyOISk-~=c zczxO3;crFJP#*M{KJz|^yj7~&F4a`;u9nS6KV(if4(9##uQk%wA}gFKbyLjn+k=Q& z2_L&|iIg6o7}gzbA6i?eRUDzPfuP+3kV*M7+Eb+cMIiMoVaHs4Ke}e+p(;>artaeM zW=Y_;ayTBtX0Q~|;+1I{jr(1bp!`i{?Ae0>(6LYkO|XD<$bGbxP(aV)or(~j!6ENW~-ZTRWV$-Z;|qzhMNTt*)xc$TnEa@rRrN-?Qg31 zC2rpg`G4B`%BU#UHe5FfC@5@2M5LubI)+Z^6p$W7>2h>vBsK=9bjL7sDh$#MB1m_4 zcX!8m#{KEucw(I&=g0Z+xt6Yh<-GH}_xs%UeO=dmJ@ATbXHp_P`Esab*GDRw!wH0C z?|ZAmge;T9Acp?U$Bg}(N*J~b{hs$X=YJ$|eU-E)f9SGU(7`syTDr#8Nf8=l)&fvI zahmK8)T}}A9G-fKiBB$YzjfG7d8ZxBG+R@TFnS7#9Kr$IY#)7GD`Mj-r_$zie(c%s zW2bl;v{3&gc0>^Wjp`I?+r}r2fka~OvmkibWxD0P%?wECWc*2SUF^up#MKA8=CPo$ zJuT{K%27%qAAJpn%a#{7Z7f$(^-JK9e+1jRM|IO`BnRtNC*WJS1|SDc%fdL0WE?G% zM@ryL%crG$P$3>(?|u&UBYZNXp_H21bjz}DO2T5tB(*rCmjlvg^WF-xyKC`2GkXdC zSDcxE6)|{aeS-e6<@?1gc@T;-)=Jw@t0#UF-D{4CEaQW&Pq3?$D@*?VR_O8sYh&vy zIwm|ICKw1ow**M5(F*2LLfUtF|OZ3x}$i^ z?iqRd5_8G6qgIjLhuBi%vWE_B*@;lP-PN=A8ZWS54&7d@!!4H#1t>C?sU0hlU6&?0 zqVJrRNbIc%{+WNAD0+5OKWyS2*M}FqShufrMUT(iQ7n3=HEP{Mf9A1eWDEPb`MZW4 z*j!WrYo;z$%g_hCOc=KC=(18(*#4@h;T%sLm`d#G-LanQmK%@cpd~Lot~2xriAgik zGLJs)e#Sqx`PLjFS835h|8iQ;e5@V!JUF_S`H(f7!d=&R4yfak5fqKYO$AkSvqR(5 z1EjM8ksm!`(J;;Ge3`)7A0W=}q5<&L^_zV4ZnE*RQ*-LuAdiyuy{nY}&Z8&Qm25&Q zf{5hBVA_u~7N@l+Ya_*buh2o8GrJHp4Zh?!tJbL0*MEtyllLrhEbeU$a~k!vn;I@4 z)}58_^<*&;@r}-{h&pKl(RfwLp{78~shcq>U3*ROU7bRl0o5sp$DQ?GSBe&3=Ic7H_3?Qv{2}b4s^>b!97) z#&6%7XA5q|xxn`NGamOsV-nkw>iwMwg{vL%4LirHbEjv?_+IcC7{IyOvQ>wyOFJ{( z-V=BhBh)#m3G?-8uZp!|LXEgB-vz&XjXcN-(PxV_!n$%@qw=8$`FWTQsr3oAW0|b0 z8mgTE{MCLN4WLUfe+Uc>W{z44uJK5f;L+OB#i8Nv!0mmiYK>bF5xVT zD}Ft6UuS*V256Nt%OTO{`)<=4$bZ+O2y`u4cCjtYpp1taFBrC@Aaia@y9@O`+<3F? zRdsfd>a}ZyNyaeXh^$q%$~z`19btCEs)FfiJ~%Nd;eLsg$Ev+Sdg!>U%(akHsgt(o zS%!*O8O%Fcb!h}fh4SGmgRrNZW}K!i3^iExVPzD~o%!$%?75>PLMkaFPQVDit*o-y z(ZMD`+g42~g5GUo4Y6i3EOCz~eH9V5vbZvs8&w_U<`_>%>XEH&m1{RKSDOrm`}C#- z53_8Q$3~QCYizcLhU1!KrmI4AY&~q5jO8OyS^0_5A%&JspN#ZMk|f!Ph1YPmr^{@2 z%d_m&$1~Fv)lt*hjQx{7M6&|rK|h$pFA)9Z=04T65g961YPsddhI0nr_11XyS6q{JN-7v8uN!&kpJm~BmLx{m~b0F8=n|MP3fA4#- z*6hf$>Uv`Ba^n>9B0k%>dcVQ=<>kxI$YvH3%3vE~ru`?OslYQKm+iUU)Wha+wS?I% z9sKIe>BMQ?gH$x=i><&`BvMgAmDf5x`j}=<`nq4nSLKVn_=Nb54Wbb8gnD(jAQX5l zuCV$KoB%~6dG(EO3r`ea+c$?{Y7TZg3mo0OAu!_2(X;KGHz_?OQZtCbD%t*6*a0i& zOMH?69s?}}cV^nBUT~z-gC_fLfLXkCv&-;9GmE#`B!E@{Xy+97AAGPW@)o}8;dd(< z%`I3qt%q~;o|kW1r0MmQbGDXb7g3?7v;Tp{)(rKvKpJ-dqjbamUCL-~rirm+i-Qnp ze0C@{tsPVSnINlP(JD9L_3u7+e3vBc$ONa5`1FXin2|_%0sKq^ZzeU_@Hi{DIUmI9++14Pf6(U+BxWo_M~feQuDpo2waqxs~<{NMTO=tX-ts9oaN~m`sIi~ zHR1&{p>PxWY#QX*&_2$giaP34Sfce2O0w}_-j-r&{pmJfnDT&O8YKLOVJ3`p*;f9% z?cW*ZL?*!tX8wFcvQUX_to=OE2ZAo_gDTb&yE2BroQT`l z2pqw9eQ%jGz*KTy-e_|8ru7aDptBSh`>#DA29HRjkTper*u~^M?te(Tn!;Z=-aWzd z#XkkL9|MUC|HMdvPUCh5s;G?ln`rO{*{7H1o{~Ut_@gnF=$=V z{tudgTKUIbwuhbsA*yy-<*hXAtGvr&6`@E(qx7S&g zG!m3$Rxn)(WnPBTWJU7?Za2k{6w7PO1&|BUkw9SEdv1>PW1R73G9{^-CI$xi^g9Rb z<$Q{ED_r9}DInnio(i!C`<{!pKIX8hd1x1*l+v)TYRUZ-Ga&9 zqjGI3;B=38=;$cuRwu;&V&eLDcoeEw$Mu)rnP7%pWnDAC=_N zCWms78|Km3&sv%(el>SImM_7xPnp`X0S`x}Q4O^801Uf~Q1WbndEW~UfbxarRo}R+ ztR1)A8k#r-r0!!A**N83K`py_M_cTN{g+4}#oDH4U%u8J4P3UFsdQkWk@UJQ=P%4i zk_oMn8WQf2+?llh(o-cPW8u(ivh}SQCP>J;J(bm!T~FP0@~L!lDrt)bw z?_kNRYzzA-6R*gQJB&tjwKjUisv`5Hns_;;U3nfl#Tw*`0v#El{MNjE+u5rt=S|IQ z!P3gKozeD)R?aMA)uQtlR5)607l?-v4>@oP#hz2!KH8RbA`xq9~ z7%QMJ+lVe^8)Yl5`K+e{L2`!JSvhBVzfmfjO5f)Xvi_$NBosalo!i~7X@98DdMFqv z0lpi7K^X_rHFK*_S~@LTlx@2T>BWWu{UE}2=kPVZR9!{pln+?C$g|(@te#|ML$lS z?_NbVC8nT#7m8XsXnLxVtt)=dz<`<2`$h@ttN@K)(bqZnDrVyqjH}63o(mOqfhZk* z=ikdfBK;Rjr4hYjm$zsq8*J4Z*uw1XH^xQUMQ17=pU;n#3~BbKv+(f%3#4E*eM z*W!qAKKvjY>H55mjmwWVv9YbVA z2cA?hu2s8^DtuB%e~E=QqbkcyXFSSE9AAVwyyW4kg7>;qoyfMB3suDQVHB_mjjt%z zPe!uao4zhX!?8U5vezFqx{79bEFkg;rP55GK|1o0c}uA8t?10A%#(9>3y9P`OG9MJ z(tzGBg=n@vSkM7}jjlInI5^2<>wn=EK*DR&sb;t`5<_wWG%_^$t}nUv*RVA~@;p9h zhZ1wu3U6KIVaO9HegY&M+wwjZk~%?DWh+H%C~#a653S2R!d4P6-v(JoxD|-&9^g}8 z9`u^3Uv3G5tV%+?^Bbnb^Cdlxzzr}9pO$f%- zhsr>jzHinT`&%3N^Zf_0*^eeIFY^USSD&TXH9q?wvX-HqHgnuUtHeUf~+|_R*b_vZV9*q84N)WEof|`&t}U550C4`^0tmpvTGFi+ab=5(QIt zA%}_(>F2X=*E#0T$_HA)9kE9IHJd^N)2>sT_>P>)!nzAO;~}C!kF6lhT*$RhYn?nN zZ(;aMB=NR5S5r9C+H9I#Vhq>af>gAH?y`hgQz+vYE5v$eY1X2=QjP+(tbJP{B5Si% zc@O9dLQq|X{>k>&z=1eneJB3gq;+L!49V}?iBa{eoD08t-Fb(WxFatK$cf(<1sEh> z&zFJv%4MD}7zy8HBD|$9%80v9#>Y@IhWHa6@;3bNdHx9TZT?$?c&N@qQLV^u0wt2Z zO}r%NzAyRyJIMLNA}uAWH&_w9?4xWJ%iis&u4ds{4!VX9xd>Z4{C!=fF=2sAXhgc= zTov__9#EP(i_@3dB6qn)aTCNxqsQ#z>6v0!Wpt@_&LS<~=g9u!)h#fA;QU5x^i9c= zg{rL)QU5@<^gbsc-WpFgQVj*QKUe8**n_W9@Yn)DFBZ%IWmU8gwo(^R!k>K1S9VtS z#o0vYhVC2ouer6=EV&0Wn>loD;(R1zVc@qlj#yES5Uvl13#^gxZ}NQO-GVq{*0kAZ zds5F(d^W^fei*7uW7@G)OG<5&+OTux`aDOXt5k}*6Z>Gv4iH26?{Hcr+}GJ=XXX-& zfuh;@uzt0C6Y;cpue*|~xea8);##G7N_n+!k%{(pftJ7-*L7;&iQVX;Oi(4pqBB)cEq8Gn+wWc0h|;kC3a!@!}+nqdPc*0qnxJ*XU_8o(bmcQTMV#ReRpqz zqL)5V{abfF0D(F?G8{+-c~60lk>ElTV3J1?fj$$4~WJzkN}Ni$)L&f7Qq-0h>aY z*0B&(34B&|DfJqP;^4h_*%F%UY*Tuy5v|h{XO*$55fYVFk+nr$UL{{*1Y-`knrO?GB|1&#gwe*#&jB1t#FYsNGul#P`+Xo$8l{U3V~(>fIQr zMUUc$`@cDs;IWU6TQnwy5rAPxX~OE8Q7PME9%GA@$4P!)><;hEKXt%YpJZQec1&_Bjz1pHbF8vk-}gV+n7&^% z3#BNN92#}?YZP?eN7Gh@cG#s>xl+<*cfxUJ#71o^Bg@c$g2SLrd5hwWjbh+I8WZU*zxiriAtB`ZRV6*rVgRP|SLaP%y2+(oTA27zKsjxf*=Fg^Fy= z2Ki~ua;rVsFPK9Ts}m>U>zZdGSxljUcE$5NeqX#k(yXR8p)vJiZrHv-c(DfTG^WNU?(EYW4>cY1ek|JQ!?U%$<%gEdA`GDm(Zww--bI z?=QPj!5vv_m)_*LSap6uKCmM-(R{9Vmh$d@FZ1uP{MZ8jjm>}e&F^XPf0t9ng-rKe z|8fEVKRX#trcRX(og&httz0?l6WpZ2rz-&??E z{GVk}Ec(s>7_IJ*@5K5dPHdt@@L$VZEL88=#BjY2=w^N$V7i(tHc`e1ldnFRj}%68 zJ;1tXfDu08x`#(%=I};#&aX?F zMg8U9A8*9RUADxD_828XnMy1=gTvO02ik!K_YO)Q&Kx6PFTX=y(pb1Hx90qX?B5rp zoL~l5d~zf8S4gfT(y0~$j)7X7-ReAGYvs7Zq7yWsjfbA9+Rm|rg2_~Pl~yKC7-8?{ z&c^fNWu%c!SprOb2<^`0<2Yk5t1Zf+F>n?GR^Jt>y$%N)ON)ej2?(-C+n?;Cy#MPWJahGF8r!kyIq1=gkx@?_DHo%>F%BJdB zFIH#V3pr+H0XyOed%0Ou_GNo3U)@Gdi=hYLKw4SL@fOsPBko_jf$}dgMNB}+Q%6Xz z|I8KHag3vh5v3IQ+b`))MdFq=OP`oXwl0Mwx86`nwx|&>P`KpQ;10B=t@*CU?!(en zbKgCwE1EFe(kb}%-f9Xc#_|d-OcvxODC{SU?Uky9$(y7+J=IMuknZqvt^DDsF7*%JL8Un(QT0u8A$@5&F&(7OxwZMv68nV?g?RW@CHU?Rqp;)`WTK)M%E#1qbs zp8~qVn6t=^vB%)aIv#AyaVl_|a#U$hMN7MQ+cQoFxk)f$x3CelIwC|OGTMaY_uVmY zVWyTB%wD=ujE3X0i1W)n0c$s{&Dtx2I+a6S{xUO?U!V5ldE7@okGDa{Uk&E!6@rE^ zW^ZDKK^x3?*u3aT&!x_y^UK{OB3btepO2Fj55U~#Q59pZi^1Q^7r%m^Ribjm^t<&~ z5n-LCnYDLlvSJixBRFH)Tof`Es3Nl$L=IgK0XI*^>TT9widTTIS0ScORSr zc~teC*bPfZ#A)Npc&>Jvxrq-2cb856Y3P(o7(@b>DfX8)-#f;D-5yk#?LN`E{4nP}W`#2u>0v<1 zxzn~M!8D!6v`HA7UKgV8!#B+BSKHSrRy|e*JjPr)qZ#y$^kMx^+K&bicrkqTTN;Mp zkaa;UuZTsiM=5GLCA)QW25oB>vWp? z{xnrEvsU;2}}fKz3T>Qve+(~HQ!T`*mjIc@hV3nXSyz5&YkYA+LgOe*Eo z_)R(miXD6ko<``3+fwAs(sOe-D+>Ws;H%bNf~H78NP=3Ny!u&EQzP$_$H=2WWpL zEZ%69(|o=1vT2@=m1au(NhYjm69k&Ob zQmXYEt8^8yCF9L)p^PEurcR_{rsl;J@`rkqTVd-AmtjGf?lcxr^TMR?XLoo{uoVw$P1tG_@S|;H2P?L=MSy|xdHuZG%xtKe+KwRT@ZV4g_G~J z&Wk*O_0G)~*Z;NEB(9S3!xaJgv(~*o(-5S@6wXX5g-dib$Kk}afq*#C#vTrAVS-umlK|9=n7f5Y*=-LwA>cE^TC;Zj_$i_a_jOW=>3l=4HA IgyHM|0mR9T$^ZZW literal 0 HcmV?d00001 From 1ed374b6ca6b25e96a75adfd6b7d18e0be567eae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20Frankem=C3=B6lle?= <48800769+FrankJonasmoelle@users.noreply.github.com> Date: Tue, 16 Jul 2024 14:26:50 +0200 Subject: [PATCH 4/5] Docs/SK-942 | Updated README for huggingface example (#659) --- examples/huggingface/README.rst | 117 ++++-------------------- examples/huggingface/figs/hf_figure.png | Bin 0 -> 89368 bytes 2 files changed, 19 insertions(+), 98 deletions(-) create mode 100644 examples/huggingface/figs/hf_figure.png diff --git a/examples/huggingface/README.rst b/examples/huggingface/README.rst index 3d5653b7b..eaaad3254 100644 --- a/examples/huggingface/README.rst +++ b/examples/huggingface/README.rst @@ -1,3 +1,6 @@ + + **Note: If you are new to FEDn, we recommend that you start with the MNIST-Pytorch example instead: https://github.com/scaleoutsystems/fedn/tree/master/examples/mnist-pytorch** + Hugging Face Transformer Example -------------------------------- @@ -11,20 +14,21 @@ Federated learning is a privacy preserving machine learning technique that enabl Fine-tuning large language models (LLMs) on various data sources enhances both accuracy and generalizability. In this example, the Enron email spam dataset is split among two clients. The BERT-tiny model is fine-tuned on the client data using federated learning to predict whether an email is spam or not. -Execute the following steps to run the example: -Prerequisites -------------- +In FEDn studio, you can visualize the training progress by plotting test loss and accuracy, as shown in the plot below. +After running the example for only a few rounds in FEDn studio, the BERT-tiny model - fine-tuned via federated learning - +is able to detect spam emails on the test dataset with high accuracy. -Using FEDn Studio: +.. image:: figs/hf_figure.png + :width: 50% -- `Python 3.8, 3.9, 3.10 or 3.11 `__ -- `A FEDn Studio account `__ +To run the example, follow the steps below. For a more detailed explanation, follow the Quickstart Tutorial: https://fedn.readthedocs.io/en/stable/quickstart.html -If using pseudo-distributed mode with docker-compose: +Prerequisites +------------- -- `Docker `__ -- `Docker Compose `__ +- `Python >=3.8, <=3.12 `__ +- `A project in FEDn Studio `__ Creating the compute package and seed model ------------------------------------------- @@ -48,100 +52,17 @@ Create the compute package: fedn package create --path client -This should create a file 'package.tgz' in the project folder. +This creates a file 'package.tgz' in the project folder. -Next, generate a seed model (the first model in a global model trail): +Next, generate the seed model: .. code-block:: fedn run build --path client -This will create a seed model called 'seed.npz' in the root of the project. This step will take a few minutes, depending on hardware and internet connection (builds a virtualenv). - - - -Using FEDn Studio (recommended) -------------------------------- - -Follow the instructions to register for FEDN Studio and start a project (https://fedn.readthedocs.io/en/stable/studio.html). - -In your Studio project: - -- Go to the 'Sessions' menu, click on 'New session', and upload the compute package (package.tgz) and seed model (seed.npz). -- In the 'Clients' menu, click on 'Connect client' and download the client configuration file (client.yaml) -- Save the client configuration file to the huggingface example directory (fedn/examples/huggingface) - -To connect a client, run the following command in your terminal: - -.. code-block:: - - fedn client start -in client.yaml --secure=True --force-ssl - - -Alternatively, if you prefer to use Docker, run the following: - -.. code-block:: - - docker run \ - -v $PWD/client.yaml:/app/client.yaml \ - -e CLIENT_NUMBER=0 \ - -e FEDN_PACKAGE_EXTRACT_DIR=package \ - ghcr.io/scaleoutsystems/fedn/fedn:0.9.0 client start -in client.yaml --secure=True --force-ssl - - -Running the example -------------------- - -After everything is set up, go to 'Sessions' and click on 'New Session'. Click on 'Start run' and the example -will execute. You can follow the training progress on 'Events' and 'Models', where you can view the calculated metrics. - +This will create a model file 'seed.npz' in the root of the project. This step will take a few minutes, depending on hardware and internet connection (builds a virtualenv). +Running the project on FEDn +---------------------------- -Running FEDn in local development mode: ---------------------------------------- - -Create the compute package and seed model as explained above. Then run the following command: - - -.. code-block:: - - docker-compose \ - -f ../../docker-compose.yaml \ - -f docker-compose.override.yaml \ - up - - -This starts up local services for MongoDB, Minio, the API Server, one Combiner and two clients. You can verify the deployment using these urls: - -- API Server: http://localhost:8092/get_controller_status -- Minio: http://localhost:9000 -- Mongo Express: http://localhost:8081 - - -Upload the package and seed model to FEDn controller using the APIClient: - -.. code-block:: - - from fedn import APIClient - client = APIClient(host="localhost", port=8092) - client.set_active_package("package.tgz", helper="numpyhelper") - client.set_active_model("seed.npz") - - -You can now start a training session with 5 rounds (default) using the API client: - -.. code-block:: - - client.start_session() - -Clean up --------- - -You can clean up by running - -.. code-block:: - - docker-compose \ - -f ../../docker-compose.yaml \ - -f docker-compose.override.yaml \ - down -v +To learn how to set up your FEDn Studio project and connect clients, take the quickstart tutorial: https://fedn.readthedocs.io/en/stable/quickstart.html. diff --git a/examples/huggingface/figs/hf_figure.png b/examples/huggingface/figs/hf_figure.png new file mode 100644 index 0000000000000000000000000000000000000000..896f93d98c1f38dcc05e33955e874c73edb8da56 GIT binary patch literal 89368 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 z Date: Wed, 17 Jul 2024 11:06:40 +0200 Subject: [PATCH 5/5] Docs/SK-000 | Update main readme (#652) * Update README.rst Update main readme to clarify use of Studio a bit more. * Update README.rst * Update README.rst * Update README.rst * Update README.rst * Update README.rst * Update README.rst * Update README.rst * Update README.rst * Update README.rst * Update README.rst * Update README.rst * Update README.rst * Update README.rst * Update README.rst * Update README.rst * Update README.rst * Update README.rst --- README.rst | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/README.rst b/README.rst index a13d7463f..7c32fc7bd 100644 --- a/README.rst +++ b/README.rst @@ -9,50 +9,48 @@ .. |pic3| image:: https://readthedocs.org/projects/fedn/badge/?version=latest&style=flat :target: https://fedn.readthedocs.io -FEDn --------- +FEDn: An enterprise-ready federated learning framework +------------------------------------------------------- -FEDn empowers its users to create federated learning applications that seamlessly transition from local proofs-of-concept to secure distributed deployments. +Our goal is to provide a federated learning framework that is both secure, scalable and easy to use. We believe that that minimal code change should be needed to progress from early proof-of-concepts to production. This is reflected in our core design principles: -Leverage a flexible pseudo-local sandbox to rapidly transition your existing ML project to a federated setting. Test and scale in real-world scenarios using FEDn Studio - a fully managed, secure deployment of all server-side components (SaaS). +- **Data-scientist friendly**. A ML-framework agnostic design lets data scientists implement use-cases using their framework of choice. A UI and a Python API enables users to manage complex FL experiments and track metrics in real time. -We develop the FEDn framework following these core design principles: +- **Secure by design.** FL clients do not need to open any ingress ports. Industry-standard communication protocols (gRPC) and token-based authentication and RBAC (JWT) provides flexible integration in a range of production environments. -- **Seamless transition from proof-of-concepts to real-world FL**. FEDn has been designed to make the journey from R&D to real-world deployments as smooth as possibe. Develop your federated learning use case in a pseudo-local environment, then deploy it to FEDn Studio (cloud or on-premise) for real-world scenarios. No code change is required to go from development and testing to production. +- **Cloud native.** By following cloud native design principles, we ensure a wide range of deployment options including private cloud and on-premise infrastructure. Reference deployment here: https://fedn.scaleoutsystems.com. -- **Designed for scalability and resilience.** FEDn enables model aggregation through multiple aggregation servers sharing the workload. A hierarchical architecture makes the framework well suited borh for cross-silo and cross-device use-cases. FEDn seamlessly recover from failures in all critical components, and manages intermittent client-connections, ensuring robust deployment in production environments. +- **Scalability and resilience.** Multiple aggregation servers (combiners) can share the workload. FEDn seamlessly recover from failures in all critical components and manages intermittent client-connections. -- **Secure by design.** FL clients do not need to open any ingress ports, facilitating distributed deployments across a wide variety of settings. Additionally, FEDn utilizes secure, industry-standard communication protocols and supports token-based authentication and RBAC for FL clients (JWT), providing flexible integration in production environments. - -- **Developer and data scientist friendly.** Extensive event logging and distributed tracing enables developers to monitor experiments in real-time, simplifying troubleshooting and auditing. Machine learning metrics can be accessed via both a Python API and visualized in an intuitive UI that helps the data scientists analyze and communicate ML-model training progress. +- **Developer friendly.** Extensive event logging and distributed tracing enables developers to monitor the sytem in real-time, simplifying troubleshooting and auditing. +We provide a fully managed deployment free of charge for for testing, academic, and personal use. Sign up for a `FEDn Studio account `__ and take the `Quickstart tutorial `__. Features ========= -Core FL framework (this repository): +Federated learning: - Tiered federated learning architecture enabling massive scalability and resilience. - Support for any ML framework (examples for PyTorch, Tensforflow/Keras and Scikit-learn) - Extendable via a plug-in architecture (aggregators, load balancers, object storage backends, databases etc.) - Built-in federated algorithms (FedAvg, FedAdam, FedYogi, FedAdaGrad, etc.) -- CLI and Python API. +- UI, CLI and Python API. - Implement clients in any language (Python, C++, Kotlin etc.) - No open ports needed client-side. -- Flexible deployment of server-side components using Docker / docker compose. -FEDn Studio - From development to FL in production: +From development to FL in production: - Secure deployment of server-side / control-plane on Kubernetes. -- UI with dashboards for orchestrating experiments and visualizing results +- UI with dashboards for orchestrating FL experiments and for visualizing results - Team features - collaborate with other users in shared project workspaces. - Features for the trusted-third party: Manage access to the FL network, FL clients and training progress. - REST API for handling experiments/jobs. - View and export logging and tracing information. - Public cloud, dedicated cloud and on-premise deployment options. -Available clients: +Available client APIs: - Python client (this repository) - C++ client (`FEDn C++ client `__)