From a6f4ee7339c0570b2acd45d316c88cfd3bcaf5e9 Mon Sep 17 00:00:00 2001 From: Chris Date: Thu, 27 Mar 2025 12:52:04 +1100 Subject: [PATCH] how to report a bug and more docs --- README.md | 73 +++++++++++++++++++++++++++++++------------- images/extras.png | Bin 0 -> 33153 bytes images/versions.png | Bin 0 -> 4949 bytes 3 files changed, 51 insertions(+), 22 deletions(-) create mode 100644 images/extras.png create mode 100644 images/versions.png diff --git a/README.md b/README.md index 201f785..8095631 100644 --- a/README.md +++ b/README.md @@ -1,23 +1,31 @@ # CG Image Filter -A set of four nodes designed to pause execution of the workflow to allow you to make selections and/or edits before continuing. +--- + +**If you are reporting a bug, please read [how to report a bug well](#how-to-report-a-bug-well) first!** + +--- + +A set of nodes designed to pause execution of the workflow to allow you to make selections and/or edits before continuing. There's an example workflow that illustrates all of them at the end. - ['Image Filter'](#image-filter) - pause the flow and pick which images from a set you want to proceed with - ['Mask Image Filter'](#mask-image-filter) - launch the mask editor for the image, and return the image and mask -- ['Text Image Filter'](#text-image-filter) - show the image with some editable text which is returned - ['Text Image Filter with Extras'](#text-image-filter-with-extras) - as 'Text Image Filter' but with three extra single line texts fields that are also returned -*Update* 'Text Image Filter' and 'Text Image Filter with Extras' are now identical, and the extra text fields have been added to 'Image Filter' as well +There are also some helper nodes. -There's also a helper node, 'Split String by Commas' that can be used if you want more extra values. +If you prefer trying a workflow to reading docs, use of the nodes is illustrated in this seahorse (drag the image into Comfy): -*New in 1.2* +Seahorse + + +## New in 1.2 ## - Options have all moved to the main settings - New option to show a miniature window instead of taking over the screen - click on it to go into full screen mode -*New in 1.1.6* +## New in 1.1.6 ## - `Pick from List` to allow you to select matching items from any list - `Batch from Image List` and `Image List from Batch` to work with image batches @@ -37,11 +45,13 @@ There's also a helper node, 'Split String by Commas' that can be used if you wan ![image](images/options.png) -- **AutosendIdentical** In the ImageFilter node, if all images are identical (including if there is just one image) then send +- `AutosendIdentical` In the ImageFilter node, if all images are identical (including if there is just one image) then send an image without user interaction. -- **ClickSends** In the ImageFilter node, clicking an image sends it instead of selecting it. Useful if you know you only ever want to send one image at most. -- **PlaySound** Play a 'ding' sound when any of the filter nodes becomes active. -- **SmallWindow** Instead of taking over the whole screen immediately, display a tiny version of the image in the top left. Click that image to go into the full screen mode. +- `ClickSends` In the ImageFilter node, clicking an image sends it instead of selecting it. Useful if you know you only ever want to send one image at most. +- `PlaySound` Play a 'ding' sound when any of the filter nodes becomes active. +- `SmallWindow` Instead of taking over the whole screen immediately, display a tiny version of the image in the top left. Click that image to go into the full screen mode. + +--- ## Image Filter @@ -66,11 +76,6 @@ Here's a simple use: generate a batch of images and pick which ones you want to ![workflow](images/workflow.png) -### Checkboxes - -- 'Click to send': clicking an image also sends it -- 'autosend one if identical': automatically send a single image if all the images are identical - ### Optional inputs The Latent and Mask inputs are optional. If used, they should have the same number of latents (or masks) as the image batch, @@ -78,6 +83,8 @@ and the latents (or masks) corresponding to the selected images will be output. select from a batch of images, but the next stage uses the latent - that way you avoid the decode-recode loss, or if you want to pick a mask (perhaps from options automatically generated) +Other things (like prompts, segs etc.) that have been used can be selected using the `Pick from List` helper node. + --- ## Mask Image Filter @@ -115,13 +122,23 @@ generated. Here's a trivial workflow: 'Text Image Filter' and 'Image Filter', each provide three extra text fields, intended for short form - like specifying the denoising you want on the next step, or a prefix to save the file with. -Some helpers are provided - a node that splits a string by a divider, and nodes to convert the string to an int or a float. - If you use the optional 'tip' input, the contents will be displayed under the extras input fields, so you can remind yourself what they are for! --- -## Pick from List +## Helper Nodes + +### String handling + +- `Split String by Commas` allows you to split a text string into up to five pieces, splitting on `,`, `|`, or `^`. It also strips whitespace, so that the strings can be easily parsed, especially by... +- `String to Int` and `String to Float` convert a string to an int or a float, with a fallback default + +Together, these nodes allow you to specify lots of information in the `extras` fields. For instance, if doing an inpaint, you might have an extras field that takes the format `0.4, 20` meaning 'denoise 0.4, 20 steps'. Split the string, feed the pieces into the converters, and feed that into other nodes. Like this: + +![extras](images/extras.png) + + +### Pick from List The `Image Filter` node outputs a string, `indexes`, which is a comma separated list of the indexes (0 based) of the images selected. Connect this to a `Pick from List` node, and connect a list of anything to the `anything` input, and the `Pick from List` node will output a list corresponding to the selected images. @@ -133,7 +150,7 @@ So something like this: --- -## Batch and List +### Batch <-> List If you are using lists, each node will run once for each list. This means that normally you will want a single batch of images for the `Image Filter` (so if you generate a load of images using lists of, for instance, prompts, you will want to combine them with the helper node `Batch from Image List`) @@ -152,11 +169,23 @@ This workflow: - inpaints - uses 'Image Filter' to choose which, if either, of the two images (before and after inpaint) to save -The workflow is embedded in this seahorse in a bottle: +The workflow is embedded in the seahorse in a bottle: -![image](images/seahorse.png) +Seahorse # Bugs, Ideas, and the future Take a look at the [issues list](https://github.com/chrisgoringe/cg-image-filter/issues) to see what I'm thinking of, -to report problems, or to make suggestions. \ No newline at end of file +to report problems, or to make suggestions. + +## How to report a bug well + +If you are having problems, the better information you give me, the more chance I can fix it! Here are some steps you can take: + +- describe what you did, what you expected, and what happened +- press f12 and see if there are any errors in the javascript console. If there are, screenshot them +- let me know the comfy version information in Settings - About. It looks like this: + +![Screenshot 2025-03-27 122309](images/versions.png) +- include what browser you are using +- if you have a simple workflow that recreates the problem, that's a huge help \ No newline at end of file diff --git a/images/extras.png b/images/extras.png new file mode 100644 index 0000000000000000000000000000000000000000..5ed796090f4682181a22e90bda63793852c08b30 GIT binary patch literal 33153 zcma&O1zc6@wmyuCil~5;G)N;U-6$!ofOL0BOGrtHv~+{CfPjE>Ntb|>fOLaMcYkBK z&%Nh=_C5EWZ~r#y=K>aMt~uX#jAuMC1D?rA+(jioMM6TlEBRDZ0SW0U5&XLeZX2jQ(cI%IZNJw6| zlA=$PoVC~MT#__j#9v<4R~+PR{BoCkEm_UCn#pIl{`)ra(>DxniE-MD@LFF^81Jod zvpxL9?Xkbi{p;J&@JH@D>0jTF5j^(B=n&^b8H?=wDgAmnuliv9P(tN}d7YMf4L#*- ztxK}X$K9&Ks^~<;ij>#A_9+y@Lqon#$uLkp^qXSV=wbJ49%c-iW7Xh1FNwV?dspfp ziaqNz%^`&#>bH?dH*&*t*re6+X2bDel-$Ebp^JT?71Q;v=4I3*dCrVw34eY|noB&Y zxASfG4JudjGKWJEMyZjmKhHcGNXZrjp7Y8}D*8m!S(-{^5>iMVl%(Z8>6}vKQ0efa zUkI$%Zg3R1-177MP}C6itIHgXl<%8jpFrzv4V@XG`a@DAw|xzr#j$Dr?u-W4D7|); zRQHwAFXa^x);-Ii4b?uEht`+q4by!l4Lf6T^iR?>QOu?!d}Y{qo@1a;2X@S?RgYeO z>>|d~sLL`->-CrnBRKYcdHv(d$3mVbyQ!u%qiyn>m%i{V45x3O4dMh&54T$7-NQYP z&V+3Cj-Hbo_fTNp$Jzb4TU4BBcFPs*cL1LWdAO*rfkV`9Iy0$5kyU;U+Oh7pF?1p# zA`@R`seja4Gmh(w_3p~^%j@Yqh@fmG&T;sUr;5BOT&DU_x*;9_vPJEuK+ z*Vy=EY#UNe&| zmYg(>w~)>H*Y@%5yuEdtMoWbDyG7sRP-VFKdvcO9Yc9$CS|cSS;xEjdO=O5`|1UpFYQ)L z-@SN<4_8G}v6@tB8Mdc3=a*s(wOqSCi4DE}K(X4bZ?`R{tCMSMYgZmgjVR>*^(zhr zqN_=krsmH|a+IZ=goe@`3jRFf3eQ*iqW*H=*Jq`t5x(LX0ood5NO&Y9#=5#lK8#}sV|s3Gz|M|cLSkZPcXviwnpbacxbHR!z49kAF0R;=l$6Q~85X=d z462{s1l?z*mXc)W6S}cs#ZMwXM`sq#Wlh2qYaz3&Y2jQq zW$G&uvqNLkrKtV?yA>J*N5!vw@ppqvehVkV8!?2i_eeB_&G7+e&2QME~PTW8S$@eD`Oi?PQ3m9fPH-Enx|R zgh=auzRpfnRxOzF0~!eaw@i4lrp!l z$j!}7%gXY5O!lTxcV;Qk+IS#S5-&vDl9TXo(uq_$mdR*iqH6EpK)-Y>eX}4l6FIU| z)WX8zi+ujDf`*2)wDfIQCaZ3e5$W!-va;|>YWWlyI5->}oFpFmC4o~BGjejGrr8c8 zDp#q5f%9j)@_))jNc1yWUxU%c62cfgc6^?*A9_j6at^#&O7c$sv6RPl&$7hJVB_FW zIbNG_teLOxz%sM4GTxqRop7EH>8Fcs_D7#bx3;i3+S1FGPwm~9tQo6w<%*7uhKejh zjTJ$;-GU`QV^@`a54UEr*S=5S=3_Cj>ooEylo%*b{6CMcuQ>3QzZ`E%;ILR(S(&L? zPRXdKh|SKX?oH;q{|ZG)N=miTM$dsatGqmBce#(vs0&+NU0t=x&S>D+u_oE)CVGj* z2vc=UO+4pI0@s7zX&*kk8PRsV>)#x{RpGhGat}?y`~_K@E_tWu{c-UnZJHNyulp_( zFi;BFljKbFRj{cTn_?I>(g$&Ue0)Bs7L&^z9=p*c$Jj6TUeT=>-#&IzWx$1ZL^8Fu zR;exTTMi{I0>L8gY+$NWMwt0DBt%)X{w|jbW0!KxKF0hBO_M;%^f(%pUj$Mm= z@JnA2quc~_MlD5N8p4ExY(!i9^Y~L$gSK{}xRg=T*1-;6FqJuvUQ4BSC1-;{_~9Kuw?Y?%nkMS?S51C(e;B&9O~SUd3pNlKg;?L zxmj4g?)C}E!(ygaDO_j?z*<;ZDluqBd;9jSYO((HYuBz}V`HiJvijC-a zCd(#rigDx&cG4HsVur|w77h;&w}uk)jear1qK>=;Kng0%{0;{JAt4kcuSo16Cz4-MD} z`af#o(i4T=f%cF|H;JCL3ymLvZ+<)SwJx^0&06SuUA5WqDLO~Gb*oOh=s)Ah*zsBC ziU66`-xF1lZEfP_=H{a%M$&V7-cDWtHr%3U{xct&(sP_;L4U7QoT{oWLO z%W>J|fr5(c-Q65cA@Q-GU@^^~M1OT4i-^~Ob{nJdMX(Jwa%{*83+3lrrA&p^cEg6s z6GW-H)EFpJiFfYa-5xavD|Xp6CUIE^ucX6l91i>Q`#8Opst{D@8C~zCLPMZd;&mFRO>`ac4?Iwu4Yq?_WU8 z{PW$P+$RUmYqgni6zShn#kX?_^{&q6^uO(1%objCr!|9~AA6T^67M-;g92jB9UhoO zFQe6>|MN`N(9FJx>Km0LrtFtT6|=LmE9h6%qB!qs-rd{Z+iuUf=M8up;mWW2%%buq2!RUg#|tIUi19EsrF1h>f+US*>5hUXpzb?b2ExJI|p_0 zuC6=qLXFl}`!w@QIL63Otv;&#k&9uL6m67}j~omTQ*2KoL|O0_I%!fDXoQY$H5|1v zuWW8g6pggIH)<3pTUD=8J8n#LF7+hxIB$`0O*$ZI2ee)zBPt#q9;FvAieIfMd+bD} zejgj_go1M1%Ixt(US59URdPw>i)k$!cP-wcsDu!XJLu>Vr*4ANmG2_g1AY?p!E9M+et`f5d%BwX z+8`nK8F|aonwR{XmyZ~lV>0z{$p78)1wSThzZu*~- zmkC2eiP<2v;87#G-EI%p;J|>ey*(QOHj$pq+^hnK%I&g4dHwqJy}dn~*{18&)z#d# zbI5?lBtu0WKD49%PBg-Dw!?x`jk>eLL=}8>&mm;N9Xl3xH<#HnaG)~_I?^K^V*QHI z|54!eo$BxS3Ex3O+qt+o-RGTk+j%zr{%HLx*8wt<|34d}rnRetp*-jQ$LzW~;yTH` zI?}4x+`;U*-ILL?<{pPKr|`r?X%;*g0{eU9^Up=OkvCDpkJ}1^v@o=D0n4^8Fy2O1 zx!P!ZL4%=r7qAkHPe+@VXV$N4UO$SLbvp|pZBH@?WojqBi@0PQ>;$qyv$V;YsCx3M zWR(OqewuqXPx0@dh31b@@fE(O@2`DqBlbWN^M;St8=cGWBz-_G`@FF3q( zk;2*|oux40O4nML>T}xCr!pKU-P05}+Ln)t#GrgfztALomUqo-Mv6j#-^x_?UAxBt z9xR$bIvmT_m(&whhaZLT{9yHud^cskvxhcwc-;T%3wAVa2(RvSZ+frUnJn+8Sbl8I zxjPw;ZL(lqhow?V)3=k8bAkM|WVk!dcJdApn*ZFFN+m6=WNl&!sEZkvqlc(-9xYh- z@4{U%QIKK!S}MKVQ_IU%-d^z(=<1}PDOP2;WujdJ^L^j2ozU+H0lLe%O`+YxZ=X^n zt#z0MQ^O8I9XA@5Jzy6sGbPPOdLBx0UYfEg=4H?99y|Z;Y(E;d_P`O)5vS&I$lbU? zC&)JcB*qBPCuYrc@8FeLs$rO477%qpio{h|9bV*iLGQMEI&FA3HTeja`8jQS z5xL~qw-(l)t};U{4{;iuS5{XWXKi!=!kDrHlo(uXiLjWJo<6}OD0usl`Q?0;iB6Mw zS=)L(CVrT{l-O1wtd4{@%w?m4w6 z)5E2lh7-C{m2cT)1<_$sm;It_o2X*+fpHhDt1`zO*z8L~_prRka7q{etGVp^slW^f z*J|R+1vLz=UCWiwAU7WtmvMJd$3Bo$=<<4qq1pLKyDA}K4iopA+M9k|!}$Wjcs2_( z+|ui(pNS}<~Wq;|;^n&zL`Ucx8_VbckYFsBH!Z6Jk z8Bqvfkblx?&|Y{~dozF``n(y-6G?YA&~M@X(!3p2(Hw!h;Von}(Tsi;b{60Eb$m&4 zdis0P2G>=HwI;P{U#&38CG)iQ3h*88#R`UuEH5TrZpqf4mTlUl?O&A_x@4!1Db!sn z)ljR|edOtEyKv>)O5yzRtBJKFGai|r>?N-D3{cujN=jDF&H>oxe*8#AL*qX&p}DiW zJ67+`2W(#dNHJfsxc2hW67^yXN}(0Gv=KTf_csI%g40yHZR{qfGY}>b&Ytjh)Gv~U zTnRI4kMX>s&M~&)TK3LpAIbc}Y~;eiLJM)^#{U7JU=8aJtcZs9WcEKMdygGm=`p@< z+Ou8Wceaerbk^5VzKjHuB7;tSQc4O*UVgsI@nWnR%uwg&=XiH+z~GRJG%G62G{DfOLo9Iy#IDk6Kc97#_=a2=4=)WErh4mZS=hLdQ z6T0Z49m<{TmRj)lUb|1Y1S}h-=bA|!Fy+J)3TgavjI-uX(AhC*o&A23IpnmX?CGxd zz<$oagcX-|QLMMO_eWVIMZbWF_-$!h`O6jdsS9bbjypH5l^XXnZ6207ZEFAg`Sat) zj~}2nOy zS)Z?~paFDB?YsYq9kV@2JVWn;=bNSoVQLjwYHU>7vn^Ywb`g~KQ2pL>5cIrTzBh>C zU#JBdLtCvWf^o3m&;hWNB98 zO!rn4wS(9VC7OFO+aEo&h~?+H+lw~pQVN5YviI!v@|USZn8=TWyDTy+4Vj`&R$ z7elKqyJ)+&I71MQ<}Cm^)x3z(H0<+)^@Gt|J-?Bm-GcPsJ1jq-zg8XWM*KJQ$3nU> zjgaKdXRvFmr+d5_cph)A)djEuqWh#(6H{fsoIY&6y17Y%cL#VbU+p4!e*OT(9JylS z9)gYPH6|D=L_>dY1UKq_$SCk(qv_LSAyBP!d!Sv!MequX=kK%=J4a?>m}8YDUXOVF ziDyIL^zw45;I2GS#w*P-|7Vr2Rew+BA>QUdmO1q##)tKW?60oiRY5kxEs|?qNND~( zu7YmpLCQ?}pFQ8_c~tmok10Ng~?b{nC~YF2DZRM(3RQywC($4F{1#bcJ= ztP*<8NgGmA3Q0V+%1EK~KZ=(zMMXs=3FV_Fx*Ak~i5nDwd*{ZW`M+f-6-5?eWz&0r zG8ScYJ`OAaEHt|A5~2|l&v?oM>4>P3zxKsnbofiD z5rU%ZaE=v2VqP`>CkD@k9U?-X>1HOm&Rrw&>${T?%;Q=4d+(*wR9j%83er|P&E>mx zo|DiNtdPECgV`p(q2b}}9~##ElLD;n4=bx}c$1IZ>Q|P@ZEM>?+k*=3tChdTKlVFL z67)#8nDPh~&v<8J=p7+ICA;cDo16pk4Y2X=H%1bsH`|R%w~ve5Q(!0}IqsxL;(NtZ zof9~4`fLDZcxrmmp_r_NZ>M?n{a_j^e}ke`VL%IcWX-Uvd)O zwI@9KP9xMZrf70}jP4OSY%Z43Pg{>pg-|V6hwbd`GmdGlHmbg-3^+J&bl@c}VZcI> zI8ksn#%wnr(-hq-Y^V;R8ewi+bl7h8_k1_bqu?e<(r#4@G)@1r>X~06IfJv?&guCv z`mu~AQrU_ReTl>1`rsC-b_kHx`zyA~ZReAoOK}tZ&jaKk0wxDL27AW|{gN21#>e{n zyrQGC^GVJi-G3ioi&CI2|K9%o?BQv@?{c%`ZhQc-ecCgWnn}6!V0FO*zpyJ?`J|VD zgYELrNx~^5qnq`LRXh6n+E*P0Mn?R{*X2&q?`a-G>w*&tgdEVOdZlA{L_{+DGU3JC zM7}u(!oJQ&)1=}*I?lRdFU0=+kut^J4r_02xM=Vci!rJ{Znefleak`+68H~NM5e4* za0r$w@WxR5ljUNIn`iB+-WvumyPrxgEG%s;ty%B&4 zLVLSV0Zu&(pfDC&TiZ=WI|L8Uf*=F)=*6!{&(`19OIPBZCYmPnp&lnfMrhW3s^$4)Yl><|?cKMau(zn&%k+ri9~57IXce)*x<4&;Aju5@3Th%3Gr=pVFXICPti~qaby;l2Usm)_PA2aN(BC^HiN2T`LDeq0 zUojqn7+eW*`@_vA#J<2FZOqlPv~-sX3)SyvU*4nV`&SIyAgT?OkJwYgY*>MTftAkN z`UB1ZS(TM>=$=Q-NqkOBX7oEyKa>m9TgOUG=1;CjNlRB9PPslJ2>DW0M%87jq@pr7 zI{MVaghnx227j0RYqXT2BG%;=`sLSTrzuHmYwHPj1oNVEHg|ul(v|`=6JuaLZI_Lk zn$d-1tgVamdm`b`fGfbc3^Bl$CJt5QWp*sF>yZkS3PdQhMi}^C>$E5y)LZD8Sw76m z%ZuRr{t(2NFAj$2@eT}{mG40(Dgg?S(|YQg*R`9fRje-7!KyInYm{5+nVP02}& zIL$X7d!XSX`s=WH7BB?cHo)fs%h_#oUNZez?-~&9ww{|BR#l4v_wZ3eFlPa=tKR-3 zQ<(BC8GYi`*Mov_GoBIePD7~^;STHq<)D638A2;&CZ?sx)HBM4)5*=s(~X*WcFBm( z>IH~i+W?z#VR118+arP!gdA@76ZX@?O^KYr=c=mj`b~Xp7UWS!$R8#4n3k!-CIDm! zS9UW&vaKHe4g!3-{L0O#TuyPFtN%zyNXTQifZ};t;n{sye^^(!%bHbNo8)0AL3bNyP%mfK0DWF#m~Z@1jcf$9he z2?1@w8wNyJK+n(75Q8$LcPZUvy1?h`|$P*PU5+nC_FI*WrwBbW3} z+3(ZGkB{?*?FMDJirtRwkZ>7Pzs}5%5pr7U0+wJ<|MKqVPjz7FngNql?)LJ_`f4Qu!5UJT@&&277kAdJ~+^cUJg16}dD1`gE25d~dKH zrTy1%K0-GIz}ITXYP<9ef1`394KSanxj8uo3JZX3(5`?C9k;5v8zSC3kR^?eho?JM zVuXQoDq;kttO3ZIKoOtFwNTPD5<{`6S+OG08|V#JA!q>*Q3XGi|3 z#o3HAbI!VnwmSe*8AVQGHBgW8t*ZNTfG^(O_W z4y?RJ-)PMUar7uKq(TjL?Af<4E(%W(7> zducbm|NPkno7;KD>!$Ncn!oc_4JU z9y`j{ZVN%w!?CVV!+{CqKVFEmoT|ltgU@CxTC}~A5hk8fPQF=OS*iNG2&SddQZ@ov zK<_!}>E2ykQrd3YVu-(O5GH`@gkI`}ogy4SOkZqJ0H}&^WE#&Yj7n12`g^2BPsl|b zX1l3jQs`R%eSBZDgG^iW*$Fy(dW=pF)@uPya}%L~sv0bp)4XW+h@1PVySqSga)Ie|Tt5xHOSY#oao|mT#+O=_JgV|Ih ztj4fG8lkj{ka!&F+1W9@#9Y~bE#ZD3`i>};I~z0AE1<`e-EOBtlHV#UPT`&=Pe%!n zECC}E-P^d@FbhA2-K==ZC1O5Dh7+U8m*bpPwcFw_)7@v*ZkgX^VP|jo{{7j+H6wO) z4GoZUBt}6^@8jRS16s1I6s0tWwG~Lo$9UlEC>O%#5zXvGD={P-rnRF)OZ=vjUXA z1XIzAM!J2_1v^C01+bHqc|Fd!Ek+7u?e?Y^^UU)VcnifN!xL6H0wxWp@$OJlC0_hC z5t<)NyyTvyJvniZ`%Bmq7f_p`oF%H;dV5RUy%UJXoyP z{I-&%yvH~QcN4KIfFy-pytA`2aA7B9*cyoQN%c`l@%=aB>!BWx!f1%0)0_AOz06@hO~D3I~6U^BC`Z$x&&BEeW2DOxTcw+iCp z#7s-zvey2xX-tJy_oTmm-2>0iTG+Q8Q`!$Qle9ZredR3*9;wtS?`_ z%*$3HC*pGqwsv3BaJ$$|T@K-zdK!iB_~1WDdPo7Smz#|MMgMPr6VEzcOBPwA~R8oRr9KfUrHZ>>S9m}6z=n`yx z9iEO=zoLgRU}$7S5n8!&z7ez+s6(aTtSGmh?#+9VkC1dhJkI>|DHuS9xToGdM?-xq zQK#Rdjj*5)k}yzYu*iUw9ILXYK>$GLXLYWJC4j-ST^4Zwzf?@v-EI#fr2$_I&`n@l zf*P|7bPEw5X9R;W3!Z9)6)_w|oD4N6o6Z-<%RqTNrK%BRo(018S*O-0i35WzT;+Se|0Ig|QGgURowPa~N|>U7t5 z&GcJ#gI5e_{+)*D0Dm(i!o(@eye)z{y2@lIeCBPrL9d1RCbv+p+=g5H$=@_xJXlx9 z_$%wPKlrQ`+g@>%xUV^u^Vj)JOiX;)G)SM$08I7eFt7QEb09V6-1~rQ#Q;Q%zr}@P zySOk%_RgaCs$fn!F29_p+z>x`eLA}Ti;0qwcbqrl)<`CPzJV<_3SYQ!DJ+~`!!LnP zZ1yqK#G)$A#R9gufn`BB(=x?Kk8{BKgpEum>*%k}Nc;~+9>TEkm+dQUYsmg#V&ezV z?*JwEzb&u;~1DVn;h-g}s>wAIP% z8L<&+b+Jx(`F6}wPCXaniP`&nu+dQ`0Es?N72SL<*J#UW`iu|e1!thzT~^0p)ANZi zB{`IbVaTP32p87QO^@`ZCry^~2SR0jd&Y)ai7GI3WERCw82m|ppYk4H`DeJVWvuM+ zUaVf8(!lVnbH1Pg6OWlREB#$Ngt0^v3(a4*mXa62ae-HZ_;9)r#G)0`wHcbroydjxF7})mdx&+yf=#XPQTh}^aiwb@l0U~J(|f?2iEy& zdfvMbA-43gw3Y&foE~7A%;m1AOxr`tcgcE4Q}|6V=Z8z?JFE{6l)(foqvRT zZx$oiKj57W%KtEc!n+ZLri^&DL)9id9}gQ~$??j$IHjBN*j@iJOdNfq3gJ^u_Y-~q zUYbD?8jN6ZK-*RoiI2JaHxw_I6^CSsW?N>l&Q63ph3ScM z08|HS>YW=t=Kd7Noy-`uK^?OZZRd3q*Zon0P+Ow{X9WCVoS)zRyyR~2F<#rpy`y*2 zo(VDsv01%^V?S2a3cP-FSTyiI$dx zj*T&$$oml0qajr?I2iW@BWQFhqZHdW&DCtE+-Or@joqyou$R;qR*+Lr$<)pOxkSf8G@YZ2fvMO z?VX=Dsup`SJ|-x%rk(pA4PIW{3Tnlyh{wkdZAbWdug=!7DXh2Arw6FeJP<~Xk0UkK zZn*E??KQZLe9JH-_)~O$_v=s9N0XTpv>{dRsQ=yZyy6CJK(HZf^K8Tkc7xk~qz;TA zR04STM*rMo@iT{~;KHG6cj#Qe%+}#b1}lc;`MfgVWgxHv{EgU26z|2S-$A~L?9*r( zG>mo2@AmsFa)i}5CI6pRV>==K2k0K+I}B~IM+y;?4>~a;j2GlXK0VOsmFFiA$G2~q z#k=-5kC#X`nuK9Ss`c3^7pTI2q|N4~r-(E4--lNyv(%T`cXqrB$`Jy&fd$b1biJZI zBzL|&?ArJ5-;rk52hm9dzkwN04Z7d8YZQZSFl(P3_jw|83HV+6vm;yJfm#9gsD3fM zSHdtjKHd#;BFKQDKf`QnkI0t@*p~F!CT~{Lq2RROY&|SsXkE80wQd)La{x9-BfmbG zwhS=MywhcQO6x;Jhv0joo;qn)dz2u&DpSrJ8sEj=9eK7lc+3>#CaZUUok4;{m3nqY z!=O`})bRRJr}((Phlt;SWn;fJG{|k$x}oLUDjSdU0@?KG_MuI65}A$^E@PA;b3yNd zfO%JTj|ca2-@U1*i0lQwEQx=3g=4i9>q({liVhI+h5M^ZC1RQ~9#^V|3LohSnamP> zI#v!Pt1h)fHWB6ZlaSIg5eY}U?~6=UOv9u!os%sZL)4wgqSpI^L=oz8PMkH>S|hM zrZ3FtDK1O+2fxQeKrv%8{`R4&if5zFfu}}wXOimE(GS$@NuH2+Pmaj*%R18h1BJNi zhK5uMYtjH-LIrL$=5U#I1Kv!Vom8SJ6OmlW*}Dsvr=?kR98HTquuh}@F@)w0lOHxy zxQM6Un=L=cE}O6$WQ_Ypojoj@k<;M+HvX>LIlWF!?WZIz$GXO!i9g!vrYfx{*i61H z*z24VrJlAd0|TqKIqo{2GDb~z>`$5z44cMZ_zC8C$Cb|W`ThZpEPDu8fa>bGIZsY{iuGu(5GOMZO1wd_LrV4x~7>`ojH;nXbk~yL%|e2;>F-A?^c8D*n%I9b$^3JN-$99c0NwGQWF0|=pPewb2{ARhHr#iDc! zo9hqDK-8c(ZLZ|>CUT}P+A}vVkFQxaa~g&u?VTY0U4K!evz)I(6yGM;??%phgMuM7K!`IwtKn?ZU`3(Mds|DC2mcbKFY)Jl9|D1o5?*Rnj^7EjN{=6y^IE{v=9 z)^GbB@?AmDU`G?ng6-#r)1>x4P||cu*nZiEMs0^-*mCNhVzz5!&)cT|ai~f$PP(j~ zlx88WR9ilk-PYC^qHDkyfdEfZZPbIZm^2> zfr1At%nPZTcGLClaXm{b;_g5vf@lQp1$m)!cKC7_x)RWe!D2HbaWlQhHSA!Zx{RZ+ zUOaE@7P5iSe%EjmcI;=}-mAekC~hw^%kWbMFnb z|7gaCf9vZt7+LHWI>K9;BSuS2&|!K2rjA<5xlSAQCf42i4Zyd7qeSqaIBfgtHFO&& zj)Q}Pk|nuZ9+KqzIw0R*spjmyI>yq z`mR~8JT9Dr^~v)oO)$JE=ts@d_Zwdmp{;s0srufyz`fyUjP_l|`jB*h*4eqqMN0fW z+v@sS>+L8pd*naM@Go9aJ(?2oKtFvikXySO{nXahw(ETn06ySi zxs$ONJ1fl_H=t81TJg%&5Xh=xf-qJZ4XKo#P$C2n+58;PN7E{HU;ABB43)cN)<*W9tdQw$q$JRnBMq*T}xcb1+da>iyAIG z>w6iwri8~^Ie(e|ayA;LXHPX-I@qt6-*<62{XQOr8>^t8*>nwE;48)DF$xm;#k$XP zLiOZ;9UEVYVF5`Qg1c{>%G|c>(Ghr?zy8=Zw85U=O#W7uDAixMUNXabd&i0@#Juch z)QDb`i5e$6)xi1WAByw80!}eXBY_OtXg7S!in8_u$rFY?&;5Ye3j-y+Kl8Mk&TN%A z4$a6Fs|Xr@N=eMcKLlWdVW#rdqGw}Ytguo&wg!JsH6*_1R^DDHl`mN>m*qeH9cfu> zMByJwtUs-Bdel2of9*}Dss8l%=^PPSNZVuE)ugRUn(4^LPsuABInVi0-`aSu0ByeM zxpmH>+Ue|CezL>T0ohbMtoevf%be>IYkK z3h*Ua6h;%-qxoI;Lm-&y1YT$^D{GtcUmLHv%>|{-oEVJ^4iC2e7%3Nj*->&MG7ZDq zE9#IE8&#h+$v6L%;Wb9dh%IM+m=Dsb%M$=nCJDUar1KZa^=Lqh6nO!4O2|^kSFhY4 zy2gDjCtUw*faD2KhYi!D?#>cT{Q-u&B+2q=MsiuP~798Nh}!~$Zz z;&OZZ&Y1t_IL5R2ipy|74)+A)GWr#jxJz!ENUq zcFjT*|96%sLttuMSzi~!n(BH`E;JbzWcv3AO=i6 z^+o@eQ3K?w9C1AegW1F`p5LSU{f0cPthfUVd<0=Jg>;Ct$Ul8W%8Wvu4+(l&c!&u? zQoPS{`$rImfi4;Go$@#93K5B#w?${MXsk->FN%XmCmN-3#4Ox7YozN37f0aHN%qar_FLI)?7b$&E^bKVapNR*>5g9LkDAwW(D&Lw80fpiS{)vVic_u-7}E zhT~-X=FNF{B54_`n6@$TA9S;#oj&!YpmADINqa|v($*FIMdK5P?&4v^c}gRjkMp|r z)LCyLcOUmWCYMQXyySDUd*Crp3lfDlXep%pOJ4+@HD}^akS4D_Dib-U7N=EC`p%F()%GFA!u=s$xE=>O-2R^0e3lySv;X{uIc1 z^XYY52@Gp2c&Htva`-CU#Ze-(?5uCw-cd?cYEd-o1!sp3)1^H^vjL0lPex8=W^@sM zult;JUn8YcGS~Y#yLz^3T7T`o=A5bt&mGK}bKosqa-a>5jco^cDvs3%6@+jIv{4j9 z;zG*!UsHNFJ`@*+2L_@t#4J3F=5yLufF&I;iT_+(UFyk`C;Al+2kL~LydL5Y!if}r z^@RE4J-Fk~PL;j##Re>s`deTbR_h>1s;nr6bk`q+pQXZx= zqGwN)6#npG@1GLj1Y>!2^zBz@%bU5-$)6u8CJDKNWhNntJE7BA#vc-{d1hGMzsE`y znPOjBS;-~n2O5EPkC4!N1Ay)@0NXhbwFuK3WbZ)YXfxB)O|pq)l0Cf@!E zA_KSm(w#)km+6oj^YXd^*50Dp9aNIAn?8*g!-(An`bhc+7$gt^*N-1RR$TuPKoW30 zu<2&35Oqo+0c~)+{N;q>_)B<4$KRuAKd-!Ie#FlYEGiioePp?9mCU}0vCG;T^)v_Q zgZTm5A^r9-CY6`2%v0a*SfW@vv$uRLP)!$n^_MY(1M`8leE*uCS^igOKF+>gqxhulO=yChqYU3}aE>@-<-h=rh_q`EMuWeW> zNDa!$F{5{9`!XY%`zI#8f&PPVje!i24q`SUymxq7JibmO=oSa&!&28nE62?#S%^MB z+5mFIl#=|A->cMQf_M@w14D~d#qNZC-xF?BL{Q`Etf*+sWT;$@0epCbn<6w6EyZ<% z2Rsw-_vc_3?O%DOtxZBjMFmtnn?c(hM9vQ}j}#PSfdB}hT}V$^*F`65DHL%4-D_3h zO36%-RFTcTM6ND1jJNmUmevJJ%8WXduQF=d?bo-C+{WsCm=I)Vk+9ZtfHyn%57 z^Ve*LhQw%th0trC6#t8j2Z7Q-KqYvLw0r*Uig$n+f{Hhbm75zcR#TcgfGc_sA&;Xl z`$N+2uW%n(?VZ6@B1tlNzyBxSCw7$r6mCcs0?QxBc^yl>%cz)F)KG+Fdtrs@Opw_l zHTJRYo>6f)Rkn8DQ(24xIl>$XqVWGxU?GyCTPs>}ad|e8%CmEDPsSLF^km5YJqIgv zO|x%V=2GgvALW9KPKTv^%Tq0f0_p)I_+o2o!$WYrOpDn$K#T-!_yN)6vxf@VATPD6 zBLrui0V&eP7BF?D3*BJDx4*||ruONIr?;7x?%aEyi}1ViNNV+8J_WM>N#raO+rHVq z;l8IwWJb%-s(?_A)5V&Cu6hB8gt!h!%`Q9PG^-mc*_L+rq-TlfV6UI+N}&mDZrT1g z6lH2=CYdKRFf|3-XV_Yh5tuu;rrjcIHtYGSrHsHj^LrY6aX|7E8+Jyt3=WidUV4Cj zN>mp4kl?wRTIbulga};*By#?}?;;52<+Yn=ly#T=aU2%P3hd(V6FMSBTehRP+c3*A zGoQPE_hX_ZC-VNyva*Nq{_aXJH9NseXPuKF$&7H9>7uhW6(LvQwu>LH zp$16()$Ak0ug_B{m??o%mY-h+vQdce{v*7*{O3aQz#7$?Hknl0X0t1Il9{m!XO@cnf3vMx_Qs8yH=*fQ{_ef;6;V8% z2W3geLKY^iMFd#|Uou~b{ecj{fY9jf&Q2U;R)L$y{`BciP^)*3G2wnUqAh?MB@A98 zUK$I;KNh+oC43KX14P^{etd!qF%_>6WhJkT>pAlKe)Cryk6s-q7AQdbfT>b>x|{$q zjt45`^M@z%L|R#Yjc!U<`2g+^y21E(*rZ@Ec-8VQF={kEVHXyTPYv`gK;L4jG zhV6}@hgTXHfHlkjL`j5_UVHGXNQH?5i=~_&y|iQuS#-Zr+v|_U z%oppc?9~*sdOnXx7a3#|eszT-E#VNutj)<9cMohq z+ko8z$*SSp5n*j}cLxHJPvjGZdOnP zvHaz2Y&M@bye3A>fyhm*+sNMeUJLz2ZzyEr__0y5G)u7cbalycm)xQCL0a}pd3gz_ z)FiK09ss((zrRD#s)lmkSCU^y__r+tn?bn~2_$Fr{#~+mcD!;)YH4j^dUfQh#TPw) z3Otz;DiC9;1$TmofXpN~aB}35^-uOzZCgJhs?e(uEeYVXm-|w| zysrS3vs}d-ZZJ84umxz_cCIBL&gm+3WVp}G!+D$0m9@3SVU48xP#1 z0I2=vur6Wgfv5=?zED!3(2=!8xCcabZtksQxps@9y0(SRNWbQ7CYBky{v3=|{b0~x zlEe-aTo&bvJ`9^erVbB_GchC~fxxPA_68!-&d6vqQmDmE6iVrzQCNtU*n^1DYH4YK zr!frf58&b9k<@GphF1VtfQ2*Q))S!5u)X@Fq+FyeD12a3B7H{^k9jAOVU6q3Ub8UrVZ$RinEhdLzgmUiFDLscP;d~D| z(0tI)A0*ojy?FSq_Zqr%-}B_DTqdik+TIyGC z=>8wu7M#pCr-H9Z!B4+=K6r?7T|`paiUMxGGeT`-WQ3RqRJ2|EUakFr%5;3b>4~_% z1Hu%Qo0D>N1}wMpTeHnXLLRwyp7^3k+~l&X_v*r-=tcc%9eWmo=_$Ea^|{YjBRcET>3qwCCecKclOb#)W5Q85Iky>v9hbPvoj5DKmtdv05*$}wXDydF=D%MRIH5w1Uoo6 z0jx?i^-i0?$gi(?SlGw*JIzVOdguuW0Rc#JpwWS+Zl0G&GLNA~^KdNNcI`K)Opzfzx2M}T5DVD+rIDF-ship zdlI+nI?vrv1ZpYQe5d7 z7k9a~SGZpC)Wv~h0}wvl^gfiQZv zTj9XqK+x@Bi(Org9ZCm@k=3sQF1=3tmw)ulZh4v>x6|uo^8j!;VQp+Y%x|XV1Mf=z z&EX8WCAEvN3czb1^?--*%AN(7E>^QnV_p}g-{+9ki5=kZH461h_R+ny>%s47-w zhd9PciBH2Z@ibmmJivYBy$7ES-%z}?^05Me^8fz5vQYD{GEQAneO(f^?Y<&uScBc+ zS#>hpYj%>kupibii&DG!`+3@xyYfc^?j>+Ec?&c$Ck8x9UuD;PK>J`@$i{;f}dd zA6P+l%h-BCvozqSC<|ddUi>jD2iFj_M zr2LbA=eR!q`M#bF&IzoCJZ7Xmd?J5WP;gqGxHPfnewmdVkTrrlJAzQ18nB0Nv8=jB zz0T-E{)M3g8VV8$;h)pjJm5n1fFt>7W@dkFI4>!HKl|bb&b4F_8&TN&KW1uGRmw0d z1lMpbir{;`SUmNq8Qd%Z&L?b$5S$Tmx$2^tc3N&sitDYl_%HVJmdZD|^-(R@$Hb}n zEbKkBn!{umJ^!;tuJ+b>8oU*Pk*Vub9>@eGGc_?XZkACC74G5=3H@}6-dyPZo!sFa zM~YOVzg7~~Jb3xtm#15p_{)plZpR3By6E=m78ya;ptD?>D-YFS6q6W%bBV& zPIF2wQWh35RS#Y$(=U3-d72_H&w8Kxg4fc|jKx}d!T5YSOPj5Q%`BFCW8Z%yX`EAd zcd8D*aTMMNjKLpEx!D&-7r`Frh9?yMNvQ|sFp&xh2?aNi!Nh>I9+F%|_jn*hG1a3r z`?UA_3kUv!=kPFRWr@m~^Q_WAEX%*1VwFR-P67JsfiVstd_BBSs$ry5+m8yvi*g@w zv{z#X@;&b*?bMK-`P1BEEG$D^A&d{{PJ=~))}H2FPnuu7AkEMW54oS;g4)+!>(H%F zdP2ms=_C_;Vcq9mG+5}PD8NmLYCg;Ti-o``EgoiCr$4QNP;G%T!Uy(LKwO2lX>fok zZQR4_^M~jCZ{}N^h7v4kr?$fB3wcfU^g%B7q4tXDK{>7EHvv!0X15jkr?zSjhqAra zOi-QwQx;kj`^=MV+2Qi;--XOc>6w`qaaRzK4|F8BMe6IL_QB^*c*UVR5;Fm~VfKPk zgtpJc)fHak%|ua&3KG35B2?K3ejvk{G}ys=PUEI5intK?V0-JMh?*J!3KkL5;5sV{ zw86-*WqU7Q!v~C}GK?+)H*k1lWCb3)8+-)a4Ns&tV(X~0$wm|m3um*24#<;AC0VtS z7C(C{9%D^@IATo~u-twQR;BzO-ursD_ZF}8x7d_@d^pqfbn4?NLZdwhM|E|Dk~BLa zSS6-m9T(DylH&@4`t+o7LsuSp8#U!UY8h;1*~CPt!s`~Sa;Y|6&WSDZn^NNxTSlA@ zheOFci&g+ri76LHdd`P~!5@0xjyf@p6;S$@wWm6Y?F=~`MxlPKCEs;?Dc>=!&IO~N_;~i` z&wu4wZu$dC4AiPbmjn00^cDTMduh=8DrdI9R9O!r z9y%xF$^`taQkm)HU;c<^PSrDF8FVXx!ek<~DhtOV@$=x4w1{^F6)AjOEG#<-Oc?`z+Zp1$fU6ORK)~zQ8r|a8fL0gYjgX`<6qy ztHnr7Ra<i>Ko4}_wtsH@fak{A{X)z}^G zhvG`V@y)K!Kh5lCPk1CQ8Q(;&yMoP6lrGaySn`XjSk}bXSt%xy$Kn!KZzEUu6 z@^syk^GW1wGHH)uMtI59+s4)^$rAd#|O7c zg}1T>A=VGc8}978;9D9Pu)+>b@Adl_q5tUY1#)apEZBx{SS6#g9SPFC%K=3ipBxk; zQP6WBi6Be$2!oj|obESJasB#h!N==H1hbHmOYw=T^Oq@JZV(xdapB6c0i*19F!Q=v2w5#4I3=O4_p$Y_?9 z1mhQELc$P_6cQe-p^hS{anbUkqn9u5hXHS>EkA7QF3FGW?Jv$Gh_N841MW=WbH0v$ zw)=1gHgKgp;jRpjo8HY{L07sMH45Cxr;#n?d+#r-H3BS*kPy4Acuqe{`9$0#I(M}_ z2bg+{oIMr{v}*=7C_I4}^b@4NsvW7Zjcs5Wq4PB!Er^Qy+Norw%_Z+S7hr9*6>V1d zj`%<&A)a%;PG&NNanK-11qTd@2Tm))zMtj3qyWkv{E+Qn(d@-M;c;1+kEX^YUJq`| zarJRAhbD^iZzd{_>FMd}Di|7iIz62pY}s@9y0E*$qc4}lcF-12)ENAJ)2ghi z&R{E<0o{}PpiqgRQgH6$tqY3HEKDZ zV`w7nd^6E|Gz~`+kP-D}whZ?WjV8Ry459lXk*qoZY6BuDI9Ynp`4Ih^)4XzceGp7) z+a7L^!?9I#b@W2xgM+lRwCi+COx`E1E?tC5ncwMs2(bhri9kH9m=R()iBFB3GIR#N z3143~)bhUH?7D{Yub#`N*D>+5aeis1EX@N3BPuriCzbt965hFDb#<+?;a;s_H4eh8 zg4Yor^83)=jf{P2Zf+!^aJ&6uK5p4?vtYP^%D|G}gze_ob$D7RD*vfWrvrzqYt$PO z0~BJpW%@*cpY&tPJ}Yt$BI+Lm@UHmz`Q7HeCb)x@92jD^t@}pG6(x(ECs>PT)l67+ zjV)$PyXhL8uI!lYP~6M>D@J~SUoKN*;ruqX^Ydo1f79XMzV4&J&>Tu55~4IkZo?L! zVPd{TM9nO7zo9%kJWsRf#5_P-faIeq`7S=mD*5uWC<3dRv(LLwz; zYny&X%y~QGAr;;OoY|JbzuaeBrbP=ciG#CK+wdW1h-DX>;qx7#YD%<9o8PcEse~*a zn2Bv=DU3aOH?%hAOjui$d5iK34;HzJk6t(_cZrlKXkVnq33c>#!z$xq_1bKQbUxdF z)8LbRcFv1(i@K1(IPvpF?WOx3QyHV!z$gNqf)4DspC49DD2q@$%B`;(q|Wnsz&N?oMD35(g0j^c$s>9kwVUa_JuU=0_0 zF41RYsFMCAr*~jK>d8K#c;6S~+S(jHcGK^S<2pQA$}gP5>lxI09V;WAYmfag0nUD* zp~5rO*H}5z(g?|bd`X2dl;RfY z7Y6QMFEw@zr1_jMGlL~R@@&z{t+wF;o`_@-xvSy%oY#UT%cMWljVAQG_1(fqzZ*Si zo^6Xb1ax#6fZpH(gdi=xa425Z^$wmgN5ErIxkbKuW$Jht?>w%onAJIPxlHs?*@vJy3%-^J)rP_Tvf-YsmJ`%t$1>fvO*w}NY6L=p?5 zda?oJdZ)pc`8YZmPE>o2SFsYwBPhg(b54HN=iQ};8A3GTMTD|hXZ35OXp|@}F8ulY z48^GO<dk#L|EQc0 zP5DiWjekk`?is5(leNB3a;u}hcSrtw2?&WsXTgKb-X)%#JoG^R&9=^sVnEq-N;{e6i@ri z30yfL^S&+X##hVzb6#>*WqzH#0gl6)FsA=q5j+n3Q8`D zG`-s43UUDCyQF?9Xl8ub=H(j@9f9!(JPqZm5nCxXV3?+qPzyXOWaZ?VYS~DRCOXOG zb4<;WCz9mT9@uASZIG`nvXh&X5i27UVr)G`nW@M=5-?PV&k|v_DhD} zRje-g3ud@v5e1lr)%7Uqb8#eNIukm?%>e!Ffz?Ufn3pnxQ^hznB2cIS6`}@Rjhf%F zP-7Nj9fR7VK3oS3BtMnrMn(F_hL*oj6}SCe)(V6LXGUpwL@IP_OAuq>vdAb~A?Awr zfjfj41xjPpFeC5`?=I(es9^9yq;-?YU@nGLbeT{8`GPA#fd3LzPJmV#5ZLQ;zXhY9 zMIf@mN?iHs{7dv^)xkUA9@f>-ISO6|^kRI4pR-}o@$0mFBdb=kq?=~mlGd~D;UIe% zvJ101j9iPW7>$2ByfxhT(6)zi45>F?tZ_1*tOcdIjNGItS~gp{N-KtM&k7g3 zYc8t9EiHb8Q6ahcQFz`|{Ag0v>%eypcqX1t4wSV9sO!?iXH4Q0uhPc%`IDZyyyB$RruaFJ79O z&aMd)^SmZ4e7(cGsp_7kayo~g3$slnbC9}S${G7865*yK?vQAT4S7mDY}sWjOoU}! z_gTmm!{}t=h#)uDgF#gh;(M%x{_77FWR}XP&K7buRZqN#HowOr>*}_!X5Sx=(q1J6 z|Gbe{?(D0pU0hoFur6}XWc|L(EKn)khQBLgIRcDRY7r88HD=M-MlTPqE=`*FEKigD zh{{SAk0&u?m2noplf`Q0Db|&_w^o1{`C>>t^gS;KylY6O7@v3NwU`q4BXUm$Mm+=z zwAf>^^^L2op2TyXEUtj+^^80CdHJK~mYMaUB)3rVgde(m6K<*E{=$ezmHjLMrbklN1jkaPjr8T@p{>o)ajc%?LrsA}EakmIJ&sUN&T&yezvStfWP58Tsc&kE)1FA6 zKC_Nvgce^w8>U04Sowi#v#)|3hota`ZU54~{@+JFh1B$soW(8Th?Nc*`*AX1hzxq@ zN$FiJl<3l-tAA>1+vO^d8^Z1+9w@t&SFv&+FvKKfke9tG&{dXkm6`I#;Ev<8JB}-D zKUMxkna=^!(n*pYV@$V(hNxtHL-*BnS}E!2LGU5WT~jyYVe1N%=E&CPVF=*a)>NwP z$#Fd%X}cf$5SaRXoHOwQ5lkGM{x$9ntG=N8mfX?7)1+Mpl_u|~bnhy(-Fk)@HVW$^2W=<>jsfs2~YZKDp90#*41-Du&n5BBow zVlIhN_T!~I*h={7TZC|Ob+>h{NMa&P(o;FSG*;o+cOX&M$G%o(Dre5SZ#{3@kd)c* zHClI4XJVs%G8v;KMQ?Ap2tH-oL@0XDogm%y;0Eu*rwkUiMfMrY_eo805XUfZM==gE zu+rp)@>t-hYIEXWFS%Ee=PLKeDZmsTFQCqNI(<8$a~)jj5qyvbllFD~7aR+#u=I|d zMQGFnO?d0=Br$5iD4Us;^#HISE?wW{TEx>0GW!x&=M(Qs*yy!CPtCqk!*O*C+-gBt zPJ}!RGaGq`&g>6|8l$zZoThtnohQjB!r~2ILhf#MdIg?unrtDiHyjGPSy(dfh$y-( zeRT4k%~kLO&RiPDO^79P0yH<=(ZkGqxMgB zHiI=VUmq-{j>iboIy4;?H+;D+GYM8*fx zd;Z)=K5~(e_{z=S{EO`jFA~#L=KoDK30W`Q3utzu>EK#Pf z6Ec1sjDfGdp`kipK`_L0`Lmh^wsrOyS$%(H1Cqk{%4}KU>O$t~uXp})99{>yF3Kf5ZmI+i_6c5SEu(VeFhwkA6R%jG`OvaaNLAe087_Kh#9d54E3$>6aR}{ED}_ z5s||vA-gqiI#0+j&o4?Uv*(GcloP@tSK1Qtvw7_;ZO%qC0>wyLt1bbthi)g6Xfu`dYS1ZgmIQLL?+4h>i;H zwcx&eki2!yo+Wl@lo^6yAl(D zOuJ|qDL0GVJ9(hJSVY$QmKarCcDL>tGKGVr(qoj>XNdGmZCzt|gze*k;@J8>pWDI$ zD0hcnvuoRYx%IMJJl!7CeAdi8Lmvx{6vPYP-h4ZY{@YGA_9W2A%SQDKXIp2bUH^P8 zaLmj&T2svRf%j^k+C;*#UxIIl#AW)31u12ME~%Uic5J{Fd3TsZkx&9I5;yqo1B>3|77(I)v<>+ zy;eKrj8^jf^_*>{Vx3N&FyhF0vAgDhFWLI7xp;*BVXANBkaDXX_v=M>;@7jg z>YX_i*heB?rsGPQwXRK+Ro z)UhS;bNzcK%J&Hhs?TrIEwJlZ-&s~9ud5ir2QX4-frUHjGvU@5$C?M{M6g19>60sFoE zC|x}}S=KY%ugn$eaek9#f~5a5SN*+0r_H!+vwXG{H8$Y`t;yQB_{fW|u6cwT`DW}H zQny*G>0A*@7*0^@5_PS#3EWD9e3SG=o{81_o{tnq^|~@Ku|XMxzLN`K0Hky8uVqvP z3aASr*y(QEy0rm35?Go@dh87`BK>$ZT0BjwzElGwmHOLyo2fc;U05B(7rL4$|CSmL znm2dpgFFRK3KhJ8Q-O55RRio?m*3mq9w0AY!XyOM0G{bA{Hh4>7RHY#;xGyN^!@vB z*hwHehTc9Nv){NHtw%(Uql+5H;jI3f1*I)zQ?fHLLr8C|6KK)A@MkLAlhU?ydw!d5 z+rfw}T{8iWbTeH}0h2uOS|(boGmpdDDT^9Iy=p@nJZwV6$marIRkes*=q}mS-N$^j zILG(0h<#9L6H82bpq3C0wNvS*L1t5fH4WbZi#$b!9^BT+9*4r6j*#(du^C9MO=e^Z zxeY80^x)s4+M!KU8TOE(2tw}k^m*nEZj&Nj4C?4q1=Oa4?A5MFSF?3(GbzLwtTd~* z1}YRCOOszF!Lb|%l^=AZV<^?}iC%V;9>9ReN<*#+fEtb`3C@%rQO!?g+3r2=F% zJz4gbGp9$|oVcDOY1CPViFn6P=yhRRz9&G3M?DoD6G(0f1Jxh0? z#GV!6XMy&4r_V=C%tI*Y?2!;h*CzC@SNT1F*pFafpesMGtRx+QOIszG3~rk2lgj<& zQ9;bYJuK?4*c;gAdjlPD$NU>6PyAfW)FCqO9t*}F?(Ndi{B}i#`RJZ!G@Ga?lEsE5 z7$YQVjrQwFPs-uHdZ8z{x5lYU%|%GXs3-Q{efjhInom+rZ5r77&p+Tu6Hdxv)2`oU z8i06WmWgln-LM;zn!fZthJcEjh%^}gNs#`*SYu+L|4Fe+(Ii}i=BD`zuY~qTW>Po#%NPIC=^^%HZ+>oKq_3mdMO94%OSJ}#7**|ODhx%&hs3dx77gQPP4pKsT%(IAG~Sch@PV?`Es@}iGSgbFVnOT2yFW%6v(=vB!c zv#s5qyb7^fkcWu$*R6?p1W4KX!>}7~)r)s`PO^UCyC-3QZ51b!qU z$Aq(WaUECtyu#Nbg`rwkmo6N=d80LL4+r*QeZL0>`(LPK;qTC_#>Pe>U=T0u#ACCN z@|VRITslP2U4zwk{Oi(R)`eeAar|-8suSz+Fg{nuTF^by=k@h3;cGn;5xw(wsn*}! ziLd!hHPV`^^3jX@i3`w;3xAcu zb9qMVp8~F6+PK?G2mT+9*oc=p)+)3=PyMCAMxbKVk%!A~X z=qoe{i-*SZ7Lv+7Zr&2$D67&Ja?pt5fuj#4)v+!~-MkPE+L@FyU56YCXv$J#i^=-k4wHIm3(Ks&6)yVge_B?!)p1yCSpqBAu zSPfH4A~ke|&e5*L4G?tV|74YYkBQ5_M z*|D|+>^sZ#mr6z9ViEP!RrZcHRf+98?+YqA70vaiI%sSmVreiu_nYe2Bq~) z+ov%%Gu(O+luC>Y{FK&j_U+MMslQ!Za;7??^{yN5UpFIpsH|*y z_N3wSq?$^5ZHL#f9@D)EL#?k_efeWP%}a?D^wW#6s8U*qO0Dr3lxWV!R;&jI9(R=1 zBL8-95pxlEfpQtOcfAhS$tVIHz?MwntG)3h-9R6fHIU?(QgwlX9eKLyjS~tpf{!2` z?@jH&f>WzIYb$VZsZ*73t*w63Pfso4x}^K&tNTH*)GHyD`EAJB2w=j4`Dnyqx9fsJ!jGP&++DaW%a$3}RH)zodvK)M zVNiWx%!=`O++HHzeqKCPaZX`(!0aov-nYuY5+a%*;HF9*RE==pCDWC+{vH~#0!?J6 z>Jtm~cv*EmsOD(;5NABl)LqcN#y!W%H(WBJy&nHbS;9ispig<#=_JYk^LOZ9DJr69 znQUxED~G2alP}#bF=vSzc@xDxsMgclSW@FLE~UMVc5^aShShHwZRR!np=F?>5{zGO zk+=QyDMG@Fr$82HC1On$`k;k{1@VVk3QE!{{2e0K*0A>fW#w%57cd73UbxJ(QQ5rm zyS4jp)45;)-u%mNNd6lAJnD>RS&Qc8%a+;08kk&V#dp>+`QsLsI0%p&e>OC_5Ea1Z z`R<OD z?u{IwIlZ>h14N7ed@7%Lleaq21;8{TB*@CiNcmY@JT*zxLA>S^+g6HW?uu+CtaRf) z`?-Q;IpkMjxVocNv6e{teQJ%P2QL`Uo;`bd zuWzRm??QP10Scc9Y8NGGMzz@>)Bo|!=Y6(4Lvics`jFGCjo;j-(!xHGzbYuZZsKwu z+lYXB$`!H!h^qYCm6#~S!8@r^mdJ=U%K)hjMXqQUE+N!hTn5R!`c{UVPO`UluPn;1 z?nvFAO0cu@Ihu3s^U|uEbOuRlLPj2r1=<5T&7E5i-XiLBKqHt0mI^BqY zxS)s#k>n#rj>E%bg)Q_$Ufda@c_O8^Ez>vVexp5lbfc-+jfW2vHms~uV?;xBOpCM1 zIU~)d<$zOvk%=&ZA6zS+0}AcSAs0Ia*7&Trzfz0VONs!cBSe|TU+M@oJb~?zYGy(M z^^9qQdo=#?$NshMF!1yJa3(jKC_X_pevK&RSm{0s-G5y*i~|vTYw)grgH^COI>dnK z`ZJSmV)ltz011HzKHbx&tBFJseixX&6;IS-YNCK)tBmU(W=NIrY?QAm)^R7dDFnFv?`?@X*G zK@|v}-Ft|Wco-l85+gp~a-EuY$;E_)@^XB(f4Yf^PX0>l>;0E|;wF-7T&AbGX50lc zg_3iwi8o*PoaJ(!>C3_G1s$eF+MG3bcaOLqWZR1L{o>t(!9Fupu%n4`fvX5F<4Ww{6zG;3T)PPMP z=b_kRZ-jDMGqH*YlgI}W=MEpVns}_PEMQc*KD@$A2pd4|IH@29ayYv3@50-ERpo+b z_wD+A#<;RDP?{4LEARh)6_Id!#0Gj6ZmBNVeabKVo!K=$L*EbG<^4{&IjqOEyeG{w~iX)c)iBlyOy$}u%r>JE3XbOh_(WzDhKbsKlVgX zy_rQ*(P97bq0RmQ%KxGY5__Ux=(|nqo>15nVEJnD)8FNxCrB>+ssHUo9KWfq5$aVNfU0F*hL(%-!e*mL#Jr4i? literal 0 HcmV?d00001 diff --git a/images/versions.png b/images/versions.png new file mode 100644 index 0000000000000000000000000000000000000000..90d28598b2b024a7796406d7afa395265a2f369f GIT binary patch literal 4949 zcmb7I_di>2^bfTKQ6oZ9VwMuKwTn=rRwzZQMy=YbwMT6#Mq8^0idwa)QBqn&)hgPW zRjE}Y_Nw{4{d`~FKj8aAZtl7Fp8Gt{x##^p@8=|7473>NIO#wj5QC1khA{|477d(> z(NF=$>Pfg7@JHrrtc3K7C zlhegC=5(!ekz%L6)0=q;St^ge!Pn325Qr4d)mDp})gdOBTl}i8O{53m$?zEiE;w%R zX+M&*!;mS<=wuFyHwa3{w)ptOMxx7OMR?Vw)}bg*_|TRV1ZNMAgs^v|zm&FTy?s5p zmczLLYB?*Hn-gV;v%jrbQC4^9E=J#8bR&$1TbMH&^UX0 zgj7lUP@5%k*Za^cxnn6t>yg9YY`xD;=fG^SZ1wT%wmd|LRbF#5Bp54-qF_pIY?t(i0k% zhOp?kJkiJ-3R~u!`u1RBAt&OqI=Tn$Vxt~I?%Jxvmq^dZf^NIv_V@$~6*`WPuQZXD zX=D3nQsN1Rrq;T^q?vViaC=h@-?&HKYb-3)s0L`TTB4w$B~%lY4@PalKsbQ&7E1$- zl-u2>LSbb3_LYx0;^tre3xwjvduqBE@}>;~b3F#HHp@|4UXM(Al9=FQ|0ZC?Sqdk% z3rglZ2m;Y7q_Y~?o$M4WpmfwNE_vOb$gtSxN8Fm`^4>STzC%aHoS#PSYbR!DAOzyM zDanSba!f;Ytq`AE)6hDKEQsF3S?8Al&i&sh%;0Pp)WN=bdNH$73k`* zspvirYcBs7e|V!hm67H3vewYd0vju@)A_?~-&;D8x0%+rvYjHwY!8F0WDb7xj|#@B z?vxnf;%~jZft0#Sjq$yCbNA*<+g#}*&olb>iqjy_s)X1>O@YFl-J&v-NAQASlu@ zUYg>;3$j=&%xZty>b|VO`p?MFnyOoUv*X?_zi#ACH8XTf*E4DzwnyIZ9ZQNIdeXHC zWW$Q|63@NN&$(JCUD@>=DPxx;_QbpH=!5o<66LI7gFYa)7)z-5Zio+a`Pr$aDqI46 z6)LqIS=AqqLtCjKrBwijl*$>9x+bG^@|gpq^heD?6sEYdFEl0{VU5KsPk;9v7b7nXT2h)2v< zFvDY_r;#!zZEwX(Vg1PdB4^^gBQX^`j^U6MpazB}eDQI!%3B`CP+qd$3Ak3MD>b(= zeh@s#8xDNQhuaM~_=R{u*>L%y<#TPFe3UyKr-*ZuO1v7soJ0G*CMG5pjXC%p{%*uu z`;`)dsl%nj2_P9?8yeUZ3QXBJ4&3A6tN9*F28OjuSU73DMBQzf| zBbJvEGTb68Uzoc3a;(`kb}(hj)B}67PDVccS$| z{I=XnLggS70xyIdpOM8+lVZm_G8uOh6)fp9`zh5RJT&AlgbdOdY2#6SPjji+)ywH@ z^Q0y3z3(=$AMS@bBo81$?2U?RHcnw!oEJ2$0%9bn!!2L3F#{8%$!fD_t6xGzYH~4P zV5Ktj2*y96l0fi(cqm4C8iYKBF`cu5Y}Ph3Oxms5q2+3&%Sj(*GYFjgZyZ2r9;3bg z*6ugWy#3)1IOfNq>N5Y=LnHrl?8FAWHB2#3lTDzfOxX-+mGZ9Wx(#h^Nb}$nrRk%x zMy{=iYhAbxQ8ze&yd`F9TfpXRQgO&`?3FGzas1;Zy@MW^@vu10e%-m9Z(-`_t^!>t z?KsM4j+%>Wih^Oyt#wpvLW#D{6}=-5#4p{D-cy#RA4`zhrz2CGJJ(HMCLT{T6v_$^8eBwa64^rw2@ z&R*8V2Z8w)rJ;9c32atImS#DWPnO$j64_;S;2 z>&!#0d_Uw(diN8E+G#RujNAIknb_3*?4Dufx*{r3-$v>4^*N6^{9Y$x7AID2w=|_4 zOr=&%_i;wxZK@gOY7?2NOHjtu%;N=_%Am8V605vV7wd zBj~r<%4siz;oq#3D6t3wZ1OGrc-IM^OLl4x0Qj!V%+^5E<2)MLau)oTCm*C1&WD5t zv+s;G94B?J4d*+!MIrg9CASl>c@ysyjZQV0IXhIu<)>r;Fu}uu`QUi`D2hYMN8;pp z>DTX$5pT+^rUoIf(kKNb@_+P@{}WsI^NrQ6BCEY(^dlE?9HZiZ+2m&#$UgJ}9BlY2 zn5Hhs^Ytc^H6hXK_?z1L`Jl1ny`ijks@PS4M!NE#8L#m@(PaV38`)iMNqj#g*ROyzZF z@5{?fc_ZFV3A(wKz9lz?8x~{kXO6|f`3*ns$@jt<*gHq2xf%zAAk329n71cbRj1%< z*)9vh+@Qu+IW``ZY$_+d1!u@71er~DOQgb20P0@_N|p;c#?%k~vflSq({I^lHVu9WuUHxWg@8OSSVXxtYNP>p zoL7%)FzszTN(fkoNYt@HDXNdh3Mx2 z%gV#Y;-kd$#lGPNu}FTbLG{*k9-pgixxb{#5BEcQ+7tka&hI+uvLX7Vr4ilbV% zEKc7v9YGEHW@1)AG!_6jNTX+;GHuU0A{RC?-Z=2;>ePd04&oa?5ufd6JW>=&D02>0 zt#=Ct9Oi(`ZvcrDz$7449sh}iC)Kj zQ)6VGWPH6pWxA9!{HtIivLLF~LntGaegWwA+09HO@mJ{f=O(mAqPJlq4&a^KQ03CsKurx^QUwZBp)K$9 z-jlEOn}$@8WY7KIi|XD^HHbry*kA5JEK-Ac7q1)}4tWS!2WjW&ho`!U3X5HGNjk{r zJB3!wMgtU7*uZn3TCGeQ?H2ddGMMb(%C$M+cilq84@XwR?bt^{m;rI0LT`=US7B`AgmnZ-2TDRyb!oe*r%B~6%08xyu z4>L~ZIYh6k)qZKMN1)GQ8XmbyekA$LSJZJXe^7`SvFn|8>IkHFZ9)((T^!Lnh5#z> zhnpfcUHpQ5zVv7BRqwV|*c0f2p+tlpkHrEnFuvU0QjpOfgM5W}Kwu|YT#~rXQMcPF zpk``-ap1E?`#w4e@_vpbm|LLM1TF_`yb_hTtjD0)k!Z5_2_E7WUW{B5J0rR>uQ>uZ zlmT!U6kK`q>t)X$7uS!K9Vf87vtc{)CT}KV!F@`Yjx+3^KnnY7EmS+#XI*!{7~%IV zOi|83Sh-fca%@yPpBT(#7XJl2>>pNtp>JWduF7M<6GFju{X1L0#rN;n%FehjFw}T5 zDkYGPg7%n3On+bQ^gz?`-2DeCccSf96Dsq{#K#G+?j8I%{BPu+1Fy71szmW=O-~X+ zzy#MNeKapqN6QPQzT;c8JOP_pbPWUbw_?|PV~^4qe*5y06}(DE<{RfV)~KIZo|M) ze&zHhH$K5EF4x+NU*jLAMlLp6PB8_C-PF@WFAq=hmEv_U8EEKyh0n6poH7O-;q5=0 zr0b-j1<3vFKI&YR1!BlC;&fOEK@Dsz1SX3XV zxj$xh_6i^#yw`DNm~i6oZ@GGNoes=HkIIiD{#G#wQ@y9^F&|WR*d_gGL?a5B<$>+< zp?DbQq%RcEI}u&8^rb(OH{X6BaQoxCu|>Z$V}!Vr&-#!d_u5~=4guE=8wcu9=xQ;= zTCiL*Rm5W-%mt4SurZ|1ypYx`)w2ovlU(gIN;L)~?!7Ys_~e%S3>Eem!Lcv2&$v<9NU+~S3F>_5Mr4`yaXBj$*$