From 2b3506de7cc22b87d10bacee9cc4153bbc478c6f Mon Sep 17 00:00:00 2001 From: "Olivier \"Oli\" Dagenais" Date: Thu, 14 Dec 2023 19:03:17 -0500 Subject: [PATCH] Document an example use-case (#318) * doc: refresh "Job Priorities" link screenshot * doc: fix typo to get resources loaded * doc: add an Example section w/screenshots --------- Co-authored-by: Mark Waite --- README.md | 135 ++++++++++++++++++ docs/images/ExampleGlobalConfiguration.png | Bin 0 -> 12387 bytes docs/images/ExampleJobGroups.png | Bin 0 -> 26135 bytes docs/images/JobPriorities.png | Bin 15198 -> 779 bytes .../{conifg.properties => config.properties} | 0 5 files changed, 135 insertions(+) create mode 100644 docs/images/ExampleGlobalConfiguration.png create mode 100644 docs/images/ExampleJobGroups.png rename src/main/resources/jenkins/advancedqueue/priority/strategy/BuildParameterStrategy/{conifg.properties => config.properties} (100%) diff --git a/README.md b/README.md index 716f5d99..ab5ea96e 100644 --- a/README.md +++ b/README.md @@ -130,6 +130,141 @@ The column will show the priority used the last time the job was launched, and, if the job has not been started yet, the column will show *Pending*. +## Example + +Here's one way to use this plugin. The use-case is we have some +parameterized jobs where we can only execute one run of each job +at a time for business reasons, and each run can take a long time +to execute. This means there can be a long queue of runs, even +if we have executors available. +Occasionally, there will be "urgent" runs that _must_ execute next, +without having to abort and re-queue existing runs. +With this plugin, we can make it so that such runs will +"jump the queue" and be scheduled ahead of other, lower-priority runs. + +### The global configuration + +First, we must configure the plugin from the Jenkins configuration page. + +Scrolling down to the **Priority Sorter** section, +let's configure the **Absolute** strategy, +with **5** levels of priorities +and a default priority of **3**. +Let's also only let administrators configure job priorities +by checking the **Only Admins can edit job priorities** checkbox: + +![Example Priority Sorter section of Global Configuration](docs/images/ExampleGlobalConfiguration.png) + +Let's activate the **Save** button and move to the next part. + +### The priority configuration + +Next up we will configure the rules to make it possible for some runs to +"skip the line" by letting users enter a priority level as one of +the run's parameters. Runs with a parameter value that doesn't parse as +an integer or without that parameter at all will get the default priority. +Let's go to "Job Priorities" from the root actions menu. + +First, we activate the **Add** button. +We can provide a description for this _Job group_, +but ours will be simple enough that it should not need one. + +Next, we check the **Use additional rules when assigning a priority to a job** +checkbox and activate its **Add** button. + +Let's pick the **Use Priority from Build Parameter** strategy, +and we'll keep the default _Build Parameter Name_ of `BuildPriority`: + +![Example Job Priorities configuration](docs/images/ExampleJobGroups.png) + +We'll keep defaults for everything else and activate that **Save** button. + +### The job configuration + +First off, the job(s) we will be modifying must already be parameterized +so that there's a difference between successive runs, +otherwise we have no way of distinguishing the runs, +and we therefore have no need for priorities. +For our example, we'll have a Pipeline job called `Sequential` +that users can queue when they have work that needs to be done on +a particular item. +As such, the job already has a `ItemId` parameter. + +Let's add a `BuildPriority` parameter and we'll make it easy for our users +by using a "choice" parameter type, defaulting to the lowest priority. + +Here's what our _Pipeline script_ might look like: + +```groovy +properties([ + disableConcurrentBuilds(), // "Do not allow concurrent builds" + parameters([ // "This project is parameterized" + // The job already had this parameter, to distinguish runs. + string( + name: 'ItemId', + trim: true, + description: 'The ID of the item to be processed.', + ), + // We add this parameter to give higher-priority runs the + // ability to start sooner, ahead of lower-priority runs. + choice( + name: 'BuildPriority', + choices: ['5', '4', '3', '2', '1'], + description: 'Lower number means higher priority. ' + + 'Runs with equal priority will execute in the order they were queued.', + ), + ]), +]) +if (!env["ItemId"]) { + echo "No value provided for ItemId, nothing to do." + manager.buildNotBuilt() + return +} +node() { + // pretend we're doing work on the item with ID ItemId + sleep time: 1, unit: 'MINUTES' +} +``` + +### Testing our job + +Let's pretend we have just created a new `Sequential` job with the +_Pipeline script_ as above. Since it has never run before, +let's queue a run to configure the job for subsequent runs. +This will complete rapidly due to the early return. + +Now that the job is aware of its properties (such as the parameters), +we can queue some runs to test out our new priority scheme. +Let's use the following parameter values and queue them quickly, +so that we have queued all of them before run 2 finishes: + +| ItemId | BuildPriority | +|---------|---------------| +| Alpha | 5 | +| Bravo | 5 | +| Charlie | 1 | +| Delta | 5 | +| Echo | 1 | + +After about 5 minutes, we can inspect the runs via their **Parameters** page +to find out in what order they ended up running. +Here's what we observe: + +| Run | ItemId | BuildPriority | +|-----|---------|---------------| +| 2 | Alpha | 5 | +| 3 | Charlie | 1 | +| 4 | Echo | 1 | +| 5 | Bravo | 5 | +| 6 | Delta | 5 | + +Run 2 started right away because there were no other runs +in the queue to compete with. +We then see that both high-priority runs executed in the order they were queued, +followed by the two low-priority runs, also in the order they were queued. + +This is exactly what we wanted! + ## Configuration as Code support Priority Sorter Plugin has support for use of [Configuration as Code plugin](https://plugins.jenkins.io/configuration-as-code/). diff --git a/docs/images/ExampleGlobalConfiguration.png b/docs/images/ExampleGlobalConfiguration.png new file mode 100644 index 0000000000000000000000000000000000000000..ddce159089725d124bdab0ed4c7e3719c6a8149c GIT binary patch literal 12387 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 literal 0 HcmV?d00001 diff --git a/docs/images/ExampleJobGroups.png b/docs/images/ExampleJobGroups.png new file mode 100644 index 0000000000000000000000000000000000000000..26ebb6ed07e1a842f429b98ef213c7c3c6b3941e GIT binary patch literal 26135 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%0Aa|6xXbWWU4w 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 L@x!GD&;9UkfNW^O literal 0 HcmV?d00001 diff --git a/docs/images/JobPriorities.png b/docs/images/JobPriorities.png index 2811bc2098ca92e2a067879836f4843df3ac3524..e783b93a956e0263f90b72cc8e69289fbef060e9 100644 GIT binary patch literal 779 zcmeAS@N?(olHy`uVBq!ia0vp^*MZoYgAGW&_$}`Pq*#ibJVQ8upoSx*gMoqRkf)1d zNX4ADcQ^Xo4v=VjIDeIK;>n03x7^OGO-OnxG_9+M|0GNFm4&IfYBmubf$m*al_wA6 zI#?^W>k98AGj%)R|Mi%Wb|d({WihGiLH4FKfGhPfF6hvCS?yeAept(Hx+~vqUa! ziPU?xXwIqr)+E&=F2)ib>aKftm93j^x2A0L-TTK^t&*Ak{Oj7gcAN6Pe{oHCIrmWM zhAi`kYrdx0A6|Rw_v+n1n|hBeV?8+a?wvo|fNEa8KEM4zdi}RUpQhaW>r&`vW-{r( zt+&d+kUV=vr|)rV`_%7__49n$rdD2GKI7=K)_I%n9x6#ltkCCP{pOj=-E9lH*POpv zx@_*^TOJ4PrPuxcy!(l|o>cGIJC74BHobjouIJ9Q^@)uhL;c6!F%2Arj7mpXI|RfP eoG9gd;yApa_BA7qMinr1GkCiCxvXZgXgFbngSdJ^%n907*naRCt{2 zy?LA^*H!2Fz4ylU*4%2ZQb{V6B(xz*vM?5wEwC}hrfuVfwgEHP&`dMUXBsmNc)A(3 zX4re!2BydD#+V+vp^e)t#tTLkTCgq4mbF`ZSyd|4l9g4tyfv14@BDEi;>CNJS({Q` z^GI2l??uFoh#NP~J?D3R=Uic}wQS0UNtR{w`+d5d4#VLPtU)LrtVIYoo9-_55kic8 zZ;U}oi7^JH6t#MtRivAH$^wZ>aTRw>Kc1|-Ujn?!BLsmLHhH-+F z0x2az2%<2c)vOZ+K2i#d8E>a}Uh9qLvlZ{Wj@pzpCCf6poi4pzk2Fbu@dvX}^MMco zW36ki`rrknLikz~fx9;$#7Mzy%2!N;5O}_ipJ|lxkTM0_I5x(Tq$$H;j1b`aJ`y+l zY-M8E2-#Fp8zgC(((m`_^?Jl{jKCt41Z%;XGag@kCD(hvLI`Z3oS^($2;p9ED-gn9 zEia6+$}daUe1;VH49VKpTPT|9cANi~f57Qk>-H)Xln_`00;hyGEvU7n=od3F`N{mZ z$+yd5yc8B`@wsSc)Sx>qx4??$p_Ib+J<`lWYh8{%tu=!<1_?q)0#B_uDL-F}YEwyV zfTU?kr_-U|?~|n&RSi)nmJJu1zu}a>zNSS?{QY%sOJ8yW&Zfwb z1Sb`xHu-?X#7t*xf!P#zj|C$TMY|hmf!KV|Ax0LI6(fxz&T^(KjHrsaC-O#|HCR}O zwp70BKq=qwvdS`=n5~3#BdhGcNsFpzr`VtMEuS#((OQ!v3D$y?qp_Hz8H3#I3q^pZ zBvpm@d@ZUkyOMJLtN{c{$yM96)*L=`l=-74IClIbr%o<27{*8h?RK3lTW8q0Yb)D! zY-Q{AEvt?nCVh0KY1CUU_`Osys4Pt@FVWfC0v2bUd-+irU^w%fS9SZ`DGR`~g60$& za6&|}{~B$scacS_)_pjiN%^!=u|3(erJj%2HU6AbM`voH^y>kO6awivmrp5$5ZX{O^;1rs>S9oIdolG!4JqARtUOS@!1F!QEI~;>*VY>gCIXyXSmKd~ zo@8NRi7=`W)oP?kN}6fnBxRTwG#=7(af4wBdZ|yRmvHR(GD=C5Cox%ulrX!k#_o$} zn3`=OvjAm7>QNIV6i875v>S0Rg^QP_Dd%Ha*jzycLQofiP)aguiOrco_G%l(m~ya4 zDX}I8&hwYv7*l>%evciq#7f}396ZjN5z;9Up#)OMa-dBD;p+kC=hPoOALL|H))ZU( zlaHz5`Ia3$(c`7ktBgTAdNxW5YGHt}hCzRb)`l{`ECfay2E!O*4HiKZ_$6K8`N#{d zq^d6vIFPy59gwCO&mKI+!Gp&+cI*^0b6W_47%3d)p*)530&4XDZ8X+sck|lP8)z0! z^~o|#nhjYzu|hqpv*kj?qGy@W9t}0iTzCQ9m#Y(f_ z9{AZ=P=OHC@*hu#(#^B$Jk+YCQdm^vc$BPISlVPIUZssLqiF8@BL%gdk}CK%!hn?u zETxhXLLiZ)S0-?lQ4xBsUMD$bHAW|}qo|R)UV#+`%=mQ)F}mi-``;8NBe#BS%xBbh zc4GhH*SIx3xqmU9tIstE9Dtt0DVa8IEK6CAdiQ=!8|99+=rhova@*+S8lt7?d-rK0`f@3^9X5MYZ(j%&cz!JE5P;H zw^vwDp_I;o65!`b;#^>u>dWh9I%hRyIwMWeoYXmiTNS6s37>1Zlhr+~aeSCUAr*>B zDG#Y~WmVnZ+SRV%x{_mP)l&)w@|t3H-juVJLaC2+sF?VpqMT0Oz3WYqpoGNte084ib~pS||mw7vzUDi%~E1fBrtLSrSy zBUZIA(Rzg+lcpJn7@cJ#NkW>YXq}Z-<760kJh@1Jqoc{;y6KTx81pRj+&5V8A+l@GmY;Xs(iPvn&_S}7Ny)pbh~{Xy#Fzd9yy60 zMhHKm+4e}%n8ETXq|mflEm~7^Oto7y>OS?zf>}YQD@f_#M{@|(BuQh2gCU(xkM7El zrR5HTw8tTPXXCv`&NWb4F9uCo3 zpOdO9Tp=X{QEov60{n?U*15z(gb*0584Lyt;~_>Hbe4?)Ay2#Q0z> ztfef|2n<>phYKo&hZ=LyPB#FnGw+0hfi?Dw$8X9Rr1IP>0)$1_iM~E9xvt_KRz3Cn z3#lYgEx_O=$t*Kt!zmA&V67$1GSW=tQNi3Zrqyf^MIOVUrPC1@>pG>@Xd+b`t26q;K5-9vD?<)1 zKh7ha$2l>4m{cqwgdmlgm1Lft?()pD&vNkO zYvfEs&BB7R7L*W#6$?rU5LiqRAj=~tqWb2pBUMW($zDK!+rq-d3};vXTXMLakEEMXJ2Y@4Nc zF|0lFi&?mMgTcTl1nc-Au!iL^AtMDvX+ed;DJ-!OFn$$OMwC&OHDisI5&ebn->19& z$$gwc9hvRc7&2op(&cw4&qE5i{_&;n#wvf%;xJ6D%?MaO!!>ToNL)T$=3IW`n8Z>F zq*6#JP*NbJa=a(yf-SPZ1{u**##EpHSw3&~WtutiW*jH^`@Z^Gibrcqp)}9`zFrVZ z$_+4xxA+w`*r zaX&&cO%m5gk{G2DtPZh8k(rpK>!cEq8s;UN{O;9l+kFf&tmOi+Ou%@#4L@V z#mww1VdPvrW9(_IsVvJF3Azm2;Efek2c#^d++7*#Z=8mwz!M>Y?n zXzk817`XHp%UZ7aYNaG56ydqZhASyi8Hl~^kR;Kh8JIze>Gu#~!0tV}xccg=nQ5%h zng0it7oWiQ>-gaoRFJw76hh*Q4%6WZGL*EYE~3_$0_i!RRZC9x5An#!Px8pg+vz4J zi6k!KWC7!ms7028`>$}{ZR*=EPq5RyYI zb)O<$ejM~NGHM~c7MKh}3^qkEpymw;!WNC1B&;=DhJ0!n#9fXoKgC1G?&PV(`-#&& zkyk?qi#7&jeT*28_+8TWVN80QBg;?l?+U}ZR zAUDgFv+V?Lrh3wXI0_mqC8&{NuUfNVv2Y$%x`v-49$U z%+Okf)?!>R=IkUlnbwPjl~!K?;1`D>oK?5VcOwVItA+EbS9)dXDh}Sw6>$dbH!{_C>)X7Hr7E9#djshPyyRVGE#z;d|Xy0 zn03b;dH$(z8775yb-r`V#<_cy3+VNREHCxx_G5%s$MaI6NU(KFo2^@CF~c4R%ZZZ% z7Q0>MmzUYKO)=XBUuI+?$*VW^FnWj#VvJ465=++A%dsl_kw%*uVNBqv-DNs9bO zVytr)h4oOzLyMSx_zc>Y^q<>Gy}!&AS7gYo<1=-YtU1i722zN!vf+ACkQj^E%9D~P zx1b6IHD*B-588b|8$+BcDSZy%_i={!YRjpZ?Mi-F&SMcm<`LF$_YX@>&NC&5ZLL!n zlQo7W&okQQ+R$3N_NB|!tXgeVru^uqu%vW;-kgjooF%ZjM9l9YNs=-r&uV?n z5hj6)goHp{Ix9*bSQBBf&XBOyk^zaeq`4XX%Rlhj0Q`r)c;|UMi6Uz0fa)Od349MF z6;dfYPnHDC!eXipMT;rjt~Ax8X+oT2V>yDq_?F)S;8*_q=hnRj0Bam~3(IPrjHL{Z zODQS})?kd`U%k@Z`=9;O@1F6F-*)r=2EcpoI`h6?ucD+J0qEy({ONI4JHoRjj#;Jfm|MrJ}^9`+#M*TJ3k4h;5&m;9RjLu6UiOJ;g)3j+qW<^ zHH8p@;joYA1?<|jlQ+EaU+~x$FXi5QKEXZrJ<6^vDOX|2d6;*NgoAQlfXqVQSO(Uj8G{hczTXSL8aGJ8&?gE) zg3uph)&J>TzlX?YT7e)Tk$KSs96Wspc&+zkq{BPKP!PeZ>lK7reEMX8( z(; zEE7jZF{ws|t}R#Qb?fdqzUPNuMYCP! zy}$DT-v5Um;vK*B|Zho%yadnnl0N>QXO+}i`g3uExCLD&pq1(Z6Tk(`*H5L^*)|?`WXHGkXkKZ*M-};_T^V`<;_>E0wskIbQZgO@&kAA)B^|T ztqh220he66k5|3rW~S!a<$gin)2P=7!w^pukw`JN{)4Ctyh*wK<=61u-}wNK-uol~ z@gU(RUj0tC@7c<){eSP|{lEPoK6l514Esa==wrXe&%FLu0QklC|15HX;Q7USp5Wfw z9^lA<;|%*l!dk$Nz1z6q+ppz@?|2cO=YbH!{e+)?^Z&_~U32`@@BTP{^X`xH#m_!Y zJWTlI_x~(E{XM@7z@OayI{Uv)D=2zf{{@DJX`uOL$^Y8BF*{6>Z4-#6_4KCQfi&wqr zWn6pHm8(1Mt4N$45YE*SAyP<&o+3_D(ljdz3s$DB@gXO~YAaq8I3?pygmobxf!tB2~uu)2d2R!!qr}*pt^bwwY{4oE^Z@ry*v*xU)T1dSX;rrf*MqpNB zJL^et?<%iY;rVV@Byqxr{^VmEIdq&i{^)A}H|dnusH#Qw;A4OGN$&pmz1;8}*Yeu8 zy^8j1i{*u7zHs|PeDIGy%+rq?POE57gBR?X0b#q`ow zUC+0^^14zvosEn4r@!?9?)=DSdE<|M7eDnIKZZ4yJ3sPSKJ;Hc#v`A5oS*&upD118 zzkA;&`QW=g!i#UYmS1_#4=_F3=Gg;BdGGIhfZu!Pf8ode-CMZ%wcm2abACBwvQnw* zqmeT3lthF9Qb|;zNL1>|s#sGhmLkAX{;twgihl|`%bheox5&K>0XR6o_kC)ivz~n4 zDgJQ=OY(hMmDL5}i+Ac=?cdVRpH)fGjN%c>U% zLV8@X|4O1-ow+UBc=Y}$?tS7x?)_4Snf;Ft?Tu(f(*!eD;>i%75KsBE>Ql_Lx6ufu z5IR6>kiy~z9?JKynWfY3aw?u@IhiN(I}H6Ui}6vq!)2N>$UE;GdQS*EoCVd$|6WTT zzW)HXe)RLa=*9ba+fTd}1Z38*W!EgP`Jr1ld19Fd?tGXlUc8?xzUA`rIIT6i_wC@@ zzyD=`8#mXy^qZJJIM1Dbb2s;X@odX54j1BwE_a?E)RVAi`@B<&+@YGzL7V+eRMr< zc-yO4oL}bl4}XTcK6($g{Iiz=aO(%}0^qIh_+F-SD|O!$d-<3D?g#m`pZveM=eGO5 zYLwKO#Nu4_!1wVyMHB|5`>c&|`E+@ZLR;syTkYsC#<&vBCCy4o$EnNl%!2eOiwK_Y z;dx%gf~2TfPwp2%{tS>5t z^BuR|2f(*~*A3(bCe{j4YsjqSx?8T{q0cWQB{*DLut3UZTJN9nnEkF5&vHjvf z%+0TRNm*2X(i*Epp<6*DHr#vL0|4Cko!5;$cW{>4i(YXx4}az{?)}FH_~x6gD%(hg z2{*p-I;3*^wlys&$5$9zA@@v})EyuBEC4sZ?j@_Xz4X=BbNh!s!#$t8zf@Aaj+;1> zI2qe_@1?tV*C&2s-Sd29WNl?IhE?X&4kbK%&qb28Hm;@h+Y@^b{wa_T^DZW4R3oj-}!wnCy0Vo$L+gf z@4ELEg#l@rVzlA#Q||hA=Jz=%JM#N{_Q~f;@V<}>_U~Tz9HvO=ILAr(OOGCMZSUK$ zYTE_-cL8wtz^Ko!dC3)g;jV}Hk3apNdEHyTgKKZPvb3na)?}QIW=m{IDT$I2uYfbk z-{VBgB0Eat5sqrmru)No)e?AO+o{yR^c}{1n-;Ph0LLYz6FY zUC!3#g(PvxiQ14>&_zjwCjxvK5_l2Xvnb&qk$5sh>JZbbkuJ0mUVzu1Md;v+ojS(r z!BsVggsTr#_}|qgMp^2xvf^gwR=ZA_L~C=?+FGJU2taRTuu99+>tTgr;AW<&X}45Y zzcX;r6JslUnc@P*tvP`A-1)oZEN6>BDaNB~MVXyyf3#;uOM^{XQl3(TVSvsIz5G6- zMp#-o)qbnDYVNvM2CLesPuDP7BZ}iH+q7{dYK0sh{AaSHRu;Pe{Oi~LAM5VZ&952Y z$AA7Uyz5sD_kZdU{`9v$0KlG$cktp{u4cK@i2wi^c|=PIXj zuZm|p!kC~`E|o~?XbY8zpxUn^rB(f|c!b4xI@{|yAKAd@o1jIM6oDij z#yofED7{{v>Dd-nU9+Frty4%PSXu6H{OBo8Ei56dWY?aZ?7eU&&1Rc+YnsJVkMPJB zA7MBgvU|^N_U+rp1$%dK!QKm)nrYEl?x2lkX3G@Uz4%Hj&}`MP8d}XM8ub=ZNQ{NS zFec3m%JcCfh3^Yc8X?aNdK7yoAdu2oP!yeicA!ZyU<^=QU*>dRVzneM7JT2M9!BN1 z(#jY+&uG9^mBFAtBs1CpsM?wP?wP5Q0P1-zgzQ!LRZ=SKI?Ke19QVk=QKi!L0Q!-u zW=GR*E=nnk)@ycxHriR=;@m2!7B9xT{^2(Xqu>mCL#b-PFdO8Q8z4bqTiG1{bb2P>=$PO;cOL8cSz zQU_W~1d&e`ogxdDSWb>|YH@|I>2XxKaX(C*)XNsH(4Bt!yyj zu^6VN8k}5Mrq_*WPb;$AlCt@1HtY=nXiPO$_2{rSq~2~g3?N_g%;t>mX1g(FK^4eV zF;iM&NwX2HqCXgr8H3JTZd{?HJWslGnLK62S3Z7a;S3?h>x@^2pb!Gz^9X#8=5&*# zg=PAk0n=N8aZJiu2HkE+R`EHgLmO1v!JkwjIR^7|dgY)h_FWptTnuVCWG|O62M4~{Q(=2_-m3ujP zY>~rHA2}x_Rh5~oQ~c=9y_tJ%dw@ev9XYQyHs$%t#$i$t5E>Ko$l6B`3i{GA6i}bq zMYdbeoju9%?tsopACp-}#3Uw>T{>!s{&0n4B_=ilq=f1E4)$Gh16S^N8T+?iOU-N1 z>-FdkR!~Bfps~(0X`E7BAtlQ)lqU(p5TgyJ78Y5UKSgF;>EU|4Mi2z!E>!^z<}ZU` z#3&C1L_*MN*64Qn+;jJ1y!H(*&F@|C#AD9_aLx6XFq)MFw|wUf-1F(j_{V?v0$1H| zNm(P>3JV6laNC0by!chut?JVU|LGAfx?*=umUE=oFWmVM0N34o&6+cnF@`L2YXiDv zg`DUL-n7=tTQI`GLY9@=27@6%;ICOoKkqH1lziLkUcv*P`XcxKhI*4^@pF?Tgrv?B;OqL6W&e#EhUDEbztT3A_^?$uJ@Ar^Ew;PMq6eOh%F= zZYd@s=x1Gw)$D1<>}!1s5iPRV&`WzHX#zISiz~@#lwmXXeI>b42nPL_&4s-7jo->g|N3s;_wJAL($~D0+Ljh4=9l>FC+_31&p*k{uYU>quD%c; zPsnu^;Ioe(=2L(7Id1yy8)-Lc+;i*w{KH?~$?l7H@bZb!y1-c-ah4GehYSWol4PU^ z#=uM=*2Ivik(xr5J3XQ(q)`hUS+pWH$Csp(Ty^7R-14TIxcx()=ELv#1TT5@4a{t7 zvvgvGd;Y=Q=gVII5-z&x0(6$4C)~aDqzIW8viqVPJoCh19=q>p_Fb`;db76XaaY}V zIj?%tw{h!-KE;3kZ{*HC8aZ_Gc*)S#58+7nRgNtUaW5qnjbA$T{wsk>5 zmJB#L=#%zRBm$kmFovXWF&SW7N{dTS^vFzxCj)#_C(vzl-={13s8Hgo0N?j9dQ`%6 zEoOC5wnAr?;UJ;g>C@{EsWlB!K)c4`)FIIX7x<+cdxQ+i&OZ z{_4~GkN!h~t?4U`U)K7`^)CKiw=_gqN%RIgHaXyS-+?_baZT9j#Ck_&(qJXH3Jy4iNmU|}LI~dSzrKM#`Srix zcYpTXw5OZ={$Ky{IwKO^`qTfMORl<@+yC~{yz>WslXw`@o^G=Lnu~eOn_t2Ht1l|| zz2)^Ur8(8$w!iumzxQ+Rrn}N7j6yEFY&ZYr*Wb?dH(#^vc{b&R6=63Bjz2X26f@Cw zqDGCUmha*(AO8ggTb?FPV{~8SYr|QLHl(p7?rGA#Mr(2@ z`P41!XkJP^Y7o{v8g-Y#($7o#R$YWDKxm8xA&L7LPdY;id1cNKC~J(t;L86tRIyH;C@W7H3ese8%y<`0Dk+sOOP*NEiZ=9Zk$mj< zO_QWIn**7i=lEo`T0|{REh?_BD#f)A;>4{(I2dA#E*LJW%`Bhb1- zVqhxT#y9W$cCMVcg{Ig^v6fr)Wv(voTzpq#&pYP3&+>AYCm%n^fhP}RQ8ZdD9MWW{ zHzI<-&yO{ws|Yx@E>1}mR+JE6jpgm%|LYsoWt;LfD4S(rzWlObN~#vNuu{`cI|Qb| zH$|_5g*K08A0?YR3QCh%gVhF$!JsjD#U*Pk!m6?ccstz2#Zx!1Z}tY##I-4;b)>;= z7j0az{%ZLVV@$aey7D}v^jSLD;okD1JbUq=ed&E@QS^`B$OB9*I=)NVG2!oWR;O0l<1`TCa)Q&RP?2|_bSJJ>X2_w*&q z&mSXVnyxqs*qqN}K)5Vwn-|vACMC%-JgJzQnqx=fQi6Dntmh+qkkT?t`q&|;d`-7P zK@~5Mwaz{A{W>5yesqCn4m`*Fi6sVujHU)_G_9$C?K@@&edR2;qU5S@R0d04JWRN> z7gZ=iR!1*JZpS)AH*hO&p{_O3iidc)V;Q5Mr-Q|QTrJi?%$4&X#l#MIZ zlJxOyi0At#&%+BOp7c=*yYPc!#4{Z-e+6w6(uRmU)k0XeZoD5Vrfb{T9bC&+c^Sqi z2H7&1jlhsAqRerj3Nois&Jw}_=fgq5{INw2Jozk7J#mmuXGp!###+nLsT0%!Nxcye z)g!F1Xq}=|fDq1YkwOyWd?;VI8s!Gc;&GFf$E3SATC}Rb&P=YH1o{8Y^2qlPV!S9= zHCm^nLP<4dL6rODXQ{;H9Q)h%h(e#h4|3+Y+h(nE2QxidOrbbmaemKpneIh8&0007 zieoaZNz)Whc?5yWl((X&vn_Lge-srQQ}koatyVfxNqp(yM>WTz;={!#|MFj6oSk+%PdJUvP|b~xjQJ7W|C%j zDs|YNbcF?laOH-*VhJsqS8!b8u1mKqKTb%u;)&;bguYK0_%5}{^9tbZ>^go^zV2kh zlvJh@j0urB6Wm%$JDTN!sVh0v@u_83k)|23TqIQ)Zl&Rj#AZaY$@XABJLJ_g^fm$+ zF+J0wKBbVtLuUa|6qf6;S!>amE2@{oed0J{d9lmWPafjn!Q(714`@$MVU3|PSR_q5 z%uYqj&P`#hrL)qZUaQln*K^B4qF`(>Pb;c3_u6%FMi$h_whwO~o4bvo@>A|V zMtBz`vsy{v7MZ972S!H~=O1yxg1{>kS;^4OKWmdKsbaZpF{=0Ez;K@^3JH9tq_nZ5 zUW$~G;V>r4^jIp5wUB0-G}A<-WoC0r%He39r_k28)S2qaJ7V<9=Dw#C5~hxILrhH?_2ByV$_{t~9v-Fpjmub({c+pLlaNvMs`O#N0ZT4|w=I>byo`%%9 zJ*kC8Qm57ZCT4;ws5PdrGA17SNG~LcR1TIa(j;X#Oi1E{;UK2l>2dPJ6333tbM(jw z`h$$H-eg;Snk-3}pFfK7GwKaR6y3bB>n&j&#% zEUB|OpTpUU5+~yzzGL+3RW+xKu>`)NS&yjI!rZlV?I=lJr&{GMt6PV!uzE}}No0D} z!kw<1tmo?5OX(^&=DB~Pw46d&yNZuaDd(1>%-LO)bfrzD^o=bWsH7x9j9x5b4O25s z8jS{nxJQ5fC7cj7j@vs(NYKXMdl9p(1~bEb1f9Larp031XSuhGcibtIC<^d=XPG(6 zN#~e|X3!t7cyfhfM;Dl%UqmXO)^vzcmO;EsnsxCaNmy?Yh9TC1?|Ibgb;4SRQqFx; z(h}uqFG5fPw4<4O{Ka2wLFH*F#db#Zq9>zU<@b4mRjjFq06O<)RI+t4yL@!gyk%qZ z#UDnk7yD~t(K@Gj2)9&K(M~ld5Ib7;PUh7ZgTSMvLswnGB&%}jbiR z<9n{&bzw!ePhYSl@HEWhcNldEmKod7;VV1jH$U6 zSKrj&>A^ERwg5WSWX90)r`Qr)OjBP))@^e5)FMJ@GJ0e~7r84KO2!zhwn)!I`2k9K zF5+VV6*4tDM-nG2%pXJB0byvF+g7LEtkG!HX*3$t>oppU28~7o-}m$C1`yyX97s{D z;d|~48Dw1r7=Xpp^B7|Z% z7*cBl1nnW=qM^~5p)IE9_d4h4dWm z;Ril`;5&EFgUs|vk`*jNre<4g-?^12il{|(rl+TvnVDvKdYXE@o@e!ss%)wP$QNrx z^W5jEtK_!3&pBaz#N)}o7iM%&Y2#RnDEC{vO0wgU<&=QJLYY|cwE&`J9z`_5U4#Ro zN2_zJUJMCqK z;Uq`spK5UGamn!MF2inzpzhYdQ=Uf@)$oJRvB!nPT7%XZNt|G8hLn)ReU_I7APiAW z;)jyCZ4qJAW_E6dX0u7V-DY}fiY;5V&~CShq6i_SD=-h#q;vC%F!^~6|B7PSFnPY9 z)?{;47JLqvd!8CERWl)lGEjM$U}G$4&P^+%;Hgy$<&DmH`fDm9m#kJ&rwM3o$~Ty7 zn38JL8W@|A*%*x@S6U%3Micikl7XhdR(5(<<4HxUeuQqzW2G_6Qe83Z9iunw(5$zp zg)Nky5!M3QQ%$0%=2o{b89K|{@=a(u%PY*!#|#DolvFfZEq3hKPNUJFR;yEs-0Cw^ z)6-1P%n*gHo_L{*d@-tSz*$A}So3pfK^2j!@())fuH;3L<1iHaO<+<2tP##qDcR}5 zMd>QmL(xKceYpiy)v~s**z(_#mWZzuzFLQeHDTRIB?v>`)vB5(P-l#-ECT7SZZZM- zY-O^N$Wt%(vp&SRB*j(vJ@DTht`^5EJ;%_8c24WRIw?WveB|(O6u^@Lj+z(7}lvrbp+C_ z)FKp~@6&3vkkVOJ^?nos4Bs+I*rQh%42LVwS;`=UI)o3=U=jA=Dan^*vMIAk<2y-PRpdVRFbLo6z%pDMr)EZ zap@SiwcTvRArV57rb(Vq3$=RVw2^v~IWnRYq6EtWQRL?3Q7}7!MKP|?D*^h|jB+ZN zNuglG_;DjUt>8_$1X?4+m~yK|v2dEwospvpY7eE%}2SL|P6Qw3IK zN=&M-$VA?7VUZOWk=A-_6%`=oGZnSC1hQD&CC7pcE>~`h(Ovnm`2rTANSd?4ak}h? z`&8|}wW>1+;p&-3Q9zpN9G}XqKsnBR+QgPN<*cLJe$C(bjNUe|u9l<$RPaZHwFr+w*)8NA@@$ea&VWtKZmlG|U(k?m8Q z3q~5f*l&_iE=vn)+#(xYv&h@eEhXd1!6-nO%5q#4=J_b9H-RbT=MlLDR2YaAyAEN- z%c4}P61b>gftlslm~f_{vkJx7acfD{LMqnc%d{@7KzoMcH)T`S5-Y~vJ84G=>0tT) Y0q