From 4fef453b78444d41a4917629545decc091ff3cb6 Mon Sep 17 00:00:00 2001
From: Danilo Woznica
Date: Tue, 11 Apr 2023 15:19:17 -0300
Subject: [PATCH] feat: private dep v2 (#746)
Co-authored-by: Filipe Lima
---
sandpack-client/src/clients/runtime/index.ts | 7 ++
sandpack-client/src/clients/runtime/types.ts | 3 +
sandpack-client/src/types.ts | 6 ++
sandpack-client/src/utils.ts | 2 +-
sandpack-react/src/PrivatePackage.stories.tsx | 30 +++++++
.../src/components/Preview/index.tsx | 27 ++++++-
.../src/components/common/ErrorOverlay.tsx | 71 ++++++++++++++++-
.../src/components/common/LoadingOverlay.tsx | 51 +++++++-----
sandpack-react/src/components/icons/index.tsx | 14 ++++
.../src/contexts/utils/useAppState.ts | 2 +
.../src/contexts/utils/useClient.ts | 22 +++---
sandpack-react/src/styles/shared.ts | 27 ++++++-
sandpack-react/src/types.ts | 10 ++-
.../docs/public/private-package-dashboard.png | Bin 0 -> 161057 bytes
.../docs/public/private-package-loaded.png | Bin 0 -> 75508 bytes
.../docs/public/private-package-signin.png | Bin 0 -> 114114 bytes
.../docs/public/private-package-signout.png | Bin 0 -> 23842 bytes
website/docs/public/private-package.png | Bin 79904 -> 0 bytes
.../docs/src/pages/getting-started/_meta.json | 3 +-
.../getting-started/private-packages.mdx | 74 ++++++++++++++++++
.../src/pages/guides/private-packages.mdx | 66 ----------------
21 files changed, 304 insertions(+), 111 deletions(-)
create mode 100644 sandpack-react/src/PrivatePackage.stories.tsx
create mode 100644 website/docs/public/private-package-dashboard.png
create mode 100644 website/docs/public/private-package-loaded.png
create mode 100644 website/docs/public/private-package-signin.png
create mode 100644 website/docs/public/private-package-signout.png
delete mode 100644 website/docs/public/private-package.png
create mode 100644 website/docs/src/pages/getting-started/private-packages.mdx
delete mode 100644 website/docs/src/pages/guides/private-packages.mdx
diff --git a/sandpack-client/src/clients/runtime/index.ts b/sandpack-client/src/clients/runtime/index.ts
index cd8973a94..5b7c2e818 100644
--- a/sandpack-client/src/clients/runtime/index.ts
+++ b/sandpack-client/src/clients/runtime/index.ts
@@ -58,6 +58,12 @@ export class SandpackRuntime extends SandpackClient {
this.bundlerURL = options.bundlerURL || BUNDLER_URL;
+ if (options.teamId) {
+ this.bundlerURL =
+ this.bundlerURL.replace("https://", "https://" + options.teamId + "-") +
+ `?cache=${Date.now()}`;
+ }
+
this.bundlerState = undefined;
this.errors = [];
this.status = "initializing";
@@ -241,6 +247,7 @@ export class SandpackRuntime extends SandpackClient {
clearConsoleDisabled: !this.options.clearConsoleOnFirstCompile,
logLevel: this.options.logLevel ?? SandpackLogLevel.Info,
customNpmRegistries: this.options.customNpmRegistries,
+ teamId: this.options.teamId,
});
}
diff --git a/sandpack-client/src/clients/runtime/types.ts b/sandpack-client/src/clients/runtime/types.ts
index 5d99409ce..670724ad7 100644
--- a/sandpack-client/src/clients/runtime/types.ts
+++ b/sandpack-client/src/clients/runtime/types.ts
@@ -78,6 +78,7 @@ export type SandpackRuntimeMessage = BaseSandpackMessage &
reactDevTools?: ReactDevToolsMode;
logLevel?: SandpackLogLevel;
customNpmRegistries?: NpmRegistry[];
+ teamId?: string;
}
| {
type: "refresh";
@@ -103,4 +104,6 @@ export type SandpackRuntimeMessage = BaseSandpackMessage &
}>;
}
| SandboxTestMessage
+ | { type: "sign-in"; teamId: string }
+ | { type: "sign-out" }
);
diff --git a/sandpack-client/src/types.ts b/sandpack-client/src/types.ts
index 757cd77f3..3e11816ec 100644
--- a/sandpack-client/src/types.ts
+++ b/sandpack-client/src/types.ts
@@ -59,6 +59,12 @@ export interface ClientOptions {
* to retrieve npm packages from your own npm registry.
*/
customNpmRegistries?: NpmRegistry[];
+
+ /**
+ * CodeSandbox team id: with this information, bundler can connect to CodeSandbox
+ * and unlock a few capabilities
+ */
+ teamId?: string;
}
export interface SandboxSetup {
diff --git a/sandpack-client/src/utils.ts b/sandpack-client/src/utils.ts
index 5cb865d87..93a7de10c 100644
--- a/sandpack-client/src/utils.ts
+++ b/sandpack-client/src/utils.ts
@@ -104,7 +104,7 @@ export function extractErrorDetails(msg: SandpackErrorMessage): SandpackError {
return { title, path, message, line, column };
}
- const relevantStackFrame = getRelevantStackFrame(msg.payload.frames);
+ const relevantStackFrame = getRelevantStackFrame(msg.payload?.frames);
if (!relevantStackFrame) {
return { message: msg.message };
}
diff --git a/sandpack-react/src/PrivatePackage.stories.tsx b/sandpack-react/src/PrivatePackage.stories.tsx
new file mode 100644
index 000000000..be40526ec
--- /dev/null
+++ b/sandpack-react/src/PrivatePackage.stories.tsx
@@ -0,0 +1,30 @@
+import React from "react";
+
+import { Sandpack } from "./presets";
+
+export default {
+ title: "Intro/PrivatePackage",
+};
+
+export const Basic: React.FC = () => {
+ return (
+
+ Hello World
+ // }`,
+ // }}
+ // options={{ bundlerURL: `http://localhost:3000` }}
+ options={{ bundlerURL: `https://2-1-0-sandpack.codesandbox.stream/` }}
+ teamId="6756547b-12fb-465e-82c8-b38a981f1f67"
+ template="react"
+ />
+
+ );
+};
diff --git a/sandpack-react/src/components/Preview/index.tsx b/sandpack-react/src/components/Preview/index.tsx
index 44bb282fe..b24a3e800 100644
--- a/sandpack-react/src/components/Preview/index.tsx
+++ b/sandpack-react/src/components/Preview/index.tsx
@@ -10,6 +10,11 @@ import {
useSandpackShell,
} from "../../hooks";
import { css, THEME_PREFIX } from "../../styles";
+import {
+ buttonClassName,
+ iconStandaloneClassName,
+ roundedButtonClassName,
+} from "../../styles/shared";
import { useClassNames } from "../../utils/classNames";
import { Navigator } from "../Navigator";
import { ErrorOverlay } from "../common/ErrorOverlay";
@@ -18,6 +23,7 @@ import { OpenInCodeSandboxButton } from "../common/OpenInCodeSandboxButton";
import { RoundedButton } from "../common/RoundedButton";
import { SandpackStack } from "../common/Stack";
import { RefreshIcon, RestartIcon } from "../icons";
+import { SignOutIcon } from "../icons";
export interface PreviewProps {
style?: React.CSSProperties;
@@ -109,9 +115,8 @@ export const SandpackPreview = React.forwardRef<
},
ref
) => {
- const { sandpack, listen, iframe, getClient, clientId } = useSandpackClient(
- { startRoute }
- );
+ const { sandpack, listen, iframe, getClient, clientId, dispatch } =
+ useSandpackClient({ startRoute });
const [iframeComputedHeight, setComputedAutoHeight] = React.useState<
number | null
>(null);
@@ -193,6 +198,22 @@ export const SandpackPreview = React.forwardRef<
)}
+ {sandpack.teamId && (
+ dispatch({ type: "sign-out" })}
+ title="Sign out"
+ type="button"
+ >
+
+
+ )}
+
{showOpenInCodeSandbox && }
diff --git a/sandpack-react/src/components/common/ErrorOverlay.tsx b/sandpack-react/src/components/common/ErrorOverlay.tsx
index 2e8cefdf5..228716610 100644
--- a/sandpack-react/src/components/common/ErrorOverlay.tsx
+++ b/sandpack-react/src/components/common/ErrorOverlay.tsx
@@ -12,6 +12,7 @@ import {
roundedButtonClassName,
} from "../../styles/shared";
import { useClassNames } from "../../utils/classNames";
+import { SignInIcon } from "../icons";
import { RestartIcon } from "../icons";
const mapBundlerErrors = (originalMessage: string): string => {
@@ -42,14 +43,68 @@ export const ErrorOverlay: React.FC = (props) => {
const { restart } = useSandpackShell();
const classNames = useClassNames();
const {
- sandpack: { runSandpack },
+ sandpack: { runSandpack, teamId },
} = useSandpack();
+ const { dispatch } = useSandpack();
if (!errorMessage && !children) {
return null;
}
const isSandpackBundlerError = errorMessage?.startsWith("[sandpack-client]");
+ const privateDependencyError = errorMessage?.includes(
+ "NPM_REGISTRY_UNAUTHENTICATED_REQUEST"
+ );
+
+ const onSignIn = () => {
+ if (teamId) {
+ dispatch({ type: "sign-in", teamId });
+ }
+ };
+
+ if (privateDependencyError) {
+ return (
+
+
+ Unable to fetch required dependency.
+
+
+
+
+ Authentication required. Please sign in to your account (make sure
+ to allow pop-ups to this page) and try again. If the issue persists,
+ contact{" "}
+
+ support
+ {" "}
+ for further assistance.
+
+
+
+
+
+
+ Sign in
+
+
+
+ );
+ }
if (isSandpackBundlerError && errorMessage) {
return (
@@ -98,15 +153,23 @@ export const ErrorOverlay: React.FC = (props) => {
className={classNames("overlay", [
classNames("error"),
absoluteClassName,
- errorClassName,
+ errorClassName({ solidBg: true }),
className,
])}
translate="no"
{...otherProps}
>
-
+
+ Something went wrong
+
+
+
{errorMessage || children}
-
+
);
};
diff --git a/sandpack-react/src/components/common/LoadingOverlay.tsx b/sandpack-react/src/components/common/LoadingOverlay.tsx
index 58f143d93..bddefbd2b 100644
--- a/sandpack-react/src/components/common/LoadingOverlay.tsx
+++ b/sandpack-react/src/components/common/LoadingOverlay.tsx
@@ -12,6 +12,7 @@ import {
absoluteClassName,
buttonClassName,
errorBundlerClassName,
+ errorClassName,
errorMessageClassName,
fadeIn,
iconStandaloneClassName,
@@ -39,15 +40,16 @@ const loadingClassName = css({
backgroundColor: "$colors$surface1",
});
-export const LoadingOverlay = ({
+export const LoadingOverlay: React.FC<
+ LoadingOverlayProps & React.HTMLAttributes
+> = ({
clientId,
loading,
className,
style,
showOpenInCodeSandbox,
...props
-}: LoadingOverlayProps &
- React.HTMLAttributes): JSX.Element | null => {
+}): JSX.Element | null => {
const classNames = useClassNames();
const {
sandpack: { runSandpack, environment },
@@ -83,6 +85,7 @@ export const LoadingOverlay = ({
className={classNames("overlay", [
classNames("error"),
absoluteClassName,
+ errorClassName,
errorBundlerClassName,
className,
])}
@@ -95,28 +98,34 @@ export const LoadingOverlay = ({
Couldn't connect to server
-
- This means sandpack cannot connect to the runtime or your network is
- having some issues. Please check the network tab in your browser and
- try again. If the problem persists, report it via{" "}
-
- email
- {" "}
- or submit an issue on{" "}
-
- GitHub.
-
-
+
+
+ This means sandpack cannot connect to the runtime or your network
+ is having some issues. Please check the network tab in your
+ browser and try again. If the problem persists, report it via{" "}
+
+ email
+ {" "}
+ or submit an issue on{" "}
+
+ GitHub.
+
+
+
-
+
ENV: {environment}
ERROR: TIME_OUT
-
+
> = (props) => (
/>
);
+export const SignInIcon = (): React.ReactElement => (
+
+ Sign in
+
+
+);
+
+export const SignOutIcon = (): React.ReactElement => (
+
+ Sign out
+
+
+);
+
export const RestartIcon = (): React.ReactElement => (
Restart script
diff --git a/sandpack-react/src/contexts/utils/useAppState.ts b/sandpack-react/src/contexts/utils/useAppState.ts
index edba3dec8..2f919a824 100644
--- a/sandpack-react/src/contexts/utils/useAppState.ts
+++ b/sandpack-react/src/contexts/utils/useAppState.ts
@@ -7,6 +7,7 @@ import { getSandpackStateFromProps } from "../../utils/sandpackUtils";
interface SandpackAppState {
editorState: "pristine" | "dirty";
+ teamId?: string;
}
type UseAppState = (
@@ -17,6 +18,7 @@ type UseAppState = (
export const useAppState: UseAppState = (props, files) => {
const [state, setState] = useState({
editorState: "pristine",
+ teamId: props.teamId,
});
const originalStateFromProps = getSandpackStateFromProps(props);
diff --git a/sandpack-react/src/contexts/utils/useClient.ts b/sandpack-react/src/contexts/utils/useClient.ts
index 0138efe29..69cd79d40 100644
--- a/sandpack-react/src/contexts/utils/useClient.ts
+++ b/sandpack-react/src/contexts/utils/useClient.ts
@@ -70,7 +70,10 @@ type UseClient = (
filesState: FilesState
) => [SandpackConfigState, UseClientOperations];
-export const useClient: UseClient = ({ options, customSetup }, filesState) => {
+export const useClient: UseClient = (
+ { options, customSetup, teamId },
+ filesState
+) => {
options ??= {};
customSetup ??= {};
@@ -150,13 +153,8 @@ export const useClient: UseClient = ({ options, customSetup }, filesState) => {
showErrorScreen: errorScreenRegisteredRef.current,
showLoadingScreen: loadingScreenRegisteredRef.current,
reactDevTools: state.reactDevTools,
- customNpmRegistries: customSetup.npmRegistries?.map(
- (config) =>
- ({
- ...config,
- proxyEnabled: false, // force
- } ?? [])
- ),
+ customNpmRegistries: customSetup?.npmRegistries,
+ teamId: teamId,
}
);
@@ -254,7 +252,7 @@ export const useClient: UseClient = ({ options, customSetup }, filesState) => {
}
if (lazyAnchorRef.current && state.initMode === "lazy") {
- // If any component registerd a lazy anchor ref component, use that for the intersection observer
+ // If any component registered a lazy anchor ref component, use that for the intersection observer
intersectionObserver.current = new IntersectionObserver((entries) => {
if (entries.some((entry) => entry.isIntersecting)) {
runSandpack();
@@ -342,7 +340,9 @@ export const useClient: UseClient = ({ options, customSetup }, filesState) => {
};
const handleMessage = (msg: SandpackMessage): void => {
- if (msg.type === "state") {
+ if (msg.type === "start") {
+ setState((prev) => ({ ...prev, error: null }));
+ } else if (msg.type === "state") {
setState((prev) => ({ ...prev, bundlerState: msg.state }));
} else if (
(msg.type === "done" && !msg.compilatonError) ||
@@ -533,7 +533,7 @@ export const useClient: UseClient = ({ options, customSetup }, filesState) => {
);
useEffect(() => {
- return function unmontClient(): void {
+ return function unmountClient(): void {
if (typeof unsubscribe.current === "function") {
unsubscribe.current();
}
diff --git a/sandpack-react/src/styles/shared.ts b/sandpack-react/src/styles/shared.ts
index 5f50f81a7..ec7bdd18e 100644
--- a/sandpack-react/src/styles/shared.ts
+++ b/sandpack-react/src/styles/shared.ts
@@ -88,10 +88,27 @@ export const absoluteClassName = css({
});
export const errorClassName = css({
- padding: "$space$4",
whiteSpace: "pre-wrap",
- fontFamily: "$font$mono",
- backgroundColor: "$colors$errorSurface",
+ padding: "$space$10",
+ backgroundColor: "$colors$surface1",
+ display: "flex",
+ gap: "$space$2",
+ flexDirection: "column",
+
+ [`.${buttonClassName}`]: {
+ width: "auto",
+ gap: "$space$2",
+ padding: "0 $space$3 0 $space$2",
+ marginTop: "$space$1",
+ },
+
+ variants: {
+ solidBg: {
+ true: {
+ backgroundColor: "$colors$errorSurface",
+ },
+ },
+ },
});
export const errorBundlerClassName = css({
@@ -113,6 +130,10 @@ export const errorMessageClassName = css({
flexDirection: "column",
gap: "$space$3",
+ variants: {
+ errorCode: { true: { fontFamily: "$font$mono" } },
+ },
+
a: {
color: "inherit",
},
diff --git a/sandpack-react/src/types.ts b/sandpack-react/src/types.ts
index 443ea4642..367f10204 100644
--- a/sandpack-react/src/types.ts
+++ b/sandpack-react/src/types.ts
@@ -75,6 +75,12 @@ export interface SandpackProps {
* of the sandbox, such as initialization mode, recompile mode, files resolver, etc.
*/
options?: SandpackOptions;
+
+ /**
+ * CodeSandbox team id: with this information, bundler can connect to CodeSandbox
+ * and unlock a few capabilities, like private dependencies.
+ */
+ teamId?: string;
}
/**
@@ -234,7 +240,7 @@ export interface SandpackSetup {
* }
* ```
*/
- npmRegistries?: Array>;
+ npmRegistries?: NpmRegistry[];
}
/**
@@ -424,6 +430,7 @@ interface SandpackRootProps<
template?: TemplateName;
customSetup?: SandpackSetup;
theme?: SandpackThemeProp;
+ teamId?: string;
}
export interface SandpackInternalOptions<
@@ -552,6 +559,7 @@ export interface SandpackState {
* otherwise, it'll return `pristine`
*/
editorState: EditorState;
+ teamId?: string;
error: SandpackError | null;
files: SandpackBundlerFiles;
environment?: SandboxEnvironment;
diff --git a/website/docs/public/private-package-dashboard.png b/website/docs/public/private-package-dashboard.png
new file mode 100644
index 0000000000000000000000000000000000000000..534260e2ebc1763ca9d4d05c22f72ef3770a41eb
GIT binary patch
literal 161057
zcmeFZXE>Z)_dbj$L69I3og_+h5k!wj(FsN`5xw``B2iL=MDHX~V)V{vL81*N(I(1}
zL<^&jF}nYrJmvQs?{j-TzaMVL!CYqMYJ0D}*167guIq)i<^w7UCJF)q0xA{dyE+5}
zWMG>(_$(=S=e6AVO#*^*vJOg0+A2y)9NM04whqoV1O&=2k_^ZUb$gkzOyb|%wkIUc
zidChP<&-WWOzR=7%f@kFXrQhW~Si0R>dF3x$(@uPQz^Zxbm_&3Cja*m$_
zAGN0wvOZ@G$b2I5oQi{*cHv$W|89)B;(6xB4R^j4J-y>A`x$m#c#eU%>$&{)5?5eLsJAaNhbU0i%-@O&te(V`i!mGHVqHxUowZzBN^87i@Va^UmV4k6#t^~_aeV-Zr$4a#iD6nBg+=dc$Q4yJi+hVL_wsf#GX%b
ztII2CjuYaD38~LN6Zk~7Lt$%wKi>K7**K5f%ZKC_*y+z9Fe$IM6fexRQCDw$kn2f&
zeW}-W?kUgt#b+XK$WGL(t0Ow6Y1^%O&L02FIwQl-l|k0zeK>KRi&=+#1eSoPnI?RW3@SPfh*lXUW*vpXqaha#RWR^$j)Mt&z;Ip<3x
z6V2MrM9Av&CB1@r)EQGo2n
zkd~;tcX+I*@5`A*K65r$+N8(l@;yIKZ%@+O`=M_YTBkqvOfx^%?Dlh=W+(8kr>3T6
zJ06UzBdS2KP9G1Bo(kuzf=>^wh6o1d_s
zC4R?2@%b6O2;u!4DrDnjbwaUErrH#J?KdizO2{%k=~vLL5FRLAy+x$?WcUYB194fn
zj5~Jw2}3S>^O>9r#GIUZ5mCQ6yPlIgj=sft?lT$r-Hx}0*GNQRc{75w&%_l(VZOM6*qwt+i5AHMt!
z_9lm2D!uRbf$BH;Hc=qe>V1pcGnYRlin8_-S9f2&O!=xqr&3)#W}u_5f}(_}xYPKD
zPwP`3tB~&xGM^8-OS{q-xS!2_;T}>PkH-v~7d)Qa
zy|VOnMR_`pmo{2YnUAaV>MD0_yih`*GJ9fTQcO~2;?qQ(qzF|m)r+c4iLuws^aG*W
zX(gI<96|9PdSth5Zs}}Ecv9|NX^cKhd#_me-e33Eb*aS0#M(sZzUzHveatpCHo7)6
z^OtSHw^-(D`+|}Xd
z2_pw1G|-z6GDsbtmQS5yzT>lHo6!_UYjH~Pf(hc<$F&r-XB-(u_eXk{la~d2V)q5G
zs#ser^YR&{o3BNg9y0AQy%P6z$Q<@BP#LNjIX5!rFo>Lj2IyceP<=@IW_VM`h0TR|
zmA>@BtB*GMU&i{r@gXNZj24ZSmlmzQ&-y3_Y0^3P=vz-+U{%yP);nwjt+rT%4HjOA
zx|(`*_v)qBADKM@J_n)R!a`xes2iw2loKpx`*&b?U}GR0%Y-G-xyww9q|7hRAsMr8u80kZZi)4Y8ryjH
ze?+F*u2>0(nA=P_9%hzl*bQNRJ1wnlhti!%I8XPY_fmpp0-`{_fV_aK09%0T=e0do
ztzHeWb+J8K=vuh2AlC0R;AZkh@babcOHKlVhRyXgRq9oykH+oy`c;uHT_Da7Cm&?G
zTWncuK!|mHD7&awKE6a8z37)Ijjk`fuSKg}IaL`QG$iX|^XM#AJyi-lUGC
z+{9%x&Ft1pi5K;lN7z@GWaW1K&vIT9uny>~P_FjB^ap!#Y&ErkA+4XCNJj%2aw4=1cv`(}$JS5jjm6tWyvSh{f?z{|r$&r6ODKR}2Cg=0W
z^hd+!Y~YaTuO7Y0XjvbZz2?d(VwBs*S@1YXpc*?V@4|SyG{*kXyA@>8myOhO;k`T|ALs%^A#^mguzZnqs7}ygymL4%=k;`PB~vXeLk5SV?T)|5<+jK*;FRWeD{S!aK^yUjjtSJ5PpGBx
zlT&*^pj-$&V
z`vzkMjCz95z_#%EpIi6aUi)O6lT32kuQ96FTS)#PNHv-~deP*C$*Vf~@#Kcpez%wz
z$2zo|@XWDKwEF|x;Pm-K;AQV+^2z}Iu9G_2k402U
zCqVDu_mEYh6()|V?ovH93j^!A%v+yd4<|p@$?zm-nY+X}tjk{XU0zwr9p*uZAZoI)
z@U#K<-s5eIm!H)I@Gn*osY;Ys%kSWOqi=*fPb}Y&j^?;pN
z_P76K+{WP5wGRw&lx$&3X(ti;dB2J_htuse5wY8(So1*nwEzU=w^xXe{4mEuBka)r
ze0$sB@$zr2we
zGsNg%bioN;U*YCQh9M)n$0GV*=lYZOSX*17jX*Mj5qbi9_ptknJToV~>A_+A4}K_E
z?y)@_nX=!3838g=D~5?7|koNdDf
zdJqIB1--aTh0jMAMrDZEC&XeHp?y{G-GEGiERasTv@uk%)zBc|1KVc_hzXepNWc~$
z_?0JQ{`dBMLSBM1f8Hk|Ac%G#ApYlfG{GzW=MDJ9@AHq>Gx1RbWZ*wq@avyT^sjG|
zQRJTa*EVr5_>4eNS4l+$yy{wc+Ss^y*}Hi^vd_dHhumG+$cupB5*PlLP(|n31~~qA
z2R%b?Lk)FlD>oM*OKZ2sHbVX`?)c*n$oflzO&1$)OAdb*XIC$2f4M7vz99{^@ox)X
z;rR0vZzs7ch8o%&N^YJu91=nzLLyh>DL6PdWIe5IrFHJ!|L5-DKe;RR-rnxg!oq%j
zenNg?LT;XR!lF`AQo{J9o)Sg+*~>E
z$F+Ry=Ho4QIGANn?U8RqMkqD3W~hh#S5jdVR0w#no?AcHuy{PvO6*UI_(vu
zvq?R=Dre=ag>;|GGRB|dRJtC|d52!d+VMP-HvPT3`v)b)2W^9`L91SaK5MJlA=7P0
zbao5Q*r~i_EU2^v7gCBiJ`NR5^%*ldF}g`aeD*xY?I#3;f3?A#_=%D@l5W|5(&(=~
z{@0#KPjbJ$IPDntFFhinI7`9vL$MzIzs^P+Irx`X@vqa+Y2VhqMMwiPsfQJ;VPP+i-GT4&KZsWGErJ
z|8cJK^wMPinv1`>FZJ7mia$Z1@lE?5=K`i8^*^TXZ&Ue8v;5ms{=#Pd_9}n1(md$pD>mQnmh&5(GS@XGzY+JP7A6Z>|z(-TkE`aa54u%7-qk
zpMK-OcB*@&GXTNBBd$d*=ME92P{Si5yDT4Rr?!*h1Nc1#vylMVAsJ?unuh^j_|3l=
z9Ufv3!ZflQw--IyWb86M?i+<*N23MeUA|jJvqq_7PW8X34MbLK^la{*2yI3o2CQ#?
zH)94(Y}0I#2dl#NhjaQmX%wacrq(t27__A36GLC60yukRqprTCG}Cv&Aq&~M3@z@n
z&2SmRUr&mur;3qdQNHx6^0wps`3DO75AoMi9(II=OD$&V+UA7pI95ip1%7mH_!%{C
z(6$e0D@=QE+Qq4J;3w#TRf-7LJ5`kY$sQs_iCQWz^mp>72Kv-XPdh$wT?Am@%c>twDfP?6PYy9DJlX#5Wp{r(n?F8S
z7p|Z3RNGrrIFW*;1TCpq7+*4c6h7$17BKgA>(dz;Z??t3U$2DCkKkxIOuyK?WZRxb
zBX-QB_=vgcQ5>0?P^0y{*i0}6a>;Kxz|Lm)h)FJ6`U`iLE6o(8-8Q0IoDYOdIeSeJYtO93B%sE=I%j#~#
z%q3_gTO2JLC>6{rvRE8UAbkt$GCNpi>XLE2>S6;UX<4`)h2zb*!C8jpA0#%wK8s2`
zTjxySH})ixyRQkS;?NzG!c$U0e~cD?VVa!>9CmvDf}_~TcCebh25+U9$G20OAh
z$qikBA;*g>K#R+k8~c^Hxt%8h(WUS%W;fG??4Y%=!fXD!6UbKmBQ*li_`015r<4RO
z`NrzsFL<&IcgF2+-CvlN2_cexRgKtMu|G@8cVt>Y^hJ*#064^
z@}1;V)H#}(;dE7nOI6B?yh~)aq(V@|;
zb8_st`Gvvn(#bxu&0OEqaOn282Wo>UnKP4aZ6O!={4Uu~1^j*&-4}YWDrrQDb)>yp*0_*v)6ME9
zz+X~vM=qepWx865E$4W<5U#5w2N{?QJ2@(LDP~xaC@sXnG;$Aq(u6gXRQ2)A-xCge
zSbh(RlseiThBLHoL~b?B9F;BJ;HEugv2F5+xGP#dEg)6_gMfY>r*bDg%Wt~za1Rm2
zw&_KCi)%#L5Lxn>$(4ls-44ocCjP5i!`LNy?m3wsPtHKk7tToQl-3PMOeUhsn#zm?
zxGfHUF~FCL%cs{JMw|6wSc6t7=f5h^u=qyO8%y}-_kZ02M)Yd9eQRo`^O?h-D)s7h#yC9?05eN45DBoh}NmT#k
zg?1LN{)en7k}XRbodSF1$?13>t^eL2BQP>?udc?IQjkGRp0J2Q`Os}4-vr&Vi0jF
zG!bIp_eFYhk1rSJW5fo3<7zlDIx5M_o!+S3*KWZdYG1ncBrws?s+xQDa=pH86(l)o
zNp3o6{B$&;s>PV^SRPxXg-sXltgWJ-)e!xr6W_lu1voPSCw^gDZA^t78!Av!}x&n=+r^RPPq$})(IyGC%I~+7(RXh
zy;0TFG`b#&Yl29=XFvGf4IQ=Xucy8dEoX+x@4RO
zoA;NCi^~Mo8yB;;x)qKqrS*-%b|g>I1xM4Q?ABTj))wZLL%ZT*EKr^?v`@waQF+Jf
zC&z9_6x96Fw4Mj|?Qd;qB5(iEfdT
zAvp(^?Nzt1CMchJs#*QdryY8<1!$D5T0@%ZWQHrOXxaRx0&!1j4u5Hlj?bXYR0k}7
zNa6tHWZDzRSpQdv7#?pmpFMY1y8*<_$J5WjIIi@I6njKO_*LLl~F21
z{m3gYL_yK`X}#^}FZSb&Xej?@X1C@_bLaTUdzXyzm^w?PVl9cvq?4p0HD
zik2;FnP_rex*t1^ZXswBH~<5CHx@I!d~JCS`wd@_=N;5Oqn7^2#9!U0-bEz4QqgIQ
z2>)`)q$F>0JjP+X7)wcEfrT0*Ih8fqDnAPA7wt}Teqf@;o8}>kVbraU;YureDSir$
z5}76;y}~Pduu={0<1e3*x26HqGpO^
zbrX(R_XYuQ=~(2hH&N{74T8m^qj>z(?b3
zEwzob++x?FxhW8eiyt*+kNIX;CA=H}@vgO687d@JYQdbCyRnZhFYnr97P@Q(fOVe=
zPu9(dYnI-F8Fh6lRq$jym{B6ac`pWSw3F4#<%`L^v*z>j3Wk}q<%*!XZJiOYdAXWi
z?u-!{6Sou-*G6d5xBYIyqN)MWHJrSoSsLSMcFRP28K-C|^viCg1txd6(K%}PY)QxK
znjpi8uE*HQ&<%*j!0mTIa!W5oem;Vk$*wibLO*>7N~`NGQq2HiTc#RmX!Y9jV71%vkg5rTODy4E{XF6zoVYv^$0)2=TRoeGi#k%Vd6CbsUCMJ=OTl($Y0JcOygL?M^
zQY=CPEUsKO+l;ve9G^{dRJY@-_mg-1yRqrFQbv9
zoV@CfvN4bH)<1Y5$tK^693q$l9|G(-o~G1Jsa<
zE%f#MVI4*Pb`l2f?0EO6_mE_
zFGFk|c|Go^eH&An?0QL8L%-g;bfP%0I9oxgeo6kO)rGND7`hBCHEkvr=IPpWG$^y)
z98chLQ_xJSz*saX#(|t!%>1#JbNd>W>W=m;<6>e5@?Xni>w86C`*)u$vDLaRsY;rC
zi!JbpP6%*q%dKcC9`^PK-2E9Hx4%1L?MW75mMhwN~%1=
zv64!1ssc0eEoKuLFy!T@W0tlIgHa)mesd5@
zF{j#fX+aV-7+dGlW}7`D%&VSKJzfqw0^q&`dKr%v#}cMagJR@dB4y7y)>wS!Z$coNan4rRGt@MgE)A92z>@p@LjlI9N1L(j`2LJ!5GtZ5oqR?kZy33Qon2T3IqSEo
zgS93
zeCF=S$7q)wu)v8bDS(f%4EH(|c~9A-m`Q7CL|S$QIXgW&PtTp#I-hJZ;p-8~EUYy(*l1B_xdu3-5Jc;N%XYsu*b^JbU^i3cCY
zAB2MK%~(MhU<8l_OBr?N92lh
z&+#biso=_L<+I&d_n_MK=D8Ny{zED}5LEvdoEn+r)M8pbsV67VB*-enn`sp*1${Z{
z-8ngSgVet3w|b=Y*h$9BVS&rT;nVWHhD(=`ik5y1QC0!hsO7f5dX7ANP+N9Gu@j&9
zO=HXalJJqor*Vx@OW|nyjgTCVr}pKHh)9nqki17XcsGs4=`#9*j4BDAYpq|7hYPm_
zH*R!Lq6=Ryt>W5Fj<&LK&4oT$Pdjw>Ng}0$q~v`j?LWMZ@-{KnV((qWCx>IeT@SwR
zB#AU~Pd2i>PR8c{Xxw{PLk8j0l;GHj&-vyvy#|ZAAi)c1b`zJxvrb{8V`RcTSm_H6
zx`|zM-?N79{+zGqq((O`1KX&}4BcP4N^w><%NvLCGcaQYKy{|H>$19tPW=lu`Z4PA
zz|mq=Q;8|}&Z^(GOew;aYBl2r}loICHe-S6}u(
z`?~^fe`>^lYbYJPh4;66rP)We_;k}|KFMHB;6{9Ih54?ATcEBF3(_L&2#;9s2i6^j
zVFqQiZU{X_)Aj##I!8z}-0-P^nqmgmic8Wv9$f{iBzvWDaM@?1o{?uA#J^H@UspQS
zymUc`%D@gV<)oMt-`Ura`c_Tzje9r%kQy7mU$e?1r-S}#-+r}>|%0Gf_uDa
zPK$j0^mx^}~MYq(&?W*MfiD{Dr(Z60K;#?O)7XUzj54YUrXF5p!uWE$+
zWST_&+F6PNvPi}gv7`VW8SIEI5C7*Zz&fZB{fMD6t_K+>dU34YXq{F~;33J=fN~+=
zsIVo=5(=c>A3dY$8@ZJd)m(9^3y2}<^3iVSzX4Bl3pmlnwSq_~jm3ciFvLqw7BKh*T%hMl-kTtK-?@?GW&09Yss@7W%#sI3o
zO?hdhITWNx$LZ#$I_Sd4@i$=N*5V^I_eM!N`sY8%RrAG7<#mDPjgEvEms^(AKzS*M7cx8b%>Jw^O88XdV
zKf)6MHf={c%vJq&&r#4d=hKRrg_l)yPyoQOrv|aviwirndag0~EC%8af~T)7phf?I
z%w)^fuL(2(zBM|=68APPI4?73tr2^rbDH}(44)nXR5dImSq3ob7Kn&-^7S%3{Q*fB
z@0wMUnfu{Ne2%D8MUR!%RNy
z@YaRlbJfMEAvIyM*1Z9@kJDc@P)ml_nyGpLwO)cdPN_XUGbJJ1$>1}!g|ws>(V9*M4Lias^2TsR9fBX)hN;16#i?729?Mlu5(;C_Ie}$D^{rE5L=!K;6YIdbtQL{<>&j
z`YkPMBe0h%MIcUY2k@B6Ynk3dDmGa@V@m?*?l(~`v3VM3Ma#kPS3)p*P{tb8fXj2Q<2XTo`c9)QoC3*T<6#%p386e4r55tT5?Z4MDhMmxKTP
zdN;qF>b5W8bGi+>j%xy{yV~`7^lKoun8#vp_CS8OohI3vPYMv@!rQl*P3d!3uvh?3Mh!I#?NMX85}%$8pP8fz=LzBxZIQ^7^iav=od
z_PpRyP1p2S0VC`)?%qjt;2U%Ra)f4SEdXTF_8mq=)wx#KL3M8Mrr)XKNq_lyuE<8t
z;T#XVTYjgKvzr5=vh-Nwr+Jst0ibWqZ)pDDx7h20LIvI_-Fa@?1gcP~U3E@QfRaF5
z`}y!rFP@j-Un<+imp(2s4T2>%df8=ZO(aRJC_+tq0)TfhYk`IrO!V9hY7E(o!ey>Y
zfj7;Z3LcASGS-WXno61DL7NJ))JIuQf#;o0*BTnBZ)B4Mb-el0qI%w+>rG$d+b}7M
zWu&To+QGoik7qQ=qxvSLG1ksa!ofc&6TDxi@pWasD!LyG3Um*%%HtG{{V`loQx?{5
z@2Pf4I=lMC+>n^T=LLMvn*lE8E9cY-UTgP1OHn-lN`vOThB>IDI@H1N(Jf9hsA}A;
zU(Y#FupLSYjIqW3P)bw@-)wxr`&&75xS6mpl`js{O;S5R0ON}$SIvt-cH#%cf{!8K!ua0$sfin2Z#z)=n;2e{=UFFH&_O%3Ov=H
zkDu?Ev1hTZYt54~ipAAr+N?@Tn6T&fEl;5i(oG3g|xw
z7BEC7=#qwCFXt0=H5rGp&?h;Qq3Zy13Nb2F%ov8F5QE>t14>C4Oe=!)XS$1wr$CA0
z0oK^a5=yEizc;s4AlXv1xG#2T=HUa@Q7?0^$IuCC`Q0D!Wd=?6?_uyktot
z#|xd^V22v@RW98;>%-pcFu<25=@AvYmf-F8@_z9%lekj$kcNdx^!r;k
zZk&7uZg_pb5TL(ecdNC=#WGl3|E>q9#5@pRLwx|?z8R_TQ2)&=HXYeqz{D=p&5!ae
zcq}yg4dga${6#CwuVx`Zwk$C33+a=GYNLiBuGTT1-+DV3mpfgnC*SofyLL|P2Ozin
zUc)Hi`q*}pY-^VZ(Y>B8<4pH(*s$9qv5ki0B4_W-y!h!3^CY)wk1a8GAz
zD9=(%y7Y72e#CdydgY6rS8QEA{Hxv?AnYaBgE!h2uHjBei3!3l5h_|z#`OLh|-`}$U!9!MIUdDuXZ@LHbY25McNB%%WwQ)ZgQ1~$k(@3)@)1_2wY<{s8bLyAyFr&>_-#c
z$RG%>WcUscYaf6SQr2Ja&|usuPOcAtCk5+3Oglb3t7<1@P6T7#)DK9%EF*mA1+E>^
z2Y?;?^r%D-ehid#$MOrb93qj#@(1IHa1C`V{y)NjhW%7^-#)m9gCD8)o_tEAO9ja}T>fB1_w~cw;6K!f
zP!J$dFh-G!r;I^3`E{UidlQY)q)YWB9s?N>@c+??QVXe8ddyf**llG2lRQ7=g%CVB
zTvT{~HKjZyG!PQy18E-#@!7*}5?cTXtMG+u!TPDHlA0k^8vr-ajT-oP)`&;5^C=eQ
zgWy8(Sa!#B@a`!!ga4d&K8ifGA;9ZbgW{R&Xj?=SWAO$aO*euJuWwjOLGEIGm)dC(
ziuQ}=>8aN$Ywb?qo&H$AG0+T_-n2bcTm$yKYzpk~2b)RI{nOS9*gF?;Tl>4J73nDp
z63&Xbjk|(dzJm|hyM1|r^KPZL&x92^>6rbO6BTrfc7_p{Tt+;!fySY
zb^M)|{hhg@nJs_3J9{WJm4puY`ggG5wQ*S~C`!$y=pq<81%M{)NA|E;9PGBjN&{+~whI24!(LV8|s!
zM^~{oc{cFP63v*b^^!U?Am;^|K;iUbohYH@1kfmIkC}Q6sANx?o?H`SrUQC~Fuiv(
zMTObMLO|8gmHEz3Vf!6Tk`j$vjhF|JlnUYtOpBZLYt6H)>%4Y3A-;>(0l(`d1$qXg
z;~sb|0*R1dHR$K4(CUpN7HXV}_XMi3Bz&__r;vi6;G3^_o%^b@jyw`yMh8r~SSaz<
zY!Xnv`QK&Etk?hwq5!-g1p34Mt`^hR$YfK`-l|_O`SpWv_|C)NRt+bGLq;$VxrNcF
zEB{rXxNJwHE65v+@A(=t4_c+x65?C<^;qbJ<8Z+zyy9;GRDvC6X&26Uj_UcnsRx}I
z_yz#y&t$eGPdgSULyyoF!sM%X@grW!@2CAoVdes~0`c?rZ*X#2c67irUIPVEsh%?{
zC~4TNx8T?$b4Y;BCkWrZBcl+g{AjB>=cr^lU$iL%lQA^&!{h=kKt4wkn2y8Rkqld%M@QBz-_-xY?2ppvQymq5PEPOC
zZ7mzL1)lBr!eC*#2IK*p!?J*m9%8lW=%~RH>=1@vx({1%|9Td{@Zi|%)nsoViY3|>
zbPG`18_qet`JRDEL%RW(iq=r=VoCL&@g*bcw^iFiYAIm)O7eSHYWn?1w+dc*dhZ
z69$;WAR~Om02sr~-l`++xySojp<4-qXq)lMvlJ&A(F%#6MDaL2MH5%{rx{CxhxfBs3h~-l(DZb19yDg9U&+Y8{D`2_{5V$X=<)J=imkT)$q_CE
zEHH;2%K4Dp_>|_nxudkQP>Y?a6bMFlFM}g2FNa1+Uz&sFlCk}}t(OMP@29{Lo5%O}
z-E1_NwPY?-xy5|%zap2&JK_RW?bOPr(|CCszPkzXMij_V^xHq<2kjvQDC4h+QLU`p
zrKac%15)V3h`_53AIK^2tpQtjA*fI7pEeZ8??0sa4Ihrt;5$G>8<4ZtZ`TKW&a|oX
z_XB*N70;5bkHFIoya;w4TOJlNgG9uU;ahFu5z)lLZo#w6@VjM0%U!hezOQ1AW^J`o
zKcRul-#O%MaM*nJ8S=T|8)LTeSO5CK3Nd!!MYQw5)_5C5VnCO+cptqaYn-{SG?Z9vT%)w&LB!NEz@I
zCZmx*)j+-d2Ix6U!AqvN2(?`4ZpYSuVqGv-l8KR4c1js@b++l@z^=nphem(knJ80Y
z%#yLz3MWAIkmzlLuaM)+?qxUOwZrf{=B7}yO6q#&F1iw>98jaFrHG*=&4)LG>gzmY
zUVrD0`~{Q)-4I7=l0iNUm5rrms_}YHR%DC{7C8Fm_0ZS#X#-^s@PbQ&S-aNVFTz6j
zG8g3DP1F2IL$XL=|8~kgpm5M-tTd>(KdOURd^g-W
z24=Sq60bVY96DWX^q}s8JOaa*gea}Sn@@t?6QCe0u)!Btrx$B2aZYoaugtgKZ$(Kq
zzoT#;HghnZo>c(qlRh8{Hj!I9t_FTiFQF>9t502KHbx8@QpzTa2|zK1D+g25z&a?GGr4!pF?1R)Zsc0D
zl`q7c$pG??=84$DrP|=^6VTvPwSPQdXC&Xf6)=R_l1ueL+<*&kS&1yj{K9uJqvQOe
z4ul-b6lN6n*m|W>)_a`&TG=tIdSR{-DeFE8laTVOs83zj4iYextI_vAjCVELVhq0s
zcJq{9h;BA-OLplyAspIj%vzksiV5b38(B<0!}_^RO8B*P8GiREAGZ3hxJpQbBGQ%R
z?Z3BcnyOjcUtyAj;=HGSRRKxjDg=4>EJ;W_uw2oF{j8MgDlhcnbFB{02lnP$s$OdvnqKeB~
z1EugiBB=diT${x-=zrQdr;k1=6ZW40(jc1wabyXPpKB9xrX2lkUj=W`aG)5pkn8`l
zkU8n&L>fts)RbARSw2)&POWgih8M``W7&F0Hd%eYzoU47X)a=T8YnT_;M+PELJnuy%jHc1g>F&vXliPw
z&ZZ$oYci_?5PtO$ccr2|UFR~c?FL@AR~wREgbTbqD()jbKMu(;@R#AT*lhT;U6*(@FSdTtA^7hk3kHR
z_cPgrG!idF$9Hu?`CbGz(N;;U(w+xGKqDo-8=jW1HEs#`n5C+a5Yo(eA+$Q)ric3V
zFj>pfX0Ji1Lc0Awy$RrH4=$)C=_y8dZUyz$)_YXDwivIv$aZC1NC`|N%PO(*cw%ro
zkZg$6oz)$$oF5GmDNm6Qf7YRAbOelBxF}aW2?Zbp#O?8-1jCf>o_@}&w71YKVw=X)
zY@CVloo9MuW&l`>&aNpGUG7VL94A@vJeUTby-Ri>@gp3|f7`9qaR$5y)xmxlHC0vS~e0-y}<=em+xg4
z&D0kO^wY4wsJ231TOGCbOJmG(FpXs*{Q+6YR&T7nIbR*`Vkr(@7+LR@RXAbjJzhAW
zlQPFT&2=jk1-g=MW6@x^4?kVaX)n4}W`;hY8$tJBw&Vxmt_9XEIw7613jRVgU{9C&
zOVJW)>=}N8K|&X+XK_wl(vJLS$hCR13(A-4a#c)@K?Fej*+JoLFAs&JvyJYC^?Lo+
zZuXLN)tEE<^1N^pU8L0PEtyIg)A&3snKG~OP4-to!QpCD;}4|sfCobmLT*mZv
z!SYkf?35#|NS!-Pw#>a>`UCg=7-wT@nv15ml@J9|kiniVaU_Wvcm)$DhUauXF&%pJ
z1rt{p0_n`T)O$SOjY(xfLABQ}&`*OTY4qL}@!f#7nxisrMhrpl
zf@&j@CGrv4kKSa=M!rC@TuL-LrM0nzmnqYw+8FbF8OmSeD=yI?@v7ak2ikDzqMPtV
z?T&ZE<>TGbk9s8R6mH0^0;$KEvw`@}nXvm}_kZG!&3>jL(hTRZIIxPAy~JI~d6yB>
zCGwWmMDR>xdBA{^aoESV(4G<*!JNXPI+i@V4e}v8WAnansh%sdmCJjw$j!dJ_}p89i|#@K$akLNn=@fu
z(!Bk91{QAy1JXCQ)A5a!qXtATOt%L~_Vl*qSbmRgWy8Om#1tpJT9+DJioz*epfA`G
z4_BOs25SEJ*5kwqW0g4F#UnpENi;ZU-J!&%5W@bvyrWxSP1O@%VM*k2-t3FQ>f}ur(hhZjOdwOe&&CBNU3cNi5Nr>Yb
zbIwNvi%o(v9(!eQnu{<*+|SnfbVAeV;g;5Dor|eBm#6*2jwma+g%dKPf|(N<+8^_#
zaa!^x=`)?3E>_i)}R58*T=+ph$77
z*A}diAd@22`=Y*qXC8XUbVUZm08f@fH0>MW%$J?-F4
z+yYO0sf5{QA3R_Su!f{19}Gw&1D!o8Goxr%_237Y!Y!3I)BLhI_
zxMev(>9Og6pC*iCwT#1U=%&(_;Aro-YUH`&)?;kB!TQ?;Ow+n#3L@y;+Co!MBMTY^
ztw7>DTY`xi^xC+b`%~)&zIuSDr?=1b9PUNiTrXuU=d!5RrJ+%gjEGtZGjTHMcArdT
z=gm_?)p%2x8(hZ)W*z>%ZpN`F_jdW~nulD5q9x2=RdUU9`oW%psxj=khL2bE>qs-N
zkiQafU)Fr|k|eT`patm8A*dg<5aOHs)Lx3xkf$xiUg{sc6Ov!10adrMy3J!_Xl=Tg
zXRK|=z{_~OSuCYs^>luUIZUiouWRQ3%;vX%#-BpAzL$d62HoKj!0Xd3W!IL93l1ur
z9CBLajUq14AFEw~+yYNnSWYtC)l6wb{oKG%Q4FIjo=#@+J}!{XnP{WulywbE00T!
zq9sw}AqR(`nNUGT$-yo}EP782gq9utS*F-IENyGvFDXThF1D32=e{`3Eu~jA#BeEL
zvQjDr`i0DaAhGpQZ%H$Q=x$DlfyMtQ5x~ywpfiMF9+P+cu5&KbZZRZ<
z9havui1TT4>2GE!o?2+uvYBxg%sKF3$V0IWUDa^5OGEsYihMMIWD;_!`Mqk_Uu^(sq8}xV;zzZV<}_F
z{(U@qzhBYkoX_j?{R7Sq=XP`J%*^w8Uf1(^U619yu=cTiJ3+5LdslC`Akd=QGtLz%
z!`JTirEkyNy{fb*rzMmyuhJ)Do5{-T4K&R|ntYv}O*Dq>q6h3sRGLQ2_2l2R8d%(K
zFC42H#*C~U?*CE!lk5^5`%Sc2ebykOJ8f?a_3OM>m+Yi1C0n8+Vu?7_F*(&Z?CRb#s$}<#YeE4wU&-wwF%!7X-U`
zwxOu)yL9l`z&g9OMSIfX$aC0oPq<#9h#1~VJLvdagd(7(rqW(J*JE!aC(a^AeG=nM
zRle8_WgJ6+Ryj43il;aV^@v^9uzzC!UqsgT?&!qZuTX5t=3|;F0_~y!@}P87e@T8i
zbnGvN0?6D)nv}41
zK2Qw2pU+TpDt?_H_(!RJ8XL{~vdWn#<79zNjU$RxO?6hRwCvq)TPN)0Ty#sER3)q5
z6*zg^1zEalPZ5Gc*k@c?6+I&n8^U?*;Q|VEJBs6SegPjF^Y9I`0P>Mw8?BT0F>G@*
zJ#W{l_T^+5lA;Z<((=So2vWn8%jEW(+!2Y+`>o{&u&{@jcNZ;xq4x&`
zo89vU;a-=w*q4Wmecwx6fo8?3_5zof{q+?xjoRZEkUD02{SMktUcWWat=xxp{=s5i
zk+-2&kNsgS)*A^^gtWymXEA%N5sqN}W&yrx^6i-vDJVz?P?kmxMbGj)d&p)1HA4_WHU0o%C9
zr&QKK0fC5f#k^;3K0SZ`Q9ck=QV^nQT*^#oRG048e%FWk*EKo?B&KVKN3#V$$RLbi
zVC+ezUxoAh{n-y=q4fR?-yCwvx)=|dA9qlJC)W6^I^P
zDdA?LCce(h6)=tGvb^H@v}?p^OE3ANU0Px8N*D>@s5IRTWOy)kr_v#obaC`H2;>aH
zbn5z)97H7>o=gW>Ivv#XGpVhbs&1fRrY<7Hgm==2>Ui~FP`hrZEbEVUrz?8FJ0yFf
zf^?hj+CungpfOAH9^x%r~lbG6Q~04`rRpK+ymfJD<9uKm5Y}9*G&_Kk(rnW3$Z2O1d<>iWF{qHCghWVv(8}{_ckJ-hO!z<{$vBoQKU{D*`
zsfog;*msmR{aNx4?1#kQN@fTK4gBZaCa$29HIGKU!kVI>_fe(
zIe^+i0`mQt`xdB@%Yxe6GYz(B$4Y8UVrE#A$Mmu$pJjRQS9`OFmUcwsWRGQS@^Fsi
z<{dw9cwrFcURS?q;^qytj}cFMMh^)UL216{er>3|Egx`~v>Ux3s(E!ia(iuwrWJ^v
zjr&=!CY+i|F8Nv1b_IpB>pclese7|dInmy9X=cVu?qT})az|@R{*f?5FVS7OFFn<+
z(L;bjhu3c%=!X8$HUGQ1b`B4!7R5FFW1F*``f+1l+jWcxhc4yDS3shNg=%dU(0Ahw
zLB9XSB7x}$o~u!<=p$$rIPE77AKZBh%4-C9txI{$qt=D;>Y{>1Y-+(yY?NxyiXbn=
zPh~-gG-WZeQfO@qJGJ5&OrGj+cb~T{*&TGpeM{|`*x4Wcx`Nlj7x=A$SbC>Q3zlvK
zn)MD2uVH{en|qA1P5rOL*L`a_uhTn*uz%|p-8(Df%g4w}W;vsk>;TQXf*@aQdkw*5
zq)XHOZqjJX;#OWvBSL{66U_FWw6r4y>ZUQZ#;couM)dFkU9rkxNModZadE}!y3ot$
zlco~nOt;gb202h%(pT|UObcsuH)uP+Tv)eD!RsZQS~D%d-udH2{od`$OlU3*92VAv
zfbSMJ=r!M&QBqoVb7%7sf5cN2{+tW@>DonzmAnRN+^-X2Ax18<)4ym!2F8Npb&4*U
zzrs_=%;v3=eHTR}$WmUVRWr2BzL7XN;-at$;%wJ7_l0LEXvKwhOmwu`T2+5j@c_A|
zd8*kO(~S3Lri54Cw?mX)9SNRHw6um-_9`M-h^1$nEq?aoo6~5N;1yB9kpucRErcC^
z(C+d>Xd3yfsLvfUOPTjf9GhwxC}GSrGJV;go|$!tIx*%P6C$Lrss2W_6~kOJ^eqgZ
z7OJVtKWFH3+)0{deP%sgB3_|iS|JoubJDa4fB4gYUY^ARq)Ojzab+czkCmC6eYHQx
z-+&x4hTMmV=teL8jLQ47C|^Lv`R`8o@HH1
zak^+C@g?!W?lGqvT%z#cO#9Raq=&~fC?L_(wsSkJWYj@)zm1iSk(YA{V|w(rDFvk4
zq+BR2F!&Vz%+a9-SVuoa6~{&wGU}FIXF?_VCYPc*T}OTnNPu-f_r$RQ(V`nO@!k}|
zp(xhVwrxAj9SL;1pyiqt*<^t_*HFgM%E-vgf20k`f66PSIiJN!G7QG-FAW=%Z2gpN
zIDa`Z0c1*T9LtkvhK;U9<)%NGfzY69D;0gwGaPJDLRe
zkf&TzaHy3)2Mi7us=@x*bLN1{%3Qnb-*fTv*HN>MCC&cZ@n8>>^|hyXVRkZ|W!5c=<}QoUE8D$eum2
z^%RB0?)BS0xsEAy!#wFAJlVyQ*&Wm9y}Vw%;n&P!oy5EMM)RFP(Pyt9&=H^!HXQpFKL&Pft(ihDN9SOPMyf=JzHG-L&9bO6nmS
z3~R-0q|}ABK)s)|3!q6|cMUCrHipaOyq-~Y6RNf&`&nKGO+)}%ZFL~Vi
zgIGC5D8aj}4>u$VD-qN3v{P3Wi>(U^v8T@?ieF<}#esXfcEWUu+`nTm^Mx=)Bt=u0
z@)Yke39=wbfr-$gmgb7^wPNTWX8amG}
z2)0_-o7f2hFB%D3E|Fl){4~pEJ
z2JM`k;Ey3X4^fR;nuD(biKY%s0G4lFUHM}YUs3MHM*nG1F7|y6HZw*
zPU!})?7}@^liwZe+TS|$C8VBg^vEw2e~`~dnYCQ$h7y5+)aS>XX^$ADa(7X#$+2Qi
zM<`g;9C1YL&v33V5*1R^A5KZm<-Ha&+M3rDU2|sO;z>8A3uFNW!P>bK2T_tKsb*@2
zRW+i9Xt-w|1v7OvMUAF@Lka8oTo-@?>3p?pg9vex5JiN%KNQzN8S99Jq=H&s_)<^m
z+NXuyhTxMTY6D26VMX(g*}EB#1p6@DrM(MUKFAeOL-1~U#*u&GO?Jg$?{5z{v<)gH
z?$ls3qOvfw_&~+JbcQK+FCB~iyx@iSfNOmT(7Cc_$Z%YB^^q{^a!QUptpIHKNrWj!
zX-)wBL%&d|>$-vop$ucRt`^F)RLInldokd7D$-W%1v`5C(z8meYe$qFi+k$OnWcfY
zQfAt-Q^8tpAxDK-<{b8ku&gi^w)^VS)oZi67$r7RfhQ~2mXciB4E*EF64f)2J8DuN
zqr@-h2~MNsC;|~)qq|Q(HxU#8#{Ab1yUVmgxP;ekHP41bt$f42tJZNajU<8G9|Dd+`?o#3x69P(l#!Bd~z-4^?R
zfu4zf_$F#Tn_*2<&8*MW3Sq^nR399-V?8W<%ri}ZItOAV*Y>NsRgBbZb5j`ciXG{o
z#0Nq0;V}&QA?b$46F3&$UPw!)CHec&r${Zhj*Q)s4%oL??>Cot0wTCW!$@
zc`Zl5l+S`Arh4)tT37lE1Y`^!RE=v@mAdy1XfHxp`?P>7U|@OEpimfCEXH+}mJJh-YCO-}A0O|K--RzTb{eRa>X
zsb0@{iK0B2&h+>ny$Ly>u2?>T(XkKH|J$*#nT~V+K~mytH($&fyAF3-<7#UCmbU!K
zljW!e{|fE>WR@n;Oq~Y*jxz6)`#`vI&*(INJI9Kipbfrt7ywvf#Ww_xqhqM|UW}Y;
zR&8|uDcyGMKBYlINYJ&pVGufY9hRw8$}tdn8m4r~>9Yf@2K%`Jd&tO#N0JwHG}bz?
zM5WV;4{GOJ$L_MZkDT)mbf4dzj;wW4h|?Y1Q2_zU4}5M`DWmYzJU!oR@TN3>{nc?$
zKS%VdFu0}cPp7Xvfd;2cx}9z*3o0^s;qAE+?#%RymkvX^Lp*)F)F^4;%!onB{>;*w
zHcbsHPId0f-)r_jF`xID@rwn{$0LWCxhoqjluPVXRrczy@jj0hPV~WF&^VY@);#vz
zY^jB7TrI+$c7xmyJd!B9Ka6!p&gyvTeCm?Kh=aTWO{$&Zpf>CkU72OnFmkaxMJur1
zh7&5&p56z;zj?pGPJQw$pI=-)(vWzYfBaz&3+*480AgFJ`JsbfeABr3VirB7_(#Ii
zdr4Ld^sOJzdf7+$Nm^DRl}F#|37!CkHpL-FIKq`;avnB?<}KedIQKI+Upr4gom3Dh
z)INFdVb3GKz~YZlCzG|$OY{KQ_`0)rw4lr*eE_H^huw@--+yaPRA4FeWZKP_jf+U}
z)%Nk#xty%Y+VWV?$qUo2H0%1_%`M5>xXSI+bT`t9q^S`#QTN6RM2;^_ViA4EAw)jK
zxnil==Ok~V%gb&-K~4uTN;1oBN=%=ekfp9w5Ot^PAqHt&rhgNi
zdbcRb9nmwo`;A>QjLcmGYo4Y-LUgko03E3_zjdKGeEW7&YzTk<>D2gig=S2HXBN*9
zm7_g#=fl4rVMZ&^eC}(H4;dM}HJbA2`(xply1bBw^SrK5>nwuC=C?jZKO@(o^_|U73Id80J-T0X
zF}Gjf?I-Y7(^_3KCiBGcR*uf+uuQME?&Dh1kN9|Mt>@X=8qP;+R5o|-&FPAqg^Ko@
zKC7-Gr0>H%hf_$?6@Rr0uX#kR9gfNn{pd7jR76~>9y+s7Q82DBA{EwuYHSs~l*i$c
zC$}}>@5+lee$dgRd2jwGs@czY^rO0ONqm>tQsdY6MP)+*=6L~M8@5&Y_cDI|a){}f
zS@f5Hhi(7NuP`0}sRWi)ITwHWZM{4p&b7JnCS>|X<|Kk1J_!-hsCV*XZI9s#-Fn(R
zwc|TW4fS+gTfP;NR>gqkpZT5Gho=9`(yu%MzdUlVcL0ofJbY1I3rQR+uQFC5K2Cw;
zA$UCG(NMYZy@-Sl8iBOhn+r4nf(5J(-PUBa&Y~$r0k1u)MdPoM{TrEay6WN`@+V2R
znwAca(*5I|2&(|eoqw}e>?YrZW3S<07w1^~_^4WK4urn!1VKGnWN6r-L7*c8P(MVa
z!?xO0?`>uf@x_d;j;Yx_HEPDElDY*h2?6{(CfDWjV;s2+ia(g1}55VR-Z3%izer@O#4jR8`bug>3T0o>kgYJ}jPXC6YD??Q65V`jhEmlD)Uj
z<6LN(Yc8^z{Da+x`h!_#d*T65{4`Uy{Q04;9~Ezq6Nl@xQt`9aMxH-qz<7`Twv`lKC$~
zJ!?!4atNGvNe2H9OQ@;8muc4j#djZALIr(Nbp;WS|J>r=|A0yPua;2%PRc*b-oKOb
z@1*?C`}^Y><
zPP2=FQrXWBl9xo#ag(~AFZkaaJ}YPFf!Y#3oK-q$4XT$x2tF;o?@>ze?AiN2q40iw
zBw3c2{}%Qi{Z>K8umgb-?QBe%QXD`?4@&!Xj|WWrom#if6{~!_&CF>4d;_IJ(kCz)
zmL~?zPKL()bE5h4%?Nm1nW%JN4zL2zeqgs%wXOenq}uxL{q5~B7N$d-<@!7L$MrQV
z#RiP+N(leu=l33b|Ej8di$An!Z{-2KsYK;(OR%x_IHUUs@W)oGAU-$mob9z^JI74o
z*4f$j;{ksg$c8cct}*@aS(^fl;V^kwM&`NAErNefJJ$bYrygWomL^MouMPalxsD3^
zfso&^GCsAx{>z0c6Cr7OaG=m<<1PH3iO+ekl|51w^ErHd0RQJl=(qhlq4W-)HIH
zH}2nk>EEsL|L1{{yI0K$46cMC?|>G#pkKqCUH{jU)prXI$i61&FVi(kzFea;6nbMx%7JE*9
z?KgTk>f)y>>h79(pbsn2e79QE-Od}VnHTNJ
ze@1GLIfE<_C!b-EfXEcuGuzCCz3~EZFsM;dH*{{lMg+jDd$z5_bS5}>ia
zrqMG){ld6ieq~ghgJri%&pd)Sn|4^~vOS!=foUe(O@}A~FfbsfkSoVpQ^nbgNjcXx
zNK_k}fU@t%S9zB|{Sgv*3^MTXuk+wv8jVtq_HpaAW2i*@jf;#9jnyFT3bda-fTm4L
zU{ZOgc3~1wjzsuRe-3P&btL(2v$(6Ajq)K`F>LquC+*7TAUM!mB0
z#mxf2i0`>X!cy-@wM4LvM?GmyYG}3$G*0>}5Nm*Fpxl?b)t+Z>jRkloQKx)5;?`=B
z&r*@;Qax1%gfBX2c6*?Cm&e#@Zcv9HL8QPgsMJ;>sRJ)Uv5YemQ#3jE!BD{DR=Li`
z_DPZeScq>8pZ$^~+@5>{(Ik)nTTTaGnT0Q5F#wZrIQJfLs7&s2pGo2{ux>y^<5gD;
zz>ArbbrqU6@3@!hUR58qd-ELZficl*KZ4gR5snz@?(PY_Zy+;oi@4-qClY2}@n&n+sbgK9X7
z1cD)qMliP2C5A_<3khq*%qI;bfAq5;{{wq905>e=uUTrI`6RX(=$YN)kR%c@;4Csd
z=d;q`6PU?#qe$I&{sjx+l`Qf2JgywC?}0d=l);*xdX6rdXYwApF)=%Y2S`EfbCi5iYgedN139Lgkj#+_j&lw>D$Uj>J?;bDa2ALj1x0^5|H%8*ylbVxj*6u`yNNSB_7*mJ}`zgcJSobiz$A~XnH_Q%{iT*k|3Iqfjq@ZAM}YbLwzd{swU;_7m--Pyceid*
zJlQ!6MT-uNEjE%;SYMg574QPC9GJ+dz|s37Mo2L;(J1PEX71N2&%@XshZX#V7xMag
zo}>GvtEKxjwKjw|h=y}B;hIL2@kCg{vKec^nUyaW7IcN3u?AnoEmdNZ2!I=ZLz&S^FQm_nxb3BVjD@1AgJv`|>;
zBBm&;jB+Q(quHuTknQIgF;wvJgFdBioi@hdDIQ$35@#G6+`30DEN5P$B4@GLS}VP
zMR8w@p4q0rfnTYdGzw4a)
z!knLS(WZL%9mMW~R#FLY_T6o+iLN_rYc5>#Kal&C0gsPBD8h%^sX63^vSGHFq)|
zv0xHZBTuuvdi&X|$35ZKTfNEGpC=@lV|B=A)x3A75bGURFgu*zS<9_e+q$;~-k{EH
zr2#(xsW}*pXd)#4feykQDiF*GT_J!T)y^)p$HCT10?ztJWpFMANhV2+EI^rb9?`lE_TB@~Fp2$+ifQrMRg+7l~cu9|>Q1
zIowo`+=Q~#>j9^^&RFn$n@vqve{&a)ALSk2G5AFWX9v%_4I=o|^BoYdhWM2Xp_i`c
z?U9G*@F92K9qxO5c~3p+5za8G;7#qJt-49iDLZmRnH#=-&?)=8Ulo7Gs)(iR(-u`F
zF7yQxTT!qX|JEM*lyd+5xC|$s=nD~nk$u64%d%|t8UlZ=#>>Uos0O;+iE8G#j55Yy
zCdi*-=rXb@?f}F}60s>b9>e`6K=DagKG-bb7vMxHuXPc1GdY>WP#U;1mj7mBaem6l
zxVqwnoxdWN&2%)Qqj}HGwtsX{;f+*_O?{O6{#;eI%SvZo;mY0AWb8@tu|f9vH`5N%
z+1&K9Ys<8r7;%Q`a`1_YEclbAR1__oG;Rn^SHWI_TAnWHUWlc;W+{1BY2cIbj4h%>
zYw3?JF7(7!CY(7w-e(TiW$O)RQ9C6v0XIB@cyGGJhMaabx2|$&(0<99$=aX)g8(kv
z0-KE~f^mkTLzcGsHaQo=LIWnSC1OdkqW4cP{iv2KZ}9{`sEz&SbvtrjUBGx)sGccc
zLy7Y?GAHsWAvP@BoC~d*ugt>@l!)!vK7YQut<&CQ?B%IiI{^&)%SVGCD5KS2tSFDw?Qe=|7jFh81o!QyUIEOP2}t#u7J(9~26Q-AC$DxK*MecPGR>H}dFd
z%y>5Y!@5BXr#nT^Z?LTNbGO1#xK!lKC{_7wPf|shWbrFN2j)%M+YlDC_VV2@UrMZq
z#JSUo`gBDuRFJKRQIjUQV0>tjKBSjnmT?jVj)X;ilhE05l8KlArkCgDI5{^MIXl^?
zCwkm^+g8M9R8%WK2uKX_iUgLfYf46lo2tDa5D~eLrEJ&+`;l$%>0GCgg~nZQ%MIKS
zCz3qE$^QK@H{qa+KE6;ERB5USy^~UIFv;QwaHodQzi@)O2MNQ4ge;7@ENmw}32H?a
zcBH=QX-m-M_zbZ9Bc}q;jLc~F7)XQi#zj6DR~5{OJ)gZ1wi0WlaS(XWJvOMklwl{vl9xAjf9am}67fMPUnfCTLfBQ$
z(X#GzbA|^Qr#fxXSQlF-0LDZl3ozbu#-#cHpJ6tqs8wnPa)DFLG8P?mGcl~~o$2OX
zPlDlLHnmS7s}ObcWq2F6RXWWzO3x6w5uFJ1K;07SeqD=^I-1k#Own31qtqPHS<7tl
zq@@Q)iHR{>#;6b?aSyCzfF#h6pB)#cMP2e=12SAKQF5A+?&h0XNlZ#?WOCl@i
zqP`%8*SUY1=(!7Xd&aynKQ@<99D-$!96cS4wK5XPMA_mNPdv?4Z<}7wYa^cEZ7kUi
z@oGcoF-=+gr^Z(`83tD`RR`LB9DIvxU?5(Y$4|{N(jV&-f!e
zdWt*NrdCrRZ8+3YM3}HO?&~gFHuDT)RJ^4usjWAhu7-OgS^Iqj(&?F8r
zUErA#;EuYh)6Db1k!=)bm~a|rU8_5<(4ww5a6x)Q7IqfK7VI@{+91NhIs|!ukh8kd
zbU|dzW!oF)v;7>m9=Tl^pf&|oW_E_4XBW||#?`405xNTH#vW{!t4NZXEif~j(b8FJ
zZ4TqH=WTU|IWfH{Y)&5)KO~h)0ygky%n+Bg9IhGBR{4;sX5QUrq;wLU)&WfJ%;ko!
zO6!qbbTav3B((X+qVa$hku279*N~U
z+mp1fRDj&)77!raSVgshV~SQhqfM-u)ZJtHVpKeDZHAYyx=5wv+_4n|I>pw|eUEiZ
zIc-6z$=VyXi^v*Xtt2%z67ji>*wZ!Gp?yb^*3Z&yGpa|a6pQQ8bI({9h}{^*LQETC
zUS6jiEoy~J=1O8E;q@$FO%x96o8~wQR04!n*T(wNN5c{9=!G7|!F0pfG?5aao}%W=
zju9Srxmj-|v%(&&_~~#o*y{?BqR0jNdZtG1th$8ose5EDbQTjv)-R9egxoub%wGtv
zSPv<(jUrFgZMKH&EW0g*i1=Z0V-7iCMj3G8yGUxX-`@{I?ZB>xSW=GN(kiMcByh}t
zd?ds6#fMI+1dhx_Dt+mEs<+#}(=2H|SK?xp%!f`ynP}Bqy3Ix9Mzr(Jygx6L5-)-f
zRY8aAaurLt2Kme7&GQHZF{8$2dnvzme>2u2?Dg%Fwj~(m!lH!wRojic17D{Xo^46&
z*N(2z6xQ;(03=$i(JgL0*6oxLdu8c8k9-SaTsxG6vqdKbN<`n5L~_AY;+PU*zD7ed
zKjm$^XRXMw_K)IB4;QeT5$DH~3i$^@yUbg2_sLzOsn`Jv67B$tt
zb9+I;t-C5WdPUt@Q>ds%du(=Yj(vR#jd}vR)JbKpPBffmyTi^UvF$dWcyws2K%G;L
zA>n&~MR+8L4Q7jTEYx1=wpU-cLzm5breNgOt}6G5qdi_?Dm
zSyF&Y#+1dKMTAEwFQ71Tk{7k7wPfx+B3g%kWHm2B0JQ?;;EtyF=Ywi4f2!jdnG1J(
zYC3PG7qd(y1ONE9;)58yNb=W*hwaX|3y
z!#A4Wq8xFff-?F_uiKsf%zM0u)wh$f%Y4u@!Q&qP;^c>GdIzl32il|rtXDjP!uZs!
zsjeC~=3`#)CY`|CTLAagq`Io_6B0U#1KUq!d^A(7MHPk3A&Pk@$|B^E<+9C}t9pYK
z^Xu>&aaI~Bb%CO58zpe5E1rzk*LVZvqaao1uzRAU;yLSy&$n|&
zHA*Lv2$o*t?pp0vcT{^^dTbkb8|)HdCNNs8*UnH(52~IqINh`UqTIMkhvastbq?kT
zK{6~TB$d^pz|RaxgKDH5@eeT4_T)k+!vv*Y;feMZi&G~thzlS=o1PDM24ZI#y%ppe
zhgJgU8l4h!&n4w$=2Ratr<5a_B4zDTY}ST09rxYhZ5id!`L`?@8YNOIFfubA&)295
zm9%N9M08L2?(sD4`T{aib|P$+MOf+?$e)#Yqnik+aftD2u_+pni5Q5_Cjc}2Ct7%28KeAGPKw$Fy46{%lw6F7S^2_cJMTc%l6
z-sC(Dh0Cqsx3kqYhuz}6c-`HHjD0coGEB`n9!y3%BBK#0xH>&QMAj+nIPd0uk3L#F
z8cc7kMcNUBv`%3h8_p1VOmyuk4E`qKw$O*NltE^)p>S^rzokmfX+gnB_rxCl=
zH&%D?OKuxh>ga1>`fkomju&+g%d?#zndCimag&=hmi9o)RkcMH5Ek3B?OGXfC?eg0
z&U&_^uNM({r3^!5wun(_nw~9d@{LIMSJ}x*HqG777SH(hBL2H2S7@&v$z?b_&UCi1
z&ULx~#cdzyLRI#B%-cn!vEe;XPZ_ixpY1TJX!9%}t59O3m!Ybb&2dTr${0)BE(OV)
zR&;Nr<*W?V2{AO=;ONHuOa^sKgSZ9mX@1)~9D1fkVfBtz=`!lZB1p^J$++I^l+AEW
zhB|VGW7_XmdR{38dl88~W^|auu-!3WuI+_eImn($B3{L`+Zl47_XYEk!pVIBZk%ro
zpA^j0Bk^0qp?wp#vO2_YI6bZ{dLBlmTdn2JfPks;W$b-E+Y&_+d0MKvR~qVkSdG~@k!rN0lc>YPoU7Bv|{qGoP_G^W9ML?zBjxf%3s7N_5Q
zzRj&@5)|qzVVzAb8B7Y2w!RsvZ!|UET!%jzH})MRC4G&rXT1S%qmz!|J>v`KEVoGa
zlX2HX?+b}rpuAFQ^d9%`GC5)FRV@Cc5a-E02gSnK2p;Q2IUGQ!a10)n6*usZo`H8@-|>
ziuPeRoOi&a)V$3!D=+VZfUnU+K+L@8{;!Dk@n@`;xjWe@H}j_xZ{CLk`T^-y33K@=
z;<_C<(Rk-D>v5xYS(r-Mc*sWp2HL>>b|4)IpR~bgD@=;e5|wG{>l7^!;T0hBo}@
z7F_C83npfKluFL^j>4}l8H;-NYXg`YXI(LfF?Qahq*APP50q>p3?v)$z9Rr&g8{Pl
zh%V9DaM1p$TaJQluIflQH(w#+7w1A|KBQh0ogp5@o)9OXm5m(iTzAK>ea%;(#g53P
z%rv2dh<;CWE9K;bsA9Z)kI_JYzrk0ZyW13h3#roe%X^0Ph2ai~lN!w4_nDF0?ebfc
z%*P@#Jfh-Ltl~I%WS+i5B}r4T>`4=SF|33xLluXTrI@-oQHC9=lG0383CDgB1%##P
zfUkx&RQlE)o#r)*Xbd=lFD^D!zK2RFDzZ{&vMfO*7lXQ#II=0!^eM|lw>(L`ijbb;
z+0Ie7int4j>)@G*{AVVxUUAU)NG21rxp%#?p
zbPR?&HaxD)XzuJ15mm$Ql7rqt480dYuj!apCcfG(n7wh1^&;--Lk0nvO9pe@2_5Sv
zE=mVZT!WlreexHzs|Xo?M1?-aeI7zOC^Xn`aqh+{v>xmk2V
z1@BXLh>7n|o`lkfdw^D#PgRYdKdUp28qaSWTQA?!W7gdga62Q3#Y6QXX|*wtokuu8
z-{T3n$&~eCC*NnO4fQD|2D6pLwlJLC%&|Rgmvza5B-8HpSNet?8vu)f8By>rW$y!rw{BMn8
zV-e`hnVnlNiXU`_e|Y8d$7Jbh2Ei4|g29;=Lqmk0k`mycH7^O@n^`tpZ$9A<)x<)u
z1vh`9SJ<$44{32U(ER5T5CL@6`z;8MUKa#>Ym}~{>tm5xrTNJye-~obqhIF;{ITQ8
zS&cU#lX%RpXZxTZqyl@>Xtxs(S~(5UC;L#*=EZ%wFTMQtUq3i+NWR$#uXA)NznQ}1
z1KQU*uvNHmAbd)82-(b}AXJetnv30d4f=;Dm@hNQ_oKh?T|498B46$5KFd6Z$g*tV
z<0EmNX-q%r^!deK|7V;ib8zkdS0Ow)%+
zte8s3+t56@SE;d07K(U6BX{2IlHB=W;S9rXKM{2kzEd13@Y|0WGs2KgobB6arCYgo
zJ6HgJ!=K^W`29vn_@rm4X;b9J!K-re&Iqgn0%1@5-=eMM*7a8eD0+_Y<=8NpqZ@Vs
z`UCN>LIV^noeS&JSXsrgmsxPxV|@GihPC&o@NM{dRG7-l#$tQn#7>uf6@}A93)bYWtdh
zyU;TH+d##orjU)ZaUQO8WKsVM{l<^Jehk04k5Opj)$dh0AyM1@Jh|T{qyj$qz5fr3
zjhFXzLxw+J^l{6E9}vC|m)}=5`a8UKA=d@bw7*)aYJS32+W
zH1_wGa39>}xzAfRUVU#=7CeY0w+esTT|Ogk=Bmf1of|JNJcSH@^+3s{4L|UYG`z(B
z=_GV>{5EyS3saWExpC@@-y(13vVe>4hLz(#3ll
zqCCm`ts4fkEuai;=t~9NrVV3{dIU@4c9#_U8=3Q=DomY?>-&Y@hU5TO|Dsg*`$l&K
zHtMiVZZR9*tbfEY3xlGLKW!pN%4p-5!~zpP7X9`d(xZ|45r5A1+qIkEejL>%?`@ck
zy-<082hmmCVBdz>+ySfp=G#=xso$RCO8EL8JT4p8XWNVcJTtDEGQWNBE5o+!m!{%N
zZ*3UlFtQ`9_Mg|;@K$f~{QwXA&GDkjjc@f?VrF0e^20F)Mu|SUJS%1%VTV`yiV7q^X$P
zTE&!wD!>bp5J4jZN!C^d_#XDZ&V7Mo+uE`1>ZSduNb5^^{tK`nFc5R_h&^I+x#0+5
zpSo7p@cIo87r~8rQz{I_t&7rs4D9jg9EVO8r7xP)VI7CP&0jF;)PqKEO6TIg5;_M+)p;}E*z2{4fq~;M+5fOA9XMPrI0Fjn83}gy>ZxB1e
zF3tkYJ$}yHYyELOTOpdt#SZPAzMef~B&S{JBz_zp{14{mO7jRLi?)4GDUbxl!J6D?
zp<{s}T^Gf#A
z7&&Zd)IRkBCE~R>X#Nuc1@NX*=r!32N--XJAnBvJY
zf}<0O6A^gL0{Ep+%ErxwV#rzS(;<(wPZMbv%-wNcgpr9Z6J%_XXd*kOwLsk^q+RVrYg!Yss*x
zy}K3-@sP18{jgvR0XOfl5u_q940WWbhSXTl9!qBV@(8Xw3R_tKCBZ-@&4RWmA?U*=F_4Iz#+y0Bc$0ncFV53~KIL*PXnykcD
zNIm!=@mr?77a)9oK$|AZ?ZYXRgEz!>!`Lwm*15oyu7^`<9F4lpJBc+YL3;l3Z8--(DQU}$%;5hDjXz(v$V
zr1Byqonfe$sJJO)oBQDAW)R($P79H^x_9hzuer5wX8ESsSjYP4eWMgNC@VX$y`6i>
zBbQp&y&Y;aH8@5Z(pKsk0uwA@2|08V=SWxq4a$BZlyOXs<5G
zrIopYV_ZaE7^O)dNkWv%Qa*BDC}M3;M64!U-|?}mb84UeylQjL7xwov(DJZxn6#a`
z!_)fR3}=qDBHu6#guaORCSKT0(vQ
zuIaA7tQ(H-OguT2#XEnZKk%B4LBVoEEBE(QpJ3j@YTpvNdc!>Dtkga97CbJY?dnT{
zaOLZ8;U64uY9H}p!t4315c`)^Y4H9MP@L1ydMx#`o6thtodb|(FcGm-nrlct)8pFj
z6@!$~1`X{M+?pKYNy{XK6)ir!F)ANB(m@PwdCL0XNAHMyksFu<>fj|(dr;R=$vUR)
z{P@S#MF=W;0bm-PFGoymp$!onz5J{%6EQ_0ey;&sSUueYg4S$U+~u=2?_-3=Al^7C
zEx6-@Q>&9x$|hm6ESfjV2X@(8iok*tA~sF?qHzz+kC8+>-OOz91#aGVnBF
z*GU-8V+aY79($#^hwRm!P@tBsH~{Ar2`cr=@7@e@Z>ul)uKVb9UOR2FK*=OKTEJPa
z%)yXwuE6QBDq$Y6v%5)%Og!Cz0GYg%FwA&ITkNyinWWTq3sN6QLW{w1MR`-O%TW$-
zwTkB7@oX_yzoGxwbdevpcoenuJI4S(Jaqw1h<;B*2v#U?1r_HFFr3Jdg{6yQZOHDZ
zdcUo^)kFf1i0XS;g(l<`^DLCV3{tBZa8a?K277+t{0T7j?)r~QKxHjN1S4O`>IK_W
zH0A*^of;6NV&CYJ{bA-Z>KN9jmFZh@iuseEH}=fkQ0(Q$#;0nuwrWiS=AVzCn3uq;tb6zv=ERpM
zD+WO5V`Ot@-JghKU89z)#j*-(U1SOOtm^%wMv<^C)7DnE892#;NKbHJgg3$eQ4Molm(EwhMKrmSj?eo9&D)Y5vx`hO9&yS9K9{*5=n5sqYeJznky5
zWz)PPK>9m9+(Pt(#EqIbpBq|txT^)bHJa8xE^ez%EkdwH^nH>Q3q(d~Zex{+AJCXL
z)!VFtCfC)zr+>9jsz}$@-I{u)1AALCPKOCa#)?>RGHOPHgP2grErFO*8N95V*>j+x*&D0eau^11{wc)+lP%ZVeNo(<(
znwEUhm`{TSefE{W%>P7HN|3Idxzv9zmDvQ7O>n{Ga&A_~_g&so*KIuzY6z?sTlO_S
zuhGp>MwLuQ+p$K~G$E>-S$Bh-q@3IjMhUzspeKdMe9v-MFPuwj!qN#}ymX(~WavH{
zImf&O@uC~KRHMW^9N0v&vX70w*X6T4irLZm!YvB73C7*7`V{FU%G|5Uv(Vt)u;ENJ
zV?H~Nf};^*JvutZucRPZhl*G(PK$j|e^T9q4ark0nuajGxQ;oqz+AeEr&qFD^r9^p
zJ#M3KTL8f2V{)QBRDQ?`lh*^bgD>GM3MpCXcg?&isw^lPf@)(tU_MdWZT$&*kEg&G
z?=WtI+r^`T@dV@wpQ5&xg2|^p58G&1XVGhmYot$ER7b?BEBPdQ6Q%DKz*Etf|BQ=Q
zTK|6H5gE?Iq^tQsHyd4M%VZu@WhBpMuPtVCy>7G-W1va*xKlHA@O6!r)r}!qa;;M0
zBhNma68Frcb|*AjmbEz-q~55uS0`~=4q9HHi;OIXHy!xQb-KNH2b3r;iA#PadDV$y1`VQ|IO`{bWFbpTUDlZ8kcG`=9IutKds{Cu7`fFSA;z)1dv(hKOG5AQfHKx;Q%wJN{!Vo
ztuZe$%{Pj%)`+6xC0yp&J|;rE0=qx^!2qIGX_fnS#-i13p8urY%6TrFYaRu{h
zi+DFQgM)`xR$t0YnyOH9w}SznLrN*Pf8y)yi@#obVHP+?iZv$tPg@5{N66vhZ5~}H
zP%49-j*0-;mctqMWR!fmOXq%>A0{rZDxaDkd%m>LF5d<1RPvpKBOkqe6%c^W9{&=OmKo)
z3Im@#fahyCxpiWb_tU*CK8)Crg2ZIsG)nq9mFb4K3G8U4ltF
zwQhfj&SgJO=8d(+up~mQqSsH+oMNG5hOTc1fZ$sra!jKWk1p+nPCBQ8)@?j*ngHf3
zzE({oxY3Wmz{aC*p`meO%gV1JOwOiePaP~!B7A-EwBFsFX+kRQ5OpT8E9*}?
zCRIult5M(D>iqo8l-KM+iX?FR?KXSTgurlA$)(wVNOWj{^)02uGw=)2-jQW_ZP!{Qn#Xs
z5;t0pWGJ9Gh@@`0)usmWrV{ffYOdTqlt7=7n!t2mn4JO{FG1}c^?z5;x->)#?8XlBune{dp|SEhezP8QS6b)rG2$9bZXd9SnFJ-dWd
z!j_*L7u_~Fxj*t&O>7xy>n6sbxNU@VgpWs=GQYDioBg|zJeG!zPV$cJ|^0|o+RklZW=LTKe-pU-uS7_a!
zcbMZ@%wvF2<>GU)xBYw@_{qfXo%#_)SMB$_k5otkDlG$8%o9qPkkVy9I
z_U)w8;-qLb?Ll)@LIA%?VBF|6l6#zM+=pbZ-Ar;p25iT4EJARNcR*qOlvdarC$CL{
zzV)h8K%lGjVAH->-N`|uRN)AnIth-Y&YEtHxNqN+*k@n;f9$}q9Th_
zq>&B@r9@qM~#uB_MF-TG`2c%&MYUpQf}{@c;mf%_O_VSGkI`&3J
zUP5_2&%Nww{d#l!2q8*NjR#n3iQy3!u@0``&0|+gx&ipF9a8wv(_nIC#w7lQlMp~#
zv4%LJ3VC@+=
zOMy;%;XLRtp&_*AF^7dtSaIS{W-{@Gl5w$Uzl0}Dy_QVZ6yFZxsOru&LdWJ87bQ)q
zRq}=`kCeB^Ki0Ll^o6U^QLki0<;9Z~`I;+3?Hog@77On!d&+)E`_~bxTuD!M_juOk
zTlVp$Md}Q|3Qu3(NNplB)3h)=4Mi2dZp^qOCRl$F?2D}v^QD(-+X_vntI%#+O+gIl
zw?%kEr|^mK5fYX8weM$7P2R#opq+^&-V3(o_26QArX^pEHJ88mrSN(@qp{7@$law&
z1*(KmbC$pM1x08EXz=jGEi-8yABqkX69_t8-FNlQhJJOVQl17zz+Bx6#O)f(UoVP#
zH0Q~dAM)~%R4Mt;AyJ^s(>KR(HY8ha5VWzP+R#uYPbxqonboD>_%-Uec6d(L6s&t!4ZZ6+RfJRJSjA>=cibR?J6oa*VOgTgb%BH
z-zyrGy^E%D71tf-o{H^auhcQ5%pCB@nJ{lITo10QD|zqJf6t*z$N}W6U0KY#H2-F7
z@XU>5p=FMuJShZ#6&K~|_z@ZaGu0VF*&+uiWbz6)3ti1SV|!-&v)5$jNNOs@
zd)b%^UG*`6NN{(2SI#53`(EDDvfb@#aM0^&7YkKZ64uC!H(Ry)zxH^5GT%Tsc$9ITrbk#6(A-ILh_^qrhiEFFDpKapFu-i&Dz++;Gsj8R^+cqYI?@tWa7!?
zjBHV$EV8VgiZP1H@p{`?+Nz3g*9|l}*ip5u1}J~3gWAL=dDkIyE$;5)!cJqa+8Z6#
zlgUT$GH0-D<6`f$)xkBwInD@4yO{YK>%vbcD+i(gkA_4x?Ngw}l2hHi-!wa17>a^g
zdms8YUJ5?ob^t`-DJ$2GguMx8v`P1
zL;r!Rr$s9Se=WZnp=OIHZ;+N634PH%&M?cDsr!+>?JfgO*cwu^{mv4Jc3=KYF^tWx
zb?0XWodm%nsaE9k39(drrxNF19cu1iB>36y3PevZ-B_@ju}VUR3i@CecK~$XSNm|k
z;=nKJEMh7wq$m(oLG(V(pGox4X=tB0`Hnu~yl{Ph*ybBi`qL`}_EN956g_=vKUA;}
ziM^5Uf8A!Vy`Yuj{+?@h=6(DZrlxsI93xN9kAOKg-+6%A09<)F>8De|^J+euK2Uea
zUA1^MJjqu6N&<^&{n~}X)DM~ow`yQvu{+pFP&sDqp4Mz!>82P8W
zyjBY8Q@WU#TB+>v5s759^_)WB%ZiQOkeS0q@Ke~6m0)Wr9OHHdOf52%ENcNl`=sNU
z;1v5_l&3HUzx!+h)&-9ToOi9a^K4I5h_$Lptf7xD=W*AsX8zSe`f6g2V-Imnr3wiy
znTNd_PJy6Vz`7luN4bihb5U(zNQ?HvK9<
zFCmtZgW$y!+5A?U`_65A{{Zxu4_=4Z*`JJqZ51qVI948cW8ND8<3^i_Q#p4zqdfvLfkXVdF=o@BN#9
zMW-0~<8_r;d=}fD=UqJ6yUo$mZs8dkda01(n4;%@D_fifL;u$gcZ
znpqmDc+YZVc3_B67ELT)d+zhv(qOx|N~X^DByrEtV{oVY)qiH|wDLGRu#m2Z*h4id
zMoQT#Hr85QJ*Fdzkd9diU9r+3d>M(z%y{c|vPmmqUcdLK_L}M6SmCv`%c{2L==h=M
z--L2z5xB_e&{NL0k^7)}rZEYf^Z&Tp1fyl0u#q1X4U>eJcqg!>%q2NY%7h+Bun;H<
z{^?1=)MjT^_0&zrZ6-S|RwZ$)x#4|>@XG<{Nup`t-~sk(vIZ*$Ju6Zp9=B2lba=CE
z6FwM>a?ulWY5?eS_!-K4VZ5e9n4;?}#PN2)%>Uv!`wBG0`vexj5e|r`*CGb7{8aBl
zJ&UX%K&ZFXVi(FrWoO^(Z0I#{?^QpIO5D_!njIc427~94`ZJXRJ>$;KJJ>XCU#@q-
ztu97B&E79i|HLLlx5K0>zuLy91l0ZFO9|lRor)OQtoa1Li-%mL;<^}Pd
z<$pWx+VS}5{f+%}Bf)h5r>HI2y>(@L(Z;pX=-F=W-2jyx)puDNPxj6^idC(Octi8h
zVT53wO;mGgg8z!;z7qw2M>K>$sh1L+nYhXQj3htb2)8IXut>@Q!_*;jE9I_$^PZ(p
zM5t6-;?acSvaw5yviJberE_K9V)bK>_49^(LmD961yT~qu7p+JYTYTCfyXn32n$qM{1(zP&A)S(`oo3&
zk>TmnU{%dCPPiV)1RARIjb4i(|9trmn^4n+gPvtdCG{zx=`;(FPxD)~g|?;09YzXm
z1~!7$-Vh25riIeAZ;pY_`{CK!3;LMzm6I<@Kk`gT@544q)j$sstaa3J9_a-%m&$ni
z#eK2#ND=m@<||pRW4YB&0DtI{ns>%zCOlXLK&&m&m*&ZJww7p{J9G0#!X)H4@q1
z`GA5|@$lQEpzb>H=R`oj&9{D$K0?n{`n}~`oUJ$l*#$-?b2BP~EBi6cL3oo_K0(QU
z!NDf|z?{A?%8>IH>Kb6XCMSY({@WpVXKrtZORavm>;EU*=n#_8Tq*nCvHQR0oP2=`L&|<)s=xNfZ;~QI
zz8q60`wN#?3(MTmSWEvG5U&bcwjum2kw36oIJkWNQpSH_0DrS@{i?U@_yfy&_{de{
zbkym83E1B_WLDgH@N9LubARH-?!7RB$Gi`Cu(E@2mE`Tk>fC(zSw!CQ;52aG!dZln
z#Ux~wD7G)(Qn?$Ts;PFR`SN)7pX--q48!=ycZ~VO>e=K?B98JXRaex(<7E^+!C7}e
z07FrAlbd&*`8RLg8A#^+b8`P;zRjY0b)gSyn_P2ULU+LR=Kq2uL-=NzCiWDDccz}Y
z_viSWN{9L2-U`v6`xCfz7Z8~pslxpi@VtMk_6$&F!u9{!WWs7C$=>P
zeBP-Z8#+HBe188WUUU)Ybl#l4h3+Iqq1Lk~@-M4DvfwjGOmxY02z$H_cW0OLqa?M^
zG?5{*d4+Jnz4Gc=tP~6ia%KK+pI6i+N_sb4M*vVX;Zr%M4uI|&%Z})MZ#?ywjau&W
zb06!0mmt&2bSFsA-;I3#uK~)dM)2Msc#VCsa{-0wi12bn=%hj!P-iC3$d_KjGNi$eo(`RZ|HI?wA@2;D4tKT@ukU)a^kihEfe;WWR#_nrPogreHL&6@0c
z35wYdq#k^ZjyL(1s25K#sikGJn7x^s%lO31oHM&Ns`g&(S1nxK+O%BsWOxl-zP0UQ64jc%8+kJc@Z&IHyFHrcO@Wo$~T&O2uJNV>?0_SV=clJ7v@*WNY&0#z_i6dv36(!KRq>5wqSmwfd78YR|ej8nOhnPQpA@W{g
zu|$oaOA$K$=xYT-=4RGzM;QCxzlWiQFQ(<%rJ_a8r=xXFmv`-wV{;dHf8hQe{`Zso
z?&9Un{P>pOev2~DgP3DRl}PKz>$pGPVw&c#wD}1?j+|Hg_;JKPPZ?>24NKm*!1>QR
zB7=09AF-+9q-U=<8rCfJU61+sjRrTaKfWf!WoA8R8qJS?&NPJ&`Efq`;2o`);BU85
zl*5|+r(}t=xNp?Q{Wm`=&m$qNE%7(Qnp@&8^4plUKhFGb_8+cEC~J?G=b?3$e=#@X
zAGh21rFCB3TQEBE-{bW`oXt+#E1C}y*n{7CNEbqaoNaA#}r|k{@pP?QCKHarDrlG@Sc>F
zJd^Ly3j5#sS{=
zHu+B2RWhtu#iU?UzOpM9xY|sRBARCK{mJeaug(vZ_jx~GZYD69#pZnmu}Z*e*j)VW(GM~srYs7X2p8bz)n3&I0-a5fn%Vq<
zW&mA~kaFl%wBJDTT0ungG6BF`z`6Vj+5-~gBs(d@!+uGpQ(O3
zWnCGD;zJN+ndqMY+^y()UfcjsK>lX!rma3JR5-Qxb2dYd;y-rg2@dxIIJixBR-ycq
z2&v;_?VKMpnW--X)@e^(Wq$D%K8=F@O02;DnS~z+`wEu!+YiEC*yk&S!0`4N0-+~6#kTE2
zmklOg>^Xd@KE4}#NV$c>^ufg@+S@*i7TG&xI`NxdR+5gj=5_W=+~xT9oJcqmGb{8m
z9xaX5)%n2lLAhzCz84Z)=(uoZsQ_A==fJP}R!-u%ooNp(>L*<%nfr6>X^Kk>H(I-Y
z(na9uu!ax5CG){KYCNc@5qqR6VdAne%2=7^E>#`b7e?EnG9DTFoa
z3h<|8ynoHQ48P2K!T)8;mqBReEYtuOltY7xOb1{Sz1f8Ajp%imEJ)mnlRo+T-K>nCo}Ia>TPt^>*VEFCXzhHb#__`8hDh
zyh4z_qU*0zO
z_d5A8U5tD#Te;R)z*cSi9=EWfgl)jC${EoP-3`*@GtvO99{+j&KCdUsl&H+HpY$DYpMinP*u_`3x7yV1PgstK{(NB`RFoa#iNWS*LAXT+wCLW
zu&sQgvO8zr>1SSWd`7Ewa{aX3=iIWzi{>KQKA8|b==V!-|vB>TL
zo#yL>YbP@7$HCP?n!yD^o%uM&p~q;sm@fboqu#cB#_oDX_nKnTC36KO*Da{27LgGk
zep>VL__>OB&G=wIciSqWE)a#7y+*1JZ*KL1kS_n`IdqY|1_6D&LaMcI12wOOyX&-|
z%(+Q&k*@EMUA)Ck<)84NyLCrhAyae2_tQ~oT=o|)*crB>w&_?Sag{C|?H=4iVr2>6
zZ=Aj0+|J`DJQe-X^{H#WwMnzV?RF5~!?UAiD3#V->{A%)3r*9aD*9es+WipMuWJ%r-AKad#yuUq*l4(}T+8t-utBbt47JnMXZmSG@
zH`;Y?!B?cm?k@Rq3Gbck?mEeFi%3RP>e_MRLL?8P6H&^cQrP|r=uCQ|Zw3r|XR|1u
zxp0k^PT6!*axSDnSFp8f2CME{`o7CXImAcqBTX%
zIHAn*=d1NnpXA6$JAZ_nKic^MWOF}5(W+JLQ&k`e;W@^lYgZOlMmFvJk;|$B`gYSU
zia|1?8GePFdmG7fR3=AB{-E#TFoAD>Abc%mLn%JV>GK?77-
zLYqbak7lU&^E;1Y&3=4+zYw0nHC0&m+TiMos0_Z5GpIt=Yv*ajtRS~l{iU^O-f?CV
zA>&(Keswx0u9hc`(vad_s?#F*7o^3i=wB_kGb0Z3R#MFlG;OU
za^o5+7D-qXsr!Xr5EY7)A*s4ecd4YpB;N;Oai_BI-rUaOX>|h%Gg&AgrR%Zj~aZE{I(DwO-v6HgL1Jj3^;Kcsa|rr#@C-GSuU_bg4_$PtUrlh(E+BZDPRtGd7P-Fwss*7!_${Tq^nQHsI5