From 144e7209ca83bc7ab388855d9b34eef2d5d67919 Mon Sep 17 00:00:00 2001 From: Kirill Sergeev Date: Wed, 22 Jul 2026 18:00:10 +0400 Subject: [PATCH] Add pomodoro plugin (port from legacy v4 plugin) (#69) * add pomodoro plugin * add thumbnail.webp * fix translations * fix translation key * add required sections to README, add deps field to manifest * small fixes * fix config keys * review fixes * fix(readme) typos --------- Co-authored-by: Kirill Sergeev Co-authored-by: Lemmy --- pomodoro/JetBrainsMono-Regular.ttf | Bin 0 -> 114904 bytes pomodoro/LICENCE.txt | 21 +++ pomodoro/README.md | 53 ++++++++ pomodoro/THIRD_PARTY_LICENCES/OFL.txt | 93 ++++++++++++++ pomodoro/panel.luau | 178 ++++++++++++++++++++++++++ pomodoro/plugin.toml | 69 ++++++++++ pomodoro/pomodoro.luau | 83 ++++++++++++ pomodoro/thumbnail.webp | Bin 0 -> 40664 bytes pomodoro/translations/en.json | 45 +++++++ pomodoro/widget.luau | 43 +++++++ 10 files changed, 585 insertions(+) create mode 100644 pomodoro/JetBrainsMono-Regular.ttf create mode 100644 pomodoro/LICENCE.txt create mode 100644 pomodoro/README.md create mode 100644 pomodoro/THIRD_PARTY_LICENCES/OFL.txt create mode 100644 pomodoro/panel.luau create mode 100644 pomodoro/plugin.toml create mode 100644 pomodoro/pomodoro.luau create mode 100644 pomodoro/thumbnail.webp create mode 100644 pomodoro/translations/en.json create mode 100644 pomodoro/widget.luau diff --git a/pomodoro/JetBrainsMono-Regular.ttf b/pomodoro/JetBrainsMono-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..436c982ff3209357305892181e61565d1e01d439 GIT binary patch literal 114904 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 3600 or seconds >= 3600 + local hours = math.floor(seconds / 3600) + local mins = math.floor((seconds % 3600) / 60) + local secs = seconds % 60 + + if showingHours then + return string.format("%d:%02d:%02d", hours, mins, secs) + else + return string.format("%02d:%02d", mins, secs) + end +end + +function onStartButtonClick() + noctalia.state.set("pomodoro.nextCommand", "toggle") +end + +function onSkipButtonClick() + noctalia.state.set("pomodoro.nextCommand", "skip") +end + +function onResetButtonClick() + noctalia.state.set("pomodoro.nextCommand", "reset") +end + +function onResetAllButtonClick() + noctalia.state.set("pomodoro.nextCommand", "resetAll") +end + +local function render(state, sessionData) + local sessionNumber = state.sessionPtr.session + local session = sessionData[sessionNumber] + local stageNumber = state.sessionPtr.stage + local stageTotalSeconds = session[stageNumber] + + local stageName = + if stageNumber == 1 then + noctalia.tr("work") + else if sessionNumber < #sessionData then + noctalia.tr("short-break") + else + noctalia.tr("long-break") + + local startButtonText = + if state.isRunning then + noctalia.tr("button.pause") + else if state.secondsLeft > 0 and state.secondsLeft < stageTotalSeconds then + noctalia.tr("button.resume") + else + noctalia.tr("button.start") + + local startButtonGlyph = if state.isRunning then "player-pause" else "player-play" + + local skipButtonEnabled = state.isDirty and (if state.isRunning then state.secondsLeft > 0 else stageTotalSeconds > 0) + + local resetButtonEnabled = state.isDirty and state.secondsLeft > 0 + + local resetAllButtonEnabled = state.isDirty and (state.isRunning or state.secondsLeft > 0 or (state.sessionPtr.session > 1 and state.sessionPtr.stage > 1)) + + local stageIcon = if state.sessionPtr.stage == 1 then "brain" else "coffee" + + panel.render( + ui.column({ flexGrow = 1, gap = 16 }, { + -- header + ui.row({ align = "center", gap = 8 }, { + ui.glyph({ name = stageIcon, color = "primary" }), + + ui.label({ + text = "Pomodoro", + fontSize = 18, + fontWeight = "bold", + color = "on_surface", + flexGrow = 1, + }), + + ui.label({ + text = string.format("%s %d/%d", noctalia.tr("session"), sessionNumber, #sessionData), + fontSize = 12, + color = "on_surface_variant", + }), + }), + + -- time + ui.column({ flexGrow = 1, align = "center", justify = "center", }, { + ui.label({ + text = stageName, + fontSize = 18, + fontWeight = "medium", + color = "primary", + }), + + ui.label({ + text = formatTime(state.secondsLeft, stageTotalSeconds), + fontSize = 42, + fontWeight = "bold", + fontFamily = timeFontFamily, + color = "primary", + }), + }), + + -- buttons + ui.column({ gap = 8 }, { + ui.row({ gap = 8, justify = "space_between" }, { + ui.button({ + variant = "primary", + text = startButtonText, + glyph = startButtonGlyph, + onClick = "onStartButtonClick", + flexGrow = 1, + }), + + ui.button({ + text = noctalia.tr("button.skip"), + glyph = "player-skip-forward", + onClick = "onSkipButtonClick", + enabled = skipButtonEnabled, + flexGrow = 1, + }), + }), + + ui.row({ gap = 8, justify = "space_between" }, { + ui.button({ + text = noctalia.tr("button.reset"), + glyph = "refresh", + onClick = "onResetButtonClick", + enabled = resetButtonEnabled, + flexGrow = 1, + }), + + ui.button({ + text = noctalia.tr("button.reset-all"), + glyph = "rotate", + onClick = "onResetAllButtonClick", + enabled = resetAllButtonEnabled, + flexGrow = 1, + }), + }), + }), + }) -- column + ) -- panel +end + +function onOpen(context) + local state = noctalia.state.get("pomodoro.state") + local sessionData = noctalia.state.get("pomodoro.sessionData") + render(state, sessionData) +end + +local function notifyStageFinished(state, sessionData) + local sessionNumber = state.sessionPtr.session + local stageNumber = state.sessionPtr.stage + local body = + if stageNumber == 1 then + noctalia.tr("notification.work-complete") + elseif sessionNumber < #sessionData then + noctalia.tr("notification.short-break-complete") + else + noctalia.tr("notification.long-break-complete") + noctalia.notify("Pomodoro Timer", body) +end + +--- main +noctalia.state.watch("pomodoro.state", function(state) + local config = noctalia.state.get("pomodoro.config") + local sessionData = noctalia.state.get("pomodoro.sessionData") + + if state.secondsLeft == 0 then + notifyStageFinished(state, sessionData) + noctalia.state.set("pomodoro.nextCommand", "skip") + if (config.autoStartWork and state.sessionPtr.stage == 2) or (config.autoStartBreaks and state.sessionPtr.stage == 1) then + noctalia.state.set("pomodoro.nextCommand", "toggle") + end + end + + render(state, sessionData) +end) diff --git a/pomodoro/plugin.toml b/pomodoro/plugin.toml new file mode 100644 index 0000000..ab83cc6 --- /dev/null +++ b/pomodoro/plugin.toml @@ -0,0 +1,69 @@ +id = "thepunkoff/pomodoro" +name = "Pomodoro Timer" +version = "1.0.0" +plugin_api = 3 +author = "thepunkoff" +license = "MIT" +icon = "brain" +description = "Simple pomodoro timer." +tags = ["bar", "panel", "service", "productivity", "time"] +dependencies = [] + +[[setting]] +key = "work-duration" +type = "int" +label_key = "settings.work-duration.label" +description_key = "settings.work-duration.description" +default = 25 + +[[setting]] +key = "short-break-duration" +type = "int" +label_key = "settings.short-break-duration.label" +description_key = "settings.short-break-duration.description" +default = 5 + +[[setting]] +key = "long-break-duration" +type = "int" +label_key = "settings.long-break-duration.label" +description_key = "settings.long-break-duration.description" +default = 15 + +[[setting]] +key = "sessions-before-long-break" +type = "int" +label_key = "settings.sessions-before-long-break.label" +description_key = "settings.sessions-before-long-break.description" +default = 4 +min = 1 + +[[setting]] +key = "auto-start-breaks" +type = "bool" +label_key = "settings.auto-start-breaks.label" +description_key = "settings.auto-start-breaks.description" +default = false + +[[setting]] +key = "auto-start-work" +type = "bool" +label_key = "settings.auto-start-work.label" +description_key = "settings.auto-start-work.description" +default = false + +[[widget]] +id = "widget" +entry = "widget.luau" + +[[panel]] +id = "panel" +entry = "panel.luau" +placement = "attached" +open_near_click = true +width = 350 +height = 250 + +[[service]] +id = "pomodoro" +entry = "pomodoro.luau" diff --git a/pomodoro/pomodoro.luau b/pomodoro/pomodoro.luau new file mode 100644 index 0000000..18e04b5 --- /dev/null +++ b/pomodoro/pomodoro.luau @@ -0,0 +1,83 @@ +local config = (function() + return { + workDuration = noctalia.getConfig("work-duration"), + shortBreakDuration = noctalia.getConfig("short-break-duration"), + longBreakDuration = noctalia.getConfig("long-break-duration"), + sessionsBeforeLongBreak = noctalia.getConfig("sessions-before-long-break"), + autoStartBreaks = noctalia.getConfig("auto-start-breaks"), + autoStartWork = noctalia.getConfig("auto-start-work"), + } +end)() +noctalia.state.set("pomodoro.config", config) + +local sessionData = {} +for i = 1, config.sessionsBeforeLongBreak do + breakDuration = if i < config.sessionsBeforeLongBreak then config.shortBreakDuration else config.longBreakDuration + table.insert(sessionData, { config.workDuration * 60, breakDuration * 60 }) +end +noctalia.state.set("pomodoro.sessionData", sessionData) + +local isRunning = false +local sessionPtr = { session = 1, stage = 1 } +local isDirty = false +local secondsLeft = 0 + +local function getStateSnapshot() + return { + isRunning = isRunning, + secondsLeft = secondsLeft, + sessionPtr = sessionPtr, + isDirty = isDirty, + } +end + +local function getStageTotalSeconds() + local sessionNumber = sessionPtr.session + local session = sessionData[sessionNumber] + local stageNumber = sessionPtr.stage + return session[stageNumber] +end + +--- main +secondsLeft = getStageTotalSeconds() + +noctalia.state.watch("pomodoro.nextCommand", function(command) + if command == "toggle" then + isDirty = true + isRunning = not isRunning + elseif command == "skip" then + isRunning = false + if sessionPtr.stage == 1 then + sessionPtr.stage = 2 + elseif sessionPtr.session < #sessionData then + sessionPtr.session += 1 + sessionPtr.stage = 1 + elseif sessionPtr.session == #sessionData then + sessionPtr = { session = 1, stage = 1 } + end + secondsLeft = getStageTotalSeconds() + elseif command == "reset" then + isRunning = false + secondsLeft = getStageTotalSeconds() + elseif command == "resetAll" then + isRunning = false + sessionPtr = { session = 1, stage = 1 } + secondsLeft = getStageTotalSeconds() + isDirty = false + end + + local state = getStateSnapshot() + noctalia.state.set("pomodoro.state", state) +end) + +local state = getStateSnapshot() +noctalia.state.set("pomodoro.state", state) + +noctalia.setUpdateInterval(1000) +function update() + if isRunning then + secondsLeft -= 1 + local state = getStateSnapshot() + noctalia.state.set("pomodoro.state", state) + end +end diff --git a/pomodoro/thumbnail.webp b/pomodoro/thumbnail.webp new file mode 100644 index 0000000000000000000000000000000000000000..f6a4a59991eb445a22672ec7f34b35e153e2be11 GIT binary patch literal 40664 zcmWIYbaT5fkAWfF)hQq>z(V23JO+jd4NP+xwGJ@LFxhc3H99nEGB5~CoA#vt|C$}; z?eZU1$R1g;AX;YOC+h>i^>H@5TOi|9kzr^`H6w|F5zC`v3O-{{O=N%U_s(`TxcK z%ie?bf&Z`8m;4X?_y4c?`}Nn$-_{@e|33cfeu;mK|E>Rh{vZ7N{d@Ma>c8rL?|)MJ z@PEpG)&Ko}+JD`jp#OaS_5Zhj$NfM5|M0uszrX)J|C?VB|MLIc`j^!n|4;wF|L^+u z?JxU(v;XG*8~@I}{$K0<#QK+Yx9U&*{r{Wc|HD^||94+uzBK=={n!6Ve**rl|F!(n z`w#YO>Qw5p|HuE6eq4XTZtt)DNA2JHzsf)U_rH++^ZrV?w*Lyhu7B=-cYpQ%>-Mky z&;8x`KmFGF-1!fWKViS&{%HO&`}zM1|3>^f_+R_a@moSq>rZ{<_$vR@{<{6{x_$M< z|IhxL{3iQd{hB)a8rwhfzrO!CzyH32{NeiE`rv=pfAjxc{(t$6_@DMqDv#FA|EK<| ze+T~t{m1d=?GM(M{I~p9|407+`i1Xb|3ChJi^dtk3V0(=l_cTvj3|89{*AQ z@BfE-$NfF^`v0E)UHqs0=l^&1fB)aEy<9E+ck4I3ziIyif3E%g|NkHJ4eI-5T@k%m z(zHozZHe#Uj)uMKoCK^F^(~mbcHL@k+4K9aZjCO`(>M9`;^2=@PVsg7Z})Y4@i)6t z>|)~T<+q`~k!4c8sh^nS135T#kQ%cFau`DI1BRo(A3xi^|VtLlr_2u+RP(!2H5 zvcNq@=;XiIf9kT1K8Ssjx7+Ua$M}+S=hwH)f4x(zIZHtK+Qf6yH*RbR4&qT~thlFj zeEv1nkBdw6%=sK9Hnx@JB&!G9VXT<_NMJJiO5KevdsZ2G#otytA7aI$?f<}VeIx7c z9qVcy3wiu{&6hFz>F;D=6_4vzs+107%)IF1mV8yLUfaJgCBDY~Mc)HX=5+!K zN(@__tg1M>llh7_1$C}{eoLpPp#Dl#&gX5FoHC||vmzPIZhgFA{*P}S*NsNk{1eF& z+T#D-X*Ca2X61H?&YZhLH7dULA-n9#h+7ZUfAwFibHAFlPqA!{)BLFum~NSVE^1%1 z#O2^th0gHbt|FOnvi|>tYVGbGxKtN!p~V7v*q|4 zw$qb#SlXQqS|s#xyYx!SXIcAqt}$!aKXZQHzO1Un?>(5?AJn>dE#CaynpdH9VbdM6 zbH0r8XO(n+u52nebyDSCEWgOHGmF;FeXq7%etOf{^NYIvu3VWRcX8Hi$r&E!>iHi! z^!o06D!XI7{>6D&>%U)MI~dsHDAzA}`QL*6m2O{+BPyG|uZq7^d~14NMxyhFueXnF zx)lECkR^kq&;-`(SxNqB$^aW=Ou5kShki3wV|GeXX$d0-v zPoLFD`p3Lj`aWtwYSXcr%|>Z<5~aa*l@G6P^jwm;a`C(Dz^?6Vf0mxUqSl{qXR?B} z$GQmprHj)IE#rHvrhSxAwtFeM=z^=rd>OaH-!Gg?44D3J$Gb^8Q{1E``CkuHOqy$Q zcET1JwV(*;Sf0zZHoGE?_8s|j;SJ;LIIo?19QAHr&!}?#qM+8v#u_$V*GK2*S2ylY zxgK^iS(QzmbtWDylgces)#|j_!*cM%BcAVh_6weAotUxh)z;%ze@@n{<;&Muoo}YX zr2l&U%9mG^7ccX@&N?$b>GH>rXP$>nrA_@cEA@3p(8-g#1e>fLHRiR)x}DknASOUS z$6dpHQ_6wo=LGNVVX<78Hd8iRK9NB+FM#wNY<-s+tAe~iyt>V@>9-Fwn20uoo=GIEZbT@(Fok(=|+j0c5l zMReXyYYvgn`#SO3MqVGDxSrR(t7hp683(Ag^*`#!^AUO%8`e!`Y&2?k zv43iA)T7M`CmQZdUT)0xa<$x-`}f0TY_@jYoV>f>;e$YJALhUnGxaQ7M9h?zFupy- zmzlg#Z`Y|0}KFGy5!Fx+V9Pe!$9-Z;1v?8*ceKEB0;C`orPW%klBhwx_olH!59QJ-dBf ztjWe-DrTDE{`I>Q@5br&Jl?Ip=;FV>(oBn&7(XfwJKv!4aP`fm{i03!JyX(Nd^~gT z!)^00h4h#21Fb(boO!!ZS*+!Lz(e-TO-uT=c4UPvpIWjeTiq$``g3mU#q1AO3P%2F zjG2BWO7{Q#%y#~R8+tAp@7CQe`J|xARyhCt@Y0}s*L2skmwm1dntdK?51sRC zopSlZ6pH}cPbWm$7K@Z-#ue#b%~sHSv0z`yH?NR0cUN59YQ`Pr{d(oTs_AKO6>sQ> zeC&Lm&h;W(WbN}uYm{G|Smk@QT}nPKcgc;JM_$&jzhPOpzv;}SM~5Hwx$EjBCiC41 z^!;MS+4sVxD*1R+!P;o25~nGbg#+DB6iiZ^{yXim&fm2u+XO7`2&)IMo^R60UN})Y zJ(b~(8mG`y-vbG2p7PDAU;O>=;|q_D#XfCVb}*USYtF57_P=f0md+GZet1xClFhPm z37?Js#O>tgrL~22tTWupe!KYY+MHgYpf3m3Wd+{r$_kd5oa>l*oiQxbeag-#!#z`j zmX&7PrtUhvaek{w`1M&mCRtJ{PadeAoNeG#wW8ypxc1_r7dOu*y>45=uw}cO_V1kY zYzmXz&KkBXRC77?K-cr$ylsnfZN1qpUzWNgICDk%*3Y|iHICXBX(d_j6i|7w{kK<- zjWy@~uGMRIn}4{f{bOwbf0FQN&wa_+=i?lNxMk}Vo@d^7I`!lZ}a4zv#*qheAqK-*z zm8H$s>;$qu-0%?7TQZqry7c>%1u2P{pH2%goo?87*+;HQdP&L5|Hn2ylmBV?m-Er4 zds8pmp8H?B{bKAi`{;!wCo3a*ZEULZKG_JK`*paPujk^r;+##7i_dY*yqHrF{+anB z+n3FTAA-d<<;H8>c{+Eyhx%6QT>jdGhs!1zJjtr;{C%Fa_1=YJ4?TrH+KP8iwDFrc zqf%*`#y>ItjsG@yW=MuVvA=n9;Ak8WLg zHP2iqJ55Yxg8spS*N;in|2c5ry7S-S%+#p$cgu4a@?~c$-~4lX?}3`D(SNmrbLZZS zYw-R1EPnl+A37`Rx3Sz^I?LGk6@OsS&8VYlj$B;V>O1a6d@KqL`@Hq5^k(P!lH?^J zWwYyDj=HUy8M#Vr?_`0A#vc2Gj($7)>ZoIUWio5i%YHeZ!n+;nE8_FpFTZTGHh<6l znCYzf4WV5DH%`yLeDpPccKAQZtsDLZ^k;tab)4AgBqFVT#aTqPe#_N44$;JcrMfR#XgRdnWY?a_uLRDPdFFG$>Y|Yed1#t z!=i;>N_5`cn6cKs`bVG2j{siYm%K;II~pwZE_U2{gX6W0@|vWzmeRTo_dhp_8n|58 z_JQ}}UCR(&&U4yKGaR;TlP+W{SYg4{d~bQn2dO)*MpqOTsoO1iy`K4?iRrO_J5KFj z{HiN#_lR*epNh3KqwmdHOS6J%oC=Cw|z#Zx8X6#wisJ}V-VU(d`w`)~#0CbvcF8yjRfgy*htj*_iC zzh~Vt~uS=+zY^T{X>G(qyzm|Dha@TIT-Fst) zu-?aIZz|v4kZ=rN+-kV5U|m9EWoS@+U-)gI*l9%ue@Yll^*65(b(rP9B~UTYQ#Mlb zIB)0DQ~C#_qSN2|S1wCBTe#r}=fi68soB))H7E8feo>5#k_oyH zUH@Zi^z)SXUEi5*p4{@Qygzq`*PB%_H|vPbI?aLa{rRvc z=SHQcd`Dhty1wS)H_YPv8$z*a8zaNNM9IjHQ>82C{Z=ScDOF(m^F7US#e!#7 zS$6yjPQ1tdzB)UjaZ*A2thW zx#w`5RXroQrhS#r%hZ~!0WvG^9GiCasDZ{Qk%FA_at;sljjjoW-k-YsvEEm%PlX40 zCrfAtTPBD<4!^iN$LO$;&0OOy{X~{^97q1tUjFv)j2ZKr@2xZErf-=bS}AJ38QnE~6E~xgMF{+(p6|=8P`phnI;fdj2)elX& zf8BcV+^uJqwlQwi6IuLbJxj;i@2#h0(UMI=gvDfVe{747sP%Zy}O{YmC@`-|LaMs1WLQx4>S5qU3SIG zF~UPPD0j7MK*Qy#>VjVVefRsrSc4emGOb>$!aeh%&;9Om>a&-a3rk+u>3%+5>%y;R z+r73+&3MHhu=hpFb;~VYWsic&Z^bYNs7<@`W@+hnXXffDHgmK8D^KlTb*f{MvWQhp zK`8SL_6zI(d+)aQyPI6FY=-sqYi!eac3-+J%x`CK_@0=akYB^)Ed`NBBq!-k($MW& zkgHhH1(Fg z^|~u}?)HMzULOa&@R(CkA1=%0YP&7o(DrfF`wRb+ABm(1Fg-f3>0^<266WQ1wDBoN8DpnwS(F^_g)3Q64t!Vq@CE}yCdur3J1kvUb z%delh$bV7AY?tkpSpuagj|C4N`tyKAUQDI;(dAPK4>#V_y=$>!-5jAGdgXB?F+68u zxTW_>`LW*q^WwFn*SA;d_2F$3Dm3qZTCP#?lyS=rk!~kZ3kHUN|KI0#*`KUD|8+;- zX~6~lJLg&c{3U9+QE%1!hNz?G3z{GQIX`{Txpn0i&QJeWwWR9Wo8KR_^O)4N@~l=q zXisppUCSc1ApFe7L}oHuUK1=^wdm5a`6+7bn>^Hc1;x|0R;imD?2p(O z6!g#MUwL+|iGb#u`f2|-E3fh{JTGzH?SM_X-DTngs zwthbKSxCpslS$<3S-)E~HpNcg?(f{<{eAaC$F&8AR`FgdpJCW??!fco^L2R^EE2r8 zB2!y$1OJ-m7X@^51EjgCll_8ye@<3#pTGIGVgEu77iBNjSHH|(9;h#nkknyX`%Tj_ zV3yGo{x-2l3;EEG>x*Z*s#}$uGhs- zWu(7LTbJAGvRqoBs5!gNBJ%lZ01UrQ++t=9&TBGd-cMzR(hVV-%ZqdJL&k{H#;Az z1;* zx_r$kcLlefG+a@Bd-kiy-g|2|#92SzCAdEC)Ql|~Vs9^vwfC8}EwN{fXAwJFLsLxR zUUly+8yXth>zwQ=Oy(rNarh&VsgQHUDt5~1R?}_E0`5dd$n|W}OqGw|lRY8D8Gh3_ ze9o@}tkHHpZl(1xm7XDyoUyf52c$fW^<=Z{E7!9-%n7Y6I9&8+%KP+(ckj#JTFh{g zS28Sz`Mo?-YUWI?d-H`}uwPmA^29+U_iG?kfl z{nTN-iXgjNY|r_nT%)+=9#vKTnE1%B^+;NT$b^p4I7?gq;$AyPi#Y)v5hAiS0zFx%V8V1yMntw#Z6_P0E?eAhh9KV$zz4N52^gzOvfj|NiSX zhPP2ixcPWWC;nDgYM?)5W!w(SH*A-GzrQ^7j?WQmv1hkKXRNy>-NmFV@Gl^};m?xo z{dpa!Uv^Y3*!Onx41dedQZA1LIU0U>_y1+tWWyDt@p++%bGrIDFSYq1hZ9y``K{et zboPp^*v*@1n?BcVVXcyF?aMuK`t)rtokBs@)4vOERZ17VY1w~tpYNlskLFcOP+6q7 zW9^x>De{x6?&~$E&NIrL(eqDu<}=T2x*C;YOF#Qxn0+U!E&5RGRVVhNtAngI8h*dB z;;gD~v*9_Twv|4u9JhA7H~h_6_<&XILgw3tCR`pt3!?TPS#3C>{;k)smn_Qzip4g) zk@*>J?D^X3eD04;TH9J&rLR_(M(t^mR(;OONjelFw>h=4 zlAU8Nw}ak7uBKV@zyA$*ZlYV+m9QdY&vS;IzK)$wKFnh9TGrbBNhiOQQQ>?;(j(!A z)|*NeE_-(374O-YdEdfs)!tg1{=&B|LH*oX@2~@RBn`SAAD!mF{;#Ah*`lr9!0&Qy zkCW$VxpdJy;~63?>H^n3w5^TL`oXj}p}ewFz;&~GZm`tqr`K=z^iHaFar0ha`|O24 zf=}B4{%y7I)=hggVN<5#BPI?-b)hRx?Hbx{4Sqt~Ehcf;iMhCFw&(;EY~A$D_+mr5 zVocp>#u@hy|G4UxG5bqN;*GjmcLz;Xd0T5Q8C}T+md(w{OXn){3+gcZkv_WTMt|mm zKlimNzveQ#e~vq_uj}j2qbqdyn%$ZI2NsyCrQR!<`}MZRi-Oh`8;y5AFA5&``2V$N z!DC}>=^Kgrgm2h|z3@Mm&AoX-O=RA*oez(B-dKC(&c7FZ->2=L_3zxXH(hbD7SES% z{MPH@#I6%~tIo7|r%0`nZ>ixqvwbo?%&Q#dMC^WX>~6Kgo>cJ?kFv7786v;?^89|S zZSRqO){!R>nAIm)rFh`aZ+7eCvy5t8^WsgiUtN{4-+r;NPBN!T#8^ zS-ytB;jZqtudX`T#C;y6zvmWudZr~6*vgj4J^SaE>Y`!E%9~=l@ado9E1${jwX8qP zv-eW+xefO>C_nkSKwK~A;{uTh`?j3i9Bb-UQ>+#3$x-$CN9>)oip%3Krqwn4TJm~t zBAej}uA2275)~&_-8esgpWM@rd#AGf|8b*8sD$0>&X?ook8eEHT(YK0SD^5xajH~U zlYfTbBrEr6dvDej=NpFkKQP+nxbOJYSlcPf|E=1nk<=V+<{MkfrXL$pb2&JZy-?bx zKWZ{*}UOVfc#P+O?|DlIH%FmoS(EqRV?}9ANrnRqb&k?_V zV@uqTN%MAnxn&di-)Q3B7!{l2jvW6>Zr!NsdKt5|X!WY2D_xzAAJ6XpVZUZy*2+0E z)&KafcUW=g$F7*4+DA>cTF>jx5;^<#SfhMe)j6+4h5TWL=+2^nYbs9yGh}aP-*^ zPw!b@V>bRVH_{@oyOVcchw{n%{AnvTPAPmd`6AoRZ%g`|{@Zv?(PGVh%{=EVf3)+$ z8>P$l<$2o#o?9fI6!YqY?rVL=eb%*n?AN{)^<6Da=qSCKYh-y$?x<(}<)nuT3pXDt zG*5K-^6Rl^=Qe5SqJ_>h~=vQe-y>sdR*GU@xY$q6P&`r4Z{Lqq{D!Owj z5ABxx;rE*R@to@qH4NRYrXH;tUM%|^8aa$m>b3@vv z>!wGpaPqx7e%eh>^;lW+B-aghiWY_XtUa>Tn&r)g2kT#6Ind|&A}!34H}3@N%1IH9 z^1GBQ80#(+ExOV6G4HkT)rmDXmKQv{_ifhs>090i)Ga@`VSoDDH+}VgZ*auSJ$3Yu z)>~WNm3!|>*Y>aZ@hyMqS1r!?50BI5@}}&0EW5?h*?QIS$E}(@ni4vnzboRr@C0x4bR3cg&)v$ADSn#oCBRhmuT9~`NdZl3<{;=J!oR$LbAHMDJynP2V<-&leB=h(ZodpBN*@lAeuAg1o_1iO&j^<3W0O>&Ud*Hz2#*_!P#tC>-2dc2}WGLt8N6CEz^{&d=P&6apd~`oLQ=G z=9}vW6&^crPL8>8b+*K*#i8rGDyB7iuD&&=_QdshhmI-E*KMpnX2fPE$!77>>Vcz^ z((1E&+Mey=Ub=cyz4_4#y7S(AZxTFxwp!{(+@ybQ#gA?r=6bDlZNkM}*Mc%xY${(K zUh+}aPigM9*YjqpS7z%eUEs`~zt65=#?G0`-r9Qx6^J?Rp6HfZxMzL%=P0q6pY*qx z`X_vE(b^#-@pHO=^(8*eA7{4lOk1`p^Gp5P{a4b}T)vqy=>%G9_#Xee=>DBaTbOu{ z3oSblv~p3*cfG0GQ?}RSa|k6}e_Ol3up&Ki_01ojtS0;^EIFu?xUyln{*U^qSOXs2 zk}EDRH@WuDIzDgL|HN(8dNWJj&EB+)$J$DbFL3!v*Oe|ylif0(6>8k|Gn1aV=-l2@ zCFf$6#kH$HZp-exIe*29`&w$2@?UMA)tff2bW_WEClbi?uY);^x1!e2pP^xO-*$Dw zEqResge#}YPH)~3e>;5Ehr<&iJO1;Wl_}#5yCPUNd$RUB)@WDFhUARf7s6h0>TdiM zHaow;MU3lV&&m%EwyId%RA6{eo?fCisiBL1vr=qwzS92>Zw!AtU1qcK@V29YAsVTf z?z=KngM=JCAD-(L&agaKnf=^mM((Hn!cDBXfnv{(^Dl|M9yImdKi>~coa*~e|4u$( z|MQAhWdDq3|HLJ)aD8B%+MqJ!hI&FL*T#c4A65z_9{p)Y8cSU`k1&KaiIww_F>UP|+kEiD(R46=r>~Gs6_IHCr-Zvfb#S?h)uHRC! zoBKmfZ=JHRbl8gOh(5v0GgscMD+-f6dm%VHoo)fuv^F{@(be=@o{rJj_J8gSE__-`L_l_43*) z{LdP1-PhheZ=WOI45_)*(g|$BCb}KAN`0S>{=Kkw>YInbQd3Giudm9~xgpTbH&5{1 zc3q(#4sRL%r2Si!b8X#|C9dL~zn2xi@A)*p;4lk=$=rV7jzdd(JTAtkFR*zQ;@#Y+ zG2P&4$Fhp^bB)T&O#OChO<_-MVhFT-^TMGg_U7|S>u>4dA2;h9{TtAjv+u(Cq9u85 zZtN0?F~3}8j{GP)ta-Xs_O1SU{V$6B3Tcz|cy1ok+AF(irS9j~a|L=YN4T5zg%r(+ z_BGetx>`LxwN!4Ig{!0b)eEe&S*ZwfBKobBBN-`(_@_# z$)N$;&geAB7%6tQS?{fB<^89)Yp#sSl@klQew|djBN^4aV%_U$#m$Y?j|F3XTb&N^ zzS({3?auZ38DFQ}6jJKis~5TKn$Uu+m$pYaySW)=gfY)|VgIho@-6bv1DO|bJ2b9Y z{GO?jw)vp+ky$$u;+|@Jo>H#;OJY+=QBT5sw({mpjjob!Jl1w6GfO&3%Gob}EZ|!8%}==fvG5En8D~DD`75Td{j+xzY1Z|owGj7>s$~CZGSJ>Sg4nTi*KQ zo*REbO#jjEw|bbpkI#^K%09JGdIPJ$4*QM|eiQZtd?`95DVs`n5%Mbg0 zOn9;HQ9$WVq3W>z8|L5tV#@ezzR%)^_sZ^^k9L{PwLa(3^XKp1$X=eXi?b>-HRV}C zzizqCOpc=w1q=FbeQ^F1ySv$XSLvB;24?TqY{S<7h|Hd@^mr#G;uVn^%xtCZaTPj}W+j6gW@n_xbzYR|RC{W0c zJMv(otduc>S@r(pWpkC2xXbvj8$_&czj~)CEb4>f@z-Swe@~oobE&|doBb^9AuDAz zDMyNZKVMvwWw_{^bk-?>9lNGp*ePxJ@kb`h5?jB6p{|p}668vYwKvULxM|i@ncMGG zs{e}`ooks`Z5i&uG25%e)~^do#D$z%a+iFf{tg8Rj!}dd{A2Z zzG85@|8BlC`8D4cMbA3PCiBmAJzq)SzS5~_jPEzE6O?IuGestMLejcwM;3##lYggw zJd|7SCcn!~zM#dTJe5K8hVZmllg;O5oDUGZWc)#FPu27(6{(ZwUTk@^^nu27WwH4E zY)0?hzI4no4BOq2^QL^dY{WW6=Zlqoll9(O-Sl0erI+@0YWr-Lx95x&@4ef-IMSAbAh|KrJLe@ZR1*)zG+JEB|bV4(%qh6QmfioUZ9cJHeG-*Y)DPSj*w{+xRU&(!_* z{Py(u&uI$-*spr-EGW(hns+rgHmBivc5j^F<)+_q`d2UVe#toN=s4eTrHYZ^ya4UM zl}rmhbv(bXl74}8^)uIBtNoTe$)6_QzD&hWP2GK)y@ABFz>{f>Khx6J{ccTsGmE33 zr$F=cKi2S70T<@xUbw+ue=@Fqv(J*BJVEw`#Ro2{ze+AodY$|4%_=?d)yFn-ye#0C zF}}I8dG5zue#sLopG{I1`~7rwMWchCB(r3!(Z`V8WsFmfTBr;3?cMNvVzAyC{j8`1 zJYB4vdK;EA-aEzoYxRO{UGo1;4wUbXzwyDTdYbYvu2<&eD!!+;6-;;zdAOGmVq4WIhz{vNQ06#kQlRA8+ZaZaNwm&e2=DO~+!oiD)>>Q5(P1)*Wsa zE1gdyhQ8FBdnRXRn%eIZDILMrZ1(N^(5LxuV_CGwmc>&K{VCj+kt7{*?7*sYcY|^b z36?$ecDK&+3w*oByjEGzbpPTNH@DvWvv|FDBEv0{Sr*Hrg#Q2JWY>uE%RAVvV-lK{ zv0sT#=)Qct%Ylzwk&|Ao7O{KiHbs8#%?ayQXBy~FxOy=5q5sdxzN~+|Yh=}HLSL7% z9J9J`ymZZ3wJnZ|`q(QKzWaP!+pw}$L~Gvp$M^VF-^+2&Kcv zRI|@nv>;HoEV1|M(W4f%eb+l~mAD+RtvKHLS**NsX77ULIsCo%WG_VTn)&|bJh>W? z9WgJDN4{A;Ut;pc;#JC8jd7x1gt(IPEsg~E-3dst%{j^!$`@s|;(C)7=UbJx0{c4T zy#L8OP}%Xsx-jSGyws9j6Kl=`YU_?leksgs4=Vk_({|-9m$Cb0rej)cJtyRXJrn=j zXwtBMFYTUo`QyDUw|B%O&q%$<^dtGsgysz{srm=%BK7wF`#VK@rxdGPo#&+EPmlIQ zJP0qJZV+=o&tc{DM)PyuwDuNdX6NnVSij-$OSj9*go;)+_|3KVxe=OZxWnh-rkYGjl!jl$P-cQ?+^I{skF3Z7f(hcmYqu2p#1vD(&-OKM*EjAgQmyALJl??01p zHY+;u`HM?gbE+qFAGE#5H)Y9h!QIu~)k~9mc*~Dzm~;PLW6M8k{Va0l?7F6<=H)N&`c0_ zp|zSob~^O@8_>L?k5)8_>dz?!F#^_SM~i>#G>=i4TPei?bzp&4J@owG6I!ktK58I@dc*oJ1-T27u4vVU8i(FB= zOpaf=QIB*34t}&xc%kfDtP&8kSb0gCTJcU5|AmLwt3=9eDSdafsBicF}GbkNG>MpFV5!MWmNai)fy6cZ1gXOtFJ` z>lvBmd)+$U_TH=LvAo!xm;J48H$|U0o(=zZapy=PXg%CKAEeRtjL%%7Jn^LQ7Z z>^;J{Q?T!&OW+ZiOUHIA-hJY6b8F&sVDXN_NFvS1+2?SzmgI&0*K(Zv_t&+Anz9 zP1yO)X+fT3N!oIkxw#z%PcE#FxNU4!RpZw#6~TT{ZuSdMTAJiBz~^YWV+_clz5SDpIpw8-<@lh~zv97-s9XC~pocR0N-NN84JJh>`Sc)d*c5t|L ze_~#1*>u(Kw~G{;@Ck#Tw`PA@Iay+T&zi|c?v`!8>u}?giN37FtF2yEb)Nj1zw51j zUlP*&GUvvZiBq$4XM8rOU(K|eBTC?h$DX3E;v2*ix?SYV*&lahi*BlzvS#7b!wyrn zH++~n)N-ZUWdRC-sN9evRX?7!YkhYWIS1V!hX+DO@)1*G)=;zoYrJzEWG{h zPVuJnqxZc+-X+z>KXwkkqPa^<^w6d)#cUEj=-Ti;MngIhC_)0$P&2-ONc0eMeraWXvee9k& z(=Kjan$cU)(KY#~?2%v=HP`Du)a~9E-SJg>@n`w|&5=9oHSO!xwNDGIS*{X#Tsc0m zwf(=ZV8zX@JyATSzWb+0cyT%UR82HeiTOYIR8M4M%Li6Yr59^dvlbsoxUP8TqM`57 zzMC*pz=*v$zAJitpbCihJPN``mVAN46V^oxqVsXrCyG4$-Pzq zyRV|+`6bWVS{lBYh0IQ$eCPJv#ut~KZ)Ov8cy%D;iqSF-sZ&fhYj&r{Y=3gjy)&`k z@C&OM8=D_BYJj}yVPHBZtS?bJ^ zH1l7)B0Qs9LE+GgNsC9Uz?E|+^pMXf_@KBV4XIK`o|xAP8*>)EQ?kQE}8b^`cmmfoa-opOq@N=Ktw=q-i^y~3i3!hJw&W%1OsV>-*d{6A4k<)apkb3VI5tH9c zm}Im`O64d^OQ1Y&XYSA0|D2zFQ|U~9>+k+OaTVjQhIa;{bLASgaLk!gkNXwTdu6=-G03O|AkkR zE7o0{-C4Z?lw=tM{=b>|VcMDeb#DD)r`hzk@P&8l-0 zjGr?W*tkWlnzLZ-y3N*aW0_uLAKrT9^r}@>6DB^*S9;YVFqdbR`h^qqnH9ej?p%ET zqAbHm+cW0h1%u5SISx)Zy>G$u8+#(Jd~bX4a>fH&N0rFH6qfUnCzj0oA>h{~%ylDU z*W7&~vkv##CVrdrRCxY<|3{`MUs~vI{)e-+4vMUQc?TBzo9?w`A+GI zwDTQFH#biB&HrV3lFk{?*-`h(|Q#j(Yge!lv2?POp`YWo)B zZ?C76Uz5A3x716f<|T(in+apYMsfeiH#%DCJvb&$pYoW)L0)b9ovwHOhYmRfm{oIp z^G{@%@_u>F`^rwKhkC9*=O?k7H`H-X6SCQ}^v5v`k*bjS-j^mCNxqxET%_9FID&hw zx9z|BHR4*&(zYht4_9#i(6RZ+gr2Xbmd)jN->f-z`Mi!RiL-9b4%MufoyU*Ay5$(h zVJ5U|>b|P~RdY=_9&F5iq+cA7ws`*X7xf)&(~pUMlvK}t!OswWPydfHv%d3eU&pY6 zXKrp%&)eq9%DU_9ril6N|HIENdB9g36w=mG>}c8(QFh=Gk7~?y*OLCp$@5pgvo~x$ z!1b>5x7gIc--k4~p6p*2cz*Vu^#{2042|yplZ)lK9k8YE|Nq5%+>Rzb-QDy1uE!1>pN~z5`K;>G-S$0BOYqvw{wPxx;o<;6+rmTn`FtIdbT?fps<*q9@AFSiJmZ|M zeTH&UCxdO_ec$8!>E2cs{-!R=t*;l^XcU$5y(G3bjWORqbv^5j2zpy{jG8UAhdb#ePl^fPnwZoU2a_Bq$m zAjY!=o2ECf^n0@1IqQ`8lDxHtmA!UFH@{HbBUJwS&QYP6Th8j_%(eQTk-K00JiEj9 zZ;kxYOJ&2R9PM0Rc5b1O&Z3i3a;K?W`L~b%RCZvc&ApAa#rapBq>3AuT+r&?;&i55 zXH`qpD$$7 ztURn)sCVLSj2Ms7d@X}*vJy>>XLF?MSKFQ}RkQMYowlnbrd;K4$dgE4(XN(2r`5^J zzecoP>}fum%fRKjBV$^h&u^{f@H<}`VkbsSxw>cG2F9q9?G+K$w%%qrozl)vf3>x# z>S@<~;-2Ft9%O0Nc89S@siZ%pa%W7zuohsX(A@*VYhaHkLmmYpk@e|7|kCKuc$^OVGA>Ue0 z_^iek--iaHpM0l7DiUZ{E%e`vpX*R{Jd8xOCwKZohT< z8WwCD*BrUdFlY1R*^NO@6t;e1G5a3U6Yl!tYTc9rel9cpoUEjI9u!TVA1ZQx@^K@Z zCo}h1%?=4TW?t96+j;L+>FMVlGl<>@Tz^gVlgM5Fl5Vw&!b~-c?{-R_`dItz;(8|6 zYm>Hp=bR?n=B@YKgEJ&t@~F9e$}QcA2VTl{*Pcw8ahE>kZ!O{wpax z+5bh+`GY~|gqb(@s~yS>(J86A_DpQvbmnEf5{ zaN{=NuEyV`ebV~-Jc>LtxG&G^UtW33=F*1yle@mWQ0S4Ah;Q9+`#jsy@AG4SYR=iX zcW#C6=f)k=t{!-`-{dXB!u!7pt$prAE|k7;{CQdDX%T z{7*0ZTC2J-?KSI~2u?ok9kq+C_Xv2>T5+`{Nt+3SpZGF|etl{eKpIz~D&V`9z)0(jBmivvh?E62-uHNhQ z!s4Ki#-)X&{oz|5R66LMk}s6$d{burT|^Rq5slCE!+# zZpJH~`U6|6e_Z!o!1p>?`R{Dbvj>jf&g5P3<(`;nq>V^alg4l1{Q5)er<9o=yNR_w z4N+p;^6ARt+ZF5X@uxKROm$`W^^0fro6=2_T{lb)+BKto;o6CscN1lmkKMm8tNIX= zB9qwFZuPI*xgC1_a+ZtuORn5-X#Hb@9T!#{{~yD`uA)BAAV)3m>5utL*C(hu38qGx zEScnKzT^7g|4fW!o1I?-`*c}uIq!RJwgqFLOLE@(3YVZLm#RkdP0XJ4l=B2AUHa=!R6zxXbr&`PyV|d9 zIw=P~IQ)KYBf`D%zSGOh6Md(`_Lhiqee~9BTwUq0G56Q^O**X?+|IKv`mitW$Gn~TCq#-Sc7IF@KK}Ql&z3UwDVZG{ z`hbdvrhH?LsG7lPP+%64`n)h> z%9LekvwfFJ7k;cVYD)I|RrzHABl%JZt;hv^?|cv@Y2|GeU=Eqiph zk^)@gJ4$a}e_vNKb@z0wY|p4^Oj1XCA4fddVZqZOTKwSQ#J-%Rvx*ZMls;W96-qv| zA+#;mY|8X~3;v|d-l*`g{M*K&?QGu@XKh+Bw<9+0L8j41^_HJ~M)SY2ygtIbrR{>S zaX#bnlN#RLcOJc7_uD?>^^=7eI@Yh}Us!+2I-zoJm_>iOnTZB>NY>+)-q$Qi)+tXADXO^y%-pu&gnDMe#9i~EE=^y!T09bGtqih!;CJfiA@81) z$&;9hG#u9Q+?XJoc(wM@+zf{~EqeV~Kjbr}?pQDESbgF4ugkSg8(Fq5lVtt7NmclX z24hp8O0K5t{x_apztlY69eld}v?!MxPqxN3k;gp|i&pziIIq9h{A>yDp;CoKi{fv( zNY(PZ=$Iv|^l<*JR1a;>3zI(oyQH-0V(M?M$+k=;r&cMhDvg`}+|k)rJ$6U(PNDyj zx%pp(J(AbIDRya~{oyeG%0TE4{cw?$@7GDT!BoW*nCkcJFPuuWQG2C&I3M&irdh^>GOn3Okp5 zU#DawEB5l4%;RqYcb`|kU+vd`s6~qlCZ}1xS$|^cxh41cO?CMHzMOOWr$B*JZ^v)@ zImIb|JAN)|t6Ofh`1;jdeMPIh`MB)?6+S}mf&e_r|dX?GNZyyB|`Ro6r6-sE3i(4iPG)mY+s z#lPDDk+6;@&e&ck_Dosp@+=malR&|FA)zExe+Jf6|!UcJ<>klOZ7W{6bAD&#vwX~} zwD#$gE{HRh2 zFA-WjOYYYB;?iUf?}(7jB`f$3t#ACpnK+kUW|yOo&}R)hXD_DXJq1!6uitvtZxz#= zwrWzsuI%QiU2{LhKh1VOcPr!opIB#z-%0i>kCy&g?D4PMaiPt>>9;)o-+gjo{V|p7 z?TjbZS>-z`9}v4Qesve~yM4E#BKMoR^-ubILg>;#&#UH>{oP(IvEFj__>c1E`xYO) z-F>b_g|mAOW7jGp74N1S<%iRs*lgPb9`#}mOw8P(Ccc{?!{fpM<_6Qqm=#^>9Tp6n z>UnR!++9;|ozZcFEA=~fk%jouZ97ZXp2$dTKf)t)jO(G%f|)1Y8t-~nXtFAvJ=>bi zS2=ZYd-KP(<^=XLN4MB$sU6yS;ke$v6DuZ^Tf1KScyo1B8qF^IO)r%aEJFYgPnnao{@J z>rS;>XC{^hL>Eqav)I!5gNVe_33jh8u}_zcmXr%_^kdUHu-NF-qlhEZcnU45yVv>6 zxqZ`N-)b@GmzI8+lVu}!UUhhD>Y}=d)5G#A+p+o!d#m65{=L*@0t4%||9=18lt(nH ztxMZ~>+?+%U2wGjCVwB&pa#kV$$)b%z}T?({dZ0M3!Iwxb{JRescC?@5P&6svkZQ zqr&)hr@PqupQ@*ec7EU!k(0EY+gzisWEU5E;ODgDlO`_3vKcqnHE&H+F*`N;<_7Lv zuQtzJf4VcD*VQn-yLsIstEvrs*Ju5-Ea^YBK|x{9>=PxMj~UpR{XgW9ez0#<=)?z_ z*9ups9SDC|Znvi-Y*DlDwqw#A8`NdY?={@uS+W1h-sk^c6+0gM*FGs^sod`im!5Y_ zXMfdMx_aTlReJyD@+}Ox_dDw79^w4WJS&ecZ4o$sCH(f4AdUJ(zWZ61oS*J{=Tr4v z4~B`X3y$(%>)Sk8WY-CQ{S3yu#q4*s-s1K2mPv2h{Cns07g^Kd&b-iGz1=0E->|pu zh5WNQCim2mtv0V)Vf*ykL8(_8)UM00s6}Zn?LWX0EwZYw?zHc-wI<31|9KdWp3!3o zw~P5aCn<1mo6C{9dx`|Npsb*QYgT2lLOD-nT}$cK7uO zPh6Jn|08qy@C~OD#W@?8Te~{`M0~o!ukj&MPyAu@J=-LXoihT=ck4GzdUW?uS>ev6 zvZjNg?zf-yu{fV;U!t~|$E`hd&dWzy{}^?`a;?~V<^4o?`ZiTg{1H&m`a)`(myx1O zO7GoY-jT27PY}1=er1bf{l_gerN{a*tzSrO)Gyll@AZYKqYs_@+k6k2rqyOXm^)#` z(plzgak;f8kdvfz(un_LuDPk3`Z z`H8x5yI!n8!s?}Yoxit8DC7y(cW>87Xsz#!N$>S$+_+x&eO$>jzQjoSeK; zLNa(O-FI6y{XEOA?Xl#!t3uq~izhYy&04U@ZSnLcAF@6ROc(ys|G(?Cz$t}eR)6Q! zZg!X=;3&S=R5oByx@zS5*BN_YLbCHmc9Kik73b3wMepD7X_3a%8}#(14^dBULub#&U!NROQ=gp9H$hsZ z^vUmOE8p{ECSLXlG2UpmNch1<$tT^qdgqh41AcZNWZGu6woYaL`zB?BdEe*OS$LiN z*l6}+y2eAEtqf|eHQ!Xc1EUuxuM4}gPAgm`#Ka(!S@;!aC0DxJ_NPC&&vxvZ7kFgH z+~!H|{CsxC?g`&lBE2c|Y0686cY@!3-&w$Q`l^XZSj5EbckhepzgO=4xk;h<(Y2Pg zkIPn{t5{?9GNQVWdDB_D`a2O{H~NO#y6JGd7JM_|hvrF_r#FPAnP^(vZD7jPw)wL8 ziyuP_AJ1|%_T6Eh&Mfn9HQcdSIN6=M`NNvIQzCjR-Uiqf{<rpoZkQ{3%#Qc( z9$Va<*~<4SsGNUuo-toncfX(5-u&3=eAaWLJ5x9^Bnyitu)f{N z`66t2hpNs*>)!>l8yx))sFkj^{y#Z`f&JKpzryKfWQ>Ehb^BK|{hlp;ursWw)9miy zX{&cEOEA8-fwOp9*5eEAZyDCK`hMVV(O<+Mb24pp{nS~^bN_q)wimJC*i-#zzqk)gd8kq~Yl)p@4bAAcR2{{3KU z>_!!tgnv5}Q`7Udn20On-n##CTRh_v0hS4uLXK@WO#K}ESYYS(xg368>63-`th*U* z+80)3)v*2kvFC}_EoG}aI90FOKVoX#Dx9mWW@+CakbQp7orn2rZO?Z!8fi~jqW|zo z?F!LQM?L5JGZ-e9zVWL%=D9?ruSw|2B?03qUtyQPV-jB;|94t?yyx1y4Sv&J>d?2B8ig!cs`r`Sk z&IRP$a=Tc+J}*|;hV${Iv_0P=gKJlB=09mxC!%vf;bOrI0nMAGPil<0YwGI%X`GJB ze$?rsd_9HJV{x|7Wa%{Qp<7&v=^C~uFQ<43>DgJ-D1I~MRI`BW4t1NTsm3G$3 z?VCzMOk3)|ea=5PS@>;G@4=Y0EF09r;w`26oLhwSe_!I}o?VdB-Ehz{Y0J+ap3m+X zu=4LPdn%%S?C8D5JKwj4zj(EWRaR`p_H5Q!tk&BWFsOR6@y=#T+n~B-N5z)EYu0zS za5)Fw)vVRH#NB#siItOzgKc|r^V5RrsLJOJ6HeaN->%YhqQt4{Vc)9iB^SL74X4!~ zUNrrGL;VCFgQBFLIu};ox!Rq>oxrH&!x_1j^_Bro(ahhAWQ>Ck{J)bc{CQi#)p>QB z52~H0Hnw=l!eTXP|Bs*StoP@gPy2iQht%TN3>#0`Gm3VslY5`?Xx%E_C$@I)bB&Ew z#_zpiJc)0iM2ht)wTZK&C%*pkVUcc@+=HS@gDb4fx3{wX5;FTRKWoPN;F^!0MK~sg zO?aZ5_h8fKow_c6*49=FRqpJbmR<38vPO_x`uT?QU!J{ZWLtTxbNM00HFK@@6>ERg z-^tT%_o|~z_j=o7hKcJgD>6hG-r-)$XS1Y%IWb_vKRzylxeHa>dfDt!Z1)B>$98u~ zd|>8YQt8lCK5=rMBHP8nzccn#H9p8Ya_M37JL%^Fah}^0T&_&Yik*DG%l&cvuOMFI z8-F#|=cn-r&0E|&O|D^9acJAxl6CP>8fis6J>6jJo&F#@bvq>AKRxy zb>_|K+gW27x$aQkga=#r-KT`U{jq2Dv3+yo|0U@ksXDL0x~6RZnthp$-Z|wh*IE8v zD_WXuYi1OCcTYn9|9xsl_clacP41iRl=_>uZCdK%&N!Lfzt~(hoC{X|nbB5mQqHl= zKWf*_O6AZdInM_dwm%Y&%xE&YC-KSk9P_hjF-C#sjs~S)_VHJ}QB_p&_L_7rzuJTc zL5a>)S2xA%i#wFQv`z5U@>-I{|30gEJEfyIjO+MBZ+^X1D$vK; zGyUw{!n4;zH$DrERIUrWTFQBKbz#5n(#YDlstKRIik&-Jy1F%~qqgd1*NzpOaqG>+ z*_H0SQVFsSXI(zE-6H7!+g%># z%iznq`?oBRE(&Uji}`k{biY-<$E;1#Yj-S+*k-)?jZS`Tb-EQ-oboXNw^{ptPS_e# z&{H*I#ghH4uVW2evUa&AMpt+5`21$w!ezhT#B32YXy~fEa(d|`%}A%M&bE7-XFm9(vH9<`W7S848$4K6KYea!`u3KZ`uhH*YFcj^ zo=o0j)&KXt%?*=wzv;7AuNL`n?WrAW%nyx*9{m^Vqty;B4bqVE*S$0SiFMQRFHd!H zr&-M1BBP!j{%(P}C|90g-}3i!8xB-T&fuO?Qfz+3eDwui<2gkR{1vf})$S}4d3*P4 zCFkQK?q2*?9U1?`?>f2sXPNJDlii0G?^~4d?OVU+?aLSYvS+T`SK6^jKPjFg^~YMb z&^EspL94Y@WT)=D|3Yg2rb(8y7FFV3W0=HC_B?Oxs!a$LstP*(Z%;#a`{Sg*RpoZw ze^QU<{AJo96LL%WKp_VH7m%QjAJx0QHz z&~WYIa`)3!VwcbC;W0e&MR#+L*m+g^Nsre)TcGgd#)iLl{&iXMDm2Qjvia`3B=Rmp z^who`jT;)=s?^rZ_S}{daXHqnw=#WxC`Yxx5hvS9FV-FMd!1b#l$Fcc@rWUf^xq3PGEG+XZ7J;?mkVn@71`(cqg^BWw5>=}Q& z6_;2%ccl=ct=VVQZxv1dG*VCcc5|#SZ_Qf&>F@d_j9(0b9CmMXJ{fnuQhaLgs@2oF zkLj!Ly{yc-fTLhiS8n*x#-kaNnnfSDnSAU}zHq7YXWY%(U9z8BCu9hGzu5HYvwH8W zNZxA~ZA#PqH>Mlc`5#!p5X&3c`YdhHPJU0_4Lp3;V{%=yn}ZjBPb=r_Qk$)O>a6Hu z8PnZ+UpO4u`(^Fxh@W~Xev9^9TQIe2LUj=1^`f_@&AeCLxnxs$p)tFzmN(XV0+$n~ z_R9oCAO5V!KHF-c&{^f_Qe{`PU)=O)|LWdrzVGtUZ?ATmuoY(?*u=)oz;Lep!X>o0fbbXDKdy`Y(H(Qi|7yR}q+H?Md4)uZCmSQY*~n8209QuyLv z$L8SAb)SSL9-KAJgQL3R>Xf|DwJ)+~xX;s$;s!Z`&&*+-|eNOD5#M|@{tx^g1Kg%BaO&E5>oSiid%=y$ z%D-|GeH;zunnhj@xP4ptCTqe2)e!5w!C!Rt+w3}D@P5($vu8IbY38ga$i zpGWJ9l&&2Tn_Q?csjtzg_=TiP>gprDeNCZ9^S(uUm43X#vB%@6 z-8J!9A0K+HW1Z+Fy_)r%{d0By57o0aZumL8ldLF$*&$4 zQ+xka`z+sw$14^s&u{q{8N6eORNmHc;>!bf<)!d&ilvbSVYFM#sKdY#iWcarg^TRYQ zlvla@_qCV)?;>rnT==H^7vcR=w@s_^>682YvL@{m;|Hs2p^EogW#)KPu`&N%%dmCv zj6DaXYQAJgi@m ztuXoaBF$9b=heP8*zeA~?DSC8BizNB#R(a$!eM&sw(lv`4@6%>wq56P1i zXN(D2ks_9nwPpY0%*2K<=AWPSBDAwB)n|dSv-l=8Wexs2WnxT|yIOZC z{0xu(JJ&tHYqG>8Gpikmg)cRv+E)LXYOlB;o7qkEPt~i5`gZz;cTfJlxAUk+-TwcF z(wYL_{1n*tJFnodqVm({`X&vN=iL1A_xQ*+AgLm_;z2)!5@7^m1%1^*Gnm0TYr7ilMA^& zRCVv~e4)wBb!3ay&T77GE9_>jVr4A%|MjAClgy6!|4SA6GN!rj6P|PWMPqU_)3LM9 zR;{iN_jqW#q4$4S{>Jjq$YTyGyOR!TTnW6NDkW~_>>gp*^XaAczImpn^w}I`ANzh5 z`oLSYBIJ#~zCND-zkRBE^@W46;cc&$+ja#><)1n+eKl`c`#k4aQkus@wjTG0^7l+o z+`dG`_s_BWcNG_(i7dK!;%>NDI{&wGo8|We2@1deV|MKB3Et3G4U&~V7o7R>lwtC} zJNp_?Y)IlYK(-_Gk+Fhj7VfEtK(4T_MK5);T}n zQ~BFq{Ut9xWQjXgiMgEmvw(A2gYK(Mvc?Oib19YyaQ45CS-84NhOMEzO~CivhmFf_ zUU6J{|9(bHtxe5^@)FL-MT!3>UKO?C7IlwE+SLCpY|m6rmbbXfz=441dzbYMj;@17%MtAM!g0mxacQ5v6`0bG^_)jP#Hc2?WDO=V3<$*Bq zFO2KWd{$b2dBkNFFQB(q{8YH;b14Tq@s_Xv<_9m+o=ePsawhDqn%%qi3^OLjPh^uW zby-|q9{=gAS^xRCE1P!~?2b41eUUFlJ@87h-IJR(heBI}-t;B>Q*XK-TVfw%xmNRP zTC{xKgZy`)tCDyBjyt<3C5E+o|8DN+-+PSA`gvMcC@g*x=%BqiBWlzL3E!n(xU9YInlM*#Pu{rm?{%TTw=rDuH^c&lfuc|A;!rF@V zlrHLHXG!}~bjR`O#Z$jImQC+GXJp_X`v$8}^Tx03{`&<3Cnu^)M(huq1yKWgcoOj#$ z=U-*@&wp#L$cAM53Hr)eoa31E=Z%=&RHl}lm5tm#z8;ZjeiFRQ+wb6!z}u6)>WR#m z+UfV;r(n)DPUe!#jRHv@W*N-5|CXob!eLfLqo?+WnQWTr`m^0)~ z1r`1s?O6vgz@sfZCI~qWg`DW<;u0Jxo*M zN-EpD*-Wq6RzUh-=ZO{hX;IqsE6PvGO_XfXd!qkJDSqAmM^PMEBKuFTHR!yr+|#HM zw$Ms4Mb|y1Uo_;h3*X!tK|{%uKNXWDjMa^5;+W3g{m{T9nfgF&k@Mf^G7V9Prf~SZa?1WnDjy^BDZ7P zin-3Q%MXis{`O_J-J|g3jB&0>&|SL<*X`$;e)s;*7fyRsd@oObmU!UDhWjg5XO$?4 znXYh;R?L69s%_f$zqb$HF*xni7449gVH5APrnB5R?E29V&W~YV-|8;tez(MC??QKj zrZ)^t=I8F2Z+clM|I+Jn*6kmiC!Ykd#Ym~l;}tzq)os~+?b^v-YogaB`^Clo{Qsc+ zc#aJ33BDh{XWhM{oOdJY?!_q^xGw(*sQ)-yN#W|P#%IZkuW$J;BL63IW5=w5=>eZQ z-G0h_Zna{*vDbRGoOQCvBcUMfEEslX_=V!cdvC9_KNUq-mN?3Sf1dHR;${{ z`4$)REQO~$jhyr;(_HM&Grw0yw%;jW4{KnNSj~Lzhuqily%`MV$4wWj2>E>RiJccc z;mU`NrUj+WJL7KGO8nPHCrHnC3c;{?u{luw)i>*Y1)pH8>p zkDe!5Zf)y z8Ftc(1X8!1)Kv|dxhw2W>&x&iuYiC1g{C+)lpkMpORcl0K0a#axtim%@^iNS*zVJ@ zko&Hf2#dDrnw5Q5w>;px;+o!LJiq(X-0cq2SJ=njPkzmwtbTUthxF1PAuCmjSDZb^ zB^0IoCV$@ZB=`5bpUlpf8}a+W!kc&YRP53*T%PQ(ZlOc|A|DXALD>l7hSK9oE zb;FwFoD(g)O(n~xhXkI!t*)^1JKhH#_U?Khx{KUupR*Z9RFGu$1&XyZJ5}QX)3CuNznvZPd2DBpb>V z6k+l~&)+Kcz{R$A!pGJ}Z#pjWBS14nXOo>!df1G=>*a6HlrxaMtoAVJoA_OCeJ$@z z@$PS4eAqtw@qzp)k?fp84yz`#Dpt0sUf%CFH}njGT_{+T&RLF;|^e zzWVIzqL}0b6Xfi#F1f$DX7(+aWpB1Q*(ul-?z~qvee>a0`VBYg71l{LEV#Y$-~aWt zmS3;k<$d0`SZPuI&v|_Tv5dJD4Nr`&_wSATplEmd2BUHrtNDx#J(|l_zLWfY@Tr*l z7T(&)%LU0%^9;Z_G-;~!OOO|LcZm>Ki6)7sa5n?@*W{hzuvV7PfY$ip|s3=(H5^gf3BaI`}dy7n>A0L{?kcWJHyxR?$yx!FO%0T zzc#oWlHaJBtu=*_;`N z&*c1#5!`uidxYY}LPSGoIEge>As%OGU+{ zF0N|7zT+Mw)5Y`vx`ka1lv|V*1bJ{&;4f2z%@06vsIP` z%P4X!`yEnW^8WWk{daqmejWLdo>yUQ(|uL>`q57k9V?^k*(a-?t*?JP_s^lfM`G>w z%-z4dC`<9X=A&-MIZ}=j%Vxj2Af#aH<+yV5th4e5=D)N4vd<*TW=25A6{FYFq;krwsqJ%qPmSRh*Qr`noM$1h#%jL)i{`j5^Sims{=9Z*a5jw0^}c25 z`SqNCtMI}azJK8xvUOVjegH@^1g znkcyA$Op~0_f&j^6kpBS>|h*d6fKfleXr_4Kl{6;V9DtEuUUJUYwGnU$Odfl-nc2# zBRrzkc6(0#ruHpYw7#CX+EubwPjETwVzm>VM_a8vd1>TKX4${ndd*BrnU^k;PS?zB zm)2Qnd9>)mZoyN5k4(0FJwGM;8^dLr&=;pY4$awo!?OC(xxe(!wRKWq&+n@g&uP9YYf*Up_>=R-XYD4O zsMIM>E%?2!OnM^Q=|A~j)BGR!TbwVQGVT7FmpMS0~ zWL+J2=85RROLrfC&vE$oJ4B_lpXc&Tz*|`Z^w}>YSDW_ zE7!l2`nfwpY0=IPjPrbSC#8SNS6$8R8~mp{wc3QgRhR?Cn3D=KP^*o%Cz);bZ{c)~z$X5@B-1m3> zrH3uroe{JlVX2V7!z*RE=hu9_(Uac3C2DiA){GW@XX)kME!D0|4qx~&=dhd**Kyt( zem*XX<18)~ALm{5GDP@FX7Yh|k~PbZw3RSL&U}>gpCRSHQLE|H$tCZP&#}+Eq7*$P z@PF^pH{FVs9TrEVbPl~cbwGZ7!{~CxE0<5aedVIAvw=jBdZx)5`mw4G=-_l@zv?D-|4odqSD`)ZgbKjYJwN5;)nW5dd z&}-AdZ)O*w{0fR@7xR9fZ+2x%;t>v$ts?neTN&tdcFWf0 ztFAvgubuke-m}W$np?@Sf{a<8#eWKNUsO0&R=Ri6PO-Z98^*rJvgNo|{;Vu7@Nb@J z9{f-Cy>2Q0gPfMl(>`n4J{No`#I@lSmy^$e%b!>9efYWI0<*!%(ktEuqK1yQ?r=%# zpJsnjx7My~`2rW`i`7dzy5mBhXP##CyWrNhy7f!BGH48I4V9@<7XslKYnP8bAI$P~-plUfO}q)qbm^?eA{3d&%%} ze$L{a2{GaG8w9e|w@hnxy|T?^^+N5(mCe5@qFj`j4yrBQq3)5baPi`u4T_CBn^Jyg zrAe6ft**awaoMTA7aG=9N$#Dmn0mcy%f$U29j|wtt-GkQDdmS2&xxZxEdlmCH>S>4 z{`~Nf_Q%<${1|`#@%8a9H=Hy@!!S9!Tq`?BZQtp?KPoSjf1Ty@V_GbK^f$r4?n`$L zRjB!|U%=jTtoO8>;u`gT-dFz5<$Ar!%%Sn(ZhyD`&z^f}?T`CyS@dV^1eU629p8l( zKVu9y^E%l4w(i{DC#HO5%HT40+a_tuU{$6*U6+MdVMoy)?Y_$z0;Mk$yMqb-rl% zBlmeL*G*_`-tEXxyU9jsqx0ibJGDtK+0O4vmdtr4``C5Y*@xV}C+xY9`;_C~-iIfi z=80?mJXv_<)BZW9=d$aCulG5t5r1rY^dmPjCB7-TJC*&9$^M%0Ok?BShuh`S6gTGJvm%;PMmq) zEzESbYCh??GSf4;ZtAO!FYWx(_DNq@+cTl+e_ESXmyR?;+3PJ!N_%F#ZB`O^bh+$8 zz8B+{w;uPz<<1^G%4FPpZBGh=@Xdf3Y*DY)_**%CUB1y|=GpMc+pm?pDBii=H~i4_ ztG0(~KdEwQoPIEQU#$8uqnxhkJN!3&d(@fR-*DjL$s<3Eo-xmuIQu<&<6JA3h~MEk z`k0-FM4scq=GAbmP3|waMO2IefqwrE+Prmujix2kKZJqw+ zPVMEUjH`WBI*T`Nm^y!RwTsZHt4qbEo{CDFT5rNJbMdlcKM!s7IcL4&U+Z5}t5A&$ zt@X1N8Q1UcmAUwrKkK86XYKR0>1+Pyl`pP0>SN`We!u@Ii;n!#L*JHjb4=JE*!Ze$ ztBr$`?k%C%8so#MEYGu5SIl1h_3xegp9GiSZ5fWe zid{dXJJch6Zp=7nIMH{eVSvKQe-4|=tryzg-D5A-AR@@#H{E*cHBY85e=Bc)V~weP z&F}Mi%GWE*?Rf*>!#Vk=P!z~UiMuZH($*6+xgfChsQT779S2W3hh|$^jy@|BRJ-$!}SE$ znGbfSZtLT}?3)xGXRu57x5C^nVZzzTN8}Cu8nY;WaaNAKe~$6O|4nDsyQEI}v+kB^ z)I$Cv7h8*WuDkJXcV=7tq+4M>9bYj_(l@n!$d>B2h>?3`-Ttjbk~2N4r(fWhI`>!Y ztmep?FUs>d`}t>At5h`P8(MhU=Kk5O^yyyx|BgQEc_;seK2Hq0o~{th&Us7fzUhoR z`O}1}Z_qX8Nt*%~E&Tk4GXA5`htlHPwkztV{)+dW*8E{2 zuh1RVCz0n4T@X2M_RMkp#_H42CuQ_L8=PPBd2Z?S(&*9}y%yKsfQc~ypar?{OcU!gZ5|ji)DYDGcGC5jY(YX@=B=i{Bga&|6hMBH{QCXJxh~g zp~n}FTnY6J=R?>+I5&yz(`VCob>r~neU2;)HDMQ4+x9bkid6Zsp;zXV{N*?MLZ_Zd zGvwI)W>pez-NR`P60fyI&J`Bqx3NujthJIftxQd%&*!&$#n>%MV;;su6myuTFf$YNvMD z;C7qu#ZBwJDkLU8SZdp>=W;w{PtQT4$B)hzMqCzullH>FP2)p@(bL-}%&R6|eP_5m zq3;^k%X=BSKmQ83%$WaJKVkcf+8|Ddw9+MXYJFD(aVYq#7x!THI z^}2u46eai{Dyr7K<54qvINfs9Q~6e<`|_-vSI_vqe#O+hX_wLZXQf&0DW`VENhP*) z?%-eWxoOU05#xCp>%MN_&^qz?W%>fG^RLgVdglNCG3{dHvd~2#&yGBseaQ6xqs|Fk z<{M=0v@*AZ&65i;bPM0|kX`c7`j^MDBeOUwe2mj>b$kmuywUjite=W32Ekl9Y9+DS z@4FS1;?&a^`xCgVUovYxc*ZiHUH;{_P>xL#+e(ar+1V%L9`1799<_TF%Zefyw@%mR zswY%WS{;A>?+Y)l_pZY`+<%EX78qzwU8s@y=EtkZH%VfByVpP1Tv+UJC-K31!2_RU z&;HodZNj;GQ*UDV?%Ql{ti5EXO9oDQJy)fcBaeakpzsrcLn~_1cKw*@Q+oUFa^98} zo8+iv$J(YwD7|gmwy3A__9suvd+SvX&lGqcdG#>E^R&&AHeGL$HSaypvNVAG^|__@ zE3eNh-juNY)Un2tk16{V99-^Oo%6r(EK)h-DWChBbY%2uJZinbKE|$tt)!xI_*76)@_(kQ~Y;FhW=vvk6$e;?3Gz$ zw$C-?3c90krS#JCEG7wdFOSoPo1S-Xefx9&L+OoN3e!1C_I7t){m%LRZP^cNz5kmR zTmIO$h2P0e@x?vw;;`F$wT-8TOy3;DZ||j2a8y)f`kh(H$=w^(rYf3friKMiw4N6q z#w_3%S?auOs{q&8yF6X_!NHBU5A?qMrdP|T{B?_cO-`GL1Larh295Dz6)BPuerWEH%~?^(0|%9qg_Wk5?9SqdC+X{{v^#%aMPr@ z93kavo93U3=#8jTz6f4S02irQg?m#ip5R4ex42xa&7R)O?bq= zYyF&z|78baFD^R7ySXm?hG*`zXXS6ty_+`Ya(2u4*o$tGJz`0rXRmIQ%X@l7#q3D* z%tP)|93vc`R{auVycwUx#C31IxBAZlp(V~5kMj9)&dt3=JT?o_VJO1XtM zBYoaltZym$w&KOLvz#-2Em^Gnv1zevO@y~t&x!acg3+@&*L12jX9ph5Q9Ca0@=!~b z<9Bh)REZqLI|}orw*?+PE}OJM%ZtZWSnTuy<^N&vhB3EtY!kN~%9L3YwAU(ZOUQQ3 zRjCq5e=>fCwER1MwApFR{XUOnOK-Dx-!Q$<$-HezwfEQ93GBr}Px3BoJ#*)^j@$Y8 zC2Muo#3VHSBAZ9F*m2Yyy;*>9*i<|mq-@l_TL^)UGC1k|EIvQ)b-czC3l6rJWr+{^6Fyw8vJ?v z$-E>k?{}3Yi>^h_Si-xh_vWtTwb!&Bnw2e?Br1^7k^k++T-j-XH(6}sP2_75{@(Nd zuw$oMMc;?IrR;BXSSMd9e|Y-wr_ZloN(zI;BVwC3+l!44*$`(KZ@{hg5Reekz< zFyqZPej-!z4w^lOQcEH8 zvY2HXq9P_t6P?@ldFLf=CCevj3bC7a9}-K{)&9CuKIYCg=b9412DxmXZ|q&hDS80{ zVd6fmk~3xpe6yUD9^UXP;Nam?!Rr{Ve(Si@yZoC$=3%uPIkUH~QXd(T?`He+{RY zt=_F5Us3MQ`R}=&>BiIl4Wf2<+)RnBVH_ix`R-v|ocAk?|(=j8At zA5q^+(k~^_^X`Ezb@#ST zu&7ss#Ez9^kgS2*{2_p1O+g~^I8`y+C8Fxy{??6Pcldq(E1 zMdP~|-ZM7QlBsWYEeGl)3f(AZSd2^;X z^93B8?!h1Q@aSzV>3#gpWmSpm*?ta<>bBiBKzsIfrQ!g95CHk4i zg8frXY+}~T^JB?nYr9!uveWKSuc+gRKYQ2c&)LAj@L~}os9k7=YFZSlr;_m)+)KKqa$U@D)lYeep z^xSbhX66}D$2)eid*iqKVEw_kPvBi(zH{pyb@kIGf1SJhMQzm{TVye1D?7YQ8~p0OE*?OOO{bJvzFiR(;-u^*(7Yy4}U$Uq9R`IouwYmCk0o|I(X>L zi-eSC(en}}>pi{e%4zxXN$Rbl(zOd#+ zYRMPb+*mu8t^V=yU*3P8uQ_4fbV)2_lAM+h_R-4lGwamV8OHfsd@mG28 z*LRQKTjnD4-6e9fO~=H;x_bWp8GG#4pQ>2C@9?RwhuKWT{QI0-V>tX>gY;Nx{F|mT z@Cd2x`d0nm{I-{k)}}?@-}YY$Ig+y^UiIYny^b?d-zauhov^MBWcu;!Z)+nT>x;aP z;-{-#ZDy;siQnZI@F+z(^n$M84bu~^7e1AGptp3PVcQu8hH0&8TMQS~MfA!t%AB~V zFZx2=ehss~<-CQz3d_g;%t?)uGIyySvmtx9DTAV++PQWi{%*%j%dH-) zHJ1LKa+SkqWqQ}QpUGSI^657$D%!&Nj&t!A%|EQMDWUB-FScuXefrYO@Z4d|4Bn%T zJGSgJ_PpHd6xdd+!o$+#z{2^z>DQapKH8b;@BWy~v5`=2-*D{F+a1hTFSB{IvT^Lp zyo+p>z_)Lq=E(j2EKXyJ{Gj-}tldpA0b00CqEZY1l>(HDF2j0BaPnSDu zz52_GMz6AWlCM;)cc19qFz=Oegu<7XPbb?rZue@vJKJ^ZtI~e%*_~#+rw)ksPkLJ0 zef;ZPvp|2V0{gtGV_T;@J^pp+^f_7D@2f0MX|~r~tYZ8B_NCj7&mkR(Z_YhG`t;X^ zm(e;3x9pDI3u|WG-4eK`vhx7D%jDHN_3j7U>fAafe8*9zc|VKRD+O1XOl}X_cub{y z33q?Tk!g!k{&OAPbv$!Uw&Q(~o03hJI9`iJdHyOfG_}4EnsH9_-~KBHn^eE={J-;; zPWe~gyWGrr@q#Wgt+u`FR(ZsjJ7N+w({tjaX@JkC19JymRT*?*C`DtyvxL<akBbC3R14- zKSLkf{uSde?K|tPIhzj2h&tarqosPvS5(bEJn(wU3RfvZ#kw35m$%&4ww}5t@i8>+ zNL$a1ZQ<#z4vq$o|2>>vIp@*m^D|FAjb`85czvSp$;1Vsx0w7Fyw(=kkT2<8G5yt? zKY4dMg0HN&vef+fa<#H2=1tszdwaEGIz#1~jvqO^sCU5JV#7M4|nsr~{L&_s{-N)3ZCi|M)QHSjWbN8W+Ev6f8S8^Rl(%oLg5PY?;}T z8he4u^V+pfY7r;AOuj1SW^%D_F>5V6vCwLzTF0g7i|_O?7A2nBo6r93-v-$pzI>r+ z%davP)UTYR_-$Vfv#OTW(hGc%a#vq>r97?h^mw`QP3W&r2U0e-cg`+kxOVnqWJ&3i zOTAga3mBOHcYPOMD6;m}6w8;!Z?{j5G&>dZr*e|-@3-^*s?J_@cD{P#!nw2O?2nsK zW!Au{cIdQL@6%|<^lNDkb9ZMvaWq|Jay>)z{1+j<2j43$gt4rPjQ-cwlbFB+Dn0^|JfIt^Uk0)10_X z`bYL(t5deR7i)~|rCnN?eWbMPR3{}z-f;We{O(L~&>YUQv+oPlYwCo!{Jp>9yZrMN z7EWT806iawn! zuye@X_4M_ZD{lm6`(>M!&pms`!u$HhFFBW5<>el0On+)}F?R<4>(rI(2h(=tEft-b zB(nTZx4iiAmC=h%Y+Y|1bt|De*k|&r32gC?ywb}zzn|qQti#jku~;Q8;GxIA+ZVTO z>6(&0d(M5u^D-Z-oE9up;@9S#A|o!fH}OnBf^^K$mMn*j!poBmerUMyEwXj3U)bE$ zQ+B&vDZl8J^RBXEBS&KFvwD(WiV;)yjgxN!8~qO_z);iF>6)2RiG$qVI=v5%nLkZx|1wc5Q|FWA#!wAw z-4LNqvu11fh^wCX@9=W7*UEI>PFIF*}RGVzJo4c@d(dXDVMnV6NKI-3Cx54z?qxla#Gw=0F3U1FX z-t&KI)TAcsZ)P_nO^#lUnpx0w$x)Z~D9@bJd}V*}?0KH*wOog0_4xgsd|f5~ zwU>NW#=b8z6SEfe=*F##+;@KVl=Z6^FTQ%}V#t*|^Xk$=IStZEhhJE`gKm^mvYN%O zvikb{#B-nHv@RXEKkwYDA9|tH%bg~21pTO#@m1J%Q^X*xwm#)eoq5>j@ECh5hAA`J zwBP%dd=pN#oOw_0SI8c=JjN-(`M*y3>mkSZ~c^9U;4TBP}Z@|3HPKo=&wxJG2gu7 ziVD{U)9W&)!Yy~E9Z~2A+01b3?Cs0nm-6lkEq?Uap3va1E zS5`YKa$YlcOI;?X$H6J@9k>`YZ%PVt&r<)`yYelk-9B+U=hfA_)TRX8>fCnczebLc zLB60^>fgQ7H!Zmp`+rx)+O2o5%=&rTZ0VK9zQ<~#)~i0?YmCtCmRrU-Tg$&^)-&tW zKm~>uOXlbCzs~AbO=Nwh;&SPV!SitLVym?&$(aSwR@-}rWVX0y!4t|#?%uh zzX>Yc=PxSs|0XO`f9RFTD)*abWLkOagWs%hX}|L0;dbLLeO6Jq`xYyBKFYq~$*fn= z%ldTx(Usrj^A%FUd%i3$XZ^oJ|7}8WNVMeI5BFDiCluDJ@Lt|%#=ML-YPQfW;dJZ# z){Q)FlO1P$zH`%x$@fA~oUieb_^O+e9$b3cYZXw`dua*#l;6C!nO>{RyVv;eQ}Ki~ zdb1S%&AV8AztqcH@7(-Ewv!=;;~11)EPR%}VcxelN{=>f*lC^dY3|v)scZPxeC|{G zA0DF_yQKE=-K!U7i*A&3iDq~;!R1Mij?>5G4-VdHDgRuuH`{UR6^na?ZoVteirx)X z|B!GjVn_Yi%0>Z6Md2!=r~_Y@GG7<2e{v>jd6L}RycIk7U(KDll5hRn%VB1l$`7)) z9$H=J@-dG0j3=+l(vZrNpB1-DXeEArq;%m#osHXO@oAqwpE9@Y<$L9-n>Ckts>AZF zr&Tqwwu@{17iHlT&sH;fZNywy_WXjavv|R^k{F@=4C@zuNf-0e-_k6Y(yP8=?GBdo zY=vh`{cL>pe@!gjaK-)cJvOsmzp?C__C5O?UYlp!+z~4z-dZr2%`^6%y&>3rA0vZI zjFQ;uTJeCA4CAKaxa#+5D|(iyM%_HXQc~!>qFY<)-SMfK*&Q$Z{tC^!`TFBW&23pX zUcZQOwfim~c2*@&^$K^i&|;}GD<*_!JBi3;KM(d4xc&Kf7~ewQ`De_8-`}^CRr`D) z`Pb}AamtMeA0_*BT7nMN*xi)v8i zc-73s%|)l{9u#hIxL1*D)MTt6l-6jsQcdmhK9?)s8b2S5RuuTOYWt#TvHV+hspX$K z@u*y_VPDIEu2bEidTHv-7Hlv3&Kmdbee5%t?Pn+d3CB49Z7<*FzdvBJ`X!TGPt(4- z1^ULf=FFV0kafi0YkH6Mw}X+CulV_2~~M+$#9Ffd6ySv>wqT+V3^$K8GHBVXQSz!bs!p9!yl2caeeo@Qx2dL`dE#9*6=^7&fuM9B-r-5Y7YZrcf*Pn z9U+ev{;j@U2g9yT>0Bmq?r6jW57s5T({D@*nxva7S^4m|ahSARmgmKlI~Cro+ZCT3p) zS0C(*=v=;<^T(n`EGZTDbN8O|eECkH!vE7&-^z}lmltPtnI1mSw1)Yb<)OueCFz?R z(zb357m;RHv6(GUx_RHfudcTOvUAmMn=)S#U()@OC%ub7<-vpX*MA3Vd$DF$3pMQX ze=|At3ZqAM6aUtxZbo%=ga?zWxs$AliO-Q& zh9Nfj{T3HR&Z*RMwygBK5b-_esnid%8QFgeR))Lz6tQl!z8+$*YQw_kvGG?VuP)8j zazDS~&!#T**Mal%SARZQ-Wt4Q>8r2W39cQiCO^G`X2hAwZ8l%Ls;+R&77OUC_fxC8#$}9UZak_Rdx@|IV=IbhBu0{5{{k}Iwdb`&OCvH@G^Xmw|`lNaOJEDpL zt!{p4OEA+32{l>!==tHkWg%;24~4ALNOPPUu;e$@t^5EXRG!9u#3|>;}fOwPXBd2hb-@OOYJdu*J$)5B{Jf#jZgB< zk8MlkSZ!~K9$&S!!Q*wp8n@$<9_1YJY>o0;f1F1zV0JpkL2hoNNuA8v%9CBT$X=ba zS~tNgSI@|oIpwa1&hrw*BOAjx_>S~)+B<5U>O8kg=xN$*hME6D57}C!8(+-W#_6=w z(|Tvb%qc}Dmp)3Kx-88&;Ywxep9!i@l1j7lUQF#a+_h_|*=^>4xlA=~Ph*y}=sz== zxzTCT+6K1AEoVZn7%BCfHC%k?@EiG*McXg#VSM(lZ%KjNh9=DevB{A)wk>GhRkkl< zqw*Ry4ehL@-|Ox#_PiJUIoL`H8icb)UpMKC!%%v$k(bY2w#9lb=k{t#Y4ggVK*TdPHsTvVF^@wDzg|oTwn4 zcI4!+E45_=R^b6*pjbaKh8rqb_GD|Y{vOWf0R zs(FLSWs`s&U6B=L0*eziD%FLaFK2o8_vm-mS-;cMw^fSf-#8l7sJ#DG^eubat$Le2 zO_l!qBVD4gk?(V^*}R`dr+2-uvGrs9(XO)b_1w9PuYTtS&GMMJYHI%W&Rp%yF`PRD zG(XmdJ8$r))wd|={t)?w(LJgzysE_`^^xP@X@*Dd*}XimsQzU{iM7b4vSmAuzMoaf z@{ieZt=VUz;;$bSSr>e4{bW>}nV-&ouv0{J(~{-EEkE~My}xtqnLYf^COtblMP;s# z@$*}ye4mp#LvQA8d+hep=C$H=rT5bOI}c?at~%9z*|O(U{uWuK8cDVawvH;Xk1xG$ z{}Z2Tv~+@I(!1vG-R%OGo8KmjO=Mm6Rg=YERA^6+dD6UvD=+O8T=VB)YgVYqk3Uup zF#@%nemX0r2G;h7Mn>00)C!9?OcVIrdUob+G^1*~9AV9xV`a zb~~uQ%3QgQNBCw;jr_ikS*HcLZuD!+3thH3R(SiJsS5Tj#YRcGKRUH0Z1LB~c5rQ9 zVP0k~dU*Au=bn47Jd~Agh<2Ixy>G_y)~hieYKrut*1oD;JkNgPl-w1{Wf$9y`9FX6 zwAk{v-mD2b?c&~S__;TA&(V|981lb1TK0TW7wZ1x(CB*WmG8ZuG8vjOQ$G2{{O2yR zKV=j+-&RK1f7-v*PBWNZ>EEfFclO?wDL0}GpYD;|_gJIYblx7mlx-6^wk+M`+`8-h zuj=?~7o*sczRr88bYn-y2TR?&uP0V>@9V8Jy(azd#@0tBKJm*rg4I92`gq-UQtRrM z7jHQ~sLK5^?Mrcb%nyacBRl=ooYq_`kaBYVk~33v`m3nBwfZJaN=JTNe(1uV*OMx~ zt=Z;iW9`@X-DkGWpF2k(iKm2Hsy#q;?)>dxg7q7>#U2fe-M{m#a=qDU!HDOXdp}m| zMfY8>xcc(*E<5}GSGt=%S^Pg-`+BzO@@uBkA~O4~HKsKR2vzA`tML6jwc)hYbR)aF zIal^f^Sy9lA--7YYtB8|3$;iOY-~9LsdyuaSS+tTSK9o%317ziYouSqixFA~oFKdQ3c2Id^TG{Hos?Q4j8m zUb6qQA=^#bbhSt60l$^U+IPME#O7faruSqwKU4VazX#<$*SucebZbpPf45JMUyAKt zdDA5_eDfvsyTy8*tqt$}%F4xBwc^F0tskYLMGmlS`(scU+E)HrV&=nZhhL=b6g>Kf zXU@5(sHp*`wtoNr!k|kfOU&%4hIT^we}PnK2F4v7`@~buzkj0nrFQayMSH?^pLUAm z)Rq35cuYIe>ZpT>UYX03iwz9P<`1*u57k8!{aN|XA*ug+%R!euvxY{tCGs=G`@0Ke zo_fUO+?QzW3)sNJKSAe{@x5E?R(13$ggyE1&L~m4Rw~t{DY4;L+-Dw-L__Nd$rHY% z8~r+{tiLnh(o?CJQ$UIh0EXZz=T%W;8lgEQx{CRkb3`X{kNQ@ z*IpW{E^O;tB__A$*et6D=O!F1u0P@&bgWb_Z1=MD{VUg=xgBJj+43wx@5&c$ledlg zv?XgF?7c4Zo1a7AN!fcNqvHoI$Ifx@I^Z06>#e_~?54?r?|zHSm6v^TcG}GiXXbso zSX~*5a%qdZ>OJ>|z zZ?l;v@x!-cOs$J@RtuZfu5elX{$Ia`HsG2uI+w%bn}5Sxh;)n?)(<@uDN|xgQy7UFD@tx2qhiYs%!@sCobQ*N6rK`x)hot2nQP%l`etcy3{x_0QbL{_oNbNA6*K zlXScxOo@LvbJ2H4d#j_>2O3V#o){$c;rOal`**vnx1<)nz7sx8eD1owFnQ+> z%;hE=;Jq$gApfS>^1Ic&1In**9$0OQ=TXbz^DYmZvyVlgWUHU=a+hSv&zLie>iq8o0B@Pw$AY8>I6A~ z1cTKNUj2|YOuJus@y62hnQxd)`{pu!|73POmd&``a;k#K+R8}Qp9V+n&$y?;w!}Dh z+4loKv{SENln*-YvVLk+)#`0s*RDMmcYHl3;%14k&xJ=WE$b%xTy|OBCTYv5v{%EU z>jKmCIKjWs{x|$A?!3|Ze%q`l_ z-7PEJ+aF)!p;X7KBe-m?obNwTmAeZ&&5a5_9Exg{+PlEvoaLcanRbQ8PHx`$_3CWB z-=+3;Nj`_??3Wc&6}GscHe+LI-QDaZcm7sMPU8$?k?p9Ny3oI`U{!gGG`l27OP*6cQ2&$fTMe#<;RGsVQD zI?GEbZPholf5qA5A6uVr|BCwjI*AM(<4&?Y+?M*72@S;m-qsfKpw>5RJN=NjGPlJra6*`6?s5`&V7oN8LaFQT##8 zjE<(6{SPXWCow0@UM6Le%zt~W$Lf8P3a4gmP};Nkw2*qy@@wALC9co6{u$}BNbGl_ z>Dfgae72tD-hTEt-->&Wx2t&=`=ol8D$M@KcJS z=C#F&!U>;_NXouiRD414U2#$zcip7PTEFZU@7mxb=2#=|$`ry-d-&uhyZISh8dbGz zi4uN+cZw6vznbhYk+X2uy&bLkZ}e{%F{f4+t3E8?;m^M>f2DPC9#IZ(l7g*DVNSi1rW$^TKUP|F1q|{%UHu|JR%|lLc&=uRktryryx+XN6Mq zyBMC;w{EE!=&f1T`Y&?HS+nNnnGf|0l=;mI_t&us~X?p0E(xUqC z`^C36%@9^wWG%n$=ncqEoFCS=`A2##O6%$8cX|=Qq z-!#8p<2je%;o{wYefkrvYszak^t4!~zq@3%x`T;pO7v{0w8{l}Z+`Wt)V}^~k>~Yl z!E5i&1)m>;EqTvqSM+nouT8B!^^Y0;^YGqhnJTkMhQ)rtz0Vob);ydvdsey87P%`- zCFk@j`wg{JvgXLVwu`C#Gyjb3kqMx6A`GtIrFmEE zbI{r_Dhm>LH_?hg=yV&_U0P<-mMXrUz#Gn zzI9VwO6b!$3zKBth3IE+vGJ#SIU2~_PLmAX{`^m^pnaTsDSuMu@-Ofml@l;Xa_uxh&VHJ{ea zuP5DDB6aY%LF}54#8qu((cK2I?o2UD`vn*3>Aa|ac`#`0<#S~nX1wW>Odo#!dq<@E za&oEH+`KU2zt9PDWd!+EWb@|pXeTLFm-7QBl#3qV< rDBH3jzo}$T`vZrc*Vw#-FFBsGL5*);8g+0|Ns9AaHoe literal 0 HcmV?d00001 diff --git a/pomodoro/translations/en.json b/pomodoro/translations/en.json new file mode 100644 index 0000000..36b690a --- /dev/null +++ b/pomodoro/translations/en.json @@ -0,0 +1,45 @@ +{ + "work": "Work", + "short-break": "Short Break", + "long-break": "Long Break", + "session": "Session", + "button": { + "start": "Start", + "resume": "Resume", + "pause": "Pause", + "skip": "Skip", + "reset": "Reset", + "reset-all": "Reset All" + }, + "notification": { + "work-complete": "Work session complete! Time for a break.", + "short-break-complete": "Break over! Ready to focus?", + "long-break-complete": "Long break over! Ready for a new cycle?" + }, + "settings": { + "work-duration":{ + "label": "Work Duration", + "description": "Duration of each work session in minutes" + }, + "short-break-duration":{ + "label": "Short Break Duration", + "description": "Duration of short breaks in minutes" + }, + "long-break-duration":{ + "label": "Long Break Duration", + "description": "Duration of long breaks in minutes" + }, + "sessions-before-long-break":{ + "label": "Sessions Before Long Break", + "description": "Number of sessions before a long break" + }, + "auto-start-work":{ + "label": "Auto-start Work", + "description": "Automatically start work timer after break" + }, + "auto-start-breaks":{ + "label": "Auto-start Breaks", + "description": "Automatically start break timer after work session" + } + } +} diff --git a/pomodoro/widget.luau b/pomodoro/widget.luau new file mode 100644 index 0000000..85238ab --- /dev/null +++ b/pomodoro/widget.luau @@ -0,0 +1,43 @@ +function onClick() + noctalia.togglePanel("thepunkoff/pomodoro:panel") +end + +local isUpdating = false +noctalia.state.watch("pomodoro.nextCommand", function(command) + if command == "toggle" then + isUpdating = true + elseif command == "resetAll" then + isUpdating = false + barWidget.setGlyph("brain") + barWidget.setGlyphColor("default") + barWidget.setColor("default") + barWidget.setText("") + end +end) + +--- main +barWidget.setGlyph("brain") + +noctalia.state.watch("pomodoro.state", function(state) + if not isUpdating then + return + end + + local stageIcon = if state.sessionPtr.stage == 1 then "brain" else "coffee" + barWidget.setGlyph(stageIcon) + + if state.isRunning then + barWidget.setGlyphColor("primary") + barWidget.setColor("primary") + else + barWidget.setGlyphColor("default") + barWidget.setColor("default") + end + + local hours = math.floor(state.secondsLeft / 3600) + local mins = math.floor((state.secondsLeft % 3600) / 60) + local secs = state.secondsLeft % 60 + + local time = if hours == 0 then string.format("%02d:%02d", mins, secs) else string.format("%d:%02d:%02d", hours, mins, secs) + barWidget.setText(time) +end)