8NUC6fTWaT06?LER8rE?vPHR~Tx?NjPBkSZ
zPP8-18tH%l0MCI`T@S;UO(xmVO$4ohV*kqH1cyL?i@T8QEuB#&T{Hj>rlXgC9THAq
zaFp>#imLvrpdJd<)bNk#r>kugZiQdHt#2%`#4(gp>F2$?xVY1|^L!>{X1C3&ofdP1
zo-b-T(+-f-36X~NbKKKZef6#uL%^syM#M=s-CS=&{2BmO2)#W0T}$P5K_w`F06_N$
z^3XSqf4fnm#dihZi~`2E=w~QFkvhOzLA|#}fw#wiQr&VZ3Lq8$9K3uLxqy6XVBw3J
zEHTiZ7c;~R^k=f=kpXu>K;mf?9s>DifVqC4&N%{XJ&;}~&m~BNEe2tXo_{TAOPDO*P3vtOZaGYTnCHC
z=asRKCqLFZJXVA=pP{oRpX5qONakixogq|jqXGby?ar6`5^|9<)05-V)-w*vUtVYK
z+pnOwWKXV+?mxdnKm^cTZeJcSo0{q+L^py;-Co$|T>}OT0Nc@R6X8Mf^s5vd-rKjm
zBzEObq-AKmm1bw7prl;nwaBQ2Ox%|JCOnQByY0V$^X?CNuK?GR!tp
zv3P~!dRSOLQDrG1OZt(dak`3^LK4(7WAw&>^Jr!g^J8iC$DW6h6DhnUV}PH8g&(nq
z=;vx9V@`}9;)1J+L}Ri!XTy(bbG?4+oK29YXcuLo%Kcfu`KaVwWBIRrJ{#r>h992_`<%zLTZmgbe0MW=`j&Pj0S&->nEsOs5cy
z^_>rJ<2zx><~I#l_!^lkrwm06?ulBm8;ZL#vSQQV%VazRw=oP0WTwG%^$tOikt&Aj
zhDy1-3)~g-HDp)FZv+d~pW=$i)vVz4rr&<$X#sm2X?UTKZ|UTTlWDxBr)U_=VpMr(
z-bGJdrZ~wP300$1vsWEd70A}jmhGZLrl|AHM>@V6nItR26mlj+RYlT9YDVw8YnZG$
z3VR*?QJp-KM<+X${-P*CZi?vP1E^wRdcJmRURpOp^j-Ajdc5)}
z^$PT93rr3C9$nBc*P6&9?`A6K$z#`lmM2!+rsJV=Ppe(qEUV6JFX*c!by;Z0h4fI>
zEIrGrH^=XuWO@TdtQsozIvWtqpR>QOVR5Z&dqLfuc!$*;?4z!$1RnR=6r^%0Qkczzs3)_mbs>t)qEKW6F=Q_d
zw?IM%vtMPuo~%358f%|qUDH|d-nFIW?YW`C{=#<)5t2PA_G$3C56=g8?}j{7PI-Ot
zw%F~)_^OS#Ud>@H9&BrT9EN^Zb6csCq3+Syy!=-GRvT%~-SUENyT9njC`
zv&Tgm@?PaN%wDl!waIWvT@z(~bSbi#KEXYKS=TY=R*usH@8-BEmZh4m%J=J8$;UDxZbo9B89CyjP&Y9m(f<=uHIHE8$5+1;kl&Oyh)av`}IQ=MNO=oz-9
zyqZAo%D_Xucysbq|0|iB6D|ZZ4oSi(lSz8$b&M2#YSB|`4g
zCzQ!e-QZNz0w2?y%5luW837
z)|jxS%}MTUm$gAghYr^do!8Lk2%Q^U
z4<9P=2VD_~%Zq*2>{R^a>QhTbc$}5~vRy*YHG_b&%yDLg=)&CMtfI?;GslY~t{L8T>k+LLtxc_j
zqHxj0Yb{R-2R~w;2ADJ(>=hMM)qUU_=zTHl;j>0_gPl=oWI1->c_qK+75iFc
zzjddsrJ&(^EEcRaFQ)y6t5rNSU#H#kdFVsBp}ahA=ZbO|DtYmujNDO2?CuFw7}%oJ@vHA>h@$%%tVe=PFm_^IhpRnA+JsK-9&p6
zZIfCXrS>#AX4fV4DznXZYa=uFOje$wzi@3@4Dwc8Dv~LdQSnFbjjNViL(L;Ln-{N0
z7rTDZn3w8Yejo7F4%_3>x78-=ijnA4%TDLdo4zYE?BUfbdAdLRq{Fh-=F
zp{t>WI?NK~CMe2EFc7h
zK_p>9qMW}yxMV4C@1&irtYJFmFZ|XV&XVD>b#+Co5G#r3_RKOVo0%MtxY
zLryNgvBOaWd&1FRAwdZEUxG9=4i0m4{KrTaS7moxPktNOKQ`#1=Y>Xqbr3EnH)l(P
zvOB`bmHVGMVP*M;4%*Gx;RhcpOEAI#;fM=y!F68fAG?75{qx5k;eYAIAMSr0y(`lC
z&&l~q?03(DxN{*w7B@8fBK+D~NKb@=;dvzPn&9$1(+P>;2K6Hd
z-}8@=M*kZ5i|4na4J!GD}g|CT@g$guyDZ~h$8|D-CO)?p)f
zKn^w!aUIMD&wGdq56HphA+Ce@;CT;m;Q=|=Jj8V{A3X0NE<7Lyn}@g#=7Z-w#Dxds
zVDk{y!F=$%hq&;79BdxqI+zch_YfBzkb})bTnF>P^B&^D19Gr=i0fcJc-})?ct8#|
z4{;sL2hV$m3lGS_<{_?w`QUjEap3_u*gV8_FdsbcAuc>12b+hu4(5aBJ;a3v*!Sf#C!UJ-!d5G&^K6u_kTzEhZHV<(f
z%m>eVhzk$M!R8^ZgZbcj4{_lEIoLeJbub@1?;$QcAP1WV;-dKTUQdJ*?gmc}+?||e
zUi5I>U7(znsyZ3~;LQsFm>U4F{SEgz3jl5q0GKn!-9UOD0GLtHX0I;*0K>Z4c?CVs
zfrV6`$oL+=M!A^}o5QR=H;9?&&~PJ&fqb_o2rSx(>^$~fVpXTI@=f;T0qaMPV=5j!
zZp~I>ZR}RJkA{hf-Mmh5wYxJSZ~Yb~`wbbT>SWzBOeuB*wY=mbxi^u*OSv;LIz0sd7|8&0C6%N%+U_g
z6oQ&{Hv$Q=iuri}!X#E1O$NcNV;Qlpu@rul1PG=86n#JGLPy^YR!TmAEd7NjVfBe>
zCPTuM5`je4SORx@x>3NC*jo{(Em;d}ClCh`2F!-T4I!chM0VM`ZxM{}$R-FT-5$zL8
zuo2jn2ojy>XmAi2i@H;NB8{U*c#ck1PRWinMe!j(d@;$`5p(91r*zMsE9|nJeY+R#)If*jVp-L6dpizFm!8Zw
zkDGrom^0WF2QFdt!y;fUX#Ka5c>`2KqzmK%=HAK}(#i+S^)_|I-HtnM!@U{ADcP^F
zy4bl$hHGDF(Bfw=omyd95tMPE952@_a7+HC9SJHV+E=<(R})D-s8719x2d4t5jy4)
zI1{LUlC-!(Y>XBY!D)!?!Img)89&s=`s7NhnGt&OufQPu3od;~zLlgUZZm={ee=|f
zJ;kTGaW(hq=1u{`D<*y+myk;dMSF<;70A60+ZRHhZm+ys?8vBZ%k8L*U4ol=8<=(Z
z*?LmTgQRJO7&bCy-0m%18s`N#6a;+3K8Gz4*3B>i-&nRT_S@9GH=C;y^~e?R;+?$Q
z-E~!Ba6O0T?9FkcIDzN!6+W6`{?IaIOROmN+fyW&DQ19uW&fp)U)Y6^;ek
z-Fg=IKngU*)qUcIJa0^d`^${==(NSzZ!et4&()Y{J(GZFKrt6*V78|)2rQpoU?cX^
z*0qk+6du{whLW50yR5`(D1e(j{LzP71FG>AlvvV06zQ8e_AsS(t0&%xdV>VFziDYb
zJ5AU6#cfQ=9jI2PtqpuT-`qEcs0clRpk^K-s~_!!gq~%oY`h2%mqq~#g95#Ch{{lp
ztr78|U<#c}1;8%XSz)dU@7IP6r(4Vl&Sj2|W;$;&*Q=fc!~mbw>sZM?s=jkQPp}^c
zi7N%_9NxrWb-J%JJ|fs^&%G1gF_#FZZieq)eYsmXH!Ayna}B|32DB^1?R*}_9+3i(
z_8Fnpp?TlO+v?E^i8#ymHNyxfZk%59b~mcsnBlp3(q_5gbQrNXMVrxlLG^g~HYA1?
z!>=th;}!=^fznRY47n5UVejj#jP_T+XN?{;jkFE@}vJOOvvbF;ojbjaI>{m+-{
zMG_YhM2x+hDA~1GFKdfkUNH{U0HbLjNnnhJj$(X4R^156W*b^#joNJpy?<2`(Lbb|
zw3w0z428qox`Ykd-}O+PDjNSNMI<^>8k*cC6i0)7n9F-qGuSi;r)bo$E$+$XbXxmT
zjgO0l;?fra-^UCq$&EZa0W8K_fX+n6c97MK2k#A16Tbq*^0@Z|OPvNCwFb+MwMjzq
zxvsq(wbvVJQ{2KoegI4{uoJQ=tihp=#!09fUT5m400UDI{%E&8`JO&FuyMtzr$hal1y{
z`1v8NM-Dp!xB1$G5(c-ijUyOBxrD$aSGc@Y(pL|Q{@#doXuWk7gUcl7
zhpDuK<=p)%J%Yi<`FY}C!{WWvG8|+iQm4}k@45AM@D<$$O6hGY*G}4)oc%O>h8^Xg
zrEoQBB1Dt7h5Q;BAbvX->p^rofjO3;C+e1P}A5-6ert=a=L&VDr&E5U3f;MVtOX6?$!mvufz&|
zf#fzlGuVY@Vs=&@mHiy_*7P(6MG>5=tmY42m%cxL>tRTtofyU%ysi1}F}>;2vl7eu
z_2W{l+Q&sk&))ZO3|uLS>IT32ra5;tw({J=fw~5M_I={gqph_}y7^kEKDX1I-9ami
zH^tvWlz-EB1MMu#B~db;J$!ywErLy)Qjj>UrzJO5XuVL4bKS$yxQGDQQOq
z_xm%(+AO{{^3_+lntVS9lv7JrZ$Cf%t)zbFV)h42t_cx!bIVTgR|8w)@#g+nD#Ez%
zu>iG&n^F|E#!map8giP{d$PJ&AU%dA5oP=Ip`eE5rn5!c#$o!FbdiKM4(xMTaH+{W
z3c@gFU@!miiDUDXZ$eaG?`_tx$UBDLy_u4ojw;!n&udUQ**npGQX=-<+$inD-n5^o
z1<~c*i`86S4Gzb#=A5~7{RXRiqBJU_^wZsiQ61~W=7sGEwNR_{&ue}qllKW4Dl)_p
z2brb6)^N%iv-mbXAtRyPuDV9mEtFh$#X?m9K2R_iw^3Ac3HR5@^pG7nq?NMJq=7^p`
zCf2r)RMt}u>LV&*%9Go~%_}EKqqKo#BGZY)<~E(-i=pf>zb
zI+|{-yRGJ?s++TM;0X@8^TVmwjuW21@T1SLO1E++A!QrIgt&r&7Xr%JH2KUFO*xc(
z1fGxu_Zi+My)NX0vwExlWhyLIP|b_GyMpWv#U{v;Ouw@1+$*ePf%x*ksKLcj#fjnQ
z5r4Hs9R;r}{z5pt1mrP&nOtdnqt?TBWhMss-ZUvbF_kMCY3kGq@pstVl?@vFImJ4k
z4@%DOlDtq7Uz>nY314{tiG8RUEp$u*IQ2v|6h^UAJn$Ma@2oIP|H#Vp(FNX#Q;T42
zXqRBr_4`lywJ%i@`d>@2J%zr;8TyRGc8}rZ7lQe~o^wHu3W!p{su6Y3v{R*@3|>B;
z@7i&_sqjf|!PqaQGwUpoekE3jZ1Db<%Osf>A84Dh`R3RpFy=>EzSn;m;IXU5I!cwie*;RD?GkGvDZtD+D?P$SITSo6~CS1P44-33G!a&{IVG9;BgYGKKR
zX@I(XvdZ8b;Jlcek#pMiz2Ev%mUz+=ni*YPd)p
zVTUF1pDxgWr)HMejvGn!vuwy(-#Uq`gYau*0&}Vr2qudOX9%9jcKRecY4Q9GKP&e=%((R$%vV4tGcNT
zih@OL-qz3Tg2s_!XI4J=!xMvJUWnvD>&d=2v`crS^mFCV$Rec)`l|V2P(4XUs;>yg
ziDR;`G5+O2jU&Md4DMLA?T{8bjb~K~nuFQ0m&+YyLW6_5C3r~Mc-k`UcIA52r>Hrx
zF9^uxK=;`~WWMpuek=9lAE;Aso}6NPk)SiW)>%*!^*-3pqLEiEtl;w<*QPTJJd{n8
zr$jCx;~bZ|$qPxBzAywo*3F03r`V^jTEz7wtW~r~P`P1O#d-I9)`I=0X!dimZAe>;
zV)lhe-E(rCn9k3K3@~XG`efWSJUJ*4Hpu(fQnzui?Cks08#W@BW@RwrH;hR4aOc9|
z$ucUp`VCZ4LX)Y1LfhF7P@}7kFXtpn(T>xsVwn#SbK%fjr08dg^O{)kB)Fwc-TWKk
zU{gVoCybV$&VViY6{K&z4vk#Pm8?^YuM&3)^qyBxQ0uRSoLK>#pV#pFl2G=NbX)&z
z0GXM=sV5#JvR#PbnFR64*|jMQEvVC5w`g>9ii&t@RlyM(@H9ufmVA8dq)qMpsEwhW
zz-AjVVVjq%T7!OU;5Hmu#R@yOSyb&7(dKk2C;EEm%?=ekrZ?+Q!Ju@R5(__hL<`1&Gxf4HgUEdhgY
zD=Xm{TU&vWu<7J%{>wduNJhOjp@*GsFqCWSdlx};W2ivXk$l^`9+yb`x!I}t_1hS`
z&k4DG+6xO3Kt}=bpkxfcV(dl8@l!lEd{P5TEuN&iCn8rIiHjeFPsUl0e&aziD@cCo
zP$Zj^<-1i(Y;tR=z{HNl_eN4k=Je)6>8}c7?TU9U>Uw3R`#%)o6&=YZSJ5aq;oiCy
z_br8f?hdmQk!J4;!Uwe4XEkuyF^uQ&MDLx(PT2h?uQ;Kt-S_;;y6eOVu@o|Ubv&aK)(0Esy)l0p15mD0w^AH|lD|3`Co1D!7M=tpz+KtS
zCZ%U;8y-o51DJDy!yfxHza0QGiU3J=@q3o~u4x
zW*67aT*Pc(u*pH{&m2Qxlt|8*`(-Z&txe)~y4;L(iLaGp%>v;Lj3LKfmOk(;AZ-n9
zrvO0v8>sz!>DCEg~k8G*+d!+Sgx|&@CgUIr2
z`)jK?10Z^xUo)1Jn&%!}t))1l-Rwpi<~J)TbLXmcxrly!1OiR&OTEQfznE$o+3mM3
ziu;Mc1qpM(;YWVAno1v-w~e(C4Sn
z0i<-aYazx)$P-I7uHn9cXqjadGVbCe4Yb#KwrFvZBOXar>9c5eQ8i0k*F6mWxf41@
zzL*dU_4w?;QQD{>j;Jop*s!(tl!I5lp-Sy?^r{>jbK%FNbFJJXEW&PT8C7Rcysvh8
zW-uIIY#ahL9trount_;sc6!07sh!WVl!YCReKXU^qS9TtJD6+hEsL+|UfuCltLiLr
zVsomc8Ver4Bx_5R^^Qm97t!!%41ToG6WSI74?kzMc^P60T0!Ww4cx&5_T9d!=1ui!
zWlqVH9ZRkcdZ3J0G7Smvm{QZz&ON22j8&=Km-h#u%dQ3vR&uxoYNpK+>cuyCcd>b~
z5PULCEfJWY#(i=ub2inY_hj}w?$$Kv^uj%I6qHhUJlD5M6DSZ(aY_t+C}On?pn#H(
z91qHH0O
ztdWxJOEHA{O?B_>-nsYs-QVN){r&NKJj~-UX5Qz0-mi1c^SsabocTN+ACX3$?h!a0(&^lH=0I>hy_cs}kp2-dXv<66Zbt5BJ6b9wv
zibC`0s;l#%y;06c4+H=N3}>16TV5luDvuKo4CW^Xm+z%|gaZ5mrPOVVR=JEx0Q@o|
zv+C3EtF-2aSeP<(%vvtJqSeW|I+-I}>!KEQ)jHbDR(_Fpw6OX@;L^gv*6Xdu)0xxT
z-Pj%m922up;)h%}K*2a%5jMyhZ>ZDKUXLSZ(V5uC$M~W1i3`P309XcL141wrD%)gt
zQ2;rBekE~~x%KV0usS0l3xF>XnBZrg-cOcb475p@wjBc6*ntX@`%bjLbpY_d2A|{y
z?$81ApLLZffWhKxqin!n?%`r;AeIbB6V^UTuKEbDHw!fuBga1ha!OVCCHCRV$#7N=
zB(=$L^%Q_#oMi%osy%>9J1O=Y;FBi@)Oikef%x=6Igq}_iQ;qU@LC-*0N-aa5EY!zpcuXeaom#k^3<1{{0Jr4!7zd@1m8zNxel)M2D;syG7U;zW8UrSI8_u|%y{M%Ehf8?<5{8YgNTX-}SH
zp1CNw!ke-~bIqR)D2*`0pMF49-RXf3StKKmrnl_#15`skiN|p6PXriUq$RNg0Jzq;
z8Luiz26Uy~eg^=LKeF2vU1!sOMhyTOIibfZ)Tj6U1xBd{v&eMlkJR`pB5
zNE@GI)OOTkZRqvT$}^yTa$nVlMZBC*&vJZvG13fnxRhM?Ud}2WCESDD!d|_Pz8K&_
zRGcHO7fSCOGX%GdxuR(wX~`+n%IY{}DPtZl~*9h|2=dztZx
z$EAb>ZA*Pi^&-J}fhy)YY73gM%g`ss_^%ZiRtW|&Z?*(D!0shjYLyBt9^pBXEqL}A
z{lRnBbdJ)uC%r#SdqglnQg^?uyUvJ?_-&Kh%6*K;Onsrb1kd(2@2M+srF^N0H3|joYC7UOQBv0Ql
zHS;l3d4;{R-?YSxq2#Rjg#s6=~jyLK#b1tvp+|H#h
zj&zj~;aWKnI(ep!HP1L=kFY+IM66hz9Pl;=&560+FmSM`+??0|BaE
z>`*HG1~KZc2zNkAj@)j!{q%is+XAO&)dXCO9xBa=i?M!Wx8j>8-^Z_
zY{!P@Yi2$@6)hXxnlhXc+)0sQkU}WEVXkbBHD5D-U8*}^J0~{hIbh*o#AT6jAOn`s
z`JkvQqpZa*!*l%5N|t%VaiH~FWoaBbI@hx_hb>%dLJy{dk6j^;JXXt&9JBW8*+P-`$8H!knN0i_L$}A@j(9l`&
zdS64~*;ctW9i>KH#L|0NI;gW)thv5Go(t*o3^2t-^iYp8hM)>I^=FKjOfcs$1hIkA_f}gj^>Hil#W4?0jJQ4U_H!w9^Dy>soX@Dm
z)!wNM4Y;zQxsu9^Ie3(2A@Y68V2e`ZJ0J3Ck94Wb_vxl77{~Id(cFh@A7;8cv;7sV
zWULZ`<->0@?$41
zsDE*dFx2vWCPiatEQ(F!NO~yn$-rD=;7w`I(D@;8h3lEuGxLn;kSSH7uOT(UHHOZj
zqSxr&V?TIya9z97L3l5)>GNrX#Uot5H?PXL+=!l4A6z6FV8d<`P^(j~W8E(`?)-Ij
zQ(*rk*5LYt3ZvSJ`-8OsRx12U9{^o-zh7pX&4e39%vl%5BfwO#?5l#&C>Px
z$JL?%7Vh<$7uLM`7B7v(b2@OO+qYEwg`QMy&X^f4wci~B6Mc0=|
zHHRQ{E?6j*V?GW|t5#s}QpZW!K~rTW4!d$H>4Jp|r!V#6M9-_vZxutZODCHw33Z!fRB?bCj){YpSf
zAT~aWmzRro%Bh`O}tQ
z-%Tk1fUzJ=Eisk``Y=b7rv%&y<$#a~@I(`jp#Y$$5`cy~x+5@r4hR>dmlFTdqegx{
zq>~cAg^U5j0IiO2Md}24BTNEMn>q%%J1RKwt0>bd2Ed2{o(K$_FTm5o%Lf*q#Q#GV
zM*RN07|hT2qYB1diC^t|gM5|-MttfhZv>x=gp9Z&1S-uZryv29flA9m#rPy4P$@7(
z3JjGJhf2aA3NWY)-)}E|Wm@7lMQaUyf6a))CniYKXlN(-X1^rI5~n59tcljh!3&z(0}X#`uE=-e}w;~8-KX}
zb@Ujd^RLPIOYC>gzlI?KkpB|)-Sac-M=JcBAw^>T!PLDGa16@Z6ov9o{+VUJemxO?
zJPBJMy_`_~J|c=>(%QeK`j-$w1CBu`OF|^2#UYa7l2B796eb0ML1aZC@-PVGPa;2S
zl4uwZ)7}Y=f&UkkztknwK{+9vvHwZsSIxg_7#P5Gy?iimFGqx~hB9&N5=f*IOhz6e
z?cfBJ6^F<=I*ZG}rRBvHq~sCe5E*G1d4w!P4&o&JV~~Fh|C_W1%F*|G4*e$WM3jaq
zI7>Uh<>kbkogE#;ou#Cu#pU4&lHv-^jxvr4aAzrq9Q1eTKZXBI+R&SL5cYz5{Hf0O
z-v6IA@eeY8Yf1;{Lrfj)pHhmLSUpY+&~R@b#P?OG#Q*y;{9}Ll
zWBd3X^J6u`;Evxn8fC}txr%U71plS7D`h6St`}$LKa)ddfyglI-D#*%;OG*&;
zsb4aGs`n?I@7FOHagQP9JN(DmCdT}&jI_Sx_r1cy_eXs>NeJ-;hJOG1Tj-zNq@h;3
zhyK}38u}~J%nON8mi(y^e~h&H*T_G4evAB>P=7kV{n#XamJ&~g#DgjLkCW-&_K!by*#F5dzlQWb
zsY;@?*9Zxa-OW8*yYnIO?%^Tq|>~8Mi+MN%H
zcMlf{kloEaT)Xoj@$TUw0kXTfhii8}B;Gw-BtUjI_i*jbhs3*wiv-B-<{qxy`H*<`
zaFGDn-Q2^qJ0BA79xf6fyPJEscIQLl-NQu!WOs89*Y12synDDvfb4GW;o6-KiFXed
z36R~*JzTrQr?&hwzXn#HHiSQym
z;OS3%l2h0%Er<9ND4(N_u>k-C3IYHw3;;I25kF@Dz!w4lv-ZRXNN)fD8!GACQ!M~s
zF45IcGYuG?&%$Eto?d8G@wsVklZ5ExqO>^+WfxFK>kb;W=^}L(DDO}0(-Edjin#uA
z5)c=^EnOvI!z}!wIaK~~1W!uBi$3-A%6$6=mnZ2?q_BBh_B=9D>C`^_=4Jg$6=x^C
zrLh{6f7+75(qWrGL&BT!;5VocsZSZ>)I%c?y-a4HPq?8kGE_GxrDt9{KWH_`t@|
zs;O&RwmG0>U%WTy<|C=z2UaDX)h~b>jhvxdIEGL?x&V%_01>yOEoD!2kUhQDc0{(f
zC50(Rd8K*sgE3i8J;M-eJv&IE|K)*c_6XWLGWcrMk`>(I9l-15`RvfU%P^afbyRg(
zEY;!shxkS^7tYhCa%)0MjI3a{2sn$`#Ej6p7?{b(wmY1%f^s8rJ(w;cGO2`Yqu48K
zxWc!o3l9!8p`*%vVLib=@eUGzmkJ%{*ig(j2_>AtCWTTiOHP>CMXl^Yex5uR7GvqSb)YQ
zJ!fn#=+)esk^?A~h0)bW_3=5kv6LrH&=C!Uum)sFmW#5sJh`IMgtUvDACE5bdIDR4Y3yWZQu)kg{jmIi$Nz8)T`r^r=mdy_Rdx2Q!w
z-+3#I-T_t1i*@DlMyq+mau-N&G)I1D;ARMFI0XS>3IR*e)Ioo+wd8Mx}i_3qwJT
zw)N#b7G?%sXUSz9x0Ar@B
z(PUG8-9jhrL^8eue|fMOG|@6CW_ruML$IW$McjT84mNdBJ$GPBUL&P
zr+azt^m<%%AP?XU9g~)TS4ge2R%7*1<_0>CJJ7sj0}A-Hr{on(wW1XTJ`wQR#vC3a
z(>hGk%C(nGF9~hAe8#fC8?^+vgHHn!y;iJzdBQEmCR<$%jm*`PkhIHVCqV(^%L{xq
z2G73Wd2|k7OIB|nE19EfP6Yw;!ep=M($g-H1sqcYho2awlJsJR8OQ3}=X(Xb
zl5j;p;+9)}#c?~Kd-+kIFmPfdo4(7K$r;}(An;73mMFgr4Trc@aqcsv#3r7jN3FHe
znZ;&+$B`AcUw6V&C8~}S5c1q0S~=jIW0!qUlbJ|ko=Aw?e&6?IX!f}PwxRo7uTEFG
zJPJCHnz|`qGz83ZjEpQ{DSGc`U4G7mn~k)T>h{-lS}v2&Hf!+gWW_h))$?sXMWDWI
z4e}}{Oj(u#?aE#>Gad*N;%d9FR2LUfX2s^v)hOx8
z!>BX~BO6Tb2AyTV;}k|lp7-J(9!p#iOL8{4@HPL%+AUP@s>!PJl_@gYiI(Y|E;QfTu0@a6g$`0IXQ=vVnt&5LoaH*A*YU_ob_kUNp9
zmsgg%wjE2~HEQ9jlWR+70vKxLKQ42xTox~}wGeR{_nN08@KeEP4~&<{+n65w`2A0u
zXnJcC+S)J9)Xnlyt-lT4;Pak%xjo^&1{}iS2
zxsej@FPEogkqOLalzM&h66S|O>)(bDFq^Yl{Nm$k($7128tfWdhE_^X1h+dhxH5R7
z8)xr~Q3@E}QG7a#+yt|vXv;!agvS~Q|=qb)+
zb3r82FeHEOq0{C=!*Sy=TgA(3KBoE~Wg(Gk4ybLW)fWT(7lS(A%{C-q8{Rc8Y8|S)
zVBjUYu|c6i9$>DBi^cPg`!-U21-A-22^SYK9b}sk;Y>YxsR`8aZhaB6cIxz;Tc*-o
zq4-VKqasHIxd}?`9N~PPiz76T%QTDD-UMA9E>
zq>Pfw7_>jySsZW0HngJs8Z)1K%4c7QqVDHT9l3vi@OD0^2L)K;r?o&E9OKx=IDa3B
zbyse}6=aP~)U$96*71*vG*{{>7D_+QeP??@8NC?gw_kWIkIFh?Vr{ZjN
z(ODXIY%5xsYv^l+w1B32zn(DI<^
zfAVhmeE%TVLuccG5i!kXMSkKx47l4UcRtGbqkW&Z`#@%N#Rq5q)#4kK*L7Zsv^8A_
zG*xlqL8DdHBY2ON-Qi;h#<|*lEOhqZAgiFXoVeT6N+qIn^Tv4|htZfzc8203W4TB4
zRSX=uz8DWIbMK(Tx9VSaY4mq_^8#uo^=Cm{RBmFX#dhCHL*$`O{_eDv9|YXuMK%zc
z&9=m@JX~C1pW8HdI`nA@!(bpTqSbuj+LM_xnm8;gwx1v#O_+OgX?`T@aiUO`X;m-`
z3MWfU$+$*ue|=i?EECO{R0qLl99j<=XXL>0BjnCoGjUl;ck{h&ue7qPebFv(oum{Z
z4lw$|W}IJhmxx@)32xM8+3ckr;IJZY-uC9DIO-Vi*E5y^po3@R4xW+HY?31+O`h`~
z{oH@9!Zm(etNFetjw9ru%}})h0?vD8+!n(iPx<6!<6W(i{EkyhtPZQlwl{Vno<|GB
z*7UBOzK=r^D^E{6lUDnZ)VEm3n3zeV{suF@Rhk!TILB`vl)cu`U@a
z9HC@Fhih{tgCmAflqRfYqaXfAv5GDNwzDkk%c?B@Nqya)Z)^Rw*LATHh7C@9fr-vT
z-;qc`o)dEhW;Ppqbb5X$zp-xlJGzXq$0DfkbyioUWn41X<+hiFnf4bEWG~Q5>LyM1
zO3d8I^*Bl>Ej=YOX^40b#${5@jxFB5UQ2M-To1|Q#OsQ0nn|wZv1Mi!aHTxxIQaRC
zKh5&z8EmB^UHOPueAQ)DeU&Q}y83Rq8SF<+yvFW8=`Db`8Y(_y-=d~qrH^=JP&B1)
zi>S_POQ^#0huack)!sXH5`>TZL2YxuFbkd!($opHpLIPE^{KZ9x|$y$hJQCF`$XCV
z?K?
40$sWaU$8_Abqg2hS
z1Z^bNEcNO)@8ia272QeZNluHPDe|zt5^ha169fNLyZd_!!Xz~w0Pb*l5)zAA-?72D|4%dE!t0u85<)We(k+~3}WcWnf(5LorN
zh)2<&mjVjhP$ouhk@L<^$y~26Hw>{AKbguO9F*Xnt?JesKhUN1MSch`>ILxhhb5wm
z?~s*Xt!4y9bdL!@@0_Y>ztBpZpS8N0nn)!j(SU-46u
zO!%FY1Jttwz2Dsb%<@Nk3G~Z7
z4}&2Vfak=iQ|K4BWabPR-^I&75IbGf6(7zTM~SYvv3hr8GFR4!-;6#-p=dRK?D~bE
z^VSy4c;(wwY9HH?HD8X;grt@V=~a$T`IH%dJAI0gHMf$Uc)@TO=Ew(@=Qbe;U>pz+
z5{>Po$v2-KSq}#)tQi_p)7Pn!-%xc6^>8Gf%)Ftz&o;(NkmlO@oNP}Jto!&2x@xjc
zToEz@FG{;DB2t;zNydi{!pq#459QOFm6aGglxa4>6--;(Rb^uD%O&xO?(sgpBARyI
z^ar$=AsTVly7DO*?OEKwMQ0$N9VZGLw%DK)2>Q)+(jAB
zk2XrVBNeVLZI+rL0L>^c>NwozUq`hetC{_(;?y!9b1lmT*YiWMyhnX)#;l{(kGB}x
z%GTMo9+D}@QYu!Pa64t0^z`@&NEsB&RDJ$wn++^yq~P`%u2fR-Bj<#4zr%w>xz7z=
z*OHb9_c}h~J&Ty}&gB)`)@38PWrx{nIyNT4@YO|^pYb%SwZF>qY&5Q+fP>H)hUA6h
zC@!H>1^!iCH^m6CmORilZ9En~p8RQqot*BLY~0Nf&$E8Xft*4I#rN?D#I$N0y148w
z{$e&iqf*he$b5mWF*2=OLeSCZU(GAkFFpR#%%qZF5hAG&M%kIO|#ep6m&Q-}x
z{kd^}do;B9aPu&0Az5d2Y_I@0?$Z5U{Ru78?%~@Bp|8WObpxq42JbSw^#`;~_m`?7
z7PHmS`}OoD4Em*CeLAY}wF9s`D-JZ|zRP(^hAl8C5=(ZW9*kU9+lQ`VMfL<7LBl3e
z9l~UniFZ!=MXqIp4XdhAp{s;$t&Vk5b@!tK5sV*P+ul%~1)UW-+By|MgAb4)cbP#(
zv+ksyBL^cvBcXI(s?Eb*vpmzHmcq4DO8JB;;5~NIf86%5&kaGzKu&*qbTcnJu+FIS
sT-KLYWb=J@vx<)5$Q<4BzwrX}`}`4SxQD8Vx3~aZ&C?p?C+#o&FDkxxwg3PC
literal 0
HcmV?d00001
diff --git a/store/modules/user.js b/store/modules/user.js
index 7d03c1a..c105cd8 100644
--- a/store/modules/user.js
+++ b/store/modules/user.js
@@ -1,98 +1,160 @@
import config from '@/config'
import storage from '@/utils/storage'
import constant from '@/utils/constant'
-import { login, logout, getInfo } from '@/api/login'
-import { setToken, removeToken } from '@/utils/auth'
+import {
+ login,
+ logout,
+ getInfo,
+ getPermissionInfo
+} from '@/api/login'
+import {
+ setToken,
+ removeToken
+} from '@/utils/auth'
const baseUrl = config.baseUrl
const user = {
- state: {
- id: 0, // 用户编号
- name: storage.get(constant.name),
- avatar: storage.get(constant.avatar),
- roles: storage.get(constant.roles),
- permissions: storage.get(constant.permissions)
- },
+ state: {
+ id: 0, // 用户编号
+ name: storage.get(constant.name),
+ avatar: storage.get(constant.avatar),
+ roles: storage.get(constant.roles),
+ permissions: storage.get(constant.permissions),
+ role:storage.get(constant.role),
+ post:storage.get(constant.post),
+ dept:storage.get(constant.dept),
+ },
- mutations: {
- SET_ID: (state, id) => {
- state.id = id
- },
- SET_NAME: (state, name) => {
- state.name = name
- storage.set(constant.name, name)
- },
- SET_AVATAR: (state, avatar) => {
- state.avatar = avatar
- storage.set(constant.avatar, avatar)
- },
- SET_ROLES: (state, roles) => {
- state.roles = roles
- storage.set(constant.roles, roles)
- },
- SET_PERMISSIONS: (state, permissions) => {
- state.permissions = permissions
- storage.set(constant.permissions, permissions)
- }
- },
+ mutations: {
+ SET_ID: (state, id) => {
+ state.id = id
+ },
+ SET_NAME: (state, name) => {
+ state.name = name
+ storage.set(constant.name, name)
+ },
+ SET_AVATAR: (state, avatar) => {
+ state.avatar = avatar
+ storage.set(constant.avatar, avatar)
+ },
+ SET_ROLES: (state, roles) => {
+ state.roles = roles
+ storage.set(constant.roles, roles)
+ },
+ SET_PERMISSIONS: (state, permissions) => {
+ state.permissions = permissions
+ storage.set(constant.permissions, permissions)
+ },
+ SET_ROLE: (state, role) => {
+ state.role = role
+ storage.set(constant.role, role)
+ },
+ SET_DEPT: (state, dept) => {
+ state.dept = dept
+ storage.set(constant.dept, dept)
+ },
+ SET_POST: (state, post) => {
+ state.post = post
+ storage.set(constant.post, post)
+ }
+ },
- actions: {
- // 登录
- Login({ commit }, userInfo) {
- const username = userInfo.username.trim()
- const password = userInfo.password
- const captchaVerification = userInfo.captchaVerification
- return new Promise((resolve, reject) => {
- login(username, password, captchaVerification).then(res => {
- res = res.data;
- // 设置 token
- setToken(res)
- resolve()
- }).catch(error => {
- reject(error)
- })
- })
- },
+ actions: {
+ // 登录
+ Login({
+ commit
+ }, userInfo) {
+ const username = userInfo.username.trim()
+ const password = userInfo.password
+ const captchaVerification = userInfo.captchaVerification
+ const tenantName = userInfo.tenantName
+ const rememberMe = userInfo.rememberMe
+ const code = userInfo.code
+ const uuid = userInfo.uuid
+ return new Promise((resolve, reject) => {
+ login(username, password, captchaVerification, tenantName, rememberMe, code, uuid).then(
+ res => {
+ res = res.data;
+ // 设置 token
+ setToken(res)
+ resolve()
+ }).catch(error => {
+ reject(error)
+ })
+ })
+ },
- // 获取用户信息
- GetInfo({ commit, state }) {
- return new Promise((resolve, reject) => {
- getInfo().then(res => {
- res = res.data; // 读取 data 数据
- const user = res.user
- const avatar = (user == null || user.avatar === "" || user.avatar == null) ? require("@/static/images/profile.jpg") : user.avatar
- const nickname = (user == null || user.nickname === "" || user.nickname == null) ? "" : user.nickname
- if (res.roles && res.roles.length > 0) {
- commit('SET_ROLES', res.roles)
- commit('SET_PERMISSIONS', res.permissions)
- } else {
- commit('SET_ROLES', ['ROLE_DEFAULT'])
- }
- commit('SET_NAME', nickname)
- commit('SET_AVATAR', avatar)
- resolve(res)
- }).catch(error => {
- reject(error)
- })
- })
- },
-
- // 退出系统
- LogOut({ commit, state }) {
- return new Promise((resolve, reject) => {
- logout(state.token).then(() => {
- commit('SET_ROLES', [])
- commit('SET_PERMISSIONS', [])
- removeToken()
- storage.clean()
- resolve()
- }).catch(error => {
- reject(error)
- })
- })
- }
- }
+ // 获取权限
+ GetPermissionInfo({
+ commit,
+ state
+ }) {
+ return new Promise((resolve, reject) => {
+ getPermissionInfo().then(res => {
+ res = res.data; // 读取 data 数据
+ const user = res.user
+ const avatar = (user == null || user.avatar === "" || user.avatar == null) ?
+ require("@/static/images/profile.jpg") : user.avatar
+ const nickname = (user == null || user.nickname === "" || user.nickname ==
+ null) ? "" : user.nickname
+ if (res.roles && res.roles.length > 0) {
+ commit('SET_ROLES', res.roles)
+ commit('SET_ROLE', res.roles.filter(item => item == 'all_approve' || item == 'normal_approve')[0])
+ commit('SET_PERMISSIONS', res.permissions)
+ } else {
+ commit('SET_ROLES', ['ROLE_DEFAULT'])
+ commit('SET_ROLE','')
+ }
+ commit('SET_NAME', nickname)
+ commit('SET_AVATAR', avatar)
+ resolve(res)
+ }).catch(error => {
+ reject(error)
+ })
+ })
+ },
+// 获取权限
+ GetInfo({
+ commit,
+ state
+ }) {
+ return new Promise((resolve, reject) => {
+ getInfo().then(res => {
+ res = res.data; // 读取 data 数据
+ commit('SET_DEPT', res.dept)
+ if (res.posts && res.posts.length > 0) {
+ commit('SET_POST', res.posts.filter(item => item.code == 'worker' || item.code == 'engineer')[0])
+ } else {
+ commit('SET_POST','')
+ }
+ resolve(res)
+ }).catch(error => {
+ reject(error)
+ })
+ })
+ },
+ // 退出系统
+ LogOut({
+ commit,
+ state
+ }) {
+ return new Promise((resolve, reject) => {
+ logout(state.token).then(() => {
+ commit('SET_ROLES', [])
+ commit('SET_PERMISSIONS', [])
+ commit('SET_POST', '')
+ commit('SET_CLASSTYPE', '')
+ commit('SET_ROLE', '')
+ removeToken()
+ storage.clean()
+ resolve()
+ }).catch(error => {
+ reject(error)
+ })
+ })
+ }
+ }
}
-export default user
+export default user
\ No newline at end of file
diff --git a/utils/constant.js b/utils/constant.js
index 8becd84..7b877d4 100644
--- a/utils/constant.js
+++ b/utils/constant.js
@@ -2,7 +2,9 @@ const constant = {
avatar: 'vuex_avatar',
name: 'vuex_name',
roles: 'vuex_roles',
- permissions: 'vuex_permissions'
+ permissions: 'vuex_permissions',
+ role: 'vuex_role',
+ dept: 'vuex_dept',
+ post: 'vuex_post',
}
-
export default constant
diff --git a/utils/storage.js b/utils/storage.js
index dd5c38b..6965cfb 100644
--- a/utils/storage.js
+++ b/utils/storage.js
@@ -4,7 +4,7 @@ import constant from './constant'
let storageKey = 'storage_data'
// 存储节点变量名
-let storageNodeKeys = [constant.avatar, constant.name, constant.roles, constant.permissions]
+let storageNodeKeys = [constant.avatar, constant.name, constant.roles, constant.permissions, constant.role, constant.dept,constant.post]
// 存储的数据
let storageData = uni.getStorageSync(storageKey) || {}