From 0ea0d0e82af64980c17e15da1e85155e28a6be1b Mon Sep 17 00:00:00 2001 From: Kabir Khan Date: Thu, 14 Feb 2019 10:57:49 -0800 Subject: [PATCH] Add Open API prefix route - correct docs behind reverse proxy (#26) Add Open API prefix route - correct docs behind reverse proxy. --- .../img/tutorial/sub-applications/image01.png | Bin 0 -> 50472 bytes .../img/tutorial/sub-applications/image02.png | Bin 0 -> 53366 bytes docs/src/sub_applications/tutorial001.py | 19 ++++ docs/tutorial/sub-applications-proxy.md | 95 ++++++++++++++++++ fastapi/applications.py | 9 +- fastapi/openapi/utils.py | 5 +- mkdocs.yml | 1 + .../test_sub_applications/__init__.py | 0 .../test_sub_applications/test_tutorial001.py | 66 ++++++++++++ 9 files changed, 191 insertions(+), 4 deletions(-) create mode 100644 docs/img/tutorial/sub-applications/image01.png create mode 100644 docs/img/tutorial/sub-applications/image02.png create mode 100644 docs/src/sub_applications/tutorial001.py create mode 100644 docs/tutorial/sub-applications-proxy.md create mode 100644 tests/test_tutorial/test_sub_applications/__init__.py create mode 100644 tests/test_tutorial/test_sub_applications/test_tutorial001.py diff --git a/docs/img/tutorial/sub-applications/image01.png b/docs/img/tutorial/sub-applications/image01.png new file mode 100644 index 0000000000000000000000000000000000000000..7627144f4356ec2cd228875c0b513fd3143877df GIT binary patch literal 50472 zc-rKu^PqLdVQAQTdU#m5S%i$@VPMc> zD87-_^qJpX^!CxzTJAYSWF;svMc>C%+im!>78JHOuJo)#|<>{H3U%h^K9|k@?Xj=eoWCOtqlE>;fnJ6Wk4`AetTWy8O#sn)L8$e3l|WmonJh z@fn{0|JAEk^puooyRe|()m4i+L++_>|Gj8yT}AmQbab8pgCbWx_UzLnA(N0$OjpLP89r;k`m+MURhhSQc_at zawcn7)#1+=U>s!;dIHJ*E%F{C6QhEH0zEr>!TU3ET3WU1tJ9)inSEa##Lz~R9l1Sx z9bjFNY>Gh=Y_`cr{O=p~7aW|%wkCo#nff($ONVvJ#Z{Z*|9}=>>C(7RXQ;N|1oj09 zq&*t4#{XTVZ#rl&y+!$TNLzsHIPGHFL)2CDp&y??$u#lWWSL3M#YN}CHpaW;=4!~z z<_!xFw&;lxLwE^T4_O|q_NS^X?g062(Qyt165Y0#Z;n2}zBlc_{;2hM18mk4m8Oy@ zf|oI;{X0Ng1S6w_tf|QXdkbpW@#j?sdHmPIx`nz$r%Z0POD}P!e2t{Lk&=4$&J1}` zm{F7hUn5A^w0P~)(?nc}|MreXiGF6d@VLNEy{)h=svklYzr{E^JZ&HB)zSIbXVt+= z{^-)FR=?aAXaOE(;bD^}WxDHfyB(K~RT8aGu=DdL<0a}?ox`waiyJHx9%Fjj=TMGR zI4+%koeS)?;`x~1)obpC`e`Zpw@W&!{5Hpj?YBizhP#elNTMGIIU5uNjgUt12;IMh zRL3;z=hBQ_O)>|nL$($Jh`cbZ-99smPj7Rmf$y!z7&|$w?H=qN5=P;3lK(}-3!SV` zjVa4DwFhW2kM*u(vc=r%3!~gaZohj9wf)R zu>?|kxQx%EW$RM7t?ALm@x2`XWD6KFtm#T_TNDc_<&LN78}y1t7=a6<?f9S7A?gN6o@ce?ozaJ!sZSlw~fRs??W(R=vbQy7MkYV5fp1`y6V(;$(%zi zukX<+zM8A%*mnZc8vR>jzhBan&zEr;d+hJm$iFdn6cj%N(uq&+<4szL2`}8OEPl*+ z+r!WAMm?1d)&^VBw*+_oVD#i+mDGm>E$>EXm04O^nyM`0D9Nup~8g4zDXo4 z_y$=F;oA4Lez9Le0Q$m=L)-M? zToJh$LCY)N)|C^UYa>!CeA@!+i9yG^6|q}L&}FxAZkIGq)lQnRuWfgu)63@GD0sa$gyd>dK&7#d zPU7hG)zP?Aj`iCfR_g#X0HQv7SV}%DXf~H8O3G{3z?S0^g@sGV2OP;XAC!-wkY4E_ zxHRpMFJ!)xcIi)pBcas(GZ*6AFEBFrV=DtD)`?4i&`#s^Nb%C&fnS7UhL{P9k=f_a zEal7ztP5hk6SM4=U)0Y!uv{!zT`zixeEjEG)zp8{cpV!IwbsL7^1lJyMiX8s&mn75 zUmNA*-ObTbz8pvFtWnJ$Yw@Mbdi8qWqbO!7T-+Zrm`Juqcg`Q|<-3w=c~h!F+-gh+ zGhqIqu``z0`VAqU^FzE>$n*JrowA}O&|K3E5_PJ>b$c+9I!{Q^=aLo561vs!bKEC4 z9a&9H3_F;fI20dWHf#mb(m|7wmue1bZQL38vWGRG%XCGt$-dOFPm~%PY2izOI%Cfl zsL$IMIn$3Mb4t|cVGr_7Lxa}GXoo*|Y+oKqwTxhq2x~)PsZv5y7b`q=prqe<@5j>c zg{bLxTJEKLUfn0TV|K-Rb=ANSp5&CNkW_QNBroftekJF+=d=M_v{8^|#?7pZxNw80TW@Aw)* z?J}6G7ox}Gp+J>TzoJ?enTLZZ+YeBPa_d$28uR^In`EV*@-p?&7vl8#ca}z z`(*JK6IUz`+=Q+SUbhtPY`2Sefx<*J*)j+@Q)iWK>(&)dXg!;2^2L|p(bv7iF6<5d zE2f`gn4pj5Vf|f~-ei(O_1*_d(O^Dz@C&jm<2oiB^%VOHog%V}stk+v_WKFy3t_O? zx|RDFHXwx9M2s8#*+ToE#V39{U7aXTMAh>t*;n&4El|KG8~M{8XVWse69?}^(y^{Vvg?<6-|*x=8y}u^?Ao-B^void<@?>9Ke0ogg)r>KRKnS zMb$=OOAVR38os!ERpLlJyX5mlXzw)xd&JOL)(0CfTcg>_EKC)ef$Fhe?gC9-{++)K zi74Qr>RG=oy_Z^^jI9m@eI}RElOcnbr){2X>i$#%u(Upc%-WyA+uP&2f-dFJq98bK z*l>lDzB-Zv>+0o7Q5k+moxlftnyv==Iz25injG(gNG?vpj$zCmU)f} zJnByArbWy(BT-lu><*EC0f~9geJFN7!V`3X&;A)!;x3YI!&-iBBoUy@^Rv^QWV4@j zW<7LnuCMS42E$0Hbv5sa-lH@#RyPs};%ARa4MD3acTFQcU zwx)%G5ki8$)a?b3ztLWW_O(fEQ18sDk;?Si+-MWRMr}v79U6JVWXH;k>b$h6$Uosy zODW-zWrGBG9g#H6;*sc4H!&VRiOFvaO^;;obl%*ir@=*^*agy3_rxO?u`=g(g<8-P z(UZoKpYd{b>ARPD1!J3rWb&soj?XLM^|*7R%~BR}(d+F&1j{k9bO&7-t?z633X0zl z?aAAhx#$P+CQ93sG`rg3qYYNGmnIkhf>PlpB>gnv*;--cd-R^$MW_!kGX)r#onudR z`j5S7*v?WubfJ&9ZfMUWU=o)P)Sc#rCL)P1K0p|Z8(KJw0%FITex)tajhMy2=p`F# z0faWfx47d1xeYNJ+*fP zU0hng=_lSDm+eiQqnw~k*x$>=Pj;0@AEMeDol|tZ8rII^arYbhGpw9J&2ZCS z{;EHHK9N6S?U_JQZk~B?5EnF7;-+9Ekis*~X*$sCe0WSJHx3*pZs{ND%|^7tV2Fjo z;pvYCKsgr&XhzeahQC?rDTVfSY*3oc7156gVc_hlq_+Z3WHFZboX7XwAN*D;ILlGA zFKyrADlpoNy|0aK$dUxvjLmxUm^i9ig~G^oiB4AD*=xME2sHQoi64bOlctW6Tz(e# z5;1zei~yoUaA37)UDi3EHH;}D=4{jNIPf^?kvfie%&+BL57I@7M0ItDsi{HNZyYh!^f*O|o65-L@k7%V50*);d zU3EW@JG2#Ox9|SRUYHo`fMOM_QcAxOEQn?o$S!suT1Uw^h-UU1H9IY}JC=`7zA{2O zt)sl^TyEGJiSkTF-;oU)j+}LNXHW?bne>wIc(3&op=PTqwnzAKJNKG|8B-UjyjqH0QJ3Oxg3DKj4TOi(SLDb@pXU0Lg85_T+!`3*1j>;CMd;8IN93mbs zzM1?P@gLU~@YUicarRG6d1fNuERXY>aK^m`mNuz5?f9EpQwZ4dPb>@ zzfXHZlnmrz$%IaT2TZV9epsb`iM~WqT%m6G1_DE5j-^cdox}0>?FBI@`HMMz;0BqG zG1x@JtyP(cM!J_;bbWWaaMm@k+MuwN>cKYYNNAowwj7~cAXEp)4+kG8$luwQSTTF}=NpdK~y%F5#uz>)bOG%u+79&~^2-~4U zj0|hzZiRbQxpgS}i+HO?w}wfj9+(vj@=Vd|-kDW`X?z}=Z(}F+mfFyjrxgUnM#!J| z$hD12mfwJeRL9jL^RlUMotA*GD}+>AZe#+tA9aBrWkEqw3;0%I*U}fKxCPzW*L`b0 zU2}1!V3>ySzJY5;Z_CbY8w`j=zGceB1U+krY6<^XU!gMV(PRkevntFyzh|O(FxA|1 zr}E=z+GA)B?kBaS1jjVjR{)u7?2#*uU{+BlED{rRNZMx&$s{Z4dIw4^nzy8ZvbWe= zeIGDYGQvH|==LG09={s%ZU%;CRKj+_1%@ByEZ>(zOqyB+66H8yYhRH5)%-XV>WOcS zig(es4QqZxI$jU{Yq(VjxyY*QRPtDH;YTgu>f!LO_swEE%I+Ki)ff&Gx{lC7zIdvk z9dl?W4mpf!m;K29pE5}t9N^!?m*z=St`HsAnW5@~yfR)$jAr~%yGb`vW!QcvsqOSJ zgbcWRE-wme-;`nq(a~{|*5|-PcEF#L?>4u|Zx{~8XMb%;K^8acL;MGA>wCFh|N1oI zVM)ZpuUI?V%5`}&hJ5B6QcI{V^;W-H@E@EVcQ3DfW`e~Gu669WExQ6Wh5thG2#MEL z^ZKmh6WFta})PlJDPW~z~Mhm#2Jzu@XU@NuCw{VtsU4{J+LiCBqz z3I)FSNr=#>84?PU6;W2nx|UQHL|-f6w{nvc$_FNe!$OF#Ki^HHo}ZG!urTnO)55Aa zO29-D7}gQqGtzq4XXcCM9g+ z1{E!wqi`k*yEn&jBb=V79-#8i?e_dHGqQW^k7M6jtlLvX+}oG?8UjtaLrK)I9+)e2jf_mcf;uie z@AEI!)zx-HZQe1hS%)ClNOjpw=eL51!s_A|JD5fq$!6aby0RyaDf&*fU~b2C5DH$~2Us`+OY5$nLl~l^69&$iF}@UEajLKH zSo2kjeyYx^OCXx|*HKiWm2d>LoVKr?);OjiTQMP`_1N0%A^=s8uc)frXi09U=0wP$Q?fpv z4JfQ;sY`B^0t1d8VUS2(eVTJ$e`=7EkUl_eqV`i-^XaW^U-pgPh+C(A{c>+2pC~9` zNw(GjGQdU`)PWAg{aSMK`<(@?@5vKmB$A`)>Pkwt)mhzj<(EKq}EIU6XAlWxGBlBg>0rTfO$|-V7lZ+XY*VMX4 zJFLXV_-8wOxKHMS9tRkFB7qMvxNew}l`Md_nzcLv%=)5jrSW(8gb?8I8}2)HPa_*P zcub~^8*DwCUg3>^MndBA;f<}o5`N2ljrwAGoLus&)c!GPe~giMQAv#TNcQjr#Mx%O zcutT9V+OD2uU~|rSZ&toNnnw{{aD%nrdx|jIhmX5NuWCLD5CcT7Yeg((F$=z^OT}1 zC)+pK2kcO6zOib5je$c*+jR>^pR@Xn)Pr^;YAelVuGWg0jbH6sNpOQBr5kuf zLb95rJ=3GW%@rl;cBQl%=tv=(AfJ7bz8^EHW~u-)GKYo^zeZNd4&}g{f&S+R&hx!tETZN%DUujIbWo%6r@2aJAlm); zNJ`%irY)Pf!Hyd)#<@nxEZh?tOBiR1K7|aebyL~1_S7D=S~P!#ZkhGT79f+Fzhx<7 zkNxe^X?_}>;~2%wYDw2x{XdbRTm}sg@z|ut!I?3JAeXUtHMdQ5m6N$F6zi!Q3wv}l zT1yWcf21&Dn3OJo8eY4AX#x0w?Wv+glc(p4?!rvrL}d$!FM5IS9%|<{Oa8;F9cM!q zND%tiMCIy8*@?yzD=}Y%y%SpU35tHHF4uL4nDOF0s<)5q?VjvLUDqb9iXYu`aS&5X zbVBe|YsffoXjE*_u~|b7JNBw@nuhG(;ih@rc$kma6$}?mCE+5&U2TtGJ{D+WxUe}@ z&CdUwWFP^zzh<3{Q zHSTDUqI8jmn;UK5x1GH)ET#g?AcNC;0)4>^+ z(Gb}UyB-JxCFy6CS@`s_PM!($sjHiJW+LXk{T}7IrD#lSCL!b{^4*|Rus#}nfAS%{ z$gOB_gd7bE-?Up&Ecg$K;GEFC@{_|!OJnOF7-AF+U%A(nPaX;X!hRME%B`d!lPiyZQCuE765{mLevo2%4sFh@BgnNQZ zXF`OgpVsbyG5ia>7oUgCs9Fs2RL$lfWMA!YpS)NIC2zlWHuqSOsO8S;Rg&kT^4{q# z=OeRLF;V&nQF6J-xR9}66W1QG(E5#=Q5LBQ3g7jcaWMe4;qtg7V z?vPlHm=J@=4V?CpX*Lu>{0b0v1k&AVWJhkZ=qPwuZ3hE!}FQ{xN8j&u4A&9ZD zv5|rl<(~QFC|x-8qf7mU-XgWo+0P2pE29VgE^Wz7EmX`?(PT@$`O|#mjNeWZsU&3` z`=m!Oc2VYL)mP$F*+1eGS=#*BV25@!!&y5{Z{T>sZi=-pQFT2+U`&*mE6F35>ol~9 zfnn!oZS&)uehRWcT8#rLEQ93Y-2U?Rg+S$(xNb5Z)`Q}5tallRTxL-R=c|uX+*z5a zMCVqiPVr9oUo@dlqT7~+GnR6iqMPTOj&JeYlpQ~UM6?cu5=kj_{&}ulrrV!cZ{ru%5R6A6iDBAxKuy8xf)T#Fa*3LV?Ps^B zEAFG$)zi~c$wZNoumyR}O&N_zm)mJ#1fGGxCga?rgULLta3QFWv!4-!gwDjo&D~A6 z+0OG!VXgu2$MbzGMnZ)_f1gBo*x6iGp_gtqdE+PY@7pklz-12K9 zJiB}$Ujna8{1+G^&S{a$#oT?^JBX$hYACg&l~>25JZR+Q0Q%nBY{$U?n#Xd%fQVV6 z!&Q0grH5bh0zzLAcKy~F+}YyW9{c@+XDj18{@yB1_!G+!OJv1(8Ubc1v>a}i8aK`jvpPm~yVn_HM)xGlHx6h5i=`Ka^zyWB8l7Fs4@9?+~9 zoikm>&eR&bT_#Cv`{Yt{gI+gjUNg;KB8?4w@u)X3Rzp}KlL!`+GS9$}GK}r(by2b_ zU9Mfq{$N6Q@#T651RA&_Qo1#s=H+Ohvy06s|6Nr@>F0+;Rx4=B?JqN{78Es1%k%|D zy>+k^Xniy{!6U%L0O}H&V_2kcOZuD@Ih|P*&&Mo~@YU$wZnZ0|8h za`=RBx^#1gq7i@O8bqkd3#!RlGD!c^nJzu!QSq5Wp;I+S?2y$Ai@XgwC+O<0UX#m>aU8qk4w_X%4EP?p_%ED%fdc*0Odi$Pq z`XYygH)rzIml^^Ct`5#JoO#{4TqIF&z%4+FlEsjA+cS?SUgixL1aSZ`Ohy=HXL>rRkq@3ml?}8*6uwhqYhjW zmRoe0uW{_%7EGFXoz1t3CrO3resdM1BBkpm94qsz>_-NWs7N>yxVi;zHkiw%R6q*l zgFBTFMf#8ZJa{09M&!+ozN^?_BH(e?T?Z4^!JxN`oz6P?JpfRO}6=RjOm`ZS~urv8&O@%i^ivh zIS;t1)rEYZSPCkQbyw>tvF;b1NX^(*-|>nrw5AojI|v+EbBj+;S9*WMceLyKMo#Vt zC8caOAa?cJN?u;xQxzM1=z+DSM9U)ZJgeyjeP1&5;7Kgt@+k-^6cfJR8vFNwI8pan zs7rR^l1MH$pEFZlwf|2n0GkV9(c9RyOf_kt*suPxsRv?P)SKGsz7yvN(WJ2FL5y7TD~W`@w4lS z6MKcKwlyoF<(zC#yR_KF*SadA67BOXIlCtV(KKvg;u8;o`9;P`U8P>*5&E4ZiLp&NAOhfSywQy~ds`{pBmqgzh3?_%O4u-*>?^fa%q%O@ZsAp+ zs$H=Aae^b8lH60*1i$QrMg3?#X6^-zSZOcOw2&I)kU%rF?`?I_JfD9jk#iz@vm%bf zxH1w*jSti|^wqOu*<~Bvzjq{BaRCh61O&GP$d5ypnO6?D*SYl6em0s040ME?&Un!& z**o{COZ7D{;fm~%OD7udZLMuYFAcG-9N>_ZLd$OE{(2;o%#JH>kthA;&3*3tMA=BP zTcu?S0wS`G#0Ej4hX=y|Fyj#fdi^0CWPFXI?xqE(+hWer3^W>yAlc$HZlVZYk_jIz zGm*-?yj<{@&IF;>nAhMxHtTDs`SI1+)YP78^AF9zvc}>hl@A#8j5WDz`g$Xj-ew zD{8c6hb`%Q#H`VBrIe(DwH79nEBi_extyRyd1oU3sIecRa{!Y@fx9hJp9XS7*d0DJ zJFPSaLA0Kw z;m);J+O`{syF#4g*zsxDy3v3E(VE!*qKAHBaQ?pv@7=%E;fnAG z$khD%&!`iK0c{CrwENFpY1c$HR`L~~O>X-ye(BQaEylmds3+K_PyTNd-u+L1|F;VN zm*(~Vn+dXWL>9g(weTBJ3w7DCTj1sF@4o+*64D&U)Kc%{Ot6bs6cbga(-+Oxg$I8UJ5afKfPOLE~Yp4 zFw8ByinLe1mfygiSP$tb_{mwL~b|ZE2L2M_u$^yGZ6Y>vjzYnAgRCPIac8P z%Hu`y8b&0wLdV6Wb=Kg^Nfr{)`G;gGZj&28DVc}sh>CXGld?HbcJQyA5Y0(Uv9amN z{QRrb{ZgL);`cp6gP9!EDq!f+ix1*1(Ot_YUu}Kzr^TcCnOP68YHoGC_*BPr@Q=Oi zzH?j+5PQOUZ&jDwYB;qjt{2f-GPytMWrK6Oer?MLY10d%C|im2=P-JeGu`DxsKp5M zS*D1Q_j;Hi%$;gR*Xsb1&UPs}^X{Nwj%o~as_a4VwWs%+{78RyafEM*7TYmign!7p z=x~xHY`ubs3*VWb*(3y}=~?NFPx(&J)HD6NGYR2IO#ie#NXw_P){C#Pw@-vrZ@hsO z%UTt%|B84C1UFZ(*a|7!!*mwOvZPUGcAC&%4@46Zp_cCLXSLK%V)$0v5{&OiGHf)v zd6V2F;d50A@dhO9Ni&rxS0!`{mYLz)5C)e3Zry`E$XkIsy_Bj*LDx$Qx3yMYUDBC-ZW^@GSoKEt3O@meslR;mZgzV+#)f2=sQ@N-nsz_Zy{Yi+D3 zua^%AxF3xysT%(%3wme(f(@k@7+bgQ`Qg0W3d`A}3VTTxb91PZ*0MuA9*VGe`{p8T zWpL11xx=IR^1ox3LJh*Amh`@jn~ZMI?PK4%yJV?FY6a`e6lC8ZTrNs^oAt~>HAd5% zt$85z2AL+4R1G%bLxSU5u0Iez`MT4lHjS7c9_UQFkbU{xX>7&ycjbEH4WFa8UqPb_ zaOQ`v5lO$eP=z~$tkzn$0FtLx@z^NYB0|yFcr`w4oj{HxK_Jps9NinXTH>&9%x3*- zo%n4Kv#Kg<+jrwd^rzM9zOZV;?N6R?kNdTHp=|*P7J9vk3Pzp9u+o)b$HD&EvXw@w z&`TfiLqf}E4B)JAfYiA}FT;OgU5m>K5b3q5t*%F{Q+1Vx%q$8R7vi(GS38|)-&T}( z$@lxcSCU8Z3HKar716!GI2#a_6aSts93fxAh``h^rots22~aPEK!{ALA|)D0LjC!7 z;fOtheGA0_HO`~w!B<|t zeCdJxLkt1hhKB~C*(wAS+ytL2y;~>=>vX| z{_)R{{=L!DpF4bwy;vw0^$g;{Xq1B*Gwm`6`}o3j@d>dGu;1}h#>J^U}uXZ$6vQMyT~ zAH}U6nxJZNnyJQ>lM9YUA*)T_aC8jC0*&`JF{0cS9Cr?$M%MwtlCqtU z55yrD&pAWb(kgMC8`(0fH)mNl^l6sU=YU}nXKqe(1CabaC4+0$D8F+W+ijiL${X>u+;bpVGPtyQtP|Ak5DFxzyf1!h&HS{YbG zh$pD%$6z&@wQo}^yh)UMiI_{NAg4&G`xEtyiWA9fp0wRKx8+CXkx-u4f{C$8)muW|1`Zfa@3j=$M*8-7MhmUvn}T zi^!UM#XxyGu&6$TT=Rs`(c-irj@Ma9|_%Ycp z`7vKLC@h?XHwen$^~_zM!I5nqF1yoaxO~o%T_sy*yjVV-f}B|~l|vQCbDz1Jnr^=ruw>G@DFH)&SHCA zYT@YX5&EAY9qlb2U#c?$s9F>NbR>DxzY<&VkYl;sF*VsifPjZz{{?O(v1F;{G=n){ z&K%RrU*0`#$P_K0nU5d%@r?TNatE<_zL4YFY;*07*k9#FBe%o-D=u{plOY|~R&f-G z(&j@>+Gvq1ynx>0GPdv}QC*#AnrZG?<6?-bu>#P^!3xKl-0wcBD|2XK@w>ZTl_^tw z7EsH`+l?uzNc>GlOK3NlO+JhJqdy9bK|7nQzi>_IJ?9>h%}{oE<^q?ZU_DW!;r$>_ z`kz(;oItWfy6Kn<#GYEG2875LF638|Gwji-kp3BXz=yCL3`we{o(hGO3X8M^upghV z=bY;*kr?F*;|icPE@m^&NGH6gqHO(1W@;L-ssJ%qxU?4NkDaTR1kCebwT>S-U&Pbi z9a!`%d-%dTryFSU+dsb-Fl{l(Mnf*9-e&u4dLMJWTmS+Oc zh@-}zthO9up{EkCVLh+U^X`FUeUhw=XV96)mNHw>y=u$RshTtm%NC;?0%g6-0Ip6{ z;l9sxs1kJ1aTr{75LmW98m86i$dLQ3AWp?sURTVKSUEB|t?IL4nd7~-9%uiA&VTPhDZbV3MUXfL zs-dLjgQ)Fu;adFO-t4xp`l?j&6i-&>_?`~DiTV%Yp&pVP<+M2$AEYn1sN@(SV~y?x zKbfv8;??(;WQt9i)1%pKIx=DV2p_v1L6n=abfl^6&6vdeb8_Wn)|Tw%=8HB>PjS~? zg1v_Z(xDlCI(4*}gDI5*T1`lIa0{1u&4J%o1x#zwxU&2}q^a`k;QH!O*eO9_r*Td3$))PbV3FN(HV^MXVzjD|ltzqj@*~^~^f+Ede zd7BgRZWF4G>g*V??&F z&;84s{c>bd+{6iy%FQmBex}xuBhf;ex4I-a9C`FGB`Z}lKrmR@iZbZLWc z%s~{njus{l2p8NY9&Bry12|3Ua%W>Pd>QsA=YA;QZWIAWncykri{C+hDxXY-7e1xXjjZ^mEc=4&pZasHh+ikpiJNeZ z6C0j}IJ87L9P3bFn-rlgK~ z43lPD<#A7jv2u4U3G4`DrW;V&d#5!c-Bn}9-v{Ji$w zfJ?KuAv+7!czO1r;hXbth5*L9OGhYUta8{k4@GMO%|}W)vFl?FRuAr*4|+{XBQthl zKqu|B5A|}p*F_d%Tvy7giv>{NL$F8-hd^VsPM@_BEVKqNB8g*jS9?)|ye%KaPe>=|U zPn(_5!VI;|*Th1+;@spavN7ko`{2(XS}cV(^&3+vF1qM@urms|b5~?0WrCKSjV8J7 zVy@mi4dyW((3V8+i2FAR7rpn|m|CG_UGR=#Ygy3uS2O#HyFA1M)b+F^DhkXDt5?+7 z585_!vL}7Jm!H$(FA4zmm)kl&QPoW zj9xhYuObmi-z$O^fc-opMx--+d%Ml=1wN~18!lnFoKI45Kqxv`tzK8J#>T5g?$m5P<^Vaq3r>y>8@nsdQe_k0GGbW6ymLHK0lpJ@yz zvv_keJ$cA~qW1JINC4)IF+zzVrp{@;XpbDXQL~T>Y1W;w4mWw}jlQO&-G8j_zk=<| z3on6vUE}~tLib8n(m=P*P_Ba!C_-?@yBw%aBOdcRrGY4sDM`y&-O{*MN?@og9TV10 zz$voJDKoQwe7sndNf%47(cbXe&Uf*@&@u0Ob>_E9qlbD0?{@p^u7Ds;%D|7AyD0u} zn7N(osF~^gXE-s>eH_%;0yhY?xl?98EZHy<=x{1=CIQMsbXyk0B{yk*-;Jq32^jdF|Yj|1#8WN$R{?I~xr^m|S& zekMtLC}DT z8&O2`>GtGj+vE4d3)ybZ^3}Dy#tOoC)OOvHSsT832B|rZXSKhRB+u5Ve`kXue371d zAuv26jhx}-K(l6l;omX(H>hC3)&QX9)pm|&S&1}vE0?Z}U%b_RsIu?rrSt6mi~8{0 zYRec>-^{C>m&U%%4|9f%2bPB$Me0tdp}L-^O!>HGe^Q8{O-C6nzG`|lX-e~>rjdc( zkB8J3m#K}fZCYGJ&L6S1j8X;95etrar$+e_1C2|_{`~lRX_5QtAgPztyT_Ybm#U8Pi zUusoTihdiZlCSfhQS$+{Upvs z)b|6!*IX+;L(&y2kQ;~tHq1@*NJ`UGAU%&%ZFVEf#6$$QT$=lkI)$Xw)t8;2Ndbf9 zQ#KfC;C6pASlc7^%({Pn!922g{Jg?Eu>GkVVGg=UKbr(r7xjyM-+XOj(h>aU_u6L5 z!cPIf>(&j^?X=`geR-jyy_QCw`ho`OyMRuGVT*>J;L<|{V_*Z(=?KZO(X`7IYL66( zAePJeAv_93qB>b|iGsq^ZzST#B(3O-=QQ%UK&{t3qU#uh%U8(oiJ#;AR+2z6l(xvh z^oLqnzz3b|MT%hxe@~yo$nM0h@z221(tp=CskXk--RH0zO;q_XmZdkbQSJh{M@R>5 zcdB{(7R12SaAJijnVDd}m_%UwSoB5jg&$mc;0#(M^n2(Z6lmlmmo&HsOm4v*HvREl zWK!7;Ab|wxwRH#rXX|gCE3&!uxsg3ex2m~#tP7HSrkYk2aC=tAC3!#m)04TpCq|7k97sIKIWN${?hr!_quHuh6Ml@sMbq%+a^!k2qCuB2(AJiQ7E-gJOvtnEWS@yKc z3TKh(KF&#gqT;xvwR+#sCRx~B0GV$osmN_Re1=B^r;~YY>lk*C)qA;fUj)6`%7PuH}@x1J&QuobaUV-ged>DCBRPq1~0vBbE;iIBw^8N19FTCi}Ks zA&rc_B2tOrpw-Oz07+%H03V>r(}~_`RtFtc{9`~|(lEq+?@_~#dr~k++_?-*Q@I$4 zcyKp8@=vJsj4ZFGp^Rj~#`3QTPap?D`VBt;~)&A&l%8!8` z0J%!2kjh~4Y2%#$)$<5p1mV9U6K0>IJt*tWKbLd!E~n%j`~4$2Yfg<{?U|NJ9Z$1A zK^uKTfp8$((X2sORmGgjq%zp59ZeG>&ULb@5xc=yY)R8^-Mtw5g}}_RvMGRcbhfj8@lLc5dSWZ2R`OB-uZ`N=dsKIzHgWjd< z_G<6thYoYGfGV`K%+ZUya;o6qlkr}TOQQ%(xme>K0V#4QCdTUj!~(>Te^vQ{uxfP=>5FzekDb*dayutdOYIVtwl%N#znP8dv zy7c+T_HyvL;*%GwvbL4Z1dLoqO?1{4)>;Nfy z*}W>G_-(zn|EsJ*IP6LLlkL6q_QghP7wf2g7l7BZ}j#nM!#dDdKE~EP#Mnk zljhsuv7GdOM@Uz~j?Ovkfe8AJSVNYC@)+P z@n;B+#*1KM9xbqE?frc}j^HzCqAjmCJ6jC9shKpUymx`LeXvo{;pQ?6YNcDW82hMD z6TV(b3Kv#0NE$2VCs#9g9ZNp*769m}-z##tf?H*ZRbo2lzt$h7P!8kzzVY=n8JiaT z2h)TiV~Zk25WgEG2ci0pDY+*GAU&3Of|2FTjTFqd%rvF{LCV9S4SPtm(Ak$wGN~le-9ya(ExcJBH`q>iasFgI|oG63hyKs%ajb55$ z5EJb_dFPuBPgzot7PZNxxW7X_)9g^I%9|=WY%d4`Ygknm412dCrz2>59hhQHYW@OM zQT(M%Fw5VHhRrM?c)%c(ola8I__D53j>yxiS1;gzcyMDj^J&VfmbqKG4C zwW4b7J`8|Fia#X``jU&F?OwLa^6?m5qk*p{-a+-^yx;2b>jJ^Yxh0Ab@$XZFjm0ZC z>ei}o?Z54LT!+lMtp%ouhy?Qp@%^8r=;R+HI*t8*KmEYr)jPSeM?`&Q~N z{w)5fI1G*20`q|g&GaxnS1i_{hsC#Q4)-UETH%G+|A)P|j*9DR)&`N_79hBV1PSi0 z0fI|@KyY_=w5D=#vwdnSeSB0D=ke;|&aO#m$@OMRK@}g!aML>9o@|y*Zmeim&xT zw;7d+b{Yxc(7+XSG!o)paUrlr_llak&s4~_!iEde0G}8y^EPfhj9!hl#^#eZe2qVl z;t}kBG6$c%hnx?05ljeiWm)uJEDL*KBfxeS$}SDrZ#V3cZ#OVt{ak2l>S^;!Sqdpz zb~DD|+`ha&+1S@(k_G$#&Zf$d*M~esFAt1(dnMOBH%1j-*KNU6wNN>zRJV!Uax!Pl zw@oIVW}?Pg{kMAAXl|08R%x#d?eA>3)?0@+&H)&)?n~k%r9Df2YrU^_pD4;$=vN;~ zH*{7BIV(7$R216+nlSBj&J||fHykeZq&tB67?IUD?8cFI+<3zfYlthnOXwM8B4Mbb zH8rXzy-#bc_q#^5$@4vzgkbxNW`feZj=oejIR`rPSx;-&5d+2BwR)p7(K9fYB|&jw zkt=Swy)0isgFe3&bu7klg;;f*JSqI~%!9>NGrz$L=D>+uIf6#l!`^(LpX}jm3Do+* z?Qk~oV5aC|KOd-EqQwR85%PxFq_cWEcWvjy`2&)@&ymd}GwD(dN?F?jXa}Op8iaxt zMybrMvefuV;T(-SeVu-?7|&Y*IuhU^9h9Qa!Jm(W;n!yxbpZ4r!vfalu5}maa^dyE z8jOV5sKF)pM*o2WcND*$$0`l>!$t_jRvC+~EvPL?OFZzVNG>#dcxV@d?&stqVP@OysBT)H#OOjb~^ zowXQ7q^UW<6$dc6IE!N6w(|U$acsMgPo@iTrAQrLowh-R$@pF7x45&VqIZ&wqbNBz zs+N20Ww1^d&z%=6CKELnT`!ipm1}))iUZ(gA4c<0G=?VeHclIlH+fFBF0~QQo^s-F z4YqqG3o|vt8(pnb7#7gZUs~q~%U z83>IyHT3ox%b%($HSUYFhk0Ai9w6gQe`sIiE#tR{2k zR!MYEd6E#qE9-pP=7X)z5jU)6O`uk_o}Kv;_$w#e4wi5l)>cOo`GwcHzA~zdi!9Fc6*#e~| zTLK`BYXW#)t(c*~&T;p)KX!^aQ=}ek*cBWb8~agG60s{7gTrrbAyhE{&$x^n>9hCc zv!T7E^TvtRePnH*CGBPg2Ss>-n1prlU^lhD?;@sqh>@&%ZduR1dQG$fbUxAVq1HWA zv0cy+_SokNW@Jpkiz030*@b5ISdRNIqLdfcZ*^;B1AT#I%vMspN8sjhz-twHwd}<( zQ%1C`gJ$r9_n@##iGE-shV~@)`_4;K$7jcNwk)(vF7h?oS|a&k;80Kq;Wu@Ae;|2aPdEaE4zB7$MJ{9LEe5z6ViPwaW!#uGb#g z?@qR|{OGlB?g0zBI5w@hH~iu!;{&WkOxlA$`rE0_rRxz*`eqJ}9L#MHBmVp(bbF&w z7epOL>U{K6_>U@zA~m-APBdE&!{(3VTjyz~yB!mJoK2gI{It-}kxFldYd!bP690FJ z=w$6o?!xkGr?WToNq^kWPuczb-cv=g_MGxLk&}%=XDpMth&M)*R5_}@?3V0wW=@%z zSMs^>=2qB0FfMKtPkc_9om=V3Y8u^1p2a9kNtb5)=3&JDCGE7MBWY!@DLO-XX?h*P zG6Y@edTfE@TJBe>W`F9#tv}sg+OLtb9&If}vgI(MhSzN%_vR_BWbQ577|@Q|$wK@h zE$8nc#{MPsbjTBOy-_iWAlf`As6l(LPF2dNJeV&r@H73Q1tQp=qF z03f)4la;2BPvDq^Dl_;q&}Cs%*b9)zpDXqZpDZKcDsHP9`3ux8cM047Z^nt25ZU=v zw6mT)mKD^v7Xu)jHe5R=YhUt)c|ptDflZ<>R}Kap3&WEJZ{WAR0N~??fVcCTbKCU( zbA5J%!D)}QFX)a0+yn+J34E(NM0X$zenUW@qN-Yb0_{orR`JrxUG%jpsFL(|oJdI- zY3aAbk#=*M>&H0lhvr`4;o)>2J{asT@&Z|+z&)E1W;-`Vv48MaWtI%ROEGMQ)ti`D zQd<0Q>_|zT&@Fa~_QUt}1qI)8twDmkT%kfmuXGyBzcpHBCjAvS;C8{WRY!HwXRfwC z-z(?4G?ns`+gCjictIb>i07*>?NZl^#9uCrX|%*X;EsGf%xEfP|L zVUzxC-}#T1GiXbX?9$p*zhU$;^t!*9Iwle{{&X|>g8S39205QoDNA`6{AX&t>?1il zE$Qep!SEYVtH_(yI zvf2MWct8F@|8T~hM7EHYjr6ob&PMHzgM_ zvG;0O&f+!cSTt(A&Hau?Df*4ZmEm(FF9*R+MR7fqKVVpiaSB9~c0r*BEKlv<5Zc$H zp5I7vzgntuT5PA__7$hjQz>zkQf#|K$Go8^6CbSiyCft8)jko7JH?NEM7_O(j&5G> z*YI8ywx+B4g2)8a*zXqQ8qD2{nY}=mUQ~9zDFF_MESU=-mg<5EKyJXLk~n3!WXnL2 zeY8pEGGk>pj`W~SJ2Mj5NDr-hmfcaCh}hGQF(N%f5lm~H4iV;OWwQIbb1I}s?&;E@ z7CG;8m=IBHNrmE=+Xj7bcO5l|4&YT#fuq^ADM%>x~N*#h7J1z zA?E-rlQTu&`+)}%+M^;G7SJ)vj?-jCq%0t@-hmOSg`Z6f73%HEqN5c76ZTjF9>&CG zmwf9tkGYP#!8L-jt#m{cI*E$6aXgtG0nSxoh`R1D2~R`D!w-8HtCmZ>FQgi_`TZix zds!UH_|~EA!0vuGKyT=_QL%=hmGNn%i%@RR_z}?wZaKn*$ND50PY`j zeHr@v;>~9l*d|=|GF@e}KUSIDr$tYE_tAECg1>#_znbd-IPnI~G1H~Mww7J7G&}fF z;FCM@(t-Lo00TJq>hlTlcC7(jfEwRlMST~YX(InTR`xaAwO^&AiAfHP>iDhcU82(` z^`6f58r@pgIY8%gi_?9`@|6UVl9(-bDG2}I!7)#qVi7v@&FP}oFrS9C($t6>Y>B1n zeSxYcdpc>YWJQiD844lw{|uo?eTKhz2t^550!PeHizvK= z-LZT^)e!~dfvxTr>&A2A4Pv4}+qgF_PT)LP;zFe{qo;8Qocu~v5fxlCT*jy~4<6N?&bkk1@cX0_Bs5Ub^! zSLuo`@JFGFrb_+Q?x^)d=;$Y0Pv`T+xM-!$2J}b45H}>QH7Yd1b|&ZuUX%kvSx9CiQX03 zogd6f(0Pb}SHy0D4l5@sbkjvDL8c6eFeBUz3Lh0Q8K&rC$2bQl z4YNTkbuQ=*hK!M@+a9PMtKJl6rjB@xr0(NpRc+5EyE9>ZV%~p#lbBsrZZJg{o*UE3 z+_{Oz5R3TgO(m!KR682IJ?~EqEi2SeN(nS)x|_hE%$0|4lg9qW&cf@zNrERX_w0@m zv?@oO)wbg5EeL%TiE1_)(9kq=9ZhA*0awD0Yboskzv6;MwbPMo-x@ISHK3@_&d%=H@x&+7};M)PkGS;6LG6#}j^iZ;eC+YwhRT#zYEF%G3uU)D_D7D85r^ z70tod=2`86Si#BK=hGdt?YOC$JL1aYtZn}OTpLPjx>`%noYWGE%v&)2lA^tHY$||#!G_(}bbVT8J40InJjz2RF&qrq; zVr*_>zfa-j3Vc6WgwaC+S8uTeWA{XrR7LI^aqE_Qon=n zoe`Z-;}4&~*Gh7^^o0_g)sxwY0Bc5rT!8Acf~rS6(a(T*5(B9f!5=k0#Sm|VMTIsm zQpVaR`zYgoU=Y3#ms>|F=pW!o zwvM&!?8cT~Y9nG~qKMk9=oVZgjV`83gQiB;V}ec{A%IHR%={TY(sBo?vS@wX^WY)i z&^QuwfT8LfxzbsKEN48&kr;+Ae%1V}(Ca^3@V} zEA-eE7(NxsrQeTxPlvKicyi*|&WALpKIPvb-TDhW`kfTo*6EJn;G+a04bi1Qq}J2YX?G z?~*j5(_5FPty*sECxSp9OmFyGmbA?PpG~k)Sg0sxtaLG4>@$--q#?(3#*dFzZ?2L0 z`Jn}$?l9^!;+r*!da;4+=daS+zq{Rj4Qw#k4wVetuQMz9y76P!`2_$@nrbc?O~B;@ zo)5V!$&H*zzv!>#LF@1Z{6??4l6nfgWB_`5iJD$y>)W=98=*qx=fhbj4>&n0(DwL- z>q^CGG@cer2eZ>6K2Q?G!|uUHEq5koWFX1m5m=A;CuozimcKg=w|W>Or=>-Yf`TIP zZpklX>)-JuUvq!xZ`L>%x`fc2A4f{9HLy(bB_A1G52LFbxqAam3Q~3Qj2V&5S@$wd zHMAfOCpP-~JTz^%g^p*Q%dTghX-_xB#tl|zbx}x#oO`}x(U4V-_qKjb%fB)B&W4fr z#*_ZYplV0hz9>vV`bvS%cwIZaB0)6ak7Q6TrGS@k6g@#YtXj(Wn zea`liT^lbvlltF5tF!AL_^$trxUGvA0?}#n-MQ^JUV>YdWY>i29BvA4DL)u>R`L#^ zt$Y@!{2e-8tMyGK)mysZFZshNdJ`B9VJ&ze>QIuCDteh09zy*;`&bOMfd<-i#jv8U z;Jnb+#ABG1q;lUm5lqoB%3FWzm#B=Xis!x^Y7}yU^Cgz z$7b}GC5b{E*8eJCClLE8MD!)DOL_UKULf)<@?XMw$FO1j>Xa1R3@mv4?Gf9mGlUOOeMB5?=rB#S79V#Nk>X=h z_F;|<63tA(w`Yd(Y5WOn#(m>1NoG_M*``+b^F%LlE^!8cz`SxvjIdcMeWSgnnDp;C z;uXmR;LD8`*f+r*DQO7*79N@T!v~nRRbH-0CP=k@_rslxHN%dm*W}?;!xpSXovt{xgrw0C@C=+CTMZw*Ceu^y=PHw3&7Kk&8AfF9oLfzoJAL#E|8%hZ(~?LKzIUBzTQTo91jaPM6pFcE zRm;^xT?QmkxT{0z$L(FZ(iW`z%(^j}4WY|>(=8iNkwD3l6MB63&)l>{nAOyPYF)n8 zQw$djco-+)ldjNczmctfp;lZ3fDVZhs;~`UIP;9fDVin ziVcu%)cV9DV5eekcl@$-w;lk&i|}q1QHpxVY$y_=SG6DfN}xM9az97&Op#}A)zACK z6zU&ZF@2zWZ+n?TRcg8{FB`JhK=;DKaw3ehdTl~UE8Ykp>U1f;Mu9iNSeMWk$F^q& zsjT3}w<&KYl27I;DJYTTE&0!Dm_WN~L)Tgl&GO8JJKPlS~neP2g}G2k~5QI=HlA3#@Am!iNaUL2K!#A>=M-edsq| ze`UI}9&`$Ed#3KqKan~wy>2~qpyptv+Zv3|G!T1b#ps;?YVz%M9J>ZpdQIpvEz7n7 zOktFK*<*o;_^(USWx5n;9jExn3MkM%+|^@+2wq>&jPYEpqSZTeqY|$?(ep&KMuZ15 z!>*@61u}Q;^#?AOFrCt%DBA~w>z7`xg~+P?dIJXz2;%p`?eY37zs_R`9Que#q%*nW zyiYwMPvPF;2X^~k24#B~Ibb%q9<{?Jz~i^w64v?ghU%wYZw51XkJH%m1F!e{+It+u za6+lYIMe$`;9K*0DaqzJ*rGqZ*V{=12=>*RAvsG_p>B;54;;g{8Zy1kc(gBVxuq5! zww5TfF5Sw*Ot>{257gnbz(0D%Wo`vXqDD*a8*V4XE%0~P_kj?np_r6z0bp;5I>c-& zSAXi1BAT6%cKN^wdU+YR%;iG^9;J19{9^9t(~H_GvJwI%shV{E`Z5J;L{Ry&*VVv$ALhDC8K%V5bl13 z7CTj4cu+wJB%65>5n#u2h?-u#T$ht&Nt^ikjOdEmO(88a9>=Pik+#1|{) zPEo^J?Hf^$74FfTEaphkUrAWJCl^hl$3Bq1OJ{p;#%?#OHChlWjqWe@`?57mj$h5} zsgi>C3Z#EiyJ#4}Uxzl6w+r4jJ!Lc8iDpDuEO$8rByvsVl{xytZ_6$CG^PJ!bw;t$44yGm7kEJ>|@pLBMtT(2Dwu1l}F zH$M#MIK`(r@3*Ks86_acz9)(E7Nd9)+VmA}u%L*#XBpD*guu_YT~9R&@QC%e>F%u# z8vA3cGf59Vg?VEhj|h=G7PHpysRJ8D@IK@z^M=O;>g593NKsMI=#bwcqYf>OEYz+na;#ZY zMWg)rHpB;2gT2f|J-E1!IcLe3g#0}pl)#T3nP;sJu%WZ_CM1WEVpJrGRPPQ1lg#1F zcGQ%+9W`-KK5OE~lgb9I_a~>Du_%{fz&w~p1G%I8)t%0O<#N~~ZlEi66T=GD@K)f@ zHE_qY5kE8e(AKXQVqJkL#)rc(yy1+FXlrq&1D;&dnK%HjFP^yEJL3azblB)%%#r6i z>_Z!NKE3zRQba^IOn?ME_dm}gt%pm#y|*p9t3EZfTM%bLW+meXZHG~ z{gUxk2yYsHKEtt_PDSfMHg{chFP!4YpbInB7UWsZ{eEysYFw=sBS8j zgW^XoG%t$TxL|Ouyf#=}FPY71woH-L5R<`~p`y<&@+;|%FGo0@Wg(UA{>bMdSd47g zDQBmwkIvW9k)Nv#_}3U^vLqL0N3GOFN0)CORHwh4sJmzJv~MNxUZg^ZM9he-qYK0< zPZ9pa5>&uKn7^z`usjY9A)Z3^L~`yzpf{30D}#Zh7N?KQI67*VHpk%|mz()rNdSW0!@6TpLy znA{E7+vkilUfAo0Ha(f-Jzw^ohzGG|$ZC83oZ5S?L@~y1UyN5bdxpDs>miw!f~+Q~ACPA6{u(7+7su)>_67&Z`ECZOcqN+Vh46G;X#gPx(1 z;+`^agF<0w3?n#Q2t4#U`uO;;?{hZX75HXl=JWD(;?t zFx??|zV)^@|8%qvvfS^PmSN}Xdu%>=u~WpGZHi#ld@BgK^o{e2S5qn5HN6xmNjZi4 zGjzOX8eL4HdEfMg&bg`Jdm?-4f}OT}o9p31koppEPUy}`$?^t!V0ik9BG(9;W5`@=A- zJ6WmF#m~`DJv zu<~~YnO{Pr%C|K(?594g={=TQ3!qAdhQd!_#zrrQTzNrd`I>Z<$SDf`A4LgLxc>~v z+mxJ~2EJHVB{Dj)x)~hSjolrazWjBP;`J-oFGXtb1~=cwG*c6{vyS|qX#|^3_b!ZT ziPkZ|X+N7RlC~r6WjP7n1L$^qv)yw0hhkW&c+*zktUOUR#wJwJ(%7u$d3N`52#n-T`W66$LL=+VFo4%rks%erokAR z*Tk9qu`9Sc9MlbRM6y7_4VCyV@t%sNS6W`4ia7L#oz&l8v7b3Itwc68R7v_Rx_Bq6 zi-BAFakXEsuoj{@0OK#!5&YfB${4xMy7^DCKo|GYpw@Rb29oBJ<-qL?|YV=UcQT%G>yT8kR!9a zu+r72ala*3MBeA_mi~4-H1}CYRYH&)@`du{S7|C7%G4Oq*P%8Lj<5C*7#bXE{BWE< z^0!pSzJy+>KfZn)D)ClX#}D4)F%0SBHwlpX3omtfh4isr1}(7&MvtP61hLEb>mQ0% zXcKaFErju<6O$FLx9sH(k9R94;p?t{nd^4I-;V!ZGVK53AOCea>Y3Y{Z_b{N%OJkX z%U1Le6rNk%APT*mqxd^^!4Ciu0d9!(YDW3AddrL2>TSL_z|EY~g7?DLVs_mS4NhWs zJj^!VA&LDNvkgB!C#u`d>4n7H_c{wY-URAQ@p^{Wq3%X)q|oY_bt^ISW5pFN?l_D# z9q=yZ+6jLmCA)pSqK968iA?ygVUoBD=Y6^Uo5X999~&-_eIwQnosc8L(^}lfHPva{ zQ{B;X2|d68mO{sgtcyQGX6h%)g=_}L?Zb5-N}kU!NU3?KyMaNIOfKK=epSb7CbnAo z+YiUby=$9xYN7C(%fP~6{V&opT`Zdv-jAK_yTZn5v#6+U$32lekYAtPi88nO+@MFd zaC{{yLPfUXG;NC?+l>n(F5g_Ru0PUu{*K`8*j*3bVA`I01caa&XL<$i_Q{)j8p6>< zLU!uqn70ag@uW2#5$ZC)lw2%U1H-$B9H-NO^I2hM&xeg9BJdQ>Y>fQX&b{OL48cTh zqxa;CwSW`$oita@ESQC4Nsvr{w52u7a24akK?-v^+Wf#meo@7jHm70P85WiD>*)DFSyiS$*g*w;_2}h zVP8kY?DP@@`yqJeEct_>+ggcm|u!?m6Er^+ryy`!CXSBD5a##DSX zHO`km*2j!V;Z0<(IbWWtrLa9_ZpAO=pUr2v-|R((G*mC5-wE=ie`$^Wo5H-Lo~}v^ z^g|3`c}(^e)-3lNe>y{e4%l^r&E2x>(8CzGx02(pvv;=Gd}7J$ZrK9wNF8k$=wW;C z+<&U?-fhW0gb~3~xi_T}0Gl(j57k~NTZ|XNH|;QOEm4Ex1ZdyH&irDaF~DSi>*#lrB&?E6#*8Aa4c?hIYuo9r^D|+MHuVbNN$LKloOQB?7MS zS(*i+DAe$Oe6t*-|5d`>?JlSmRP8!MP)7J(5_RS`Rl<`nK10fH%+B25{=s~U^%_zk zhbdFNm_|a2YD*Xv{r0%!FY*oh9#Ky-{A#+DaH((~`MIofO71O9`O{sg0`Hf*EOCja z%pi$J&eA-MN1D#rSFwLnIqpkMk~r#b;;r`u&a5%_wJI4dfOt4dTlWEQ$i^^y5#DEd znS;XLn?QBk(>Z8K?2J&_ULr#kAdb`R-y<7t6fP>oxere_=@z- z30Yi*mOD>Td32-Se)TX?!1UQ;D_s%WtMckK6A7yk4sB(j7)=N3pZCm9JRH_Cc!Fa{ zJWk?fN8w&&{unEa7AagNF_2|y}V6JzvB144P(kg5YWrzufa)VbN9QJ6d5tSJwGZDmNIn1 zw2r5r%IY#qcRS7y1YA9_S|P{7tx5k~;3bp%*d<>7%lngLD`(u5dgqA!LJ;%J4(nb| znWh%Z1eXZg-c<#owKFnOo?XMiy9rO9yG6ns0@2RNGEd`aIOV14Jd`g5ntYwjq45K# z2FJ^6g0~%S=xMepZ9Y9E8aK+)%%}~UK8$&`%jUH`F?OBDNozJZh0|`_**>!@4{LU* z=H99JB)A|GB`@GTOY_(JR(&*4BO}p?IDL&oT~WIrAwDM{x>@rzJCJE0dkcLs+Ub@$ z`s|<4oeA;*Xp}i~eGJ3u-Pc?M>Iz}!MVwjH(VWK9_kU-wD5_Zge4rcz_12_piG&xO z*kN-dY0~rrO~i#uQDy`r5O z`;gBQ*yUyeg;{V%brfLpE^@Rr(;1>@c(*bKKD+!iLe5|VU`#qf%4QLWH&$#)fkjzq z*a*v>H}6Q(ahWqneCj|}JaNK?WGaUs_?B(Xljl3BwXsp9yOQyoWTI0|79Tzx@joGq z)^DLmzM&aE3QMam9Kczvzm$(U@Wh`(k958{PIBJD-xSHLrrmu4Nu*)`z7HwwDMV)` zISo~#Gq;|YXa%>vSjF+pf6L;NWp23uT^24q$bi7SpFVvuG2b0`c0oOLjXZu6n81Ec ziRs6@zLQk?t7YOPN3KnK>?cC=9A#2POQ#n%Kg9&1||NDoz)Ij!a}~f5ey+zL_{jyF#&*Wsv=*EQ}rc z0XyzUZk8?CH#o&`SlD?qrNIvn(M_8$1`%h^ge;95bC2@Po%`v|xsG~fLhc)x|Ib$| zY&a?IsrZMPNSg>SW^?@{)yz_T`?*xo_%53KW7}&iTi<{0Ti@*H4jD(Bq1(1Hm_N?x z%h>AwsW6=SBY1ancW);b)8XIO8MUA220oR^=Ve>M7$k@KfX_TuLxsBM+TM(pG$15( z!w;vm_`6DN%CPw$TTLgR#NSQz7g?l6kTH1Lb`W3F=ENG_e6CeQlZ*g-XEtT3xA9D~ zo8pO|b>y95TuOn0=#&{@zdIJq5kF zuuu8if45XGGuutQ+6o<6YG*Z0h7P;nleyvuKd|X}WRaIPC9%2n)}_PhDA%2xhXc=a z_3-W@iASo$NkHxnLSuq;F}R592U@D#OhcLn3$e5`=vjqBnwU&J87XaBFm9VWt^M)g zb&kvVl;V=t`OZN;Q6*l1NNcM-2w^)Lh#CNmZh_FRm-P_Lfb%iOO%TKrq6!y} zx0EGBnq3G(QLe=@^l$4-MKTW-;CNCE1j>`lul>djsxka3(SR78-#}whn(aSMD7LY4t z>V!DFmBv)0!PAH$&OG{lpanZy-zSD9FL1nHT=40F2$Ng{>5EFJ{6OD^Zdh-L)>KKc z0GT$I$(bkC;4RTyF2=immA0tkMcd_TxDcde@h&!53h{)1N2hCvOfqG*(qUJZ)^gRy z+*#6?L$kp_Z@6s~(`1W6g>UHIpJ+;k($82d-za)vqHdqdS!};jZ+k-nKbVmB4doy6 z_<>LvkVL7BTaVTBWt~4tkX=Fn*XkOR*V#$YB)`9=pfPcosxYk6+;-~3?>99CRK*YKW!$v^* zHZrz;s?e>Id>y`epTFjdg~-F@xX=-rjgvR|?>cK-ZBkK?ROq`|cm$ih3p zG?jM%$>(Xvm8(JzH7Bp`&~(fLTNsQdY}*)`pndIlE9n?n38;KKJ6m! z=3_gbqx+EspItJPm0QdR=1pI9TpWGm?t7Z`*517Q=N-#Vf3h)n9>ak_8*xl_2IY$N zjNdyhdpBI~G>)jN^&1?j&d}7`8?8a$NJ>AiGX2^>{cisGYCf>s%7aPp$kFCzd)W0~ zI+AuYZ_y>TB2K73jh!t{X-pBn5H?har`;Pb7ZMr-jP)U@pDmN3K@!6@hl0}PRes`9 z3=@62^&RpsI&e?NvhS-ebp;Pao63pdW1f0V)0>O_6V-dMjJfJD5Z#&(uUW;PD)wNx zR)H9FqK4>F(7(flJ)Cw;{(O`|(Q4+L8L9*kc4-J+Vr|HI>Rb*jyC{)jLd39BP)LjK zCzIJC5uPsIliGkTBL0V;>#JFK+dH#7fYw(FK97sy1ms|1jigI-98ni*Utn{bW!bba z4--OPN7^EqUEF&b%fnW+-K2QhKZs_I1p3F&M34%l3MU24Rrk7cEc;?PCuY7|Xd#UZ ziP#NtP=XO7Pa7n8qF^<@Qp9h*hiCTdm_CHEjzw5_DD1A||F9b6P&w`6cPCpLN$Wz* z#{*_rE%O-?D)F3m=iIqk{)bLo4rfPP@KYr+qTtpgx+_Rp$2&X4NHLL!h=`V}dU~;Z zeeDM}8y*CcR#nl+(C zThth(=3Qg{y`xb#D>@@Sng*)f8q9-r7e-fr!p7gSOgS1M23@RW{Q-4fV4k=ho>Dj^ z(f^$bpoX4-_O}SMa&zF>NDF$x6~$-Rzi)hdmJ;Y^e@DN^E&Z>G9NPb1F8iFwknVMb zeR9I*&nA#TAN=FRgkbwIzlF%c_3qG-7mQC)L%AhBXl;Jfvn$L!NS3p} zhLVdi)i_PquyeyAuUROQTMxCvDIC?duUu_=;Cr|UwAPl<_Zm4QZ^TIQJ&>f;;(1cg z1<`(9$v@W**6)%xS?UWWiX;N!4U~vc|pXNUd8QbyNV*-Vk#GoIVH9jSof{WE#ocsT(>|u z@zos$2;B601Jgfn>xzQ?BEF=1$K!L})!REhRH(5hiVg4r7HAXww%4$yOjg$`!aL&W z%Suhi07fjqYUrx37_7(MiK`%opRo20%dQD%LzRQ&HF&|hx$68in|#~wd?ZNqYSx}s|hbZnZZ8v;*Zf4(d@;FbmvJ*8<{;s zE+lG^+2Men%V^QccGtynLhZu(@;}#pQE6dVD$X`ykd8R?wH;cRMKKORuoSndE`n~l zTO=-~AQgB2Frb;~9Km9i25?=y4PVu156%Xg5DVX|IP!pcuku=x94#9%dTVIi_X&;$ z%Qx3tIXTGf?vgsRpY8d{`+3x@$IeXLL}v_jGUtZ+I+KF9b+dL<#wH!71o0^Z;bx1p4 z;-O=}?~`meUK{OjiNB!KC7dc@Z|nUWugsaun-K(LGE_`LB{X}tCc+cxUMmsvC7ToHL;RCBR{0$xEuB9>O}ILGh6{jIZp;Eca?`yuc_S7#@P}_N(K1MC^zI{ z+Ss?y)sN>Qzolo^##b(hWK6GtNyy4;J;5PPcNcA7g*S;nh!E7z5I3BW_Bh)Mq;i$ws9ridYL?(luEO;%oc$~ zaVouT8uHDMrqXG!$j9p$hJo_W9=a6H=D{dRqpR|FWfxrWH{d0WgGjO=p^l*RTQBTz zMFNZLXH4^ep`(j|?i6}|W8BKL76r=`NEhpq&SlSHm=6-^vM0VbYwiu>uu~=B2&L^3 zbXWjmvoJrz#&2t1tQ#8>PW^f_K(Y&-M!FwR@!Y1NOB8Bfu%yc&iXkJEu7UPv<)yK} z+7SevPh9!<@kd|G++FnkfK}x%6eUE@XigN;w|{q13ae3fL^BIhSDKwN+s2K^1m+hC zb_az8D`|6JR$k|GY~9tF&KE>Y^Zc~j!S=gzpwK@W%2GItTO8U#yy#w=BMBs}tg7N` z2D4h)8AdeJu_d$|O!4?2XhZBkdylS;yjgFbsA2~a3OF24q2wwqtR|(agHLc+zpp67 znrJfLyh_S-(;r`h%YU%kh0^NtD382iP_D9xGoCSE-mN z?bhkqPmy+498byC?b*eU47<1@yrq617bbQ^A~&;D#uVxzuw)|@)Rqnp&uB+foKzb& z0SDvjFUT!9xj+>cI-{$5;%7>3#0=(}sGN9NjaL~9z$$P$c^ z5)c8wpkc#Fx-llm@`AQ~OhzpcKJ5`1Ed2DhDqL4v=NavszR}31Kk>Kx@vgoa zO)@nQz0bZy{$$tvY$IRs90QPAhtlxIPL9h`yahn9y?$PZemfXa`Ez61aw?^RYef{E z`V;KU9hhDlR^$R^KVQjV+Tzp55GHHVu!Wn12C}UVc3qLY^?bOV&6Ag20LV%zALJfw zl4RL4rR3UT^gTZuKz(fJ)YTwqZ#XicGs!TQotZ?k+hWVB(^YSOt+7~7oP_DBkGs4S zy_InNejqY(eLXd|`C^29b$RjY++#EA_gx(=;dL3qVc1r_blC-bvI1v}LxY%(+p62w z2cbi^RHN|1dU~Qe6pAW)r*bH7srl}eW0aZ<^4rzolvf)?GoBHlNbJ%ViW=-`&L7LV zQnycCu9v`>BrBSEhLxTOKD=AIF07+@_iwn^0t+rCw1-iG9hLc7KkeQ%5QS~?wcplg zjnlUWC_T`uKGNJx@*yG?9(nj8vb3DN>e>Oe^H9Y&(QHX&tZ((4E(PUB;p}qCU==GO zf95VgM^uc90y3wDr1Veht+h@Q{3w$6RP>dLmV|>h;_Qt0+nr|llC6hlgB4ahN$2Cd zd$CqS0G_iMcq=EGS9x7&_r3`yfYw!Ou6NEawS+_|&Tr?{p;=4!^tKe`4oT(-$G2FD z2ZpRrhF4 zs%4p~rxK}toGBft&t-jmh~&F308YFW^{1MQIy;V{6aUKBDtQJP^xulD`8>Yj+;J`k za(aFX>zN0dN1Bg9GQn6(C&!}YD0a4oD&QiEU$Y~IS_6uz0*wh6yNv#!J$8NjD$yrQ zaP!w7Km6u9w(C4$(kCN6ZH_>~vsnhgtW3rRY{iH6PTbEHSM6o8Du`Glqgni)>O`GR z?~uo6nunI{S2qgrXsE@tIc`?*>yrjR8U?5eQD#mYN~C7$G)nS2 zE4OPGtKlRS2(!7+s_4m)vHHAl)#RJ;oK_@}76`r+yX@zRHH*xGy^+5;@FS@8G`xTT3#?^F5xD2mAaA?SFRJZc+%6S?p~ zgjsG2I=VMolD5yt8Ol%g<+6o;b3PKQASj48L$R{5a{nTpmO)@OIdk$MTjXqilIy|e z-PbK0q+ol`&Xc{tEW?!o0GPb}8GZQ(*i#O^k5< z!IOhZ84`8b!X!t3l%T8oZZR za&G}i{FxTf|3z~I%74Flci!gEcJHaSR>J>6EJc7`|En+W{_i{ZkC%b}=L0*u+0FR^ z+*sNg)4yk)kbce-(ZN`YhyJCxCDP(q|JO=m=d6|>x;0zrJ;$uZr2kRJMzEn_f&S04 znA*F#!q>w-UY@vPDWr0L`6ywBa|ILrKehMOL2)-tg9`}|AV3l}+`t zR4ah2h>CuHe7L=jk&=rm1^ea8CSEUOzMA{uZ^7>XVST#l7n_N6k53y3Lhco`a@5#b zjw%^s>ARRCS$vMkdk%)`dv?WoQ2O_UjHb4Q9QIO4H1)K3!@c74ojj|0 z`()#jqB7q+Y`t>^yYFJgzHvTq)q$9IIgrU_mw@Zu{D^R~XL4Z#ieoXYw-H_@e7OW@p1xJ*-y~@{+3o7871|hA6CYW2uXeZK{;x!Ku>kDlM+A1|QL9J_5$3Bs;PbiVEz zt)HuV0`uQ0S(h%P661b+U_r+AeeY49B(bDjjwjqZ!CJO?t-eDkS~RglRK;e!HQfew z@-*g25w-!M>nj``fAZZ-bzAHPiZw(`oPzNX(4RvBQ&tg5?2lum@W5a+MSuLHAhjfLSf5Nr-C64yx_E@ zd;*iNfc1(Vviwm8>53k4`woqik54)zwVFd>dp0RJlg~5vlsVeT<2%oEH$y0%)E7Vi z$U>~~wO9G@b}fhCNZv5DcycL3g24jY>Gi>2HgcaE9A5s)sEqB_u50~Hf(g^thWLjx z56mlAkEMO73>?Exthd^G4F%Ty@SnZu0{LWYlQm^{{C=JZ@eOi=ErPoU<^mtmSCwH! zS=X-v61+N`p6i}-NcK`Fubxp7M^e|Czf)n_A1Tq`dUo{_TQs_>yvwt23bT=$m{2AM zks^LEI4pRY^w0kUuFXxY`?@xuTHxIat&*GTs|fxkO>wELObFNiSQjg@kusiCH7y>= zC1}z;An#g~!q=$dv0a!$fx#A?gNmeFOsIvEE8iPSrVP}>UX!O;Cv}P<6An5%?LcAx zE=2v9)GgyIdC@7eVPt^dr{DhN6#Lq4566TDx|Rog@-^m^5#;kC;GXTM++dScb;vtP z$|HfzFg|rhj3Fqsdir6t1|OIrhs?a=!H)DO`G;`wBlz-uBB2GqrUq4{1F=?g zE10ecMWVjDZP0hgP~}3dYDA?Qcz{`x@qYI{(>c`wa>9XfMcL~1wl>a}f!dY+NFjsY zB6P6jKf% zU0ZQEa=7R>D3`V~1(@3Au3E`sj!!yQ+iYRprBijWqM8FQ@r>GI@H^Ww-_$0vVR@;e@YrV0|P$-d8`CH2e%hSUsSg%e$>)~`UKFdDxafzl+w6Csn=rUUJuA;S^A41T6Dvjd{8m2PDI@_}BbvR~jxY@FY zd(L(HsBa+XFgA{{xDZw1L8*Ux5}MX9t}SMuo6Q%oSkHW&DWOuSVKAPGcs({u<*=3$ zP}~RVU75J5fHN#c~3O8E8RvmQZHi4WZD%U62I-8QtRInztb* zAkk~%TAqsPJ#qYPZ@kj*EXT>hxTlCj)7e|Q;hs$eJB1MSPpxYgKD|m-Uv@Z&#qmyxd^(qLB{qZj=k;uMA+iKN8po{eT{ z6%z=Z4Mf?=EJury>TML1nSLVvWnB33C-~j8Uo|)9z~K($KoUZ+e^)?o3Ac&l3ulIE zp1<v*RfB5s&r?0J~&K!QfZ-*z7K;P@5_2;53vB+`ZN2w9!u zs>S2gtGwpmWj2>k(+GUJ67A!6eYebV-+V#rycBv>U9&oQXtzYR7)q}8gw^@%^p0)j zn8r%dhAZ#_J9!mZPrP!i9kt1)$4zz+jTFuR;b1`JF5^4M{RG__l%FmWYW~cZ@IX98 z19_S#!ikW!K|xm89KuCDHN9?A1$=+njUY^;fllC%y94o+QA%BW$;TW!CAS)<-DU8& zL603nzi@YY1g5jDbJ$yev^PVq;v#D4UZj5d%9j{BJ6_v3^Ufz$s;9@j`@zYR zi6}v2TZ{Fvbw{{-`9=77=C%62l@?Jst4TI_J-ML&HRMHV3kf#l^2`eO??c`ObLn6$ ze-DofI7lZ0TQKSdgh9!_`Ai6AkC~(R4lMPFdEIXore(YD6*?om(C!eHo+W*1qLWtZ z$A+)SjTisp4nj?*6ry2lF?LrUw3}KPQXt+k*kbXual9HC3!Kq^*YYcs--%SZo=*9~ zWxb;i|24bmat4#qLr}@&c``|d`_Y=ui*rVOmKDXuhN)PU9&a$5EQ**A&wKZXE}k9_ zLaO%?p-iFH1>amf_6v&>-BB+u0uj}qYqX|b4DMJU4YV|Dum*Q%F-=P1C}>BC$4~ai z(~E_C?%CI+cm$WpoWk0V) zq28KT8CoRyl%){OiFK8$VEg*8={XvPuKDt8#F!AnDjFT3<91pm`ZMlMG1(TF? z;q|h1k=t#-7l{b{AP*AK%gPnlCLjpJa=o2UB<^2Rk%m2UFOwn-NeRTt z(*8YCEB4HIi1?MWS7$ay5O;4zEnBNN3biA~HVmqr%TX8GD24x`e$8-;lwXZ~xx#68 zsr3otHyDed_r4vx8kx}{vXYAHM|!yQ>a`s%2y_#`kU3J#AMSpUX}YKvA+$*SCj`I_lOk8-2L__}!KvEbb*H^0&9!jy(Xxw5_e9`ZnXlt}(pZ%l%7|TH z@r>lwIoo1UY6gS(BzN!axH_xV(`FG^d3^$Pv6si5D_*m4-6Bu&)v|jsil%DL_agc{ z!m4bm_-qfP1QO=>ZnnVjhGKLc>-ewUM>$RW6||)v`Vk-%E3@hBRmM@SOI-!3Pt0{w zO-&YWfp@=S9kJ*rcV!4KPcgpYD4!Fhb%OXYI*P`ao8DN@^xIy)&|m>{KIFct{*A~^ z+0tK-SV{Capc_9}4&-4snzalkhW6z)~_`jHKU{BzXK`b`1xrUpOC zf{^Z7N^g9$zN=RM0@8h%>hItt=3T2A6CA|{oA1l$e{f9E#N335M5JSQaFCXI_O(YT zLpIZ*`vdGpq2taM?Ajmeme-yXgAwVS5g2O3zTwGfbDzN+X^Tbo;0`i5yCt)36M9~? z=|h;@lKY#$;iG2AcmN9U>e{iTaV9oJ6NC`n^!z=LM*dZdg?rcRV3}soXZCcv& zOl$BI-@}L`H#PJviEgq?YB#>FciTJ`M|?9Q%Syg1^5dE*qamTjVRQ&Z}4Q6>sxalJ}g=l84@TFU56t%Fd<%x!gQSdxoeNy%6>qr16>CglXS)$Z) zgu2T*$dgiz9%qV$ExXI2hogN*O7w-rrpjDH+P=PJ=YP#*&yAhv)Xf$k4p?o6N7;Qh zwkg@HQ@|;Go|>D%8`?Q!06~vrsgn~RT$%-zruK<6&BpaX-$VCOe-|r6`9Nt{C z-)I%QpRV7eHv#jD4$ht>5vzuo;A(Nlse~Nc;{{(w;J3{9m=T5v1bx>XW0pC?ny;^w zdtyHS+}_Yof>j1>uWCb12pzxXfSL-1AQc0SHar1raM*}BF!^6EqHu5Gb%;<1M%4v* z(IRnc;!eIXzj|2#m@f8e5;9;&N#V*-6F6(u3lys3mcs0 zy+G$Q=fKR#1r9|E*d@-X>lJ+nuYl@ZQI<&(Q45WoRHPq-RUe~gKi5+&l#ax78Ea7; z(M`YAaD;=>>inaPQg(^?osfTovOha(H>fqNeS%>8jEjvs(P~Yh6b~%DjU8(N*XP5= zpr70eP(Zc?O{O+N35U*md6lSzVwhC#gq>9dSH!Ni!vjO@&M<<*|+i2WSJv;~$5A_~tjt)!4KLkY|h5O_;?Wh|=DMY(>AtaGc!=bUK?PH-gC32JFA z^;y$TXuY_}^T5R?M3^X1AZ5L>TM>okIX7@C@_2JT8Booi54I*Avh$}OzDI&637y>i z!dt)|izttsv(ukMx8!?uPczx*3I_oPT0~3%G$`IYvhG*p<{YH~+gl_Ia8IFdsLhA_ z?fr2w+w`!tTdr2}&4leG$Y%-?QDy?n*2Dee!wd>Oqre{JlGLuW;YH?(+GCf_Ofk+b>N#T5%Z z8>K=;JMDBAjGl44JrXtu$wa%}%2>CQn!*(^lTD$?`!=v*A-{bvi*Cf@gRVi^vPrwW zE#9uOwY#PgT4CIDQdWSS808G^ba(*%_|bc#hsu8G<|?285v2Gu@uY`}{=$W$PJ{1E zx@xN%LOmjAz;Y$foc@h5!R==9S;Bc zAVPiMtXsg~p~MveUNli5Gh@ilDxqf){UKd<>aNbYv9IIdC=lMhACVMibdc8(#KU4@ z4p2JCrjEp$y$-Uc0|&~lauo0PISC_(UuE0FFXtLy{l9fe(t!Aods!aa?`#po64!UU zL>o~t$3A9Z{^uK_WB0k@K2@@RN+>jFZExQA__qy7aDpV(HzEs^pa0zp61_%$Kf=33 zqDb-wkXjo_<3BCp{>#Beq?@aI;j;%m{pQDiSTK4GB&?SiO8(|eHpJnv$%Gc}esx&% zSE*9#5hJwKgfW?Ix84*L1HH4eQyS^fx{0~Ey1pdD>&e|t&r=WEq6_YmHBdnnwPut} z=FF2E&!_wTr#kE-`QX9-ou}Ua=LTqhulFAf?#cgDkPVXaL&;CE^j`=5Io`txTy)pT z`EK1pFK=!|jzIS~-^Ko-339;lw{M85;-28Qje@>aPs{j}iKAOnz{qev&k0XrfkLOA z?rx-UcHD0d2-XO^C|@@46h41$3pLa|>6?ah%zh2fjZW!a^{pKJ@r5IrDY7I#GxGz- zA3{C2fekX~bk?wQkUvY~7QzU1F{({fx>|4YE@cDbTy|I#GMB}on1962{$ zYgpfI_1Hreog(t6GW!GSzYv;l8^(DkcYZfX=2@C_^iko+00;LmtZ*8T#xJ4P*C-R@ zeNEn1TGigaJbqYAswQx4G_)pR|Acs0`B4?tb+k;^8~Q4`#&EcbmjyxC*H_+^GQCH_AWR zM7iw^OYPmd7bf)utDZNIsg(~^l0*u5V}+OW6YIe6K%@f*mU>UZ2q4=T8QGWqZ`}&T zn2}y;y6RuL8-VmlEG6f!r@NhgdR^%u2R33i+aX|q;Xucgp->)~+b!}C3KupzEw#Pv zPp69(4mXtbzV>M-V@26S)T+YnnA;cW`mHIg98NS$vYtUcWP>?ci64I)DrAfmxSX9- zGF6hd0LoTPIBaQunBLq9tyqqSFHK5Cxfncz$O}@uzCc+mWjZ;Ky)xtNZLQegFcqvd zK*+Ab(}C36l5#yI@r~I!Vvmn&6n|T}p`d&d3|Gh~A^)bW{m0i=9|neTW!$YPJPxVr z=4`78p@%Gl%qnu0smn@qd11gkcS z7kM%k)BY&i5LR~a)Z~z^4zK&mH&WtZ0kD*T*-n4EHrvhbW4W4Kr>xN443O|zGRMIX zo895n3nmPVZsvVOyD7SwhFt6*$yswN*Yk4cIE#gE$Z$MFEO_5AS_PsSSGGaELcn8=5r}XAZ#_r5k(nJbeCZSRN z>6*3`U{#eta^7HzabT0TAng_Xghy)`bLZ9y*ZH3GtVz>DTPKL9-n>l z8iD=UDRP@5dZvLHy7&T5b_{yfSVoCo+Dx6YOtEqy;TQI1g=kD{vYgItwWM?;;yV*0 zGRRGo3^8}An2oG+F9((9S_BQ=#f#|@&)v~b75Y`Hbjmk$(a+!Rtl8h8f)o*b5$_eR zH8B{RQ3!mg&Yq9%QZHf9DV)$r(~j5SV%&SBdJPtgUlqNIL&qrim~zSg0ve&;V@t`B zA)NC@w(~ulP%kdm9ar~9FlF|-(ux6~<`zk*vKUF`m`*eKl`mL-I>P-)U0q$-*U>k~ z7=&HdC+qzX2n`ccM|K$i2EjNlYAZ$gLdRY4%VL9_kv<`f1 z>AKzNLg8_krwE`yQnu^XpemRUPxBF8P@&#Era{X=jDqqR7oHAth5H-D-l(4%JEyMKgI3B6^6RUN(Sed~O37_D8*!yf_4 zK)W92U@6zWu(|ONJ|4@H-kk=K#nQ+lXPQFN8MGU4@bU3+B_0(fH=|W7w7hPeh5Pxt z*&1}lLZp{QCNb{u)A7N)1CpW8UqlZ42tf$YJn3~qIH5A6lKxHQj_g~ugdEfWoCf62 zc|*F*0drW3S{-q$I)j<$wZ9IDV&d(e>)d{+|=VDHoKRdsd=fD zgNQ6AM;r++Sq#eVXC467M{i%e3uRH&pGycYbeOS0~jObkCnJ zN_}}Z)0!wCu5PYk+i8$)tR@QW&P^GP{)wLC`a-8$o^MUos9Hn)^2ler(Z$C73JQKW zb-BjH{Nv@e)$QU3su#2^1IUTUiad>*7E_J!2EEgt%5DfTPh;svQWiC+{V8|idnA%)-& zZvIre*z8wbVg}t zPdkM*V6<4LJS;A(Gj^QN+4Sc;MFQh3P|4cZ?0jTh2KB6oooxKL;I1v-s93YR)u+F! zz!@c9Xfl9xx(qV{?a> z^2Kj`dVqa~psn_nSGC8bPW`cCiw8_WC**QF{mPVudgqecX3VQstD&VTzE7wy?AgkR z{pciE?#Du4WF(eq5pL%Q7U_ez@X3WB^U-T=tsEW(Oq$pQr#g&M6UQx<~LmJ(G$<8VcbPKLQ4p(BpDBjoJJOe>4hx3 zVR-+3sF)|%)H}I*DtM7S;&o+@h>de+1a&^&+jW< zs{rtBJf0kbC}vD5SIsL|vnfXY4(GjE9aHi{!otvXZa#g1bw2O;^a)>Jm$XkCoPYWe zoa_oG+p?0@7{rHa?;g5XiEv|_F_8JNerK8knaZwkc%N{M-KyKBMGjt&@o_HijPT%YI@Q}OQ4ut|i$u_I7@MU;1D)r@c*1vMk|8GLsQo`r_1c`QmxKolrkh8pDkM!FWyVeco|cCVND zSe3W?`(!q%GbNx1;ovSSY;VX*X*o`(jtzg=U6%Ujecob3kEOtGX>|dkFLUu~8$$VB zocPwI!=pjYgPGcVv7H*!fkX+~(GF0}7}-f&^=YldvrjrHVU3pkV6L?I6uyh0(2KOw z_{tU_TVXdYz!wncKY_lVF4d5pp2b9zsp|4m+9_rWciQNDuGVz*d&sV?_0XESp+iS= zugQA3q}cc#KgUWCaIx8{;v6<1XzP(KaMt8my)VyZJt7NSXiciNppThcJOyEw4zHB3 zvAXw=*>BNUgWV3%X5oEZju~uJ7pAQ~%ibBccN?CyTc_+3Sn^p-bhSdqpVQw{Rx<%h zIk(gXNhOhW(zCSFWle?$Iy#P@Gt$HpQEyN1kq#tPni!kNrYKwL0&&5NqqXZz4TqY7Mv-KzC#nOs%oP5|O_jDq|EsR_)ma&CSTw5jMEy*srwzA?>{Zop88D2_) z^I1{7TdB$VSLsQCFa6o}ylOY9OhM8?^HWAsy{!pZpwp>c;dC&gfKOE5OODx-k?)Qk zE0>l>UY6EC4q8YCE8}3q*OW1IHv28v`~QFuiAK^X0y<8k4r{c0cP>*uB9OB@ zLM>@8(HJ3VXjs!c=373`$NDohZi-<*AT4lf?=m1a)$u@(-G6%_y1P;L`O5pdy))=9 zU5P`VW}3uvK9+Ulj2hErCOW8ARLWEpgyvH-MdMsX%n3MgE7=JQoXdNoN!m(3*yzoU zZJ_~Gb4bydy~UgjpiiK-Y2+8V?DAGA@Y_w#JwI<6nyu$`F!5v-l8Jdp#df26o#QkS z>&8cZ?9A9_pj;3{F*FDjq5F@oGr@|>?6X`-_dLGDh#rE`ATDo(eO_%g9)RPU& zUur>tabs5j_Lx?>iF?ahz*u~>d=WDX?`lKohy@^j^<|`F?a8i!+(1A&fxGCSRl*d1 zoSUXkhFfiF0_dRr-i*P-i9#||5<;W>kYPG$787aOzsYz{B@%+O;0 zoXg3}L)=?prte#^i;M$zSnAgOVXjI)i5x6CqyZ>p_e*s*c zIlbx$r>|^?Vs{dv&EbR$nW|aMR0heqIc~Pu4eNjwmwSRWUQpD;F-Tk#Vnuy2-0cl42wkGo2mbC@J?P8LEF6b`P6zCT_wFcb2A`nl}W1dCJ+Fh zE>zP2Ub;*gtC`|e4a90UiR9B5QSS?+uJLvtKG$M+7SQ% zKuny9h*3ot-rN!s=umltV+jDvWS}xX%pksg_&j|aJ=1&myl8v)kozJ49(5n^;Ome9 zkGAw*j{Z%Qkp{%N&+l9xVK85zG$6=6F2VhdxD4go3i~&#ou_qQ7`B?7_$rM= zc*e$z^OO!t=HPDpmf4KNEXp%YQ z#x4Gq$*`vn+j8tozvqD-+rM`^D|NJ1idOvPc#L$sgrdcOr=+41-$|c*>bE3IFz@9u zuxTH2aEtwL=vF3=6q_SW-LS`?Z>$CN*e~>97o9kR@}$tv(73@(FWrX|S4F(=zM1xO z{2=e=eN%Id^zZ|{Uc#j2QB(l;K3b0?(*U7K1O8JY{x`b+TO9cJQT|<~{hKKNF`xf6 z%0D3*{{rQom8QP{{|Q3;(*pRfQ2uG!{g09R|I_Y&zo@?95hi+=@p$Y7_+L-@|99y4 zf0WpM0B9oqe>VPKz{da8v~$HkSeTfIv!4}yj5-FMa7)(MESpe0{PA^CO7avI7=GKr zqPG&Q`rw6qRSTjhMV2{=7e>n3%^%_SCZ?v0RzXMf%9N75n1@Q5nuaQms7@#I<#zE|vh8T|t&KvGOjv{YE{+kXL=^7?%M literal 0 Hc-jL100001 diff --git a/docs/img/tutorial/sub-applications/image02.png b/docs/img/tutorial/sub-applications/image02.png new file mode 100644 index 0000000000000000000000000000000000000000..47abeda521636fc0d5f32c8032e15b4658b1bd84 GIT binary patch literal 53366 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 YjTOuCI2gu`9>f4BsK2R}dmr@Q0J<}N=Kufz literal 0 Hc-jL100001 diff --git a/docs/src/sub_applications/tutorial001.py b/docs/src/sub_applications/tutorial001.py new file mode 100644 index 0000000000..3b1f77a82a --- /dev/null +++ b/docs/src/sub_applications/tutorial001.py @@ -0,0 +1,19 @@ +from fastapi import FastAPI + +app = FastAPI() + + +@app.get("/app") +def read_main(): + return {"message": "Hello World from main app"} + + +subapi = FastAPI(openapi_prefix="/subapi") + + +@subapi.get("/sub") +def read_sub(): + return {"message": "Hello World from sub API"} + + +app.mount("/subapi", subapi) diff --git a/docs/tutorial/sub-applications-proxy.md b/docs/tutorial/sub-applications-proxy.md new file mode 100644 index 0000000000..daf67429bc --- /dev/null +++ b/docs/tutorial/sub-applications-proxy.md @@ -0,0 +1,95 @@ +There are at least two situations where you could need to create your **FastAPI** application using some specific paths. + +But then you need to set them up to be served with a path prefix. + +It could happen if you have a: + +* **Proxy** server. +* You are "**mounting**" a FastAPI application inside another FastAPI application (or inside another ASGI application, like Starlette). + +## Proxy + +Having a proxy in this case means that you could declare a path at `/app`, but then, you could need to add a layer on top (the Proxy) that would put your **FastAPI** application under a path like `/api/v1`. + +In this case, the original path `/app` will actually be served at `/api/v1/app`. + +Even though your application "thinks" it is serving at `/app`. + +And the Proxy could be re-writing the path "on the fly" to keep your application convinced that it is serving at `/app`. + +Up to here, everything would work as normally. + +But then, when you open the integrated docs, they would expect to get the OpenAPI schema at `/openapi.json`, instead of `/api/v1/openapi.json`. + +So, the frontend (that runs in the browser) would try to reach `/openapi.json` and wouldn't be able to get the OpenAPI schema. + +So, it's needed that the frontend looks for the OpenAPI schema at `/api/v1/openapi.json`. + +And it's also needed that the returned JSON OpenAPI schema has the defined path at `/api/v1/app` (behind the proxy) instead of `/app`. + +--- + +For these cases, you can declare an `openapi_prefix` parameter in your `FastAPI` application. + +See the section below, about "mounting", for an example. + + +## Mounting a **FastAPI** application + +"Mounting" means adding a complete "independent" application in a specific path, that then takes care of handling all the sub-paths. + +You could want to do this if you have several "independent" applications that you want to separate, having their own independent OpenAPI schema and user interfaces. + +### Top-level application + +First, create the main, top-level, **FastAPI** application, and its path operations: + +```Python hl_lines="3 6 7 8" +{!./src/sub_applications/tutorial001.py!} +``` + +### Sub-application + +Then, create your sub-application, and its path operations. + +This sub-application is just another standard FastAPI application, but this is the one that will be "mounted". + +When creating the sub-application, use the parameter `openapi_prefix`. In this case, with a prefix of `/subapi`: + +```Python hl_lines="11 14 15 16" +{!./src/sub_applications/tutorial001.py!} +``` + +### Mount the sub-application + +In your top-level application, `app`, mount the sub-application, `subapi`. + +Here you need to make sure you use the same path that you used for the `openapi_prefix`, in this case, `/subapi`: + +```Python hl_lines="11 19" +{!./src/sub_applications/tutorial001.py!} +``` + +## Check the automatic API docs + +Now, run `uvicorn`, if your file is at `main.py`, it would be: + +```bash +uvicorn main:app --debug +``` + +And open the docs at http://127.0.0.1:8000/docs. + +You will see the automatic API docs for the main app, including only its own paths: + + + + +And then, open the docs for the sub-application, at http://127.0.0.1:8000/subapi/docs. + +You will see the automatic API docs for the sub-application, including only its own sub-paths, with their correct prefix: + + + + +If you try interacting with any of the two user interfaces, they will work, because the browser will be able to talk to the correct path (or sub-path). \ No newline at end of file diff --git a/fastapi/applications.py b/fastapi/applications.py index 2d5a0b8627..ac47b130f9 100644 --- a/fastapi/applications.py +++ b/fastapi/applications.py @@ -25,6 +25,7 @@ class FastAPI(Starlette): description: str = "", version: str = "0.1.0", openapi_url: Optional[str] = "/openapi.json", + openapi_prefix: str = "", docs_url: Optional[str] = "/docs", redoc_url: Optional[str] = "/redoc", **extra: Dict[str, Any], @@ -43,6 +44,7 @@ class FastAPI(Starlette): self.description = description self.version = version self.openapi_url = openapi_url + self.openapi_prefix = openapi_prefix.rstrip("/") self.docs_url = docs_url self.redoc_url = redoc_url self.extra = extra @@ -66,6 +68,7 @@ class FastAPI(Starlette): openapi_version=self.openapi_version, description=self.description, routes=self.routes, + openapi_prefix=self.openapi_prefix, ) return self.openapi_schema @@ -80,7 +83,8 @@ class FastAPI(Starlette): self.add_route( self.docs_url, lambda r: get_swagger_ui_html( - openapi_url=self.openapi_url, title=self.title + " - Swagger UI" + openapi_url=self.openapi_prefix + self.openapi_url, + title=self.title + " - Swagger UI", ), include_in_schema=False, ) @@ -88,7 +92,8 @@ class FastAPI(Starlette): self.add_route( self.redoc_url, lambda r: get_redoc_html( - openapi_url=self.openapi_url, title=self.title + " - ReDoc" + openapi_url=self.openapi_prefix + self.openapi_url, + title=self.title + " - ReDoc", ), include_in_schema=False, ) diff --git a/fastapi/openapi/utils.py b/fastapi/openapi/utils.py index d681088e52..4a603aa857 100644 --- a/fastapi/openapi/utils.py +++ b/fastapi/openapi/utils.py @@ -215,7 +215,8 @@ def get_openapi( version: str, openapi_version: str = "3.0.2", description: str = None, - routes: Sequence[BaseRoute] + routes: Sequence[BaseRoute], + openapi_prefix: str = "" ) -> Dict: info = {"title": title, "version": version} if description: @@ -234,7 +235,7 @@ def get_openapi( if result: path, security_schemes, path_definitions = result if path: - paths.setdefault(route.path, {}).update(path) + paths.setdefault(openapi_prefix + route.path, {}).update(path) if security_schemes: components.setdefault("securitySchemes", {}).update( security_schemes diff --git a/mkdocs.yml b/mkdocs.yml index f8a3b31167..d3631b7f79 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -57,6 +57,7 @@ nav: - SQL (Relational) Databases: 'tutorial/sql-databases.md' - NoSQL (Distributed / Big Data) Databases: 'tutorial/nosql-databases.md' - Bigger Applications - Multiple Files: 'tutorial/bigger-applications.md' + - Sub Applications - Under a Proxy: 'tutorial/sub-applications-proxy.md' - Application Configuration: 'tutorial/application-configuration.md' - Extra Starlette options: 'tutorial/extra-starlette.md' - Concurrency and async / await: 'async.md' diff --git a/tests/test_tutorial/test_sub_applications/__init__.py b/tests/test_tutorial/test_sub_applications/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/test_tutorial/test_sub_applications/test_tutorial001.py b/tests/test_tutorial/test_sub_applications/test_tutorial001.py new file mode 100644 index 0000000000..87b44abbe8 --- /dev/null +++ b/tests/test_tutorial/test_sub_applications/test_tutorial001.py @@ -0,0 +1,66 @@ +from starlette.testclient import TestClient + +from sub_applications.tutorial001 import app + +client = TestClient(app) + +openapi_schema_main = { + "openapi": "3.0.2", + "info": {"title": "Fast API", "version": "0.1.0"}, + "paths": { + "/app": { + "get": { + "responses": { + "200": { + "description": "Successful Response", + "content": {"application/json": {"schema": {}}}, + } + }, + "summary": "Read Main Get", + "operationId": "read_main_app_get", + } + } + }, +} +openapi_schema_sub = { + "openapi": "3.0.2", + "info": {"title": "Fast API", "version": "0.1.0"}, + "paths": { + "/subapi/sub": { + "get": { + "responses": { + "200": { + "description": "Successful Response", + "content": {"application/json": {"schema": {}}}, + } + }, + "summary": "Read Sub Get", + "operationId": "read_sub_sub_get", + } + } + }, +} + + +def test_openapi_schema_main(): + response = client.get("/openapi.json") + assert response.status_code == 200 + assert response.json() == openapi_schema_main + + +def test_main(): + response = client.get("/app") + assert response.status_code == 200 + assert response.json() == {"message": "Hello World from main app"} + + +def test_openapi_schema_sub(): + response = client.get("/subapi/openapi.json") + assert response.status_code == 200 + assert response.json() == openapi_schema_sub + + +def test_sub(): + response = client.get("/subapi/sub") + assert response.status_code == 200 + assert response.json() == {"message": "Hello World from sub API"} -- 2.47.3