From 27ff7e7d690c0cb7b8ccc264cb3dcde2eaec0fb1 Mon Sep 17 00:00:00 2001 From: Rudy De Busscher Date: Thu, 2 Aug 2018 21:53:01 +0200 Subject: [PATCH] Update documentation --- src/main/doc/manual.adoc | 17 +++++++++++------ src/main/doc/manual.pdf | Bin 135828 -> 137922 bytes 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/main/doc/manual.adoc b/src/main/doc/manual.adoc index 6c98907..1d711df 100644 --- a/src/main/doc/manual.adoc +++ b/src/main/doc/manual.adoc @@ -13,8 +13,14 @@ User manual for Atbash configuration. . Support for reading and writing multiple formats (PEM, KeyStore, JWK and JWKSet) . Concept of KeySelector and KeyManager (with SPI) +. Generating Cryptographic keys. . Key for HMAC uses now standards (SecretKey and OCT JWK) +Breaking changes (although 0.5.0 was an alfa release and thus changes are expected) + +. HMacSecret removed, use now _HmacSecretUtil.generateSecretKey()_. + + === 0.5.0 . First separate release from Octopus repository. @@ -43,15 +49,15 @@ Convert the Object _data_ to JSON and Base64 encoded format. ---- -Use the Object _data_ as JWT payload, signed with a HMAC (Warning HMAC support will be changed in next release) +Use the Object _data_ as JWT payload, signed with a HMAC ---- @Inject private JWTEncoder jwtEncoder; JWTParameters parameters = JWTParametersBuilder.newBuilderFor(JWTEncoding.JWS) - .withHeader("Octopus Offline", "v0.2") - .withSecretKeyForSigning(new HMACSecret(localSecret, LOCAL_SECRET_KEY_ID, true)) + .withHeader("Octopus Offline", "v0.4") + .withSecretKeyForSigning(HmacSecretUtil.generateSecretKey(LOCAL_SECRET_KEY_ID, localSecret)) .build(); String encoded = encoder.encode(data, parameters); @@ -77,7 +83,7 @@ The following example converts a signed JWT. private JWTDecoder jwtDecoder; @Inject - private JWKManagerKeySelector keySelector; + private KeySelector keySelector; @Inject private MPBearerTokenVerifier verifier; @@ -86,8 +92,7 @@ The following example converts a signed JWT. MPJWTToken token = data.getData(); ---- -JWKManagerKeySelector -> Selector of the key based on the id found in the header. -In a next release, selector will work on multiple sources (JWK, PEM files and Java Key Stores) +KeySelector -> Selector of the key based on the id found in the header using a default (but can be configured) keyManager which looks for all keys defined based on some location (see _keys.location_ and _key.manager.class_ configuration parameters) MPBearerTokenVerifier -> Optional verifier for validating the JWT. diff --git a/src/main/doc/manual.pdf b/src/main/doc/manual.pdf index cd30e04718098b7eb0a91bff5202589dd228db01..559ee11022a1b3bcfff1cd2ab51fdff99494875d 100644 GIT binary patch delta 22070 zcmd_Sc|29$7dPI)HAd!n&XmNR2Z>0EN~C1SJY-B6G9-r#B~m(ZNl}_qhRhj~RA?}i zloUyZWUfTU-@eyXeRy8KKcDX(PrcmNUF+;|?X}l>ueI;l7jCfE6tkbJ;~=B4SPUA2 z$0jz*{3Y_I#PnH67(4}$8`xLqvDE{GM9x}>Sqq0p z@{#ojyc7F}D}s#H^C3M(Eo@|*I*~}GAf{>pFdj?75(z{M(UC|Yx)4cNG!aK60~&lM z5=b~K8cU;`NO-_?B@qCZj78(nSQi`t{GqXE5{ZbRm7~?6e>xF~L=525+I6C}O~Mfg zi_eL8zy~dn=q-bu6#vr|C<-cpq689|1U`v4P?$i(Bbbc!j9Id?5D4mIB!8O_vU8g~ zim*hHwD4rSGZ+Jo0D1!zK|>^3Z?sW3gOL+y4Pl)C2lP$v#079kR8u)-xpiLkrC#(w*NM8&hAnSKXLuBO0b~S|8RDlOap{P^vXv|_m z^iei8>_VDTI8hj)IvS5u?l{JdCzI8IRO#|Zc5So!%Sen8L>hM1v*PhMbqWT-7ziM_ zy8_uTcy$u3Ja}BV*;oof;V5Kvpa<3>g~7W8Aa)!HqmBU!O4VhBM3H+LJV?1oI5Q4Q zLevdJkfVYg)M^cA9UFzDPG&4S5_p&gS+nO5E0)eglC6}Gi(2}~@E&&dMHa2Q7eWZX zSptkDW7W|FEJfCvlK=*W#>@WUcmWPU9gC-6{_+TT(qb93I+lo)T_QTeqK?Iq zD99225OypcuZ|}JBEmxq;R+BzI?RLFFa&ipnqEL03EV%kNhT6xF|;S>B~|9efDSQapbhj2riLO& zcn&+V*?KQhfKf$wA4C>XY`h^R45cv3_5*}u*@?3f2#&4}&eZW1NC4UF;E&w47h?fB zKtgKm*NKq8+GBvW9t!aCvf*?&DZ42&hHlL&vcod|3W0T1-`kG2!B7+ML2sxzo1MQ4zI)ttdtRN_C4Es^xT zmQmI- z!a3=T0!~Anh>ZD5AQwGKnF$mU0*44A9-d_^KmpNIJ{Cx@aHAJD1QUQx{bL6Si}XKM zkilUXGy{wZD#MB{&4h097zDyIxE5x7|Kki8^#3g(z_R~aAs}P> zaI6FzMjc0_M(9IgNSV)d6rO?u$SWd5@cf=NNc7?7EI`#rbiG0B=eQ8&GC{;{oEJ$x zastLv)PYs{BR%{g{g3n*9EQr^!Q!F+Q6W5VjiCM?6~Y431Mmi|{-WCjDn~~DYgMoW z46VeH3Ngqf6=INoRfxe@)EVqjYfB`(vn3T`jAcoM{tlI)LQ6BDs}O^rs}SS+|4In3 z?Eh8>G!;Sy{biBU{*EjdU?LD*cL5~af*m-vN2ecURghA3aJPdLCk{PScrJwC6`)l4^9vTSc^=S z-5bcsske6t=U{=xAQ2IQ$Z)+7Qhk{Rc^Pttu!xVBVgZ2Ti8Kff5Iw;DAPS(z16Y8e z!8d^47coB;8N0S$gn&Wgmh}Jv5-jzq5+sc9UgKq@BX9r*h6RwhJ3J}?ii2PRz-bV0 zfX1ANuHe5TJ(M5i6rj~=*aPJ&1Q2!ukQj<5p=KByy2eJBaJt;PUEO9G)B{n02V zuoj4Ga1`n*Zb%&Q4$DV@PRJNU0gh%N5`kNCs1ro0qge`{ z!U7QRVd_Ne;^=cO`y;LqB1?sY5o*Nt!YeV85G%mwphN0fQAiol`6`BVoO*=90?&m( zuEi=alj$L((fJdCh{|a(MD0W{D~W6Z zJd8SlK*q@e%m+%E>IorD4Li@XbFkvc6m=p6d3y0Gl9(ZjBhBKOLL z3wf^X0D43wf@xA;sY61A{@2YRgddQAr7yUAmNkTQ z+!aNVZg(M?x!lw#c8CW#cjq-TmO?<9i6S&1A;vj891L$lBq8ULMUY>2UoZpMkDSXB zrAv4?JBUtKQzekdocl}!EE2I^v~XW81wu>;#g}%M0&-y15DCuXVaMQTK_P~MjDn}5 z;;3tG_aLOVNVG6KpBZAsP_O`1(`SLC7vwL|bPJGknI8!)^k3r9W(w4c4dE|(jlz(K zG#g41L~?6*5U%2YKOC@06upoxNqHVDP#_F&&$53D?{1tu~9*-<@$XjQZ!U60a`oJuE zqZ>%@69n1xhzo&hnvm;H&m&!rQ;^14{!d+il;3r z9&vmX!-OZ(jILNA^Xs(`6BdKO5yHTjumB@0fb45Ii~@ie!x+G)ma9u8Qr?uJaAdHt z5QkR+$idbif8&AJ54ope+eM5otD5t0KkAozIOVefMX^T5xY+?3grBV1f=KFbENx= z7!_uM4kKw@+`t>s&^?hT3y>$CNCo~uh$_tt9YCIbE}@k~lDdx}vb_?>`Y$JtD=`s; zm-^@l6uRA#`ML)M(l;P;r(w0LJ>e4~QUdOZ-pNM5HA~|3*y=a%mqh$iMr5!B|xM zKdmj2jLw$!0b?vn`{3_T8T(*qCiH#4AizFQ_|Wav7QJStI0 z83r(OVoU-_ANkD!mKlHrVCmBfI14LAH$p5RcTP9Df`vTe7?8jLnRDVl29-hoqeu)6 zLy-tzZ;}5os012P{>Pva(7>DglfovTL9U+sZ}?3>gR~?q$w$kagXF~`xui%8@~ z7>k!-okhUX{`(Ag0MPQZBa%BSj?7L6BHQO=siWKwPvO-W9-x>EL`8-1 z5F64s8;rbL07_gSR(Na<1&(+?1dpNP16p`CDco6nT*Lt-|HBnR7#&DZ<2fOFS{Vr{8y9qqD!c|b0Q+-%2=AuV)NU^59V<8v zq#-ciiIN};^7)Y%ErOtya|6d@$O{T*6rf6hL{%VaIv*GvW(_0?QLper5~a?(5Cx)v z;`}aQY6%}SK=l^_pgFyOom#^W71HwmrA5LJ-G9*nWlK7G#8D$ep|wl|G-6cUKot=L z{hSnoB+hT*Ej1T}q!)b@H9-ivMg!N(AR~g9Jocpei9v!)^zQ&-=A%lli$QW=xzN-r zv{8K)hlC)+hYtmjsIwB#8E|F^jzy>mlF$`;>_mrzR2@06azt7zMXdsX8Qt+xm8GHM z0AN!<(!rsQ7R~Zeo1`HlRyvEJX-hFF2Iwa^9wy5!l^3KwmVsWefI}Dp^^7E>NK19N zGl3A82AZkba*!tqQ~`)NR}MPHgvJ4cED8j~LER}2&7#mC1|d^-t%c4nJ`$!*u7!LU zY)=K~6oU;E1V!algbpztMJhruOOHS(MpaURjsk53Nlbb=lq!RRR+m0ff~08s1z4s( zv-lGu9AX9!5c|U-)N3k`2kpEEM;+FHa3BDPMDFciWyXVZRFlUdbdj+Ff|iM00xLGu zHR?c-TUDVnW*mt~TLCfZ0}LceT~LQas1@s>60o%Z=A|B0gVI>gAU#79Ev+qns@4X` z8UPkxum5fodV`fH8YIWiGg;J13}_Ox_KgN;KnyaX0bKBi-Hzca*?L5S^&sIe#QV#iiz&^s0{&lrP5P*RaORkndF1cC;`PbDl7>m9YoF*-{wnWl9 zTXMCGu`Ib-(x0I&VYbD&EgnfPP7AnN75INRe_1d+m?n<@(fmQbZphDl8mz!df+QQY zWi#{^1tLN$g?e}^F!|4Pp$4$6XbC1ji&KmBz>Wgwj*OultH@HHY=KHyX|NhiqA>NkNIF2$?}HNtr?Z)iMTyf#8-}TO#S5Eom8JEK6GUcc=_4 zTbcvB1mzP3DjIeD2RrDK(c$>Uznj*cqi0TnQ^aMT75sB|#|rp9_gmzmH6D(pk^v|dmNBMhca zdqI7RaWJ*l8)~OHHv%=n2NI;dI|SWinCufiQ1+6^#vg|6ESc<{!_W_g$^Li*dciQ+ z*}l+2hRHtc2R&Of*`?b4P_i*E_$d;n#!i<*2mRe-@dO;2s#^vrz{M8F4(x5MTF7}Y zskJ%6!F5#ti>s)#I3{v6I(9cpaI{8s?Dj+`hKi1Syv6X$;Ch@QRxRlz+0|9w)xAn} z_$cAWg-wS}I`s};7fb3LOsUiQmR4oO3C$FtC{)y$*L`eu*fRYSM@~s@Asau$|nO zQ=}k>C0g-`^2KhZH?JQwqza_rgm$!S*nxBXK@<(->b@xdp6yY1s;=|vRTE_SmegHG zVqG2gMDrfG!0V&n<$Pgp?YH`yPfZ&wVAYAU*n_+5jr~Krq)577MyKIDd>?8D&TkR> za-yXN=R3dmj@%1JG3&+$@QZ`K@lW?0`BX3M`#nvyj?KTgjpbTCSqCx?6JNS5 z*Y-Uk%9qyvbRfTedc+B@6RN+UTk&eE&@t@-o$s-6RR(u7&bzgybT=qOZGUD|TX`Sb zqQ_)o*AnTUT76d{xL8(0F&gY8^B-r_>YE%AuQhvq+? zPu<$s?C`3JBK#s!O!}ln0oEP!9+tbLopQvwA>)*2aK;l3+lLZJ{MdXoAI~XOUTEO4 z{Ixb)f6azXZZ%?CXV%X5WXU`HHY)#R@XcwD%UDTHe%-^J<6RF0nhajI@Jk_7YNvi+ znP#c=9$_TS`)9|@aTc#z_ikkCdOc=)s$_uPZg!#n6WgPU{eekE573zWJKx^I5nB>r)9%2jFm^FDtg7!e{QaXheqO~d*d6eg8JA99gSv6kD`s?E zr`B&rk;0@)qP)>P&knRV_?_>v-WI*xS)uS%~@A6@T_voG3X_T)nsWoC9*e3LPJ*5~=p_H&tP*-91efpX<dPPLUiA~4P1*=pqu z|JInXY=vmO!kN^swR6^!aNC=b1k0`cW63i?EyMo%p@ut>o~a)U(l>-0d?#==cp5&P zH^a0)^02w<5dad^+&NJU*Gi7kZ(7~Y2k1uK(NqNY* z%d~2t@3VqO9a~~W)EM?emZ$ozsd?WnrQfWEiKw^_LM+?GOy%;*zGAv&vzPW!y=GU;VIcjJ$B zpE~efI^ynq_1FW^KY}8z)CkrovCQ_DY+BgDd8*RI)9{e3x##5jO)R1EepU~43}Vi& zEe;ld{XEQHRU$vBVKO87>JECBSC2V#Uk|f_zrN6n)4Tc0d!LG7%MJMRYfLos)GYF} zT4~9eZVQNO2IDK)I5Tl5`2e0H?)-O!Sd&dD2bkN`eQxB7Ioacy2zu{4`O;fx`%M*S}{rWibWkh;S$`h4<^o#luVNaff z{&EVeQ65#;Ws;h?;}Yf;5BDbF6kVlki&o2V`w?^lrDUe0Z&G?e?^9z_TSh^qXYAU* zZ+F)2NY1O~zCN>RpP%x58(waX`-LcZuaKYyY}MdEu+cY@8abVzZR4@7RU^N3HmA!s ztSVMjgmop@5yUTH;v0kMzq3ZubQL2pl(%l{ta47qx> z*v0h4+b?0>`}9jEH>n35ckoL-;_D!?>BX5HxL~%ZIp6DPtMhea_%{ab3ET5rB2VCq z=frR2!1?JX#&^ul9PO(r_IUIqv{UHR?;|n~ANJ?ZB*OFln=k1lj~O=ds4@HA`4QK` z$8jhTpZH<@IT82~B>v`m6)))bs)0y4I(Dr_X#D9FC5jStwAr z5t|;=7;vV->dF(3AjgB$bJrS1xOOJs*(cA07EK>b2)yZPhsepiyP;)5O47cmkWhT} z_LuK#)2%MsxWOrM)~XzLcBSXbZa~63kG%ij`d!SeDecEv%j;bCg6`Y)8q4nQG#X8> zUQ^1VlzMPWbJMv*%nVUGQ=x7z*TPKKMqKi`jT>Ly<>{ShDLm_tv|cI3N^P6wz^wX< z_#}k~iRKgEeLF%TN+%`1t8P6Op|?gV{>4F~g6_tXHPJ9wNXv~Y2Cw%+;a zE=dA5-CHg{(vmpf_H46e_Z``ZbB;6n*$Rvd(_;0W30%~HYmYrHyK#5m?oX>N zxzy0>cUs9ez81&5xKs7IMKw;}g+t$pYWU>ygP-#I#BO~}ZsbX?(|0+)R>$V1-NX7B zfwV@BC%jSYBZlFzQGx3vF5>b&;JJ@a@v9r|dj(OX_HBG0<^A&+mw(RJ^1R7BulF@| zby1tj#J&hT8yxJo_OrwlR?`pDXsJjt6fD8+JUelf^5aFH-NNs={>g*d_u9t2Kc66e z80e6&b0PHZFuHj|SZp}MN2{pFriv%Gbwp>-ZSqe^(rlIX&k)iWK`#&!%}WL z?@VN;af|jFtM6zFj8(jezq>O~C@tM?)sxIPrMu5ww_e+^9*#>{aMF)edb85G9eEqF==x{^pi{J3)ghrZ20N9 z-(B{@RE}qAb>zs?;_pg*o7umQrR-f7xwA_~w-#=}eK%wgdz34!Q`@b%wZr&3)TND$!&!C)i(k9VL zO?kTVL&Jm7je7Q4FQaaC+1%Hcep0>qg3FE;uVmb5&DkI7+q~Kf)Z6=<#c?cReNkn$WOh9j^;zMP$m7e8N=RbDWk)*Q!hEOW#RkZq(#ki9_H5W$ zC0rl(X}rnFa;kFG{c`@Hhh0@M53wo|Kc$4s*B|Y>+I6zOqM>3 ze$0H1(@c*0wHz~6j!QbqD}@J#eqAWb=IcPT=#r~Hc`|=(V?^1BxAuEJ*0p|hcpm&Y zpLd&nD5;NoL*}J$apGxT*6U*zRSxpLOUt~pHFPxAS2*#KP_N_^@+$LEB>KFK`pFs5Gb)oz1l+z0#~!KlIhc-c z8@Q&bOvdQBma51w$z|t(&oA$1W;)Ns+!M+SRe3HW(yMK6ufyA`jXwE6{`v9G+UnL9 zX7r@rrF3U``TKqRy(w3Sk}fBtjL@i}`?0yTdBTw&H{LZCeLv>5 z#pcYE9cRoyLdZ$tyS{9-$3=&`Yu*lr| zL5r2g-F(e{PbnAXFZfm4ZgiQipa1sioRE!&K$fP1_H#+5D%~yqXV;>h!b4>hw{Eq6 zgH>M)w}+$^yPkW0Td(r>>U&(g-dT5*TCIFqiEZmuhbL0(GFh!}m)tk}aI3^WynXMb zy&8wTHWP%HE`;o!{^)Xo>V8$U!IKR#(-ciPJw4s7a4r9dsR!-?mpbtR*(1K#fTbJF z8Ebv^2Xb#xH1YnHX2;D^bJ_&<@8XrVaXJ;SsKm9b;LkPDG2)5ISITp%t`@yMLhXyL zc^7UqqTi8M!Q;a1CS|s+qTq>Z-j=h3wjJKa-p8YNr5*6x@F+5y9no)k=1k;*l*NWE$F-ZjHc}?9^^ELI_+l2kYTMoL>aN4d5_dPLe2agd zy3Wk(R=@F?&!(#z-)UCgfe0I4-7?s{VZt(Riy=|TmNQqOCI9(D9JI@=Z^)F3doMZoN=lu57Lb5B@<6|o5U+u_4?Z_7Alv!bqS?FuVv6+GF?5j*sjYyF4v ziVxZ>})Cvej42v(DEhnZrjgHa74Vr-{=#6DR+}ha`?(i{uSZ zNi2pfcD=rvEA;&KOSWG+Mb=%>H>OMvuxZLCS>6?^9oT=(@Szm}1`MkOwF*F~x{ znVpZL@O4?ab5ROcp|h$~ntE&2C)@olJB_gB z95&tOjna0744hHyB}$Z~^R+E}p5GkP++aHp(gQn3PFR0@^Rxb$rmgl95uS7F-yE~r zn*7p>uuk?+*z~20p(mR!0)@I zS{tg~9<04{swH;csQ0>~5>0`y-tYb4Qp)x|tZj#OHfOnr2i+SeSMw7miZw)+OM3O? zyfRHVIty29?tjBf^*immU-01Q_u|{FyKLj~Ly{gD=ay!Fd~CEQ;lLTwR>dbWmX^cW z*@O?~Z``}xB%LGgiQQW(t`&nNWXBK+U6TwSsanLcHsMiKbECgjQRdkC{hBD_@R8V{ za~rpBerVo2DmY}#G@Z&4+4fVdu*+dAH-4WxVaQJbZaG@ycdypetXs{dRKaFAwifm9 z>8;m?X6;pS)C;SAq^OGd962GaKK_xPk4s!kfbjE_^94VqCaZ%t*;K?=AEbs;lP%-l zwx3pU%(dufd;6-x%i~49_;=2RJ|+Vbybt%u@^qQ|mMD9M zZ*6_~s)9^dSGY&bnC)on(bd_CdlQ~|G)BfoQ`K6oJA5ses*a76yC|Xde7#yhayB<* z$Le3XW;QM;#m1{d&-Y5l_<}>Sg7)n^aNN-0mDiQhyLU*j3coDoJT=YVzg0T_WWGJu z_Ml5|BR=}w#JzJTZ&b?M?ie_S%4EyQw$FdIJ-W_;!v_PyL(~^)(S72|#hT5tdy+^m z+HRJLudbayz53R!cy-$u3F+DAB|dd$Ve=ivZzq4@)5Y1xd>bP#3!hi*so=yKFb&VX zc_SD$)unp~=e$O@LQY0%vw&gY{`&1k6WSR`XUy;#r5_ji&YAd)oS`be3Pu(~DDD@(1GTYVYsWqjtQxS9n{kkKc2aiY}g-cd~2>Dy(=`mR-(rL%URe?RIX>zrUY5qVQ^=uCGpD z^O4vCkp7kY{)iu8T#eQ-g4?<7S7&^yIZ%79*OF82n%kJvt8dZ^`INf-`%Nz*rwet) zgSDyxpQ}BcNP;mZ7alp}m0YMjthm3mXV=90g3Xe#mKt5xgnCSd48u8INaQBMO`Bq; zQtZS!nnP+FRn;=u%bhYSPw7jYY70Dd%-hoYdz??k%zi>~Vt4bgYULQ;%=YiWHG}Jf zgmwk($;la0v+KCJ@5}4qifSZxTgkp!!IAgBkdu!0J!NLO;C&;?R|G!tPO(qLg>a3X z+qX(dwdkTi#_?Z-Gm^ev&DbV)D3^7!v=_^7(9h(oX1~XB^b&`C-NA>CwtNheoqnS` z{1P>13(eufZ8_h1Wgg5u=ZRWn8vbl5{g!qB>63xq(_fr}v1>I+u2LUm;{vbm~wht-vz43p|qxTSd$1;;V>t}Uqeh?fOj!sFlZC21VHpOF2np649%0lD;4 zDHf5oag_KI(K7w{&^Kl-dn+G@v6ml^)t14$w7q_FbKaL93KByZpPjVRJL@@o-OG)0 z@m4+M{Qb%`n!G0K=pumC10Q)T>P=l>E zMEZr`~J5*rnO)cX&&^&i$O2n7n1Kp!1VGA?}u@W$-bdh^BC}o3HMyGOu12cUBpi z_b1EitZg~!^Sdgyu`(3iwav%QK}-5=)yCJsN1AvhhAnN{kK&sKSAT`C>l+?E5tz3- z`tY$kE~!d)`mgb|_TG>#{o$+f=B?g+ySY6DZ(Sd>3bEuI{+KRh{j2`XuP-CP*_v`6 zDJBjtPmC%Yami&*B5hC>!M=dX8L z)#q$<_r4->Ag66>72mhD&m#!dSG8+$t8-(+_z5%IVIO#egnYJ$wRJ)5up5g@Nz%jA zH&*Cq;l1$3fTWqsfXn4NLKy{q`GJy`d$_~WrW(-9ng&}m%dWGA8+jUP#SeA9MkjUE*tHvQ-*8y`C^9W z>!d&BR{c1nR(en@Zw9^KeY0n9|CuiKP_LFv^L3{R9L4&dzKib;9-AoJQ|${q7YQ2( zUGqX@!X<6Sqv8V-fx8hqc=|js(0a%5%OY@>i~soT;)+e~NnS^dlWp^_-@Jdv+$J$- za^onz*kEgu52Vsuh^Gn3{~|1>quj)QI7TmQ_QvH3^K9z_Vm7a$_O~^09clP+s(ajG zb9iuNX?N>k-pQcj(^%#mnfIfH+SRR;+9o&z%_8QRhOUt{!bw*~?=RSYwJ+ovnfB=t zYO>4nyEZS}IGST^sk^#3*Ou+}MA__nxzPALk*Y_x$U5v^3nNvh_2O=yfz7QRJHOIP zHIi68^x<83dbUqzsm7@dqkeGT{OtS;nQ0q)u?_1RZBv!gwL~G0q?E3;$NXA`4MzR$ z#*BY{|3)HZW@P^vmh0P$d$tWW%W9rBz7|(~>QQl!M3@x3C6i-|+LK+H^({RvzSfz^ zf;&RbpL3>yR2J$P+j(n#b@>f&4gV|2{0-fEpVaY{uKgn4vi5S~qk5Abfy93KJfm3u z=r`*-)HbPc?>Kn<-3_}JuU(E>Rt$x`hu#ksNSG?9%01`rJ^StKi5(Wc0z0S9`+R9G z(US;2YBFSZ!kjaQ@8TLORFRikPV<50`0kk>%}2Ksp7t}U(=*%h{cdk zbGOaxB5x5s(Wm5oAO8m}yJ>CPp)>Nk&$d}V?X#@*+f-D5DsTEhIz4()q!Lv0NL%`!ObcIwbPO@x;%mn4TkOgN+zCB92+H#LVMm(w;IlV z`ncxYxX*l;`3v~PRy~v?m!;gvG$WK{Ce*?IS$!Al^<7(cK!H>_)~fFoQ+pcpH7`UL zyz(t#>Xn_gc90HzAZ`L}N6X;~HYc~4@TtaV@G0NXYYopO$ll^9``l?2`wdPMAyg0F zYT^IV9d0#rB`*1w?+;gPhzI3dxQz7_Fw!d{>eQWG} z8_7D^4bmd+j^_kqc;EGIKMiZd4*Ckl<$ZTT>7<|KL!H-M&4K4^{%oDdTI+1uTmSWD zeni!L?9fPW{3{ca`fB$I@yZB;+J2wI`}eb&D2nS|a}yBX!ko2c;u;4z^$=Nt)i^TU zP%i%4=S!mGXx6dNRiTaHlXGal$M5%Mt{PJl6&JqE*~}~cYx3tVo}&p6Y`O-0ndR2e zOw7Cbu_#aH?7WkhKCu)>gSOguj-q?^MLptvx07W(SaNT0RLL;&Y^u}@zQW7w@JLM% zHP@!MPClBiMnxpO?1yWpUHd}q)v|+Lq4v%x>*{eS-n=%O#zG`3aW#nWm`6%tgEK}j z;Dc|B0h@ANgkNrb8SLm-1e0|#>>7trNZpUxZAx|J$3kuo1P^Wtmf0QN6esuXhi-%^ z??w)OUpXFBVV!O*IbK=UmsCIcU@%52tI}Yh{S#N+58<#+>px|1q(mP62v^?AcXRa) z9oVn3tvcQABW3(e;M_<4XS+BK95_6BihP)-X_H{>v2)6jyNEy51I@ z-5hu4(Dxs@xLaIok@n)a>&MHv_PFS6t3F@u8Hjo968aA2J)bcl=~F+}ZY-xg;U^2x=Q%DcRt zk6Q1s@FruGMUQ&BeYPtqTJ;d#KG*&0?ZpE_z zJlOL{u(v-(WFR$XZ~b6(495=apoNm;Rlk#o8srXK$Ft^$4O{Pe8>aRh40A9*8E~~f zGwZSH61{e?v%ev>75Cdgj2z|QVX?nIM5#WioJIJ;AxzTh%vATAuI;VQjA2}hnnuEn zmyda_u*`hbYkRdt`JQqDb??!2hIe;4sPBrDus4%(Yf<=iv-er|gqokBU?Wy{x6^52 zy!D9|dlRXR4cL}|7BA%vS+A=$hb)ZG>T-mv&w~7~%yKc`bgw&_YggLLU%u}K+uECf zdrHf;3>B%poH}u1U0#hu@%(CE`<*9SVmI~o@V=f!_(`aN78&P?&BxxRGD*2!?g~Ds z6C^HQUhpAUoKxg$&CWn_nR0+_vVly@zA-MXuQ0K}WtHsX0>+2eo|?k}B<*g6!6S_x^}DSv2jR>>*iB`WJ8)0}j2C zN5Ze*;jk;~;)tXbt7tU*-;Rkm?25`{^vVXwgq00~w`W$=rGP6<=yUoz zIoge3e|fb2(P(g`4&fgrgGXE;1su5fh5WZNqZ}E(e9(9bX+_5bH0@F!dX+zeA)sOK z;_V71?QW^%1#v58OhjYBuS@@1j)*3bR`N)gA$0W~I2uILz`j zCIjVP(J`5TUv4YNWa0|@0qzMw!z)HermV05WD1(Ne0u`zSSfxA4zohxD0uwJy5OFX zMQOo*HIo9~rd%#U3K_RTG8D>+ElWXTz||Z7)foyJ-2JkGhXYsY{96vlpMoa*A1V`9 zjGBTbffoY*txT)C(&|w#XmDNKvT_*A3Ij(0_6P^BD2NBw;w`UC06%(ZYTWQi^a5V#EMP+dB+Ay{%74W;AWu}?O}1af7*lTkP8E@ zEcl1X;8F0)bph;HB4xQ`a6k^rBnYk|#4LBw7#t3~>bY!yI8mVK%M=L|B$Kh!E&NOd RT;L^PG^e8C*4+l2{~yR=Dlq^6 delta 20980 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 T2A#Fwi4!7+g2GNC9ghDGD|4t~