From 2922dd5d40877f4ada7eb9b67105753089b7491c Mon Sep 17 00:00:00 2001 From: Damir Rakhmatullin Date: Thu, 16 Jul 2026 14:10:11 +0200 Subject: [PATCH] Add IdeaPad Conservation Mode plugin (#20) * feat: add lux/ideapad-conservation-mode plugin * fix: address review blockers on ideapad-conservation-mode - shell-quote pluginDir/USER before splicing into the sudo/runInTerminal command (shell injection) - declare every external command setup-permissions.sh invokes as a manifest dependency, and document them in README Requirements - drop the hardcoded KERNEL=="VPC2004:00" match from the udev rule so it matches any ideapad_acpi instance, consistent with the dynamic discovery the Luau side already does - add the promised NixOS declarative setup section to README - move all user-visible strings out of conservation_mode.luau into translations/en.json, accessed via noctalia.tr() - add the required README Plugin/Usage sections * Update dependencies in plugin.toml * Update setup script requirements in README.md --------- Co-authored-by: Lemmy --- ideapad-conservation-mode/README.md | 38 +++++ .../conservation_mode.luau | 144 ++++++++++++++++++ ideapad-conservation-mode/plugin.toml | 14 ++ .../scripts/setup-permissions.sh | 51 +++++++ ideapad-conservation-mode/thumbnail.webp | Bin 0 -> 53566 bytes .../translations/en.json | 19 +++ 6 files changed, 266 insertions(+) create mode 100644 ideapad-conservation-mode/README.md create mode 100644 ideapad-conservation-mode/conservation_mode.luau create mode 100644 ideapad-conservation-mode/plugin.toml create mode 100755 ideapad-conservation-mode/scripts/setup-permissions.sh create mode 100644 ideapad-conservation-mode/thumbnail.webp create mode 100644 ideapad-conservation-mode/translations/en.json diff --git a/ideapad-conservation-mode/README.md b/ideapad-conservation-mode/README.md new file mode 100644 index 0000000..7328bb4 --- /dev/null +++ b/ideapad-conservation-mode/README.md @@ -0,0 +1,38 @@ +# IdeaPad Conservation Mode +![IdeaPad Conservation Mode thumbnail](thumbnail.webp) + +**IdeaPad Conservation Mode** is a Control Center shortcut plugin for [Noctalia](https://docs.noctalia.dev) (v5) that toggles **Conservation Mode** — capping charging around ~60% to preserve battery health — via the `ideapad_acpi` kernel driver's `conservation_mode` sysfs attribute. That driver covers Lenovo IdeaPad and Legion laptops alike, not just Legion. + +Writing that attribute needs root by default. The first time you click the tile and the write fails, the plugin opens a terminal and runs a bundled one-time setup script with `sudo`. It creates a `lenovoctl` group, adds you to it, and installs a udev rule so future writes are unprivileged. Log out and back in once afterward; every click after that just works, with no further prompts. + +## Plugin + +| Field | Value | +| --- | --- | +| ID | `lux/ideapad-conservation-mode` | +| Entries | Shortcut: `conservation-mode` | + +## Requirements + +The bundled setup script (`scripts/setup-permissions.sh`) shells out to `sudo`, `dirname`, `env`, `bash`, `chgrp`, `chmod`, `getent`, `groupadd`, `usermod`, `cat`, and `udevadm`. All of these ship by default on essentially every mainstream Linux distribution (coreutils, util-linux, shadow-utils, systemd/udev). + +## Usage + +Add the `conservation-mode` shortcut under Settings → Control Center shortcuts. Click it to toggle Conservation Mode; the label shows the current state (On / Off / N/A if the sysfs attribute can't be found). The first click may open a terminal for the one-time `sudo` setup described above. + +## NixOS + +`/etc/udev/rules.d` is generated from system config on NixOS, so the setup script exits instead of writing to it. Add the equivalent declaratively instead: + +```nix +{ + users.groups.lenovoctl = {}; + users.users..extraGroups = [ "lenovoctl" ]; + + services.udev.extraRules = '' + ACTION=="add|change", SUBSYSTEM=="platform", DRIVER=="ideapad_acpi", RUN+="${pkgs.coreutils}/bin/chgrp lenovoctl /sys%p/conservation_mode", RUN+="${pkgs.coreutils}/bin/chmod 664 /sys%p/conservation_mode" + ''; +} +``` + +Rebuild, log out and back in, then click the tile. diff --git a/ideapad-conservation-mode/conservation_mode.luau b/ideapad-conservation-mode/conservation_mode.luau new file mode 100644 index 0000000..fc4f818 --- /dev/null +++ b/ideapad-conservation-mode/conservation_mode.luau @@ -0,0 +1,144 @@ +--!nonstrict +-- Control-center [[shortcut]] entry: toggles Lenovo IdeaPad/Legion battery +-- Conservation Mode (caps charging around ~60% to preserve battery health) +-- via the ideapad_acpi driver's conservation_mode sysfs attribute. +-- +-- Writing that attribute needs root by default. The first time a write +-- fails, onClick() opens a terminal running a bundled one-time setup script +-- (scripts/setup-permissions.sh) via sudo, instead of just failing -- see +-- that script for what it changes. Every write after that is a plain, +-- unprivileged noctalia.writeFile(). + +local DRIVER_DIR = "/sys/bus/platform/drivers/ideapad_acpi" +local ATTR_NAME = "conservation_mode" + +-- The ACPI instance name (e.g. "VPC2004:00") isn't hardcoded: we discover it +-- by scanning the driver's bound devices, so this keeps working if it ever +-- differs. Cached in plugin state under a generic key since other future +-- entries (fan mode, camera power, ...) live under the same device dir. +local function findDevicePath() + local cached = noctalia.state.get("ideapad_device_path") + if cached then + return cached + end + + local entries = noctalia.listDir(DRIVER_DIR) + if not entries then + return nil + end + + for _, name in ipairs(entries) do + if name ~= "uevent" and name ~= "bind" and name ~= "unbind" and name ~= "module" then + local path = DRIVER_DIR .. "/" .. name + if noctalia.fileExists(path .. "/" .. ATTR_NAME) then + noctalia.state.set("ideapad_device_path", path) + return path + end + end + end + + return nil +end + +local function attrPath() + local devicePath = findDevicePath() + if not devicePath then + return nil + end + return devicePath .. "/" .. ATTR_NAME +end + +-- true/false for a known state, nil when the attribute couldn't be read. +local function readState() + local path = attrPath() + if not path then + return nil + end + local contents = noctalia.readFile(path) + if not contents then + return nil + end + return noctalia.string.trim(contents) == "1" +end + +local function render(on, enabled) + shortcut.setLabel(noctalia.tr(if on then "shortcut.on" else "shortcut.off")) + shortcut.setIcon("battery-charging", "battery") + shortcut.setActive(on) + shortcut.setEnabled(enabled) +end + +local on = readState() +render(on == true, on ~= nil) +if on == nil then + shortcut.setLabel(noctalia.tr("shortcut.na")) +end + +function onClick() + local path = attrPath() + if not path then + noctalia.notifyError(noctalia.tr("title"), noctalia.tr("error.device_not_found")) + return + end + + local current = readState() + if current == nil then + noctalia.notifyError(noctalia.tr("title"), noctalia.tr("error.read_failed")) + return + end + + local flipped = not current + local ok, err = noctalia.writeFile(path, if flipped then "1" else "0") + if ok then + render(flipped, true) + noctalia.notify( + noctalia.tr("title"), + noctalia.tr(if flipped then "notify.enabled" else "notify.disabled") + ) + return + end + + render(current, true) + runSetup(err) +end + +-- POSIX single-quote escaping: wraps s in '...', turning any embedded ' into +-- '\'' so the result is safe to splice into a shell command string. Needed +-- because pluginDir and $USER are attacker/environment-influenced strings +-- spliced into a command that runs through sh -lc. +local function shQuote(s) + return "'" .. string.gsub(s, "'", "'\\''") .. "'" +end + +-- Not set up yet (or permissions regressed): run the bundled setup script in +-- a terminal via sudo. Deliberately not pkexec -- minimal Wayland setups +-- (niri, sway, ...) commonly have no polkit GUI agent registered, so pkexec +-- would fail silently with no prompt at all. A terminal + sudo has no such +-- dependency. +function runSetup(writeErr) + local pluginDir = noctalia.pluginDir() + if not pluginDir then + noctalia.notifyError( + noctalia.tr("title"), + noctalia.tr("error.write_failed", { error = writeErr or "permission denied" }) + ) + return + end + + local setupScript = pluginDir .. "/scripts/setup-permissions.sh" + local user = noctalia.string.trim(noctalia.getenv("USER") or "") + local cmd = "sudo " + .. shQuote(setupScript) + .. " " + .. shQuote(user) + .. " && echo && echo 'Setup complete. Log out and back in, then click the tile again.' && read -r -p 'Press Enter to close...'" + + if noctalia.runInTerminal(cmd) then + noctalia.notify(noctalia.tr("title"), noctalia.tr("notify.setup_needed")) + else + noctalia.notifyError( + noctalia.tr("title"), + noctalia.tr("error.write_failed_manual", { error = writeErr or "permission denied" }) + ) + end +end diff --git a/ideapad-conservation-mode/plugin.toml b/ideapad-conservation-mode/plugin.toml new file mode 100644 index 0000000..e6c5505 --- /dev/null +++ b/ideapad-conservation-mode/plugin.toml @@ -0,0 +1,14 @@ +id = "lux/ideapad-conservation-mode" +name = "IdeaPad Conservation Mode" +version = "0.3.0" +min_noctalia = "5.0.0" +author = "lux" +license = "MIT" +tags = ["hardware", "shortcut", "system"] +icon = "laptop" +description = "Toggles battery conservation mode via the ideapad_acpi driver, on Lenovo IdeaPad and Legion laptops." +dependencies = ["sudo", "dirname", "env", "bash", "chgrp", "chmod", "getent", "groupadd", "usermod", "cat", "udevadm"] + +[[shortcut]] +id = "conservation-mode" +entry = "conservation_mode.luau" diff --git a/ideapad-conservation-mode/scripts/setup-permissions.sh b/ideapad-conservation-mode/scripts/setup-permissions.sh new file mode 100755 index 0000000..43a82c0 --- /dev/null +++ b/ideapad-conservation-mode/scripts/setup-permissions.sh @@ -0,0 +1,51 @@ +#!/usr/bin/env bash +# One-time setup: lets the "lenovoctl" group toggle Lenovo IdeaPad/Legion ACPI +# features (currently battery conservation_mode) without root. +# +# Run via sudo (the plugin invokes this itself, in a terminal, the first time +# a write fails). Idempotent -- safe to re-run. +# +# NOTE: udev's GROUP=/MODE= rule keys only apply to the /dev device node they +# create, NOT to arbitrary sysfs ATTR files (see udev(7)) -- a rule matching +# ATTR{conservation_mode} with GROUP=/MODE= is a silent no-op here. We use +# RUN+= to chmod/chgrp the resolved sysfs path directly instead. +set -euo pipefail + +if [ "$EUID" -ne 0 ]; then + echo "Run this with sudo." >&2 + exit 1 +fi + +TARGET_USER="${SUDO_USER:-${1:-}}" +if [ -z "$TARGET_USER" ]; then + echo "No target user specified (expected \$SUDO_USER or \$1)." >&2 + exit 1 +fi + +GROUP_NAME=lenovoctl +RULE_FILE=/etc/udev/rules.d/99-ideapad-conservation-mode.rules + +if [ ! -w "$(dirname "$RULE_FILE")" ]; then + echo "Cannot write to $(dirname "$RULE_FILE") -- this looks like an immutable" >&2 + echo "/etc (e.g. NixOS, where udev rules are generated from system config)." >&2 + echo "See this plugin's README.md for the declarative NixOS setup instead." >&2 + exit 1 +fi + +CHGRP_BIN="$(command -v chgrp)" +CHMOD_BIN="$(command -v chmod)" + +echo "Creating group '$GROUP_NAME' (if missing) and adding $TARGET_USER..." +getent group "$GROUP_NAME" >/dev/null || groupadd "$GROUP_NAME" +usermod -aG "$GROUP_NAME" "$TARGET_USER" + +echo "Writing $RULE_FILE..." +cat >"$RULE_FILE" <J$(bV4=Nv4d2jro{@GjYN&lSx#GktVDgN{RyMF~f{%_v*^qc&j z|KIQby#IRNU;FJh^3VOh|M}(9`(O6oufI^g@jw6n{MX`t=YOAnzy4%R{lE49>i?Dh z_}>tJMgG(M`}U{)ul?`(-~0LDZ`%@ptPV*3bO?<@e(MiT{iLgzt@i zFaNs!O?~VC%ulR;<$s5t|9{W@@BS43kM}>>zx&-%@A&WWzx%hG|MmaN{}%tY{(Y^% z|D^x1|J(oO|9<~>zSI2+`?uCF`E%g!|KAM%55HpkUw?&p%l`lN-}I08Uq8QkzUIHx zzox&j|8oEB|2O{+|5^OP{?NS@|EvFd{&RlMF8QDJ`_3P;-}QfdzxKYvzq`K<{%!x~ z{&W70_;UHl_BZRV*B|@w|8xCr{*&^j^*6*Ht?#LK_;>r)!N0rzng5jE7{m1EF_P_am zqJHE5!hhobr~m1n_)8Ep4!Wq`7-oZo|tOpe2w#$zF$jKYg_wTMC(!2 z)2|Z0{iAx6<)&tJ@<{)Gy=C8u3kREa^-l_!P-OEoD?j~{lgrN&D`XF)$3|}clQ{X! zw7J`qGF};l{k*OrTrm0d)~)eXr~lbZm_1XVVa}G4{<^H%C3~|&JmbAx)LJI=ta@|o z{KtQOQ;qYUChvDUykaT0+M`=y4TsAgEV6poJ7sZ1O}oHWJC~hqisWTzNQX_RC)! zxz!t*=GV_&=CNt<>Nxeem$iStypRy%FBcM0rydq68f)$p7g`rla--q@S^dnu`!jXL=UP3vDN?Dr7gL|4zFxlUYvcyq zGs)`D!p>_|9C_N}5ahFXQH0RDzd;`7FYN2%T>K*7WVwgtoHrNuxq5B5{_xkUj9n~c zvtC`7{3`O?q@cjPZ<0<%5I=u^M~ti8;|a+!cTX&B3VXkKr5zLZ#F9qE4K~%4skQe@ zG#)$@fg{NgF{eF_!xBAcl*Y1grCmSzstxehH zrK6Qu(86tVJDThN*$K`^^Q<(NW^)&+9{Rt)VaLy^62;B^)4%-}7RbCPy>%g1V68x} z`nkoO8&$tPj`Z83qIP%gz6gmEDM7#8dt&O+1C}!J@APWgviIAeH+`8){+|oKb(`nE z;J>g`#e$2~&76Gpy;FXEF#7km`jAuoru>PezBw5yjnbO7#ZJCB;lzWt@B4YDOnVvh zi^2Yx{r+y#@Zc$PPOj~qD(&4Kr)GGhG(>C$%dR4`Y=!%_m)9S@eQf@n(z^88ziic; z8lO#AdZmSBt*S=(ww33XxP|WiaCXgRIh&HHA?vmaI9L8yd~dp>@!}nAeP0$dsqg>j zQ5h9?jms;7RcCI*I?=^}m(M=#oNJLK({;7)dfpc1oTq%3zOR4%xO($O!(|FeZ_h3I zSbE^*i{zF1ZrAr|rIxicyI79eHXR zL;Oe4`JeVQPh%C3Z!Mhp<4B)Mn@*x@bP(&e#}9p9*)adVbyj)9jM$3D<(Ug)13w(| z5OS7{b~`dHQdu}>=Csn{-dj$mGraP*>eoq1eZPG{qvzd%##7Q=zmsiKScOhUUF|*8)t6VXTf;EMZmk3|NEIuZe^v9dn);Z7REK+p22t|KAy+U zd41`tm-DvGx!D`{^v8-qlgrEU-pc-Rvz%MT_~gx*71p~RZ|&LMn=>7J)K9maq9+_MiX#WGd5qofPu}Db4TPAJnb3ateQZtm2Z{m6iFD$6VGd zF}nJCs_yMVHkQKkCpv1pA0D^8h`BxoHA#t zShK5if|yR(G@Z9EU+PSoyD*)J&3x){?}GSj<(Yc#M0d|FU79vkk5_23IsY^}!To9% zob3awxdJu4Hh=WKf2Ppr%i7j6hwgUS-Uyh`98$*P_1$HyC%;*^yOM`Z{n<%Xmb<&= zWFBu6>lR_3&LaN&&$ImGgh>%ykIc@8a`Iec)?=6%C;tBqH^XKAUbVMPsy|d~qYSTq zpZ;)`e&#%b66@bgo&QC(7kdSiZH&IAFi(4?DyPWTeJ_iS$nNL%VzqzqnD^tKYg}$e zlePbzR8>(`o;9UY>Gt!9W+vR#DSy@Nf)4$P*}SPd-7R;Cc=Ne0uMg<0tE=JuqAS-C z7xd+FcKTYHZ0`dQG2b;5z4D{}OjDz7D+Hn4G= zTy?8%iR@}==WFJkOr>4x5@t)6pW{-MJJQ1N(1_*Q%7{4^k50+l^iC!uxYn|-=iH?? zMYRhTOS(UQC}XjFbJV6%xdV&Me>g-hv!2YW{{3l=Wbn<4ty=~BR&Cu}%lkZpS8&Ol zZKsuzm@^LqcBH5p&Yv#cyzSFdgFJJ-pWZ@0Yr{TFEbHa3IJoc2+;?i(B??}g0{S_t zw1uZ9&W&B}5ICDHNoie&U#X4G>?Y3q_%%l?ru~q9we#Tu&$|ydPfdGTD$yDq9v!Ub z9uXqs%X>yQ%cSXPp~I5{m!7lvW|*yuG@M%b)`ikby3$o)AzDec6@cF$zf zUzIbjuUfq^eA4tUpRHB1{@LHMifc)XdDzciEZ+UBKXCP~Z6A}9|JA3RM% zWf?Z@cON38MDtwM{pr%0Wb{o{(oE>eCYhoI^DapW9{aRPVp)`QszP9qVCPFyi8(iU z=XY;Rs;|sfQOj3-`(^Q|%i_%oCoSF(?y`)V&)zzGoNS}VA7Qga&Hn&3Gbct8-Gnu;XN@Yo^ zt$km*yCzO*d8578`x=c&RsXgunNTP8r0T%_FCX`Nn@+qpHOa?zO&Y)8^xYPouTl-v zYm$>oKUXh)Ez!4pQ{u%&^~5D5K6f{}Oq}I${^iy$xzV$-v>goIp5B;u@Tg(JzwhT? zs?2?ml~u8)!)JpAvnc!01po7K3xz-2-j^utDv}`QJNFj%p`s3-rr)!SIYJaZs5|XD zR2ReTGp%OnqNVQwzM8JvU}-#6f@&`+3)CieJymTA&U;mKQ0P+0dk+5JM#ql6{3Z9_V{89=-}LXy zC*;y(x{4huzW*t3)OB3G_+lw*>DO&6zP%rdl2VR^+>G~;DL3DGJ^J9=0;gx8yB}oC zHu2@U+jj81{KsWSYu~A=uiO{2S5ICvYzP01%CaLm>}&-O1Ml50U;dQ+$);CDPx^Sm zK7M!Jmcdm1=H5dE+3s1=Ws}64maK#BGtP6{uQ~1!*2~^$ zAN#*HB{S~Ugy^$O-_L!Xm6=l|q*Q<8;NHwwW8sfk;eLwxxh|I{E?TWRt^f7spjRSQ zjne|c>%~QdKiP|}I^j8?$z1Me;Mp^_tm=a7GC2kt65R!lQ8Ab+e2Qb zonmWpVh@ySmxN0$xP00C_AJFMn%YlfpYOf3@2vgAx|6bv(c)7CFBjRh?F~D+u*bKp zQ-)XW;sM^Y&kW8roBlsJoMoR~a^&dBFQQ@etP^W*;%oOQ6u(w$o#F(x7`t~@czo0 zz30ll+ZnB=vzomZyj=85`CHb4D4*2=B?+^9ul;+=nPy*FDpZ%i{o6iWl2z`hdW{9! zXOA^1`=+m0>J<9;pllz{t6v5O-|yVQ8t>njadMJYeox2h{f)bL=Bn*TmtkYPb0YFv zu5{b7TcQ#I!kd>FW#wtasC!>pU$U;r$b9{`Pt`yFzmg6!zmZs4`Lg9%!P-;no4k+S zGn$`T)>D67+;EqcxYvx#wwaIgj^>7a$}kZZu$+3Ifo5@rQ{kCC|>kmb5$Rx!#$eYex68jW)4u>$qiC zbH=V&>3(x=?auOL{m(06FQ>;YI@iH#6PM|szT$Rh^{UzD{-jJ7zySnK0J@M2|Vn0rI5L+Qm$@c`^?=tr^%Wz&NKQW!=csvaow%nZc{0h4U@Lk zbv}~TKVEoknbHD36{m6;-M0%OS$bdS#nk(=gdDftQ0Mrzhjp=`)YSz2Te^2|%sc5H z5@;FH=@gmKc;(`5>3_?Acl|ggyvyD!aFax)-L8dtm!_riElO;d+NgVz{X;|A~u}w{LZraL*;9A%yFP#f&Fu96iQM?SE}Z7SXM}d-ID%mv2U?$fCwYKD-at z7({Nlw%6%@V$R!ir_23O9c+OS(~>1Jm@8g(`R3m_ETm%cFFSq7u?xYhOpUJIk@KHD zpJwMH8eqL(!Epyq$tm8FLerF5qN5#>FGQR0x3_;*Uil(7I4OP89NAov64w8bNAFa6 z$J(8-`2P0ggZEcU_Uk0*D7T(m^Ye!G{9Xq+=1W(tMcAU>EppQ2Rlah)c}Y+5!F!t& z|7WVc-qh1(%@nl2=i0vN4+@S>#$U9~bk5$CaQ#=>yB%rg@pZVITY9lTp{K0D zXJUi?>TUX!Wy_mae7Q0Cko?5;5Avo2zRq8jUT=MEqSg0B`#Bpd`V*DSuI4n>EqmP& zpugo#;VLWXvMcMppV*sftrNw$&oc+m)FPKlcEobyfn)~Pkzxv;fzdm+5Sz3JZ z3smMRE{y*lna;S*$Yy5LJ&nH!E`<^o|5nb`@m?%m^SXfZ!SNOHOLZpkzie`i&_8Z_ zKUHPnls}qgNA`Qnb)0jm*-fgV?A9FhbjBX}e<~YTm{X>Dti5NSV0=e@na0$Y*S=9hq=U7{5tz7WX;B_g^}~DbmCn#v*XYHxTT%#z9pM$ z;irrl$AY6PkL!y3=!+7Y&~C5t?&?oXtBNH{Q@z9#mYTnL8yIcy_V;R&@(MNsuXnbk zjeJ)&@93EDXwmE4s=21gkIcTXPW9e;yx>ZyddyLI`MbJruI&@E%e1XtczXHw5b3WA zPiJN<(9DgDJDlL(@burUtcy%vMO0O8J8I0T*&XC!J|VNWg8!6x1 z@an`er)4@@yYF^R{5f;8%smd*`oE{0uY6@z4iP-&f4*W)?7I6w&jlM| zjE`P^ zk97WM(o6EwG`C+g?ZFu}i;3}D6;|$Rx2`gYQJeMmL*1e53yS@ZY(99g%;;E^-aj{C z{qpV=p82c`uKh5YwNIFmnBk zw91^dib?WX!%0()0>MQ~^^DmfFRWqIJL&Ry(x*6UqbYn*t}A|ITQTGuoqcUi>MW!8 zM<0qWi;SIUasEW_j^**QOt1b+T58<=Z`N%K9$DoLrOO>;|9`o**YTFlW4?LG7nB~D zM}>$;AFC~OT=GxkI#19U)fIoP7Cx)c-gA*&7C$&y9zhQ&_iHvx~9d!^^nK%a)y=!1}hwl`TMq@o4C^8I${ZuBeE$zgoA_ zS>tkqPjC6;q}FXeg}pQ#HRdl3mn=GR@zcz+^KLjcd;iK=F0LHl^7xI>i}kZ&8}7aO zY%d&o^Y_0=XMS24U)|=O!kJ?E(>*QWjnT^OsoQr?4it}jt@>x5-WSIC?^IZ-KYXj2 zBG$lHyu`x1eaU=VqcuBroz@ng7#X!jZr0^_3ps=WlRG@L7hljgvh2;@+onn(n-y-A zzA2L5etdU|mOERY$-M^?e!lVh+P+03gv6-qx6v)0eK zv*kc`Fz0u%jryzp%YP2&Te9V`;@k@c0?`LpD#9Zb_022JH5cig6YWRHSZWUCD_W}`*HN7%-r1Dcf@|gmhb$OvHQY7CCwu;FFtUt zIObm!`XQJl)WlJ9idIBw!TOo+CGteC95Ftp%%Q$VuyL{M^Q0N9*>QHygl_(wu-sSW zn59Ex(AS&Jyuvaken_|+bM8={(j+>krov~5je}^M-u;ax(cx zLG3QJ%_)C7tTT$I{yx<1$X530V*ILHueGNlzkiy~EF7vKm48%qvgLPM6~=Q7lMnw- zd*Sd_Zi?{py$`R>Gvco2Q$1AJwdh$dXKwL}&N~zC%`IqsGHqGz><2cxbI(S^ZeQYZv2+KW3d- zc&&Z2VsYN9U+P)RO=nh`ZC&v6{w3FQoBlt2eEq>r!M_`-{t2)y#{(8|xV zT&)g$T{G#=%H7=S&)jX2pV9u^Xx_SOl2To&X(;=F6$y5o6VGm(@a5ry^>-XJ zQvw(a>JOZowlu3futl^>Z?&k5!{?Y%vlR!D&n&L$Z0LSoa82-^@?GXTbzCpMtY0eC zDbjh?{P^RH1uDM#o<>;~HEx=kx>=h2`qzaX)=o{=i(XB*#uk0kuI5X~(Wy4c+b!l? zTO{*2_L1DA{J;kim;3LZPb>2J=JH|31s&@dk4hIDY+YZa6tLc5{e(q}qywjz-VSe4 z$gfj<;Wg1$o}sP3B7EsVpSu&1DiRKEd);C;f^ z{m$*B9G|ll?_FYG`1gNr)d7v}`sedGzijuOz5nmmm7yk6%x89+S9`B_UKYlGPWhbl zqmqfir})GzHT*6gt37>P-E0Tv@-6fFDqkPq$_U8uTalBmJLPzXy~T{EGrA{BG-rP0 z>1?a4xhl?6HD~)wHlH6wpFeWjNAC}rc>HSs$5YWQQrU7YQ&r3x8QruW<=?4W;v*q( z!eSkJ-plusj@q9I+MfJ#rHIF4^gQLC5cVD#pw1w;89qCnuHeB3N{Jv3< z|Be(G&Fi`vfAW&(v)erS^+)y|>e;wBR&o82f8|bdVp*SF`E;sw$DQE$y+2x?PqW=~ zrBq%c`Q8WawOor;%(oh)%$;#t^TyPp9WM&sZv+gS|7)g({?EC zbz+*T^l*9a%vBGUYzjRjP-ZQ{l=FbWb>*qTU#-z*@uGE1InMpA-3W_&eneEJ|`2Inng~CLiH6nj}t%dlMy0V`yH2_g-xA8{@9t zr7#YwnP1Fq zKe>43*<>lZ)?>Y{%euOAPOLY+QW4X%!R6A59~_2ncFFLyuxMS|G3}tD-ekr0g@y*^ zilI$ilCEYk0Mf}VU^Zd!1;_Y70ozs=6b>HmYtDh&<${lTxyD;bYu57+XdUvHPpIRTN?siuN^^-3@B}Q!&HK=G~^u8CIt2 zKih4n-kPpqCG(5X^WM76Ui+qag!*Zoakx>d^zy;&odV}X-BRV(1muPK)ifwqJU(u8 z@y*HE+ng48$K(p|<@mhbU3Dn&Qdd|sGKVBVkR+C%o%b}?%AI_^amM;$}>hoQmvHhGm_pCWAstNgZ*PGy98gwA1h_Hq|UzlI9TQ3_diCr%oqFAedxAW*XnZ5@K<1H z^~rd?z@^+vmk7ji=5N(G$d&%GSnAbMwToeUj~VW;ii>+G*t6#EgRR}B{iJ9T?BA$;x<}phF0<{1wPvAv6TW9)RA?(pI*CsIlz!%ZA6F&z-|)7qN)+=r*v z*wUbA-u5{vvwy$axPQ@?Th`0PFV#LiG@09f>U2TFsS_*Q+|l=*zB&BGt1Q0>g1#anKmb+ zZaHbjOLQO7czx-@;QloBp0 z=wExYyYcwZ1LDs0zD7MhT3Jjt-kt~vXZ`V7RbM+%X}8;(%1A-8RJ8>e3~5Is)bEPS zdiJtJ=#go%d~3YG^JF3BH}fvO+jw@O1gsMIvr{mHVAqTo%N==I~m4 ze(Ske8ZWOs*w6Z~qqU)Os^RbXD|h(LI}$NVl+VD;rd9YsYxu?A3IR(Zb{=&2XjrpN zzfU3K;8NBOUatFED;1+}Nk1$w+AJ5NZM|AT?Z3o2CY@V3Z+bsmcRo!z z+OCnwwIHxH|LWb_7p~0N@}Z~oZGc4mr5!mhqTMDP*-@Fq^(%Q*OP}1W$6P(P(<~d? zzugRWkP!?!espU^c}|;D;*txx2PVlaGVgj_&+ylLk+c3Y7NP5>-(Cy5^2I-rhk52( zZI;Y}Hil&3WBg{-a_{)gFa~i=lYV8jzWeK{b+fM(Mg^6%WYz4uwGkwZIpLoe7bDnkXQnNZ2((icL@Yv;f>s9iSFXu1S)qVHF!=fl= zdEsf#AlCed8f8@ZKt_=sBndcZjv`=s(R_- zw?{uTz0$~44rTajv1h00gylQD-mSiWtERy6#gSf(851{!?cDA#e}Zqm;{8LnVuYfz zilvUbD&(E)Yx%h{^v({md27X#9>1QNwe6W<)WW`%6~*lDZgf{P`h6_9HE#yn^8RD~ zU7aVkMIAWL68Y>~;|rDBijQkcRc^|zsIhmy^IqYn@Hs0A2?yE;0B516W81@FI3vV z$NXrKM@(;z_kY8;-*0@~v}tk4-!r#6cZpuCxy$gW>zBr9GADVfmkBcW@UEldrhkRh?u7J_D}L5$gY){3jV$ zdfi@m@LAKAda)hrgC3XWOjT(L{MwqvS?FA>DY~FqQoq4+ip}lI^^ZMfD6X6G>vsNg z7v_#xDT{9|k(qb#>92Xq-PYV`Ubt#f<7cs_H+|-tD%`phw|m9Rd){Z?iAe{xZjbw( z`1_Q!wn+f|IucI(Z{o_lYqQI6)1 zC*F>i+A~=UPR)sq*{LTvVb!OP!ha<6uY9~AFOkAIx?4WqC`t7V&*u6d=Oihh~CuQp24{M){14if9~r^fR0_Q&tAeti2{ zlKBmdIfoX82a5jK$1E`8x$zwnwInB3EVu|qg zI3qJZHC*{jdX!l`1NkL$qqxCUFz%l0yj?#io2i_**s%~`LPBu z=?TFqTV6am7(Z*O@Sh}u_tG~x*3Z4TbN$4_LY8iu^Oig_HMmihr>PpR6U3)s}{$5=$ecgi-DSgeaoIPXA!u~R+-w~UYt{JpD+V|?N?9;O%Z{F72 z!?Wr195D?COEV@FtH%jV@1rf37+2maxxH`J+Cu`*Ri(dZ7Pno!Hm~dFot_;V^gq_T zx%nNlmHj9f*Tc@tO|1yU~bmvR$ong~Eu9b8jn^U@rS?*u|G!E7uM@xLq zbY3=p$X)r*_NGkZ#bi$B@@K4A`)pjS>StXJ z>J9t$h1t)(&Ee}LpJavIdY7AL>G`cwon3z;M0V@?mlqekm6w}+C|c^1(sZep%Qbx_ z)umj^|FL@JO3ie+<+*&$2bUD;O7Xf~2$^d1`1a?=eDjt(Y@N8av(8}7s(-E54Lh5k zJyv&Y{#f&3n`AD}t0mVbMfgpZ4hh+J;Mv!S1|FAJH~V)?;jg^(D^CBgD7Ml#+kJZT;jr+uew_M^*-Ilb%)Z+-H~rs{Lj@X{_B(7 zoxuEM_nIV^dOVu0{BVnLb;QId6=U886|FTX0+AvZr~Q{ie#I^ z!xQ;R((&JhkN(GcZofEvLFmestv$QLUKWNJebG5~aq9vpGq!2(6O^)@dN#>bw4^!2 z`>bCUZa0B$>c8q?)ACk-e0M_r*`$DrUfvy_ zjgCcgFAw3_@whCi)O}@6nSZ!wVf6ON8}Bt8sd)H9V9u%T(}mUcr}STK3F8V6ih8!s zYueFz{Z;<;wUaKMkk__}tDLLw!+YO6{@?Zst_ezZ{%@JLW0FhEn=|)V9!|`a*s#y; ze7bbbk$$V7C$|pFo4sezw}3a+#a9!n^8AlYn3^IN_bo>nGjaw`@dTJKxk} zS!Y|Nle=c`=l9+#oSq)bs%!38*)dH)sl;$kYY>y?{D?0(5%Yg9o_~BZ&)Q%A>ZX4G zr%-4+Z?j|F7e&Tv(-@1cui3KU#VWT*!8d!@Zf6uko1WrJ{bM#;o1*384WWN z4sEf0Te-UOR^qR;PkYK0oIjtxz3#gCM$>z%x6El1o%sLW@BF|2H?2^U*`k?qa(1go zlji;qRhbv2hffE$?K=I7L3Z<$`9DhAK3%Q3HY5MzfAjES^K;@eiwi1VaxE3RG&}q3 zT1iIbV~NSkua$N!ZCep3`|{A;?dKFCwI*NcS1eU$Z;{!#F;trM%hjbTHdh(gz7cVW zG~Dt=s+I9>MzMd3JjXlTit-KC%-bZUniiZoIjh`Nar*T36=C~-`SNlqFB3U&tEKvA z%&pq=Y1+mT+f`YPm05MzBp9~!{P1*R*(dp>Ps&O8YN%jfOys70J(t(qGg`ISDC@TF zrju{x9y>ZoqlD}+)#4Yp0_PZ})14&6XS0@1K|dAR7=&FFac|M9XDT$+yC3&QgDTsd4Fwd(#v;bZ)dcR$K8 zF}^-;g~yM{TJLsUs`%&|y5|gMuZvSfR6!xzcE&886Uuj{-`;%uv}I1LJ>aL7<@5ZSa!ZU(xH`Z3eCF!HIyrmh90{4$lX0#y7N}m%m=UdaO^j2U$+MT?p5dZJ z)vDY6YAn9@d_|Yw<7BQawUVJ9jvrKV)?~2VWpVAu&xn1;lI6dBzx<$;zfbf;K>gL7 zAAeo8x1IH0Ae-gId&jRVmpiS_dN9{|oLX{BKRf?H-QwNdO7TUfeux~nY1hg9ui#(r z^GOq5+3pGR);{sq?^yLBpA}wlPWxuxz44C0c+;$o^qF6ok5Ak(>;Kk|LUv3?_}^u4 z?d|+^@}Aj-Lzi+UK6}p-c|PC~mwf&DHBYY|SB_U+)08#)zlo~n-o=LN{=A8HJN|R^ zlh;<0Clu+;kvgEC+8jS6FY?{4v(qo{nK*UU3-0rhhJPonRx>z1Gskk;I)jW69^n{K|5ju|*a<8{V(d zJ#?$6jUkJx^*B=@zvHUOpY6Rq#PHs^nfrA@D*xOs2h$p-KAa<$w=nOdmp9w$tc(7g z368&5d%MDJJt>;Nb0+wA=e4{>p?odI=ohmZg@hy@9xza?Umq;}Ytdi1^np{3UC< z-lR}jh090t!~<3r+`Y6mb5G}G>kT`35;t6Hf1G)JR>})8rmb~eE)(t?XE=LN;hj#c zw_|egCc{`S?YNbH=1(r+znXICuzZnz;zkqh@A`#Of17Li%1pEpdrjSbA6mw&RP}gn zz~1=^r^*ifIB@p)%WR&&ts1QP3mZ>m>wJA~zcXg`Z>#TH63?40mHc6LX~qlh1h!2M z(!B4)s&{srow%xI>b8f%Cm!b?%2V0Yw?uolj`a%RJ@)IuXRnyGD(TUTpaCcLzPhcl=tC)qV5& zyRSk^4j(l5704BBXLA1r>p>2W*Dh=2egAX0ZDBe*QL_0)o4~=WJB&|RT#8%MZn*IN zS7%$`seHD~;>`4{kf)3foli8Rb1c!4G(A(gDDcupmyXrKb}P7coW9v&UE0OFU$IbO z=Iq3RaJEkqWPkQvyJ{@BTTrg@R{VmDyz3vhW;v^?CyJUeJMnFgp2zwpIDDn5h0y7R zFK#51M|?l9{ajF5a>#oYjems<>lP&~_<6eY#g)z%hqiVJ>@)fB{Fr3XY^NOuYmY^+ zbKl;_)l?*B|3BC#%IenThPb1tY%wwB!v9b2DBg9vU~d1ZX}x}p7fvi_W1Nv`^ZHx0 z^t~i_3uV_+>#h(bF;k(T%T5_Z{ykjtJxx*c|>?ZbO$tfm%#j z@42Fni>LkG(EP4HA?nnR366BmDkBNj_x*ht}QbaoY zs`0zGQt4*ryKm&YkdwZ}+d5&olzs7{pDCuF%CZF?2w8KQem(2p@cwMkVIj@niGDka zy#MV>=5BwIKS$!qL&1iZQbLD$K0OJ3At}95;`|2QnksQ)>8&%OGt9$Oif#tk9P@5H z^>t_3SFx7v|9&!ec3yb7;SjsR_3-5%H?KL+_FQzcfXRf*7h=PjIn`C_GlW*zUGS8> zp!DJIv_NA;4Ttq9LY3Exjs`|_`cI4uKQ_x_rl5?$17Y+&nY z%aRvfFWP>5KAiP!-^FK7I=o!2e=%QTYf-T}CKfy~le%YHOuU?t3hAH;IanE_lbM&)Mcb>kdC1ZbAW~#teqYVy+ zn@hExC&%Ufh~ka?==j6bMS2IHNj>ihu{RQ0A|2TrmwwO63oz52H0jreMeXaVI^C2? zXTD9hy#M>Wm$6~~&kM;sMi(qMHg_y6`g7!k>dhIOeHQ-<`ttIEWR&r>7e{@+Wiuc0 zQ(oRywEM20ZJj~6n}SJzOz*weGpue&E!*rFZs#7fmxy4swc9&Y^>Nsf)eGAX%i4a4 zn4MRzAhJvQRgkm{b61PX?pY3{`yX;Ynsf58qvV=~*?(``^gZ}Tokcjm&YWwWtGvU7 z`2C@(2JR2FO|8G)lHC3G;D-fFADx4ivOnQY32Uv&e5L>mHL; z>*3#{o%P4K;JsK`shq1Od*_X6g_Ea_9i3>m>hFyBx4-MBUp({9CvF?xdbWuy&rQBQ z)9)&%o4mSJxh+W8^R1GGp~_}c;gw5YpE~08>zKDeW>wRSxCU5aPVe2c;LkLBJQXQOp6z4fBCjDAc^a@>}(}wr`Fkb zuAThyYV|YEeT^}vC#L?~u=@Y}EvJvNslPePP+M3u=iX{t7PsP62d1q2>@`nU@A&7n z8&^Had|h05_SOdepG*0SO0O>IKeqUx>E~-*`~1#^t)FSimmKx*h!1-Ud-`>u>k4bv z|6pwJG+URvX5QWiz0y8`e6zIYRc2Rb9M(K<-fJfdz}#f*#1G;y|>$6_`cW_!oE>`V_cQO{qd7myg7FGq`|~XL01b;oZ0yEuer~J7_qYo67T0Q>)ZX=wa!2M<-Ygldu}kumv_jV zzU0}Mxna)@4J)qK=CV9zm5QfuO>s9-Q$FhyxxKvW7K4L=mId>%ldFWz?q2_QUTLn} zogH1r_GD{^9oRk5jK}keH@|9PxXtS$2QN%|8Lsnw`&(T><`3!1mz$-ArOduJ$xOQE zY50=7S;h6O;tTKHsh!Qa+gg0K<<%}5(XT=K)?4g+JL9biyJ1V=p%3|sUmwxGRdCI= z@0j+@*2-@kPGXNji%RZ@_HSsa<@fuP{^Hw7_vaGFUpIb>tCfwKUGzm=)hXxgL&w%~ z{)-i5?X_t!6PJHUnzG~3>1MUF$|rVhxFFS7qg$lu_&BzZch}X$heSgs>Pag`v$dve zooskHuEm`xbk)0zrs(_#H|~s$BAZN~PjFih@SfLlpHbkq#r&JZb!P9?KVaVQKKf(~ zFSE^)6Hg2>Hdyj@%Lh%rHZjy@MLw6j)aP@b_ic52C+{1fdZ4Z+?X$r|H-@@%)9x(P zxuc>Ny+3sC?D(*%V<*oT2+2oW_eO{`6ec6je}Fn6Pa*!(;|e zpZl_2O%q;mm}MC66xzWXGOyzGsgU&&mYh6`Pi)xkyq3A)CVy>aFwgcTi$%9f`>c*{ zjakQcg<cmuS>7lhB$ck1Rr3F+~gYiZK3tx3l;!9WHnjs&ZbsCu+im!K(L%9HrzX!UzwLeWOy1%< z_g|FF=*p>?#^iL%!GWD++6#vFZ@72HWTt8rI*UB|7G1DSwfZuz%i{!prN>o=X1=~3 zFY|bhUvbt!*-qiB-}~+zJl67{U2uQgx5ACff5k5UH?3->q?gwHjA>VMr|;!n*m%Te ztBAFL_?HUnXx1loDUU_Wa&EZBFTHp|+pC0cSN(&9dG?|oC4>1RiucM*cshT&=lcj9;0*&V9R;yZ3TJaZ{M@cbDYqH_9?gnI1lQ z?7JgE$|}xeegKyxdxB(5Qkr1z->KVgu&zJzk?G8DwpU9Q9e&p%wOW0HpRZK0gb@Fv ztqYVz7u}v6!f-Zb{^mcIUVY3iNdK|+&*e1%0Xy^JY`=cdO56M}D_(n2%$~eGF{hth zJa#J8%~bS~s*c~3o}U~2`HrwpTf9I*C7`b7mE^y$>sRVxZ|!=&twXKiVe!q}Yk&?!l`T5mTj@zXyh# z<3F(`OV35^J)4I0gqf$blK9;DIZfA;Y`r!AiL=$LglTq+kq@7S{J0>r`JYo`n`!5! zkV_}ey794Z33oj9F(~(ECC4+zkW71<3f@~XK2589f8=h85PFf_I@{Z9;^|uxTutST z-fKHszG#}JGDl`fe$U|!t3A&RxXn4YrWo6Yd7X{Btm+rX!o}G0k*R({@8t=WL1*?% z@pUPgG?UMMZTy-nFCl|tEY^ENW!sC)d2dL#ZRM9gpTG1Z6R%{vv;^Y@|HflG&9Z&_ z=DT0p^VdbfS^BBoDzV~!63#|XWo9lb*zR;K$2K?io<62O|}u{mS$G^V@qX8N~R zEiGJr?37_yet6yCWd#wS+~%=Y58D7CKhXg-!Nt9*E0inLzdqytSA9-s08>{wX0vx!nl;vs1VpHXtB7nbh7Wh|=W@_)&v{GTlH zuD|?hmKxt+wZ6MfUGOxsw(G_N$F%!8W^OtB$|JgPagX2eq|+iVv;Fm#DET@%{p);Q zuA3h*jsI1Rma(4h!l{2>WaxZ4u|DsbJ@@n_vwr(CusnDiz46AQPDe3|J1aJbESO(k z-YnPZ;Jj>I)M<{TU zNvLu?IscrJqcMrfE8nVIStR$AsZiqc#H>q6?$;iy zR&6(!>+vU2O}4iy=hsZ(`42u_O!+JM*Y#(|}5HDk;CI<+S^ zj|zHD(J5cK==I<4Gbg=#$dO-XbRp(-c}_&X8&3Hn)M-{QQoc1_6_Hll&4${VDL67TO6p+`<+FrO2VQ` zbHT=*r(Oczqj-OR@fC5pQkKFiyL6Sc;Olz@JJhb8o8@lrJWFuNPo0B%>{5iUMa)v^ zzV@!D#`RL--Wg9MRIi1)oHRSh6R*F*b;tStY<{8~i$58BI1*Z|zPfVXf)F=l#pR!U zZm*D7cfDLjkm*d-Q#CIWkDlQ9)7%PJyuMjzUdepL-1|u6h)Sv%w~>Zs&brW-(p-tv zi}L~&vCeEBe(3G%KT@|1&m>K%l^BZ&S1zAs#r1cxOS>yNs3a#mc_n|GZ|R_ zRtWG)Tv&VR!QC6n_pv^b=)RF95`2)!^i*G&-wx(QDnGx~>HT@!`F6r`lNVQG*A?x$ z6m{kD6k7#lfe-iYJ#tELFlFVcWk_r~cJcGPb&X+%zdX=cfB&T4o$^U6r@AyOmhFx? zu3b29QTd!d9kt;C#rTcA` z3#^NLIAi&~uvJR!{`H1&NB!TlH(aagUFz<0v46^}3paaB4*g+wTPLsh-Dq-QQhbha z@Sj}2R0qj5`P(_*kLR^Vy*9GGd-uUft?reRxVjUCWG=6I&F-^(*}3pZFQ1*6ao}e{ zg3sTGa0|cIhgX6lS5*ld&yJE{U+tYE`R2{s%|%y*&-3rzUU!RgT7bqMp50TbvNCn= zpBGCnxyZlBB3f>u+-_dAsKT8ByDd}dXYc0wvcrdS;(o&)2UeD>xMn^-{mTEPJ}xE4 zimsp79=m0s{EE+f^)HiO>~I!bwRFe19WlK|uUl*mv9|PmeJ@cJ(ifTTy?xQ`Sxp;e zEPE2^(Q%Wf(- zZ{eZV2Ql~V{JL2LYZ(d-bXdMOW`saaWj~zfyhYz3hntuRN|CTkh~sch(bMv-8dK z4OLYHJ}k6P@V)R~CUH~Lr2{HE{JkO@|LmRQ?f-h(_li|~=h^o&ef!6H>sJ2lfc?D+ z&ulA=S32k4&Jd>Z=n|yv}oJ?~^#&kg+B8mY%yn&Mf#lqs_+UhrS>y0|ANwmsT; zpKbREkp*XZ1x`+q$Z{<^xqV%id)6z*!t+e8kX~5_9mbuqwYfG4@JXsT! z+#Tq%SkUr_gj)J3or^AWPke|^j<22CcKhh1&l#I0J>%OP9Ji!A(_ruE*B%SBF6$O} z?Ot(Jr$;=GCz|mVduX29boP6ztSTb4AIx=zeWqpq z(&kz(G-s-+#GX%gZ^r!C&()>!a$DI$hhn!Sl^)@L(vRM%uXJcw5OAgNX8iQHev%aqkI>&z~?(jy|XL*0w51IVu{no|j{payg)pFap+FGj?EIMJ& zf0O^3v5eo*?Pm)fPm9q^5SO<&o4aoJTczrx`|*L#F6p%GuROGGS97&xy!;RL>d6;R ztvYTqO*;LX@N9v4F1@b_7wQWBD`z=x<>u!4xcWV}vh-moqIa^U~k+51hS5<9=WDwf)`MyPqWz}1`! z?DMN1g&c0&?cH=kJ^8ZU=|dadW*$FqiFek?{DQEX< zvG>>h5@2RqQDgGDsMn>a@kw(m)25dfSO1zDnyY$0?8*k~y}ns$zE&pt4f}3Z7q0yy zcV0!kK=?iH&zV9;3->v%nAWoRq_Fq&i*HpwTD;VDb(KlJbX_CV%#Kg~y9` zJV}4`VOsOTc+-_1dEDftUtJEjHJ0*2v7Mp7OADOIK}9QrPV7c>A!9c&*oq&L3VU98%g_ z!<`~`iO*Pdsi6^5&4YH$dGAYYeV7;%d?x`ui9D?(kY~zT9MH zg2N4miLw!I&uXO3eNb(;@#pN7r>}oqlf?EXg=>P^8?pH@AA5ys6trJz&NkKZ)>mZg zcc1d_{+7S)oBC{4@9A&fy!uK;ZRF?0K1SNe#rtujxANoQEPX1<(!xJ@nRf$YUx^%{3Q z?82ptf7AYOoqV>% zPnn};*5tV>k|wnHs^@?Cnd3Mmxjs$i%iN7;oeppu=4`tdspN62;0TxK*YpJnk1HN; zjrBZotA)o9#?@DF|zGNsa`XSR@uI$T^z2bW>Tj@R5XnHLI?jk30Er$Gk`%dmR<+Y5V$B<+`<8wJd+VKTuO1 ze9-R|UsBc1d*@g3zYOn{STj32|fG7 z?Y*?{T;Rq_|xM~4^P*=WV6m*wb}Zj=O)jTOA|XSz4GCy8I@EB+PyU`P)A5bLQzLWP)!l!8zy0#( zQ|3>9#Y-uPi`F{ZX8rzT{d3yWx`<%Qnvd+y%k%%_D@%yZ{#P88y_IFxWUuK5*WZeK zs^)fcUeW)ooq|i&ieIgAe>lUuY;Whei;hAUUe5gV^{(=q5{8}TnwdM#?>r!t%NPGL zIq`G--i*&bI81KFo#EJ^#MZFxlb}M_!KMm3mFR*-m(oVTFq;l>!w|lBi(?xmzmt0} zep68D=8aMLn$Q{oFi@>*RukLcTqialg=jJ^Yzv+_ies{+`$q zAqpJt*?YG_WYC9y8mL=MnAqYRr}b~#v6}Hq+A5-kG5R&^pKme z(>rFuQhVv%L$k#ew60N7(lLD1p%znZ;NE+9zSR@au&%Ea+*K2p>;F7n=Uh`}E5AbZ z%Q4#<|7Hglw#XW3?H2YDJGPA1+$V6;wBnwJvyZQw@_PTW^A+u>DFt)ht-HKypNHy3 z&QKMN%Uym+)9S*e@%#~Z>f;qYWmdX{;F0x`Cw98388;TpmaYB%gZb;;bB*tc>t-xj zFS;!GfBE`L`6puRL?%56E}F0)e5Om~qR_U9rFP-D?4NE_i82}IE?RIbe8=Mmp1Y^@ z7@zrga{uvTkYRtlrrOUS`Mc?2r_7Yg)hb*+ewKdT{kW^^?Gj06H{ErSk+Z)Ybou7@ zU&3um0$=VUiGV}35vDJCj%zzGWF1ygc~w}vr!gpNO}W8gr`}2j^<7*>OP701VvshL zcU1h7D)z2z#<}T2iTM*J+8Y0~n8DN3ymPYLq-jC|uewE^iLKsx{c!l4gV(cbF1Ec| zGyhM&sELNp{FR)GmOORutDErj?)7EIT`#)qUJ$K5>+pP&TaWLlo_r&zWc7UVJ+s`| z3$9P_m{#sJ$=xPVV%z$iEkT(#6{i}yDWuj0x48UxV^lA`c-C)^Z%=->iB+7p&$`&> zz2f7Y-zF=?Pl~sHOBT<(66DZb8uzmC=tB9V`B~A1mz@5s)s{JR!_1WH;=lWILpFQX zdp~wLyx_|QwvWe`8kaLD>~Af5J3)YDdtyb(nVYkUzV9^nq?-AeUz@o_M{k}vUt#C; z7ke{8K6kA#Y7$*BH)c`I%+vF$JYFAb6iv99rJTXRy4Kh$Z^PX7ifRLGC9{MF(<<-% zzJB~-*~2}}+dGQ0B|~RvOw-&{do9gL@yPX`mN{o0EW2R2^T_14w-`BZsMXu@Z*%}mi^xM>_ ze8+a_UrkwGfAZ(4@76D_M<{;CO{y@lJu{=Y`sMa*0sI%Yyl*IeSfq5F?ZSX%fdL8&=6ro$8?oGyD znw4#mJNti5Tesu&l(*T(&N@8mTgi9xvwi0OthDv(|NW4+ly~g4w9>z4#C&t-i+OF+ zuB?5)+;i9LrL)(Duo?2-sztB#PpQm1A(VW1?TMcOj-7kNnWw4tUDdh2y!TN%bNBw4 zkEd*z(7nFDU0-gu{)<)?zNJC7hx0W*c6d#Bd9i%^@&(2Ag7uLM2NcwMK74lO;aBoX z=4#K~SJDw5v{4~kD`eN-I*r%!1t%`Bo?xpJraChx_w&i(DYoDB)F=PDvP)J!%QN2D zf4O0~>C+X>A@|JO%l=4NO6T65Dc-T4xp{({{LW96hvqTd*>G^LaJG`%zl3!snSCyL z&Hik)dFzEsZ%b4;w4A=j`8S!rU2pf#u=*lrv;Gvz6-!*--s*Y49N^-#$FcuqUg{-r zTU}o}6@_!IAz%2t`0}q;3(hznp?!q^GOzjC9|uY`w>rl>KJL2i!PRrspFMo|Z@oVr zpm%+B(D|v^({{iZ12Ut|JUph`Di{p_Wm>X zLsKQDxb$|c@Ls&{YgU*k_sg8cD-?7m@TL5>%ZZh>Tq7sZV8|y>;L997`;4OM(eB>v zzMfAOU;nPM_c+92s&+oeD^uBNY6myxA%XX=R+Tp`u2b9?D|*pwP4R5c4|m(o_TGJX z(EgkDI=1Vp7wq;Hww0;+(i0^*;aQA2^DR~b@z%y)GvlT$Zm)kU;q>#q@@d8|tZADj z327;Iu9u8@#NxKInrDNHUxdGlmdv)IBayGwWQY zT*>ZrbeO9ZoW5AiDsRGsdnWm!_pZEL)D)A&oG5W`Ih){(Sh?#ATYlF5o3KJ%SNFz( zW^J*BMO#}68kvr~khAw(Z@b3-xQVl$Z`7Y{pYr^h2HV&i9Z$~ zov~!*!OBZ^(^l=gD^T z_k6a*Lax=f{!KG&_{+JK?Mc3$w@%B;YcoWj%R0MHcbYT(T9#+?aVf1>)h%H;`pK$tOOWD^L2q#6LQA zg4_A41=Yz8j@t!%{`m+$T49~^NB3jaXHT7^8%_Q1XU*E~wNb!BC1aoOq$@ja{x^^` z^H@L^UsrL zIPiI=orIsWQODmMYdu%yDq9v+vvL=#pO~w!`{=}?69rY}X;U_s)E#kgbbBFvLH*&Q zu;7=IXQT>d77A_k`aLgi@8?h<=PuuXC6o1@OI_9Y)%HN}+coRhLeu%1)|W1PB(B+I z6GDG8Mm=eM0SZ2E9~y<5|ZpUU%VH+~A)dY$!BthSI;M~Qmy)WE@^aS_h(y#w^{aehRn3S1yvUXDS-PTu6;_vO1_*GKl^VacZ;e>a=m76Z5 zJq|q(^W}1-Z}|~5-s7M9`=`rgn9ebo*?K6KdB^=Z7frWVKfE?Cn4{r=&L01bY;m>= zgE!36nB_oC~#@WxverNbr+iAGs>3w$Fch z`ES$exwBtwdN$#(S>pjd^UY6HOH(8nI$rMR+eW|i zxA*8|#LD{WW;;A|miZ~o=_BSt)yeCBL zY@R5SvdN1ro0{AL|6cWeo?29L$Q~sP&KH@-t_z>szt{KY$r*{$?(KCE z3}0d$x|LI3e-i_5&!_v0x8oAKR!dw9cc0t8oM&>Z62sSiRS^#*t{NZ;0e ze734^!<20d@jeBGyQl75q4o9p+R4lKAAdOhwru~*b5bAwzp|5`_>@~Ru>SUT<*d?0 zUbavFO^urF+|=;A(>#Tt%dpV%P1CD@k~LMcuDi*39?R%^YIIkB-mObpxnlYzxJ9p? z^4WW5QvM_-hgMC2onfKp{v;nyc)e&6=f>T2p5CXoPWdwZ|8#fOMA5AQdqi%WKfw~> zkS)&L$?`N_^g&aYnj6O~H~W*@?b`D4)aO}f{R&<1v!hF`!@lP^>#lP>HRc;lZd%L> z=zs4%i|@tM2A4L$b>WgGKhIxGTD$QDi<7q2os09TltTXAuT;yd|7Ez#Xp&RM@_%g^ zh6PLBGqB%$`Eq;Hb0P81n;CuBCT-YuVFlB!OP}4?4+|w~@bvV4oH5bUMDU1&<3cY9 zaesOL|5q-vNZk8lmObg;1q$(r1ZFX zTI#FnxAZUiUbgg*mcy&(U2*q+#2EH9&$Ld;*;=^eoXbIZv;MamL`CFpwrWm$b6@)} z|C^OCnDN8KhgJR!IZU9*8i9s?dL`8;ng|GF0)8aVR@>_hx{*0Z$r6!J}$WZ z@b{ZG9g)rp*ZOx&yZCBtQ`P5}JKvp|{cpa7W|%;e;rZ*yTYmcgZ1FptvUhuRN{SWh zlVh6J-d;V9PjA;Wp63;8*diM5^}N;SOIJu*$j7%UsuDxCa+-JU*&7qudA})a)02me zZ}QvbrI_r0q5CkwJt6$B*CDZOJM(-6@6E4E@lw`SpW3wFB9ddj&Z9|d`6ne8DxKZ9 z>*0;8%8T}|rF#F|^`3cxan`)cJu>;5s@HI*<}H0uJy+c_H8PKW9)mg zdoTW_B-?9sFomU4aDsYQ3DND?sd+uh+z156s^Tf6-EpWEz{>&@;+n4j}#(8Z@hq;&8>-%2F zygK)s*+*^ZC%f!#;k}q? z*?hTEySpxZwNI&E#i@VQW~$l#O>RFPCwAHjnf+#G>$v=}^hMz0wca|OVb`lNB{*ct zdn{!NZ_WD6c+P zT1#q;w*2OPy^nX9KeO|1w_x*(Z-VasG@o9KIKHZXxgO`#eQDtfqe2-i%w}!eaBn($ zQq`rWj}rd7?pqsww(xb_Gr96#Oq^LuggN(5{B_<%Rb-jYl5g8jR9y==BrX3>QNHV- z+JSBR`h73EMJw5SoyZ_KFP&X`;wQtfSDYpro-f<5%)c$k#c<<%hVZKy7UgyGFNsy( z;>=5_-_6r!qbD`zj7R8shF~uSAJwDB6UFYYZE0JUon_Rs?c}v1lOFz23|{oMOCatB z*NVvF()F{ho}asB)2(@4#_J~b1+q8F`Fnh_{w5)mrpbJE*X0#0=Y3AkF1K5uW3!?r zRMkW)MN)Fj`q>`epR#j?{#)@h!PKa8%CAGs3ufhMmv5>0dsftWTE57XfV}H(nX4QA z)UD{O*zA?HYQg4N6-5qt6Rs%Rv!uS#P%2&dy{9Zf=i%n{iPukZSv*^RHuYxv?Bgsw z-A8=8bbf^~e*9LhmfiT`k4hbV_FZtQVDq9nqxLEO8pVvX6IgR_&SF20!dXc6CQro}8Zd;CAX?fiB0=Q6vCW=ktg zb!t5q*=emUe%x01mq$L!$w2kR;U5)OO}6IG%TzDx61o~+ar^)2oz^K!wmV&Ytt|LF zs{79OhmRZg->RLspVF07sqtT)HK5})=+iFqP|I4M*lMSODH-EbF_Tu!F z4R3z4-w`Qwez@@A4&g_ZC)1?`mi#-q>$XVjNGOb`*#+^A;bAeukd?FWZr)78>L z8LKM{ZmYgLHK*C)V8_NYp>YjG`#*4{yiH+X5_MdYw29Mb%Gt_eZ@3<2Fs|=f5E5`z z{$2lc2DRA>*fcmVM(G$?`9gS@V*tP2C1|Zq}w*a#N07j$O-D&%d!R zbdzrCw~}oK#igg3@$OL4{QoYl+d*FN+~G5Sqm_9S)<1X@$9BLze7YK2;b&FpcTSt4 z4=#IFe%Nc-=Bqmtr_Ws_F}d81J<>_gFSRT;VM&?AooWNuo~0o%Iw89Aiz6=W_~0{X zRheVwg-vY_|65G0Kc=_pM%F{I6DytGpBA$8ea!P{26Ouby9EuI^J8wEsQ8uH&AfM+ zuH(74A-wx1sW;5cJSg``X{U$VKEZX%kJL%bb>VKk?jb&xGoG>kU7dPn>@$qwm)FmS>`` zCH}jJ=!bFee%;_RYs0zIC*|vZ?%VxDFS=fp^LAy*`b)DeuQK2}t=jm$HbS^G@Q>ZR zcdK^>eK1qt-aK{Ix@Uh57F}pIyPr65VOO|9>$A2ANnV_*8U8oieDL7zeU}Nl?MvR> zTAth(ylHEON^Se=8GP~SrxXL{t=Lj{Wc{=y8`Le<)lBjVpIuxoy>xf)L6a!1$iRvZ zpYCg{TQA0Gpe$;AI`7Vm)N@b6syD}8+2y`M#kc?d*BiDq29_blukR<{d78R_-#tmj zS3!{Z`OZ0~`;FTJb2WmLN0)#EuX3*S#o(RFfgyxa5n!z|IOpI4d+&3$jY zVXnu^tMk6fsC74Q>AiMoNOTd4_GYO%7I-dV~1KsZ3y(pHl@da~F&h@Cxy0;geV9 zx;5dsy^Bo-zxwpH2Untm*8I%QQ%GsO?Y`GJW_jKz<;x){B2!k&DBj3)WEGB7JAc7) z=A7b5{{JR>U%S<9dRD(*mN{bARF20BdNZ50Fqdvv!E^SH-|Y`>+WFI%XTH~5$o~0u z%!Q@1U-$mlx%GqH*sUf>fUvyNh{=?(sMu-o(DTDwdA zJipt@CRl$y>A*AB;EL*@3sxr5%zgsQF6p`JIy*8PaJMakDIzb*1!aMWV&{NGyli!wGHWB4DRx;pW@yK9!fwR&q)gSSUmmsnN)n-=MD zbk;tN=K{Xlb~2cJ<2z|vD$Kr|^TC0uQsz=B41ND+33Q*Hw0C;ixpQmgMe$b$YE|2K zKDYa__tk{eiZLf{_P%Ya*N|;tdE+iN?NUzeZKu2QBJ+=bwcHh468Ix)uk4+@hoXcG zHu#6wY&_oianF%wg)yBT)2xz;^An7Ui=Fa?kF(~il)5$}Ng^Qp)F+SR+-XPt@;#R` zobJYymUOUl&C~kUC9h83+59wdyV2_M83l7W=QPQ>X((q4F?b4D2y{J)+Q@ia;q!)9 z8>9p7OjTqJov}s=Vd+H#(&Pi_T!~E07iZ`E5`WwFK$i}k2I_K}^ z&NjC{9eC*sN7js|=Qjij3OVi&I_Z@BK#jMKjj2?)byNFL0{aE{y49 zc3Rp5|99VaD=v#Pa7ik>X4AUC#AEgIUzsXAe?`|cOB=ED&3x5gPD(lWI4L=`L zY}$DsYvxM6#U-{&6jEKpld@C)x=;A?AY}13jxC!UH~!&TvFhf>cheSEEYlJRYEt`t zYW_c^7UTQf>fJF@PWnEUt@AMVKZZ9o60f6-Oj-~EgJ$%>xw zt#cFk*|jIN@wBH9%d*K^)EG_Y=9LGjHHEXzFzLJ?JLB<`u3*-<-Mbuiu9uuxCpvY; z$x}8mYs#K3R(v;WcBYPrL;D2nwY4DyO=dIqsYKlQDm+#6QSR$Fy&YfT{Z!;LD}ID< zE>>nd@Oo`}*b1HxFWA>i{u9z-zTo)Qug1oTzkY@n9?5B%QZ?-s_i~r(3fwRJ-&RG~ zi2Cz|bvjMFvu8>7&c!dJ*2kYRt6t)jzidy;{hV824}EzHOS>%$CmgvO^T>~T|Fc$U z3-P_3*GlB?Y0iE#-LzW6HzxPvyU*2oc5?1~RG7bjfo093S7O{trlk9w_UP)nvi^B@ ztke?&ZqBz=_DP}-9ILOXt?4a3UbOM;`q%kYp;|3d#HF_D>+VkH@XMO2-^JQx{ZDqE z%U5=%6Awebq`dnVnW?ardu7be!e@(~J~^HdI#Kzwknp=5?&=Sx`3dVb*6mnbt#|ig zm!iS)Z8iDAiOyTT++Tb%FlSY}>d7c8HN9-xvk?Y=GB*4@=jlARvE79I^^Su{-8BU_ zHdj43_A$*cb>C#g{GXb_(^q9*+%)$Eb7|p=tocTDz8Y7GH|ix;2DUx2?{F95=zO!8 z!#?#pbS5xjDeCG@O*bMx9`QPZ~Q)Ert}w#C7?_xqHe(ch(R)Hv9O zefaruKifg~b53qc9o^ktt(j(ZJIKZ6u&K=HKcC~yvBlosdZ#GRsL%gX(xJ)r`u4f3 zM}$w!G)xtrIWs5=ffBDaKnk)DB-&QNSBo%pQ-JXJA-$$;?X7sAv z$V+!Vm3i0IAXGA(H}A?cwi%zUFEzwc$$ly5wlxnuv5 zJKw+NP80hUB4;O}9z5str-PjFtB?DepWl0a?zt+%cd_P45lVrt{FTqO%zCDsJSo^) zF@JxuiO{k+2cL8uytGb-TmPHvn{De{B$y8tmFuosv_Uvm<;Z`Zt2HSHH>R)or+(_) zqm4QTeY9P;>-wvGcifjfym^^fw`AZ_4UzZjB7&Z}FVhQB4Nj5Xyufv%@6MdP7bl!w zwn>Vk%E0Ebr#SB`k-8{GyQO~$s}J9-^C@$F-dr;$?G}&i^gb4wFN*z>?!P%FuYB*I zVx`bD)9Qf4Nq?)@%+~TgolvT9^Z%uH%6IqXoQj*ikwa&d!=oQvI~N^26=8iSow?p^ z^{Fjo1!7stYv;2$O%3nct7_L+{*J3Q?l||QKi$^q*WYdM{dY3ET(2^K#PiRr@D&s#&zwd)G&{YfGQ4 zms1yRx$w1{ThHat--B9S{b#QJnSLU5_w}QeYBs{Tx90x(wTYL7l{HOh-Gv$4e&v?DMC-E*Hg91t`M-20?*yfs@|Q~8&%P}F zx^ZT&U3K##yV(wpOf!E>`0%my^xMlHTXT4f^7icHU-7nh>v6d**XGo9z8)`U{FN7H zi+cW*kI$fL;m*mo*?i;o9d6vdY1ZG|%aeBWuajNxCPCSe@sbKE?cB zFx&jC_xInv6l~eGedFp`4r*zvJ8E9a)SqT>ON@W}ZFjlOCd+>hj|IKi@Mp>V?nPyj z4t>tN6RF?#$w~3Vnrk(6LN7XYUCH2T582nTU3`mko!nae(>IhRAO9SXkfT)n_MOFx zITuV;wlTiTI8bKno2e{){%6UVmXe9~FZyzJ7v=FTU!%IC+GwfeHN6Upm9zez+;yVe zF-XSx=4$;!fy7LTvqEouRY?GhFwAS2+=Xl|PP&=;|XEXjACwVlk zZvKDLxm$C$%DVsiUq-en+3f$!bn4x#w-@wwUisnGnWo#z-=^JluuxwpSK2#7s*^=- zwx`b>A*&P1ER`N?SX*m;Qqw%CGUd?p>X|cNY3x$nxZ=aXM}H2_6-_kLY_6Cr`}fe( zcl`^!Cwl+p{&7cxtNV{Ib8)!cw$lqUyIJIR=`7!SXE}e|W>1^z(t*EbmYB_Ck^4MJ zHk(tiJO1q2GvC%|di{)B9kt-e?!C4AV(X)uN{X+(zq$Tbl)uB`Lxt03=h^Q%rF?nu z@qaZ6)gS-ATCF=xN2K}U)L5ZEKa8e3_1)vx*eb?jUVo}Jaqk;@-Qv;-aVz}Ocg>Ms zvf^h*-I_N(G24X=oZp%AukZPsx|8dK-RZzv4;bz*5ZQ=V)|& zEooZpJZGbMx&D(My_Ox?Tl?0CxQDvLmd!uXzx9)EF*{d}$F1>*1neSKjnD-f<;wnxFDsU8=_p9Qx`KNzBjc*o+hFEOX-qvtrR%}*= z>y=#oj5j5ZPG08~(CIjQSt6q;Z^sMGQ#)LD%4Da#SU78rh@@DuqC?b77tU4Mds7-8 z&&;#D`2G1Tfv-7-Qx5yaDCL5tUD8>mty$f*q&%l_NK$> zT%k9=S6imEcJhBuR$ys+Z+g&EIF^yOI zvS0aMi<r+ra1 z=Z;!<+}*ivbJuLYXHTn_+_+OCBd_dz%Dy*!A%j7leTC^!xxIP@vp9N|2Yd+B`^A%$ zab;q`E>+=6x>`ve_OMF`SveQ|`jDLe*6OKg-C@;)E7x;FHWyjUo58NFb9#Gc!OxawX@#@0pUGM5hCz5Pev zSK+}wc;m}?*)iFopM7o(d2UXx;j8`ZvV$wyADmdKPcN zc)s`8rn%C49M&3?i2ZVGZcW|YUGKPI;gb6e4X>RKE~wo2ZKuwieT}-IiDy;!y8qm` z-|+nB#ebQlUTtm&3pl)(!{W5$h5eVTTkjfv{+%Cv=;`eOo$QI){2!0;6iP1dQ++5B zx2a?D=}DJdZ#F&Dj%e2XTwk$yy)I|yt|h4vPH!Is^_0&`k=${_<<65MqW6Cbz5H`@ z=JkB0GuBu39GY_U>~p<^SFF9GBRs5Q?{2of{AkL%}p=g_ox3=3Z1j$Zs3`fm*0r@UE$iY;n1OyeB=L%60gL$9AUq3wtUn4u62>m zZDN{~<&A{QE=9zt@q`R+wz5Cmp`j*nJhTraDAMt&zTTIO|1ZsMd845z^FUrSG+Ob9^8 zgilp-HC}Q0IOB?Iu>42JuJq&B zvg}|XqnXvT|Nqx_meszIu$If1tmGmZ`n&F3M#P7i&Ccg7R4Tn!t$n$7-JegJMZ@>( zf4<=2lu!Cb?CbaLk$ZbWwcCrK-}{a^f5BUJlL>wA_8;Bx;NS$~>VUt;L^6+>=IH)a zzjsW2UVqxF>eaiP!c}C~WUVovdP?Q6 zujP{0Zm!mhQROo_@7OA8IJAoU94*a~fBxj`FYlv@s_jLu)$Ob74c4Cd9#><^5xl=y zb{(VPhhvkhJJw|+Y(1$`vZQDGhkY9#miXR_k3SxJt>nk2nm3XUHig_?7kj)(AUJ^e z^|Ok=xB2UmV+C&sHvg|m_x{vts%j8ff9EHoXm6fb`tMKkuQTZJR?jqRoz3)MgMZuW zm0ef%1y_Cbn6o%;2Ai+aRP$5syW)=(9^3Qxsnw4;S7Lu1*k9MNf6uP$rDgu@%zpNw zylvl38cmDa`m@2$BI(NEh_bLEZIKzzIvq9~&~~silv(Xk6uU5dQnAys?5j^+{1z=P z*|*!>i>>7O;eAiDIGX3GNVi_?Ytq9lF(i}D^F&(kXoS@X^m zR;{ebSpDY@>s9Nm^}F|+wlFk&UB`O;zDP*0=7+1t>iHtLI-W^vXurC#M_BE~0`|%7 zuP;j-b^31ewDy)?=wcfm_TJ~y*|T>t*K6lAnC&z4z}OqIw=j#O1!} zHL9?3PPMO9;l0b`^w;N;`{w-Zvy7%}W~dii|88x2g6=fGPffjUU0(Sj+Q+`TTLiu? z2sx$7^2xrBf@Lp@nN_3MQ>pZAvM!T+*n(;n6Sh-F=brs~^4%o{ zw)idbHy=GYyWVDQV|HHbT(_MCQOm83q!-+oaab@py?f2A8B4n&4=#w?>GI;pnk2Co ztiJuOT&ZhKrgtiyeJ_8&FEV*^Ip6ik*LW4DE&096_||uk)_?07-0#Nf?KmHJC3&%b zYE`~=*ulBRSc!G3lq0; z$89rvefr#%4WF2L^&8yx&pYuu+3mt@+h5Lq=LJVxS=`ZbOwWna@I!*mhOV_UP4+Cc zD3kH{?sTc>-J+#uI^AZm`pjm{K9!zpKA~3B%>B#BsdKq=I|8q<$@f(x7%p_RGN0bD zc<+Q+>zbDthV`+pyPI@)Z&9jlR@r|0b28ix#({2nmnMDs!@|7A##7z!>w=kEc4hvP zJn}BnUBbY$d6Mgg`ih!efkBULR+|3&?)pkJNFZlV*BgtEiDsWCmLJ~hRQ~Pg?)UzG zf2w|MO1QSnv3>zpUx$-l!s!jN|^>x(>zbD?%4*7MSsC z9B494UVX!yseWgXME;r?a$-xmo;H{|7*q-yU%Z(`fSnbtIr$4tfxwbW_DZN(Tgdca{04&>kf9oyd|?1JFHqQv5qJ8 z&F#x!R(=OkwKG$d*Ilc+`+g4du_x19CHrkTc0al!_bx77Lo<5bNx?t5k6)y$-!d;~ zik56+YSM$-b@NL?^jvt4pO(EA|G!;h%H&mTW`_b3_Uul%vmxf?=ZRU*-pZuC@n4vG z>>SS;^+`Stwx2K$IvjoNM8J&6?tdkDb^rckYs%F7HP5(zQ|ndH?OpHwa;w*G{5kjX z0_%R=a8u!;j+kFwepi`dbk7IP^4)y5ccZIV={-H^!b)Mb|NgP9++P!}Rf{Z|!>TzUVOgS#EkcV z?3Yf?Q?f2={{g>;Z)qFt z?s=lSy`-A!@9DES_F|{A3p5vKf8&=wQ@JGKY)9t2u9L8txA^h4xwWS+=k8Xv z{(sfP@WUawjW;*{u$2h<{<`(#E;)0y(_7?z9GZAQ@h+R%-rT+I%NYMuf8)NK5xj@4S9gNbc3$tgBDWi%i;k^y&zbv2 zJgY>n{`0%HF=Vv)Ly3?#(XWjvGxi*N~ddASJfF@|VR@ z>lMG8D|L&Qj)o*2e6=UOq`|G*PJwL(=i0BbG8clkPk-^~$&D9}N}pWYwt;`LO86F; zg{Gdoe2*P%W7n2e-Trd+@{Qe|>(`59z0z2IP%pSQ^xLvmQ~NHj^LKe(sL!?O+M?N) z4*M;<)BDE6{Pg@8U(2%Yb)@9$g>vd0`^nDxJHhjVPEg7*|5Rh{#Tk>HvHacj?BTx0 z&NjP_JYB6`vhWrEY>U|y#u72+E~i!fh1>S{9NTuF_5Y+xtyO$~Q&#x>abDwYUgI3$ z!N4>lD$F#{GuYHgFWd5ZVejHbCOM&H&PCGYx^wD|tV>~(%P%c`<#hRfouPSc?36y& z&By;Fsco$HxEFX#f5yY0B=g$Hm%S@bhV-!LAZTYxnopyY^u8~8shGu5HpXFQDJqvfAIbULX z_3ru71A*P2A`YkD%iFv#VwUxL87Jl$$Ne2v{&1R;&Y8v7wQlx=RJ#LLS`V_CJutph zeA#}!B#TG*+ZT6g&1Wc?XKnoC%xfeuyKUjZ?Kk~AFCU+6nX=%y{!FRvutVAI@gAzT zS86Sb2rrr;ZngOJlB;X8&1JbY)*PQTV_9P8g!zAKmTciQ)>KzNDtLsI$K#yrEsHaS z+fCQ1cND+vULF1|bDcoq)4!3&{Of+sVrG03@}Mzra`mcfjg$Q(U3U1tV>Y-pwZmOC zZ0oH(T+g`p<)(J5d+@n;4ZoVUSWt)h_ia7G`+E+4_*(bRzPn#?iR5Eh8!?5owHu0m zoC~^i_XT6pCf(?k_wQpj<}pv=+;BYZ#)94mUmf;)b-(I1WavCO*0oV1XtQKx?Bd4v z3!RS#C#7FMw|~;-=Sr&|PMveYE2c7JW8wv=v(F#om06Wx%1PLx6dyw|N3MHw`=iZ9y=Zt$xn-(-xk<+ z|K$s%jT3$-{NgEc37fd2|MAv6r+90@=GEERUzju+-%ZYE>f#bl`nmb}S(i9Bj(oL>uoDyAJ?yf| z5=_Vqxm;1${S!<2Qa{wdQ*M(JL%j$?-z5Rju|h3$|q}rhzejvwGNE z-kHnj{c1eeqv<&zA>dz{kl}BuUq593O9b9cd&{)x^#72K7zr<@OVzifz57k?UHGvu z(0wgO+QCn3O!j*|e!6Aix8#S6CvUo^R^8!k@j-7Go1d)TG)*AQB%c4qipp6n>mKN* z`8}EXjG@k8%c-8oY1>657Fe&g?JUnb)IF*2`{AeOQrsF2E_JBh9#(Pqmb}%8Z|bL$ ze>c74>ev(bPUh)^RgV{L667(p&6)VxqkT)mF72M#JEu7P^bc-tWH`$IEbd>dq2sA{ zf%OwR9lqA^-U*+iSz;a{yvvb2$kp=iW%kleMaAC8)=#BW!ay(mFiWB#`N?Yq`JdGYyPxiD|&uCKczOF90h>&jLNg`tuXUgmaw^|L+;7$4eChV@ceKqH&jA*Ose=W0pm)2=^9bI_y{k@QF_U~CI z@RjHt-Y_?>c4|EXe+VCklG?Af2*HLKzS~#qSefupGvN2(bpac9Upx^}>nyi_I_HmF zc1lNj*kcOrz5TK>DysgHPfO6lWoBg)d}J&gCDyY~KK0e~X3GMj{A07O+b`DYo?D`~ zg?-9oLBn3pIWxV~9a3|wv^$S|5}neuf7bhO{cz{s?8~k#J8!*Y_uGVxF~28e&o1ct zk?^WaSZ2L{bVgpISw+htUv=&-#tk3pYF9@`eGRVl*ij^3>(i=cJcW1voYr%vN-sq9 z@jS68a+T0ray`;{-9e?-9gE+%@A!E_ej#U@JbP!vH6FVYX5~unY`=sFEjpB=>Z)m= zK6~!EJkGBV<=1?jUhEx^l@nEElJ`_5joIGGv)%RZ#s_6+onUc6qEXTi$l;Taa!Iwf)wSPU&DX&KMidT8#|HTN|Y zmd!P6F<7m}`TzZdd199xR9~)KVU@ny{^|IaE}rYMds1A;gBoL>;z2qkR2={5CGetRIIWKQ4c@ z>gS@vyS{}wPJ1rjs#$S=mhva@6t4q5Q#!imoNsG*x%NZgKG~aI?Q6vkyxINKob|oq zZN4@o=la!&l2bHX4EA|_;9YF=E4aj>`{l*kj&40+UmvgU^V;CurPbZCa<_AvM`}!k z($BL}DSFE~pIkaFHEUho^O8MA$8`PGb~SH5-sU>TWczl8<}@seS>tSVC)xkg@87O<>#ru%-%EL_x$@MEfYjrM>X#&~I@Kp(>lv-% zf4$~W*$It>p`|&Qy{^v$4n;pyocZF}FO{~JmF8RvXP#{G@N=8*Be7)jy?_PlHcJLR zlIQsU_SSy8Kkx5#i!P{qKl9d^;@flHNxQFGJzXcG(fX)YfQfEVlGVhC7W|t+|9p^T zY>3#k<;j~y-!D^Cr|i3YJXn8KjJU{6(Td1r<@%~LsYz9fz#i)8~h%dTA4Ro~}m zm`-D!oAoWu!1_MJS*zeb=2Oyz%-sUdyxF1ZAuVz;Cm?2@7nj#M5k}GUNu?=E_|Mec zdX#jl_>@QGS?~G1|GTA6)!YBS87T0vL}E((GGYIIlZxev{M=r-Peb0fEV|pdJo|LE zqK=fF!`b)=FRMaS%}y$7mK@tIW5?a@8D9|O(0Xy^Vth?Z+-#pA(qyvFNd> z^YK-`!#C~|oLHgVt@c^k&7~~9D#qS&_U3Cd=BYAH@;TM{^j^7KSz7$u4H><{g>GWg zs@V*aZ_YGJ%c!%RXurnyq@Ptr(ho7Gohx`g>~Wl_{B`^P4JlgN4)j?3KWu5)+O5C& z;Mb%2mX9ivS1ew-^6v5g)r)x%GxnZ))KM|l^6Bx{mznmwVtKgQntR#hEPM4gzOT1D zkG{gexmYD|ssH?$7L0}}hAnp{9bc~eVj;8pYY%rnEkoYDcQn7|z5k^1-KpTsx_?re zeP*h@+gBy)V|)vF6~L<_{)+jkEgfmabj!ZoBQH$uCou zPFfTH=hPwZKPiGzWrupF%-_YB^8d&N`H07VFP#(;Tb8(O)j6H%zs?`*Y(9BV=$(A> zjN|nTcl0^Zsz2?V{A>Ex53Vzp<+xv4)3EShr`Swhr^zbMg;%~1OI)5DxI8B>ch{z! zG9M=~Z`;MU=aW{j-y9SB^ZyOczE()njXyX)&*y5*{q+&)+unTWpJZiyzUB3N4XtBm zLKaMTSa{>aGeMqZe+-`P+Hw7DrHSEWtvS!jjdUOAWX{_W`+3ci{{e1J)8#hZ4&-=z zrlH8M`i1G)ryjqS{&Bdh*|#lqxqG01iz?@QJ0F#Xr?>Y#T@+b<>o<%Lgmge7f>baKcrq)L&opQ@SOxmCSDK&uLfWw`9Cx zK4(+tRM{BI>7hyA!<3E~^9Z_s$qP~5bHYOQ-PH&eR{LukwYjsOdj-78sWywN^r)CF z#eLw2OHi`+znL8|Dnd#&L0%iKt~&7U>%-Iosl95Ob^G$Te578T__)mFg}ql^z|rH8 zyh~Hlj(bmVV79Yuo4sep&zh5q7i9162>dziGUv1vGZ3@KE(xEQ{b8T*C+4@d;PL9GnX9jD$$wfB`@I+02=jc|`0Co)ckgs}Y%P;7 zo*7&{E%u#qC6mENNzb!yuHUfy^=dWa-kuwas+*tjW(PiIYSSxNYJNRc_5{oQx($|o z4l|Fe_$~E%t<%>Vp2qLr@9WGl5iam^(djL4;olOPTXNF>7OlxQ z%VF8Nib-6cyWiIM%NE@rm3Zk*N{@ma>pwpgc=`K>wypZ}?o02_Ppx|Ja%~lhcbD;x zsd);2f94B#c^{i_d)a4)e{(-cF6F4Y7b&^zBkzHghgQ8UJ&|O+%0KExuoH`1lCvwz zjfRt1X4QU$lXML7?VWrs${)_Dc=5xg(rLEWZ139s zlQTs3?fkN38zdH$OWk?``K{$(F~y-KQ4JVYuX2e5!#@s@7)CE$_qi>;0s*Z*S?HzxGd1 zK!E1D^A{BS->u)3rx4K9H^hD*(RgxT*27_$(1JZ{+Cb9RaOs8+1Tl? zF7R`*T8^)`O}N&B#Zjvd*-mqtcJtr6oCdyJkA3Qr3L$g0+rCNP@=M^gznWKgzxwx$ zw*1|$sxCb(T{`JZj&_0JdabK=v1`Jw1-;8P<|;b(dgJ}L z4E=P^n)MxGs$B1u?@o-8n|$zB(mqa}i?aH~^&13kmpU@;d*ry2@h0Ca4Yj}QuVyj5 zbmKGrAI7qmh5t!6LXc-}yqVUIt%1YyNC* z>&f=~_&Gic7c4m?vU|mo$CAMxZ7xlDa(?65gISeEg$yqW3p{fz|60e0EfX=)a&5Su zvPQx+P3G;+%}3{&Hq5@rtbVKWR!YS4CC+QEpOsts{Mf@+0)Njg5BaO1?YHBuuYEPO{*5S?|Cx#ZoKD*bT}x#6&%(b{>AS4+kLu@9X=iSB*}dF+>15fm z3)fbN#JTXeEx2XBNcXSZ@nX^AW>fE+&tzZEa#2mF#d-XNCd!|V?wD2j zs4Su^#A|oe{$urPbT|UtD!yE5;m9kUeb|0R&xv!%$Ik8j9H0KXt#hh#_R`er|K>|C zHmaj!f6-ZGt=we-v4{d#(J|*C{o6S!BedNjlp^Oee7`) z*%a)8fBZZ8+p6S(SI!w`lc#z2ZW$)W`OI&deZbtX?ZB&y^n_R2ZW=w4nAQKjT)fC&FFW)o+b9&WXi;P;GPq&8ue!<_xUt}tq7ekyH z7AFy(-Sfwrk4va?n!EJcHHSLf*V#K{b2LvBd{)l!|3KC9xGUi&N*0|zHn}hKf`GZ| zZuMQY+ZH|Nc^BsLX75r}{@0sNrnabj4LNs5k}b90>+-SP*R5u4_UCbXRxTsErBHWk z)09JURcy8U=LfIxe0T41nXU2S`FS!g`B>gB`@MbP18&xB;iC2mJidlAj7ki%opbKF zRmR+FYyTH>_vcr~x2dN&55}LI^uL)~zpZ4~ncosg2anBMb-wP_vbFB7y?sx|&$&MJ zTcFqGE59BZ9u8hs^kH|~zDXS4JK~o`UApYp6j2$^vTM${)i0i_3?|}ABxQS zx^`=Y@TG+Eqyv+sBW6vRtfT*z?ckQ6o5kk&Qzthyoqitd{MY-ioYcmqm0W@IjxRae zG_$6HIem-NgI_|-vsOgZ?V5e$#Le3iJ|4;DcKDUCeCt2uTlp*#nAiUI%64cni&ih0 z{B9?+NQR;F3H`Y3pT$^-_+X}ohf}=>*mF)jmNbL zexDOhuWjZ#Da$tPoo#pyho^a;zWDBitlOR$JU+3>*?wP1*T1*>jz2C_2<2;boiKUN z`k=H4H-4nvQurjI6_-0V_IKZ%B#!@?>b6UmCmOijtNj;iEv;FtwYTCfl4qG zJWkzrll@lf@rqA1Zv~Uo>z2>``aLi!u7Ts0=7uP}RLAy)b1UVPn=YAbo29WDj6Qgav0|9SYyCiAx+9>oetoN`cpf1zFc_2Ye$YmX|4+zX7pYJ0UXRx0X2d)FN$ z*2O#D1&5fC!raVqr%u;CMH7n_p(S;H`X;;X-go81 z4yI*-E10F8JW1TQdg^ocn-SLYIsQa7bOg)BXmHu{1TOZ;tv{?XeRoxQWT2}3l#Iy< zr{sF(n0(a=Z_&%tNI!P7r}^~cc*9`D6BZR6Y%=V#xm`Yf-Fiv<)|{?{hsBX?x+{LM zn{D#{^RJSB>&ppxCzqX z56hyr1pacI^}cm0YxaR24vx6FlZD=G+`R0I%#m%ZxjfzhkLUFrt*!LSNfP}x<-05E z?a4o@1Z5dxWp40KxM8o&p>(Zc#|t*DNmm$+ru8WnuB_;(KUA*bMPrBGEM_@r$)Smy} zUoJOFImEtodjI_EwbQ#819&!F`>;AsvQu$Z$Zbta_TRqjOOIas$$jS3t==b(|AG2_G!Yy^%Tat$7SS1<0C7l#~++SE=^`hrs$ftX}nHLNk&Z&7^S#)lyYxZQ3 zmpYo(42Fv*&icgIq*xvPUa7@e()rdMnTaQlDX3V!(AhV8VvFxj9r^1|8(Yi!UOKLe z?U{6Z-P!cBpCrzyu(C{UExYy2Ia;vj!)NU~u`Wxbjai&7nZ}0ryj!G}m$-2nNApE_ zJ69G_*)<_9k5;G~98E~yYFS%+bE|jsDlhpRAx_RL7q^=}c+<_}pHcL*(`H%Q%;E*p zJ0CYipIGN(?%Q*8%f<(_H-Go*PZFM=n=85C)x(uf@~ke_m)42@y%t|Fabe@;sZV$R z-v7lXw*Q>oj4hAdE3C8Ft~6~wQ_*6z^Xm3&_1m?D`zBq^j6dB}mo-!2`x}!bi|+?b zV^9mcd)pyq+i5B0nO1Eto_H0_JI=|Nv;Blb=_^5H@nD|A0u!cPT=X$;o@jB&m;ISf zZg?4W|)u#!# zSL}Q2dF6$Hvfn)hvtu5n4UZ2mUncJ69Cl*sfjqs_jb%>uuleUm?cXYRZMK zcNX=(_~8HMGrz0SM(5<4EO$i1^Ai^KvhSH`wlBgfUhXunk;{0r!Y%DU-W2a z%qHfLpmg3FJJa2cE_m5`*F)Qnx65F)DCfVnrXLm(KP9d%QCRfnOjUVe+NdUDO4JEU7hRnIp?b65O1gH9pE?Xq8gvU5BYw(t{4Y00pb^7cNn zuGhVWzG+pH4$Yy5wG(~|hcSM}NE)!7F%hZ7F%D3qBVw)EcF8IFx@#S1v(_S|q0 zx*jKdZ?*lY)H`9d+O3_JZ_c~?U2>IUn;386)E^V}@Uk7c7`9`QywPuiyVE*vC>ejw z@9upv_1LD4TL*lLrSEEMpYn5hF>`CZo~e7niJzP*CO#W7bf>I8yGYE{YulPfisuEF zD>%)!T+g(fb91v&{>nRcM4;#|AJ`- zPP`kBO(;v4w`>*fN^6DcX%>wejSgHd{Smynt2BF=sqKcjhYVB}U45}y>%dRTDA%+Z zzk1h~Rc<*kF|LPGZ~epT8&^ecWHA+Dc*1}4+`_q2g;NVG7c;&6vhVl%Np8+nJX6+n zGtOW4`R?+oU(+W2UuPQP`&LRprg;LJ`-vCL3V9RW)V)3zc{%CFU6%|jKe&yY>?rw#GsaPlX^LO&b?29~qFjhZ|6lGbt_>)$QQ|{Lf z=gPj_;S{)%_)+JTsKnD-){Gh(k{Uc@{+z!V`)9B0`9oEK=}T_xF@Nh{|GVLz+9Dyw zHS_xC-2Wr|!YsD4DSCq|`;;}mtBsz0`fIl^^7*1CwXfIg$?96($r9H1EcKVgw5Lzk zy=Y#2=kyw}GknI6axM$e zV@_WTaFcp{qIqryy3sLbt{uax zP0G73e4damdc678il6*Hm=6{6TrD$y8K}|zult%u=SQxJrE@l99+vENm*fe)ug=T1 zb+6}(E3H$^I2H7IWH$6Ih*`$DPDf?S1rMb!_Rgzj)E!^;H|GA&RQ+|uiOm69ZBD(k zK7Y(r@bkaqjoN!kKcu)ct(<)BU$;Sqd{sfz=6S}mPR^U=`)v9PHAM1bg=?UUF zEC20DPW-(CI_afmZMwz#d2RQ;e01#em*XZKJ)b8{;hlF{u4S+8;iHi=ypvjvJ>W=9 zy4TI*^6kwdv0ty%kJjrkZ?WT$sZLL-l|@y|KP=6i!6tOk-7@d(8`0)l`;u;T*Poxh^0oW2OQHL&9(=M; zJw>%;hs2`O;uWu^r#h62tFG6Fp<(vxF)z8yDoOK;t>Gxz)<{fZ1;i!V&dCXti#BrhG* z=<46Q;FnRyhqWGc^G;3Lq1Uf>dg_`cAG@N6EuSb+h$~7XO+w;k*DpEe71dR&2j49`+2gfw?qVs)H@HosXs{r-KA zPfAsh){-|q{mly&Jz!hsCb%PF`JJl$zq#ei=GfI9>HYBVsO;BSSDOf5)qi+Rp#aXatW(tAEw+`KN|54g@Lqx&Bshs_>*(>+|&&@g%sdD74!qPuW6VC5l z=eWf<^X=RBQ+3w;&v(|GcZoghXYI8EJuh`{KU%Hbth`xDDk&wvn``THtzPeAyH%ao z+s{pBY4GZ|T2QWTSCMhDq*7b0^UEry2pQiU60KePREe#RM=v})xn3!F)86|A7Yo}YSuVYw&exHDC1k1p^t8V7EP1=C#r|({VAD5Y zi`u&LiAsdd{~h7sjOmVZYR(7N?vn5S)Z48sJl}A3^5^x%)~sihlen)~pHNBr`Y>Wo z$m_U&^R^vGofg=6Y59+zvyG0YL~4DQu29q>X7%}V$1V9^^Dck7y=d~D_!tYBpK<>@ zoQihc+09&jL#&X2U-`~@%Y*Nn!&jw$Z%j$wblB>Ap7}J{g`zL(kM_LIPMCBl>`tbg zv)xMHFZ>c8k_6v=zM7#Qd%*F2*Q=|q&TGvxQCj+Tn#uo&zdO^V)|frJbNff;TEh&z z-KMd5H)2`)*>+#MFFw~nHoNohL9cDB(=z@XxvcVfLG4Ll?emYzpI=e5SuYej$*xs$ zPVy8xb!nNDIrZg>E9Nh-E1nWB!tmTPKw{_NH?2ow3iSUyzSnxpjrn?W=G0f(tE`=# ztUVhxZSma50MTfVA^D2KC0l(de4!D3Z3HU?dRQ&$7sybax^@1X6jBBN%!LygFVG9x|cQm3t1T$66+zU z9xTA)&+P2|I?ILmPT#lYjU}CD!xBCSrzB3BtEa*r79qYz+AW1;_9fp9FMVHqb5+se zT5RiZ)OwY;aV*o}Cido{^#`YFh8k5bYo6P_n0;z=ujtL{i#Fkll`=g#`WC&iR)zlN}l3r z75>?%uJFzBv}2dq4YYeBNu7iJboO{^q;3W;}YN?d2y^n%WWY z&~E0fK>2HI{SEI$=H#;V?P#gzx_7|A;;goQ$NcNsEOS^A$9rFYx^g!wY?PH+$r&-b5)pux$cAqh9w0aYnI5~ zaj|Hg@8_-&@@xL=3q7Cs@-<_;Ce@qpt_ofzcBQW<_I&n@dFz^f?l%?+xz_vSVL!V^ zsL0_ErBM4%;=gV=oKwj?VZgI2q1cf%lAGI6}UWa#p5OR z+|ONRtysI}*ea=GONy&bs}(Hy@J@ttlBJWq%6YR5ohl2JcQ5lgU%c3`#K3lb_7c;x zU5+wOBKRJ#zW!~&ns-eq`~IvK3`Y%(jxN~wIF?tYf!+D7me?v~zNb>j^0|&%!#OzH zB6SM<7JOw`bL8?hNuh5)zE}Gk{&sKc*15XNPyT(#rr&))@z?k-Nx=i9WhNV&n~}S-k_x+ z>BV=2cXiRskj5)p?>T1&X)sK3I?|FG8FTQ=iruk6&X@^D5oim&HW^l;gYfYAa7u;1}VQc(WX3v+2{aYvf zYg^-N`t4~dW9ZrMN!$i|d}@4DOwSm0FWD|qw|=6XeBkVS$G+xjv%m?H3)b(cUa-RN z+bq2s_nR2%jEuXoJ}=8OoixSZwZXxOKE7ui%Gb6Z&{Mf2y!(M3gNc~xF`J<5IQtoK zv(-$vy3O~s*z@HxtX;_I)4=ZaGhosy?;t*rJJY|K{rH%?c79>lt~ZvM-6;!-lJ2Z` zRE~TziP7)x22O>(X720yasJOZ-bNo(S5KU(|39VZW`*vhwm?z4xb{aH5#a~YX20Kb zf3NnnDpS{XWfRTa?+QM@aD8y+%URajLON$=JDZfhJGCUsWA9zbxKC?sPwn@z_h-KI zXBubbtSecD75)~_w=ADwe=K>yn#W#;j%jyvHnZLjmpqiVN#q~f=K!vQ#(`#fDxaD! zNO1@K*{T*Yd6Cff!w+vgKYKrq_sy|*CL5K+xNp{4UhJ0H0ZRKk52^kOT{h>!QPV`Z z&%0CpAN1$b?(+SVc3iIfgm){8ifGop#S{8#9p=58enb0rAya)g!_`YxOJ8~y=pC!8 zK6K{a+9#>9YYqHw&5vy_;9c`HWnI|SQ&!E*O{V@UIP3h9OYe3%EL>=_#&c$`0n5g| zp2_^_KYmNJhHL$r@yhaC;wSIkAG$v*ZkmJucD z!@~>gGMCJhG2+U;b@p!5m&MZG@|z!TH<|hKrGn_^sTu!wY=0qFAGPZHySHw~GKyO# zxvPk6wYc`Xr7ykVd9H3mvB!Gf#514Itk##R<=^D6De7B>{lT{%R!fQ-dMzts?ta&v zvde3~kz2soIk|23^?saNvF+54)+-mFK*8qH`e_xaXuzg9Wt4zBTU?8fBT$w-kZEaXWy7)FfaPs z%H-W&PO*m>aW~IeAp5lS$GZu=n-_2S>*&0EuD7pG*Ou!)A}=&&ojy>jxL^2EoQUwf zgJPbyu2+BfS#m4?l38tZ+^P+0@2$7d-}``Z(*J$Np5k7&otE6nN@U|ZZ(V;uzr_CH z8h@AMdq2*d+GMBeBwQ+V@z4ar3$5UAz{Wz&LNw}7+ zuE6WO*b&BAU6&W6yo_76;SUqvrA)!Y_hs&RC>6g~m0qN+_s04<=a)sndp*?U-WNZ4 zBBtwc`i@Dql*@AYIbJDNXU_C+^{DSWm9Cm>qdNWG8jTn3k9tmqZ#loDc!|q_sj2bX z0yiFOTypk6`J@R|FP^V#dmHfMz?EfJwgvuQWN9zQ*?43V-}Leie>$#PT24AszJL3^ z<5nwsk39Q(nP-*D$J2hU>r5+kJpSO4ewo>Q>}InJe1Q zSI+$>`>gfsgEib7scv=(CqiaFuoo69n|Imj#m;-5_b?jh&kcE{=(Wyzn-yDAGBioWtL`E<3MQ()?8ai-kEk?&X5D=krvFI3%K_)GpxMtLbWgGyJJ zE>mZuzqI$d@84sV|M}a7gYLr5PQH=e zca~vx;;#cDdFL#in$Ih9x;kZ@yVv8-MG3PD6^z17c2DWGIpA%;WW3dCO7*>vC*Sr3 zZF%XD;;DIogRyDC8=g7BAE&S-hFEk5A7j$adn%Ns<@r=dOD@Kx;^d0C3RemZxs@FH z|LNsy3SGUXdb|0z2L+M+Dhz>ax+edkxf{Jax<$4psmYpa*Ei2MigMG)TAPqnX1GP) z@8MDR<5oOEs{cH`37cC~PT{^ADj4xtcgmCGh&_D={;X;_^(Bo%`|h$N&g41CAt9ey zBp-CE?rt+r4WD)3V7&4AfZO*DN31*3J+1oF)Mi_eK;swhb~kZe*eVjUZjqZ0uj0j2 zANJ*UEY|-rJ*aTZr)SNoJ2l90*QE@kxBXf$+j6Pr<(_?u?CUd( zqsvZ-O|H$l@OkpRhx~hNJJK1KdiDPi^k^yg9P+Crk^ipEr#}{}8iExS>Sh(S?p<^t zwm!_ona!^CfzaCT-;37oIq>HB<@SW=;u{=(mB+SPU6D!)=`-7znfs(m=bylprZT(2 zd#cAHKkPW^_@Y&-p*np1(b^pomIbZvY`(KSq&@p{&?VPRD_;HipOyCD)WhZTxG&vZ zbL0w#O7Gh^wTUZIx4%f)KE>l%g2z2Sj#J|64t}i7tv>a7*X`e1|HP*r*)@CZp~v$c zJlop#@u8*2v>am_`7~>>?_27mD&EEg_gVg635;Yk&s=y@g7X!#oBkVRr=KzzJxiiQ zckby{J|f;LyhC(by4yvK`IDY?F4(5T|JvN~>YqQwcw0PojADJCH4@U1h7SQ>2t8&x- zp0y6bQ*1NdZwffSaE(RuGx1<2p7iqt>h>YJRBN$T+a$Mg6$?59{H<(R74Epk z?p=mw7hnFwovXgTd18D=?5>pCM|l-4o$WeWYi2IxWa(eMPB4|B?87U)t(Mn%G87(2 zx)$5X{(0?oGxH92l4Q_?i}UZ5y^FeL%VgIsEiW0@)s^MbbH+E{ZQCCGg3AJBZ&U7P z>{eUBv-{MA8=WtDH7$2fKQ>$Lo;c%1_PkrnhZ~!=3rU|#>3(xx`}m#CT{F96wk}YO zd|p_!Ij#O~Rgiv|`HAqN%^!X(SS<8w^8;_r%Q05cj~^t4-(o%d`_}L7#1rBXAGMuL zn4WY0>fqV#uX3MX(@Klm{rZBUug6&)mLGgG)Anw*qjdFkhPjqZ)jKxl$b_FZY=4z( zVm)K-caKMx`ln9by`*G^c@oD&_L(PYF>VO&eU|K zk_o={3--@Zt278nkLixywqIrK(y8s@SN@+2UE@1PYLl*uW8J@G$u%~P7N-iT_7rSe zCuH=qNzcMUrTF4Awne_H4zU!)_H+d>wRpM&9=oRh@IA}IVE-e2j?-r78+$VCaTf6| zlVCj)@@+@p#p^zH*K#C{)mHAxEY3YEb3I;dvB;9|(>_+bdT&-_C%?+3=*-D&HGDe9 zP58Dse$5i!<8gkrsqUX`l3!J$lCuna4{PPSXsA`%TZSmBx^ESXZ;XGcrF3HUy+cpV zEG%i-Y1cVXW=;AGxrIq;0=o+)I{x{teyHq4V{yvmtFKH}oluzfJ@>$kPZxeR2Tr@c zBf33Z{pj&?wbNOzG$X?H`8RL{sY&y7tXrd60yf7?4MEct~qzwDvghF z6os^UvT%2(+va?{r{OY(X-`03*u}YR*H|_)1-C8|JlLkr^CpRZ^%1c}(vNb_Yq4!fUT6Apv_5U%D%W{E(ND8((w7Y`F5N#&c3x+cII@E++_3*+D#sex zNd*~x$(qj+Y^Ul=+kKNd9n`Fbn+!n`V8Phri;em$G7FP(d)dO<$wsB$Q%Jj&eR*+z zZNYZ?Jd@vUSA7_c2``nK`yjz5W5=5bo^nxcSC=$DUcPzOaW?MUJyxu5J}C1V9}V8| zr)uBo={^?!PCYMMw`kp8tAe%PDh~f_m-yX1A(`LZvS@eXm8A7Ni{+Z%ZaR^~;?g_A z)c4%4vwc0$Fe)qP&I|>7q&ucw>@X)W9 z=Qng)UgX)h*eG+##Cgusx;6wbWOQ!0a;n#T%FVoe-`&+W)fbctexE$=@VSoetS(6% zm7SB;{w!g=T6zD~oljgo|6{Wb^nOv_rSpPi`@a&wceOV)3^)B+%aR$s?7r;O2(RO7 zH&*WWTAQ@@(1+Rg4)^vR<%pbK;q^XGuOi~su_=mYDplSb_FW&fAnn4gOs$Wnq_ma> zmTl&_wD%wLso(w*?0YXWt*-j|y6N!~2W9y)Z!}ysbyjZ3UEKJjUPF+&o`!g>X+0JEazVvrntM}&Xc#1vsjG^r)jCJKOsAROFH9%e>sWrUbVuB5j+RC ztlfIW%k%Kf1xE^6ymSw`&aGXf5Wi>rirC#rc8bRO{@k{#xoXvXYjk&u%~E%W>}%Wh zqgYSm!s$mJAGtcIZaMyzk<)kK1h1;-sM;wPy!U)PRMJ-(YVgiM&%Nn`S%LShvPfm7 z+h4n`ztP$+-(+!X?yLUk4|n=Bbeu4q*11QGq2s1^#i84we^;lmv3s!JZ+bHO0?WBa zeSt*}YgogSUj=QhuPBVIe!(v{^J>ZGa)F4&{9+CNYYz0K>)lyt)stlj{j zr?XZ|&OP7eAzHjLvisi2Dc6O6x2?P-Ug@gO7g4)6KJudSE5AKSQl`c-rg4**Z+u;` zzG-Ucz5+|bvkT;dFYT^-c6g`ex4>NeI&PM`d+z<+__yMohsXJEYntD#Kh_-b_rfVd z-9^1TLE`L7UW&2#hHYQIv(f&7;tp}EZ#RqIRn2Ao8^Wp|rlh2Dpz199PbL0#(U4=O zHKIPb9x<`lw|z;;nRUmNL++@SAGq@QYu$;vk4`jki#~j89&Qn`=+pE!S_xjixlTUm z?$8Ew3>Yp>6{-<2zr%sHa z-r~fCE<*JN3fuoo$b9|!a704&Z$`a<&B}YV+`hCumC0#i3Ar@!gT{&(Hm}~lxP7m7 zFC$m@vUj_tTnk)oxI^lkkK@1i?G<*P?}Z+B{=_I~YPWw&+ZnaQ8jj-&!@E1X6!!gA zPrvEh6|&S~mfZS%andq@o{XCXuHRbH;JAV(@_otu-Flrf%_HTa7k($73FoO|EQfFS|YK|XSu;opLq*(Umc&<9x|!N>FS9s z5`yXid81O+&S$nUw92eGlnf%uAlSNE}N^I7& z>8djlpB)bLUvBo=m2-se^V&a}ecuJwoVdVtyJX>F5gY$sllgzzz1dN+fsO6dtZ7qg;@i9q zE%jCW6K!>?_pa04pFbA5g|o1p$@=?N=AY7puR1fd6GZeS?oXal?U&@iynczA=03-= ztI0CmAwmwXoXE3R@&B)vVV4$K z`(52%yw_k~%&JunG~|+)tlOq%%-oq5p}bHr`q`21TS~tywbN=jC3|_A#iwfKX#NM6 zmblOCN@bq-Ux~ZorSMY@b}{Bh&Hg5TJr2BzN{;=oXn{&;(i1hE=b`2crgfg|@BL!2 z^UsTpdw~pGCB`z&JpGg2Ty(s_!m=$OO@0HLP0<#OGfkT}$;qedHZ3*Yb@PJWT!#1; zU5{`7I=#Cl_-VG{!=o|f_kS&{`6d2jY0;_1>idhI9Iw{D(y3wovR|acBJIGI6Phl^ zd)`dZ-qR`4`Rulm_2WYc5<6$;9@X04yx4^2c|7OYbg4+2b62cBa~M9CFH8HoA~w(a zErY@JbMgPnZv-s)pL1)@_MY8;o&;~Vchy)UK4*2iT-N3rf6Y>41&T|hZRR$GSFTr$ zXPdIDaq*&4o6Pc?#rq43f7+?n&$0_=dD>GweSLQO`*8EVU(YMJo_zD$R`TJwftupX zh|g+gJ0|*-$pjs0)yZ96VzpR&zG2j#DN>@>EiZ-UhhAQAx<|?*RW9_^yHmSX9?3f} z?TrY#MbNxw`M*v~e6Z%Rx{1cg?jWwLf@j}${cRRqXuX)r;IC?6VdzKe^ZGNsbly-u z)b!!W{kGgxlf-QMfB&@Wl)oxJo~`@z$D7Pc8=@}z-s(CVHmP2C#n;*r%~NT^B3@P zPv&eknTHR>KV|g4v}2f3H2dep|7?E2rF?!{3o8Ug9{B%M2z-!tq~O}F4c_u)p8w5S zJbHc|_-XGhDmgid|F)XM42|x!Sw?N$nf#^8>ld)zU&Hm?a9L8 zpAsgVKWr+pZjs)Gt~E34RW44Qa(>c_J3;xg*G*ow#5%%Jw|C#>%{o(VC+_roU4AX+ z>g1@;4t-w~7oT}4DxB}NR3dieN*3X_yR^y->VJO>yVJTXC62x7p`Qx3SMx-!6)J6K z&z8Ru*_ZOAV}Gn${895sG8^vC4cz)8*0De-xHg2dqsg{VB11M~am@M3+<=tL=N7E5 zGmhP{V+Bu1^X+@3DctvN@2bw1S$Uww@bK;BCxf{eAD&&Wwxj0OW0Tf<0uP_PC_kil z|94A%R+w>JqwBpr*-KKLUblJ*s>p7im~fWqRe0peh$9Rif86`E?xe>51Fi>p^fK;A z8fNkI+C^u&F(};W3t*Oi_@;8fb&l0>8G<+Gw#8RoKJ%*RXU(%myO*wt*!N=k)%uCi zMMCd4?tJ-boyEiRa^98hDSOv`v(QV6ZlCm9xG3+}X}wwANo}f8hYNOoU#6n@iib1& zSDCJ` zkKZ)8Q=I+7DvR!eGftiV`0rC&+iA8_M*7w>_1!uox6fG3{9ce*x|Cu83)3_qf_cd^};s+>Nybw8IV*R6bUI zLu0R>W*TdpHP_YKy?DB;?C|1$dv5DJFa3G!hml6#%K!go>2Il)Yt&nNWY7KRGxg>N z)lTd`nRwvWZ@H@xdWmlH46PnqOK{LFT-E!!LrZtVw3!$D;-a_BmXO}Uwo~cIt1q>- z%ylo^=A0=>|0%m-%C$_+RgMy;OO_q;Jsr4B==MRE^WEpY44#))#mo+E_xxZu!{nd9 zH3c7+xw{T3RF%e;+*Lob_4&Q48w7kEO{<)CU-$p%xuSH^56+I>b?ahysuO$SMC{T; za+m7*6{^deaZlg5(y^d-cS}`YJ-4IPqh*iRG8`}WIbqZ%HBoe_&Ca= zyw+U#;I!p0d(jY=jimt}V}tZJ%ohBgyzi>Lf6evf`qQ_Ty3Z9jB*x9feNsjBuYQn_ z!Q1yqT)f>LzuKOpJG@*b6`5W%!FH!d{FAr&yLCJ|mQ4$r-@5tKl3$|#-o2TkH_7wR zqVvsWyla?R@7Iau%_)~}5M~InVrRTjv)PSZZuyd9wGX~bi;>r!(fzA#dS7tJEY%-Q z35r>(?LXXGegC!S!G#(3xOdAt7e6~Irem$Q;!VtM)VfreF5UE>W-{Qn=u-^O4Ivmu_z4 z-KaP9X~-Ej9k;zz57)Q7Gv8ymZO8Vd`>MVqF8u#z(ck@j&mF{PU6~QHrU&!1SFyJSecfD;wxV3nY1zlDa|iQ6Pj=?0{0LPQIeqY9k+6aT z(^khFv3`3l?_VGzo4M?Tc6*r4eqr^Z#MR+)!Usv3nup*rAR>rS6QngP%zm>~WUv;glVa@FMHh$RmXcdUtdJn_u_h_fy!uS``>%)Y4Q%qG6z`7AC)VKJGs zy9bZR$xYtsdW>)7$~xVp2p8J5Kgj-~8 zqQ7jgw!=c}O*Ha6DY?}1K=$`i=gvA4=euaZ4|moMa@U->i1$S(f&MbCJ-TW^?g9kvrwo^HP=V}EIwWz+l8 z_gDOu{$8``WT?UFn`&=tr|L*_b6c*$F>Je@j3obW#Y3>AA;Q{yq!5UMSER~7PCRmF|ltF3NLt$ zm*kX8KfOBJ^>W+R*z@himps!OwUzRj^qPZbC@jsn06;0j7=0V@;E@@dezB;+&bVNnkf$P_%?lad(bGABms&=}pz=i5d z|MIuJx$TrCQuRoCHFI2Mz?x6{EL&F?7+ajW@b&V}q^&X^{i9y)w+~)(|I3%oFJ=aR z5B_DU=FY19d0W)&Zw5zSP35MB1r_P+^OMEp%ucO6@;&d1%!DNO38&mQygrh0$U5b~ zM5U=|i;^^i#82qx*m73C?(O?H{p#6Ii!6Q>>^<9A?)muq(qM&4Mj2A;ZP>l-cidvw zc;--?z=h0n0T&Lc8O^#`H9?r4Bk9DQ1+RadzJE}*?hMnr|HabV7izmzt`rmEOSRd) zxw-s$;hTMyyiJK_^D=dJY}Y#HusK#S+-8?z6<6goO@`Gg#JdXFKHldpT6lSlZ^fpP zZ#OkwPWaDrN?lxc^}ZERrSW>~QupM8uFrZPE^yg%>H@Bw-?Ln>n-C2|U+Be*Yti8j0cJ&pJ{=5+5T$csQ z_J|kXYf_4O$i3n2f~n7SZa&LRc4yi6y~cAd%L2bv;TF!z{GPveF8r2dmvq7T^b2zt z@0#M-z8co<;Y***{Oxe%nABTXfv>CKB+#xZ#u_^*)0k^3%gC_-Xt?Ntks&Y zCf_sLYpzXS^1Aaa2Pa*s*=Ya8>RqsReBa!E?XjmaL+xK0mP({m391RlHE3RWV{~kD zfA7pwi>0)({o+j(Mb~azonUJwelbHh?uSqOvdJRdS`(#Ki_GSb@8J8+*X$U(a}~ed zX7>G`pIuAAF*FOc!BOaHZsYv1RoCT+-kQOtT_U1}Hi z;WyLu*!;E4mM+YHyrZ{x)wd;<^A^mTU-X-Ou2tI_{~L8dv%T}BC+s*av-&IdQp1xo z`^-MQ=8gUssV;j*sA98e$)Awd5xX|O7Q4jw^Kx~(O~1pJ1!wo^+^_VzG^a0d=l{2x zwx0U?d&d6R6#~mW*=J9@%Xq`Lr+_g_+S?+Isqg!Pysx}9(G0uzL_J??DR(FCdBMzG z^Q>m#;om7@w$uH>Y7h5s(C`1*ziNWT-jfe=jh^YxxNezvar=UuN%1e&-!qAx@46*$ zis{lDFXyH{z&OR!Xi8 zuk=iZEX(=)ygx25_D(G>*Z%v!*{09<4r>|PlywJ>@S|`b(@K?br+kH~&ZTno3%(@!U9;!@QQi zE<1fr2uJ-?_L^;m7o&aTbXuYurp27PFf04%bL%js*JV$*`a>&x1HNSa4))^Y=4fN$ ml3Gy6J=I%>ZJumfh4L54Cw|%iH$u1Ba%?NykQ8^*fdK$X=8>)d literal 0 HcmV?d00001 diff --git a/ideapad-conservation-mode/translations/en.json b/ideapad-conservation-mode/translations/en.json new file mode 100644 index 0000000..1dd0538 --- /dev/null +++ b/ideapad-conservation-mode/translations/en.json @@ -0,0 +1,19 @@ +{ + "title": "Conservation Mode", + "shortcut": { + "on": "Conservation On", + "off": "Conservation Off", + "na": "Conservation N/A" + }, + "notify": { + "enabled": "Enabled - charging capped for battery health.", + "disabled": "Disabled - charging to 100%.", + "setup_needed": "One-time setup needed - check the terminal window that just opened." + }, + "error": { + "device_not_found": "Could not find the ideapad_acpi conservation_mode sysfs file on this machine.", + "read_failed": "Could not read the current conservation_mode state.", + "write_failed": "Failed to write conservation_mode ({error}) and could not locate the plugin directory to run setup.", + "write_failed_manual": "Failed to write conservation_mode ({error}). Run scripts/setup-permissions.sh with sudo manually, then log out and back in." + } +}