From 942134e69a2f685c51ec4d8013f08c23bf372b7a Mon Sep 17 00:00:00 2001 From: Shashank Reddy Boyapally Date: Wed, 17 Apr 2024 09:23:19 -0400 Subject: [PATCH] added chatbot tooltip and dockerfile (#36) Co-authored-by: Shashank Reddy Boyapally --- Dockerfile | 13 ++ package-lock.json | 315 ++++++++++++++++++++++++-------- package.json | 11 +- src/App.tsx | 294 +++++++++++++++++++++++++++-- src/assets/redhat-shadowman.png | Bin 0 -> 44617 bytes src/index.tsx | 2 +- 6 files changed, 543 insertions(+), 92 deletions(-) create mode 100644 Dockerfile create mode 100644 src/assets/redhat-shadowman.png diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..59c1f6e --- /dev/null +++ b/Dockerfile @@ -0,0 +1,13 @@ +FROM node:14 + +WORKDIR /app + +COPY package.json ./ + +RUN npm install + +COPY . . + +EXPOSE 3000 + +CMD ["npm", "start"] diff --git a/package-lock.json b/package-lock.json index 0810a4e..0720e5e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,16 +10,21 @@ "dependencies": { "@emotion/react": "latest", "@emotion/styled": "latest", + "@mui/base": "^5.0.0-beta.9", "@mui/icons-material": "^5.11.16", "@mui/material": "latest", "@types/react": "latest", "@types/react-dom": "latest", - "react": "latest", - "react-dom": "latest", + "axios": "^1.4.0", + "https": "^1.0.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", "react-scripts": "latest", - "typescript": "latest" + "typescript": "latest", + "uuid": "^9.0.0" }, "devDependencies": { + "@types/uuid": "^9.0.2", "gh-pages": "^5.0.0" } }, @@ -1802,9 +1807,9 @@ "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" }, "node_modules/@babel/runtime": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", - "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", + "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", "dependencies": { "regenerator-runtime": "^0.13.11" }, @@ -2188,17 +2193,17 @@ "integrity": "sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==" }, "node_modules/@emotion/is-prop-valid": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz", - "integrity": "sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz", + "integrity": "sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==", "dependencies": { - "@emotion/memoize": "^0.8.0" + "@emotion/memoize": "^0.8.1" } }, "node_modules/@emotion/memoize": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.0.tgz", - "integrity": "sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==" + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" }, "node_modules/@emotion/react": { "version": "11.10.6", @@ -3141,16 +3146,16 @@ "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" }, "node_modules/@mui/base": { - "version": "5.0.0-alpha.123", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.123.tgz", - "integrity": "sha512-pxzcAfET3I6jvWqS4kijiLMn1OmdMw+mGmDa0SqmDZo3bXXdvLhpCCPqCkULG3UykhvFCOcU5HclOX3JCA+Zhg==", - "dependencies": { - "@babel/runtime": "^7.21.0", - "@emotion/is-prop-valid": "^1.2.0", - "@mui/types": "^7.2.3", - "@mui/utils": "^5.11.13", - "@popperjs/core": "^2.11.7", - "clsx": "^1.2.1", + "version": "5.0.0-beta.9", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.9.tgz", + "integrity": "sha512-gm6gnPnc/lS5Z3neH0iuOrK7IbS02+oh6KsMtXYLhI6bJpHs+PNWFsBmISx7x4FSPVJZvZkb8Bw6pEXpIMFt7Q==", + "dependencies": { + "@babel/runtime": "^7.22.6", + "@emotion/is-prop-valid": "^1.2.1", + "@mui/types": "^7.2.4", + "@mui/utils": "^5.14.3", + "@popperjs/core": "^2.11.8", + "clsx": "^2.0.0", "prop-types": "^15.8.1", "react-is": "^18.2.0" }, @@ -3172,6 +3177,14 @@ } } }, + "node_modules/@mui/base/node_modules/clsx": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", + "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==", + "engines": { + "node": ">=6" + } + }, "node_modules/@mui/core-downloads-tracker": { "version": "5.11.15", "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.11.15.tgz", @@ -3250,6 +3263,38 @@ } } }, + "node_modules/@mui/material/node_modules/@mui/base": { + "version": "5.0.0-alpha.123", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.123.tgz", + "integrity": "sha512-pxzcAfET3I6jvWqS4kijiLMn1OmdMw+mGmDa0SqmDZo3bXXdvLhpCCPqCkULG3UykhvFCOcU5HclOX3JCA+Zhg==", + "dependencies": { + "@babel/runtime": "^7.21.0", + "@emotion/is-prop-valid": "^1.2.0", + "@mui/types": "^7.2.3", + "@mui/utils": "^5.11.13", + "@popperjs/core": "^2.11.7", + "clsx": "^1.2.1", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0", + "react-dom": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@mui/private-theming": { "version": "5.11.13", "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.11.13.tgz", @@ -3347,9 +3392,9 @@ } }, "node_modules/@mui/types": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.3.tgz", - "integrity": "sha512-tZ+CQggbe9Ol7e/Fs5RcKwg/woU+o8DCtOnccX6KmbBc7YrfqMYEYuaIcXHuhpT880QwNkZZ3wQwvtlDFA2yOw==", + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.4.tgz", + "integrity": "sha512-LBcwa8rN84bKF+f5sDyku42w1NTxaPgPyYKODsh01U1fVstTClbUoSA96oyRBnSNyEiAVjKm6Gwx9vjR+xyqHA==", "peerDependencies": { "@types/react": "*" }, @@ -3360,13 +3405,13 @@ } }, "node_modules/@mui/utils": { - "version": "5.11.13", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.11.13.tgz", - "integrity": "sha512-5ltA58MM9euOuUcnvwFJqpLdEugc9XFsRR8Gt4zZNb31XzMfSKJPR4eumulyhsOTK1rWf7K4D63NKFPfX0AxqA==", + "version": "5.14.3", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.14.3.tgz", + "integrity": "sha512-gZ6Etw+ppO43GYc1HFZSLjwd4DoZoa+RrYTD25wQLfzcSoPjVoC/zZqA2Lkq0zjgwGBQOSxKZI6jfp9uXR+kgw==", "dependencies": { - "@babel/runtime": "^7.21.0", + "@babel/runtime": "^7.22.6", "@types/prop-types": "^15.7.5", - "@types/react-is": "^16.7.1 || ^17.0.0", + "@types/react-is": "^18.2.1", "prop-types": "^15.8.1", "react-is": "^18.2.0" }, @@ -3491,9 +3536,9 @@ } }, "node_modules/@popperjs/core": { - "version": "2.11.7", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.7.tgz", - "integrity": "sha512-Cr4OjIkipTtcXKjAsm8agyleBuDHvxzeBoa1v543lbv1YaIwQjESsVcmjiWiPEbC1FIeHOG/Op9kdCmAmiS3Kw==", + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", "funding": { "type": "opencollective", "url": "https://opencollective.com/popperjs" @@ -4059,9 +4104,9 @@ } }, "node_modules/@types/react-is": { - "version": "17.0.3", - "resolved": "https://registry.npmjs.org/@types/react-is/-/react-is-17.0.3.tgz", - "integrity": "sha512-aBTIWg1emtu95bLTLx0cpkxwGW3ueZv71nE2YFBpL8k/z5czEW8yYpOo8Dp+UUAFAtKwNaOsh/ioSeQnWlZcfw==", + "version": "18.2.1", + "resolved": "https://registry.npmjs.org/@types/react-is/-/react-is-18.2.1.tgz", + "integrity": "sha512-wyUkmaaSZEzFZivD8F2ftSyAfk6L+DfFliVj/mYdOXbVjRcS87fQJLTnhk6dRZPuJjI+9g6RZJO4PNCngUrmyw==", "dependencies": { "@types/react": "*" } @@ -4132,6 +4177,12 @@ "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.3.tgz", "integrity": "sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==" }, + "node_modules/@types/uuid": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.2.tgz", + "integrity": "sha512-kNnC1GFBLuhImSnV7w4njQkUiJi0ZXUycu1rUaouPqiKlXkh77JKgdRnTAp1x5eBwcIwbtI+3otwzuIDEuDoxQ==", + "dev": true + }, "node_modules/@types/ws": { "version": "8.5.4", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz", @@ -4951,6 +5002,29 @@ "node": ">=4" } }, + "node_modules/axios": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", + "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axios/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/axobject-query": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz", @@ -8904,6 +8978,11 @@ } } }, + "node_modules/https": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https/-/https-1.0.0.tgz", + "integrity": "sha512-4EC57ddXrkaF0x83Oj8sM6SLQHAWXw90Skqu2M4AEWENZ3F02dFJE/GARA8igO79tcgYqGrD7ae4f5L3um2lgg==" + }, "node_modules/https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", @@ -14058,6 +14137,11 @@ "node": ">= 0.10" } }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, "node_modules/psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", @@ -15209,6 +15293,14 @@ "websocket-driver": "^0.7.4" } }, + "node_modules/sockjs/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/source-list-map": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", @@ -16343,9 +16435,9 @@ } }, "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", "bin": { "uuid": "dist/bin/uuid" } @@ -18508,9 +18600,9 @@ "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" }, "@babel/runtime": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", - "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", + "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", "requires": { "regenerator-runtime": "^0.13.11" } @@ -18731,17 +18823,17 @@ "integrity": "sha512-14FtKiHhy2QoPIzdTcvh//8OyBlknNs2nXRwIhG904opCby3l+9Xaf/wuPvICBF0rc1ZCNBd3nKe9cd2mecVkQ==" }, "@emotion/is-prop-valid": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.0.tgz", - "integrity": "sha512-3aDpDprjM0AwaxGE09bOPkNxHpBd+kA6jty3RnaEXdweX1DF1U3VQpPYb0g1IStAuK7SVQ1cy+bNBBKp4W3Fjg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.1.tgz", + "integrity": "sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==", "requires": { - "@emotion/memoize": "^0.8.0" + "@emotion/memoize": "^0.8.1" } }, "@emotion/memoize": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.0.tgz", - "integrity": "sha512-G/YwXTkv7Den9mXDO7AhLWkE3q+I92B+VqAE+dYG4NGPaHZGvt3G8Q0p9vmE+sq7rTGphUbAvmQ9YpbfMQGGlA==" + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==" }, "@emotion/react": { "version": "11.10.6", @@ -19438,18 +19530,25 @@ "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" }, "@mui/base": { - "version": "5.0.0-alpha.123", - "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.123.tgz", - "integrity": "sha512-pxzcAfET3I6jvWqS4kijiLMn1OmdMw+mGmDa0SqmDZo3bXXdvLhpCCPqCkULG3UykhvFCOcU5HclOX3JCA+Zhg==", - "requires": { - "@babel/runtime": "^7.21.0", - "@emotion/is-prop-valid": "^1.2.0", - "@mui/types": "^7.2.3", - "@mui/utils": "^5.11.13", - "@popperjs/core": "^2.11.7", - "clsx": "^1.2.1", + "version": "5.0.0-beta.9", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-beta.9.tgz", + "integrity": "sha512-gm6gnPnc/lS5Z3neH0iuOrK7IbS02+oh6KsMtXYLhI6bJpHs+PNWFsBmISx7x4FSPVJZvZkb8Bw6pEXpIMFt7Q==", + "requires": { + "@babel/runtime": "^7.22.6", + "@emotion/is-prop-valid": "^1.2.1", + "@mui/types": "^7.2.4", + "@mui/utils": "^5.14.3", + "@popperjs/core": "^2.11.8", + "clsx": "^2.0.0", "prop-types": "^15.8.1", "react-is": "^18.2.0" + }, + "dependencies": { + "clsx": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", + "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==" + } } }, "@mui/core-downloads-tracker": { @@ -19482,6 +19581,23 @@ "prop-types": "^15.8.1", "react-is": "^18.2.0", "react-transition-group": "^4.4.5" + }, + "dependencies": { + "@mui/base": { + "version": "5.0.0-alpha.123", + "resolved": "https://registry.npmjs.org/@mui/base/-/base-5.0.0-alpha.123.tgz", + "integrity": "sha512-pxzcAfET3I6jvWqS4kijiLMn1OmdMw+mGmDa0SqmDZo3bXXdvLhpCCPqCkULG3UykhvFCOcU5HclOX3JCA+Zhg==", + "requires": { + "@babel/runtime": "^7.21.0", + "@emotion/is-prop-valid": "^1.2.0", + "@mui/types": "^7.2.3", + "@mui/utils": "^5.11.13", + "@popperjs/core": "^2.11.7", + "clsx": "^1.2.1", + "prop-types": "^15.8.1", + "react-is": "^18.2.0" + } + } } }, "@mui/private-theming": { @@ -19521,19 +19637,19 @@ } }, "@mui/types": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.3.tgz", - "integrity": "sha512-tZ+CQggbe9Ol7e/Fs5RcKwg/woU+o8DCtOnccX6KmbBc7YrfqMYEYuaIcXHuhpT880QwNkZZ3wQwvtlDFA2yOw==", + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/@mui/types/-/types-7.2.4.tgz", + "integrity": "sha512-LBcwa8rN84bKF+f5sDyku42w1NTxaPgPyYKODsh01U1fVstTClbUoSA96oyRBnSNyEiAVjKm6Gwx9vjR+xyqHA==", "requires": {} }, "@mui/utils": { - "version": "5.11.13", - "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.11.13.tgz", - "integrity": "sha512-5ltA58MM9euOuUcnvwFJqpLdEugc9XFsRR8Gt4zZNb31XzMfSKJPR4eumulyhsOTK1rWf7K4D63NKFPfX0AxqA==", + "version": "5.14.3", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.14.3.tgz", + "integrity": "sha512-gZ6Etw+ppO43GYc1HFZSLjwd4DoZoa+RrYTD25wQLfzcSoPjVoC/zZqA2Lkq0zjgwGBQOSxKZI6jfp9uXR+kgw==", "requires": { - "@babel/runtime": "^7.21.0", + "@babel/runtime": "^7.22.6", "@types/prop-types": "^15.7.5", - "@types/react-is": "^16.7.1 || ^17.0.0", + "@types/react-is": "^18.2.1", "prop-types": "^15.8.1", "react-is": "^18.2.0" } @@ -19602,9 +19718,9 @@ } }, "@popperjs/core": { - "version": "2.11.7", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.7.tgz", - "integrity": "sha512-Cr4OjIkipTtcXKjAsm8agyleBuDHvxzeBoa1v543lbv1YaIwQjESsVcmjiWiPEbC1FIeHOG/Op9kdCmAmiS3Kw==" + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==" }, "@rollup/plugin-babel": { "version": "5.3.1", @@ -20036,9 +20152,9 @@ } }, "@types/react-is": { - "version": "17.0.3", - "resolved": "https://registry.npmjs.org/@types/react-is/-/react-is-17.0.3.tgz", - "integrity": "sha512-aBTIWg1emtu95bLTLx0cpkxwGW3ueZv71nE2YFBpL8k/z5czEW8yYpOo8Dp+UUAFAtKwNaOsh/ioSeQnWlZcfw==", + "version": "18.2.1", + "resolved": "https://registry.npmjs.org/@types/react-is/-/react-is-18.2.1.tgz", + "integrity": "sha512-wyUkmaaSZEzFZivD8F2ftSyAfk6L+DfFliVj/mYdOXbVjRcS87fQJLTnhk6dRZPuJjI+9g6RZJO4PNCngUrmyw==", "requires": { "@types/react": "*" } @@ -20109,6 +20225,12 @@ "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.3.tgz", "integrity": "sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==" }, + "@types/uuid": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.2.tgz", + "integrity": "sha512-kNnC1GFBLuhImSnV7w4njQkUiJi0ZXUycu1rUaouPqiKlXkh77JKgdRnTAp1x5eBwcIwbtI+3otwzuIDEuDoxQ==", + "dev": true + }, "@types/ws": { "version": "8.5.4", "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz", @@ -20695,6 +20817,28 @@ "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.6.3.tgz", "integrity": "sha512-/BQzOX780JhsxDnPpH4ZiyrJAzcd8AfzFPkv+89veFSr1rcMjuq2JDCwypKaPeB6ljHp9KjXhPpjgCvQlWYuqg==" }, + "axios": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", + "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", + "requires": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + }, + "dependencies": { + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + } + } + }, "axobject-query": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.1.1.tgz", @@ -23597,6 +23741,11 @@ "micromatch": "^4.0.2" } }, + "https": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https/-/https-1.0.0.tgz", + "integrity": "sha512-4EC57ddXrkaF0x83Oj8sM6SLQHAWXw90Skqu2M4AEWENZ3F02dFJE/GARA8igO79tcgYqGrD7ae4f5L3um2lgg==" + }, "https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", @@ -27130,6 +27279,11 @@ } } }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, "psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", @@ -27964,6 +28118,13 @@ "faye-websocket": "^0.11.3", "uuid": "^8.3.2", "websocket-driver": "^0.7.4" + }, + "dependencies": { + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + } } }, "source-list-map": { @@ -28808,9 +28969,9 @@ "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" }, "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" }, "v8-to-istanbul": { "version": "8.1.1", diff --git a/package.json b/package.json index 1c13778..a66af7e 100644 --- a/package.json +++ b/package.json @@ -6,14 +6,18 @@ "dependencies": { "@emotion/react": "latest", "@emotion/styled": "latest", + "@mui/base": "^5.0.0-beta.9", "@mui/icons-material": "^5.11.16", "@mui/material": "latest", "@types/react": "latest", "@types/react-dom": "latest", - "react": "latest", - "react-dom": "latest", + "axios": "^1.4.0", + "https": "^1.0.0", + "react": "^18.2.0", + "react-dom": "^18.2.0", "react-scripts": "latest", - "typescript": "latest" + "typescript": "latest", + "uuid": "^9.0.0" }, "scripts": { "start": "react-scripts start", @@ -36,6 +40,7 @@ ] }, "devDependencies": { + "@types/uuid": "^9.0.2", "gh-pages": "^5.0.0" } } diff --git a/src/App.tsx b/src/App.tsx index ff17e28..d43d0b9 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -16,21 +16,43 @@ import { TableCell, TableContainer, TableHead, - TableRow, TextField + TableRow, + TextField, + IconButton, } from "@mui/material"; import Fab from '@mui/material/Fab'; import ClearIcon from '@mui/icons-material/Clear'; import Tooltip from "@mui/material/Tooltip"; import { convertTypeAcquisitionFromJson } from 'typescript'; +import SendIcon from "@mui/icons-material/Send"; +import AccountCircleRoundedIcon from "@mui/icons-material/AccountCircleRounded"; +import AndroidTwoToneIcon from "@mui/icons-material/AndroidTwoTone"; +import ChatIcon from "@mui/icons-material/Chat"; +import MoreVertIcon from "@mui/icons-material/MoreVert"; +import axios from "axios"; +import { v4 as uuidv4 } from "uuid"; +import ShadowMan from "./assets/redhat-shadowman.png"; +import { width } from "@mui/system"; +axios.defaults.headers.common["Access-Control-Allow-Origin"] = "*"; interface AppProps { endpoint: string } interface AppState { - loading: boolean - filter: string - repos: Repo[] + loading: boolean; + filter: string; + repos: Repo[]; + chatboxvisibility: boolean; + messages: Message[]; + chatContent: string; + uuid: string; + isTooltipVisible: boolean; +} + +interface Message { + isBot: boolean; + content: string; } interface Response { @@ -55,8 +77,19 @@ export default class App extends React.Component { this.state = { loading: true, filter: "", - repos: [] - } + repos: [], + chatboxvisibility: false, + messages: [ + { + isBot: true, + content: + "Hello I'm Faro and I'm here to answer your questions on performance and scale tooling", + }, + ], + chatContent: "", + uuid: uuidv4(), + isTooltipVisible: false, + }; } componentDidMount() { @@ -108,12 +141,12 @@ export default class App extends React.Component { reposByOrg[repo.org].push(repo); } - return this.state.loading ? - + return this.state.loading ? ( + - : - + ) : ( + @@ -130,7 +163,7 @@ export default class App extends React.Component { /> Filter results: {this.state.repos.filter(this.filter).length} - { ))} +
+ + + +
+ {this.state.chatboxvisibility && ( +
+
+ + +

Faro

+
+ +

(Experimental)

+
+ + + + {this.state.isTooltipVisible && ( +
+ To submit feedback please mail:{" "} + + smalleni@redhat.com + +
+ )} +
+ +
+ {this.state.messages.map((message, index) => ( +
+ {message.isBot ? ( + + ) : null} +
+ {message.content} +
+ {!message.isBot ? ( + + ) : null} +
+ ))} +
+
+ + + + +
+
+ )}
+ ); } + + handleHelpclick = () => { + this.setState({ + chatboxvisibility: !this.state.chatboxvisibility, + }); + }; + + handleSend = () => { + if (this.state.chatContent === "") { + alert("Empty input, ask your question"); + return; + } + if (!this.state.messages[this.state.messages.length - 1].isBot) { + alert("Please wait until the bot replies!"); + return; + } + console.log(`New message incoming!`); + this.setState({ + messages: [ + ...this.state.messages, + { isBot: false, content: this.state.chatContent }, + ], + }); + + axios + .get("https://faro-tooling-curator.com/ask", { + headers: { uuid: this.state.uuid }, + params: { query: this.state.chatContent }, + }) + .then((res) => { + console.log(res); + this.setState({ + messages: [ + ...this.state.messages, + { isBot: true, content: res.data.answer }, + ], + }); + }) + .catch((err) => { + console.log(err); + }); + + this.setState({ + chatContent: "", + }); + }; + + handleTooltipToggle = () => { + this.setState({ + isTooltipVisible: !this.state.isTooltipVisible, + }); + }; + + handleInputChange = (event: React.ChangeEvent) => { + this.setState({ + chatContent: event.target.value, + }); + }; + + handleKeyPress = (event: React.KeyboardEvent) => { + if (event.key === "Enter") { + this.handleSend(); + } + }; } diff --git a/src/assets/redhat-shadowman.png b/src/assets/redhat-shadowman.png new file mode 100644 index 0000000000000000000000000000000000000000..665db8cf6750b863400e488bfb77f5d1b8884df1 GIT binary patch literal 44617 zcmXtecQjn@_w|g?M;l_)=$+9`5JVZG6NwT=ON=gBh#Dq(^g3GfmZ(8=GKfy}h!VXe zB6<)$@!ovb`@6I5KX=x;_bKPu=bXKFjG_L0N^)j$5C}x6rHL{EfxtDu-9btWJc-;> z`S%Cd+vvV3sOB^4cMymJq=iy>ZRr)! z!UttgjW2@n_kj%b`IQu%a`oJ=7LTrz#|4Y*Jsw)Gh~(X{LMtcC6>C9|uRec7p#vkc z1jc`9cAQ(p{nrplbDeLtI#>-|PqvBV{l_dWShz*%uHl2nYGyB8!lf!+6HP78Ii0%< zJlpp}Jq|PYa`NFRuFkzKbe7=TMM2~UOe86SC}p`_t2xo)>6a6*G}^liOfTm!C71Gy z-J#*|#s;e^l5`d&mZ}~B3?>tJU2)gdtW6;X?PTj|WV|U^6J^w)kgsEs)K=9b~74fHxV~ zVHK3ZW8gH%Uyq>|OM&~(xX;~RD7}0iw5{#!>DF4)h=2O!?S8(melE_vLOj$gyPf0b zMx(M7dzZ~`8*E9Q_EKl&_RV!+{EDUb*S`!e(B64Ui+z(T!EDD`-Tk0KF%RB1_uk^R zyc5=@=|pHkg_j_f??cDKmd+*&AUq37+lq5HuEgtCpWY^icg zEG_Ra)}=!!#%_Y2$**{yX9>GbtHGnM#D6CV_Pn*X0k2#MYLSk=u$c4p1Z_f7v=oqY zYV-76scdlwo^ou$5|UE9Z$EV=?1ZQu^n@u06o?^TA??CbNk|%RY?7Gr!LQNpm}>131k}GX$FLF!c}MMG%d+U(f8zb7)-9NI#+BN

{m%>lW`( zR3{-dd!47hnSIFRG?B08K-|f0<4yZBfA%Y%OKv)<{BojoHcfxFyQ7vt&ey~~@Rra9%l-&W>_$6(QCbbpid_B>lVYGvKEARJ`U%!e(%y|ETc0n*eX#3)Y? z{rSy$NKX&>!^a#TQ=taqm;Bb$+62&Z`Jj+Q2%OSpQwb?1^!+Mm3<*lO8vXR2^|C@u zRIP!4IF*1a2L{5&A~261BMO+3iaY5@`P%b)tKgXZv&XAnuSRY1m+O_6Aah$<^9tN! zI+6!{;1ptg<~k3L6iyUw0RAHA<=IAu6mHImt$*sJR!3aP>LvjNWo8f_LDe$l=U78i zjHt?nF9qyPqmLTm1I>)DPkX=jRcL9}lAS}@SZk7UiQ&j3k4|@pD4D+Kfeu85Di^7o zl9vq){g9&>xO@Dx6kIKPm|{cEK=tXyGPLx+71pq@wEY*qEP2n?rLS5$#(Atl|MqK3q`Z)28G7DkF#GloqvdG zh4P>|da=XTzm7i#HP7MoPe^4F^%n3L_Wh@;$DfT}y7oL%uTx&?tt54!a2fnUP~%eb zpTVn#%ym;8tk&aN5D7VJ^TU+9^s$i!FhfYbHE;g7aY_;nL9s)=VoT`>vO8%@`MCqN z@w%H6wR>FUTBuGradAcp%Gj4G*=x8A!nbt|)`d19XkNSt290bbe`UMy%u5v$aKb-g z;M8HD`QztGn~Ub)0}Frd3c9N53GcGuQ;7~#Mot`orN4I`ZG2Ub+4ozjtbdbASk?$C z^Y?HIY3U(+(;PZZQgc#Cet&eBVBgR5c#Wc9g6-=9WchaBB2U%mx*SjGDlHxhDf9h1o>=a0g)}fCFt`hXchptoNm^zO z>_EOmU?S9-oUp#2k>BDtHq+cF?&dpeDIxhj=F>sK}V9hbZ* zzqdnjNJ@gJLqBg`!c$vOL~{JAPDzj7Y=OObN)Qt5F} zLQn@uYy9u#eMM6iEX{Uk4LIZInI#83NaSY6$o~G|Is`ZW zqzC2p81IX)4BZOg&>8RDdgI})eewy7=e^)Y6Qh`k)v}mQgvG~h&{sLa8 zdWqjs=2g*D+Dr|-wf!N2@KQof*^{Ooj1wzp?T}sccjl;>*MW{LD0zeNQ%dpjjn<$V zDkk~z-iuI^-11cdk+Hyf|3|XwInA3;LxrkA@Z=n{0b2oP$e9~-(_X+a*I5xFrq&ez-r)#kF9Kh|Xl6^07? zzNDJ-NmaHxfvjcnsZKhO%0#E&ZjH9b4JHc4I4{Y#B55nV;T?4fAg~cJu!# z_L(k;ErL*xvM~s&dr}iOhuPL#SI=_e%{)5i^=l0sX;PvDS^6fiWo{=E9aNr-zn{5J zflps}ZaF_mQg;C{J%PK1@~$+4aU)j}H{Mu^n|!yxv6Fg#H`>e~FYD~N!JSF`GDFE` z*L8qnUfLL4s#OLLV`fw{SjqIla2vlFW(^U{VJM3r;}v(pV<1v&d7FF3N1uSxNu@ib zFFJ926xn{mbqMrnfy6Quq^P`qEqmcL zZqh*gv4%6q>~QA^sOE`vfiGAm0KL5?+IcIdnYSBcLrWqM{J^&QG<&maVFihwQ4qgm zBjL=MEA=JI`B`tzbcuQG&Lce%JV4JD~<5o!Ej^#DUJ z_Whe08ry}#!jX}BtTYKr*T+`6iAhIys7JYe}+daA(VAcw8s17P`vo=M+LhBaD}l z0-1tEUzw@GLrWtDE&^*5=t{0M zJE#zdU*y%*mBZQjdE%G7vt;vXqxnW-SM9%s5`MJS4aG#x> z>CHHQh_P>wTXsbbl$Dq7=<4Z>b+4eL;n-zXu7Hf_JkBCh`dP{x{(km#=7OyMcu2o` z8PJ+FiWfp>WX+uLTLA`ln-X!3kb2+FT3H+6<>^u`VeJ!a<=|U}U(&}Qk$n|+Xge?2 zz9)X21G9W*O%=z#eZ0^pqg^+vfZ7kb49tA$$z?82P*EBc6@_y_=IH3_>WUb)-0i6^ z=mn-I^*+X3K&vc>AM~p(%Ly zPPJ#!b8Pi?uyZJ%8-J(yqT7>^*z~O?p;>u|2mOwh)0}G84motV&J@i!mR>uBCq2

6lWnz+PXeRYPQ;_u(T7-C}LjI7K|v#LqQRaPN6=MU!Ic6OVy=GDJP zf6h1L+psY!?_(ynQQLz&nnNU=JZMdPoxd9M;n(G9W#MNQI0n8>6|(h(6=n}D3!=jx z$NT~yQ=C|6Da3O*bc>GaITm)qP9l}VZ?7OgNfYelEJ~wcc7Q-N_8%S|YR79l9RjY& zU)EoqRNDZTv!mngCGdnFxNh`O=l9vNx7|Ezbs^$z>=rd6{L%u7Qh)E{&+$9hk2E{s zM~7IoI>bz)#r>>qx12#deDH$_YM=Zcd$MI9ZdEAmmNxfv^0H-5_XIO@%!iJ_MQ1w1 zE%bFxsyu4^*b4{?0!Ah#Cd}#R=mvEnu4May6%-V%&5I{nLcF|=mq`b$9^G1X@ zm`6{9h7;S1)@l<>Q*gg*!H@3v*|RVm$3dQv8PR6CDg#NSPw{)Z&ISI;T;n;m0*ZoEn#l3trbNVPMYYZ=CQ{l;*rY{NWaO8;+*~x0mx=32 z*z7%%!&vs&@#f~H;=_jz&tb3*Ni_lqYFj3@O%9t8|32*N#OAFH?2y}qxuwf=s7`>j zQ*RWw!|P8R;p*^E9a*QyhTKv9Lg04cuj5A7y!373R@Il1A(*R0qL)o*9O6;TIZ3qR z>|n8ZptG}cpGGm(zh}3KC>ttLhlf6W`t-&4=qN|k1vOW8_2y6`nt^&`h&2uVCv~+9 zn|0K+`M2qOLp81G8b>Jk)Q8SwMtRh=7;FrxW&O1XLd!AEN@8-OFutj)pHzm4%oG$D z?PS%+1eb(Yxldt+)QcuAzF46_;du(1#m zAPF990dr;fs=`{gRYxJ7mCx*_b)XIHoFAk^iVZVVtgA-S-nv|X^A+g<^K8xrHkU7C zI*R*w4?%BlZ>@ozp5;9$Dev2`!kSTdq&FD1?Rj)=r$=C-`D z^6}{ORJ!rHXO|N?vv;-)oFoVkK%n<`qX!+Ov~8lH>t;(PK?Bhm4fSf*Z z?ggs(DW+^R@fsq^0vU&sZ?Ywi6dx1S$i9k{V|&SU9n~?L0Yp9&bln7=Y|$w%9WF0@Db6t17eO6dampvXI~+LQ6J@Sc6^CmrcA>(j zSGURpI=6}-P=lQ!`!5)dI6q4fTxb>?6N!$xaX+_t1FF#DPU$0`&z2fBk%3ZBQ-73~ zknpr@nD4+wbExz7MvGF%Mg2t=e8P_XzDpvNr4!5T;Zd6$mXUFu5=tMzpH#GiKJg!f%re#5x zN*>8^LdkGE!9i_MgRY$QbwlRt5xe1kKg+IbeukZ#oOIY8&4N(>Y$C;%?399IOs2O8 z1Xwa#8Dp4L!gn^M`HBcd?t7h_k6Cdf(Y(Rw_xXbyZ1F<+MIG;MM0dy z)`Cer?U?+Rin+aZ8RmGI=^UY-Od_l9|30y^Gn(bi1p6lPI-WOa-ph)a^b!PbI-+EE zZk1(Hl3vc-_UU`D4e={IWV}A8UtW?Fl^*OK)@T!7WWdP=dM+V08l=J*(8U zO6M4pX&ce2n5J|j)hecS@6|y1^#&t}xw+XyXbR;g*BRfu#bYwCvoie-=IG{WFw5!L z**;QAs^N*(bhzRxqWWe~nq2?DK!_SDgtv&S8}(ce1LUTqUN3M~Jn0iCX80Nh)Tp8K zj8S>b1|U%bHT9fQFoI$1+qR|Csc%-X7xos)S;l=heP^NN&x{~$l=krMEKgP|8R!EepyMOk$v%U}eRp+1qBky6 zRE~Y`iT#snE4yAp5--2e^PL_w6+8pu1ByQi_GEMud~3i1$M_RaN9Ehw+y6zOycv_j zcHXQzx0W=Q`lFd!z$MbkjS&(Xjwjg0<3%CIO{ zM6?$3_oJ7!^~!w*d;5&UJ1Sqf%nJPAp(IEprI)rPvAZdek~|5rbyHrJ$njBnrL<3! z@z_DIaHwg|qA+3r8 zqyKH>F0hd=Sp}yTGo!jLMZfzy;Y-Ib_?R$jR*Vu=hbw1K9={vms#l0;Y4F8L&4S3N zkfJcIyc8y8XGQ}e6rWNMLX?+oeQNr#x3}m5%-rON{l0BPH^E={?%tjYP-zO61L>le z-LxkvJL(p0r{|`eNPU^u4uI#!QLMT$;v4?rlvM;yYD?tcmY@0YjRmF25`I*%bdq*o z6Q>ttR(k?jOB!==CUG54fHeV2NlEQWvjTC5LC{Fhh=o?v5_L$&t3CdR`MX`v2iAeg zIk$>sou?G^%_0f>cw2-a9^dnW5ipSn?|ASh?IGi}G zP-Sdy{RClAJ4fv(&0KlDlq!_#Q5X6ItBKukK-r;!^0csBEa8h@5Qa+}1QI9Jxtsa51NtSK|}P7H8Mfdti(v)461V&i+e0XF=ZMW;D!s$okS z_U$cCp6K5jP%{6e#clglL3BTuiFv7_w$^`tP$gaOm8oQx%3QLuxIMh;&qTqIpQ#;8cgB=%PIv5nhJPl6U2DUbwJOLDrZ6I`$ zF>m6s-Ow9S$hfwc`W8>p41xuxMI(of8raIH;1#(<{{Wnch2@G0rZ_Ojkn6d-=jK_E z63W*ptMpN0N!%at8TouR;LP=NB@Qe6w!F{#@dbyAd|1t40YVyJ5KNwn46zinggD#V z^J&T$|9a1?UqSc3A}2dL`wtoH+mpAml5#@%bp?b7hUDJTV@|cm>~l<`dt5jR2qNeBg$PznkP^c|pSxu@&D zyxHm6*Uv2Axw?KU;BVLVq!WjIYV=e`Z60B*6=4le0k7bJ!lOYsH=H?zxh>s6WjQ-oF8a1_%Qh1NDU^I|+Q2KXKm0*M5 zGmlyTBB+~e#+e(@@?qvJ;{bhYg`~bnKHBprsVy8CPTcmNvk-PkHu?B() zBns+>bYr+Yo}z(I(DYIaV>F4o2Fl|8Js9!NZDq$JA+EOY=x2M|s^rgqCMPF{Bm&We zlc|&r{iGJGWCd@UWQ<}yTQ)i1?H<|kG)}2|fLZ-<%h5AYSXA0^#0Pv~Xm||(Kvp05 zssC88pbp(69M#ARb5llvYODHlNe5T;7!7+5K&{UL+z#J;dHtDThhki4)+ax^J78Xj6#&f zTKy@$1bxeah54{&;Q}F|DDiS$TklH+m&au&T-1j4Jvwj2OVBb?ypV#rO`7b^yIJRa zS7eT2;VbMRI|#~VGD)nOkcd(yrrzHg9Px{Y9)(&(`Fr&0^gubn^GS~o>L_iX^MXwG`|>(@%z@(_hr{0zEtqw*fwZJvKM}*3O3rQn!LqC$?k5k_RWN&;40E zJV9ZC!l?)EvH^&8W7;k_YHK8TN=J2i)+n7+ztx}{JogKA+Qk(j-eAsx|8YU?fBW%# z>CY29R8hWY2KOI&swMa>+@20n7a3>Hty3FIJmTR)g9o^$1r z6jRtTEQvcT-H#~R@+Iym9v>Le~h238JfcdJ~0Ln8O z{Gd2!1*#Hp`YUkHk3qVxDEob*={hS{Po?R76z*Ppv=wcf8uyW%bBEpT1Smte#1Wqq zmTAYV9julkUJI9O>@@v4@|bA#c*sSIudwV`bgwZEAS?Am59{ff#(}W8kIc~{<#_ax zRTt$KkvvMk5nT}Z!;7n}xR;{Km@yiGbDgiQ7UL~SHTr3qZW$RBWqq5S{hp#x=8mo6 z*j~NAMM{S)Ui))5R)U>Vfa7HpE;~q(ad4Ye`O{p-nCzELyZ!)rK@pI*M4Q zQ@`C)Na|427p4e-F41FW*^3SHZ}Ki($(-J*Jv<#(>7a>jO^#<;WJWc94JyR`THjVW77BqL24O3AhWatr|8Q3t0>#P>pkW$oO( zIY;S?-3V$a{bL+z=Gm_j2G_HoG?q3Iax(Z)ZgUJNW0zagQOUJ5%+mT(>i3E4qTd3$ z`#$%eEZRMh8iPr;YTwhHhL2fUgTwt_#w*YMpBF&R#wqQ>XkxRH9PO#z58};RS+}Fe zNw8scbmHuz=Qe=8R#%khQb!&9jFED?;kkEftI}{Uf7Wk0$IsaZm9yC&%=d9XUd3rZ#02pp zilU~BlSteQa`OjsI+sfteaiwE@!hG zeSy$l$2b?Qv04w4EGds@Pp6ZRwK>YoAQaVePYS~k+x2_*-k4O*?F}HABrfh8);@r8##XCmSc2E$=Yy; z)2okNGFA$Y%$N^_SUmb>U3fX49*P(8Jkiv?tE_p_V&~}D8qoRoAMd75uP8&K@haMt zv9BHs(d z0Io*1^(Ve>&V7o=Z@fb`Y{C!Sg`!|FoZmgr0oWKi=J5B2RymdRa$<|ol0Ci#6rY>IlZi!omd(Nd#Q z0k2xvwR`^h6MzV&l>j;BMq`mWNgI0__deY!8-0nR;Tv5p+y5MG_1HSWxohD~>_NWt zN8ZHvBwkgVElqqvLYIQW=iJ)+)yrr(v3M@`Wk~2zk=+=iVb*U=alI3lS9SBnwS~})5Tjj;8OlZDJWA=~lSoaA0xD>j1|@bNb&SEuXQ<5EqszQ18YgiK!lrKCe6*F#3AhO35S|3 zx%rolGV%o&HI;1_nFw(x&niOSkKl|N^C2) z*7JZv`OBYaH8mizLttJ#RZPS$ovg(#KI5pKCuc&V-(%LPwda-j`y+eQ>CpsBGUsWKW*&%m{rhvTumkPag>ECtu315L*f0FJsn;?cXe zxE4gsid^8z(?cKWCOaSOs5UP5L7nOS^k`rT0v+(zR@di!(T=^M-*r^O&%RhyP; zQ;2D)w}%xZ@VK3xfw^&VS%Tp!-Ub%gEdq)-Z2aRL!dYZZH~H|vOU#>SiV3N2$lf>7 za|9ELsOCQL?GO0f-Q9=Y+oLMdY$zitD`b5nw8eGGu&J)lWP`UiVqxWWdz?D4sA=>B zZ{7%2M_BwzhX@NNL=YtKG@KLof`@=057R|jP;&I&f}e!R_k*-mx~Ym^h=k@Y1xAxz zw*C7AaLE94^-bbdI}gZ-kP`7ofGNs|R{P6~%K%GDNNo{;DcUNQfz>6P;xl2~Q_Acc zom!}WH62U5hQLFkJORV7bGNN$zEM%zc>%g?tt{-=7$vkaXxz!Wc zG{Nb>*dKG`MYFMNJl8Ee)G)BJFx2!MCYfTmqGu&slbBK1+aArtPVSGmQb&zZOFO4f zH1@Wvct;V%kp3tZ2&eq_etxOrJlj!sEYNM0_xJbfcE!&5IbDj9nIXq@$ghrraNsIg zW6FlF33M{AiP4^%s(Fj`Z@UHrZ9#SD0-^|(%@40_a#UX?Q1cc+Xsdo|aV;Rae}BEj za4ycZaA)nM?TME;$jx9vkjY?Je7hNtx^-M+$?#JsfB!BWqs^l`BnYcqSA`nY)1N9YM>g5mthx| z@>jP*au}KhpvK#=bg(qu3xm*|y2Ruj)LGWah4mvd|C%SuoC@7bX2V&h9p6MqB3cSuh*XHz3oe)+Gr*fTVbTJV5J=9zJ$n#oRhTW5QHc2&>G zKb{RKCl^ydOns(BsrKEc)Rw6&w6fUBlpi}1rR7+0kU}6vFWDG?psZ^AQ%wYjUw5*{ z_;`+b4jb`BsMGu7Zk9Qg><rG0E1NzxZ}dS*<$bh?t4*i+D==Xk(@JQ~oQb?dE@3?iASbJWnx!)vaMq zC+*{Um-Fi~G+=<@jY?2uxQ_?jXj1uR$`x5S$*iFY zbyY@9;D)?e^-!h`&p}JN!s^N&s98OO?t zZBFDp+u#^fv!xomCMiO(M2dW^@zZ{FeSGk$y0T(~iHXVI$<>uYkBN^fqwr^1uC%Lw z4~0y<2D(Q0;nu}75Du`4bvCs$V~RiOY!_$@`U%5=yDIKHX8Ph|A7#jnwt8-&Ka31# z>12Qf^MFj4o|Qjx2_Hx#F0;LOTwqf9UlYLQnG_DRGXnhmR&fQu&?eHZOj?w_j6n)H8zg<>Ded@|+HzWPykN(4OKe>$GLs zc|6=@iKLHjDYDZ~JO_(zU~N6KniYnCLeR%TmMmUnFf07R@+nMPGE!%qY+Pz-gX2@g zWF%42U4o5TmJMw#c^%RdD!R!5Zd#3`vx9!)@5>TLr(xPd55HNceos)4mOlOQ=@TJ} zp&vCkvF*uZGuR+fJ3E0nF}TThq(Ylh@px{e-zt2zM|#1*bY15McoI?1#+)ds~jolwV& zf!51!g7gdI5|QU7yFoo~(^d$gXeafy?#1ipcaO*H){^%E$`DWJki59o%qk%z1Z_kt z^e{!^3-yb50%eoBMR%zWk2Ar-ll2kT%WaGvk0lI~XINYI>$mTvUZwJ_8>8c}?biHSf1hj?9r} zuJ%0fB3R+-=00e=B{`F*QRGq6Z||GWQhKi`9%$1UIf^PIPf^ zdr=5)#EW1}=C`~B$AD$TT?hGk=9JW5Ux$FnG}O8UfJWv=lC&!WR(C`1x3|w_*cRJh zKR*V&8h!ENmxr-@O7(sWLctLf2gz}j9>PLDUj6=|O=R`>A3m*dxtzXG3!WoSuteyf zL6QF{2lX=4iF?&4H{0cV$)<~AB18_Qxa5mfcc$My{D*i!0OF+-DDlL%w2A8Jh3&Mu zGDmJdhl0^goru(psh%*;k~ku6cVX$6(eIxJh(ew3wh>3cL=101mGyXM7|Xht@j=gN z*H?K}glYul`RDpd3+l{jY#smV2hlzbL?c&U?=@qXHTuE0GEidRd2r0Q!q22Zf<+ow zR}r988}dMdGNb=ml@O)dApna6bwXkyq=Uj^NY#!Geri0Obn0haTPe(D$||VVB(~#!=mjfzu$`LtNi8__MVmYw3MP*v^RY)WauE#RIlXk3^|!KU%q7uV?0)Sn#z2%sBn@w zg2{=h?3L#)q4=NzLolmv56W!_?4i5{zhs;F3_>fnr1Se zsMj#Sina0LK+8POL#SgY#8WCT%+!3f{yiC`AS8Be6(db1V-!hEWJSP`eGISp$f-|N zb@%Y(jypI1>=5-R5$d@)3kl(y6L0knMz`FDUq1xFWrew@(%rYdSsx7!4nBNMkyb|K z4ic`h#*OUtkTq9ZXTn=NJo4rwzudv|DvGjk&18lzZLBxG$a&KL7B*CKW%?%C@RH&( z>l+uXIwyRqHTr2$t$ALK#hozC&G)EAn|8X0|H6oj%vP0vj=JxqEv^-QK@R(Gsx!_0d~yx!u`0!CoW}AD%JoMChOkT{ z;zbW6piYB&f?adMo)d6T1Y;y69W(ioiD)tgQt!k)f`?}O#=vL&sLYRF%zLCf+@o~# zysakkdG>Z|B_1=)BMsUf;h9mWfy6jYKf>|#zTpUYE)7$8P*lY&HpH6rU_#8PvYwf* zsyz*^EQ3gqvE^yT1NPy{jg5@~K|)}ew=9z447owt@A^-~3%7lIZneab^t&|i_&F&y zOCJowg+BdlaQ?91G-mHDa9KKJPn~<~hlVmc`ktrN|)( zmnwglxRC{DUDj}7UD9x=*eik@V~HE}#=K+9=X=D+z?Zh#m!s}=`1;}CgmVkt|HARd z$kcX%Z1TfsQX)HJ#<}ML+svRU@)tTs<6v9WaA>cl!$0Rp4q!kJSuf~g@$gEP*6k9m z_T_}L@A+UT(SQJHG+c)Tbf-9;TSeaPS}z_iEJFEz8*{1ZR|pk9#AANagQ|pH=zETH zkL0>}j!WjJQ&La>W_CSJ%ssfjrMX1C#?-1av(~K*%-4xrv-_dKqPi7e+>ob}tqNsh zo#IRqO}{>*$<5MB*rR%z!BPUnjz`EFy6 zSEfb>eIzY)@kjN#EOb`w^rjwFG6{qpoJJ(?BNGx5X(nN}6`$--5wCr7Q|$9Ov7%Ro zlIeyr;zdHumf^MA*DvnNq|Yj}Uyr{tsRU4*?`wqEW4zArJtq;hw`H7J5pFIFO;EI? zt|Q%y514^O=(+|xmlLxKy|ixfPXv8gb&swX*4}03Dk8b-_BC^(uz-c_t1m3tCtlTD zyghvDlLg57{6QqP+==lm!h;O7sS=MX_x^bn+FMR9fLEvWEM0UL4~UC6-tLQnW>+?jGzLoo?E~KSSR* zkge3T!lu`c+D~f^n`gu~{YB@0q24(KR+I~f(YXtZ&F;*_L4@iYG4pr?t>=ZmV3Hp9c<9W-ZPR{NKp-x*WzQ2ZuEmQHjNz}hjO{YEB z^PKMq@1OR9N%@V?&Wlg^nMWTw(i#ZECK>Jqf8ZQDn$~A;92sbT6|KK}%q;Ke7X(pd zaE91B${6~N4e5Wa)*aYQ4{U|ZeX4_E9PAJZ6>s|&9gk|B*yWmtsBjB<@RHFTmnC~n z=@a8+i)lDWh;WMX9@uR;!UeCO%4w4Qjxw*e z)sirT<@R_=0#&0avDDkS{=ElMT~_YcF3soD*bD5Og__Fqw@T!5w37}19r{GH39zDi z0m4Qnwcg}=9%qlklt#ZAZ$~dnX00$f>9}V4oSoyN7PRz5Nl}}Uv|lQn+6B#JbwaFw zGBMfh_&`qu4b&BE@~4%8|A^d18PQ$Rh-yCs-1VU&l%tEt-j*@T4D@ZAy{S?Dh||&I zgC8hgPn|n?^%?W(x~^*0hL?}LuRl85oR~{?mw4r9vXTuaA>H+U-NmG83NuivdrlqA z!o~>#F{%y=KM&EeCF&u#$5GUvSoJD}p`w3@Nl{PH_j{k-OFfjMk9~39Vuz^ydQ!w- z*BEa+2{Qj%1A!=aRV5hrXk?XxSBok4L5of^;e2w-jjh;n(a+q;w4G75X6*QPwO9&j z{F|_;&cs&v`uIdJwJqXluMc6k@)Gh^Ee~5^$*`qSP&zBN z@$?$*O_mPb^TZo{yvGj~wRjm@*?skU8BozI4iMpQ+ouAdB2q<2;j91i0yJJ9O6aG% zA6mm;7j=V0k!ww$*M*b6iFJ!g!``@#03#~5ZrYqCaJ}tA#s%Mys3q`qiQ7uaDNtbpI9hg)@V(0>URab zILK0Ey-f|$R8M4hBGYG0s03O>-6kRk_4ymHMn>joPZN)Z>>C(XvE4a*)TQ``>*_9- z>iq~d*4G=(;t@|H6{4IPSJQh0eUH*=WZ%`3VG&216#21 zal=n5$Ht3CPY4k_y2OP^bRa+xftp>)!R+j>#pR!Z!~aml%H8TpDoYN3H3GiP^E2?i zgMPWd{YwOFt@La+rJ(dX+?kNFCeQZeIiF(*xJEXMUoR&q&|+$ODw?UC7UqSvWHD17 z5YBJ+Z8{<$R%fFQr@2XNre7gg!E=-o^(BZOH{%6S&mWB18a@sCOuZj>KZdmMxx$#W zlS2{h&$~c#Kltg>rx1SvoJsU3rr5PDLc`DW%kys4w~955XBN4ch5wJHuMVW^|Kq+o zt{m>wH653!*~GM&O-+r9nV9alx|=aQonxAbtGk(Ix|`{)=X`(9^YE8{aL@Ui&*$}i z)!D2Oh>}8>AJ=N`ZwX>pqLW>NogIlWL;!b%6C?3M{^xy;TZhqUkWA7yC=+Cnm!h1| z;Nrv@diBd%;tzgaWQm29-B9s!9=w|h4nF(4+grfGXeuEf*V9&zIG7KywP=X^;tAK< z=mJ6l%Y07PTxQ2ToYL_a7rLN|vTuM|A>Y{G|Am(NUfc5_<>SyMnS%!X{mM_d;sD;$ z%C>IeAAN!%87dx->yJ_rgRaP)OD6fd{e^r2WKGPFq_ zGDkORk>c6J(}Jb%5xTL$z=Yfo87sQ69;3E%!548m%U$hGu;c4S%HYb|%{&2s>?1JUj275iin3ZkV7HCfck4eyF})RK&O! zQ@GJ=EtbNTyk6g%wkQeP)+6GvRxhQWS@VFkLN0eqBG38#`A(JFr`SA(gte182uC0W zli*U*%bC}}fI4W~&zt?>h4g@^J!O;Jkc0q+AX;)cFIr$=2humFa-a#^PJ_)i_{z_X z+#?9pNN`#vOvsmZ?BttRR;;~uk|0aFg+wt^)4Mb(IlIk___ppJL2|!GyG zmNw>3L2&K>C=FHgU=K^z9VOyN8aZ`Z2aZUv67HRDF=%AI4ruQT z@i+Lk?9!IVb5Wi|UH1nj>4#B#x9&^Agnm42R<;Rde7YP=DmvR#e@sGrhn!#rtGDHY z2zc!yd|~1pKAc58v_Ef%tow4QRwfW+OYRM6qlt8< z4Ezc|H*TFRs++nBGYi;D*X$kX%l{P?GT<6!w)m}lz)M1O?7IjSZoD~gAw?*oF#S2~ z0nOBtEmf8Bb<>t}J6BrrD+8l`;b=v7ooCgEZ-cT!6`Qq)^|!u@`rp4OF_dq=jA%ki z=^VU4IeCI^;uvu6P&QU_VV}`XM4@TzB&#_1iRZB#1!9p*+8zh}E?n;jZSrGvrRV_$ zDMuikR9NtGtsX8jvr!Gw5n4HAmznOP_~i$7N#K4jAd6Uct`~)U$Q=#DjSjuNBs+c0 zsE*Bpx*Eb8`w2t{-RWG_SR?nTigU5Tr|BHzPc41PDwWIT$sUWwkU8RiP;dw=C8C$quSyNC#~ztmN$Dd>c1ch}BVRI02f|iv zb&?zlE3fG0v^)h}iYxqvQDb^Mo6Uqm-o3hP)ca1IK4m==NK@Lh{m?VFzJ~b8zu|6a4 z*<8_26=yNU2@U9Tio;v&^6;}8tsOLfwrRV=s|=Eu%#x*yOMm5|yg<_l^HVe;nIq*F zHltXn+9k0NL(Q`)f{4BC>`~wkc@GV8hX{VH9!kJ5E#K8biCvH*l*cA8U-fsmMoBa#<~L}$R_pY$3e=zq7g`>$ z?Q7E=BGaAm*>Tk{8g-N-63V!F`!&LY@7g3X~pd;@$xlq?h)}^p_Yn$2`ze*k zw8Q3)m$P=u>xv)7{@wgPSe&UL3M<3S49;4$uaLHj_+~ah2;0`hy0=HusH5&V=ErVUaT#468tR!?UN=`kD*8oZ^ORIvPuam zTY~rOJJh^XWj|5yi`cHsn~XCiy&YZo@R#T=Lr&&1B+(%&m*ZKN;fAfBNN$GwlkRu; z-#t|?-N!_*JXgvk zdm%E_n)1<<1e%y&`smXLe=a8k;=2Ci#Qu40G0tJnE@a@6rDwiFnU*CUm(mgC{RFeX z*7ry$T8@n_ytw5moc&W;xX#&I(2SwRebYY)88a!0wqo*3VW&3!3~kl@&cv`HkzzF! z-AGP@M-5+%2+Ta$;|9P9`962d_pi;kiecJc7^^usi2w8EIZ`<01`x+HM`zYik5_M6 zWNvKBZ$>`vzkP$BFk?vCi+c5f$fHVl(4rLGt3hHOR}UN4#jv4?TKz$4{x>}u3bUR3 znkcMaU{U~FKME_~u7WVIo*)s(m>FC9=!g*TNr}sp{mGZj-$e(>S*85Q#|Y@gH}GKc z3~C`b;M?$pOrQ{n?6qcuzue?;8yXN>0YO0T=rL4d{JskLlZ)#oeUR*Ax$6p}pl%xa z^)e1MDX-I!(v$i{XP?+fhmr3L>X>6Q{mk=BldQ!KitH#^@t$G3X?sThog?S5;#3CN z!n6Pu!WT=t{urN8;ulEsQc=e%uM7JwS%f&6xMa56%7#Q?P%{0kIshbQzJ{SW5xE8< zBsQ^%ipT8mNC$Wa4E=g3LbEkXCYH#>so7F+q?$I72B-SWEqxMnH6S!GL*l}UUtiz) zEdsXql8#AQt!EsfN$!03O!%q+S8G+o{8@2fTgGB9d~ZWY#^l}Ctcsmuk9*qG&=+aT z8$+@E%iRd8M0kS1a`n?NAbEz5k8Zj;`gBS z&BDcFuMAxp8=u|Kmv_J%#dDn2R05NC@OgEpQY)JU5QhOBdgDH;lq`KBd*M}Y^`$Xw zG@Fb;aWnG9-C@=N9;_NF(yiHPa;nRs&bE83vu*Ux`G*Pv5-i4k2K{R^_R&>!H;w$@c_)MQZ0xQBN=@f@F(kx>@T$N28gbgEDC*1kO~Xu-2lfz;jT~25 z6^xRiW!V6HRJ;ONL76*vYD7nMXRc@t(6`5ur>v0{Iv@jf$$Fpo=8Wj7Id~XpE03(q zHOm!*ajt2oXkw}Z;*l4ju0k03aW{<}A? z`YF;-2~+L*S@jWC-gQAZ)`IYqx}aC|o_L>Hc^ScNZEpwG$(#r}t%(8FyN%nIr?z#k zN&#@lXQU-3OSorvD5caf@7E)w`@f+i?fM?WFwPYX&Sb}gEc1@P!c$WX zY7#Y6ZAaCslpyxC1a_VqVCUH(`-uWe)z4ODHU0}9wx11;j(ROR!ya!ar8K%CgIA_& zR{P>EXI~7P(vS@z(E`5EpGV(E2mkj?H1=Hv{hh(fUcfI{43Ir5VW2>wt@VMUCT}1M z0HBO|wy5Onu)~y(m#DB(LTLHw+6JCh@+gD@oy>a?xK@1BcY3PCdmSd)R@z4YT`e2P zUw#hHkwXwI$$teQ@0FG5Hv8=TVhrQF*51p|!iFZ-9WGWKc1bNT`kHzG7_1_J`#OjA zCAg`4gk-Fic0TxnKZZX>kvR(6R|(17)LejW1RN-V&jlQUBM3%B7!*wn=YjNB5d4+2 zB|Uore>HVd51Rm=syxZqyTvAK6A>Yf?Ke=fGm}Ou!{&BWYh6${1%?G#bm3;QyfQ2* z%W&VHt9>w)pjSa(~slS8%mmu+$gd1MfSH5CZPL{6|*qmZ*YuDCj}({ax} zd@S7bukb_ce+$yl(0>2l<(!864GPWZcOO4L%l-!D-bZ98J~uYg2?90(FFo9or8X1a zcN|@*_mB}s1vx|b$%`XztEQTXFzlm{v7Z=OwSEgTsq<;92eiPlQxOGA2TFIPeEKk1D`}Eekt+0_gY@$ z4K^iTT{p@w0-mPPSA!eXn`cfou=QO>kwkhA`&AjWO%H(OWhZ?AZ4vkfy}{ISGA|+f z0xi_Cun&JnGy;bl4a($Vf1oB!a%|ji11(6RP_1F!HVjRMIijHN0T}dD7?+0FbX%Vn zcuguKLb!Z|spia9b`7%ZMTwhNh&kfZW8Az4H;~71Bm#UV$XHaUM1P;C{qb6?3g+=K zT(3m}n(LtGmrX1#$`(k->1y4Ha}kVD#$%d#Z4|mA2)66K*r=Ma-~4B9KZO_fJC@#L z(4N8;eCL%Cs<|6AU*7nYq9bIn#z)w_LP7^jnw=08I*W z!uq(3i#2VM`Y<5m>t-m1A9(ZaX=Yre1V22}`E1SDK?6l+B%y=>`s64E_&y@kC3+zR zM!n?n))!~vHg6-2rN|OY_U^mhgs7S&W50)kTiAg`GZNVcBYXmymcV3RbcX_JKdw^D z1&KUM`HDRAU($p|(h&f0e{;XM&>giAYmu5y&H9-Z0+gYN_T^!&!j~rvYq$0%9qU7W z;8k(`|DxcOcJ{CDy=BfXl_*51zv_cmbo&g~g-y;?gK0qvIyEc!v_h%=*3_QKuE zC3g(;rk$m#coT^rQ78p{ise7P67?n1qv44j6o?kcNXqU?CFp|}j{?j9DC#%Si3p{F zjef~|{*@;Gdzm{xP?in6EnjMUT#bw{N14Rc(`?J1+P_Ew60q7qu$5Q_sej*3Uc>s? z1bnB2?CeKRQDFFO$Rf-u`WVDu}QD zA>iwAY11$xdncEz-ZvUbp#z-a{#+)RpK+ewY|wB3`>Dd8l`3VJGa>`b&(K2?x+B)z zEZ*E)HN{AHkp7;oq>lU9A8~DZAFzb{E}E*W&7-`cGx}Rr?}*Sfb$;Z1oLmUjXY*{} zluZL`kG&&7OCtSyap=p1Ln*2r`jxRvl^mlM1j0L4RzJcbENO#saFw1z+CEa!P(JA# z@Vohj{yEO-oKJZ>*GB;yqb1Al4(;uO5DHZ*)d=YC7>}=@mf=vdqb~-z6|ar_G@cW3 zfwYmV{ulsJr5w657H7b>*x3)}Mp5us7c zY29}iZWoWd<)L~`#8FXE`8pVr+pB)o(3(LdL508U+FA14z6C<+RyG_XH%~F4HVVn> zQ2k3 z`4phU+cBV{t}SOY4OdGZAGytb?C3r>%X$9G6k7xXe4c^vhk>!_oxt&s_vi#Li$cFL zq$IM$;_^@go&EZn*Ke<2nmr91FyA7IJB^-ro)LEqcA8C~9#=fxwLYa{Vx5RFEGB1U z{QRi&Do9E6L?$Ke{S3+uzUs+FhU7brMOkc*i%1L`7Dj=vu89U2v?7WTT~S!-!hd6x z3BtCX^>1GRS{2jRE)*?lv(>PH-Q(j0yG2c&F`hz5HREUV^NY9aG89RIv>8kHon9B>)> z!C#Q@{O&CCY2mVq3c%T+W^uJ&aY@j@fF+78u;b+=pC6<|oR{}_ZgO&Rn zXc>6bEEBxY^$Wu$#CvUkyatxtc?!nAaQC%rFS}W}QcaJhSu5|4lXkN@DP{u{I%o=L zIy%o4lFeu@@Rn5=2%*3h{AqCW`AwG??7l_y+@#5Brec3z&m=)(=W^b*00W{;KT|W5 zA=ZeYKLdCCVA_k)OB~DI7$mA~Duho0Fyo&IXg|p8UN;5_zll%vQ~ctDJFKk5NfL$2 zV~Ko^rVy28sMLh<`4E(Z2OUt!2Ev(B4%zIV$Z@#smfW_-P_UeSdQ+{`oc$4*sF~4E zwM+OnZ2#OE$evUF#!&e6ewd1dGX{gm?hWi60h!q+g(Uxp>mV$$rJo-Q-QYbFRnBj0 zsF28&GDFfHGKTpEda9tC?ojN~uN`kc`{gI;r_g#FRMwIQ;tSSdmcy*=d?2Byy;O{WoGZZA8r=V#n*z-CNY?I zv3FTsz^hoH1>?CekYn(wxnH@@!~Xfr$aDF**^|BE^6`fKGR0_dT)!PpOdDEK{#?4T z*EiIRLzG;jFTn7(G6j_~A9@MWM*RLfXRNrcNo466Tsx5Zg&W%S$u0T+Pb^9XWxI;SU2uw97pZ* zj4xG3fRKMM1Qw4TCEP4Egks9p@HKGN&@Tw8pG-fiUhK^C+-bqSm$<1#37^g0Hw-C4 z?2J_=;{0<}SfirtLe=azh$C(2DIHA$eXeRH5hzf^)Deo3`q;^=v6`-q*tI`tJrUTT zXYo@cnTxVyVc$pQ%>+%eWOwzRu`Jv7(&*m$FH!?hnCgC()KTlY>`uwAz2P#|j^{c> zze5P*!4Ny0&!QIU&Z>fk==h)W_7KT2;GG8Fi0wM#)k;@mM)(OTCarM^ek+XC?m_S?(4*27k5CEX>Tr-$lxOsYJ{wzcag# zkyf-xztB9u#9mc7P?58V*K48AcOv;meXH-#=0ZW^HqnNRQXP!sD|Jzd~ttUiNRt5dMeYNSA2^Rnn*v|D_d~6x1XONpZvLOWq&^IN<>Q*NT4{P<^-U?E7W- zPK>dE9}@{up)4Mi3j*dg4LJrZj$J=_(hthA6wFchcB0?utF*t&NQRHcm1s&#Sn6pssNQFcXW*A$0A# z@JikCfE%OPnt+Y8s|t>3_j&mWR@#h{0_T%|>MRy5bewo`HJ zgPzlf*j3)|5%E-&=pL*#+uy@Nxdj>SMY#nvTxVS>&mqrBX#{<;34?2&ZWz$mz4`8GwoxD^G+acW4bQl?rf5VbPMMD|%tRycd7(iSex=Qt|X)2V_ zik58ssqfxJ<9=XzrDETKc@$_x9-jF;Cr0`TxhOPe_Pk-2ML>aVNrL=rBTm_dy}$MT zbg&e|pYN$(**i8kL=x^wcu;p(J3oFd@bBVZ)JqvLSBdgo&V}T~Mo79aA5%)(1?Fe5 zg)p?leR5V3;&+n(KbG3doGPDkpIEXwE)`Vq$Mc4p%I@R}zv2fx3E0!pWAtz-Q_kaz zAySfPBcZ&aTy~oYTH`|VZ7&O#gfAvP?*7hvu*z1ls(-tL@p30vCf*iWEtT$W0u5kY z=O)(9*06{UL7UnK`pis$Xx&OFtLlB6FV)GRm%BaZFxw^u;e%5b;+-SOEKx?_goab80it5Gax9Yc+t7 zXIZJZGwRsFEIGogt=(YN#!>;JyrSH8_b0s*3asfHQH4 z!+GoLAhuCJkHm@Q8a<3~?ml*sIV9_{J!xo^pY>xeA9#}M!i!QhD_)N+=@bT}$UnS; z=^=+E&y{EMGV#nPMg~dg&!je7*iS$L^dfECc!d8o`c$iPP6Nmwx^%FvzqD>??hB=o zQX*$)z&*Lske$X5IGpys5NuzW{|8W3hcYjE=UYHLrSUEQ0+>p;J4aVcl2sysEh zL5F$ilJMnUquuzAD%`5+euO00bbZm;-grC$fABc2yl1WrRIiWd#zq=LcQjh{IyE05 zp!R3@X*IXpR0sv3Y~>jvS`Gny=+i6LZgWwX(r87E@C%8&v6X!6@{&zdyKK*`+(#FD zT}tpl^VL!yK$Y6!9r8JXwKT>ziHObRyxFEA?2G$f!N^E=X|y-{mrnA z`mvMOG1Y1dNvvshs9u|#I~SVGC_h&vv1nx8+%r(VJzr|Wf~?9Bm|`xd7-^asP$^ez zhwXg2bmv3;g(XdF_tMrSba}nef5_H;i=L3oA>1>K(K81S&R05~^w9Blote!!`lW-L zwjw-$+VJLj`U4suX#TMGEA$=X7(7KVB8?%X}3L|EVnq?DDrUT{N|rE#LKX|2Eb=SaVJiUqLlo$8u> zj15*zcJq!1h%^0;{27}Dp~HedD#}%b(W69O4}wU2cw(N9!_zws9O;PtRM})5 zJ|xFnEsk5%89zXv(}GKht`C|bv`JiYiK|i*Yk?ss*2B!q2zyforuEUg{Aao4<?k)22utgHRG_k>DBnj`2_?!{PkAhz(azbnK47a~Y$h3G z+}>?-fABczhVFisr!}uRmG}!D*!dI<%q9g1Bt?6m>!a!kC8uG*8TAX&PB#p&(*$bP zNzQHNc9DQu@K4NH#=eOP7^sb+bpN-aMWVO6^n>t^bF(59^jQY?_FffBtVG zHZ}yZXhH?ERyp=eJoMA5bq9A zlg7klI_IRTkl1b`eiaMA2U9rmI`Y8T2zBYH-_Dp%vAjH(J$%paYT&yQ?GyP8eTpU~ z*ngX>t+-)EIPFs}w;d4dH<+}g7*XWIH7Qgr1YR8g`b`-17G=ehbZ0ioSF!yn(yVe$02VPV(Hx{Qcw3s&yRebQiT@mq;I$1 zsJhQCX&Xfe?)(usDk&+#tovhLkUnh@!pBe2H+8ruXn3SwBT=epDUdomA}__1@+DY3 zFo`y)6xazm6y>r{s=ssw{vCxPhic)!dD$fcI6D+`f=h`g+Aatf=YG$>90jJA`7agO z!(C8J`)27xVYN<&|$z0Su1F{7G!X+4kIr<0=Yj#^uxN-xs@EDietaa3J+I|yX zx2xK^=F$tDuj$S@ZzK)rC@A_j5#}sndxg2!3>93M+R@ARTQAN1Fp8F2p-wkEJ~xBh z^Vw#v{(B%%>M$4uuSbZ-EFm>`R5bb)6b>tE3{tl#U|8FimeX9e>_VjXEvxvpS-@b0oZ9QW7ie8Sn$j|8#!wsN zPNHHly`=CP0u+ZbB&vJTVRU|?PI$}hRQb64n_E@?(jxIJMu!zYta0nQMa_$k_}fsf z(J~DBDxX>qHxw|h=>(^>CkW-~1piDnY#S_D9AFzlMFN)`^dq~=GFuA2NnnaXy4)6J zHG-!FaljbCh5Dl=gSx!smZN!{<|xbKNVYfI3R6@ukiZof_N-XAj=AV9fww;7^LT{; zO$e6Ryx~@U+1c5eUQ58rdw-qd{MRsKY(n{s-UhRliS--CoK!|iQHc-_wXzmnPZ50N zT-h=orqY@{MV2G60HSXc6J8a@Wb4(@9x<_}D{)EYB99{NzK`+2r%-^!4ICFYT=19&1Cz(es>rp4+oA=AW z&aiWTHo}8e_&424W58_M+Tp(OuHU(gJs+#0gCzObL_i1rm7=C@~0|xMg%^TQ1=Wf456n_24A(RR- znCC%dFM*z65SeDAuG7>LVZ+tk(pAflv_5MFg3)UgY*5&6v-Ro?TYTHR=zhs>oh6w9 zOk<>`p0kFI8sG+R!-|N@wk^DPat+yIh+*IoNwevQO5N#BJyo{eC zFH{|ld*3`(PQAnO?;Q~hkYoOb;_H1kzpP~D8D146tWecU>k+A`W1f#R?|hoCYam7_DLP_O4PG}pp=1vT!Fz@H5o4&Rxp(k; zWa(g??nzhx&%;|{p2#qPt2M}`s-MLP7?{sXtck-rz-}_Wf0v&guWChgi2_$7QL;9a z5kzhTfietLp1^rIvL1v_Ku{}_i9$)gZTxA^Z*-r=bwTpwvL`=734U9SiioAM zs*sFmP7SO9j}YXu8*W&jRI{O^5?OP`f}rKgv2FRgBm+c-jJAU_>#_6w)X=Zwb7m*7 zL#ZEUu}t^`a4*i%>hTgRI?v-kpnlRVf7-D*qdT42s-DK>uU}Tx_wK(I#icr{9lVc5 zC@MR|?r5Q_3_zze5M5b-o+{njK8l?3M{w6_GrY$k3V2zwlM|6xg|`L}jh>3WuOs2y zcAUi7HAr*GFAkbjBZ;L)iPIht{J17#FSG(*vTh|fDec))5XEIA<#ngpF^qhqU@s81 zXiD5(JLtFtK5gal>;00CY!roX+k)i&RkEzNlo)k~-+<+u_DA$=$fW@14hw8-ffD#p zk^twq7T6cnCxp3m6Ho+~5{u25lwevbYoM)Dq}2s{p%^Fu5{i}Mgd>2lq}*#s#)#HWQ0~vy1ZepXt5S} zqK6%uup+zg9XjaBaO5|ILSk*q=%7Q?K8h6ApJa@8?s{t4Gr&aa z*{BVfPcFOi|kz9{+Zj6ScqeXEaT9 zC}4rleKAy2nx7sS($mlKA6bYQUcgY^8W9d$!40L7y5dku7Jw8XH04UbKbXg^UtCWo zm1NhgMmu6V-E|3qMQzts_R3(A*XuvMH;D^mxclD;tM}Udf=~n?y}JO?dxiod1MNHM z$dvEiUW*G_zXY{&XH{+tR!XZz5pvQ@vuV9r(h_lxw?{q~z^DjJ$n zZ=Y{_KEWLnnBXBJl+bt5am24?c^!TOiV$`3Ga(%e1 z9~g%8y`24;xyDnS$5}G7{~LH~h`mhU<(?ddKJNb9Ufs3J&(A+5Rvf`31EZPcH(u4? zxGJ!9_=zZ;Q05NI*Ybx+B83-#8oyD|(!!KxrG( zbK-}0I3#ms$7uxRK;dLt0!1pXV)P&=YZ|U*$@{BD}MV>{& z89moUSnEEODZzg_VIIaP4?f1p&Sx4q7{pipoSD&IGtHQUa>^CwbK2vdh;R6Dqu6^X zD%sP#RorTFB0vgI@Izya2mDzRlbyXoFo0fSn{HCCc2cPP;Q;p!K>`acnkq2nzjSyz zD$o%v3)PbWxODm5k=!=c{{d>lXLBiX4nz~lft2|A79^)lnjC6!)Bjobxo0-j##c_2 zQntGV3100C^Kbw6;OV&lz=0d=nH!jo0cc|gofTg+f-JfR>?lNMUq9+HOHQl&VwB#6 zZp(YAGF01-gKfXwss+38jG42j{#hZp+o*s4!a>o1h(YW!_T1$|qskW0Alz4aGxOu1&3_quAhicZ9>4kV(lQ9ow&|ot?Bx<-9X~GP{a-+*)y@)z zNNn%S=zEk3gNy#WdyEJjMe-0J5jKj`E+_s*>-H3FYd57*Kx7NfCOHV<+ZZ6%5g{1{ zuiw2rE;>T4e^b=A?YblwpDb)a=y$>j7>O z&|H&|cwW)4W}lA_rNm)VvQ7%>sX7e%X;7%TuFDhypn${9eSi|0cc?!%9RKWxtGyD& znvq55wIhB0AH1wx_P&!!9|LGmMMdr!_3UZ&@7?4t^pfhjn>mN~$2Zaui<&kyx}Sn@ zy?lY~hBBCeRXcgqAk91brgcmt{+S9l;Q<=mbsJyn{U(p}c73?#ocpE#z}D#jAHwPJ zW_x14yjA?F8meQ)FlSlbY?h?wlI@4$i9Saa{pL~F8dx)>a=C*%t)BZ|zmIqPhZ>8O z;p9JbR%{qwi{!NS0|9zOE_0*34veaA_lgU2 zXeDs7Fpl}qK2X-pnx?9sZB|ZbXz9rUm(7~?`X$|uEm=%-=Q6(|;x z(NG=pT`JQs3Xm9o$2w&;|9cMB6VwwmE({{6@!x>({%d`DOc&CKA~8h@i%*TDj>u=5tRbYnq@J4LD;9SoO0`!#XdjY?vT5qcj7y#Hx{SPjAn zCn+v#;3%z~vp5IvLA7yQS?i8B_?`=qj}8Pt5w0l;5%(VvLW9soeoeT2H>9|N%?Plbt9Vj3(0+B0 zEu+sFl(h->P=Q@$O)>+cz02f|AlmUM4Q3Y~ur2VmU`5Zv{_MxDN?F-T1viZ(st3$i zGzhq4|1|iETK*r6P@L&~yNlJ6E^+NsAyL2$8bw7oTc)|pnFkH9E_$8~SD*Ayxeih% zys`n5>+D&p4069noI~@hZg4d7C+V#kkY?e;TU4C|G)`tabIM>f)B(--l3y0bb_|3s z{uKN~Ili4=e!N@-c&9g{%vxKypQ1?IR)e5BG)D+5Khd$>O5nYibgD|4-1-v;^S&$~#;|xSc2zPEUD7qE0DY8W zsE-P1m%}&HJ)hBau?OVtpr1PDjQK2T)SgbFeVR5~?*26@8kW#Oo^jE0jhYE;o%sT{ zllXQG+WHm>x07VKL^aa`p22EBUH{5wpc&^IgYrd=e3u*GY)o^A7})ZHFA4<1yFBE^ z6~cE=+m2g(NXF96i~DUyY(UVf7Wi5tW+*(IlCt8&^M@gMt!O#$mV`%nItM;j&@?E@8jP9zkn~S_1?jKTV(l%OZdX2$n{FV?t>N$bpepQ0fwgIvGg z!wkp1Wxl^62(6&qIl|tbZQ_pdW$>^uq*5<}GG^xg_?_CesW!1f8Ejt)lvLpV^BNv@ z)$@6{@UQ}&uk5c{SK^;n`>b_9AeS*&=op~kDSck6m-F#?L*qQD%FT=@v?jHeXkPCk zk@V-h0*X=qv&;lQuSfxvsHIT#4?{=SI0H|>Yesa+fj3l*oQa&KD~nyIGv4r+zCae6 zQI%F=3)(7ziBl>VeZjt(ecxZ&Q4kJoxtZSv*;^}Dk7h?-m-QD+%>bMq2EgxL<^u16 zlLxzLbmaJBJkthY^t`!WCDbJpC8hbFnD)AG_~mj_La+Nw{A6e4$F?Bg0G;+FL7253~gv&I%`Ujn~d>qURdWltNnJ|iYzA? z<9|`lEgh0%K@r=8(&ka5yS?MM02G65Ij@R+iYXx$6xc*WL3k2?{>@R)-vy)dtE(Ac z0giPh0^G@_CmvZX4gi4rmQY=ny<8QI$*l%#qRBM1v!|3WaBmUZ&FABb`f3L!fOqBq zO!#UehKlPIH&v?2RyD$~>SX+p%;Okl69cvDcGFu}f0sjTJLqa|LB*%s^XrNmG!I~g z#KskWFahwg5VyJPh@_X)ueGy~5RkTY{br&QK-@c0k8!Nt8_9g4%G@(=$J?S#y zEJLpCM#%+`yr^dRUJFkwndg(hiaxkuoM#-ts{MdE@HfB%PTgc|ophcd;EbRU+F+1{ zadzt#Rk!VjbCw~lltd1zHNNwxY3o)ErTCD>YNt@K=EJHnQ2~tM#`x?gWK?_$i1jFFGXQg< zvAH@U{}u6msPOGX9X9=~0rCPS;w_tki)r0xn?`)RlfB6QfMO!P(BG8;$S5kPpD1gR zEnckleIfB(jti%o)&xQ7OWT!GjB?=|OfB#2Z0S#(CLhOR22Rd+@re0E0Znd3^kyUO z3O}fyrUk8Y)%_1D!1Y3CysuYjUL65*Qo`ul-yG{VfCOU${B7}zA73;4zGa=nZj1=8 zjEi!kArM0T>DoIdPxB&FY@Feo(XA9AhS%hpF_IXn@r3w|UBX5Zfo=` z)P%fsy2@k_^L&4%TuW~Gg~2OZKO$X;=DT9WB-lw<-R`w92~r(y*%!kQ&7)I|y{@As z6>RSR!t_~@V_~X;FwGV7tmPyYk|~LypusFBIIjWuUK*GGwo1WXKM6HSXV7lq=Le1@ zXZxz)i(U^f0z6skn?YK-MVG%nQEt%sx5~ugrsdej`z&>t>l$DO3)Fb07EnG)1#`2b zkqB4My>4sj7k-YP1hZq#Z4hW;+LT@HW;UT-^Q_R>hibNt@|86-xE?KeZVn`fFC~0m zoYLYLf*^qn{mY1Gu0BaZi?Y4Fz187d&2Hmo8a?yH24~B6@7`?@eKxlnn|fgf1R#0! zzBQ01%&CP@WM5B0kpg|fb=iPa?j<-Vpy4BrV5nxQ%dXDB{19DUKMn9y3vQ%^!9&BZrj^HsyTMj~VSoH`^>5MQ0~b2PnPePj zOJe=E`Ca%(F8O>QDtaN)(ptGN=EUooF#N*GnB8LcFqBp-UUCnnyt|69+w~c z!uEZx){5G^)X6VpyIFOuQ8GbZ{EXD2pbBZbslqar4=IH=dRNuf^V7YJQez2T%=}}h z7Gnm2J{I$}*5>6IDXsbO`pIv8n-1&PT`js!+~~k6xs}}P?YZ4yWXrh2tcxqSISs;g zs-vH)g0YtGh5o-6U_&T=%h^7RQhD@Zr zln4IAm1;TZ%~ZKJ8I`yv;ufZZrKMA6vp5$U`%G5Hen zg1y02!PU&q&p(+Go>b)Te0=raIx*}F7HhFvm5Q`nl`!p%TN|4uReqaP>fS>1W_ zFuI*;%x->`K$D$K(jS2h^=DP(N4~36fPf~HX(E|lauYcI7p|kw#wzS)QJ?*fp!O7RKCsJlonBC3JUDQ*!HqI+z ziE*=cqsN`dW8iITXlVG`iE_YTP?!EaLU$vFEdf>Yx@gnz)Dd3UL=UiU5e~Dx!tv}oK9L>%j$1eY{X?w$~MPv>lb^g z7bGyKB8}IcPa@<1td2?d$NQTrQs4`HFRG=YPC|z3IG65$O~`p~GQOr3xS%J__&)dR zbiJfaRX4xw*LyCyySrOUi;Bjx+F$7wR@rq_RwH0~GFo0U9EwlnWpR)7xC#qH?=g}v zsq|zs8t~08>6}l-F0k#{**>~ti+}Tv(a-I%7Ir`1Q3N{lZ!+CxSKcezsz0m;owwZ)`5H4Uyi(;t#{nMTw7cFk?HeTualmxn3Gi|&dwg-5%(e} zQJlwLagmp>43s{-!6$<-Y>EhgM(M3m2EiMes!2&3@GY4w-zW2~8nAvy5fBC5Dl4M@ zk7OnICT9sX4MQnIlp@-))Sy+|9IeJ`mQVbt$mi)%A(Io2m5qmIc@enF242AIXfext z*wC3wT2Lz-B+E+vyt>+dz0Fw^uXfzIM7i6<0qPL0SX{0{^h+NXS3@f%If+{pEkSF+ z8aT$3U1<1ChgNtOtqinm{Tiy;&UYt_2t|)2#tXE5_?>MHgS}oi7Bg^ga$Xq#XqA7u zOs{xL)&8u8tqoa&&78G5K%N|#eaV@hUt9c?Fb*CrXlXa`PddLPL5C(Wj`)Fp6IfTm z*as_Ewk}Qwd9LaoF6ZxpwruXg-NBQ77%oRkG>vQFoL@o+S(8-73_Ak7r-s0{S z`sf4bB=VSqw4z3{RVEw{u~Oi;7syB{n@_AN(cQKV1+3E7AR-ZX4kK`0GF1%wrw<9+6WBcdV5_` zUteEYkm>#Ur)G5Yz&60olu(MfpT_~k?6WwdYAWrS&{_yW&?=dkM zwbtez2_AoNR;IKOc>BXKHM%l%tN{iyB&Dm+M?#(VR)g@N(T@f<{R&YUv27`8Pd(6}~3ntN}SHEvk)~6cD zlDu^ibK@`Xrv3hb@Vqs|ULEFA7I-C`RKMbob!EwhBZXm>-(Z#uYKd+Jq?*>T*Mw-q zP42gg7e31wjgg{2w9MD*$*8Es=;X|npksWkKc|$7dS0md%Nnw~zA#wJ_zIR_X@yyJ zN0SDMRqSgB(?vrY>9_}BL*CV;ImFX)Yj2JVQ%M?ZLj1d^6`Z%mONPm5x&Ckvi=iE< z2LrUadLfUUO*Er4SkPpwCYG)d4|HZf@s8P9j?0^>yWS^S;{4#20d~gsLXm6mn|AS=I%-A z1@x*|T3XIL0iiHR-u*iO@1U~zVJ3W?3KvV=z+-Th8CW@K8z4iV{BXYJ>OUSXJ4{2Kh0io{fUC46OunbmTg{^=@2;mYl zti3vid^hVofiu{71Hj4M3%KCV`hRC>Z>NdQPxq233O>?PZoG;93TE*B_wGJoBLX9vzq)ly z5P7XBo-2qr*NDo&u2uQ`dr9zn*~^v+Lf5BMKkBFL<5!r16#O8VVbAe;1E!$J7zZZKE$<_dK)Rvdq!Docbg`9a{-p?HG`;CPT4o!zh_e)cxKx|{4fGSO^ddd z2WWFpFJo4^E&qU|@D}(45*A)^-wmXBpOi*}kXec*N;0yT`1E3sUE%4lY}Hy<#`3HF zt_+mV7Z2z@v@#t8%O+~(x8wBD>_5kUCr-Tu37W>V(lX!~43=QaBix(+v7pLR6eC3r zhr=JkGes%<2{R)1!TspH>e-e1kqy5Sm~MAGUwy6lCRfU7=%KkPj40EksCHE~y^f)o zqAzb|+*9@JfozE2gef}$SyfIoA6NRHb>rl!?lx+-r`bBIrm)(`EunmFZqDxq0DifD zyW8x!i;7IV8Z6JTurwmsGhmuX{*-@LJ`ia4B#O{?$mAOj!u>(adVggb*o|zWB1dKl zCztJ(I#RdfF`;9lD6aD$j>iVw_n}N}?$xTby=@A1S9LChdfrCK1UdquegB9zVo;gY zye-)0sw9hAcM~!PXaHUdG(O(32JnS~>_Z+$!+DZh0!LqpC%Axwiak2zg{nfUoGeEZ zsv@J{cMAvAiW|GJcx;Pd)|Vy*w_Yd96!{kizSah6hSm+4apih*10maGZ(D#!+g@_1 zJ7mw@Sl9H!bqSG?TX0sQ)BdkyN{dCNSv zl;N8neb1WePcU)WWNBpC9W;z>s#`bH5#HH9HozqsTQej48EkS~v88lIq;1svddbm*Om}8r=;X-!g^YabC(3+pX+tlHN531g5YW7x4RIHyJ|70UKja_%l4|x3ToyDOF_#(oCetnm` zNPU>Yt75{?Bt=FpMC$;Zj!`KrnQ_SR&%2X9Rw!Vf)en*FA+?#KE{phRW;z(!1n;+B8K<1EFXtgc?6hv>mU z|7fYccKs0hb>7olD^=~DM>{6Wrpj0k-*? z(sGEMlod?T_pwKekcdO?7nIlJ?XUFPO8P8+oaK~to!}ocTBo|=1lSQGCnqOPavBbq zCPfN0niE7SNr$0&qP_iJ?VMtyE8J4SEb*z6Y<(ReLSVAw)Q5s|oWzN#joz~KPi9<> z;*Gv`{w8}dZ=r^O<4LoER_~?myHKzo1BIS3UL;&KitkwUtGbX>Y*21cC(S0g(XUvt zr=^;P%U51|G#{1crf-`D&2kI9&fiz>pQ~0`uanptY9w6~32#G1Q!~jOc|m_5v*QI$ z`2_sE_oals(y!R;|3QR@hyN(jKzX(S9pG}ll~%fD<3C}ie9{T*GKhtrvhP1T3G9*` z=q zay(&=s3=x^>7_cvv0ZSH_x>fhDV zL*4$XZWv0_!@Kx%Q;eRKN-$^XpL<=wcM zls7&kXJ)S-Ty{Xoa~45KQ6B1?$%mx*#9Hsfqn(ykwp`Sy8u`taZ+&B91B$@^j?4Ax zXnv%pr`IUBUX$e2@y5cLaE;?RFe2JK2d0PzWqKVL7&{{#v0_>3n>SQs5o_Z@aUsS@ zt~3>lHqDdy(OZJ^gQ~@5t!l4g;v}U*-))^uRA&4AyEqLpuIecbPt|3mE$M)5)php0 z`m3TiEU|4JFdxT6;^emZ=eQjbnU5>{F8f4jL@|8n5 z+xUNLC0u8=LA0Sz0X|y?4V@*7vQ=#dLr*}#$uXle1iy}Ti#?ng6s8iKS_CU}*&;?& z6a|O%`v8-dO4vpk+IzF2#VU5KCOVP(_n;a!tyI?QpwEQ#exOH8tiA9N zhuW`*24tbp=(`b@e}979c%BCg)s)efD`2VF)pP=$B+>`6)Kvs5-uqlc84u?79&2Ss zRw=Ith{7xEvsg#hnAsW?M8IPXvNDwg=3M}1;}9G1JI6G2t;Y9b(=}>nXowi}yXN;mjG-e%_Bzqz2(bSQD_zT> ze=?4Bm~~~Ji*EL}!p_Ci*BX$ru^sv%*~+2NpD9KTS@r{EVx9&zBoKjQZvqq;z#Jd{ z1|sZ@RkPgWO&s^qlLAEmCOCmjVszm3tp(7bKd{M=VHBB>xfCcJko0<>4Nj25SM6U^w! z_JnR!H?i4tigA{yH6oBN|Cea*C{{-;to^;=dIcZ)YoS`a02mLOi#Yl<{l20A&$Vtp zJ!M_j2|y<8{lgJyI9M=EnRrskttbK8EW;no<}4dTSU)_!-IiO?a$4ltW6MlW9+ut= z;b5QgzI64d>1bn(r8aS+yrkXYsbWv{D$l1;?jK(;uszC_a?%G0Z1xY|m=!Ols5j_6 zzg~$=twCTo_ve*Z%SK(#-w@-eVr+0EU)r{!zD?|P6W_U@{1^7dcCNcqSF^IaJ@IsVX8QX2DKs%?FEtsl znybPCT+QirHD_KGV}&uy^G7es0AK* z&$)=5*{1698L<~WqBJ)=Ws`Uh8zf*crQKhHSxYCrE?g7d5jfHoNr3+B3TWKN>5iG; z;BJwH2g{urEBc7>IH5*JC9bPXA;9CS@FA{m)Hmj2^Gk8>m4^NUu#i8YHa2ezuL4jC z1FHgP);dV3Slf<4x)1k0+BBeHrZwk!hoekoM!z!na#3m`jc3oCSx=2rS<+x(H8E3q zHa2!xL<`N`E;=upDWXg&9fB_|GYa!V`kHB749QRPRpB}BM9akIS?6DU2d0$CUtroH zWKSvV%-?McqZ0lw3DLp$x?WjBqxav{@sE{YTY_L~(EX7Tlg1AJ6@@~be5rf~*-|Z6 zm|4-0DkhmTdxaTx)hCN*5j{SEi|ObHfp2N-xb_rixAA z486-q{&S+tXvO7g>G3bnL(>&}e7(rDP6r<#Y6XhIF>w4=Wy!dVYXXL}&a2GCrBJd` zRL36xf!Jc;DR4hcjKffCU3|Q$YWs2ld5Cwm2VWPeTwL*w->w35{bSTaqI8$LYhy@5HB9E8N zK%EZnOd;rrN;I;T35PgQ6;+I}4oj7Z0o6v%(Dxzs*=usMo!J}eAd(W_O)Za=Cim&O|A1X8 z7`$utELRkAR|S0V=5rm4RPP5YwMMMaMP-z_3EO<>%gq%F!qznMscEwJU8ok;&)VK& zA|}c$Z4`D0%T_Vuo0v?OV_I6orjm@1#QgdnNhA^(0x(Q_DA0}m{b&n0WFcRM7c2r} zVi$bV?oliK$v3Q819ui~MEu?V0JUlR6G32ZoX^YU{0=^}U0f@c0`Tyb<)We@Q`)f4YzZl(6Z}h{SID?nqKhz>27v5kMn=XqBxx=(d0S)X zyB{fAxiEB}h)*L8x*34id8pH|m@26du$E!Uc(D*O?0zpT3^%R{>PvU;56#$@>Pt@W z@szn2i1l01@WdGVTvvAq_wO~0#SdQ!H?IS4)X^Xp>|VZw_a<;5ooroIS5LMl%Ko*7 z9IoF=YEhlyFflp1i<&w`n?b3 z*5IB#zcomdodlZ_SD+5orCo6h^a?O?;-{AbE$f?F^5&krh)OgMnQ1jeOQH#1jpgsK*5fPa* z)G^N1pUTG8;qkA9{PYtweG*u4Ejk+-LHy|Hfi6@dLzfd#W)O|Qm)GDUaEc4I9kICk zh#T7@STXf4t&|c`=t2jh0M*DZ9x_pChPKya)6R;Z6AB{_UvY&DzF@f3@eOcGVHCsQQ7H`fo2ljUFBFd zqH7tM>5$F$w95>}yAeCcL1QTltDLy_5(BZMn5Utta zu6rF1mjT9@Jq4LU4ZyqEf@izU;jhdcE~K3_^RG&wD(hCI3ownbzkjec{NN1;YNH?} zS0pLNW}Lk&rz8iG&p=7`t$KH+B$p5)3zOSu9Tg)heW$Xzyq1HiuJq%NGq(>GwMT36 zF1$HSc$sau2E2c7%*7d#8W8wYJ)m$mvL9Ktk$WZ}%%sSXyW^r<36{7iI1*r7lni?9&(6DRKiK?)@ zG_q$DKz=$=QuhJ0_Wx#EQG8i@q}Hh353Z)14aj zn4uN{A8+VKUfyC)4U$`<|1BfpN|{4RxT4`_mAW=7He3>Ro&Nzna0fi6Glk&J>`+ls zazG-^|6U&&9zON_USt2W+@wM&94H=5yWeY9s0diN@smMcF{5R|6!cvB`V7N@6{Oo%?j}@>B9)z9S=)AQ*A2b87Wz%fd#-4VTnQ0jgK?= z(EEa2EVI~QpF~t&$7o{AYwC|2=WF2g95~Wk@7r}o(n25*?yFI8_~GH0*?aJegkQsnZGOU1#K+2Id2d04rxU>S?%YFKKOw{J47 zu{S-$`F%VY&&7v_89?Y<%>yNLtqBYUGXU(~5)@WdYoL@j$0`{ZKN(sxv#IO@8IvFuo1$U^5v3%Zgk&jre+Zc&#&Yc%fn4V9w zuxO5B)Iz|AV$8vq_Kvyhy-clwIg7+`%CmBb;1&@8h?3N4*=@=HmQoGCTanR0CopYMYsKU4Cc1 z;DfkoT~A3pC`v>PtI9-ivaoe08aeho8w2f|Unr1(i@prH;OgI;qAv)l6GzY%TOd^S&!8a`*?9urNS*rk6|cH%#AIHk3aH z6^SCZwILz1VqOavK$2d=ZFfh#*;VuYvLFYEO@!YN5j*COLizop%nGX^AfV}osjC?K z952qSGJf_Y1X=(G4?A5|i>$A83#~z|-91W{?7^@X{VjM34;W|ZA1-nSwgwkNo7C+h z<(@sRUq{M34{SkJ^A*Q0M#o*PRuuySgC15fOBr`iOLRC`0YzE`xDyVjsHiyQT*mn? zt1%diJ@}L5e-oM|X@KUoXe=q;7k$E5-z9 zxBu;jou8PP7#njffRcVcF_AJq@D;HDH&-*3V7sx1VA&X)Pij5d3(>L{=xwCunRB#- zYFHC-yrG+9Z6Q8B*6CDjKoZn7lish{4iv2n2n3fYA6WFeI|^~;0blesa7a~Lv3u&r zJ$}KV&zw}wjhon%qm-q6g4d-HoRfs66!A{1xkaJ;lO5l%1c=e|8u+K3ab6XJ))l_bCBjo;Re7Wl?g_-^;5QYP`;%P)2<$&Jqtr^UMJ zRVgDq>Uv^ViC*^HZ5kbQ|Y3)+GyB{kk z7-;!GHABDdcYImk$f?TzC|9!-&NL!eucN=hjD~vok_%8mM`dqU*60oUZfj4fSSC`e znBr(54bIW^6ox$JRqgj^*6!iQ?HuDj%xr~Wh|5CF{Sntx`UsOyoY~9z0>Ln0QG;G& zK$>wD#mIylu8!Ulhvy%I*{KOG-Crh?vX0wbY4mA-MT^51%xYFgc^45&bi;Pi=3?gT zyk_ERMJVq=t29hfbz!iLQqKo$8OX@Dl++%DJDz96(LXq6Z`|DCw!Y~vOILNY;6AuM z*EvAbIJa0y?m~+&W-uWASjI=;i^JjjnPkCg zVKLV9-aeF6*3ld`dCS^l2xCZL>*#7n+Oi?z2-Xiiq-|(ELz_2Vbgu8=^8r#*62YAC zhXt(AYGOQ*4hI5q9F?fS{kgYG0q1SEGX4`%@+2C~j4D1ZcB=W&Vtq|0jl13z6z{o= zYHNMR>`eII!Qj)ec)L=O>%?-EUxPV$OBDATnvd;piR#QMX!+=?^?q!=?g3RP8)dAa zH#H8J?p$Rty?BXksQT4q@*w~fJ`AbNBGpN!Z z*rl-Jf&kA9mCB-x0fi$TXQNnuMB@-92%b z>=q@zo)h151^RKR?@uTl(!vxpG?qTk->t55zu&@h^2~cO<_i)&vr9@|qi)PjE=j`~ zOV*7tvb?6u`CCUg$;b-S1-T^Bo_F6?O#~Pue3@0>Nz&G_y){74pRq=!@51Rh^`S(a zS}&VVRIrWS(J(r0@a5Cl_;W~b%f~9b!kdcw5LuSh@F$~!jIVRPlMTPf;w#R{es@+B z({MD8?c7wF{VPJNio@${U_4>8mQ~082KKnlF}b<$dCBN#I9k3;yVz|ZIm&yq>8ZjK8+|Rjc>WY0-i^iBla1Z@9iHsa3@m;# zFxO!*@`)kBIKw~-7pjesDw7(4$`HZ~-33y%8^<1dL_YlOeUcuzR+tg8f-x_4qO2NoI)Q#vObP;v^Dkz^kpBk-Wdp%4DpOdz zekEpR$(WIx&SW(6sEhk);W9Z6lyp^R_2J7?fd;mW^;klLp#T8S z#@V_Fu+FrJd=h@qu0g}@MJE!oiTxzvXBuFPxOwr~r6Cd++&<+WpdeHd#x4SoC$s%3Lo7N8swu?R zzoof7&O#u^dG$kSa> zjZm24^jyKH5+WsJAi-I@+uLNTcFg{qr)|N=HO0hOTpqdE3(w4w^2TQg=ejZPWyWR~ zd!s&*)Tp2Oc&96`6$wL}o85!9R1|_;7k#{!(@BxncKiLbvXOF=NQ^2w43oBOVg59& z!U(-~+3#_bOxi-X7ek&2|4i+2eb$a`{E0@(OzE?sofU#7hBpMzd^}H$Yynqur8mhU z5us?4gTU^-a%7u%XrbelX)HFxUwG{AP3K6WwhRp?5(WIg#CTwKhqh4B* zn^CfaQhRDPadL0o(SWEV#k``rW^K%5)<+`F^v?UnDd$c`{-b&?6EQ0O!`~rBaXmzh z&$yWFRFoqrHP1c~j*#%>ZWnL(m5Gb3oaKLeM2B;RZ&gQl-t~On8-%^6@_vnp+mIzR zAmSx5i8i9wa56NsaY8;8)wU4xh_M`ku7Zt9S!?Fq%p!ewB|P9HQUdaPL^OOE)b%>M zDkPRgioFzh&9VC%EhKTO6Q6-tC-Cu(f*zba?#%~P9$Nb zaNw%nJa*scsWXqzYsj|aFVo#^{=F@nU#t;lGkmh>rDZfbQAc|7@Haxr`4{bM5rmAN>^JbG_N9fXQ=G%vXYXA)wrZDb*#;kfQC~eYr##;^IBo4<~LEi+fB& zXrd(`>xdE}MRE#@oz1f7$gxkKoNp*Zvw|6co6ea7a?>Rbyb07uZ>o$o&Xe&NKY>bM z1K#Hs#AIPV>e!_rVsSe7s0EqD+eIJwv%aTiR(dj$+&S*OuP?_teWH27cTDqWbbe_E zeZlH&a(#kvPLj)8XDH!r0ga-Z;LNCy3fz^B+uY?km-qf3%#bh(feHlD1;IUg6kX6* zvhzHFK@?mUJwyb=6DluO+v>r^gQ4 zdHMa<+^sjYKqkjlGLTW*kWuj#MH80&!m2YyWSN`S?$F~xBbuZ;`rIS2(1*UZcMj{; zg5dmg(|WkHYBMC7dbzQV{i~F9KZ&YYPyvO6p|!`5l-<-}Z#(HFxb@1b9&2Kq7Q9*? zUJsEGW{^2Z5ftx8L=CKNfAq^D+W^jjddatu(V0Fbo+@2w)G6-DCy#QQBGX8tsg?C^ zA0cl(jp7Xxy#8WKTKW|KZ{0H=*Mxj(BwUO`}(ixJ?6lG^HvZT@z{KO3w%W^UgBhg_p z1@uK@=*-D&qA}jEe)KWx@5O^KjE&eLCBc+$xuo2p4^3(RSk#@@elW6<8r_LamAObc z*-Xk8AzF~o+ZR4UP0A@MH`mxsZzt80BF=eKI|C8)1kKUIWU$a%9#s#ga(7b^_KIfo z4Xc*l8uHvY!+`5OR@9D@gi*2V!GIMnhBS369@^iME@^USdWATr*mPe#9qr$aSp=K$ zWe1);ZYRwX(=VXI`a#0Fv@Ce1m9DP_r@_SsLN;l}`zI$cd%iYkDd=vGR=~Z5@4wA? zzr;)56FZWnX(f$rp)5J^1+tmLo`d|?JJzr0ECm>Nn-RrTqd$E;Z2PQuYe3E;${o3p zV$X^jRzjdR^gbpH5(!MNFqOT30Div4I#5q8y+(6%I|)lVK3}~bdQ9`;tRtNNZoZfQ znP|!``Mof)L$d=`oCo1xC0ps!PU68+SFb4kh2?FUO|g_6)&Ut@h_}nl!c{#A@CzD>%b , -); +); \ No newline at end of file