From 0339e578e26369f2384700fc0e25c94042dfd7b4 Mon Sep 17 00:00:00 2001 From: Thibaut Sardan <33178835+Tbaut@users.noreply.github.com> Date: Wed, 15 Sep 2021 11:42:05 +0100 Subject: [PATCH] Merge dev to epic/files-billing (#1525) * [Storage] Copy cid functionality (#1437) * Copy features added, overflow issue still present * Swapped to button * lingui extract * Updated button * lingui extract * Apply suggestions from code review Co-authored-by: Thibaut Sardan <33178835+Tbaut@users.noreply.github.com> * Fixed size * lingui extract * minmax * lingui extract * revert unrelated changes * lingui extract * Apply suggestions from code review Co-authored-by: GitHub Actions Co-authored-by: Thibaut Sardan <33178835+Tbaut@users.noreply.github.com> Co-authored-by: Tanmoy Basak Anjan Co-authored-by: Michael Yankelev <12774278+FSM1@users.noreply.github.com> Co-authored-by: Thibaut Sardan * [STORAGE] Rename file in bucket (#1471) * formik submit not firing * fix mobile * lingui extract * Update packages/storage-ui/src/Components/Modules/FileSystemItem/FileSystemTableItem.tsx Co-authored-by: Thibaut Sardan <33178835+Tbaut@users.noreply.github.com> * make eslint :) Co-authored-by: GitHub Actions Co-authored-by: Thibaut Sardan <33178835+Tbaut@users.noreply.github.com> * 10min timeout for everyone (#1472) * Translated using Weblate (French) (#1478) Currently translated at 100.0% (262 of 262 strings) Translation: ChainSafe Files/Chainsafe Files user interface Translate-URL: https://hosted.weblate.org/projects/chainsafe-files/chainsafe-files-user-interface/fr/ Co-authored-by: J. Lavoie * add ui tests for search (#1479) * bump cypress to v8.3.1 (#1480) * Sharing feature explainer (#1477) * refactor modal * steps logic * image centered * lingui extract * lingui extract * typo * refactor with hook, change icon, ad to share menu * nits * fix storage building Co-authored-by: GitHub Actions * Adding multi selects on mobile view with long press (#1470) * using long press * dragg preview problems * typos * events almost ready * resets * long press options * long press updates * formats * dark mode colors * added hover with breakpoints * lingui extract * Apply suggestions from code review Co-authored-by: Thibaut Sardan <33178835+Tbaut@users.noreply.github.com> * curly spacing * borders * clicks proper placement * reverted linting * removed preview on mobile Co-authored-by: Thibaut Sardan <33178835+Tbaut@users.noreply.github.com> Co-authored-by: GitHub Actions Co-authored-by: Michael Yankelev <12774278+FSM1@users.noreply.github.com> * bump to 1.18.5 (#1493) * [Files] - New survey - Discord link and tiny fix (#1487) * a nice mix of things * lingui extract Co-authored-by: GitHub Actions * Translations update from Weblate (#1496) * Translated using Weblate (French) Currently translated at 100.0% (266 of 266 strings) Translation: ChainSafe Files/Chainsafe Files user interface Translate-URL: https://hosted.weblate.org/projects/chainsafe-files/chainsafe-files-user-interface/fr/ * Translated using Weblate (German) Currently translated at 73.3% (195 of 266 strings) Translation: ChainSafe Files/Chainsafe Files user interface Translate-URL: https://hosted.weblate.org/projects/chainsafe-files/chainsafe-files-user-interface/de/ Co-authored-by: J. Lavoie * update axios (#1498) * Added docs link (#1497) * Added doc link * lingui extract Co-authored-by: GitHub Actions * upgrade (#1501) * Published (#1503) Co-authored-by: Tanmoy Basak Anjan * Add ui tests for file preview (#1489) * Toasts refactor (#1495) * Toast content ready * toast animations * toasts before relative positioning * component ready, start integration * normal notifications ready * downloads ready * toasts ready * toasts inn storage * Toasts refactor okk * lingui extract * minor changes * Update packages/common-components/src/index.ts Co-authored-by: Ryan Noble * translates * post merge updates * translates update * progress and overrides * updates in lock file * updates ready * lingui extract * removing dark theme from storage and gaming * Update packages/common-components/src/Toasts/types.ts Co-authored-by: Michael Yankelev <12774278+FSM1@users.noreply.github.com> * Update packages/common-components/src/Toasts/ToastContext.tsx Co-authored-by: Michael Yankelev <12774278+FSM1@users.noreply.github.com> * Update packages/common-components/src/Toasts/ToastContext.tsx Co-authored-by: Michael Yankelev <12774278+FSM1@users.noreply.github.com> * Update packages/files-ui/src/Contexts/FilesContext.tsx Co-authored-by: Michael Yankelev <12774278+FSM1@users.noreply.github.com> * Update packages/common-components/src/stories/Toasts.stories.tsx Co-authored-by: Michael Yankelev <12774278+FSM1@users.noreply.github.com> * Update packages/common-components/src/stories/Toasts.stories.tsx Co-authored-by: Michael Yankelev <12774278+FSM1@users.noreply.github.com> * Update packages/files-ui/src/Contexts/FilesContext.tsx Co-authored-by: Michael Yankelev <12774278+FSM1@users.noreply.github.com> * Update packages/files-ui/src/Contexts/FilesContext.tsx Co-authored-by: Michael Yankelev <12774278+FSM1@users.noreply.github.com> * toasts types * missed type updates * update element identifier for toast * Update packages/common-components/src/stories/Toasts.stories.tsx Co-authored-by: Thibaut Sardan <33178835+Tbaut@users.noreply.github.com> * Update packages/common-components/src/Toasts/ToastContent.tsx Co-authored-by: Thibaut Sardan <33178835+Tbaut@users.noreply.github.com> * Update packages/common-components/src/Toasts/ToastContext.tsx Co-authored-by: Thibaut Sardan <33178835+Tbaut@users.noreply.github.com> * Update packages/common-components/src/Toasts/ToastContext.tsx Co-authored-by: Thibaut Sardan <33178835+Tbaut@users.noreply.github.com> * download error messages * Update packages/common-components/src/Toasts/types.ts Co-authored-by: Thibaut Sardan <33178835+Tbaut@users.noreply.github.com> * Update packages/files-ui/src/Components/Modules/FileBrowsers/CSFFileBrowser.tsx Co-authored-by: Thibaut Sardan <33178835+Tbaut@users.noreply.github.com> * Update packages/files-ui/src/Components/Modules/FileBrowsers/SharedFileBrowser.tsx Co-authored-by: Thibaut Sardan <33178835+Tbaut@users.noreply.github.com> * lingui extract * Update packages/files-ui/src/App.tsx Co-authored-by: Thibaut Sardan <33178835+Tbaut@users.noreply.github.com> * storybooks update * using usref (#1513) Co-authored-by: GitHub Actions Co-authored-by: Ryan Noble Co-authored-by: Michael Yankelev Co-authored-by: Michael Yankelev <12774278+FSM1@users.noreply.github.com> Co-authored-by: Andrew Snaith Co-authored-by: Thibaut Sardan <33178835+Tbaut@users.noreply.github.com> * Progress cancellations (#1500) * Toast content ready * toast animations * toasts before relative positioning * component ready, start integration * normal notifications ready * downloads ready * toasts ready * toasts inn storage * Toasts refactor okk * lingui extract * minor changes * Update packages/common-components/src/index.ts Co-authored-by: Ryan Noble * translates * post merge updates * translates update * progress and overrides * updates in lock file * updates ready * lingui extract * removing dark theme from storage and gaming * Update packages/common-components/src/Toasts/types.ts Co-authored-by: Michael Yankelev <12774278+FSM1@users.noreply.github.com> * Update packages/common-components/src/Toasts/ToastContext.tsx Co-authored-by: Michael Yankelev <12774278+FSM1@users.noreply.github.com> * Update packages/common-components/src/Toasts/ToastContext.tsx Co-authored-by: Michael Yankelev <12774278+FSM1@users.noreply.github.com> * Update packages/files-ui/src/Contexts/FilesContext.tsx Co-authored-by: Michael Yankelev <12774278+FSM1@users.noreply.github.com> * Update packages/common-components/src/stories/Toasts.stories.tsx Co-authored-by: Michael Yankelev <12774278+FSM1@users.noreply.github.com> * Update packages/common-components/src/stories/Toasts.stories.tsx Co-authored-by: Michael Yankelev <12774278+FSM1@users.noreply.github.com> * Update packages/files-ui/src/Contexts/FilesContext.tsx Co-authored-by: Michael Yankelev <12774278+FSM1@users.noreply.github.com> * Update packages/files-ui/src/Contexts/FilesContext.tsx Co-authored-by: Michael Yankelev <12774278+FSM1@users.noreply.github.com> * toasts types * missed type updates * uploads ready * uploads ready * lingui extract * update element identifier for toast * cancel source tokens * toasts added * Update packages/common-components/src/stories/Toasts.stories.tsx Co-authored-by: Thibaut Sardan <33178835+Tbaut@users.noreply.github.com> * Update packages/common-components/src/Toasts/ToastContent.tsx Co-authored-by: Thibaut Sardan <33178835+Tbaut@users.noreply.github.com> * Update packages/common-components/src/Toasts/ToastContext.tsx Co-authored-by: Thibaut Sardan <33178835+Tbaut@users.noreply.github.com> * Update packages/common-components/src/Toasts/ToastContext.tsx Co-authored-by: Thibaut Sardan <33178835+Tbaut@users.noreply.github.com> * download error messages * Update packages/common-components/src/Toasts/types.ts Co-authored-by: Thibaut Sardan <33178835+Tbaut@users.noreply.github.com> * Update packages/files-ui/src/Components/Modules/FileBrowsers/CSFFileBrowser.tsx Co-authored-by: Thibaut Sardan <33178835+Tbaut@users.noreply.github.com> * Update packages/files-ui/src/Components/Modules/FileBrowsers/SharedFileBrowser.tsx Co-authored-by: Thibaut Sardan <33178835+Tbaut@users.noreply.github.com> * lingui extract * resolved errors and lints * Update packages/files-ui/src/Contexts/FilesContext.tsx Co-authored-by: Thibaut Sardan <33178835+Tbaut@users.noreply.github.com> * Update packages/files-ui/src/Contexts/FilesContext.tsx Co-authored-by: Thibaut Sardan <33178835+Tbaut@users.noreply.github.com> * Update packages/files-ui/src/Contexts/FilesContext.tsx Co-authored-by: Thibaut Sardan <33178835+Tbaut@users.noreply.github.com> * Update packages/files-ui/src/Contexts/FilesContext.tsx Co-authored-by: Thibaut Sardan <33178835+Tbaut@users.noreply.github.com> * Update packages/files-ui/src/Contexts/FilesContext.tsx Co-authored-by: Thibaut Sardan <33178835+Tbaut@users.noreply.github.com> * added closabble states * lingui extract Co-authored-by: GitHub Actions Co-authored-by: Ryan Noble Co-authored-by: Michael Yankelev Co-authored-by: Michael Yankelev <12774278+FSM1@users.noreply.github.com> Co-authored-by: Andrew Snaith Co-authored-by: Thibaut Sardan <33178835+Tbaut@users.noreply.github.com> * survey banner on safari fix (#1512) * banner fix * Update packages/files-ui/src/Components/SurveyBanner.tsx Co-authored-by: Thibaut Sardan <33178835+Tbaut@users.noreply.github.com> Co-authored-by: Thibaut Sardan <33178835+Tbaut@users.noreply.github.com> * fix what I broke (#1518) Co-authored-by: Tanmoy Basak Anjan * Change the survey to a call for a user interview (#1517) * change fore a user interview call * lingui extract * Apply suggestions from code review Co-authored-by: Andrew Snaith Co-authored-by: GitHub Actions Co-authored-by: Andrew Snaith * bump cypress to v8.4 (#1521) * Translations update from Weblate (#1522) * Translated using Weblate (French) Currently translated at 100.0% (271 of 271 strings) Translation: ChainSafe Files/Chainsafe Files user interface Translate-URL: https://hosted.weblate.org/projects/chainsafe-files/chainsafe-files-user-interface/fr/ * Translated using Weblate (German) Currently translated at 71.9% (195 of 271 strings) Translation: ChainSafe Files/Chainsafe Files user interface Translate-URL: https://hosted.weblate.org/projects/chainsafe-files/chainsafe-files-user-interface/de/ Co-authored-by: J. Lavoie * Adjusting login screen sizes. (#1519) * login screen sizes * check for instanceof Error Co-authored-by: Thibaut Sardan <33178835+Tbaut@users.noreply.github.com> Co-authored-by: Thibaut Sardan * merge dev and fix conflicts * Revert "merge dev and fix conflicts" This reverts commit 6d7c91c9f2f87d5fdb8a9e8e27e913967716b114. Co-authored-by: Ryan Noble Co-authored-by: GitHub Actions Co-authored-by: Tanmoy Basak Anjan Co-authored-by: Michael Yankelev <12774278+FSM1@users.noreply.github.com> Co-authored-by: Weblate (bot) Co-authored-by: J. Lavoie Co-authored-by: Andrew Snaith Co-authored-by: Michael Yankelev Co-authored-by: Andrew Snaith --- .gitignore | 2 + .../common-components/.storybook/contexts.js | 18 +- packages/common-components/package.json | 2 +- .../src/Icons/svgs/close-circle.svg | 2 +- .../src/Icons/svgs/cross.svg | 2 +- .../src/Toaster/ToastContainer.tsx | 58 - .../common-components/src/Toaster/Toaster.tsx | 146 -- .../src/Toaster/ToasterContent.tsx | 51 - .../src/Toaster/ToasterProvider.tsx | 29 - .../src/Toaster/ToasterWrapper.tsx | 35 - .../common-components/src/Toaster/index.ts | 5 - .../src/Toasts/ToastContent.tsx | 160 +++ .../src/Toasts/ToastContext.tsx | 202 +++ .../common-components/src/Toasts/index.ts | 3 + .../common-components/src/Toasts/types.ts | 24 + packages/common-components/src/index.ts | 2 +- .../src/stories/Toaster.stories.tsx | 51 - .../src/stories/Toasts.stories.tsx | 148 ++ packages/common-theme/package.json | 4 +- .../common-theme/src/Overrides/Toaster.ts | 15 - packages/common-theme/src/Overrides/Toasts.ts | 10 + packages/common-theme/src/Overrides/index.ts | 4 +- .../cypress/fixtures/uploadedFiles/file.zip | Bin 0 -> 278559 bytes .../cypress/support/page-objects/homePage.ts | 2 +- .../page-objects/modals/previewModal.ts | 15 + .../cypress/tests/file-preview-spec.ts | 88 ++ packages/files-ui/package.json | 2 +- packages/files-ui/src/App.tsx | 9 +- .../files-ui/src/Components/FilesRoutes.tsx | 2 +- .../DownloadProgressToast/DownloadToast.tsx | 102 -- .../Modules/DownloadProgressToast/index.tsx | 47 - .../Modules/FileBrowsers/BinFileBrowser.tsx | 32 +- .../Modules/FileBrowsers/CSFFileBrowser.tsx | 43 +- .../FileBrowsers/SearchFileBrowser.tsx | 12 +- .../FileBrowsers/SharedFileBrowser.tsx | 26 +- .../Components/Modules/FileBrowsers/types.ts | 3 +- .../Modules/FileBrowsers/views/FilesList.tsx | 34 +- .../Components/Modules/FilePreviewModal.tsx | 14 +- .../Modules/LoginModule/InitialScreen.tsx | 10 +- .../Modules/PreviewRenderers/ImagePreview.tsx | 15 +- .../src/Components/Modules/SearchModule.tsx | 12 +- .../Modules/Settings/ProfileTab/index.tsx | 10 +- .../Settings/SubscriptionTab/AddCardModal.tsx | 11 +- .../TransferProgressToast/TransferToast.tsx | 106 -- .../Modules/TransferProgressToast/index.tsx | 43 - .../UploadProgressToast/UploadToast.tsx | 108 -- .../Modules/UploadProgressToast/index.tsx | 51 - .../files-ui/src/Components/SurveyBanner.tsx | 31 +- .../src/Contexts/FileBrowserContext.tsx | 4 +- .../files-ui/src/Contexts/FilesContext.tsx | 507 ++++--- .../files-ui/src/Contexts/FilesReducers.tsx | 188 --- packages/files-ui/src/Themes/DarkTheme.ts | 19 - packages/files-ui/src/locales/de/messages.po | 70 +- packages/files-ui/src/locales/en/messages.po | 66 +- packages/files-ui/src/locales/es/messages.po | 60 +- packages/files-ui/src/locales/fr/messages.po | 76 +- packages/files-ui/src/locales/no/messages.po | 58 +- packages/gaming-ui/package.json | 2 +- packages/gaming-ui/src/App.tsx | 6 +- .../src/Components/Elements/CustomModal.tsx | 2 +- .../src/Components/Modules/LoginModule.tsx | 4 +- packages/gaming-ui/src/Themes/DarkTheme.ts | 19 - packages/storage-ui/package.json | 2 +- packages/storage-ui/src/App.tsx | 7 +- .../src/Components/Modules/LoginModule.tsx | 6 +- .../src/Components/Pages/BucketPage.tsx | 40 +- packages/storage-ui/src/Themes/DarkTheme.ts | 19 - yarn.lock | 1185 ++++++++++++++--- 68 files changed, 2257 insertions(+), 1884 deletions(-) delete mode 100644 packages/common-components/src/Toaster/ToastContainer.tsx delete mode 100644 packages/common-components/src/Toaster/Toaster.tsx delete mode 100644 packages/common-components/src/Toaster/ToasterContent.tsx delete mode 100644 packages/common-components/src/Toaster/ToasterProvider.tsx delete mode 100644 packages/common-components/src/Toaster/ToasterWrapper.tsx delete mode 100644 packages/common-components/src/Toaster/index.ts create mode 100644 packages/common-components/src/Toasts/ToastContent.tsx create mode 100644 packages/common-components/src/Toasts/ToastContext.tsx create mode 100644 packages/common-components/src/Toasts/index.ts create mode 100644 packages/common-components/src/Toasts/types.ts delete mode 100644 packages/common-components/src/stories/Toaster.stories.tsx create mode 100644 packages/common-components/src/stories/Toasts.stories.tsx delete mode 100644 packages/common-theme/src/Overrides/Toaster.ts create mode 100644 packages/common-theme/src/Overrides/Toasts.ts create mode 100644 packages/files-ui/cypress/fixtures/uploadedFiles/file.zip create mode 100644 packages/files-ui/cypress/support/page-objects/modals/previewModal.ts create mode 100644 packages/files-ui/cypress/tests/file-preview-spec.ts delete mode 100644 packages/files-ui/src/Components/Modules/DownloadProgressToast/DownloadToast.tsx delete mode 100644 packages/files-ui/src/Components/Modules/DownloadProgressToast/index.tsx delete mode 100644 packages/files-ui/src/Components/Modules/TransferProgressToast/TransferToast.tsx delete mode 100644 packages/files-ui/src/Components/Modules/TransferProgressToast/index.tsx delete mode 100644 packages/files-ui/src/Components/Modules/UploadProgressToast/UploadToast.tsx delete mode 100644 packages/files-ui/src/Components/Modules/UploadProgressToast/index.tsx delete mode 100644 packages/files-ui/src/Contexts/FilesReducers.tsx diff --git a/.gitignore b/.gitignore index 103e20fdbd..d6a45714f9 100644 --- a/.gitignore +++ b/.gitignore @@ -56,9 +56,11 @@ storybook-static .DS_Store # test artifacts +packages/files-ui/cypress/downloads/* packages/files-ui/cypress/screenshots/* packages/files-ui/cypress/videos/* packages/files-ui/cypress/fixtures/storage +packages/storage-ui/cypress/downloads/* packages/storage-ui/cypress/screenshots/* packages/storage-ui/cypress/videos/* packages/storage-ui/cypress/fixtures/storage \ No newline at end of file diff --git a/packages/common-components/.storybook/contexts.js b/packages/common-components/.storybook/contexts.js index dbd6abe31a..cba623b372 100644 --- a/packages/common-components/.storybook/contexts.js +++ b/packages/common-components/.storybook/contexts.js @@ -1,4 +1,4 @@ -import { createTheme, ThemeProvider } from "@chainsafe/common-theme" +import { createTheme, ThemeSwitcher } from "@chainsafe/common-theme" const lightTheme = createTheme() const darkTheme = createTheme() @@ -7,11 +7,19 @@ export const contexts = [ { icon: "box", // a icon displayed in the Storybook toolbar to control contextual props title: "Themes", // an unique name of a contextual environment - components: [ThemeProvider], + components: [ThemeSwitcher], params: [ // an array of params contains a set of predefined `props` for `components` - { name: "Light Theme", props: { theme: lightTheme } }, - { name: "Dark Theme", props: { theme: darkTheme } }, + { name: "Light Theme", + props: { + themes: [lightTheme] + } + }, + { name: "Dark Theme", + props: { + themes: [darkTheme] + } + }, ], options: { deep: true, @@ -20,4 +28,4 @@ export const contexts = [ }, }, /* ... */ // multiple contexts setups are supported -] +] \ No newline at end of file diff --git a/packages/common-components/package.json b/packages/common-components/package.json index 72be7e4165..a694ce3a86 100644 --- a/packages/common-components/package.json +++ b/packages/common-components/package.json @@ -1,6 +1,6 @@ { "name": "@chainsafe/common-components", - "version": "1.0.30", + "version": "1.0.31", "description": "Chainsafe Common React Components", "author": "Chainsafe Products Team", "license": "GPL-3.0", diff --git a/packages/common-components/src/Icons/svgs/close-circle.svg b/packages/common-components/src/Icons/svgs/close-circle.svg index 5130be3671..09fe18bc20 100644 --- a/packages/common-components/src/Icons/svgs/close-circle.svg +++ b/packages/common-components/src/Icons/svgs/close-circle.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/common-components/src/Icons/svgs/cross.svg b/packages/common-components/src/Icons/svgs/cross.svg index 3c49f6c4d9..c9d27b1b75 100644 --- a/packages/common-components/src/Icons/svgs/cross.svg +++ b/packages/common-components/src/Icons/svgs/cross.svg @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/packages/common-components/src/Toaster/ToastContainer.tsx b/packages/common-components/src/Toaster/ToastContainer.tsx deleted file mode 100644 index df904ccbaf..0000000000 --- a/packages/common-components/src/Toaster/ToastContainer.tsx +++ /dev/null @@ -1,58 +0,0 @@ -import React, { ReactNode } from "react" - -import { Placement } from "react-toast-notifications" -import { ITheme } from "@chainsafe/common-theme" -import { makeStyles, createStyles } from "@material-ui/styles" - -interface IStyleProps { - placement: Placement - hasToasts: boolean -} - -const useStyles = makeStyles(({ zIndex, constants }: ITheme) => - createStyles({ - container: (props: IStyleProps) => ({ - boxSizing: "border-box", - maxHeight: "100%", - overflow: "hidden", - padding: constants.generalUnit, - position: "fixed", - zIndex: zIndex?.blocker, - ...placements[props.placement] - }) - }) -) - -const placements = { - "top-left": { top: 0, left: 0 }, - "top-center": { top: 0, left: "50%", transform: "translateX(-50%)" }, - "top-right": { top: 0, right: 0 }, - "bottom-left": { bottom: 0, left: 0 }, - "bottom-center": { bottom: 0, left: "50%", transform: "translateX(-50%)" }, - "bottom-right": { bottom: 0, right: 0 } -} - -export type ToastContainerProps = { - children?: ReactNode - hasToasts: boolean - placement: Placement -} - -const ToastContainer: React.FC = ({ - hasToasts, - placement, - ...props -}) => { - const classes = useStyles({ - hasToasts, - placement - }) - return ( -
- ) -} - -export default ToastContainer diff --git a/packages/common-components/src/Toaster/Toaster.tsx b/packages/common-components/src/Toaster/Toaster.tsx deleted file mode 100644 index c37b35a476..0000000000 --- a/packages/common-components/src/Toaster/Toaster.tsx +++ /dev/null @@ -1,146 +0,0 @@ -import React, { useRef, useState, useEffect } from "react" -import clsx from "clsx" -import { - ITheme, - useTheme, - makeStyles, - createStyles -} from "@chainsafe/common-theme" -import { Placement, ToastProps } from "react-toast-notifications" -import { - CheckCircleIcon, - CloseCircleIcon, - CrossOutlinedIcon, - InfoCircleIcon -} from "../Icons" -export { ToastProvider, useToasts } from "react-toast-notifications" - -const WidthToaster = 340 - -function getTranslate(placement: Placement) { - const pos = placement.split("-") - const relevantPlacement = pos[1] === "center" ? pos[0] : pos[1] - const translateMap = { - right: "translate(120%, 0)", - left: "translate(-120%, 0)", - bottom: "translate(0, 120%)", - top: "translate(0, -120%)" - } - - return translateMap[relevantPlacement] -} - -interface IStyleProps { - height: string | number - placement: Placement -} - -const useStyles = makeStyles( - ({ animation, zIndex, constants, palette, overrides }: ITheme) => - createStyles({ - root: ({ height }: IStyleProps) => ({ - transition: `height ${animation.transform - 100}ms 100ms`, - height: height, - position: "relative", - zIndex: zIndex?.layer4, - ...overrides?.Toaster?.root - }), - inner: ({ placement }: IStyleProps) => ({ - borderRadius: 4, - border: `1px solid ${palette.additional["gray"][6]}`, - display: "flex", - alignItems: "center", - padding: constants.generalUnit * 2, - backgroundColor: palette.additional["gray"][3], - marginBottom: constants.generalUnit, - transition: `transform ${animation.transform}ms cubic-bezier(0.2, 0, 0, 1), opacity ${animation.transform}ms`, - width: WidthToaster, - "&.entering": { transform: getTranslate(placement) }, - "&.entered": { transform: "translate3d(0,0,0)" }, - "&.exiting": { transform: "scale(0.66)", opacity: 0 }, - "&.exited": { transform: "scale(0.66)", opacity: 0 }, - ...overrides?.Toaster?.inner - }), - typeIcon: { - marginRight: `${constants.generalUnit * 2}px`, - ...overrides?.Toaster?.typeIcon?.root, - "&.success": { - ...overrides?.Toaster?.typeIcon?.success - }, - "&.error": { - ...overrides?.Toaster?.typeIcon?.error - }, - "&.info": { - ...overrides?.Toaster?.typeIcon?.info - } - }, - closeButton: { - backgroundColor: "transparent", - border: "none", - cursor: "pointer", - ...overrides?.Toaster?.closeButton - }, - closeIcon: { - fontSize: `${constants.generalUnit * 1.5}px`, - fill: palette.additional["gray"][6], - marginLeft: `${constants.generalUnit * 2}px`, - ...overrides?.Toaster?.closeIcon - } - }) -) - -const Toaster = ({ - appearance, - children, - onDismiss, - placement, - transitionState -}: ToastProps) => { - const [height, setHeight] = useState("auto") - const elementRef = useRef(null) - - const classes = useStyles({ - height, - placement - }) - - const { constants }: ITheme = useTheme() - - useEffect(() => { - if (transitionState === "entered") { - const el = elementRef.current - setHeight(el.offsetHeight + constants.generalUnit) - } - if (transitionState === "exiting") { - setHeight(0) - } - }, [constants.generalUnit, transitionState]) - - return ( -
-
- {appearance === "success" ? ( - - ) : appearance === "error" ? ( - - ) : ( - - )} - {children} - {onDismiss ? ( - - ) : null} -
-
- ) -} - -export default Toaster diff --git a/packages/common-components/src/Toaster/ToasterContent.tsx b/packages/common-components/src/Toaster/ToasterContent.tsx deleted file mode 100644 index 58e799f756..0000000000 --- a/packages/common-components/src/Toaster/ToasterContent.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import React from "react" -import { ITheme, makeStyles, createStyles } from "@chainsafe/common-theme" - -const ContentWidth = 300 - -const useStyles = makeStyles(({ typography, palette, overrides }: ITheme) => - createStyles({ - messageContainer: { - flex: 1, - width: ContentWidth, - ...overrides?.Toaster?.messageContainer - }, - message: { - ...typography.body1, - color: palette.text.primary, - fontSize: 16, - margin: 0, - ...overrides?.Toaster?.message - }, - description: { - ...typography.body2, - color: palette.text.secondary, - fontSize: 12, - margin: 0, - ...overrides?.Toaster?.description - } - }) -) - -export interface IToasterContentProps { - message: string - description?: string - className?: string - onClose?: () => void -} - -const ToasterContent: React.FC = ({ - message, - description -}: IToasterContentProps) => { - const classes = useStyles() - - return ( -
-

{message}

- {description &&

{description}

} -
- ) -} - -export default ToasterContent diff --git a/packages/common-components/src/Toaster/ToasterProvider.tsx b/packages/common-components/src/Toaster/ToasterProvider.tsx deleted file mode 100644 index 6d17ef8628..0000000000 --- a/packages/common-components/src/Toaster/ToasterProvider.tsx +++ /dev/null @@ -1,29 +0,0 @@ -import React, { ReactNode } from "react" -import Toaster from "./Toaster" -import ToastContainer from "./ToastContainer" -import { Placement, ToastProvider } from "react-toast-notifications" - -export interface IToasterProviderProps { - autoDismiss?: boolean - autoDismissTimeout?: number - children: ReactNode | ReactNode[] - placement?: Placement -} - -export const ToasterProvider: React.FC = ({ - autoDismiss, - autoDismissTimeout, - children, - placement = "top-right" -}: IToasterProviderProps) => { - return ( - - {children} - - ) -} diff --git a/packages/common-components/src/Toaster/ToasterWrapper.tsx b/packages/common-components/src/Toaster/ToasterWrapper.tsx deleted file mode 100644 index bb3313d28a..0000000000 --- a/packages/common-components/src/Toaster/ToasterWrapper.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import React, { useCallback } from "react" -import ToasterContent from "./ToasterContent" -import { useToasts, AppearanceTypes, Placement } from "react-toast-notifications" - -export interface IToasterMessage { - message: string - description?: string - appearance?: AppearanceTypes - autoDismiss?: boolean - onDismiss?: (id: string) => void -} - -export const useToaster = () => { - const { addToast } = useToasts() - - const addToastMessage = useCallback((config: IToasterMessage) => { - addToast( - , - { - appearance: config.appearance || "success", - autoDismiss: config.autoDismiss, - onDismiss: config.onDismiss - } - ) - }, [addToast]) - - return { - addToastMessage - } -} - -export { AppearanceTypes, Placement } diff --git a/packages/common-components/src/Toaster/index.ts b/packages/common-components/src/Toaster/index.ts deleted file mode 100644 index b0cc98b9ff..0000000000 --- a/packages/common-components/src/Toaster/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -export { default as Toaster } from "./Toaster" -export { default as ToasterContent } from "./ToasterContent" -export * from "./Toaster" -export * from "./ToasterWrapper" -export * from "./ToasterProvider" diff --git a/packages/common-components/src/Toasts/ToastContent.tsx b/packages/common-components/src/Toasts/ToastContent.tsx new file mode 100644 index 0000000000..74fc98ccc5 --- /dev/null +++ b/packages/common-components/src/Toasts/ToastContent.tsx @@ -0,0 +1,160 @@ +import React from "react" +import { createStyles, ITheme, makeStyles } from "@chainsafe/common-theme" +import { ToastContentData } from "./types" +import clsx from "clsx" +import { Typography } from "../Typography" +import { CheckCircleIcon, CloseCircleIcon, CloseCirceSvg, CrossSvg } from "../Icons" +import { ProgressBar } from "../ProgressBar" +import { Loading } from "../Spinner" + +const useStyles = makeStyles(({ constants, palette, animation, overrides }: ITheme) => { + return createStyles({ + root: { + backgroundColor: palette.additional["gray"][3], + margin: constants.generalUnit, + border: `1px solid ${palette.additional["gray"][6]}`, + padding: constants.generalUnit * 2, + borderRadius: 4, + position: "relative", + "&:hover $closeIcon": { + visibility: "visible", + opacity: 1 + }, + ...overrides?.Toasts?.root + }, + progressBox: { + display: "flex", + alignItems: "center", + marginTop: constants.generalUnit, + ...overrides?.Toasts?.progressBox + }, + titleContainer: { + display: "flex", + alignItems: "center", + ...overrides?.Toasts?.titleContainer + }, + subtitle: { + marginTop: constants.generalUnit, + ...overrides?.Toasts?.subtitle + }, + icon: { + marginRight: constants.generalUnit, + fill: palette.additional["gray"][9], + ...overrides?.Toasts?.icon + }, + progressBar: { + flex: 1, + ...overrides?.Toasts?.progressBar + }, + progressCrossButton: { + marginLeft: constants.generalUnit, + cursor: "pointer", + width: constants.generalUnit * 2, + height: constants.generalUnit * 2, + fill: palette.additional["gray"][9], + ...overrides?.Toasts?.progressCrossButton + }, + closeIcon: { + position: "absolute", + right: 0, + top: 0, + transform: "translate(50%,-50%)", + fill: palette.additional["gray"][9], + width: constants.generalUnit * 2, + height: constants.generalUnit * 2, + borderRadius: "50%", + backgroundColor: palette.additional["gray"][1], + border: "1px solid", + borderColor: palette.additional["gray"][9], + opacity: 0, + visibility: "hidden", + transition: `opacity ${animation.transform}ms`, + display: "flex", + alignItems: "center", + justifyContent: "center", + cursor: "pointer", + "& svg": { + fill: palette.additional["gray"][9], + width: constants.generalUnit, + height: constants.generalUnit + }, + ...overrides?.Toasts?.closeIcon + } + }) +}) + +export interface ToastContentProps { + toast: ToastContentData + onClose: () => void +} + +const ToastContent = ({ toast, onClose }: ToastContentProps) => { + const classes = useStyles() + const { type, title, progress, subtitle, isClosable = true, onProgressCancel, onProgressCancelLoading } = toast + return ( +
+ {progress !== undefined + ? <> + + {title} + +
+ + {onProgressCancel && + onProgressCancelLoading + ? + : + } +
+ + : <> +
+ {type === "success" + ? + : + } + + {title} + +
+ {subtitle && + + {subtitle} + + } + + } + {isClosable && +
+ +
+ } +
+ ) +} + +export { ToastContent } \ No newline at end of file diff --git a/packages/common-components/src/Toasts/ToastContext.tsx b/packages/common-components/src/Toasts/ToastContext.tsx new file mode 100644 index 0000000000..b9cc6e22bd --- /dev/null +++ b/packages/common-components/src/Toasts/ToastContext.tsx @@ -0,0 +1,202 @@ +import React, { useCallback, useMemo, useRef, useState } from "react" +import { createStyles, ITheme, makeStyles } from "@chainsafe/common-theme" +import { ToastParams, Toast, ToastPosition } from "./types" +import { v4 as uuidv4 } from "uuid" +import { ToastContent } from "./ToastContent" +import clsx from "clsx" + +const useStyles = makeStyles(({ constants, zIndex, breakpoints, animation }: ITheme) => { + const WIDTH = 400 + return createStyles({ + toastWrapper: { + position: "fixed", + width: WIDTH, + margin: constants.generalUnit, + zIndex: zIndex?.blocker, + [breakpoints.down("sm")]: { + margin: constants.generalUnit, + width: `calc(100% - ${constants.generalUnit * 2}px)` + } + }, + topRightContainer: { + top: 0, + right: 0 + }, + topRightAppearBox: { + animation: `$slideLeft ${animation.translate}ms`, + [breakpoints.down("sm")]: { + animation: `$slideDown ${animation.translate}ms` + } + }, + topLeftContainer: { + top: 0, + left: 0 + }, + topLeftAppearBox: { + animation: `$slideRight ${animation.translate}ms`, + [breakpoints.down("sm")]: { + animation: `$slideDown ${animation.translate}ms` + } + }, + bottomRightContainer: { + bottom: 0, + right: 0 + }, + bottomRightAppearBox: { + animation: `$slideLeft ${animation.translate}ms`, + [breakpoints.down("sm")]: { + animation: `$slideUp ${animation.translate}ms` + } + }, + bottomLeftContainer: { + bottom: 0, + left: 0 + }, + bottomLeftAppearBox: { + animation: `$slideRight ${animation.translate}ms`, + [breakpoints.down("sm")]: { + animation: `$slideUp ${animation.translate}ms` + } + }, + "@keyframes slideRight": { + from: { transform: "translate(-100%, 0)" }, + to: { transform: "translate(0, 0)" } + }, + "@keyframes slideLeft": { + from: { transform: "translate(100%, 0)" }, + to: { transform: "translate(0, 0)" } + }, + "@keyframes slideUp": { + from: { transform: "translate(0, 100%)" }, + to: { transform: "translate(0, 0)" } + }, + "@keyframes slideDown": { + from: { transform: "translate(0, -100%)" }, + to: { transform: "translate(0, 0)" } + } + }) +}) + +type ToastContextProps = { + autoDismiss?: boolean + dismissTimeout?: number + defaultPosition?: ToastPosition + children: React.ReactNode | React.ReactNode[] +} + +interface ToastContext { + addToast: (toastParams: ToastParams) => string + updateToast: (toastId: string, toastParams: ToastParams, startDismissal?: boolean) => void + removeToast: (toastId: string) => void + toasts: Toast[] +} + +const ToastContext = React.createContext( + undefined +) + +const ToastProvider = ({ + children, + autoDismiss = true, + defaultPosition = "topRight", + dismissTimeout = 5000 +}: ToastContextProps) => { + const classes = useStyles() + const [toastQueue, setToastQueue] = useState([]) + // using useRef instead of useState to keep a tracker over the exact toast array + const toasts = useRef([]) + + const removeToast = useCallback((toastId: string) => { + toasts.current = toasts.current.filter((toast) => toast.id !== toastId) + setToastQueue(toasts.current) + }, [toasts]) + + const addToast = useCallback((toastParams: ToastParams) => { + const id = uuidv4() + toasts.current = [ + ...toasts.current, + { id, + ...toastParams, + toastPosition: toastParams.toastPosition || defaultPosition + } + ] + setToastQueue(toasts.current) + + const isProgressToast = toastParams.progress !== undefined + const shouldDismiss = toastParams.autoDismiss || autoDismiss + const dismissTimeOut = toastParams.dismissTimeout || dismissTimeout + + if (shouldDismiss && !isProgressToast) { + setTimeout(() => { + removeToast(id) + }, dismissTimeOut) + } + + return id + }, [defaultPosition, autoDismiss, dismissTimeout, removeToast]) + + const updateToast = useCallback((toastId: string, toastParams: ToastParams, startDismissal?: boolean) => { + const dismissTimeOut = toastParams.dismissTimeout || dismissTimeout + if (startDismissal) { + setTimeout(() => { + removeToast(toastId) + }, dismissTimeOut) + } + toasts.current = toasts.current.map((toast) => toast.id === toastId ? { ...toast, ...toastParams } : toast) + setToastQueue(toasts.current) + }, [dismissTimeout, removeToast]) + + const positionedToasts: Record> = useMemo(() => ({ + topRight: toastQueue.filter((toast) => toast.toastPosition === "topRight"), + topLeft: toastQueue.filter((toast) => toast.toastPosition === "topLeft"), + bottomRight: toastQueue.filter((toast) => toast.toastPosition === "bottomRight"), + bottomLeft: toastQueue.filter((toast) => toast.toastPosition === "bottomLeft") + }), [toastQueue]) + + return ( + + {(Object.keys(positionedToasts) as ToastPosition[]).map((position) => ( + !!positionedToasts[position].length && ( +
+ {positionedToasts[position].map((toast) => ( +
+ removeToast(toast.id)} + /> +
+ ))} +
+ ) + )) + } + {children} +
+ ) +} + +const useToasts = () => { + const context = React.useContext(ToastContext) + if (context === undefined) { + throw new Error("useToasts must be used within a ToastProvider") + } + return context +} + +export { ToastProvider, useToasts } diff --git a/packages/common-components/src/Toasts/index.ts b/packages/common-components/src/Toasts/index.ts new file mode 100644 index 0000000000..6f479d6cbf --- /dev/null +++ b/packages/common-components/src/Toasts/index.ts @@ -0,0 +1,3 @@ +export * from "./ToastContext" +export * from "./ToastContent" +export * from "./types" \ No newline at end of file diff --git a/packages/common-components/src/Toasts/types.ts b/packages/common-components/src/Toasts/types.ts new file mode 100644 index 0000000000..b9828b9c62 --- /dev/null +++ b/packages/common-components/src/Toasts/types.ts @@ -0,0 +1,24 @@ + +export type ToastType = "success" | "error" + +export type ToastPosition = "topLeft" | "topRight" | "bottomLeft" | "bottomRight" +export interface Toast { + id: string + type: ToastType + title: string + subtitle?: string + progress?: number + onProgressCancel?: () => void + isClosable?: boolean + onProgressCancelLoading?: boolean + toastPosition: ToastPosition + autoDismiss?: boolean + dismissTimeout?: number + testId?: string +} + +export type ToastContentData = Omit + +export interface ToastParams extends Omit { + toastPosition?: ToastPosition +} diff --git a/packages/common-components/src/index.ts b/packages/common-components/src/index.ts index 72c5520605..8684f17bf5 100644 --- a/packages/common-components/src/index.ts +++ b/packages/common-components/src/index.ts @@ -31,7 +31,7 @@ export * from "./Spinner" export * from "./Table" export * from "./Tabs" export * from "./TagsInput" -export * from "./Toaster" +export * from "./Toasts" export * from "./ToggleHiddenText" export * from "./TextInput" export * from "./TreeView" diff --git a/packages/common-components/src/stories/Toaster.stories.tsx b/packages/common-components/src/stories/Toaster.stories.tsx deleted file mode 100644 index 7b037a353d..0000000000 --- a/packages/common-components/src/stories/Toaster.stories.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import React from "react" -import { - Toaster, - ToasterProvider, - useToaster, - AppearanceTypes -} from "../Toaster" -import { withKnobs, number, select } from "@storybook/addon-knobs" - -export default { - title: "Toaster", - component: Toaster, - decorators: [withKnobs] -} - -export const ToasterWrapper: React.FC = () => { - return ( - - - - ) -} - -const ToasterDemo: React.FC = () => { - const { addToastMessage } = useToaster() - - const onAddToast = (appearance: AppearanceTypes) => { - addToastMessage({ - appearance, - message: "Update successful", - description: "Your updates are complete" - }) - } - - return ( - <> - - - ) -} diff --git a/packages/common-components/src/stories/Toasts.stories.tsx b/packages/common-components/src/stories/Toasts.stories.tsx new file mode 100644 index 0000000000..a18f1feffa --- /dev/null +++ b/packages/common-components/src/stories/Toasts.stories.tsx @@ -0,0 +1,148 @@ +import React from "react" +import { ToastContent, ToastParams, ToastProvider, useToasts } from "../Toasts" +import { withKnobs, number, select, text, boolean } from "@storybook/addon-knobs" +import { action } from "@storybook/addon-actions" + +export default { + title: "Toasts", + component: ToastContent, + decorators: [withKnobs] +} + +export const ToastsContentNotification: React.FC = () => { + return ( + + ) +} + +export const ToastsContentProgress: React.FC = () => { + return ( + + ) +} + +export const ToastsContentProgressNoCancel: React.FC = () => { + return ( + + ) +} + +export const ToastsDemo: React.FC = () => { + return ( + + + + ) +} + +export const MultipleToastsDemo: React.FC = () => { + return ( + + + + ) +} + +const ToastNotificationDemo: React.FC<{toast: ToastParams}> = ({ toast }) => { + const { addToast, updateToast, toasts } = useToasts() + + const onAddToast = () => { + addToast(toast) + } + + return ( + <> + +
+ {toasts.map((toast) => ( + toast.progress && toast.progress < 80 ? ( + + ) : null + )) + } + + ) +} + +const ToastMultipleNotificationDemo: React.FC<{toast: ToastParams}> = ({ toast }) => { + const { addToast } = useToasts() + + const onAddToast = () => { + addToast(toast) + setTimeout(() => { + addToast(toast) + }, 1000) + setTimeout(() => { + addToast(toast) + }, 2000) + } + + return ( + <> + +
+ + ) +} + + diff --git a/packages/common-theme/package.json b/packages/common-theme/package.json index a9ce780175..018734f4ad 100644 --- a/packages/common-theme/package.json +++ b/packages/common-theme/package.json @@ -1,6 +1,6 @@ { "name": "@chainsafe/common-theme", - "version": "1.0.10", + "version": "1.0.11", "description": "Chainsafe Common React Theming Engine", "author": "Chainsafe Products Team", "license": "GPL-3.0", @@ -18,8 +18,8 @@ "lint": "eslint './{src, cypress}/**/*.{js,jsx,ts,tsx}'" }, "dependencies": { - "rollup-plugin-copy": "^3.4.0", "@chainsafe/browser-storage-hooks": "^1.0.1", + "rollup-plugin-copy": "^3.4.0", "ts-essentials": "^7.0.1" }, "peerDependencies": { diff --git a/packages/common-theme/src/Overrides/Toaster.ts b/packages/common-theme/src/Overrides/Toaster.ts deleted file mode 100644 index 233b24da9d..0000000000 --- a/packages/common-theme/src/Overrides/Toaster.ts +++ /dev/null @@ -1,15 +0,0 @@ -export interface IToasterOverride { - root?: Record - inner?: Record - typeIcon?: { - root?: Record - success?: Record - error?: Record - info?: Record - } - closeButton?: Record - closeIcon?: Record - messageContainer?: Record - message?: Record - description?: Record -} diff --git a/packages/common-theme/src/Overrides/Toasts.ts b/packages/common-theme/src/Overrides/Toasts.ts new file mode 100644 index 0000000000..8c9fdab3c4 --- /dev/null +++ b/packages/common-theme/src/Overrides/Toasts.ts @@ -0,0 +1,10 @@ +export interface IToastsOverride { + root?: Record + progressBox?: Record + titleContainer?: Record + subtitle?: Record + closeIcon?: Record + icon?: Record + progressBar?: Record + progressCrossButton?: Record +} diff --git a/packages/common-theme/src/Overrides/index.ts b/packages/common-theme/src/Overrides/index.ts index ac1f67a883..e56d61266b 100644 --- a/packages/common-theme/src/Overrides/index.ts +++ b/packages/common-theme/src/Overrides/index.ts @@ -21,7 +21,7 @@ import { ISelectInputOverride } from "./SelectInput" import { ITableOverride } from "./Table" import { ITabsOverride } from "./Tabs" import { ITextInputOverride } from "./TextInput" -import { IToasterOverride } from "./Toaster" +import { IToastsOverride } from "./Toasts" import { ITypographyOverride } from "./Typography" import { ITagsInputOverride } from "./TagsInput" import { IToggleHiddenText } from "./ToggleHiddenText" @@ -50,7 +50,7 @@ export interface IComponentOverrides { Table?: ITableOverride Tabs?: ITabsOverride TextInput?: ITextInputOverride - Toaster?: IToasterOverride + Toasts?: IToastsOverride ToggleHiddenText?: IToggleHiddenText Typography?: ITypographyOverride TagsInput?: ITagsInputOverride diff --git a/packages/files-ui/cypress/fixtures/uploadedFiles/file.zip b/packages/files-ui/cypress/fixtures/uploadedFiles/file.zip new file mode 100644 index 0000000000000000000000000000000000000000..45354446b031b4e53698843f6fe945c1a228bb41 GIT binary patch literal 278559 zcmV(;n6U9{wF@y*pC}^#M)Lk%Hi|>2mh9p zzqq!N5awz4`d`*pzKCD1g0JJtR@1NlH-5bqCJ0}<@#~fR*9Yih_^;oik0~yi17CCS zwP|J4*JV*(hh7(luw4HGXFY*Yx#Hg{@$>v&5rS*Ve|KoDhQ25Kf8d`1ba7zldoS!G zWcE$?zI*6A0a=hA>`e2KChGYX7+FfB*j34>$Cj9@PHhAOGkjHAEm33PnOu zOpHj3h(Qxc~qrevn3WvmV!DPuRQQc^_&12r8U1ODA#i5Q7-tep zmj<7LDW?CU)|C}`)dM4@@z}qO_-&yl`qP-BP|#qy_ak`8g+3CQOJ(>+lScgNSd*Bf zz4uE@Kqm?GrD6;5qu?-!)mBYrnz57XPnnT5bP&MYRGc16v_N5ad3BWw6W z$25!a5i>S3r`~t32T+3yeWY`V7$>P5A;6E;2rRHEHs5)VpYsA2(T7-vzJX(KglUhZ zk$bxcKVnGwy_8ZZ@sW^4jI;}?prJ9QM*7E}1OypUv})|1`sF4Pwod94L!L3hI)Aoj z9j9f(~x*3Wp+`4`NJe4wLp z_#^K!i;z`L#4KiCj`1^I`P43X7$17=fng84+blvjF(I>{FO{I$H->HSx}Yye zp>xPMM}(2P&4R~?37Q3t_~PpMg`@r?QG_qXugD0y7~vy7RUt!xj+j{YsOG_R(O08ZK_O!Z#6uB3G#1L|{4?f31Y6DN+ei66 zzaZ2wM_5N_l|o~F&dSb_zssA)1YkURfTb=YZeqzlYe6vH;>SXFRJh|cL8lOd(~II;3G;o!=J8Kkknl)9u$7u89TYI4 zATOicKzD6%n9F|ms%3zPU#7n>Sk3U@Ea z4`Lpp4aS-o0dDjW9!aR50LLX|=Nc8H4&8;|`P zJVZ0>XO3Z?e%dT1<)G2g$U+w+YxIZz*H-}g(UCE1l|PICjT|wdSs5ar8$6 zDTRqf=c50VNig~RXByV5k*~&{1h`SOd4}Se!1hxn5z3!=7o~u8FQY(uZbe9sd?)0k zKW!yQJpY8$A*fF1bnY<;^q(PxgxupNP9kKQ6tUj=mIp>WIc1c9HNB{3Ps#Sv2y`MgfbOCbi1Zoivm>;=`~sz|0t0i=PBo z;d%xYo_ChJLr7$VDhhP9Bm`9%R>V)7L`*#WMD2j$71hc;ClPk4p*j3$7EGd_kkT8f ziF+7DB$E$MB0Ptm=pJFvL?fW?NoO;93>&Ix@MV~xm;On?14a}5NTUZ|Z5xp=jyef` z7DMINpJ)+4pXl@Z$oLi!RnP#ZiZX+r!tro~w1KZm!Rj6saaXY|G=2)T!Vz*$B;Ird z?tu|^)pbH68Z0prcmL2i@Tx%JDQ4Zn9PX}g@gv$b(@`Q(wd#k>fma0uOFjV^QCyn9 zBqT$Ehp?BJ)jwzwpZ6Ey^BB3nPX@v!u++!kAp_tc++C6dI@Vmy{Iu3azp~ERd6`g_lrtW=p&`=r<_Du zE+vYOOho497iR*4zPb?WXhT($QP*WGgN;~9W_59_ug@1sa5!x{u`AjckDG`Nfay%g zV)&Io@1bOa-%N^1!6IWUvn6ck^Ax8)c5iFT!*7%HRb65+<07OSXH!n39Zr&OnxHRH z6hZbgRK*z8e8)1H2(o2vJe(C%2&>aa|0^x!Kv@c6*Es=U(6mxj6PQkQuNu6LBm)5@%vt!%*>l zG`Jg6UtwaFxyk3B`S#~s{!pnvtUcuvDmY?LIu#vGuxD5ww4?DxB%7rO&Xf1i6gJ)p z2@Yp&-T!>w-r|@-<`|?!GO27Bes2DP0OgcBl6NC|{qH7>) z+KNTRKi}JGiiKs8_Dlu_Bl5J1buPl$>0dJ}6<9czopxxAg4u6gQ8u*m5NS+-`UGaK`Gho9N+)=8t=fa zP_(CLFq&bFsl;$PV4d=M(UD?*=IaA~@wEZwptDQCY$Bvn>C}E?f~n~|?Ml{}rU2y3 zHwj*Hj%)Oh)PQ~wRf`_+u(1{_Z1JGR?sxsx#F$0J)1DGv;ekcBSj6yyM2r_^sPfPkskIMw=10KB)|U;xDedhvT9V-G%)$nA>ejib5cSV$3$Hq)M}%$j-e`0JMs z`yuXtb$kKjXUEB3k<(JGxLg4MCM`3idZc!(gcI9w3DdNQ#N+5S5_Bk{Q6C-6-o}E~ zaKbbBk6i<8z1D}U`TGv{^~L+*7tu|F)3!8=7!a1TGae3N5X_G&EjNH_#WpAB25nPX zbB_^0jiFdH%Ib}ogoLeb&G!65bFY049@3rY<#fD_R1IOxkOc45d8c>~N6+}+YLriw#VrD-dQj=r$wRq&3? zH{J$3iT5$@!IPCg?9?4evq(SFRl82((%E5R(vD3^Ri|BO(DItzQA#BD^bveE|E!NpE+s;-@(t&i`lXv@T1q>0o0Kk?rJbvOpq(=- z>qY%c255g=n4zeG>W$h0y__S%N_Wb=me?kio$r-C=FwW9;X0xt(vu@MO#lJVKa49{fTPRba?lO`|?TXi;OE79Z@hUcElo`o!l) zx{E7+zV9%W>V2f(kH04d+i7AiXIz~C=bH7RLoaf6Q9rc+gIZZHwN)FP94FSBB<1&9 zSZV+f@Z@{5Dw*NUrTI=W<=2mpqT2LPyUxNq$C|l&=Jgk|a%a8h$}F;cvsT)vm4G#9 z?d5`(Ho}xU6+vlG+Og55^t2af(-2rY$Fm1yx2XT2+ztLa3=CvGm@vX>OnSX@lxGOl zLWHYd?wfhNYRv@zgfA~FYXRFmoM1{nID=G>)sx$WQu#rlqEo1&xM~1@D=6JjYT4+3 z|7x=Jq5~2)Ot^krU!#~c5L)Wc3R_8(=5a&N;-nB8zb`+!eJwmf5nuf2)s{71-tdPP z*>6qAX^eehReXH8i3n#sob*eK2kRh|0w|<crVWnX|@7a;X%k~+y?o3GER9CR@wC#Cv&qByTU6CiUOK!7BSeStcSc7GO01^N7QsHqc^4K?87s| z8Dk==aGx^8qGF!p>vJzwW7RUQCjxon36DiPZsag72+KV!`U8b!4Lc&RR;H)^p%N^Zh78xANp^-bAEr2?%sRZz)-_lAO8P4OgVys$ z_cvJ=@2wih+*+7wQ&suv1vVK6GX?7a+io`H&V)uA~mdOAvG!gBxo_@=!} zk9`hySm-0-hm$;{T>hTe4n$L2mJJiPt5cIQ&=KusOHIJC*|xbrbRbpbrG&Yl6k-De zL`D^Al^&jf(B_Qd5C9H!Nn=z&qCgQD8_VL>tMj^a5v z1E$=x_~ng_Fl#(z$-JQ{m6mIju2Y^mmpdOqp}VmLY+J(Fxmt5$EdmK!t(S0M9xjR7 zU;rS9u8j_xHIE`;j~w1~9~n_8d;Fs0=qAa?LjU}oB_$8uF1fUz^@E-3dMfC%EhT; z@gGe@vYJRgGmCX9JGV*aNlnsAcAwJYY6FA>Pw7*WpR75MrnTE8=KSmofi1Mw0!t}8 zcRKbWY1@aBR5XnU$BS;Hk6O{_v^joJQg(!c>{=Mv{F{8NZEyoD_l*yBp1yI;8WD4s$UPg7qb`Rf@7=xQaq$)M%z5MkVnuAszRupIp|00!RiRRJ6O?|8KKbFb#C96&CyhWyAWbod4shU&2Q)cFa!;DJ zpnRrnfwr;M%|Y}*TB4%KtUbDk11u-1kAR=7H9YBI2Rg!IL?vKf&Fi6LL2erAPx;&r z)_wkVIGUl zd0T3VKF?O`W@U955_hm2tVr$x7gfnUAxPT`tO_W1fi|*Dg#%r3$U#S){D@MEV5_Y7 zFkN|h_Kcx*_?OR*!{nbS*!|Ff67OuDhS!3z|2c6 zHW}>MY!aKIw{+Cv;xEv00OEGL!A=baq9*{n1w1t%am(BcV%KWwh+3|lc-y1#CT#R{ zS0NnphmVo_W9h#6Mfhmh5#Nwjr@guk)_!n97X8=S`sL0xFrJwg<}NC(xc2%0cH#?i zo+_0r2Vb>+qE!+OtjBKV>hv-`a_W_{({yhbYYs##AK(Vv7A&7pVI%*;zS2_Qdhq}7 zUI7Uup5&6{;le4zaD4gL%`x8OnNt+ENQ(Syu~zRjy(MFFC!X8k2!G zj%OT$51op32?xs`1v+%Wv%;l?kq2}~pFMx7A!@rCd^WW5IQxog0G5^hfq_aZ(A%yA zy0ycocKkuq@Oz0}+6nj$mZ5NZf!VSWh)8Bc%;jvdHb3`(1tKbVtzKY5(_tRak{Qp^ z7ZU1J0G|b=Q61)V#r+r>4BgV7IPp$5oAG3wU72h3M}nno0A16 zh_V{2l~4*p4SvMoK7Ne3jSwE0{+7zne#7RRJhoL0*qpv!i* zBiXX6?P_Y~b~6Nimj3mgGS&n@1t647P$Y4us!~;G9--!{9i_k(SXD|CdJeakQD;8x zs;{vENYYssv}N6(6l_Bxq{&O4+jltAxz8ycAQD)16U^q9)y7SLGA^u`m^dy?i}P02 zqs;@_BU;MpSdT#s1}`)yfbPnW=k5oG(-S6K$^WvfG{8(S?Y7_3Rs$u^5rp9ZOoOf(Cl?iNV+92c? zxZ1e(0GJjeWM;85wIC`@yFai36IZ@e!!di zvfWiT278+NZnUqiQ)Frg5z(jvs!Ues41p!7A@o$o^-WC?j|$K+zS+%yaGubt74_q ztcLg2jA#>bd)rxrdT9`!pAS_A88f@x1*WEQ4S^1?fQ8|;j~_(?WA1E39`M}p+theq z@>ec4-5A{PP*WeRVOSxt_D}8W5>~DvrJ#Uvtr!!%A|Ug|&GvE~I4`3&sJYOx(@4w8 zsXlbGmEfcSVplrJ)YX+_@~U(}t`l+>xhHNDaG(@s=q{CEJ}_#?9diRIJgg;`zy)qx zxp-n(TUF%;&F62I^j%-r`sLQ9!7l7EfP@uBr-9%Ot6JvH&jvcbxj^C$py}7?hXerN zx51bBdHOj9tsLNoNC8>);TooTg!(zM(`llB_mqA}2WUM=H~B(W>?l4wE_8}7l-vXj zfCqpEz>Bk<0qkD~A$RFJU_ws}eA*@6wTdVdrGS7^uH9}I)q@N2qb&o+TC6{BDtuyK7S(LIq8%i_tqf&fF^Z(<$|;eaxiD;)oEVkA1a>TH9gVcae-8P0qADc zy1|PlD%z^TBHTFIdemQ;l^EOii^>Gk>V;iItXS^UdD`VJscn-!rwG!i90kp%=mC%dJbUi61NXr^7MRD>Pd7VH)i`CeqT}tfm#Zu_rIF@Y8pN>T%iB`8rFdw_ z3di?_ge4oY)?MiVAzp<~7#b>Dv54b8Q8MNA!Qxr#=e+Ek+C`Q-rFN~f!x=11(;8?Y z!7gdg=LU8x$Jtwgn4W`cWMFVpfMOt_5osYHs7Wm0+ZQk-s37>o)dby|+(3j*P#p|J zTHQxts;F@SQDL$ltm)?9#pY#TO;<3oW%b=?`2a|CLcwqUShZ%ARk$AKpy({sflK4I zwYQyvWcPsGY++d>5g3>43uc0)V~lHbd6ly;X@3OfroeM9#V`WiGYS@aO~a_6@6KkDt1$bu_5!_zQk!O3fmF| zjm)uhqSm%cXMMXz^PqLl>&kUl(TJrR?vtI{^Ae=1~;N8 zfD53KinnR0>-k#7#YvrjXSP4P3(9OPxKwx=2vJx_4(*ROk?2|)h$xYba$=!97ZG-ETseQe=~DjjZQHgU$~o-MtS%<$u@d4Y3ls_txT@ZQWlfkWdon3Qjv*UD zpRuN2j==)K3;x=^g7g6>mQ#9~bRWZRXF;`!x8ua6f6V)!7W%?nyu{Dz$O+`nFsZPL9 z31kFdTc?1BLxcub$-QWp36#SY?6hq*fgr%BPRhW#(Co~RH`fGGRrMwrVN8OpB%T~_ zxEYSG?xa{qW|!kBj;bzTPOd$sq& zWqlAydTCPh!FJ4`r#;uSs5rw^bkIo)$uc)z@8XbJ2isX0pjNG1Q(#cr?eZkI{zdOc zn1@nXY+oTU&o|Ynz*rW~z&w@+ibNPfPpd$bPxR)Fpu+N-@chu(BmK27;tToh7SYy7 z4SRe~38|%d*`3yxDZOfeT&V(5YO6IX^WBg47Q?d_7P{R;riLULx3%y@)*?)fT_GX|5=MZcOsPQ6v|Rcg`$A33C6`+Pl!Q?|lw zX^8m!NF(Dt@S67y(8)!wF6bhAy1K^!7zDmGslRwUHO(9OwZeC zV~wo(lQg9W>}Ua^*&cq|WH_+Wul=ZGTx|WTim>j3{Xk$sz?CffMC2i^4LDuNtJlSEw|% zs5HnSPb_T(@&%(eb8E#`A4X$QJ<%LA)tewryMn+|=1`u6@x8VoO@h%8&5Y(Ct3CO^ z&alc2BtG^RGmy0O#p?EJ4W!&4K&Hl7-g-&z(3m-Io@Tx~a^}+%BEwPTC*QCmZsV$k zu`U5N-`4u_)k}Z?Ew=#A3ff+Ptm?wD8@-j8+p3HCR9|8SK8x9i5mpyl1Ry7;Nx0iJ z%+Anlp8lu^vvO%?DOv6lu7k9gMq7i@8N{NAx8oE2lScM|jVtu5ZTg=gh!)OoN3AW8 z37{GI`H~G))MxH|4$?gOCUavWrbiMrk-24%pR?iusn?*Uz-y_c z*_G|Dpd}3b!Zcc7+tm*;n>dcx#TY5meVC)0JB2eH!ZhVcbx>b`zJIX5W-mxFsQbh9 z2A;)`vG#q)B-ePN#8{sJ1_K7xydNMS1ZWT52EFtx-3Ow)UKrm65K}5PGZ~Ctbb!*^ zGC(!pj;NXAWkniGwOcbsh3Y{Uf+P%ON%g?=-f!{o+dHWq1@4oxX*zwL=1J*Bou0KE zT&xZZo#zO3#*SLxoQSuOme!E#U+?{}qOBE~@>5qfJlJBb?1gM4A?NVwRl+CdWbZ0H zpOUczYh<7Dw49Yg{HvRp!~APlSq60;<~wQay(nYq<> ztgB*RDiIQ$3uvJLGA^1J8q^&U;4{GY!OAA-^tM0iA?oYJCT_>`Kw}PQ-rqQ1s0FuW z=JKZjNqu&P1VpZ1Vcfz6Eq{?`G=98-bJ@Z)IbvUp0xTzS(>oy6VXNw&`ZzwEs_3vE!k1(Jq382BG2IRZ2bkc{y9kv4H=C=ML3&8rBEvy zLo?&M3xj(Az%18a9Y8a~nAv;m=HUAC$8Tfw-?s6crd3@{kT*Q+=@g6AxEG3>i&%k} z->?|~8Zs_gRbllnu_*>xE0uewndO`CRHoo{l74U%NtXbwL;4B%7f8@=dCQT69ncnTQ_etyz zO9!ht~FDOoQn=R6C!LsMq#DHz>%CLqth^nS3r3KaC=uTeo&zXW1~_2SCG^Vcr>Zyo8vqZtWUV-@RE zsVaFAZiQ=jX&UtN>+}XSN+N5}B||Qsg87a-iA_lZ_M>()D)b#+Oal6zY)?RJ9;n0UDt%&EwI&!2^t2R?n})e5HNy66}zc8Em>Ka z+vjD!8|#DIPvpU3rDo2w*_|^TjImlTqs7+KX^Ks0qJB^m7X3mw^hr?w&GEC4`ifL`a3avte$85WMqT94 zA>pIxXqysvaoD&L;f7)usyw6!_k-*jc~yI^(TtdJAPII(S`O}hg- z5@Bvwt<(mT;sOa5x6zhA$72DilV^gEiY*M@cC2g&e%m!`sjmW8q+D0c0$4PjRI{4- zI|>SH+{boDie~Nf&+bFPEZa&$6LN+k>gas|6HwCRcPftO$#0v-5Mo@KRNr z+ioZJdU9|oqz2;4PR0btZ7-K{xG_*~gDA8(J;*lN&gKC;XzXj(uF!{h0-_x~^*VZr zFn(YSDGDO%o%^@l`Tq8!iLKx9wWu3|C7CT*553&GGP{_Tw3&w=)`K6hNqXH$&+^#@ zb*NuJV+!bBw77tm+NOVGOOap~1d;@AyUx{4gin21-QuGOzqHK6)j_h#bL+JZ&071@ zJw~O(TVp#rXV(a!oMU0c1dI>e2{Gd38&$sqtzauj^UUT{TddxyeU- zJ|@{DcvdfP2yF5crN>|p+e`T}8l?UW8e2`N_q2*ua3C#Bdf?O+K@m70yZ|^8KzMqr zMC6pXZGUX22_pO9@=`QU_ZZRxLDpNtodw(rixl4I9)mSZKurnOlB{)uy(eC~b0-o0 z+`kPRs|5&Z^U}ffB{OgJVO#hBT`bL$7YlMS0BBYrnR9{1@h#cAZ~vF20~KS zk9AOYN| zq&q~RdIyA8Ful;erKSwH(QJCIfF5sz#lR-{bP?{@SZadC+WHj+SL0dR*I$2Z*k!k` zOi5B2+%6YuX;ASK!ca>seN>4iprn8K{P^yyb&ziVdLI7S-+k%B{g`v#0vx|~`PMBw zG80n>9uC2&6m02P>{eAS2+hew+A=zg8Gv-E)Nx-`68aCSGe-ItO3t43Nty)bY8hw!Hd z^aL~<{OSDdk_#8Ewqzv=Zu|lw`eX$W1q3$95x2z^gy3^pz6m?)>Hq`zs2e=3&ohA~ zE_6uno2Vu?-e^?hoR#sUkMXq&XBLSLl!=0D2ItT$W{nLGKI`?m`uqDqs?o&42sNsz zCP4IvbiJIMV(bu9^bjn+OwwEpU5nvrC^B}4}7Y2v8WQDu#omSc+dbaX9czt zDfpY_{TdK01HOEN`d3BK$?Vo+;^wtZx;7kkZbRazl)8ciwoh24!O-CS;)^f-uGg&9 z$JH6?wv~tatP$P?M`&ki{N3DQ0(6P2S#tr>KrD0tw%@t`caQ)2@%=#9TVKY+y#1eR0A&Dna*ll7K^NNM|B4h#1+h?b+#^Fyuw6Wr1^K1XT4gS3O`2HT6lk~N$8(fb`)yOc)h@ex-d}!Gx=yJAS)z5ciZR<9+PSd55|&JAMsl{0Cr-{v%cX z1ir8&)Ttz937&_yRO{2UtdarIY{+%%XnJB$r)fLBvTQ7ps0I0K4}U#$p--^UiH+ZG zHTa^s-`Jr3c!i+>0<@>Y^0jT{EZ|liKzj^mj!^l6KkJ_pI+hZHmP`aDl#7m^%^qK2 zSu-zRr-*+QgrP15lI?Fs{!z8Ab#Ozb|J~klU#2rAhPcf{=EegmV2YNSi&~_+I@V=# zIa!$-O_Qq!D#ag8zMM)-3Zjd4Ggo!Y8sYo*l+ zj6RWuO@MrZi~)q-q|XM-He$V*24}!RWcJ{2oI6h%6d`=5aT@7`g4anr_R1)0!8$dT z4xk>}>^UpkZ1C)}XpAuW`@b>Bm2!hYS69c1qTpk!eW!`|*qVyIXBLDrmG7vJEuril z!ZbFjH(9S<`>Z(ANo`SPrbiPwHwXg3IOx{otf=`jo1(JQtwFsg5X25@m8DwklpM)W zWzJoQpmuB(^Infh(GJR{sKeU+`i9<-3ifCK`~YTO%kHUg=yX6sl*)5S`tadkdU?kf z??f{Zb4*z9ur}(yYh|*ZV1#2`}oZD%8-=f8)c%Qf*?-+uZ%@{WprKr*PBUG z{y}GKp}7Cr01-ab-cGPA2MK}qPcsXEeq;d22iOP(*no$1flbQ6Aa!-_{!l?6bd-H` z=_X>6Gn*+qBE4!${Qf)iwG+TX25!(`y}PQUZ|UAHppGp*!s8?8O%6tPAL_<~)eY6gY9lD>{aUQWvzi4E z)h6jOAQFR38q|0OrxYH~yw^nH`v|tUGMjZyO*Wtpqy;%ElR#;bAY_~#z(-eY?HpAgbc(E*7$O)F1=lo>&!-qvXjXVQExr?MX8m*|{?X(=QJ2gL8Rkf}sVI_*O2 zMyM~ccmu(mGd>3KMiMP(|DK zw;)3U{MfJz$o>VO`q&$`e%-6j?f3clhF^vQV{F6|rSK_yJa_ZmSA zz;0csT}$jv@hU7L&RXi5dLDiouQY>jk-JZut_-3R=Y@ZBB%yuAtZb#X!_v{g*(@M$_#Fj8$7x2z#)%+^b>_wOcz_J3BRJZ1NUBk3hb~;|?rnyk zR&sG+^PIiKSwwhXD?w&qbh6l&fCo>2{?;A`5RoT46hR%MpR!ypS9wplB^=%xs1mrM685ttLmCCr{IB`yna&8ggj8udcE;x&Lr+hcD&ezXT!ackw^x}F!XUO=Ycj)3GB9`H59e7&d? z1ak#tn3!#rQvyj3=!yb%5L;?5h3B4efm9q8Lp1A)A$6Mx$0;E4dAJ?6gY$zy%h$&K zg1j8N;SDOCCC}mdMkm+l>Y}MgI z>zBMcP?<=w=nKfqV3ii^SlUcu_%yMAn#x&W52Kung4 z^?ATej9B2QZMU28(j4F(g%HmG=opj82?E>AkR=2=ZQfubWHSas9Sa|H-Y>rB2X9M$ z1>nSj4tF*?l&FQS|0$M?vVSxI%1;vJTCJBBgi_F}Ap*JKu{WQ=;x~X~Wy|2Z1O7_k zfiCe|)h2i9@9~(r5%lKH&sNAiaT{&OwM@7*(T}GU9_CV$G6Xi@V=^sSRmilqFblir z!G4(;4~dmQN*6rMo^dR<;Smyzh1UNYX{J7#yOJysbb*r3Ynv5WB?nK!DBWn)e-Wcul z-_?&jXCJ-f;^ay0N!t8uy}&{2n9j_4stZUUJ)1=GO?i@fTks>T3#g-!t<$+#HW2ji z*^K;={#QV2dAS{&MYCAN&n(oe;UD=1PGn-f#uWFKl=Ov=m`S^(*bhb-} zmJY6~c;mUk0Uog$6u=87X~7!hs^F=xT=R601_1Dj0{M8K1;lHymQ3x!rgQ9WAdJc_ zace9=+h5a^vjax&*_AT@7tiM9Svtju}q4Ca^^T0X4IiMqMaUODZoTkT<|cLXed2$tJ( zY}mUcE;G>!At0P(nD`P8$v*(b@!AoEqMq#;cy^;+I? z=%4<~XoRE%MuX0vJZmr0l%;twuF;SkF7<>rD`L|bd~?U>F%fVi{>*o8UAuNW+zw5v z`^x|uQE$J*I@W@L!FRDog@lxblG)9)x6AewM>~gr8@s)yXm7gYcxkZSe#p zoYa}BT4;3QTNT6zoUunj{l%oQIs@C?o}4suP8zQ-2i-KQ-E!9P$QS+KV!62;2=;l7 zFmW7~Py6`y4EnWOwlslz=Tt z0J{YlU*7}V9M-e1}|b^?zdZjd&mJk^!?$sz0r>0 z;+W7ILOpS1b;-KOOAxDv#<35V0K>X|@x+3`SG$WVLnZ}ANU$t7Nz2~`5Vk~l zvaR#%au){-AA;C+nK>rD-U+`m?QO-XsVj(3LF^p%^VrS(#<#Ge+K{HPKi!Q*#&a5Q zu35%C;AP3lKpejYjC8Tl?a4o0y1}l&cb4$>2x0mngz4YSJKB92-3$WShZSuv99lTw z&kBc3)Edj^MLix`9_R;^VcEbTb+U>eo~SnS*I9#Lu|DSD+mi{iX_lg0t_n!p{l0NBV0Zs+c*#k0t@s~0%#&0o98{~1`o{Z2I{HP5DI41HIS_v)IhboRAzutrg zsh9P&VA~s*;-kwxd6FKf*KBX<3+gG6ewVGp^t$7s~E zd6s?44RReyC7=F9f3iK<*nyG(Dq6yIf-#jfq4(kQC*&V%0YXJHmll4&QW6a)`gOi!3#IWw|w$0Lp zX|xWPreB$a>ax7QUsF~FaV#%4w-Zumd7S)XO)@xFZWNyy6FMejgE@!6x7Mwv07gK$ zzscsSw7SFBc5dDVNL+FVcPy^wA2LODLnLkn(k-FKQtQTpet2J@k@mNU`o&5WQMb3R zde%f%KeZ}mMi-#6nkYIp>F204^J#y?C%XVKp6)gp_@W|YDqQY4Mx(dP!i0)yV)%)mx$BPt7Z z)sg4$0Ezkrq|%+WYm&>8xbSJ9(Jv>Ppswbue)+z^7mEugN7{r>|)fH1w;pAJ`WNsi> zv%&K;*iv=o4CIx04vs}|s51cJRi4!(r!`stF))rriUMOr<%z-jK-;nlR!A@LR*#$D zM-{Zb2$}OO49m~pPG`l57xH}suYM9a@f<9%RO=ZI4>51l()$pne*}5-CYA0$Kq~&@ zTVxgKO4#d*_c3{I6QZjntW^K2&l>c(%Q@EQ?J*d!g_N^#mfX%-|a&p=p z5UevoqsDTriM%&qY+qvRv9<_g(1!YuZ{32x_2H8JA1-S???3FPo5EBsQ2?SASRn-s z$ilE!8!XbGmbtYyd=T^0DhOH`^nMe(hfD6U{TWn+%37IpE={v`t-f3X23KacCnvA; zo}2C2LXA+algp=sOTlB|;6&c+P;fXaVd?6lEv+By#8cb9Tn9J^d>+yL&TAh&bD{^> z{E2-3zQZIQSf|K|Qem1RSM72r8G3$pwmiv=U1apu^vUWS9+*#Q7bJsE(Xx$*bsE%4 zp)%RV?Vv@el__Z{`Z&la8+5vJ$sinvm*(woK%TPAq0`BgQ&xt95~bO9kD>RJyoa_5 zD>HXCx6KSCmbAm_QuBUVoZ16|T^s=C${#GQB(X@R1ttmn(yo5=t`LdB1KrXfgJ&I7 zsVc@vgm?tK$oVjZPKjNppOdBt$~6UXwGAxi>hGs*mo~2BaU;9u70{BmKbapIO_^q; zD)P>9qsQWjL}Ec>;-tA(uU@#&cjJTIRWH+o`Fpw_ePYRpi&wzC5?j}``Y)OolTSus z77{h1LOXy2%Y?Cto~*%pSNcT(gPKu;G9lNBsc?RJ7&jzE7qv_Vun&zv%VJ?evzYEY z*Vt^_${D%2Skhhz7U_}Z5yBEME#752GfIY188LO@6#Y(tSVT}rX;x<(v-8=l<8-m z_11b_UKiNoH+Awjogt1^4|8+p&4vI5TvsFuk-lo1R&{-WW->!P6TZU{y6wth1)8oObn{f95FV%!3xzVZZaFX=ZSf%!vkK+!KZtSa--6S?Nev%n2-Evwx{+RT^tYeBYbRhCz}Y&XJi*=&Aiw) z^YU?CXPBaZV84ERKO`u(@9a7E3??WKUNEIE!i%p7le`g6{ac)PYng)rhh;NFE`UUE zJUcame3Fpc#hX#RN&fUHy?uUzXEQ1c#QIEWP@-68&Ya~p!!Ulu>Eg~NQr zR_MOe;bS6P!zwsjx#q+Rke=YRoLTe&6+G#RUiJ)P$89`P@X)@)vGEJ}4ID|KTEd$m z1&<8=&Ro_BAPM~5K#2HlAMVA3Qc$}Z;Der;D9}q9Sf!qI1YqQ0-z8uM`;FnOffhC# zv?6uZq0>egV)zDyAFQrlRA&Ar@AF&!Ti05aEC}6$27wv-x)1gI4Q%m)a~PO+E-hV@ z`|n+0!DM*NI-bnodGAIW|E3?It2mi1TGN<1Bb`aw4B<|mq~L(3^U8mc1-l0~yKV0QGwu)5G3X7VTYxG2NxFiEu-~ z;n=<1@B00{{?_9=H{h*@$M}sEB#3B*uWoql&3VgqCo(zpKK@r^g>Ez6)s6yrJ55wq zxEm|fn*^&wM>u-av&f0Y2t#O4zyg%%+%~z9#X8g(J#9_IRyWTUFvD#x@pwqBkhbMC zq(w(w-(7vP6H!-@b0BfrbI01+T8{5rPp=-kfvu)}ZP@kT^yKD>Sw5_yghG2KAJ3R-dPr?8rW&?{{GD zZ(d$5xAGAx#&i(sapRTp)nw?;;nAql2)}T}nZz`HiWIrN|%#H7;A%8l^ zagF_&C#Bv1uwFeHp~h~i|XCfq(3zjKT(t&~G+H8wo3xj^qoi`(+287LQaJiPM$`y60kM~5Q<@yS5$ zHJYa*X)-?wnc?rlGZA%Vm_q9Ew;pXB+)(ulreD`D(&o1}mmIx#<-1oOeQi(QgNGMI zo|{R5doQCAWPx-GaAq?CBYhsGrL5Q74RT3t-<9-=!8W_qWq-R!_? zKCoiFU$Y2M9UCmqe4;_r14(Fg7u@QRe#li)QZz$^H#Fi&OjJL|1jv)1ktt4$Z7RA2 zocA)OC+BbT*A~*24wUJ&OY2YcTsl@6f1ryl8E(nl%uxb%<3pr;rjFbP0g@|+wK&;$>miw0hcOr#`^r3+Y5f% zJa1tO24ULYwyX{H)J*l%_S*FqPG0D38qDW!f|6i&yQs^JyF#c2+6W-Qnmd!EsjkjG z=)^0Md1lI)8G3SzozB&qEl8mU%vlyRR99DL&`o*ik-wB_$^p#3-LmH;fWI`p`|E7B ze$=_fC#cf5Pf)HVl3*IhN}TfB=DFAN5&x)Q&3FL{7~r7`mv6rM=zpJEx&NK+d=g8e zh8a+TnW0vLDd2Uz;8j8oU_z*}2f)XB6t<}wo$P(5RmQpoev4#LgTaW+PXEkAFq*tYGBbr69U3~r!jfS2`Q zHzM5)dZG2RE7yDWf=qP%Mb#=o7UCra4zMpy=+R_nFszF9<OY*q0uXJEF*V56MV;j5r!pv2tvt#}=@*u(##}p2%+1dJ>pAW&9 z6w~r2B*o49KRgOC`1`gmFFjMS%fActP^lJp+le4sMFhn_1u-9ytEQA%Aj4PI(kI2M zHSrEZry9%jjo9@XbQ`@rMrqB*`W5Gr4CqP=2CG z@nV4*!xT`Z6t4vVqciv8dnjxCA$T2;-JdYG2$*eeZ?Au_guZ7Be<$^8SWmm%_86c= z-<2Dc7t#S*2H5mMLC)M?c&J<&l#3-)F4|I0L{2;a1P`SB$tc!Byd?o|cgbkjwKB=g z27}(;%$h+I7*QVTo&ysM zZB{aRe4~OqWxY+FvdfS{rDAtJ;{Aqhse0eSW{htGTWHAwY)~E-XHWv>|0Jm}TcE_2 zzS;G_z`&ptY_JmhY4ECH@GIO_IC|l4Ak_zZb~Q0`ne!`HwG`h`S$G*f z|6X&jR3H|;$O()R?{>zkh^Cb9TA7ljmm8-%3u0lb3^rfLr$ZPDM%52 zl2qyO7&Bvi1DV@EtnTja^GBO1L)kEY17Y9yxVyTf`O>vpFTax>Uzn(|n&1~jO-0lM zcgfU50H7{d?Ewi`BCuw_GsaWKM9&QXV`K524t?%&y<>WhQE7Cu4tf+8;_XTh4s!Z$ z>OeMN6}cVrX46LA0PBhz-up4SGWihMfij^DqO#iPTVr4m4ey3+u4wxn5AZEH(Rb~; zs+P-#;|pU7iSSp1q-MIABo&eE%P|3c#=8}9{`|9o@rB-45%3Whl_od9YUVe*kpilU zV?k9c3;9%?4(Wxl1JUBF1{0Ba#x1zB^>+wmnza+zFc^KrV=-WnDb`mx<@H5X1C@Lx z+`@<9svA^St)Qznmz)G$-Tt5XvFVA%3wVc+*-d2I%_x^VC)Y{klB+;lvfZVGK4<9d zkFjouSxOzN$#!E)E9lA<2%fEYmT#>-`=ky;!lFCvEujG`FE7_-EBE|p6fDHbO@=9^ z5VGLnWi5$`KYynrvjw|c`OC;pRP?=ii|&;?)7*Fc=B>{Qi>iBe7vknwxs1p&-2#wE zQ!7EXnd%W;)WT;b*+gl@(3^Mn3+P4h?CdWZi*XK;aA(eM-1jnOoR2sbB-&_$*KeRuqvs z6;U6k!L(Quz+9MmI*K(Zm*45d;{n(Mlxz!j1kdR49Oc(3^h8aWMxSg?I!kk5P#ADr zx<5j#GsSptamqxxE$$lWeBB1zyNL`;sjjNbe4}FPp?rU93y&J%eg3{XkNpn9@wM;1 zZ%ZgnF!^H&A<;_UNZE^`kLf)dG;%@2vPZq$+m!lHMHCTo`e~148{|$7%fYn}weF*5 zdbd!>aOgl1B!!d~(gGTFEv26QG59WU@+HyqLP#7Fnc~dfyYXn7HRmuqR(N2eQ$pPMPE5s4z(mPjkWJ#|-)S;Rs&3%93oO_=guAaA z%ceAW+Ki9!-l4jNx`s!(>vTX0z5OZ4<=9mXa(!Eid2t*iA9avz*8K=GEF^_t!D0(z zeb!0Y#g&=66AHF%U$U;J;@UNQyBM05T*Z6LAd3X5yZ5qxZ+@0zAi;z=6elpnIW2w@ zfQDpIk_wwn@=c+l4A>xe;HQ|r2y&eOFUFbx9tBVYjE4-#E9s3&{r&yl(1RF;GiNb7 zwm4j%ENY3^{baZ6fj<6l;7BK-&96cv+kl4~4_78m`OVzL`}ZGO*b2!BpGL038>IT$ z?#D|WntQK*_nkF<|ADSvT1t{g@XaE4$xvq?8Tb41;R&rx`e9I%4wkThmh;-uiWIvg$K>&d$ibjvE+V$f-D2@+`3vMAA2X!0ZoQM668_hQIhXTA=P{39 zs3RyhMtUfFYe$dOsMG0;RwTxImls|>t%sZWDVjsmc$XH5@R19_dCd4xekX$dzuK z4RIO~LVOr9J!MEV;r%fNA%^tt5LUy7%djt4|GzoeP>%B_z_7qBD3K$}6gjrps;RHxr9KEnNRje!w{zjTbM{Bnei4SbXR9$i@ zaW-~+gC`^7EqTThl42Lj?xN2ox=y`TwuZ#gV=}O!$m3+93Gq>ftU1Lhg-S~?HK43s zcrfYxfAA5+af7KMmb`34zC`Z~-P++aj+z-06Qgb+ncU^u&{xRHt}$oo=A9QWW}JK3 z7^7N`XjHDGu4?rgffd1e`KDN?8-g4-99OP8iog7q^B<(LQMydeCa5y_`F5AKVfY-( zW%I#E{SECU0~u!*D*j=tkKyr-K_mGTk07&i|HBWQ%i;eGBlbfbl6*;iXg57vkMD4M zi;Xk8FXq%RAMAT#j?}Sao!|UlbXO&j?js}ZViA~IEJ=mrv_*(@Rz!DZ>ibejY0iZBw36~oC|YlT2$8Zc$a z;JKvzm^?CrI2>TZn<)hRVqNkv@}z5pG7{TUIi`np!u+?#dMMS*&PB8lo~F7apBNV5 zWKT~^i*pxH5*ea%yKh}V7-wZh!@0kIzkJlBJffFr`QnN}fy;^$V(ZUKhU>Yk^ffka zFxEyN>h0_TrHecqqE^}s^8~vVA>a95Fw2II6!3W@O~63PkrjeH82%eN^6|0!f&`UC z`9Bg##;6<*eStY;n6#4{l*p`hhjYnhda^dPbI+b#Y_VI@tV3OxON@z@cfj?xetCk< z-zdq)997gOXJKVGUX8h(T*RIN|6iZz%WIRlGnDY?1@l;<(IVPThr$p<3fc-Bv3)!Y5wEn6?)QM_DP zE8x{m`bIn|+7<1m=86*?Jn0!PAW&cGWjS;D8q69Q!K4a{^uMuf>=;9T@FnKOB%%t~ z$@K)~8bcel=F{1%_}JBQm@UC=W2@~jlZm+22iF@eZaXwH{GD92&57l7*@O+*V@*Dk z#4eV>wb>69k5mz74s=Dk3H`O@r8Sy5UQ>s|wSN)M637fgklQ1Nnq~A@v|ghruM`y8 zN`y^f|9@v=!Dz>$UmMCq6w%r$vfM^Vet1a-y-Ci7-*sKs05Z8;H?xm8$?U?m;_uni zhriz(czo-bLyPizi~$a{E!b9|Xu!JXq%e1wO`64V74WV(PMi$$aA{0<0e(Uf$cp*) z392cTiLTlShD#=fBGDx~a}KdF=VB`9gX@i79XxQl*co1uFRj}6o;15M%3K*suP3ux0QN*r#2-XuduY`a z$Jm%k?}Z&O)SrLOYcYI$$?$Ol`J=yS7(QGzj||)g>64!$v`iUN?*&jEBR+YY-dFXO zC4qmFSLy$Y_ZvF+>5-2h@oOj!4$T!wWl4S{8E5f;i=AY{u^fK0j`cUUExX0i>UUmR zcVyenW%rR>#yqQpMb_eFRijRY)=o;aK_A@EJx+OSQh zmELaYnSRndoj)h4;S><0jFDtxZiZ@y-eVV}d2~VyBn|Ay{3#)lcqF_$ z)~l^dAl^mqwu4UhR`iYNufO)rRjE{S=bU2MO;prl{s?hp@85`0Yh`HgGps52FF+;t zr-~GPug10*2PHB$hnPuPe#~S02G7>hJ9FeUG;ix3QoR0w`&`DpTf3IbXq=KSu0wl< z4WSM@w#H?`NGeHc#7{n*g%d)Owe{{wfyW%a)8%BxTrLYL!4Mbzw(<*9su+%uBUktv zmYqq_DtK?1``FwRp4B4!)afKYF$99nCO#bUF!XX{k<~T=_@LY#_4=l94cl%xcapzz z?Rq01bJSj6dpa@8bARuD@=DjNzL$GDtf6e)V?Z)iPes_h&dJ?swfS!5v$qOlFiWFsumF-O*e1hi6!^14_Q0ao4TAYck1 zIjou&Zp0H2`_AQd33Sjzm#54uVWaaqse9hoT)%s0~|% z5r4eFEyj5NyEn`oBr(i$g%XnSqZ8(mBeaU-v|;OMgfC}x68UUxZJ`I8J>v=+@A3Ba zi=Dkh&6Z#2b2@d;p2&^iBGYZ#U79SrCPF^kq$mw95IrL4*j0L|UX&BRpkg}?x^Go! z9xn>z){dQz`GX?VC>YczPO8jAJ5_u<2%GPtL1jsZvm5p+g@j}maqFM3@sGY@&_h(l zfg_3phQ!p!StZ1}I&_iQjZ?*ly7A0qdd9xqrRN^>wD0Qtd;d#hA9tUda6Ugo|LWqg zw#*2{hwk8cn6^tCn`g=T!1aMP_L4yiZAQ@LC#ktiIwss%f}HaqV3j8Aj#qA|UitcT zImRPenQG1J8TAiKO&gX~QtP`!AWcbG=WDv_r z?DWZ&^BSVkTtp&tumEktL%F~|t||@XlzC$t^*|#T_8(2MXxW$`-iJLdKo79z)Nka9 z7jD3@;OGA4w{SznUhBEm@Ig4mNa)U^6 zt)W}<)zvxc#^YJfI4@t@L*{=Xf}PkU+IFXy;cNHOr8A$HanKmTqSK1%XFTl$EcElU z9uf#Hm$}m+^M6m(_B_TC)a6t4=s6*NDIfkSCI+ddCVq|?G^C&t#$iYov2XfEi)vMa z$>WQ15=41UEJ)xLfo|UPS51l#PfpB($o@}=??Z7;zh47(DqRmEzyi9el8zW@a}Pag zb`t{D$Or9e?LEUf{IUDBZ~*h5_V@G`UTMtR^;%bWi4iV@YQ#H2tQ;xV#vK73J?+vA;J@{X%BtA>cf@lwdCkZWFGyw0roz;KL3 zs_V@2+ZBA7+v7IuBk}bdHwnU8lg-8bm>3L_0tfd{#dRoqUXTJDS0t>`=5U)clK86C z$g&O_Hq?kQCuUPv@{830EbX|m^vtfs2TyG6Q12kF6g*dNR+0}GX7dJahf^gTOZO-p z@0%v3+OGC31CcH^GQNjrjU#SQf9f?6lj0dDwJUrnSE4(^&1P~x%=5p9YsVbbM0eF( z4L?=s)~<02!!6{!9Y;Lmr(ZSq5r>#1ms#BsPMV}g1D4Gy=^z4Yg>eD+vO+?a{Pmzk6=fR?iG5Q6gN2hvD@C#IL5v5QFNgGZ3 z-V}zLJmrkGfg8?7K_G+Wdxes6*P!-j&pqURBJwY`fO7qN#O;8ZxL^GW@u)jJx`za zV8@Frzr&u1(A#hmIIX+gE?5khf_TY9q~VeYDHhX$(J!Eag$*@3s~K6isLJG>fPt$U zb5vO#bEY82Y#^J7`_WlpQAv0o?t~CGor<(JF&B{zI&CA@n;N1wg1i6j+&E@doxO*O zil&he`#R9U-qC+PaN*jyGgn?;Ts?kD_G2GGOvgQI2`tdA)iZLW-N&(b4v`00Zp1@Z zEFHUMl^#>jRO5&kVZ9G<>5EhXCJ~p8Pe}i4(HU+&h$;Ypx~;oPOnr^LGDW68XNbckBBL;s2nB} z>;)67GUph`ps)Y|K2$26SCP-@{mrEugURIi+vrp{Gup~Tx2N8XC9igKmY_1vslKf!@^m#UCfMeA7DI~)iU~*7@e|ZnF!R%hKi4hxv5DZy< zWZaRQn!@VrhOPOL`X}nbItn<|gx9>}O)F4{X$c;?T@w2f-eF)B`PrS=g#OBJ&?Lw&=#rgbO7S)t@$>ppprAMvg4LMjQ8*H)}Y=PS! z`P&0NdbELpOZ3SyOInIC13DxeYce^Kd|gOdzLT|2G>HkRnWUJk8iwtAYQu1&uIpFM zHeT&?ZdjMq@EQSI*r)nHm&ZE1ARn46rKA6VD7 zA3bM~4~iKiv1b)Mm@33aNL2}zbm*wqY0M`KK3nJ{YPhF{jld}GBa^doa>Lmx-}krl z^%`eBv1Gpk&K=ey@!|7gHOlxfn^{S|6!((>AjI_~*qA!WLO*&!su(d>Xy^gG;;?ar zLOyaKd20fW?-r^^NfYSbgb{rGF-?M^0&nX1gvV0wFgI6U@B^Q%_>td*`mK&gffE@G zCR`fo2+4B9aKwR(;j5Z^jOyxaXVdu33w>R?S`Sx?JmMCDCYTh|`S#`V*eaf2`h`A~=&qsS-xiLhp z;s3_Ql2@@cJ%YBfw#?9!Qd#CUXV!m~5SAnEJd@cURn>q;=>A|w8apT`a1g8YBfj68 zDs3iE3eoq(uz0%Bs2jP*dF%4E>y76yPYs*#3eko3yBlp0oc%=!<0$$nbhqnV%EeFS8gL;j8@^CUgf&G1 z*6eybmIMu-g@u9%$sT+CCt6JFmuMd){vnRRUrO|Tqr?1gHek+o*gRW!r9Ot$UQ3&a zG>L%~>&%%(V`pFMuERCHvfguIg~P2ot+#sHMjqT8y5moDMb4;Iz0IYs7Z z2M(+>6IY6=Kjx;#A;N*0ywSd zQcgB0t&;2w5s6xQ=DFm|F*L?-S#zd}F#lo0GpM!?-d1#5+2b<%IuvhgBvDq|dcsTc zV?xr3t>o6BP;tYiWlM|BeBapD+AEefqw45L)49GEUu>Ca?IIl0_prEUM5Z}Y5&XIj zq$2DdyIgH2M@Kwwq8J$rv_ZU4949qJA9Fv`&NdCd>#j*PEnwtn)22FfCBDU5>QYF1 zW%X-L5ErI9@y5%QClfTvGK26m-WTiV$65lJ{Xu`$L)qxZeNP=a7?1FsmvJXdkjb+# zGfU1+RfyioUUyrw)2LHBoqLN%6&t&W7qclbn_+%1E{hO(>D8rYi7Dogccc$6MQWRoE;j=CX(1hab~?&<*}SMB!$ydiRq}Si^bE+(jL>*VesDmV5Su;Lq7NnVfc&$rZkcO^mdd zv^(Z$cf7?9A#zbjFs(&8Mxdj6c=^+7$1dQBIvOh3Vaff28BQS|NG>9mhmnp5&qL4r zq>WDez%@t|4=WuMu-#6^IaG`tVg+3B( zRy4`7HhpjR6~DOR;(`^MN8Z}CwL=$PnTCis|Atv<3P_M;*^#w~&5HHd1Gn$we((V% zqAHC5aaLvRSyVH~JU(tvy%kOGJ@PjxT7{O!Dm_n`0K)lny}O=lF}VhGYO>W?o}9UF zmenUD8`zLGY+=zTS?!1Kdq{d7Zi@HMX%M^UaArI;u`K68QfabI^w7{|7ICc3*|6bv zT|_8%G4o{Y{j&dNFM9Is^e4N|fd$g6 zypIRJb%@^11)Sa6j`4@dYSp^Dr-;v4`rx8SaK8+J_BR=#`8 zO|-K9)8sPWp)Fx_Xb-GmLUK-l$BvG&!33S;@53CqGb%3KB!q*smlsOaf^iuMCE%JDwoiv)4k6c7Xm~0gby%D$6V%yY$ zRA!>I6@tl|qZOq)g#g3!=P1bfX9?sEDh*|BnO#(B?E|+kpi@71>QLXKi$sKNNh6Pt z$UmOCQH)lFSB`Clvt(p}^zR$U1HOFq%Uw-`W#`1965MZ~l+H*ph>$#iP0Ca#_LV(q8fU3HRl!0oPIJC2|JT)o@NYNs##R7-`^RV*w80VnMkOVC_!+Div0b?>Vr8cSFcVn6 zweQ4i>IgoerE?NTge+Uq5x~k_((*@TgOZI}>^ykuoU!PP^ZO>T0|SXoqTJYYJ?r{{ z!Z!6~=ZVHdanQYmT*pd&9D{KTAq=eG(rj$-;-J}-Wf?te1h<-e3@?gSwe{yio*g@1 zLCnNkhQ65{u-vRh!XtP*g8TDlO*^JnxR0GO&xO6F1M_cU@ml>cTrTF9V-9g3!?gON z{xY=33&bnd`$NIvdO+4F4NT;tQQ;I3$4+Ufb-arwa(~D&((){vR z;@+PLyr|bF>*gcyP9_T{C(})y)P_Zs0#E1W=i3eYHT;`A!M<0O?yf9z(>oi=RwsnH z(UwE}+htg5A|UsDH_6}GfBa!BKc+F>je~=tIK|?MNIl_Mr~`*a?h`Ruq_4Z2J-ySG zE=9Gx56;jcI{V0xS=DEp1oqE<(y9+ieL`td>D@=YM7N@k>)CWrdTQA`-?x=~n7hcq z>Xc;_yJ{id5!*{S`eWL4scf?K$NQL5C9AJz_{H-IytY;=*bSGwX?D-X9NxlPH1b-k z6&$k0T`Bx0nX`2%m235)*^d5+AN8ji+-1XArJ z`Zal!-W*f38{5G~zUDS(@fhcmMfg43MB-iV@f^dxcVV~*GfSiD<#Beh9wxs-eT#c| zIFZB0NgCsxl9+ej6oa@; zC_L#aUOs!=*>jEEoiztCU;sD{8(2d$DTL*3SY-Bi)EfpDWMUv27i{bJ(C6d|Uvm-F z(~_m>Hm;h;saIBEvM>e51ZnJ{He9-NDvjJuVrW%ZB%qqAJZ17`c?ixn=Fs7DK0(_E z(uO?tcpHQYRXXCS;d5ZSdEc=E{zPErS8P8=8!DFbIYf>|x*e2A=a1oZ9JZ%0114=o zJlB}Bz9}QSb!O*Gf^k;!%<}w8ulDxcd2yisV)m}?-A)~1XoOcA$>!A)YwMJY# z3yB72234(LCWvxm7c z;F2z1W-sG8%;V$r4+ZQc`b`BU9b3u?wcZ zX!xm5d)yWCwUsJT@QV4BLWO}yIo1S%vbmoR#4>uncE`$N6Ow%;58pq?Bl=D)hOyaa z=(y3BP_%O5shy$Sk!c;)Cl;igHXiKh0;mzHEh8ty>YG+2uF1GL@OZ|ny+w-~uQ-hK z*c^8pLhb%^dYO&XTk#w!h7}cDSV6vzHRa*IpkX0)s!}VO9@_}+2c1#h_QSEY> zR8uzKDl~Sl``F1?fj~Uk?QwfnnFKzpK8HQBK>WmPCT!yk8|D#3#pvEOE<>5;6Fa8) zvIF)#xNl##eVX1c;?QoqH_0eu98%t!8maF=LBNJpH}l)NtV>$dElWC=^f_CxTW+Fn z^b_JoXRm(0^h(j0TRV$;2na(bC34E~>r zI`#U-yjy5Qbhh=7l}079RSb=aRW6g8dW!E@TU%!J=@5FFRA^(7GjpbDEIB5G?F2D~ zFUh99ca+6KePL0l-YyYhwTw z;<&3d67`JqWb=en*`wu4X>gm_@wH~-W&S4F8eE1c% znUg={4Xf8Ei8+;KdhGI8b7tW7(GO!=;3};6IoXtq2S1Z;3or2cjrfjNPA#fmN6d{E zJh0xCBVVh}F`LRu>7A8x$sG}bP5VbwzB`v5T#NyloHhdKfrk`74+lsu?#oxV3!yrU^ zcIY0yHlUk%)p)tj8eTFLG&L)pM^MRQmd6Sac4EpBUa~1E_?w5$Egh?uA%IH9mgS|R zgxOH}%Gr@7hHp70&&f@3cDjO`1^j{p-V!U2vnha^HECik8YPAi)Y2z1WPe6Ttx~xi zOT|9%n24~I+1zyRDm}}uzr@}-(f{0H&|i!xLCnK#2p*D0Vr3c*7ZgPV9f*dX#$YWd zc&8DQ-CKQqfH?H^p1y%$vuAA{d9XWje6Dk7E>~Eaj6!rF&@FsqlJFyHRr;)0jgs?Z zKE@o-;ME-H3#NX=bDru<(7C)Ua5lpR6G9FI>SvP#Y=R&gMp!pJYz-ls>94T@i!Zpa zg?t0*VtK!M4_Sv_t4z#-V_dD`IgOHa)cfRos6R>Rb4SFuk`cq5dRX&SqJyYv57$Ev zj=o1SPQ9tdnDF(DQyZ3?ML=!Wj&6uKo2f$N9@#rNKCXv*2xvfEkM;fzt)M(ZW9 zfh22gI(mGptUM{qCQ}l`YE1s-o}r}Zj~(U8$>^wNYHeAuL|yC>59uj5dd>okfEIDg z7)y|o$1Ude1mzrX7G}sy;burWEZRoXhPkE*%%uB|J^>5sW7*LWBwx-wMA$_8?Zb6E zI96k$Xs?RiJKPqc4|V7y`Sj*70gfJ4zSpqiG(OIJ-#Bez?^032Z(cpecB{2^ckS*r z&gzUD=V;_|QzdH)6#MBrYly#)cPOuo{zPk2+S?U^jWbsS+PD~PhjjI0^zP3n2?dqJ z@19`~zb%W4{={d_?Jg`fsV}Q{#mkc_Qg|Y4iO1Yg6QbQ4O{MJj>25m_p22r_N8uO5 zT#2rh$!k>;SdtB1SwPPN{q~i!`A!Zij=CXwbNaW3L7Nr*KzQ|#v<_rzQ3d`z0!?f* z6od55&lidPyl4B`UM%kJoOQK&9EnI!XgeBSpEa3+iL81mdA*>h2y=6F^##&jAAO+X zVRQAI(jH!5p2SW~E($L-2`chGQPXD^5J{C)os6q2C3lQ`az(|2A#3L1j3+E49Ckmh z(|J<_rI%Elp&R_shmt!68M-fOEXq3bP>85v9gOebP;<1xrkz=6^;Zjx z+vfa!+rd41F7MgfG*Q&^bBEBE(O3N9mWM=eC@U}eG;m1>7v(iJ+HB2!S$1duas1v9g zB{R0>hdO#9GqM`C7Ner(i6W!%K+((??0DEy!>IZp%-ZWKetuxof>~|q%Li}f8;3d& z#fY$Ll&Y~N`S9sw?tp~A?J^IiYK-M%3Y)0qNE(1*-(S|;Nr9#jCb3M zjaplpdas-%HJH-j)J>9B1z1C?Y{!)fVXX=KNH@;YL@9(-)5)|-;>siscEHm6W7JV# zfp~NVaR@KMim{_3koX)ib(5Fgn8d(+JcrTKO6AD}xzdHeB9T}&3xve{XP*i5{-U@~ z$dQ#-Vz(hQOZU!1H$;o^ z;>4C-G0h8zTbZ$PX~)%bjh$b9N#dTHMAR^_q}EQJ2eG&G{ZTe~ttKMaWRvELWfQ@y zhfMY-P97`GlA09Z^+&T}CF(3P2Xv@&sVAY;f0@r_Wym(B@e`oTWn|hQ?}94xQQk4&WKD58otC~bVT4F?%_5( zIU#!w`n^$Q6uxf!%NM#tfV()6Ro}3|Pe|vl%s6}V?cOtcoF_Y{bcE*8g=X4E#0qQ^ zVR@2*(`bTUbG47a*prF}T3%&CB3foQ=`7N88`vA8F$o%h7fkY`DzE7hfm_n?9Gn{^ zD;v{LgN+V(!aY*&Uz5Xv%!xo~SGflEF5Qix`fMZ&oN_W~Rknc3;w$?@e4?O>l-1#H z5)5!K3KL$5Q~PjT--9}`aa+%lNi!M%SwN=0#r7UHqS1Pl)u()a{Yw9=4Q-1r@15q{ z)|{l@1|t<=pP1}|dy4)dPuMYAHp=eT*u?K`hi^vMqf~G%tCzUCj4njGy4D+g3NbYo z9kN0b$GdnLotT)7*YwvoyXmh9^xHBt&-290V+B!nZOMOH`3URv%kg}HzB3D3VF zD!6#)!87};StGcMq@zx(#i5_Kht3?}z&}X*c7$#vR7aoWLDo)A;5O}0n;KO)ERcRh z+}v=zZ+Ul1cW0-%dVFr)DvbJ@UXm2JpEZn3OvWMxbA&`F!#AAxYwni>D4}#x6ue#G zs!F0D=jE}I)C#gaLiA@yhO!13eu9aYZOq}{Cb zFz8CRz`!j&(5rY3u?Pq{)9=AC-@cQxM`vPAGEN#EqJIe6@=Ee!RO|H4$c%AY^L-~L zx<2z+I(arD>sMIqAo14z!ymL2?%AF1RKJsmR7BMAg6y;;!gakMJFcjZXl-Q0+r_m2 z;zxBvCfX}d?SYe5=%xAWQn^J>L|SH8)Xb=>*>*1*Vt!fP!tPt4D43{8B3q-Y~McfuR=<|As&nbJ4u;K^7d%Z2T! z9x3)9nh4Qt0WB@?RGW!eL3p|WLo(lj`ti>ln3(&IVNpW{KFUYo|VyjZ-z zLl;cskk)%dr<_4NJ-#2+$ww0^{PMnBA39i4IMf$jW&d$ve7tyg(s4*TIcWJPpj4w| zzseYyy{(x*ebnNE-E;xZUcTPg+0BYO3W07H4_Du;xX(q5jxhO&nnxIei53In&Dro672kh}KOW+kbR01m|ONL)nyPX)`QsBde7a^JXOc=^f#$xt1Wik+_^y zy_TieBowJl$jayQJs|Y($WpiQMqRj5fFHsWa zXK}=cgzyEabRZIQ^2&EiWzGqG(rz%FpyxK!$D=l0HT^je^Y}MOG{|9R{{#LQL87Oe zkN(tT`ZN6;7%@1kz<&w;l7RJW%&@vt1bl!%496}ZfR(-n`c0d*9MtY`4OHot~UkdT_6c zoLAyFqOVpf81}t^`6*C@lPE9nm=wWjJQEPoh*%*Z+3WEu#suO!B|IFu= z&t{p2k_h;diL63`8NfOe!$_N1GYjxgy!az*n|R(bV+76T#;tcWss9AU8F=52crUb!#==bvJU5#mGd*}*f`Wij5S~6y zkZ3|1kKfg?KtdQ)(3Jr-))WY26%}L_BDVMvt9}9`di6n5z`_V1a2r;5c@Hom+-9wd zkz|uWY<8+QEf{~5dADZ^cQtk+GJn{QkFB?EEzcR)bM4%L?1s13=VEuJ%q}ahwYPg& z^@f+69wJ~Hleq;~j+}XZ#f)kpy zo0b+~lG??IY>f_@EsxCJdG-3)#tWS~_4+BvNv;xUWVo3(Vyl8X_TZXKe z!)wch3Ri-LH`KGh&fF9-CFygbNFCfs%y78ms&NVO;VFz23#g5?kOaY@Ad9&!SqLMr z6g`2#tg|>mg{cNBGZ5!O#&C=!q0j*d`AV<=e+VCCs$#a&k4bj@8@crt45EY>N5 zc;?>TtIJ1je)iy@8Nbgf>5v#>Wt{07O+~~) z#`wIOt>bgmHe*&^s2%$blxAf_x$yj|Jo16|9S=@XeH3u(K6l1)d$MQ6yzf?ymgGn3 zcX#NxJlhu`o_}&0sr_h}o6D+|$9l2zTay=9;j^f7Jat|R^9cB`Rj&%|LJ~QG$4$&y zkb}(Q*T@MYb8TTaxy7IpZCs`d?Q^+zH?S5QuZjMR9_=~u^whATsGdJ@W|}*U-i#4 z8b{6ey^&aWC>IeyPm!6O_Vj1}MyIS={cN73w*12*Ju7c*IZ4PdOt^dQgxwgFYXn$x zPknJ?#cQ^}_2amlg1`#JbJ0gD#+p>c7P=C7mXZ@l?zI~h(1QyBwZf26@*)k02f%E; zOQ`BXTdR8r;e$m*mdDOWnf6`soy}Qr#dsvZ(uDX}sLanWyL?#ggBAwK_$&sckz-j4 zYND9`z{;o&kzgYyJ=CE?qzvgzU1-B=7&69^+LPK^T3h#QT0Zjn;QFJs*5Z46oAyp@ zX&OKE?M=UD!wO||9bukNlCUGKgqH}hW`!;J^YizP4E*BKkx{qb_uO0XR|H?xB?vD? zW{j%7@iCd#t!o!)Z8DDxGcq6|M7pvoG9?~4L;>y-Jd2DJ1xZL8@h*CJ79QV0>f-)P zc*a9CjPAqdcSstm)w;6nrZK;#t)->a*=t;`W+v8(=I()I*8aoy26O~6ospBi3b!GS zR9>rDkgTXkwwaZ4CAIcISJ)@DA^jn@roDe-WzF5sy(=~U_yb+Y+Ar7X$-z~ZY|&i$ zXSQCNy;f@BvQP_AF|O9cW%(_wYMel1k{lR-qhTNU8ZH)B5h@U7ax?Yu8kiYMND)YB zrU$yb@!^bjY&7j)CPpeoQ-_qs3|g@xr|9YZ8~v-N=yGspYPgBzFB^carDB@RZzpM+OT>_ zlqRJF=^{_2;zKv*iMr1%zIXWU#c#*_>h=~Ak?$_#VoX4&gY_wl`u6Vo&*dBq;2UE} zYYI$(E~VY8;K)&{W5JhFyO$`r+fI~<2zHLyw1W(%L687DdGf^Gg?C23B5TWtY7VkV z6=a7+N=mo&?r|~Z<`NW~Af10}kdyBeZ$!NYKRL@5B3asle;M^aZLaS|RI5>-+p&a5 z7&2$-%`v|?KnT)eoH?6SI?cF(LdMp&k2Lh%x!HUA%+6wGVMiCUxtK<6So@kw6QQX5 zgUlX~QY&5AG^XiD-0jIH@6G#eOx@j!U$9|TZXMAH%v2T3upKiU~duDI3y1KP>Y_ocYEl8>lNMR#8%IqWJ-t!XM z8WA_JeBiNvT|YsXI!3trg?B~%JGsX2l8&JcuFyz=`rGU8eaqDsXdW{RUQFT@|f|j`6XPE89_QW1S*3ewmFve1DXc-eL_6c6e z&dgX=G*i8|n7MCk)(&>s+`KukGGo>u^!`Ls4hM|@T%D3^7Nvk*PYykeapge5I?P+A}_bTt?Z65t>==Dh=#cjh~t)~^Us zrWwz^-Z)b%nqzx$ZuZ_>v2Mkona`eU{dXtw8X-CJbA#tD*2^*#&q2?JZyYrldm`bmi@LauG<3%*)ky@6O`F^cq>9E5aj=F952DAzf{$ z-NG`iVI{mNa9*qzs44IPwTSbbOu(MmH7>8#=iNbt{$iQ{wevfCzHVEYK(j8`cS-oKvC_Q<;D8ZV*HggWkeW;1a zCnv1+n@un{vv?ud;5ue}R5l0-X8HkYiPfv&?ye)}-)Uqc@V?r$tF5QEXz5aM3@X{< zTUWlkS97+nsJBh+tj^wAoTSfhLDdT$K)jZiJ&YKx_lssul9uP=CqaqgGD$Xe z7KVojijLW2^7ZH^Y(|MK>P>YLgo4L58?kbPIQ^(;hYrjjRB>X4JL^Uj8>)+M-g)U% zcj4vB)!E&n#wSLOv|$D%ngt^4=6Mn!_vmruu(MmbR@(2r|Lw|Aw^x!izHy%mdH3bs zd>x4)dXI*Na*{9p@>@5@zd=YVHTf<@PinK1oZwiD_aJ;&my9A)d$gOF8LH7_8_gI6 z{PbFVS-h+wS)4A&3^HT~(>*cX8FBR2+$l;q03Vp7Bqp?J{L2?Eba!^5GIQzDbK>Hh?&pj4Ed z#(@K4`>b_r;Dq6842dn-#D{qb6#L7<=C16%&-G0HmQ3>O6J(Ny)e@-OEug==x5J8x zvG5Ag?Wf%TxSJR7Ol3(DT9`59Cf#N6;Vk(vs`PWDFr}5T7z@JqJi`>Ez#u53M}`tl z)ds}YiS?&dmO_at7^g*Wh2#Y&jnU=NpNz@f=?@+U<%&|0=r79!KOwCl0!uCqmfh-u z{Kf~_Q1xmDOBxhAkr$lt>Mmzbud!%p(V4;3ceC1FzjEi!&BN8k8B6}7SSOi|sS$xL z$Sgvi z!Q2q=tVz5OA}j1dv?U(0qAc-+iZ$YJ``)x8n7m;Q0Y&;;@e=HYbxd>I<-}7E9Uwvv znF0O?2qn@VkAkGE^JhpU`HYLN#_(Sg-h|DsOH%*L1bG)!Ne9nAhC%M8Qr>|Htm&*o5S;3k7BkH!or!VL*R# z#pD~atM49RSn|H-w@=Q=SFhi3J{vazr&L;Yd)Sk_ULN;M6q|x$l9S#nrVEJ}ybxBU zN&ssL0d*Cg!@n$+K0QPe>;8<4G$AnYHC7?<^ePrY^N3%B^+B1hq0Hu$$6xl{N265S zu*bxM6*$IE`&`=Hrb|bXZodv5JFMpJ#j2$7 zh0aa$Ume@*tGI2j)O>dP{L>OUnc!GhOp*jNY{A=+*~xqY6A%$o8Elx0n8KUF=ZaZW z_py@+isy*F5|m`M{}4(LWCBO=Lfc3}EV4@9mE@I(YedE30cM4JL@8m!o*qjr_C~WB zDQPoMgrLs}3>mu<5qBpWaNNSSm5L4UdnaDKHL$#&F62wp%czUF(1_3o*qf}lI)U4m ztdWI$U(;7Zk}-m)+KSl(s)Qlm-ZKZ~_84PA9Y!*RPa(FsGq>ThfBdJbKxU_R%q9Sp zWfCnR^P5_s4|GL;YKlHa(m>~-m$nQk-Kb~j1(rlsu~t1MszG$;fGq7r?jeow=j~oyP~e)h(lnb+h`|&|%UWbkaBW-FfNW zK;h+EyIv!D;pDb=askPioT`Ydg<_|NtGW^}5OA;Iw_luGG4aNcjSNS~1h?NNg!+ZE z@zo5yw0ih{Gk&&^EcL=uV}Aa({mMYs#yKP-xET_T!0n)FoR{3<5|1VNvszd99Kw`W zV1%{*QDLIr5mA{JXGes|JIR9B8qX3n7IqhtEX;Lek`#{#1&r0d^e*B75srrhMNH8W zgb`=rl#+RaJS~$F;CrId2+?P8y9PD*OF~7 zcGATM#*2-i4qqxgGB3|qckJ$L zyT?AHgjbEtGyNH?HM$=h7P4X?2B-I;O@b7_i&i2R!qhA-D_8pNL9{U1{UGv0+q4@7 z?_|Rw@lGtblgW;4wh?+CFOfc=CD0xW-LtY^s%>l%a)=(44BCx7AMg4TiG1>E9CsuT)f(U$J)E}z>I%yd-ju#ATz;~;=?(ylBBOCwPw!a3F%81 z7<%`MZ;y-sO`Cn=VhuSu|A`Xz_x3xCVx2$7IqN$|On3bA?yw}1hpJM06_VnFC?z5> zAv3hbh5R-n^`F&RSoJMSc;iY;e-$d%F(x9AwUM#HTqqa&Jsh2kRI!u|Ti@lQntkZ% z?=}!C6s@4KR*1|mQGjvI+YYrHvwP7Q|9$yK1?GXr{he7CGbZ-VIGx|Mq@*Lf zzMtcsu?38dQgY^;kHY3WZ}Z&ewqN}FmO3IP_qnHT&pvr?29)PtFMQg(yYmXkN{J{Y zBPFMw{%S;ehy1f|{?GY}zyd)Y$MYe{1c-)JdF1>lITlB;gwK7Ho-n-$Cn%lZtNY{jn4;rEyOX!786$Cn zrsNxA!dLA?FYVjiYA1$Xut{*fny;eXrPuB}`9b%{%e$5we7VO-_^iWN8V^|a1#mW%j$9m&|-uN09{GEr);sk74 zlqych1CsPiLR}DD2_dUk0f$CBG;Of<+E8?xs;eh0(Dwi-L~xPRSPTEeezF@QW0z_vso0udH{zsi&K>|$ z+Fi*4ZDNihUgYuEjSDi*JUzSN$KVQsvz)<)zbjEJi|b*yTE`@WZiaA#2}y_^YU8VO zM=9jGv<~N}Y?$CStN1|_wzU@nGbSReRx|6!fh$+fHeS7&w=+9Zzq3b@)`Ip@#oA;p zdxkCHUgdr6Kj=0tmg6><1)lbe1z{P3%;Qe>bdx{NFJUjukV$ zds6R=`T4nV4r|b8JvSP#nv`d5&Ps2tlWm*&`8WS^+f9K8sk>l%MB4v*Fsw#_IVoZX6$l53>#8paUj6`S^d?hs^Q6sDyoHZdXYQ()KRi`}$%6*TOxQ`+bF0WOH7h+<3F?#bT?|*_hX?lU9*0%>|^kS4IV- zdX(Jb*Jt<6_K<}cQweB&>h|j=?k%fj8@HN`kA2+Dtgj@$ye_w5)xt^gwC77-xX=CE zWzICoJf@HoOrA$7Lyu}(sW@L3u|~#T*P)+#gAZV}rIiBoB!#aNgVJ7+q9NbMz5;`c ziW_89<#9i31!Qwa@d><@w1<>N9KLB~auT8s&BYE8ND16kHpmc^1V!c5#%V=M&$Phc zkmejJ>biQTwGRod{N1NJ#8P@rv2Pw{E>%kIHQnc?tkm4z;<`5xk$IvdNw?pRGDfzv zS#_a~9X*d7mE>`fZ2P34%G_$%*3`O56QjN;ztNSHkn4vZiOG3-Oyleo$`sLRwOL<&A<(Y5%&SR?)b{@)q?v06S>!saHkPu9Q= z4%v!_?gW*n0gj-=7&fq-P4FP@3R==gtYj*yx(1iWW(Wk3W_0xrn|HQrcW39pu6a8a zzTA_r4p4#`mo#;vGS`zkNuGWt zE#Cc)e;xmeNi|(SXY-!{q<_nc$Yk&;FfLC#YtRInR`2p+e5ek_aq&=5eX^a?`qevkQu@Q%>J&^2x0{mT@un;>`Ka4*Lo*FoOtPcQD^-1 zHjI~v0)pyUIKo36K6LHzDNTqT?XV7G@Sj-ez$_AvDW~&$5B8v)w54U&;p#Kj`e(Aq zA6>Tww#+U(RAfAmy|p;9h5nMrRQs14DNWST;N|c4|KHEQ8&iJw{cp!4!Lyn6-IM=D z_uG9Sw}<{@$k@etZbX{i?#M1lRjoN=Oxmen6V#(3k@Mx(K_^Wwx-u_NiswU*^8 z8+)&uxqRjAb33jE6~04?S7m#3`daTdoFqQ^iGi~Nn%nQ6STW|tO3>DoPu-sU{;KA$ zh{AUme}00KI`x_?X^CDrRFXNCUkrJ3 zNIuz{2@!-1CUJA&oM${`taZtP$UwW75jExo^V%IB``9ZSoUC%@5org&OZ?T%F}us@+r$J-@SqgP@mH$+TVG#kHpuOA9W12>%~0ytn%RG)2Eji*<8*;#xvLUqMi|9dS~y=mztUmO>8-k*K7^#4$YM|8b@SC z#*Wy1oZ~cE_qm3PS7z7TegD#!gxix(tRRB2@gHD3M&hqd(eLtb4!V_+RC)SoBF`;YQEv$H7 zRDoQ~Cz>zP_Sur1N0scmT6xs&Pcv(QX-+Qg@Uac6C_a${QCe@2WwW=1m*V3y6QwDG?!SnH5Luj%3Qg=PPX+|pS-9o(UgDDesarm^@8Av=iiK? zbE42YEs1$L5iCSN7Do)XBSQZukrkUkEat3du(^V@2IQE;dlCcn>=SX}L2?qXHI)To z0~~Z0q(AfX5<+U^>k5%Jvj72P1=F-CajD9g?^YcXI6;KMGp;$H`~!P5b9XB)5RK z?t4sun#MVtL%X@8XVTfw@^boden$+&aAvXIaA|V*3)_Y-h*x1u$Nmv^mYEulD%|nmuQ0E%xLRD=HcH`7e;A-+wI*u?;WWhE9=i+awWJ*l-rM z9xmKA$WcPDj0@7D@6m;q9JI!SHZ&|T8nK$h+2w3$Z8=;mmh_FehQI%&Rq zY<5M1T5rxyc>l>ML*(Vt`l zg>i|~xj820*~?f-Gdr8L3f34`W?U)0Q?#dg#v9U@%E>RiuubbR z9XFhekE<-*NQ8Eu%%1JDLr7-OO?-x27#}Z#tx6XUEyj;nc!@~NtAb}RD2-A!l936~ zu20|=lC+d=afl?PF0kVVwi!1x)FIZ-*RkeNtDnE+vn8GgPLJ>D(V@0a_iQJdZj&*- z^J-^zXWuT2;q4DSKr>VAH@LtQ<7%ISkn=d4b)zpr>n_qmC?T3fH2>7Us- z`^c64J2&@ij-2uDv(`JD(jDvTCUIt4Sg>w!7zjQ(@0%iSZ zlOQQcpe$D6E3?)U+1G`?ci`nN-!h?g3isx?(tAqs_ar;_YhjrB3=NiaA{^g>nls?DN2dcCdyl_8Wk5D zw8&BkU=7F`8lA6-RCrOGIu&ZvAO%}AIx}rCXu+9^TD98$oO3^k*!KPDt`xZM`z+Vl zt|R!wJ>*Fv_J98U>D(V?7yeZD-RwVn${q<5}mLPcJRmxbAr0<>ILtclnpSnencHfM~hdi+<+f zPlx?@^xWpTn7BXm?bB2obTL?}>J^;3Dmk-^!;*?{O{P%pSRc2+|J8lzT(Pcj_ji{n z&dQWB)8T-3$G)Aryg(<*t$v1T!*_+?Y#zx;Y*8u0DJ&<8q4I9*wx=qOi7rUZSAF)6 zx2uuOC)+lrMQ{k>sF;D>^*Gatw?!S)q&$f8%{aBMV0^#XU{FYR*3?C%RNXh+zdzKX z(BP#sZxUM~o-C^y80>~IET?=UL3sfVD{fPhk}^}^oC~k z-{E_zhOGvLM`STqRa*oC8y}!`+@^I+bk!FR$Hf(J{=QQt-Yiz{&f68PD^^~db0M?< z4JiwjMFsvoMDtpncca0rO6|@?_Sr22#ApOei6@! zXkLhmmHO!m^NOlFIMKnstqOhZ;oaSN`FXlxSwKo426n}HF*pc~tgqXG=_06K5n~`4 zb*8*Ljl5%@T7N=2D9S6_O9}G#v+VW06~X;PWdq`5uL0Vv2>W{=e;ceBhXe#2PJq@x zEKN9uu~m-EpWaSM0Q5c5*3_g_85)ti2V`W41qt|a5)N*zBZ7kmRSoi~ni@e|Jon+Z zT|V&jpZ@D-F8!z3-^_mb;j~UnK~5JV{mFXrx%2~~P^`Q~` z{@%QSMWw;(@JNw@S(Wp1OAM6YI5;*Ec;H$j?1HBv;7fH;seQy%rU7r;*m9&Khn7OO zTrdCr(e*p?vj!B3)}|U&`Ee(Y=@}Om{23XeRz8?L{MLV#?fGf#w_E%{K;Dn_h*GtP z4>~0p%`W2A@Ohqx1^U=nvp}nNEEc)T_UQoV$0*%GCO$li8x=Dm1KvTEsZE*8e6YVy z+#C~{*3nxf%(UwGWV~Oxt(6h;NV-B9i3kQfeDjvQ@CCm%0+ncZ6N?a^sL>6Xq&TcU z2~a)V3Wx}}8k`ds??@b&j`sE0l`Oq}{krAK`~{6Itpl50eWXyVd$eWYm8-_ybew~ppsFsRX-rbnL>P`2ic#%x*Cq$Y9X@H?wT8M&GGl1Y{@y?yr8k~u>PutG->Yi zGGycoUcPhl zOu{=G-o>!u7yjDt^Y_6-g+`YQa*jY6>)2u;aURBfNV6`i2iTxMx)er)Wo*JwwhcmJ zL#v^+v6U8bS2Z5(ezf`2lL*D)2U&3z@V`lA0VluIa-WOe(VEUZSUWiT#UC$WjI*rh z;eXo@8_`+?@^b$XTv>=gNDUiCZDvTMBpw_q+l~<^5hKvgxSCE&xvJ6|VWO*#W zQL_MNg_1nY3MKDD;5PPe29&r#RU!S z0v|4rE1H?-r%~b#B!NWst$LsOV!(c&tg zT#F5UV7DwITwr}`7}4-GK#&sIDLpshgUXEv)jNSom?|q2e=sp4Y)Bz8HMv# zU_}5^X~ZRIxM_Z)qPeNfTig<{WC=BDwI~J`tv!72^-Yg7Eryyz!;JJQ?ZMB}1-`+f zO=pS@Sq@eHH2<3|lODd@xq0nwg~tL*Q<6ML3Lx%sWgwcMuC)ymZKdA~oAPbJS48c1sFJt>MHKU{h(-qWo zcNK#)LtWJ1U{8bal20P%x%DrjSInPRjp$X) zo&8wyrgA7VY7EI3>CyGICUJ0r=hla5QiiNnLUS zIGP^ClAc9zjg45y5ce!Ob)fs+gMm%c*5+gmlxdt?Mt|)m2uRP!7;Wn8yfO6jXO6I$ z@59+;m`^iX0hob%=KPZz3Ja?*N4fZ2;2d6X4w=-2M2CI_qS%7Gnf@e^wed7Y2)U7F**FKy0kR!KzQl7*YdZ)8~gi+NI*oU|HZ0OmV_mx zSvo}0LA)HuS-_9J%}3`92F2E#g+`Nd^o&Q8jX&zCvx12SCDPF0;ma z?A|6E_|qt|L1(c426bl1t475Q5RPS=+r+n;v*He~-<}g6lB+evmFi{CFLUa5a%k)?x2*RE;7Jx)D6H^9-z2il%~aQWVY+n4XWZC$!YZ%K5GaosN&rz_N% z4qSP9;iuEz%%1e{MbpFWdhpsa&&`R0NcY%0b6G5|HVOn0;WU1TrX3B*Ty%%5cJk!# zbFb|#?ZDk1{n6Nfg&f2JxL`+2o?$D_xb4(<({B?DN)s_I3b>p6fHy{kn3R}A%x9J3 zfP{%1e^V`61!D@Pf|HO9LNV0SJPze{+6>OKo3+ z83H>Oapncj$^cb5J&9W5_+>4HTW+xh0NW*F-y3%^{HzQ<&VC#IZNQsd+mZ!h$~cE_ z!+Mr%r&Q-Dz-aNS zYk{ny|GjzYyxkwY=N3{FQgKnWdVdgCLP)IQjAT@BKPC_JwTM3mc;JZm&T(K>mDCx{ zTExL(5OW1t2^!0jehk)7cs9i*$+8pJwVe|-lT zv8IIOWH+NJ2ZG@l;L^1rlIVaGs(KcNj1NbqWHlyn5^2<+hjS4{T_? zH?TP@twa#H7gDT6+Li!mLOQ%Lco0cIv{bflxkPr%ub-upLs)3b ze8n68Lnf0Svso^&g={Q=_LzJABblgL9IA_1o{XQyB9wvKMO^e?FC%b9T;YV-Fog?i z17{L3NYwO8ElU&@Fqj6-y8BONV-(xcl(K%W(Irdvw>c1MzcoqHuU`K%r+o4j<~o)g z0+pDy#A_wMi{zR)Wo0D`BqJC6#ueprqD8?03Ga;?cd24w_|5&7CXEZ(eQ~uZK#F87 z7{SVNukcb)0ftjn^a`#OL8*|i;SsusSdUkGsC-;{;-TU~?h0Q5Vt_it82&zl!+ zx-0v3VrL9;;}P7PG=n8ISaTH;LK2dAh9;=~WWoUo8u*oc^1Cw(fU*X>eJkD?6g|5N z;f@#v$OrIBY%Q8hBKVsS#Bl@D;rQO1f!6e*3ng|5bQ@?T6ksFBNFY0&LVUDmxb5kY zCmR&KJs#1$JEpHm9u=zd^b8HvO`AV>=k5)+-3s!Z3Kxrm=9)!RIm7Qut@H9^aT;&5 zIM*sACw%L0sc8R&iz~wK-hAz5#aWr@Y+PuWa)eZj3Mrt37vU;&8q|eG$>LHTO3k17 zc1J(&EB!jh=d+s2%2J*u_US)p{UqJP)?|L*If7V>u=72FvnPtnxMVHPIScFAMF6A% zdnx3p6C%d$VuPE2yQ%Z85vxw;k379o^ZoGpfgDAX(J0@l&syjx7gzkUsn?ryxL&lAL4_62J zRpSJ!P)QSKe74*s5EXx;&SW@pe?SWHWWt^39CRigI&_>d$@b^+{F%O@{g;L~+Iqza zlI<&7*exIgNB0@QK&FNf(rC&6OJGQbV??@2^H^;g5^F@vytpIDY|vyQAM#9#_^9d# z&TIn4*4%sY@|L>OOAn+P#Cs}RETcOe&->imA6lS`P=c+6Td1nna1rqdP1Dbm%n1L4 z3w2JP(AC2KC?&21oI`nCuw#c#x9^=x73$rkyGu*+J32bte3+q(qgoqMmtk1SkW_!D zA0;nP^4YnO;A~=NF@J8-6BQw>}itcR1k|#fN3$9pi_ujf^Huk7?B>I^`{rYvfe4R|2 zydx!BZb0)`@?X{FfWvRV1&H6#I$L>tAe!Wav{Io`=^K7`-}~QG%sZ=Am*&0&cnHUK z1ro>Va4ogvvMyA$jYfl7bde5_U}gC3&wSK~9(4A|0^}r^1z=MKpFh69T!=PuluZom zQ79hY<|mLXl=f&M`FjKcD7i*_@C9s(TGI0BQB~vNy0{|;+Qyc5e+{rV1rCM@o%fh5={J; zZ^fn8_N^}MEKFt!AS&o^D3$31wh{@Efg+HmZd|)X9JfwywJg0`U5gv@iPB~n_2IlbD;lUtc_mg-}4feBmB<#42N$>lH`wwa@ixylz zuug6`z3{Yk!{d9mbJFArk2!IU)l)(zg?e5v<%4JOh^t9#6CaZ%rJRhOxrWZ4f$ZZJ zW&olvu&OxTAsFu#8hSDOhX83nmcM=Pz%_h3Pi8W82I12SlgR*tqv-qk1k5AWrC18M zC9>UTOg7us(eLYMLrW}^dDb?f49c*nT{!2>cKh)o{8*?NVLQJ)sv??{WUV`)C4u|} zvj%r`?Vz255Jk{tHi)?o(v%o0HXkWpV;mfOH0#EEh$I@b6j7?Z7PBn3KfHFOZ+Oup zIqD09As?IFRjR~*+Ul}`(O-hNkLg*UVK?9k7TWFgiS3TnvcutL)!(5A$mZRh_j!W9 z4+6$G=?H{CgZR`CxfS8Tcs6+)%L<73Zn)?LSsnQH9smhEhw%OfXadDqrF8I7kqUkl z044qfW|4kGGzHqP$3_I?G|*69$^qcg1{__8z`-ypqP{hC^W*B`42DKS3;2Tj_qw`! z?mYTEctuNUPuS|#mZZ5MlM2+b&(-RH+S+aPSF!oL*6LN;Z*@z)79Ycv;WjCYyj*X; z1JQYzR#ad*@Y=q2&R3{!zV@$xa1;FRp?(MrF!3@;OS2m|eES*MJrnIFL-v0{&Gh!5 z7&sJ0{-8i+4>8FGeo)C4^7#QmvJGSN)l=RbVjB}WLn1;+)RtBmAY~HSmrp#D(j3#8{1F_5m2HVdvnw;fB4|ZrT_Pp`WLQ%ucu>v zKZ1wMZg>L6n4ALpx+}Y4eD>+xtP?aWfekrN!*Mjt7X6 z(c4xP(0d=tz;ptYO~F?LtKE2*kdIfiIrYH(SvR{xm8R!z!D=@Os0*W{6iT|_(i?ZA z*}9ww4pF>SKIX4T7Np=oBACRe3%U=hkg z^1Tf>nSl%iZEXWNi`L1FN3P$f{C@bs?M>o?E>+D@)8DQh2hOddU09C;)Cw*rr6t~Z zRjiNTm2}}7tKCaD2TfuO7wC!$#YGF}b#QL^j$dS;XGEKDab<<{9;DrsneE6aBAG`%-K8wSw++b znmT|83Y&&$nIA201cW#+-9@jU@q5ZGU}v!2ssVSGe2<#=C}==ZkN9JU>l#5NmOR$9 z8v3$Vo3nD}6-vgw^;&L+M@#meN;yR5a&uYmg|k{=GB@Q95*POj?U>9!&XvNL;^A;D zS8*!6;@tFev)(^>_q&M?Fa7amMgN#PH6vtr#Q?`a!67Tvfy{QBmPED_71lH>}fpzVIx7xUqAqt}XhmATgHlrf~! zC;amd?W50XU2CO6!#X`T#>_Upi55mGImhqrI@U-49UqwW=EJ*K&sq@@#5it10KhR4 z`D7tc4gfYxSSguL^jQ*?ZN{Jp7v?DY`AnP5BryK$^#0AVK>ZElgU!afzqkNuh-U7A z524-l;2B*KK^wp~aMT{|%@Qkk1;~Qy?SfZuV&H_ejcvU%3>iw&u6%vx!G?|ZPL*W! zB&AiAf4m}6E%{xi$zlDD#0aplZ?u*d3)jek9VCajP{|K$Unu)19uAOlQ>K-MjPBIk zoOtqw?&}+Ot}935tOiy0`n^5EWZZh<8Wue$tXDNl#aZvx=6^XP zFM31knV&xT?=r2R#a>GbSRyLmMujD$`+ACY-#mZd)%PFHpY_f-H^&Z)kZ^K-(hM47 z@1G8Gv=z5%?Z9Jhgn`k;;IS7MT$CEcj>UGzh`yZ+^cLz_O*jv5JgKj&)RjY>qgyz77gNq zu1^XeJ}sDGa7qkn5u~J*Ocz~i@c)$iFx|1yhn0fZhySa21sqcS2PBOH(E1RkH9o!o_#x{lcz>#v*9)q#11#1wk zhMLrS_cpz_wh`jwoTkRr<{+cnB;6|&A{W64xX6^WV$X&uhz~MCAtF-qrDOVVtgG$? zGpwuL8Z@yxWa7zpzPohbk2k+q5s-qO09k3&4$n$*E0W2yQPK!kpiSY~IpNcEzMi}_ zAXFI5Ce%8|hvyymw%sXA`ugddq4oG3C$>NH1Ng>cjPme!^0n%*rX zIX=cA#789Wz~z!Q$uDkk^Wg*+l7-;vWbs~imlD#k54u^(zI*KJxV22yqUIoipQrxr+y`*} zyEiWexE93w`|v0Ts|m9FPR4^*+D~iOG3v*Po5{qgZ^#NDq0w#HDfP_qgIH{qVWYym zO_xr7Z`(k~e?-_HKf)0=`NE;$n!xA*{KH;3JUWqmBex35eFS6RLH2VbbnZi*QExGt z{vI;@1D6NoikZh%=8RDI;axaOAb1EqXqwVNNViWp&H@5fB)PX|p55Hiamts^AxKu=Be|PspVYBtg zrKYc*GkFpA*GKzLEYge$LQJc&vbALNypb=&tY9jSVJ>pvgUMfGFdR8zxOHpazK=dw zdm58Mj}-7(1IDb_7*`XvLJ0Sil{tQS+b!84EX2pNxStz+ro4qS++=j(T;URYc(+%J zd?4=CU7GyIAHF&N!K-f`u25&h1XSBJ-rlz|$%H4%XVDP;YCkzZQu;sBI5LX;csAG0 z*fPNVPwUhous58#bnQ_Y_w4v~1kAA(W1J@#f{C)H@+Xv8R)KAd@rqT&dIdOAV9is0T2Sk3)iIOH3-T}3r2s@ z!Hw>8FHvcGuS77#k9~EU5(49lLar>|ZA$pQ_dosjcjpeh`sTyW1Ln*?n-6-AM}fmC z9qHZsWqCBR5il=ZXCK?}W!&Yg;@WvOU1zH^Q6K=K59gZDw_)>53znVP9q{L8KA(yQ zHT<9O{^0bb*lJEIt$B)v$a>`Q#MEG1jUu(r&lY@ESKfYI}NT;pVniAE8$a zGP)LcZWTLdICuHbg%Ri1aiS8xEOn+JuAfYhVDb`2FoVKX$(-rP@&eh}cfb4WgWtdT z>A64Vc7OojCYha%MB`^mk2A)o5E{;yVlOqH5An4zq~Q3zzh7sNFV-RL0wCPOC4bQH zVDsO#&l^6n{Sj=06zm=jOU9Dn({Kub+~IAu3e=2jj~-EpR@#+Eq~#upG}XR+MCt(Q zFud`}^`rBbHs>VlNNTFRwLQ4NIXFxTr@tMoT7_AFP_?UI|79g7Yw*EBM1Ku_U%yy0 z<_6rvN75ay1gj_h;CtZr6aV|&Z!Q%_D&3M}K>Yhf1!{)&b@X@SWFyW3LVcJMqo#vn z@8$8Uw6Jk!JYQ{9vk(ZiAD-VSap3;bJLcz3&p;n$gz@1OY|^dT%(#NY*yV>afDr#+ z_w;tX0jJRoY#(YB8h%9=R!dGO7HvVZKiFMkN$pBA=xc{oms0sQXu4p=^bgLaqdS}6vOYv6zOqcps1)WnA(C(XW#kevt7S`?Y+DGI>#>y5$sXmClS*4 z@Wiv#^!V_=1t|NJ`bATK{vR8(C|4TG^8hjRhx<4kz~SLM=6wJ7koqg~_qGp)d93{S zqk#rP2N3qyR%s!(bgC7CziF7)$M>hGr=hD$4v61?Y@doQv+>BOOIw<|uO5vX=#pD% zhpfq4>GX*Ws-nm>>+-)w(HDJGZWkM*j@_jbO}k$E?%b}i z@cK79CD>uDbL^09qm&OZB9ZCCsFyapBF4qs7a+fA5xn)dJSGVCkqc@F=AYilovU$v zGQ0JDi}o4bGa}SkCj0py@#r>n%qoK#?DAe&M|yW1T~nk86|= z|B#Wyi}(qXph>8}n~t{Ln{KmvHmvKQcVp|3!0N-ZpxzU;4KsQXY^Yv?LnVND6gHRd z?UC@8K4bIzxFdgQF^G?zZpEr`%My!W54?Pe#c+E3kK-t#HL7uF(;fTE^L7s(9ve4n*dPhG zJrI4{%d_>M==Q~=BtN_3c9A2QC0k1t(L#>e_O!#n9yxwfbvv*WCgtI~k2ng@*qLDEh*O8$q?={ajJ%8xQ^WDv( zq&Oad<3u$yqzF%soPtteF(N(0_#RT^@WB8d8EcT?7XeSiwDtEb-Y+eJAkS>L{?X~m zq2c?tFW=rUE$(oR#u6x) z*EZSo&!toaWqkrun5COb2|@hbOP%`D!Nc0low5qn^Uvx-#;J@f{yqAX?SkG@~v63mQ5+T^m#z! znpi9Yh^T&n9PR*cim}%P@f~PKz8eyIQ(OaYyw5g5wr@qqXj~-_fJUH`_8#RN&>jo|#XWos0%i#(VzL7cFD)*;K|O<>fCx7w8z|8OY)o*T{&CIRbRET_o`W!NM?2)qlj zpCWm+hwa$SnASvP*W7zDZA)GAf+OXNty32p%}LVnSz|m;ergU)iIsmjQ#$(dbkUJ? zVMet;+yUR}1slc^1c^^-vGLkhsFsX7cj;gMe)!)fbHA)6U3bN5RzW{5Dl1IJS}%sP zoJ0;TA zJK~F>UFT9{>(-1#n)|4fw{eiAM6sZ+Zhllx3vRPtH1KHl{GO|IaaLRjnN}IOb9Gre z*FD|AYcjmC9~N~aoN%=SzJ*75i~X^Ke6VBGF+DCN{L%+SH-G#zI;O0cRQ!yDC(p$c z4u-LOBu7sg5NksF9rs3_eS~FP?s60BLEq00#!dOQowMn9{nVq^9v_m$JUg-zyAEnL zN85&pB`onfB{D`B;(6SPB#$&2iEALyu!|4A)T-LI2iw6=!5_W6@XC$4xPjIvtHDF6 zDh{1HopYFgDR@7VgQQmK<|9-4pWcF>`T zm%YemTe*mr09V4e8UC7OT)8K<2WayB%Kkqo0{K!$elj)4stV(?F?x(5(mv9W8NYFG5V z2Tzu*-F$HB;mX#?V)53K(N-?lEUHS|wnplx(`Lv!glZ)!vBPw1zh&QA6l3V;xRL;= zTdBw-J9+nqpDrEzT4v;QqeV)ihG!<`WlVx_SPy|GfXT3D1qo^_VTEL5h_Wt)oHn>rk^%q~+8OixzG7 z*$#V{!Yeit^OuX5SjCZMtD0{;xp8b{+=d%YY~~!_dMtwW8asO@P0h1y4L010LJlu( zM3UFWzAD3$Wh-yo9=Lp~_zzW0H7af8$Gykik~LK3r>1}20q7KMIH0#ZI?l6n#@zK< zv4Y*VV>KwZ@DD*;fV8+MaNo->f449=PU=5NLi-p1wd8lwYroP72CRSxZc&X%5I_lz zWyomFGsUmtcCn@g#x)1N{DV#=Rm_QnYiQGkXX?$?*;5DbfS9>4Oj4q9)0^8C zoMX+Ez#BC%$=hhrtM|-XfM50)hBtjsck6a{Wt_*HG{Ea&?p{06o!w*Ns<}{CfjFOo z7ftaIsyT&A;+U_evc#}!fk6j zZLQ&{6VP^Y1&xqlQrED;Aj{z^R`^-ZgmsV-r_2TX8cdV@& zd~!oi9UC0aW$f*j$d82}T8ZF@E5>OF*2TnmzX$eQ7TR$0Z( z^ADH4>skQdEU$nP4?JB8k%x{{X(adqLly^!OwG%DJ{~tNmQjerfpqh>485@dqN*0v z(BoM*ui5wKaoEU=FO7q^R1Pw5)UQe$2aH=s!4_;VtYW@8bse_u9$nv)fUfH=*Z1v6 zsq20c_Ax$i{Zx%=NSo#I`PQ8r2k6AH5CTv^>5+8D4$ir^STBfm#|dQDn21;(?BDj` z`UQT4#iq?~-HZY4pJNKQ$#p52Xk19|TWYU0u$E=wqw4qNEw+xLbYA1}pS%%6;E|O% zq0g(ewtLy!p(m%M_7gi)@33h!l7JYn-cn;D$z;Q&IIy2+aEB-isbw`0;scGACd@s- z$NhT4>B`4bJtB)=0&o&kPm7#ZTX&9tX?|W+0o2$p}A~d*)4Yg{hOIc(T&O53P{9DnzTzTo<}J z+Y6IO|Cb`C}gTeO1X5N4?nMQ|2AA1ZB zp7w5EJKYdAE&A5>byCg&u&*gZ8#>iT5dH}S)NnA)`71*i=i~}nWD?AQZ~nVal5uUb zU&2b?L*Kl&+)pdZ?RT3b;rHiIuw^SFvwnOfBQ}*dl-kS|O>t5BVc$yH#Z7Te9l?TyVUOi-=+KD>ze4TCBnRYD7H0lbg13L(DNp?oCYv)|YCCo_$Zv ztq0l2x^~romMg61u~C2ZLh|18<`dg<$R1~ixVV$xct!FKXDMfL&?sCQ^qjjZ7L>5B zXv!#x&ZvZAw1UR4)9^rlia~=VScIb13WBt)Y%UUlB{7oHJX=dZZ*iMn^3j4IleinXKiFd_k)A( zl_xw}Kvn9!(BlYn$)AJravcpAM$Y9z1*NKTqtP86*Oom&)phf6Ec7p(w|VOR84@Ax z_@PuM)7NB7l-Z0B%N7;#h6*h63VtJlO_c4yh5c#m?nqUBeBI+MYj0_7zd_)GXo|cs zcZ8@*!#GB8s@FjEF~lC&K#Lsm@R|#HhWc<^vuk6QT(NAhEn{flL|9JrS3xb#11(6B z4snDD6N6Zwzj_R9D3wUT~R~Z&2uL z2w)o~a6;8~-Wu8;fFs?bVykeKp2|>?up{~2#uEmOX6f+K>pdQd$J5r|Uca-q9N@;B zcym~E8Ml0EJ_nYHj;!M<+C?I6OrQ8zlsMD&^N9T+b}Z!z=LC)W;b(4IUPFP~Bt+B% znlSl8abnSwQOpDf%w@W+iRb6-G?*<>aD4qcf-!VK5E+Q0?6{`~+h3gcQVOT|f>ccDeqpF<_fHzZm~XvwiQk~vsC!u3fvOPG#e=?)QnCmJhyW+9^Y;D0sE1#i$5z9 z9v2n3)p&2y>E>Zu!dFv(1!mA&R?=sa#B4N~KtX%oCJyVT#Clryw!^y7LM-Zjx3QD@=Af z|L-61aSN5yePkvtsDj_kQD7l%5e z!gvb9(Ndx?z5n3&1Ld)70rG(cVPl3P)CuiH5U!)2KM|_q=eKKkrq9 zR#(A9D?FB^4S!(?%aK>ggIcn3q^g}(&N=vFEjMMRG~kmzJN9$?ef&Z>uht`5u zuk_QR%@Vo7f$u)`_uDENm)n747ZN^2i?p*HbY!&HuXKj*V_Oz3s6!k|^KC4Wvfb_d ze4Zempvr;o+U;k0=8;-b2afj+dfj?FJ8OXdO-gaWGb8q}F*IRYQXGqraQg-vnR?V! z5cuQdR<_~b*mBjrzw{lh-SlElY6(fTyTwVRolz`E_PfS8NY+UG-)xus*?GB7#^`p= zr6v*VpgRuAE#Eo^PYkGX-d4YD%kqD~C11-WSa7Ah7A-3Rp{Aa){o`prlWqMM(aNxY z&j$k?d zeLaW+foXBjTwJa=7gu2Kio9n#@t#J@vD%GW{$xOdXh<}6uh#;u%yfo#G=0s*EB^s% zJXyNGl;c#rgU*ATlZ)#FZnSXgWGN@Al)#C#g>z;+yrYGOWvvAK5GGmbJX1zYKeI}# z07W%QcwROCu5<-x#qw!@tv_I{?%|*9M`l@i=iWV)thrAJ}oVT6-vAMQe*k4t(Z#3c#407ffPzg7%9d9TT!YR*YJ9+sJ+ z37fi@ER*gNE?%aM=1c&h{W#7mtyK!)^)|TTMC!QLae_%cF$Gi3{dk#n?B>Nv*z>Lc z$BQu^R^RxJT86YbCH{VV|HZtHe55M3<-K@;-~6WiuvB!WkRR>V(Czg*2Cjbp{U5I_EjvuG&M4m_>03#Bh{r5mm!#?#J^QYca?;k2p&c`7JMjZ0;VMMy(M zZsLROqWX4tT;E_;RkKVsn%f-Zq{2Wh*|A%dg zWqbKPV@)xbm88(XAG;)J>bg``xL>kD1ggxZJ#@T%#;l${viTQ{&|d5$EOtu71P4IM zk`{$m+OkF8Kl$h@ZoIQr5S_`fz5<@CA_5aTn5CuqBBgX_D{5jJGBfDgu)b`2-7ELL zQhiEE+mHo$owB(%vR#u1b*j8evv@BaDY+F7C&p%S0xmqix98<|c zx3(x;s+twUPcMBv%zG`{GHIT!RSqWIMgQ!;-h#BldK$3SM2y{mp|D1S4TLUt9^HL+ z*w};E&C(_JG6+6xuw)AIl6-Kfr%W4D0O7E|Y;U?ta(xYFZ`lPO458D0pMaB3eG8Rt zlhK>1ZE5tlSQ}+x9&7t$FzW0|FZ9vWOMy+Zyg;L3k7kD+`N9+!S}I#xR6`~3S950H z<>s_ybH9J`K{_+wcwT;g7@HNrQA!uvf#tZ85pnd6WI&cL8S3U%Vx8%Pb!yk6Ru{{( zcwufr*rR*W5 zV`;5oM?ZgLs+KYs-N~qUnRHj%D(M&mk0wQ4P9;W`AQ*Yxk$Db?{TJf{Z#uN{`zK@k zkb}g&L5}UUrQlZpV8DZp8%U*cr^E;cJ*MnjFdvI&#!$)IBcVJ^zNqmYcsR?nI7?7Vt+mf=nSu7% zKiR}}wtMbO2dLq>1CHxrFseO!;c_v1db56@c9Mpj1jd-!!w zKR2JNTvaYvfh6Soo=q79#Bt0a@#OdREC*TPVnm28fOq5Iue9UhJ(ld%OE#bW>Jb}H zX8rFxL4doSMt6J?P)d+ZCcH%o`@m~0nOPO8pir$;KS})jJSZ#tpD0FnY z$x|EZQ27TQR~$ z)6QJ7(G)&LOVvD&f9P{VT&(TMYO$<2t^kO&BdIms(v!4o?(HXA^tR85U~kPfV%FG_ z?k;+buo%}rV&e~+Y4P@2W5h~B{n5$?VL6$G7f_4WMGsk3<}sO^uy7^k*ddHg$6~{W z{Q{j2XY3go8i?W?C`ld9;g~O;I7YZ;)uG)tC1Y1k8Ou(L+6&^U?6)o6Q&X1@iS^1! zd;5u0o*i&JI%XTrLTSkDIAqd}Jo3n32|`owCC!<}p0!8e%*fnn6K!-%G}l0ifD?^W zPhyii-VUhBE>-vBhU^pfv7S_Q>cCgo)T8@O~}Y%G=-l}oF9USlAIG!AYoB7m#0aaYtv;i+hdo{){Q(d z_OK>;%xOhMj&6)Mf@r7J+^RP`+LCsAgOuYNTJep+#L&nZ_A*lU{#G1WbHKF%Rs}!B z99Mh2&(P2%Uv%Zs@(qfa$1N6dd23a|NLVa^E5!DzH>ga$vum-C8dO!9FwC}+R^?`n$o&V`oRR%WcyO<|kfP_fm|+FSOI z4%ay{^#v=2PKwv&Vz`@txrh4OpEF=1^YN`UiH51`nrc*y>*Pm%<`&)Fl&~|?erkR< znt@|DlcM4$*?<-CN=)coRd_tuB-Xc0&B=;SEdc=ARBp`DI4m}ED}y=D?Yw9^ zb^!2jNrY%TEOLkK2NDUTj=5Se$m*EU3_OahXxom1eLgW;Q9V3_MxZaE*N$29AIl zK&QpD*Ma;q=rtQUX4{AfkWjB;!uIa_$BmXgj}~KZ?;bQ0dwY*ty!3eH40`1b2Z_Q5 zj?F2it=V~7M2=dpU!p@7-_L_!U(NP~5gns_UY_WNkZ_HH#&pto zTM~2bs9?tb%BSZemA`ssdlQoprLYN2ms`plN*YMN2?!Uq(xnrsxdt5-Bk$?)D zab5J@{JaIVARpE<;0eZS+M0tdkAC0ZTb|Y$*(|T^Ei+Elq*{BM=f*>LGM-h)M|TdG zK%Y5o+S=6+Rk}DZcShB4A`4bZaqXs%m?+wT)nnG=!nzO!qv1Rzl!n)xNOtxJ}r-@^SaklbfH43Lh z4F-?2GWseeH23X_Jaw_h3vBkF*MS<<5VGodw2bL8!j}ozTFRMHrEuO1L?2>9NsCtv z=T2RqfJ9KRh4Oxfvbt}dsv?zay~@Zln{04I%{UTDSs|i`A1z_&5ZP|xWkiLJ9u=(H z{PwR7?M3akzjRdM^2LCauXH_HmeQl=SgQcjXDmJ8L-R9qRGlyoMXSgBx!Ks67%}tW zjXxQ?-v$_#dJC)r_=Bjhxr-;5L9|DwJA}N!WyDn@>U0e;ng^N;7N;?0C(h*pxMt2# z%f)~hs|$9Uyyc~{aOPk&&jQAKXB>p**Ag*C@rxGi;e{k1a@E7X{^Hcn z)sIU6H-`}nGt{UId#c)AUTA&tUwo4y?#h!>s*f>F(#*VpN))(K(Y*BFs7Tx}qKNQ* z@vW8}h;HN_t*tGF2@p?StF?|XPvF`|0}lIG>n1J`6>yHnxUftOCi}c_Tf0jPwg(EO z1zg;|^nkhlct6%{GU#r?TOlT%KGbHz#}X$}s1DhJFiak|U03kG7%?2L`;~YL%k?DR zRn2jhuuO%^;jA=#9!0!S5teBXH{TfEeCQ;~9_cg@L{P#H;%6KvP_U&L9#M$~^wL&M zc8f>an#0xymMRFxK}WU?gVVxOyIVLg+@Em*eM_4b}H~e%L{zzk{>vyQJ5+mm_t3I#L22FV?SMxh)TwCaoWI^E*OUq7v``xc$hPBFAI?9v zz|CiK*0;#zfD%nxqcB|N2_RWREl$9rA$#TPA_+hKNjZCJ$_>V5f}Jd;RL`FI%Ttd? z{OwI;iNAy$N%GV|fZbrxvezE7KAE7Ch5{Zt@!9N%9(Pv9Vb_mFj9oBb zy$6RtP!wLrvsHr=`cz#_m1z)5MB}{w_`kVx;DV30J9pF2D;{z88A{t@T!jo#@V~*~fBNdT z5B-}S3lWxL%x0Y zSY1V9HXv7w`NHA?_6lN_kR1{()W5qFjxCDe{M;{OA6--vD3J2GH+Jf15QLwOUZ5pN zM1?E)Guz?92vDiL#Ocnj%Vd|Iy0}tQ+u?lPJv_)Ivf|JM0tf>$oGxpzTQNI$;G{=5+^gw?||H zSh5+%Er-|dY}Nqma*%RoVn6)H=uWv-rUd~PO!xEnzlw;LYQm)MW6bt*3&i2@`>)L| z-iqzwou>Y9+T??~*MEI(IGQOYpJf-Yi^QSSX2w_)Jsxn%uV33G(P8~oBPR3B#_rX| zKCt5_jsrG{QV~T5_^!sZQ>PCP&)T8oFvtfxo}$5Xv#A+58w^8$f;~@F)Jc%Aw<+c5 zF}VkrGfm&+=A6vl?sf5f&b`~Sr0$$kEYUlG1$P6tT_tNz-Z7YDR>X7e&TR5l1V&Ai zWD-aQOroFav^d)+QL}?1lP7J;=G$ti0gASTAIspkF;cO064LH3XJ=o|c!a0)xBv3! zftaMWISZuAwvG*i7 zy0C;@Q5$Zj8N1{VzhUrp_}%8X!|Sz1vpeeXN>>ixnNZEG3<4MCqDbvMD2O);q!e-a zp%;_Ov;k7LX{Pu8NnUFee{2Y_O@LHv3s_3|Z9RT9<^1|DmhT>KE8y7RN`daz)|?8@ zWBPE!;kTWb0#r3yHT>Yo%Q@8)U&m)M!Vhnb4vyI)GnKAzdmdW!gDy3xeGOMXskbC9 zJ@I!yKn?i#s^-k;7W4GpGH(2G9~|dSNOv^Ef@^FVOlOcezl@q z_CJRT(R0Zvx{;EKxSNTruILv}9`MF793bG^vsu=gg&+i4V|1dTyXn6=`ENL~1t{yi zLyha?`1VoB4NYxr@a8$Vpa#u)B4fYQ#G_rLaX>hEGQd;v-&YkcH6`pa>@^0>p*iT( z+gWh-4^`%@sT$5~7IBzMaL!0~yqxkWH-3VL0&Y9fkcrb9S#x&MB!~aJ4xy4$zg+fk zn=+qYDogX+G1PpF?ThEgvoRHy9m~MovbKH-Uk8>f%nEfuHvevdiW%-QGB z0)7WM2&%xYwGmy70xZ^v6D4g=uEW9qOlI93(K#)Nm-EIAbsQTysd1OO4HCZah`zP$ z9_|3dh<)n1mcuz3HqnZ4W@sq)d2%urI@-Bjf%JwE3p9N9XaRrf0h43L-KWvyzxLD1 zA|Fve3LSN&9j!5=egRZ^Im`Lu1{J=sWCU(``B%>D7ctoF^*fT%j7C7z3J6C)*4d*k zYE5gMUuPM5kdsu#79_gs`AzWr2n{>B!Q1(3(D9N5mZp?b!w0*w;w@cd;Svq1E~7>D zU3sgXlEWB(p^l6H)b6~J8?EqI5AnJpPD`g3_<)H^G7*nc|BGAyvn#~ZACMAM{QE=6% zn(arTbxCaD7M`9hpw23viIZ>=rIIJ<;?v@YUs3C^58;<_DEDi>hCIB0-7HJt+0n$I zbMGBg8Oqz9oVu~L22*`W*b52pjn*!i+1@rlanxorD*9{O+_*N|2@s*moSpTy#WM3a z_9c|GSXA)#0^@WC$FlL9C_|86jRamCx3ov&Es#&>qtSBwK>H3Zzu)28&HoK=t?V4n zl${xP7L;Pv+_Zg!nM2MdA2!g;H(+3KZxYM2`2L2O18DMmB5{v}B@#jO`+5g)AGWav z(0g~5qGfRK{>Duk=;*i=BAyFkEo1^5IRUBHc+7pJxg9m$0DX+lZUD2YnR z%33G4)b0LZBCkAoX3+I2>eHDIb0{M=3YMZ9wR_?)6(_#)wpiQ7Dg5|g%@iopqI(laxbUY7kb0TqT}@SM-pDaZ zYJ0MARaw8U$d+sKW9; zxd~h_H~#OjJ`lNaLRmVX=$xiG=q!v$v|~mvc^f;sLn#-qW%dsjm0u`zBo~ZtR%f_<~L)BhOZ(~%V@iK%NS!t|7b_?r2 zAj1lersD=Q^6`CrmOjPQo?F9@HYS!)vFxz(o|Fkx`kr~l>_S`gtlku^8?0PlqB}${ z_2Tm5AoRtS?96Ma)?OqdL5&x=fM;`svjd!U3wgLy z1P`wcuRvEu4Wv58F^%0U*q%iVc1S(V*vKf?n$BYMf_^?v0Z;$yP@VgA`@2UJbvJ;C zYi*4;X0P4=p<7y`#R#U(0G5AH1;#(^O3%RXqqngjY%~j-rPS!a8ZF`QNL7u8huGG| z;qC0z$GZ?IY7{Q;g&~MZ1j!a9$6lkjqb6Ef?(WEae=l2TTBL z9CZKs=_2N&R*h$muJ)gTtIUd+$Sb2IV|hMuaBw`I1tNLAYKGZo2a4Mzqx#!_ z!eAZfd>@jD!Hd^BQ$Vc0FNw2&`@4Sq(89xAE3^WmB}AV( zG#!1s!Rt5?mr>{rXejmS+Uh-=OW2$^h}RPp9xPf=nN?Xib6O<-_|yN%cFj;Bfere4 zj`Lb`WUtXFQIMwRlDGPB!d!EQisN)1n7DKE{r^aNAF#NqD{uVH@F!&o@sYqIhIAzc z2@s!31`@>W+f0ZcnL>7$%+NK{W>HB(f=su9uvLF`^4CfeOA@G=B&`Dp2$N3Rb@{VG z)5U5PA}WMstfaGV)f9<7uvNEjbst~*JD+p!cNh|g!@ggA3wr5T)mo*Q_qVtz@3FbZj5L;(A&_Aw@S-^KE ztw(5Qywu)LC+qOGedqCe&WuiZ;>HCT`8BmnEMDrmW0P$8(R@#S=cBzQi?Db!ttVL( z?K4vbr)$ilbN@^v4G9tXE_rR1CIzH!!?_#Hy z5FJP8>?JuquQF;)yIR_O3FC^95}1 zTrXWr*FaWT_LIs-#>q>7*U?R=hp^t*zkUDz_E)Yc-0Sm1k$UrC_mZ%PNhWRfsdR%d zBzxKnXUN>!ll#w9737vo2vivB4wIW6^RkF+h|z6EFW(+c;i%iVnE(zczNO{6-uUbt z+ICtgYd4(zq#7*#%G#t^l?RU<%xezE-*{k9+qgH-61ADG9bBi?V1=ntA*dd7GG z&-UKRvZ;yDlCe5huKtiKBGSdDo?4pyuOhu|db;!xy6$}Nc#hq(r5x!PWAt}^^XbwG z$T_E4FtPDM1&42#1~aSib{4rMze(<0l6$3~)eKv42YE!{@mU-td$hNVqD|`Q3 zU2};KXy+0+vPrtrPjuJ3R+JMyk$8+Vxb>9Ap7u^}?@HCraTX_2!ee*@-!K3z7S5`m&y|ejSz9k18WpY1TX6R>HXl%zzP-27n_KBav0h@oLV5C4OpI@> zJB4^gKbbuIjC{Vj-aYi9e*Ke2YJc5y!IL5PPr4Hgy6?)}(?M!%qt!$51(=sx=c=k{M)CU)8zBlUb*<6ZMEds>U%elWh0XZ7w1xPm%$=D=_1{^ueYGI zFMudL`SY6|I@RK1N9G$zB0j??#M(nsUp_Z6@#^|6)Eg|XB-NLC-~KZvkf)f6}PSFYhkbV~k@gZ3z~o>Y86d-sy;;`jrG`!(}MY+3UuUOM~q`5ksz zr}E>;$aRwrgd(WxCS%XKzq`+SS0bqb`Y9>GUb-G+0L;IB`kN2iOZt8y2?4;X5Xh(O( zB%))NK2;9APZyvh?Vh1e{w3pSGJ1$vaaL;14N&(VN)91?IhJFsQCU5*i(G?GuVQ|% zGi&t4KV-XKqjPUZObbZQt!3$CRFiwI8*7$eif!6Pu4!Er(>Q6qCrkFW zlhLfDyCw(be*@Rlp0vwstj))`kClOK*4e3U#{1}Y5E5`W$R)6oKm=e7Ng@=#C{8eo$Mz+tJz-H=%EMjis;Pwi6=yei8`pSFb$MM&Oa02chpA z7E7PV63ArfjJkCh(cgdc#oF)#g3=eA6f=E8o-PdT` z=;H8i^LhCqSmPX8jS>LZrx!r3eiuS}WCO|3C*wyhFKl3^ZTq=;(unH2ZqkQ6^h&zC z0s6-0<37Z;iHjYXM<( z!0F<4t^AM$B*5?1z47s{i;ACz4s>&M#_%L(E1BF*_kQO_>FQ?(n{e~E1t@;p|4p36 zfVVqufCmp3BJAs35cx3%uA99B$W_mC2j~s)`yg~+@1xy&*VK9w&eZKSV^(fd96U%Ms-RrMC}=_?NK=@44sx%llfQNf=b9M`z^yH|@>4SwXkrm8_r^WUsfpCg$mdt^ldQfTyaGd_Hd65X@fT z=;iJ^d=mkPgL3#2=eq+)d$4O{=Xm&f+=0&gUh~gJyuy%}DGUkGzaukX^7*IZE(9X# zYoq^|m?F~6^+IId?81g0{r_^NoE^E9LaSQ=@Fy`CK06rm${nwN`rb-{fzQLunJj*4 z*ZPgz3k(+UKBFZ4(@R)4Jh)=$c!~rWYkKh^{v?QAJE{`ZRZ6!VPu!&$s0x~+$CoH$MbBi$g z{F5U2(fVgM)w!_w1o;9`@4xJ@STRui)P|pa{O-ve#>4JB`2wUNkk)XO+o*aGKlo;L zuA9`Pn#!cw4RIJi<#QIi1yQ-CkZW)e)^OsYjC0Xm_DG!=U=T1dZY6(M#s%m_%=pLY zXJD{QkSdhWu!Bzj95eLFt`M>gckE29@hm3Zq*%wf~M1JU-|ggwXeFf8`%>eEJ#Q=J7rLfV0bl!$28aQs3G=&WXo1f z2{K)HbEEqjGWhH>#{mpt!6}Ia)iv;zA+56wISwRwyv>XToPPhz7^8vu`nv9JZyRZc z4lidyLD;jk*qkFI0MZM-WN0x*Pt)PI30Z@;`7p>>I;;L{i~VB9_6AQfm`VZEvTaVu z6)=P+i(NGlKYH)6E2j@!*g+Tm=o7}Zm>kc=c`N}C2@G&Y7QZH~cpoxa!-J|VK(TCX z!DP~_DZ{hR)wKBPs(QZu!AveW{})Nf17$OpI0QszJ0VZo$-yvsF$9!mE}pAvz(wc= z*M+=&k2kkIzez|hxcv&8pj`3=(>*#L?Qv&p5_q#QPEl2G)5DKs9<`Q#N9?ojJV;oeQ@TWDSNc58kwDAOT3sSXpmGr86k$D8UzWJhHfsXW6;WU5 z7L(%bPyh38>H1H)dFMs~#Tjb&u$!5e$`AMzGj0n_-0!0>CfFuGyZsB{z*+8wmeFnq zXq6zeN2V!pcAGR^`}Fz?z6llx=?p*}!b50t&df}c*JuuSkrtyXlzEVJr|jthZ!kR& z@gV5}=b`Di!06A;sKHOeJTuyB|Bv65O|^+!B)+0uVnDF!8*Z)8|Kq@l$N$&lU`^UX z%Q86Te?0X8w^aUzxvz`zf{z;We(=&zWAWj=vSS{o#4$(ncvRt=gopAUH!igMYhxf= zmGqZ!&>P+HLZtsffD?Z+xcjrx@4HI+8(QfeIohWQ1Em84SrP)dm4S5dV>aDeD9Koj zkz5e!yVQ3nYRb+nqvb;$(8)B@>R9oQpZv|Yp2$AAW0-~h#AFS(^-*~~&~G92>v#_F zupCLa8ckvN$`5iPdu`H+-z>cKP(C8U0QTf<^LatNb%q5MVa7RDFmIuA?`~~C=Mh3b%t6f-JdQwr&iQ}9f5|pEwNYfG@nbKT zP0J36)z7@};pIHK_Dcx33Z!oBOIPd{C{yQ$(r#bjX`p}*G} zYgB?4xBs*pD~WP@HGl;#MmBjGJdN3t-x_M1T(&Z#6Ux<3u>Py6z%nsbMS8#N3W%so zFo*T;@cG)d*5RJ_uvu4NFCcXsfjxBo-pw&j=WqZByEk%>Z&H>| zv?JxQ;>AUnBVh z`0zbzf$7|Od*Sa0`goQ1t25E{vJ$8ot4;1l@MGjYQ_OA`!d#@~{HGp$bdSeBv)6o5 zC@duORuMUxA-2Sdy#14peedw$p~0HG9h*P8-)&TME^akR9&p9Yk%NPp z$~VtZ`PbS0{FGc7nBHOs}`ul^!3Co97cterX8k8%hMDAR$sEH+9*55i=b7#)cQ)zVS)- z(>a{zdWDofRGzWou#EX2osA}T?%6>kMFV92ia6qdG%o?Z4PRY&?{kt|nFrb9N3i41 zHhK^2-gj zLo>nv^cu**GuaO~ry+p)oO@erB0bY45^_ywz|rbT?i-0HiP%JrJ`!CK%M+r|X{X;r zHmB`2dMl$Iftk=Jm!;_L%o1D5(@y{IRg*7oI=K^BuG2$JLrI+6R5^aFz-WDy+c<0N zxM`GRsj6u2b*?@CnQs zd;3OPrVMuI59%(`D_%!v&LOY7NKMKTySoy2I{48BTnoItBedRHe{vXSQTbDEW zPha1V_e9PxX?yo7LVBlG8ae0*i?@TTLX%W|Kcb(c@44BVGAqR;G+A-6ARv7Na_*fSRZt7LLgp3dX)2!pRRm_!^fW)1NSC+=E~T29`vps zs0@tg8_aU&(QEHMCgNXk>GE7B^M179w;%7ym0Qo#F8mP3H#x@(J-;gAs#8BXsSKUW z?&pT~#Jc9#Wo2lkJ#GRDFUZ@I63nLF9FRecZj4xy*Px3rjxWF$ge9V6!tNYJJe&}2 z8<3tAgJ=l1vTwh>YkgO4fr#$r2CI$t;h*cfd+jzm`Lt`c35yyvdtU>g+tm@|+Qwd} ziG1wwXO5m8%g$)JK&QN7EaPd?@xc@?k0Q#dNqhddDuy0ph@;S*tTn1gd;B`eZef5I zWUJz95^g$E8*jH1SuXPA*vxJ7IxhkesIY&xif@sJz`ku|A}6}i3Et#Zt|NbLtVD<; z96P!7Ht%_iGs5((^ipnHskfyTA+#IQ81rn_>i0hTsm1Mf7e9aW$se00-GgY}z!bhL zH^Unef}d9m5xD2lXPzkiB%rPwz{@)C#!t(yv-e(@jY5Yp1! z2FEb5a9Yp6KFT24r`FU4%lYwq<)+&6nfrQ8amxcjx6xE&i9D!VNhdxqAks`}rw82G zfBfusbm~p7Z%hJ(>%jxBrZ8n!avG%Xy7S|u6|bfY$^xWgS$W5fsVR&+^&r^oe%@!k zcs6o6?7s3lxQn!SXgv3x{7yJ@olF<<`gGefOyiZwZ6&jx zs~dCvrOIrvi@3NdQ$(T5BTzf3yB*0KedT22;P<}1A;vveQ+)ZxC!5HlaZ87`5FxBV znbSMIJdZomFoh?zd@@f9UCE1n{e5erOL*hH+)8F|b!+4u&Su*C&5F5I?eso%aO<4# z4S(l@EEF&r@J}Ze&}p0Lv?1(d*A7h?EQDg6`&{x9BV7jZmCWg$yGo*`g-G=A^o$sc zB;v5;WW{mw%Zp@1&S+**W^QFU!tvDm*1h%vna8>tV+8lYZ6o&`b1Wd{ z+F+LJi}}?A2Ar+WIm&!Bsl}MK0#r)|45Zm z1w0kNS@$sesXR7yM`Hz7kERYzmdNPEtu^Gsl#s@M>H&<;T=|VJuUz=_>UFZW*iXPGFO!MOTIM9PTMp|zUOEE2DzjB& z%aj`fr!AnV1P#BfsmVj%vXKL5L)?%YYx^)M;5-A}LIXwPS%H@4QV-gJLf}@D_XU96@Y82%9jAnU=Ukt z;fn9}&?hFril>*_AKqqPvYF%ZBg^>*`oAwna!!}y))~dIn#srBdhaMQ6YX0weq6XI zz`xAk)4x4iYS7lEvBW%o4G3>8S!ZOu?64$h1v5f=Uz}&mPcF0 zOhO!WMMKU>n-gx0-~8g`@3p2qusUrko$zZ%8wXb{-39zYpfyPn6SoYovIAowrA8TW zMlNVH{=|msAGp>CAQ+NnKI&5kOA&(vbRnD8)1$~)49zt7GVL7Cl&%_mM|h3YzD&zX z*rp+NgV67DeI;+KHb^|f^(qK}wEp8MZa|hJMucuJmPyX}Jy~?ckKM53!XIzUat~IJ z0$-2QmSKs!r*$88l{-$BY=xVoVF=&m6!)}&J!7CZ>@XkV(F6ESd#Q-c188;&< z#rmH_ge4-=Mb*5I==LxQbeDR!OSFtO;$hhLy z|Il#%11qzS|KOFJ$>Qgq`w~VYt{}JEI9S1XH+DyZ_j;)sZ341AxuqNa=DK^nriAc{ z#BeB_ew@|E$wI~ z5RoKyx&or@t5+On>Rc_R=nrbOwV=tmwL%vwHlJ9w>eY`v8~xf?cKYz?p`qg^cMKm! zjO{hj;NW4^$UbD>(hBNojHro*i1REI`sVvzyZ*j|FwK{^sVX$p!ahkYM4j1Xj(z}^ zrw(dq);o}cC}1{n0LSe|mxxDH0Ok}*MUYl!)?I=@+?5A9T_s)Nmvx>2G9DR@dT+oG z(0Bf=hsz1&^Ky}@lRcW^j{VbT|8e88ysW|EGb;v%PM%Ft6&KbTYx3L? zC&8!AK$iWfiZ|DPhi%ydCkDBojKL}UAuESZ(zd_gY9sV;Z6T4CSA>lQk)Ye$J{?4= zcWLP*zaJ^LR@QIcQyPlB3YRD7UBZ%UGCX@%Lhv)orq1_0*Myq8qb3nhjb90!#k+!Om3DBzNRMC{Z{}<#+3AA{dWhDXg$-fZ-PIq^ERbT?ZoS+KXgN-)! z!S)dtCozwBc3oW1cJ1l%)?PxHqTX8|bUwN7_#%!huTBz0jjMFVRWE$}eDTM0+z&m3 zgzD{wwlGM;c^{YcG^d6oZsU30Av%pP>Suqy;C7{CY4b98w1Dhv%qI-pta9jFKw=BD zzhx)=?ahP}#>^>ZQb}w|md=YPOaMi8mh;RY@xowd+600vnWz6fS;?}{cX++D=iEx+ zZ6xrrn{W2!6cO1}166*jsYYLM;~zf#ed_~s(#yVDQSthw)i*wQ4Ezbc*IY&M8r|$4 zZ#2r5nJ=D@LsM_f0(xBUXw`tUrXppDmALU>4tEL_qCm zN}9Xp|NAzZL;g||AaIYIAOC^gcXt^xRkPx0ui@<4%wulqB zyD^;}ohjL2JAcXG#97B(=QnS#V+&qzkBBLd&h77(knR^j5}+L z-%Vnc)Q-l%3QTdPeV@v88wX{H9M89MuOsEn9_OZK-Wm9UjjNFZBU~7y)x=3OGLM9l z$8FOj9Cus=BVei&&#hYudmGI-=;)$q( z-(T?sd!AeB9w0HL!+thjD~pkpA+r2c^EPc#d(HUyk~2e+qlbtm)d9R0lyV!KKAg2d zh+LD_m{5o%>k^Xf4qI(ht|@wEN*GF0c+2|y1B2Lc{5Q$ZtF_xnY)HDJ-**Y8 z_4sC0Rpof+U4@gm5-mb^zgYUcf2l$l^~0IcWg zm;wc&luUv%_cbaClYKl<+6OM#bh3lC-QWr2nsg|KNH{y15+|~BrY4uz`Fc5~OK@0W zqw%3XeRAh;@$1E}S5ypN*wHxj()~M(#m^C3DKvh!5$;!p>|w(m*QOvkDgOKmh5PD` z{MEbRd^8u7GVPrU0PM`|or6y5>+59U17gV_{E&1j8VJXTrO~Q$sZHzpM7s8YwKcwr z?_W6cpn-H;oPSD)-?tvM|lu>^lD9yYDT_&OV-(eRJM%_npvW zO=Py{D&I-_HkQ<^7$iT8+gSjVxw&=2mtIKP5dB5Fo}JjnBtNiS0s+ufei00oN{TDN zl?SDpX>R>9Zt+9_uBdIhHyB??-AgOTX7@5n{JTO)?ZB@mueovTuWO zC%BT_M*rsb>D;6Sy(}6VBL}f#eZ{iB*|6l~tvh$6J!GsowNf23LP;ADJ0l+F@EYgo;*q{a~4jdX9Qcz2^s6Z|dqMP?KMgxn4~=?UkU zJn1$=i^D@Ftv~A#Vx32}OQh$n8gKP@Vqe)5I_m~~4wN~f>F*{w?D%1FJGN}U%u^@x{v}m*?)U?lYGV}>`nK%)!$26D4r%1ATGS)_ zU+oM9C++?@;6&y>_8=Lka-Gcbo?$Ydj}Doc+|GR+1iR68B|&Ja%y6>JUP_oizt1Hi zwrOqkNPp=Iie1^MeCe%naSBd zS~^Os(@W#1PHbr6d|eaR%Ba|UPxO)7FL&(9{h$XfMxqicZzW75NtF(W4OXA&SO zo0*vb?4DAvyGa;WgDtNVLa`I=caa;H+!g(t7jd&H6+A;7gFc_|CrLLpT(RVt-@g6! z>pSs0RI?hOWO&$}_R!6-r&r-vS0TgYMo;gGr4J4*t#}h?jE?y6XIx*n=U_|zN^fFF zUye@ORViJGK*3=td9JsrzOGsGuSVz^a}+^ZYb{R3z3G#?fJyj}<1jswo2cpRy*>1a zrksi6we+2jfmkG303Y3&qOTx@ok|9Juy!)?Pal5rtA8d1mYtXFh60-`ZZ8@}1zW|t ztCyv|x*l{UY&r%9{XBOSYdjpzrX>ukMv)c>`rDhi%7h8(+`k;XcbJJz7P+l#TJjVf z5`G4)GrbYNBC%_j+a5Q89{zmFIyD>BLmRgDB=#kD>Du{}#n`58g2$O*utp5{d7A;b zX~U;~_5C|;$$Qd$V#tk<5qdKWHNEPFmEs~r0MFwXT%B#)bfV@qRO7ty@gKf$yFrRp zq8!YZnBU>kXiDwVH-(~+%v0SQ9N<6^8D$wgVQoHv%unxbjj++sKJ$K4=0Qt>M_3YX z!>5dTz;{?yQiccKI)ML5bn%YVI=D&OTx9`0BwaNP*SiO3+ z@gZrYuO>n583o`PF3Je8BNJ;f` z)Bq_=C~t<^GXCwA=dF0^{oD99^eAeU$xa%}#@#k@D%GB^oO;w|Ks{1KvGuGoD1!R@ z=Uov-69G@SRl|+?%{Oc~{>r=W-ME(Q@^Qjmq@H(@vfi{BGZ#^En|D0#Sn-q4URiF{ zVdSskZ@+lYv(;za!6Y8@5?DO>8r!Rb(Lm=#rK`K>`f3(gX)dtvre%LcRdQl=2~VaB zhDnp09#!Ta*V!;6Cb_9|Hf~ZB4~vY!nmVI?$JmLO_{dKm`~Drb-(5`LYjVq$ig(>N z(+(R4>3|tgH-Yfs&-4fEBwM-?_r;stBPSqDu!ygxs%IWqh zioHx>vEM9Xfb~^Xl6ogi6ME4fnIKgirL!u?#Vz4XcDu79x!(gXiVj!{n&?tGK|&$J z6hqc2^3`XvV&cVnmq~B^{vD)q9(w4Z?;3HJ2P@v$ar_A;9u5x;4{=ve_nm5f=;zKa z-moN~oWrn5Oi*R6p^OMgz8#=Q?V7sYJt59xk6k0*^l(Us9jPvmtFMX_^uv)#h$`}E zA7&vm;_Wm?)Nvjoxgm3-it`pF8j+JHm$|4hrg5qBsq)k!(e%Bq{dB`EcRqQT5C}cP z?&4?D$hC00Q#pab8wR7;eW#pH_w=XNA(sUo%`$;$C3}BvD^m_J3MpsZ#&!v;ZMD*a z^7-1pE>^L!dQMqsDQQKd$8Pm!gB1dLmmz9;=6#oQMAzqc>Dtq6dwIK&F56iI^l7)L zMUjKCL$#B-TTP<))5m_g;ifM=d17b?+byK)TRi!V)yqz}i;o@{G7dM%EC#8qvrYdJ zzX1)Bzwo(=X(D^}jh8yk1)T`i(27`f3Bmm7J-EKeU@^s>3=!CNoTZ;bJ;*T8bu9{R zR(KM=vcB7l%0TesjHIUboG=y9g$*^1J{_5$0)Krmn>>EEiKJ?B<57Ftm zhhUUW)2@eJdKDJfc<-^o)v6)h>TDxC#XCO!LMSa%NY{Bqs}lL=Anbsu^>bX~ObfCz zV9cFzba$hCq*GN%aYphE1VV7~GGoJ`>{1)S%2Ox^BdZ&-;q>b1Jq>6C=4vd}EF3QBXwiJz%AbB`^^ab;{NA#)$CZkv$9?SdOBZUE-9Ahk&rWq4 zV}}Tqq@MmwP0Z2Hw}-LekpA;%fc6FAOez>C88Fe>UhM3X8>iDZvx*ut}^#CyZRU%s>7E2kzq=alAF$+_H#t*XGoiALTwhborx) ze&9YW?=R`A;h`-%x2#^9_k;Uu=v?nTR`Irxu;(|jvuMZHV}{N?l2a0raprOerozdP zk0b|c{ScToONXt>fSL<}xSAjqlFtM)C@tD&KHWgEA;k3TuQ<^GywZaV1U z;fi;&*Sg(qjJW=*SQE}}Q2-!EALsXO^R4eg`pJ(o|LnR%x{9uY6yN>Oa5OTv~Zh`=q}AkLLUs0W!*{wSkV=Ic`mxU zkry|M;^%gL?|Z-ckAKL0rs?kCis8$bUngZ{uE}1VoqgNw!^2IJ6_XDb?{yy@e!1db zNThH6+%n((u6{7#B@|%w$$|%2&cwwHk^;;T9b{E6X^7I#0?dRlz^fjPW6p+pHrg_H zyP`7~<`J#*8>iX`PzP|NJoCnj zPkg;b20!v*nkIK{*|`%Nyp7z5;h~+kxoOArJbo;k-CixsM|@;>pUr1aL3zO}xvYYF zII4plH_GxN7vbgXqg^`wGQ@)polQ=EC7q%{WSTs|-5%-jH;}{cKS`qOmm{oF8`%qv zJm89H)bAi!UYR1|TQ`fe;?qO!6Hh(%uYY>?m8ZY@UBZ;v$FuW}XABR$bonxl69RqW z$2%WjdH&oK)@FmD9YCvXgo${plcID=7ND(c+A8yjURlJY3@^3^I~8De9}FT@^4Rm+ zt#u6+->6MbXK2w`gNK{o^!{+PkG8uTL7kkD^Z^llHWfXa*gGP3p>1?nG&YLJ(NtH= zQTTyt*RJ^Vqd&g-^w&#YzyE<%bd4W+sOC1~&`Xn~pCH!R*zAcPKYqj&&Ti+XA{=e1 z{V?-iz#Y)?FI=K416k6^cW@S!zvbdp$&A_Ek8Ve2Kxii9WQWU}n4&4>s04eWsTF>q zzk$BhdDt(4>l@RFhU<|-V<&j89mmM|FMjU3H)pTSUc2JmXTJW}r?2Ea`6QhoOfcao z`n&jFNQjT)ba#C+e^Z{TA6cxT@@rZ!2VItW?V*qvIkX$i>B4H#lt*d76(|6zf(o49Qq^7ozU$nCr(fArV)6ce^2y2s)qb@tAukV6SjzKS>iWsH_-3Lgb z*|$GKc7^b%j!YO`93>1zT39l@^}n{ec+&f5`w{i| z1R=ySD{s>}HHi%i^Rakw+e+imZ+5}lAc%A8{kPt~lO%Unni0~w+E|l1nRop5;lGO5 zJXbio)R~2UWZivNg>9JS5P~M8V`E30>dkx^w9$Nl^UQ0Lj-VE@DR7edMb|;VC#y-> z8-w%d)?O1&#)&9AvYh{2DuNe{sYnYOYin>(#cg*Va77MQyt_JP__Rb3^gMaO&Cd}2 zBIq~-$t8JBnGEYJ6`84vQC*vb`3_bsZxpI^rB_!g6Gzi)>Uw$*r$8^&dNdsZcXKN% zBFhwK3GE;>uxEGHrMB7r!P$|3he=&RL?4OX>mg@{$B;M1BX3kpCN*-ON$4x-gx%3w z2>q@$-ke7O@hF*?Wr$J1*6`ot)Vq&8@$vhWVQw>|dJr^J8Fgej0~!I8YP=3akDC!? zm5!W42H>=B=bR;*Qb+444e zruj*7;|Et~F=401NKWiSB)W7*cfp~}UP)U#N`@uxv-i`UDi3Rmv*`jgYMm>iWok&l zh4U&MhB~=97BocpNN-(+V^AB6h5&{@t_|5vok=95$_Qgrx}6kKmB|pggjBr=<-pb{ zH^yv{jwMB#W;%>g5H~3ra^mRW6cKdK7IQXV%?+naVctkBKahFI9~4#|q#YDi?)oMx zT>YqTCN~unH0aYaEeNo|7pOyzz~HBxm=IXA8>JCQDo$I7y=}`!33aC zqey5&Tj)S=gt(46VA-2R9wEWixdt5ZjZZNC&S*|+;EE; z^~fG6Gp;lO>5S&R5V`|FMG~$a!M#*R%OwF|*sbqsi?Z0cTOHv6LrkU#J2JFftcUd2DmCX3O&@39K?wcxT9uW+l;Y7trGDpvTker`1cHza5WW%_jw#C6*F3z?NyhGg7% zu9n|VIyvhj7=On{XNdHg(n(G-OmXP7iuQ7>P<6MS)ur$xbn~~Dmh=8}w~@`)8A&$x zpEwK_7`c|k&yuUTIvao8w&6mG2=~@$`KUQ^sgg4)rn^1pcl7jr+n_;luZ#+@&O{6$ zfK)rvTFI%r*p%3pTPXmzIZ9$NpEZz~f9muHwKC19Yw-x1t5PKC&x*A!xxFoPeDQjd zx_W7*;=@BrxMxlyCu1(`GCoveyf@GN*-0V7J3QK*)#V%Q?;GFUUpOr%vzXBnn+xmM zLvC~WX9%ISSYE5#&4M-0pb+dP!lARTVUek^!xVYyP|S8J$sjj zr?T?q@SvuWsm6 zu$T0cM@_spI>rF^fr~Iz()H81WM-UCEk>6@_930j9f$$NdxwW!JmCiI;q9c;FYTjH+Jr@r6Nfba#V!2w>e0 zty8V>864YKO$l0P#`f$i;*jSj@h>83XX^&oIXZ^Z(wkDDLjb9lrKD{%F3C!+F}L^c~A(gC!fgcv?X!vwK@*B3FrE9S7T>Ft>7MZ(I_h zt?KYNs49(`;Y?Kl>Gw9NC0KbFj=3`Wbfd#E=9F7_Qhxr+=(V$X^+p00MUgITTg9&8 zeHBaZuNagg?cByKJ0C~g!jkZG#?>`h^T^-0lQYt6$mkaJBO*~YO(KWpYHL&jEtH}W zZuSN^m_hDb8yPXx4U|l^)kZ>b*U~-G9f-@xL0bOB$dl#VCYwx{E(HUC;?n^_cuORJ z;4D|XjfBP2tgov3ZrJM$Sh@)TlItkBRg| z#0fV>tGVx_gIe_onv?0m1HZCN>d>437`N%-w8}V&dr8EY#bdA5Lh~SU`L2bBPBM2~ zP2MAZ_OHdx#Hgr5718+i6uB_hhVIP zfFHC-2zaJNf_JU}K?8y{50CgJII&Pw#VzJLW#UMs_0e3X%N|8%-DI$!MzPeS4#+lQ zfHz_%ePszU&>D-TNF~sIpcBN=yIqZtw%c$%s|djJ;HSsYb8-=wPa#?rx6&{limuob zVPFKqGeMUKbHL>N`3oEr4g`d9C7twIEI!f*Z8{sNIemkAXNHr4!*co#k+;t!B`#He z54-Y_u1I{JTAGr|g~o%+Qqbp%9Oa6)k3aDt*WiR}iL{1qmbo~u3O&peBk&i@{X;1{ zZwuH+MKw5d49&o0Xp(_|SqHh5WVCgC0inxx$?YWO=u~9YE0&h?;pjJx;O0p8D!7{> zeZ`V2Ijo>@*{wT1p9vPhQN+(d3KS>@N?ppw~fIxyL5#5v2R&*xPXohP(ypc7t zh%rdl&lJ;`W}2(avdjY-B8(?AhlbY3$=lHIh{S8!sfiZ{IaO}O%l0$CNf)1F z3Ws>=AfJ&YQyWR}Ak8f$OuyF@JteMAV$$mQKq4FBbt%9Ak!R_myfB=WUy*m<)lYuL zzZ4OkiJ6TSh3GI+#9TeEu03)Ios!LORn!giePZu!#4Bq$2*AlAJd~_jwx8;6ZO}Kt zVjB1y^sKnj=YDpiOCE@BWj_1_GA_k?jk;k>W7%|~_^%?-#Xk)bpanf}J3yKS&_aAU z4mC_LQ_4BbegWD0HS+!=NDKZ&f3PV8gln5bdzFwbV3~B@0GY}JF&pjTCtk>{h@zGh z=&&Xi3)lV=#Rmq9pZM@j`CE&R1BG}5=2mVn1%l(Z4HL?1)!Ho!`j+nKWqR=}jT(%BgR84P-hu82G4=x1BxuZ4L>FhoRa zG8DvO&5~8m@MTH{B2`-kf&q^168LZ95}Ae6PmqJxXt38<|By%IZN1L;v)FyWu6LOT!9*djfdMx7BSl6PP*Eq{l0 z9%3;GsKg*2TypM6<5t!4$O=R|m|Q4(o2jrsFC@v{-=!@4%rtj>LXR)R@z}x|(y@

zNB%yB`nRR%t0+-LSRi}$ zOs=x|n+QBd$`)JV>Pln|G&F*;Bv4mMe2E)vh8FKghKV*&B{!klXqx}iaT1YOXOoMr zM6oMx?{J!Fa#oze4u7ebp8r%Aci-~){Xa3Z%3&csuHv`$?&$@NEgkKKzl09zs5F|@ zv}%${7c53|A7MjOnUrD^fQE!d(mOr#e|l;{jJzMT2`j;MItX{AM4^`=%Axfc+qC~RYXfzqXTiuh*h zH`B$?4eN%Nmb)Y0_%KQPg)mWwx5tD{g|jv@dABJTpirAxrjue+Q4^ScreR3)cLQV{-ZlVKw|A@b@S{j`;yeH}Pp zxe=TPU6Rl|{Ol9C*QC6s%_$^T#jX_tlS{Jx?!zx>zpyAU<&BfA_&CYg&f#wMoKAJg z2}?67E6ocJ*ze#H#5uVMc5A!Mbef5M{t-LOsK??VlL7M`WzprM`taJP$WRh5^w?qK zF_J1=4kVF2`+D#lR)`K-a*oP0bhyIZCxko_&gh)t0KE^P?%GXVGPI zNtXGZKYbGXC4HC#HXe5XRY0o0916>C(g3Y=TM^;)`4BAN3d+(RAGbpeYO749xnUA; za2HmWZ^Su*!$=UhX7cXSqf$cx?fjBmqSY3!fpZclU4|%jEy+sTXx#9`!0hjZw+D`e z1Vae2HHXY)ZMECywE^zo!jD{NGhCq}h!Q-59k$x&Q zMR%JLO$K4Lr)VD;VUk^bOEa+rj!(hl>8*4LmX;Uqt9bkd*X(Zpha!bA&Ke0oNO^MN zfa7UEu070G;=@29v5ZX!a|vN5p`*J%18;32wP*6HeZ*DMX(R~CvANWF{gVdlLLLT8 zUQ7{P?-c{&TZCTkMT?Xc^;A9*$OD`>43MjRu1=C&NZ*z`Co_ji*=|={9^^&H(qI?u zJ$udirs$a|dP8u&{d;X>F47}iiR z00N9RUuDAMh=z8<*PGZbOKZ8+9JwWAIttPOECU|2QnT*$1q6XXt1APY&*%BvNZ0HZ zHj6ZqZaCJp;*Gce6!I&J$OxciJvuK#Me(eK5!8!YDtz+xaTOSa49NQWSeA-;5Hw3 zpy>8J$8|*BSvIsEtl?dSq?M#^fyx9~s8Av$35DF;XCsi zCFVL6jk90sZZ)CrAerktms?*Es$9d~gMqW;_-sU(oy{7OWjR*{+e`R@4uV5axZUjY zb@R+Bse*ACyqx;1b=5J)@7FcGlD$7Gu3`*7XL6d{f$iIbC}q@+e?j2sGq z;$m?+Np-(03`Mf+Pg04)tEU)zbEfQ$S(HDb0Do`q5t`s zZD7wY@PI2Ad14^)ENRtcDaFsc_=nJ+hN+Zh!MOB^$Uz-zk&J}QQ#+*V=HOrfyK;Tf zJp~^|wrZ8F7*GX{s^;;WfCbfa8K$aw6K)y_R>y*$%^Nrd()fyjG}BcYDeQ=c(n)eo z6{8Kd3uehLgZJ6p%~hTTUOz= z^!NACf0T>ZK3LY|SNlc~7l&R=kFr$f*ss3_uA^DEZdhM&^;HNrVxx3Yi(}Rsl9RR_ zas~mMHalx1E15SO%hO&hwaVR2w$`2M_XeC}RgSLAL;fQHdKEBkQR&g|yVBX`wYnDg z>>_5vrGUL&L;tv1kix~SvZ7QP=dvrdI~-jBW;)wtAs*dc=?kft(|9mGfZIGqmOA-tJA2k8AztQ$I@F~~r{5)_ZOq5UoR z*5hmHWGxG_MVB&z8E)zSU@QiKzp`@=lPqN(n(1jRFi0LfSSLiFQy3%3a=?oQWnl`k61DScM z3%2c?jQXiBnG~$pE=^3$}r)7O7<;7&K#caW0_hY zA`cIMS6*T^#W%(uz3M(MPA%1!1jeeEJISWu;-95yKm)xH|EEo6P=9_zGFaqfotxy; zWS&nng7i>7q4y}K3+@QnxduZ^Pt-hURm3ae3cI0^|BhZR?i=RdZLtXJwtPb0TZnQf zXETTr+U#HE>1y#Z&_Am=EMUWAL{$>cLkPg4F2ev-=SUlEp^vUK^eW*DUsO7J7MrjA z&?1c>0S}Z35-#(mtL}5y7h2*ZNeb_Bj&f#2a`j2!^l;pcEgv(vk=jWTG2jW?g|4ck>ymCjf?{DY|v5#GWTwThhtW$BH@cF2>`tbIZUpnoBl)08uLwn z4(bcUjSJrhF2kDIjQkF}#u_r=@6abEHde-C&c2yNduejb^%(Gk8Ioxb_6Yl#`dS2i zecXgQXrYmN4+16o`kq-DnrhjLeg}I(w-9KdEmYHsvAQz%+V~hmLWD^q&AQCmgNb)M z*72g1kWx(1wSpApZIHG8QBEin-$m3yO`wquTxP!31)O5!EpWJ16~b}X1`PQk0fN`M z=3%6>JOTfq_g%DlSLXh@eNCAMt4z#%NWJPqbt&cLynOxcbw*x)#MSC(F(63=_i`)2 zCIR)#0Y9M|GlPRD2}y{aOAJ=QMO8HeT|R{`{D3E5&RX~N7WUG8CfjUAopr`W+x#9+ zQ8YS&9wq;Och01UZzQC2trUfeFaVN%Nphee44!hVndkG@C{>$1*cew%((S{}yW6MH z8M7@aJ@?@=+i;yhE^H;xG(FE}#t4kpK@>@pq_rd2ZZ^eyzVhl{3)k~ZPzlnygQZX_ zg?2}S9=gwH%#yKbcCv-grSS6k1Oz%)kbk^6g*jPb*&Xj(gC!OR zFUr97822k3fnB%?{o@sLREiBS;!U)9{wQ0mQ@ha zF1%)KVMoJswkYQjFjv`Mz}SE`4%-2!o*O4;Q#O04{zr*KIdMuz9W%@)0SvTNRT@y59zBMBh6fVXJ&=a-CoYjlUV}O>_!)j zFiIw*zfhoZ(sPw+Z(TE)GmKa7=20+QGGe0}-D_rz4DL;Dev=^(7pR2KQ#NJiV~E(M zchQPtW4z0GnS?U7|7LHY|?Jdf`1xvHv% zN02O$lU3n7b84mE7r5BO^N9Ch3(l#kdXrs;>G5Xr{+BNoB32V3EMD79Gh$(6p~-DC zo95fWqQWrJE+~}ObKy+OT&2pMTc`9pWwRXsZh{wg-~@VuGZ#rAdHf%2EEyqqWI)+I zndT8q2gQV43Zu$^YX6=#Z5|T%4H!Q#yZ*u+5QY*w*8L7&oPUbe&sRB0%Z@aL zE2%UN4c$DVm<;M%o?>nbD&uZ&&zCK4sa>xRS6cUkFEW>I=W zI`VX}V3E9$WiFig06YfYC{Jt%c$^<>s@w0_NOI(Fun12AEm!jtco?SI%y5is2uAQ? z^BwQZGjm~a@l?19vI`cP39`JC&fx}Eobc4rRH~&(7q{`AUc)u1AXzap23co1gf+G6 z5JXBK@ADCRR5}{aq^J#Kr0A^LH@Xwiu^gCZTFI&)RXy|xKTXB)R66rsjM_d!@CZ$w zm`l`da^}FF>BbUNeIuM~f|S<0EBL zs`ykKJ7&<9ADbkS*v27tq`#XmM`OgiA{1`Yyw#Ox8b376Jsol@5s>q?_U`#1I&PLc zhe{weXmV8hB{i=Yi3QBmVR~C&Y`SBssGif&Xd_U| zbc;Z4eSw9v(Fp7TGR`H{283L==9k1jBZGHvLL{-1CR>6D3{b&MzF|H^w0Lu%a?PdP zKHnWA>vq}37hg0pQxdb%x!*xE4_D=O29O{$uW08>u&M6Qw7$t;an2kGjFPv1M@e8L zp;KonN^eYP!W)e)k5C&>(Rl6_Mane(^Ne}d7A83i?y_%m_8u!-qzcI&MzjkijV+jJ zpkJW+a+AmD=;EyhcTrz!*EhvY#39X=xsN#j!qO?CQdtLOi-B_asVRCB{>1EW9zJ*C z^UV2H7cQqtS27ZU?$*?vM?3pD>a?G}W>nM@oIUk0k7e45^tzIzF&oO!TYEQ}F@tfm zf1{1|P^HBzc(DSZRHaa5`x&|r$L{%X-nn3l34TTQ%)QE_ZGI@bxic2kFey*x=C;9j zCITER!VxqCAo@}1Wm61|2qHO0y`whd;MHRG?#CagL3|YH!am59MciUjs;+iozA}6muoOz1GY8R&GAbQ)0R_-Y z8*N;psF_}w4CIIVrm_6%P83C`GS{o0#rg)mS!3)aJQ@N_{eD?VLQW2uV%1Y06+qo> z7G??~#gBvZ(@d&>$U#l&+-!wv7u-{y1?U;^DwK`}+M zV(x$+)TQ_2ciPZOi#v7H_3pND9d93pOc8X!(BD9AW%cravkBsVhHM$~q$Exgi6-Aj z&WPW2^YbpAb6up>yty<|CtCWX#V)vmumuR=YZbKX@-p-25lI;wFXb=bAghnH^rhEt$t$)e^#UBU+PkDJ5yh9iPfKU z&AY6y)sLA=#_Em)E_MXYpaZgOkS%FbKUw8(-16Ij`Pa3Gh^ZG2&BQDYVt<&h4{OnhcE489 zI)kW?B)6a?0=bn3EnaR|)Zdp#f1$S=n0#e?d-XD@&rMYYSKsmzFHKnyz51A}S3X=| zIBd9~iGXwm%m8xemG6}NoL|(b)sI_MVUnC3!Ch8;XfsbPS)j#68-SVGb24M2nUI4d zj{#JB1$Rf1GGC;*#W7OyqqEA(A^A7F^QZZjwFuqg$=qMXopK!aW8}J5OK$XqWb~y! z#-dX|en1a=GG2T-JhA@1s>-TLRIM^0mw>5bqZy^$Y@&oNMTt!#d`JN#jq4m=KCs~O z7p3{ZF+z-#qY{oC&heZ2Wt5kRcjyLZRn3*r%Zgj+cmn~D7;G8&eaU zmj3+SjW!`HGT*Hh-xw{VI*ctxYuDKO_KS#5el`EH7IAT{`}yMf$@p@Zhuj!~`pjiS z?^3UJaZx6T>;N~g51@r@ZzU<7j6SLB^SfJ{67!o#=9#wFXHZ2V3N$n(sqj`rEX#iE z3wvGSmf!wi{$(u&H|R-Upf<9*&H0n4530U_nVURql*wvsWvHj+nuLkF5(_dgRI`fp zCWL1n8D3g^?ZqaJ?d|KxJTzt|1E%;Bk!Xq|BkFjvvLX;-)a^&gEcKap7cx%&1EU+F zGlPlaAZ@v0iX%Xn+4DgaDW`V%=E-><36S8l_p;f|tt6~Az8lW3>}1r)YQ9mTomdhc zp46084hVW|(Na3H46mD~Y)BGc(e@$~0+@I7tq zA`dtaFj)BIJ4b-Sdt4~#l-Nw4Z{js)Deo&Hf`#Xp=@!|UXr5;g>tRqU(9^>UfkDPRW0Pa!BhC@-hCnWhZv-ugq{d`D`G6?r_f9?} zOAjHQ8y1wDMHIB`*UT*k5(z~TQl6O5qS5DOyS+2ZplyxJ4)bV{#C)#rhu}L2FdQj6 z)kP4r1l2jgzzHutA}LzBTsqeP-`~h5g;@C2FY49;EpsGVqD?~eGF1<>Y~~*B^}Era zgynv`itKW=bLImw6K&u~kiM@koTjUPr9Zz(a`rc>2z2BDTBvwALh75WSTVrwANL^j z^K}a@DqNz3&gaQIgt&*73pOFr5}tu|1JGZ}P1yqz)hHC?o{R;|@Sr=;-P&P2n2yx^ z%t^bRQvue4&Qm41l~FPk#%tFdj%8slr&rFKh{!^~#Pr6y3jKr#5=hPL>2iKhkiMqYp4^p@-%*_tu*l}C zD^mo5w0PU}@>NPNx*S?4HD<|&3yzivyI59TS7{sF|a+-sF;X{T{<|dfQT44$zB?rS~rjs~=#jLm1*Z%MX|8 z)INpQh9Gy4moknVSk;z;l27gZA$ug}RS}w9O;7HHopsKftFJqPx_w|vKcXZ3n;eC5 zL)AIX4q;Fgum@bcfmpS22|4v9vEj(TLTd{5)kmpUkC1<_nJv}1*^v^mnGiSRD4V&& z?G?Bln{Ej?SeS-QuoC2~s`^^m!e~FawwR%D#$i&+zy`=L@k>t{kVuo!@^#i8cDY&b z%5vnM$Hv2fD)Wy?PfGTAX_Y-I_F#LG&eYmlUl~9+(}uWsKVh1xO1d=#7Q$zJ%L6hh z@_^n1EX=+3W#$@J6+1|M<-?KrS0om}YC`(D0q>nW6V5uqxH7UQsHWP3*|{R0hZ1MX zVs_sel9>r@<$YDPr$ZMdFAM4h(|_t;!|&Ucj2)ki(yO~ zI5cPjVH!mA29>YVYB;*lD+B{Mr@=dE%dPbJ#~j;mTe~v%{a1#P_c2Fd&k-Llez`BA zB!|sWISI-Ot^pGJeJ1`m*_KVWDpqWGYGA=dh1)nY*Oa;UTpX#%z!|bUC}{V;<>)SW z|IZF@`&-hvLQo%kU7Q8ksBVm0A@P9BI0y>&AsOMk(l@cLiwra!#k#%`bYzumC9FS2 z%6XA=$MyLSyTtY0d-!qXL_`um+HhP0=w&ReY#QV996Qi@CMYr_V}S`WNCblSHLcs0 zOZIj7#QHAW-8g5L7!g=FGY)mPngkG{00w z3@7)utHoQauF8>0LhDH~Po>h)G0{6grHV+xy^XnLFy%Un3O{|~@*)%7Jl8VK7G$6( z41_R^%yWjYz#dp(JNJg-KVIJ1pIW^+M20fX(bb)|}Oa{&ww&SDx8T?=xtO}zGrQKmD1p_Jgska2q5 zttMJ>qzlRh>rNVA{kW6#&2<+Zew$i5N6WwmLlc|+e(x+J4DI^QDHN8-ts2t367&R^ z@84jtN97hc$tXSC7dYc6U?xc}hPWt6!Many3YNfE#17Cgy!>yC1J_wnxYenaxN4oF z9Z3>co1esyL;9d^0+e{!#X$CV=fU1&|M`~6^226=i(Tma6d(+P%9FZ7OtH1P()})3 zkHFCaSWi+aY?q?T89;u%>3U0A%pEP8;w&==2%KY+4GuAvT6VOuqBy7SRChnb2_q%B z;*Ff`BNI@K7ArN@wrUO8)d0R%^KeMaHw3Q!3RCTx3 z4$!M^)b=67z|P8n2R>bKy(NX;4@P-==p-lIB`wC$(E4XoG}~lgiCw15gQey*vH*bK zZ{c*5g>XQwk`}DIY)Z9d=TPu56ZxeuMjRe~`EX@)Y_!gG!{zzX$^WyJ2O;}|c1*11 zkW3)JwdD8YcX$=ynhAJxP1QROFeiar?1J0^nGz($h&k7?g=}MtR51L?Wi|@24f0u+ zd^B$|Klp@QNYNI3PTEEl4n`x0n}VH2Y}?U2);B?--rV0`_?9`Nz#j>Q2%V?=@vG|+=01yj=^)qjqo*=h9x^n5?jmH0 zIQPVvgG=BYwIw2PBS*jnGT>`?IVi~~K>tYD6zbgB@;CBKPniWF5LON(866#Q%aG~1 z3kth4n}38pcC;T(v7PB$8sA+`gYV-$4?NRq0;Ot(7TcPKy?~kHPVNpA_e%sGXQpHX zUe#d&Zz-lw#PXM2FA8!`v*>LnMMp$@di!-(6n3{^6lBgdMTo&Lhy6Tbml^-e7-{lO zQi>rfr)$ygJ5z@)cpMc#zlV%X^|em)ft8jh_BSSJkzyew9Fa+i6<@UQ@cWjrZwKBa zVZdiMRiX3AQwOb`!PyU(BS0##w~{?Pq$pb)zA}^x_Ew^=Gns$&&c_@Z9Ui6&;f-V6 z^r!BKcrgM&-w|3pLCENw2mWEG{JLujQ=gNM(E%|7m0Q`O)^&mr z7hXBqL7+mdFCghn=EOd*&&anP@r@+6x@4FdB{X-tgt(6rlUcE^@u(i1Yu88D)_jCM zi)fqUl^ESjegmqgCoXcmvH$(fegrKfU4k5o>fYTT`SJDaMiv;vN?LY8U`=iHZkZ}e z2#DPtXcZ+W5z9FxHc**G@+~0fS>;)eufG10!k^qgSn)mpkzlE)Q?@jg-tsEkdDrd8c=d4Y7K_Jps@*L5wQNQN0gZ77IY_C#*2DaTF* z>^GrcqXD%k6XPr_B;B-75}28ugBB}COV2p^oFo4~W#0l9Q`$fNoHNs8blG-T>0&oD z-rUAin@sHPxb8}Nb61((krYK}YGxC=CllPne4dU(%gByJ>ni>0q zgAYe~4GC?9QmK~3IinJ4=~|kc`fA$W;Pj8PTzr`oqBeevG*c3FjcTBuTr?e@CeZ^o zkFLTuOQt(vuZWccm=Cr&3ZFmHNpAD(aAUGX3=>1Kj1L@_Elr2GX&ye9*)~dWH2wMS ztnZ&ci*5k{k*_-r8E*!35531T{24`OZet{lVy3Dvt)uk53%$4QmI-AMeRG=_>cA+t zwEWU$b0q!PT*&nMkYe=Sv%fRHe`udf!qQz2nKXwnEi$1e=m*hzGCgkikv9gzkrT%T zf_>r#cw&Z6$AN#c{}JOsm~CYv9ym@H5X;yUxD(tb>>LY37>|GdocDLw{Nstfb7SYf z8Ge|7zPSPPU0UXm@*3u$T>U}6!K0kS+)mG@b$bWBryJf_nRir7ugNkO3W<1g@GHU< zHZ-<$4TQ+A_ly4qoqzt2S9(*ivJG$Mp6qIHW2UVZEHL&`;Uh3S_X$7n1)p@`Q{DK5 zDd~(|?ob`W=e+)Ee5z;mXYLT`M3L zr1fIiRC6Bq61t7Sc+#6dir;(oKg%EV|M7sW?r2Z%$mO2wnsh-M<;hWuqTm~|M^4~p zx96T5c-T0+3}4T|mKk2o^uiQCUN|{DVIHDR`)`Q!qw(W! z^1(bnM!`B^>Z?_q_`GJ6!&0R>+(X;R#3Gah~q6 z#$)7h8F6x?r-5!5!I$Fk4&oLkrga3P-O5~^IEiPTxv4*{%sXd+GuHB@o1sYi*k+TM zNmSUe7;D0T``H2Q-y-zS&}Opmp3;XNE>kt7fF88QuzNgiRiGbhh(}&J?XPeAeRe-F-ED^t?Dsvbze`$N@G*;rmNn(#2iMdqJw)6NmUvGbOhxq3hSI7Qs5KmV8$eohU(Zah7F|Lg}4*N^p|qnRqF(-8X7 z>+Sjd={l#fS&Wab@WB=BtMOAU>3GR(j(jh7`x(wgpixL|H{p?R~{u)IGPV;JTrd6DS;pONAD{C6RiJf@$O@>nv*fT`>?B$a^au&|_lgvD|p5dveOzMt^P3|` z-tqeX_nE7@!wb-^kNWKEv3vKgz#oN*}vz@eV4VC66ItI*p06pe&_;Cs}^SW2*8KTw0KoE^twyD@!iX{uYlu!(@ zh;YKxd^XTDP`Bh`nYs9Sg_`SY2q%pBH zqaw)`EYid-4fZg8085m9nFGg^;sU zv^;^6@C!h3NcUnC;{w0}n8o^%hWerkbYVh=5OT7m7uUMH2&~2s%~JlwYJGkIU&a5nu-~b(#i&=-^DDWel+4$SW1@i-HA|QuhlTijFd8bGkeHThY|X{+m^Aj zeD}UX59hEMm{c=_Vxy8!V4)15@YQak`X7k(NR_q%4XDQ@x%D|uV3`Ji^FY|%F~5IT zcNsFcNfGr|xl3OJNI7i?Xr^I#(l6G}7)d&;fjs(3^X=8hfkxC|F|hW> zj78D%r0JYUXACrQ^;q%xh~VwzrX$)sC7Us!z%31qhu8+_#U^~lG@Ah@>k)13ef-W$ z)f=l>sXz$8|4Zcpt)a`Jx`goF1XhPa+WlGViHwHLyUFnBO~LlV%Q2)H`G&nPvm8qg zp=C=?wjwj`3%)M~H0G<`g&r)2ag$rd%FVLdr-ARq5sY4rXrRNMrt72NcWE&&TGH?A z&3CQ017Rb;#9r=Z9rkSqbpR^hJi2l+P!UGqj7mq+IalJFtKrBZ*@kJQ4T}!euK zyd1lauFR(kxvs8@erNGN=&3%-C1TbsrD;9eiQ`RA-h@MPx0%)>S`4HU&a_B;r(!xr ztWUJU_5jKTl!B6YL}J_O&P$k>+?80!5UnEQK!#E)A0`&`4Xne!2QiegBIV^cFRJdd zSXW9`PX`6|VdKCU!UTU6KI74QF%T*+OmIad*#auUr_-d~gm&QuOWA9=V(?;#Xbvbn z&2gHAeS#r;0&vrqPL^X|iKBA&YDN!E3suH+L3vK0$jkS9P`}AgAoTOW$n<#uH0;5b z(i-yE$)uM`bOjeI2#5wCQ%^+nM~e;kmpc+lvazzfxgJ-Hbwp#aqDx15q{{laxpzw| z<3x-NnR^m&n$Pw@eO}XnHjPsOjwaeam6OpwrN@*mF2p$0np?vmmx;&cGFUII zP$e>H9nC-`tuH-_&19DlQqGTbBDL^q{boI$MgceyeV_0ESZ=A7Y|X_kl$J8HBqkFp zO}DKXUDUmF4H`6r6LsKhxxJS3(QivdEEl|HUvcv&T0V`8cL7@Ib?DTFwvsLh0pg&- zo)&jH=`3$p!{7GVFIb zL0HrK2#Jq?X1n8JpuVZRcS&kAK}JTHy&xd#u!qL9+0!{k$%}2M6mwm&;a|vs-OFLI z6BtFeBP|xUYqyJgq}-k4(O5FctjUAUuG~4%GK{V2Xm%i_*oh6JdUKMdx}2f9Cv@~= zdYF}r#QA_^Br;iY@QVY_h5f<%I*BOOty7fE9w{gfyB9OrDzF~BDvrj9y_|MW{%9?w zQz1T0dL!~bkXzL!q7$ zbg23dbe)3OraB&5Ma{!TPOgdj z{()9gYC|cm?@cIvE#(MftY6q|Qw%E@E_j$RT-fX8H2AmyzL5*p3LHctJUGVH?>$V&C(_s4Ib;~d$*`J)+GuRk~wm>@5S(*Yug~@ z1_R*?xU#+|I*9G(|bC0TGkYN{U|X_CD>ft}JI z_W2UNsXc{pW)N_qvk5-Za2gFmaK;rA+ha1HefrjzHTU)Hev+iX788HOwjvkK zMYHtUS=c1@>v)@Yi%BV7xIgtDHF6}Q)jQL|My?}ZUF#^8HMfXNx@B- zE)henz|U=TSEOq%063ZeNU=aV*r7^Ne9z)#p6^~2S~ad8i>Aj3Y( z1FHy4&H93{NR8P!V5C)&5ENqOK||Y?hL|)tM7jD>@O;Y{PFh`SJXGyPW?z%CEccwt-nFvk}^~3oe zvPq!7OS1*%E?NyIue`hb^Pwf#YjG@fi}tJ+8jU1L>aRlVJ+M0aY!Ev++tiIB=Qv9f zKio*?3$`Vkvp6W>jEgG<&k?>m7Bc7|ZYpD9%qtHQxc2z{MOpG*86IU z6`MAZ`^X65%`N57UCn2yd8nz;^P~6m7`AC)ku=YG|#(^&;g!X@MFglU2 zsEisunH=al(_8x9guxWX)e|bBtJOdh+3tbHQ^}V>Hd^#k;C~?1zr8gB~<}>UY zf;SoJ!#rzOoXwJ+rwx0?UXh)fh888hRk?GqpK5|#`5d;%|s z8yzbE=0VNKyNbWCKmI(`vDpeUkB@^R-i$%k(I>kW9Psol7)0iJcSV%~v>>ba?A6gT ze5M?Ec6@Z!_JjT1^(G8dsfp4w7d9&tl1)tq507**|2}!p!YJp8ThhUlGicjB z2OKz(2jS25Pbtal$iC|U#ai?gD=d{nI{6ublL)g5%|pf34!6^Ay7vx9?DWpM^-V=; zgF%rJ=?MwK$o;|7lRT774cQ?167v#H1WS}ne1ijFMoNAh;Z?jC0CjA`A({4L8oaO4 zz218V-WH0YCbOw(qo8xmm$j59@?@v4mhBYK!~iL=j?}pXRvI;Zsapy~?(@w6PI29Y zP&-6l(si+IOSNrzFCd@3J!y>ZR#7lJvZ?5xp-Cg>e&I7c(UX^a3R6<$Wd4-nU{f+c z$iC2m%-Q6f%1~efxsXqp3Zt(@&5^iL?|hZVh@-x-v`YtOE^CM2qcE4Lf{sCP6H{8#fm|VJyjQa zTfNxdrK{ylS!o_ohPuzCI4bOSvMESC+c3}e84ufmj=3!j5~VDGH;a=ycCB(KE?re#*0|Tc@^0U>IgLCFE!l z5mTe_GfZY?$?@~XCq2djA$@Q*($YVl>Y{_ty?5wsX3bOFE{tlbO7Fa1h)j?el%-6X z7gEIg4%x&gpIx&A z;chosN>JS((qEZ?(8=5sK$hhK)+j^uAFk6uoWLcSn`&$>nRtZyA0R38ui zt-s8t5IJHx#iMrd8kW4g$+E)k7Y+IX4cdMJIpsQ95y>nOuLFc#?*K$VDJg~cy93Rc zZn6cI0&cPzsJ9^S?drl)TB}Zb8x$jh@fpS5DO&Dw?z(Om+=v8p7Ud(8(KDsr4O()9 zaAk>XN-US@v0K7q2()8EeUL9*y>Te?4uwLTyo!9aytV49_!D^dh#1bN_@4Y?DAmBk z#Wp4H%ka)X|4b-UNMG>vrp`K3=Z3*lB95w(ScOynlOPEbP#pN!Pj3^!i*GNORdxES zL%R>0qW8KS_ei;Ow|5c22_nYq+>83pn~S$x3CB%KCZ}!_+TWT`&pv{yB7xRTWiqd8 z=qX}ddz%85UvouFbKU8113!m8_TmL)_ksX|;PZoQ`8!bmqhgn7;2T{z5g`sTM%bhe zBq?gt|JWFnak+QU0O?{uR$bxeOUR26+xA4&E9Bt|=JfMrOgcg2groA;U$k z38HUBsT8yK!pU<&zMdaQPcVt$BxKkC!CAEdWb+$+0vk83Gwa)=05Pfs+lO<6J&h&?}$F9J%6!X6DGJjeRDkQ=+ zohLq-UfI0~_})9Nig^kOs@6Bv6s-C80y-oD1>i>KV+QSp5{ZK=4Uj8VK;ZyjkZt%vAdk5GsMcXCSc_ip13 zY0ZlVA@b4!75-?w*qIaLx=#cm0B=MmIJib18MXJsUjvwKQmbzFYpuI@JR?$YU5HGo zA&s%Qspan%gz-w#ydt3xV+pA-$5u?CLao|Od0ArD1ZU3B)Z`mF%aGJ!YzLsIVZP;v z2t1Y<6!x*tUxDInR%E>nNZUB%5BK%f%fP`~uUb`)NUu|ffyKXNhc;2{{>1k~n)kM# zD@XMO4uPDAnfpYp`;?%x*dU;;!1*mgV+L-SH)F=uh15GiA;HV4^;O}9KR(I2dLM7^ zYC!CuxZJt**@^n2Lni%#^T^O4r$q{{Eu_V8{ENY{aUqVEQd2MKqVHp04ml{HIAGML z%ACV#@033Zf6<&#QSjBDnJtp@6yBo*@1}&(LlEZT8+2#c(Mh3Ck;Tvl=krgc3>EkL z-WF$B_QlB~0;PK25~CvEATD{@r3WU}9n@Q3*sAd6te077n%A$}r`IUykI4`ixaa=S zcFI|!#}2pLb&gWZI~aN+bksmd+=K33|MvvfgnF-HpsD!6Em0gUGO#X(`Bru{9lYzt z8sDVmxFjHL;_FXh?kni6ajX|J_fwvULz6!kJt7Vb#30o3(Wu~Ir6bP2fP6g=ljAL| zkJd{)jWwV}*x2PNX2o|LRg*sMilUUt*RMbMG`@*}Vs=J{x5#_%J7z#IbG902;-!~fZJ$Z5ZO>s8q6y7aJ}N{HgP zQ192PiRxW)-a)9F3qxNt)!csGoKeKU*N7-=kBNz(EANZ>Y#%gi`((k;v`J5tdO#jD zR{5bkf-a4xbPHAUuIArOlq9VnUmexn^x}o49@$XVV$kv3H2(D72fe2=(rMX-XCFp* zCEpBoJrE%ShoTqb4G^;DL__e3dTVjsO+p@3+gj&s_+w*1k(A?r#sd2#sall06R~|@ zg`ofq{L&2eBYWL5*TK6!7s`Mw_`AfL&yw!_BAi(APDx(H@vr_YYj*&lK=4J@AwuMM zLkbidzsuVc5YgZ*3KuFPEyscm!N%B-}B@?WAv%y_kBj(C&!1nHBcjK1#rernEv2>sOL2G@kHy;lBTt<5WSB3lX{ zRK(N;{8{v3Fy$y-pknzUItiHRFdy{R!FD95q0Jz4V2*yCUZmXT66|b`U0G`PhU;H( zoLsE(6ntN$2rGQiT6e!3Dz))Vdm_$0K$R4&C;j#!6)AbL;p#E45@LV@;Z(oB!Fd2T z*>!~FQX#mp?v?%mf8NzZ6nwh1g95*fAiFC{mhlyzygW}>4`8_=!!Z86Q z$~-&3Hib$r*FC~X4Zl^`A(F#<{LgmJXkxW+y+0&7?g* z&u6`~yqlt%9jQ8O`lUDq$MtT$d)Jd|`BRP|llw6#ciPimD_*=F8Mo_s>Z=|7+%oSj zKgr1jU)0N25UCVjbSzpQJpBFbLM5*QybN2_!*8p1Jk6AMWG|$N0rk0SV(P+ci_#vW_~uk-b{`p$r5TRibGD^tJAyFPaQHzQX~jrsoI3O5z9UfQc=+59OvFZJ|SkQ?0}X%ad?3Un;trGi zaqBXz{QzG;pueF8X>Y2P4d4A;G5J79WSl(kat{_Zq~{{aq?%<15zZ{zRES0(Pg#;) zl#_UQDMVT*(vq5N~D+)3)cmcMu5{Z6>pW6kkBy4WLje{$| zXD~;9SSZ#~83>(@DcDVe*e#bf*pxtAK<16_hC(=b(qK4^h1bP~%FYV#NM1jLZMn8I z@>v3rIp0<@LY?C_Ig^&RvD-m#Ne9FvUJJg^;QD?X7QCsjW2*xu<*ha<=0(nNO2jdr z$Q!q|QP9>|l=jJ|J8yaXpdWgw1EG6|^Y1i&S32LeS4$U$;YEy|aQ2lx*ijegY$>h( za4n>6o__^{^hxxjPu>?kvp&~or>T4$+1%7De5!We6YG1Fp_?0p>^{B{PjQm$rJ`R70g)Z(z2(C~}eGt~ikwOVdFtuO8AC8JW1o-_TTa=upAnTTc2J4v4jIcWhLyy2uS=_i(NTNB6ZU|Wk+fSSE=`2rZmEMN5mt2c(G3Xy7G9p>iy+* z1u=#06}KNeIV8O1EwviRTA1=skhe@S&t2S0dvO|Ke`!=ifj-bRQ5P~2q#rDK`_tG0{Rz}^K8A*iq$OJMe z&|hy^0C@Ox^J&_83noolAXyYsuwoL@WY1YOcMaT&)tZr;pQn zJ%#^}jA%f*18=eo1LBIiBfNxizk5KxHz~NSGwWb`)tAq1$^v;o?pn*=GX*C?D0#poSRU1{>n03x7h9i8Y;p=W7@Ga-j%NLIJ@Hz^F1tsFO8${@OC96jUw=%)P$!j zQ8ww*ZKd$W6DVS5_n55)4f(b6TB!%wV$c|Bf0H*&`u$Am;P@Y**1xA7)EK@q>WH9V zCVvocpH223h`_;tlvpC1gF)%8bKR4=H3FFmjl45Tghzp9c!F#0;U&K4!XMMflD8H% z`!_XKc~25GK!(W6NeC0W9aCG+zjt(2<}^u*YtZ~-$ZBYW6EWx{1<=4Pa3Z+g5wEU0 z$At_R*_4DV(ehHY_7TK(DO+U}RwCV=hPab^`6CUoc*#4}XmVep$!wQsp1+D-CJJ;- z(2Ffr*xrtse$Q=1sKIym!WV2Sirhr`4D;pZ;%poWLrduZ5hQ@l<|VbuI~k$S+j#|(GiLjl9bLWLp~AD8Bq-jXZDQW^lMrJ~YG__A z{Lh49*S#}25jG_=5Z7C3DMH2B3^bq#{^L=-f#FL=b=%h3mYd}$6yTk{QXl&COT8?0 zo6uq8(u^6;4V+BdhbDQE+0z(h^dM)h29@kqlfj#<_6_se?!xOpeEZ^~`fgxYADQ-; z?iVCytc_FVWFn1w_)Fm9`u4BB{%n$$Xt$Ji_Kr{J?aZ;|p|>+undIgz1V=}x5~kT! ziIXKz0YYg^O1bmck3b`Lm5h+?ojgv6?2FG{cw|1yXw-@LK)tV{*B~P6;lyL6Vza#a zn%htw6kbSmc22b^VI|86#lhJt)Q6*{E~FMXee45u`~qJ`x2(<1Crzr6wapTvZ z`oWuB%u5_gX6caWMBdE~%GuZ{fv`910}ayJacfP|TvdWn+(hyEW$mx8qC;#hdr|d- zoX9jg`+Q6O*1WMh(UC2z#mJWYI77x)H_jZZ(jc<}A^5A^t7-`_xe-%ETt{Fhp_?^Y zPb3>PlW=-7_Xcwn*HmO0h&q21he^SuVh4FWuZ>qt0 zHM|S!LM*en601_cP*R~y)tN%vj z9$sb$ZTD|4TyvwoVS5?qDKZn>iTC^XPK`MK1ZUf=S49`U5ZxarYp%QKgG|&(3--6T z;#3;*xR^VW>evdF5iHh=>%m=<^OQ{Vemg~AuBWwssX#f0ovfEXXuVyyreOBUM^APw zP2Fn6XCEoeJ-T2G@AqijPe8+AB2$<}A{E%4wP-VSb9p1c1v9X{q>{7$^Nsy_7Y&4#> zx#N%JQ?9Q*N_+8DU9SBVEB2m@aT#|xc^9;T2WJDW1t)@P6$rT$Z+FDaj?Ky>k$H(t z$>2=^QucA7X)4zR!0voIv&8MmF|XR!CPp@tBT0N^^HIgd_09eb9j`iyi-puOX(A2V zZf@q`D?c4tqo{c;ZWtNIPF62DE;!WgV-fZxCs%#rq3#~Ol2s2P?Wf)CYg6LP5^4S#9ckM9G*v)rn8XBjte8l>)5h~smLnIXL1yQHReVa7t(PiYNJ$N#akngZv!20OhpW7S% zxV1tC-td9fu?u3s>5I3;k+nzy9>M zud41IRTjIBJ@s8dT(-rMfZ8@SOCsasMJ35bPp`&$E<>Ip%$pj3YKLO;r^8Vo;(Gzz znCY|LR5nbunc>Pgq`odjlAVznNr58kH+9u}rh+eT#Ieh64_&otM)LKgU<`3DaQ>_Mrl>rBY z6#K&EIhXN1JNHc+$M9+5J!Fl*iGo>qH3~&htKrA!=w+rtn_DxM9~rpgR3llM>+|Zf zL;63H3@^8d)|rRakF!D+ORgn<@@Lu#yC$W?5d4eR^R2l!TG?v}f$P-WGa~pvJ)l70 zJEVyn`1019KAi4`FMK$WGO7D?lMe=;bEK{L^z4GHuP1&xra{CFc8|z2`67Kac%S9> zKm1SWPepYFFIlMl*&I3EptY28XRad}Oobs1 z_2y6c#il}Xk+AG|Dn7_KFs3gObOVpIX4_h{W(dL}2rme)sajp5`QfLZ^dm^$-TNkb z&spwWId$InyD8|zSIe$W{Nw9_a+zpX=#Pm8_8%M;OmPlrKvr>koQKxPBXyF&`_vFwH^o~AlFC?wKWBbQV1|-`o+(h z(5M@9^7Ejxm%l0h^5Vp6zkOPF&wR#k+kFY-$?Cmk>C5bveL3smzY8;FxASYW-0$sN zNeh9yh4LKy&FL-<$Y>6L5kfKFR|IrZ5O|)66mh|WD>iw!ut^>%DTrCK`hLfT3qJ|@ zSH7$pbOsGN<#8k--`Dlkt%0pC|7@77D-O;n8I(CK&LV8gX1n6i>tBDe`gX<%&E2pJ z+aoQwP8k5CCRu%m-JhjYKlvL|Arfu>oZ-P+R=}8{#p80o2i%_;DzCz!%`J- z2>Dqb9{KF|c5cgWU(cJGdZEH2b?PeZvH2rDHl0`$c(=Ogg@+(xVTvK;`Lz?36y!E| zgWO#FIKuu?>Sm>DLb4cNXfsWH^E8jSk`mDVNgEt?tg8rJMmgS<}gL)p#sLYiwo3FuD zFZ;5Vw@sKDJ|n_hEW^$a3JsiEVL#aWMQ>i3w57OWxzxSY3Q?)*`wd40m zKh}S-1n=db+#i4c)bI62F%Lw_U11)NBul@eY;rx9Mm8w)FP|vlZ;t!Vza8Lhh2M;-p82>C-?BIjgzkVos{@d67Qx7H|w4ZhA?%rgw{8ElG;6nJT=81 zNfbpX_bPKM^E@6tPszntc#T1(F5}GhKr{ed_~s_7UzZxbr3Pf@q|S4o2Of}__^UGG zE289;zvUe>G;~aQ_|u-W;Gcu+wJQ@$>LwO_#=3R->$+cd2M-^=&aNz>ArrCEw&v+i zdyg(sZ0KCh$t#SkRfjEXYxcVpmewT?-pyI5dv6pw6FN(2JvVx@6|!&P9a?Ks(i;=z zo)DuE?%RM-nVVV`mgYTZm$>K1f4yMutPD;~<^_#G=+ls!hfbe=87UJb=fu^n+O;NS z6FOlL`GcfG(;z3JDn4;9Y+s~^s_?$!S4n|Nl1rt){s~LAF-~!?cq!tGsuLea;GMZQ zrNJOzcSVIYBy<1SR=Fmswyf#D2cI;g?s2=iXPoeCs}uPo;Op4y1(m<0&2Wv*S+@Pc zeS57L%Dy9i6t?6+)x=!Y$Imsjosc$XR;>!n(gF@d9O*k#w&j5L&^X#If@!;egs{&v z8{=)jfCj9T7LOXSeB8$SpVLSVR>^b2>ps#y*=4@+`eI9|W~!Ll@b9#*w$=S&8S%px z5%E(*@j)zcP}u0GvP@C4m~6Te7E{})P(%!qS{DO=0^i^)21cvSQaIQB=LPOia!zd!_sB(}ufe zgNlRo{P)Y2O6Q}I1#aqw@V%66)a)wJ-#OwyEK(+W1o8XdSq`#mvueP8t#Ss1Jnh&FAhK!YpPHE=nZlC=1XOCKc z`KtE%q^D)6t9(zLKef0rdrGTLGkAYwLpX&()z%XCLPKqQ+sm@da(pUZOpN*N{EacG zKf5M?XLe0k3KB?cz^RJ9+d8`%R!!O_Or)?~z3D69@~n-8&)73230 z{d~#FC%;z~{kQIgWyr^~w0FD9OYdHDKDa$H&J>?xv6E$pKXoJ~H6lQ%>*dreI3%dFigjd^O?A?&BfB~yGM z&xYCvdq`&l6*#R1%w|o`b;-i(X)*At)tGz}3Gscl#%|&BcK_Pk@cYkRT@ck@i7%qu5Y=A3Rg_aY0NSU{E-2NsSzXA2A4V*X=(r zffE4<(j_77k8Daxy@#Abj0P<3X^AE~Kg9GidPugIU05Z!J~?lVq-sX~vW72TNw-b1 z3_E`$;7+Mu#eeJ`{qgPjyMdw{SxM+{C75!*f$*Kyq?Kdvxpr7gq1)}%)n++Lgs)o3 z_)r_hxh6o2aZS9kP5YDNUmLjC*p;L_<>K z&l}q8pYFf0r%aK)C{te*w(i&V!=1nFj_3$l=O$PJ9AH|iLLc83gf_=C7lx&)1NJSF zG7gc?UD9$u6h!+1XL33FoR|!dT8fBGsPBPcz!N1_UmsfJ1`Y25DK;tKK5ELfsvQbLbX=iyH+DREqQn{1nmuxtv;9KYp}SjmK;>K zRPH?U!;jHF9kl$?zA7>*XOYZ*!$+UhzOclx$<3;MA>&NVPL`g05+0M@Spom~*Jf(E zbbw(%tj?wc!~iw2=|ncJ6053W-}~XiJw06oU#_N@biN z2uXFqK*USML6KjKn)>%b!0h3KA()URA;ti!faGQu1`C@e1z6hO32^_HTWzu;zP0>G zhtn@HU(!iE4C z1dG|nCn88vio0hr;n%oOd+dRb-39tE4V-|jzA+~P<5{vo!;zAts zVu;GT4o(mxYG@s>qc?maW?L#fw8Tz|6@Y9%lnehiO13u1C3*Md?yGKXzIvr!L_&l7 z_=3u|L{X~l_|WeoWY$vanN9^bzFRM_S+hao9I2~zFDg_N9ejST+B#ecp+C`5+JQHu zOogrq%Qjq6QaBd*61v{d$AwzHj~$Q^I-Y^@%%mDg)d=nETUtQP%S{ z3V)5|viJAg1lzk>O|}L9GGO0aoIu|j?(YBO;Wb@Ds&t>A_&_1e*OsK7F4X^bb`kCadj^-Io_WyO)utd{yf` zVe=u=iR#@|{*v=shmRM{I3n7a&B;sho9^x5NFlS;yb!;-59c?ik9U zVjp0J*jYhY)^tXKQCJFY`0~7MUr&Hytu{T`R)4me3#N!3^}?y9@2Q&=DWujLIsuEL zp@za|l}Fm{Px{Kz{;8RzRZ4domg#vb`3fp%=Lv8>29B(xbr+sBq-aqYjw-bTQ|6D2r0i z2(4xYRheaTa@2#uw}~I*7pPmpcYpL*X{oTmMJBo1q^{g8=PiC_chmk_Bj=RdtH!JB zIDe4C2Xn9LQfkk24qhc{o@ys}O<&qL&;kkpeuvO~xYjiRYF4&(gwJ4#ecXtHU9(zN zLPzG6X#qRXBU&CH5M}_BwbZOAMy262KB%lZb60Ze`pzrYQ|!-*40q)#*u&%FpY9H9 zVfmHjxXw>3`~GIAioASdL_x-tb5{bFs-4faRulvjPL!+yugr-ceJAVe1yikTN^tS! zj0bASxKs7)a}LO)QuC_n9NReo1#F@St?62t4;D&hZUE%HsPas<;Bw3OjC_sVf(JLA z{TTf!NR})*J-M>V`nUvuVVS#@^{S`5q>IUk?VYA z>8O5rnl+Y>w`WXEyJx=2t}gtK^}lG2fSXq0D`byrD0&~kUVH6T>^HcWvmA1c5Cmdp zuu;swr*~9|9L99X_OxmuQ)XaAx~U#yJ!rM9*7*MSy>D-Ax14L=c5ignZ08;E{2Mw6 z73SL<92G1$;T+|S6y7)wlhb`5)orm^_JL9p5kiG zh0=+UEZfwc3I=9y)Gu!^4r3UF18$c{pjgVrj>=l9u{hZpQ>yqt6ZG@1lYZ~8l>N)i zz$eU>LXyH#e6mVk;V!m080^2ej&<%)fHrvSk$}}J%vUAWsyo~3((?rmwUDmye&F3G zw$~P8Ulr`&jL1b3(PLkT){q;dc`R2^P^B7Y%h(AS1TYs+<@vT)wI%f+OWz!s-uU>@ z&p#LMzd1FfEy>~IeRD-SsyS`z@2BOsiOn0LQfpQq4nIHc!h>@2Rr}>tYd-&a28Ir9 zqT4W7N>i74O2n^cA0H%^Vu@G2j;Cio&|R*aYewIR)qsHAb?c{} ziue8;B$JdM<`2~gwC=LX`qjxN?b|N7o(!HfpY52j!oF+;XFT6d^J4ucpU45UO$j-7 z$b5T{2VA;tBUdaf(sV4py)IqlPrq#WoQ--A|3jYD+=uM8AKYO=+8sa$Y< zyOsvo5vD@00`59+Ni3!3hihrT$RnyNLp3?*OBoyEG0|A!7I>b9W{6&8I8*=X z&+zD}2U$wZz*wDGw#CDj=R<=VowHH#y~F*SRQzXtxhy**$*ZY)-a4y5XzCW*rDy(*vJg0G$MuszOnW!B_&Ka&J zozFNSw$65tt!zjB38JhVWyZ^22LQ1wXM{Iqf_?ynVkxmgi6}7T13hp}y*0!<6`t0% zOx1PH3e^zV8c*RN0*xAXh5xA5W!F08M_gQ+Adn>fh+!G-<)$lQuvomek_Zk|V>DRh3tR6sO? z1wUo8BF(bH_va|&&v)k4edd1s3F#S;fNaW9<=K{NS-~gJph1YR+OYs(Dy^5U|KmTN ztva?ASqA0Am(W2Sk}Ev?NJLGLKkDka=aoe@-^Fj(XDKVjVm0*|I=#1+dXOy(%M4k$ zW6PiXDD0Prr_>V}|B6n_8BaJdJ?EwqvvC^O)chLAvnk=-oVDxw1{RK5+G0*1@eN|7 zeRDQ7q6-=!Q2%ltIgw@qyT-&2iZVI)Cp%<^N45#d!Vf-Nn49z8hF7t?(rb`(*q-_& zXQE8QhX5}F`@j<$Rml3w>LFj%w>{K?*Tt$+j}<31Hok*}RcEoMy#ueo!Kj~g-h~7q z=684SV8y`;AOk&oO7M#&Ta)4XszN!;_sbd=M4a5M%X7{&hq!d@##E&_9;pox75EW* zF{4G&L6k{J@I&51>Ep}6;Qz7Ope}C!uN{%iRbnebZ2XZX5E}@-^6Wk}GAh4y`h)8Y z*)q0g(%u`$EY#!v*yMYIs|mT)A|VE6sgTlHmFC4CQFX!*=)l}1cng9nsiBLb9es-Hy2oC?ceW=n}+Zm5}80-FVM18*gd+v{6n!pt3;f&XJ3J? zU;$D95YLl@6)TCp{o^dn~SgLDP7cXDN89RtGyOdh3*b{!ijY}JlFWc!dLMtn81Mt6q7A>NAvdI z*`oICm^3wcoY3{Vy$?3UUA?nw72caP71EP5kVXc2CHV7V29P#+6@Y8e)YSqb6QDfx zwjM6R5g0NLJYU38$^rxE21WXii@eilRt~J;E)qlXgJI#}o`l+Bg-2^}qoDH3Ny#CO zT2VCz$l{YNC``=#CM%3qD@Xv4pf2Pbq*qDrb8i7CtdEwgO-I20>^c&JQ_ZaMJib z>aZylVW|Npu2$naD*Cyp7#P`FCg+MJX`lXbezORU zs24C)*`N5sAf&V$fv?I*s{_B!?;oCqh&LiG#gC)4!M$eE`aIXqkDeY+#GFh$DEDQ88sqWn9K!dxCO>Hu0zfBy+ z3Y=E~!$mR<5Vo}nDduWs-wKN;};od3MiThnLo~LMwLH~=hk!6fFv5)@KH}tGGsw3$F z)&FS913Ul}=(8=iUiy8lb(C57{*JRZgKcg~_YEBxhXnV_LH{jIa5pOnon&`dwrFP# zL_CdYw6nTlC{ zgnGz{sKlM&Ngoan&D`siv)2pXPBhCVYWkxPSG*D-cg9yPK0KYL8{vcMJ)bZ~MM5r> z*lhw3;d)v|@a6KBu;T$L)Zb2Y;3UP&StjHxKMU_?X~=z1(m|nqo-ldOCNBzW5>nKw z{Jtm_QGAwCa48;7CVWqmEraYNOJq~x%%t=pihUIFg>#Ay%D%D}VegA!1yk?BC~?v< zr60bronKB5NVi@Zlb}(#FWM&BmE{sLTqN3VgXjys^2?iQrn*kBhhPJ_Ja%K9e^>>w zk9sr&0UI4ec&Ce-$m$2_LMu zK)R>KELEVjzIgh<04Fj4Q%0XL;{5_8#Ta)VVEC%4oa_vV!NWDjnB-Gv2=3?&69+tv z^cj2mko@PZuH0{uZT6&6958Ddkj*vYaj}H5F8cJTxdV3{@7zfFC$D=57VobeKIAYJR?63DqXEJp8%7^=C5B2SjnM`x9kZMoZ> z`>Ps}X2kop*UTG6@7gB}p0)@mBS`*XcsRG^bz=~qA!t$YJPiEXPwd)>Ut?#KHY;Gj8b&lr{>*DCi;S}=O zY7F|;Qsf@+e`rPW6rYHNyRdvCv;#Wh5~H=|eMrLvj+<)ST1%>_uo0Q0tia9d*3y9ACvH~p$Cle9EMI(M*VQW{9nHT3 z7AN96qQ!c@A83aMpoaV!`QD;C1JLw9{^JN|7Tss(3RMo;Ps4iSf-;_TDaEiP?dwfO zi!msR6&7+JjPwbo0{b24xVlWJpXtbsqs&4nP#rQjP_h;xn3Qg$RqQ@%_HyE`p-#z{ z*4Xa?k?97YWV{O@%jSQ$_Kp4qto50wP#cNdiw-u??f>8svvMtCo!nGJ+_Zv8H+JoM zx>wu}sqj5uwq9oY1F{KIBJ1dK5TRwZ+r=!`1kWVp)gN3FWc02iy4)?XH|{Qj%lBn~ zS-hxyDaN-NDk8eI&1R7!HeTQ$8ZiRW0Ak>x|4NFy;s>DEm6v_o7lliSWX{5$zbW1c`tN{)4w31>IwTV&8|`_>uVG^K zvDa$hH}fxC|8!|8ZhCc1n56@yu`^b0@v>Sx(se!rg+fJ|49kXldB&kZ`S#VeQ<{#Z#>9#Q|{A|(T@x0KXd zO7YRc4|ItLPUJFnB5%NCgWENG$WkGV+4&i{hJy7f3-8}MWhw*c1wJSV^&6k+c*p8@HkgZ{UX!tJ(%{&KuO{Hcr%&6J(FBIz z$-(7eQ<@hV7F0>~+cU3nr$1Dg6$nxB`(tm37AJFMpevk|#$rT7H?UmH4(-D+-#X@T zp;(~(r1m>4`_h0o@TKM@gQFUQPoqyJ%8?{C)9j?%%GDXir!L4_ z;A!Tz0yhOXvpuiP7%>@#w3Wxb09~biS~5H8mK8o~_|+Y}i&^^%*F7W04gK;dm;v@B z(Xrnk-udcTqqmgcimh)?(+;ejW)Drp#Q&r0Ti~HiyT_jy_eeFhMXyR0uX?Rww#`^E z-F73D+TN{{5~0m*#pt5MbWdwl5@ws2?za_P6^UIfm1#zKsa?soVn}5RiK72G&v$0b zxa|J^-_K`P!*|Yeo^wCvInVQ~9TN7#@^8LL(@$HmPWHp8guctMH_CkPuFTX4W~{hkTLEJt|4iE5)7&{bd6NpWq%`V|{+_=sRcT z?<0C;q4JOW6DzQzpIibe>XcXVIO6BdPl1ed*&N&)Z}TX5GE=tbu624ZQR}w)^j*H< z-q{%-B56hwgD%mrET{Z8EH>>j>9cE>4&OYhkcR>Dlu3G{PobxKaI!=kGxM88VPK(Y zs}QYv(~2PtSheKC1|9K`tENJf|AmLoPXBJ);f;zf`JRx*WDAJC<>b#w4)O*`wvl@$ zF0t+eFG{|JZ0Acjm`_&D*l=RXh1V83$-$O25VZ=y;K+ViFw+)ep>C#9ZJt$ylD{zrUM)|mY0bsR(qB)F`d?KAZ2I_YyxRV;|L-jlHp>6Ru3#c*V3lwvr>3( zTQNs`a+E-5&P3m3LIdAM(;K^N1PN99`}5GTc}aM{qm6mUBpW9D))EL#ry1V<=%~-& z-+jM7e@@&n4r2##P0MDIgvv+wD7Wb#%6wm9giN3dxKt`qGn=D-QMf#LeHR;YZW?OkCPi?); z__U1ry(Lpc(i(;dg_&W{H$O}KJ>-j%t7~o8FR3&rYrPZY&bQLSZV}ersro?aY)7)@ zhXpPx|HC_=u*mNpJQCs@{V<|0@WTj4831<;0Z_IL_#|8ZlEdlmPFxy#kBS1Y8V^ZP z3YpW>n_DvF%8F>+J+UzRU!v>^v#oJn6G5V?^uJ|>OhCEsIPl+td5K*+h===E>PBd=akP_ z4i+Jtv*j-34L#}&kO^~iVn1svq7cfm#tMh5IOOQiW`362&-o^@2KPb{on($!Rha6* zcK_=cGt7{=Ayfc@XKuE`BQjwW{iXPp;nToftd-X;+@fadQ7_JH?~w-FJpFg zjub=aVlcL|im25OPOBT3ctPlpoe(k!^aicY7Via@>G3bbX*15{`aF|c#CP$xB5X>? zGJ~{YZk_nh+Ar4Gdkhbi?*G`yf^d4rFR zoiHi(e??A2@7tPNw^)ZyPVP^JJ{o4bwB)c^_DIp8)v-_g2aeU4kjm6{A8Gvma7N(E z4a6^9^N@by+75MvfwUetH4^aNuT zjl=E3lZRY|F?^*8u|nh&KSeZR=1b6?1@E89v3_EWRr}h05oWjsU z`H}>EMms5U1{_=zR_ejIu!|XGaJZMjOkr|1sjwCN;_qR-kBb|xEb@?KsS8wzsTR#N zWR1o?j0~K(ghqfKbBEK9;hw2>%A8}pI}pX_qcekDY;{iZV-J#S9cM)mFWv(r!15;8 z7~aF_qY5pRH0afK4lT|`i3T%pe=fw1^w2qc9BtRkjJT6_!FsCGBtk~{=*7i24Rc{R z;w4+WswCIjqJd*^gKdP6D3;ovv``(E(?f8OlLx`Uc?hqzXMJ+1?1#0%)6b*NR`G`= z{k6E->65b@t3giv2QB9$x>(pfIv7=C3t(#9QLJ7#q)M~K5PtK|A&Ue9)p+IxA0)kr%GB?o)ZH{y9m{3VcnwB5I*K=C<$w(higcJ>OdcEe9-Tvv-ke@%r;Bm z?6B|yACFv_#j^i(B}gPO&UB26yw)faSb1=!O}$A>9;wga?7_OxjGnr;tP__{=CMVV$N$@(%(3FbY-~iIVPy%Tp}6%5x!KKl536bW`m+Wu$}b?j z48o-HjJWxr4ZQ(|S_poBEwj#HGRgWZ-(v4AJv){mST-{Gqe~Lp_xij>SG3=}z)`H= zd00)^CG5Y)ko=>lX-PmSh&iJM7B_8I{v=`h-3BK&^qXRq{V!J%fXZ|;x6=S|fVnKl z`i=)@$}XKksRrE6XR6A3YI47BlwDsRm>E4hNI$H9Y}rrV#Ovq1WO_;_tW1vD^0qa$?d}l-CiCX!*?*1I_1$a_g z9?k=|@$8D3F&DXLbz;tM8O#U)$t*Ln-(CUQZyi5vf3>>o)uT)?yjb~z&x#VCai8y; zXg7ETy^IFu?N3;S(~jT!(T^GxF??gOg*)AyJOpBlP)=z!< zdCwU(=otV7+?jX}6c2#|P0@W@8$a|pveq7t)c{Bqd31S2*{Ohw!e~}>^K_31eyS@R<@Ek7=}l^g$}aW2 zr{pPy-34h(<1~D&bL~l3NAs_F_)IBDHjQPU*hve_%aMdZL%I-*0tE}-*L~zLZhag{E zRaKB8O|t1VWHt#&;vZZa?h462N(lOcPBVR;9{fv>;gTu=8`I@!JoyPmONcekeCO85k#c%$34mqwY*lPJtqSn2 zuMg#28bBR~XSygobUDr){xBh79iMO%!Q}QT!1~gvk<@n1zLG3N+LZVY!%k~~T)Q5u6D%rE2BhLlIX!5H+dWEUMDD;)3#~)@7 z$#!u8Zhnfwi3zU8IXN*4l!6 z${_ZFS%vtAe=rA(H!KBl9rqA#kKTSoh%FzQi0b|J!&U^jQk=)RgA~;`d$nuss50xm z;FvCzp13q-ZFtC>7{1u~)1H}*w?O_-0Kt~fL#EQZg{yAR@? zt$F_@Yi)oZPPit!h9oYb^Y2AfcjMvt8mu~T$)Vun+VGWkY&^+)6aaeku?7h?Bg+K< z*OQWfsGWm$fUXQQ!?9+gOgTd`{&gW{j?h@gQ-TqZ1_cT}qm)Fb)7>p8lD%30rZ8`u zkp=1Ur7}n~vt0lzpUfXzO4Ml#g_=i!TD)u(>QJ%jOvs;f)$eaeg8{sp7I&u$3Qg=x#7oV z`1LnN04;Vn9>m~q3gtirHD1WhyHd<3C_cD9i*iTj$A)Awi%C6uwE{|wWn9dULobC) z_KmG`crHmGEWZ`Snzywx(?!wh$6(rvbJ0*(Tx3{rzkGVeg8-Kye!xXk+0KjX7>p4$ zMyCFj{ghJ>@jbj!;?sBexQDXszk7Rn5@Xt*qI^-6n%-R}RU`S2++Vupi%a8{mmc*o zeuOY#u=!aM#8T&9nkT2?#C2XPEko}XfMF7?Sbp=(%B=`ACQWE#L-c;=dJnLH6Y!_s zZKb01&Uf^w!&I?c2)}Gg3-^fciqW%2*^wc0yTHWQ?zJ*S?bZ2H{$O^C{0W(u2JX5% zmH)2`o9zFCusQ=Tg$>~AC#nD#4|x(1E%FxOLiU*Gajg^ zLa^7k3`;MJK?<38c50UXCH<43K+f9}?O1Br?60d2YI6$pIN^P=T6cQ2$QlvEsr&cR zSZno9hF>dAd^w0Cbf6lnON6YGpTj?n;kP{|zxMmT0o9Q(OR1k0hw!nN=0f%1Ps&|% zFKpj|xLOM7wRC-GD4med@3v44wO8HLd&q=(<0NHU%D=dzJ{^+mPQ*Fs=6_>9o7 zKXQk~XM%GuD;PH_eR1!s$FPJ}N+e}lR}3xgyS(qrs!yhW^3aGsf3Q#=rX^8NErCMp zrbk*>Qaxg9Qg(u`cZEL1^78kGj5d%2J$&;>=ja@v4iHnVJw0nChw($o>i)#<4yS=q ztypJXoaDpy?jt09EY);B=AA%{qHT$qF}>U3aS}%2!Nln&?zjYQ`E>r_Wet7c%kqVQkd;=JVLvq_vv&)pCBdxIi46T zY^KF?lw@}TTAcy>n)g>V@atKKG}tpvl6CmR=9NMa&V!E^ z)&BU9UV++&u(z*Ml2Z#&PnAsqp3AoS=w<0;0gLXhOLDQzw4+pF z17jFGbiGYR{)b*V|BpJvNITZn@Jg-0wK_hm(}1Wi#-T8+m_Vh;VH?|-jI?uiz<>X} zC_zX=#odVS3ue;?Ws}NM62^98gUFQlUAh?;gk*0qGym>X z)j}0MFaT;mmB0SOI0Io0EoNXo_Rgk5vjJd?w;_wKE3taIoHXV#w^RP#I0Y7;GXI%( z2p-RQ=(pl5WP1P8fvnBC#&)dH-fY96#6Y}G9L<33M%6AitSiMI!48=_WG;B3vd!l% zAJTvBjh9@Q+~oWM$#4H_I(z{7xy&VLjPj<-uI^4t`!Ql<9DU#7@e|ifTq#^A0c@WK zPs#jd6rV5AaRef;9r%!w0o205M^sn-c9SfvjHy!xuJm2uy-+evf=ZzGGI+}6<9Kwv zl)szkT2i0}>;L?p17CfUaM!Rz%Q@p!H)*QX-{X3vR0%*TYQk;4^3z`me;&{muRj{5 z7~Zn&e^`=Hf$e5hwPZ_e0>PR51ftb>+d?2L<6R3>OISW zjViE8cKPAIgzjR(s*F-J7)z=6AADLyG;ZUuY#jYTk=%3deNZc~m zo3&5EQkW|Gng|&+zw@!`Cem)kS_@H6Cdlmubn3D*Ru?`64!vA`Z!dsk@yTsN^7eh6 zHivrFETtBh3Q0EWEJzhK){>C%S$&W{>ztQUL&AzTB*g7=6;u9}_iS&~@|8p0isEsS zA%4{52W}LS;h~S7oDKus@@B;w;g{Wl(+%O&<5%Gs_3s{jXwaIiiv-3dZ{d{aBGyHmw+$er2IJp;2*_Z8?pG`?P|p9XVPZ38noOn=}tr7D_tvs+rKo4_=Qhcoj;m#E64%%?Cv zTRY3zDq8idUQ}|GuylM9zz&p3m}<6?1MIm!tvaX>{{Mhuw-Acj-C~IUYMF!Hm57$N&SQq)1}24pEcUw4IJ?gHOyP82kC5}Ne%kAC|~Xk3PS^p?;#ki z6I+x}#%iAA(-n$Ra>BLWU}+9aa0AERLs3PEk}j`kfW==4b&~%Mii(@VG~Q83wu=@N zO}Jg5s0B=OC>0p>?;sME{v8yxebu612o6c zC^8F%Y52A7oPp`8F?8u7cU_=pDoa;60c=#H8P-Ma{su}nspSb()aWWPU7%<#C3Mpv zgR!b#bd{LDg`y=l__At}T_r{X3hz)iD8xnU6Hll_psU1mfzs_7J1yBa7#rRRMRNd6 zC~?9bF2mEDK1-^cBFwDj{|kzi*wiT5hEOzV_K#4s#D=$3q5>`G1&W2NM<|+Nqmo#J zqA3QNPzw1yLeUT#HF;|(=Ko(%I>koK8Gy306GhFhnFjX;rIX((nugOc{}xKEhI3W_ zQHj4wf4WGF=3Xk00s664fUM~%$3#hJmDqL>njQcdd^xtymMvtk>E>=&F|1cvsVIm2`Uupo|HAEkFH*Sy`2-g!*bD>UKc~52@1>*PVD4Zd-ybnf2t=~h?Yvb{}Gfa zZCNuWdi{^-?VQ~0TFcr_5$IwvdH}^Ng|qzFdyi52YdxrLDk~bUB}|%B7vLy_RiZ+K zz4w&P;jS|b$NAMN|7n58k@f%ygdQLPr6Av84vm{Tx*JxAlm&A!TNlmOm>!M=Cf-Fr z*rV-_^+_DGeG7i$)ckIkg)?%jgr=dp-JubdJ)U~qfBtDdz@Pm~-moq^0*5hzL%P|4 z#zUIG!qF3k*AUMH+2;LxlUl+aJU0Wr_K|Vd$pQ!+QLz%BCjA?QwcP+JyxHC|NKe=f zc_eWGqBwdmt5{3T@gPtEBO0hGoiJSg=(LGwo`DU+ctX~$Qz)}`(=*8SNkYP!?Psca zwIC%P?~oFl+IUfLn&wCeE|Cc4(|Q_fS~eNr0h7tdFjeKgL^(;Nkl=K;sxiXrjn(ih zeulpZQQQ=Mq(5sKWQ8A@3XK9Gkk=D}>T8ovX}gAXIvsd;II3#$yv@ZlGO@@r3Y@x~ zf9%xUIo?F?OTO-f;}oKng25DPm}%C+7u59Aq3dWW-#8XWL;CR^8cmbfkf~(%fzjUN zBZoX2prYP(VYp`WF-*-82)O;iJ3-Q=Nrncde#59h+APIZ4&27SOF4U(7nM#Q@DX0 zO2Gz_ssj=lj^clmvKDzr?mTwhfn6kcQ62n7Z(=da&SpF5^Duady#$PmmNaT%sdnr& zN=&J76;KZ50k$kLv#x&O3Km8FPki93>8;uk-Pj(C5zcrRNtiwe(6gbbbht&H0bgn0 z^d71-C0re)s^eki6&B4M^n^7wYBav`(>>4EOY*b9a(M>K0WeSsq(dG{N}&KZ492ol z`B<&;y8`8(a1c{JwN=rJ6B-`2(_7`Ddx5#Ug1ze)aZzsU?gWTdSVDdJFjb_i{G(8uUkg>W_NgvgdlU0(|In*|-&D{(QzpWD`^7 z61rhZ%2A$Z2StG5e2aVy{r^uyvC$l%@ese=>RKP2YPd@H(B|XtwWKFtEU6~8L;S!h zu>7AJ1*%GE)bj!P)%HMhS{e@?MY0P(>Dm#F@(z-(e;#c|?0q-esbEphK8zkUMYJN` zEV^*XDskL zc7zs#*jJ3^90w0l7F%mMzmI-6F)!vz(CE?|OPP!RIz4cg?ey41D23Qy?&+mdMw9uY z?U*|N2Zu}qL|J}iTV04uSTz43>kv3;X2wcmrNNZ$Q@1D_ON;^!3}TJ8KOZ0cs z$-ZpM+|&HQAL;+dieL5PW-{A8n+^1>qnWc(q&2{HV>RI=3z?g^4(M$TWNN}x5aT!d z9m|kdo+8HVE4mkiR7+}Ab5~nb?E~^DJ#|E4Avs`&7n+Wq&#;KKP$u-;4Q78desZA& zRQ7X~vr_>B*3@VpsEp8MIItlZMA!=gmGaof$R@#%)T*(76e< z;Nh< z&`uPOrkUL=*OT@%1c1Doy79=>_AUlZ{5>#j(bup z^~NVcOz}zZr-p;3kHePcn-co%n(*#GHSk2B=0*KUg3Z(fVIR-k+c}%<*mF-^U}%5h zH=@5>h=({bUm4~I5;(`FdTOpGu!=cbp40KWPE&0VhN)*sYH$M}pT#HB?N575v}1#P(fCH6hxBNE zkh_DLzt*%ZI87!{xJmCG8o=KUHYRbloegXBsL^vYR)|12e2@1u%dU5&z$5VIY_TJg zw)F9wBxKny;3tp+gETAIkgcOkbrawoK>0fYTBoPr#Jm{n`0NJ0ncEQ>RmuiNMhkS0+3 z=4mtC{z44jW~vP_@|bg+P3fjfjPYk}&lByT#&(xEk4yK+fleaCg?(Rr|WIQ5qcu#4tdz) z+UXy9M^1bmyJql#xgL`ko}aT#;+Z)2LXn*==>sy&clp&3 z?MkrOP5;SWFh{6+Z0=z@o9TlW1Wt#DmJ@&6W~wFoml!@G84fXcw@G&w6=NMjUpP&l{YW^wj{-;jQp0kgyI~PN61H2{`ERdKNLQ{t~=0-8h5Z3?kHC$LI-`qm)@kME4Jvk*Npl zC6L`?V-MXd08q9(*AsSI|LP9QU}oS}(Jn%7%f)Ne5H%1RZ{0z(@k~!B!9U?Ss5GG0 zT1n^$+FG6D8phqzoAMC31NIlGoW2c+9!3CkeNECVJy=+35W-Z`Le;_X1F$T!e*eidY@DA)epcpPr2Y!I2|JcCq)( zx#Nj{_uYpjeN#fkO-emW7a7Mdfh~0^Hc<7~sQ4Xy_ zUoQZ8s&jIt+X0$@Bd6%2j|h0C<7m$k!Bk)@fJ}k^G>TQd!E-d?D=HrYm#0;@r0afJ00!def|&h^f6Ql z$R-jn=iAL1v>oDuZ4x{;ddSkX%sd$uQmS=lrq0o1!rNhqe`ni@(W&B9gkY1|5V~3& zIXqFXKUgJQWNS7J+Nr+M3JfCK9m8+|76!n>z>8KPhlI4J0HPpB$B5ynQ*&pNK2yJE zGV^e{y@a{Vh%uKgJpin&Ap;iW_ebgcws@Ox|9s{Rn*$#W60)Wpn={9b1~Gj4E=5r( zAl+ASR0tA*30T~^QR_x;Hr%KCBeDjB`M~JWgDkzbTOAQ1hZY3VB-P>PVxo~e^q>t) z;m!g#NFHAI$+tu?$9l^mKGU@`)kLorIBCDeTszN9R&yb_D|X>Doxf?q zC%&0!Swof|){Q-9eKmerJYVZImK}4F60>zkqwBy=>oo&DO)c=wup#r-ZJN2=N7sYn z5h^+;ieIe#CZ#27tr9bh!nZbdjGUYAwfNbtZ^Op$@P#W*?TWG9KYk$Znh0xrnu!#> z!ILovnse4dkyWg$;Rf;jiOz<{nQ6~ne0OATyodFEr(l4IcPg@!HLw2OmH=HBqYQ_i zl?7h4z0zchDzzv2%XE@$bQV6&_N};l{K^(<53cPpsYv#fc49PV-$jcfiL^Ubn^4+v3~e{rG1z(lkr}Y8de; zpHvr=smP#0msPA$z|rpyY+rTa-O8r2%O@_c6b=2w!*-c0NWc||xK30)!KAU3s8Y+# zSTxnFJMqO)G!)4U#DI0~(7KY1Kw#gZa9j&3iJ7w z*-~Qs;AB+Jx*M4r%F?cE@vs(20caH17`Z^9)D4p zxiY&xr(vDXl~OAp373M7RqzUeR*Uf56V1o78|t7mJvF3_-8|?f+k1R%L*;Z3bsd9##TAYLdA+9Da&LYnqOqP_Gpfik z=Cqd;|22#c@(0XA#ldC>pLe$)XwEXNZ_$__8wAEaqpoM)rFy{gI}%U*_QiX?T-=U= zetFGzy0N##3TGKNw#vK!X%t`{H063;*KguM_C#;%$!@&Ve6Z*6CgCLIrk9lG&MdFX zd0GE;DaTq$iBk|78*C2Ks0nrow(dRvEorcSJ=Aj-pz_flzl-3((^2wSM{`$}zsRXy zxAyl_F}6X#SF-|cYyb`rY#&s`?J@$JDMW&5F7Pj;>nOcFj@PlB!|2PCztuIpsjuAR zvdX6{?Gose2#0Wttulj&Cd`0gk-V+In$ByvNoZ|!C@yVkr|!yowy zjn9wvCi8WApAzftJt<-P0dJy@*EhE`RGviJk$rZ#bv_Tp*Q|h7g(C%knu}|y#&bM$ zXV89yV%cFnnMyfgh;jhIUN)p$>|eLX^*$}d+8Q#^3xb|6PRX-LLbVZhM z;wooV)Hk)cG}qraG%hFP>))OBb5V5y%#e->M#4cbu8PX6JqX`Y;!Q^R=vWJFXn;Ud zE3jhO-~x>YYqtStQF0wv8FW^|E6=`Y-thUG`WxAGY4tu=ehRe3$tiF=UX{hGSeU3l z{HIrq!YRba$`ZbN#!kW-xL_|e>Q+K@ufvdgo-!x{)$$RDL zi*v@8EG)bH-#H#&d>C5B3Md1)u?pwp_@G4|<7CH18nUK_d^#s)E#aN9F0%yq%FO@} zSR3%C5Bi%ydFNV%EIbvJOo$GstZ!<0@gRNXq48OHOZ^N^w`D45J7%?kuE;wK{O zs~(>!y!ot2`-;tv2)Esn9lN@PMu6LuY-Fv)R6V0N!q(ua3Z9%s_+MiCDxhrJ=csmV zs}`1)9=1lYF;m2?FLb3pKyU(hGFt)HI{s^p?bc*gvB~{}EMjtVw_@230ZT1j!Kk1p7h}3acht56cO6D5BL%D=xS+EI=JqmG*4?#;AfC|Ymik+pTQ2yktfsn>jb)kN z9bq^sw`i?O0e(_Z0v+K=rPBByt0{Iwx6kpRmLJ7K2C(RUV`rSpDmLO9XH2)FoohXe zX(2;pWo?6hRz7aK(J=35ZdA^OrpGPWX+E4Fa4j(8D|xD`pa3Na430Svyv9Rh?O`~P zHEGA*IlB#~EIM`|w#+sR)X<1Oi7BWL@#6?xa3zxTNM2@CBE#E*Hbzfw%85!v-yB|t zfyE^cFw!7HjfJiPg&YOROo7K;aUp=YZ5_`UN%{;r-iH{*PfrXC7=P$)jZ*(HP%_2K z$*~C4qs8MT1tSd{Z@}O>FWYmY&z96Sl;3CzubdI$lQlQqKNv+fl^K@W*8p(g;+mi! z59@s+39%cU;62jHDrk}Pk;0`$U_)&YQ_1-{kMwzn^}3$OY#R6*Mi4r97})0>2cNy0 zus9V$g$+%0IrR&#obf<2tBA!>TVc`xDO{C7;&Mk>PnkmW?7StqBdz17$pQ;jeM%3S znyTCplm<2e%`UbR_BLPi@5E?g^9M4uX;W1Ctd;E>8&1w>@F~6Q@5Kle!+_&`p#-H^{ad9N~a@u3Z?Hat$d6z^5V1KBEc zTd$ylGy3Zcf(=gGI%a?&v9mio#VW+f!#qCN{)@1JRlEq4S6zv+47iZ(&Ax(!2=Cg} zsFSSh^C@V>AGwFyhZMirkmD9tv9aM?OHK$1cZ$FqEr&dX*GT7YhS3#_&fWHlhZT@~ zB45%!#@g#P7p$0Q|3UHf5-QuuilIXzI3b6;1X{?_9^4{dLWxfAIwb4bqaU=qo8XpG zk-et=#z6=kmKX7o3nHqJ+cMpiUVyZCR1iw0(wr;>{kwQ6}Bu8h`)bAqT~IjD-ngc+b9q z^GDWe8&#Inp^(u6eM)?euzmcqsHE%%bq#e8YmcWH3FK-_xMR^dK4`kLNGcTtO&(=v z31Qrncxx#`da;*Rkbk29Z&ln)NPp$BX5Zy3JNs-@JMGBTbgAla9+Opc86@GwyVT1~ zn{K4fI-0qu8M4v3v=zU5h^U#v2myG{upiv!&3xYeQBKo#xha~KJZ%3!4i{Cw?{_MHvKjK@hliSIT^7lAbO3s>#Tk~J`!fPQaJ z|6kki+<7N6qYh<-*OmB=OY?!?0i6q=MDc-ODF6faVCP_`KCskM6r%a z7U#$IlXY&X$f?Tol{p($ooGp0agT9-fDXnN0?H{!j?B?Qh&)EN8?=vauX^^F;~#9U zkj^TK=5&mFUt)z=K@82stW$t*Lu&O0HbT(inw=qCMj1wISb-0cA6Q z$GFI2!CbI_!DF6QD$=V(Q})>|qm>t?4uH{WOpI))GG0?Q;eGwHJy<-gU3~&Pn~|ub zi&^#?mMa0#J^r$}4dX=cG%l+)l%;WKoVcK{GkRi7j#T=~%-jdj7o!^AR0jRE-%L?B z5M2Gh6c2ILD|bcupN}Jtf%)em)wtqD%)*>+-mIx9a7w14f1G76NnpBEhxmc`YxXdh z`VCW8Z*&eRkB#e>{jM^-X~K>4FITo_uc>iu^J1(}* zYgux&-C!m!xzNpAs^B`N_y_q1r;d<+ASoZnuDADtJVY^oAgv6bc!C=lV{d^c>aju6 z60lzY2L6vyW_O-nBYVMMse0XYnCJ?}Q6wejuFlpqhW^v__- zUqMD4u?B-KHhDTTo=pOWrdVWXG2T<(DRu^94ftv^qNX0J$^Gc2%HxpHO&FH_rr}1; zx^q94)y5!KD1MZ)kdY&2Wr73k@}|_vj;c3{Uq(K9C6_zOovV}My>5$Q8)aSrjY|~r zs_Q3$1S0XDkWte>k5)efjy$GO)lNN;0eM3}Fu@&qN}6uhXNZR4BzRdiI=*UJ=fQ4tVz-JxY^x$7a6Mb4xCQ_t-OIu$epRwiXS~{Ol0n=(Y>(6d%8V!2x(gu@H>lp0uruKH^lM

fNE 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

g%9>ERo`IKlCC`^9DEJvI#r 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 WY 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

}B8 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 literal 0 HcmV?d00001 diff --git a/packages/files-ui/cypress/support/page-objects/homePage.ts b/packages/files-ui/cypress/support/page-objects/homePage.ts index bd55cf40ec..85b8851cc0 100644 --- a/packages/files-ui/cypress/support/page-objects/homePage.ts +++ b/packages/files-ui/cypress/support/page-objects/homePage.ts @@ -11,7 +11,7 @@ export const homePage = { uploadButton: () => cy.get("[data-cy=button-upload-file]"), moveSelectedButton: () => cy.get("[data-testId=button-move-selected-file]"), deleteSelectedButton: () => cy.get("[data-testId=button-delete-selected-file]"), - uploadStatusToast: () => cy.get("[data-cy=upload-status-toast-message]", { timeout: 10000 }), + uploadStatusToast: () => cy.get("[data-testId=toast-upload-status]", { timeout: 10000 }), fileRenameInput: () => cy.get("[data-cy=rename-form] input"), fileRenameSubmitButton: () => cy.get("[data-cy=rename-submit-button]"), fileRenameErrorLabel: () => cy.get("[data-cy=rename-form] span.minimal.error"), diff --git a/packages/files-ui/cypress/support/page-objects/modals/previewModal.ts b/packages/files-ui/cypress/support/page-objects/modals/previewModal.ts new file mode 100644 index 0000000000..79c85f662b --- /dev/null +++ b/packages/files-ui/cypress/support/page-objects/modals/previewModal.ts @@ -0,0 +1,15 @@ +export const previewModal = { + body: () => cy.get("[data-cy=modal-container-preview]", { timeout: 10000 }), + closeButton: () => cy.get("[data-cy=button-close-preview]"), + contentContainer: () => cy.get("[data-cy=container-content-preview]", { timeout: 10000 }), + downloadFileButton: () => cy.get("[data-cy=button-download-previewed-file]"), + downloadUnsupportedFileButton: () => cy.get("[data-cy=button-download-unsupported-file]", { timeout: 10000 }), + fileNameLabel: () => cy.get("[data-cy=label-previewed-file-name]"), + fullScreenButton: () => cy.get("[data-cy=button-full-screen]"), + nextFileButton: () => cy.get("[data-cy=button-view-next-file]"), + previewKebabButton: () => cy.get("[data-testid=menu-title-preview-kebab]"), + previousFileButton: () => cy.get("[data-cy=button-view-previous-file]"), + unsupportedFileLabel: () => cy.get("[data-cy=label-unsupported-file-message]", { timeout: 10000 }), + ZoomInButton: () => cy.get("[data-cy=button-zoom-in]"), + zoomOutButton: () => cy.get("[data-cy=button-zoom-out]") +} \ No newline at end of file diff --git a/packages/files-ui/cypress/tests/file-preview-spec.ts b/packages/files-ui/cypress/tests/file-preview-spec.ts new file mode 100644 index 0000000000..0003413416 --- /dev/null +++ b/packages/files-ui/cypress/tests/file-preview-spec.ts @@ -0,0 +1,88 @@ +import { homePage } from "../support/page-objects/homePage" +import { previewModal } from "../support/page-objects/modals/previewModal" + +describe("File Preview", () => { + + context("desktop", () => { + + it("can preview and browse compatible file types", () => { + cy.web3Login({ clearCSFBucket: true }) + + // add files + homePage.uploadFile("../fixtures/uploadedFiles/logo.png") + homePage.uploadFile("../fixtures/uploadedFiles/text-file.txt") + + // store their file names as cypress aliases for later comparison + homePage.fileItemName().eq(0).invoke("text").as("fileNameA") + homePage.fileItemName().eq(1).invoke("text").as("fileNameB") + + // navigate to the preview modal for the first file + homePage.fileItemKebabButton().first().click() + homePage.previewMenuOption().eq(0).click() + previewModal.body().should("exist") + + // ensure the correct file is being previewed + cy.get("@fileNameA").then(($fileNameA) => { + previewModal.fileNameLabel().should("contain.text", $fileNameA) + previewModal.contentContainer().should("be.visible") + previewModal.unsupportedFileLabel().should("not.exist") + }) + + // browse to the next file + previewModal.nextFileButton().click() + cy.get("@fileNameB").then(($fileNameB) => { + previewModal.fileNameLabel().should("contain.text", $fileNameB) + previewModal.contentContainer().should("be.visible") + previewModal.unsupportedFileLabel().should("not.exist") + }) + + // return to the previous file + previewModal.previousFileButton().click() + cy.get("@fileNameA").then(($fileNameA) => { + previewModal.fileNameLabel().should("contain.text", $fileNameA) + previewModal.contentContainer().should("be.visible") + previewModal.unsupportedFileLabel().should("not.exist") + }) + + // close the preview modal to return to the home page + previewModal.closeButton().click() + previewModal.body().should("not.exist") + homePage.appHeaderLabel().should("exist") + }) + + it("can see option to download file from the preview screen", () => { + cy.web3Login({ clearCSFBucket: true }) + homePage.uploadFile("../fixtures/uploadedFiles/logo.png") + homePage.fileItemName().first().invoke("text").as("fileNameA") + homePage.fileItemKebabButton().click() + homePage.previewMenuOption().click() + previewModal.body().should("exist") + previewModal.previewKebabButton().click() + previewModal.downloadFileButton().should("be.visible") + }) + + it("can see unsupported file info and download option", () => { + cy.web3Login({ clearCSFBucket: true }) + + // add an unsupported file + homePage.uploadFile("../fixtures/uploadedFiles/file.zip") + + // setup an api intercepter for download requests + cy.intercept("POST", "https://stage.imploy.site/api/v1/bucket/*/download").as("downloadRequest").then(() => { + homePage.fileItemName().dblclick() + previewModal.unsupportedFileLabel().should("exist") + previewModal.downloadUnsupportedFileButton().should("be.visible") + + // ensure the download request contains the correct file + cy.get("@downloadRequest").its("request.body").should("contain", { + path: "/file.zip" + }) + }) + + // return to the home and ensure preview menu option is not shown for unsupported file + previewModal.closeButton().click() + homePage.fileItemKebabButton().click() + homePage.previewMenuOption().should("not.exist") + }) + }) +}) diff --git a/packages/files-ui/package.json b/packages/files-ui/package.json index 5cbd9a2373..96fbb82068 100644 --- a/packages/files-ui/package.json +++ b/packages/files-ui/package.json @@ -67,7 +67,7 @@ "@types/yup": "^0.29.9", "@types/zxcvbn": "^4.4.0", "babel-plugin-macros": "^2.8.0", - "cypress": "^8.3.1", + "cypress": "^8.4", "cypress-file-upload": "^5.0.8", "cypress-pipe": "^2.0.0" }, diff --git a/packages/files-ui/src/App.tsx b/packages/files-ui/src/App.tsx index 8a9ee53623..5e25f4cf1f 100644 --- a/packages/files-ui/src/App.tsx +++ b/packages/files-ui/src/App.tsx @@ -3,7 +3,7 @@ import { init as initSentry, ErrorBoundary, showReportDialog } from "@sentry/rea import { Web3Provider } from "@chainsafe/web3-context" import { ThemeSwitcher } from "@chainsafe/common-theme" import "@chainsafe/common-theme/dist/font-faces.css" -import { Button, CssBaseline, Modal, Router, ToasterProvider, Typography } from "@chainsafe/common-components" +import { Button, CssBaseline, Modal, Router, ToastProvider, Typography } from "@chainsafe/common-components" import { FilesProvider } from "./Contexts/FilesContext" import FilesRoutes from "./Components/FilesRoutes" import AppWrapper from "./Components/Layouts/AppWrapper" @@ -101,7 +101,10 @@ const App = () => { > - + { - + diff --git a/packages/files-ui/src/Components/FilesRoutes.tsx b/packages/files-ui/src/Components/FilesRoutes.tsx index d392c592eb..ca53bf18ee 100644 --- a/packages/files-ui/src/Components/FilesRoutes.tsx +++ b/packages/files-ui/src/Components/FilesRoutes.tsx @@ -25,7 +25,7 @@ export const ROUTE_LINKS = { SettingsDefault: `${SETTINGS_BASE}`, SettingsPath: (settingsPath: SettingsPath) => `${SETTINGS_BASE}/${settingsPath}`, PurchasePlan: "/purchase", - UserSurvey: "https://shrl.ink/Efyc", + UserSurvey: "https://calendly.com/colinschwarz/chainsafe-files-chat", Plans: "/plans", SharedFolders: "/shared-overview", SharedFolderBrowserRoot: "/shared", diff --git a/packages/files-ui/src/Components/Modules/DownloadProgressToast/DownloadToast.tsx b/packages/files-ui/src/Components/Modules/DownloadProgressToast/DownloadToast.tsx deleted file mode 100644 index ddf875ad67..0000000000 --- a/packages/files-ui/src/Components/Modules/DownloadProgressToast/DownloadToast.tsx +++ /dev/null @@ -1,102 +0,0 @@ -import React from "react" -import { createStyles, makeStyles } from "@chainsafe/common-theme" -import { DownloadProgress } from "../../../Contexts/FilesContext" -import { ProgressBar, Typography, CheckCircleIcon, CloseCircleIcon } from "@chainsafe/common-components" -import clsx from "clsx" -import { Trans } from "@lingui/macro" -import { CSFTheme } from "../../../Themes/types" - -const useStyles = makeStyles( - ({ constants, palette, animation, breakpoints }: CSFTheme) => { - return createStyles({ - boxContainer: { - backgroundColor: palette.additional["gray"][3], - margin: `${constants.generalUnit}px 0`, - border: `1px solid ${palette.additional["gray"][6]}`, - padding: constants.generalUnit * 2, - borderRadius: 4 - }, - appearBox: { - animation: `$slideLeft ${animation.translate}ms`, - [breakpoints.down("md")]: { - animation: `$slideUp ${animation.translate}ms` - } - }, - "@keyframes slideLeft": { - from: { transform: "translate(100%)" }, - to: { transform: "translate(0)" } - }, - "@keyframes slideUp": { - from: { transform: "translate(0, 100%)" }, - to: { transform: "translate(0, 0)" } - }, - contentContainer: { - display: "flex", - alignItems: "center" - }, - marginBottom: { - marginBottom: constants.generalUnit - }, - icon: { - marginRight: constants.generalUnit * 2, - fill: constants.fileSystemItemRow.menuIcon - } - }) - } -) - -interface IDownloadToast { - downloadInProgress: DownloadProgress -} - -const DownloadToast: React.FC = ({ downloadInProgress }) => { - const { fileName, complete, error, progress, errorMessage, currentFileNumber, totalFileNumber } = downloadInProgress - const classes = useStyles() - const fileProgress = totalFileNumber > 1 && `${currentFileNumber}/${totalFileNumber}` - - return ( - <> -

- {!!complete && !error && ( -
- - - Download complete - -
- )} - {error && ( -
- - - {errorMessage} - -
- )} - {!complete && !error && ( -
- - Downloading {fileProgress} - {fileName} - - -
- )} -
- - ) -} - -export default DownloadToast diff --git a/packages/files-ui/src/Components/Modules/DownloadProgressToast/index.tsx b/packages/files-ui/src/Components/Modules/DownloadProgressToast/index.tsx deleted file mode 100644 index ecf54ab537..0000000000 --- a/packages/files-ui/src/Components/Modules/DownloadProgressToast/index.tsx +++ /dev/null @@ -1,47 +0,0 @@ -import React from "react" -import { createStyles, ITheme, makeStyles } from "@chainsafe/common-theme" -import { useFiles } from "../../../Contexts/FilesContext" -import DownloadToast from "./DownloadToast" - -const useStyles = makeStyles(({ constants, zIndex, breakpoints }: ITheme) => { - const WIDTH = 400 - return createStyles({ - root: { - margin: constants.generalUnit * 3, - position: "fixed", - right: 0, - bottom: 0, - borderRadius: 4, - padding: constants.generalUnit, - width: WIDTH, - zIndex: zIndex?.layer1, - [breakpoints.down("md")]: { - margin: constants.generalUnit, - width: `calc(100% - ${constants.generalUnit * 2}px)` - } - } - }) -}) - -const DownloadProgressModals: React.FC = () => { - const classes = useStyles() - const { downloadsInProgress } = useFiles() - - if (downloadsInProgress.length === 0) { return null } - - if (downloadsInProgress.length > 0) { - return ( -
- {downloadsInProgress.map((downloadInProgress) => ( - - ))} -
- )} else { - return null - } -} - -export default DownloadProgressModals diff --git a/packages/files-ui/src/Components/Modules/FileBrowsers/BinFileBrowser.tsx b/packages/files-ui/src/Components/Modules/FileBrowsers/BinFileBrowser.tsx index c44141affd..295955e533 100644 --- a/packages/files-ui/src/Components/Modules/FileBrowsers/BinFileBrowser.tsx +++ b/packages/files-ui/src/Components/Modules/FileBrowsers/BinFileBrowser.tsx @@ -6,7 +6,7 @@ import DragAndDrop from "../../../Contexts/DnDContext" import { t } from "@lingui/macro" import { CONTENT_TYPES } from "../../../Utils/Constants" import { IFilesTableBrowserProps } from "../../Modules/FileBrowsers/types" -import { useHistory, useLocation, useToaster } from "@chainsafe/common-components" +import { useHistory, useLocation, useToasts } from "@chainsafe/common-components" import { extractFileBrowserPathFromURL, getPathWithFile, getUrlSafePathWithFile } from "../../../Utils/pathUtils" import { ROUTE_LINKS } from "../../FilesRoutes" import { FileBrowserContext } from "../../../Contexts/FileBrowserContext" @@ -16,7 +16,7 @@ import { parseFileContentResponse } from "../../../Utils/Helpers" const BinFileBrowser: React.FC = ({ controls = false }: IFileBrowserModuleProps) => { const { buckets, refreshBuckets } = useFiles() const { filesApiClient } = useFilesApi() - const { addToastMessage } = useToaster() + const { addToast } = useToasts() const [loadingCurrentPath, setLoadingCurrentPath] = useState(false) const [pathContents, setPathContents] = useState([]) const { pathname } = useLocation() @@ -69,20 +69,20 @@ const BinFileBrowser: React.FC = ({ controls = false }: refreshContents() refreshBuckets() const message = `${itemToDelete.isFolder ? t`Folder` : t`File`} ${t`deleted successfully`}` - addToastMessage({ - message: message, - appearance: "success" + addToast({ + title: message, + type: "success" }) return Promise.resolve() } catch (error) { const message = `${t`There was an error deleting this`} ${itemToDelete.isFolder ? t`folder` : t`file`}` - addToastMessage({ - message: message, - appearance: "error" + addToast({ + title: message, + type: "error" }) return Promise.reject() } - }, [addToastMessage, bucket, currentPath, pathContents, refreshContents, refreshBuckets, filesApiClient]) + }, [addToast, bucket, currentPath, pathContents, refreshContents, refreshBuckets, filesApiClient]) const deleteItems = useCallback(async (cids: string[]) => { await Promise.all( @@ -110,19 +110,19 @@ const BinFileBrowser: React.FC = ({ controls = false }: const message = `${itemToRestore.isFolder ? t`Folder` : t`File`} ${t`recovered successfully`}` - addToastMessage({ - message: message, - appearance: "success" + addToast({ + title: message, + type: "success" }) } catch (error) { const message = `${t`There was an error recovering this`} ${itemToRestore.isFolder ? t`folder` : t`file`}` - addToastMessage({ - message: message, - appearance: "error" + addToast({ + title: message, + type: "error" }) } })).finally(refreshContents) - }, [addToastMessage, pathContents, refreshContents, filesApiClient, bucket, buckets, currentPath]) + }, [addToast, pathContents, refreshContents, filesApiClient, bucket, buckets, currentPath]) const viewFolder = useCallback((cid: string) => { const fileSystemItem = pathContents.find(f => f.cid === cid) diff --git a/packages/files-ui/src/Components/Modules/FileBrowsers/CSFFileBrowser.tsx b/packages/files-ui/src/Components/Modules/FileBrowsers/CSFFileBrowser.tsx index 5dd24d422e..b14364eafb 100644 --- a/packages/files-ui/src/Components/Modules/FileBrowsers/CSFFileBrowser.tsx +++ b/packages/files-ui/src/Components/Modules/FileBrowsers/CSFFileBrowser.tsx @@ -1,5 +1,5 @@ import React, { useCallback, useEffect, useMemo, useState } from "react" -import { Crumb, useToaster, useHistory, useLocation } from "@chainsafe/common-components" +import { Crumb, useToasts, useHistory, useLocation } from "@chainsafe/common-components" import { useFiles, FileSystemItem } from "../../../Contexts/FilesContext" import { getArrayOfPaths, @@ -26,11 +26,10 @@ const CSFFileBrowser: React.FC = () => { const { downloadFile, uploadFiles, - uploadsInProgress, buckets } = useFiles() const { filesApiClient } = useFilesApi() - const { addToastMessage } = useToaster() + const { addToast } = useToasts() const [loadingCurrentPath, setLoadingCurrentPath] = useState(false) const [pathContents, setPathContents] = useState([]) const { redirect } = useHistory() @@ -96,24 +95,25 @@ const CSFFileBrowser: React.FC = () => { const message = `${ itemToDelete.isFolder ? t`Folder` : t`File` } ${t`deleted successfully`}` - addToastMessage({ - message: message, - appearance: "success" + const id = addToast({ + title: message, + type: "success" }) + console.log(id) } return Promise.resolve() } catch (error) { const message = `${t`There was an error deleting this`} ${ itemToDelete.isFolder ? t`folder` : t`file` }` - addToastMessage({ - message: message, - appearance: "error" + addToast({ + title: message, + type: "error" }) return Promise.reject() }} )).finally(refreshContents) - }, [addToastMessage, currentPath, pathContents, refreshContents, filesApiClient, bucket, buckets]) + }, [addToast, currentPath, pathContents, refreshContents, filesApiClient, bucket, buckets]) // Rename const renameItem = useCallback(async (cid: string, newName: string) => { @@ -142,21 +142,21 @@ const CSFFileBrowser: React.FC = () => { itemToMove.isFolder ? t`Folder` : t`File` } ${t`moved successfully`}` - addToastMessage({ - message: message, - appearance: "success" + addToast({ + title: message, + type: "success" }) } catch (error) { const message = `${t`There was an error moving this`} ${ itemToMove.isFolder ? t`folder` : t`file` }` - addToastMessage({ - message: message, - appearance: "error" + addToast({ + title: message, + type: "error" }) } })).finally(refreshContents) - }, [addToastMessage, pathContents, refreshContents, filesApiClient, bucket, currentPath]) + }, [addToast, pathContents, refreshContents, filesApiClient, bucket, currentPath]) const handleDownload = useCallback(async (cid: string) => { const itemToDownload = pathContents.find(item => item.cid === cid) @@ -185,16 +185,16 @@ const CSFFileBrowser: React.FC = () => { } } if (hasFolder) { - addToastMessage({ - message: "Folder uploads are not supported currently", - appearance: "error" + addToast({ + title: t`Folder uploads are not supported currently`, + type: "error" }) } else { uploadFiles(bucket, files, path) .then(() => refreshContents()) .catch(console.error) } - }, [addToastMessage, uploadFiles, bucket, refreshContents]) + }, [addToast, uploadFiles, bucket, refreshContents]) const viewFolder = useCallback((cid: string) => { const fileSystemItem = pathContents.find(f => f.cid === cid) @@ -232,7 +232,6 @@ const CSFFileBrowser: React.FC = () => { renameItem: renameItem, viewFolder, handleUploadOnDrop, - uploadsInProgress, loadingCurrentPath, showUploadsInTable: true, sourceFiles: pathContents, diff --git a/packages/files-ui/src/Components/Modules/FileBrowsers/SearchFileBrowser.tsx b/packages/files-ui/src/Components/Modules/FileBrowsers/SearchFileBrowser.tsx index ad8294333a..3fc8cd8c90 100644 --- a/packages/files-ui/src/Components/Modules/FileBrowsers/SearchFileBrowser.tsx +++ b/packages/files-ui/src/Components/Modules/FileBrowsers/SearchFileBrowser.tsx @@ -4,7 +4,7 @@ import { IFileBrowserModuleProps, IFilesTableBrowserProps } from "./types" import FilesList from "./views/FilesList" import { CONTENT_TYPES } from "../../../Utils/Constants" import DragAndDrop from "../../../Contexts/DnDContext" -import { useHistory, useLocation, useToaster } from "@chainsafe/common-components" +import { useHistory, useLocation, useToasts } from "@chainsafe/common-components" import { getArrayOfPaths, getParentPathFromFilePath, getURISafePathFromArray } from "../../../Utils/pathUtils" import { ROUTE_LINKS } from "../../FilesRoutes" import { t } from "@lingui/macro" @@ -18,7 +18,7 @@ const SearchFileBrowser: React.FC = ({ controls = false const searchTerm = useMemo(() => decodeURIComponent(pathname.split("/").slice(2)[0]), [pathname]) const { redirect } = useHistory() - const { addToastMessage } = useToaster() + const { addToast } = useToasts() const bucket = useMemo(() => buckets.find(b => b.type === "csf"), [buckets]) @@ -29,13 +29,13 @@ const SearchFileBrowser: React.FC = ({ controls = false const results = await filesApiClient.searchFiles({ bucket_id: bucket.id, query: searchString }) return results } catch (err) { - addToastMessage({ - message: t`There was an error getting search results`, - appearance: "error" + addToast({ + title: t`There was an error getting search results`, + type: "error" }) return Promise.reject(err) } - }, [addToastMessage, bucket, filesApiClient]) + }, [addToast, bucket, filesApiClient]) useEffect(() => { getSearchResults(searchTerm) diff --git a/packages/files-ui/src/Components/Modules/FileBrowsers/SharedFileBrowser.tsx b/packages/files-ui/src/Components/Modules/FileBrowsers/SharedFileBrowser.tsx index bc36e145a1..635953d884 100644 --- a/packages/files-ui/src/Components/Modules/FileBrowsers/SharedFileBrowser.tsx +++ b/packages/files-ui/src/Components/Modules/FileBrowsers/SharedFileBrowser.tsx @@ -1,5 +1,5 @@ import React, { useCallback, useEffect, useMemo, useState } from "react" -import { useToaster, useHistory, useLocation, Crumb } from "@chainsafe/common-components" +import { useToasts, useHistory, useLocation, Crumb } from "@chainsafe/common-components" import { getArrayOfPaths, getURISafePathFromArray, @@ -22,7 +22,7 @@ import FilesList from "./views/FilesList" const SharedFileBrowser = () => { const { downloadFile, uploadFiles, buckets, refreshBuckets, getStorageSummary } = useFiles() const { filesApiClient } = useFilesApi() - const { addToastMessage } = useToaster() + const { addToast } = useToasts() const [loadingCurrentPath, setLoadingCurrentPath] = useState(false) const [pathContents, setPathContents] = useState([]) const { redirect } = useHistory() @@ -113,22 +113,22 @@ const SharedFileBrowser = () => { const message = `${ itemToDelete.isFolder ? t`Folder` : t`File` } ${t`deleted successfully`}` - addToastMessage({ - message: message, - appearance: "success" + addToast({ + title: message, + type: "success" }) return Promise.resolve() } catch (error) { const message = `${t`There was an error deleting this`} ${ itemToDelete.isFolder ? t`folder` : t`file` }` - addToastMessage({ - message: message, - appearance: "error" + addToast({ + title: message, + type: "error" }) return Promise.reject() } - }, [addToastMessage, bucket, currentPath, pathContents, refreshContents, refreshBuckets, filesApiClient]) + }, [addToast, bucket, currentPath, pathContents, refreshContents, refreshBuckets, filesApiClient]) const deleteItems = useCallback(async (cids: string[]) => { await Promise.all( @@ -186,16 +186,16 @@ const SharedFileBrowser = () => { } } if (hasFolder) { - addToastMessage({ - message: "Folder uploads are not supported currently", - appearance: "error" + addToast({ + title: t`Folder uploads are not supported currently`, + type: "error" }) } else { uploadFiles(bucket, files, path) .then(() => refreshContents()) .catch(console.error) } - }, [addToastMessage, uploadFiles, bucket, refreshContents]) + }, [addToast, uploadFiles, bucket, refreshContents]) const bulkOperations: IBulkOperations = useMemo(() => ({ [CONTENT_TYPES.Directory]: ["download", "move", "delete"], diff --git a/packages/files-ui/src/Components/Modules/FileBrowsers/types.ts b/packages/files-ui/src/Components/Modules/FileBrowsers/types.ts index 7f77eeaeef..889f52e713 100644 --- a/packages/files-ui/src/Components/Modules/FileBrowsers/types.ts +++ b/packages/files-ui/src/Components/Modules/FileBrowsers/types.ts @@ -1,5 +1,5 @@ import { Crumb } from "@chainsafe/common-components" -import { BucketType, FileSystemItem, UploadProgress } from "../../../Contexts/FilesContext" +import { BucketType, FileSystemItem } from "../../../Contexts/FilesContext" export type SharedFolderUserPermission = "read" | "write" export type SharedFolderModalMode = "create" | "edit" @@ -71,7 +71,6 @@ export interface IFilesTableBrowserProps currentPath: string bucketType: BucketType loadingCurrentPath: boolean - uploadsInProgress?: UploadProgress[] showUploadsInTable: boolean sourceFiles: FileSystemItem[] crumbs: Crumb[] | undefined diff --git a/packages/files-ui/src/Components/Modules/FileBrowsers/views/FilesList.tsx b/packages/files-ui/src/Components/Modules/FileBrowsers/views/FilesList.tsx index 6e67f88dea..e4ad864e98 100644 --- a/packages/files-ui/src/Components/Modules/FileBrowsers/views/FilesList.tsx +++ b/packages/files-ui/src/Components/Modules/FileBrowsers/views/FilesList.tsx @@ -6,13 +6,11 @@ import { SortDirection, Table, TableBody, - TableCell, TableHead, TableHeadCell, TableRow, Typography, Breadcrumb, - CircularProgressBar, Button, PlusCircleIcon, UploadIcon, @@ -328,8 +326,6 @@ const FilesList = ({ isShared = false }: Props) => { currentPath, refreshContents, loadingCurrentPath, - uploadsInProgress, - showUploadsInTable, allowDropUpload, itemOperations, getPath, @@ -841,7 +837,7 @@ const FilesList = ({ isShared = false }: Props) => { One sec, getting files ready…
- {(desktop && items.length === 0) || (!desktop && items.length === 0 && uploadsInProgress?.length === 0) + {!items.length ? (
{ )} - {!desktop && showUploadsInTable && - uploadsInProgress?.filter( - (uploadInProgress) => - uploadInProgress.path === currentPath && - !uploadInProgress.complete && - !uploadInProgress.error - ) - .map((uploadInProgress) => ( - - - - - - {uploadInProgress.noOfFiles > 1 - ? t`Uploading ${uploadInProgress.noOfFiles} files` - : uploadInProgress.fileName} - - - - ))} {items.map((file, index) => ( - + Download @@ -279,16 +279,18 @@ const FilePreviewModal = ({ file, nextFile, previousFile, closePreview, filePath {name} } options={menuItems} style={{ @@ -303,6 +305,7 @@ const FilePreviewModal = ({ file, nextFile, previousFile, closePreview, filePath flexDirection="row" alignItems="stretch" className={classes.previewContainer} + data-cy="modal-container-preview" > {desktop && ( {previousFile && ( )} @@ -333,6 +337,7 @@ const FilePreviewModal = ({ file, nextFile, previousFile, closePreview, filePath
{isDownloading && (
@@ -366,6 +371,7 @@ const FilePreviewModal = ({ file, nextFile, previousFile, closePreview, filePath File format not supported. @@ -373,6 +379,7 @@ const FilePreviewModal = ({ file, nextFile, previousFile, closePreview, filePath className={classes.downloadButton} variant="outline" onClick={handleDownload} + data-cy="button-download-unsupported-file" > Download @@ -397,6 +404,7 @@ const FilePreviewModal = ({ file, nextFile, previousFile, closePreview, filePath diff --git a/packages/files-ui/src/Components/Modules/LoginModule/InitialScreen.tsx b/packages/files-ui/src/Components/Modules/LoginModule/InitialScreen.tsx index f9cfe992c9..0da2e6c486 100644 --- a/packages/files-ui/src/Components/Modules/LoginModule/InitialScreen.tsx +++ b/packages/files-ui/src/Components/Modules/LoginModule/InitialScreen.tsx @@ -65,7 +65,7 @@ const useStyles = makeStyles( fontWeight: 400 }, [breakpoints.up("md")]: { - padding: `${constants.generalUnit * 30}px ${constants.generalUnit * 8}px`, + padding: `${constants.generalUnit * 20}px ${constants.generalUnit * 8}px`, "& > *": { paddingBottom: `${constants.generalUnit * 5}px` } @@ -208,6 +208,7 @@ const InitialScreen = ({ className }: IInitialScreen) => { } catch (error) { let errorMessage = t`There was an error authenticating` console.log(error) + if (Array.isArray(error) && error[0]) { if ( error[0].type === "signature" && @@ -218,13 +219,16 @@ const InitialScreen = ({ className }: IInitialScreen) => { sure you have activated your wallet.` } } + // WalletConnect be sassy - if (error?.message === "Just nope" || error?.code === 4001) { + if ((error instanceof Error && error.message === "Just nope") || ((error as any).code === 4001)) { errorMessage = t`Failed to get signature` } - if (error?.message === "user closed popup") { + + if (error instanceof Error && error?.message === "user closed popup") { errorMessage = t`The authentication popup was closed` } + setError(errorMessage) } setIsConnecting(false) diff --git a/packages/files-ui/src/Components/Modules/PreviewRenderers/ImagePreview.tsx b/packages/files-ui/src/Components/Modules/PreviewRenderers/ImagePreview.tsx index eb8820ac66..997a693218 100644 --- a/packages/files-ui/src/Components/Modules/PreviewRenderers/ImagePreview.tsx +++ b/packages/files-ui/src/Components/Modules/PreviewRenderers/ImagePreview.tsx @@ -71,13 +71,22 @@ const ImagePreview: React.FC = ({ contents }) => { <> {desktop && (
- - -
diff --git a/packages/files-ui/src/Components/Modules/SearchModule.tsx b/packages/files-ui/src/Components/Modules/SearchModule.tsx index 3ec537a366..2a87556cd6 100644 --- a/packages/files-ui/src/Components/Modules/SearchModule.tsx +++ b/packages/files-ui/src/Components/Modules/SearchModule.tsx @@ -12,7 +12,7 @@ import { SearchBar, Typography, useHistory, - useToaster + useToasts } from "@chainsafe/common-components" import { useState } from "react" import clsx from "clsx" @@ -160,7 +160,7 @@ const SearchModule: React.FC = ({ const [searchResults, setSearchResults] = useState<{results: SearchEntry[]; query: string} | undefined>(undefined) const ref = useRef(null) const { buckets } = useFiles() - const { addToastMessage } = useToaster() + const { addToast } = useToasts() const { filesApiClient } = useFilesApi() const bucket = useMemo(() => buckets.find(b => b.type === "csf"), [buckets]) @@ -171,13 +171,13 @@ const SearchModule: React.FC = ({ const results = await filesApiClient.searchFiles({ bucket_id: bucket.id, query: searchString }) return results } catch (err) { - addToastMessage({ - message: t`There was an error getting search results`, - appearance: "error" + addToast({ + title: t`There was an error getting search results`, + type: "error" }) return Promise.reject(err) } - }, [addToastMessage, bucket, filesApiClient]) + }, [addToast, bucket, filesApiClient]) const { redirect } = useHistory() diff --git a/packages/files-ui/src/Components/Modules/Settings/ProfileTab/index.tsx b/packages/files-ui/src/Components/Modules/Settings/ProfileTab/index.tsx index c30514895e..560fb26332 100644 --- a/packages/files-ui/src/Components/Modules/Settings/ProfileTab/index.tsx +++ b/packages/files-ui/src/Components/Modules/Settings/ProfileTab/index.tsx @@ -5,7 +5,7 @@ import { Grid, Button, Typography, - useToaster, + useToasts, RadioInput, TextInput, CheckIcon @@ -187,7 +187,7 @@ const profileValidation = yup.object().shape({ const ProfileView = () => { const { themeKey, setTheme } = useThemeSwitcher() - const { addToastMessage } = useToaster() + const { addToast } = useToasts() const { profile, updateProfile, addUsername, lookupOnUsername } = useUser() const { publicKey } = useThresholdKey() const [updatingProfile, setUpdatingProfile] = useState(false) @@ -214,10 +214,10 @@ const ProfileView = () => { try { setUpdatingProfile(true) await updateProfile(firstName, lastName) - addToastMessage({ message: t`Profile updated` }) + addToast({ title: t`Profile updated`, type: "success" }) setUpdatingProfile(false) } catch (error) { - addToastMessage({ message: error, appearance: "error" }) + addToast({ title: error, type: "error" }) setUpdatingProfile(false) } } @@ -305,7 +305,7 @@ const ProfileView = () => { setUsernameData({ ...usernameData, loading: true }) addUsername(username) .then(() => { - addToastMessage({ message: t`Username set successfully` }) + addToast({ title: t`Username set successfully`, type: "success" }) }) .catch((error) => { setUsernameData({ diff --git a/packages/files-ui/src/Components/Modules/Settings/SubscriptionTab/AddCardModal.tsx b/packages/files-ui/src/Components/Modules/Settings/SubscriptionTab/AddCardModal.tsx index 32d0ea0576..48eebb700e 100644 --- a/packages/files-ui/src/Components/Modules/Settings/SubscriptionTab/AddCardModal.tsx +++ b/packages/files-ui/src/Components/Modules/Settings/SubscriptionTab/AddCardModal.tsx @@ -1,4 +1,4 @@ -import { Button, Grid, TextInput, Typography, useToaster } from "@chainsafe/common-components" +import { Button, Grid, TextInput, Typography, useToasts } from "@chainsafe/common-components" import { createStyles, makeStyles } from "@chainsafe/common-theme" import React, { useState, useCallback } from "react" import { CSFTheme } from "../../../../Themes/types" @@ -76,7 +76,7 @@ const CreateFolderModal = ({ isModalOpen, onClose }: ICreateFolderModalProps) => const [error, setError] = useState("") const [loading, setLoading] = useState(false) const { addCard, getCardTokenFromStripe } = useBilling() - const { addToastMessage } = useToaster() + const { addToast } = useToasts() const onCloseModal = useCallback(() => { setCardInputs({ cardNumber: "", cardExpiry: "", cardCvc: "" }) @@ -106,8 +106,9 @@ const CreateFolderModal = ({ isModalOpen, onClose }: ICreateFolderModalProps) => addCard(resp.data.id) .then(() => { onCloseModal() - addToastMessage({ - message: t`Card added successfully` + addToast({ + title: t`Card added successfully`, + type: "success" }) }).catch((e) => { setError(t`Something went wrong, please try again`) @@ -118,7 +119,7 @@ const CreateFolderModal = ({ isModalOpen, onClose }: ICreateFolderModalProps) => setError(t`Card details could not be validated`) setLoading(false) }) - }, [addToastMessage, cardInputs, cardName, onCloseModal, getCardTokenFromStripe, addCard]) + }, [cardName, cardInputs, getCardTokenFromStripe, addCard, onCloseModal, addToast]) return ( { - return createStyles({ - boxContainer: { - backgroundColor: palette.additional["gray"][3], - margin: `${constants.generalUnit}px 0`, - border: `1px solid ${palette.additional["gray"][6]}`, - padding: constants.generalUnit * 2, - borderRadius: 4, - [breakpoints.down("md")]: { - margin: 0 - } - }, - appearBox: { - animation: `$slideLeft ${animation.translate}ms`, - [breakpoints.down("md")]: { - animation: `$slideUp ${animation.translate}ms` - } - }, - "@keyframes slideLeft": { - from: { transform: "translate(100%)" }, - to: { transform: "translate(0)" } - }, - "@keyframes slideUp": { - from: { transform: "translate(0, 100%)" }, - to: { transform: "translate(0, 0)" } - }, - contentContainer: { - display: "flex", - alignItems: "center", - "& svg": { - fill: constants.uploadAlert.icon - } - }, - marginBottom: { - marginBottom: constants.generalUnit - }, - icon: { - marginRight: constants.generalUnit * 2, - fill: constants.fileSystemItemRow.menuIcon - } - }) - } -) - -interface ITransferToast { - transferInProgress: TransferProgress -} - -const TransferToast: React.FC = ({ transferInProgress }) => { - const { complete, error, progress, errorMessage, operation } = transferInProgress - const classes = useStyles() - - return ( - <> -
- { !!error && (
- - - {errorMessage} - -
) } - { !complete && !error && (
- - - Sharing your file ({operation === "Download" ? t`Downloading` : t`Encrypting & uploading` }) - - - -
) } - { complete && !error && (
- - - Transfer complete - -
) } -
- - ) -} - -export default TransferToast diff --git a/packages/files-ui/src/Components/Modules/TransferProgressToast/index.tsx b/packages/files-ui/src/Components/Modules/TransferProgressToast/index.tsx deleted file mode 100644 index 134a9ac986..0000000000 --- a/packages/files-ui/src/Components/Modules/TransferProgressToast/index.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import React from "react" -import { createStyles, ITheme, makeStyles } from "@chainsafe/common-theme" -import { useFiles } from "../../../Contexts/FilesContext" -import TransferToast from "./TransferToast" - -const useStyles = makeStyles(({ constants, zIndex, breakpoints }: ITheme) => { - const WIDTH = 400 - return createStyles({ - root: { - margin: constants.generalUnit * 3, - position: "fixed", - right: 0, - bottom: 0, - borderRadius: 4, - padding: constants.generalUnit, - width: WIDTH, - zIndex: zIndex?.layer1, - [breakpoints.down("md")]: { - margin: constants.generalUnit, - width: `calc(100% - ${constants.generalUnit * 2}px)` - } - } - }) -}) - -const TransferProgressToasts: React.FC = () => { - const classes = useStyles() - const { transfersInProgress } = useFiles() - - if (transfersInProgress.length === 0) { return null } - return (
- {transfersInProgress.map( - (transferInProgress) => - - )} -
- ) -} - -export default TransferProgressToasts diff --git a/packages/files-ui/src/Components/Modules/UploadProgressToast/UploadToast.tsx b/packages/files-ui/src/Components/Modules/UploadProgressToast/UploadToast.tsx deleted file mode 100644 index b2c0be46c7..0000000000 --- a/packages/files-ui/src/Components/Modules/UploadProgressToast/UploadToast.tsx +++ /dev/null @@ -1,108 +0,0 @@ -import React from "react" -import { createStyles, makeStyles } from "@chainsafe/common-theme" -import { UploadProgress } from "../../../Contexts/FilesContext" -import { ProgressBar, Typography, CheckCircleIcon, CloseCircleIcon } from "@chainsafe/common-components" -import clsx from "clsx" -import { plural, Trans } from "@lingui/macro" -import { CSFTheme } from "../../../Themes/types" - -const useStyles = makeStyles( - ({ constants, palette, animation, breakpoints }: CSFTheme) => { - return createStyles({ - boxContainer: { - backgroundColor: palette.additional["gray"][3], - margin: `${constants.generalUnit}px 0`, - border: `1px solid ${palette.additional["gray"][6]}`, - padding: constants.generalUnit * 2, - borderRadius: 4, - [breakpoints.down("md")]: { - margin: 0 - } - }, - appearBox: { - animation: `$slideLeft ${animation.translate}ms`, - [breakpoints.down("md")]: { - animation: `$slideUp ${animation.translate}ms` - } - }, - "@keyframes slideLeft": { - from: { transform: "translate(100%)" }, - to: { transform: "translate(0)" } - }, - "@keyframes slideUp": { - from: { transform: "translate(0, 100%)" }, - to: { transform: "translate(0, 0)" } - }, - contentContainer: { - display: "flex", - alignItems: "center", - "& svg": { - fill: constants.uploadAlert.icon - } - }, - marginBottom: { - marginBottom: constants.generalUnit - }, - icon: { - marginRight: constants.generalUnit * 2, - fill: constants.fileSystemItemRow.menuIcon - } - }) - } -) - -interface IUploadToast { - uploadInProgress: UploadProgress -} - -const UploadToast: React.FC = (props) => { - const { uploadInProgress } = props - const { complete, error, noOfFiles, progress, errorMessage } = uploadInProgress - const classes = useStyles() - - return ( - <> -
- {complete ? ( -
- - - Upload complete - -
- ) : error ? ( -
- - - {errorMessage} - -
- ) : ( -
- {plural(noOfFiles, { - one: `Uploading and encrypting ${noOfFiles} file`, - other: `Uploading and encrypting ${noOfFiles} files` - })} - -
- )} -
- - ) -} - -export default UploadToast diff --git a/packages/files-ui/src/Components/Modules/UploadProgressToast/index.tsx b/packages/files-ui/src/Components/Modules/UploadProgressToast/index.tsx deleted file mode 100644 index 9a2c07beb2..0000000000 --- a/packages/files-ui/src/Components/Modules/UploadProgressToast/index.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import React from "react" -import { - createStyles, - ITheme, - makeStyles, - useThemeSwitcher -} from "@chainsafe/common-theme" -import { useFiles } from "../../../Contexts/FilesContext" -import UploadToast from "./UploadToast" - -const useStyles = makeStyles(({ constants, zIndex, breakpoints }: ITheme) => { - const WIDTH = 400 - return createStyles({ - root: { - margin: constants.generalUnit * 3, - position: "fixed", - right: 0, - bottom: 0, - borderRadius: 4, - padding: constants.generalUnit, - width: WIDTH, - zIndex: zIndex?.layer1, - [breakpoints.down("md")]: { - margin: constants.generalUnit, - width: `calc(100% - ${constants.generalUnit * 2}px)` - } - } - }) -}) - -const UploadProgressModals: React.FC = () => { - const classes = useStyles() - const { uploadsInProgress } = useFiles() - const { desktop } = useThemeSwitcher() - - if (uploadsInProgress.length === 0) { return null } - return (
- {uploadsInProgress.map( - (uploadInProgress) => - (desktop || uploadInProgress.complete || uploadInProgress.error) && ( - - ) - )} -
- ) -} - -export default UploadProgressModals diff --git a/packages/files-ui/src/Components/SurveyBanner.tsx b/packages/files-ui/src/Components/SurveyBanner.tsx index fc0ccceb21..ea2cc52334 100644 --- a/packages/files-ui/src/Components/SurveyBanner.tsx +++ b/packages/files-ui/src/Components/SurveyBanner.tsx @@ -18,7 +18,8 @@ const useStyles = makeStyles( paddingLeft: constants.generalUnit * 2, marginTop: constants.generalUnit, borderRadius: 2, - display: "flex" + display: "flex", + alignItems: "center" }, banner: { color: constants.surveyBanner.color, @@ -34,21 +35,16 @@ const useStyles = makeStyles( }, crossIconButton: { cursor: "pointer", - - "& span": { - display: "flex", - alignContent: "center", - justifyContent: "center", - height: "100%", - fontSize: 12, - marginRight: constants.generalUnit - }, - "& svg": { - fill: constants.surveyBanner.color - } + height: constants.generalUnit * 2 }, spacer: { flex: 1 + }, + icon: { + fontSize: 12, + "& svg": { + fill: constants.surveyBanner.color + } } }) }) @@ -77,13 +73,13 @@ const SurveyBanner = ({ onHide }: Props) => { variant="body1" className={classes.banner}> - Help us improve File in less than 1 minute. + Want to help shape this product? - Continue + Schedule a 15 min call
@@ -91,7 +87,10 @@ const SurveyBanner = ({ onHide }: Props) => { className={classes.crossIconButton} onClick={onClose} > - +
)} diff --git a/packages/files-ui/src/Contexts/FileBrowserContext.tsx b/packages/files-ui/src/Contexts/FileBrowserContext.tsx index 4252705ebb..77c979342a 100644 --- a/packages/files-ui/src/Contexts/FileBrowserContext.tsx +++ b/packages/files-ui/src/Contexts/FileBrowserContext.tsx @@ -1,8 +1,7 @@ import { Crumb } from "@chainsafe/common-components" import React, { useContext } from "react" import { FileOperation, IBulkOperations, IFileBrowserModuleProps } from "../Components/Modules/FileBrowsers/types" -import { BucketKeyPermission, FileSystemItem, UploadProgress } from "./FilesContext" - +import { BucketKeyPermission, FileSystemItem } from "./FilesContext" interface FileBrowserContext extends IFileBrowserModuleProps { bucket?: BucketKeyPermission @@ -25,7 +24,6 @@ interface FileBrowserContext extends IFileBrowserModuleProps { refreshContents?: () => void currentPath: string loadingCurrentPath: boolean - uploadsInProgress?: UploadProgress[] showUploadsInTable: boolean sourceFiles: FileSystemItem[] crumbs: Crumb[] | undefined diff --git a/packages/files-ui/src/Contexts/FilesContext.tsx b/packages/files-ui/src/Contexts/FilesContext.tsx index 770304f94f..189f776cd2 100644 --- a/packages/files-ui/src/Contexts/FilesContext.tsx +++ b/packages/files-ui/src/Contexts/FilesContext.tsx @@ -8,62 +8,24 @@ import { BucketSummaryResponse, LookupUser } from "@chainsafe/files-api-client" -import React, { useCallback, useEffect, useReducer } from "react" +import React, { useCallback, useEffect } from "react" import { useState } from "react" import { decryptFile, encryptFile } from "../Utils/encryption" -import { v4 as uuidv4 } from "uuid" -import { useToaster } from "@chainsafe/common-components" -import { downloadsInProgressReducer, transfersInProgressReducer, uploadsInProgressReducer } from "./FilesReducers" +import { ToastParams, useToasts } from "@chainsafe/common-components" import axios, { CancelToken } from "axios" -import { t } from "@lingui/macro" +import { plural, t } from "@lingui/macro" import { parseFileContentResponse, readFileAsync } from "../Utils/Helpers" import { useBeforeunload } from "react-beforeunload" import { useThresholdKey } from "./ThresholdKeyContext" import { useFilesApi } from "./FilesApiContext" import { useUser } from "./UserContext" import { getPathWithFile, getRelativePath } from "../Utils/pathUtils" -import UploadProgressToasts from "../Components/Modules/UploadProgressToast" -import DownloadProgressToasts from "../Components/Modules/DownloadProgressToast" -import TransferProgressToasts from "../Components/Modules/TransferProgressToast" import { Zippable, zipSync } from "fflate" type FilesContextProps = { children: React.ReactNode | React.ReactNode[] } -export type UploadProgress = { - id: string - fileName: string - progress: number - error: boolean - errorMessage?: string - complete: boolean - noOfFiles: number - path: string -} - -export type DownloadProgress = { - id: string - fileName: string - progress: number - currentFileNumber?: number - totalFileNumber: number - error: boolean - errorMessage?: string - complete: boolean -} - -export type TransferOperation = "Download" | "Encrypt & Upload" - -export type TransferProgress = { - id: string - operation: TransferOperation - progress: number - error: boolean - errorMessage?: string - complete: boolean -} - export type SharedFolderUser = { uuid: string pubKey: string @@ -95,8 +57,6 @@ export type BucketKeyPermission = Omit Promise @@ -123,7 +83,6 @@ type FilesContext = { destinationBucket: BucketKeyPermission, deleteFromSource?: boolean ) => Promise - transfersInProgress: TransferProgress[] downloadMultipleFiles: (fileItems: FileSystemItem[], currentPath: string, bucketId: string) => void } @@ -136,7 +95,6 @@ interface FileSystemItemPath extends FileSystemItem { path: string } -const REMOVE_TOAST_DELAY = 5000 const MAX_FILE_SIZE = 2 * 1024 ** 3 const FilesContext = React.createContext(undefined) @@ -152,7 +110,7 @@ const FilesProvider = ({ children }: FilesContextProps) => { validateMasterPassword } = useFilesApi() const { publicKey, encryptForPublicKey, decryptMessageWithThresholdKey } = useThresholdKey() - const { addToastMessage } = useToaster() + const { addToast, updateToast } = useToasts() const [personalEncryptionKey, setPersonalEncryptionKey] = useState() const [buckets, setBuckets] = useState([]) const [storageSummary, setStorageSummary] = useState() @@ -321,17 +279,17 @@ const FilesProvider = ({ children }: FilesContextProps) => { secureThresholdKeyAccount(encryptedKey) } - const [uploadsInProgress, dispatchUploadsInProgress] = useReducer(uploadsInProgressReducer, []) - const [downloadsInProgress, dispatchDownloadsInProgress] = useReducer(downloadsInProgressReducer, []) - const [transfersInProgress, dispatchTransfersInProgress] = useReducer(transfersInProgressReducer, []) + const [uploadsInProgress, setUploadsInProgress] = useState(false) + const [downloadsInProgress, setDownloadsInProgress] = useState(false) + const [transfersInProgress, setTransfersInProgress] = useState(false) const [closeIntercept, setCloseIntercept] = useState() useEffect(() => { - if (downloadsInProgress.length > 0) { + if (downloadsInProgress) { setCloseIntercept("Download in progress, are you sure?") - } else if (uploadsInProgress.length > 0) { + } else if (uploadsInProgress) { setCloseIntercept("Upload in progress, are you sure?") - } else if (transfersInProgress.length > 0) { + } else if (transfersInProgress) { setCloseIntercept("Transfer is in progress, are you sure?") } else if (closeIntercept !== undefined) { setCloseIntercept(undefined) @@ -348,7 +306,9 @@ const FilesProvider = ({ children }: FilesContextProps) => { bucket: BucketKeyPermission, files: File[], path: string, - onUploadProgress?: (progressEvent: ProgressEvent) => void) => { + onUploadProgress?: (progressEvent: ProgressEvent) => void, + cancelToken?: CancelToken + ) => { const key = bucket.encryptionKey @@ -375,78 +335,91 @@ const FilesProvider = ({ children }: FilesContextProps) => { path, undefined, 1, - undefined, + cancelToken, undefined, onUploadProgress ) }, [filesApiClient]) const uploadFiles = useCallback(async (bucket: BucketKeyPermission, files: File[], path: string) => { - const id = uuidv4() - const uploadProgress: UploadProgress = { - id, - fileName: files[0].name, // TODO: Do we need this? - complete: false, - error: false, - noOfFiles: files.length, - progress: 0, - path - } - dispatchUploadsInProgress({ type: "add", payload: uploadProgress }) const hasOversizedFile = files.some(file => file.size > MAX_FILE_SIZE) - if (hasOversizedFile) { - addToastMessage({ - message: t`We can't encrypt files larger than 2GB. Some items will not be uploaded`, - appearance: "error" + addToast({ + title: t`We can't encrypt files larger than 2GB. Some items will not be uploaded`, + type: "error" }) } + const cancelSource = axios.CancelToken.source() + const cancelToken = cancelSource.token + + const toastParams: ToastParams = { + title: plural(files.length, { + one: `Encrypting and uploading ${files.length} file`, + other: `Encrypting and uploading ${files.length} files` + }) as string, + type: "success", + progress: 0, + onProgressCancel: cancelSource.cancel, + isClosable: false, + testId: "upload-status" + } + + const toastId = addToast(toastParams) + setUploadsInProgress(true) + try { await encryptAndUploadFiles( bucket, files, path, (progressEvent: { loaded: number; total: number }) => { - dispatchUploadsInProgress({ - type: "progress", - payload: { - id, - progress: Math.ceil( - (progressEvent.loaded / progressEvent.total) * 100 - ) - } + updateToast(toastId, { + ...toastParams, + progress: Math.ceil( + (progressEvent.loaded / progressEvent.total) * 100 + ) }) - }) + }, + cancelToken + ) + setUploadsInProgress(false) await refreshBuckets() // setting complete - dispatchUploadsInProgress({ type: "complete", payload: { id } }) - setTimeout(() => { - dispatchUploadsInProgress({ type: "remove", payload: { id } }) - }, REMOVE_TOAST_DELAY) - + updateToast(toastId, { + ...toastParams, + title: "Upload complete", + progress: undefined, + onProgressCancel: undefined, + isClosable: true + }, true) return Promise.resolve() - } catch (error) { - console.error(error) + } catch (error: any) { + setUploadsInProgress(false) // setting error let errorMessage = t`Something went wrong. We couldn't upload your file` + // uploads cancelled through button + if (axios.isCancel(error)) { + errorMessage = t`Uploads cancelled` + } // we will need a method to parse server errors if (Array.isArray(error) && error[0].message.includes("conflict")) { errorMessage = t`A file with the same name already exists` } - dispatchUploadsInProgress({ + updateToast(toastId, { + ...toastParams, + title: errorMessage, type: "error", - payload: { id, errorMessage } - }) - setTimeout(() => { - dispatchUploadsInProgress({ type: "remove", payload: { id } }) - }, REMOVE_TOAST_DELAY) + progress: undefined, + onProgressCancel: undefined, + isClosable: true + }, true) return Promise.reject(error) } - }, [addToastMessage, refreshBuckets, encryptAndUploadFiles]) + }, [addToast, updateToast, refreshBuckets, encryptAndUploadFiles]) const getFileContent = useCallback(async ( bucketId: string, @@ -490,7 +463,7 @@ const FilesProvider = ({ children }: FilesContextProps) => { } } catch (error) { if (axios.isCancel(error)) { - return Promise.reject() + return Promise.reject(error) } else { console.error(error) return Promise.reject(error) @@ -520,128 +493,137 @@ const FilesProvider = ({ children }: FilesContextProps) => { }, [filesApiClient]) const downloadMultipleFiles = useCallback((itemsToDownload: FileSystemItem[], currentPath: string, bucketId: string) => { + setDownloadsInProgress(true) getFileList(itemsToDownload, currentPath, bucketId) .then(async (fullStructure) => { const zipList: Zippable = {} - const toastId = uuidv4() const totalFileSize = fullStructure.reduce((sum, item) => sum + item.size, 0) - const downloadProgress: DownloadProgress = { - id: toastId, - currentFileNumber: 1, - totalFileNumber: fullStructure.length, - fileName: fullStructure[0]?.name, - complete: false, - error: false, - progress: 0 + const totalFileNumber = fullStructure.length + + const cancelSource = axios.CancelToken.source() + const cancelToken = cancelSource.token + const toastParams: ToastParams = { + title: plural(fullStructure.length, { + one: `Downloading ${fullStructure.length} file`, + other: `Downloading ${fullStructure.length} files` + }) as string, + type: "success", + progress: 0, + onProgressCancel: cancelSource.cancel, + isClosable: false } - dispatchDownloadsInProgress({ type: "add", payload: downloadProgress }) + const toastId = addToast(toastParams) // if there are no file to download return early and show an error - if (!fullStructure.length) { - dispatchDownloadsInProgress({ + if (!totalFileNumber) { + updateToast(toastId, { + title: t`No file to download.`, type: "error", - payload: { - id: toastId, - errorMessage: t`No file to download.` - } - }) - - setTimeout(() => { - dispatchDownloadsInProgress({ - type: "remove", - payload: { id: toastId } - }) - }, REMOVE_TOAST_DELAY) + progress: undefined + }, true) return } - // Idea for parrallel download https://glebbahmutov.com/blog/run-n-promises-in-parallel/ - // we need to use a reduce here because forEach doesn't wait for the Promise to resolve - await fullStructure.reduce(async (totalDownloaded: Promise, item: FileSystemItemPath, index: number): Promise => { - const file = await getFileContent(bucketId, { - cid: item.cid, - file: item, - path: getPathWithFile(item.path, item.name), - onDownloadProgress: async (progressEvent) => { - dispatchDownloadsInProgress({ - type: "progress", - payload: { - id: toastId, - fileName: item.name, - currentFileNumber: index + 1, + try { + // Idea for parallel download https://glebbahmutov.com/blog/run-n-promises-in-parallel/ + // we need to use a reduce here because forEach doesn't wait for the Promise to resolve + await fullStructure.reduce(async (totalDownloaded: Promise, item: FileSystemItemPath, index: number): Promise => { + const file = await getFileContent(bucketId, { + cid: item.cid, + file: item, + path: getPathWithFile(item.path, item.name), + cancelToken, + onDownloadProgress: async (progressEvent) => { + const currentFileNumber = index + 1 + const fileProgress = totalFileNumber > 1 && `${currentFileNumber}/${totalFileNumber}` + updateToast(toastId, { + ...toastParams, + title: t`Downloading ${fileProgress} - ${item.name}`, progress: Math.ceil( ((await totalDownloaded + progressEvent.loaded) / totalFileSize) * 100 ) - } - }) + }) + } + }) + + if(file) { + const fileArrayBuffer = await file.arrayBuffer() + const fullPath = getPathWithFile(item.path, item.name) + const relativeFilePath = getRelativePath(fullPath, currentPath) + zipList[relativeFilePath] = new Uint8Array(fileArrayBuffer) } - }) - if(file) { - const fileArrayBuffer = await file.arrayBuffer() - const fullPath = getPathWithFile(item.path, item.name) - const relativeFilePath = getRelativePath(fullPath, currentPath) - zipList[relativeFilePath] = new Uint8Array(fileArrayBuffer) + return await totalDownloaded + item.size + }, Promise.resolve(0)) + + // level 0 means without compression + const zipped = zipSync(zipList, { level: 0 }) + + if (!zipped) return + + const link = document.createElement("a") + link.href = URL.createObjectURL(new Blob([zipped])) + link.download = "archive.zip" + link.click() + setDownloadsInProgress(false) + + updateToast(toastId, { + title: t`Download Complete`, + type: "success", + progress: undefined, + onProgressCancel: undefined, + isClosable: true + }, true) + URL.revokeObjectURL(link.href) + } catch (error: any) { + let errorMessage = t`Downloads failed` + if (axios.isCancel(error)) { + errorMessage = t`Downloads cancelled` } - - return await totalDownloaded + item.size - }, Promise.resolve(0)) - - // level 0 means without compression - const zipped = zipSync(zipList, { level: 0 }) - - if (!zipped) return - - const link = document.createElement("a") - link.href = URL.createObjectURL(new Blob([zipped])) - link.download = "archive.zip" - link.click() - - dispatchDownloadsInProgress({ - type: "complete", - payload: { id: toastId } - }) - - URL.revokeObjectURL(link.href) - - setTimeout(() => { - dispatchDownloadsInProgress({ - type: "remove", - payload: { id: toastId } - }) - }, REMOVE_TOAST_DELAY) + setDownloadsInProgress(false) + updateToast(toastId, { + title: errorMessage, + type: "error", + progress: undefined, + onProgressCancel: undefined, + isClosable: true + }, true) + } }) - .catch(console.error) - }, [getFileContent, getFileList]) + .catch((error: any) => { + console.error(error) + setDownloadsInProgress(false) + }) + }, [getFileContent, getFileList, addToast, updateToast]) const downloadFile = useCallback(async (bucketId: string, itemToDownload: FileSystemItem, path: string) => { - const toastId = uuidv4() + const cancelSource = axios.CancelToken.source() + const cancelToken = cancelSource.token + + const toastParams: ToastParams = { + title: t`Downloading file - ${itemToDownload.name}`, + type: "success", + progress: 0, + isClosable: false, + onProgressCancel: cancelSource.cancel + } + const toastId = addToast(toastParams) + setDownloadsInProgress(true) + try { - const downloadProgress: DownloadProgress = { - id: toastId, - fileName: itemToDownload.name, - totalFileNumber: 1, - complete: false, - error: false, - progress: 0 - } - dispatchDownloadsInProgress({ type: "add", payload: downloadProgress }) const result = await getFileContent(bucketId, { cid: itemToDownload.cid, file: itemToDownload, path: getPathWithFile(path, itemToDownload.name), + cancelToken, onDownloadProgress: (progressEvent) => { - dispatchDownloadsInProgress({ - type: "progress", - payload: { - id: toastId, - fileName: itemToDownload.name, - progress: Math.ceil( - (progressEvent.loaded / itemToDownload.size) * 100 - ) - } + updateToast(toastId, { + ...toastParams, + progress: Math.ceil( + (progressEvent.loaded / itemToDownload.size) * 100 + ) }) } }) @@ -650,23 +632,33 @@ const FilesProvider = ({ children }: FilesContextProps) => { link.href = URL.createObjectURL(result) link.download = itemToDownload?.name || "file" link.click() - dispatchDownloadsInProgress({ - type: "complete", - payload: { id: toastId } - }) + updateToast(toastId, { + title: t`Download Complete`, + type: "success", + progress: undefined, + onProgressCancel: undefined, + isClosable: true + }, true) URL.revokeObjectURL(link.href) - setTimeout(() => { - dispatchDownloadsInProgress({ - type: "remove", - payload: { id: toastId } - }) - }, REMOVE_TOAST_DELAY) + setDownloadsInProgress(false) return Promise.resolve() - } catch (error) { - dispatchDownloadsInProgress({ type: "error", payload: { id: toastId } }) + } catch (error: any) { + console.error(error) + let errorMessage = `${t`An error occurred: `} ${typeof(error) === "string" ? error : error.length ? error[0].message : ""}` + if (axios.isCancel(error)) { + errorMessage = t`Downloads cancelled` + } + updateToast(toastId, { + title: errorMessage, + type: "error", + progress: undefined, + onProgressCancel: undefined, + isClosable: true + }, true) + setDownloadsInProgress(false) return Promise.reject() } - }, [getFileContent]) + }, [getFileContent, addToast, updateToast]) const createSharedFolder = useCallback(async (name: string, writerUsers?: SharedFolderUser[], readerUsers?: SharedFolderUser[]) => { if (!publicKey) return @@ -744,97 +736,92 @@ const FilesProvider = ({ children }: FilesContextProps) => { destinationBucket: BucketKeyPermission, keepOriginal = true ) => { - const toastId = uuidv4() const UPLOAD_PATH = "/" - const transferProgress: TransferProgress = { - id: toastId, - complete: false, - error: false, + const cancelSource = axios.CancelToken.source() + const cancelToken = cancelSource.token + + const toastParams: ToastParams = { + title: t`Sharing your file (Downloading)`, + type: "success", progress: 0, - operation: "Download" + onProgressCancel: cancelSource.cancel, + isClosable: false } - dispatchTransfersInProgress({ type: "add", payload: transferProgress }) + const toastId = addToast(toastParams) + setTransfersInProgress(true) getFileContent(sourceBucketId, { cid: sourceFile.cid, file: sourceFile, path: getPathWithFile(path, sourceFile.name), + cancelToken, onDownloadProgress: (progressEvent) => { - dispatchTransfersInProgress({ - type: "progress", - payload: { - id: toastId, - progress: Math.ceil( - (progressEvent.loaded / sourceFile.size) * 50 - ) - } + updateToast(toastId, { + ...toastParams, + progress: Math.ceil( + (progressEvent.loaded / sourceFile.size) * 50 + ) }) } }).then(async (fileContent) => { if (!fileContent) { - dispatchTransfersInProgress({ + updateToast(toastId, { + title: t`An error occurred while downloading the file`, type: "error", - payload: { - id: toastId, - errorMessage: t`An error occurred while downloading the file` - } - }) + progress: undefined, + onProgressCancel: undefined, + isClosable: true + }, true) + setTransfersInProgress(false) return } - dispatchTransfersInProgress({ - type: "operation", - payload: { - id: toastId, - operation: "Encrypt & Upload" - } - }) - await encryptAndUploadFiles( destinationBucket, [new File([fileContent], sourceFile.name, { type: sourceFile.content_type })], UPLOAD_PATH, (progressEvent) => { - dispatchTransfersInProgress({ - type: "progress", - payload: { - id: toastId, - progress: Math.ceil( - 50 + (progressEvent.loaded / sourceFile.size) * 50 - ) - } + updateToast(toastId, { + title: t`Encrypting & uploading`, + type: "success", + progress: Math.ceil( + 50 + (progressEvent.loaded / sourceFile.size) * 50 + ) }) - } + }, + cancelToken ) if (!keepOriginal) { await filesApiClient.removeBucketObject(sourceBucketId, { paths: [getPathWithFile(path, sourceFile.name)] }) } - - dispatchTransfersInProgress({ - type:"complete", - payload: { - id: toastId - } - }) + updateToast(toastId, { + title: t`Transfer complete`, + type: "success", + progress: undefined, + isClosable: true + }, true) + setTransfersInProgress(false) return Promise.resolve() }).catch((error) => { - console.error(error[0].message) - dispatchTransfersInProgress({ + console.error(error) + let errorMessage = `${t`An error occurred: `} ${typeof(error) === "string" ? error : error.length ? error[0].message : ""}` + if (axios.isCancel(error)) { + errorMessage = t`Sharing cancelled` + } + updateToast(toastId, { + title: errorMessage, type: "error", - payload: { - id: toastId, - errorMessage: `${t`An error occurred: `} ${typeof(error) === "string" ? error : error[0].message}` - } - }) + progress: undefined, + onProgressCancel: undefined, + isClosable: true + }, true) + setTransfersInProgress(false) }).finally(() => { refreshBuckets() - setTimeout(() => { - dispatchTransfersInProgress({ type: "remove", payload: { id: toastId } }) - }, REMOVE_TOAST_DELAY) }) - }, [getFileContent, encryptAndUploadFiles, filesApiClient, refreshBuckets]) + }, [getFileContent, encryptAndUploadFiles, filesApiClient, refreshBuckets, addToast, updateToast]) return ( { downloadMultipleFiles, getFileContent, personalEncryptionKey, - uploadsInProgress, storageSummary, getStorageSummary, - downloadsInProgress, secureAccountWithMasterPassword, buckets, refreshBuckets, isLoadingBuckets, createSharedFolder, editSharedFolder, - transferFileBetweenBuckets, - transfersInProgress + transferFileBetweenBuckets }} > {children} - - - ) } diff --git a/packages/files-ui/src/Contexts/FilesReducers.tsx b/packages/files-ui/src/Contexts/FilesReducers.tsx deleted file mode 100644 index f54afd91b6..0000000000 --- a/packages/files-ui/src/Contexts/FilesReducers.tsx +++ /dev/null @@ -1,188 +0,0 @@ -import { DownloadProgress, TransferOperation, TransferProgress, UploadProgress } from "./FilesContext" - -export function uploadsInProgressReducer( - uploadsInProgress: UploadProgress[], - action: - | { type: "add"; payload: UploadProgress } - | { type: "progress"; payload: { id: string; progress: number } } - | { type: "complete"; payload: { id: string } } - | { type: "error"; payload: { id: string; errorMessage?: string } } - | { type: "remove"; payload: { id: string } } -): UploadProgress[] { - const getProgressIndex = () => - uploadsInProgress.findIndex((progress) => progress.id === action.payload.id) - switch (action.type) { - case "add": { - return [...uploadsInProgress, action.payload] - } - case "progress": { - const progressIndex = getProgressIndex() - if (progressIndex > -1) { - uploadsInProgress[progressIndex].progress = action.payload.progress - return [...uploadsInProgress] - } else { - return uploadsInProgress - } - } - case "complete": { - const progressIndex = getProgressIndex() - if (progressIndex > -1) { - uploadsInProgress[progressIndex].complete = true - return [...uploadsInProgress] - } else { - return uploadsInProgress - } - } - case "error": { - const progressIndex = getProgressIndex() - if (progressIndex > -1) { - uploadsInProgress[progressIndex].error = true - uploadsInProgress[progressIndex].errorMessage = - action.payload.errorMessage - return [...uploadsInProgress] - } else { - return uploadsInProgress - } - } - case "remove": { - const progressIndex = getProgressIndex() - if (progressIndex > -1) { - uploadsInProgress.splice(progressIndex, 1) - return [...uploadsInProgress] - } else { - return uploadsInProgress - } - } - default: - return uploadsInProgress - } -} - -type DownloadAction = - | { type: "add"; payload: DownloadProgress } - | { type: "progress"; payload: { id: string; fileName: string; currentFileNumber?: number; totalFileNumber?: number; progress: number } } - | { type: "complete"; payload: { id: string } } - | { type: "error"; payload: { id: string; errorMessage?: string } } - | { type: "remove"; payload: { id: string } } - -export function downloadsInProgressReducer(downloadsInProgress: DownloadProgress[], action:DownloadAction): DownloadProgress[] { - const progressIndex = downloadsInProgress.findIndex( - (download) => download.id === action.payload.id - ) - const currentDownload = downloadsInProgress[progressIndex] - - switch (action.type) { - case "add": { - return [...downloadsInProgress, action.payload] - } - case "progress": { - if (progressIndex > -1) { - currentDownload.progress = action.payload.progress - currentDownload.currentFileNumber = action.payload.currentFileNumber - currentDownload.fileName = action.payload.fileName - - return [...downloadsInProgress] - } else { - return downloadsInProgress - } - } - case "complete": { - if (progressIndex > -1) { - currentDownload.complete = true - - return [...downloadsInProgress] - } else { - return downloadsInProgress - } - } - case "error": { - if (progressIndex > -1) { - currentDownload.error = true - currentDownload.errorMessage = action.payload.errorMessage - - return [...downloadsInProgress] - } else { - return downloadsInProgress - } - } - case "remove": { - if (progressIndex > -1) { - downloadsInProgress.splice(progressIndex, 1) - return [...downloadsInProgress] - } else { - return downloadsInProgress - } - } - default: - return downloadsInProgress - } -} - -export function transfersInProgressReducer( - transfersInProgress: TransferProgress[], - action: - | { type: "add"; payload: TransferProgress } - | { type: "progress"; payload: { id: string; progress: number } } - | { type: "operation"; payload: { id: string; operation: TransferOperation}} - | { type: "complete"; payload: { id: string } } - | { type: "error"; payload: { id: string; errorMessage?: string } } - | { type: "remove"; payload: { id: string } } -): TransferProgress[] { - const getProgressIndex = () => - transfersInProgress.findIndex( - (transfer) => transfer.id === action.payload.id - ) - switch (action.type) { - case "add": { - return [...transfersInProgress, action.payload] - } - case "progress": { - const progressIndex = getProgressIndex() - if (progressIndex > -1) { - transfersInProgress[progressIndex].progress = action.payload.progress - return [...transfersInProgress] - } else { - return transfersInProgress - } - } - case "operation": { - const progressIndex = getProgressIndex() - if (progressIndex > -1) { - transfersInProgress[progressIndex].operation = action.payload.operation - return [...transfersInProgress] - } else { - return transfersInProgress - } - } - case "complete": { - const progressIndex = getProgressIndex() - if (progressIndex > -1) { - transfersInProgress[progressIndex].complete = true - return [...transfersInProgress] - } else { - return transfersInProgress - } - } - case "error": { - const progressIndex = getProgressIndex() - if (progressIndex > -1) { - transfersInProgress[progressIndex].error = true - transfersInProgress[progressIndex].errorMessage = action.payload.errorMessage - return [...transfersInProgress] - } else { - return transfersInProgress - } - } - case "remove": { - const progressIndex = getProgressIndex() - if (progressIndex > -1) { - transfersInProgress.splice(progressIndex, 1) - return [...transfersInProgress] - } else { - return transfersInProgress - } - } - default: - return transfersInProgress - } -} diff --git a/packages/files-ui/src/Themes/DarkTheme.ts b/packages/files-ui/src/Themes/DarkTheme.ts index 44fc11bfa6..00a80eba21 100644 --- a/packages/files-ui/src/Themes/DarkTheme.ts +++ b/packages/files-ui/src/Themes/DarkTheme.ts @@ -530,25 +530,6 @@ export const darkTheme = createTheme({ color: "var(--gray9)" } }, - Toaster: { - closeIcon: { - fill: "var(--gray9)" - }, - message: { - color: "var(--gray9)" - }, - typeIcon: { - root: { - fill: "var(--gray9)" - }, - success: { - fill: "var(--green8)" - }, - error: { - fill: "var(--red8)" - } - } - }, TagsInput: { root: { color: "var(--gray9)" diff --git a/packages/files-ui/src/locales/de/messages.po b/packages/files-ui/src/locales/de/messages.po index 5b6adca10c..06003074a9 100644 --- a/packages/files-ui/src/locales/de/messages.po +++ b/packages/files-ui/src/locales/de/messages.po @@ -3,14 +3,14 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-04-20 00:28+0200\n" -"PO-Revision-Date: 2021-09-06 00:40+0000\n" +"PO-Revision-Date: 2021-09-14 09:14+0000\n" "Last-Translator: J. Lavoie \n" "Language-Team: German \n" "Language: de\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.8.1-dev\n" +"X-Generator: Weblate 4.9-dev\n" "Mime-Version: 1.0\n" msgid "A backup secret phrase will be generated and used for your account.<0/>We do not store it and <1>it can only be displayed once. Save it somewhere safe!" @@ -47,17 +47,14 @@ msgid "Add viewers and editors by username, sharing id or Ethereum address." msgstr "" msgid "An error occurred while downloading the file" -msgstr "" +msgstr "Beim Herunterladen der Datei ist ein Fehler aufgetreten" msgid "An error occurred:" -msgstr "" +msgstr "Es ist ein Fehler aufgetreten:" msgid "Approve" msgstr "Genehmigen" -msgid "Are we on the right track? Let us know in less than 1 minute." -msgstr "Sind wir auf dem richtigen Weg? Sagen Sie es uns in weniger als 1 Minute." - msgid "Back to plan settings" msgstr "" @@ -178,10 +175,10 @@ msgstr "" msgid "Create folder" msgstr "Ordner erstellen" -msgid "Credit card on file" +msgid "Create your public username in <0>Settings!" msgstr "" -msgid "Create your public username in <0>Settings!" +msgid "Credit card on file" msgstr "" msgid "Dark Theme" @@ -211,16 +208,25 @@ msgstr "Anzeigeeinstellungen" msgid "Download" msgstr "Herunterladen" -msgid "Download as zip" +msgid "Download Complete" msgstr "" -msgid "Download complete" -msgstr "Komplett heruntergeladen" +msgid "Download as zip" +msgstr "" msgid "Download recovery key" msgstr "Wiederherstellungsschlüssel herunterladen" -msgid "Downloading" +msgid "Downloading file - {0}" +msgstr "" + +msgid "Downloading {fileProgress} - {0}" +msgstr "" + +msgid "Downloads cancelled" +msgstr "" + +msgid "Downloads failed" msgstr "" msgid "Drop to upload files" @@ -289,6 +295,9 @@ msgstr "Ordner" msgid "Folder name is already in use" msgstr "" +msgid "Folder uploads are not supported currently" +msgstr "" + msgid "Folders" msgstr "Ordner" @@ -322,15 +331,15 @@ msgstr "" msgid "Go back" msgstr "Zurück" +msgid "Got an issue?" +msgstr "" + msgid "Got it" msgstr "" msgid "Hello again!" msgstr "Hallo nochmal!" -msgid "Help us improve File in less than 1 minute." -msgstr "" - msgid "Hey! You only have two sign-in methods. If you lose that and have only one left, you will be locked out of your account forever." msgstr "" @@ -580,6 +589,9 @@ msgstr "Gespeicherte Browser" msgid "Saved on:" msgstr "Gesichert am:" +msgid "Schedule a 15 min call" +msgstr "" + msgid "Search results" msgstr "Suchergebnisse" @@ -631,7 +643,10 @@ msgstr "" msgid "Shared with" msgstr "" -msgid "Sharing your file ({0})" +msgid "Sharing cancelled" +msgstr "" + +msgid "Sharing your file (Downloading)" msgstr "" msgid "Sign Out" @@ -757,11 +772,8 @@ msgstr "" msgid "Upload" msgstr "Hochladen" -msgid "Upload complete" -msgstr "Hochladen abgeschlossen" - -msgid "Uploading {0} files" -msgstr "Hochladen von {0} Dateien" +msgid "Uploads cancelled" +msgstr "" msgid "Use a different login method" msgstr "Eine andere Anmeldemethode verwenden" @@ -802,6 +814,9 @@ msgstr "Ordner anzeigen" msgid "Wallet address" msgstr "" +msgid "Want to help shape this product?" +msgstr "" + msgid "We can't encrypt files larger than 2GB. Some items will not be uploaded" msgstr "" @@ -827,7 +842,7 @@ msgid "You can change this later." msgstr "Sie können dies später ändern." msgid "You can now create shared folders to share a file." -msgstr "" +msgstr "Sie können nun geteilte Ordner erstellen, um eine Datei zu teilen." msgid "You can't move folders to this path" msgstr "Sie können keine Ordner in diesen Pfad verschieben" @@ -868,11 +883,14 @@ msgstr "erfolgreich wiederhergestellt" msgid "unknown" msgstr "unbekannt" +msgid "{0, plural, one {Downloading {1} file} other {Downloading {2} files}}" +msgstr "{0, plural, one {{1} Datei wird heruntergeladen} other {{2} Dateien werden heruntergeladen}}" + +msgid "{0, plural, one {Encrypting and uploading {1} file} other {Encrypting and uploading {2} files}}" +msgstr "{0, plural, one {{1} Datei wird verschlüsselt und hochgeladen} other {{2} Dateien werden verschlüsselt und hochgeladen}}" + msgid "{0, plural, one {You are about to delete {1} item.} other {You are about to delete {2} items.}}" msgstr "{0, plural, one {Sie sind dabei, {1} Artikel zu löschen.} other {Sie sind dabei, {2} Artikel zu löschen.}}" msgid "{0} of {1} used ({2}%)" msgstr "" - -msgid "{noOfFiles, plural, one {Uploading and encrypting {noOfFiles} file} other {Uploading and encrypting {noOfFiles} files}}" -msgstr "{noOfFiles, plural, one {{noOfFiles} Datei wird hochgeladen und verschlüsselt} other {{noOfFiles} Datein werden hochgeladen und verschlüsselt}}" diff --git a/packages/files-ui/src/locales/en/messages.po b/packages/files-ui/src/locales/en/messages.po index 79dc08dfea..bddc573609 100644 --- a/packages/files-ui/src/locales/en/messages.po +++ b/packages/files-ui/src/locales/en/messages.po @@ -55,9 +55,6 @@ msgstr "An error occurred:" msgid "Approve" msgstr "Approve" -msgid "Are we on the right track? Let us know in less than 1 minute." -msgstr "Are we on the right track? Let us know in less than 1 minute." - msgid "Back to plan settings" msgstr "Back to plan settings" @@ -178,12 +175,12 @@ msgstr "Create a new shared folder" msgid "Create folder" msgstr "Create folder" -msgid "Credit card on file" -msgstr "Credit card on file" - msgid "Create your public username in <0>Settings!" msgstr "Create your public username in <0>Settings!" +msgid "Credit card on file" +msgstr "Credit card on file" + msgid "Dark Theme" msgstr "Dark Theme" @@ -211,17 +208,26 @@ msgstr "Display Settings" msgid "Download" msgstr "Download" +msgid "Download Complete" +msgstr "Download Complete" + msgid "Download as zip" msgstr "Download as zip" -msgid "Download complete" -msgstr "Download complete" - msgid "Download recovery key" msgstr "Download recovery key" -msgid "Downloading" -msgstr "Downloading" +msgid "Downloading file - {0}" +msgstr "Downloading file - {0}" + +msgid "Downloading {fileProgress} - {0}" +msgstr "Downloading {fileProgress} - {0}" + +msgid "Downloads cancelled" +msgstr "Downloads cancelled" + +msgid "Downloads failed" +msgstr "Downloads failed" msgid "Drop to upload files" msgstr "Drop to upload files" @@ -292,6 +298,9 @@ msgstr "Folder" msgid "Folder name is already in use" msgstr "Folder name is already in use" +msgid "Folder uploads are not supported currently" +msgstr "Folder uploads are not supported currently" + msgid "Folders" msgstr "Folders" @@ -325,15 +334,15 @@ msgstr "Give view-only permission to:" msgid "Go back" msgstr "Go back" +msgid "Got an issue?" +msgstr "Got an issue?" + msgid "Got it" msgstr "Got it" msgid "Hello again!" msgstr "Hello again!" -msgid "Help us improve File in less than 1 minute." -msgstr "Help us improve File in less than 1 minute." - msgid "Hey! You only have two sign-in methods. If you lose that and have only one left, you will be locked out of your account forever." msgstr "Hey! You only have two sign-in methods. If you lose that and have only one left, you will be locked out of your account forever." @@ -583,6 +592,9 @@ msgstr "Saved Browsers" msgid "Saved on:" msgstr "Saved on:" +msgid "Schedule a 15 min call" +msgstr "Schedule a 15 min call" + msgid "Search results" msgstr "Search results" @@ -634,8 +646,11 @@ msgstr "Shared folders" msgid "Shared with" msgstr "Shared with" -msgid "Sharing your file ({0})" -msgstr "Sharing your file ({0})" +msgid "Sharing cancelled" +msgstr "Sharing cancelled" + +msgid "Sharing your file (Downloading)" +msgstr "Sharing your file (Downloading)" msgid "Sign Out" msgstr "Sign Out" @@ -760,11 +775,8 @@ msgstr "Upgrade your plan" msgid "Upload" msgstr "Upload" -msgid "Upload complete" -msgstr "Upload complete" - -msgid "Uploading {0} files" -msgstr "Uploading {0} files" +msgid "Uploads cancelled" +msgstr "Uploads cancelled" msgid "Use a different login method" msgstr "Use a different login method" @@ -805,6 +817,9 @@ msgstr "View folder" msgid "Wallet address" msgstr "Wallet address" +msgid "Want to help shape this product?" +msgstr "Want to help shape this product?" + msgid "We can't encrypt files larger than 2GB. Some items will not be uploaded" msgstr "We can't encrypt files larger than 2GB. Some items will not be uploaded" @@ -871,11 +886,14 @@ msgstr "recovered successfully" msgid "unknown" msgstr "unknown" +msgid "{0, plural, one {Downloading {1} file} other {Downloading {2} files}}" +msgstr "{0, plural, one {Downloading {1} file} other {Downloading {2} files}}" + +msgid "{0, plural, one {Encrypting and uploading {1} file} other {Encrypting and uploading {2} files}}" +msgstr "{0, plural, one {Encrypting and uploading {1} file} other {Encrypting and uploading {2} files}}" + msgid "{0, plural, one {You are about to delete {1} item.} other {You are about to delete {2} items.}}" msgstr "{0, plural, one {You are about to delete {1} item.} other {You are about to delete {2} items.}}" msgid "{0} of {1} used ({2}%)" msgstr "{0} of {1} used ({2}%)" - -msgid "{noOfFiles, plural, one {Uploading and encrypting {noOfFiles} file} other {Uploading and encrypting {noOfFiles} files}}" -msgstr "{noOfFiles, plural, one {Uploading and encrypting {noOfFiles} file} other {Uploading and encrypting {noOfFiles} files}}" diff --git a/packages/files-ui/src/locales/es/messages.po b/packages/files-ui/src/locales/es/messages.po index 1e20b9050e..ceb5d2aa21 100644 --- a/packages/files-ui/src/locales/es/messages.po +++ b/packages/files-ui/src/locales/es/messages.po @@ -56,9 +56,6 @@ msgstr "" msgid "Approve" msgstr "Aprobar" -msgid "Are we on the right track? Let us know in less than 1 minute." -msgstr "" - msgid "Back to plan settings" msgstr "" @@ -179,10 +176,10 @@ msgstr "" msgid "Create folder" msgstr "Crear Carpeta" -msgid "Credit card on file" +msgid "Create your public username in <0>Settings!" msgstr "" -msgid "Create your public username in <0>Settings!" +msgid "Credit card on file" msgstr "" msgid "Dark Theme" @@ -212,16 +209,25 @@ msgstr "Configuración de pantalla" msgid "Download" msgstr "Descargar" -msgid "Download as zip" +msgid "Download Complete" msgstr "" -msgid "Download complete" -msgstr "Descarga completa" +msgid "Download as zip" +msgstr "" msgid "Download recovery key" msgstr "Descargar la clave de recuperación" -msgid "Downloading" +msgid "Downloading file - {0}" +msgstr "" + +msgid "Downloading {fileProgress} - {0}" +msgstr "" + +msgid "Downloads cancelled" +msgstr "" + +msgid "Downloads failed" msgstr "" msgid "Drop to upload files" @@ -293,6 +299,9 @@ msgstr "Archivo" msgid "Folder name is already in use" msgstr "" +msgid "Folder uploads are not supported currently" +msgstr "" + msgid "Folders" msgstr "Archivos" @@ -326,15 +335,15 @@ msgstr "" msgid "Go back" msgstr "Regresar" +msgid "Got an issue?" +msgstr "" + msgid "Got it" msgstr "" msgid "Hello again!" msgstr "Hola de nuevo!" -msgid "Help us improve File in less than 1 minute." -msgstr "" - msgid "Hey! You only have two sign-in methods. If you lose that and have only one left, you will be locked out of your account forever." msgstr "Oye! Solo tiene dos métodos de inicio de sesión. Si lo pierde y solo le queda uno, se le bloqueará su cuenta para siempre." @@ -584,6 +593,9 @@ msgstr "Navegadores guardados" msgid "Saved on:" msgstr "Guardado el:" +msgid "Schedule a 15 min call" +msgstr "" + msgid "Search results" msgstr "Resultados de la búsqueda" @@ -635,7 +647,10 @@ msgstr "" msgid "Shared with" msgstr "" -msgid "Sharing your file ({0})" +msgid "Sharing cancelled" +msgstr "" + +msgid "Sharing your file (Downloading)" msgstr "" msgid "Sign Out" @@ -761,11 +776,8 @@ msgstr "" msgid "Upload" msgstr "Subir" -msgid "Upload complete" -msgstr "Carga completa" - -msgid "Uploading {0} files" -msgstr "Subiendo {0} archivos" +msgid "Uploads cancelled" +msgstr "" msgid "Use a different login method" msgstr "Utilice un método de inicio de sesión diferente" @@ -806,6 +818,9 @@ msgstr "Utilice un navegador guardado" msgid "Wallet address" msgstr "Utilice un navegador guardado" +msgid "Want to help shape this product?" +msgstr "" + msgid "We can't encrypt files larger than 2GB. Some items will not be uploaded" msgstr "" @@ -872,11 +887,14 @@ msgstr "recuperado con éxito" msgid "unknown" msgstr "" +msgid "{0, plural, one {Downloading {1} file} other {Downloading {2} files}}" +msgstr "" + +msgid "{0, plural, one {Encrypting and uploading {1} file} other {Encrypting and uploading {2} files}}" +msgstr "" + msgid "{0, plural, one {You are about to delete {1} item.} other {You are about to delete {2} items.}}" msgstr "" msgid "{0} of {1} used ({2}%)" msgstr "" - -msgid "{noOfFiles, plural, one {Uploading and encrypting {noOfFiles} file} other {Uploading and encrypting {noOfFiles} files}}" -msgstr "{noOfFiles, plural, one {Carga y encriptación del archivo {noOfFiles}} other {Carga y encriptación de archivos {noOfFiles}}}" diff --git a/packages/files-ui/src/locales/fr/messages.po b/packages/files-ui/src/locales/fr/messages.po index dd1b6e0782..0869b4fc12 100644 --- a/packages/files-ui/src/locales/fr/messages.po +++ b/packages/files-ui/src/locales/fr/messages.po @@ -3,7 +3,7 @@ msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-04-23 11:05+0200\n" -"PO-Revision-Date: 2021-08-26 18:33+0000\n" +"PO-Revision-Date: 2021-09-14 09:14+0000\n" "Last-Translator: J. Lavoie \n" "Language-Team: French \n" "Language: fr\n" @@ -11,7 +11,7 @@ msgstr "" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 4.8.1-dev\n" +"X-Generator: Weblate 4.9-dev\n" "Mime-Version: 1.0\n" msgid "A backup secret phrase will be generated and used for your account.<0/>We do not store it and <1>it can only be displayed once. Save it somewhere safe!" @@ -45,7 +45,7 @@ msgid "Add more files" msgstr "Ajouter d’autres fichiers" msgid "Add viewers and editors by username, sharing id or Ethereum address." -msgstr "" +msgstr "Ajoutez des personnes pouvant visualiser ou afficher par nom d'utilisateur, identifiant de partage ou adresse Ethereum." msgid "An error occurred while downloading the file" msgstr "Une erreur s'est produite lors du téléchargement du fichier" @@ -56,9 +56,6 @@ msgstr "Une erreur s'est produite :" msgid "Approve" msgstr "Accepter" -msgid "Are we on the right track? Let us know in less than 1 minute." -msgstr "Sommes-nous sur la bonne voie ? Dites-le-nous en moins d’une minute (en anglais)." - msgid "Back to plan settings" msgstr "" @@ -179,10 +176,10 @@ msgstr "Créer un nouveau dossier partagé" msgid "Create folder" msgstr "Créer un dossier" -msgid "Credit card on file" -msgstr "" - msgid "Create your public username in <0>Settings!" +msgstr "Créez votre nom d'utilisateur public dans <0>Paramètres !" + +msgid "Credit card on file" msgstr "" msgid "Dark Theme" @@ -212,17 +209,26 @@ msgstr "Paramètres d’affichage" msgid "Download" msgstr "Télécharger" +msgid "Download Complete" +msgstr "Téléchargement terminé" + msgid "Download as zip" msgstr "Télécharger au format zip" -msgid "Download complete" -msgstr "Téléchargement terminé" - msgid "Download recovery key" msgstr "Télécharger la clé de sauvegarde" -msgid "Downloading" -msgstr "Téléchargement" +msgid "Downloading file - {0}" +msgstr "Téléchargement du fichier - {0}" + +msgid "Downloading {fileProgress} - {0}" +msgstr "Téléchargement de {fileProgress} - {0}" + +msgid "Downloads cancelled" +msgstr "Téléchargements annulés" + +msgid "Downloads failed" +msgstr "Les téléchargements ont échoué" msgid "Drop to upload files" msgstr "Faire glisser pour téléverser un fichier" @@ -293,6 +299,9 @@ msgstr "Dossier" msgid "Folder name is already in use" msgstr "Le nom du dossier est déjà utilisé" +msgid "Folder uploads are not supported currently" +msgstr "Le téléversement de dossiers n'est pas actuellement pris en charge" + msgid "Folders" msgstr "Dossiers" @@ -326,15 +335,15 @@ msgstr "Donner l’accès en lecture seule à :" msgid "Go back" msgstr "Retour" +msgid "Got an issue?" +msgstr "Vous avez un problème ?" + msgid "Got it" -msgstr "" +msgstr "Compris" msgid "Hello again!" msgstr "Ravis de vous revoir !" -msgid "Help us improve File in less than 1 minute." -msgstr "Aidez-nous à améliorer File en moins d'une minute." - msgid "Hey! You only have two sign-in methods. If you lose that and have only one left, you will be locked out of your account forever." msgstr "Hé ! Vous n’avez que deux méthodes de connexion. Si vous en perdez une et qu’il ne vous en reste qu’une, vous ne pourrez plus jamais vous connecter à votre compte." @@ -584,6 +593,9 @@ msgstr "Navigateurs enregistrés" msgid "Saved on:" msgstr "Enregistré sur :" +msgid "Schedule a 15 min call" +msgstr "" + msgid "Search results" msgstr "Résultats de recherche" @@ -635,8 +647,11 @@ msgstr "Dossiers partagés" msgid "Shared with" msgstr "Partagé avec" -msgid "Sharing your file ({0})" -msgstr "Partage de votre fichier ({0})" +msgid "Sharing cancelled" +msgstr "Partage annulé" + +msgid "Sharing your file (Downloading)" +msgstr "Partager votre fichier (Téléchargement)" msgid "Sign Out" msgstr "Se déconnecter" @@ -761,11 +776,8 @@ msgstr "" msgid "Upload" msgstr "Téléverser" -msgid "Upload complete" -msgstr "Téléversement terminé" - -msgid "Uploading {0} files" -msgstr "Téléversement de {0} fichiers" +msgid "Uploads cancelled" +msgstr "Téléversements annulés" msgid "Use a different login method" msgstr "Utilisez une méthode de connexion différente" @@ -806,6 +818,9 @@ msgstr "Voir le dossier" msgid "Wallet address" msgstr "Addresse du wallet" +msgid "Want to help shape this product?" +msgstr "" + msgid "We can't encrypt files larger than 2GB. Some items will not be uploaded" msgstr "Nous ne pouvons pas chiffrer les fichiers de plus de 2 Go. Certains éléments ne pourront pas être téléversés" @@ -831,7 +846,7 @@ msgid "You can change this later." msgstr "Vous pouvez en changer plus tard." msgid "You can now create shared folders to share a file." -msgstr "" +msgstr "Vous pouvez maintenant créer des dossiers partagés pour partager un fichier." msgid "You can't move folders to this path" msgstr "Vous ne pouvez pas déplacer les dossiers vers ce chemin" @@ -872,11 +887,14 @@ msgstr "récupéré avec succès" msgid "unknown" msgstr "inconnu" +msgid "{0, plural, one {Downloading {1} file} other {Downloading {2} files}}" +msgstr "{0, plural, one {Téléchargement de {1} fichier} other {Téléchargement de {2} fichiers}}" + +msgid "{0, plural, one {Encrypting and uploading {1} file} other {Encrypting and uploading {2} files}}" +msgstr "{0, plural, one {Chiffrement et téléversement de {1} fichier} other {Chiffrement et téléversements {2} fichiers}}" + msgid "{0, plural, one {You are about to delete {1} item.} other {You are about to delete {2} items.}}" msgstr "{0, plural, one {Vous êtes sur le point de supprimer {1} élément.} other {Vous êtes sur le point de supprimer {2} éléments.}}" msgid "{0} of {1} used ({2}%)" msgstr "" - -msgid "{noOfFiles, plural, one {Uploading and encrypting {noOfFiles} file} other {Uploading and encrypting {noOfFiles} files}}" -msgstr "{noOfFiles, plural, one {Upload et chiffrage de {noOfFiles} fichier} other {Upload et chiffrage de {noOfFiles} fichiers}}" diff --git a/packages/files-ui/src/locales/no/messages.po b/packages/files-ui/src/locales/no/messages.po index e5ed3ea503..36e8da8da0 100644 --- a/packages/files-ui/src/locales/no/messages.po +++ b/packages/files-ui/src/locales/no/messages.po @@ -55,9 +55,6 @@ msgstr "" msgid "Approve" msgstr "Godkjenn" -msgid "Are we on the right track? Let us know in less than 1 minute." -msgstr "" - msgid "Back to plan settings" msgstr "" @@ -178,10 +175,10 @@ msgstr "" msgid "Create folder" msgstr "Opprett mappe" -msgid "Credit card on file" +msgid "Create your public username in <0>Settings!" msgstr "" -msgid "Create your public username in <0>Settings!" +msgid "Credit card on file" msgstr "" msgid "Dark Theme" @@ -211,16 +208,25 @@ msgstr "" msgid "Download" msgstr "" -msgid "Download as zip" +msgid "Download Complete" msgstr "" -msgid "Download complete" +msgid "Download as zip" msgstr "" msgid "Download recovery key" msgstr "" -msgid "Downloading" +msgid "Downloading file - {0}" +msgstr "" + +msgid "Downloading {fileProgress} - {0}" +msgstr "" + +msgid "Downloads cancelled" +msgstr "" + +msgid "Downloads failed" msgstr "" msgid "Drop to upload files" @@ -289,6 +295,9 @@ msgstr "Mappe" msgid "Folder name is already in use" msgstr "" +msgid "Folder uploads are not supported currently" +msgstr "" + msgid "Folders" msgstr "Mapper" @@ -322,15 +331,15 @@ msgstr "" msgid "Go back" msgstr "Tilbake" +msgid "Got an issue?" +msgstr "" + msgid "Got it" msgstr "" msgid "Hello again!" msgstr "Hei igjen." -msgid "Help us improve File in less than 1 minute." -msgstr "" - msgid "Hey! You only have two sign-in methods. If you lose that and have only one left, you will be locked out of your account forever." msgstr "" @@ -580,6 +589,9 @@ msgstr "" msgid "Saved on:" msgstr "" +msgid "Schedule a 15 min call" +msgstr "" + msgid "Search results" msgstr "" @@ -631,7 +643,10 @@ msgstr "" msgid "Shared with" msgstr "" -msgid "Sharing your file ({0})" +msgid "Sharing cancelled" +msgstr "" + +msgid "Sharing your file (Downloading)" msgstr "" msgid "Sign Out" @@ -757,11 +772,8 @@ msgstr "" msgid "Upload" msgstr "Last opp" -msgid "Upload complete" -msgstr "Opplastet" - -msgid "Uploading {0} files" -msgstr "Laster opp {0} filer" +msgid "Uploads cancelled" +msgstr "" msgid "Use a different login method" msgstr "Bruk en annen innloggingsmetode" @@ -802,6 +814,9 @@ msgstr "Vis mappe" msgid "Wallet address" msgstr "" +msgid "Want to help shape this product?" +msgstr "" + msgid "We can't encrypt files larger than 2GB. Some items will not be uploaded" msgstr "" @@ -868,11 +883,14 @@ msgstr "gjenopprettet" msgid "unknown" msgstr "" -msgid "{0, plural, one {You are about to delete {1} item.} other {You are about to delete {2} items.}}" +msgid "{0, plural, one {Downloading {1} file} other {Downloading {2} files}}" msgstr "" -msgid "{0} of {1} used ({2}%)" +msgid "{0, plural, one {Encrypting and uploading {1} file} other {Encrypting and uploading {2} files}}" msgstr "" -msgid "{noOfFiles, plural, one {Uploading and encrypting {noOfFiles} file} other {Uploading and encrypting {noOfFiles} files}}" +msgid "{0, plural, one {You are about to delete {1} item.} other {You are about to delete {2} items.}}" +msgstr "" + +msgid "{0} of {1} used ({2}%)" msgstr "" diff --git a/packages/gaming-ui/package.json b/packages/gaming-ui/package.json index 12dea7dafa..7f9680629a 100644 --- a/packages/gaming-ui/package.json +++ b/packages/gaming-ui/package.json @@ -63,7 +63,7 @@ "@types/yup": "^0.29.9", "@types/zxcvbn": "^4.4.0", "babel-plugin-macros": "^2.8.0", - "cypress": "^8.3.1", + "cypress": "^8.4", "cypress-file-upload": "^5.0.8", "cypress-pipe": "^2.0.0" }, diff --git a/packages/gaming-ui/src/App.tsx b/packages/gaming-ui/src/App.tsx index 54aa2aa32a..6eaf3956b7 100644 --- a/packages/gaming-ui/src/App.tsx +++ b/packages/gaming-ui/src/App.tsx @@ -3,7 +3,7 @@ import { init as initSentry, ErrorBoundary, showReportDialog } from "@sentry/rea import { Web3Provider } from "@chainsafe/web3-context" import { ThemeSwitcher } from "@chainsafe/common-theme" import "@chainsafe/common-theme/dist/font-faces.css" -import { Button, CssBaseline, Modal, Router, ToasterProvider, Typography } from "@chainsafe/common-components" +import { Button, CssBaseline, Modal, Router, ToastProvider, Typography } from "@chainsafe/common-components" import StorageRoutes from "./Components/GamingRoutes" import AppWrapper from "./Components/Layouts/AppWrapper" import { LanguageProvider } from "./Contexts/LanguageContext" @@ -91,7 +91,7 @@ const App = () => { > - + { - + diff --git a/packages/gaming-ui/src/Components/Elements/CustomModal.tsx b/packages/gaming-ui/src/Components/Elements/CustomModal.tsx index 6b0966bff5..a7aa276273 100644 --- a/packages/gaming-ui/src/Components/Elements/CustomModal.tsx +++ b/packages/gaming-ui/src/Components/Elements/CustomModal.tsx @@ -48,7 +48,7 @@ const CustomModal: React.FC = ({ *": { paddingBottom: `${constants.generalUnit * 5}px` } @@ -174,7 +174,7 @@ const LoginModule = ({ className }: IInitialScreen) => { setLoginMode(loginType) try { await login(loginType) - } catch (error) { + } catch (error: any) { let errorMessage = t`There was an error authenticating` console.log(error) if (Array.isArray(error) && error[0]) { diff --git a/packages/gaming-ui/src/Themes/DarkTheme.ts b/packages/gaming-ui/src/Themes/DarkTheme.ts index 6cc50c045e..63c7839c44 100644 --- a/packages/gaming-ui/src/Themes/DarkTheme.ts +++ b/packages/gaming-ui/src/Themes/DarkTheme.ts @@ -521,25 +521,6 @@ export const darkTheme = createTheme({ color: "var(--gray9)" } }, - Toaster: { - closeIcon: { - fill: "var(--gray9)" - }, - message: { - color: "var(--gray9)" - }, - typeIcon: { - root: { - fill: "var(--gray9)" - }, - success: { - fill: "var(--green8)" - }, - error: { - fill: "var(--red8)" - } - } - }, Button: { variants: { primary: { diff --git a/packages/storage-ui/package.json b/packages/storage-ui/package.json index 690d46d46a..6c89462f61 100644 --- a/packages/storage-ui/package.json +++ b/packages/storage-ui/package.json @@ -64,7 +64,7 @@ "@types/yup": "^0.29.9", "@types/zxcvbn": "^4.4.0", "babel-plugin-macros": "^2.8.0", - "cypress": "^8.3.1", + "cypress": "^8.4", "cypress-file-upload": "^5.0.8", "cypress-pipe": "^2.0.0" }, diff --git a/packages/storage-ui/src/App.tsx b/packages/storage-ui/src/App.tsx index 0baf992a71..9708f8c5fb 100644 --- a/packages/storage-ui/src/App.tsx +++ b/packages/storage-ui/src/App.tsx @@ -3,7 +3,7 @@ import { init as initSentry, ErrorBoundary, showReportDialog } from "@sentry/rea import { Web3Provider } from "@chainsafe/web3-context" import { ThemeSwitcher } from "@chainsafe/common-theme" import "@chainsafe/common-theme/dist/font-faces.css" -import { Button, CssBaseline, Modal, Router, ToasterProvider, Typography } from "@chainsafe/common-components" +import { Button, CssBaseline, Modal, Router, ToastProvider, Typography } from "@chainsafe/common-components" import StorageRoutes from "./Components/StorageRoutes" import AppWrapper from "./Components/Layouts/AppWrapper" import { useHotjar } from "react-use-hotjar" @@ -103,7 +103,8 @@ const App = () => { > - + { - + diff --git a/packages/storage-ui/src/Components/Modules/LoginModule.tsx b/packages/storage-ui/src/Components/Modules/LoginModule.tsx index ed4d13dfd5..42bc1eb818 100644 --- a/packages/storage-ui/src/Components/Modules/LoginModule.tsx +++ b/packages/storage-ui/src/Components/Modules/LoginModule.tsx @@ -63,7 +63,7 @@ const useStyles = makeStyles( fontWeight: 400 }, [breakpoints.up("md")]: { - padding: `${constants.generalUnit * 30}px ${constants.generalUnit * 8}px`, + padding: `${constants.generalUnit * 20}px ${constants.generalUnit * 8}px`, "& > *": { paddingBottom: `${constants.generalUnit * 5}px` } @@ -217,10 +217,10 @@ const LoginModule = ({ className }: IInitialScreen) => { } } // WalletConnect be sassy - if (error?.message === "Just nope" || error?.code === 4001) { + if ((error instanceof Error && error.message === "Just nope") || ((error as any).code === 4001)) { errorMessage = t`Failed to get signature` } - if (error?.message === "user closed popup") { + if (error instanceof Error && error.message === "user closed popup") { errorMessage = t`The authentication popup was closed` } setError(errorMessage) diff --git a/packages/storage-ui/src/Components/Pages/BucketPage.tsx b/packages/storage-ui/src/Components/Pages/BucketPage.tsx index d75fb65895..e29dd0f721 100644 --- a/packages/storage-ui/src/Components/Pages/BucketPage.tsx +++ b/packages/storage-ui/src/Components/Pages/BucketPage.tsx @@ -1,5 +1,5 @@ import React, { useCallback, useEffect, useMemo, useState } from "react" -import { Crumb, useToaster, useHistory, useLocation } from "@chainsafe/common-components" +import { Crumb, useToasts, useHistory, useLocation } from "@chainsafe/common-components" import { useStorage, FileSystemItem } from "../../Contexts/StorageContext" import { getArrayOfPaths, @@ -23,7 +23,7 @@ import { DISMISSED_SURVEY_KEY } from "../Modules/SurveyBanner" const BucketPage: React.FC = () => { const { storageBuckets, uploadFiles, uploadsInProgress, getStorageSummary, downloadFile } = useStorage() const { storageApiClient } = useStorageApi() - const { addToastMessage } = useToaster() + const { addToast } = useToasts() const [loadingCurrentPath, setLoadingCurrentPath] = useState(false) const [pathContents, setPathContents] = useState([]) const { redirect } = useHistory() @@ -78,21 +78,21 @@ const BucketPage: React.FC = () => { return storageApiClient.removeBucketObject(bucket.id, { paths: itemsToDelete.map((item) => (getPathWithFile(currentPath, item?.name))) }).then(() => { - addToastMessage({ - message: t`Deletion successful`, - appearance: "success" + addToast({ + title: t`Deletion successful`, + type: "success" }) }) .catch((e) => { console.error(e) const message = t`There was an error deleting this item` - addToastMessage({ - message: message, - appearance: "error" + addToast({ + title: message, + type: "error" }) }) .finally(refreshContents) - }, [bucket, storageApiClient, refreshContents, pathContents, currentPath, addToastMessage]) + }, [bucket, storageApiClient, refreshContents, pathContents, currentPath, addToast]) const renameItem = useCallback(async (toRename: ISelectedFile, newName: string) => { const itemToRename = pathContents.find(i => i.cid === toRename.cid && i.name === toRename.name) @@ -120,21 +120,21 @@ const BucketPage: React.FC = () => { itemToMove.isFolder ? t`Folder` : t`File` } ${t`moved successfully`}` - addToastMessage({ - message: message, - appearance: "success" + addToast({ + title: message, + type: "success" }) } catch (error) { const message = `${t`There was an error moving this`} ${ itemToMove.isFolder ? t`folder` : t`file` }` - addToastMessage({ - message: message, - appearance: "error" + addToast({ + title: message, + type: "error" }) } })).finally(refreshContents) - }, [addToastMessage, pathContents, refreshContents, storageApiClient, bucket, currentPath]) + }, [addToast, pathContents, refreshContents, storageApiClient, bucket, currentPath]) const handleDownload = useCallback(async ( toDownload: ISelectedFile @@ -167,16 +167,16 @@ const BucketPage: React.FC = () => { } } if (hasFolder) { - addToastMessage({ - message: t`Folder uploads are currently not supported`, - appearance: "error" + addToast({ + title: t`Folder uploads are currently not supported`, + type: "error" }) } else { uploadFiles(bucket.id, files, path) .then(() => refreshContents()) .catch(console.error) } - }, [addToastMessage, uploadFiles, bucket, refreshContents]) + }, [addToast, uploadFiles, bucket, refreshContents]) const viewFolder = useCallback((toView: ISelectedFile) => { const fileSystemItem = pathContents.find(f => f.cid === toView.cid && f.name === toView.name) diff --git a/packages/storage-ui/src/Themes/DarkTheme.ts b/packages/storage-ui/src/Themes/DarkTheme.ts index df463b9410..483034e653 100644 --- a/packages/storage-ui/src/Themes/DarkTheme.ts +++ b/packages/storage-ui/src/Themes/DarkTheme.ts @@ -521,25 +521,6 @@ export const darkTheme = createTheme({ color: "var(--gray9)" } }, - Toaster: { - closeIcon: { - fill: "var(--gray9)" - }, - message: { - color: "var(--gray9)" - }, - typeIcon: { - root: { - fill: "var(--gray9)" - }, - success: { - fill: "var(--green8)" - }, - error: { - fill: "var(--red8)" - } - } - }, Button: { variants: { primary: { diff --git a/yarn.lock b/yarn.lock index 94a3bc3bb0..1eb4fc2e86 100644 --- a/yarn.lock +++ b/yarn.lock @@ -44,6 +44,11 @@ resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.12.5.tgz#f56db0c4bb1bbbf221b4e81345aab4141e7cb0e9" integrity sha512-DTsS7cxrsH3by8nqQSpFSyjSfSYl57D6Cf4q8dW3LK83tBKBDCkfcay1nYkXq1nIHXnpX8WMMb/O25HOy3h1zg== +"@babel/compat-data@^7.14.7", "@babel/compat-data@^7.15.0": + version "7.15.0" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.15.0.tgz#2dbaf8b85334796cafbb0f5793a90a2fc010b176" + integrity sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA== + "@babel/core@7.9.0": version "7.9.0" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.9.0.tgz#ac977b538b77e132ff706f3b8a4dbad09c03c56e" @@ -66,7 +71,7 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@^7.1.0", "@babel/core@^7.12.10", "@babel/core@^7.12.3", "@babel/core@^7.4.5", "@babel/core@^7.7.5": +"@babel/core@^7.1.0", "@babel/core@^7.12.10", "@babel/core@^7.12.3", "@babel/core@^7.4.5": version "7.12.10" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.10.tgz#b79a2e1b9f70ed3d84bbfb6d8c4ef825f606bccd" integrity sha512-eTAlQKq65zHfkHZV0sIVODCPGVgoo1HdBlbSLi9CqOzuZanMv2ihzY+4paiKr1mH+XmYESMAmJ/dpZ68eN6d8w== @@ -87,6 +92,27 @@ semver "^5.4.1" source-map "^0.5.0" +"@babel/core@^7.7.5": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.15.4.tgz#a70d06c58ae1fce39c23f8efd79f9d5eb8b2f397" + integrity sha512-Lkcv9I4a8bgUI8LJOLM6IKv6hnz1KOju6KM1lceqVMKlKKqNRopYd2Pc9MgIurqvMJ6BooemrnJz8jlIiQIpsA== + dependencies: + "@babel/code-frame" "^7.14.5" + "@babel/generator" "^7.15.4" + "@babel/helper-compilation-targets" "^7.15.4" + "@babel/helper-module-transforms" "^7.15.4" + "@babel/helpers" "^7.15.4" + "@babel/parser" "^7.15.4" + "@babel/template" "^7.15.4" + "@babel/traverse" "^7.15.4" + "@babel/types" "^7.15.4" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.1.2" + semver "^6.3.0" + source-map "^0.5.0" + "@babel/generator@^7.11.6", "@babel/generator@^7.12.10", "@babel/generator@^7.4.0", "@babel/generator@^7.9.0": version "7.12.10" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.10.tgz#2b188fc329fb8e4f762181703beffc0fe6df3460" @@ -96,7 +122,7 @@ jsesc "^2.5.1" source-map "^0.5.0" -"@babel/generator@^7.15.4": +"@babel/generator@^7.12.11", "@babel/generator@^7.15.4": version "7.15.4" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.15.4.tgz#85acb159a267ca6324f9793986991ee2022a05b0" integrity sha512-d3itta0tu+UayjEORPNz6e1T3FtvWlP5N4V5M+lhp/CxT4oAA7/NcScnpRyspUMLK6tu9MNHmQHxRykuN2R7hw== @@ -105,7 +131,7 @@ jsesc "^2.5.1" source-map "^0.5.0" -"@babel/helper-annotate-as-pure@^7.0.0": +"@babel/helper-annotate-as-pure@^7.0.0", "@babel/helper-annotate-as-pure@^7.15.4": version "7.15.4" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.15.4.tgz#3d0e43b00c5e49fdb6c57e421601a7a658d5f835" integrity sha512-QwrtdNvUNsPCj2lfNQacsGSQvGX8ee1ttrBrcozUP2Sv/jylewBP/8QFe6ZkBsC8T/GYWonNAWJV4aRR9AL2DA== @@ -163,6 +189,16 @@ browserslist "^4.14.5" semver "^5.5.0" +"@babel/helper-compilation-targets@^7.14.5", "@babel/helper-compilation-targets@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz#cf6d94f30fbefc139123e27dd6b02f65aeedb7b9" + integrity sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ== + dependencies: + "@babel/compat-data" "^7.15.0" + "@babel/helper-validator-option" "^7.14.5" + browserslist "^4.16.6" + semver "^6.3.0" + "@babel/helper-compilation-targets@^7.8.7": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz#804ae8e3f04376607cc791b9d47d540276332bd2" @@ -174,7 +210,7 @@ levenary "^1.1.1" semver "^5.5.0" -"@babel/helper-create-class-features-plugin@^7.10.4", "@babel/helper-create-class-features-plugin@^7.10.5", "@babel/helper-create-class-features-plugin@^7.8.3": +"@babel/helper-create-class-features-plugin@^7.10.5", "@babel/helper-create-class-features-plugin@^7.8.3": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz#9f61446ba80e8240b0a5c85c6fdac8459d6f259d" integrity sha512-0nkdeijB7VlZoLT3r/mY3bUkw3T8WG/hNw+FATs/6+pG2039IJWjTYL0VTISqsNHMUTEnwbVnc89WIJX9Qed0A== @@ -197,6 +233,18 @@ "@babel/helper-replace-supers" "^7.12.1" "@babel/helper-split-export-declaration" "^7.10.4" +"@babel/helper-create-class-features-plugin@^7.14.5": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.4.tgz#7f977c17bd12a5fba363cb19bea090394bf37d2e" + integrity sha512-7ZmzFi+DwJx6A7mHRwbuucEYpyBwmh2Ca0RvI6z2+WLZYCqV0JOaLb+u0zbtmDicebgKBZgqbYfLaKNqSgv5Pw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.15.4" + "@babel/helper-function-name" "^7.15.4" + "@babel/helper-member-expression-to-functions" "^7.15.4" + "@babel/helper-optimise-call-expression" "^7.15.4" + "@babel/helper-replace-supers" "^7.15.4" + "@babel/helper-split-export-declaration" "^7.15.4" + "@babel/helper-create-regexp-features-plugin@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz#fdd60d88524659a0b6959c0579925e425714f3b8" @@ -292,6 +340,13 @@ dependencies: "@babel/types" "^7.12.1" +"@babel/helper-member-expression-to-functions@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz#bfd34dc9bba9824a4658b0317ec2fd571a51e6ef" + integrity sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA== + dependencies: + "@babel/types" "^7.15.4" + "@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.12.1", "@babel/helper-module-imports@^7.8.3": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.1.tgz#1644c01591a15a2f084dd6d092d9430eb1d1216c" @@ -299,6 +354,13 @@ dependencies: "@babel/types" "^7.12.1" +"@babel/helper-module-imports@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz#e18007d230632dea19b47853b984476e7b4e103f" + integrity sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA== + dependencies: + "@babel/types" "^7.15.4" + "@babel/helper-module-transforms@^7.10.4", "@babel/helper-module-transforms@^7.10.5", "@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.9.0": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz#7954fec71f5b32c48e4b303b437c34453fd7247c" @@ -314,6 +376,20 @@ "@babel/types" "^7.12.1" lodash "^4.17.19" +"@babel/helper-module-transforms@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.15.4.tgz#962cc629a7f7f9a082dd62d0307fa75fe8788d7c" + integrity sha512-9fHHSGE9zTC++KuXLZcB5FKgvlV83Ox+NLUmQTawovwlJ85+QMhk1CnVk406CQVj97LaWod6KVjl2Sfgw9Aktw== + dependencies: + "@babel/helper-module-imports" "^7.15.4" + "@babel/helper-replace-supers" "^7.15.4" + "@babel/helper-simple-access" "^7.15.4" + "@babel/helper-split-export-declaration" "^7.15.4" + "@babel/helper-validator-identifier" "^7.14.9" + "@babel/template" "^7.15.4" + "@babel/traverse" "^7.15.4" + "@babel/types" "^7.15.4" + "@babel/helper-optimise-call-expression@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz#50dc96413d594f995a77905905b05893cd779673" @@ -321,11 +397,23 @@ dependencies: "@babel/types" "^7.10.4" +"@babel/helper-optimise-call-expression@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz#f310a5121a3b9cc52d9ab19122bd729822dee171" + integrity sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw== + dependencies: + "@babel/types" "^7.15.4" + "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== +"@babel/helper-plugin-utils@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9" + integrity sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ== + "@babel/helper-regex@^7.10.4": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.10.5.tgz#32dfbb79899073c415557053a19bd055aae50ae0" @@ -373,6 +461,16 @@ "@babel/traverse" "^7.12.1" "@babel/types" "^7.12.1" +"@babel/helper-replace-supers@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz#52a8ab26ba918c7f6dee28628b07071ac7b7347a" + integrity sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.15.4" + "@babel/helper-optimise-call-expression" "^7.15.4" + "@babel/traverse" "^7.15.4" + "@babel/types" "^7.15.4" + "@babel/helper-simple-access@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz#0f5ccda2945277a2a7a2d3a821e15395edcf3461" @@ -388,6 +486,13 @@ dependencies: "@babel/types" "^7.12.1" +"@babel/helper-simple-access@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz#ac368905abf1de8e9781434b635d8f8674bcc13b" + integrity sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg== + dependencies: + "@babel/types" "^7.15.4" + "@babel/helper-skip-transparent-expression-wrappers@^7.11.0": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.11.0.tgz#eec162f112c2f58d3af0af125e3bb57665146729" @@ -431,6 +536,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz#175567380c3e77d60ff98a54bb015fe78f2178d9" integrity sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A== +"@babel/helper-validator-option@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3" + integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow== + "@babel/helper-wrap-function@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz#8a6f701eab0ff39f765b5a1cfef409990e624b87" @@ -450,7 +560,25 @@ "@babel/traverse" "^7.12.5" "@babel/types" "^7.12.5" -"@babel/highlight@^7.0.0", "@babel/highlight@^7.10.4", "@babel/highlight@^7.8.3": +"@babel/helpers@^7.15.4": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.15.4.tgz#5f40f02050a3027121a3cf48d497c05c555eaf43" + integrity sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ== + dependencies: + "@babel/template" "^7.15.4" + "@babel/traverse" "^7.15.4" + "@babel/types" "^7.15.4" + +"@babel/highlight@^7.0.0", "@babel/highlight@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" + integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== + dependencies: + "@babel/helper-validator-identifier" "^7.14.5" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/highlight@^7.10.4", "@babel/highlight@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== @@ -513,12 +641,12 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-proposal-class-properties@^7.7.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz#a33bf632da390a59c7a8c570045d1115cd778807" - integrity sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz#40d1ee140c5b1e31a350f4f5eed945096559b42e" + integrity sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg== dependencies: - "@babel/helper-create-class-features-plugin" "^7.10.4" - "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-create-class-features-plugin" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" "@babel/plugin-proposal-decorators@7.8.3": version "7.8.3" @@ -634,7 +762,18 @@ "@babel/plugin-syntax-object-rest-spread" "^7.8.0" "@babel/plugin-transform-parameters" "^7.12.1" -"@babel/plugin-proposal-object-rest-spread@^7.6.2", "@babel/plugin-proposal-object-rest-spread@^7.9.0": +"@babel/plugin-proposal-object-rest-spread@^7.6.2": + version "7.14.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.7.tgz#5920a2b3df7f7901df0205974c0641b13fd9d363" + integrity sha512-082hsZz+sVabfmDWo1Oct1u1AgbKbUAyVgmX4otIc7bdsRgHBXwTwb3DpDmD4Eyyx6DNiuz5UAATT655k+kL5g== + dependencies: + "@babel/compat-data" "^7.14.7" + "@babel/helper-compilation-targets" "^7.14.5" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.14.5" + +"@babel/plugin-proposal-object-rest-spread@^7.9.0": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz#bd81f95a1f746760ea43b6c2d3d62b11790ad0af" integrity sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA== @@ -744,7 +883,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-flow@^7.10.4", "@babel/plugin-syntax-flow@^7.8.3": +"@babel/plugin-syntax-flow@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.14.5.tgz#2ff654999497d7d7d142493260005263731da180" + integrity sha512-9WK5ZwKCdWHxVuU13XNT6X73FGmutAXeor5lGFq6qhOFtMFUF4jkbijuyUdZZlpYq6E2hZeZf/u3959X9wsv0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-flow@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.10.4.tgz#53351dd7ae01995e567d04ce42af1a6e0ba846a6" integrity sha512-yxQsX1dJixF4qEEdzVbst3SZQ58Nrooz8NV9Z9GL4byTE25BvJgl5lf0RECUf0fh28rZBb/RYTWn/eeKwCMrZQ== @@ -786,7 +932,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.8.0": +"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== @@ -998,13 +1144,13 @@ "@babel/helper-plugin-utils" "^7.8.3" "@babel/plugin-syntax-flow" "^7.8.3" -"@babel/plugin-transform-flow-strip-types@^7.10.4": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.10.4.tgz#c497957f09e86e3df7296271e9eb642876bf7788" - integrity sha512-XTadyuqNst88UWBTdLjM+wEY7BFnY2sYtPyAidfC7M/QaZnSuIZpMvLxqGT7phAcnGyWh/XQFLKcGf04CnvxSQ== +"@babel/plugin-transform-flow-strip-types@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.14.5.tgz#0dc9c1d11dcdc873417903d6df4bed019ef0f85e" + integrity sha512-KhcolBKfXbvjwI3TV7r7TkYm8oNXHNBqGOy6JDVwtecFaRoKYsUUqJdS10q0YDKW1c6aZQgO+Ys3LfGkox8pXA== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-syntax-flow" "^7.10.4" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-syntax-flow" "^7.14.5" "@babel/plugin-transform-for-of@^7.12.1": version "7.12.1" @@ -1198,6 +1344,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-parameters@^7.14.5": + version "7.15.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.15.4.tgz#5f2285cc3160bf48c8502432716b48504d29ed62" + integrity sha512-9WB/GUTO6lvJU3XQsSr6J/WKvBC2hcs4Pew8YxZagi6GkTdniyqp8On5kqdK8MN0LMeu0mGbhPN+O049NV/9FQ== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-transform-property-literals@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz#41bc81200d730abb4456ab8b3fbd5537b59adecd" @@ -1212,13 +1365,20 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-react-constant-elements@^7.0.0", "@babel/plugin-transform-react-constant-elements@^7.12.1", "@babel/plugin-transform-react-constant-elements@^7.2.0", "@babel/plugin-transform-react-constant-elements@^7.6.3": +"@babel/plugin-transform-react-constant-elements@^7.0.0", "@babel/plugin-transform-react-constant-elements@^7.12.1": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.12.1.tgz#4471f0851feec3231cc9aaa0dccde39947c1ac1e" integrity sha512-KOHd0tIRLoER+J+8f9DblZDa1fLGPwaaN1DI1TVHuQFOpjHV22C3CUB3obeC4fexHY9nx+fH0hQNvLFFfA1mxA== dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-react-constant-elements@^7.2.0", "@babel/plugin-transform-react-constant-elements@^7.6.3": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.14.5.tgz#41790d856f7c5cec82d2bcf5d0e5064d682522ed" + integrity sha512-NBqLEx1GxllIOXJInJAQbrnwwYJsV3WaMHIcOwD8rhYS0AabTWn7kHdHgPgu5RmHLU0q4DMxhAMu8ue/KampgQ== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/plugin-transform-react-display-name@7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.8.3.tgz#70ded987c91609f78353dd76d2fb2a0bb991e8e5" @@ -1610,12 +1770,13 @@ semver "^5.5.0" "@babel/preset-flow@^7.0.0": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.10.4.tgz#e0d9c72f8cb02d1633f6a5b7b16763aa2edf659f" - integrity sha512-XI6l1CptQCOBv+ZKYwynyswhtOKwpZZp5n0LG1QKCo8erRhqjoQV6nvx61Eg30JHpysWQSBwA2AWRU3pBbSY5g== + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.14.5.tgz#a1810b0780c8b48ab0bece8e7ab8d0d37712751c" + integrity sha512-pP5QEb4qRUSVGzzKx9xqRuHUrM/jEzMqdrZpdMA+oUCRgd5zM1qGr5y5+ZgAL/1tVv1H0dyk5t4SKJntqyiVtg== dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - "@babel/plugin-transform-flow-strip-types" "^7.10.4" + "@babel/helper-plugin-utils" "^7.14.5" + "@babel/helper-validator-option" "^7.14.5" + "@babel/plugin-transform-flow-strip-types" "^7.14.5" "@babel/preset-modules@^0.1.3": version "0.1.3" @@ -1684,14 +1845,14 @@ dependencies: regenerator-runtime "^0.13.4" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.1", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.5", "@babel/runtime@^7.11.0", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.3.1", "@babel/runtime@^7.3.4", "@babel/runtime@^7.4.4", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.1", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.5", "@babel/runtime@^7.11.0", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.3.1", "@babel/runtime@^7.3.4", "@babel/runtime@^7.4.4", "@babel/runtime@^7.4.5", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.3", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": version "7.12.5" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.12.5.tgz#410e7e487441e1b360c29be715d870d9b985882e" integrity sha512-plcc+hbExy3McchJCEQG3knOsuh3HH+Prx1P6cLIkET/0dLuQDEnrT+s27Axgc9bqfsmNUNHfscgMUdBpC9xfg== dependencies: regenerator-runtime "^0.13.4" -"@babel/runtime@^7.14.0": +"@babel/runtime@^7.14.0", "@babel/runtime@^7.5.0", "@babel/runtime@^7.7.6": version "7.15.4" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.15.4.tgz#fd17d16bfdf878e6dd02d19753a39fa8a8d9c84a" integrity sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw== @@ -1731,7 +1892,7 @@ globals "^11.1.0" lodash "^4.17.19" -"@babel/traverse@^7.4.5": +"@babel/traverse@^7.1.6", "@babel/traverse@^7.15.4", "@babel/traverse@^7.4.5": version "7.15.4" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.15.4.tgz#ff8510367a144bfbff552d9e18e28f3e2889c22d" integrity sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA== @@ -1755,7 +1916,7 @@ lodash "^4.17.19" to-fast-properties "^2.0.0" -"@babel/types@^7.15.4": +"@babel/types@^7.15.4", "@babel/types@^7.2.0": version "7.15.4" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.15.4.tgz#74eeb86dbd6748d2741396557b9860e57fce0a0d" integrity sha512-0f1HJFuGmmbrKTCZtbm3cU+b/AqdEYk5toj5iQur58xkVMlS0JWaKxTBSmCXd47uiN7vbcozAupm6Mvs80GNhw== @@ -1763,6 +1924,11 @@ "@babel/helper-validator-identifier" "^7.14.9" to-fast-properties "^2.0.0" +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + "@chainsafe/browser-storage-hooks@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@chainsafe/browser-storage-hooks/-/browser-storage-hooks-1.0.1.tgz#26d32cde1999914db755a631e2643823c54959f7" @@ -1780,11 +1946,6 @@ dependencies: redoc-cli "^0.12.3" -"@chainsafe/files-api-client@1.18.1": - version "1.18.1" - resolved "https://registry.yarnpkg.com/@chainsafe/files-api-client/-/files-api-client-1.18.1.tgz#bcfdff988743d4684079dca10c4d86f86f93b822" - integrity sha512-FqNZdiBMo5GoHeQgya5u8AdjLhPqBR8iKYxrhp0oWxbb2FJdrExZTmLQT5y2e7vlSvdiY5aJT//4VioK138xmQ== - "@chainsafe/web3-context@1.1.4": version "1.1.4" resolved "https://registry.yarnpkg.com/@chainsafe/web3-context/-/web3-context-1.1.4.tgz#ce0f140af8ccf93af1a189fbdbd6f018b9bf5fb7" @@ -3782,6 +3943,11 @@ resolved "https://registry.yarnpkg.com/@icons/material/-/material-0.2.4.tgz#e90c9f71768b3736e76d7dd6783fc6c2afa88bc8" integrity sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw== +"@istanbuljs/schema@^0.1.2": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + "@jest/console@^24.7.1", "@jest/console@^24.9.0": version "24.9.0" resolved "https://registry.yarnpkg.com/@jest/console/-/console-24.9.0.tgz#79b1bc06fb74a8cfb01cbdedf945584b1b9707f0" @@ -5593,11 +5759,6 @@ memory-cache "^0.2.0" web3-utils "^1.3.6" -"@types/anymatch@*": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a" - integrity sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA== - "@types/aria-query@^4.2.0": version "4.2.0" resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-4.2.0.tgz#14264692a9d6e2fa4db3df5e56e94b5e25647ac0" @@ -5705,16 +5866,16 @@ integrity sha512-2xtoL22/3Mv6a70i4+4RB7VgbDDORoWwjcqeNysojZA0R7NK17RbY5Gof/2QiFfJgX+KkWghbwJ+d/2SB8Ndzg== "@types/html-minifier-terser@^5.0.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.0.tgz#551a4589b6ee2cc9c1dff08056128aec29b94880" - integrity sha512-iYCgjm1dGPRuo12+BStjd1HiVQqhlRhWDOQigNxn023HcjnhsiFz9pc6CzJj4HwDCSQca9bxTL4PxJDbkdm3PA== + version "5.1.2" + resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.2.tgz#693b316ad323ea97eed6b38ed1a3cc02b1672b57" + integrity sha512-h4lTMgMJctJybDp8CQrxTUiiYmedihHWkjnF/8Pxseu2S6Nlfcy8kwboQ8yejh456rP2yWoEVm1sS/FVsfM48w== "@types/is-function@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@types/is-function/-/is-function-1.0.0.tgz#1b0b819b1636c7baf0d6785d030d12edf70c3e83" integrity sha512-iTs9HReBu7evG77Q4EC8hZnqRt57irBDkK9nvmHroiOIVwYMQc4IvYvdRgwKfYepunIY7Oh/dBuuld+Gj9uo6w== -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": version "2.0.3" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" integrity sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw== @@ -6058,10 +6219,10 @@ resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== -"@types/tapable@*", "@types/tapable@^1.0.5": - version "1.0.6" - resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.6.tgz#a9ca4b70a18b270ccb2bc0aaafefd1d486b7ea74" - integrity sha512-W+bw9ds02rAQaMvaLYxAbJ6cvguW/iJXNT6lTssS1ps6QdrMKttqEAMEG/b5CR8TZl3/L7/lH0ZV5nNR1LXikA== +"@types/tapable@^1", "@types/tapable@^1.0.5": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.8.tgz#b94a4391c85666c7b73299fd3ad79d4faa435310" + integrity sha512-ipixuVrh2OdNmauvtT51o3d8z12p6LtFW9in7U79der/kwejjdNchQC5UMn5u/KxNoM7VHHOs/l8KS8uHxhODQ== "@types/testing-library__jest-dom@^5.9.1": version "5.9.2" @@ -6071,9 +6232,9 @@ "@types/jest" "*" "@types/uglify-js@*": - version "3.9.3" - resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.9.3.tgz#d94ed608e295bc5424c9600e6b8565407b6b4b6b" - integrity sha512-KswB5C7Kwduwjj04Ykz+AjvPcfgv/37Za24O2EDzYNbwyzOo8+ydtvzUfZ5UMguiVu29Gx44l1A6VsPPcmYu9w== + version "3.13.1" + resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.13.1.tgz#5e889e9e81e94245c75b6450600e1c5ea2878aea" + integrity sha512-O3MmRAk6ZuAKa9CHgg0Pr0+lUOqoMLpc9AS4R8ano2auvsg7IE8syF3Xh/NPr26TWklxYcqoEEFdzLLs1fV9PQ== dependencies: source-map "^0.6.1" @@ -6098,24 +6259,24 @@ integrity sha512-5oiXqR7kwDGZ6+gmzIO2lTC+QsriNuQXZDWNYRV3l2XRN/zmPgnC21DLSx2D05zvD8vnXW6qUg7JnXZ4I6qLVQ== "@types/webpack-sources@*": - version "1.4.2" - resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-1.4.2.tgz#5d3d4dea04008a779a90135ff96fb5c0c9e6292c" - integrity sha512-77T++JyKow4BQB/m9O96n9d/UUHWLQHlcqXb9Vsf4F1+wKNrrlWNFPDLKNT92RJnCSL6CieTc+NDXtCVZswdTw== + version "3.2.0" + resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-3.2.0.tgz#16d759ba096c289034b26553d2df1bf45248d38b" + integrity sha512-Ft7YH3lEVRQ6ls8k4Ff1oB4jN6oy/XmU6tQISKdhfh+1mR+viZFphS6WL0IrtDOzvefmJg5a0s7ZQoRXwqTEFg== dependencies: "@types/node" "*" "@types/source-list-map" "*" source-map "^0.7.3" "@types/webpack@^4.41.8": - version "4.41.21" - resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.21.tgz#cc685b332c33f153bb2f5fc1fa3ac8adeb592dee" - integrity sha512-2j9WVnNrr/8PLAB5csW44xzQSJwS26aOnICsP3pSGCEdsu6KYtfQ6QJsVUKHWRnm1bL7HziJsfh5fHqth87yKA== + version "4.41.30" + resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.30.tgz#fd3db6d0d41e145a8eeeafcd3c4a7ccde9068ddc" + integrity sha512-GUHyY+pfuQ6haAfzu4S14F+R5iGRwN6b2FRNJY7U0NilmFAqbsOfK6j1HwuLBAqwRIT+pVdNDJGJ6e8rpp0KHA== dependencies: - "@types/anymatch" "*" "@types/node" "*" - "@types/tapable" "*" + "@types/tapable" "^1" "@types/uglify-js" "*" "@types/webpack-sources" "*" + anymatch "^3.0.0" source-map "^0.6.0" "@types/yargs-parser@*": @@ -6810,11 +6971,16 @@ acorn@^5.0.0, acorn@^5.5.3: resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg== -acorn@^6.0.1, acorn@^6.0.4, acorn@^6.2.1, acorn@^6.4.1: +acorn@^6.0.1, acorn@^6.0.4, acorn@^6.2.1: version "6.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== +acorn@^6.4.1: + version "6.4.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" + integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== + acorn@^7.1.1, acorn@^7.4.0: version "7.4.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.0.tgz#e1ad486e6c54501634c6c397c5c121daa383607c" @@ -6891,7 +7057,7 @@ ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.2, ajv@^6.12.3, ajv@^6.12.5: +ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.12.5: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -6997,11 +7163,11 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: color-convert "^2.0.1" ansi-to-html@^0.6.11: - version "0.6.14" - resolved "https://registry.yarnpkg.com/ansi-to-html/-/ansi-to-html-0.6.14.tgz#65fe6d08bba5dd9db33f44a20aec331e0010dad8" - integrity sha512-7ZslfB1+EnFSDO5Ju+ue5Y6It19DRnZXWv8jrGHgIlPna5Mh4jz7BV5jCbQneXNFurQcKoolaaAjHtgSBfOIuA== + version "0.6.15" + resolved "https://registry.yarnpkg.com/ansi-to-html/-/ansi-to-html-0.6.15.tgz#ac6ad4798a00f6aa045535d7f6a9cb9294eebea7" + integrity sha512-28ijx2aHJGdzbs+O5SNQF65r6rrKYnkuwTYm8lZlChuoJ9P1vVzIpWO20sQTqTPDXYp6NFwk326vApTtLVFXpQ== dependencies: - entities "^1.1.2" + entities "^2.0.0" anymatch@^2.0.0: version "2.0.0" @@ -7011,6 +7177,14 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" +anymatch@^3.0.0, anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + anymatch@~3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" @@ -7162,7 +7336,17 @@ array.prototype.flat@^1.2.1: define-properties "^1.1.3" es-abstract "^1.17.0-next.1" -array.prototype.flatmap@^1.2.1, array.prototype.flatmap@^1.2.3: +array.prototype.flatmap@^1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz#94cfd47cc1556ec0747d97f7c7738c58122004c9" + integrity sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + function-bind "^1.1.1" + +array.prototype.flatmap@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.3.tgz#1c13f84a178566042dd63de4414440db9222e443" integrity sha512-OOEk+lkePcg+ODXIpvuU9PAryCikCJyo7GlDG1upleEpQRx6mzL9puEBkozQ5iAx20KV0l3DbyQwqciJtqe5Pg== @@ -7171,15 +7355,16 @@ array.prototype.flatmap@^1.2.1, array.prototype.flatmap@^1.2.3: es-abstract "^1.17.0-next.1" function-bind "^1.1.1" -array.prototype.map@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array.prototype.map/-/array.prototype.map-1.0.2.tgz#9a4159f416458a23e9483078de1106b2ef68f8ec" - integrity sha512-Az3OYxgsa1g7xDYp86l0nnN4bcmuEITGe1rbdEBVkrqkzMgDcbdQ2R7r41pNzti+4NMces3H8gMmuioZUilLgw== +array.prototype.map@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array.prototype.map/-/array.prototype.map-1.0.3.tgz#1609623618d3d84134a37d4a220030c2bd18420b" + integrity sha512-nNcb30v0wfDyIe26Yif3PcV1JXQp4zEeEfupG7L4SRjnD6HLbO5b2a7eVSba53bOx4YCHYMBHt+Fp4vYstneRA== dependencies: + call-bind "^1.0.0" define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" + es-abstract "^1.18.0-next.1" es-array-method-boxes-properly "^1.0.0" - is-string "^1.0.4" + is-string "^1.0.5" arrify@^1.0.1: version "1.0.1" @@ -7231,15 +7416,12 @@ ast-types-flow@0.0.7, ast-types-flow@^0.0.7: resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= -ast-types@0.11.3: - version "0.11.3" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.11.3.tgz#c20757fe72ee71278ea0ff3d87e5c2ca30d9edf8" - integrity sha512-XA5o5dsNw8MhyW0Q7MWXJWc4oOzZKbdsEJq45h7c8q/d9DwWZ5F2ugUc1PuMLPGsUnphCt/cNDHu8JeBbxf1qA== - -ast-types@^0.13.2: - version "0.13.3" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.3.tgz#50da3f28d17bdbc7969a3a2d83a0e4a72ae755a7" - integrity sha512-XTZ7xGML849LkQP86sWdQzfhwbt3YwIO6MqbX9mUNYY98VKaaVZP7YNNm70IpwecbkkxmfC5IYAzOQ/2p29zRA== +ast-types@^0.14.2: + version "0.14.2" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.14.2.tgz#600b882df8583e3cd4f2df5fa20fa83759d4bdfd" + integrity sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA== + dependencies: + tslib "^2.0.1" astral-regex@^1.0.0: version "1.0.0" @@ -7668,7 +7850,23 @@ babel-plugin-dynamic-import-node@^2.3.3: dependencies: object.assign "^4.1.0" -babel-plugin-emotion@^10.0.20, babel-plugin-emotion@^10.0.27: +babel-plugin-emotion@^10.0.20: + version "10.2.2" + resolved "https://registry.yarnpkg.com/babel-plugin-emotion/-/babel-plugin-emotion-10.2.2.tgz#a1fe3503cff80abfd0bdda14abd2e8e57a79d17d" + integrity sha512-SMSkGoqTbTyUTDeuVuPIWifPdUGkTk1Kf9BWRiXIOIcuyMfsdp2EjeiiFvOzX8NOBvEh/ypKYvUh2rkgAJMCLA== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@emotion/hash" "0.8.0" + "@emotion/memoize" "0.7.4" + "@emotion/serialize" "^0.11.16" + babel-plugin-macros "^2.0.0" + babel-plugin-syntax-jsx "^6.18.0" + convert-source-map "^1.5.0" + escape-string-regexp "^1.0.5" + find-root "^1.1.0" + source-map "^0.5.7" + +babel-plugin-emotion@^10.0.27: version "10.0.33" resolved "https://registry.yarnpkg.com/babel-plugin-emotion/-/babel-plugin-emotion-10.0.33.tgz#ce1155dcd1783bbb9286051efee53f4e2be63e03" integrity sha512-bxZbTTGz0AJQDHm8k6Rf3RQJ8tX2scsfsRyKVgAbiUPUNIRtlK+7JxP+TAd1kRLABFxe0CFm2VdK4ePkoA9FxQ== @@ -7786,19 +7984,34 @@ babel-plugin-minify-type-constructors@^0.4.3: dependencies: babel-helper-is-void-0 "^0.4.3" -babel-plugin-named-asset-import@^0.3.1, babel-plugin-named-asset-import@^0.3.6: +babel-plugin-named-asset-import@^0.3.1: + version "0.3.7" + resolved "https://registry.yarnpkg.com/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.7.tgz#156cd55d3f1228a5765774340937afc8398067dd" + integrity sha512-squySRkf+6JGnvjoUtDEjSREJEBirnXi9NqP6rjSYsylxQxqBTz+pkmf395i9E2zsvmYUaI40BHo6SqZUdydlw== + +babel-plugin-named-asset-import@^0.3.6: version "0.3.6" resolved "https://registry.yarnpkg.com/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.6.tgz#c9750a1b38d85112c9e166bf3ef7c5dbc605f4be" integrity sha512-1aGDUfL1qOOIoqk9QKGIo2lANk+C7ko/fqH0uIyC71x3PEGz0uVP8ISgfEsFuG+FKmjHTvFK/nNM8dowpmUxLA== babel-plugin-react-docgen@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/babel-plugin-react-docgen/-/babel-plugin-react-docgen-4.1.0.tgz#1dfa447dac9ca32d625a123df5733a9e47287c26" - integrity sha512-vzpnBlfGv8XOhJM2zbPyyqw2OLEbelgZZsaaRRTpVwNKuYuc+pUg4+dy7i9gCRms0uOQn4osX571HRcCJMJCmA== + version "4.2.1" + resolved "https://registry.yarnpkg.com/babel-plugin-react-docgen/-/babel-plugin-react-docgen-4.2.1.tgz#7cc8e2f94e8dc057a06e953162f0810e4e72257b" + integrity sha512-UQ0NmGHj/HAqi5Bew8WvNfCk8wSsmdgNd8ZdMjBCICtyCJCq9LiqgqvjCYe570/Wg7AQArSq1VQ60Dd/CHN7mQ== dependencies: + ast-types "^0.14.2" lodash "^4.17.15" react-docgen "^5.0.0" - recast "^0.14.7" + +"babel-plugin-styled-components@>= 1.12.0": + version "1.13.2" + resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-1.13.2.tgz#ebe0e6deff51d7f93fceda1819e9b96aeb88278d" + integrity sha512-Vb1R3d4g+MUfPQPVDMCGjm3cDocJEUTR7Xq7QS95JWWeksN1wdFRYpD2kulDgI3Huuaf1CZd+NK4KQmqUFh5dA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-module-imports" "^7.0.0" + babel-plugin-syntax-jsx "^6.18.0" + lodash "^4.17.11" "babel-plugin-styled-components@>= 1.12.0": version "1.13.2" @@ -8871,6 +9084,17 @@ browserslist@^4.14.5: escalade "^3.1.1" node-releases "^1.1.66" +browserslist@^4.16.6: + version "4.16.8" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.16.8.tgz#cb868b0b554f137ba6e33de0ecff2eda403c4fb0" + integrity sha512-sc2m9ohR/49sWEbPj14ZSSZqp+kbi16aLao42Hmn3Z8FpjuMaq2xCA2l4zl9ITfyzvnvyE0hcg62YkIGKxgaNQ== + dependencies: + caniuse-lite "^1.0.30001251" + colorette "^1.3.0" + electron-to-chromium "^1.3.811" + escalade "^3.1.1" + node-releases "^1.1.75" + bs58@^4.0.0, bs58@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" @@ -9009,6 +9233,24 @@ bytes@3.1.0: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== +c8@^7.6.0: + version "7.8.0" + resolved "https://registry.yarnpkg.com/c8/-/c8-7.8.0.tgz#8fcfe848587d9d5796f22e9b0546a387a66d1b3b" + integrity sha512-x2Bx+IIEd608B1LmjiNQ/kizRPkCWo5XzuV57J9afPjAHSnYXALwbCSOkQ7cSaNXBNblfqcvdycj+klmL+j6yA== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@istanbuljs/schema" "^0.1.2" + find-up "^5.0.0" + foreground-child "^2.0.0" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-report "^3.0.0" + istanbul-reports "^3.0.2" + rimraf "^3.0.0" + test-exclude "^6.0.0" + v8-to-istanbul "^8.0.0" + yargs "^16.2.0" + yargs-parser "^20.2.7" + cacache@^12.0.2: version "12.0.4" resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.4.tgz#668bcbd105aeb5f1d92fe25570ec9525c8faa40c" @@ -9178,10 +9420,15 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30000989, caniuse-lite@^1.0.30001035, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001111, caniuse-lite@^1.0.30001157: - version "1.0.30001197" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001197.tgz" - integrity sha512-8aE+sqBqtXz4G8g35Eg/XEaFr2N7rd/VQ6eABGBmNtcB8cN6qNJhMi6oSFy4UWWZgqgL3filHT8Nha4meu3tsw== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001035, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001111, caniuse-lite@^1.0.30001157: + version "1.0.30001255" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001255.tgz" + integrity sha512-F+A3N9jTZL882f/fg/WWVnKSu6IOo3ueLz4zwaOPbPYHNmM/ZaDUyzyJwS1mZhX7Ex5jqTyW599Gdelh5PDYLQ== + +caniuse-lite@^1.0.30000989, caniuse-lite@^1.0.30001251: + version "1.0.30001252" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001252.tgz#cb16e4e3dafe948fc4a9bb3307aea054b912019a" + integrity sha512-I56jhWDGMtdILQORdusxBOH+Nl/KgQSdDmpJezYddnAkVOmnoU8zwjTV9xAjMIYxr0iPreEAVylCGcmHCjfaOw== capture-exit@^2.0.0: version "2.0.0" @@ -9190,11 +9437,16 @@ capture-exit@^2.0.0: dependencies: rsvp "^4.8.4" -case-sensitive-paths-webpack-plugin@2.3.0, case-sensitive-paths-webpack-plugin@^2.2.0: +case-sensitive-paths-webpack-plugin@2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.3.0.tgz#23ac613cc9a856e4f88ff8bb73bbb5e989825cf7" integrity sha512-/4YgnZS8y1UXXmC02xD5rRrBEu6T5ub+mQHLNRj0fzTRbgdBYhsNo2V5EqwgqrExjxsjtF/OpAKAMkKsxbD5XQ== +case-sensitive-paths-webpack-plugin@^2.2.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz#db64066c6422eed2e08cc14b986ca43796dbc6d4" + integrity sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw== + caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" @@ -9434,9 +9686,9 @@ clean-stack@^2.0.0: integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== cli-boxes@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.0.tgz#538ecae8f9c6ca508e3c3c95b453fe93cb4c168d" - integrity sha512-gpaBrMAizVEANOpfZp/EEUixTXDyGt7DFzdK5hU+UbWt/J0lB0w20ncZj59Z9a93xHb9u12zF5BS6i9RKbtg4w== + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" + integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== cli-cursor@^2.1.0: version "2.1.0" @@ -9654,7 +9906,7 @@ colorette@^1.1.0, colorette@^1.2.2: resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== -colorette@^1.2.0: +colorette@^1.2.0, colorette@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.3.0.tgz#ff45d2f0edb244069d3b772adeb04fed38d0a0af" integrity sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w== @@ -9840,6 +10092,13 @@ convert-source-map@^0.3.3: resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-0.3.5.tgz#f1d802950af7dd2631a1febe0596550c86ab3190" integrity sha1-8dgClQr33SYxof6+BZZVDIarMZA= +convert-source-map@^1.6.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== + dependencies: + safe-buffer "~5.1.1" + cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" @@ -9887,21 +10146,31 @@ core-js-compat@^3.6.2: browserslist "^4.8.5" semver "7.0.0" -core-js-pure@^3.0.0, core-js-pure@^3.0.1: +core-js-pure@^3.0.0: version "3.6.5" resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.6.5.tgz#c79e75f5e38dbc85a662d91eea52b8256d53b813" integrity sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA== +core-js-pure@^3.0.1: + version "3.17.2" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.17.2.tgz#ba6311b6aa1e2f2adeba4ac6ec51a9ff40bdc1af" + integrity sha512-2VV7DlIbooyTI7Bh+yzOOWL9tGwLnQKHno7qATE+fqZzDKYr6llVjVQOzpD/QLZFgXDPb8T71pJokHEZHEYJhQ== + core-js@^2.4.0, core-js@^2.5.0: version "2.6.11" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== -core-js@^3.0.1, core-js@^3.0.4, core-js@^3.5.0, core-js@^3.6.5: +core-js@^3.0.1, core-js@^3.5.0, core-js@^3.6.5: version "3.6.5" resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.5.tgz#7395dc273af37fb2e50e9bd3d9fe841285231d1a" integrity sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA== +core-js@^3.0.4: + version "3.17.2" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.17.2.tgz#f960eae710dc62c29cca93d5332e3660e289db10" + integrity sha512-XkbXqhcXeMHPRk2ItS+zQYliAMilea2euoMsnpRRdDad6b2VY6CQQcwz1K8AnWesfw4p165RzY0bTnr3UrbYiA== + core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" @@ -10413,10 +10682,10 @@ cypress-pipe@^2.0.0: resolved "https://registry.yarnpkg.com/cypress-pipe/-/cypress-pipe-2.0.0.tgz#577df7a70a8603d89a96dfe4092a605962181af8" integrity sha512-KW9s+bz4tFLucH3rBGfjW+Q12n7S4QpUSSyxiGrgPOfoHlbYWzAGB3H26MO0VTojqf9NVvfd5Kt0MH5XMgbfyg== -cypress@^8.3.1: - version "8.3.1" - resolved "https://registry.yarnpkg.com/cypress/-/cypress-8.3.1.tgz#c6760dbb907df2570b0e1ac235fa31c30f9260a6" - integrity sha512-1v6pfx+/5cXhaT5T6QKOvnkawmEHWHLiVzm3MYMoQN1fkX2Ma1C32STd3jBStE9qT5qPSTILjGzypVRxCBi40g== +cypress@^8.4: + version "8.4.0" + resolved "https://registry.yarnpkg.com/cypress/-/cypress-8.4.0.tgz#09ec06a73f1cb10121c103cba15076e659e24876" + integrity sha512-RtVgGFR06ikyMaq/VqapeqOjGaIA42PpK7F0qe1MCiFArfUuJECsLmeYaOA+1TlmNUgJNMSF5fWKkZIJr5Uc7w== dependencies: "@cypress/request" "^2.88.6" "@cypress/xvfb" "^1.2.4" @@ -10530,7 +10799,14 @@ debug@=3.1.0: dependencies: ms "2.0.0" -debug@^3.0.0, debug@^3.1.0, debug@^3.1.1, debug@^3.2.5: +debug@^3.0.0: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +debug@^3.1.0, debug@^3.1.1, debug@^3.2.5: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== @@ -11011,7 +11287,7 @@ dotenv-webpack@^1.7.0: dependencies: dotenv-defaults "^1.0.2" -dotenv@8.2.0, dotenv@^8.0.0: +dotenv@8.2.0: version "8.2.0" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== @@ -11021,6 +11297,11 @@ dotenv@^6.2.0: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-6.2.0.tgz#941c0410535d942c8becf28d3f357dbd9d476064" integrity sha512-HygQCKUBSFl8wKQZBSemMywRWcEDNidvNbjGVyZu3nbZ8qq9ubiPoGLMdRDpfSrpkkm9BXYFkpKxxFX38o/76w== +dotenv@^8.0.0: + version "8.6.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.6.0.tgz#061af664d19f7f4d8fc6e4ff9b584ce237adcb8b" + integrity sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g== + drbg.js@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/drbg.js/-/drbg.js-1.0.1.tgz#3e36b6c42b37043823cdbc332d58f31e2445480b" @@ -11092,7 +11373,12 @@ ejs@^2.7.4: resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba" integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== -electron-to-chromium@^1.3.247, electron-to-chromium@^1.3.378, electron-to-chromium@^1.3.523: +electron-to-chromium@^1.3.247, electron-to-chromium@^1.3.811: + version "1.3.829" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.829.tgz#efd360b594824fcd84e24c6eb0c8e41e2a44fbc7" + integrity sha512-5EXDbvsaLRxS1UOfRr8Hymp3dR42bvBNPgzVuPwUFj3v66bpvDUcNwwUywQUQYn/scz26/3Sgd3fNVGQOlVwvQ== + +electron-to-chromium@^1.3.378, electron-to-chromium@^1.3.523: version "1.3.534" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.534.tgz#fc7af8518dd00a5b22a24aed3f116b5d097e2330" integrity sha512-7x2S3yUrspNHQOoPk+Eo+iHViSiJiEGPI6BpmLy1eT2KRNGCkBt/NUYqjfXLd1DpDCQp7n3+LfA1RkbG+LqTZQ== @@ -11108,9 +11394,9 @@ electron-to-chromium@^1.3.591: integrity sha512-nLO2Wd2yU42eSoNJVQKNf89CcEGqeFZd++QsnN2XIgje1s/19AgctfjLIbPORlvcCO8sYjLwX4iUgDdusOY8Sg== element-resize-detector@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/element-resize-detector/-/element-resize-detector-1.2.1.tgz#b0305194447a4863155e58f13323a0aef30851d1" - integrity sha512-BdFsPepnQr9fznNPF9nF4vQ457U/ZJXQDSNF1zBe7yaga8v9AdZf3/NElYxFdUh7SitSGt040QygiTo6dtatIw== + version "1.2.3" + resolved "https://registry.yarnpkg.com/element-resize-detector/-/element-resize-detector-1.2.3.tgz#5078d9b99398fe4c589f8c8df94ff99e5d413ff3" + integrity sha512-+dhNzUgLpq9ol5tyhoG7YLoXL3ssjfFW+0gpszXPwRU6NjGr1fVHMEAF8fVzIiRJq57Nre0RFeIjJwI8Nh2NmQ== dependencies: batch-processor "1.0.0" @@ -11211,7 +11497,7 @@ enhanced-resolve@^3.4.0: object-assign "^4.0.1" tapable "^0.2.7" -enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.0, enhanced-resolve@^4.3.0: +enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.0: version "4.3.0" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz#3b806f3bfafc1ec7de69551ef93cca46c1704126" integrity sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ== @@ -11220,6 +11506,15 @@ enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.0, enhanced-resolve@^4.3.0: memory-fs "^0.5.0" tapable "^1.0.0" +enhanced-resolve@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz#2f3cfd84dbe3b487f18f2db2ef1e064a571ca5ec" + integrity sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.5.0" + tapable "^1.0.0" + enquirer@^2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" @@ -11227,7 +11522,7 @@ enquirer@^2.3.6: dependencies: ansi-colors "^4.1.1" -entities@^1.1.1, entities@^1.1.2: +entities@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== @@ -11256,7 +11551,7 @@ error-ex@^1.2.0, error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.17.0, es-abstract@^1.17.0-next.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstract@^1.17.4, es-abstract@^1.17.5: +es-abstract@^1.17.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstract@^1.17.5: version "1.17.6" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.6.tgz#9142071707857b2cacc7b89ecb670316c3e2d52a" integrity sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw== @@ -11273,6 +11568,29 @@ es-abstract@^1.17.0, es-abstract@^1.17.0-next.0, es-abstract@^1.17.0-next.1, es- string.prototype.trimend "^1.0.1" string.prototype.trimstart "^1.0.1" +es-abstract@^1.17.0-next.0, es-abstract@^1.18.0-next.2, es-abstract@^1.18.2: + version "1.18.5" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.5.tgz#9b10de7d4c206a3581fd5b2124233e04db49ae19" + integrity sha512-DDggyJLoS91CkJjgauM5c0yZMjiD1uK3KcaCeAmffGwZ+ODWzOkPN4QwRbsK5DOFf06fywmyLci3ZD8jLGhVYA== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + get-intrinsic "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.2" + internal-slot "^1.0.3" + is-callable "^1.2.3" + is-negative-zero "^2.0.1" + is-regex "^1.1.3" + is-string "^1.0.6" + object-inspect "^1.11.0" + object-keys "^1.1.1" + object.assign "^4.1.2" + string.prototype.trimend "^1.0.4" + string.prototype.trimstart "^1.0.4" + unbox-primitive "^1.0.1" + es-abstract@^1.18.0-next.0: version "1.18.0-next.1" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0-next.1.tgz#6e3a0a4bda717e5023ab3b8e90bec36108d22c68" @@ -11317,15 +11635,16 @@ es-array-method-boxes-properly@^1.0.0: integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== es-get-iterator@^1.0.2: - version "1.1.0" - resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.0.tgz#bb98ad9d6d63b31aacdc8f89d5d0ee57bcb5b4c8" - integrity sha512-UfrmHuWQlNMTs35e1ypnvikg6jCz3SK8v8ImvmDsh36fCVUR1MqoFDiyn0/k52C8NqO3YsO8Oe0azeesNuqSsQ== + version "1.1.2" + resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.2.tgz#9234c54aba713486d7ebde0220864af5e2b283f7" + integrity sha512-+DTO8GYwbMCwbywjimwZMHp8AuYXOS2JZFWoi2AlPOS3ebnII9w/NLpNZtA7A0YLaVDw+O7KFCeoIV7OPvM7hQ== dependencies: - es-abstract "^1.17.4" + call-bind "^1.0.2" + get-intrinsic "^1.1.0" has-symbols "^1.0.1" - is-arguments "^1.0.4" - is-map "^2.0.1" - is-set "^2.0.1" + is-arguments "^1.1.0" + is-map "^2.0.2" + is-set "^2.0.2" is-string "^1.0.5" isarray "^2.0.5" @@ -11348,9 +11667,9 @@ es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50, es5-ext@~0.10.14: next-tick "~1.0.0" es5-shim@^4.5.13: - version "4.5.14" - resolved "https://registry.yarnpkg.com/es5-shim/-/es5-shim-4.5.14.tgz#90009e1019d0ea327447cb523deaff8fe45697ef" - integrity sha512-7SwlpL+2JpymWTt8sNLuC2zdhhc+wrfe5cMPI2j0o6WsPdfAiPwmFy2f0AocPB4RQVBOZ9kNTgi5YF7TdhkvEg== + version "4.6.2" + resolved "https://registry.yarnpkg.com/es5-shim/-/es5-shim-4.6.2.tgz#827cdd0c6fb5beb26fd368d65430e8b5eaeba942" + integrity sha512-n0XTVMGps+Deyr38jtqKPR5F5hb9owYeRQcKJW39eFvzUk/u/9Ww315werRzbiNMnHCUw/YHDPBphTlEnzdi+A== es6-iterator@2.0.3, es6-iterator@^2.0.3, es6-iterator@~2.0.1, es6-iterator@~2.0.3: version "2.0.3" @@ -11395,9 +11714,9 @@ es6-set@~0.1.5: event-emitter "~0.3.5" es6-shim@^0.35.5: - version "0.35.5" - resolved "https://registry.yarnpkg.com/es6-shim/-/es6-shim-0.35.5.tgz#46f59dc0a84a1c5029e8ff1166ca0a902077a9ab" - integrity sha512-E9kK/bjtCQRpN1K28Xh4BlmP8egvZBGJJ+9GtnzOwt7mdqtrjHFuVGr7QJfdjBIKqrlU5duPf3pCBoDrkjVYFg== + version "0.35.6" + resolved "https://registry.yarnpkg.com/es6-shim/-/es6-shim-0.35.6.tgz#d10578301a83af2de58b9eadb7c2c9945f7388a0" + integrity sha512-EmTr31wppcaIAgblChZiuN/l9Y7DPyw8Xtbg7fIVngn6zMW+IEBJDJngeKC3x6wr0V/vcA2wqeFnaw1bFJbDdA== es6-symbol@3.1.1: version "3.1.1" @@ -11700,7 +12019,7 @@ espree@^6.1.2: acorn-jsx "^5.2.0" eslint-visitor-keys "^1.1.0" -esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: +esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== @@ -11736,6 +12055,15 @@ estraverse@^5.1.0, estraverse@^5.2.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== +estree-to-babel@^3.1.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/estree-to-babel/-/estree-to-babel-3.2.1.tgz#82e78315275c3ca74475fdc8ac1a5103c8a75bf5" + integrity sha512-YNF+mZ/Wu2FU/gvmzuWtYc8rloubL7wfXCTgouFrnjGVXPA/EeYYA7pupXWrb3Iv1cTBeSSxxJIbK23l4MRNqg== + dependencies: + "@babel/traverse" "^7.1.6" + "@babel/types" "^7.2.0" + c8 "^7.6.0" + estree-walker@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" @@ -12903,7 +13231,16 @@ find-cache-dir@^2.1.0: make-dir "^2.0.0" pkg-dir "^3.0.0" -find-cache-dir@^3.0.0, find-cache-dir@^3.3.1: +find-cache-dir@^3.0.0: + version "3.3.2" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" + integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + +find-cache-dir@^3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== @@ -12947,6 +13284,14 @@ find-up@^2.0.0, find-up@^2.1.0: dependencies: locate-path "^2.0.0" +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + flat-cache@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" @@ -13018,6 +13363,14 @@ foreach@^2.0.4, foreach@^2.0.5: resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k= +foreground-child@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-2.0.0.tgz#71b32800c9f15aa8f2f83f4a6bd9bff35d861a53" + integrity sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^3.0.2" + forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -13267,23 +13620,24 @@ function-bind@^1.1.1: integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== function.prototype.name@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.2.tgz#5cdf79d7c05db401591dfde83e3b70c5123e9a45" - integrity sha512-C8A+LlHBJjB2AdcRPorc5JvJ5VUoWlXdEHLOJdCI7kjHEtGTpHQUiqMvCIKUwIsGwZX2jZJy761AXsn356bJQg== + version "1.1.4" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.4.tgz#e4ea839b9d3672ae99d0efd9f38d9191c5eaac83" + integrity sha512-iqy1pIotY/RmhdFZygSSlW0wko2yxkSCKqsuv4pr8QESohpYyG/Z7B/XXvPRKTJS//960rgguE5mSRUsDdaJrQ== dependencies: + call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - functions-have-names "^1.2.0" + es-abstract "^1.18.0-next.2" + functions-have-names "^1.2.2" functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= -functions-have-names@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.1.tgz#a981ac397fa0c9964551402cdc5533d7a4d52f91" - integrity sha512-j48B/ZI7VKs3sgeI2cZp7WXWmZXu7Iq5pl5/vptV5N2mq+DGFuS/ulaDjtaoLpYzuD6u8UgrUKHfgo7fDTSiBA== +functions-have-names@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.2.tgz#98d93991c39da9361f8e50b337c4f6e41f120e21" + integrity sha512-bLgc3asbWdwPbx2mNk2S49kmJCuQeu0nfmaOgbs8WIyzzkw3r4htszdIi9Q9EMezDPTYuJx2wvjZ/EwgAthpnA== fuse.js@^3.4.6: version "3.6.1" @@ -13330,6 +13684,11 @@ gensync@^1.0.0-beta.1: resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + get-caller-file@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" @@ -13349,6 +13708,15 @@ get-intrinsic@^1.0.2: has "^1.0.3" has-symbols "^1.0.1" +get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" + integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + get-own-enumerable-property-symbols@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" @@ -13373,6 +13741,14 @@ get-stream@^5.0.0, get-stream@^5.1.0: dependencies: pump "^3.0.0" +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" @@ -13434,7 +13810,19 @@ glob-to-regexp@^0.3.0: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= -glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: +glob@^7.0.0: + version "7.1.7" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" + integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -13503,9 +13891,9 @@ globals@^9.18.0: integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== globalthis@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.1.tgz#40116f5d9c071f9e8fb0037654df1ab3a83b7ef9" - integrity sha512-mJPRTc/P39NH/iNG4mXa9aIhNymaQikTrnspeCa2ZuJ+mH2QN/rXwtX3XwKrHqWgUQFbNZKtHM105aHzJalElw== + version "1.0.2" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.2.tgz#2a235d34f4d8036219f7e34929b5de9e18166b8b" + integrity sha512-ZQnSFO1la8P7auIOQECnm0sSuoMeaSq0EEdXMBFF2QJO4uNcwbyhSgG3MruWNbFTqCLmxVwGOl7LZ9kASvHdeQ== dependencies: define-properties "^1.1.3" @@ -13660,6 +14048,11 @@ has-ansi@^2.0.0: dependencies: ansi-regex "^2.0.0" +has-bigints@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" + integrity sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA== + has-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" @@ -13685,6 +14078,18 @@ has-symbols@^1.0.0, has-symbols@^1.0.1: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== +has-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" + integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" @@ -13886,7 +14291,12 @@ html-encoding-sniffer@^1.0.2: dependencies: whatwg-encoding "^1.0.1" -html-entities@^1.2.0, html-entities@^1.3.1: +html-entities@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.4.0.tgz#cfbd1b01d2afaf9adca1b10ae7dffab98c71d2dc" + integrity sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA== + +html-entities@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.3.1.tgz#fb9a1a4b5b14c5daba82d3e34c6ae4fe701a0e44" integrity sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA== @@ -13932,16 +14342,16 @@ html-webpack-plugin@4.0.0-beta.11: util.promisify "1.0.0" html-webpack-plugin@^4.0.0-beta.2: - version "4.3.0" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-4.3.0.tgz#53bf8f6d696c4637d5b656d3d9863d89ce8174fd" - integrity sha512-C0fzKN8yQoVLTelcJxZfJCE+aAvQiY2VUf3UuKrR4a9k5UMWYOtpDLsaXwATbcVCnI05hUS7L9ULQHWLZhyi3w== + version "4.5.2" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-4.5.2.tgz#76fc83fa1a0f12dd5f7da0404a54e2699666bc12" + integrity sha512-q5oYdzjKUIPQVjOosjgvCHQOv9Ett9CYYHlgvJeXG0qQvdSojnBq4vAdQBwn1+yGveAwHCoe/rMR86ozX3+c2A== dependencies: "@types/html-minifier-terser" "^5.0.0" "@types/tapable" "^1.0.5" "@types/webpack" "^4.41.8" html-minifier-terser "^5.0.1" loader-utils "^1.2.3" - lodash "^4.17.15" + lodash "^4.17.20" pretty-error "^2.1.1" tapable "^1.1.3" util.promisify "1.0.0" @@ -14335,6 +14745,15 @@ internal-slot@^1.0.2: has "^1.0.3" side-channel "^1.0.2" +internal-slot@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" + integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== + dependencies: + get-intrinsic "^1.1.0" + has "^1.0.3" + side-channel "^1.0.4" + interpret@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" @@ -14424,6 +14843,14 @@ is-arguments@^1.0.4: resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3" integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA== +is-arguments@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" + integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" @@ -14434,6 +14861,13 @@ is-arrayish@^0.3.1: resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + is-binary-path@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" @@ -14448,6 +14882,14 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + is-buffer@2.0.4, is-buffer@^2.0.2: version "2.0.4" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623" @@ -14473,6 +14915,11 @@ is-callable@^1.2.2: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9" integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA== +is-callable@^1.2.3: + version "1.2.4" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" + integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== + is-ci@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" @@ -14506,6 +14953,13 @@ is-core-module@^2.0.0: dependencies: has "^1.0.3" +is-core-module@^2.2.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.6.0.tgz#d7553b2526fe59b92ba3e40c8df757ec8a709e19" + integrity sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ== + dependencies: + has "^1.0.3" + is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -14697,10 +15151,10 @@ is-ipfs@^6.0.1: multiformats "^9.0.0" uint8arrays "^2.1.3" -is-map@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.1.tgz#520dafc4307bb8ebc33b813de5ce7c9400d644a1" - integrity sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw== +is-map@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" + integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== is-module@^1.0.0: version "1.0.0" @@ -14717,6 +15171,13 @@ is-negative-zero@^2.0.1: resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== +is-number-object@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.6.tgz#6a7aaf838c7f0686a50b4553f7e54a96494e89f0" + integrity sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g== + dependencies: + has-tostringtag "^1.0.0" + is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" @@ -14804,6 +15265,14 @@ is-regex@^1.0.4, is-regex@^1.1.0, is-regex@^1.1.1: dependencies: has-symbols "^1.0.1" +is-regex@^1.1.3: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + is-regexp@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" @@ -14819,10 +15288,10 @@ is-root@2.1.0: resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== -is-set@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.1.tgz#d1604afdab1724986d30091575f54945da7e5f43" - integrity sha512-eJEzOtVyenDs1TMzSQ3kU3K+E0GUS9sno+F0OBT97xsgcJsF9nXMBtkT9/kut5JEpM7oL7X/0qxR17K3mcwIAA== +is-set@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" + integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== is-stream@^1.0.1, is-stream@^1.1.0: version "1.1.0" @@ -14834,11 +15303,18 @@ is-stream@^2.0.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== -is-string@^1.0.4, is-string@^1.0.5: +is-string@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== +is-string@^1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + is-svg@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-3.0.0.tgz#9321dbd29c212e5ca99c4fa9794c714bcafa2f75" @@ -14953,6 +15429,11 @@ istanbul-lib-coverage@^2.0.2, istanbul-lib-coverage@^2.0.5: resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz#675f0ab69503fad4b1d849f736baaca803344f49" integrity sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA== +istanbul-lib-coverage@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" + integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== + istanbul-lib-instrument@^3.0.1, istanbul-lib-instrument@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz#a5f63d91f0bbc0c3e479ef4c5de027335ec6d630" @@ -14975,6 +15456,15 @@ istanbul-lib-report@^2.0.4: make-dir "^2.1.0" supports-color "^6.1.0" +istanbul-lib-report@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" + integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^3.0.0" + supports-color "^7.1.0" + istanbul-lib-source-maps@^3.0.1: version "3.0.6" resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz#284997c48211752ec486253da97e3879defba8c8" @@ -14993,12 +15483,20 @@ istanbul-reports@^2.2.6: dependencies: html-escaper "^2.0.0" +istanbul-reports@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.2.tgz#d593210e5000683750cb09fc0644e4b6e27fd53b" + integrity sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + iterate-iterator@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/iterate-iterator/-/iterate-iterator-1.0.1.tgz#1693a768c1ddd79c969051459453f082fe82e9f6" integrity sha512-3Q6tudGN05kbkDQDI4CqjaBf4qf85w6W6GnuZDtUVYwKgtC1q8yxYX7CZed7N+tLzQqS6roujWvszf13T+n9aw== -iterate-value@^1.0.0: +iterate-value@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/iterate-value/-/iterate-value-1.0.2.tgz#935115bd37d006a52046535ebc8d07e9c9337f57" integrity sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ== @@ -15648,7 +16146,14 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" -json5@^2.1.1, json5@^2.1.2: +json5@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" + integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== + dependencies: + minimist "^1.2.5" + +json5@^2.1.2: version "2.1.3" resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== @@ -16173,6 +16678,13 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + lodash-es@^4.17.11, lodash-es@^4.17.14: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.15.tgz#21bd96839354412f23d7a10340e5eac6ee455d78" @@ -16258,12 +16770,12 @@ lodash.uniq@^4.5.0: resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= -"lodash@>=3.5 <5", lodash@^4.0.1, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.4, lodash@^4.17.5: +"lodash@>=3.5 <5", lodash@^4.0.1, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.4, lodash@^4.17.5: version "4.17.20" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== -lodash@^4.17.21: +lodash@^4.17.12, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -16412,7 +16924,7 @@ make-dir@^2.0.0, make-dir@^2.1.0: pify "^4.0.1" semver "^5.6.0" -make-dir@^3.0.2: +make-dir@^3.0.0, make-dir@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== @@ -17429,6 +17941,11 @@ node-releases@^1.1.66: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.66.tgz#609bd0dc069381015cd982300bae51ab4f1b1814" integrity sha512-JHEQ1iWPGK+38VLB2H9ef2otU4l8s3yAMt9Xf934r6+ojCYDMHPMqvCc9TnzfeFSP1QEOeU6YZEd3+De0LTCgg== +node-releases@^1.1.75: + version "1.1.75" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.75.tgz#6dd8c876b9897a1b8e5a02de26afa79bb54ebbfe" + integrity sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw== + normalize-hex@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/normalize-hex/-/normalize-hex-0.0.2.tgz#5491c43759db2f06b7168d8419f4925c271ab27e" @@ -17631,6 +18148,11 @@ object-hash@^2.0.1: resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-2.0.3.tgz#d12db044e03cd2ca3d77c0570d87225b02e1e6ea" integrity sha512-JPKn0GMu+Fa3zt3Bmr66JhokJU5BaNBIh4ZeTlaCBzrBsOeXzwcKKAK1tbLiPKgvwmPXsDvvLHoWh5Bm7ofIYg== +object-inspect@^1.11.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.0.tgz#9dceb146cedd4148a0d9e51ab88d34cf509922b1" + integrity sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg== + object-inspect@^1.7.0, object-inspect@^1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0" @@ -17705,7 +18227,17 @@ object.entries@^1.1.0, object.entries@^1.1.1, object.entries@^1.1.2: es-abstract "^1.17.5" has "^1.0.3" -"object.fromentries@^2.0.0 || ^1.0.0", object.fromentries@^2.0.2: +"object.fromentries@^2.0.0 || ^1.0.0": + version "2.0.4" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.4.tgz#26e1ba5c4571c5c6f0890cef4473066456a120b8" + integrity sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.2" + has "^1.0.3" + +object.fromentries@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.2.tgz#4a09c9b9bb3843dd0f89acdb517a794d4f355ac9" integrity sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ== @@ -17723,6 +18255,15 @@ object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0 define-properties "^1.1.3" es-abstract "^1.17.0-next.1" +object.getownpropertydescriptors@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz#1bd63aeacf0d5d2d2f31b5e393b03a7c601a23f7" + integrity sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.2" + object.pick@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" @@ -17802,7 +18343,15 @@ open@^6.3.0: dependencies: is-wsl "^1.1.0" -open@^7.0.0, open@^7.0.2: +open@^7.0.0: + version "7.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" + integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== + dependencies: + is-docker "^2.0.0" + is-wsl "^2.1.1" + +open@^7.0.2: version "7.1.0" resolved "https://registry.yarnpkg.com/open/-/open-7.1.0.tgz#68865f7d3cb238520fa1225a63cf28bcf8368a1c" integrity sha512-lLPI5KgOwEYCDKXf4np7y1PBEkj7HYIyP2DY8mVDRnx0VIIu6bNrRB0R66TuO7Mack6EnTNLm4uvcl1UoklTpA== @@ -17952,6 +18501,13 @@ p-limit@^2.0.0, p-limit@^2.2.0, p-limit@^2.3.0: dependencies: p-try "^2.0.0" +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" @@ -17973,6 +18529,13 @@ p-locate@^4.1.0: dependencies: p-limit "^2.2.0" +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + p-map@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" @@ -19199,7 +19762,7 @@ postcss@^6.0.1: source-map "^0.6.1" supports-color "^5.4.0" -postcss@^7, postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.23, postcss@^7.0.26, postcss@^7.0.27, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: +postcss@^7, postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2, postcss@^7.0.23, postcss@^7.0.27, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: version "7.0.32" resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.32.tgz#4310d6ee347053da3433db2be492883d62cec59d" integrity sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw== @@ -19208,6 +19771,15 @@ postcss@^7, postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, po source-map "^0.6.1" supports-color "^6.1.0" +postcss@^7.0.26: + version "7.0.36" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.36.tgz#056f8cffa939662a8f5905950c07d5285644dfcb" + integrity sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + preact@10.4.1: version "10.4.1" resolved "https://registry.yarnpkg.com/preact/-/preact-10.4.1.tgz#9b3ba020547673a231c6cf16f0fbaef0e8863431" @@ -19307,7 +19879,7 @@ prismjs@~1.17.0: optionalDependencies: clipboard "^2.0.0" -private@^0.1.6, private@^0.1.8, private@~0.1.5: +private@^0.1.6, private@^0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== @@ -19346,15 +19918,16 @@ promise-to-callback@^1.0.0: set-immediate-shim "^1.0.1" promise.allsettled@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/promise.allsettled/-/promise.allsettled-1.0.2.tgz#d66f78fbb600e83e863d893e98b3d4376a9c47c9" - integrity sha512-UpcYW5S1RaNKT6pd+s9jp9K9rlQge1UXKskec0j6Mmuq7UJCvlS2J2/s/yuPN8ehftf9HXMxWlKiPbGGUzpoRg== + version "1.0.4" + resolved "https://registry.yarnpkg.com/promise.allsettled/-/promise.allsettled-1.0.4.tgz#65e71f2a604082ed69c548b68603294090ee6803" + integrity sha512-o73CbvQh/OnPFShxHcHxk0baXR2a1m4ozb85ha0H14VEoi/EJJLa9mnPfEWJx9RjA9MLfhdjZ8I6HhWtBa64Ag== dependencies: - array.prototype.map "^1.0.1" + array.prototype.map "^1.0.3" + call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - function-bind "^1.1.1" - iterate-value "^1.0.0" + es-abstract "^1.18.0-next.2" + get-intrinsic "^1.0.2" + iterate-value "^1.0.2" promise.prototype.finally@^3.1.0: version "3.1.2" @@ -19598,11 +20171,16 @@ querystring-es3@^0.2.0: resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= -querystring@0.2.0, querystring@^0.2.0: +querystring@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= +querystring@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.1.tgz#40d77615bb09d16902a85c3e38aa8b5ed761c2dd" + integrity sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg== + querystringify@^2.1.1: version "2.2.0" resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" @@ -19816,15 +20394,17 @@ react-dnd@14.0.2: hoist-non-react-statics "^3.3.2" react-docgen@^5.0.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/react-docgen/-/react-docgen-5.3.0.tgz#9aabde5e69f1993c8ba839fd9a86696504654589" - integrity sha512-hUrv69k6nxazOuOmdGeOpC/ldiKy7Qj/UFpxaQi0eDMrUFUTIPGtY5HJu7BggSmiyAMfREaESbtBL9UzdQ+hyg== + version "5.4.0" + resolved "https://registry.yarnpkg.com/react-docgen/-/react-docgen-5.4.0.tgz#2cd7236720ec2769252ef0421f23250b39a153a1" + integrity sha512-JBjVQ9cahmNlfjMGxWUxJg919xBBKAoy3hgDgKERbR+BcF4ANpDuzWAScC7j27hZfd8sJNmMPOLWo9+vB/XJEQ== dependencies: "@babel/core" "^7.7.5" + "@babel/generator" "^7.12.11" "@babel/runtime" "^7.7.6" - ast-types "^0.13.2" + ast-types "^0.14.2" commander "^2.19.0" doctrine "^3.0.0" + estree-to-babel "^3.1.0" neo-async "^2.6.1" node-dir "^0.1.10" strip-indent "^3.0.0" @@ -19849,11 +20429,11 @@ react-dom@^17.0.1: scheduler "^0.20.2" react-draggable@^4.0.3: - version "4.4.3" - resolved "https://registry.yarnpkg.com/react-draggable/-/react-draggable-4.4.3.tgz#0727f2cae5813e36b0e4962bf11b2f9ef2b406f3" - integrity sha512-jV4TE59MBuWm7gb6Ns3Q1mxX8Azffb7oTtDtBgFkxRvhDp38YAARmRplrj0+XGkhOJB5XziArX+4HUUABtyZ0w== + version "4.4.4" + resolved "https://registry.yarnpkg.com/react-draggable/-/react-draggable-4.4.4.tgz#5b26d9996be63d32d285a426f41055de87e59b2f" + integrity sha512-6e0WdcNLwpBx/YIDpoyd2Xb04PB0elrDrulKUgdrIlwuYvxh5Ok9M+F8cljm8kPXXs43PmMzek9RrB1b7mLMqA== dependencies: - classnames "^2.2.5" + clsx "^1.1.1" prop-types "^15.6.0" react-dropzone@^11.2.4: @@ -19865,7 +20445,12 @@ react-dropzone@^11.2.4: file-selector "^0.2.2" prop-types "^15.7.2" -react-error-overlay@^6.0.3, react-error-overlay@^6.0.7: +react-error-overlay@^6.0.3: + version "6.0.9" + resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.9.tgz#3c743010c9359608c375ecd6bc76f35d93995b0a" + integrity sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew== + +react-error-overlay@^6.0.7: version "6.0.7" resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.7.tgz#1dcfb459ab671d53f660a991513cb2f0a0553108" integrity sha512-TAv1KJFh3RhqxNvhzxj6LeT5NWklP6rDr2a0jaTfsZ5wSZWHOGeqQyejUp3xxLfPt2UpyJEcVQB/zyPcmonNFA== @@ -20417,16 +21002,6 @@ realpath-native@^1.1.0: dependencies: util.promisify "^1.0.0" -recast@^0.14.7: - version "0.14.7" - resolved "https://registry.yarnpkg.com/recast/-/recast-0.14.7.tgz#4f1497c2b5826d42a66e8e3c9d80c512983ff61d" - integrity sha512-/nwm9pkrcWagN40JeJhkPaRxiHXBRkXyRh/hgU088Z/v+qCy+zIHHY6bC6o7NaKAxPqtE6nD8zBH1LfU0/Wx6A== - dependencies: - ast-types "0.11.3" - esprima "~4.0.0" - private "~0.1.5" - source-map "~0.6.1" - receptacle@^1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/receptacle/-/receptacle-1.3.2.tgz#a7994c7efafc7a01d0e2041839dab6c4951360d2" @@ -20559,7 +21134,12 @@ regenerator-runtime@^0.11.0: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== -regenerator-runtime@^0.13.2, regenerator-runtime@^0.13.3, regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.7: +regenerator-runtime@^0.13.2: + version "0.13.9" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" + integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== + +regenerator-runtime@^0.13.3, regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.7: version "0.13.7" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== @@ -20601,6 +21181,14 @@ regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.0: define-properties "^1.1.3" es-abstract "^1.17.0-next.1" +regexp.prototype.flags@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz#7ef352ae8d159e758c0eadca6f8fcb4eef07be26" + integrity sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + regexpp@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" @@ -20877,7 +21465,15 @@ resolve@1.17.0: dependencies: path-parse "^1.0.6" -resolve@^1.1.6, resolve@^1.10.0, resolve@^1.11.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.15.1, resolve@^1.16.1, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.3.2, resolve@^1.8.1: +resolve@^1.1.6, resolve@^1.11.0: + version "1.20.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" + integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== + dependencies: + is-core-module "^2.2.0" + path-parse "^1.0.6" + +resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.15.1, resolve@^1.16.1, resolve@^1.17.0, resolve@^1.18.1, resolve@^1.3.2, resolve@^1.8.1: version "1.18.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.18.1.tgz#018fcb2c5b207d2a6424aee361c5a266da8f4130" integrity sha512-lDfCPaMKfOJXjy0dPayzPdF1phampNWr3qFCjAu+rw/qbQmr5jWH5xN2hwh9QKfw9E5v4hwV7A+jrCmL8yjjqA== @@ -21240,7 +21836,7 @@ scheduler@^0.20.2: loose-envify "^1.1.0" object-assign "^4.1.1" -schema-utils@2.7.0, schema-utils@^2.0.1, schema-utils@^2.5.0, schema-utils@^2.6.0, schema-utils@^2.6.1, schema-utils@^2.6.5, schema-utils@^2.6.6, schema-utils@^2.7.0: +schema-utils@2.7.0, schema-utils@^2.5.0, schema-utils@^2.6.0, schema-utils@^2.6.1, schema-utils@^2.6.5, schema-utils@^2.6.6: version "2.7.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.0.tgz#17151f76d8eae67fbbf77960c33c676ad9f4efc7" integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== @@ -21258,6 +21854,15 @@ schema-utils@^1.0.0: ajv-errors "^1.0.0" ajv-keywords "^3.1.0" +schema-utils@^2.0.1, schema-utils@^2.7.0: + version "2.7.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" + integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== + dependencies: + "@types/json-schema" "^7.0.5" + ajv "^6.12.4" + ajv-keywords "^3.5.2" + schema-utils@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.0.0.tgz#67502f6aa2b66a2d4032b4279a2944978a0913ef" @@ -21615,6 +22220,15 @@ side-channel@^1.0.2: es-abstract "^1.17.0-next.1" object-inspect "^1.7.0" +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" @@ -22108,7 +22722,16 @@ string-width@^3.0.0, string-width@^3.1.0: is-fullwidth-code-point "^2.0.0" strip-ansi "^5.1.0" -string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0: +string-width@^4.0.0: + version "4.2.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" + integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + +string-width@^4.1.0, string-width@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== @@ -22117,7 +22740,21 @@ string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" -"string.prototype.matchall@^4.0.0 || ^3.0.1", string.prototype.matchall@^4.0.2: +"string.prototype.matchall@^4.0.0 || ^3.0.1": + version "4.0.5" + resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz#59370644e1db7e4c0c045277690cf7b01203c4da" + integrity sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.2" + get-intrinsic "^1.1.1" + has-symbols "^1.0.2" + internal-slot "^1.0.3" + regexp.prototype.flags "^1.3.1" + side-channel "^1.0.4" + +string.prototype.matchall@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.2.tgz#48bb510326fb9fdeb6a33ceaa81a6ea04ef7648e" integrity sha512-N/jp6O5fMf9os0JU3E72Qhf590RSRZU/ungsL/qJUYVTNv7hTG0P/dbPjxINVN9jpscu3nzYwKESU3P3RY5tOg== @@ -22138,12 +22775,13 @@ string.prototype.padend@^3.0.0: es-abstract "^1.17.0-next.1" string.prototype.padstart@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string.prototype.padstart/-/string.prototype.padstart-3.1.0.tgz#b47c087540d0710be5a49375751a0a627bd4ff90" - integrity sha512-envqZvUp2JItI+OeQ5UAh1ihbAV5G/2bixTojvlIa090GGqF+NQRxbWb2nv9fTGrZABv6+pE6jXoAZhhS2k4Hw== + version "3.1.2" + resolved "https://registry.yarnpkg.com/string.prototype.padstart/-/string.prototype.padstart-3.1.2.tgz#f9b9ce66bedd7c06acb40ece6e34c6046e1a019d" + integrity sha512-HDpngIP3pd0DeazrfqzuBrQZa+D2arKWquEHfGt5LzVjd+roLC3cjqVI0X8foaZz5rrrhcu8oJAQamW8on9dqw== dependencies: + call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" + es-abstract "^1.18.0-next.2" string.prototype.trimend@^1.0.1: version "1.0.1" @@ -22161,6 +22799,14 @@ string.prototype.trimend@^1.0.3: call-bind "^1.0.0" define-properties "^1.1.3" +string.prototype.trimend@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" + integrity sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + string.prototype.trimstart@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" @@ -22177,6 +22823,14 @@ string.prototype.trimstart@^1.0.3: call-bind "^1.0.0" define-properties "^1.1.3" +string.prototype.trimstart@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" + integrity sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + string_decoder@^1.0.0, string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" @@ -22308,12 +22962,28 @@ style-loader@0.23.1: schema-utils "^1.0.0" style-loader@^1.0.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.2.1.tgz#c5cbbfbf1170d076cfdd86e0109c5bba114baa1a" - integrity sha512-ByHSTQvHLkWE9Ir5+lGbVOXhxX10fbprhLvdg96wedFZb4NDekDPxVKv5Fwmio+QcMlkkNfuK+5W1peQ5CUhZg== + version "1.3.0" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.3.0.tgz#828b4a3b3b7e7aa5847ce7bae9e874512114249e" + integrity sha512-V7TCORko8rs9rIqkSrlMfkqA63DfoGBBJmK1kKGCcSi+BWb4cqz0SRsnp4l6rU5iwOEd0/2ePv68SV22VXon4Q== dependencies: loader-utils "^2.0.0" - schema-utils "^2.6.6" + schema-utils "^2.7.0" + +styled-components@^5.3.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-5.3.1.tgz#8a86dcd31bff7049c2ed408bae36fa23f03f071a" + integrity sha512-JThv2JRzyH0NOIURrk9iskdxMSAAtCfj/b2Sf1WJaCUsloQkblepy1jaCLX/bYE+mhYo3unmwVSI9I5d9ncSiQ== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/traverse" "^7.4.5" + "@emotion/is-prop-valid" "^0.8.8" + "@emotion/stylis" "^0.8.4" + "@emotion/unitless" "^0.7.4" + babel-plugin-styled-components ">= 1.12.0" + css-to-react-native "^3.0.0" + hoist-non-react-statics "^3.0.0" + shallowequal "^1.1.0" + supports-color "^5.5.0" styled-components@^5.3.0: version "5.3.1" @@ -22450,12 +23120,14 @@ symbol-tree@^3.2.2: integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== symbol.prototype.description@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/symbol.prototype.description/-/symbol.prototype.description-1.0.2.tgz#f325e1e6ad534b3b29c9c3ca73c136c9ce03c5e2" - integrity sha512-2CW5SU4/Ki1cYOOHcL2cXK4rxSg5hCU1TwZ7X4euKhV9VnfqKslh7T6/UyKkubA8cq2tOmsOv7m3ZUmQslBRuw== + version "1.0.5" + resolved "https://registry.yarnpkg.com/symbol.prototype.description/-/symbol.prototype.description-1.0.5.tgz#d30e01263b6020fbbd2d2884a6276ce4d49ab568" + integrity sha512-x738iXRYsrAt9WBhRCVG5BtIC3B7CUkFwbHW2zOvGtwM33s7JjrCDyq8V0zgMYVb5ymsL8+qkzzpANH63CPQaQ== dependencies: - es-abstract "^1.17.0-next.1" - has-symbols "^1.0.1" + call-bind "^1.0.2" + get-symbol-description "^1.0.0" + has-symbols "^1.0.2" + object.getownpropertydescriptors "^2.1.2" table@^5.2.3: version "5.4.6" @@ -22506,9 +23178,9 @@ telejson@^5.0.2: memoizerific "^1.11.3" term-size@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.0.tgz#1f16adedfe9bdc18800e1776821734086fcc6753" - integrity sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw== + version "2.2.1" + resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54" + integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg== terser-webpack-plugin@2.3.8, terser-webpack-plugin@^2.1.2: version "2.3.8" @@ -22559,6 +23231,15 @@ test-exclude@^5.2.3: read-pkg-up "^4.0.0" require-main-filename "^2.0.0" +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + testrpc@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/testrpc/-/testrpc-0.0.1.tgz#83e2195b1f5873aec7be1af8cbe6dcf39edb7aed" @@ -22855,6 +23536,11 @@ tslib@^2.0.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.2.0.tgz#fb2c475977e35e241311ede2693cee1ec6698f5c" integrity sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w== +tslib@^2.0.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" + integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== + tslib@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.3.tgz#8e0741ac45fc0c226e58a17bfc3e64b9bc6ca61c" @@ -23007,6 +23693,16 @@ ultron@~1.1.0: resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== +unbox-primitive@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" + integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== + dependencies: + function-bind "^1.1.1" + has-bigints "^1.0.1" + has-symbols "^1.0.2" + which-boxed-primitive "^1.0.2" + underscore@1.12.1: version "1.12.1" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.12.1.tgz#7bb8cc9b3d397e201cf8553336d262544ead829e" @@ -23018,9 +23714,9 @@ underscore@1.9.1: integrity sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg== unfetch@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/unfetch/-/unfetch-4.1.0.tgz#6ec2dd0de887e58a4dee83a050ded80ffc4137db" - integrity sha512-crP/n3eAPUJxZXM9T80/yv0YhkTEx2K1D3h7D1AJM6fzsWZrxdyRuLN0JH/dkZh1LNH8LxCnBzoPFCPbb2iGpg== + version "4.2.0" + resolved "https://registry.yarnpkg.com/unfetch/-/unfetch-4.2.0.tgz#7e21b0ef7d363d8d9af0fb929a5555f6ef97a3be" + integrity sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA== unicode-canonical-property-names-ecmascript@^1.0.4: version "1.0.4" @@ -23375,6 +24071,15 @@ v8-compile-cache@^2.0.3: resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" integrity sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ== +v8-to-istanbul@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.0.0.tgz#4229f2a99e367f3f018fa1d5c2b8ec684667c69c" + integrity sha512-LkmXi8UUNxnCC+JlH7/fsfsKr5AU110l+SYGJimWNkWhxbN5EyeOtm1MJ0hhvqMMOhGwBj1Fp70Yv9i+hX0QAg== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^1.6.0" + source-map "^0.7.3" + validate-npm-package-license@^3.0.1: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" @@ -23513,7 +24218,7 @@ watchpack-chokidar2@^2.0.1: dependencies: chokidar "^2.1.8" -watchpack@^1.4.0: +watchpack@^1.4.0, watchpack@^1.7.4: version "1.7.5" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453" integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ== @@ -23524,7 +24229,7 @@ watchpack@^1.4.0: chokidar "^3.4.1" watchpack-chokidar2 "^2.0.1" -watchpack@^1.6.0, watchpack@^1.7.4: +watchpack@^1.6.0: version "1.7.4" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.4.tgz#6e9da53b3c80bb2d6508188f5b200410866cd30b" integrity sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg== @@ -24141,7 +24846,18 @@ webidl-conversions@^4.0.2: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== -webpack-dev-middleware@^3.7.0, webpack-dev-middleware@^3.7.2: +webpack-dev-middleware@^3.7.0: + version "3.7.3" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz#0639372b143262e2b84ab95d3b91a7597061c2c5" + integrity sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ== + dependencies: + memory-fs "^0.4.1" + mime "^2.4.4" + mkdirp "^0.5.1" + range-parser "^1.2.1" + webpack-log "^2.0.0" + +webpack-dev-middleware@^3.7.2: version "3.7.2" resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz#0019c3db716e3fa5cecbf64f2ab88a74bab331f3" integrity sha512-1xC42LxbYoqLNAhV6YzTYacicgMZQTqRd27Sim9wn5hJrX3I5nxYy1SxSd4+gjUFsz1dQFj+yEe6zEVmSkeJjw== @@ -24299,9 +25015,9 @@ webpack@^3.0.0: yargs "^8.0.2" webpack@^4.33.0, webpack@^4.38.0: - version "4.44.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.44.1.tgz#17e69fff9f321b8f117d1fda714edfc0b939cc21" - integrity sha512-4UOGAohv/VGUNQJstzEywwNxqX417FnjZgZJpJQegddzPmTvph37eBIRbRTfdySXzVtJXLJfbMN3mMYhM6GdmQ== + version "4.46.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.46.0.tgz#bf9b4404ea20a073605e0a011d188d77cb6ad542" + integrity sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q== dependencies: "@webassemblyjs/ast" "1.9.0" "@webassemblyjs/helper-module-context" "1.9.0" @@ -24311,7 +25027,7 @@ webpack@^4.33.0, webpack@^4.38.0: ajv "^6.10.2" ajv-keywords "^3.4.1" chrome-trace-event "^1.0.2" - enhanced-resolve "^4.3.0" + enhanced-resolve "^4.5.0" eslint-scope "^4.0.3" json-parse-better-errors "^1.0.2" loader-runner "^2.4.0" @@ -24425,6 +25141,17 @@ whatwg-url@^7.0.0: tr46 "^1.0.1" webidl-conversions "^4.0.2" +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + which-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" @@ -24910,7 +25637,7 @@ yargs-parser@^2.4.1: camelcase "^3.0.0" lodash.assign "^4.0.6" -yargs-parser@^20.2.2: +yargs-parser@^20.2.2, yargs-parser@^20.2.7: version "20.2.9" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== @@ -24955,6 +25682,19 @@ yargs@^13.0.0, yargs@^13.2.4, yargs@^13.3.0, yargs@^13.3.2: y18n "^4.0.0" yargs-parser "^13.1.2" +yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + yargs@^17.0.1: version "17.1.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.1.1.tgz#c2a8091564bdb196f7c0a67c1d12e5b85b8067ba" @@ -25030,6 +25770,11 @@ yn@3.1.1: resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + yup@^0.32.8: version "0.32.8" resolved "https://registry.yarnpkg.com/yup/-/yup-0.32.8.tgz#16e4a949a86a69505abf99fd0941305ac9adfc39"