[pve-devel] [PATCH pve_flutter_frontend v3 3/3] Add first welcome screen

Aaron Lauterer a.lauterer at proxmox.com
Fri Dec 11 11:37:08 CET 2020


Signed-off-by: Aaron Lauterer <a.lauterer at proxmox.com>
---
passing through the page controller to the DotIndicator class is
necessary as it needs to be a listenable.

v2 -> v3:
Worked on the overall layout of the welcome screen to look good on
screens on all sizes. Limited the max width and made sure that on really
small screens or in landscape mode, scrolling is possible.

Made sure the logo on the first page does not get too big when in
landscape mode.

v1 -> v2:
* change welcome screens
  * no color change
  * buttons instead of text links
* use async where needed
* code cleanup in several places
* use SingleChildScrollView for content heavy welcome screens


 .../ssl_validate/login_manager_screen.png     | Bin 0 -> 20389 bytes
 .../login_manager_screen_settings.png         | Bin 0 -> 37362 bytes
 lib/main.dart                                 |  14 +-
 lib/utils/dot_indicator.dart                  | 108 +++++++++++
 .../pve_welcome_common.dart                   |  68 +++++++
 .../firstWelcomeScreen/pve_welcome_faq.dart   |  59 ++++++
 .../firstWelcomeScreen/pve_welcome_last.dart  |  94 ++++++++++
 .../firstWelcomeScreen/pve_welcome_logo.dart  |  49 +++++
 .../pve_welcome_ssl_hint.dart                 |  50 +++++
 lib/widgets/pve_first_welcome_screen.dart     | 173 ++++++++++++++++++
 pubspec.yaml                                  |   1 +
 11 files changed, 615 insertions(+), 1 deletion(-)
 create mode 100644 assets/images/ssl_validate/login_manager_screen.png
 create mode 100644 assets/images/ssl_validate/login_manager_screen_settings.png
 create mode 100644 lib/utils/dot_indicator.dart
 create mode 100644 lib/widgets/firstWelcomeScreen/pve_welcome_common.dart
 create mode 100644 lib/widgets/firstWelcomeScreen/pve_welcome_faq.dart
 create mode 100644 lib/widgets/firstWelcomeScreen/pve_welcome_last.dart
 create mode 100644 lib/widgets/firstWelcomeScreen/pve_welcome_logo.dart
 create mode 100644 lib/widgets/firstWelcomeScreen/pve_welcome_ssl_hint.dart
 create mode 100644 lib/widgets/pve_first_welcome_screen.dart

