From 23af67c755a9a9b57115c5603623e4778113c1ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ilkka=20Sepp=C3=A4l=C3=A4?= Date: Wed, 9 Apr 2025 21:34:01 +0300 Subject: [PATCH] docs: property, prototype, proxy diagrams --- property/README.md | 4 ++++ property/etc/property-sequence-diagram.png | Bin 0 -> 39911 bytes prototype/README.md | 4 ++++ prototype/etc/prototype-sequence-diagram.png | Bin 0 -> 25058 bytes proxy/README.md | 4 ++++ proxy/etc/proxy-sequence-diagram.png | Bin 0 -> 25206 bytes 6 files changed, 12 insertions(+) create mode 100644 property/etc/property-sequence-diagram.png create mode 100644 prototype/etc/prototype-sequence-diagram.png create mode 100644 proxy/etc/proxy-sequence-diagram.png diff --git a/property/README.md b/property/README.md index 0bfd89183..5eb1ddef4 100644 --- a/property/README.md +++ b/property/README.md @@ -31,6 +31,10 @@ In plain words > Define and manage a dynamic set of properties for an object, allowing customization without altering its structure. +Sequence diagram + +![Property sequence diagram](./etc/property-sequence-diagram.png) + ## Programmatic Example of Property Pattern in Java The Property design pattern, also known as Prototype inheritance, is a pattern that allows objects to be created from other objects, forming object hierarchies. This pattern is particularly useful when you want to create a new object that is a slight variation of an existing object. diff --git a/property/etc/property-sequence-diagram.png b/property/etc/property-sequence-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..00c9ee3b762d944886f0c885725e9f04de67dcc3 GIT binary patch literal 39911 zcmeFZWmp^S+BS+y(Uum9Q=mZ6;>APpVl8eV6t@7yT}rXyZbgd}_uy7q+}#4SxCDm) z0kYHeuC?B0t!Mw*$Nu+y;W(0+d#<_UmTRt=IZq(gqM>=SprHkRLPNVjH3jaVp}D<8 zL)$Y!LlaFyL!)r|((+Cmb>OXqo|2`iDjGX#8xIWw{Sg`_Y6~6phZbgohV_qaG&GbZ z)CV&c{eO?AMQwsDT;DTzg6$n#L_H-K{~;lY+Wynb!^rRt5m!42Mm^QH3^I<+77Rk%FS%bb zNQUl+S|5|cz z`Da+D0D1l#;o;?e$@6dBs8hxNw2G=b+gPA1|IshWEB+73|7iQC9dVvN#{c5X|3vza zR#d2x55#%?-EEQ&D2;#NqM-rMlw_r~JkbxJ*e1*~cU>o-WuE3Qtsh>6(H*+Kl8dCU zd7+bAuNaL1qkq5!jyDZ?{o%!1Ba+7azGt}Ght0~)%}uwfN3f3e1y!MieipIT)wwNq zclWIkpPY1kzD{u^j;d0dhmSDu7y{A$<7*8w$dx`Ro{{mt+EKeYfdCu|jQ^1SBXlJn z2ncmldx9;8hK@xF`0E!2r4i=eEl{IlP)qS` z(vC&S5Z5jEcRxEGGQ|DL)RdEc_#e)o&PD|=_n+bZ9~wZ=a0k1Mva&LWHe;QUR5+-< zzP@QQONG(}$vU-Az^xXDSXHV=4&JSHkmTHGqV{sOD;kwY;2_6Hm$ntsowB1&V5VSUBuJud!X0ZxhJ?mO~XEV}Jxf!v9*h_JZYrRqtE#)-yL8A|tzr#Vxn3Ud$Ez~nyKAwKgr)!-Sp3|1XhpYCQp>ah`T8*@b2Z?jAM&SQ+^_ccP-hpH zx+Jb|DZAD zXrUg>!JLV|%{<0@Ko|EQ4P(}-;crRmDFXf92VG0Rrbh7vuYSESh**vyr-WANv&8l% zy~unr6rMnH7~sO?dF0br4oBu+B%dz-Za%$VOy;Yql(#Jqk*lI9%_79`O5k31J~eMl zkaoWMhR;`;OAim=`!eq^+wHgQ1-d{~eSm3{ATI@#49`ol<_gP7Vbmv1*#``6u!|qgNd1Ft2aQ2wg2YmB-H?pdXI<@Rq zW*y~*k5ikJVsi-jWOKzZ?&OPyNa$%;3%@?lI805493n$3W}JU2Z`QVDQ0BC{0BfqG zutGP5hjK{vd3uzGSM4M!>V99-pUKAC?BC~rYUD=|doucqdZ}zb3uy3usG68t#w^#2 z9P-sxzuG)RHs#$guR}VJd%8SHTiXGw3;Vh^1>}#(f+`87DF~C#nW~Zx?t8p95j>UZ zPrPO9l%uwaSkiBbpJVa1_yenp$FSHbgodc+xFB;KE12Fq1qP=pNDp5{Ql^>F0QNbL zbo_bfwX_I4;J6bRkah7yI!deKnMV0xq-xjU5r3!3E<)<3npfGLcL1^^;E3+y(~3`e z@#Po``>D!3J|6HzI4BmE?|kdxen)0`aADtKBJ*Ovd-NLx2Kd3SPlKAyuz_Q+*NV^U z)I>qKSI?i8FWZcAKOsiTtjt;96-5O@71Xd<8k?+pd<8AnZ=2@3z8Zf_^e^NDgN|3cMxHF1XSH6GQDt(Nq$pxk051G?#Z|v=m_0IYR9gY)e+cmIF))ve_}4R zJzWJxZ@<*MyGNEM%svH!Xvt&s7cS&9G7!G(J?3S3!QQDAsJheYMB06lGQYaSC|ZL)8n=^ra)flqd)_^|vKqjbVI7~1Rh-1`Dvgp{xw?-u zWRTgXX-aQ>>*FrX5P?-Mti+DZyIit<@A0Uus1^+#z@Fo`m%WEk;*E4!X^8YI<#>zK zqS%Q(>ZBtvZ&EDqdvf?&t24YL0MK>I%Jp=fppB)B03J}At-m)zi%P<=;>QEQ;5loEs4VbutNo~ZoqnUi5CfOJ#h{d~_Ea#vIc;;Y$1;7W zxaq@?yiYgO&@D8;^H1lmtL$x`Mxwz1oNor2iMAz0#yA>219OEBgPL&pOslvJ|6fWs z7y)U&^=g><-zp-8AXIV1JU)=i_P081yaO#L>eBD#d}@+cgwNB|I4312m?;o&idRq^ zVK2_6fU{x6tX}vHA47?KTuMxVC7Doha`7D(s?N$K!JeFa?y|#@@Q$yXgrGaGl_PEe zN;u!SjeXf_oy-N4^*yPI&KiU2AeDTH<)P47X;Si>!SXw}Vk=wftP4 z2@=j`8CgHA_2wtRoHEqIQNedBtkEWc*C|S%3S_oFk^ZQ7GgT2ucF(EbBMd*7WsK(7 zR@^+BQ|_5`gx%C1_$nO<>t)PxKeVwuwjVNO#2;s5iXRPqF%(lw93NaoV;21MVn5Sj zz;y)b+Bcc(H{` zVb@M#QUs)26F@7(4i-uu?XraDA@`#N7O}MHmSF(uAJzf^&1st2HY8#--}JJV5O0-8 zQkYovwg@#Xr3$DaQ0w}mW&4b~)Itv%3y$`&TmiSx3cS!we0bK%B3 zGO?|K(==H5z(+dstK)*JtI;%+G>;-#=UwWHC=+snu)u z7f{eORPZ|U^O@f~V;#)>B0dq=#nb88sXo|?x;^UZ#7G_kax|=}5ozZlBLb2S@Wqt6 z9g5$Kr1E^4Wj*`o&NM*tYE&)5L@h zx586|)tg_roV*o=o4@D-C>Bjl>e;=JIYS%!6ocl6xWIrlMH0wwJPR6&XS1;UgHc{Ho&D<`Dvh3gT zl zK;?|$#!bwM6|P~rYdx@hbBB#yQh^~EyWTLO=$n~r{oEplMDGX4;!w}8zNFOqk5hLF zvj-DPi(iFwD~PdqT|?aIU$i0!rz*@tIkfGoc$1;#Pr$9#`|S#`4J$Ppn7`_0}>~Q#AEN96D z=nioVBq0skBHLV+9(ipphUAIs0T|w4>F5X!rrqn;UXL4HyUS%Qdk^EKi;IF*(i%n~ z)BSwVniO53!SqCB!2Xr*akNWx6z%f?^R{KGgzR$2NIq}=47-R1SYeVv-;%!ocWHwrR)KeJia$+Pt^fcxS z!Rjz7MBJ7J3WGO$VIHZx*m96B8Sv6Ys_Wf8$ALZz4tsa01#6dP*E-lnMY6JaRdQRw2h$-AMqJ$sgB>5IPDp_Vy^_~CA{f~)Y=d0nVNFuJzmou+M(1ih%|0EuJV0q@cqXgLY9 z2icS=55J*-?VQpDD>A;c@rW3lDq^1hnErm>#F!G|qcB6=7}oHV()E|-*73;YEB7dp zv-ZjAD-M0(3-_tQ4XRAt%Xygju|?IuA}$Xf7yCVfjRXrPgYmTB zVppjNtuskoyeiH6+kPwy>yXroBPkRALlWAuovz5|jzgHTefQ%v;(L|>%$w@SmGgGu zTjHmSFO?`J6YGsT%5^5z>$H32-Alz|#4VJmD z`4x*tKRFL}3MD_w+z5;M9BQtNoDku2*!G`%YZm&1zjN0bZ6m=0GhP{5y^N(RU}N`? z$RUXbAM4G*n|o;nX{_E%X%WHjyxlrE!ArL!uPQSu8iR_<3_#WCGA<+akK!~Pj9Ek_hv?~R7erhvkP zIvHRL3?CJ?ID0bt=`c4UmK~v`*ugsKD8U(3$N?FyMJC!hn~(3Ef)&H{dY%lJ)U1&5 zSfj6Feh`cMP{J#zDTVmCS5W5{>jg6Y3yzDRJEnLW#rX@1= zt!q;w*A-AS*2yqxS!JLmby_0g9IoG7w3MwBoH7aF7?LE=_DAw@5; z4C9vKGt2r`gCi#Js?cJ=OQmDkD3)@#dG z%G8ORsh8qwWrXb@wy_OlR;r;6ml<|L0Q!QQ`E`bc+5)XXRf;$Z7Lz>8&=pGq=N&zA zQHWgdHMZ~T_ceZ1Ue+8T?V*H?=wWrLYh8t!ePGj%6zQicrG=NC-dS_$_xm+Pw5oy9 z@VT{*Df^9;@9bXlq8!NP?tpW!?LrSP+ zUx{y>`Ut@QH9urJL;I3qXilF|*Jp1P{FF=Z3FL{aL6HsA79*yxc*WN0+M0J2o9c@q z4-MNLF(TP3H|H@spvddhTo_`R>r!}(AP6P^BEm9{UFEIL!pBO=w#8tQ5l*q>H&!@n z(S~R%o=oUwqKo&1p1$FsF`2W9UVdY+H%xCjjH%c{IVThRc%&gn3Zp?_Ryh%$RA5ef zLD#1osPxZ-|JMFRUY%SFm%RE+`}poV z-!CGJcDCxJCJe9BVcyH|;E~`upSRhDIy`5ypO6V<73gaG73k-OlU+eL0{+coCap*6 z^oI5Zrdmt5r;P!Sczb)gQV-fx9{S<36uaT3N22R}smgX6tg+n0GnHis?wfjJ?nS#e z8{Pynx-U}&v&%=UV327*JkmA(nxuaFa_(p12qB|rV)!g9`mAq>QVa4DVN3c;o*%8m z-_8iJ_{MAFtSjK#k+5_WSXKFvL~pcX28i_IFWb3%My()s@|de_-~D3g_%L;9upy{v zL~z`BxRd;of$z>u@hA-kmHEN|7FG70=*w4mOZS#j8tXaql{G;ab0O`j+H!d zyw~zqf9rOnG0$Pfv45}g9{#Q6qJs1JH+-SBTrT{|i+VyQD$y9Z4?2*xR_Bs0$MBY?q>`tDNBBw=|7T_~Z zr{M<2>Qs?}vvN!H15ToOwFQOdYXr`J-IEjKq0PiP<1%8yPi)8ifLFiIep6=tDVl^JI79Izr_Ab-1PQ=J2D<$Esav@&F~TN z7P^t<#r9bJBCmkIZ0I#+nHL^UhI0)iO?}R8ObtM1^+N)*!zm{x<3vy`@i$Xd(o7>A zb&A4Qo0)g+WBTsE&YsG+HZXCjKd!O)rNlyqZC9TE3Ty3UUL;HiyEU6J1d(lLXpjVT zGte{Ec7#6PUqyK2+C>Nv39q^(^QLIuAiNI2ly)t)*k%m>C)a!A~{Pnc<^&oZ(&KNL@yCug=h6ceuIwr)P0$t<|3 zEADB55MIw13O#+_I+j-Z_|PY2M8>eB9JwaFly7$YoM)b#HE($2^+X4Yrzr#k9zO7- zXHhIzvU&NYI0bBU-|lf%U{oY0kC8Pye#CuaK8a~_ei>Ax$ze6yuO>xh8&Gc%$^uUR zrMe{XV8c#mxya4roBMnm$Gw6jW8S8I#7 z8R)=sD2Pn0;TU(AZEDaGX+qV-!L>rlAlws)J_^WSPsPq?$D*GcCb@TJj;#T$wWvGw z6!Un&QZSI|fch*JB0A21GA@`4l@|aD^Bt#-|N2=p6ya5MF|nX<-iPf35rT>cgmma0 zw8kLyZDV#%$IbSWAbSTNNi%}o4JUAs!9rZMedXmux7hlI>as<+lKA3iyUi0VcI^CI zDgxm(6J7SLNXsJXIRDBZT2<@?OMed+2Ulv8&y#^;*GThAE-(RPG#DrM)%hPk$^a`yLQMIbIV`j^x*V78(05$zjmhi_VvK`LF8I3 z(JWxMT&S+A?F^Y}u1wVxT$igcCmsJG%+BiG%WL=h+pb^q{GGL}YMc*zb9ShSw5$WA z4HapmyqOGjz)$i@`s@9VSzxyLsQ%*)&l{o&AMXlsZ=CRMN+Dfjf1LJCaVKAY7Y#5ZGIY-7Ekw>J1FFhBdeuzS}ENJlc3N%`nBWz27s0|QT% zLXn5cy4Bg7n2H|HG!0GeqL0PtdT_PJ-Ilk4VwoY0>c@Bzt-V{#p{n0ol7dp-+Um;6Wdt;$o2sA?s>M+kqZYU|8u1hEG99@p5<>sWlvMo0Q!2k}gt8{DBus106wUVKmwQ@RnT~#){oyhK5murn>*_V?5%!$?qMYYK#}@}U}0@+Oe_az>6(XZ9wo(VO%nsf_%hji3z$BTa3hh*{t3{%lud~!Id0!~0!Fp2=*!<-ZKUky(6G>GRg2 z+ECqaN!E}8HEDJG-aLCo`r>#}V`{O_^=q0IAHX5K&1$1B!KwvhEoydaSt047*=&0Z z=<|7Mi)tD-wL1&!m~?G!avUY(SNmb!dL$`>NpdPG8OlPt{yH&+_o3b72MHqshZZMU z79#PTlf?)9vJMEK9K+5IunK5Fw{*uqY1;Btmc^r!-LSavzvw3F4l%RiSQobd6Twd!}k)OxDAA*C>2d)h7>g z(r3*l<*OT;oqO6#gC1snT(zrw9`4>3uHsNSKkn^!b@W4zL=e>eXlJWtPG6&QjR28b zg-%S3g>PZIlEGJzc@sNMMdX>3{h=6Km<{8E|fdm zBlC2LUOk2dNSDn%$s=-=u27kyas14g=w3Hbz-8fDI^SPVVXX1&VZUN-UE6tP7Z3BD zLP%rEIOEDUn+gbpGkoaa7s@7L^HA)!1s8ikD zn&olLV@X4RN@sS_NVTf!3SrmbNWWmsHt$BToqp?2ng(sDCDHYc*tx;JqMvdVHl=yp z4^xf2Oo=+0?#>0t$&M~LnZ{GP(&^QbV@V{{h@XlM-b<+V`8z4Keza~`A@sbq(ZAxk ztZWGOmvp;k6zO%6D)#Ex7&(F~0y25;DhZf=In{;aL8e0B`I%Pv8xuKH0z zBJGrZ0~eCXIacoUz#A9i-c61W+`}1g6NQsbv~nbXo#_YU+l%yAcp^ST_GG@FzlYiIkLOTqPTd`n6A| zKfHIdj0^VXXVF^wh_3Iv8@4pySfoxaTo-{@8Sj?(TDZB2?eI+%e#GOlQh|3DwOaT} zpiHUW?`y?T$t>f&rK)i!-JKQ`j<7a1Kn8S9U4{MBu61 zeJOoCvw#jkGpn6)HsxUSY}QVJ059I91MA)@C#b3b3GMWGkf!_)E`?)(qnVm$@Mo4R z3E5(one`aL(X>a(EK6w%Y65;8O^Y$VPAbz?E!y!Fy;>_@fxy?lM-anVZwwna2O_Lz z9!4s0ZklIKlaHf|A7!3p$%Wes3)Jx)Q}p_UMpf5&?+nx3)Fo1$buY319@Sr+zjG5) z^~gA65w+fW%|Bl_8kLV88T%3X<^X3a$Hoq06*Klw=x0T36%Wj%NxXF~@3fVRHLSw% zC>lpfAUqE$SKk^n`YGS+LlgHi7;ImX+OnnFTJ$1#&Yo0$Uxa<$uNTbU$bJkg0_qw~ z>Z{aqd{*Y3e@Ar?lfMrnRWvN~we9V6iV0TbNU2o&wHMQey6m2R33SJt*y#N-zPZdr zT+Kyi)JO{4*65DuYn2-i4%V@C#&i&>%&=SCR+%5D&$tplPZadF6GJPys}2ru?Ruvg zkB&{7TmNB`MvScp6%W_*HvXWUz^}pF{_@Vkt2_sIqW#}+cm-y7GU%>2=NTD+R+#uK zM4r}zP*0CD$F)vE(N^W&z%F`Is+6(%90f!lj<`zTYh0e0lUKH#S?m`C#S0EBD}F}% zk@+tu7G?~_mLt4}iAqZB^Sq`^FS%-@iL6S{V}_;8WPl){gZMAXL92?1bq*cnGwrN? z9NXfp$p-tPCk_a?Mu4fA5`D;nnQlE9ZPt#4$MAbH>d2YW4@$Q6(X zUFub6h?u29mCMNE>cxch6aL;o1PfkGGG(L;u0ph+s-WhmaShT$Y^IzzzjWQw`t8rm zgXZheFVtjO-h*Eg%?cLhtrHR=J;$7NCe zD`m)1UY0HtRpno)!@R18`O(ALRo=>-eHOH#NT(gn&Em-fd{!H4iQdJjZMLEOt*V9}N!blkSE_mt>ZH;RDP!X4KFD!iwjqcZL(apk`PQCy?omZ+Ztunxi20tP7bQJr{`ze zvcY@~w)2aQ#z)oEQED@#QdDVd5-=efqt^K-i<+;LG|ac1yia)U7e-@HPkvqvtX}q; zz-iA2@`TfMs2iq02}b;*y@7Ry#PtpXgZSQ==rC2g)ZWL|$?=DR@0*XXEju-z@gP40 z;hPA|2llK*pV_A-gyd8vW?tryv#%L8a>i$z%2Vsj+rKFRu1-F_Y7%*spS^W*ys)}d zqU+|Q4o;5;Wjv=MZN57`28GryeHOMUV^NK^JRnSUl_vx9@|jQhW~LgBabUD_jX$=p zoGVaoqb*?Z;KBv9XM*mR`NUMq)O<=cKeRCPmXL4}f{VELjBnkutR)kNWf0abBsP1a z9W9;ik?Hg_)~E4fvwNjFO2Oodk7SC)V2(KaGbik${;u&v;M({wMG!-nyd5xvWtNnU(vWn|yE)FNkwTKdSQ#Um4 zi>f7T^mu%omDpNaN9@@|pYCGuTkkk@n<#R!R2s!^5?KtteuFQ7lle;CKWAsgccS>n zfWWa4hqm$8clDK;ZhROW>H$nWNBOCWSlzis60B8u_6z zSGrqtRJ_Cx%DvyjMD=*0r(Nb>BFs&<^r%-IhyiH)6jNDtH?l}mQ1EoQ1F$8`_V$) zh+C-+_4G^rpbeGf=k@+0!4x)CR_YTbpOv`|pOq4w4Q^MFBrVkg zCTw)v#?^&;L-+kPr4Tau@Efk6wW#YJP0ed(L&=dSG}! zQHk%bn(N_0=tM+YJa~qqyUy7qZD!Io zMU>P`>g4{jEk|uGFQ^hMf(b76F_C#5`%IuP2g@xtArd-*VLeK)>%!;dHYogOPaW8) zAg}1o43eqzz|XULj*OXuLz8cWr;ySzuE}-ki(bIwaH=L>p*0-&i$t!|pRDlyr=^KH z_`^vErM)Ko@zNV_NPSsf{wbi-p;1*AK0_&5Zy08byM(kT%4+D@ELm3+zxm3`*AoTG zn~HL<{rH&bN^g18lVK_Sg|3?=nJ_`v5XY(87n_A#lH>S`@a4*{@C@~c^ui70DFa4E z|A~ppOP2~H^OU!_gFY~`;++wTs9NZ(YV23cd`NOVBAQrZuXomI>4)uaNNnG}3oAw8 z`CaD{Yt@fn!S|=j1)zv?{?2~exo}9QNQXk&&)<(aTMcMZv`{-di4t_u>s|0p}BUNU$MkNc%JZSsWfSp zNFn6Km2NtO?|7jF&Z@2yfmpRFF6@h>hQV{%5HYY5vkSLSsxRXoxa$cN%qM55sCM-H zmhj!XRKPZQK-OhU?~O}$oF`MF(wOMKp3V1jeQg)k9Jr*X%P5g)oJ^rBlxi8l(bQS> zH?5}yH$Elm7sxzh6RohHUbosx)1fXx$ZvkGZsWU&eF=SsgN=cob$_W|$Hj_5i-5~w zs-uD(UB5gex@;0S{t^}qd#VpVjn2!BL#U`!KleFsXYu3}+XEElfqg#YZJi^3+#zBs zpSOFy7W4UbVMk?gmvKptF;{^X@a?mE)Fwa1x`iyFjenmb1?N6vD&23MJV=&&JcWdQ z*bYfI5tam@yKk*M!e2@bkAcTo^m=&05T(SJ=&RU$Kdi@II`<}8FSV3tfAyo=_s$&4 z&}(#P&%&XVG@kEhJ}j(wi+ZJanV^=pr1N>Epu$f-48Vy2BqIEg&^T(EZ)V^syz7xl zJiCx3(5E6OR$RJH)4^BQUY{zU_>l6)ILu9+;_lhAKoo{rfRm`6ZU0-6D97iRrEz2D zb&L8&RYXq1Cv09+&I+;FbgG6H?!j7@R%hxLk7IHkx|xyHM-ZCsKv37OPqbot_hA2V zMwkfsfmhMvLmNxubVQA{9XYJ@t27}IWE#gR8-HlF{%uLlS!cC&$!RD+zVwUDUIZEj zKGPqBmwBMg$XiRC{aa|{5LuDYW2}D>2adl2?uiwaO!t$@z;0eA%2`ypBm7WxDp(q` zD7O+rgW^o4$HId4tw!t$8*5P1%G<4{D41KI!rBA=`yPX-C*MaTe_!`=j~Zz6bPA%! zER^jrO8u7j7sDaW36&LrR#wO3vk&~@UB7(3xz1U9p^Er@CE+&QLg_g8hTl@5(k3D= zIHI%|$FfD#&p|zzU%|Ou*lkJe={63)r11fz*!Zam3wBT&$>M*<@^NEe z@%{e(rs!`_K2nlD*ucqQ-`~tw8v6f(d-P!kolW}%1K3wFON`(|x@gKJoLv%eEmk=$ zIW61S8Ms*9>vZ8DhF~c*D?+?#z8^lF6+g@H`_+@h#r>91=$B8hhe>H;DTjgJGOO{;>+TpZ+;55#JoV<<7N zRr-1GFu$7-E&p8RlKtaiE{b@l8wc+^Ik5E-+CHwkxz^Oqvo`9bDerJZ|AmP$4h`dQ z(F6Xv?ek;!>dShJYndJ6M^$8s9T8k_Ux{-)9#=j{=q+~jMw0Y{W7M}cJ_9}y5RQW1 zTq6RUEOkESJpUX9@Wl$Xv@AZqqo>zKZj^Q+1-4Rdio22?2hlyY?x&vTSPhV%>mR2U zK4%I->kS9i`ox8nlOD%*Rnub5bu@DbEmLgKDa}4^fnWGAcp@DoUg_H@x070fOoqCH zd?b>OkT3#7W9*M&Jm!)vNXT=DWr;JAb=M}U*#LZZuPJ3;mIk+y!AeldeZNBv5k0xT z-#-C_!kMugY~z*sQr~!o!pTw|D*B^9$&L5#OYlwXcPx`{8&=-Rcp&L(m9ov59S4xkrn zjk_Ez)>?vORCI}g)=^q9^Cbk$)dU##D5$ig-P#Tc#=Sp*qIq~h%R)_;Pw#bOlJa>8 zZ?;#55)wS*b3OCJjn58m;41`qZdn84xJxbG&AN_RW2+6aq1%Etx#W)@1|1Saaoay` z-&$&+c)i~ekoIY?duFH|1ymjqS}~9>ocbw{r}i`?BD3pi*l5D8qr&G|J-34b>v{*N z)AmfecPEnX@|A+^S=gmq%_|m+cJ8;D0&mVU9QTd!D)zfI{=l%4hn{GGrluyJGcf_3 zBWpM2apec9fxn#gRk`5AY;qUbWz^*~Z=SPov` zKIxyur26gaTC0%jhz+6E48XapA58^bZ8(G7?GLc#ZWw{^* zxH6B}yhnZShK;fyK2?~ByOTC%NV*b}#0`gHsge6MzciNfNbc-c{#pwK{%^2u8Tp}a-~C_sAX)og z?ADq7I7O(hXB19~@2d_N-xqFFg1FOF-TZWniK74>*i`(^1rU>O(=B*j}XsJa(n0|-^pN<&4meX((A=h-b95Q z5`6mju$x

