From 324dad549fa896aa6f0c8fba242400f12033fdd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ilkka=20Sepp=C3=A4l=C3=A4?= Date: Mon, 24 Mar 2025 19:16:41 +0200 Subject: [PATCH] docs: update acyclic visitor documentation --- acyclic-visitor/README.md | 9 +++++---- .../etc/acyclic-visitor-sequence-diagram.png | Bin 0 -> 28512 bytes 2 files changed, 5 insertions(+), 4 deletions(-) create mode 100644 acyclic-visitor/etc/acyclic-visitor-sequence-diagram.png diff --git a/acyclic-visitor/README.md b/acyclic-visitor/README.md index eef18bbed..fb57d5681 100644 --- a/acyclic-visitor/README.md +++ b/acyclic-visitor/README.md @@ -29,6 +29,11 @@ In plain words > The Acyclic Visitor pattern allows new functions to be added to existing class hierarchies without affecting those hierarchies, and without creating the dependency cycles that are inherent to the GangOfFour VisitorPattern. +Sequence diagram + +![Acyclic Visitor sequence diagram](./etc/acyclic-visitor-sequence-diagram.png "Acyclic Visitor sequence diagram") + + ## Programmatic Example of Acyclic Visitor in Java In this Java example, we have a hierarchy of modem classes illustrating the Acyclic Visitor pattern. The modems in this hierarchy need to be visited by an external algorithm based on filtering criteria (is it Unix or DOS compatible modem). @@ -138,10 +143,6 @@ Program output: 09:15:11.127 [main] INFO com.iluwatar.acyclicvisitor.ConfigureForUnixVisitor -- Zoom modem used with Unix configurator. ``` -## Acyclic Visitor Pattern Class Diagram - -![Acyclic Visitor](./etc/acyclic-visitor.png "Acyclic Visitor") - ## When to Use the Acyclic Visitor Pattern in Java This pattern can be used: diff --git a/acyclic-visitor/etc/acyclic-visitor-sequence-diagram.png b/acyclic-visitor/etc/acyclic-visitor-sequence-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..a3c2ba56b89f55f5f960174d40887bba8d27c7f2 GIT binary patch literal 28512 zcmeFZWmKHY(=Q5y1PdNQu;8vigL`n7-~@MPiR*-gF2Efu9i&Zs0|M+Xx6A90&-z z9}o}(z91kFI%l+~3BfB=Ep+58m6Q;e;LoTCNQig{PvB38@IQo58wBLPo)Hk>oZz1) zIf(yNn}hVH_K8}~lRwXhmXCyG6uW0|Cb~A7I_^43iUMX%4s0goPNo)YUJlNW1PDT2 z0`Nx%3wIL=F9&-^HvunUs=p`%;Lnf6>{Jwgk+|ClQ|TzFQb;!YNqYfR64a zUaXF8)PFPi!$-=(&CJ!t+1ZiBiK&x^yD$~iV@Lmf{vM~hjpcv!FK>8Lp~q4I6;~Szc+ZdgMcxSgMfo3P|MVlo{@D5dGMK+-`d2A@sv_t@ z?Ei{Q1f9re1qA^?3_(sxT+<72KNIDH=FjO~74*-a7kvmZF4;bQ%q#irb96VGWhm+c zRPhtJnDsd_EDw8%j7#A2P2z}5LIH`<*Uge^aM+S>R>_mk2M~~-KEJ7aJq#JVTjFwa z)Lz+Ly^sh*K&C)IL={6o!ujhls07tqh9FY*@3;S|_<%-{w~hM0m6}onhD9L0RHOV~ zIUu6KDWCig<-fA~KbF!u9mcnti@ih;!L=BL4RUR5Z9;NNHrMJ6)NN1gQWm-So;u#7 zGaJ=8;8Md*ZQ2@*X6-&h6?dbZgStWn1CR1Ry*eW_}K_!Yh znIcxOCp3P4v)Ox%Ba4i9a;6C> z13SnZ|JW$1<#1uT_Ol~>t1o6|c5BBYfyG%RpSx~9IZ_SYvC)#jL(Mp~za+jh)c9z; z!fv*057SWlG*qk{Il(U=rZsFFW6bcg<3g(@#bI-BH%F%q4E2QMW1!XVtXA2DCrSF= zksGUCP>b&^tPYgP8CP)SkjF7i4SoM$&jml3JS^ztjC=+Y&)RUjKx*~-V0}<-YZy1P?Z7JjQDaO6??ROe{ zG-h{?vBn#%g3PU~^f8j&3jt^B1(*3;~ZF?6%Y9@dke(FPhk5X}+ZYC0VG%~tH)0WZ@)r;8ajoc`BTsU3|v z5ryAXrt->hN+c+ZYYPEJ9nbBjjIj0>-?#8N#E-$;9=Bw(m#;Hnq5keqT}>S(Cu0uj zOMz*ovCbdZA?CC-H~`NcrM&`llh(v2^BPV3iXLoHV^Qq0H+a zjJP?;s2`0oPgj7L{a>>$l`|@KqH9p2YU2HF zu(7*_YCkE^GD`dm$zG$%g9Ps+dk3*)wa6QZdW4jxkr76}3k?*L$G84Ptsmo`+f=`^ z$W2LT%k+Nn?-7(2O1n9y2z9*GNU?nNCJ8g>JM= z-WflnLhk)bTA}y8&~;;6Rex*lfmeh`ZbO3~AMWnlBo0R}UaEPUcn91dfUO6JQ-!?^ z4VYA@aE>v8cJikOzW3YhM8ix}wX@~q! z!A6>cuK5L2ri7guWwbbEksfrfeFZo7DaNwNu$sb~E%~r|RmJN}$X{G7wgC6qs+*0P zK$=y&8=u6a;BDJyK0=AZz3@;d;t-G)JGKrI&lFtf;t?P;J5T;pm)f1IUDmIm=XZa( z!qPNM|8#b%EC%Z!8L(p4?tITMaOzVP(D8(TmOHPI4DkS#>UCFaC|RT%+y=GkcmlGF zR`AH9gO7g^KJ9RZ3h8Bu=oS&F&tiIbsIM%zoQC*k0`xqsmhyMBo%8718(JTFVr8(qo!Y}psL0L( zZ^5$@N}N$UN`ESJ3{79X6wUEaF*-y1RLz<5o!m*9c;sd}Jh_y5GfFYzsNk0_TtQ+P zmEl+6CGy)RnqH}6F_UlZP|Z(y;`%*QI>kG!2AWGl;%4gK2Y#~SPB0Sy9jkEjSB6Iv5Uqq zCcHrAOce7>?&~=?D{v53wnWOAe(b_mmO{VQyzXU1p`j5zd2$w&6>$(mvCNri8n8{f zVDVc^n5MV}c*>PqULaBA*RK9r^qlYP+q77C)vcqCO{ZE1WNgb$x2}BX&>eQTcqfwz z9ZVDZ@%G+fqAWbAsw|G+Z2IRLt%Q$arf3i!9m3gsW3Dq57m9N3nTd4Ks<_r(7G?V$ zG{tuP!FTFAu(!tuU>E?qyl6tA3srTPj*VmuDMyqp$~1`*N#K~NB6;0iZEVP}DFe_rif#xI4KV;8|-t2w$FctUeJ<_1${$9;m2S%XV&X65U?_bA|kWJ9)Ox^A4}){hF73xSQ+i@u^SflpzdZog@?VCHE8+q>Kwk)+4Ur z{(;JX+2q@%Y6Pe0u@L;-Ppdhj4=?6>wQhM&YHTz|BKaUHS+T- ztCYOVXvN+BajA>|be6E! zwmF*iE24e{H1H)abfa$O*%m)|wax9PW)rasaE|$|@F*wQwKryIaNs(~gx|2yo=HZu zy2gF6O-z$?=eP^oF@sICvz_M4NJHm=b+GGS)fC8qcHJXV2Ge%6(~w@13)xOIZWzT*CFbNfJbnlkZq6kF&d_^aRhOl3%I0R5h? z1o;4A6gAVD@-?HK@CFAVwH{{j9&t{75NHAq$-4?zOx@y*W6;#TVt|WFPWf z*jeiRY>{2ZI^RG7kLBx?y&iPWne8spa(sX_>(vIe%9>;kp0h0OTi#A7$6M>%+xEB4tTC+|$AQ17*!4TW&DlbHE~!G+pL0Xz zMjGOGPplHLLMD!t$48IVmEGPa4LtO))NFY6`@1@lzc~srUl~xJtySoVE|$1FPq7-b zX|0bp3CVQTZEuvgKbxfj!e&5+nyqcN)+j_BKsTGrY_l!SXs!dmM(bH&0Sm_@O`2!3 zwX@*-yR_vEpT?BB=na>?yM`snvKOB*QN?n^QSBGLW)1_~3q5}7hkfe2>T0!ti>~gD zVz%DG&L#=OiV=N$Gg?6Y12br%Z}j;qrq;$i7V^<-+V0lNB)VCCPp@V0QcS!{Tr61U&o3V(e2uDzW2px<&{9>8@Z*R3*`(zhWR)pVBV4r{uLZCI5Lg&RZ5Xs2IrMIP?fWP~;Mz$z** zNl!lD>#>IS&dOhk@{<`^yJP9tG24eSO4NK_+Yfq8^W`6iL<43#pIFRXW*&@na&k=` zrF^G74G{HX?R@#{{@_dVQG6Z@#rHO3f3h*3sE6-&mSD9Xz5aB5Cn?d;S_`Y^3xby2 zeaTTGJ1>K)h2~{Q>D=4d&lBgd*H-aks>o>oYx_E*y83!$Y3upc@O7TS_#V*fzR5Q~ z!AA~^hE0x4(u0HLlBgF~fbSaV^1VvvAA#IQzjgGWeTj>$^>O2?=zDDvKWAvy8Zmnq zxxXua((BjMAsG1ymcqeeW|YeT0a0f-mV}08UT8iS@-P7GEWH^OsjuS3h8_%ixS#ox zReX91aD+}r7jzkDpx7^d?@%2BN~iU%^}6E|aI*=yYVr|{m5C7(y(x?#KP9mkWE5;j zuJd#-%P)C5?tZygkSbhs&0kY!dZJDy zr=StqJpLJw+F-@UKG@!5-X_3Wk9?y(b)`P905YvKc%A)8P$9c9$S0*}sZzJn{f$kj zTSUXN1o>=FCAW1lF43J2)Hpn31kuCK>(Zks=KE1K2$dIW8b~`OnQgLCsNJF@Q7iIC zY<#x+9N8kICa@H=Q=VqZF&HaF!Yz`kPk~rl6C6!m9??&=F?#n}5192EZS6LJY5ZB1 zMykDZ*V-KW)}P}r+S3~2iojr39jJ)*kEApdqTw}=I7~-vWwo8d*@;<`nB-9q=tKNl zY5Y2b4z-}@yj9tW*`*<+akDgIF?*0!1bCr5aD2scH_Bvw`e1!{0g7)Go~r-CE4LUR zT`}Lb+STYy-ev_$8ztijXtV}5JWneQ!S{ADO)+NI{g84~9E_`|*OT>h_!BIPtU6`i zY5>9@sPE5gKv$*+Zn9f2s+>0s{g81Pl3qKZYW`zQ9$%(=?$lL(8dMnMQ-VbW{F;}xR&01<^s1(buw9QbXXlGxM=CG-2St%LMZTs85zr7~IyzP8$_R65 z_=8=|bRAd>LWTILzib+Yx|d!U5b6$I^^^)P6dAH{emC3xH1T!+%&{a`_UGznB5Bv@ zGPnKQ2~S6ALTnp)05PS(qp=xIt$0BjlVyt-OHB>Iwky9}dk2;vn8UQe zYo2aivO%V&=1<_asT>mjripR40CkitI-fl_kw8*IyCUvec85d0(NusSxGO9R2Ka60 z`9_<-X)HI;wtw6QYQ4rSp2=B~7!gYUKsW#DTb*62vghG1Uh+1ovZ%PRwHe~F!8Hv! zU}DXx%~pKX{9D_0J-bcj=mi)@`eB1;0IP}$hGMTOJCJF!a?uwBywMb1JGu?97|AVu zg{#5j<9nmbF)RaE%%67SIaL`<{(Y{zTNf_Gc@5y743ofAQNHVDqrTf&;ygxj3XL_Y zvzYO+bx^m{Y(AckuyEao#g}TQW~wvmxPANTpoR6x_r2zm{HUk4Sp@E)M*&gie92-B zBYq~A;2bKhq(s5w%0bL3jfsX3MuVyxE`s*&YdGHagZy%Y?Uau=(7QbY~w2eP~ z*1!?n!G8Rq-ct)abngNZZkw&{`neT7D1dw`M&TtqrLIH3KztAV84{qXiBLjNV0P9O zC*Xt^>qqeF{sY!v*g&qeAoRJ8M&lvzD~YQHTw(zOrB4w-XNzC#D%d?`HnPd1Va|jy zPm@B}Sluc%-Zf46iqWo0BaGp zHR`E#)L1o~W;%nCM(If0=!9Qw5Y0s;1|M_(yNpbs6%9dyk;9VP{1FlZQUX=t76R@D z=wZXVt5S}M>wt zAk`Z&u3pfN(-fB=Bhzxl8e}r25=pu#`C=sbPgu01Z+uz|$>(gk!w?s6V-lmk^aNB( z@qAdT9Z0HFO1Y!_q5y2C30ieED0&X>c4L(;m+8 zQ^ba6He>uUJi$m@5asTVaV7z_-)u>Hhz83yg6t$mQ#EvenVQPh(?@(ZI@aX^4Nv)c z`$^d63-YnC_=us9+}xaG?;oy}dWohNBgNf#Jfuy2Wn+0nk!n+h7Vo5YoMi|n2MSHH zQYAOO56QcfY)p@FipF*5J?)+{Hk|O0R61CW?iE0$SY}813HmOzMLP8Yohi1}#D%R= zuXaC2RSusw;l2!6OaD2rN z8RMu*wrdpG3fUxZY%NGg)Z6h-(>I_UU^*Kvy?J(rS{qU*y<2Y99fy;0Xq=Vn>qxGE zDn@aKI;2D9Wi&hYyaoePkT~*J6?3v4vwV2XM{8>h{?LJ+!#p49rjKZLAmo_4EV+$1 zhmP+ZL(bOCH~Q4p-f0W^d8!R--&>Drt#Fl&JtuLRdgr*{ZIwQXG4W8DY`l%-k@f50 zF2x+13m~@@d$3U2sh$AcACygG2{4C{7r?H%{fz0fjl zndX$<<2g#t&(Q6ueI*_}Faq!X&+%~9t4(3Z+JrSY8` zbvg*vwcju3_^L&qEx=8%ehBk@WTRr@OXQFWhb7^q4$$P;BwmqQXdc>N6p!ALrQ>30 zxMGHueL&*Na*&}nZ-wd4U-b|a7sHmCjJ=WY`pFe9;P)%E5~^Mm~d`&ImS_VbunZ6E7y)JDzxR-78E2(NQAA_^DW4GO#|C^ zgaBB;?F4g=e}tI8Ki=l4vIjD)Hu5@tpUP}`=FwUyE*-gfGP2XYj=T0&+%R9pr!q^_ zE5GP;NAzaf7R2GXOAMa%{c@E8{CP<}s1%LTDHGlFtBmZ2Ns+oxxsGEO-&JWe_hTe>Ruh zSrhZB^3Cg`$(2tL%?HsMXdcCt;tQ2_I@X)`Hm~!c0#b)>mRi+kwtr=nZFO3+sPH*8 z)V0&w5-~3Uc5WtHU z_q;>Us)b1Yx4sD1#>2O;qUf}SB&?pYY^+jWzv;$i|?Gww!HK7$H_i^8>HVN22A+UdK9egEEdws zsL>i^3F>XkfBx=9xmPc|5zrhXnf&!Rgp=$2z|#vzadK@;`pe(-5dUNxSuG^M7nA_M zFKln_bQWC70@a~&PN_$t{4#jEZw}M2H}w@ly~j1mKqEWAelIT#m(`CXb6c5vYiuOZ zN8gFqN8^D#krw)E(>^)4mP|PvT*@?%UcUtn{3HHD1J*r^cUL>UEFPkjhn*feD?aZG z-Xa#dWOEoDMNC)ly-e%j9McKmmU62c)ED0Hu+P#zCv=Bkv zo}#WJDVT#H$6&6Zq1!5;3d{RyzQQRmo*Db`@NYna91k{4yXHy$n6zj_XYepRK8@;M zC6(Lm^Wo^$6n0|fN>X`h(^d`!u2KNw#z zD!s2oe^2P-MI2U>u&1=9_3HSBnJ=?o$o*=3oD=u~W6~yy!Qs5f!FAZ6#5eWgE(8TU z=AH(yHxC|e;hAE$b%H3T6UgG9A@ENOMZ02iFRs;;H|>xAM(4UKdXejiwDmCko|tC< zWN^mI+}k!az`H1Lo}$H{+j05g7MFVbB49Z(9_GYpSG2gK+5FbYY2|b})H8GD#mJ6i z^A*p5h7(X&kB1lOYe__6aN5YpYmLZQfBFGTzVp{^drY6Tzq~z^tal9H-fC&)VV(Nf z9P#ZbXsO86g^zPpsq^f-&IM|;6~JL&YLc9Gq}+qqs+Xm?K26X4W|}4Q=%rrhO##s$ z_=wC&NYA3{f*b>Xl`b0|_dV+hC#Ub^c(eI?Mn_N+b-2X+8SbI`9bKY#I;`6(vkdOO zIJFNu^AM=syqVSc)Pil?QTf9g8tLw6WfraHxcMsByDxGRB5O0F$Ej$?d8sibVZ$Xbd2D92Prz@1uF68rD6US-Q0KhS@RxhV0X3xLdd zP29KM0;|kdU;d1b_fM2>Ok*XnbW4c+-!xJ6zcYKFI!@l^~6(g_gNexAuBeKB~U`C>4s;cOw zS%9xU{4Vl{r*QBM>Q!*y9_&!>SOLsvb%XEh$7#HJ^E>5!xx{1+$JuYm5aXmo2U11H zY9QWQ?v)hHO|dM9G~8nT)R^w7^4Nu;+UUU{UGoPeZ9-t+1FE~Vde*O*&Idh~I{9+w z78W>~vuu3wB@zf(V1qXXb_ZUhl4l=SRzX@V-3#pDCPwB=5ZlT`@>?<>AgRP~i!QK3 zHG+AQm$cnC9mZ8Q6dK`_q;|a|Lz?l1N7HyFmaQf6Q2_yq9lCoVY%i}RA3?|Ya?mhe z7Ie!yl7T(E>nU^Xl$ryLV6V?-57Yutc!X4+e4!_-7*kSzqH~(WcDwRnC4F5%`DV8V zlfV)a=`}nC3SHtBHLD81M%UJe3v3l7pDQhXjFBpTqsx;;qsj5RuU2kfg-2o2;ekJ) z+Pbe)$c@nq zAaPST^+T5K0=Jvpd~J5vC2;1UeMZ9BIBmt{!d1a3b9BA|5LB@RoI!xCp3VnDd*zl0Dq%>m0vLSSNej<>tGT7wXfy9(Zzd9^rKu?k1cEic7z3rj zNubn1U1NcK*?TW1@X)nwMR`U%?S^zzuTq&&nhB_%QHPz?yCS8sbyM!)iN38WW#RbtW^4RO(GsF9c}Kw&#paQ!)`90 zdFskkU?*N`Z$?`3e4#|FrExkSgX`>OG>I2#C!7x!9W`oKf5(g#0t}zWFk|QHjYd$m>mXiUPyqtwY6w=RLFDAF+&MdTdLH>fYO?C zVyGIpl@A=M#2*M}0!(w=?&y=*OX))ppj$tjqj|IrM{DpRS^Xs!ve#~sDnMf>GEQTD zHxn4T!JyV04Ht+Wf6G}V| zM^9+V{P?(=@Aq$7*znFzZ!UJ-A>C{v?Q-!bQiIs$2GLYSKa=-hf!b#ap(I5zXPZn;@4!*}1hs<{_2+Raf z$tGG-p*D-`jl(;ZrSa*%QqMMa{m%Qs*)$pGTs1Gf_{i=F1T&kP9D%|cnB?A zO^z=wT?_&9xr1ICuK~D)Pu+q&f+roSoKGuT-?FT!h$&ruzQRAgJd)iz8J!Yk^iH)d z1>cht9W>wLcQ4F$QdiK^S*Zt$-JyBG%8PpL!1s!K2}sbb7S*ylQm2QQdLtjEU%j$n zVXm`2%*&TMoa6pZq| zLd6O?NNfUjlZ1rjzu)nn9DIrDcuYl;PKp}vIx{1yktdfWgQsuxJ7IjG&*tZs=!!*d zeoxam^&!i5GrTYU#3(#RKJ7n}6U655#H0!xCe+{jSC%6D2B*M<-|GKE{7+)W|48HC z4A%c^y3waJpQct5MOW>AcN0|^P^2xw%*?D&rriD~-Bp$fo*si|lBi{hMv;LxID=j4 z14H;YfX(`j=pT}Mn!vDAt5!8zY(zh2?I%*=M$|TtFt!8n#G0}_`N0A&!_pFQyf>hl zg}?~Ozs*p*cY*XHpL1zf%yCo^K@Kl8>u!4zGKXJunsY!UUo#cCxz$>DoCuUwQ>B~u z`&;u3p#EddVjyM-+>NUz)e$4|xiiz#V<2ipV+m?%+AWPO-=J&$YblEf!7b`l@px|H zq(HqqRCq#5U7#)t`MFO ztlk1-FyKb^dK(j>ZrPLTWNz82VfXhg70ZLy<0*YP|0Arwvy1Dg0>k9XHiyawK3MdX zUskF(>@Z*C_JaTH_|JG#}hE8Fuf^blyo- z>}9ZLNfzcD9LZc~W6aM|c?kYhY z34UxWA{Vi;RwSD@`%O{Rz~eT5k4pgVIZUCE(2M_vFOVvafD0;RRrzth?ea+1 zc8`5JsA?{tX+S3|;+B^FS!)k8X`p7-u1t6kxoUnsZ>HK{7Vp_6c*?aS`r%8|t-XB# z!_?(yYExI1+nymda%_eEdnN^?)PaG)Pq5wAyw?|(#6qf$ty`3gtQCiEb31m5SFhoz zv7C1Ic&P$DK`aI>RPc=N)ISQq0UwV0rzm=k%Q7da;PCsNfIGi|v*t}>K!47Pj21o% zc@(k3UiHz~w>LAC^z=9SL2k_1>52G5TfOKQk-v5Mfv2@yuaS{ za^kPrpOz#Fd)ln|Y?tCNEP}hAcrAbfmPER!h>awH-h-Lqlov172m4eyre6#$)om(NjgS?{8Bs53eM0(YlZ}JK&a1K~KnNED)<^=#hi5MM1y<0? z@gfgq!Ez;5^>_(x?V!2Uq!bw|-4a$ZCnANxfpr<*ck_gFB2s#e4;CN@9#iy}ST9 zvBIygSP_s5KAqk#&!JqDJ{OtSEYYq{QdVY`?r5MQr%C%wGdS1gLn)_sqn-Udem;Xi zJ?ic^Xfm_Dhd$>-`XUQ&4~HVn`??I*$&0foFbG*|dIde~ol1xKa~bORPl z2lufI+%JaJYdtH3yrG>xHh{BFt@wfCbwo(BK4n2U|9Y zqv*qZaYIt3@6bx^L$$Dh%Q~amZQ`#r#T!^37keiqm(?i9FZ7UY#@Ii%-gZ`^#eJ8; zEXoZn6EM~6Vn6+*Fu2TO^JC$+wp*~Ny?PHPkIy$eT|jI0x6#ZNmSbOZNlR7ESB@g;ku7DuO#WH^0SthqT??(yg zj1VQ*MZETyBO2Z$ZG#5!HbBV>Jpr%_D+@I1-mK2Q2EsU+oM zheXXP;W(^^#o{B@k$#71Lnb}wn5F;E(HcaI_96T$E;hLl{hmr_(4IThxNb9rR?K{P9x7&&c$zjkN5v z%oA(=UV#3tOFq~e6|(-BeJFVKxo*P}A88pV>bCA`C8=x5F^Z4dNWDz_eB+F3(p`d)QhBP79yK#Oy~i1_u^$}jVEBY z6~_t-W?~esAW-viZ{L#8v-S8BR8#EuH$+$;d$(%@)n06-&)wO|{c;}j_jy`De=t|y zD0xiGV{5(;UuI#G7=6>nVwO7&R_G+otp(#M5Em(?+oT+hs)g>8ldd+Y9cA&7H{6sP zwvI@bHfjQvdAFOZ26D71$+Y3?w03|alxcTB0|k|M*sN zZ*}+P{AuHf2%cMuaz|qKzP!3Dj{``51U*6Zzz>qk-wtA`n*4|x!bT|!4=0 z@{hGhU$xGVb{2R(q$(Kr7d-!Su{*#;F!hdMIHt)ynf>O>XRPVuaHhazp{0g|iqGtl z6!_zL?*vDH$%nq*GCd?2BTC~r*f85%^>_j{79MSSOs0(QPoW2;@EwSA7aWqe`Zb0{ zkK0L`RvzYws1Svf?{I^bhMOK?&qMKOg8Zg=EY{m zyP~oO#uNh>J8<>-{ecR!>{aVoQQ6RKK@6K-g~Hu^a)>tQtOtTtq5rH6WkyHIPp zgc{yQ_Xp3Eqf%`u9;G3Ov8RY*K#Gj&ewxW%ARf99{H$TIT(A9I8lN4L06hbw*I|Jl z3`%a7SleMYupTc6U#M{VSlMv}u~lo6ygvWn;-ckJ)5dZ9Ybq^+Y5SHQ^NbJ~Idp*| zz`YOBu-U4ztK89OZyEJ7HE>0nZgYw*|o%f6EMk@jiHdt zmMBW6(vVzzEB~eldy05kQ_tJIU9zxY0F!mnk607=D>Viy48Hv-o_Inkwe1p;^+P8d zrUEqfq>p--*=ub|OCnxCjs>m!#=RU-mu0znhg{T5Zcr8rygxTP4+d<;3(k=byF4|8DVZ&{+hndu=YFm$B>fxd&q9^VJ6}02BXu-)%?}1 zHfG1_*S8r8M<_>avn`UHyLoQw-fQ=;&u(muZpH5Y6N66eR%F^yK&S;Z1Crz=cR*%Y zp<|y17ARSqmES7ME9!ME{I=q2TD+-jKJnbMmS{)cRqZyz672HEY5VpzV+^drM%uQt zC~h}T2|GIQ3^n|UBHh7KBEinwBVX>(to)PJ3uusNg>RJW^E zGASZ;LPba(dzQofxUxrb3EJpep;wREVkvr3BDn!-T5MW`J;R2~N)r-@3Ya^CuCb=a z7M?gl7QXH82Wk!K0x#$7s>zhSww}cHKT#3d%IkNLA*C6SNXaDN_|ST!Z$nct_$%~~ z{mAbYEOdJw`Rz#05HNe);{c>)KAfyAb{iZK+IjWM$sD{qj={HOKe-*KrJU(tF45ON zlE8K_|7uX9lAC8~o$8NE8<&RsSCGni3zTM2ps9w_T(}1?F*D=?gjU1uIwtr*V}%0A z3?&%>iGAKSMqHM|H4VGiaYqj>hwBizTd{Ks#NQUHx9_`6`JAL`#Pw|pT9J2GB*JEU$6;&=i;c9PE#e(o1s0208xO~;jjWH_MuxMIL`X^&&k|D zq3Smt!XBYSDT!9URDXlw-hF@}9D6WHnbVEX#A|ez#=|O`DWQgEjI%xA`HAn{`(CaK+27`{gHy#+Sf7lFF(AXEjFRKV%|sxBgVkOl|TQ zSzckVFfWhlR{YYE1@QoXj_+Sb@6q?hQ9GfN_m-p2nGOL-)7Dnjv+Mv9O>FVTI&%EJ z>*lG~B_*N%j3*6u+8JsK(lwE8a`vUP)Vb*DlBkxE6JHLrW~m1kaQqS2RTcu(095G< zm>`TM14koup1yulSqNMRFt$w0z5GM7!$G=sl7Cy2BrHtD@ zIKbbUX$)7W>y~Q7Qp{o;;w#%-v0=^g9?sSdK-gMzQbeM_mpuU&_?!mb@ipkCG0>e zebla?NxDF1`Gd<`cN|$lq(vXhk4%PoJRW;NVe$)&x#o|H>#NiyJhsj=5a0F=3`ZVO zU5)t|f>j9-%ie0X*yRW;FrrNCEiK#;6?V zqY}ZVO8f#F7xXMzmf%ql3-A!3o9|Pe7s?eT=d$4Rks^5?oh(Lj7H>{+>%v*}Qz?o3 zrIC;N_o&`tdT<+}P?}2}?eV=-x~m;gxk6oy7=G1EpgOY;)W1|Q^21f@H&ar6Y{waa zfXz-c1<`zo#3&Q!qdLGNr$>N_3(_8zvv};En+5T;9&xfL7{0Mq(43vnM}ylv=(_-U zyCX4NkGr}6IVjO6i+v(ln^ivhXmil5*R!%Ek@c^^$T9_e>Lg}Nd{3y|U$?X>$7wp_ zSGI4~9RPP>uB(O_-aIY{(_esOZ3W57rB>t*tiKyF1gRnxrUuWaj7h|KNx)A7ypJHM ze-Dwr7Sf#-zPD$R;lcI4H|jsr|L+l#`v8JXYJWBb0Et;<_THq}4TR*`C-b zgSz2pXmI{_k-u2>p(4RSNHyUu84`A4Yk=_8=W}un#rrhQ;dkWRw+uv{S90oVYHA1P zaO|PKr~Tn%YrjSqOF;QjaCg%7#CGoFuy53!m|B#CB&z7U#ndj(w}TKJB0iJ6iorlX zEJ6$CJ~XRA>d`hDe@|({Y=74)#)s;I0zYbq%Dm#I%b>N+VH$XnXVce}X))6F^c0qzSe7Z`4MA>o>WZ0v7Q3;zjyz+g+uuKXta3jl zsSWq&@XXD!kp)F1Ry>+vLo1YJFm9XAkJ_n!O_eup@ z9AzzNl=jIn4<o*kX+-LC^dwU#GD4il9HDQ&yM8u-md$De; z$*a2mt(YoED>0+;GwTTEz9Ye#@NfQIJ&KvEydPiFN*M8R3BbfsADe0BB#RkBY+3|M$lx6=W zJk}-aRcVdGv{k9ZP-eh(Ej(?x2%fggTlQ6u-rz2eF+GdWVJVC*i#gUQS(i#zcQY2P zuyBL(=kp_G1FiM+RgJML+%7x<(c}W;M+37Etz5^D1tWzerJ*or#k`+kKgWT$QiHcs z@kYbQ+wZflz$NopGM~!jtNKU-&->KzT4}fRMeNR7wpd|UtuJ(a0tpLVI9$axEqf?hDnqble}(gQ4-o>$Mmo z2?tG!5+k=;Q^~2E{FhM}8|4}?bz9c!OZQj$M&4(JL_FRZ(Qe=4L;D!%D%dgwe%Jqj zUY}w9R(nKz&a^IPjJ!K4K1IJcEiP&P(KC_jV+%~<0t7|BaV|di zP5apj19MwFX2V^K;A+k?xY8eX&>re*I&cRElI2DZ4L5EE*{i!(Kcb})5PTJoQJlSm z1HaszTq*+E?j>dp9{TlOr4DNU zja7Cehi!MfuD7@-gGQ3io+bM1{+waWmb_e&G2(S7r}BG*yO|X`RZY%2WwNo1=u?cH zi)==}C1kd*7`8&wCZ%G9_r>^kwz~`bT6uY~d!1%70dYiin|*}Fer8bPo7jnsKFP}_ zb|lNuO!gEb7<=o(Q#Zc=lkzISf_H`c;cp|h_CsUW62|$;B4e-6thqjqTP~Y9h(H$6 zflUvc1&c-Mfdl%FGk6p&DPTS(;n5%q3-8J+43;BMeM2yUuN(Y` z7u%4pda(5ga6PQS(PBNB=T*WNfzkY{-74jQbE87rJWkV!JxW*FMqYPhHWNjl3^S?! zr@gNXi?aLn793h&K#*<$1p%c)N?N45RX{>%hK6B4LIg#+OOQ?}VF>94k&Z#6hi+kr za}WCbkI(z*z0Sw?J$#yLUwhws@3m{K_4};_EVwhxb5fLJNJNO8&L!bVny5^g&%6L? zr}%mPXA*3VA???8Q>CS|)$GA%Z^+cYr}hK;}jw5Kwi`aw>UhJytAY@I8< z(%rpfgbcO;Ne*$EJ>@jJd1EE}2Hd1sGl%BXKV`hu>3-(!oDUC2k+v}{bn$D2E8qZr zI$~{5=2-slvTIflQL)s!v@&;D$t>-DusN%B@Q_@Ruk{&&{p8JBP=O*K!B>ah|d zt3*Fk>)_t$cj5^V5soJUT<11JN8c(dBObNJtnn>HxJy<@TEeYzD2*G~ehjsU`-G&e z%#OjU{5Xi*`C2x&?|zq~bGfHqsbBJC@gdFVs9J9}WcWx|HP_4|7XE8hT=$N3+aF(g z|EC=ICT&q?8acUVd;-pS67m!C(jJY&XJ+$b6ZeW%&N@q0*L~&hY!s%x(GMY)P>cA-$}1aR_5m?4rjXmTr9x}bgsCz|QCi)$Wc91evjZ>n zOut?zL*(eouyB3xjw6#QUe(kG%A#)8R=v}=d4|$EsTEi_5>nMAJboeK3b~|uF7WiT zT|MUZ$O|JZ3!Zqn6T%%8Cz-X%YJrEjosbpp3OWRUT;QfB(49CtUM{q(E$6l#!WpBV zt;3EUXEM_>b$v&+h*PA>&fuMJXn6F!G&;cP;F)@>3-O#~dsNAK@{a0qaZNA_F+I1L zFDkGq${5-nL=w^`7k0e6Vm5)JD(?4P=d#kKz`t$>a7Fp;JNk7-&=koXJtc%On|-)3r7hc6=PFaq3P6YEz+~2JJbb+UkR@Jk*>W zP9Y3rWGU1N#T(Vb13#o zd)o$0X~+4=T##H{m_ij&{Q0tbJ}bATa?1~kppur3-NizrO-b)|H(}+4o$;tUB(!G=DqTKgWkGlas<5R4W ziDT39Udf9jX5?M<)FfdN$ej7$#LGRA*6~BWDtNw-968EX=`ff_(x)GP%9G$$w`s?l z?v;+Lq7ygkxiLeQPM?#i4ZG8Jkz9I)hnsJYO$En)3VSXU9~Y_XmKU90uF4RXWg!SN z3DP1tI6FvVEib-bes})$yueZQt22PwmucJ~MQfh2;MJk(*n9eL<1rnt5M^2VT}3S} zd1_bT4+O}Dewu^gFTt$J@dnSb*KLD#>NXL1YCNdr^N#6Db{TBK$dXjC$4!k5*&6mf z7i*}|P+CG;3}k!$W^3O;@#QavrkWKSFM%M_*a3 z5L$UXlo(`ESje-$1+#sAs3a*uQ3mP7CrxqW|3#Is9HdHXY z{gLwmGC!=Yteu^4OMvh^LPw*4zOF2>yaYKUUsd^~0$Cn-L=Y-Z&I;&g z7IGucUQnjie;N_ZA7iBBT@PqX8Cu}*8THEf+HZuKu05j=Bm(oT%u0pT#&OObR=vM)HI?`BES7^xCgX~gv zVfQEpeazjH`0QuvQd?K*KNt%Z*S{wReRE^$tA4z__}H0i;~RSy0^~uh>?m~g3>4BK6onckc^LE?O ztRR&~A?BWeG|sEDxx`C`?sPLdUL+Z=76)NQ!EHaa#=hPC%WpLT+P+L3&a3SX$ z3fwZB6^d3&o#qWbMB&%ZISpkNoDvX<9t?11RYsUtzYK1&wH~i7P+Wg*DqOpru;ye3 zrHi84LTP9EvS{yAIZz~*srP;&QqbXyBPcd!5RXE3Pwk zY&nIHyFx+=?(t zhJ9F8N%nG=t15}RL%8j8zsC?9Oo>CHdPDZH)Er_C(tC+TE7+IpF!!rzXG+W&pn6PX zs%K*IXo}V~DMdfz^nyE$X^*L_ypy|$@SNA+Ts9SI#WE9YtvIN0nnUOg!0d>>-uE`uX*UibP_Y}}y2R-=G* zxAWTK3RZAT-R6*`?*O3+=Zu?l4ofV-z(b{A8qP?e)%$!_4-U58LrhTf1p+5~%b$sL z#76NpZE>E@JQ#<2Q0~s>j+MVLy|g_UX7U#$t5l$LhytnypB=q;$Rw%lu{QKc zr%-n~#N$vOAVKh#44gRX@{*fTr&KlDzdpIiZMtm=+olx30edC+-Phx?Nj@Nugt9&v z{%UesRv5ht!HvU)_^BHWG1+Q;>W|zq5i`oYhSXm0@4>N2<VfCshOYYN2-BRv~IX>rIkt@?EBGBnz+*ykkq57!m=+ambQ z1h*#JXS^}vM)fJdLgD~l>hXKG>|1ET4+l2`kBgP~jLB14ep<^E!I&Zw_CferFu9EF zn&ZulQSzF`r9lA~BYB?#rP$NK6uxmUy6+)7ABhlijorFx&ynO$R^YYI#Ha1Qd`We2 zYLBQf>b&-0nK9^XuIbRo^&gjgKG`P(6b3x7({ILv6seFfla5oXba6LgQ430Ao5Zk~ zUjj{#QQ%6#_E#eE@O5Zn=(7kMAYjIhkJGq&1w&hpJ+EX36I4cV!dh||JCS4em! z5!OMb0hbc8T_u&RjoOfg#I?c+qhu~XlQW~jeco-s)x3#CEq1@O_G@*B9}ALi!AB}+ zM~SU5>=7Z7-l(BIzjn&|y|nJN!ku9eVWY#j5mvo*&5&SI=dHD|NA6QWdOc-K^#H?4&Lcjyf6-c00|&^}61S?SI5~C7eH1s$8jij3&iA3#qv1 z#nqyVtBEDaKqg41`lZ-OXcxI$y3$8^Sw5T{v5R!l%)&Gbf!i{8Y%j4J4?|1~uHzo2 zn@rXivmx#eLO zMXT-Z(oK!ng+AjLi{KrNxW-&yKO;7~IX?k%0#qb%kPo5V#!dkPRor?-4LX3K>q7a6% zuKJp{Nyxd=h;qDtND6gBx1b}c1LFq=nTJSd+RNU;>G=Q`zeu}A6*B7J8&i`KtA)7& z+q4W0@Qzr-=|SdJK5Dxxt#4$h{(^s123b6AY|Eex5fc-8YUgr-Y`ocD6L*X1?IfB@ zmrR4`(SzDzsB5e)kL6iz6c7yJ85&i5#FGIGV zF~$~+tV;o2FN`XR)YE*IRMugt$A$iN-+W@mgB%aPo1bQEod()7xJ+Q^IyV05!2L4r zb5kkM5H(Zt)wUoxEZ+Olx8ZEuBV0@E12w-dxerCUOVaF^Fbcj3>Y=jflA6q<~Py*yJ4ULYR8r(X;-nLS=4` zXnuq#QS_B|snU6jKXwD+z|a}9Cx>B5=+XBvKaWXIs~#;L>}AJ%K0LZc&oxi0+6^t| zMDrA1SDU#G$L`oqv8K{m6&Yk4KsHbyd~JP5^$|7r7i6!9qiUkUY_TR%hq(d+$d;1S zoPkqdiYnnXOG`iV_NQUXRX(q>AwkVB>iLPANlxWIXP%j%hiHg9e0?OgB7>!pozYq| z((-LUnA{q1&&M-N8B-O1=3%a)ja*pnEk<9D@a1WR55pyce&_OoEpp1)`HA(zV>`~o zomDych#L^@nB%W{4S8#kN=x)_^z7C;oQ)H?d5o#fG8}4M1m20#sAuNTpCWI%-kEvD z2Yu2Y;1%=;FfkMq&x3X2Rq0rq-;Jnci3m+OTQ`kS;3KMat!PCzs*=kWJ*WAn_&>hM z^<|k04Lu#G8eTVA|3Moh8|_}?6jy9)ej+SyPxVst@XZ`_g!7qNI{!vO8ESHk0W<4Fo&v3I*!vU^0lr@xn1o&7APHU#kGQQe7usL^D@3a41&o;5Tbb5A z{aASYg0VT}4zyBBJI6v*TRR~X1gpFq$uZufdTTsG`FymqT-H#KEEZr1M9DLfFU#6k zYAs!)@b6GXk;LWQu(2+{``zmw7jIh#fTT#!Dq;N#{OJOthx9+G48%$U*<=eW7HCzp zC%duHMgiz1Zo~0wL^5fLc(>IxKmyqOygF#s?+_StkeTDLSr^=u^pNQq>;`+rG5u?; zVD|u!o}|#%wdmgnkp&}$ug5o`udM4m8@!UGtm!#mB+--x&rYjWJKJeXg#Y3C+)X+L77%DgZ|x2K211fN5Huy^h!vW$U&9=Y0Tf zH2H_LS4?D>KHh5UTYT2-;hg!Sdb=w)^`~4jUale#93dkLRtGk~DF!evAa*`nN|-6O ztWS{=6WnEusrv9PXxmF(CUXyu1#qNO8j_-yKk^GG#X}Qw>lrqu_VN*qEfLIu#POIW z-fXpcdXNNXZD(o61HrL7Pc-5HDvWfVg6GcEzl&DDJD_X|puTs0!TP_`T8$q(45= zNxb3@`-k>~?hrsDXn`iJF@kWYe`BJ+X8Pn_Bt0W$gldxtmRTFYI}{te5BjK}ou&H+*~030R&g6#bv z?%z)E_s$r68N=ck;mj(QOmc=NZy#NnmlqiYv8*U5nz3j36eXSdkTKE+b4DY2FopI{ z-*~J)$kk6gBS_Toa!drA$P2MlsA=Yt%!zBO^Qhkfa98s-Fb+Ql>7GB>Z>Us;(tR&7ZHz)dz4dukJIvHY>>HZle_^BR@4A4LNYtbus=}% zdBhm>h;hZ1xB@hk5(jUnttzbzAOOdP0yCR-_YQIu6vd$dJc2}*ae zGx!ovqxZ~`HJ+otuY(J;HMBGmYS}Ej^@i?uLv_qd%*T8LH9VO?jJvOa)nNs3zWH|y z@)|nspoB}g0e$BGd5*5Z{x2%GNoC|&q>_~w-)yCl4Fa;F!uQ5d&d3wJ+k(;5noSqg z-iuoyX+=!fA;5L@1YigBERN+~xe#u^03fYvWRk$*s3k|!w49y|oEO^+xok8#C8lJ1 zdn=?isA#^=UBU0gAl1p_#M7dztmg*R@PZXy@!IE094Fg>?|aL{u}3N0M^>E#`yZJ3 z(S=jk=Ws940pZYlZTqD?eUmP&tla>p$k+-n4S3<#)qR2AF6c+0EBwn_i*FU=(zrgo zY@q?McW{AJ+;Sv^wlOIwgzxFc&(^uA0IcyYCr>HqTA;>9Ijpfp862GBkheyK#)Pz%7(Z_Amr|FH-itaVfDl-bDP-$%j`Q3 zHcOQ~U0j?k-b>ea)w4*(?(MD08a@eP<^^&Oy#yW`Ga-f`^y>f?gIRLwPS1PiSi)*9 z$Kt^C(o9F;A}lPpc>^VhF5?U>HO2pn0&7)51(-#p6X;Ho0!phZiUIb{U(_&`)=H{2qRL>7L zsA}JyEgammn9pK$Gs}Iq8F-=)w$6NZv0~x5oFlY|N{2?L&DQrE#+#wJl>>AoTAqiC z@93r``Iou$Z<~m@r1Gaz`tY89@$LUSb+I>-OBYAQy^X*V~=3#gsG43>w5-u_Y|LxBsh(Uj@0P6 z*E<}|c<$|QLm%7NJ}h(OVg(FWu&_L6DjUQE5Bz2J;DRxI-=#23&oW1B0Akp!Of(x5_U=|=w%#Hl%i7t zJ%a3NFTA1cyMr0RP+LmQ_)#8ux0B8(vKTeZ5MI$M?nVQSYiEF}RiOrjcdbQMViq<| ztK!pm-o|rB2$!yP1%~wM&0R1uKqYibntnd|CZb5aJYZ%WPd9~ABvnUpwwt7gn@Qy)(RxQD6X?`+ z{Z4Tb1qge`fKF$2BPOV^ClUev0;HY*qQ2i(e)u$)!Ua7OXva@HV^e8K%ad8=aBtyBHaM+>X?O8 z7Xw)Zs7#ISX;2|B@+5%nML-AhmEO5-!~D>yJ|pPE9@mNQaGt!bU#^7M(=vC^Q(1a7QiCO|#k8+1{Py%gW8M8`^ewYDAAe5-A0y6~fM zO1Cb#lE2TW7I?0{F4!45cz8fuDmiR_EgMuWrJ5N8r_I)Z_QNc50RLasc zHX!Y_W;CG62}}oRUUBazVS-%AN`BD~6CXHyh@m3(9i3IaeeWgd5gsfsg!nTvvQ@34 z3&j9s;}ET$t$5+!X_e|zRHdsT(DE`Yk@)bmo}njsJ0hk5n>gm{i!|-ZOr!AuL8Q+@ zAJYe>q&@CDGL2cz-k7evNWrUAW^nrhJ#P&|^b_F36q!D*2zYGdlF0e-b_Xfq7nRyp zKyFj^FE!TRiM|>-kwV_dV&iben}3RT&u(1Hfx%~%;jVtd zzCc5BIA+~YrioE~!2lzi$=G;%SAXmyS1IRpW{z8RZ9!5mfJezvUQA0F-SH^yqJ@>x zb_rd!`7|K|f4|edMnU@v1vV1(_{C0ozo%tADB@|BT6+7XYH#`|t-+?2i!{NK4hHWd z%ag(L_fvU*3&^uptAJLE$1mOQ0b;9nV4#}$RkoAxJp6JEBmSLGiFhUvG>dDyYp}ym zZ>`)%yOyYZo(#|^LO_%QE3NV$0iEC)=%-SKOmdv&)8OM+nr&YLd3_Sb3=lfP%yZ|> ziY36b&~pKQNG12cDGX3(wOmQRTWnZerph|PoRgWsXl4)JW1jSS+rQxkxb%^W@SU}R z%s_Vm`qRev!A_M(T`t3kOlaL@+ee~Uz3^!KL&QojX7F1YZWVE}eYZHy*%D<>cC}O{ zs9GwwnyG6wn>6~ks0T@*|6>DkE3rWKSt}1fWPMopSfgfR{9}(G4WP$(ky0K=jlP^4 z-Rs@|f+Kt@vEl~g-nUP3-?Mcair_Oo_uR{=PUE@grfLYi`U;D|?X0YVVdJQ|AiY@& zI?Wl+@1r`Z#1u7;UsDR&a+Lc0&}*Na9+cEvQ13_rQaLzBh>sHnx%MUv%G_v(#(K5PxR{q4wYrRpCB@UKK@u#ssbK%2byHG_2KfR!#Bx1(k>YN$!8 zJaT2G8v!BWHq(_4bc!G6+T-0x6Sk`5}Qw& z3IdkdH4I;C9@F{~3}-fF){G4j)dMWtY#!LmK{2(!ANr*Q8(gChx3Ds2ALE&S*|$v^zw2D_G5@G(8zd-(h=!xV&|w7NI}>u zd?&=k@Eh`*jAhCgOt$gnPFf&bFryUXO?`SqdpxM|b=NnG$R z6$~b%(4k54H4ID;uFuEjD#pWz_(I7;Ts49=xGC{<|7JX_*LgRIbd=HG8sfU&@;&Q5 z{jx8?Az$g6dGV5?%cBVgCI9AfpqBaI;OtFCDgSG*Ld=DE-!sCIiAJxo)MSDkM9K&r z-o|68(5X@3nH%V?z!SPp{Sp{pw$q%#)8K^SP6=g9(7;_r*;JR3I%eP-7?=#8hl^0g z@<8C{2Y)CvN%`I1RzYKCVV_^tjMpll|ZiCjVa%{bvzz|Nj$F^b0wOQX!gZXHLFo9+30(G`x@9Dzb)LX}Z z3GxELFTGzBYhi-kvHsXU(ceGam_;Uq@7*l~K0%r}O>4w(Tac|52P$mw#>UB4E4gI*BCwbtc?k&~eR2 V9~-Ab?XCfTN^+{QC6As4{1=-mD&hbD literal 0 HcmV?d00001