diff --git a/assets/images/ssl_validate/login_manager_screen.png b/assets/images/ssl_validate/login_manager_screen.png
new file mode 100644
index 0000000000000000000000000000000000000000..b6668cc8f5b3fcc742ee2a6ce019ea4318fda92a
GIT binary patch
literal 20389
zcmeHvXH-*L*Dlf(q)3-~KoFz^P`ZF9MX4g4&?H2969}CM9HlquH7Zi1O7BgD&{0|l
z0fMwhmtI2PhV#Cjqki}PyFcz7<NRQdk+oTS?YZWB)-#_uHxUoD)h=JUdWnF5;PQj}
z%8v*Lh@}Y#E?AS3;=iGjw`;)vy6AS_#Djo<;>!8Yh2iO-69NJ*f(Ob<`aTxx(_~q^
z2I-<3H*fN%|MAX7i6-S5*MpalB7~LixkbW-Na>As&(aa*dpF6<5cQ`j-nz<^;TNA9
zC at Uv%@xQzlO57u(27c1&x7p9WGG2;0nAs>=X`LQITDp!*8(^~hiu{7cQJcO)CA*E(
z!uPLUAS5QI;kxsT;J+WN{v>%4_kBt$`^OhQMm}Gmnf=c7^QGq_JOHkCvF*CgB)<<3
zvgQ1bsTW9yrBzQE8wq~9=bdLCZ~n7_|J*RT`56Jc8-17Q_W^P at AJSh|{EQ$tfr)08
z`3U%p at V9{r7pR7Qe-6=YLP9nkD24g&16=K2S$;CaU&~OnxbqCO;QE^4_W@$*+eE(_
z?pb>`1-V=FiLmE|-v*u$gxUVE;*Y0c_PuZ+Hlgjg$nOJqBUAov%l}u5Y;3(y-u~N8
z2MY+jpPP@%-`i*t6c&R9!G$)>9nw8<mx|vSaQI7??#;H??}w0-#vN5X$uqH6+K09%
z*2Ot`8{bwq!{NWP#SH at 1%b8Fgbxg#~<-C)3C$8w&vsVs-;@*03);FzQowF6&H`f59
zo>rdp+Rv=@^ySjbrhRB5&R6}#bcsCQchxvFH_vc at VX8W_%#^GHWz%>P_D75X;X_rE
zu&Q^$b}h32r_!^*pp at QN;T+)h-ieU3s2oK|H9Wi=V`HiI`4vtkXhxyzumR*k6pfHo
z7(zL2G&l;zesL5z+GHyKBYMNa59!$}%UW>eJ2)snC~t7<LhKFtJ*8h(GNL|9gvm;>
z at chV78Xeg++5F-DdN~<xYC_qA=(23x2X{vWA4}Q8ZFGSIN2_9>O<2pYJOi-|AHds2
zd^YC6FLM!-(oCF=uV!3!p%g7xhTOM-tUcX<jSM2y7_^?{UQ!AC#Z}s?uNXVbp!3J}
zG{>S$RwCN+Vm4Y at UM`!wd2}&X`<K|TlD(+>crZy85v`1ifDFV0tjBCwc$;wQ!nh-&
zYoo&Vv1}5zB0W|P_Ixm?&1R(~i#47lQ=!&L*DMP~rdj6ltes!yJHC`OI#X}GX!{mj
zUTcw&xPHIVtswC_aBDG08*<ug_UaAJ%j6EXpFIqA<_nk#AeiqlH|ix~Z&^y9&Z at pt
zDB|$N8*AI?;ZFjb^bpxMVf-%rEz$${TpuMo=*;k>^wmW-{bz*~zaU4N1>sTZX?^A4
zF?Dfi<|(KtRkNJJ`Ov|_eUHR``3SmBUa0)OFfyN1jUn>*mk18F=Y5!B at NmHKu-f|S
zvGq2R)%|IjVU1o40sM2_$BVxNu;?^NBnz8+%b3vHw2h}AOG~3Cn)SW2X-Mkl#n*qt
z^ZD$-$Hcwj(r@^lONs@*aZEN5<1q=H{}9(K5VL1y?u#;C4p!sTk($}L(|Edp9o{?*
z05vYf`tw1Uvb28L^qZ=$go?Q$UpUaw at ej<V8K*`Kar6+t86C?dmlj<cv at t`RekbM2
z6CNVkXYRu$gzOCR(v5%ow32pDM*hCp!Xm>@o{&{<XD|z!LBnA9Rkl9iqfyUq6t&vW
z(^23E*@3T;qO0PskH8}GFr`Cx%!Tu2daY0>Xr{#BF5TF!_+4)d4*(_6;s+O2wd=}P
z|7E>e6onnSaXu!b at GO!YK^CWLsfG0ACvT(5wb57{Z>cMMJDDNHqH+)I at 7nO#uj^8u
zmr~%-Y|F68%2WMqg5^Jd2I7%NuinnQxXMP?HgdjfaF=Ej0es*<AuaZ3S|#c&3dR(~
zg1o9`b0G#?1-`M)s9`wMyjr_#4$r>5)s##2t9t|y^2!1A4Fs)^A72hq at fx2^W4sVs
z!O!#EeUm3Hk8Z}#3jWx!wD~R^fnS;Kv0ZII-gK<u+4k-ix**i?Q(QrL78S}XvwB=z
z at NJACux2-Hj%_Z>$hpneRF2gawKwjBI~>PyYD$6SnzG#YE-wS4h{UI>&W_}$)QgAA
zTj$AOXN$-NF6|=*=>D_mktj)v^7*i~)|1B0;H;C4n?}<?-m<fTigxTxACDaiaJ5Kj
z=gO`T)A?GA?-R+P>qKhVAXVYS at 8OP7+-0fgr?!rW3`=u}vn)1)l?>X*#LjZ+?^^LV
z5<A?w?@`{=;0pVCl3TZit|=ZAj6DoOhg8mcaU9QO{p=du7x9}lBwSoY3a_Si`y?#0
z^+9lCo%;4 at g&8<^%y79LC at 5T|- at Dm*1#t8wHeg+0IT_`e!o8Y1!R_<VY3l<nFLYni
z-{o|z4Cb89xUq4CMCZ)oY<f6VM_wv$?bCCmq=2YJNp!%+R(3Sj6LMnQ=fHjE`{1<q
zH|gtTN8uxb<|i%qM=vg~HxqR8*j=?ufduW#vSSu8Eb|<GyAi at 4?P!&K=PBwow(SnK
za#A-&Co7g>(6`-Rp<mRk?>Fzxv_M46)kj-7Ij6l5^nLLPkPpk|9f=dC2UDvq4_tjt
zJ><HgRwoy~=lTu)QI_iy*LCR|rKcDb_diy!nj}whCKn6^&DGTnUS+$P-~G+`KylRl
z`mwV_Q&(hP!65~-Svr+O>P=OYOLJ-N5V^Q=in57Y?jf_XbG(mxoLHoAC0{G#_=p`H
zJFnP)j`CN~f<YHI%oY8I4s at 2&J85v)d#(2xLs-E(CmU^R2-6ih1fx=t1&6zfKRkm%
z;UvFRC&&!TL^YLrt6ulEj3)GGBebgV2CLVe|F<vKJ*T6{>y^L1Em7%GC$`^S|0+bW
zSYvti04*c;Q{)Aw3qDL46Z4Sh@?HeLfatOeR~|m%KwbvbkU!g{&^HUj%11SYJB5=I
zNAGQ0N?Js_cllEb1lq@~{TYCQqO>%;pG62IGAp86p&NODsntmgR>GMeGd-K6U5ZPK
zLosVn6_DZxnS&kSLEa@=jhNmLwlMacDte{J0PJC(<>=xS#k1bxgOx^|&9kj?tcX3!
zc7liWPppqe=)KjS7=`2liwu^;qAxkL8v1jKZOjDxPds=13AiWRW-MK_sBa(pIHsl;
z&%G>{pzV7U*%9OO^%My!a~YcscZxHY40vK#WgSy?N6Cg&S at f0h<{Ud(PKG^`L~EPm
zQIv+k9JsCiHqX*zS^1aE#yJe_8s4Fchk2#YUt|N|m&djJ<uOS1c}8pmFAqL~j8+ at R
z&AmEzw at alq8q3lgO)kfEzv3U1IgV?!Zg|iSa(U9coS_5ARvT5f2c+8%32t;2=*S9o
zO17^v9^}^R^QPp}6G_lg9?uD2DDN&Z|AaSB!tWrX4k;UUO#xLxNxE7-Jb5g%v*EM%
zDzg1dym8SM-di5mVe(6{g0wdLPk5B$zs~Z+ZIXvnTkhxH!T9e_z2kZIJ$TK()9Oz1
zr?Ugs!PUZ2S`#LBc>wOj+jK-2m~kaIK?z9Au#bIet2F3?jC-b0L3O`r2obP;Sk|Db
zG~TV;gV_0&{Ku8xIO|pLln8eQwYoCozL25-DX%qElXGJboXuL{E4!i~ey)z}1KhV!
zr3N;&e>|$4l9s>K6OJ%w2_K^QFx)3Z!DhgqnK6DL)~90npn=t!p8E3F?vlf=oB-Bu
z>BpaSw1Lf;>g9CY#=1_Ov#O_<t;&}DUJtoSX36eK%}K!A5eOuRVsfptP#aew)|(@N
zRtbH4otAzjIK&$A(U|F~hFqk^<GDlf+D`$IIJG6!@@#|HlXYKn3Hiu$0b0r%j1n;l
z{?15Nk0^qE6%$-s0G|dupKxDexa`$V(3wP&Vu6{T^YU;K|0`1nj!2&E*C4+%+K_F}
zV274o0NW=@z$70UrA~RO`QfC3WItEr27In2cUx;&d?8>tD&EGbjvSDYMCIAUmuk*;
z*0mU{8B6&V3*~a5t)*gvaL^TuZ9Y-ew8=JLz2aJKi3-hJQc3%h(}_ZWuGtkjBy$TP
z2^iP47b7t=p<c^8d)R9aU3);=)J%_3?-QBcDrIu1c0q`N_E^Z^x94*fQ)}=W(_hM*
z6<(g3qe>5Ou5*hd%u^}nUy#)lwM&A28Tcvx3jRvGGBxN~pYF+tJ2ubBv}oE%A at Z)8
z_H)cfTlfZ|Wn+lEjkkjTIxNlg=fF}SSJ&ezN_c==kZI<(xZRNFz}$VuqxO4j*f2-e
z4R7_;&Xb|%+;2Kd9Z}iJG~5=GJEbKvYQ%S6*cX_)<I=*=0h=F6pYAx9JiBAUr)-nH
z02~GM)OF{xT<do0GJq~;^l6)v##b_?v+Ejxgv!%aUk!DL=Ew5>gs^_(Nnkgj3aitk
z`uc(K8)x%}#)*QhnOYGPCbuGrQVP$HbuKAB3p-H5gC<BP7lytrSXi#WsUTiyFsikz
zd3_^RBno-uh_g$>-{!@x11-UFs)TsA1R_wA-ejQ8I=%pL2uA(^T3@;1CE>T8M5mN&
zeD^KwPbBYE>K$KFHG}dwIuA<#>f7Uq{gQ(6TWbO_?0`@Z!HQ2p%&R-}ol~>uGsjnp
zd`B)jsP_G<W%b0MXZFGh*B~}MbwR*>)xe0#)cyLdtu?}@^YRDOH>cHO*S%v}NCo<+
z1fGO044J3BcDJ_o)~)xV4^c{fw)zv933k7Tw?V(j!?EJS`uys{w_b+na-L+XHeOr>
z4#mA*rlYgr;Opo<hg;RCmblxJpDV+Hq`c!(XD0@$-!W>4_d at t0@?^k!{Ko^U$4win
z-uD+3EnVIf7|z(1QyuhN%1EhUa&EQ&d5F^dgt at r_cmlWespMS+Ik#jfb8QSJ>oJ^p
z;johCOS8$CO_yd&)6MV?%y8w>@CjrtPVBx`*hQ*_!`%qti;*nkEh+k+tZ3U0w>$ik
zwdE?g at vh%j)cDpE+pvBb)-?u2Zf94BKeS$c*vfAo^qHJI5Kn9164cj!GQ8+b;@+Fm
zd~Kxg48hWPLjk8H(QbBMJnPFhNC7^Hzvn2Q|Ltn1L2`$fFd<vbN?h(vg~PptCP799
z_SHp2LS~TgW_YO)2#C;i1dXxxSZbIkeX;1s`?fQJ-IV0(WVNjKiWGK~_z8K*lm0Sv
zIsb?i_gqC3ro_FUXApUuUaVvDO?^<fQMEu^`o`;QpX&({S85cto#T0FwyszNGyoXc
zoex-oqsXoB4nEEQB;aH<M=p<j9Dp{lnKLrgqAsw2n5(JLRtpG at nzA{kUWOqhf-67d
zx_?fknyhjZ&_R~nfcfVM#X4*hS^Sd?X(|R+QpO at BMrVBnw1N3#ZQHG$s~B{4>+uTo
zKCm3sAa)N3c~>BmaJrr+SHR<Evrqk$>=aYuUjUs373?O-c&JmyRe-3(Qqx8hH@{~o
zHL|ay;b$x|1G`ar3HDMew7h?AFBJTZ$?ouAtwZREjhWvLyE&1vB5i$l9X{ph_;L_%
zmQ-fdAr`g)>|hu}bW)%Bm>6Nor-G`)$fEB&+)5+gNMhg!M7a!UoKv~jQ){D4qSo!u
z-I|f1&BIetlQuZ}zRsR`NzTQ85=>^3U_Nna>z?lG2mbD>({42leR)vduae8uoYJ at O
zbO%vzw%Liw1LqtkrC2u4o1Iih73j3gZH_2A*x&X at W&k2LQf&g)Tal!tt*Mp{J-g7;
zAnb0_L0hW?r2mhlD;~19SzR}VH4OZy`^2S-dZTG)3ug@%DY9ytqVC))=Td9_GqvSC
zboWm*WME0Ke5P2C<_hpbS6`q_9Q{qYxjbAqVneUPU~EK%-bL6Ym$j_~CNs;MN2KbO
z>*PB~+on*rdMLd=4}j{z4|te8C&UyT12;eC>U_Htxz at IxPXvx1&3$e3lV9Z*-JxqL
z3^?SpOdB_LKcWgjA|JhEue!|F>iJn?<TA`x?f9JOUvJ)Pr{DB5sJUze<jp>;B?1Oo
zp21vo&i0Drft%%Gkk-=VG3?>@J`3Zq_oYEA{rEJbsZhU2K6a4%vl~7g+b~wWLX8HX
z1Knizv!X^~4sOSnwP9PUJ12+kXO?VLmr;f?SEj|#qNDDpROF};-`WO#P<?W at B)1pf
z9Wj at 2-OLBfE7ubpn!72$DScW!4zO!&aXerj*&i|$G!N>_UXFG;8c^>ON|prfEZf6M
zC09&cu3UIoY4tg7rV?r|%HPI1*rCP&)9%^mt2DV)In5oy(r4Z)e)rfSn&=<Drb$a7
z^s;sP)HJi|jdaj#>i*9Eq|oR&d!Ih(GWPQtZhO^4@`RUHkgDruD&AcyH)9H1S=i=v
z1!b<MMAJLEE34}eD=0K>mMy1At!2*fwys@>^t(!Xt*4IvnaLE%wG?pkrdk0c<}`LQ
zdup$Rr>e#vl<|8>xYewSb!z6^(*$XmmFPc>j044 at xVoUJ&QYuvURp<)>qd6GavLBE
zoy#JJoSf4pY56YZWOF-GRS4HlxJY*epAx4%411nP4eg8?8IDSMrH^zS3+&_!Q%n%f
zeOHtWc1sF$y*+=?En2N~A?tAU%msEd{@H|J>k3ClLO at izGBH1%_TTQUr0gXm-5Ta_
zY{++rTI7bw9j(32XS(pVjuRVI)}KU9+TwA*E_>{N5D;LU#V4jyHJW at Of)$?kdHy*c
zpWPwvhfN<fHgjPu0`$M^2X1uP$Eiq&7JVz<P}rZb{@4q7tsk1Z(PW@|mcafVi)o$i
z)#iWVK_3?G6itm=sIKn&s^&!^%q^<hZx)^>&?yub0Bc#%&|FO2C%@Ia<OugBVeNH+
zKVY()zQo0FQ+#e>D0S_{aGBol>bR<T?3{e$F*`2uqv3Ahw-^89- at yVRqW-5Ru`FHM
zoY at RFx}X<0`zlZ1Rb#7%YFQKMVu-j+l*y)BvwTs9ZoDAlyXLJNEZni_u-Tu}*Xb40
zdJvJy3l(D4Ii6bYm`inzWz_-2ZvDas@@X!u2OXZOwX5poRw_0;PDu;_J(lyKak!cq
ziu-MhcoxsZi?*m3;EM_+RH>_9sxYl*99otNd%US7{Yj0Ok;<g{)Csl6=o00*;Z<j|
zr?H`P&iowhADB?ghgJ5+p47Wrm~dT#2JId!Cl0Cu(0=o=E+DFwt`+a~Anl(R?k=qz
z{!I4Y_A8oPo^SDAe<?Yzayi!2U)xY`d)j|3O<^Yrt!1}zt`#I(9K0^7bmH?&(B}JT
z=kV6jQ<?n$Qb;(L7~!6=$X(y%@9PlG19~G^Q^4^EoJynkN$0&{hb{O_BA|g!<tP;L
zAar7vJLN0f at I7r>VNs|0pTY`<WArdMDzc3B`{8~UDo at 9y4erxq7La4E&!<^P^b-t`
z)1<i&dfB)&Z#@SZF;3NQ4Em3dRaKIq6|g$yyQ$zNy{^HG&7%&1WeGXwbZfauFC%mJ
z4|V+N0&K at 2nEW`H&v8BWMx&~l0T|9NF1vx6Q~q`KGQvCw=}K8PI(s8 at kavb+hl2G9
zzyJHbf>zzDQ~ZOQnYQK=MK~YBl&@l67(LqN#+&#?2eR%uCl>bT8aUHkh`l&{^*Y^8
z)azNhCq4hhn=2-ybOW~zH)NO!q&Nbt{bs+w;aZT6%XRrJt>33hTIY#~4&3!1PFWsX
zT6NR`+FR{d&Ojmdr=vO}_yY at Bj}528FhB~@3+;o%3EAixC4Sw9;AQ at Y{kOvLj2HA~
zebqJ#w%&SFN{?jwSUX|$_0`#_yWjVUuSC~qUrB$124!*JR?#omCC_y@`-7n%ITgun
zWgvUH*t*O`H_hD*Y1ltefJcq|>^mm;N(M+$jG2et<Z_}~UZO~=AAeo$P_w9c&}#O*
z>_kOrap~6db!!>TD4C6?hf>3v<t_GUBYqsf6c)YOs$L&bx>@G943D1xl<SU_DMb?a
zs(wPp7uBYnj<698#k1_)bC1>O&qO1{S1eD?3Qk{dy5p#%=Mb2D5+a*7pR!KpF}Af!
z%pRphJ+p=Cj}(7VC+}Dh1j{<OC0)k4BDJrl&OB8^vzR{}VK2?&rgKi{bnhg<nLXWM
zUq(X at izBEIUP0MqcsA5#E_>}~pAOb#Dl8^dOYghUCp?n6+U38o>EHi~Y|2OHj4)3S
z(6sw%`m&c<b{Qetz3EG2zwWgr4gdITxGb%~*esr^n)~&%zC8e|+%0xExV>wKE;D4d
z(higpka;yY$w$aG- at r5Yvs6hCY%lz<gh5QO7${bpFUVnonrP4f7$Cn10uYLFpm>=W
z+q+)llC-nTL+tKUKjAqsxu#?A+#rX+`mXK^2;yGcZjG7kVnbjY%kHxpL(|uruMcid
zDfZ>MUgsq%>=5IS!2H8x{t|25FDZAaRwM_yW=#VW*3W6dq-RXQ!TOUC30R7xnR9Y0
zd{54*N&=Q6X%RRU6qYBw0m8NxZn}Tu;0gs9i@|@f0zvRae8%IXpWaFPTtz1URXmJ6
z`+8&_A%kNw>Q9%KYgtr5Y0XA5=J-vNq4G^k<P(B~mv*5CK|#mMKx$1v17o*pq0rnL
zh|@@1+2qhqv<tu3_FHs?H$y>q!BNw;Wix)48t5dQG`R|yd3x7`Eg^X;BfFN_p+B&8
zs!#$^iZBNi?)b5r;bq(haFgqVYz7Zj!hUt`m^)%4Tp}frnxTlbYOw6$G+9B6;cA=a
z+wg{yM;iH?&F*d0{dzF*Y7cq=+&-&iPKx>VyL+&vtrZ=Og67rP-66T#w%<IWt|vWl
z)2v54XD4^lCw|BJE2=0Ec4~&+C|iToPTykp>Q>B;SPQSzN_ntVRmYi>Q}N*`k&gXd
zLtg>i48&^EdVP#kp}@yVNKfW?51`?Gna<w4X++uT&D)tCpDuiH?|&Cac#NK9fL}>K
z5{<Tflj^59bD8#hQtPzvY+Z8I+fLREI{<_$KtI~<%h#eW=#tswUSyPApUmcCt&Z$Z
zOT%8liM0Q2XiYl);tsJdnxQ;Ue+xr?PZT|g>h(!UpX1(Te^);hzXJ}rd`q(vj3+(~
zet?+rbuC66B1Krs689&ZLVF!-mD{`(4&9EAmzgx}R#XuD-lk(4xBd^<m0}<Y4M8$V
zO=IsIp8$p)R7f}(2&a^MQlne1x(>^BX*uh-c-bJOLrfR3|EG{{`sY%2 at m~W#Ex58I
zM22BB@^JToZC;;ii^oE at NW)R=E~lcR$A=veJmIl>qUrxgT$(Sy-;;*W-xf#~xC?HA
zSUK%|E&uRy9Jb%Tbe^ncT9K;VIdPt8-hB-_;bTt~2BaG(LA7Q at x(Vg*+!B#YDKYQp
zmbEo=Z}@3LsS`KvQXcGV at N@mD?P`3`;Sx at 6(D8sl5nCtktzN;o^)A&ib0%;K5Vis3
zgS{UX*T at q_us~I2-b_E|^wrC_ at 8(G#DkxXd203n57}BZOJBNLfb7`%AL9MsupZH4C
zKZm$#z&A3CMFthpx40U<#HzU>K_z=Qbn5AK+;e0^>35h0A2__qMy;^#GkJtu6;hoP
zFCFh?md5MbVT20bd^5dU{yaNgSTzki`6i47%!psN7zLqn?!_rQE<7cZkzQ)CW~2<?
zZ&F03l{L)gC~0T9!!>QNZ*)IJ5}*K8E$>mm%|0`mfrno_`!_|dcJ_&39x#Su?C~O_
z%fMW#8VBn!y7xg&>(?K#t9SQR>{YfS3V(E*wiaOGTe|&nfdW|F%(eW%?QKL`UYetU
za~I-2Qc>jzhCSzI^`=Ys*MW#1y#SeIXfN%PyxXQ*&t+?;-{rC&O}31PxlYvWRgAo0
zikI#Bg0Z{!sVaWxQ6zG+rt?Lv7wr={Ffn%;>ePD)goTK(XNo7 at qWy1Jw$n4=L4-#H
z7sBeIg_hp=AjU8kmxHHKT7K3uC%rXqhQ7(2a!DFuCzmk=QLc?Gm0Pv}mt(s}>v6$h
z!#53$UBn!e8(-KboWh0(BRl|&TeY715>hFUo$vEd_Izw`Y|L8Bi3FwR%g`q!?L=`3
z3ZU}o=Q^6Ngwo_HII at 3~xYB|NdH2MY28tlCSnAV->T at YpyLcdQ+gxhJJj)*^yzJlB
zc8%Sui)8s!jZ*__v-#3e+AXenX2h^)LG_b*$T`j4ZDTSYGi~|)0;4F!{(d^YblP~^
zOUY#r5_t4o2ddYTwyuq@#1%bdPv_2UYuN_apE*mJQ?dq!oL3NnSLvIrGqoCBdgF$g
z0=5nYn~z__5_C5prXMY9MGwxs9__kL(@`k9(R27j4`*Tv?n{nTYMy|b@`!Q-TZ?+%
z4wU{IPhSD8Af^um`lhMnU!HEpL9_9xVb1dFwYatGHqa@>?K(^W+R|SSF1>|2FWmUS
zH6ZuH)*H1<J at Od3B;r^%8x#Zgq at bFxzFPmlHCLVL<8XprTb)z$)p_65^07;hPfd<C
zX>E#`K$`@8B>tI}gbMlYfo%xcEW7tF4U$O{`Wy_5b4s^w#R0v at m|8ssJEJy79NSJ4
zcbClTv{3Sn1BMxcYC4C`$p`Pp5M>g={_g_b=)M0)?lP)N2QD&mP=0uT8+Kn_2l!eT
z+U&k7wJSYl)mz+%9>2}~z4&igCpxwrF(j?nsn*6=BdV~~R#2b_?o-kBSq;Wf0dPmJ
z)nIAbtqVi)L-Lr6%tryE$d!@~G4Ttr#_Cr9!MeB0ry)qU_uv~9w|Su!S<vB5BX9b{
zlZ7CFHmd?C*${zM at SY#XSjXqqGpuZ3EL#uLzA19sJAxCc at ntu!Ew=fz)y+mg%Tw$?
z<I?xwK#R|j?F>MFvUutzimpR>f&E-fq4eHd5!D4jBqsBd)<~V8Q;dbThvUS}%C!{N
z7 at vy1<{pDObT-vtFSRLx at nGEm<(e~Y;ro1?N|sil<s?P!JnQ}(8J{BjIHS8vVQc$n
zGP`!Ie(}71S8CN|WYL0{%LdIg)YrY0UT_b?jm%+g$@VBxm(RFI88QxcIo>YK&4C*a
zX-*xqRGD%*f)Q=UQ;WczNUXy69uo{P=aB)OiNsmr*{49t4CS%rUZd-lTnk!~wLq)V
zF~%3}a$gF3AS7PlNAkitXDfi(4~E6%avVGzaXP8>My-DkLfOTm>rQHWkDwZpi1AZ%
zCrjX(9LHF(KLel38LNJY4n4YU_M_`cW7bI;u59d|gDpR{{RrCNWtJF`2bh=lHY3`X
zwm1BW-P+5FaC)7->WcRzF$~PY4eW>6&><z}2J=~%9)p3OEIXst7c|P2564xDONVvs
zcH at v41=fNt&#wYF{wfTX5~x<(w>fbdNKVnw0R|z5flW#x#(I$UNx>m@#CUOM$UCvk
z%JG at 2-Y}u2yb{U#{wTyf%lBS>w)-EZgJ{dQzq%BaH}|XviXbjI1<Wl1ddJh9$0eRa
z{La*>=Az-auP+Tv4Nvnbos3{U0_z4tyoz^(l6zeXSZge-ebuX#Hh^0)G44j at LFx2>
zJ}_!`zlfI(fZ3dO#E5PBn?Z>Q74fA(kOls#=^Lo${5cIen{7a&vm at IT#VS}E23ruF
z{_YV3eXemft}K5VRR1z(664MzK20Saa9*xGml_e9wpfKWOrBgGsLH8KDro0ZFbDil
z3Nrwhti{x*TxXhb1N!aM1&xoCuAyJnr>e0v8zBPmo3o3J5Te1NP1GN|v#!>|IEQjD
zmC(>RfAEkhvdx|7f^_%~PG<Fp<c&y|IdV9~AQkwe(06KU_T%#48mJP8<c9h3?rC at 3
z9C8qR8*NK^FU#YTJqE%qe_yP{T4~s48GBxa5_@{|+OecQ;9QJyDAm2;UlCsAM<T^{
z`;b^JJoR0a!gl^R#aFK9I`bsUnaDxF$R9ZQvIC~g6U^|eYJvnISAt6X5Wx-97$)Al
zcEw+<_tJDu&KNSS+pvRH^ys{Ld6Q-z^U^tdK0Ss|C3NaQUJ43v#7=g9Vy<S-0>AuJ
zHC%pn=*z}*;e(PX8+05?wS38iekf-C!!>c!xfzv*)p#Rju_{KPLo0>CtkI7T5`@x5
zHz(%~c&E6T#qay$3*oNpmW<)uFiwv^#D*MXzza{i6_zBZ#L3`)v-aBp at 2AilfYMrB
zXOh^hC^g}j$EeHR)X>5AAj+o!Vxc^P0 at xX@K!!M$cLZw9<f at naT01QtNA>A!D*{jr
z*M^&m?Y0n$J{Q<J8Ih!Q(`TPQ>&3Ml$1Tcxh9!F5ZCgv9(*V=s?CbW+6tag*&V<eT
zE={YJ#za&H0XFNV>O}hrr at 7Na*KV=`#wxm8KXbuFYsJdRX;i=4#*YKuf8O9(V(Un>
zHtaVBDZBj<!re0Y9wHV-{vvwJ*1x2_tRh6TQ>N35>~ap}+{)i&!(i=T+i7p3Weslw
zz#QEkhtB)C7w*I=e6mB8JAEO_1|+en4iW0J$`?M*QC%RDciqY9(|;qPS`mm{Qyg=L
znL;BJ0YGX72~tC2zn&6C_zn9$>Oik8V~W^gH+X&d(d1U5>3wkrhEEj6)!hye?K-1k
z;p`f3N}E<9&EFkvaWi%rqrIkjYM3Rb?YA1|GjgB0iILM-!YP9MksrMWTkAm$`t=J?
z3kZAX-MR`#_2lQu^QI!*DXM1ftLCL&&s_El<Sr4b(EJf{v2%RpHJ`)n{(&5nR+ZDU
zmYkinYN!2>9M=lUd`stuisRUoK3yr>O<}3E-e=)p-X^x7(e^sUHSOl_Mf4uAwezHo
zse>};$3k at tCn-&)L*7%EiP&Ohf(YNF>BRR at V7pGnKvmlO!YaDJ7N5ku#^Y$e8y}}I
z`!y>1K_x+FUPIZ8XH85bJ}4C*9-73qA@`OeXxL90pcN^Fkj!R;Kz4__`F@*Xm@{I=
zee-?6=+l5~7B(KH*>FGB&7RY+z|%#+M|1vTUwwjJ(=2~T4HFb>)2$d7ENs~gGZET4
z!k0c*8*HvaG9vPXd^ckdK9%7Pi}CWZ(W!GvDKwv!L+K4-=DE4Nz9+y_#~*|@UOw^z
zxCb~Tj|M?LlpOBxZ%nKrZwPv_0=^m4RFvh(t2Q??0n0Ixm7YPnDL6TcaUMsjw9 at px
z<5(u#H at TFIg(|TZ$njei69?Gs1G$v_PcN&wlfp}4Dh(MmqcMt?x|ZM@$$xAI2j-xY
zAAgy~sFc3WrEv;^7eH!N+Dw()U5GVLhrG3K2mwteT;0nOwrCNzHNU?t!f5 at F5rUUR
zL<K2alUl-!3 at AO`1f_}`-$RSy%rczwMW<2sg>~)G(S^Wx*MuvUDRUeEP-oj+xaCZ-
z3uiAxfTd<u6~%SxpkOHf(#KsyWI1AzN2|_fE1IcONx_f7KzLBbLfW5!GzQDk at jf7`
zBnuL?6WNz%kpY(9bpStiiIbfVQD+9_u%2L{F(%}<Dm5aN{`5)T*qiDKjN`gnao=7@
z_v%{}8tanQxI-^*`D~?B1$IdPkos!Mr>Gzk`NaA`3#Di0xf)`TJ~io6n{a1zPI-1v
z(2xT9AXl$xiW~UWl45mZwky$AMQPj`XphXpdaYvqR#4_?!oRD!Bb5Wp4aEB0HQ&uA
zx#oE3MkZgxfHOgq+q7r?hj{f%`pe^jlOvwg4%#=mb*~OT(C%H11QdfMsOJEi2DLt~
zuPy+p3}TU<mK6(pXwpDhXTO|}(M$)WXv@}I)d#15<BA1-H2%5g04puxY?04hcnCzh
z%LGHsM!qV_Rc$^7OxaDBfqEnJmZ&e~f~wFpCr`t^hhx#@qAOB^Y*@}AV?SLdIdGrm
z at gA!pXP<B_frtVOWNzzEmU&_psT5iXRa4m8nOPEp^KWEWo<5?iPMLmRQTr at rzOPI!
zGRooa#~q{SAFLJ5HkfF<B`!OM)q9P at r+PxHIJn;98+r~@JS?-}Oe1rQNo4Eqec_hT
z^SlLzOsh96Z=k%zYRj^zgijrCSv9Z(Lt}>?mA!j8W-qRwik48KoiqhSTBGXAi1WIw
zSd at N>aOz}W)n1dhHU2C)J#6m7URL}(L^e&!4-34)4)+Ze8k6PeOSv(=&U}q#tBon9
z<s at I|y=XTH4AQv=;(+Y5WUCm=&sLOG3B7tmd6j<s%@Aj+ at 0l2;VsdH_ovw7L{M6+O
zqyyx|wv$bDp-X9_2J}N^OB8TBd#O=C^1M`o>4{tP0(W at NTQ<A3BZl={@s}53X^z*E
zq07b?3!!c1=W0=<MX9|3ZR;UfMAJ0_kcV$)+FUTgBMLz0QEyaVPmW&`%@Ws6{qes4
zF^6Hlx`5o{c#w62zCtE{q#Yx$;<Ga`)0^4{45d!26O}=A=B_cZuGD^b9oqWwlMf#n
zX<8<^(wPm+pmc%s>(>22sD_k*VoTad{tuJo@=5Y?f45%W!4V>c%=2!Af(Ap5_NW!6
z)%bft-t~If5V2Lv at LP5Ra)JXA;FS`a1}*wausS7+{DQe1761^9OU1pI%y=qZK96sG
zGHKROX4qjKYW)J9 at 7fLvc*au+w8jpeROVT~Mv+JEQV>x3#dJDb`DaVblw?-=rhsoP
zz=g*}SawZGWy*@MlHJDZpe{!vwp>f+G+kVs4YLOP%6~;&Rh8Ka84bMJ(+{xmitgRh
z%=2Zu39@#<w;V(}1!=v_X0mLZ^rGUv`MMqlqQ6?Qk|%!Vrf;D3x`)gqepb~+vs!T_
z;IZ>|;|?f!>>2Zr*_ at 2f@u$IC>xPEk_VFZ>W$0lZCP}!5U(T%|Pqr?g)QOOnU1j}c
zqp87xbJ`I at Y9^(}hA2FCu8sGj84UCz!_MUsO?GsP&Hx9ssvr)L(L=N3e-=U$&_z`(
znt3I!tdjxBdPk3MY!K*5BI4GY9F3M#*T{z*n<jWHn{<rWU%YerygOyxgb2uvEW{0q
zd}5K1*%l7LHx-!bA*P~8^vKu?N at hOV*yvKqqGe+R87bLaAAj8%XMZ=JvHN$Q?q|za
zC8TO5`$}gyYza*KH%o5Zd}5PYNc^xl9z(>o)nc4qxp&iO(<g*f_>;6AN0W8O$L`Va
zb!-0`2_uIf;Dl}?Q^mAn1&!_Kvj|?@&I~qPxhFTOl_(5UmA+VKMhiv0vl`F2H?fBb
zw!JZcF#F-?#9i0VJ2g`RMO$ZVH%!1U4A!-8R^l71+{2SLx^H*a8RtI=@Qqq$vQ-xp
z84$4W7Sa)LG4WjiBVu~0x*`eLKo>eajD;jw`}DcHbxY9SpIheK6o|9l;(#}k_UsD?
zX2_0+)4n;?sJLt`B_K8V>TeK9KCiaxC)+<nUQ>IYD|=H~Rkoe>U^_`eZk6Sec(Qd=
z$XmUNJqp!NjM<%xdn#QH73Lepr6r%gUOt#Y?<DyotV#{NvqSA>Mau1-U;i3qJSl48
z#mJ3%H(}9$djb+ydG+2$Q>fxyZi?2(fn(a1cK1pNJ&LUIZe{K;>A*Nk@~W85e^re;
zdV~&cqddZ)AWDQWDUHTMzZ#!EqVC4)y=K5PY+Wsml_|y7rb<>Zuo-Aw4u;KpLUC_;
zqeiHv)%f}w`8&jVs>>=a;+yVB4`WJ7t)<Erl|qRVxW$`f&2N*0Eh6L2a|7{*v4?vN
zi9NRkK=3xsPReZKB`<s at -EuEupN=Rc`uG4<0Bf6n6<i4}YOJ5z?@A~g0f?H8O&tFa
z*fg(SkdR(!$n?S^lIP{v+1NHdcx~oUsq9YOS2<ftvmtX9wen8u=VF*M-+`IsXq7%E
z?j~z^$&ymD5M09`K>6Xdwzt>Bi9`;+XFjr_G=m-l3JfBh1_}zyr7Qppj*ig`yFIpz
zpKj0bu1%mVhh at Rj28NoMWk=PX?GVt}b0{0}yaG7W3t?w+d2;4(fR0SQ`sMtwe3;mM
zb`(AJ%_C|ysHyDNQZh)^cG<MICQ8w<)bmK#yEf<J{!aCfA*&Zj-yE-E8*W_`6n9*4
zE*|YZCp!36AAM-v{GG>DJ;B~<M4tMshD&SiUK6wPyhKjQ9A<sLMWqd>B~2eHCbooc
zMaXR3Ek+kWK6^&tkB}vi7X3URK+4^@>qp_}mcT1gHTg+=+i%s4s}2i9Y+q^Q-tJy<
zOUhd^vXSzXqD|sIH8}gs<di+fgAU3mX4yXFJZoI-bm;Rk)YuZ6VN`-yyN`cg1xwGk
z7u|N9aCE`@CE_ZeqJ?sGGT(=Jo;)pZeRrqn(wnX*p8$H;M{6`KSNc0)NNdEbN=2HJ
zjhbc+I<uQTQnNgO=4J at YGGHu+y{=q{MqF>ReDy~OFzI4HEZe{{?O;KN(dO(ODf|;G
z`OWGl|A5M{gz^sB)GGka3i`Z>IcU3%;Xr6*COs6#Q5&RWhI$X+1_>i0d|OuQ6T?<+
zS`5~l5^h<W?6Y;H>wz=p at H*rlfg1}|SWC@~aG#u+pfx~#|D*EPe3oB39y48dqiYv-
zw$`tkmM`-Il=G|G*N%4NmYC!M at zE%n2WVdEVK4{P7vW20_&#R>0aQ?x at nOXh_SVCL
zCg=vrT&`_b&K;j1)a*T)1h~<5BnF<YPK>|I4svb-K-)I^Orx3RTX%QREV7~_t|!aK
zJ9L2NqSayUZ?wTh?}oYC_cF at a6(7b6h5(xamw<W>r-{qVO0i1oc)>z$7v}-c(%QUD
zHv}ZkJH};-rKfcLFqx)TuwlMZS<g)2QfxB5NQ9m7QO#t;L)8aRK at wiz$@^%PmO*AT
z1M!A8NTsX^U0Fqh4dnCBB$3};dwQrVQ0q8-9c%n}nHRVd^u3}jU(lsRuru~DSVea}
zZx`QDtabLj^F^ut(Y|lp)PYsw(F~c~AnFFN^(A_;ro`C3pT}Z67Ed&HBb_Df_v+UD
z9INwLQPy31VU}|93(aj)85~!0(;OKjeTySxnWm#~$?5b%7eh~cJ8j>tF^Swp#je8+
zP%r8Nr?@=W7G&5LI77N6BjWfKe7i+}HQE9*XL=$nkXMw2Thg6Ap=O(0 at P+a^=~N}5
zNKg`P1B2~BF+jcN>g&~Xzf~bNpR(PYL8m_6fD+4`9=s_wMKP4OY)|ca7nf(GSgyP)
zJu=T2qhMJ=!<E?B at BO!Mjj#Xav9Osi!abceY*++`0%minw?Wk2W^*OgT-Y`f<eBiv
z2|~tW*vrER-%soH&RsWYe73OL%g}E+EPs>zDpOtJ-{;2p2djLFth4oxBg4?usfwGG
zvK+7~<;YpJlY^|ao#r)<0Cp4dt!;(R7>@d_ryPA&rZBQ~LAf&N)Dy(I%o66RqO0XS
zBxcx=Ki#OeOh(0xTLIvJD|_7ItK(@F7`<1jRjU)`T8I6Uv%x;GL+tTI_P>+(zdi)3
z5bAp1`^lN#@1CeA#X&9%oBc8T;G^Im_>HAhz#lsFDMT^ehxU4*pk{)>pPMG|iit|F
zT&e|?IuRl5RQ=ODTYd4D1Zup|vOkdaKl3kN`(A8&YVLRxVF<e;q|;!%I5wQ_=<=|K
zE2U8XLm}O-g(_`AHK(nR>XlsTJagCj8^SxEEP-BP)=2fW{Fi5DV^myV2>YH;B at yXS
zqf>0BjLvh%@ctNbmjIvh7k4y-^?Gu1yY2qx8u;FySaRyf%{<kbTq^?(>n#mAl1Ofo
zNYDGBg5&lNP#vLjh%KB9@@VHNjERZfoESl6h0kna22J7_M6;6_#0M1Wu>H_!kyVz?
z`#Yc|%&6ddUCFwAvtyF`lZej>8$H`^C at 6B5;6fazQ&|Y8!KKq+gvGH8=3)+U0msD<
zsDYDYe`<RF%a`~x+C$#-yp$68rI19!^)UU}|KWQ4`)`#CF&h80Q2ZrZ>GN^5>$2p<
z{^C{mH(+}3FA1gz`Og2qs2}6W7x5)R)ptC<SRU_(mBhr-d>S+Lf0K*<e7FO~zoVC|
zyYjb2_9GC4 at NdoiyZrxetZy|APPJ^XnrZg6KRsCk&79nVD(#Cwl}zIUE#7nGj~zoP
z6bBr1Jhq^k<IVrW$@=+&g+wd(l`BLQ#ESRq$4l0B)=capcvI36pV(UVXDZ4Kz}S^y
z4#Nr50u~6_qP`GIJsI7ZxBihH{KuEtlW6VKq!~%2P0thw*^uxn9!o+AIQYpe$I~~n
zswpjEZ45{|GU>+hyWybTDHFP1pyUGK&AVKjlXjNhKPbnlT!`(SP2)temJ+DRdE|OO
z<B`+(4W5X}ZwbZ&Usp=Ef3YZf890b9*w}Q$lGyLBA)gbdVZW=$3(3AiB3Wa8h`&GL
z>S4I<r_=^%m1`g&G5`InwI+%xsW;zL1-(I!w=VyWt3?+{@DF5Ns-DvM#Ue-Ca6Lu<
zs={~w$7KKQ?C8HA%=-kap~qd!1M3ju;WfMUThxnI5+bi8BTIV}8-(%>HU!+woLb)e
zUGw<?+E*Ej^$l|oX%s|k?hi%Wz7&&&&8p_s4O;ykv=*<_;z7CzU!FG=(C>&xDp7S@
z9-{yKmPdryf;x;Y`Qn1Yw82q_G at sK>fHtJRPo)?f4)Ww2x#T892}wG+1&K0vnhPs|
z{ZkVD4{1#NBR&c!MCFz=c+U+a?h+^V>(&zlD-l0+kE$SI3-w(3TXg-gqV{X}_jNV5
zFN at y(@y&lXMbsUSG7+pR!M|-%noTe=@%BFj-oF=3$M|h<w);lBD($cxn6+5bNBOrC
z4}XIjG{&E)tZV{>zl>QL29GWYFz~O2{C0yv11?zF;|TTAQQ2SK%ESM81`W-u-CZQ}
z-}n5_hdZTspsd+m$@*<3ySsOu<z57Xe(d279Im-U?l#(6?C~28zq*KjV!ou9UteS;
zCLg_lhk3#B!QaiwhllNqhmxef8SY^*{uC)~{&(^JcPxMFfGmlCfLihV{{sBG3;+86
zzrjlo{4er6`xo=M?)-aT;d8csPg|OQdCtEi?VS4lOOG!Q{!0)3r3d)5_+NVPFFiOH
k2mYl8<al~8dv?LX$xYg5hs^^2fA<I;sAwyf-L(q&UnhsMt^fc4

literal 0
HcmV?d00001

diff --git a/assets/images/ssl_validate/login_manager_screen_settings.png b/assets/images/ssl_validate/login_manager_screen_settings.png
new file mode 100644
index 0000000000000000000000000000000000000000..8858724a41bc452bb9d338242df0da8e5b61079e
GIT binary patch
literal 37362
zcmeFZRaBhYvId$E5+t~U;O at cQ-QC?SNaNNt5`u@|4#C|eXwcxU!QGk=q=Poj?Ui-*
z-pM)Z@!m1+!+v1Uqr2z)Yu2o)uj;FU2vubnRAd6=Cr_TB%E?NqKY0Sr`{c<}bHo?0
zcd&)tw!nTNIm_y~J$dpH>#v`u)2se>Po9uHk&_hD^fo at sM0kgz^(BNwR+?QFBasLP
zUJB<q?&y1pR9rV at d;QN&V^ytH_QpNwl%ZNrrTQvTF)%PNpCY~Ap~BbPSk;iY_;#-8
zrQ at ZeqB7?D*x^s6;nCye1U(nJ2tx*c%xHX#0*CSL2|U at 8r--6Y{{2!iRkRN=CNo#!
zKX3i#)37IS2!v1n{oQ|m5IBe}x)FYd#s0 at u|MM{h at 4~ZxdQjFAIGLT4SfqdN@}I@;
zy1tV9U(rO#PT?_lDLR7{|4BA at w9Ef<7}(ZvwC}nwuc<Bnuh35s$((Bt{@3yU5++>m
zDSY%G3pw^bi0~vZNa#<6{Ssev2Z_vC(jO`9pF}_;I{eSk{<D}u<w+prslwp at zJb3s
z6x}dI|F!X-`(Xg#5Q*YU#A*Js%YWpDLje7QUjBPE|Gk?3dd>gKUITX+=mtF?*<fG}
z{L?}I@=G!kc!u5b?UM7`mBpY at dXN`a`_hrAGH7e81SP{IRMNDXn at MrG|3Yd0Rg}_^
zomQrHKx)%Mg>KW=J8KgsrBniSmE9(MHenyAvi0tlC~yy{O?tJ>C{rhED&HTmB9<-i
zS0K0a^}_F*!sS`96^71AN=CDHfYaA7SNT(4-W)q#+IHqIHrgd6au|O;@!~KW7e9MI
z=NMJUr%l6;Oet;)dx?xF=zsIX?Xsh_&pCYevHhgB<uS-f6#mbcMaBdRJxI=dk%Zwy
zwnyc%#&1;KhpFs4eL0$>DnAKe^FuS2dGdbieiqdRw^f}&rYVC&iVnFeR^dMZ3MPD@
zI9zba)nTaQRw(mo{_JIuT4lQR(2s`0e0Ir={-?KT<!A at EgBFyt^`K>En)V-aCDso&
z!-JYBDa+Z}EfZB8ZYlGM)s0LTyu(N1rdz+m%HT&Bo)9%zZuNf)QBdjxnMke-I#eeu
zwNg2*u-7<!-v(VJu;n(T0fGRH<xc(&1JqLKYL56JCWZFZhRzjyRRiO-%QWLg- at T24
z%`WV;(ev?_{se$w%%|{Z6XqfT<7(iYcFz-|2iun^X%EnLOKT=0wdh8f#q6?fDpztx
zI>kax at D^{I{q5wdhTCYR&vy2+H&I9slUh$dZGaocAGfIb0K*{%qcfP`=TcZa#&41k
z=1!ZedNONW9ShijG>Q#yDIl_HqxQ1>$$~&PgZWnv*Zjh%f|OdHf!Eh-+~<@i3AEwH
zi>ZQ!;|DXV-##krFqqL{$HY7Icenqppm(C at Fpyf{QlxRbb3iu;TYrq7%GO<^AcI6%
zB1x at ha;~m$-<>5|DX<8Y6!R6h5q_?&{F2vmqn|-_*5^c%B(HnxvA~w-f_l72ec(xD
zX?S&q=r-?ykk;SO<gql<Y4pGjRHzG8_yg?e!r+J7yW$jACe0MG2$5C34wD30c&^iL
z78nzAED}8q+6U59#uqv2X+#hUe5=-AX!oP~-YhPj6G7clVv_-0<lbCiQ9*6jO!wOV
z;X&V5pvqr}`Fp-1nxlwCHxDPn?qUIs$5kFj?Tun at fn>^g*v(CPxt?|*GC20~Y#<XC
z#_6+*(XO5h8&E5P?7P3QX5=&dxepN*T@&2E%RLgS7tnJRI{uLlgkc6Q5?UHHbqYCp
ztNI-YBVN4mt_E~E(n1E-jc1q3d=__RYv!NLS6`gXPPlQLqN!!vdfDL)n-42c3p+{E
zq3-2i0xRnQhU at hXs`K?FCas7gdmJT133lP9l4`&WKZi8ac`&nyl{L%l*iN2^m;bS`
zUV~YF8n0K}j0f|L0#|@P+HY<c=!;ciI^JxnAdC<j(~%HC_&MbP99($E8z3hfDxFO&
zYue4UcT0n$b&Q(yjM-MBWhuzh(ZUCWHsEiO%4(Afv{=D$TQ<lpB+3hpvPV0xQm*IY
zXpB+-r=5Z;@dQt<y}+MrLNhd=$9Bvj-qi&_1@#8K&Cv{tl#+Iv36dR9B=pPG%e%R;
zR_pY$=YC#1GRI3(^-6JwTC<KMj}C^~a!On=ZkGpHuB+;`Cl7*p`)lrVW>FW?1YAdW
zXKMx7W6wyVm2D6WU;cimK}<R?5~88rD3e2tIZ6j{wce<~qwS9`1g+<MO#&(7Y-FS}
z;hW`D?wyDicxs$;dP{sVm&(gqx at mS4an??*_MeR+fjq}`7o5X7B!c*@@5c5JNKD?*
zhxtdeTAwnv+?U)xo6s|lH^y>|242n9w^{56<uV8kVa<l}sf`_NJ-d{pU-G_9Eb-7y
z at f<&h&PQj(8mPl{@BV}h5c at 5oB2$FJ?Qy86Z%R^JN&W0lh|3eooBKrfnrtK4FDkoI
zzSG(Oj*CtV2teuF>HUZ{bgJyV-<BV>^z-v)=ql4sF_A at YuX;EcIpVD#*E569Ud*Hp
z#{wslAHfyZLmZNMQWyzz7Y|9riLdb at w9*Y2ViGMaQWnVBiUZ~^#fk>Ges|??qCi(l
zXDVzSnDN-Y5M=FDylEiwBxWRqhXt at y=e&teT&#N-REjI+LOgYB#QL+LS;r|}2`S>-
zG|3a09CU at v)R>ap>P6%t`_XE*lIB{vp6j>k!Lv9=zbBnJnwWHWa55M!l#6Cfnw77E
zkfOR$xXp?gimuYK+!^0c>SPg}J{i<r`5A3shA-BRF8)mS1z~(xuW3d#RoXqEt3$3Y
zN~(NrK{ESg)G6rugd}LR8r`Tm1#5V?{;{f#PqUkSm*Lu{f2AfppZIrYOk{ww5=Iz^
z+#>-f%R8H<HJK;zod%|4HoI5cVW!r4w*U`kT)-bBE>APt2pd^<GUUM75dSo7|4>a%
zh|p$iaLRX4!L8eU<vyGw#^eS^&56<qSHqZ0KS%=4SEB)9%gdIt(uIknl4<)0ET1)w
zQ~N#D%)v74GE44<Yn#J?;e*XRCi1K%G?mONPTY(d|0+KEi4TJHiGsS?)z%(i7LP_t
z)D`e<n-4-*;}YGP6e^fVgkI5C-B(G-573ja)Uz9R=#fT*sJ+oouXS4m2e}=3inX48
zm8i;0_*Ubx4vW2#9|FV~+;5Vv&UdFof<sa~f5%DHABc&zfs|>@wGLzaZVzrw86KUF
zX8fGCx?3;v at 6carS23UX@7K@;c6P8&qpX!j+8TnEgS!J6EWZ~Puk(`$r&s~iLWrnN
zQKoY5-tS3Y30uv7y$-4F<iV1;J5HI8XyaX>JwMr2q;f8qa0l0`+!Fig?dN1E3$!dn
zVue!~+5+wsiTd`h;Wz1)UShG|#W$hVJZ25P5W12Vhag5-MdRux%22LRnbP$Rs=VG`
zENXG`Iz>DApm!{VCDc~rM-eAE3rwF|Y}Bk!shZ35B>$~oQMG;^ZMhYi-2SzZYt$em
zE3t_<C&=^;`?3wS=#!W4ML8+&EUR4+UH%X4{Mh2);7}Q1{ERrAFhTe`MUp2nkF-E)
zbmA`uvn9zjZDrlGr)pb`^$z3_gtWq!KHbCY$Gp^VL(5cg-)D*?6xO+Y>g~V+vpNHc
z%J?_rPq#m=t@<)T2g`d^He at xY_5v&dP=Z%3%IKA{xB_2{Oa1O-gYQJsM!&|%uMED!
zZb~$R!^&`{OYXwxJr91Y4m$+=l|e`+2}}?9x%^l&!uE-jeH#$~2jL-!;!%?waunc3
zWe;HojbR*^C6qWg-WBw*VM3N>%Wv4_cYyiMd1OVg_#y|B1!A$w7W3caSUc(oHqHO=
z0X8@*<&DXi6G=Xv;e{o(Obn#&sw)Q&73wjm&H2nW{*Eu3Z_ZAy2jJyp)9KnMS6Sm?
z{6FmqfFfA-5t+#;-ry<;aoPFmZ>#D?Wzz?QWK$1^)tVpOh~6`h%JL`6VyJDYMOeN5
zGZ&G~8AT#O4-o8cvrG^-$B<2Vmj(7}-B)v)nN)!Txi$L{b;{VB?Oxavy_rv^>oxn)
zZDotfqo+RU8Ff%RtF70fOTxRajVMP&_N`32P}B6<Y;7x8JhIz<`htuBH^Cg^4+Uce
zvZn=E{0uPha^4(@%Qw>K&(P|CYd;S*#MS=N_!jGJ|7n&gmRtxr)i5x&gh at +APLrHk
zb<fc9RTauB^F&mJ2vdJE1}4He)Nc-vHy&_Cd&UKAMDrJrOxB8_v6uPss!ks>%pF1H
z=bE*0_IZXVzrzj&VxnB2grRx_QCXfVSfgjOqH>o~!Zb}ATg+%_#x5~Zf;xu?)u%MC
z|1YGwUHU;@iWO(~qzUEFzJK|djW2V!<Tar<aXmoMjI}T~U2fq_e%6 at 6>7ypJ at a#;I
zoT*G5iz;ppb9L#~Gi5Yr?~~0MyTrHv|NfeWoJD)p@%+fgRNgU~H^iBZJPQ0o&98nZ
zC<^05({OoziFP_UbU%s-MVAwRh}#;<_9qI!VKJP$DmXGsDCE`E9n(2BP{_1(O^s*|
zcjYOG8e{nz^D<18pLPyOMh~cv#yYRdCdyha$>0f#P^cD??jou+CmJ(Q-(J~l4;L=r
z9vSt2|IInssa3(Q&b>jgv@&_0h+OeV{f8oo6wdn7PPaQ;CA*kf7I*4eHNg9mGw#IR
zwRKV(QW@(qg>UZ_vjp<11ZF;&OJwX^P|jqh5H%O$2b^7l5B<E(+Es2Dk_Mvu{U=u^
zimChM-PN+tE{w9UCz30P2OWNkd-0fbXK-OO*@`<0xnjg;bA`0&<I7G1%7LP$a6anQ
zWsE-ZS%c9(*65u<hObfKuqZV at aL37MdXIlV#!_w)^!R+XcTY<U4vwL!Bg<v_qJyNF
z1P`sJT~k!}uDT8}0m=`<H&5w4l}7sA4tn8--NQe4Ee*N49xmim;qoc7-$OuCu%rs<
z_BmW2;`bWRO at hSOAfxi7lHg*&cw^wwloUic-4R@=OMG=>i5H!IsX%u$87>m&mWA)A
zDXncT-B|QNsI-k|>(<$=XOMBbE(nzV&|0sMMkt-jDF2R8V at v%H?#(Jrv;~v5-g`(A
zO-sys8I#YLUE>v*YhvG6RwQ4`=5u6~@TMz4;u$<972aSc>pKEEIV)zcXvRKvY|X`u
z)WGwqn(g_Z-l&{4LVxH;{`P?km|sMlH?i!YK;9B`t9F~w1n59NGWheMQKBt~YA4M4
zb<RoJQ9sg}SOkXL-%i(5RC1gRkq0iyF`Rs#+)qa<h<LMln#=bIO$mXFEKn3lhJ!7H
z3)S0HR(ng at w-ZZ#$@o at u_$MyVRgm|pMlp0u=yw;VyMP}~LI`Um7!u^uH;A(c#^t+N
zbWVcRO-VP;E#F<!#*T7O`n&VLz7?{9%+y*v&~_ujVXL01ic}MG)x4cer<hfTr8IA~
zovv1W1>CZ(*B40L^gCuzP2yw*X2UK{QH^Z1o3uB8uH?T5vOLKgLu4ZT97~EYv>Zxi
zLI<?gz2|2fRV!*s6F~d}lFBBP1*f(vw&RrN9dI%Rt$RC1agM^FZHlSNW81}~n+ls*
zaV8lsaAk)CuT0{JVD?v!0 at e^lVbtt at Oa}ul&=oIl%PRSep%lXSU+LUA?TbK5c(nZ$
zn$4K)9`%kJK9|(tT?9yy#$?1Pa{*}M9#$@_yA%yS#?A~SnQmj{ZJm{ufT%w(p>Bmn
zQe at nbP=_Z}{qYQfKvyQ`aC3H8bliRsO)CTBYYu5Fr<jaIE5)j5<6~#XZxnxub}&5-
z)$YWqD>Kc-cp;*}H}RMShTvmZIuJyP(_$^AM|IvllmPFS#L{DoKARu;tREz;=L)vz
zU?GW92BgNl8X&_H at xOWZ5n57KVfx4Ysr)M6<age#OHvHT6>0VO?An?nMz+YOdS4!j
zS#SF3q^C at X^ncotLrh10hZggNR*mGv>f=|-$7hfp(ipjgJHA^Fo^2=Lb$Gr{@`}wn
zT|&gU))$oX0v4q@`TE_B#WaKTGZV at 9N;0We>=Agw4fj69;&|8D^Hs*PUTCK~ax|<~
z>?b6Z>3ksf8xdx<00HyP`ni3lXO|a8>~USmLs!iRe}v8m(U!5Vn4O3)e=aHefEIUu
z>^C*4|0R#JlGFkz at Le}*^m_j1GoNu18ro64w>w9yR{mlw8(M_i`~h=S+OyxC%kRmY
zA}x!YV<pMqSo}HYZRJ!N?qP{}YBoS`k?k`$tz|?fZE?h(gNg7P7gI%()FfMPjMMDR
zdth&dAWKKvgW?&qNoMf at EFj0~q3UF%Knq!I3 at KI3eb4t0H*elV&B*2hBU{q+XUkGC
z*Hw5X0=TC5V#}kdm<Te240w3F+HVViunHAJn<+qv3VABdG<h&%fVk52rlJ-}2Cu>p
z;NNg?bB>1%M at _6%vQimz!_NYIVe1rK7cktbN8?n$bUE>$U86p&-^of~1YP`Qa*7a>
z^;?i9i<N+JIV8<6gosumOvg-F{=uNVBdh(2Gt6FUhFY=<m&K=PnS7fhVOJzp)cJaZ
zaxC^N`m)kBSDBjsEm3K3qWg=hZzU(vaKYL8tiF$O54#dt&#BfDohYWv))-&)twUkx
zGL7$A+ID#qF*8ambCm6T6py+zwm&n5gJ^lWfH|@p8bBiZeNt#C#b at 6*O|r%PumjpD
zx93_F@*ANhYKe%Eht;GByGnPvrNN=0sS at q6!8feWn1FCRsP|M>TsT0s!3;CN`?l9D
zuNwq8V4MP9Vvz?K%TR3?`}bIaIMKp}mm^d-ejYt~(tMh(02SW{BU5tfd5c`X-*c^C
zr6++sVQ<;vBsO0vXjh|xh~HMDU`z%+){#S~QIsOG^V$TJeGf0NaFMG5?(<b|5_H)u
z&(W<+XQ#8f3lT0j at s8Ii?+G<la)}u11axRr;$TpaRSver``t8wuvSEzDbk%}bc(|<
zJkLjJ2;;z$IttcRaMRCn*Ld6f(~sYMX7Z)A)Th~iu0-z8Gv!oR#pWUfpi+2JcDd_E
zrbewt5|y((X{JZ=bayCG_p$>UT`6^)!r)cY at +6*9x6bbOLC;DYbN3}|C;m;3Ka#s)
z_NT7SRC-2E%4oe&br;;R2;IV7!n>M`eAdv+QCLXiX<hn+#|1c!%qa at mmJu0eM-O19
zDVHee&+94fcU}A{qy#0-cu|&2u4d78L8spEikcbK2P3&8Z at x1|r1#T&F=(2vT#2|2
zJ53U8_tJak+XHvp+pXSmf`h#oe>wUtc&qG~1LKwrT{l=Imf%?lWQcp)_M9oV{NM%j
z5bF#s-n1yCmFM!H#=_J^>izu4+z7a(Qcm{l>qp_=jaM}uo*|XPQGLtr4bsz=d|JjM
zq_#Q<QI!eMVi{?j-x5UE(!5NZLd~M at 3o2hVeBLuaD~xMxPoGuVJ8FuIvN%3XQjRwO
z=E%NA>RI7ys at Kxc|5k0W0<@kEE2}QitQ=9smC>#+BE6Pq1asZRWBa+-tE_OG9(1|6
zOEoZ}Esit^0bj}aDp)hyKptLOJ*UEdFZ~*V{5w||P62Bm(Nz&xgg$|nPwXl=7<Xq#
z={3M$qnHvU74duLq(z8Cv+B@{{o+4p0t1!;nRi4)`zKp=h at v?}ShAYzSLd{0)`~qB
z&4bNP9fN;!j3 at 9P{%R3P{8g>Xii?s{`xp5Vik)R$tyag9{ekirh%qo))ccJs5*!9y
z5PagxzKJ>|<8Pmp+}1sHoUYnY)Gg(I5BP&ZFws{yiV$Etb~ij$(wbHuHuddjuOm at S
zHeZE;z`B7JE<(^BqD=o~*1{aeFtQZJkcQ;G(QoMY>SxLHs^{~7R0Y}^x^84iBPlrH
zFYs&%F<eLf&Z#_s+s7_Rd|+C63e!Z6FXolQ4;FAUi2z<keH(9<5Gc0gpgCx?SY*so
z{*b at W1wg-<jH>C`)aa(-c3UjJ_v6O$vUhLYDrr97w-WjDAF)FXE-}JN=9h-Va>hI_
z#(E9LdAKwXaTebd2s&_|H~-<A{TO-O%zx3nvG3n?YdU&wTjUSZx74r{O|Z#4?#&u<
zDrNkxCORH?L^XOIg)vF;CxH%#E014!tYP#c_+%!AHOk&8LrJ3+M4gI)e;>rRm$sQ(
zFGKmq>WRNrPn1urz*c`mEI}StTNOyFVoJAk?-Uddjmowod9Xy`<6);5RQh9`GOYb*
z^p~p0B;XjZ1x)Qr7yd%V%KC<D{uM*wvW_}uE3xOvFp$cCfmAv=%><{(L~4dv%*vmZ
zMnwVZu&({dZvRR<U>#Ojc7p%5OaFh+$u>UM>i^d)z;9XS-!K2$)&B3m!T+lR2PHqZ
z6SEr~mg*NB*6N2GmK+}ItC<YW_g*R3MBWR;{$7*(%NRxXDOAOJN>#r;n0zf)F9a|w
zcIt}dn at ef1(KyR4)C`CEUGEbrQ~r^J{A(XNa=4D0U|hP2HZumzdbk1Zq>8RuV8X>h
zN%JfyUv$M89*q<ojq$@D#mK+nRgNXnAbQV?#b}VkBMo{qpmDKZvtB+-Tpc+WHKe3B
ztf*Nj$1(Bn#}wi3HR1m}S_%ngmd-G at 2a~taq4axjDGnl`!C5rTOBJy_Q?Eav=~w7g
zeGiYdi^vqtSxZ8M3phqaB9tFgd!3#~`bvfMM;Qe*um6|#f574YJg0*{gc9H|R)~qs
zi|p!1S6xDz*SFob$w0ySJ4*d~<u$o#Y`Da5pY{MM)G367NU9I@@wCR<dB^7ZJMQmE
z<llG@$Xkqpj!~>wL71nmx$)$m4vG<u27~hN6}XiD at IbPsf%2}~&e*P3)UTpCtAFaJ
zivQN>_}9z8cyd)Ln-Y~2DM8-EJPZ5Nsd#+i_TO6s|NiC^cy&HQoQsX0no1}30$LVN
z`+KN=hpvC!9T_FuP#Z5%Af+|3&QQrq$A8pa3w7-1NnS};+_K9g|3BOz#vl^xXrD|A
z)qYRn|3 at zQc+uRh+P>1<_!_5Er^KDQNxXm9!XMt at M%BLWB2vCK5^##j?py=>mu>z_
zRM^?*#^90FBVJ9A{qT0iDIqP5!m2C9cX|E~`?XNU%Jw)5@?tQ%B4j21p0ECoyCBAh
zQlRFWdmBw+{ljvML3G%O?wpHt{^3O8RIm{y3dQt)&=r{oY_{XHC)4<!o)`zq{K8pn
zk^jMb?qKQTAi9^&KbeLktT-g^E};JhNlqnTBTFJH`~PH-7_jDYFk(W{KdAA)hx at mm
z|Jx`2zqz?2afitNa|1bT*jHyNX9FMct!MJ2io~B=G&-;qiAzCQE+^!Z6n8I=l=^N^
zhXv at tr0g&&j18P7`qM-M4KWtl%v<z4psUua8BVE63duNh2pK$t8dLn>)&PFHZf!QP
zpvm<M4(NK at eE<3ZbbZ;uVzfvp#P54&<va2?ipyeHYa8#;=F9!Q&)8Qki0>UZ&0#d6
ze}@ObOZnKa?J;wlXzO~w3EoTSed9i{z2M#z+ij%;!M$dM at v7!gYiFt3>P3<3Ky=GO
zH=onz?k^XFLanrW_ft>*l=La0rKsuH_9Iv4s(1ck+i4TZG58fCJele9B!c^!j29D~
zrVN^;SR0|!9!Pw=^7B5d1pmv-JK*O!ZWy*+fGC^bEAR$yVno;pJ0JL)?srN&;G>BG
z3-$ij0yC^Dx66uO;{;b&3w8eO*M6f-aRm}+(Xz~hL9hz&H-{J|3>@pEMpSY+)An|A
zvP2%JM%_(9Odlcle^dJ=KZ`1VO%T`YBj2Lo3~{Rob3&ak!q}pHavD~z^b`hfUbEdt
z{6Bs9oshTAeqChgmvw*cxDusvJ#uETVwd5Rg at R0Z_A<!=`B!!c!LM$eRLrL--UopK
z47b!pPNgK at Ro-7C;VZ|FNp3qsW&)Ru_tIxP-}5y;8Xu~7jh+Dd*-ly~_UGL)1zvd(
znZMqyq^dS}T)v)3nA95cZfQP?&hG5rILBNs4(k*sx;kh(AhaJi;?Zh-ZeemZ*kc`u
zmF%Om9i2n&Ea^P;n*DbLkg1{}^^%HLzEkzcUMpG?fiQ%zrn>6F&k3G*i%Ahx0~r^C
zXVsAEVcNrbr-=7&Z}}T%>S%JND~vUG!?QLlFy6hBc!G|`{a#{YMn#xSA%)rFVeN~O
z{pV%JRq|(l)YXYJa3?B at xM-Wf)PLm at a57n!U0Z#TO6$V6{XPK~4fA8;0+3I|Q#kGd
zzE`Xqt~;Rd^@+|6aro%Asu!8R55jhZy%Xf+c6 at X9l!V9u8xe>6od`A|+ at E(Mii5cE
z6*EMOfzTq+`;}OvV)*d&UZ%Zt)Xj?6O8f0GxMj~|5E*KHFz)d!C(!!l+*VoO_P8}0
zxHC0SXUBoZ!(!60vf_EbWIbIVXZ>@CHiKiFmjiEg(i#m(F<W at m_hL5%95y79iZAl$
z at QOvx;o)i<U8B?3Z>Cw!Vy4K0knq*Fe)s+9KKJjFQ<|0fTtDA-JKh#xtFU6zDm&kF
zUTt-zzGQBr`>ETE0jEaMWn-VH9a;Me{zX5EwjqQu7{vw!p~f>k?F`N<JI4}>{Ma>B
z9q^di#pbx8%i#t_nOP!1;b<7Ttl9rSXqW%E8D_JjsSE+#9yN{LLSo!+nr}_K(u8j>
z*edm##%;4XNzelEIsCbyD`!r$oe|lUdhJW2X=jo6XGcx7q&#-t28lerO at ZAREoZBY
z1U5xo7d?4D7vmx(I>PxjCLdpzx&JbQ*mqq;%@W0EMVOVIUkOqu;QZGJ7=VN@@z&)a
zYqzQLSruQi{cmiwn?<g#wioVw%-70wAQej^vtyn2mj-b~I#v2f<yG=Zt&G|gtOAg4
zQ$WCnM+_FOd`02d36aN9BGBj*QeTv$7mHq9Z=28-K%?E~BA9rm?kIf2DiwoHd?POG
zaog9p?R0n~a42zLVy?>>roz93lV=IM3MvugWks}95FN7HMn#WyD5dG_^uNC;GI{J7
z`)MYT`7#Wh&{|pK9z}yKXd!1k;Bgg&Sbs9Qq7%?$-0stoDH>Yobuh=|X){warbuY8
zSx~XOz-B=q)JLyTl-g<N8^=U#q^sc5DeR~8=zpK7iZjn)(Gz-MJ(brNjW^Kjvi&jm
zCC~#!&^5Nyu%(VA$gq*v_B%?)3f6*owtf_m-o|cnbP`Nx_bX?nUoM%b4(E at cX3_qa
z)Dm3~MdGQ+;=$mOx9w<rSFx#Gxj(T&(%kp!6qXc9F;b)=U-cggT*XREJLVTSsyfCN
zX9LIi;34f^EE?t7TQwo^1R7Ph*ISWlEyonaM~rX!aCvq--1jmcIm0dvY#6TS4gpK`
z4F_ME_%?&F$G&(Rj5g)V(4vYBTP^d2h;L&IV#18X8V897Wl0Hm=YTpKdhjc7=HOue
z^lOg9lc6`ReTy=t!W;SadQ%pO2y}U9`(v)s-f-SLB+Zh-+4pKQtTt*cM@(WSe}JUW
zXZxsjfJD0b)bwD!ng;@4(jn}-9?ujQpuxGP;C4 at 1(RxTF)6SPhohf!&4^9Es9g%Hs
z6Cfr^!{y5aB%IU?&)C at a$2MdBeZ6>rbvs|<qPLL<lpUdF_@^7;ifCw+C8t<Ke9o#4
zF1Xft&I#@g4X97O?XPMUm}Jn1-j->VCo5wcW>CVpay at PYK{HvSN|shyI$z=6d_^E7
zTGE7>`P-lZa>PWkr&{7b$f}n at jm*DFiJdgjL?K?Px4e96O*n1S*XwhjPj88!NqdEK
z8mrr1<2rW*e|9|^`#d3dgd%E2v+l<;ety`Zv+>mLY>dbHXsMz00A28BP9l_H#q at M%
z$okG}J&j(&pVKwMxXrs(>D_g)?YFlAGgW?|eDC9Xs7MzlV2RTTv~QS$OoV6TE_Rp<
zp;h8uc1YmQuN3B_QBF1Os9A$wU%W#*+newbC-Yn|Ll9W=RMuM&f*#uLaFN04KY9Kh
z*D5X2&o*Q176Z{9&3ETBDrhNM<=XnpQ4S^o=|*2Xxo#JSSp<&iHM%dks$xVQ2HVc3
zBga$Q8x>MuqdBdcp`B?7FVL0w!Mh_VX)FNX982d__h{Yr-Nk$h_oEc?OdHT`#t*tW
zW(+z4d|5gPv0ZB~^z0cuiXUn0vBa=8 at PXJq+QlfP@~*vU<Wm4oWb4#KGo@#s9SNi|
zw;paKMx&jsX-qG<G*+@%4Djwc<1y>LeZ^#Kna*u%mk#J`2NbvZnH<{kdmUqW6D*zi
z-5wqo26RWzrgh#Q^)IwXzGCLgcNk0>hM!2|7#M8;sqO|gAY8014A7_?+ldI=b*F40
zY}~(TKB#Jq)bvm1_9)Y^lK%wOWyvd4NJ;Ns=JM>$JYRJ0dWyggxmR at P2}QN8N6oyM
z9+!Z)jEOb+eLf<-yt&g#)yivQE4?wSF%85{=ek**vc5djlYVSByMHm$>|!y~Xe2OG
zY9TZ7R%fsM$7Sv{+Gp{L5sA>(yLB!{a|VvwKG%!E5eXkYvdv6rH)KZoX-*%sT8|Or
zuZLL-_}Ytf7V93Ljn!F=WKL8ZHGb}#e{&n1e9vsu$`|nBx;??J^7`*N<6zOQ`5?+*
zPq(RFZFE#5d^5ecMu*S1hmS-(J(L2yR)ay5>f{Xi4ON#T$!O!la^xD#a{O=uvMN_W
zr=;%3D}0;Qs&u0UPN+N+BG8I79;Ymb#~0~q(Y4wnmIwcVBk*u}6?bu#kG^pyid_Zt
z?$+^a4b+$Iz--X??IY=9Ch#IjM-jw0YUmX5o<zte6<|M$d{-1ZKT4bJ>yYJlnP&bz
zcsU$x`?Jl2Czg%y`NlKrjhy^Zu6e@)gB#7G at 98y)VKMV2kJ&Ac9UzNMMaN}*mZQw-
zj+<%0tFC)+P0!6DSL-lmEy4<Gh4omvRJvZfPgJQ%r`T(y3|RCWej?$xQ(oQSI`{n+
zLi@^I?^XeU-6>)fD&66vUoYz$u0z*z4_)7DwJA2JCU1`sxvkGBfRKj~**%=5C`>aC
zRRlFDLgG at 4eWzgF>Sw*(A0^cfNk*6>@jZ_VQ(Eu1708p_rcr{!zS~WCKhbG5lDsH<
z%<~93nl*=(ktSh3O!`Qb_MYq6WLq$|{miQuoU4EF#p}nn><<l{-cuBNpLh6fA6BhW
zs=(>?)o#6sIYrRCUc2_kZTwPHq(c1!uXX%QPT+ at o!}ht$Tn2 at p7sUAW8I#qF5q^mW
z7k+!0UZ2)6ebD=s-#<Ud3`lwMJ>6f&IG_jB_Pz?0SP=E^jNoY?3i6vo-Y=XXs6w1d
zmZc<ceemcyhoavH9a{W^c)PKS*a<bQy`*51N*V=$K`+t}4#lKso^I8RF!L-swgTkg
ze9HFy_2&AJRpc%;?ZBh>U{bG#cHLGiT>>84Ln3qQu}{0cm|jX at fl8O9XN!BEGF$~)
znnm-vpYLVkVZU1urZVMR?`U!3b;hnx&fp&V<iA7@{u=hMy~B-UN66#ooE6`nqPH?G
z>@ut24h$N-wo;Chtddyw?WxdjnO<>&`1NI-|JdJ1v&lSiuP$EUk8SY;r`hO9HD1wb
zmCsfBhLv-*^dKvpAP5VcIL%e0!Hhr)v-ZcT*SbraN^g$G0k;??Rh#1gvDcf^&q&(?
z8CL-#^$CWJnfs}(F4_J=LXUTD;Oxg{4(GGhqdB46=G;qTlGFH>`^)7I4aLw9L5B0J
zpConE!9U1A5I^*Sq(|w9nB6${?Wh38Q@#9X*crCkc-+0uwHM-ad7aj(mDx9QAQFDu
zr3F9rY_c}PUsutW0yqxzYQJ{KP>XsW4bhT#2?{uN-bahh790Cr;JS^B@!;C#>o@#J
zc6)g?kR6a}vNs+zCPDEn&E}K!@dH#Sn%00J0TFb)o02{xau at q!dSL<tWv1I at 3O(Kn
zc>txNY9%@|E-xqF&h15HTdBK at EGx?$=Nnd4Uk1kGf|LrUFF=*@NyDBoZx~M(D-Y at i
z>Z at 6Ql|gjR;pN at X&_c2ce$L6#SYJ&kxwmKk+&qt(j9a8Z#UPK>>!A+N*?~tR|6#A-
z_ysO3OMQ4uJD0KaFj7sb-0fT`eo_r^^yR>D+&<TXBjt5oY&04%e=5JnkKQjg+c6>)
z23M~^uWx1EBs{i5*DTN)vYxt1u*l7P{c$?NOi$rR1X?)(_hPHmuMrTNJN_)!u4Koi
z`N*Rp_|VLx!arwtJ<sTX7!g1hzJ8 at OwCinfvAt-M#U?`nEZA?K5VqdS6cBJ6I}VEy
z{#a!2bXVjNIOwzJyTO^yiqm37ij$Heu2ORmzrSZ3xLr3=EjvOetwP<t)xYtTHp3!X
zXuKY<%<WmCA^SCq)YtU56+%L5D3>=mI~TdVZ<E!aW%nLbcU2n~p686 at l61ef88%A7
zy+ba0C0W)E11yaTqj-^k?Wp<4a6&Bdao%mk{AX3Kzm=%X(BW5hSGm{BWy!s=D~g{s
zcFBi at 2I(P_3x938q{~C=TPrb at F&Vv>eAqd9F`1}0G6UB5v>kv`ho5?9Mn<G5hCJqt
zw-15D1S+up?f{|W at q^>*RB>Vd8id=&2dEmYuRKldNyNb8f%m)TwMg8F2kGV2u4q|U
z%Hxe|_#o(y-Qe721YrAw%<_cvk=v2WVok0SKcpcDO`as3c5{N!k*+`q)-L0wk~)iT
zAxFD;GsnvbEw5^uM!`R=vvm at og|&eDBLNGU;KTIb2#XlLxy?6mGWK;VKE<P-xMr?>
zAD4Vu4?95Ud#*tC`-^Iw{$t|%v3a&YiB5!Qk%wS1#F>sFDyUl3oX-1rot0RdOkv91
zF<O_=h9vEeSzK;K_%;%vGHv&bXCRgtjN*DRw`adHS}Iyq0tuveM8XL85AGpoVlLfk
zjl$6LHBuH&GIz_LG<76D`(UX#imbI~q^mKVW}ipy?93b)+yEk>^p-xlK@!z0HmF_i
z;bfv!5r)m!UpyFT3|ojuynm8&yxoYa^>!u(<Cdw%(|9>Sa>dBWi?cj^YRSJ<87&We
z&7I6zc50nP+KVj*@_U}b$~KL|O(wNyq}mzsy=<@hkxxMIer?UWO>ReF;|<y3b<24M
zgutx3)=MvgEG;<2Ho0)M2Q=cMao&5)JyRMMw3cBL-xHHMf at rYcCEs2zd^E80!S0rK
zY{hqkNw3vwukNUVhIngiIBDx*WdXRCNzC%$2;h%WP0v<yndR at FHwKFPo>H*Xx*aV(
z5w*s>*VlRc;8m+i9|2dX-{5NOSMkJoDg^JfkktIz)$;nogdp_pWnfz`r*s4%f58Z&
zY!>xNQ7y#Lt;_xRF1F=xTH(_QejPb?cCcXQdvBM)my#@gXlwTEd3W6g=fd-#O1Bhd
za6y7{IM97CgF3CN)_D{5#}va22`a*Uh8`DOQfOT_X>H*1mhzR?dzqkU?EXC8*H{Tz
zz{{3kV+wTPpQ2L}^n{*y5}s{5nWxXVn${?8DyDCWT-8ur2w&Nk75rrm(4b25&om2<
zKYNIsNJOfzPFjz?l%K^nH+vqX8*UW>e#Io&uy@%A1J<2Aw)|1nE&w<e%7 at mpb*~1^
zd7N8fYL^~2 at TIWsED8pHo$de~ZFN+JXF*v>v&B4E$h_;_g63KiT$uS(LYg=!&e`!2
zrVP$n_MtG)48F83uh>9_*w4M96qXH45XSZ;D*(&0J_uW&f3Ko%3O1ihNXw!#0Z3s8
zO)1YO>QKnSDb)&G?`T+zF&2re4)cih7t#Ji7rHV%R2KqVV)L{C_Dwyfr0 at nF<hH`a
zz3aG$2Vp$Koh}Chq)hd_!h>t=YLE#ol8S6oH4JTzbzNQBvBtg(Y3{bTOteGsuzBuo
zl-#c_8jCT?1S*S@&>n^qA-e&qeqM)I#4GEI=?E0xKUH^t`AuAUK%HxZc#nmustLRs
zDF+m4**;tT2Y{yH(N%ItuG at qV%iJi>+_u;nam3+niU~KPg9lbxTU=Gm8rE9z?Fn?~
zC3xweD(3!kTT0^Lw}~C<v#m&$UjKqNGBMXzyBaH#rf0P=uC*Olc81GN>%xJOlo0`^
zOFe(rZ;2Q`1;Vuzjoy)+PqogfZi%a}Ak!-cWPP9?4_HEYbu*sz9k;xyuEAWs?qKDz
z?H+f3nZs;8pVIw>Rq5AhqMJmTJy~R;^n3=l<|6M)mc}nWwCRsF*?#&vGW>L*fVJV5
z5%KY%tHsM}C2A%(^wmD0V at 8-esyW3qKH?b)2a~ye6+q&xc;YH{;xKVX|0}b2w^p<l
zr_4y^$keV%o62Rw*rE5k at d}v|*-+D~DH+mqw{hVaBEAjhd|q#e8D*xh+oC7`HsY;*
zL}K+Lq(S#Hf1(XGxX>5-<mkE5)l#iRF$L)R^<LJ?H;P<<rBRw{p*I*LA)#_)&P<s?
zY^Ggt%HOpxmV10EfPgAo-+M*zeMapKXQee+M_Ktg|DCuz*0Ao0e7NdFZw+?qc`DP)
z1}>;_EZ@#Sy6;iGVTF^2irje!Hw5MH7Ct7GD#0-D#v5>jgsP0cz^m5Nt}OKw`T0jB
z<q-DF{gsr5*6&=;yTeUD`hA+>2oy3O+M^L<9z;-ZA|YVF<Xh>F-i(_$^_xlI<6J-<
zZ**L<v7+d`p_+_y=88s*29B at T=6ONVb#)adfI^KBnpxgEf0D;@l@{@C?p*?BCGr=@
z5-`pAsk#cy(<m`u$klO0C}8P5KyNbsVmcx at i+vG41c|ggnq3avEGkP8_`O4DfF;xJ
zC at sy(hwTx<L5a at F+|hCg9W2wvWuF920Q6p=_Q*PEwj&Y<Y!QTFBg_Z;&AmAD+SU5R
z1uyr~?;V))a$cEGzg2o48wBah#!*Or^E6K;Ca+sI?|~D2m(%6Q{-AWnCflJ>JwJQ@
z31rL$$DNtl&#2>4jd`v~qqy63m8I=x+ZZ8Ndx6U|=`WzLR3KaD<HZUm9ItQmao`QO
zKqS1mEmC?87s6=i;1Zn9WKAfLJ$$)oIa`*bbn!z=DXOyCPOChXA&GGjWA20UQq+5H
zWGVD}p$_yW6Q1)zUBprCuhhL|4U1LQ`z<2Iyb9`zMdv6>0aS4p8<XyB2r|?M8g%cn
z?_o8ua`f~0HkG3u!yEtu?w7E8Gu**=P9SS at QIIqS1QmL71bD3+TU?(uPAl9foY~_$
zDct$FGPzIiU$X$S@`f4|z3vr#XiVlQk9Ka>!M5_u*VO^5fHiNo621W+s&C~cow8?3
zO?W2mxnq<rZP%XX-|N4OTP at q7QWZqDL#E(1>0O5A$&8e<1o=Gm6fz7bSJk_Sx5``;
z)7YtHn~DIf;wqtJJl+bN)h48dclNVoR<Ynr`>meCx$5-|5JV+wLN3HvtJ+w|nKVi;
zFK>?h!LRBki_<I)wR80QU3=19b3b&UbJZCb8-vhVc8Jp0qKA`ST#)y7FIX~IlthS^
zhy^KzUv<=;V%#EM^<8X}bRe19P*#eaX0>$>seL-Ye$H7ksw_HHZ4r}y=e|P6iqY}=
zdbv)y9ri~Zo`%LsGrPGG at Lel_jwZPm<k1^R=x at g8?RIr|amBz;X1=d6#EuM!m(^Bt
z`FdHW^~{~sEBnU(;d)QG?u+;B&UTE&V?mGPL{^9jLC~A{j=QMGV}Y|Erl+OF5I6rc
zfdA*m%Z&T(WAIDFY2~V_DKUx%1#f=8eOosH5S^QZ;QO_5I}C=%(vOdy0S-`<+eA=d
zrC_b^^#_VVx1h$9eUF<B0vpD~=Awen`-$1-!hM>%p at zC)Xv6^O_tDCZXuF~?rpP(p
z<x9~?mf48Ik3GCa$>O15ynz^&6u{nlsXXqzg*%k0qdJB8dP)9H?sl`+nSi8hcO^OI
zq~33SPGfRpIsHw`%`U7Ea;R|i>ojHQ6X~ewgW^G6?2=OvP at Cp?R>#)q2%Lq6KWg><
z=cx=xFO$lV@#i2JU6d6$66Vo);o-g;2K-9->$0WfGI-l4P2~IBFcSB&1tRn37+Sr<
zjRlS*$q~$dH5L;|;rzqKu?D}!y&*5T<<N1MG;a==pV%o>Yu8VLbD?-S1GU%_sKXV0
zsNc(8=Xo$wn19?qFI+eBX^9wWU#~v*g08O~Q at d&|sOu(CN17!?8Elh|AGB`00xn8U
z)Gb>9v#M7z&_(VLi;=?}7HV=E^}9AG5GeaxP>C<C9SUUho8InbBAPSMmK7UJEbe65
z71!(g4$2%Yg;+TRMYl8-p99K3R1R$?HwWMo+6Th&(bykZh7X3+679LDSTCnBdD|>z
zR$Og;D2|i+v^qj`j7iiBPDd<agnqaO3>AJwPd at gBMS145X23z$u6|pw0?j>Wd4v<E
zJL5Cu+vC(9v-XzkEA^0}kohD at gZV@mx(q{chTNkDZ#G_r2*$I9ztB$~eb)lG*+&ju
z_j(*bib<e<oSab+*=?ixK at 2)P0gD>Q^U6}}*Yhy*{OVMTUcvifONP!XQMmLRFm3wC
zdxu1Q(AF)n7GkZ#<-W64A3`QhvU9NDUTkq%shL71e$FQZn_FlfV00vNrCP*hz;h}`
z=vT~D#m&P%#Iy~Rc$vc<Ue%Q=aa3=skx9E-71fmcl3{j#DG-5}==*9_BXj57G=<4e
z+~L~JF$kF#G!&JP&ryQ``yl;P^bXn?^W08kG;*svUbD&3WPhoV%l^d|sR**_cJL1h
zTwAJ=^Zn&{_d4c#AMui)MjnK(c_ERb7xN~BCHIQV at m-iw8glB?6k1hbFz$={l{s~s
z#p5%y8Y{_GOTkK5`f`$^zS8Wfm7C$qpNkohZUjIFRB0(te(PQ~R+_jqA4 at kaWKYl{
zLP{`VzB#E9OSRB4I1#T97RfiYav|M66SMkAs}E`AS at T{6@@{;%I at L`Vyq2a_nY1m=
zc5J6W(2$}=CQM at ci?e_c$z)rh!Ozn&I5nYkVbXGURViMwQ3SJNqycxfa|XHjrf(Qn
zoZP&01EpB1ZD0ubJ_;)vU6tr$V{odKLF%*o`{Gn{p3=SIY=3>p4d-mtQhX$w)}v(p
zW6<@f75J2qIWmIKC*5}@ibo)9+%ossNHUnFjU0E8K?_;xl~INqzBV+7Ue5$Mq~&7H
z;6pf}j^T-p+sX;;0!vo|)>^u<Rk)_x#Vzpe4$=Y at mf;NlaAXJFxknc?jV9n^<=$yp
z_hDoV>;cfF0K&$atfR!^j=ZYhe=?I<Yr`gF$NAcpCtdk2%LE^-Npl5k^eic@<8tXh
zoKR<$K`XKz7qW?|FGJ3wsSS<m`026ip|eLF!xrKS`wnAmY=xG#v+vKq+f4XXhKx^9
z8w98ElYjSm6LFpr7H%|L-MwOSiW)<{QiYouQ|6UN&EUu{=po*v&YS1I&4fVLAM5X(
zB7knqS;SS%n~bi!rHUi9eR~_>H3%}C_sW7G6%*kYB3*A*Unq=Tdd--IcC%I&9P|Q>
zLA{Y<>Xko?o{seP6FlDtAX16b1Y&Y8?(kjLc&A+DsHC at BTnHB`a)!BV_otzYc#B+G
z07*Z2T=L2Fp&GSO5BxAeo%pJI4>TG+t0hT0r?1YZJbG|H8e!=iEx=y~{i4(BQGq?O
z-MT%YQONQ1{2+5HvnvID3*%aI;Nhu$7K7Y=J!YZ(!E7}iVO3j0cRc}jT<ZK>g&v{x
z8J~T*;9)+ at CDJWo1jbQ-*IH-22`XvE?Vthgaagm8 at A2+z^b>qxh}(;-&|kwAWS#I^
zWrb8&JfDW?E>X^lQ8CrvrT_r;$@o`1Z8>(j)keS=oa7v)H%#RRSX#RD&?K#`88*p<
zAj(s?Fzz2u5r|$d&(9RAxOHn<!a8%D3dwIG?kgY<w+J^mudmlyYY%pia%c_39L9c_
zG9QX9$?p-glr=f7(s+)nw7AW*thRVQ++EW{u5Ze_C7Qa`qif~%-|N!6SBUjowWksU
zW;07SoSVt0%%UYxqkdjeWL{Rbsf;&T{+8_T37AG-OgR9|)@hl68t-hs6vZMtovwlB
zo>f#BoE^Q~<8|2zUPyVz3a*r>pKluy=y at xm14u0PE0~yWzg$`tyj<7 at j|bdwT#B0Z
zo$i8RoXR+^`O>dpl0bLFD{6ey)+H%|tx!g)!Tc{psJQf~MQx;I<9U$jwHo|+i&d2!
zI+!{VgL>>SFE_${VZ9WI6lSAO&pOaT*oE%rG!9rg?<g7-%Z4|`#^Sz at 74vj|D}4?Z
zp$L86kR6akay~s-eb8}xTzd^t=zp;<yGw|jv~aN|GM_LanTsxVM%AmMgUDXwUcKKk
zZ(Pg3njP?v7S+?*DC?i-zC1E;!4S2ZUUnZ`>JKZTYjlt5XOwG;G`~t9F>5h%Yb>|8
zneE~Tg=iyfxJ!O0ZEUNb=l48J+*hS=Gr?1du-avwwz13L21wusZ1*cEM!pj06}G4G
z7nvgR9VE}K&m55+-WFEB8h(-yYY^c9xw|DsTl1>$+PUDlGm%&6H>`RN_|;N=N4=qg
z#3bfXuLuMxeC=OaAgJ0>qWOW#qj}T7si$Q??Ha-Kn(bzpZ5+Z31vNZ;tghLLUcQBx
zjY|2^OX~2g?v$={2_Ft|p7_1qmRpj>AO5OFBgk8Ci{R6(+3}idSg%t><eI86`q>K<
zL`_e1m(8^g^jej0uX{DgHxg7{-oA8INu75;SYn!6Np<Q}8p*tBh4eos_`t*Rex>t$
zx)-tf>bBBSnf-j_OK|^MzD$hn41cQMwN!3%QrX1x>6z`^?O+2pU<rPyT5KR|q%kO(
zeAXjV=zZ|n!`SKlx60)zY4JGwY`;s}GIE^j>)R~nH at lFj^hA$?X)C<q^G5sO=h(^n
z3KH4Ee&%EJwN|g!jI_#M`RD2b(09xXfNL@!Sa%Vn*wwX{_5*4L*U_)xJQ#GgTyDrF
zdiC@>%dY$k_5Th*R-gxLg(|3_H-1 at wq}+7mrufI~j~1mokUZ)ioH_Z=KfmX>Xc+~2
ze&X<oj`OPPSoS}k3LEcncX~efq&(|Z;m*}rl9NR)4THCSt88m?>HE|=ua!7%)z(tS
zEv|p9a-&4zjD(zm(Tv7A*=6Uv at reD<H$Uid)8N;gKD;b+c839vgCreeH22E+zPr8b
z0JNPB=93*El|hxVXuE!DSHt?ZE at cLvvZ049DJQ~aI?vxFF}^H!g}0-M!5bQ}x~kc%
z#XR5FXwLpjtj)YU?&+|0d*QyGL39}>L&D84`>Axck&i=}ce8ilC`Ra}MDL5cZ4S6d
zDZ|>>=OkpIp?E1cV{KS8kRW11$|r`=w#HsX=)!W8gW==;xyap5T at GZBD*my<n87e-
z!p}C%`;<Mu9b8TvWW9Xpp+r&T2AVq}SeH|@g=S-~64RVSv>F;}g0EZa6%zdcmoXKv
z?dp)!*kHTfktsy!Uh`axTVU(sLEu(KWKUhxjF)(Jv}8=Sf4aGJwC}`U<-_?UhvVc#
z5ao9NDaaxXlXpjY6*lz1maZavEqMsR5}9`KfYRvBX!L7_<)N<ytgm>?i=2Lmzc}Dw
zrOo2x<qpNG=ps+qvMl0h<b8hOxnR4OX)z`z7$2KB>Mq-Mxnw`RHJv9FNipAfp}m<a
zq9<{4>NnMgH^7|6wr%6qx0~`@m~6z&<~>tdYGpfzd9d30eyYG6Dk1Xls&={dDv{53
zv%d5}tL6QVJSp??vd&5f8?YYF^qZ!DqB_Z>AZ6ie9E~PNqdiY8ef1XemQ~u%&tJac
zEsQl%sY+%tNT-Z`9czbZ1>U1Y7v}3%L^&5$7tSXun!vfQn at hkH(WoMF8ZQVV@$Et(
z6 at DW-gH$fj0GTBBd|Y<w1l0SR8R#v_=ntS0a>IA$H~5}K at tDucyDKHV6;SOl{QDp7
zEMkU3HzosgR%lweS6ls*p(hk!37X$XLNDY8@&!IUwVoS3UTqcFB(Gw{Ho0k(Ehi7V
zr6Q>9&uNQ0{XPf|G`5!XJwCnIK&-sL0+fs*66F=8n#~t{XqoGL#IzMVny)rF^dYWe
z?mSc<pzOW1p3KlU*>P$;(so<4O5vT)b{#IYy}-Wg+sguFVQ(KVY3Uf7J={ZDm3-5*
z{k|sI^l9ll%&r8iw~y~)A*wIJqVOJ3hf(YC7yGdR(g4ddqdUx79=7=T$lwGGW&A_U
zd_M5P_6P4is)J&&pcmG#a1dp5Iy$4mhd}1kt#q;JCA%8%_-r)ICJVO}n&H&J4NDeS
zVf?)btzH2`-*@AN!p at PGyFKV4oR2s2MnwUg5@Sp}>#4|M!`bM>mqqx_y_?n>anD9q
z8&@$eyQnuMuc;CbB+DuvJ_&&uJv45=t at z&pl!3bREmcOqSuN`@V&wU$d#GXK5l^jF
za$JArxcyX~6g at t5t0<BmOUD&Utpbjt$4c!$s*Z_YA5!b|+AP5jmEEZ8!_O0=zj_ct
zJErRe6;T9S>`m(@P+bt#*^6xVJRo${>x0(v)Pf1<Ld)&WWk7%aYxf;t)2hGBepJfn
zhsMXTvC2X3k;<k4|B?%l{od`&i7!qvF`k#z8TAS(R}IW2eiuo=^C_88qybW!Xg;4<
zzkusVS!9ithfu<gbJUl7=2EIi@^%IgduU|B&D37i+)iF3Gpj^c$G(6m(5Zzc?kBAI
z8=Z9J`RLcK!F~+=Xq%MeN40tT^WlE<8FbyIqXEJsa-wR_cs##60ZlO>!Lle~VEnr#
zPlSUjbKHbckUb^3sbsY!|4(~o{Z`f5^?OAW5b07WDQS at I2I=mWZWdijK%_w$q`SKp
z4bt7+-6ai+I at 4#n-}7wG{s+!=z5KLT3+B4#U31)He7<AU2Msr*zYLtTdfn2dn4!Pu
zJYW68yZuIYHEH1nOF-jm)Y$CGerXFMlL_WV<UnE!5lZMp?p&k1Ov}3a<!tVZG-vqL
z-XwK#*X2?}Yy@>RaxP=wQy_-+O&+f~WvfKDW@#XSr(f*O<}j#5$Lz&Cc`9eXCUuU4
zxW!S!qlf+KbDTH;IpGun_q{}N+eLH(pqK$F at K3c*)HyEQF3>k735SVRprhJ#NLCVL
z-kQsPGe(uu-)>eP{O+#56Nf_<9P>k&5NAkl24l*8M(=*W5t4L3g-dt(a7*&6*jr*a
z^zB8ReR0Y=T at w`kt3`0B**K)wow2d&j`K=2*YbGzK}9RPc4Mr+D4;2X#JoqzS_$q`
zlOeiYBZo at kGxOzU_q3Debz%f`OQ`wpu6EwWEb*LlL`CWV&%q{qzN-VKkEITl!#v=G
z+!UGPl<Ui3-fgYQF1IIQ3z4*HAC`k;*|M3w5l>$NXyZ*c-!bE(bNj{69JTFMjAv6@
z-N)nI7gM+5Yks#WwjdS3yoN{juvx2`qc>Ohlehrc!GBiTa9lo666~(h$h|?9sS26O
z5?4Iy$$Vsq)q%#&nD}y6E4W&Sf4Zn#v}`kQ-L0$hh&H at l@kaij-QZZM+gzYIoNT1B
zk!<FN4DPQoS5{LeUv!O*anHIM|8*#COuG6ay-~;_KW6H>v}2~w2sZ>o7(i}UbPu;I
z+J0In|KaP1P~{vEOMQ1+(byV=mvFHFl3y>l_3Xs=!+ufXh<aY;1vJT=XTa(`T4iT@
zxtg7P;72{x9C3zcn>*L-9<qlkCsKoMW4p{N+pY3#ug2b3S6K8%!-)bR at d4n>s%6;h
zubED~XjyI7-gMHHh(G+Sw62$$%%yhCuP=M=r^A%GiRQ7N`B3cM=Y&%^?wg5m5xYoJ
zZmQVZreck>J<O6?BE7Z8A~BmzEKe4$1GNQ%A0Ptqnf5Ek>1DZ&bs^%fZOZ4cQ`FWy
znH!-k%eywaGn6jRUy{9QS`Xz4K2LAoR)tUv3GXAN%XtgukY>l~dic7owE9cs%J?dC
zEbL<dfsz5gh$}(&7bkv!ge}OR();6(EFJzjORiKfYcr^L6|f47+MACcDKuO!-fA>K
zFQVQXDF^fh(<3o79P7k=Q$ez5*>gvux9-8+ at x{?$3`CyvdVzHkywQ8PCP|NjK#9PZ
z?Ty0Q(Tkljz&ShY4Y<9R at Z8TC1QHxd<gxAe6#Y&$t?LHGw9XQEsW&>w1U`)3^4e@`
z(tm^UD%9;<50eLu0oVbH?q`NRfT++$vlWT~J$P*M4eHX>F>5RR9>_XkU<l9zk&#;#
za1*|=nfNAtQd+{5ucFiD<XXmAKeMSlJ0GH)u4BKu?#<)^rQn?q;DwsV at lqJJRQ5%~
z`P=MB-uS2N!MTm423lD}X)k>~qut8O40Y1a><YzScR{v<(5as~jYR!uD#{f-UTU(s
z7V%cY31XNQ;7iRZ=Q$r~cN#Fjm;ZF<b7I_lk6xH-=cd0{U_?zqAG0*I-iZ&cG#-RO
zQYU;FBzkNR1)+LndR~)xh-;gp-eg?eE^>G<TbaANSXg5=S?^dh2${Mi#>Zth4VSNN
z3qS*LaeLkvL2kyIPc)c8dK&ZQ*qmS9Gj-nV+Z50r0libn0sB7A7ZE$b7ZHbj(_nw9
zaNA{_!nwZ$LbwT%XKb~UUJE(}w94F at -IPPM+Yg-6z3UZI^=Vc!WuskBSU*T?QTVES
zoge at oyxHls`(?l_=`EMKzo##_M`8c*?O_X-sjK<%z3fA)x=^4aI&Dm;2%M3t+JR9a
zPZm{S;nmjoF!w&*8fHPpXV{m^8Wz+S%ocMK%+<Fw4I!foKy(JcQ*rKKXpY}Eqa%9W
zorrET*(BXdje4o+JaOZjD%2cy9p2}et+r6zcE>!g%*r?V728Q1m*HD1IWf(3_ie~K
z989cX*D(RWFs5XyH#WZMrZj<4$GM_}x1|`2SMf;qP>-=I8ME4tQ~Oe>Z>T)yN1Bh@
z$|#OW5KjCFJ$x!d^+`cFb at p4FDb|Us_h!-k;sp5m#bfJGO9?U+-_~f>|AczpA;EYM
z;7w%`Q%i<}Ge0nAr?~|^XfB5ps1!#kJKxl+qiAzEn1aS%-E9oCV{tL3jIDI0+xA2W
zDL>id(9PJYDV1<|vg)X!w+IaxjW%vG;FtUZ0G8nKs=L at vpk4AAy-d^DZ$p%B^1SC-
zF9)B!g8F8QErhcf3h0lTvlf+?34^<mw{|~nu7d4%K9Ji&2tvhYY#zViaGqY2Nuta(
ziO)*H#2hzQn4#>=hHvJnf49?}$mw_aLq{PT{pC37lBQASnTm`p#)YW*!bs3`#S+ at -
zf+LT at IViB8V51+AKTuS%(Z>>D%c=K*3&o3M+Q*FW4<`6EEO5wRcND0oagjv^mArHX
zDHSVl+{#D at Aaczuc$e2%;mZ!#clI-eaZp4H6$vA%ZWM6J5=`NGk)Vw1qW^KVIas?0
z?{*W^B{{6_`PSwFr9k7Okn3HR8V&@q8Fu3CsRiP4i?-3AF`cPvTxQ5 at rHRR+%*qQ1
zQ{CqTve-DpHil2bH2=8M=+|E1sa4>@TvKF`Ms~|F(Db-o6l`d~dz=tm+?bE0CWy$_
zn*@~anWJagu#b0CHS^LsXg1uH_17<V;k`&w&v$YEXr&yC-qwoPO0nGQX8CtEJ>Hr6
zoiB|OubTmfEvC+NkIE-SM=6sM&F)wV9MNXKQY}1c)e at Tcquy3|#-!cn|Gd}}SO|KL
zJaVW{AS>CEnb?BRXtF}hnouO!*}ZghoE(LYLb5Pd_73puST>pWB1m@@{ZyWr`(KcG
z3QyQI-xr!&6H4$`V%tIZrwcZ^M!jI6L}N`&>COu!N=TrDI0149B1-7_^4e-M?$~iE
z*MDaB-%_Vv>Rb4yiFlO(yS?DhrdKZomHMX2%l!u1<xx`<@{FS)s942kbJZ5!2SEp=
zCub`&cs0`%$JxRf6q;Ps!r`L`{{Z5jcyXfw7JrYRO8_7!D-NfU7utGI7f2yC>QO at L
zLSs&Pq!yvWwf)BS&|Geqce}YVlcUgkj&DZ~h;*K1bNnGj;2`?7laD>+85L+ at c4IZ{
zpSlpU6+y0P8e>&e{nY2wOnKbxO+rRY_g^BX|Gf12fN<?<;}hrIo*3K4bI|Q?=fjcw
zxteS>O)P$f^jUANr)Z$>iyPoiYD*>Tl22AB#OKbR{{yq<f2Ro3%)$P$O}ve@^hueS
zqBRsAJRmSXe|>vgE-7grAOUzNy=5pH_Sep8*;l!4qMaC1kzqu)4r(#}IokZaXg%d{
zq8WjfP^JVjA&fzj#W_c!=a(B!yA~5g@$<+FQ~h$GSg at gyvyA63e>8#%=0wmN at CQ3D
zVU^%?ry5DEs8yTC<fA at C@vV2<Gpy15x`h7}TOjxA5432^=|2>IJ>*^zwlTEPTtppO
z2utRa<t_7Kz9G1XLY$`@_hnF>X8pQN6}2}xRZ{_GBV~GOibHAmf=Y~Ex at iB{sotRm
z at FUyXD1CU|eRmyMhDD|F!BY(-l<#o?(=<T7*7RhJ%-8<nB|dNZ+Z%K~$fA>`Vr~{U
z`<<YYAm)&So$N}hd}P%w;vfBz^J^Qi#Cp$Y#psl}O?n)JXN?sWq_Uyb;AAzW9qspG
zs#wzmIHvBg9gclyoOzwV29md152VK^OtF6rjqVR5ve}5F`^*3Ie}yUV!2mEJ>bJ|N
z9fs7BUI*j<K;xp!Y%v{!<Yh2*FzeKZCG{C$%4ImF>^n`A6Z3cA3yke7jIUN&Bi^tb
z{i#axdWEnt=54Sa-nfJdZSZ;0G*v>03)4Li&t$OXN3!Iz`7~-Z61q55q77E8Hb;mF
zn0#^<`OP}iSPY#2kH}j1Pnlad6O4zllHkt3FgShXC%rD*Iy_9G)llzdzpBrO=0n2u
zVNJ{yV4IbnQKDME<WXuo;Yc~zO#fV92XZ)=DK{jdRJUqWUdS=*MpXa-i^ePK&7X^g
z3{_V|1n#F4$|^#INxi?vVCL6Gwxa2PjxSaRsnj09kRJ?YW29WMR!QNBF!H(YV7o1D
zE_ZgujAHc-`gT(k);CsqIP^LHTvJa0RRA6yR6U^gU6a2%o2V~tPQ at TA)}S9!3$Ckx
z at MyG_!`jtyx2rYgKnL|6CKi{3Q;s&LGsC=9jdrh7!O|T!dtQdZ={|qhACs#O>1m6%
zDK-Zwx+}HInT;jMF;cg8X5 at NjIWVup)(Ci at n)w0 at AWU-MPQL<7*wu|?z=LV1QDYXB
z>IJOwaBmVm3xU!<FZ%q~Mg5eO)?8hi*c$677d~JG;>J*`vbH=v_^a2N%4gXOC-N;z
zC9#hp$ewI1<?Z+sV9I2R)k@@~^Sud=*!~E_HyLZ0vNZeTkV7Sih|>S+=$`N&0J3H@
zS7m107fm>bmw0VHS)iPw(*(`YzIDo}y!WjESV at x^#+ttuqg)QW557cNdy_Q59t-|y
zjb(8G5d*)cGq9d2IQXgNr|)hMr2u0_I%IE>#On%(vN6ri*h*%N_G=Qermj*-P!uHL
zx*|xPlq7+WLu*6O0%KTTc##kzVr}Y`=(a2^c+3|MVLHe){LBcJbl?P>@NC1}_tE3q
zPvHnmFP9&`pdY3Vy$k>Lqbme=FcH+K_g)&>++&1 at J;3JX{xEB at Rlg7V0DT_tKkXet
z*jRa2 at F9klSLdBhx=_ZKju2^9I5D#QPWhYRzOC5VmN=PYiP|~Q7yXYX-GqsqtVKBz
zF;on;LgF8(=aPs;cvu-tx!W}-N+ntgG=g-WC%#G?ykpf}EpqTV%HpDg4Rr{#bsvKN
z3}|eOkLJYwW&ySUx{B3mzKR7<9PE4!&_ at j*_Hwv96(w}X#9%X@&NsN6F_2Zvm9YZs
z=eJA-U9S`Y#e?X=_4s#RTvms?8`rMk98hYraTw3lH{!Qlf9J>JXNCQ2Z(}(AX%wt2
z-_GN(FB^!<=*pv1poE%JVWy~D>2#=Z+hmw?f3(Ee_|#`%?D_=bn~rjUieuNI8;HHr
z1fn7rI5?RYOd`5U36+^{bVVGmFp^Z949%ZVL-wisJQ#vu*xWM?LW5E8UiPr4&3x&3
zwa7kRt;seHv6}BujJ)atqQNV*$%nP;p%JOFuE}4NJSU|<1{i#krMi5Se!xwFTJDXT
z at ARX`Q#wM<hPaj|iZ$7$9sqxo$uB|Fc8lk|W69Z4IN)oWIH;eu9-`l)Q0K(UWTx+W
z`PUPJf&r$kr!~F(;roOR-g7-FR^jYZ<L%a9Zeo=pH9ccZ+0gH_lFL^M`HH#m@|n$L
zC_&~N`hqc3F~$4_O|l19<ZLMZx4BdFyl~<W3o4WdD&>NN1Qv at qe^tj{^x#3N at A6rN
z72m||x^JarABsO`**UJzidgC!=Z%0b=9c?56lYzXn|TfBW-78P{>?Xj7;n9Q$P at S2
zkM+)!8x*0Q_;TETV^VyHH}rs18*4J0f{%L)2p_bC7i>INf?hA_*4rV4WMua<1lb!7
z{I!_9lF;F~;QWU_MY-Bi5c)T=lUiFslv!ElkB<;>u#}W3rHTCs3TQN&+YTy^o2PIg
z_4z8r^(1yX;FzwGO26B&8Q`$TK53NkCOu;IG8ktl+S|y2;QPSafn{xYyc+}AVFDOC
z99(vraAkEqXDvuy(CZKGQ06I)HCWPm=>%rVpEP5${gSaXfz|Ux>XljURi@?Mvlhoq
zgTQZ6z`>7XyD5UM`^S&EzjRaY<Wk_T{m?CkQuxv7krAFs1RTA8yV$6%gQuC~Io~+@
zV209$h)ri#P*?>@^+Y+)^}L_FV>Btr*J<*@VlCj%!9-`FQl$e at me8ACZ~dT<UGw|0
z!G2D8i}befIc(@kQ7vOPZ2fE*W>a4fW!0w&B-z#s=})a+pBqp1#h6JG at 95~X=(!hZ
z-^0ilLltbVS4Fc}LdP6z-{VP+U%x^8%TP;GLZx_$f~@)^yvA=jvHil10u|vUEV6c`
zQ81R;fyHcvk#SpxV~%$*j4F at pq;if-qV;zg^}X}bW0ljn5y`rHOr7=OjJ1n73iK3(
z5-m2!(VmtM at 8&L&_m2qjpAMQ3gq`+>TuQ}nb~c|z$<nUJw1SipA83FCW-VgEu}Y^A
z+X)8hn_Z2+t<X;RYkXm=JTVIF?M^fdHi(}^Et$b$^F}Ap{2DxdBsUfNvU_*v{ZN(p
z<k<UhnmWcSbXDVlq|FUF`_2&aNv&a|%_Ry{wuK~Iaq8G;wqqpPHI?D-#J4>v34s|R
zIx8bM+rW%Z*d5P_zky_}*)`NDJEqBJeq<&3q*-adJtU(L`$5`&TK5+v1KlNOG8w`n
zuagNUZ(MX*oWuhk*rp>H0n>j=*ZF>YN47~1KoIACWRu3KO<&(0HFdv{ynlf-U=*uO
zU_WaIN1^;Hh&cu1FZv}9QMX**S1Gw0>=o3SX0%$$@ZFs#kNS0{r`QZh`Fx7NG`>|7
zu5EwlC}VYKnB)3*y&h&fSCv0Bqf)E^h`|a?5}3{OIURO(qP6X!;Ip4;Pf`Q&0<*2T
ztk5%$WD~#<?0crCU8q7ko at J&u4)_;Lbaz|UrLC{gS(|TwW4gU at tCk_5`*r$RP>uaC
z*RbDu)j57j!*I?lta#<2$M{moCuJ~Mo#kRd_3li5l%f+`0Kn4r&6WZR6h=fG8V9vq
z at 22lY3oZ>^IkT68NoDVh9FeIX122b%`DANoOyW80w`ZCv$BJ}ohISP#s_rib59wP}
zhVUZqBS&@acXKHr#i at g*oBe|?8n7>Dyzwo2KHef9S~1Q!QFb336$3%1VLZE at bY#X8
zW%yAa1dOCIlq(+Y>y4<xT8+d&4Dz_r7HA)hc0IG-3 at sbp@Lf(K$X1I`Te2#4avKPm
z3|P)DV-EIy|KN1E`pB(hNvW(bt8Gxc%J*oSYcFk)cyL}+IV4keu2<x>RXY5n4op{;
z3a24jU6_?Oc=#4l-uvZ3=WJ*hKW>R_*5+L1!@w{U at R`gl<MPGVO}RUcu89~IyANC3
zN&K9vwZ*udomz0!-D-O8-iNgX^B<dw!WkAYYN)V%w0-nB7jSm4eIXai=k9~Y;Ed+w
z8G8Gn3+N**m1UKFyHqZ7VY4o)X*jn4m~~ypq(yTmfn}ZsqJs<A4z_Iy8|AA=(kE_K
z*JN0<S4+4WUy5B(4J-tZLoFdjTUUV4Z at STl8Z=O;+t`#tKdErykOqGAz8Xxw<Ojwo
zB^|HL at fx4kGA^E*<1ro1ZT$$4AZ!8tY`aMNy|SD~WPQ#L^;1CHs<R`cH;Ozlj2AjW
zQvv7Y5>=Mgp4I_qi0;N5W{q&jJwH<6+`e0X=@x?AP(Ye4<asx at kIMScaGd15`a?jJ
z<4u%z+|(r?WB at dA-vY_FE|zL+*FSET-Fgppzhmvj0~e8GxkxKB=(z26zFQ<~`shE4
zMzZ7t4Pq;weyVPuoIlczyuS^uop6WxW=3X{EQ6;_?@n at bUuvuaEac9en12HzeLclK
zdXs%|8iRfZJorn}dV}Zp8C{pC=EtS{OplAnY4+Ldb!j+_7^H{uDA~{5#aB(29{W>P
z1M;GTR(tBU)G=luMhaKIc=|U?Tl4xg6b;or{xyCmvXfeKe6h7BE6=WS-F4ry88*B?
zXXC3%O+^pCmjaulBQ49XjpVR;_8^caeX8_kqp~wo!)u2YJp!tz!JdfYcu at 00{Y>=v
zgIbeYwY+XZ)PEe}Pelph5j>857tYx5`=YznUB=B02~|U2wOR>0(_KQvaxeXc!;WW5
z;-o8({)9|3Hm__c<qZ&H at 8#vsvx0yiP4_8v+NM&#g3i8iTq-qAAH0{J<jop+b_7tG
zGjQcECG+)lCzIfkPZxfkE&cr7N{i>oAxX2R9pbVo^_ZNgP?v7?6&6Wk%G)4E`MIvk
zL)}cewEyfSAU)B5yc+p<OXd_xyUT9W7q*3R>m2y5V7y2Idp52a59Q5iq<w9)<6c$N
zY?CNTp#-bVl;>ujGK6%8^z3kFwA`AsXlDdCj?sd(+b!#_nrZ+neuzkx)po6eAI6_I
zpv#kucWOz7>rko4if7cJ6N!fwv|Q3;R;5iM+93y%u6s!IgH}D?+nnW=h|y*wZDf0U
zdWCtvIJ4TBx at 1S(E|#t#4tn{eq1WR_f96LW%u~)$jH`C&1tK#YPiwONvHkp{hq)fl
z+YQ?^6f>T>DJ>jY4O53&Tt>qH0AWGI1Hn#jOcIs8iib_RT5_Mh0hH%g9~vC#>3FS7
zn#k9riF?nSJUF at g&Xv>&NG|p#Ys8aSxd@(USR7g%vJ5)^T#0gzlG)pC_eTkKB$7Fu
zl6$`^t-`Nn#>3%|W`E`2ABtar%|=Soe0Pd!^0}niYI=yk1DCS}5I23BI@=ny7p~AQ
zV&5XS7W?7?NM8o8oKh<KoUH0+n&_r9g0ZMQD$_}#lIr>uw*ZwBn~6r4pAwmt<CmDL
zR*TZ+w-}Tc511JDjJov>f$Jxm+TG;_U0s(@Js`6K_T{ce<1UT~Y83qX5sEh7-kJQ+
zcC_V)yr|}IWkxC*)UvmuP3 at Vx3=ln7y23At{iwL#nstFL)LG-fW?giq6P|ZHCP~k6
z3|C6t9m=X##<eWP;dh~4dh-e&niFrz<75aWo~X0O86ROR)v5zTb at Mwe@PiOpuXBRf
z>Pm)=-)WB0CNSW~y at jHrF$?rjxPjR1Eq>3%QFu-HI)mP0kzs$<-Z7`YG*qwRqCREI
zWp at 8o=KZoQ at c6Q7@uXpu{7%Q at W||#Y3e{2Qd?1MRuk%5=m!TJ<(2zr(qTlvQtz9j$
zb$umm%jW!fC+Z=Qii+%NYFglIQdP&P1BvG;0lQ7w?p(DdgNQuYYu)nc-FMl!i?mK<
zbccuYCfss7llCZI3yepG37i_Ka#D04<t6KY(N?WPAe8K3K3!sv3Ud^1o0 at OE&^nZ#
zexD}C^1^p_2hpuSC`D^<k^ZL}^l;m6ah4!2mQHgI9u7ThZBk<}zncIY2Z%VwIC}QP
zUFbDu1qe0jnDOP7UG6;@&;((|0JXEi09aTLUUxpX>Qw7`*`oCM+eqG5DC{fzT+=T@
zP5hQyH7BV_<3ez`rsA&v_#%!Z4DYptu2n4&xlULhr{g~9E0GgqnYAEfy^`AW at E~4y
zC})Y2&i=f!=h>V^Dd(;HJ^=Qnau{4CKp%hbdd2R3a_`H}RWC2DP0L8#kL_^SuTHy<
z4xz0CZ&j=61_t7S56W|Q$7?|49~cG|#mVp6-cGa>?AES*grjE0H{<bH6B at i+_Vhe^
z=!sy(+p!Scc at 5o4gnZk7Bi^p8qK>98-TzEd2k!os at JQ+K1Tn%^D66BB<wO!w0n;aO
zY83o<t>G(}+2Nf=B-#soX at SK2{r+;_fK-7Zx(8J3cCoh^5Q2_D766=63==6_rXNAa
z1DVAIM_kQsnA?P&?|*p~^;B3cLcqv|KX5KcNG`MEwYT(G2dQ*}%9wGrc03d`SAwOQ
zXgbE6pxh11!jLcj<0(tv+g5~;Cm%)R at Z_RLpWfac-Cnxi;sZjFB=E3%vv+Fhen~(0
z_!ZdmvbnpV<(5q;k=(D?hUQeAKJ5EDK+v_-csAtxOp)9Fyi at v>YN^IyS6tcOsT$pQ
zyqsu+G193nxH$@l{k_JncEa~FT9j!=HLSXkT@@M+H<BBc1hc1|+?J2)w%@Vk8H6u8
zz>{fFyYf2Cl^;W^Q at GFA68TTJ5)&7>AWz>Pqq>@);LVJxpDGLbakEmb`B7!>@WA8t
zHsV%yAn9UXwp;e%;gOXTDD({w*=bG-s<KWCqGEoJz(&dO?O*6AT%p6@&}S>)wpZKc
zF)VptJba(3k2s)F_cD~BH1rv#^Tlz?vCc8_GMyrBj!d#fQ{!46ZhRx|SLuW#g0T$x
z2Xq at h^^_2e`w9JP;X+z`DFVbpR$7_%nJ_}WR(iQ{L4&NB0;^sT&&<of&5d3~g-#^C
zODAmvDmS%$6*Y=5r^;YP-ypHF at aHG*DXn)vr+c+4UlH#gQ4Il#ue|Xs$ic!7^C*17
zVeb45OD9q?v+2mYTRdrV3F$CUz3D1(D#pk6XmUsQW*j!>e2GHH9Hh!xijBrSsu>1!
zNmsoS76JWl?6<D9xGGpIRBn^K+}`WSrc<JGZ4b9h&@b%2kEb&K1pdh>@=d_>=obO2
zzpTgNOA&~ZJGV^~*GL;wMVxxEKV4kPD&3}+P at DdYnUGXPHj%f<2$VytZu7hD4Zk#u
z)k`ulI%w3|7ZlOm&#qwznk0wKnq=j<&8a9K!t~r#@tO15J!=TERJU6;@0$#6k^6lw
zDrAxC^*bf{gD>-32k9L9zw?;uob)diOj<O)BeoSHmhgAiophc;#t?D9*VYsi^~VvT
z!ctU1hfvzC3zdN4GA7*JuxgukcV(@2VUZ7aXx*>%hRw2QW!}pqsl~=StyGD{nmsMi
zUN at EsHm7Yg%(N0v-tRAeC_#bh8K9hXL)kB)xv>YU(x*6V19|}!`(6;cg3PZii9TDT
z9-F>6E|TE|c(74)&g><cg2%T{xdSQp%?m`mw-yn_{#Fq=aD~`ijIO*rhb8b)0oZoW
z@&- at G@@lTX+q^?Th{rt4s>KR+<w6V{l-e(KY7(MD at pTc?GXKc!(y?VzHcQBL;l4zD
z(saRB_J+ws$rI~H7sTxl>LVYrUScc~B0xY_K0Pdn&8r-Z1;Ct_t}Zp~@)daxcE8J;
z at Q=gJt+u9jT}NXssy>(z`!{RuUg at aqEDwX=p{GUf?I>t80{O^nOz$_IBVbUFs_d8`
zU}256c`Q at vC@nQ~pdRmzQd;{MG}(+XlqoQD#`+u<#1VUuxmc4H=8(1|LLb~`I*~#g
z85iE7gy!&t*2yY0y7xr9Q{DN9NO7;N{@`6)GxKOnb0D$5 at NtsIL5k*!*oJ8?WsU!-
zNKdp&c}iMFS+X4MnknMGIAVLx_|)}XoP3IfA&*MKF_Czd)5_-9a?kmQVy*Nj>kPX5
zi>RLpKKU8}ZT^NB at 1?|w$08fU*kQp_r$ZgA9d=Gid(m81Uz8o?Jp!E)7}eksxs4<g
zFNWPc;zX%n{I{mkRnl`K at D0TazxLi{M~Dt$o{i;W6^!rbG~FKqb9;$*4^b-5k&rjl
zwKT%%^XRaf at 9A?*eImI-4;`%5FBbp7=%2vy+Q7UK4t;0sbM=r+?C;|zH!8f0^<u7Y
zZ*cW_Fb|jRC1 at TmSmawtDw)H9IvPKx?vlOGq=FRpNt+*v^zKW^2q8&S_Ks3(wU=uj
zje=HNPg>n4lpsuMQzAj=VK2r at J~3f;r?y-;tv^4UA7yB8_G4nUUoP5~3R+td8f&Yv
zU*Dsbkee%@9HNUu{{$IlRim8wL|DB*q%O at N9|URs&P*A%1{++a7T1>$Ebtfw|GkJJ
z^HChnvkl>4SV9ZhPI&i2wTaRW?d=sf*{A}UbwHw))u4|E1D1WWpeM4C3450GJu5n<
z=7olNjxLX*44T1+l%{v=M8orXChYs7*y)(Y2Sd+_z7Kr$rxI7S%9Q3N at On%%9KX||
z%f<3*uuCKgDis`>zOxhK&vUbJP?1B>BR<{wNkknXDoR$BwKj>y&GPjpS|b}35iJ&4
zRy#KfY3R--59<I^2RT-?4JN&1TpGHn#IA+7YE;IH6kH@;)rN35QOLw&(+)>wM{H|J
z<C=e+Cbk{=29JEO2xYj06A3-MYlP3 at NtH!Dqez*1LXl5+ZioSmtGQ`vn^H91hgsf3
zH9t~t-zsVwjrpQzH{b066K|F1Do3eC*P7LQ4TrKCf)2Cm+{|8iBAe=INsrPjSz-3(
zmpsQ3Zg{2a4Rzdg9G%atO_sJ^pvD`&d2>CA!=;lLcr+<j;`2TOki%AX;4sH#^sL7a
z)w#%_>hA3PaqXgXIX6jxL<VeRwO!FhT}@~VyF7mCD>BXT62cCoduasf$IaA7N)Xd$
z&wbz2s>}rWqmPhXAL6ce)(O1Z!+aoRrxe$zl&82f_BZ_xm1%~$wlPUg4!JufP0iO@
zF00(BNmsip7N0XV_lv2%7kt1sP!8=%oL168%g1+LOZe at j`;L(1n^{FIOlEDFQ4#cj
zi5}MVSfZr3yDhYp-H>Mnt>L!3oqY^$e=Er6A3KDSo)vROg`2n96uF&AoN>OJ*+=7k
z-+(;c)K*S}N5;!`1A1iAqdZRayG$-k#Hux$JWU#Q^%_IKD?Z|7v(qi at l+_K5Ik)ZQ
zxl)Vo58-_p8X1@~n_67q>jZCv at g6TC;T^*^I}5j#`PS%nQiXK*xn9-IFA*fv4Kb}#
zMLOEFg<M8`6A2CLZa?!ldlsD+mDM}~{qTEizM!K$my~Q&-$z#nt&H;t;j%m-B-b0X
z(~<ACWIM^jlEg at 61`Ttc(Xd%Btg1vh1j=^gf5v~S+q41UbDwiyJK4!hd`THN-(X~~
zN*AdyDgX8Y)DVbKtU(f%U_3u%-r%-&2lRZEVz#leFS*kBZs2A2m1%dS&Z=+f&A?~s
z%DVvBfx<mS^hs=boekXrDwe^NGpfMEPH<jsyba%9QJyclljOyV1bC|+tx-Z5zW3ya
z#KJUE4)@KaI1FnoX3tpfWV#Ql8r4=c%rdDNh+Sk<J1{Qz0`Rf0)qRnc={iErQRFqS
zVp0-RpL-TblH2SEp&kGzU~e*oO=;7W`P)_7Zt2Q{=CEt}j+%wfQS*jeM;fmSU~_rZ
zB!mm7kg24pqAVu!bCaje?@v=)Hqb=fyo4YNfLiG}a-9L(xV2Hju9y9|G at _Q+IR%kk
z0__)+>eHIN+=X62Vxr{Itl~kJv5mvT&@e)e5WCWj>C$a8jL at ie4j0O*%7vldDi%-*
zhBCPcCF0)fnfkBesO8Uf6M~E4ttYt2v6nG57`aX2{QHcv<JCgmFm;7Mw3vZ(NHs+h
zVYi0GFE>YEWQ{<_&9`({swPRR{j_Wrwzp^BWIwm4CCO3BDp&Pd*cla>3_ at r@T)YA6
z!LOfHYYs=~-tWau(ur~7dtSTLEI-`dzS at zH!}CnPIdX2+c5$A+D2lZq@>1nUnu;U$
zM;|XBEr%7{ydROA1P^iET7pYS^SXX}GMoJP=Z4$_R>$IR)!Gw<w!8KH9`Lz+FOGi(
zwFEa!ml8)`gP;-Q5}R>!4CI4_B+Wy&f^z7=_C6smG84C2M=??a;>ooyp8=!dK(Wnl
zlJT%g^3hO&IUZm1o&;;k7SLAL;g+;40g?p^8M0Rw5|#H>L^ew|sW!JFfrmlnqQ(0G
z-9W&=qL)<n1g0}TH${c^nBrvfq?;Pi&X;VWPd9`9R$yV|=z%QubB^`y2+f*+{JqLe
z?k87taPyhWJ!4Y=O(oz?E~q_WC|qFJ--z0OUuM-!tgfEpZMGyu!Ol at ISF}LjHkja8
z0Y2 at GIeNG~vfrO7K3iJ|VOv;{989qhRNY<XHo)0#lZz8$!VWumf-xRsJR+6Y=K$>U
zKP!AQDWk=6hOatPAF6QY)v>5TL at IS`Luw(n>ZQ#g)g!!3O3)j53=X9!&D7^)xA!Mu
zo(EfrHU1qkzq7!PSiqAOYF at L4oJ*HLARHnaBlikCoLPE1*J2I<&%-_*e(MbJ6Z{x7
z{dDakN!x>@?v*$5u*6=gd_80NDKY#dbidT-b+JB*{AtHctd54`c9>*%- at HHy+IF&M
z^X;0E?rFmp9y4fL$xAfG!y#&=_cH~`o&^tJAnOzh&aot6NpyHjGT<k6>_ozk5;ZlA
z5lNC`8lGY6YdB3(CLGO>aViU$6|XdADH<BzNf<m=P9bj9ss51Zl(1FM$kP0?vws1|
z+ at jnx2?8|?=1-V1VS`1j<|blfNr$V~p1W0&C7&&TRJkAl3~J?eA}qX4T?6sJcb!<M
zMh>NXo}zZxggr}u?k(Rp`4SN9=lTlPSvOrwp^z?*l(5q8qWs6hk16(Uw>4e+GCA-L
z;rUX at Q8uSYupy;-G6s4W^sL=BxmT=xd2<mhGGYo`y0IcRgtVAX%}qx6Ig1Saq9s#7
zV*O3T`O42;#URS8k?XBa0(nj^l9C}*`jy~Lg<Eq8Sl2_AY3Sm^xXh#E)gZ{D-+jB`
zaj*G4`M4hBu|I#Lm|8#6FuC1}CT}>8!p3&`$(ALio3owr{HGkRA9GYBG|AT-wqF5(
zBy42FoNp5ggGOd;Zl_)%Tw_=#B+?)hp9!KjCVi+ztt&c;9oyvIXIEQgVZv=)v(<jS
z%hcE{QC2%)n!<}5ym0etaih4FP`r}JSwK0BZmYnc(0{cy+ at B{O(u9*xEH#;@O4w1U
zV=wzP)y}pjIzTB<nc=T(l)scHe5+LtfsIdYe_&8vc1O%F3ic`KF_=ch0YjenNirjR
z+s72~Umejl0>@o?TE)i+aVREWF*mHf=_7d;3r(rgq@~l=b&CP718E{o3k)bcCqm17
z8{NlYY^ydk!zo35xM`}yw2bNm3`GeXl?EHhG~~Kt&??SNZZP`KSj%_UQP at A_(Ib*6
zqEFKV>vm4^opfM09^Y6iT>)n9C1gsxZyHVYHqTM3#X}qIlV**j)eOiNiL%?vvOSo-
ze)2meB-ip>R8$o-S>zlfnDv#mlC*KqCx7S6VL~3Ga9X|od^JT-?u_^T)|o8d>btb8
zV at 3djT#rf_&G3^={62kGj?lL(6>hV?=9Or7TzQO1UeV%YR7KhP>))Le!=C^r3YsxH
zmWr3h!cp*}p)}rjGs#Ru>gvI!_pCI8+a<ZK$ce96;o<!<i(Bt#HU|6UqB9>`uON+~
z20x_=_k-ZlD^+ciRea}Ki;^4Ns}*k)CrKL&U0L;eWp#ch)2Ftx>c@#SvQacdpRV;w
zA|Vo4I5axk?@J3iv+Z19!J9Equ2`z|H{iexE0d*lGHa=FyU<pp(f2YRqn&uje3d5?
z-B>AJBB`5{UtLIj9R)<3j4awQR$qBqj&A&{upR+db+g-0DeaAkEP_iP7iy7C;G`Qq
z-%gr$!CC@$@^_j#a*W&!0maNcVP`s>g9jkXo3wUrUesFI8wA;=*`U|nwM7*j3vM}b
z1!PwX$q3>)p@%M0CgyqgRl66`lR{jaJV6yH{kFd?Aqe_T2mzk0zxN1QoA_Rb|HjEu
zUN^H(@wFzAB{SQ-!nQJp-gh9kQ~)Kyh7S1n5bhYE at Ri+S^>i)HJ`FdiRFPVFTkvbM
z%Ml?IC>1(&(P<AosBV at AW3wb6EKKMHCc(Hlyuj4$R&urk{A)Y!JYs$db!y`fpZJsY
zhJr#Gt=h5#7ba`(Mq;J+S6#TE^B8@%u^ib{or^V>pRI5UYa+o4_D at VLzpH0V)}jj+
zJ9X75V7|>jk2Hgf`a}ZHmLXO3o-vT?IBZx{^)QbKmdke*;p{$S1Df4*so?I^yNwoi
zqZAFnP*@y<C+N_~rRN24cH7Cp$%4px2m<u#wILFQFL2GoO%qwjEM5hgC>yI8Ia?fl
z*|&cqn7ejMsk9xfXsqh#crje!1TC8AyGXmqYhE(=It@^v^OoZl4UPn9PoAJThzkoS
zr8uv62^D%aJUU-ZyH8<yoV}-;*?ZkF8GBTBdz5e=;{s*EO~hw~GhirHiAr2m+o;sh
z-xfk at d^qPAeWYeyHWad=qnc&>T_|FQ1=g()PV{XWp1vqSbE{%zVp+sC4Bo8=O#WFx
z5&>RzVMfNN97~kz*_JxpHw&$w1>q*0WvlIrHefUPe37t+9ARHQRo;g+g0Q`QddDjz
zm(EC<9HSvs^qz8m{H^EDl;65~9BSxBWK{$dQ)s<ZjSQ~TudDun&!BHO_!$qF<X232
zVA%@a3fL#gFW?b%$#9g}rFq7W>W0QMlmv%2V?CGcf}|km<+s-&r~BAP#KTCm37rNH
z*`9|UP(HqsB5+%@i_Ou3{i5Tv_C6?=inZX*t|LOUz7>q(#5E{#93l;>B~Nu5^LOo$
zVLuUeK8_?~NzA>;swny;2jKfSDU3Ol;oGccJzqaancH!?DSPe8GTunzhm606eYb|=
z*g!KiZZcrwyr`aEbrziZxIpfKRQH at Uak>K at abFH$=~DvNFA+_{lrUEyG1a=;g)-ko
zua0OK!Mc*V;CdRv<ZEt|Zi+V<2Zn{;&=a{6NuTUy-;pJZpN=3*YCtS!*S5?0x?U*i
z#Ix5KEHNniey`h3*}tV4hq*y%d2GUUzFwWQ>#Hw?MYxa^T#(0RjbSEpTRiW2fAy2_
zai=}Uy6(o<x%;r at b~v at GFx3cg**ZlPR~j}lFWsV#nJ^ggiz|=S^4N;!yM^5C^ieM`
zW6X7&9 at Z?|_6cPw^p$T5jav2CH>q^<D~kZS*sblxtyz?ZeZJ%rM7RUbFZ3u4u4jqX
z7X_0#J5hs)SK`NH*uq{KR#tun5yQ}8&6?WfyLttD<BdG|=2w*^Ee&J~i)OvE(UQV?
zdcz4eBvEo~+ut~lFp#(3;D-KALtZ77Rs*(~*!z^r#Lprt8d6<}6?_pWtXQ0c{G1lW
zHB9Rh&glw8_K$Rd?>0YgT5i5J96ov|BH at mH6))9*T&)C6i;hJL at Ijg`CHQ2ll?WfN
zwOU-pW5F>7lZ7c}CTB|Xle_>CvwS7OvG1N3KcVqcGB3bhL at LfkxLwkW$UTBgA}04M
zb_k~~*NHgS&mZ0k&vCR?E^8XmH10ZsH~iSlPM%yGu06!M9KWiTO+nTWBbQFcwjbi|
z4<Y1Rx(Cd=eHEb*nR4L-Ibzi%ZZ|UNZnKl(u>$o2AVt|}_Y3;Bv@;hkomzcya)!EZ
z&gd_6u*_?u+>2DzMb at X-BJjjug0ZvE`APjIBq0S^wLp5Q1l_zE^QiaI5N>*~TPeD7
zt~|w5CIp;f>~0aA8aa|VJSV_9yy2Tsm)FOy_j#;@ES<q+plZ(l`m_7db_&<@{lQ-0
z{p&ow-Wyh<zG!05>}j>en`h-MBf`P^(!xr0N`Y=DcdIDJ7Ev87zark0<+iACdn}FW
zp&~r{>*yWmAPd*Md=&Ijz;;ivUNh+TZhQXQdKW>RQFfZMFn^u*T0|;pVR}Y+E5 at -A
zC~$m@?sk$(f5H_qCoq9r$o+~{eQh*sW~j_bDW*z3=6RJtE@`Nl)3-pBm$vdLK0wsE
zo*`MBGpf4}cY~;Zw0tPE-+b=r{Ukl;Bsc?OFzOwo=xWfd^qSq3 at W3Eg=g_9ViUe16
zH_v%6EJ3tY_2IH`>DB<q(c+<3Byze0na{V#8w+sS at Mi1r`VLMfe~w&zZ`05Mr6>(j
z_SD#9ZLDf-GFzt`HT9e~Q^`=q$2b-5nQYYYK)TqxJL6l$B+jrf$5G{~$A2IB>J4`X
zy#v62ZS%0TE%Y<eHOzA>8R4I(*Xd`|zMghFjw8A~SVzWlO9NRXn5FZY48`l%$bD6F
z^=P!@kY`o5MvUoIXxJdiT6D7wR~3UtLYN*`b3e4utr_kz$9R~6_R-_&&hI#HI at df%
z^o%o*d<?bm$7dY^Z(tfhU%B7(>z=d?y~TJoo!FC^RrZoeJ};U#_*7 at q-69@JDI1u1
zz?45iL at TE2a`Jqbe;Vx>0 at qsJMgs8m60%n&<I?R-WPSg4+6yarwXg$vOQIr%*X(5`
zLe&-D6sZl~(WeZ19GyK>{+x)Cy)ju=!H7SX!a{U!CdKpPz=&LDHCL^~BV(_E7RAD|
z4D|8ySrKVl9NJTyNOM?2X1C?_2T^&J57cvBQt9Uo)BXL>aD*LmngeT-n91$J9|#iQ
zxkIey<%d=h2vS(WX7xQ=r4jE0bqQbrW~8cfviTv{R?F;%Dsj2NhI-jpo3Zudp;dFX
z#%GUv!iQ1%AHOZn|KU_!5sDT~%D}@NHwE#zyD7TRNZivV&tWiSs6T%U|6XJL0VCVS
z@<XOWw8UZSsAARTqHR0U^zA%8c)|9_(q6knnODAH$nI)7G)G4hVtHAIzp+&;2Vg=e
zZ&{B1J7c()_BVcF(pmB+2a0|5Xbm$zq8qu)2=Kn2m3-^UC2G&(dAK&1%naqS)+ouc
ze;I}ValeJUa$ZOM%Lx3R_EN&q1b$|#+&CMGJTO2t4djn6IAh+SfD!eJFFTnGnan(O
z`((L1x+%!|>Bo<M|Nl2GY-b4b;sd=}W)b}Ag=bj~fFPh<>-7g4{tF7S?0$2Qy0|zQ
zSqvpyx4`!w$p5U%^=<_7DI)mTxHtJKhptbY&<zH-2`&u#V$yI_cE(pgra^y|Fpb)u
z$hy865lzrN>gI`pKAOIq;W+V!kdGtRT>s$I<r4WB;ryMJnsDG=cwxhn@~}JPM{cdW
z>oxUrO|#21=nB2q<V at A78`Ji<xmujaR~#f+|3ob`r#Bqk{9X7QpZ;?mW=<b!iCS}`
z+a>}=s13kj4B3z)|K<RG`*PpOdH?k_y{)YdW-(vv>PU;T&RzmHZMXv}w?5l)A6xXe
z1uc4`aIZ-ISgLceZD)c*Avll$PS}ZzMnNd at t$)D!%+mZE>`n(eoQq(amFQ(=S(zeK
zu`?K|-A2Kc9`^jJ83PpOAr3<4@!VmXLe*kBi&WixR?C@{rK%)6P-5g9gH0Olr_%dk
z<|3VT|1cYXY_e}SglKkg+5C?9{;dn};)MOV^2x2r`w0QwVVXv$#fztzc*WT<|G;d2
z&<O!&O+9?@SrGNYR$+-9HWSDdV<1sTkNT7#%oDj~x&ga#u6){d^$N;y$NMA56NeC2
zm-_H(b;;})-E_kLXUf!;o0V*XuBpjR;@q<3eAM0Eg at D!c@;Efo2ru$3DvJ3?Xf6(m
z0Xf;-g`T#XlmM?`z`#57 at BaN=jbz9D*GjdDfG&NfZ7MCU*1#0BT$4*Yt!f?{Go0_A
ziG5*p#FSPTX&Ue6|D~8Q1l#JLl|p!{V4><1+%LSGFm?=5DDVAIKv!0CcJ8pDkWZT#
z|F~tKRvp=g5j&Vm`2b+%u%hp<IpodX#~IAK_+M%#$co<1*ctt?a(vNd_HmbOj*B$6
zA)1ce$%$;a+hY_5)`5uGn?CS$MCMJ~y^9ely_u8E%;Q_er`lPYAIz!`d(RSgB?%sq
zIiyIfUqKJH7p&L2uok at u>U2_z=bf at Jn+_wu_85PB7iy2dr)>+|#Y>Uk1<f$-wI%RA
zEtjIWPz?7(q#yKZh%{p|wf&f>kxP<wkJffDS>ls90!uqfA)h~(Y&ps*zjEUMVpDS_
zh^r7~Ib|+7QDaW%KuIR6%&1JJT at 9P-raFH+%iFSKV7+SM$hXiiUrWkC?&`<8r;XPR
zo<Lrt?`5o#)fcv0M9=<skL(U_g>ofv&ta}u!x6cmY-W)fihLDe5M~b^NZ5p``HnEY
zg%N!t8p8VDMG1aSz>$zA9PDxbD6st-NRLhdY98$Rha>+n34VPH)PckMf4Fs^6yG^e
zS4M)*$KmhU{of)BSmdq$+2sCfsI!4OfbvkHtY`oA-rq0Z*?fTeV`2Vk48^Z%gJUQ}
z`2W%bpwu15 at 7em_pYrblb!MVH;CKJ63GjFW|J~5Phgw4RiC5;ikl4R90Vt#RZ~Y?Y
z22{bxCKTlSmnJ-cfwTXYe(@RuYLZdhqmKPs6HwXX{;gmBcWC~1X#RKA{C~J=?)c>7
Wyv;~hkMo}ZKjI=X!X<*AzWyH_xa}4I

literal 0
HcmV?d00001

diff --git a/lib/main.dart b/lib/main.dart
index 8cd6c36..57ad39c 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -1,6 +1,8 @@
 import 'package:flutter/foundation.dart';
 import 'package:flutter/material.dart';
 import 'package:provider/provider.dart';
+import 'package:pve_flutter_frontend/widgets/pve_first_welcome_screen.dart';
+import 'package:shared_preferences/shared_preferences.dart';
 import 'package:proxmox_login_manager/proxmox_login_manager.dart';
 import 'package:pve_flutter_frontend/bloc/pve_authentication_bloc.dart';
 import 'package:pve_flutter_frontend/bloc/pve_cluster_status_bloc.dart';
@@ -47,6 +49,7 @@ void main() async {
     FlutterError.dumpErrorToConsole(details);
     if (kReleaseMode) ProxmoxGlobalErrorBloc().addError(details.exception);
   };
+  SharedPreferences sharedPreferences = await SharedPreferences.getInstance();
   Provider.debugCheckInvalidValueType = null;
 
   runApp(
@@ -60,6 +63,7 @@ void main() async {
       ],
       child: MyApp(
         authbloc: authBloc,
+        sharedPreferences: sharedPreferences,
       ),
     ),
   );
@@ -67,9 +71,12 @@ void main() async {
 
 class MyApp extends StatelessWidget {
   final PveAuthenticationBloc authbloc;
+  final SharedPreferences sharedPreferences;
   final GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();
 
-  MyApp({Key key, this.authbloc}) : super(key: key);
+  MyApp({Key key, this.authbloc, this.sharedPreferences})
+      : assert(sharedPreferences != null),
+        super(key: key);
 
   @override
   Widget build(BuildContext context) {
@@ -142,6 +149,11 @@ class MyApp extends StatelessWidget {
               builder: (context) => PveSplashScreen(),
             );
           }
+          if (sharedPreferences.getBool('showWelcomeScreen') ?? true) {
+            return MaterialPageRoute(
+              builder: (context) => PveWelcome(),
+            );
+          }
 
           if (authbloc.state.value is Unauthenticated ||
               context.name == '/login') {
diff --git a/lib/utils/dot_indicator.dart b/lib/utils/dot_indicator.dart
new file mode 100644
index 0000000..e4d3027
--- /dev/null
+++ b/lib/utils/dot_indicator.dart
@@ -0,0 +1,108 @@
+import 'package:flutter/cupertino.dart';
+import 'package:flutter/material.dart';
+import 'dart:math';
+
+class Dot extends StatelessWidget {
+  final double dotSpacing;
+  final double dotSize;
+  final double zoom;
+  final double shadowBlurRadius;
+  final double shadowSpreadRadius;
+  final Color color;
+  final int index;
+  final void Function(int index) onTap;
+
+  const Dot({
+    Key key,
+    this.dotSpacing,
+    this.dotSize,
+    this.zoom,
+    this.shadowBlurRadius,
+    this.shadowSpreadRadius,
+    this.color,
+    this.index,
+    this.onTap,
+  }) : super(key: key);
+
+  @override
+  Widget build(BuildContext context) {
+    return Container(
+      width: dotSpacing,
+      child: Center(
+        child: Container(
+          width: dotSize * zoom,
+          height: dotSize * zoom,
+          child: GestureDetector(
+            onTap: () => onTap(index),
+          ),
+          decoration: BoxDecoration(
+            color: color,
+            shape: BoxShape.circle,
+            boxShadow: [
+              BoxShadow(
+                  color: Colors.white.withOpacity(0.72),
+                  blurRadius: shadowBlurRadius,
+                  spreadRadius: shadowSpreadRadius,
+                  offset: Offset(0.0, 0.0))
+            ],
+          ),
+        ),
+      ),
+    );
+  }
+}
+
+class DotIndicator extends AnimatedWidget {
+  DotIndicator({
+    this.controller,
+    this.itemCount,
+    this.onPageSelected,
+    this.color: Colors.white,
+    this.page,
+    this.initialPage,
+  }) : super(listenable: controller);
+
+  final PageController controller;
+  final double page;
+  final double initialPage;
+
+  final int itemCount;
+
+  final ValueChanged<int> onPageSelected;
+  final Color color;
+
+  static const double _dotSize = 8.0;
+  static const double _maxZoom = 1.2;
+  static const double _dotSpacing = 25.0;
+
+  Widget _buildDot(int index) {
+    double selectedness = Curves.easeOut.transform(
+      max(
+        0.0,
+        1.0 - ((controller.page ?? controller.initialPage) - index).abs(),
+      ),
+    );
+    double zoom = 1.0 + (_maxZoom - 1.0) * selectedness;
+    double shadowBlurRadius = 4.0 * selectedness;
+    double shadowSpreadRadius = 1.0 * selectedness;
+    return new Dot(
+      color: color,
+      shadowBlurRadius: shadowBlurRadius,
+      shadowSpreadRadius: shadowSpreadRadius,
+      dotSize: _dotSize,
+      dotSpacing: _dotSpacing,
+      zoom: zoom,
+      index: index,
+      onTap: onPageSelected,
+    );
+  }
+
+  Widget build(BuildContext contect) {
+    return Row(
+        mainAxisAlignment: MainAxisAlignment.center,
+        children: List<Widget>.generate(
+          itemCount,
+          _buildDot,
+        ));
+  }
+}
diff --git a/lib/widgets/firstWelcomeScreen/pve_welcome_common.dart b/lib/widgets/firstWelcomeScreen/pve_welcome_common.dart
new file mode 100644
index 0000000..e0e891d
--- /dev/null
+++ b/lib/widgets/firstWelcomeScreen/pve_welcome_common.dart
@@ -0,0 +1,68 @@
+import 'package:flutter/material.dart';
+
+class PveQuestion extends StatelessWidget {
+  final String text;
+
+  const PveQuestion({
+    Key key,
+    this.text,
+  }) : super(key: key);
+
+  @override
+  Widget build(BuildContext context) {
+    return Padding(
+      padding: EdgeInsets.fromLTRB(10.0, 10.0, 5.0, 0.0),
+      child: Text(
+        text,
+        style: TextStyle(
+          fontWeight: FontWeight.bold,
+        ),
+      ),
+    );
+  }
+}
+
+class PveAnswer extends StatelessWidget {
+  final String text;
+  final List<TextSpan> spans;
+
+  const PveAnswer({
+    Key key,
+    this.text,
+    this.spans,
+  }) : super(key: key);
+
+  @override
+  Widget build(BuildContext context) {
+    return Padding(
+      padding: EdgeInsets.fromLTRB(20.0, 5.0, 5.0, 5.0),
+      child: RichText(
+        text: TextSpan(
+          text: text,
+          style: DefaultTextStyle.of(context).style,
+          children: spans,
+        ),
+      ),
+    );
+  }
+}
+
+class PveWelcomePageContent extends StatelessWidget {
+  final Widget child;
+  const PveWelcomePageContent({
+    Key key,
+    this.child,
+  }) : super(key: key);
+
+  @override
+  Widget build(BuildContext context) {
+    return Center(
+      child: SingleChildScrollView(
+          child: Padding(
+        padding: EdgeInsets.fromLTRB(15.0, 15.0, 15.0, 0.0),
+        child: ConstrainedBox(
+            constraints: BoxConstraints(maxWidth: 500), child: child),
+      )),
+    );
+  }
+}
diff --git a/lib/widgets/firstWelcomeScreen/pve_welcome_faq.dart b/lib/widgets/firstWelcomeScreen/pve_welcome_faq.dart
new file mode 100644
index 0000000..6612819
--- /dev/null
+++ b/lib/widgets/firstWelcomeScreen/pve_welcome_faq.dart
@@ -0,0 +1,59 @@
+import 'package:flutter/material.dart';
+import 'package:url_launcher/url_launcher.dart';
+import 'package:pve_flutter_frontend/widgets/firstWelcomeScreen/pve_welcome_common.dart';
+import 'package:pve_flutter_frontend/utils/promox_colors.dart';
+
+// FAQ
+class PveWelcomePageFAQ extends StatelessWidget {
+  const PveWelcomePageFAQ({
+    Key key,
+  }) : super(key: key);
+
+  @override
+  Widget build(BuildContext context) {
+    return PveWelcomePageContent(
+      child: Column(
+        mainAxisAlignment: MainAxisAlignment.center,
+        crossAxisAlignment: CrossAxisAlignment.start,
+        children: [
+          PveQuestion(
+              text:
+                  "How do I connect if I am not using the default port 8006?"),
+          PveAnswer(
+              text:
+                  "Add the port at the end, separated by a colon. For the default https port add 443."),
+          PveAnswer(
+            text: "For example: 192.168.1.10",
+            spans: [
+              TextSpan(
+                  text: ":443",
+                  style: TextStyle(
+                      fontWeight: FontWeight.bold, fontStyle: FontStyle.italic))
+            ],
+          ),
+          PveQuestion(
+            text: "What about remote consoles?",
+          ),
+          PveAnswer(
+              text:
+                  "Spice is currently supported. We plan to integrate VNC in the future."),
+          PveQuestion(text: "Which Spice client works?"),
+          PveAnswer(
+              text:
+                  'Currently only the following 3rd party Spice client works:'),
+          Center(
+            child: OutlineButton(
+              onPressed: () => {
+                launch(
+                    'https://play.google.com/store/apps/details?id=com.undatech.opaque')
+              },
+              child: Text('Opague'),
+              borderSide: BorderSide(color: ProxmoxColors.supportGrey),
+              textColor: Colors.white,
+            ),
+          ),
+        ],
+      ),
+    );
+  }
+}
diff --git a/lib/widgets/firstWelcomeScreen/pve_welcome_last.dart b/lib/widgets/firstWelcomeScreen/pve_welcome_last.dart
new file mode 100644
index 0000000..52fe2b3
--- /dev/null
+++ b/lib/widgets/firstWelcomeScreen/pve_welcome_last.dart
@@ -0,0 +1,94 @@
+import 'package:flutter/material.dart';
+import 'package:url_launcher/url_launcher.dart';
+import 'package:pve_flutter_frontend/utils/promox_colors.dart';
+
+// goodbye
+class PveWelcomePageLast extends StatelessWidget {
+  const PveWelcomePageLast({Key key, this.onDone}) : super(key: key);
+
+  final VoidCallback onDone;
+
+  @override
+  Widget build(BuildContext context) {
+    return Container(child: LayoutBuilder(
+        builder: (BuildContext context, BoxConstraints viewportConstraints) {
+      return SingleChildScrollView(
+        child: ConstrainedBox(
+          constraints: BoxConstraints(minHeight: viewportConstraints.maxHeight),
+          child: IntrinsicHeight(
+            child: Padding(
+              padding: const EdgeInsets.fromLTRB(15.0, 15.0, 15.0, 0.0),
+              child: Column(
+                mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                children: [
+                  Spacer(flex: 3),
+                  Column(
+                    mainAxisAlignment: MainAxisAlignment.center,
+                    children: [
+                      Text("Enjoy the app"),
+                      Padding(
+                        padding: const EdgeInsets.all(8.0),
+                        child: Icon(
+                          Icons.emoji_people_rounded,
+                          color: Colors.white,
+                          size: 70,
+                        ),
+                      ),
+                      Padding(
+                        padding: const EdgeInsets.all(8.0),
+                        child: RaisedButton(
+                          onPressed: () => {onDone()},
+                          color: ProxmoxColors.orange,
+                          textColor: Colors.white,
+                          child: Text("Start"),
+                        ),
+                      ),
+                    ],
+                  ),
+                  Spacer(flex: 1),
+                  ConstrainedBox(
+                    constraints: BoxConstraints(maxWidth: 500),
+                    child: Column(
+                      children: [
+                        Text(
+                          'If you have suggestions or experience any problems, please contact us via',
+                          textAlign: TextAlign.center,
+                        ),
+                        Row(
+                          mainAxisAlignment: MainAxisAlignment.spaceEvenly,
+                          children: [
+                            OutlineButton(
+                              onPressed: () =>
+                                  {launch('https://forum.proxmox.com')},
+                              child: Text('Forum'),
+                              borderSide:
+                                  BorderSide(color: ProxmoxColors.supportGrey),
+                              textColor: Colors.white,
+                            ),
+                            OutlineButton(
+                              onPressed: () => {
+                                launch(
+                                    'https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-user')
+                              },
+                              child: Text('User Mailing List'),
+                              borderSide:
+                                  BorderSide(color: ProxmoxColors.supportGrey),
+                              textColor: Colors.white,
+                            ),
+                          ],
+                        ),
+                      ],
+                    ),
+                  ),
+                  Spacer(
+                    flex: 2,
+                  )
+                ],
+              ),
+            ),
+          ),
+        ),
+      );
+    }));
+  }
+}
diff --git a/lib/widgets/firstWelcomeScreen/pve_welcome_logo.dart b/lib/widgets/firstWelcomeScreen/pve_welcome_logo.dart
new file mode 100644
index 0000000..8120d8b
--- /dev/null
+++ b/lib/widgets/firstWelcomeScreen/pve_welcome_logo.dart
@@ -0,0 +1,49 @@
+import 'package:flutter/material.dart';
+
+// Big Logo
+class PveWelcomePageLogo extends StatelessWidget {
+  const PveWelcomePageLogo({
+    Key key,
+  }) : super(key: key);
+
+  @override
+  Widget build(BuildContext context) {
+    return Container(child: LayoutBuilder(
+        builder: (BuildContext context, BoxConstraints viewportConstraints) {
+      return SingleChildScrollView(
+          child: ConstrainedBox(
+              constraints:
+                  BoxConstraints(minHeight: viewportConstraints.maxHeight),
+              child: IntrinsicHeight(
+                  child: Padding(
+                padding: const EdgeInsets.all(15.0),
+                child: Column(
+                    mainAxisAlignment: MainAxisAlignment.center,
+                    crossAxisAlignment: CrossAxisAlignment.center,
+                    children: [
+                      ConstrainedBox(
+                        constraints:
+                            BoxConstraints(maxWidth: 160, maxHeight: 180),
+                        child: Padding(
+                          padding:
+                              const EdgeInsets.fromLTRB(0.0, 0.0, 0.0, 30.0),
+                          child: Image.asset(
+                            'assets/images/Proxmox-logo-symbol-white-orange.png',
+                            alignment: Alignment.center,
+                          ),
+                        ),
+                      ),
+                      FittedBox(
+                        child: Padding(
+                          padding: const EdgeInsets.all(8.0),
+                          child: Text(
+                            'Proxmox Virtual Environment',
+                            style: TextStyle(fontSize: 26),
+                          ),
+                        ),
+                      ),
+                    ]),
+              ))));
+    }));
+  }
+}
diff --git a/lib/widgets/firstWelcomeScreen/pve_welcome_ssl_hint.dart b/lib/widgets/firstWelcomeScreen/pve_welcome_ssl_hint.dart
new file mode 100644
index 0000000..380c772
--- /dev/null
+++ b/lib/widgets/firstWelcomeScreen/pve_welcome_ssl_hint.dart
@@ -0,0 +1,50 @@
+import 'package:flutter/material.dart';
+import 'package:pve_flutter_frontend/widgets/firstWelcomeScreen/pve_welcome_common.dart';
+
+// disable ssl validation hint
+class PveWelcomePageSSLValidation extends StatelessWidget {
+  const PveWelcomePageSSLValidation({
+    Key key,
+  }) : super(key: key);
+
+  @override
+  Widget build(BuildContext context) {
+    return PveWelcomePageContent(
+      child: Column(
+        mainAxisAlignment: MainAxisAlignment.center,
+        crossAxisAlignment: CrossAxisAlignment.start,
+        children: [
+          PveQuestion(
+            text: "Are you using a self signed certificate?",
+          ),
+          PveAnswer(
+              text: "Disable SSL Validation in the Login Manager settings."),
+          Column(
+            children: [
+              Padding(
+                padding: const EdgeInsets.all(8.0),
+                child: Container(
+                  decoration: BoxDecoration(
+                      border: Border.all(color: Colors.white, width: 0.5)),
+                  child: Image.asset(
+                    'assets/images/ssl_validate/login_manager_screen.png',
+                  ),
+                ),
+              ),
+              Padding(
+                padding: const EdgeInsets.all(8.0),
+                child: Container(
+                  decoration: BoxDecoration(
+                      border: Border.all(color: Colors.white, width: 0.5)),
+                  child: Image.asset(
+                    'assets/images/ssl_validate/login_manager_screen_settings.png',
+                  ),
+                ),
+              ),
+            ],
+          ),
+        ],
+      ),
+    );
+  }
+}
diff --git a/lib/widgets/pve_first_welcome_screen.dart b/lib/widgets/pve_first_welcome_screen.dart
new file mode 100644
index 0000000..27c8853
--- /dev/null
+++ b/lib/widgets/pve_first_welcome_screen.dart
@@ -0,0 +1,173 @@
+import 'dart:ui';
+
+import 'package:flutter/material.dart';
+import 'package:flutter/rendering.dart';
+import 'package:shared_preferences/shared_preferences.dart';
+import 'package:pve_flutter_frontend/utils/dot_indicator.dart';
+import 'package:pve_flutter_frontend/utils/promox_colors.dart';
+import 'package:pve_flutter_frontend/widgets/firstWelcomeScreen/pve_welcome_logo.dart';
+import 'package:pve_flutter_frontend/widgets/firstWelcomeScreen/pve_welcome_faq.dart';
+import 'package:pve_flutter_frontend/widgets/firstWelcomeScreen/pve_welcome_ssl_hint.dart';
+import 'package:pve_flutter_frontend/widgets/firstWelcomeScreen/pve_welcome_last.dart';
+
+class PveWelcome extends StatefulWidget {
+  @override
+  _PveWelcomeState createState() => _PveWelcomeState();
+}
+
+class _PveWelcomeState extends State<PveWelcome> with TickerProviderStateMixin {
+  PageController _controller;
+  SharedPreferences _sharedPreferences;
+
+  final List<Widget> _pages = [
+    PveWelcomePageLogo(),
+    PveWelcomePageSSLValidation(),
+    PveWelcomePageFAQ(),
+  ];
+
+  static const Duration _pageChangeDuration = Duration(milliseconds: 150);
+  static const Curve _pageChangeCurve = Curves.easeInOut;
+
+  bool _isLast = false;
+  bool _isFirst = true;
+
+  final _buttonTextColor = Colors.white;
+  final _buttonDisabledTextColor = Colors.white30;
+
+  Future<void> _getPrefs() async {
+    _sharedPreferences = await SharedPreferences.getInstance();
+  }
+
+  Future<void> _prefs;
+
+  @override
+  void initState() {
+    super.initState();
+
+    _prefs = _getPrefs();
+    _controller = PageController();
+
+    // add last page here so we can define the callback for the start button
+    _pages.add(PveWelcomePageLast(onDone: () {
+      skipDone();
+    }));
+
+    _controller.addListener(() {
+      setState(() {
+        _isLast = _controller.page.floor() == _pages.length - 1;
+        _isFirst = _controller.page.floor() == 0;
+      });
+    });
+  }
+
+  Future<void> skipDone() async {
+    await _sharedPreferences.setBool('showWelcomeScreen', false);
+    Navigator.pushReplacementNamed(context, '/');
+  }
+
+  Widget nextDoneButton() {
+    if (_isLast) {
+      return FlatButton(
+        textColor: _buttonTextColor,
+        disabledTextColor: _buttonDisabledTextColor,
+        child: Text(
+          "Done",
+        ),
+        onPressed: () {
+          skipDone();
+        },
+      );
+    } else {
+      return FlatButton(
+        child: Text("Next"),
+        textColor: _buttonTextColor,
+        disabledTextColor: _buttonDisabledTextColor,
+        onPressed: () {
+          _controller.nextPage(
+              duration: _pageChangeDuration, curve: _pageChangeCurve);
+        },
+      );
+    }
+  }
+
+  Widget skipPrevButton() {
+    if (_isFirst) {
+      return FlatButton(
+        textColor: _buttonTextColor,
+        disabledTextColor: _buttonDisabledTextColor,
+        onPressed: () {
+          skipDone();
+        },
+        child: Text(
+          'Skip',
+        ),
+      );
+    } else {
+      return FlatButton(
+        textColor: _buttonTextColor,
+        disabledTextColor: _buttonDisabledTextColor,
+        child: Text(
+          "Prev",
+        ),
+        onPressed: () {
+          _controller.previousPage(
+              duration: _pageChangeDuration, curve: _pageChangeCurve);
+        },
+      );
+    }
+  }
+
+  @override
+  Widget build(BuildContext context) {
+    return Scaffold(
+      backgroundColor: ProxmoxColors.supportBlue,
+      body: DefaultTextStyle(
+        style: TextStyle(color: Colors.white, fontSize: 18),
+        child: FutureBuilder<void>(
+          future: _prefs,
+          builder: (BuildContext context, AsyncSnapshot snapshot) {
+            if (snapshot.connectionState == ConnectionState.done) {
+              return SafeArea(
+                child: Column(
+                  children: [
+                    Expanded(
+                      child: PageView.builder(
+                        controller: _controller,
+                        itemCount: _pages.length,
+                        itemBuilder: (context, index) {
+                          return _pages[index];
+                        },
+                      ),
+                    ),
+                    Row(
+                      mainAxisAlignment: MainAxisAlignment.spaceBetween,
+                      children: [
+                        skipPrevButton(),
+                        DotIndicator(
+                          controller: _controller,
+                          itemCount: _pages.length,
+                          onPageSelected: (int page) {
+                            _controller.animateToPage(page,
+                                duration: _pageChangeDuration,
+                                curve: _pageChangeCurve);
+                          },
+                        ),
+                        nextDoneButton(),
+                      ],
+                    ),
+                  ],
+                ),
+              );
+            } else {
+              return Center(
+                child: CircularProgressIndicator(
+                  valueColor: AlwaysStoppedAnimation<Color>(Colors.white70),
+                ),
+              );
+            }
+          },
+        ),
+      ),
+    );
+  }
+}
diff --git a/pubspec.yaml b/pubspec.yaml
index cb5bcdf..a605eeb 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -61,6 +61,7 @@ flutter:
     - assets/images/Proxmox_logo_white_orange_800.png
     - assets/images/Proxmox-logo-symbol-white-orange.png
     - assets/images/proxmox_logo_icon_white.png
+    - assets/images/ssl_validate/
 
   # An image asset can refer to one or more resolution-specific "variants", see
   # https://flutter.dev/assets-and-images/#resolution-aware.
-- 
2.20.1






More information about the pve-devel mailing list