f1QIU-*P#0SXw{VnW(O-M@1`K_-lQi2U(Nco}&jL9&blBb1@=p8)>)VVbZ2bq2mK`kU7x<|WzNEr}=cYdB{EWlzZ?>alD9_aZERr;a$`8RQKS-nB}Da#p`9zMTEOhnN1a zOGk9FS}e7MK`#y}-TXH1Nxq4Z9f>#@FC&eUJ-J+v@PcyV*7yP7*rCCk?jcgKaN75% z65kO9z4#8#(S2?_grXDtMP#l6g~cCA1e=G*bQ5Y0)LS|-$Y4^TQ#p=*Z>7QSLyY20 zhl0N(CqKE&76y_X8?QR(AAO+cuQoHaCS|(%y5t$q;;w}}*i{f&EE2&kox=pw6HG z(RyrtZVPg7I24OXVyhh+K?NNu zci!fH=bX3jXx|rF$-%19h{S(Ut_x0z!OdEGU|ss!|pN zCwBB*ocS@*DL+U+ODyawtx}iWDy!n9TA~fNA?nGx+rJ5$kci7+)F9+a!2`n5mXWlN zF7|MikrMqQcdNl^1L;pz10vl1B)aaicoUSFfZB_d;lXc5?b3um3iAH(Ck0J-FXiQp z^k9N8=h^)w;8}c?L#CFu8&2iuO*UfH=KPQY9^l*7KG($E3XiWk5%D(N-Xk=6aUlWk zoZ5k+0>1L}srmqPKVkx{ySO^5nxlIVHSz8FbRfUTA9bAGQP4Xc304jr`fb?x#?bW( z9tIIgM3u#rg?GSlc-n>>sEvJ$0hx{Q-o{-%ehP+%*I#c~6{;dqG7z1PqqHd7%k6U> z^_y2T3-rz2s`WpXk$x^KP000i)EIu{>f7$$*uzCX63p8~^`_$})oQ@W2e|R-M9R9$ z22u0n8-^a*QA4FhHPF`zxI>RK9J?vL)p7nEvC+^(NdAJXA-x2v9*E-qbUK58L+w=k$9$LC zA?+554HmMVvD8*j9&Q@0{q=fe&)HCAdFE%;KbAGFr#T`x}up7 zkxJr6^yuizTgJaJO2Zie3``FQ%l=+mo%|t6tcc{v{=K@A3k1kNeyYRt-&9n4yJyJ(`{X2{7&8NSqdxr{DHt4ORB{o%vgj#(AQ= z{=WnC|MLKu%j=J!#%HGpfMWg%yC_ydrzR&8%3e?7{B<;MWKm{ws$Is-pD=hnyc_lg zV)G6+fE&j1ySo486M;!~GeX0gbnQi=MTQ2CM)M^bS0Yrt2D7m_l6 znUFycEYIJz${}ueuCD>XPj^{9ze`Ky+TA4-n|hdq7)=Vql%KN0!s ze6c58E3pg4R>pHR=yFT#?^k3BpTL(Oy84#RVl^KDUHA_!xrQFfy$3nIr7JENi;Th3 zBIv`S+dpUjI?YJ`aL1Da0TkFq${6s)pY|Hw!dBbHnpDAqe_h6?_^|j)O--4w7Ae-G z+x&7Ml0VD2p3MGrZ2}ZfGNO-uyZp6>{=qy~e2SX-_%7^h;q=(n+T(Y1q3_{D1L*(T z+d*27Om1eFC6+u6;L+tbl`Q4%M~*FOqv#J+&2LKc<>jGeHj1@J-Dn9e<%I}{?O)i|3C2lNfWz-S4R?{BqGM_>~jNc z*pcQrOlk=h96CSid8plhx%s6ArFQ$R+2}rhxyy|+M|Eey!6%KZjYoQIuFduxLqX2_ zP&nM{r$f`GT6!Cd`Ng3w^LlSo!sO(m=FJ@B;hFPu7xawGOp9N&GkjJP&ie0k;)k^h z9sV-lKR8ht(vn?BHW!Yak&$sAO-+qi)eidD^{_KXLRa$Iw}r-k+&_0n4P;qf_)jIe^4;wY9*zOysS5Xx+C35{`dgK4e-@nxGvEOJ1 zRo)l2m%M;%o%9Q#(q2+fU~l?1Wj_Cq+IHMK++ZKWrm43>!upn=Sf8Dyj@~ z$gZtMN2RD5E|cM3#`KXP1Ak4V!tQUbx9_x>ICQF#TS9w1>Df!p==og(H%LZyHE2P; zFjcS1&63kmT>7C;HD5Q!G2!t!U)=M}&1GZxD-GJ^?=OzY_%2{@xxR_{fGX%lxn@ji zMdLE3R;aQ+LLpHhG>S@6C0hsx&?z_IDyD&BHm|W3hhQ`7RI=B3wewxjwvPPLyiA-@ z7nc`WGXMJ4_>6)(C0dw@!n=y##-ySsN#h!Z2HgH)1@-e( zwW*z+ooxiRd!(kjYz>Tf+!>bI*={DBjXqd?b){ygYV=`*==2wB&XP&b28?B3pCva> zs!GzUGm1uX+Tr>lDqW~Q&k>SUAF`WLZA|C;yOYoA{&n;Amec~6YUC+RsG)JXrsjar;XXpv; zJ%AxXveCGPC)!0J@?WERz#n2m~YsA%<#?XJE3#5Y_Wd+55yBjD_ z0Qf6V`3)kqp917ZW>8Gf;xI?s*tlO?S7%>F;>SN!e>;8-gV!CDxl3J}-Uwf^O7W1! zU9ou5_~}7P!sye0knUx#2>mX3UVGB71#CI9PkCEwp8b230c!F7pZ4A=uBxpI8wVss zLJ^QgK@ce=r9q`T1ZhQSHr*Wxh|=BN-Lct#f;4P;lN*rEjdb%ZMD(2Zz4>4LFTU^f z;{3M9wdPuL&JlAw&lqEEp~f>AmVMrP#L`W0cHd4%_~Oo{yLCCA2V-GjP6-AD2eorw zTA|XbSB2I2pHB!sx)n?b6R~PiRuy?zHI|fep`!;coclJyE4uq^R}jV66Y|p$YDML1 zzVWKWaZyZ~Z*?ITOd4g~=+boqr0;|!Q}50%jsK*ut;gYx$>hFJ(KY9o@;B(#CjW|G zGEn;TnAqZ;E2ka}{GZmZ0wvMoSW4sOV_#v!&1K<)xK75$e0Fb$IdY1MfIPTwsFVRW zZ+;uG+s$hF(v!Lp)Oh}M=yA(Ncr<}gY-nVpe%n;v2u-LY2J+PV^q-;mPE;7kID*EE zQQh6QNVr`~<`>_8pMCTmfL5<{N%#kLUnT8N=ofEIL~V`-pLtN z6U2L;v97MJO|`L^o4pwygu$IzD>ma124l!P+_9szDc@?Irh_O48{+Q26AQvT>((t9 z4N9HGE$KfjWi#D$Js4>)A+e*2`1y7FgIjw%C2^m0Y7VtL7bSZFwOH_4*xwEEOa|&F zXS2&i)x)Kz1q8HNcn+A3<^robV~KTGFg786iIwx2uxYlzWJ<{M&9XWN{D(0Vqc)$6 zt)5zadwn$jd1ZUkFS*^Ao}5`t%QmP7vBhxGsflo-Wp7BPh>O}g3l=I*rYO6BC-Tyf zwXw`>n6tkZF1^LV9OPzL_44o8hFTI0hz?dhWon$`Kbu`{Hp}<*JKy;-X}bie>f^;( zb23cSi?-W>V!ONMO`bK)S;NkP$A!g2+#4pHn}@BNnH@Uc$v3{Kj(=ibak~1$=7k8l z+R1u?S+$XFkHTFp{TS*1I*QSqEYsqM#?v`-zKuL>!@Br{{pR%frKJSp>VA)XZhcZV zqm+6hZ>D%qS*Z5KWLNQov9_IwnvyFj+rZ%a!xW`K6dL85-aaL*OA_+|e;fBHt9*rQ#CVrY3AmsK6*6TgVmX&qwN}#8c3B87QCSQP!nKbHT#BP!4 zQEF%|4UP`c^3sVlrfq$th-T3>Hsm$7hzfs=U0G)qXhci|Li+*2n%Va_6oPhwE}RwM z&YQRUMV>pvT7SXGSqHbVn1{}BUnz^^9tWF$ z>I5zoX^bN6xO<{H!hqvb6%-FwK*7YsG&3tpbwo|AYk~M&Wq;f*+bF)A@~;I0e))d} zTuV(!7z0WNeae(VFYkh*W@*|tl%xJnZM3=%bN>~{(AEp5q`Q724oCTi7GDQU4}g=* z?&EtE#ya_Nm6b)qVgBoPLnDoddA94L_P68*H~s(I=_&l}GM24Te(rTjJ44x`d8)FE z%8<`)m;O5z*1L=~Ki`?4#`p0Qi~u)@-HOkiq+>Bk zB|KosCPyXw=Yzb=fw?XdQSoKh30KUZAqQ3!-y&|ZEUt@msNI0P{`}9`VwwSwMCn)W zhp2V5Gu|Y1<(iAL{Jfd4Rxr66o}kF}8voihE?{Fu-+aA;qD^FpH($}>AK2&gy^2%w zpV0&o3Kts*qbk9L>`mNZFE*z}g{XY4K;zy!|K*pM3D;jrvS!TbFUal3gA}~X zV~qXN1g4JOA3}y!B60&VYhpp({P$>4+gf28bjOJ2ngvrsg4m`hn;qbm^ zWh=K|z=@Ov3!!t6edv;yOLe7I9hbPEdN1wXr2;6)2y4C%!CwwSf+;xcj$Td=(8vY= zxa)V=CkIm30QVG*vdOx%Ss4y4=Rqk%ovfVK(F8SJ2iy|RE`b3DsYm#~9?yir@7S8w z!nJ{AiBp-~Yv_+R-n*evjtzYB+^FI$R0XokuqRanBU5a+d=&YAaB@`88+8JyZ z$o31s$S6Y^EY8{<%ihGK4v9ed4Hu|^PP4n_&k6iK7VrM#qvUsU-M&+>?980`u)nEP z+6b~Dm;mrB`dY%D8Z@~F;a`fjrK)jxk|IlF`kswYlQLg^P4axJC9pC4pt4 zc6xbVaglPjnycz4GAy0{s4fGm3%P8fI4uM^WK?*3`W32*oNO@Us}_fP2%LV9aXWES z2XLeHMwoe(mZn8*EZ>(FYw{__g*>)+7-Q@E?|H-4hY@GZq{;x~%Ch zyefO+r2YueqT4qU*q*kK55S%ZVz*YQZd%j2k1_m?hy(ykD1C{k<1)J5ifrmEvz|tO zdbjSZ5hgA~=m0+`Ii1_YF!OxwL!9jTRNMVLUZ|78<18KP-ufddkMm5ob|@4YE+CWg zW^vugdQNCFYJpL$!-9op+MwQGL*r;W9pM9Z!iC@TPyXjYx@j8Z(JI@G~{S=#< zKaNL4Wa~P7;XW`Sy z`P(|ec?poV_VQuflsO-W6>))J&$TeZ2XR_`=j3kpOLjH)!8uO3sKYW^hUUw|sd&wq z+WNP3oQLhUJC+7P6xCxUHcp$7xomq=c=HSNo8exWXM0;*)bpM7gZmTh1+_bwW<44V zEG(DE9~n|VwJ*Ah*1+7-dqZ$F*P-9_5?7H>)(O+QNxQ~C$Yr3;oA12 zBb4ja7Y^xeZa;LZJAwGPyIIdC;dC&$>qS;(lVltDTUf0UsCKM%yHDFAx}aMoR=~oG z+-g96K8p`g>Gg%8dZHCwn$lwt?dZtK5KywGB4Mkmq(`O3m8p2M8<`%bN2Fth2ZZj)#yL5xyXkI=aZR{)PxvGhm)``jk>wJuHwB| z=w~Z<%(!NYPqRMb?))x|)p*h4_#$FiV=mj~h59dd?<|{gHl5~Nc#r%SqXZaEbi7BQ zW;;lmu)Bv7wo6itMjcAv=Gzzu3!i((Vw!|T4k1i~JtAN;qb?LsZYoeCS$F=DpsA1J z-J;pa>N(FjhTk~S#|D@=m8L~$?o?w@5nQn4Vk_sxMssadP~Yyie2a0|3%p5KgV>3< zCOObg$lT_&<%ttEvEN1-vzS&sCijhYwX95^tngqywu(Y~=KdmjT~|Uu8wv5Yqx}Z;6-_W4$Aq=f6v>^A#a z@x@iEeY>N|(1{V!)jH=MQj(_y8zap2bN1&eot#5*_K>a6K)q3FF-b+i!l%w62`_#* zA=)fY4-X$%8F{J81Nos?O3f4b-8T6SoUNSV+Ofn7`51eLzIn=Xnze=o-Y5Qg7h&#i zsUq)Uz|~+wzJ&-im3#Z{eND*w5c{*f5lYf0wPO|Dj++a)Y-1H-jsPz5672ki^eK~B zV>`DGy4gK~=R%A)_OUsIh1e5AXqxqm`FSG~)!)wo>hnQ~#H`r1>Q+>?wh2JiD`oWg zId8S}a%H`>wvjq9-4_aqo2wt(@aN(m+c1F&(+YJTgu7=+g6Fhcdr7tr_%O2mg4k1UnAC}I@`a1nSAjURKNxi5;AxFj-OEbg2oqrtCDL(djWiBDgw{J;i*Fu9@;u@B>)eru&c}ZX`aJ1tLjR!m01lYTI|f zdD|AJeQW;}?=qF>v!`5Ddbxheda{CZB5F**`>zfY~S!H>hEMkR6sEM(DZ|_QEGa-3a<*moZ!;pdAfgGTFv`O%Pd`4 zUmGckUq_BQdSO`D=20p4<&->wQMIJ~9fVGwaWn|Kx%p5$QqE6hrm6scKcVt40LRwk zL3WQd?XA|Ag<9ojVDKiqwiUaH5{2oQCQl9f0}EyM=U=BsFbP+`4bc0FC;th(9hVCt}QvMPL>wvo;bHrmo(DI-jsyG6!7+S~aE^!PCt?nq(SU#r|&jO?Wuh zG)KWV-gm8{jdfyNV@CBxB`>I2Jb*?DZzq;3Qb@`Bp+SOX0V|#Onn*M2$roZ3T`w2v z?6yY-Sx1pN8eG=zL^)_$1U*r1T8+paKhqlvh*VN}Z3M1Zt|Cr!bI#Wu=L?dfcY*o@ zk9i41$CSR{7zHXo>rZCst;ey%y9kLB2Ol@K6NY!!+>f(ejON)P_RY!;oZL)cm#Zo- zKkdFH<-D7!{1UuVZ<6&ok;gD;()#RG*>n=P)6N6jQ`OKHt7w~bkHY^|w##tEhN|XE zgO#-dxH-!U^t)X%1HC=%Kh`>x9k0Zm7eE*Kk@2a1o#|<#n-HwvK0uu}DJ>uep@owG zuK2(u7UP|)5dZ2EcF*^R3+%QJ!E z--v6ZavaIuy=YGD5~kd+Er4(E@dn|pI}KK}H_T6)ix;X~C?hbE4~wT>c4hC4Q2S=->TD5^&GZ?o zR|1U)n4zztb!jh;aBj&=7wr!Homc7Ftdf$C zwuTEnzO5WL(M$PcIVuGQg1Z5%b$8Q42;%V}9PRu9*PncyU5NWh*2nyJhB|iLn2DM1 zGh##23rV;DY*4>8w&;})Ca=vW?v=aQjrH5S6H3B{#Qm{yyQ$#9uXJRjWE&L)yb4Q0 z7lNa+75NyHHgWSYrO%RF=FR(`GF3>omfZKL_X`H<{I?_Rk$OdLG-Kcm-{N&4-{4hN z)3vCpzO^!t60@4}E}+Kz!Nx1S{xJP8LrQo$PG_ESPtohz&IlT9bUe~G*@+<5Mx*3c z@it1D(=j1FZeol!;%nRe@LUv)Nm z^D3;;#a=F;3}tt5WXzb;s^DbwcOcUq$rTgF$i@mhT^}^o?Vyntq{k*=4%OAQ*6|bh z(th^&CbkSLWDA*>rrH?c#`Ml)`Mi|e@J)-%;|+@HLTJUFglY>DD+rXmHu;*aUl3-+ zUB|m%Qo*l&9p;^1wq8%R5taPq-CgM{4{ii^@KL!kxx}lIwNW|cK&9lZu5)X=S^$nK zG-m0e(yt>GZAlXVY*PnMx|LJ7q(SsnYwp6de%ef&r9w99lUJIeNV2|*)GJ$1(8Kqr zJ+5{hUqaxLgLUZ51>i5*+NMKfb++n)`vp;TK|=ud|4@Hz#*BPpf!9Fg(6(>`v?e%6 zqTo!kH)7?S&I0tkY-;&-C-&8=hPNNp2kdCCh76MgLRYp#*;Q}AXx;NVkte4s!~m1} z;-Fw=cs8+vDTi9m5EowV$}>ZXqL;S-CG8mwdYWAS-Tof+SOpj>dE3VF_uKxBc$dEb z!F{h$=|5TEtFV7J7x)*!g{7Haf7QM%AuYYuX}<0w%!pi+sY-i^AOoXO&t4J^rwnPH zzb?~3KA0K%q20lTqK$6}3jt@2ve)^`$d5H{Wy@n-2*C zIsh+ozPyG?F96(gYnms$<=3EM!WVHm>e`HZIDwATeGJGDgWYi}W;WhRcCugQ2+*x$ z?DzXlSdV_2_op|Fh&`jCh^&fxdYF}7Dbq7ArmBPk4P8>0ku45xR~Hn+7pnH(QCvB2 z%ztMSQHvqFVcK~G-g9_cewWBn1pDC@OZF42SK`0s+Y}9;mab0Yk2rvvL+Viay@^pd zln&ySWqP!cnjxzV@P*#_?^RbzNZrQ`Tz%Y{nEopiwtdlr#?FCV-Q8@&Ev#&&hN%3Z zE%y{X?+VBDv;bD}aDPbga+9bl(I#&^Vt%T0!nK!zNG}9*qybX`dH8kRiJEhApvtdpK!0p_oQ3$T3X6A4IK>=2#~&rY!&cwtuoG`qKf~yXj9@H3tSs0_fcb z<`ddcNSnI4C8G1`#(Q=6hk3@AXFe$Og9+W@BC;g2th z?T$B%sO1r8vYT-KrJwC&e{=)w(*9dU<6eJW8WC!^gwKrE9dudYZ0M;sf&3+v)k{g&?O(VFtRGAS-2hXJv%^zPAJ`jKf zNhc2BLH$oX#N53!=Sfzy(H9m7L8OG7ZH%A`dj{!9I&D-HCQCgF{{V0Ql$19j!g33{ zP2PInebW+fN|BDmMQ2J<(vsdZdplct(_`2x2)_)0>yL?@G){LlJi!{9GULKxm|g<0 zvBx?suoFOz79iZ1)C!N9ilJIJF+UK^fNzg~EWDnpurZqBsfqFTu=f{FH$1}ZgqF~U z_Pd&^r7l(qQL0M4g_%%m-hTf0*om&()196z28laX{_VgJWTL>h?2(I&u$yKvg`UBpp6^OW&&Bc+~rzw7RR8Km}Y4 z=FA(k>+SjD@b0Js#`8fk#p<8(r$0sv8L-tT&tCtVD!VkXFE0_7c0<3q-~5>H_)W8p z-q3`4?+TC*&Xr$Cc?9ggXh#VJKmlj~D-1Rptx&gLpNxI7A<@G7@Rl42V_0}NBU#VU zewL7GQB+j6ZNys|F&FOgFTzTg>*JNuQH2_;jV!v%rd(!{0ldnRSFZZULjdpB8Hn&f zLa`!rT!R=}Yb;66Par%3Ol!XrM)})4E^6r59h_XIp8obZ492vIM(K(fx$F{*66K_g{etQgN$^Bw32sJ6^< z?6L7kNs>xuUWgn@#c%Klg1Q`9N{mGYcqm2GZ%2FmC)lp)YZP)$vk{6>uJ)U^5X3MA z{SPi?mSkGck24!z*F+bJ?Xc*BE%&jwixoETiYz48L@V1|v^Y9{F1E3uWD>RGceFoY zr2|bjC=zCX&z;9a2XfC=&YLl&1Y{no7182N+2ngnRIISir$b#m zUgfDou}>s1sqNQEXi$zk56BO%GCXArUnnOjp9d$qM>UdL<(yU;;%VYVA3fVSqECiK zVAmzkgu~+=V|$#*1{qIDnK#aoPE4KVF14OO%)zrJ$}o0Xc6QqW=bb1a{U+uEiTLoK z=xKLdI(7r-)5a}>4j|5>? z?w}Y1)7AmW^L$MRpDwi7(BNE1(kzPp_&K`0yLfT*%vswly@GG=eQlL4l~tS3S*1D4 z%2CqxY&P3qg=TSJ5^)kegk_VCuoH14uV=M1ut2bR;@dN}eX@!(yV>iGd6(wRu|W(a zX_s1Y^!lX9K#e)GM@V{%&*4>`w^szg=+4EsQjsyoBXX}wGA@D^OpE|GDdrgxxOUz< zPNb&>-}3i;Yb~IgWy`S4?H^qh5(`q1>pi&!`w2&yO$!SZJb@agP`em`C9+z(_U1G%zw(L7N@VX)=!LSi_0IgF z=}E`PI*6;L#C@*SlfU8YZNt!Lah=CRbQUi6G$yL!b-I>=cO&K(>I*KmRN zb6K+IXB+ErgZv)JrJSMO42<&u^U*_@c5!3`;Ry=|MaJg?kP{hJeeVj~twMbiuR$zi?vZ&lwmiXLlYf|2ZH zXpnWGw-WdT z3XMf9on=C*7geyY<91{jHqiX{%kSj7{4Bmi69gGE6Wa->QIZQvosTTt z;ei(rM{c^zOP=&=5+qfM1aI)!x3|FHQALTockLwFH*93LLiATf^2r`-CSXmq=ty^}I{Ox>Wh6!C&!(-=?c+vx^;drq zM1#TfUTb|DA*^$W-H@21z0Z}y82{ZWBkL&T-C8H70SE#qmVe;}iRCK`V+H6^;fXQQ z+z~xx7!v>%!)bV(vNTNb-yQbxoe79jIyrx-j5l%S+kJA*5~Z5!vFsd}aX z^>`3o&djuIzP*M*oXqSnPlQABK=pEnPu!T#rpG)(|K^!c_r-TyR?De#JBg23Q3giM z4niy?kUP7r7nnQJr-&}K(WJZfeou6Et#Xe2dk4EM(J1s%B)e7&y{XJ4UfdfS)sEu? z=}jk-v+KYUj#D>Yr6OZm6bC9eot2HkC@IEMAU8QU%}1NipKvIoK&0w(*J>M(J}*wq zeyQ3|-!!QCgpSRz5`qUINhWR`)UaLtOopB&pwr9QtjNKvUG=R29L+wS@ZRTM-DVQf zcF(~MC^ivlzGNTX<(yyJiTpp%S!j-hUj;j(mrrAM~&x`t(fM|yj#t-ORWqSf& zwApQyI9WqRx{Tr6(C%r3H7voa>cuKM(>!QV)9$A<;?^}v5z?H%x~5qgRTf#b%$5rJ zoESM)SeNB*fi>m$_aAwrJok%V*0mgXi}k8|l5jRdR(g5-St%&-PZWlK`lZs-}rejns487<*8^KlUbGl`FC{8$NBRq(sb`aTXpd@E8 zusN~`b4Ki^MO9*W(k0$4%ZLCic3Mg%zc00$sPcpp@ro?^V<5ufk9CcmoeIiqr0Y*x z`Pj@_jQDoba*{|Q8IPRbE(g|ggV=4jj5-5m-w{=#Mdp6Rk|ktB7aV^&6zK3!8DU4p zHGT%v{6qJcu;7~`K3%!0l>t8sm@HyvDZh50iF;Rzm+9ngjrTiAY?5=lDQ2pm|C}WO zUC<#ZL-u-v72|%7H|%9+G%I}%+0Vn_N2Or^h68{Wcd(yS(0-Dqd?ijzh-O>UK2kWA zMqs-d^5HA@es#F!>LlLyMEaOl!+mOAdT-pXM$W?TPNEYN-(@upUVstO=A$B8tjC)+ zZZJwT-i%pB0wybNSlyJ|17qJrBi<6r_Kxo2b3@pks2>;=gVNSNKyWrga?aO&pyym| zH*DwT4QAeAzbpki>lYeXfaS0Gxyk!=dG}kk!w_SAZ57GOBhlo6G=1X%@lf}pJuUEh zB2}|F=FhZnlRPg6%&zQ<^MOsLkXS@>ywv0D?_Yb&bQoo4IuoJ3d#huqlqaw75Nd{y zuY(nZC4Qf)U8}Xac7^+Q3d3_%d-LX5rK9b>DH3~PEos&9JBd?MqL8-a=v0=Gk5`1& z%H6mT`14UR+wT)92eR{f+HsOpLClQOCWJ=;zS~VdxS7sC;pgQLbT{ko#aRx%y@4qL z0I-DP#-As6J7c9#PhjZ0qyNC)IiI=1pyhP7VcnAI*G{Gk$7`3mfggR) zIM!>JD*w%BYWsY*;jG|P3&i8Qtg!#aZHw#<#&xA z6FaPtTe?av>^7EFC*m!jhe!7wq`pwx4K3oO>dX;GaK8{3N1Z1&S%{(095el~e?nEd z;P9;Z;E@iZ!MTC+30Dh$Shf6xNZL-|{1Wk~v*}r53~xto;GN#u-Ni08lv4by{SSG% z*}g;h5X0B%Or13HR}sf=+>v=TKsW$CJ zJ9j3pUu%NX^u(EMP16mZgYME4WN&HK^#=&|-PqIVL$!6(r1M(>*aF~W!yEX;^*o|U z?&kGpFO%#KOCEv-d`{=W9j44%3CgdgG1iFm7W^uO|dqdP^$@c zSvM^NN;UHk7@b+QNQWl9O|F89YOpSn9~k1Chn$Vw4MMIZf5(E7H+OjsZ<0YiwnKJG z>*29&_}3dJpK%F)W`%Vs5>rI&tbb;m5U*J+*#}GNLXOs~PuRy}=%c$M zq1}M@c@}`q_MBpH?o_UpVe6>HNQ+O09Wx!6|=+#OP&D%8*d2RxQv!tQUIGue80$S|A---Xp3hHM)=uGxfw{lU79YjdFSR{f$^Q_YNsNbwwy%SH=2Fk>fV3e{A3J*=gt`TAe|)p+!C zY1$ryn4mD{4NvAvrdDlK5&$9hB>*k)0GaMYCN2EccplrBtnv5J#sZZ7g!S?QyIDun zJEEQ)f&>dP8S(;$2#@0g(@Ssag>rhr+D8)!10v~8!|1Bt7{DLcH$)G>J(Siz43J;x z|J8FYAEtDPl{`+?9{*3QL^$9w2fLI&$_8Ho)$7ZbFE4Y@?S!e{q8`f8cIT!%_&wzi zl*^H4Xa`VH??^UHm2AjmNGTGd?x%X5u+$)01q*J9{>JZ-P#Eq5ILAXdnm}RdpQu$9 z(+pty4XOG7MHyxfyAoE3z6~l}}%+nf2 zCt(o}o(#z*UdGbfTewtKUB{c+L9!ixs}wSV0f23n2Uc;{s|I_yCm!3Z1+vA#+Bfx# z&v(YII`Lo`+p!SR)zA8g{2K7|+P$Qgl9m!xY4F*RAy(Lg^_Z2+29eb725(T~dy%aQ z2fr@nu{bDNaEgAXEqL^2O>!@51tXy>pcikbu$FP+$;5s{)qeVX(1H2o{S1}GMN<>n z`Okywm%sN-Li-YebTKz3K{-)rnyTq1csHGZzJ!p%({Y$^3NA$2EZutuEWwo=$paU! zIKhoMQLG5I;O(_Kq*jax-uR;!C~#AEs=M-`*K#Y|34F6p;z(KM#%&35Wb>^b4lLe< zKCn480;y}d1{jmN4kfm~Cus7o^j!b)8U=*KKarW|&%FMO904#MFG(WSuP^*uWr}7 zlqCDA-^sXt9s*#{iU8(!TVJ8 zH%`D2&R;&$xS$pwdEH|9ljr-3nf&D)NP!tj+T`Utx}IW)E6Qf{_J^|6>S#QF%Z*ZABb!?WEX)G!pmaPDjswZxGE4z=%HY#ixp%FV60XSRW_K>g z62U8sSinfbgVjGmrE{Gk|!}%-&tX@DiL}r=L8+ ziOAfsja1ze7sG}f%$m4Vm0oyKlH^)Z8Uy*;S1VMahW|p+`v%#Q%XQ9uRKoYjKNWPV zl9_NKDG2l+Bs9n{k?TKANk|4@FT!?P6hZ%K76uf7sq!Y-jbA1C|5b6}u$zF;3=oJ{ zUfby_^;Wq%8kR`I{2a^){QQX;v}o0HQ~&K2?92$ zG*}+#``_u)HVPkEF9d*Ef)e>QmL{q#SnV6b1ScUb)l-=n+s_xu2ZvIrh1?sh4Gjzq z^ZU=g30j{~92~*A>O#Wf>Gdm_Oeuc2o&I7E_;ep^Y7A_5Sqrp)&u62myBt1EOu@`2 zA4sbe5nL9WZ{3VIC@T3P#^&9QghUc6`BFsX?{XrcWD*>@uI6X*rQCAiHl9>igr3*j z;%PbW!$8!j?*`v>@p@lF`9Spva^Tcra^ZwEP$U0ppx~`QZp5qmKh~c;sk}t`HI~9h z{^$tcSmSzdjA-0R`jC|ZNiExi-6Bl3w0w2~X-sBDFMb|}dWIyYv^7%-0c7+fma3kR2 zhqOieE{SeuFg8)AWE%xDgmsmUVmxtG$Y2s+2*RO;ooL#lwUX4r(Ad4pk$N`Zn1Wi0~N!=1|g_#@B@Kt;3d z66xo4Fj~6k25)_(PwtAq6N-#2Uy>N43(N$Pww5MP|tj(BCE3L9>%9az_V*11|hJ``JC=)rKF zYG}SiowBXFAJ0xhbk{kTLQ!p6bi&yF`}pBM6og@S*&0wgKXx#%spN1mUi9c_Wl3~< z@`KvKpoa$o28Rjt6cjOkQILbSG_;s8w*W*r9k=E*85pH|d3HEzkLui&Dy0Zrmenp! zRFf##d!5}6R~i@M5guWe1k5eS9NmNtL`R1+iz?pq#YD=Y+HRc$X{^2J&1&+g>Wr$o z`sdn)*u<=%vAR9|W*M+yZYi*`e3a?Q-p^&IM|{=PJ?_%rr~78umc`N zfZyI1?=!tuW2r-=-p1zUR24K*GKHl;`L$9V8o7{MtCUe-2lm zrj~qiU08j0O{t?Z?-8$Jra4SVmXx;djikt|E3tEV{HxNmGZ|f?)3Vp*wFmdX?wwd| zagr?MAjlctU6$^ooxn-n`L|>#{lZ@;50=}PX!+>Hi`E>Rwl?hrScRrX<^X!&Sm&e4H4SLYT>p4B)hYf|9= z?bb3D-G?{a*G4QN^3Au6zYGIv+LVo`LojGb49&3`w612!BCW#E1Y27?a-5qW|9USs`04m>63PF z{N&z@dqbWkAFj_?pFS8V+xO!22jU!q75*ddaWd|8J9;QD%N>9 z#Ft72;iYQu+J}zfo6`8u-X!imexh1RGYM#;47UsTMwDIOV$0lmRsbPm``Cu-3G-vy zxQovg7j%K7xSPT9b>Y6 z^fBvUR<(atuVHmL!oK!N&djtzw>R!vD*LOT$-5kIOXX}%dq}toZmBA|G_1(_6&lU)lut_d805G{;qX`dhkN#&5PoA zQlL>=y%Sw)*{?!}p4C^&fuZ;4^^-@uDM?NulD}P_2E7ikhjLWacUhx4&h+vS=CvFP zAogZPj^Vso-KMvkriUZiNIzQM1(!icZF~L5dQNXC_dLOr1-5B^fABu`F>!+JGas-b z3>p{nmPGX72H_pK&aSR%2*d6o{2_w;Zk?EC%({Vn;}IM*P9QEj^&$LNz30po zmYkn_N$db?*2Orv*1dsnbI^IHt+pXAB-*>tCua+^N};aJ*lAcM=g5?0#xpTXOo()0 z1qs$&;Ifw@ydQd?QkWd;#Rz}CWOG`RjKZjLHE#+=P7!YG;{7(DdqZcR$y8EymRv!3Z%c(qV{AODBRmNzHXF1w+BWu(7 z^=M+Zw7Pkd7G>mP{V_PDx%TuFPS%8KZix;r-uFZw^qQV?heYrj-Hg1C$S4$SclZ^J z7MPOtD^@dKs8^Zi10+o8$k3pI}k)C_o~gxnu8~Zv@VspEownva!rb!kK*Tyw!QTTkiJv4^WhJV^o35* z*}%xN=L>D<_ClBBju^jtB@;|6j{;0DlVHM}E^xgLNGOtwDUBc2iZ^xL1z>`)UpZfT zh>Q%aHwnnk^<|qFk#28=?@yhe5&(=IYhTUV8^(VK9~|2={PnkrE>_4$Zc-nmlP{JS ztBs~B4L?-LgLh3mn}z{CMX!B^Y{Ap#UCluKiWk>`g~#ie;_wmB3c_QQJ|rS@nOSqc zn=|dG;#o~B4p28**{ZAB?7X*LLJIQ{g~nzTFS?sf?=3XiH14oQSER^;$KoJ8n_0mR zhSwy+9o%n$@3(xG%gaR$cS@qfKAyiTixCTd1XoewnXMR(*Uiy~#KPvCdp?ZQ154!x zV%8~BiQ_OgS_1{D>vS`5|`s9<@aTb`fXd~UEPXlmQ?qM!6xU$&(Yv6Gu#+tVa^ zXL7wHvor$ERdUiZbU2U*HTP^!Y@^U2do1-fLXLC|O0R)^jQI*u3fUjIKhVtoco$lz zxzQ32Kdp4*b;?B7J>I3Fp=+@ z4b&`}mRxrrZu|uf-+BgA7gg9<{p4nH!$Wi?E6d%SB`+9VCfe5EPaJb>xq~6Yvn0nc z%89V|L+J+-;!E~yHX8gpKcv|v`3=;TxcZ$~b~|Wh=@QwWL&1VYyWnJ3n~ddp${t+) zloqC5>?6$J(Qr={P1vW6pse<90G?0ChE$B;;LeSKa4rI6D_NJ2HO&v`3xQ zQad)9=sKA;TQcfT(Orx3>*yRdU69>L?3;Z7bK?fV0?qror$W8S@uxK#T-oU#9I4WO8GGWAY z4F=q%!Y_R2dEe$r*MTCPCKuK&oT0dZ{Ts*2u#;|OhJc%TAM!p=EEa;<`#y0%IyB{{ z%(Ey;B;5eIKOvin^g(cZ+vMsywGA#Cn~8$~Y<-1`{Pj8)tllmV-mBy;*4ie1W&=q5 z{=Un=Y6%fnNGfP}7KfKfg6c-Tq~FkTy5dAKytRnCKv#{D#2S41u7!PjHC}mx3xaOY zokZ})SO}mvMLtL7!`hci2{y7xx15*ZnrAQxgDhy9?AA)pb1K4#&JazeUqLq&kQ4uXU{QVY{P>>yhG<`o$eCW(;8_&2F2mm1 z@a;q}wc>y?yU@N|O<^cb-l!Upj+n^Vz!o^+q)h5cZOSwyf)AdDA{lp9A zVjZwt@9K!A7V8}W1n;yMt&Py~hg=OIw;$4bCSEWr+Jz5;BMKnviAh(+alXu&yS;Xi zhI9hj<@OL2&Yj3*8c!MlDA~oNL9ksL_~6GX@dk7|$&8AvOUlO;xi*BV?5Xi(XkL*W z6!0fBU%8*cZKm%O=A%47EwYpK6Z`IR@hNZPOG(KCz8rN&`Iig~#YXO%Nk(^i_n+Y1z4FY&kb?n{4&Q^5FRq^?0R;S|(M4hX5G?XQ^!vhB4{#^c`)jD{NY29CQU>rWlO#2b>)t5FkDg@8(!VX6=HUOy0knLe%}2aGKZ_QF zA=~`h4PRq5v|s?(doScOMD=G5SNNe92as_cDn=jwJ0a_DNE)(!39p^qQo62oxysH2 zZX1vQUWYW%EbcGWB27(0Lz9v-1$MwFC_c#U#V-2jh`n_0wbszP+?lQJiJUYWd6>H0+KZJFqd(H&>8CyMF!?z z&85ryUhyV0)&OVuq$q_!pf_nqXn|pn^B<{{q{V+66Z&#EI}ek3=C&pBt*LqK{q=7T z0F4E3;7g6YMr#K&o6w%9e4X0rBcp*7V`(IlqHLb5YY^0LR_z1vf4%uKLOW^cp%vfg|c2#u{$`R@zfI;HKk6;*z#p|6-P1Ibfu>R*D-vWcyi5 z&R5ug)+7Vsp1(65giDa7FW%f90k}17)WZYax&-6UFFj+m;KA(Lihs3d{$;Gf)Bysj z!*xH0@7hsZ`#obi!0z?PJ?r_;f=cRGz>w1JjHLrDjjk`g`jrt2ST_#7S&pk#On)7$ z*L#4w3GFrvuKVLCe%~8n0GP^w^$&wu|9Q3m-V7)JO%_=F&k{Z1xJxfuP9SG<4OUz~ eNW#GD0;8r8Z#VvFI42VDM^aSoWzq9D-v0+x!^jK( literal 0 HcmV?d00001 diff --git a/prototype/README.md b/prototype/README.md index c68c5fbc0..0293a588b 100644 --- a/prototype/README.md +++ b/prototype/README.md @@ -35,6 +35,10 @@ Wikipedia says > The prototype pattern is a creational design pattern in software development. It is used when the type of objects to create is determined by a prototypical instance, which is cloned to produce new objects. +Sequence diagram + +![Prototype sequence diagram](./etc/prototype-sequence-diagram.png) + ## Programmatic Example of Prototype Pattern in Java In Java, the prototype pattern is recommended to be implemented as follows. First, create an interface with a method for cloning objects. In this example, `Prototype` interface accomplishes this with its `copy` method. diff --git a/prototype/etc/prototype-sequence-diagram.png b/prototype/etc/prototype-sequence-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..fbab1beeeceb3d65be35ccebccbcc77fb8fe673c GIT binary patch literal 25058 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 MW A proxy, in its most general form, is a class functioning as an interface to something else. A proxy is a wrapper or agent object that is being called by the client to access the real serving object behind the scenes. Use of the proxy can simply be forwarding to the real object, or can provide additional logic. In the proxy extra functionality can be provided, for example caching when operations on the real object are resource intensive, or checking preconditions before operations on the real object are invoked. +Sequence diagram + +![Proxy sequence diagram](./etc/proxy-sequence-diagram.png) + ## Programmatic Example of Proxy Pattern in Java Imagine a tower where the local wizards go to study their spells. The ivory tower can only be accessed through a proxy which ensures that only the first three wizards can enter. Here the proxy represents the functionality of the tower and adds access control to it. diff --git a/proxy/etc/proxy-sequence-diagram.png b/proxy/etc/proxy-sequence-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..938dffc28c1353655685a45482ef553cb83a687c GIT binary patch literal 25206 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 Q|CZs#HQ3e6EBBuL7x1bf{{R30 literal 0 HcmV?d00001