From 448840cf9bfe895aace1de613cf78e6dd139778b Mon Sep 17 00:00:00 2001 From: Scala Steward Date: Thu, 23 Sep 2021 16:23:24 +0200 Subject: [PATCH 01/75] Update postgresql to 42.2.24 --- project/Dependencies.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index a9748e69..c03ab876 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -35,7 +35,7 @@ object Dependencies { val OrganizeImportsVersion = "0.5.0" val PdfboxVersion = "2.0.24" val PoiVersion = "4.1.2" - val PostgresVersion = "42.2.23" + val PostgresVersion = "42.2.24" val PureConfigVersion = "0.16.0" val ScalaJavaTimeVersion = "2.3.0" val ScodecBitsVersion = "1.1.28" From cbc68770405d0e767a6b611c7c11ae624fcbed67 Mon Sep 17 00:00:00 2001 From: eikek Date: Thu, 23 Sep 2021 19:46:57 +0200 Subject: [PATCH 02/75] Update nix/nixos setup --- nix/release.nix | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/nix/release.nix b/nix/release.nix index 3deef0dd..bdd8eb19 100644 --- a/nix/release.nix +++ b/nix/release.nix @@ -1,5 +1,16 @@ rec { cfg = { + v0_27_0 = rec { + version = "0.27.0"; + server = { + url = "https://github.com/eikek/docspell/releases/download/v${version}/docspell-restserver-${version}.zip"; + sha256 = "0rarzdmrrifncmrr7mdq62n2l6aa1zzwbh45xbbr64xnx86ld415"; + }; + joex = { + url = "https://github.com/eikek/docspell/releases/download/v${version}/docspell-joex-${version}.zip"; + sha256 = "0chzjaqb0mdpfr5qg9frm08fx8nkmsc0kjnjxyd00kzjq17i7r07"; + }; + }; v0_26_0 = rec { version = "0.26.0"; server = { @@ -118,7 +129,7 @@ rec { }; }; pkg = v: import ./pkg.nix v; - currentPkg = pkg cfg.v0_26_0; + currentPkg = pkg cfg.v0_27_0; module-joex = ./module-joex.nix; module-restserver = ./module-server.nix; modules = [ module-joex From 650e2c7c47de62088e031c955aefe1d93d5752ce Mon Sep 17 00:00:00 2001 From: eikek Date: Thu, 23 Sep 2021 19:48:36 +0200 Subject: [PATCH 03/75] Set new version to 0.28.0-SNAPSHOT --- modules/joexapi/src/main/resources/joex-openapi.yml | 2 +- modules/restapi/src/main/resources/docspell-openapi.yml | 2 +- version.sbt | 2 +- website/site/config.toml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/joexapi/src/main/resources/joex-openapi.yml b/modules/joexapi/src/main/resources/joex-openapi.yml index 1fe484aa..7e46e164 100644 --- a/modules/joexapi/src/main/resources/joex-openapi.yml +++ b/modules/joexapi/src/main/resources/joex-openapi.yml @@ -2,7 +2,7 @@ openapi: 3.0.0 info: title: Docspell JOEX - version: 0.27.0 + version: 0.28.0-SNAPSHOT description: | This is the remote API to the job executor component of Docspell. Docspell is a free document management system focused on small diff --git a/modules/restapi/src/main/resources/docspell-openapi.yml b/modules/restapi/src/main/resources/docspell-openapi.yml index b1846d1a..4c6b31ee 100644 --- a/modules/restapi/src/main/resources/docspell-openapi.yml +++ b/modules/restapi/src/main/resources/docspell-openapi.yml @@ -2,7 +2,7 @@ openapi: 3.0.0 info: title: Docspell - version: 0.27.0 + version: 0.28.0-SNAPSHOT description: | This is the remote API to Docspell. Docspell is a free document management system focused on small groups or families. diff --git a/version.sbt b/version.sbt index d2b03354..387ed3e5 100644 --- a/version.sbt +++ b/version.sbt @@ -1 +1 @@ -ThisBuild / version := "0.27.0" +ThisBuild / version := "0.28.0-SNAPSHOT" diff --git a/website/site/config.toml b/website/site/config.toml index c97d10cb..6efb0447 100644 --- a/website/site/config.toml +++ b/website/site/config.toml @@ -26,4 +26,4 @@ skip_anchor_prefixes = [ [extra] # Put all your custom variables here -version = "0.27.0" +version = "0.28.0-SNAPSHOT" From f519ee4a79b9bc9a265c758864be1bc249d7e397 Mon Sep 17 00:00:00 2001 From: Scala Steward Date: Fri, 24 Sep 2021 02:16:52 +0200 Subject: [PATCH 04/75] Update fs2-core, fs2-io to 3.1.3 --- project/Dependencies.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index c03ab876..5cdc6e33 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -16,7 +16,7 @@ object Dependencies { val EmilVersion = "0.10.0-M3" val FlexmarkVersion = "0.62.2" val FlywayVersion = "7.15.0" - val Fs2Version = "3.1.2" + val Fs2Version = "3.1.3" val Fs2CronVersion = "0.7.1" val H2Version = "1.4.200" val Http4sVersion = "0.23.4" From af1d8962dedc29522a40bb95d33efcc827df3bdd Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 24 Sep 2021 18:14:56 +0000 Subject: [PATCH 05/75] Update dependency postcss-cli to v9 --- modules/webapp/package-lock.json | 238 ++++++++++++++----------------- modules/webapp/package.json | 2 +- 2 files changed, 108 insertions(+), 132 deletions(-) diff --git a/modules/webapp/package-lock.json b/modules/webapp/package-lock.json index e0a47ae7..702326f0 100644 --- a/modules/webapp/package-lock.json +++ b/modules/webapp/package-lock.json @@ -129,9 +129,9 @@ } }, "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz", + "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==" }, "at-least-node": { "version": "1.0.0", @@ -361,9 +361,9 @@ } }, "colorette": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", - "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==" + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.10.tgz", + "integrity": "sha512-tQ7Prvd+zU6EUsQVXJNqxJUZdZ4btI34jlp/W1N/bNyWsY55dxe2oSg+ss3COV4vKbWLVlwLJt5xMSCuZ3R4og==" }, "commander": { "version": "6.2.1", @@ -502,9 +502,9 @@ "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=" }, "dependency-graph": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.9.0.tgz", - "integrity": "sha512-9YLIBURXj4DJMFALxXw9K3Y3rwb5Fk0X5/8ipCzaN84+gKxoHK43tVKRNakCQbiEx07E8Uwhuq21BpUagFhZ8w==" + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", + "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==" }, "detective": { "version": "5.2.0", @@ -675,9 +675,9 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, "get-stdin": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", - "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==" + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz", + "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==" }, "glob": { "version": "7.1.6", @@ -733,16 +733,44 @@ } }, "globby": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.2.tgz", - "integrity": "sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og==", + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-12.0.2.tgz", + "integrity": "sha512-lAsmb/5Lww4r7MM9nCCliDZVIKbZTavrsunAsHLr9oHthrZP1qi7/gAnHOsUs9bLvEt2vKVJhHmxuL7QbDuPdQ==", "requires": { - "array-union": "^2.1.0", + "array-union": "^3.0.1", "dir-glob": "^3.0.1", - "fast-glob": "^3.1.1", - "ignore": "^5.1.4", - "merge2": "^1.3.0", - "slash": "^3.0.0" + "fast-glob": "^3.2.7", + "ignore": "^5.1.8", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "dependencies": { + "fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" + } } }, "graceful-fs": { @@ -942,6 +970,11 @@ "universalify": "^2.0.0" } }, + "lilconfig": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.3.tgz", + "integrity": "sha512-EHKqr/+ZvdKCifpNrJCKxBTgk5XupZA3y/aCPY9mxfgBzmgh93Mt/WqjjQ38oMxXuvDokaKiM3lAgvSH2sjtHg==" + }, "lines-and-columns": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", @@ -1202,65 +1235,32 @@ } }, "postcss-cli": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-8.3.1.tgz", - "integrity": "sha512-leHXsQRq89S3JC9zw/tKyiVV2jAhnfQe0J8VI4eQQbUjwIe0XxVqLrR+7UsahF1s9wi4GlqP6SJ8ydf44cgF2Q==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-9.0.0.tgz", + "integrity": "sha512-tg6MK/jYyO7Ye9PObPYkjCQa7Bh2K6dA3a3I0muczRuw4T4HAtOTpPR+nOCw+On+WDB2sdsbGOsjlwO8BNRbUw==", "requires": { - "chalk": "^4.0.0", "chokidar": "^3.3.0", - "dependency-graph": "^0.9.0", - "fs-extra": "^9.0.0", - "get-stdin": "^8.0.0", - "globby": "^11.0.0", + "colorette": "^2.0.0", + "dependency-graph": "^0.11.0", + "fs-extra": "^10.0.0", + "get-stdin": "^9.0.0", + "globby": "^12.0.0", "postcss-load-config": "^3.0.0", "postcss-reporter": "^7.0.0", "pretty-hrtime": "^1.0.3", "read-cache": "^1.0.0", - "slash": "^3.0.0", - "yargs": "^16.0.0" + "slash": "^4.0.0", + "yargs": "^17.0.0" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "fs-extra": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" } } } @@ -1359,50 +1359,19 @@ } }, "postcss-load-config": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.0.0.tgz", - "integrity": "sha512-lErrN8imuEF1cSiHBV8MiR7HeuzlDpCGNtaMyYHlOBuJHHOGw6S4xOMZp8BbXPr7AGQp14L6PZDlIOpfFJ6f7w==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.0.tgz", + "integrity": "sha512-ipM8Ds01ZUophjDTQYSVP70slFSYg3T0/zyfII5vzhN6V57YSxMgG5syXuwi5VtS8wSf3iL30v0uBdoIVx4Q0g==", "requires": { - "cosmiconfig": "^7.0.0", - "import-cwd": "^3.0.0" + "import-cwd": "^3.0.0", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" }, "dependencies": { - "cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", - "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" } } }, @@ -1600,6 +1569,13 @@ "lodash.get": "^4.4.2", "lodash.groupby": "^4.6.0", "lodash.sortby": "^4.7.0" + }, + "dependencies": { + "colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==" + } } }, "postcss-selector-parser": { @@ -1745,9 +1721,9 @@ } }, "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==" }, "source-map": { "version": "0.6.1", @@ -1760,21 +1736,21 @@ "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" }, "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "strip-ansi": "^6.0.1" } }, "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "requires": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^5.0.1" } }, "stylehacks": { @@ -2013,9 +1989,9 @@ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" }, "y18n": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", - "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==" + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" }, "yaml": { "version": "1.10.0", @@ -2023,9 +1999,9 @@ "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==" }, "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "version": "17.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.2.0.tgz", + "integrity": "sha512-UPeZv4h9Xv510ibpt5rdsUNzgD78nMa1rhxxCgvkKiq06hlKCEHJLiJ6Ub8zDg/wR6hedEI6ovnd2vCvJ4nusA==", "requires": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -2037,9 +2013,9 @@ } }, "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==" + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" } } } diff --git a/modules/webapp/package.json b/modules/webapp/package.json index 017a63a5..fa662612 100644 --- a/modules/webapp/package.json +++ b/modules/webapp/package.json @@ -9,7 +9,7 @@ "cssnano": "^5.0.0", "flag-icon-css": "^3.5.0", "postcss": "^8.2.9", - "postcss-cli": "^8.3.1", + "postcss-cli": "^9.0.0", "postcss-import": "^14.0.1", "tailwindcss": "^2.1.1" } From 6cd9204588bd48acdd3664cdace50b8ecc826d9c Mon Sep 17 00:00:00 2001 From: Scala Steward Date: Sat, 25 Sep 2021 18:28:30 +0200 Subject: [PATCH 06/75] Update scalafmt-core to 3.0.5 --- .scalafmt.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.scalafmt.conf b/.scalafmt.conf index 66fb20fd..9c961a3d 100644 --- a/.scalafmt.conf +++ b/.scalafmt.conf @@ -1,4 +1,4 @@ -version = "3.0.4" +version = "3.0.5" preset = default align.preset = some From 6e2eb84d87e5d0dd37124bd253e115fe6c908e55 Mon Sep 17 00:00:00 2001 From: Scala Steward Date: Tue, 28 Sep 2021 18:19:29 +0200 Subject: [PATCH 07/75] Update scodec-bits to 1.1.29 --- project/Dependencies.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 5cdc6e33..159a4d0c 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -38,7 +38,7 @@ object Dependencies { val PostgresVersion = "42.2.24" val PureConfigVersion = "0.16.0" val ScalaJavaTimeVersion = "2.3.0" - val ScodecBitsVersion = "1.1.28" + val ScodecBitsVersion = "1.1.29" val Slf4jVersion = "1.7.32" val StanfordNlpVersion = "4.2.2" val TikaVersion = "2.1.0" From 7c921a8a0bba3748cf00e8d421099c4b1c05b6f2 Mon Sep 17 00:00:00 2001 From: Scala Steward Date: Wed, 29 Sep 2021 20:20:52 +0200 Subject: [PATCH 08/75] Update sbt-github-pages to 0.8.0 --- project/plugins.sbt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/plugins.sbt b/project/plugins.sbt index f673ecb9..bc7539f0 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -6,7 +6,7 @@ addSbtPlugin("com.github.sbt" % "sbt-release" % "1.1.0") addSbtPlugin("com.typesafe.sbt" % "sbt-git" % "1.0.1") addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.8.1") addSbtPlugin("de.heikoseeberger" % "sbt-header" % "5.6.0") -addSbtPlugin("io.kevinlee" % "sbt-github-pages" % "0.7.0") +addSbtPlugin("io.kevinlee" % "sbt-github-pages" % "0.8.0") addSbtPlugin("io.spray" % "sbt-revolver" % "0.9.1") addSbtPlugin("org.portable-scala" % "sbt-scalajs-crossproject" % "1.1.0") addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.7.0") From 3c93b63c8a45bd217424214aeb19d47fe47cffd8 Mon Sep 17 00:00:00 2001 From: eikek Date: Wed, 29 Sep 2021 23:04:26 +0200 Subject: [PATCH 09/75] Add option to decrypt PDFs during conversion Refs: #1074 --- build.sbt | 4 +- .../main/scala/docspell/common/Logger.scala | 22 ++++- .../scala/docspell/convert/Conversion.scala | 6 +- .../docspell/convert/ConvertConfig.scala | 11 ++- .../convert/RemovePdfEncryption.scala | 88 ++++++++++++++++++ .../docspell/convert/ConversionTest.scala | 3 +- .../scala/docspell/convert/FileChecks.scala | 48 ++++++++-- .../convert/RemovePdfEncryptionTest.scala | 75 +++++++++++++++ .../resources/secured/encrypted-test123.pdf | Bin 0 -> 732407 bytes .../resources/secured/protected-test123.pdf | Bin 0 -> 732410 bytes .../joex/src/main/resources/reference.conf | 15 +++ 11 files changed, 260 insertions(+), 12 deletions(-) create mode 100644 modules/convert/src/main/scala/docspell/convert/RemovePdfEncryption.scala create mode 100644 modules/convert/src/test/scala/docspell/convert/RemovePdfEncryptionTest.scala create mode 100644 modules/files/src/test/resources/secured/encrypted-test123.pdf create mode 100644 modules/files/src/test/resources/secured/protected-test123.pdf diff --git a/build.sbt b/build.sbt index bd15be3f..c4837e71 100644 --- a/build.sbt +++ b/build.sbt @@ -275,6 +275,7 @@ val common = project .settings(testSettingsMUnit) .settings( name := "docspell-common", + addCompilerPlugin(Dependencies.kindProjectorPlugin), libraryDependencies ++= Dependencies.fs2 ++ Dependencies.circe ++ @@ -409,7 +410,8 @@ val convert = project name := "docspell-convert", libraryDependencies ++= Dependencies.flexmark ++ - Dependencies.twelvemonkeys + Dependencies.twelvemonkeys ++ + Dependencies.pdfbox ) .dependsOn(common, files % "compile->compile;test->test") diff --git a/modules/common/src/main/scala/docspell/common/Logger.scala b/modules/common/src/main/scala/docspell/common/Logger.scala index df1dba26..936c9d34 100644 --- a/modules/common/src/main/scala/docspell/common/Logger.scala +++ b/modules/common/src/main/scala/docspell/common/Logger.scala @@ -7,12 +7,13 @@ package docspell.common import cats.effect.Sync +import fs2.Stream import docspell.common.syntax.all._ import org.log4s.{Logger => Log4sLogger} -trait Logger[F[_]] { +trait Logger[F[_]] { self => def trace(msg: => String): F[Unit] def debug(msg: => String): F[Unit] @@ -21,6 +22,25 @@ trait Logger[F[_]] { def error(ex: Throwable)(msg: => String): F[Unit] def error(msg: => String): F[Unit] + final def s: Logger[Stream[F, *]] = new Logger[Stream[F, *]] { + def trace(msg: => String): Stream[F, Unit] = + Stream.eval(self.trace(msg)) + + def debug(msg: => String): Stream[F, Unit] = + Stream.eval(self.debug(msg)) + + def info(msg: => String): Stream[F, Unit] = + Stream.eval(self.info(msg)) + + def warn(msg: => String): Stream[F, Unit] = + Stream.eval(self.warn(msg)) + + def error(msg: => String): Stream[F, Unit] = + Stream.eval(self.error(msg)) + + def error(ex: Throwable)(msg: => String): Stream[F, Unit] = + Stream.eval(self.error(ex)(msg)) + } } object Logger { diff --git a/modules/convert/src/main/scala/docspell/convert/Conversion.scala b/modules/convert/src/main/scala/docspell/convert/Conversion.scala index 54ee526a..b27be23b 100644 --- a/modules/convert/src/main/scala/docspell/convert/Conversion.scala +++ b/modules/convert/src/main/scala/docspell/convert/Conversion.scala @@ -42,8 +42,12 @@ object Conversion { ): F[A] = TikaMimetype.resolve(dataType, in).flatMap { case MimeType.PdfMatch(_) => + val pdfStream = + if (cfg.decryptPdf.enabled) + in.through(RemovePdfEncryption(logger, cfg.decryptPdf.passwords)) + else in OcrMyPdf - .toPDF(cfg.ocrmypdf, lang, cfg.chunkSize, logger)(in, handler) + .toPDF(cfg.ocrmypdf, lang, cfg.chunkSize, logger)(pdfStream, handler) case MimeType.HtmlMatch(mt) => val cs = mt.charsetOrUtf8 diff --git a/modules/convert/src/main/scala/docspell/convert/ConvertConfig.scala b/modules/convert/src/main/scala/docspell/convert/ConvertConfig.scala index fc4e4cd6..74a136b1 100644 --- a/modules/convert/src/main/scala/docspell/convert/ConvertConfig.scala +++ b/modules/convert/src/main/scala/docspell/convert/ConvertConfig.scala @@ -6,11 +6,12 @@ package docspell.convert +import docspell.convert.ConvertConfig.DecryptPdf import docspell.convert.extern.OcrMyPdfConfig import docspell.convert.extern.{TesseractConfig, UnoconvConfig, WkHtmlPdfConfig} import docspell.convert.flexmark.MarkdownConfig -case class ConvertConfig( +final case class ConvertConfig( chunkSize: Int, convertedFilenamePart: String, maxImageSize: Int, @@ -18,5 +19,11 @@ case class ConvertConfig( wkhtmlpdf: WkHtmlPdfConfig, tesseract: TesseractConfig, unoconv: UnoconvConfig, - ocrmypdf: OcrMyPdfConfig + ocrmypdf: OcrMyPdfConfig, + decryptPdf: DecryptPdf ) + +object ConvertConfig { + + final case class DecryptPdf(enabled: Boolean, passwords: List[String]) +} diff --git a/modules/convert/src/main/scala/docspell/convert/RemovePdfEncryption.scala b/modules/convert/src/main/scala/docspell/convert/RemovePdfEncryption.scala new file mode 100644 index 00000000..34f93054 --- /dev/null +++ b/modules/convert/src/main/scala/docspell/convert/RemovePdfEncryption.scala @@ -0,0 +1,88 @@ +/* + * Copyright 2020 Eike K. & Contributors + * + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +package docspell.convert + +import java.io.ByteArrayOutputStream + +import cats.effect._ +import fs2.{Chunk, Pipe, Stream} + +import docspell.common.Logger + +import org.apache.pdfbox.pdmodel.PDDocument +import org.apache.pdfbox.pdmodel.encryption.InvalidPasswordException + +/** Using PDFBox, the incoming pdf is loaded while trying the given passwords. */ +object RemovePdfEncryption { + + def apply[F[_]: Sync]( + logger: Logger[F], + passwords: List[String] + ): Pipe[F, Byte, Byte] = + apply(logger, Stream.emits(passwords)) + + def apply[F[_]: Sync]( + logger: Logger[F], + passwords: Stream[F, String] + ): Pipe[F, Byte, Byte] = { + val pws = passwords.cons1("") + in => + pws + .flatMap(pw => in.through(openPdf[F](logger, pw))) + .head + .flatMap { doc => + if (doc.isEncrypted) { + logger.s.debug("Removing protection/encryption from PDF").drain ++ + Stream.eval(Sync[F].delay(doc.setAllSecurityToBeRemoved(true))).drain ++ + toStream[F](doc) + } else { + in + } + } + .ifEmpty( + logger.s + .info( + s"None of the passwords helped to read the given PDF!" + ) + .drain ++ in + ) + } + + private def openPdf[F[_]: Sync]( + logger: Logger[F], + pw: String + ): Pipe[F, Byte, PDDocument] = { + def alloc(bytes: Array[Byte]): F[Option[PDDocument]] = + Sync[F].delay(load(bytes, pw)) + + def free(doc: Option[PDDocument]): F[Unit] = + Sync[F].delay(doc.foreach(_.close())) + + val log = + if (pw.isEmpty) Stream.empty + else logger.s.debug(s"Try opening PDF with password: ${pw.take(2)}***").drain + + in => + Stream + .eval(in.compile.to(Array)) + .flatMap(bytes => log ++ Stream.bracket(alloc(bytes))(free)) + .flatMap(opt => opt.map(Stream.emit).getOrElse(Stream.empty)) + } + + private def load(bytes: Array[Byte], pw: String): Option[PDDocument] = + try Option(PDDocument.load(bytes, pw)) + catch { + case _: InvalidPasswordException => + None + } + + private def toStream[F[_]](doc: PDDocument): Stream[F, Byte] = { + val baos = new ByteArrayOutputStream() + doc.save(baos) + Stream.chunk(Chunk.array(baos.toByteArray)) + } +} diff --git a/modules/convert/src/test/scala/docspell/convert/ConversionTest.scala b/modules/convert/src/test/scala/docspell/convert/ConversionTest.scala index fa4360e8..3bd1de4a 100644 --- a/modules/convert/src/test/scala/docspell/convert/ConversionTest.scala +++ b/modules/convert/src/test/scala/docspell/convert/ConversionTest.scala @@ -74,7 +74,8 @@ class ConversionTest extends FunSuite with FileChecks { Duration.seconds(20) ), target - ) + ), + ConvertConfig.DecryptPdf(true, Nil) ) val conversion = diff --git a/modules/convert/src/test/scala/docspell/convert/FileChecks.scala b/modules/convert/src/test/scala/docspell/convert/FileChecks.scala index a6a62462..96f251ff 100644 --- a/modules/convert/src/test/scala/docspell/convert/FileChecks.scala +++ b/modules/convert/src/test/scala/docspell/convert/FileChecks.scala @@ -9,6 +9,8 @@ package docspell.convert import java.nio.charset.StandardCharsets import java.nio.file.Files +import scala.util.Try + import cats.data.Kleisli import cats.effect.IO import cats.effect.unsafe.implicits.global @@ -19,6 +21,9 @@ import docspell.common._ import docspell.convert.ConversionResult.Handler import docspell.files.TikaMimetype +import org.apache.pdfbox.pdmodel.PDDocument +import org.apache.pdfbox.pdmodel.encryption.InvalidPasswordException + trait FileChecks { implicit class FileCheckOps(p: Path) { @@ -34,15 +39,46 @@ trait FileChecks { def isPlainText: Boolean = isType(MimeType.text("plain")) + + def isUnencryptedPDF: Boolean = + Try(PDDocument.load(p.toNioPath.toFile)).map(_.close()).isSuccess + } + + implicit class ByteStreamOps(delegate: Stream[IO, Byte]) { + def isNonEmpty: IO[Boolean] = + delegate.head.compile.last.map(_.isDefined) + + def isType(mime: MimeType): IO[Boolean] = + TikaMimetype.detect(delegate, MimeTypeHint.none).map(_ == mime) + + def isPDF: IO[Boolean] = + isType(MimeType.pdf) + + def isUnencryptedPDF: IO[Boolean] = + delegate.compile + .to(Array) + .map(PDDocument.load(_)) + .map(_.close()) + .map(_ => true) + + def isEncryptedPDF: IO[Boolean] = + delegate.compile + .to(Array) + .map(PDDocument.load(_)) + .attempt + .map(e => + e.fold( + _.isInstanceOf[InvalidPasswordException], + doc => { + doc.close(); + false + } + ) + ) } def storeFile(file: Path): Pipe[IO, Byte, Path] = - in => - Stream - .eval( - in.compile.to(Array).flatMap(bytes => IO(Files.write(file.toNioPath, bytes))) - ) - .map(p => File.path(p)) + fs2.io.file.Files[IO].writeAll(file).andThen(s => s ++ Stream.emit(file)) def storePdfHandler(file: Path): Handler[IO, Path] = storePdfTxtHandler(file, file.resolveSibling("unexpected.txt")).map(_._1) diff --git a/modules/convert/src/test/scala/docspell/convert/RemovePdfEncryptionTest.scala b/modules/convert/src/test/scala/docspell/convert/RemovePdfEncryptionTest.scala new file mode 100644 index 00000000..805c44ad --- /dev/null +++ b/modules/convert/src/test/scala/docspell/convert/RemovePdfEncryptionTest.scala @@ -0,0 +1,75 @@ +/* + * Copyright 2020 Eike K. & Contributors + * + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +package docspell.convert + +import cats.effect.IO +import fs2.Stream + +import docspell.common.Logger +import docspell.files.ExampleFiles + +import munit.CatsEffectSuite + +class RemovePdfEncryptionTest extends CatsEffectSuite with FileChecks { + val logger: Logger[IO] = Logger.log4s(org.log4s.getLogger) + + val protectedPdf = ExampleFiles.secured_protected_test123_pdf.readURL[IO](16 * 1024) + val encryptedPdf = ExampleFiles.secured_encrypted_test123_pdf.readURL[IO](16 * 1024) + val plainPdf = ExampleFiles.letter_en_pdf.readURL[IO](16 * 1024) + + test("have encrypted pdfs") { + for { + _ <- assertIO(encryptedPdf.isEncryptedPDF, true) + _ <- assertIO(encryptedPdf.isEncryptedPDF, true) + } yield () + } + + test("decrypt pdf") { + encryptedPdf + .through(RemovePdfEncryption(logger, List("test123"))) + .isUnencryptedPDF + .map(assert(_)) + } + + test("decrypt pdf with multiple passwords") { + encryptedPdf + .through(RemovePdfEncryption(logger, List("xy123", "123xy", "test123", "abc123"))) + .isUnencryptedPDF + .map(assert(_)) + } + + test("remove protection") { + protectedPdf + .through(RemovePdfEncryption(logger, Nil)) + .isUnencryptedPDF + .map(assert(_)) + } + + test("read unprotected pdf") { + plainPdf + .through(RemovePdfEncryption(logger, Nil)) + .isUnencryptedPDF + .map(assert(_)) + } + + test("decrypt with multiple passwords, stop on first") { + val passwords: Stream[IO, String] = + Stream("test123") ++ Stream.raiseError[IO](new Exception("is not called")) + val decrypt = RemovePdfEncryption(logger, passwords) + encryptedPdf + .through(decrypt) + .isUnencryptedPDF + .map(assert(_)) + } + + test("return input stream if nothing helps") { + encryptedPdf + .through(RemovePdfEncryption(logger, List("a", "b"))) + .isEncryptedPDF + .map(assert(_)) + } +} diff --git a/modules/files/src/test/resources/secured/encrypted-test123.pdf b/modules/files/src/test/resources/secured/encrypted-test123.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2750d6349a18262caebc9cf3723785d05891a1b4 GIT binary patch literal 732407 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%0D&`Z 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ⅅiYjN!oVohUa#sAwOvLT1<@9U8~L*^^a#e&OEBC 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

g< zWZRCnmvAGqOsP5aIaaySglk-+(F~k~{nk=%ESV(oYR5O0$`&rm4WyJF%5S866P@&ne6ETwEDGx`kXNrEFCWp6MK} zqu^zy<`jiyKAB?{n z`Av*|bH+lqfwt_2lb7O&A{*CG@&Zf{iwjaek0J}-L(GD!90&Ie-vIrAuU0{_D(`|N zpyD%hdcU_ZY48K82~}`XTc(kLLFu&eB)mmO$`jVLM2Q+v>hE0+^j6+xOQ2tZzv$sB zkcWmUHb1*?DIF0(%rtt`Jnl;fJ<=S;B#bjL0ZvwnU5c7%(6iY7{{U}5kiT)fvLF3L zS}Z@e{?&Wrl_*?hCM~>1(C0xD70D;qt#6|$9u_FfUMdX->drDPK=UVmV+AO+)nP*L z=4Q1Q{dJ?PINmSg9KXE?0Ql3w;<*waj4Bz4dLgt@kK?IPC<>-rQBuePSU7%zK(1hF zRcErWQozRo^Q&9&Pbau)I{06Ft`W(1upQ0J_lwhQA8lCW(K4NehoTc~l!!vZsBd38 z{B+;R80jeP0GLy60dN`6MK?(CHcyMZ_v6gsOzQM#I_>p3J zj9{S5E&J~1pD#wzSShMVb<9{~mASM&_?7lg z9v#(9a`_xMUY~|UN7IG0?&68nW}S7n8-!J%lW=^9@Qe=P=zR|jUB_-&r}d}XK6x(I zI88q02V0EaVrVIh<=*EPe{>W0Gvv99*+_koRm#F=+$eKz%62phmBzg|H z!fYy}rN^2A#*-!!ZH)tuJb@E~RGQ?t3C^Q9-Y>w6z}VYAaG-vZFac5Mzk4a>3l?VH z8Ur|J3m|}amXraEEfLv4Mb6pv59NPh|FjW1l+SS63)i{GNMI3*xv+gv5c~nGb1hD^bSu2PruVSNhUQE01^csv$~j>H zrqadFdF}c29-;Uou+>G2ufVlax{{pavSKnba2ZX`bD7=Ghyvh|5a$u4UhwIWoQ1c2 zc&ApcEy9^{kHgA-DKZ@EEQ$PGYKJpohZ^o(>r5Q>Ex5gL=wTA{gmal$vic@@V1|b_ zY}2mXc?UytuTg%YF9yP@FrI^eiq^CTg}#EdnhKA~kBa`( z-zHMMGbW3xsC^*du1sGitzm{^{v3R~Mrg&%PeZTR?_kgt4hcj;9i^<;Zsg>%wd^2} z3@Px?8l~(k#5a-gWzNVxA7!iZ*~RJbO^amyUf1;3nIO1=rL5&TD6-GM3 z{3{-rU<6$z>P9dJz`U0W!GbegNf9 zzPkI{{a4!h^z<8$xXHGW0|Ep1Bq{LhO02mKuo}w!ZUIAWazVB!o-cuL@MV;DZIjRH zwzhGG9CX#u@-Q?PN0(5@Kj8kZ5m`^)=9rlL!*^?-h@*bw(V5 zCYkUy1w<@Qh*aSsy23z-u(Bynjc4@o{l627@y*_0yTFR< z9U5X4iotUEuNf8}lx6GgGEM{0%5mKJuU}`B9ZeoQZO!8X2fPMu?*1LV^n48t*i^&2 z&kLXB_CT}2D87inhuE?uZt?r;oX3dwg2gC5>bb6BenuyLz~cnT!rSfAfNQW85EPOZ zE<|9f0bDAj_N^FE-DIV{naq;~t~L~yy(Q}7BOjf5&;|9E1Dn;gi5$o*#2w(TtPEai zED@H6Bjlu!t&xS(f*6KGi+XLztiE8UuL7hD6tot$fy~_!X$2qY510T6-ofPHq+I$dy zKKEpl+>qTg`ojEEuZ;~i(Nfp9afc^q1g{Ok>ftM}I#4os$5i%fHjkruq0oH88B_1B z#3E~Geb>y@ldoeWDlEWd>@#?>^1a;e+nu6QfH$<;Bb&Bk7KG*tSz4br-){;qbwD;c z@@VtjAoIix7~XRrbZmc}uqKlzD-z+T@mEB@m(_LCZo{_Py6BXoJArFM)5wLVLpw&f zKE^Vjb)xA4#cJTegY~xb@{5gL(YxkO5H3cP@Lpyae8&!XxiGJ@t^AEb9N|35(ZScI z$eBu0o!V1MbuL{4VXMxB6yR1bJP?(k6ip;Jq$Lc`#uAx)>C3iA1+nV)91y$vcdPT{ zHozbG0n8S}5R-at*0EzDC7OaO6+x^+TR|~2BU-#Bpng;gcK-a{#Z5(sPRg8g@_6uy z!zN*o^i6Q@#E5ppiRF1=zZ6R0A$gjhO%Qbf(OrWl#Di~6i7QWT#(*O7BU+}vp#7EI z?T{*Ak(o?c3O9UZ;G{e2+n~(aYyvktAZ>-trG_^zj9_ryWHj?QWzIGLlHLbR6 zv#_IG5$MJ&d1wtRF3o1ByIyk?w>qk8qXCxdUMN&^hWl&10bm@XHhPq2A;|P^4bqQ{ z0m}hiil2-*EZ53Rsv&rM=2sP*Yr8flBC&qo>X%~go2;mn?ogpZO@)6##STzbaph%5 zvKKBVmEj*e(F-hm)TZQk9L0T5mskQVE3;UE51oAzZ2?C#^Udhb4(LgG*V=pD+Ax22 zXO~XR%Qp{~|A*c@b9ELsm9J9+xkl(smZ?rgbNl&P4K4Rgu&i^Ag6WLI?4SYububPh zK&wGv6Qo9ntK7-5zq%85p_NYx=6Ud2cw2{{yvqur>PfVvju^ zmt%fMq?P+ItwWkC^A2KGFEqkJl7mV!J)Ki)?=>^kBB;V2OJ_uroplPx+n%-2MlM~&9ctD!>5F~s1+k_2So1`Gh7 zoxp>9uxMoWgsSzAICYx+Hpz)SvUGW*z?#IBoM|YjtW|NgpqsIM;`#tMW?F4GjV!t@ zPRv89ta?M@W?Ena`4S`Cs|t~&!vRJ+xk#Pm7{wzxXzGQr-5^p)qeu>{S?1c&ZqS(#7Aay9eK9kf z&1czI2z(ZfBdf`@^RfEwbdZnRA~Wbhn&`O!wHrh9Q)k6!m|meC!Jfk!N+|m}Pi$@f z=VBE%1(kKEcP#hMB%?gEkkejE*KWv90^LgS*n0)drp7=q^M~ZL{Q5-oC0{K zSWmFlE@))sml6c@2?^kr`B>FJ?LBpwH_E1>p!OZc@kR9KjGcNt__KSKa?DYBiFT#P z>Uk)36C|)^DExU`zR-aE2M<3fG>qB zmZTrA=Bv(p9p5Dh3o=z@N%NJ1*epAWtVX+L8|lFAxh_H2MQw{)I1aA#jE{KfkBtrU zLHP#MwfL>34W)wV{dE$=!;`|UAm9|BI2Po|3n*W@@2%IZ;&N{++yG|gHdgD!e1AvJ z@OE*JVk?>&I}d33unQl?Yhc#%NoF!ZW0LjD-o@RA2~?&LB?-Ofo~+ERg=e+xE5qv> z77qjM3NU*(?ztK))~mO9I=tJnF~H<~>)K(MKtn;cciP_90Mn|WnkcRdqddY?axaNHvxWo4110)IuIztH*T%Zc)$fy;2wpOTn-6)AiY=QYYg_IwN;dnyZk z>%O-iMkye33*f3!5>o|3o&3 z(3T;sZ|>q*t=-7VB?jwgO?FSgP(g&~F!-p=GZMe_TfV~T)BsbFzuBKhyAYvoM~TyH z74X?cpIMc6{j-`QJwtUNxTHk9!#2O0=Zw_3POdEYZy57oY7>!+vI^7%IZ=&R7fy`$ zLLjI7fX84B#phM6!H4L4$F6nw?%VV+qk<)SyZF*OPux(Zs;4)faOFU}*N%fo&*4&` zA%hWGkq^#Q-}t1{yDIN?B-wzzwzj_-=8D2USZ;~TfnuoeNOkPlY8;S6nLFsh@!T}f zcPEHU*G+?m*zpm#CT*Blae*l-bz{3O1ux%3jkEuQDbS0VN+rPW*!VXTIXEqO2L^!J zmYh}@H_$}1)q1S|$$jz0n14rO5Fb zqhZu`{!L7#>!)6^a!Hz0Y8w_qiI*{}Fs}AwuWiDG+hpH$^446 zVVt0BoZ7flUS-_nKiJz2hYH`W-pL&Nx=GD0I84QBl@a|k#=eU!P>SH9mhUH=)nli5 zT0hu@2vhR%)?0fP?bflvJ$@X25J8%xSb8%DgexT{6y&>2Pjn-UV09tD-DqkE1#wHN zG_|w}Yrq>gIM6t%(QA1DO{wl{+uiWcYZD*4*{y#t;e9b(a%I)E|DDF?h(OB?Pk3v~ zz7d4_Fr|=Rm1snz;q>@pRi*pDb4n)3uVo^Rq`XKWXu58W^Bo=7wQ7!fX#O~g^+v5v z(wpb9sb8;ebfmse89aOL-js#mO_^J)S=X^#PV>kN@@%kD?_l|@dVtp35GcUYM}a77 zG(RvXRo#M-GgJ~fgeyVTsbUe;%%*dJ((CU%?q}y zu?lgeWrvNtOZs@XkOS?!-kpuQ?=WTZd(g`h{F@@!^IWIbm8B!6*z5~2A#qtBDYL`e2v5fy4 z)j11%OYh(2=cZ8X_WW%MLnCggh)->*7OU99z%?{R=}7n<y^gs7e^uxG&th=wkXI zX7owPj-{PfAgvkuoKR(ss1N9~N#0eGlb9L-gH|+FwP{sVNe$m)6y3#n@q1r3+kmDs zTH{8BY}@8acCFBGS9{@>kj_3sU@Xph9_d#=&R3VyxX&<4Fk2{~6CH*a<$d)dW~%H? z^x3)Pk1j-fp30>J;%SF2xA_rgXDky>=YR_4BrntGfP7O~`}qbmmV%`?DJ z2CtEsP&VfnxQp%_-2&hwK|A4aKODMu9+i?E)pUe(5@i)FZu^|&@;AobhMM1~OM0kW zg|l@#cN$3$4K~r&+lO$51{<}O2T|rUfDVpyewEj>*2^M2SZt@a&-0=9Nze+6YrQX`I~>+vy-UyQHKsF(^6=6lqN77b3gmG zMs)J*7uEQ{CWlduy`8g}?6cU2bLFi~GsmWX78ITOGQvdDhW!gQsVmSBG>NyqU|5{P z1iS4kkO^e|@ZMQyWh*1gd1r%__AR}Y9#R?L_d5ayTepu5lc{9zE2ygn;e>R7D=sf# z5AB=ioq|IM&$>sMaQ5j0c-m}oNf7*ES-q9$t|FKLw0`uu)ZPUKn6 z=dJLKS(ZUw@cgQ;0@~HUdc35Tq9!p)1n~;_r)iP5feL-oo^B74{w5e7w>P0zG@kfP z5Cz9iRf6bLs4i%JYA8~60ken%8w3VuXh7qbkyiQMc=d+A;PT{Z_TzF)#n1e}PMn;4 z;{q^6EPX?0T>!YJjJ}_~07qlZthl+}o$&4{FL#?^kN^2B)KjOGs}mc>tQMB<%RE>o z3paA3zY9nP(F`Y+&W9B9;`9uRjTB3?l{VAmstX^SSiQkb8bS+xkl`+{R$F^Yluo1H zc3$HKI^#u=E2`&H2iBD^>_d83-_57uc_^reD3)^oWOeCICtch~S2ERJmIxlGGtf1+ z3AT*-Cg3I8M*aaG?Jvl1;9Hh0rLrk|0eTOUfYfJ7)if>xzt&iI$2IjVM7D}JAJL93 zWcl389mY;sqQM8DWkocLh4dYeiJ=K>E(kUj&!8o(flDLPeuYpeYn53fqV_+TwOc$? zXl{5Jt+PDi)Pw8xc_FyEj(^6}r8fp2 z#uaE1S5>(bMI&@mf(O`HfKU-SZSPJ`5ESXv_V4{6ivvoC%0EU-7(_PnQOe(J`Fayol&vzZ6;4hg` zeh{lok+iZ|imZeePOtM^7Q6?c73=I{YMELt*h**3=XL9$dyP;i-XBaU_{1Dvw~|i# zy!n|71_1PL#X!YiMEyCwI1!t?vP28d&=Oe(33KEI2-HhoBysPC?Ma5!fo;G9m>5t@ zlCx@g=ltg%MZIC7x7Xs}NDJ!-|5_>g)@yi7zJoT0kv3A@M1-wJ8IUwhv zRC_-9TQVVEdVy3&$oyNK#*^1`P4wJI|MY+C>bww^J?cnWY)1Az0SCAF@<}Z1Xb%px zS72$C%^x(&FIR^eYOCw@X;3|PS#XGKD9G~Ewz9!|zsbG3bW!u=RS2iF(lJshn*;(`jL{Dl z!;xiV!XfqyhE}J1B*Pa@n_nU$^qEC0{9r*P5U3__9-Xf6&dEk!`t+2%saW1x*reHj zCwv|>j{X7}O55N2lyU^UYvb@4yQQev1%dmqhlYWcw2T*3gbuBEmtxngZ#|k z)eR_#`d3I2dL5a2Fy;D}eYr_b;^!nG4VnS~vc&eu3dxThX|ej1A-U1OMI#|9bORCo z57~cC=lb-lrjovMlUOBrkTG6!&FP1xn@wktTF|a~YkcQE%sk*n-58$EF2zDVA+pQJ z3%ND57hi78jX3kt!}c#m`y6PGlU6B=i-f$IZlYLQW*zk87p#pXbtCK0`>?V+x~f2J zpof0lIfJr*@N_j55pt;t2kZJO&Pt!SD*;!9Mf~D(guYv6s#9188MjtK+p?JQHH)EZ z86%hZf=Kc;LRzO*vsG(-J#MMz%QS5cOOy7&b1<6wN%zN4@s%JdnWd_W``2w74-%EA z;9|jHMPBw1lfm8w!|;8VdvkGy^Hl0Z@-!k zYKO#-t|7g#95gNc*2U?$OLtZ15^V3|>Mp9g=gMWSXW(ZxK~C#}SQW}8K>qxJv&!9C zXg3s2;Z)13Ez@@MRMcc_f)2G%`M`pDtbvxxqU~?9PnRn?iv+;pd{! zqKwDw9e9`%2E;NK-0OD3+o!BtKX9uYg(Us2?%;9)Bp$C*O-zTg*y+^?{~G}-MNAkR z6*ifJl=N&KEgy1m{-R>EbM#ZFVK0C+SSu{)yFJfrT%zAKsIb43-ps&ir(GmrS++F} z{5V5}nrax9M+z1E9+KfX-&^F)U_rq;$0pVI!5#8MAHQ_;g7^p;b9u)ziZb((P}n@= zuStL6YE8Zpd%D^*`axfXR~6D+0u^Kxa`!t6}NSSwg^xgehKypvmJJx%-X2TFffsopJjOeZiPvq zS8pUfnyS!R69jBsok39HXfPpHpID|4bp6>ufT!}u1Rp9djxjsG25RIQIQpxokL0lglfAxL%Kz55YQ6Ckv{b7}TF&9lELMiP{NPyu2uCYWU zK~&3k_9+JM+mx%B0(pZnnf`dF7gIizgIuzSZ!MOB$%^7LVDfX^WjL#*iQ$ux_IMZl zPtkp06J&H3U1-;yN#%uCbRYU>#k2^-pifq1hCx@mrv0aH1aQ0cEyijPP0nzDX`nRb z3)u8J6_mbRvGZny?n}p}8Ci=(NAWnz1n9qxdsM2=kSSZdx7Ao;%Ij0pIP8eaNQXZhSB4E-E-VmXW=cy5f$b zD5qyXeAG%yjch*ezALcm674)@#jqMc&3cG-0={bMqQX~UGe_rhiXA_H+@mX%h|)!9 zsz;{lZUdS`TzvjJ%WLUwSr(0^4P7F6@=nk7FsGE~HoP&hhDKHVPO9t`5Zug zidLGozZrPbd1tnH41i-NiNYWsxYJMz)}R9$p`+l{d~04m11#jeP*DKPpJ;l-2jS`TT355+K0x0YVy24?%o~tv@)5Qm@b8AcJ^=dotwGgEEkm`0&b9p8J z%O~`Rk;XTTDpaURj8a3YjC+zg{SX*!tf_XlKy$q{wo`3(psKXi%8 zJqPD`+z7FQFeQC&s%kk!3`){%Q6IgmY?hvX<~VS{s9n}dLQ_R(968})F*iQj|K;hP zXSN&#f$zC#+AxXYoxNw}F;J5TY&`f^e=i;S{41~>hYPQW00wF#TqeaE^ip=JPDrJ~%mYa>68qoFaemp#o5QcoueULJ1I zuFg~V)TH?@zthG`*R3^y-=3KHp}or)I001iT9C&m$Pq`k*8bHFZJNtiQ)o z!hqA!CGk%ouMP3mJyJ=XmOIf>Ep2W6(%6_oz^h%uqyikAbUWV@BHbU~Y^D3fJ4wZw zKd?ONr*$lN*$JoUcw=__!vYga@_ZZbB1fi1>Cjovr+ir;w|2pkmSO16Iq{9tfEspz z7{V`TMqPXBrCk++QopkZgo(LkYGld+sR1y|P~!Z&?m<@a4MF}QaF0$}7mSNmD|#T| zNt=^4W9-EwU7uL$d)6?JaL@fAIg?f<14u#J)$c=PFQ@ZMd-8-OrheDoB#N4%TYcG$ z4H@skcx-CHf5qU<+K#Nse4I6$eP`LQD&c4vVC7bjzYi7MHUES{-kj$v@Wz)dD`T~( z3)Ahz%hEx2Qlpr-eU0y2_1un1Lnd431{e(yJh%4h3C5S0uLSZF9zREN1EH!bZrCIA zm=1?&H4l_7)j(Nn4_k(D*n7DnK1B7~G{fkcGxXwxe~8@raA);ADcEBG5Dbh4F4rn6 z=9dTu(-bpdqUb$$QbA_NmG~_BOX^LbsDwBYVr!p2Z3k^*Bt`e}M4TKj@Eg%p%5sx@tc z8bQvMoBd{Kbxa%aFhua+okXs#4PI9*(@4}O{h{wy#fwx`R;N2h&KJ6QHllj5L{=_n zA|0D~QNcrPTfJ5RL^HAA2KQq9kGF(<7Y}0G)qX~h=(*$fD|6<9caCzEI|T)rut_g# zt_V{kXtQGU8vVL-)boxQE6ex00z)}%>`;oV*M_a37{N_lrYfe)Ir?cOQRY`CXiGQ# zDE~~DRJVeA`xf8yC}{^9PX`Mhc_vK`d|9Xa#=nG}mMH#>${5t=qr`ng`+xhGqxJ%D z0)B2AR5q>7pmjs_>jLwfYgRC;WI*{~&V;0~&J%g~k)=3eqnIJT3N;MBW}}K} zL#`&u0>Sh28q4^lhGotvO}GQypX|%v(-f`nnvwYrC>_4g`}nj>>cG6KwUS9tEdMlf zbPBR2zcvf~#mdGKf3xCZ;6?fQaHXy%T)>g&##3!@?;=%?L%6HgApWL9(&SE7F&JW* zlV75<7PQ{f>gTH6C>d;Oj)(zYyt{^*p{xc%{QLE%sN*AUM8m*;Eny(%M*E+OEuo;b zdI+lFtkLpkNaH(9>!`X#irkJ|RUqyyQxk*VG1DXLCSMcxV_6nbYhm7V2WjK9VVS9$ zyewbTJd{2EwC+3~rS_E$Mz z^1z>g`reur;&SehbRG`sfx7@s?^oGN{QRo6;EQKSP^cD1_Dn#^Eb*f#|DKWs5>Q4~ z0@9znzd@|}`C}`pFb%<{UOfo?dA56&NDOw(6|Ue(AI`;Mnet&QD7g?^;%7w?^|dA< zz&MQR$rNo}U#;HQO`Y$F;%Xy9l=vZcpFCAa-u7jaI%pq48OgxO%B1blk_gm=JPX+R zCk$4j$=-|Q%?BgCm@7VZ4k=pcs|=%3$_KLeZ(l(VvpfH0juk!od!cLfC4{iBA25IL zB%3zUg6Hq_7;6p~a8#sY4i4XZY&t;@~n=Pyy~)0{?p@%Ya8g1Ks_@q@wFKSZ6UjyU(#JUjSTiD zhn6OCvjCY*?CTuVmQs&+8H>74GtdXzxGDW&i~l2Q{5fd*=``K8wwW}~+%OZ5Xa zj(PSMhKF^;OAiltA8OAKtgUDXNqKst8n_hur2Q@VeK(vUc`)Os;(-1uY=V+s>>b zOn)B;@C|Tc2WU#l{rBPrW!EN!^()5X{AT=E@8@}x5zQbc@9O#KZd}ioE^P-;q`cnt zgWQ0w1WJEd%{`M4sl}*k>Iz5q!y&=qNDPw{w*_~?Jz+?cMaQBOQk|0?>!2~t5 zCxDeiMw9Q{-(50#Eu_sx1h}xN2E6*w%OzbPX(r&cNsUj&^s8U(-QSNwh&dws(!hF- za{gfk(l$?fE)uICls8JCS&q$xoA}-VU@BozB*Rc84V-Tv0{ZJi7pq$?nw49vLd20tdoo1%do3q3_oGIHMy) zabt~&3ibr?G)V3tY4JEWXUSHfk3FHNmp);?a@1PaAMP-}N{XoE8qs*0z4RfIj%1XJ5zpRe+A#d#$0T5 z(s}-8hXG6aIC&#a72RR{4QC5~x=uFL?lKpwb3h9Os*1YiO2W`X8P0$OzO}G0#uJQ$ zJeq03(<~_%>_Kh>V4+j62z-yGTpxMQSIcmhc52m;yUR-o{KMpAapkWtL#JV%8fC-V zSJBs5!oc8%!EAP*9=!zD++fuMBAk7ir`LKqTGV)$%Q`JTCsNj+oK-89R-Lu|^uH@S zxuM#4j0?N;ZMKO-M*GiESt^@>h$w>W*g5U}3Bc}?Vb3%smmH~GY{{$=qRhS(Aq_E6 zFH`Om1EDMlP$T!Dj=ghf3!P%+c7EM(DzMDyC@dE0Uy4g0DP5ocMU5+N{B69%#9~|h zXc54W7VbJ5z`_ifhR^uR-cd5527_{)20wmPk`g%>l;)9#tj{H)={*FNo`=`PMp$W@gX#;H3{$!8i} zZ4JHXW&3McQD=1_PYRgTIhw;p>)9D0g%Oj~Bj+MydC0t`N3Ngx*qgteY?aFWOm)rr z7Ga7L2LCB`^4x3Z1z5cP(akU5x@g?BZyGr5z2oIe4YJ$EchFLDAdX-1SF()M^7;&k z;pYP0#ygY0w*X5586-N1rxa9HdDi$uGNlx2;G9Q2hKrnW3=-~QdpW%UA5>4~?$w1V zewQEJ{MR_Hj0%s{{xZYEWYDCPcfr_+w!WAN9Em<^11iX@P8yt<*WEeB<4Q`7rO)jQ zYUYaieN`n-xN01-o;;YoGc7)c{=#0$2k+s{f(l;I0g<}IS6njL6`*YpdzHfqLI-njwigPKtc8fI{#F~lNBgM?Nlp;ug1x%t7%*!MqnW1 z08lMqTe(8_s@KQBnO_nHKLIS+Dm2Q|d4PULOR-{*S?!raTD^m+pp*zl=%f#6ETz+G z1|b(_BpbhZfgDTbKN6}dcgb-TMANGr{2yLs+jl^CnlZVm{OKGx71bv#i;*Cb>W6ff zi%8lWMS0_dAxOg`f_-*@3lJEsN!>Bkgud|1JxllH%*mlj1thCgUhEanDi8t*eHaSO zdHbqbYSJRLxa2^d>HCOQ*P&PiuHk459iq6U9_ zz8wQOh{Wm&O80uf2V$Wp( z(DmR}`yD|NE-%)Zet*b875)6|P^%ks96X$^4w6LkU9Xj`|oZKWFtPyzaH#;i_P3snNB<2{4ZQ1ssw zOS8n;ESUz1YX==iLhUbDbQkPdJmGVABOL#Vm(FXT@XR05@N|;{ZOK4c;xbI4067oF zZ5C+7%*---=MR;dKtAj@))Gv3>R{or&AsB6TGDM@ACJlz~VD6KZvA- z(7jy!9tmuwx^L8|$y$eGd*=3tAdA(4jkuMRd3z#RRWd)lp_8W!^R{K8xZkbsKtYlNDhitaebEQ`p* z^DwFlg)$klv6Ux%;yP@_f3Xc464+S2&HakiGHbtzQhiMp)Ds+@X=QnXseqekmz!GY zSd&JKTCt_Mf{XK(2)XC)#0;Wk{na1gZDI?z9k*F`|BSD&2t|CA9H$y93vPE{$Y6$B z&HD{4*$u~PG@emR*3V{E{-!)V<@G7 zIE4H}T%)l4wk(l2_4MiUHv=j7@@wl)Sc(!_@@KkZTkEwcPZ!N^*`*EIxYosSWljH6 zpu*di&C)&^u~6=~CAA`Y4esrYdo^@|ILt#qtYUeUdA=oIdk;#LkU>wGUMp`i#l`hd zYoDw$OHJ89v{7`YO9d1fP|+wA4QW0~RJ%UFfw6~5m_~{7Q4?I12BsCBfJQEK=x~bxt83H|h6PJMoug9?dsmW>nCvFUoUu2{Mp*@N##2Ds_!16?WY7!WF{S9iTT`9Cyl&!ct0N5yBdwQgRkmy z{FQmRl;dB^I;KmOyKe>OM|e^{$0`2~4@rhgX7?s>42C{znzg_k8Bt_AW&BIvJb6Mj;Q%QD85?gBrZ6mx>%vGWS0I!xZC-MfYo)a>>0v5TR?P0dc~O zwqzU1s@|QMyw%x_w-?eCK!kG}Xe`e^YmJ?z@`7GG#bxWDt%wOYnU$rKglocg09yr; z!^CZGcmf?GPziZj8b%@LL5J7B70S zSw+X5wiooc>sogjpHi=$w>E4^pT(7JMd&ZXpsO)7aN?Fs5Y8Y>Zh`E}1BtC4JS7N_DFRf#5H0#^78|9xzrEFJiv(bOlVV-2aUk(fp28;N44{U$tBO457{s>#ePa zt+9tVDP`G{K@Vn*PR8#hzTQp- z6kf#SByMCdCJdE*+11;38`S+v3Loyu%aZu^T;l>Al4Cg(5HH!|WI0aMVE%?gBpIC} zEsTDl!0^CwAsBSeK&WvtqA0{3yCiA94&W6s{B+Y$Zc~=Z<{=Y~R$;a+QXI?;t&Hk* z^)9uXQBCzl7@kI)a(!6{40LnDJJENKh}`k2u4l1Jiri zWtMKT>ejE2G%+Em?CeQ;U_!JmeBf6`xRYheji${HdR_YPn3$#+BplmNDuoD(sw813 zA=}I0%?zl4!Fu%Jya+SP{pqn_G5iLY&`TH>xv7R6vaXzL3|6y1X5 ze#`y}%RUT0Viz(;%0)ajb`uz09qJ^zjV}5vkEHJ;qC_5-!0Zx&2y9v`F=QNF;=)M2 z2ow*LRFGU|DLj5Bj zx9=LOAT)e(26PkBgKW5?vu^}yYw9Eajl52(X6*GpuH@%VxY15)pbU>1lM^ z?%-za3xn>FO81g8%!sekp&4TD(ElS!iUCQ`VE86TbYmf(0NFc#*ZH+C$%6b3JhCXi z`Yy)iD(}!c$sP$78=huH(5-1wur8GMEjxQ5f*Ezq45YjSkbyW^1`SOJmLah&3ftgsqj0*m@-qbst8f^ivq{lo2g!8+1cq{8 zvff=+>Dd?J@?H@kba}eO@xq^}P;<;ghzI(+XvP78rse%7=n`v8qD{H|I(9yy>}{Gh zKyS`TSgryo;|zB0bVOk9zCEVvA82Mer8UTGK~=vR?i@zkOkK8Q6g|$wUqyRkRL%}O zrn;IXBjx=gb|xUJI%EHyOX9it?e8?ACp%XTF zYCZdN&4bCH#wQ?u&G<+osShWw?b*T?mCOu`pl6AqdsiWKUOcTsdk0e!#wg8drtrEi zx(?=ziDtEsf5$VZs#;#f4MX&ks7*i?edh|mUc)~N>8=(V)c;5)pKs5KDXLra2;2bd z6wU`9IA%_+7-}&oWZ9-u3lC*-z1ggG88j{L<)2&~oDJQyF$iA78uM#>R>2a>^=#=( z>3Z+yD-SY-Jc~QNdgI?I*o7G-y*mj%n-Ed3mb429&B>IOVC7!hKo)49maGpGphb<| zlhX78mNFC)dO<5i2nq6MBoTFGF9-OHynhc!92+Mq*f{TGJkkYs}G9c@&+4DHeTkmiHZtBY>Q8O&_%SSg9J%pnT=|F9jcI4_4iK|xaG1eF6>|0$|g zJvC$v1cBufuf7N_h!t5+%)j)eca%78D^O$HYGDxDtCj;Q`&B$`Hksvf80@vC)8N}40Vmv z7_iFDLy0I`@8uE9(+fa=o5r`9ymdea_8vtIUBkT=+qMLJ>_{JM{arU}xFkoWH{$f@ zUV!ORqw|8E0hBua9yR?{mQsGIXHmKXphf`Uow8txEv34FJpa;fPRfm=h47(EssKS} zns$z~1eg0i>yJeqKV?XA_XCTbPT~y zsM4uLALJEdE|EL(&)!TeLjykIqsc%=Z~Z6RI$)PC(X{V99~j)z1J5+`{Vawwo4*Lv z&BAt-y3oR(4Pn~Qcw&LR?pm&+If_(Ex?S8A>96c$oh~-%Mc9dtug_0iQJ04JlzGaN zu(;{Y5Y;Z?m}kGzBQxmQGU&W(sJ(rh{Vq!`154ndk%TMiUbBD-Hr)HrQ-b=wDx3(- zdD3~Tk#!MC3GqY&KVG)Yepv+KMtZppWVu}cayd~V9-;*i^GQ!-i(%vC_p-7sbAJvE0t3)L@U!eTHT5q(^x_AzPoqpVJe+eA-ppo+oEx&Pv~4qZ0DX6j zfF|gCVyQln#FZqlHZM8odjm{KLW}qU+g(8_JGu8l_;&!kR;eqmaX8j5R%Iv^Sndq}@3vOr?VnK~#DE{{OhTetVYcn1qmMVL0K^6CWYd_hv zjgVt4biPF|dF=^z-1gwaPfLmhqTMd@^ANNB5vl_kfcC=_im8UhCJp*u60^tL_epe{ z3_A!vI0Q&oKW_PTUHEG7$E=+tmHZ`?O8*q{3W8K!u;-x!)i2oXWy3?5B+dN}1hf#x zq+Gn{fU5@_!EV*rmNmPe;c$17c_Cj$zVCdK~T0&%a)gxrW| zPR#79le$g|~OBLRBrF4f!hwNUB*WDyFZYTN3Ucyhh-!niV5 zY2SE7Oaw>Q{GX$QX!z~GgEQvBR0`A&%q}p(=RG5_B*e_SN-e58K^)t;1tWFsKz(@5 z?CD1?%K;l_Wo?Z_`_W4OD+CX(vJs}&AoIMb4&X7k6=o!r0}@1@fq!#H@@A2yLEmC@g1Eh z;xT>OajqnMoeR%b6QJ&^p2#Xr#@=uuz|P$Pt1!^-N3j#k8Vz@r6LeNL6I=T5dv6Kb zdMa)&SP!_LGF`rD3@m7+=T{`jTg-;`XUn4q!?E^6MGXKV$3W~G6!+xQB~Z0V=lZWz ze)2T?Gu2TBT%OoO&g^h3DQmdOD+BmpmW?S}8(6WT7pSpIjeGfmI`cPq(~JP|e2X7| z`#u zQq*0NEzdZ!h(gEifp*6Mla~`@Y^9h1QVWQDmW6IVOP+grg~6Bn%{2Sf?fz5S1NG<) z?lfl9w0$N~V0?&>i66))*eXG3?OQSH%Tia7E`d>2fCrM|frfe%6@G5Q=u%Yh&1?v? z!O3@?p4pkB?B)A+v9k}KEHP^c=}nc;eeUnzXTu%I?pS-B^>Zr?c1wh-!T=Up?D(el zLEKMI!c>WFnWk7NZ!5du@uohcp^5ju2Ph4)w<^U9DB~Y$W;e2o0u}4XZvlyS7!PJ) z@F)LmX-OLrA0An0h+;1h`iKU|-cW@d`R6f;cyGt>A-(-=8@vOnhf@seUoXw^fc*+( zZe(+Ga%Ev{3T19&Z(?c+G&3MDAa7!73OqbMJ_==SWN%_>3N$nzFd%PYY6?6&FHB`_ zXLM*FGOXRxb|y@iDB#$(ZTpLDCmq|iZQC|G=-9Sx+qN5m!QGI16=n& z+p6!s^sWFMwKC!C_BO6QQH2Zbuhrk&iV7xuY)ROBrK{aU^oK@9G&T<}j5L4FFI)tp zN6|WJ866H=EQi^YNvnmkQ%1m;Qs$vn_wo=wrT~LPw0+Tjb;D;BuLtuj5FY%%3 z-vY3Zf{0>q_^%b!!UePKo;cRD7m&hxIf<@;_LBDhxS2XD4U$eP1&`Hg!xcu5#G{=B zE+9j~hiOKpgTkUjw|w@7cdudya?E(nSfsk7ed60n5b6Bx+kDc}ACa9-31RN?zms&Y ziJ1=lUQ1dXkM`C!Si*6kJm^DWW~-b|UQgJZuXd}Nt+=29$GDjX-G&qeSpbBnL~q~! zEt@MI;wKfnJ?9}^^cYM9a~ZVc$<@&-aR2&0$w%*jxPMa{ zbkAcBM4(1A_5FyB`a&i^*aKX<);>PSC}SL2ZTOz{()A^52-CuDmT7Czk-!B;9i1jd z>-$)Us2-eh$CTNj&6iVeuwd)O6-ySqP}$XPVSCUUSR67L!zbMB@K?8ge5$o8wB`h} z6@zrnZ3M>nrC-$hOyw)`!^xJ($R#ewbEh@`VB+Pf&-S-_E-+hVhl zK(3=~KhvnelV1M=PNxp5>ZTDhTv$u__vI?iS|kx4gjX?(JHsSYYxa*qoJYpGw8jRo zUm`c_4<6e`vK&!K$}h(dJ(^(2obA~SHsj1AT|gnWoYv2Rw_%`4wVF6X>3-8yh4xtp zYZI@Gtns6#uGGS9s+b6!N1GndRu)EG&ZaKTIi`ynKlBz3dG*t(QSOG7lv*Hz5S0V= zWZUAVUajT)SU59K!kBPWNj@9Z-LQ;%+D^p$$gsE97;j2$RTT6g7=ob&aFjxCJn2+T z`Z@#(lGxyPKRPT?4pY=i&co3G`MjZAZD6aib2u5F+A0GHsUY2QA9&T9J6tK+9=$u39e_ zxj8s04lVfQ2t(&{DDs0uCfYpAOJ5GH;g7U}gH~3EMu|TIB1GI9VP1jNwj%{UvdXg_ zY23{plpV3hW(=AMFdc|%_heom0_u;+UjtK#ipIqmv=7PRfbRAGtXg%1JlK!!Ibv!K zOruw$A_E_hP*qoUuc}0k8lU{}W-1*NQF_NV>s?LUODdQb?-EyiJoaqh~y+jQh z8KGnNrs!h~&`D?ceO6oc5;+8R<>Uf+C=1Zs|0phbOfhT;?P01l#8@W!vv)QlQ$so% zA>jS%Ji<2zQ+Dy6p+~*@mr;Lz*pAhp5UfpwdlVIJ$P1C`^erH4rodoH!hh3r1wK@fNO+%C?U)ms5JZ;SF5W3cke zWmU~MN0c6a%IT-iG}g&;Vkzwl0s$^vc|iDWyD9RMlCLrU3;odlVS~1L7`7gXz0PP5 zX!A!zc zgyW%gA-Ki*b$K?dLl{{7k>q<(kMZ_{X5AORkHn`HbDq6lZQb8PiQ;vUP$S~CBN8p# zA!HeDV5g{u|D;ywsH+bPri)@yOt39mfpsZ|F;^md`=rtzEq7|y2;G%f+^gjh0Mi*X z)R+w2{WOg_h0ZoUY8vhpxA76r$7J_Z&3U*2dHm=Qvd&YJyeyn9n7Yqu81b4%Pj@lq z#a6^2BWh+XxbD!IM~+~slY~_{-AsrtP2FO_q_r~8Y079K1X!htn#KZWW`b}-2%IaU0Z6u5- zyb(pGBZ9eo@!b)W;WHo3B2t#ZUPz&5&k!bI`)TNx4#;lZ5qFoZaaUFyws0reuZ;CH zN*J5-|GBW~B73hKOGE7(_v(P+56W@sC-i{2#5?Ais%}1d;JeVal=LlBWEs`Y%H3ucyPRlSG7hja2$*uz0(=~*#Vi|U)mcTTtuL(^0n{& z+?j*{p0lF9qbP2in%}+z;hp^U$?D$$2b|C;o zwtYD*8)-Mk+*10mmU$ap)Az#PxwqmMGmMzM@DzIGcTrsO4X)>Csr;nPFTrf*K2T;x zf9+ThQ=NnUPnbxpmYuC*zT6NiTML3Fwf#Fg^>u#^NIi!vsOG?(los$oeQg6JpJD)E zBEUoBe1$luzUO9hRA*keQ*g9O6!SAIHXW9FIP4q4HJ)j)gBtEA{@Ge0enL>2S3(`n zMcl^c5b53zh~G&}Wv-4?%mno&m1fRPh!J&Axa$_F@*~E=xPz?I-5Hx$F1$VKRH?i? zf!J;8*Tc&(yQ5Ej9UMyYdhms;e)f3yA26v_so#?B1`8{vJvKwNn!QBYJksmReGwoC zXRm`@%d?e})P6tMDJi!mNbtC$2C<(RtYGogDOCQA3^h*yb-VN`l#aT&O^ z)F!ZFI(q}EA#A!(Iv~3P=gDKNU)lwi)P`N_SF;H<4ffX{yZY5V-6Jq_)SnFC(Q7po zg73Ubf>rG4Mfnp!l;?4DnG?`GFE2}=I5A$CH?+I#V@IZkWcqePVeyruGdZyp-l_ZF z4W#>6s0gc4npt*y(7#v*7SZka9dEWW>V9mMvYp1Op~3CY4lLk9N`Pc}yP)FvGocYPV;D{U6*vP6vu5>so4F!dp6ihOBKaS||D43!Xg9dUiG_^!QMdeypK<+_EF{LwKiWkxFr((!&l`Iy!o zr`z8d|8&kRZ2xv1=-cp1#1^>~+#TZsVr>-1wqdr+Bh5Eg$^LmR{_&0oU_=}+9vhW1l<$_= zz5d99;Uf@prw6#Y`#xetnZ2usOu2-M6oqIn04ws(e$=~%@WvSWjucxm92$=YD3;}O zQ&QKgrHydder{-_R~$knV^bxV)1e;mjfw%KwkZI}wKel7_Udjx z0Md!=hy%x& zwCT2N?(|f0Hz+(stL$^BUz+ag1MCOm=;tIFjdaro)WIF@8~)glrzOQ((S&zqUCYWq zd+PcH%{o8ATetOJt$WlWT4g{$Orryo2N^V-I~))aUgalUTADE*H8Y-7{5w9BT z&+WMDfj5a*xT|9^J40X|IG>r#ppH$4_q_g??+l{yt=!`rZW$_n& zxE=~sjWx!ur3aQ|B&Wuss}wyBRT~ zya{!GN?47!$lH>{o_L5UG}YN|{2yw!T(o{WSrm$$oZN3~eFp~W}II!q|`4S(y z-pCz9i*5f)g%qXih;>@To@K6PNn5w|ZG6$4w-|fe=D+ADx0;j(81kE}MyLYnj|^kyXZh( zKlj2rACzLhnUL7fOa5#9KtW&Fht0mM#384QnQ?u$J)b!0QAdB_cL8Xh#=qG{5wH64 z3gED9%#6nx0;oJA8*7T^MlVbdSDr>UeW*Kp}aaxhmO*+P>R!i4#}z3A3KxBS-G zx_WYT#j_tkQ6S*aE?J*S9wP1!CiMzHbT!FP{J*B@>MySm*AMugxc*i5A?^cU^~LL% zOJ_Xbg!_#43=&?lpumZBN5+ZRj7`^#aQBKLdNUMTCZ}NMP-U$sfae*8FQG_Dx0-rp zuQ}0*Ci@{q+`(k_d?f8>|9i{AT)5VE->8Gm9|Z1uVG`ZnmC~a!I|eOb{}gSzf>Xi| zUN(et?<9Cs@*qvpRDk|m^^7Fw)%)b`a` z8$iE!1!2^i?$;?)bI4w~qycyBqFpKcS<>1eEjDo5e_tRho8YR?6y}Ow78=!7*3{J} zPCXt}znBT(qGk__qJ@kD`qSi;7sqXTi~S`W!JPF>$;t928amw z@I~m@B~k#!sgR+SgpbIxLRoQL0im|-G<+vA&s4_ym8`!2xZK(|hFa#PcN6J9If`KA zMz+GLk<7W`Ot>751w;9~fbQXr>tyVdC<9KKmEQu)DSC&fP=S^+TCx>30V7R1>mglG zkmj7f+buA`tyd30zE&7eWle5VZ$(wQqJi1ip5!T{pMI<^Usre}qcy?|VTp+PzgIebJ9^)B?`Z#wUuf zTD*so*33CVCE@?RA#}pr_Vo}#b%s$Fbk05_7H%b9?O}8gKDV%q0kO=wOF%mQ>i36yp{_WDn>H~;f$2}MCQr_#Tb0aq#i4S{o7_xlRjgY86 zV_Mc&S`5Jrf(cs&awP}@IMOwEbcDIXhza<{>|8>$_Zlq^oTi5tqP5^HLM#Uua41JtFe zKjgm;z%F8{qQDo1K+Y!wyJn3Jq$b4WkM(r0ehf$8d^!e07)R+A)&nladt5P%2Z<;Z zlkn)wU1W{F(R3b0+1SE5s7~Gyg!CY{;^j%Yj8k%KvBQkWb+@{v02j7-KiaR|OphSj zyQUfp8BEpKau~E$7~Asn5z>S?26i-@U<%p}+@u|e8M%GX?7<^Q|5#_pptP+x76OhH zcyw<{ViO7Wz1E8QVwznTROrpp=4VOhJM&J!1p0{)Z&Qa?>j5t^ zT?TG$zu7$_tz!0$QkvaccLtvz*}}rQG%ASQ_X=1h4vzUSagAFjfeSdFt}~FCO&4=H zZink6WmF}{s#GUS@V5QlODjO6QVIqr-0RYX9mAp}Gq=k5nEA}G3^}^A`vJKO2WnTE zE$@`XpPhIg*Nd(vlCGf9N1vK(bPm`(XSaZ8SLWN+Fqv_b6P={zF_4ddWa_#1CFAUe zwD)GH0Aa;E*UMR1Mm)NJ3-eJRr%^J|JUY$G2kTQ(go(_BVmrZP8Wa{**lKOXzYS-fTI0l!KLIRfKb zVtkJH{IAp*+?Ld=RtDW<<%SX+edR0T`*}Sp^gY()pQaUH<7Yw7VE;bE zAsdHz4_9O{GfJhfnHH&5ro zc)|n^H~!<*CWpeTtr(->s!$t%7J5Z5g3fbaGr|kmyCm4nzbt{dhQO|1RzOBZ*+mv$ z;2CbYUnecX#@BC)CLP+9kMdw7qQzVE3xD+isNAyHdt1nSulTmVEqNQIXYc{E5XKm( zJ9}&G_!-iekz`5pd_$FXv!Htzv}nLO87h@9%{}cIxMyVzIbZ`^yq~uYU|wLXnvhc2~7lAV-LEpFmGL}`yh?jj4Tm7oe4Y< z-?BpgVQ6aZ!$@j5I)@Gne@d}UewZ~S`^R!aXMP#_$|V5f5MxV-XYgy?s+ZTY4&%0( zm22wjxk6dGd7X~)HGPuSm3MM5*PhKr*^RZjzIXU#sz2jh&OjeIW(E{jx6hl)v$Vj`V`WUaC-f0O)@k`DJ{O{z>Chu|%Ak3Rc4 z_hC+p=tpIJ^PB%rZXT6G`?3MPMOh=r|~GM6oVkZw4b|5&i~P zwoxM-*d`sp~K<5Eodyu0-tNj+GBf5fONa9_Er6=0_9m z6-sdvz4*_gt<&+!nDOngS{xs&B3Eha#lx=!>1v86XmqxRPNuwMAr^t@Uyor=bYZRA zzpx0*Krjpo9lk6L2i^&YM^|2N1>ZqFV(&S7S1wAc1 zQqCGx3+jS>Q)0o$*%O9%EMt|^|0ZdwT41kI&(8_SLW%`I29wYee7KKV^3HdvA0%gN z;iElg&@Iy3A zZVPqvP1MnnET8eysRHt^zJD;D@Yr}Tu%`~Cf=)*#h~k8r;=Kbt3zH_PfSkCt$gZD` z5IyNab-m#*@9ulb(J%TVQU>Q_!?d#RM6NE-!wTW>^h^-;g+_UK6u5(0BEP2CbDZxj zkvgz}MV1EmF(KjnMN1tq&A3(Z>=V@gYq03wuE4yn^FaPWj#EM~9G}7!9wKDgR2b^U z+LP%uRroZ3>TVKFFVR}^AsBJmfDss1nCa?bp2YwPo38UDRTQMT8;4zZc&LD?i_zzYZo|f4wmcX#}ho-SL0|;raYzkp; z*EVsW>@vvwge8n}sxu7vlw$?UVw>oT$hX%C9-l%`T=h`ypF7bXGO{-<`-KUUqB_N9 zg!lMU`=<4pg5P{d?)!qw1;r#Y4N?=KJ8)P($<9F8v&SX2+J!^Qml$@tfmi=xRC6T% z*5HY5qElt%p$ddF!y4B8EQ)7vIslFV$!eo6VgHpxgh9F))8wfS8D2MN<_mSM9PLT* ziiw2*BNGp)wPlt5F;<=g(=$=6ywrFq4;W4np}gejjLTSh;xW6THPbePQh+T?1E_d!ZXUzg&SN% zvG2;QJ+g3jbB6aL@3S6OIsic7RkPlV{-DxQ@9&9KV5Dn%{3vH+ zO%+rzGi-Bc5QhI7j8T)Q*;A!!D|t&~Ef+t#gM-)@I}>dX%H0#Q)gK;P)j|hX(Q-4g zC;Y%^IUo7JFF&OaRY322p1l)Bv{4rQ8W0?&aBmD>^Bh}~XtElsfCAKrh=E&D^Zg>p z{}GAfNGFa=QJyr^Wz9KNoTsEnVI;E@a<-L;AlVKiMK(}r5gRgoQ>FWE5;08y2p1V( zPSh>DyBb2{ddA9*;zLT~oKCQELwu|{)&gz__d}3ox)FikTc+`;4a}QZcfGRApr3B* zS#1xOgyOWLhoR)DH}}O4HliFrF_*Q!1B2YwO=Ag?trZ591$n9GRS&#Kj^doJTwfXo z;&f}>XT#%BDcDsV`=s&01wR2qs-$)+$lrY85i2ff+H06=(CX^suIe|xVm!D$N#K!E z`}CC}(I``i^0q($r?8}zbfv^HRuC`|;;GmZ{50npRV<{iaou4*gOuCf#|FYGw#&`A zQY*?_zLt2WlLklw86HHl{L|P~tv|l=)3oSG%x34*3`H6b#{6u8c3DF~D&TO4N`=^^ zT;i~?ft{pf9p=tn4<4o#ZY?B}jN?-bIX=fS*As|c6+Zet9^;BPU~#4SgQH$fokVU~ z?g%CqeXjxvS4nty>zG9kR4fA~Xdpog%oC zSXDjQj}NO00>05!2Ox0I&-J|(o7aJ0F|pqTSle;ow^(c&0e=z@MCZa)Mp>o(L?6(m zl$OjU;L93maVTM$`xUdJtgptTO!VcTeBlZ>yK>!*n(XC zpQ~9{(}dpK!Zqhwv4e>P)vlOf`!;kjyI`DfOU!6HVar$#;{6;k5%c_BXQ{8C{TZ_) zSOw0ZIRivt4cmDRc04acTGTC(g0co38#b6jZTKfIl=5<~E>I`ouWx2xqoGNr30m|6 zwhoAWxu{bwz|fUpltfb#-|UvN>@#Q!gg%r$_8cz`Q=0MITDpFX86C=}_x=-8>aM~* zwBU~s(h-NXUD1);z19SrZAbf>0z|FVp5NmaOwy-yrnVex><@@E_JA}#LZ22BrP+Oh ztIgUd+|_h47+#Ad_nmfTozrGS*I5C!T@SHw>oYv?V*pqWMU7Xl0JjaZH!rU~_Fq)& zx1P?+&)tv)#tvMD7>gfk%6uWq zvbeuixbfSWzW(~i=F*n{VGL;`f(v8#r9ilbasNKgERb1WAyvdL_iKCOVC;|}_M`%q7)vOw;DY*cp3ZU8kA*oz_YlSqg*&^EwRBTBPVh5Vi7 zuaw{DTQEnU38_(J*Fk=J1dAdAN-I7BVCvDD+txDkhwa~dKIZp|yuHnR)ZTg5%xSaG z7I>DEOu7292HWQMsgzK7rjE)SY4zW{G%ZGtWv>^g?!@o<;&5tS4(SEYE*alVy{2|F z8=%ElPV3g*#6aXKV4hE%m4h9hzS!tx4qWQ`b}}hG0-57_i=rCA{|>Q{J!O`dkuKiw zI!mszLmd32=8%O%-yh2u@ehByZ`gzexiG|zqZl0;@bsnX8ZbELhJbCm9P7rR{qzM?BUS95 z1^bUUThRbTwK*nC<-LvRyF6HZVB zkX@VVU+WHeRI0m359!rZ&gjFf>E+oU=+(E7&R_v?QpEXHZx~I}lVMs0=vn&e&Q44rMUzho;gTPo!OTN3HEswicf->VotfO5A#*v ziqL-RJHn9COo#hzC)lzH|FW&cage#Az{YCfD!TLGH`vhCx1;ef^cn)eSe+4z+<4zr z=SVf-{EXm!%#mbR!%4+?KP=DM^Fk zrv*h27;4hHCrXtxt$$wVKsr}foNgkqrtPF%Ak40cW>Y~DYv$}C^1rct#!(`#JPCKG zc~x&zT_GlL+o`PWyDgizfVFapwBuQ}O05MApyVPuNG`}0XS`RpN$_CZT^T-+5qZ1l8|_pr@RfSIHGrsQ*^NsdI?UxnfXX5zD})iSdVVRuk(y&*D4{8Un%Q^(#AC^jg*{ZyGSOQJ_=6b1g#v% zl<1o#U`?nc&dt7rJPqtpu#8kIV8bC{2$FId{Mk{ctoLkvZWVZ}C%V}z)!lp7motQe z3@PJuhE_JzdZo?%T`GH52VIJ{9^7QA0?C82!k4Sr#k2-q$`IhMs`=u?8@<>hS6iHd zrov}{QT;K1uZP0yxoNd;5uWTu2tq(Os#VVj~*!l4h}>Um09z-!mo! z!h7M>L0qZiO1M*Bq6s5Kviaa-s}|SgKfBNfFa7T$odHzqEx>sdku>amMz@(q*f1O% z>O}j{orX4FAUdf=98#|)ZK^x7e-zCt?{+We^NizPHy-_3Xr>Fg>map~dp*&gca%Hx zeUk-Zz8NIwtXd|C14M|3V9Xd}*NwIT`z^E< z8`i=<5ee%(cd%b@w}ocu@?gstUZi+ydb&zmSH*r(W@WG4!9&Z zrn6NPe0wDu`D|u-X4Pa9bIz8Q>Yk$#af$i<2*#QKgpPN#fso&8ONHX7x(w#hZhvXIbJl&T@~%U>0v=6>k=sf(l{Nzr03W9% z6HKH7Zr;d$R@?j(0~ISdg_SJBYk@Q?OTgjUPaIc~k9QqBH!eH#P$jDxjj0onlN`+D zvRMd)sgJD1zT7E<`{2XZ>Y$;$yyZNv1$AxXgUM(eusL&fU73*b@}1y z?9uV^04Jlt7~+Af2lmwR4i&$Wj$4?H|l& z6x6q4)vubdU!}A8%bMSSHIm}vl%jz2m5eTR0&VXZH)N`Qw#Z^b+DkISY$9uGs3%ZB z${x3xwE)gOa{@}J5caL~r!Gjmhge6E=WEKyf~oG9B)y(b)WQ9z)%U;2nGCRjB`(xL zsLSLkA0lZF?o;ul8GW+yeNpt1ngt=;)~nc`s8)>ISif1$tRn9_MABrV| z%u&^%3pq&jia|%R#lH%ee2O)!p>GwD^kRRZ(f;V`09=i6n1s74(pz}?k};*$9*Wh_ z{h_G&4E>oUdPT#H#x|HFQ{SfY2OV$?&Obp2XgXbVe?-_Yja@>XhPfr7dh3XpVu((T z?Jei3U-NffE16E8T^p+v*V=i&K8@@-Ue&HbSCH=p4!vuJ&Y}@nXmJ! zaGOv;@!k0G1o7nXOVY-Uk}G3?RsJYB^6);6)S=Q-Y%CdYP%0=Q`yxRQf)P3obm_yw z^B4r7#nvL+GkUkbb(&B-(0#{ndE&cf+Zt5l9VfB+2a~csJZivH9K*z&VR5Rc^E<$m z@laJdkFt9R!rzmC!<1;z`S^qP-*5Y#ZHCL5@Mnkb8M5G!?@DJBHjTROb*djRzzwk- z;mIs_wcI-N*gV^+@{NEX>HP(4pcsvtureAWRw5%wuBFqI`x%df74S!R5Ulru*B`Zr z`E6Dxi7~!EnNPd5iF=5+dj~OGfjN<{TK6%aj}e{mC_ClGBC@%JeXneI@R=D`K-^GB z+|LVdfSU4BU_X@L6Ar}>@}qN<(-I@e$wFj&n2PQ0`#{;gr8pl{xOMlX@s%Sa>;fZO zwS^3YutqCy*s0b&yG6qF>{bn}(x^v5HHGh62!pFtN%5ZfW50k=hR;9IyEhT#^Mfsn zjgpA*Ws;=FMDqL28?Durn}XA!FL?wWP?EmDQ#qS+F)Eq_ z`o;u{C`_uR^Aq2HeB~<(VZ|OyjK|V6jXk@CXb*soCp*Q6pe@r2uCwLCO%jqwW{SNV zD0p4IzPD6DPWIhly>l2&%YjtB6nJKASU5I0A^Leg2u*_H=$~K2C6EQ4hwC91rjI|H zELdJaE2(2zhmSf};pQ;%#v`Ttl&?~)$>8~nKKII(K*^1vKU1nV<&Z8*588i3Hqx>S zD<8!vh)LCD!+Io#||#|hEO3^)EUz)_JoXI@>Yg-6=z9gI>JOR;G|nn+tB%r zBujka-&AVgcECq%myx8jZ$D@LN`Whf8gwxb4s_lrbgkZSJ%74Udw=R2$Bvxd+RTY! zmE`rY4YC}xz(dy`eU$%-qHpA-E zUylFk#_%Kskce$7z;k0Coi@2IJPCPYX3V3ueO-GB#Gvn<_q+Kk9myeIz#mc;^J;>F zXbuxgqBSA)7l164YoCx^Ih);<7~EsE`CBt*Q08USjA5YQ%NkYd%5`MbAKRl2P@f;r zdmJO?LS)mou=J$Uu*$l{oPHDcl|S4T2+w&{I{bJFa$u&mPZL8{&Pq;7@HF(%5T z{Y?~6!9Grn|CYxvEV3o*Bt$&|Kn^hoRf?la438V*gk*m1N(j{KN8LPHslk`|XLiP+Xw5^|Lnh*F<^N?MJEZ%a2@#vFGD=T6Q5d(NBjB4)ebiRIHjBZIUpbC@O84s z#FQ_<-eq#h#GW&2` zoycxOnY9))M!`uogO&8&O%NH=-;Pab24k^SGV04!i0DufOj06W3aEb$3tveQ=`cvx zY?#zn3SluUfQ?gurTU*;h2Kcz{FzGC|GAS5_92aFQ#TymGDgmXL<2y25r5@*F1>vP zfYDNf0t__Tkt_qU`ybe{Qu(Emrp~3 ztnDTK(8FBtO$B04$5-EcRgWRz49Kb6Cbqfu(LS<#Akq@$x zKiN-APInx&>#@U7>|2bZS6q>B>F&2OJ++Us45n23W0yF9ZEHW@!_A1`4DZN}N2=CT}q4S`&4++h9pOOyOcoxPvP8kL9 zLv{y{7@(0~QYy>$>1-XER&XT6Yac4D<1z{bI*+`Jn2GMz@zNyC_qeG4VBVD~PK4L{ z)_lkK1=vSKa91m9=!)y?%}JTmE;2OwMJaCN&f-yk??^KoM~m&0!v^A=)X*UYVD`}A zc-4x4aGqqTI9>3#mNmlE-Jz97zUSiCd?4K|GKNz4pWg2Ri$%phbN~|G^4gl^|E>os zt}R|Sz_n=Xzhas?BXTYDlc)#TFSI|xJez4WfhNJjhhtP=tCFgVVClYIAbBb;(Wox} z6N8$wR_#9zLFf+NODB;II~9sSvieV)e{CJqT2E{6g=j@heS}i=mqpCl`72pr0psG; zZ<*p@A5suF(U+;5ICClTD-k=aV4$3k1!01X&1dFTSV^YeaxMe8z(+wFp8}n|ztoGJY5vq!SyCjyZx| z7{6nxaHaTfDgt-FrRF@6vGyp*f}4^uX=mGJ49VYG|G~ zuGMDRK=+nbBvNwPUEjNP&u5uXPTXwL0Tw*tw!|aEZbMV8wZfbFkpXnJ1@OJ;U|21e z*gg0Q>Mq|DfWb=u7p;9(z&}xYa8oVIWw#?SdL#v;(dov_WrANHcL2Wp>u$5aXeUre z?E2Q`j2$0-iC{`pkI(6>oV= zWa?$o_4&{}D{Xeht#R9>l$nh8U*|{sK|hR{u1{r8<93BNpatxM5(!E-Q%OQ$xgT=855)0ZavT+<0L zse!(ACqfUz2N^L#1-Z9SaXlHkc$D=tzp;PX<-c~ELZId9n!VRjGy8}vA{tv|V>fS$ zT|{+Y4;465H{~G$WBy^bh zn@bcZCS=J~54r~-*mwMkaFJuQ%ro)nK;4Ezy30H% zp}DP`?L-Q0lAYiz{?!3b3^)@k;Di?|FiFow*}xg_ag3+OJk7S1Hp5S|OkTl4-VPB9-pu%MjtW5dokXmg z#qN1}tX%Jm7pHT}2`<}WE>VGh3WJ>DdzTKh_T@OsH5MBN|z|&2x#BE^_3_{h? zDIFScb*2Za0rvvqH&AFt8g_g;`I zETWlkPVeY32Ic<5)7kG24Zc0VH#})R1&q$z>Uwv+{wqkWztazi=&f~&9*ZVVH&bb0 z%F`b=->q$c1N{U--)j^i<+@I@E3kKa_aR-}0B7yGlR_^)#T7T+4cNW; z^5Uk-bGhKnImn4WaSqbceozubqLzi&;;CVHmLJSv<+wu^x2Y zOT;enQPa~tY(F&7Rb7J2_Z7}VqGx>}S?K|Wet&UGip^t|c}DWU2g9ph*?EMGXoh47 z8aIjVoJ)N)q+<9z=F7{=+Ssn&$a&9Ex2An4A{@W<$URUuG)fa(vMeq7k(7mFfUq^C z(A*|a1F7>#jut9)y5PyKG;;PN^Dajb`Ow{rCwe=Ht}BS5QX$JpX&DDuP|!+4yu=#* z@Sj4q7584x>qug9n}|6VT{go_u;%KI6V-*Xz{5azhg&pLr63S1kbjXzg7k%rh&05v zy9f?Mq`3D4-GO-$ ztYc>j;TSpHE@%_}m0x!)`1dZb$TJhv$EP_q3y8XdW25w#9g;4ar?T4hcLyo|H;lo` z#Up{-a;=6oO_Ie3LZhQ(10RO#8a>kiqh6sekL``rel-Bl9d#R=8>irm%=rVX=qe`JXg1cU^M(Qa8i>tnOz8Ji!ybl&vbnls6M z!$9RiWD9NI!K(chHBbjFhz0+k}ksE_YQv?ekXCiOfcT$nJbw2Md9X=)^eUbD5v}&!c2MW z!{?qMZTpL!DF*CM5O!rfWtzZ4fpg=>h*ZI!G!SQ=fAR9cq56)f@(J~7M+m=+cT_V3 zWo(8*xM#+BMlfm2tZLr2d8{&G;|wQX4Q*9eFZUk0&CjU?(EN@@3|@fOg7cZuzB%6G zX`59A3B$WA6gLYY_$t;vZWIG9Y_VOKluCKuUNWt_RZATD1X3n{P;|)0Yq~(yMipT} zITkl+KkdRxUr@M~tl*n_WKc4T|I5pM3-AmKI2Zx(w>f|;+^bw9qDqg^O=@bGL@ zdaY}(q?Uea2+fOW)dyntGQj#w@??(r-d%Q`o&Io_+!)zbbi;*To+Bpi4+F}wxCdem z&V^&A(#QZo6>v8$?L%pbo0u?NvPr^86DrLl|Sgpqtv0I^8GM$uR=~Lq#VwV-` z0zC;E35UF%P17;Wufg8|2L_LDqkV{qryl1t<>fbU^f!Xwmpw~hzvkqdjVXgG!cH2! z(vbZ9HFzf6n?AI0R=CNr$lE1{3N9Pi=7bU{Uc+--L>Pz!sNEHJ=A=X}1YFxN*mn|3TuTZ*x8n{#T&6ztg zNf>Iv+p?oz8*8^%uU=CU)2ck}Sa^Rn^o#jcez}^7p^I%nh(OopDpbHKL-O;S7x$;~ zVNdX_0K%{H@C%gvt{rSCi;gjJ*sQy?v+K-Ikcn@~WG-(B1gl3}fzgT|G$M+RGM;WK zvL?SF(Wy}Ye;MQv5pjGO6+iW!$#XaI>glr_qbbQLCC-p<1?|R$RR-k_DD(^ii2K~z zQR^)YZUBptI%>_?v>Y!;imORY)7zFZ}Dp3&2sVxlPNR&EA5%;?&Zg-T}=I0J`6|Le}{c_T}7MvYk z*MM=6VFE;p5?_jPo&b;D(nwTbz7OBe_=h-9AcG#XPn|q{I&hRmTc+kT7}YyHL8t~G z0fD}lN1dT&PXyd;vS*+DDv1;Wf%@B3XLBZvP)Ug=c3ea@!8Br;6|$A}?`-`hwf ze)mhktOlf5DtKJqCR>WoR|V|c3U%9oiNnTJ0y`2il! z6*AQCb~HSZ6#MI202oUX$3AOKq2iluDuxW4(-<_AZ{1wh%DZhXhIr5+Ktz*3T|^90j` zIU#U?PiG849+EsbP%}Wi@;rLZ`+VtY7p)p-XN!|_u_LsLx=YP7zYfBm{hjhvO=Rjda4qaMqUtNyO5CVx>lcd8gJ;rT`M5wjfDh zB=x?zBh26Qf;*F!Iamz6S@fDwZCq{&a_gw9vhF)~1>!SNxnrl{7;MN41{#;uoj}uw zhkp$M#4}cLt~&+x_A4EUPpjXK?gfk$2!8F?TZXgyGHgZl-Od-AxG>=iyS{@Jz!X)v zsYLtG8&81|+!ZfWWP$QxH_Oj~`dK64Y)>5ix>M^NN_3kj!f6WxTWU4Z2+z39rMQzu z0G0BkmQh6f{SZt{r@LV1a4=O-Q$GnUdr#lGREN;4eIvzYm`p}yv%$PXtNxwjsk}L@ z#JIgD!l~w&JL|y@YqsY%^J60R0!~2oB=e7T73aP_EJsl9B-6%Qrj8LrQl<9r!+CZk zGgr;CEohloi@hz(5r)7h(touxYI3dSa1Jr*ENbJljxwo&!t@8BAw^rbS)4Gfa6wzY zd%uz@ck-$^OAL@4-iZ*i9k3ofq9E%z1qvBQqub$&Ce+XVSq4}*v{19#2_hmWBhrdR z9&;?gA^DhY(oyBX-yTCQacTRm%VI8S&SB0V1O)!F#s2i`%bDa-;!QX_DAD%CkBi0g zV1lVUmw9hz7I-SI+e_JC)6A<88dKV*{7i|(ajBnl|6RdgPD-zbnw9t@H}~ST!UaDY z1LmnCi&&Oc0I-!@LVNK zM8HZp{AX$Sd@_`G*0S_)B03z0qk4fVm$fY!db{f2q*usbM?LkJk)xORdi5?K^6yD$ zE;(9!S2zG|2^GGnaz<#cr#fD-66l8!+k1>g!R1SP{5Fgo7aWuk&<5VSV<|PXs?ocz zRO4qhuUJ_-s1$1;iSSd|`ESe}=2vnS$qTY(p%Pp&E7@6N4j%$=b*DgIXM1Yq;bISc zyQq7eVFi)JkQdgRWL%u3DuOOA{&5=5=^kPp(I8$exPaY~NCPL5HgfvA>W-%*jXZ|e zb>uxllX(*IDQh(+);7cOeCfD27GmHTuIaLVZl^j~c4a#@h*2zx82s~GV%lX$F-nL- z(e_mgIVzZ@N2sEH8UTc=BD!`y z81nN3gYeH;lon(*YH||**R%uz>DywLY{Mkp)lx&COWD{r=k+s|+j`MtGJZ`%&YEUU zZh(Q68R^ptG;oM+t~gd*%k<(2+;Yzo&9G! zVn@jiK`Nquv6UnFtNRcvx(iKk>mmXk9iyB}Goa-!%kro*$?MA`SSMEZxjL z6oAo5u_PxJOB@H3be_|gT^sl>6Ey&>O&(JF5R_b$5gZb&*&)uwEeq5g%wdM@f0x3H zA%B>xBz(j&KV^{d;oO|WeDIETIC{jYRtvC499AL|qB%t)aAaccMYBH{tSeKSnDzz% z^#cLc68X3k$@W9+W4Ai&sn(+e8Wvi1iN(p$-i-9D9pPEzH1(&wqU?FRfEj}3@Evwy znafT?0g45Gobj@qSCT7HsvVZa=nWKL7u!9{P>tzeBgj`hg7=0xanypV)5QwnMsd8! z$6t6EkM=@Q0(W5{>DmZP5vvf@(zJdf>d#34IUy<9a@7zi^F&4z_``sn++fqjm)XYD z-;SNTwC-}bKAw4skX%7SIu%H$SvxufsD)A^=o3KP$xsDvFKq#bk+_Fs5{1W#A*uN#9E;#U;E8qe9PXYEk%XL1F*l@MPSx&c+pAG6Okd z)x;Fe2}IY6RH|?&e%XFM!*v=z3p2X@(=;b)O5<+4tgY@k<$Ck+`Sk&M?_Q`n*E+Wd z;0F%D(4=~G#X%1hxr72p$3cYOtE9wFSrNtoWKTXq6rI%b;;cPbek;Kw;>Q4-lRryv zfoo*V*@No}9RUdDT5AJ|cwSBW@}UqM)?0)0~W!+R$~lkCI?^UtVHajIsTaB_z~QPihh75y4)nZ#|~A6tGI;EZH8H)M`} z^#)GJe91kRZyu32g2c!6O2W;{MVS7fES3VJCumAj`jV*&Fhki^X{zL}^?$pUn+r_O zQ6tWH29{CLcISs}ahiHK9~ow!_eAvPg%s#}zaZ`@1dPqB07xDIepY~P_=6?bzV#(3 zRE%C&i+nobFF3Y))^s?5QR392QPk<)dxP(v62CE{KqkK=6zhO}mh3T=$G{MRc)7+Q zqNcXXuZiR2_ZaNi8pdzZ1VmE%w&MZ^9!x^s%2I>Uo5hO()3kBhV$03Kr;yPwDepy(4` zGIl}sJiY^MC)1iBf=4-O|hgL?u@D_C^mEfAW_hL@V`J50b zcs`3A2&KUERymPs~l&V!Bh z(@i=tm26frVuYCceEG)8qvpJzczrOuH`UF}c4b0?85)qz<+(;#XOzOe2&KkhBb{Ry z@^{wig?p$&03~76D84_!ghjNAhZ?14-7v3jhC<6BK(kqLfoB3+JFtrC&uN;1mw65* zR$#bR$jc&x9xtgrAZB51?7VE!$do4t{~)_euNNL2VMkvIUwUWHz)@-GjO^OT^wsEJ4Dg`DSU|~x#O_40D|Ffp zZ3?Hwj1UX}k}+%vT`U5IIJ9G~V@tpBPZfJP$saDpy%*lN-Jh<7Qx(NSMx{ntOW1nf zfoHwHA&^?I2#gQkdwybGF&pK2+Cj8Agn+++hzlr?8-;o2tOlG#jyt>-StKfw<-GM041i=Yl_q! z0U~=Ghu!FBafr&uZw@^L`?P0#o(@7`>y_9!kUSiT^W(Fj*||65%InWnvKA#8yq>qc zu7X0b7(~m5o=Lp_3_!OtrKW?uCg??tEtx5s4;Fm3ftZjSi$VwVzYnuOw4~DXk#O1x+8@GAwCuYV7iPxL<9lE zCAE!y;97ay4J(+rta0zCqlZi~25@)L(`91-v4Ps4Lsf`-MC)p3>x5U6(~ftY!L~`RQ#G+2;Qd}*2e*U(WylM5j*4frP2MxZYlwqE zd&nWwOa;sFA(mM%q{MAyTOzH&F`cOH8KJ@x$PC<8Vtcs{OIh=0tN?yuh`LI<^>PbD z_K#k_b=M+@kPLs88wj9nna6o*!;9jl}5pt%DhAO z)>CIAhXtVaWvQ*U&FIRNyZ?#2QE6cnOChTli#>rP&Y^YevCw=YhcHDMJ*&t9?|l-URYW#WhqBoC>=adE9XV6$j=lVC@YI|WX?f6g1F!h z{K>*#P4M=1iWCN`(5~3egnCEPCmD|qw~dZxz@D0fNK_Hzq}YdX3$kD)MGw-y9rgVY z2IjI^YA698grQnZxNGnkjNi+n0cOAXby9w2LRv9PL>YoRLzTIWv04Hj0q(6f=$aF_2tZhO-?QH?1+i5cua7S z9IY(D?^`JidoZGqIj97mYYU;m=Zhq6_m7_#9=4)89yW5LK%hZdDD7g#>1^2tg8;$?m(bFouPmO2qu-b3ww2wNw1iQSWOTb>w>C=kPR^Vl_JtF+N*dPth%Y7|Zu194+n(SR0r;6cMg5Kh-&RE?jE;8v+xMye?x$4tS}AaY=>i z1-anH>k5_)lgcbTP8Q`%WVRN9_=*OvjQ-plb7iFMa5meJ5WdimRnCEH;f+-=D#?b1 z@5LVKOvs!J2G;u>5v!7?h!4OjDjz+PHn8OQfHElv6+}1|`m;DggSzGt^+SrYaM!_+ zBXkCyw-$sa=oJh9S5;;kTRRN?*3Tq`(mi6pjyW2ib(D2^W$A#3h1nrn<|R_J#)+9< z4d5Nx>qgj350PS;S(x+Zmt_UeA#p#q-hP(xb4mjHmC}t8?$|To{?;#gtF;`J6GB;D zol47NSq+Z9G61B48&Hm#EXuOnsAg1aKX}$sK~?}1YQ_7x5+-`&?pmR2h*+yufBTc~ z012ef2letI7H@5X63Z+(2=wc;tcwnetH)FaUD@p_l^5nRWCz^`INOt`kuKr7Y^V4x zTgn^-h00!!0u`29NE?VQcLk>P=eW>-A^D7U=GvKVUtqVIoZ4`4w(OuBc-@_=dC!4c zkjE&ZzhAdez@v~0Y5GSPoEy9~NqurWRDW7qH|s*%i&ut!3hJJ1U7_y-pI9e6 zV(64xi`bLA!t}$EP?s%Fj`{ZsJrQhmr=1Pxm(vjR7f0MyT^)UF@KlvJ6pPI89@QXm zEiPo2FqB*!XeDAO1WuWS;|=7UoWw{{ILOg0d_T84{eyOD6XZo0?cT{x`e7=OK2(6a_`3WqWPQNMHUq4rte`GWOvg8@rYM3X%zvGco&1+%CRn@oZm`D8I3p?Sgsq~)H2 zfSOUlgU|xjshLXQ_Cq<(9JL!5&q z2^*ky_U-KRH)-DBe+oEi?fBO(uFm*`uEcWabsO3qM}xf~zTlNMG4NQkPgU13w=op= z<~$lq`!QrFk6kr&v`&R}awI;LZqoL2e9eOl`W-?|sk%(mSxbODh%4IQc{1D=iN%kUURmlMedsQGHtOCNEO!MEeJhN;dfivh1n1_{Pnde6VKP zp1MUei#hMHzKvW{=4o61kG(WM@rtiQdm@IXnL=PZJeSWT1SA zd3?(NkaW~taU@y~eyb*Lm~-_x{yuJwT(CVR(cfvvW$2xUD8uiRXDfvxc^Rdub9!&~ z94uRA$zDG3amF&k!YZS?naZ8jO0__!4JB{K{>!GNNBn)q=LxwcJ%0wVZa=jYc^%13 zF}hsEtG+j~DB@6A@#kSK(_F9R$EG$Xb7nS z;gQGpN|(B31cDYD7u@XbU63BJkf9+yJoUnDpOUi>2zx%RFW8Pd7hV$3F9)tROnd~H zZj{fDd`3mxfODcF!;@>tRNHM(G}fJhZ_}sZwMo#WGGlqN_$*P%kbQn8egs0Phb7Lv z)Q89mA4g{G$a!yUphr45s}SZNyBJ)tTTRk51r}qfUC?j*%3jkxL&e}G?V%dVKUCKb zv<|6c7NZZeFy5exTaP3-cNt-$uULa_isQk7#>OomyL)qI;CNz*e6bNC?b$(fcz58h z?#>+uxDjHi3Tw3fJT|4#-Y-qBHZXk}ws#h>ihgd8Yo4c!*#yg8=|x4yJv_O;n;`u# zOXnaX46k1LX&g~cXG3n3LS05~NhubQ74kbG7HrrHJQW0RH#TCtb*I&A`SP1mK52r< z!Pu!R`!Pv<`hGL_Tx`r9i~K@Wj5wn&gLZB}D3UBn-O8WU;Fa(K_Y zUWCH1@=cVe(LLJ!jiZNp7qWP2TIza<1hX&|4otfD-irftxpqpWeC6Nu(T_2%s~1xpzY!C{)`cyPS{ zEdY*s*AELD;VZ0X18u5pW34ZWYqy|92|;}~8Hr(ul-N%1Q!qwJAZ6Uh#D}l!CfHYS zP-3(c@2GV{V)zfo8Rr|@?-?rWTHiY7B!UR5Ua{shoF+BzpeQ3&Y0QKnF|I2t`hCpi z*K?V7L#xql;apdK{~%PYzI4}SPD0XX zIla%7{1Wu%P5WIK*Cu}Rf&QfW4k#kG-KdVU!9^45pVCXY;e%)Wut1W~K@^FF%&f(^%ljQXD#bb7)SKW{XZ=M^v*|o&t^Fvo>8kGcTi}BUi zl~b2?Y;cIbZiQC#8S^?b?QMNmL5?mErs1U|eLfHWgvPdEDD5>4BY??}^UdD|GaRJv z1T#(zet0!Yr`;v8Zp-7)*{Gb)I#_5e&vj;xc?VI7$8tQx7sXnJcJ{^T_G>g@S5HV- zG0Ie@SSM{@ZpLv>rv-s-Ff5x-o`EP}ljV9_su$LR?bcz;Nz+zxbs;{9_a=eCioA$} zzu20Gqw=)PJUQL71=+mJnA;R+hhJ}6lX67D@ZW5`Lo$j}TpkkPF(-B^imeS*+Jxv| zc*OvDaeKtNgHbIiJR^q83oGwV{S9h{sAWNesY-#<|rsU@ywv1!N;eAwFgC5xQoBBv-3FVgX9!upT_(JN2biB?h(2v)v zlFIb0&NPOn_=;&HG)ZVYft3br%oj3b=D;OgL5#z?%~J-wrIe9JGu5ov%V9m4&CQd4 zLkqz2FAM+-^vv}CM*;vA_J5TBXJq=1m;cYXJ1Ev3=e4Ppbn3Pr$ZIlST=#c#m-{Ja zsw^&pOpP`&z>1eBiHTpGU1Fr*iyj`inw&qU0cG#O)6pk;%vxkLrg*M-6AjbcJ#GJH zp2*Fi@{3ZO`}D9V>-u-^lJ^x7JAc|5=AsJMD40{%Q+!mzlfBzL51k*}MbSYA9|}Y2 zx?v2ygI_M7#v==7|0ffZ(F(Z8c+@9EK*{QXx40o^^wRe?V#TPIi8hpS$8m(6Qc;1A z`%oG^VdVKtl>xoY2r}MJ@3W1Ke6kPCvCrD>yeC@v(ooGXrK4$}Vtwf)29mt(VZeuw zLvm8rg5x_S1+w|5S@O`#p#w}fyuV0G?<{1PT=`+42trN_pSDRZ#<5&K4OnF^S8+!{ zHT0Dlv~^OPA%E~~X?;MkW4fOTwRw+$Vq8O%Nn_+eJ~*(bL_e|ldA2@%*5BNrWpvF_ zy6_+4nF;6U#hrG5#u7FiTcXDJuT2ccS|XJs*)3lYuqZO+AS+rt00i2_8|TOWX}YVN zD4!{7klyma^Gi;dAy_6kQZ){qR@=zF;Sz;>5*mpF`pi3vF&T`q%

zvbT#ycU#*lk!O_|7?I;e~O%XFkGcJF|{LGGuZ-}R;Q)a25M*WF~BFb056(@dQ% za7BQnDYrWDtGQ9qN~&%#8>Ev$^Xoz;n5o((j`S>)IiX8w=R6O2Z`3gb3XqU!*mZM# zkULswk@Evm0pO3^shC7}-+G=-Mk6eTK4)0M$;^%cqUKT5W*bS=K!OWFv>Z2>10U0m zsy)>aii_Xm1UytrT{A*8fP-MvzcYoqu{E*$Kg?yLXs^EZSqi_pD-afAbf54C3ztH| zYD#oGa&+W^LFFX^>k|Jg#!L zjpFSD`M-fP)_;XFMkdDpE1WU?9nLt|IR4{k z_CpD*&gej<{dQ80$jajdh~3C^*CA~ZP@yu>+-*080@8%;ez>FQGt}Ow6-S;uz=f|| zM!;~O$Dn17KTGQr)sd1R4hwrq%#>1cd)=-_83$E zZ(}(zuzO21$wj1o_}CU_JhAvYWR3WnjO@x)rt#2nezdlG-u?A#1%MBgAF9=&uOUq5 z5whhHflaizpOxH`Zx2*qWhu<>8&Mo!K-kXtutI{=XB_H-S!N-;Si z$3@xGC!eYt(K03cPGX_b)rd6xgV0oqlWU20oq14Z*ova=if^p#WLjDm)a8xvkGbOd zuOT(8S)c9~?5W?39OvebJYnq|LQq5I*N9`1jH%oGZVI?NTCb+0P1v(oC>3H6v9#b- z;qN@}mV(vVp)+AI@(KH&8{E<)h$eoFL5jfayx(L@pz!&nQt&yh&2CUMp0L+n(RvYu zE0OVe-l95zNNNZ|C!7wlrRQ&nRUvw|=_JJ+2}8|93UZp&enGUX$bb76{q-Bnj3xrLk zCO7(>krh3lPrPamHJRZ<=!AiICMD@|Zp0QE5%{h-73hTLD4tdDBTqOS1V4~bHt#Jg8=@)jr>16MK_%(i-mwV1P3)qeAPT7VfuAWtrPqEa@3u!~uvXhe z{@j)WxFszc#{tR&HKW7te>h>BZl;99k}DcqRNV@n-_ov7>#T62IED=lOX|_qEuB4E zowBs&EKisyZwEF?_G<*?l@8U&FYn!fS(a~^THQOZMxbwMIBGg?DpT|-aWhZnp;yDM z+kq;fWx+3^zCJF`agM=%N6RiD+I+A3pi@meE{ zlFtn}5nX4z?%X;A5|VNb)FpC2k#)Pgc#JYyhRgMd>%2`j)DfhANgjxLz}#V*c47khs^g2zb;s@~&TWnE$2txK*0Fl^ zyIh~miiQBwceQs|D6<`vyWs~G%}k7XL+wBewPqH#4^JttgXs=zm!>>9g`L$D1n2m( zk`?(lFTh9fiIp02<{FzBVP{2AsjU@Qs$qM@eI-{gpHIbMWbhHLg@r zyetv<=tj-!&nYFGFFbV`6KqDTz6QDCdtvozI(jOcIc2h5PmT*lX1Hs_GWgzF+3$W(m(e)1mB07xE$kB;E-GB&3nsmwS?N zl8l+4*_E9-$S4Q+Zt3QE{hTZ^o7bXT{2j-%k6{+4I4IC~ z&JTL%e(h*x$C5Qi?2!YXbQ$T3oDqW3nl$Q#xdp4*TA>Zqit0BML)$j*N)xXGp*xJ` z{;|`(9V9F}&ZsgRAnaSx%Xz`fw87E+p;!NyTW@CH26@dLn4Y4H;LS~5a0$lNL;`-& zBU_%yJ;FGLPc$PN7UZwnUh!Cvm@SVbSP@V!y@Ydpemc8;CS8N>@=}$t!o?gMvg#9H z0J1uC`UbpgTOe}8iqKrgwLe}f{42E%uUydMW0Ny%GOaz(HkQpc#w8SCQed8L02XlH z8NCC2M&mg5e7w^SO{^CQ8xD&4E~R-K<;Nt*CsN?xV{!0Y8W1?-%l`a6`56r+lbe0^k^} z5G8!NI{2r{(sOcwt^mHD3izW34XR`=35aAE&c{SdI#jY}v??&@4aEJc^Ol>8!Y66y zQvn7HE@uyv0ppx=JO(vZ+-om1Z+<0)7-PlUUV7oK4PGlR$6$``k;tA8B>-6K9~uX;3t!Y=2Z}9M=CVSQ!J* zx?Y8rpXO-(0#(-_@c0=5C;x9^CH8;0JDFMkuhef$Yz%*om6%yr|KoQj({dD*<1!Xj z$2wl5H~ql)%c5)BgLI8IMay9KsQc1(0mIfyoAs-dP~k|?WdEsbzia(F9o;B%o|!i$@jaV@?c(HA-66t$28C;#>{=7i-SjordJ)wmeybMSi$@}0wMgWIm&qN zL<8|`%>oEGFLC0i<%#-_A(5ml06XRY^jKQp3!|(Z$PVZ=9RYU|JNmPZLnu$CPCYr! zIPFQs%WkPf$68soV0vfTQMaC?Nhxp)W~YjxJBX5q&j7NA2~HTdR_PZ*V5Ba6(TgXZGQQHDyDmK%GN6Hcpz5$KRlpQz234& zkU7@I+Wf4VbibgD;dPJRYfB)pSP;r#6K-#rSz7XK<5H}${s1VqF_cojO#*c)t~?#E zmPY)B9nCkC=xJM7QQtJsfe9vAvI4LA)R=mERp_|cS}E>`c9!3L!@ry1-@1 zxM?2{VS0t+wg*Vux8~Am3)oQi5H7!+0~`<#G2e(P$agEs#}jV*!ZKjgnqTUc^9lV$COpEQKj7;E(_ea$kLgiQexg7v5b?J^HArp2yy+q$wN!m)b~Q&PQv)P1jnkW+P!+3x}SPHKpL6w zh*!C_inW?nul$f@|$R^zrAX@<#X*$8%8Um);;4hC@ zHa#g4$9+@0HjWEuy{eMPEsd7vjw8-a^d18ev0)+Fk_1T!`w9ste>}8Y5S00=8Q-~GU4j7)$g6ufobGw3Tg9w?-?KS5Z zXoKY4gO3G6;CPOV^97yxOyAOMxr^S8zh(@uxOXnIlN?fW2&--NKkUT-aPGP1v{Cyv zbIghju*GIsm!@NW^G;C~;5 z{`)9_ul@H}5TBcyPEA7Yr+~VM0zE#Pco+O zVDbMeW5#FwYZ3laI~IJ_zb5COWUTnCf9dg0GB$kHzt~g%Nyd)P`WJcXKgl@oS^ss+ z^!TiQB_;l;Ap-+G>%VBiz=+TKFRCyw;j{it7hYbvzggvbioUIc&-OQEc)x#tS^O^w zSC)Sey#Du%CHGf6EvN7BR}}qUIw=@C+B!QJ8av|u%~%R_(#A&S`hvD@--i0DLpF}@ zF?^3hn@+*jN#DsBpOKB8PUw3ve0TAE&fgUNUswEB_E-i+c6vHdb1Nrfhws&7_1%TA z@%O?p{yxdk$-!9P8WJ=Cb%5{`COV8)y8D-F&oDe3soKGcy_&O$VC<_JsgUOj7Orf6 zG`0o(lqPUdWR5-p2hVcG?n}o3vzNDZJ>xGt&L3e2KGzf|=8s0B+?HJMCksx-cOdfF zZEMK3RqAa;xDLg2q;XbGdtU9F&*=t-%~vJ%hYH>2>QPg%Wh8OBLMZjblyKx+8Re%V zF-@ad!P_5Ste^I_6EC8rGH)&50hhogBuy%_Wzi~DnD(zlL7xn*opLSBFU)JVcLK;^ zR*DhBF85|3Dpk5;!t^B7&#Ty7MOyftdPK)fwjRndL;~$}!G3@rclEt!3h!_kw&gdz z;-ko48n(-CYwcgIm98e@Gw~L2_0nQ!$TG?e*$ncqT!?U)?y+b`J~&(`F1_-%787ab z#8{q1dJ1b)UI7Jr+_%8>T)P?1K4T_LdSpCBTU+ZA9FY38i;XL_);8CGqp;euWGGYy zC9+}WVb<9Y7iwE69VbxuayYdSsz0z;SFPz70@|MZxu8YUe3a%#=Z*TLMX#TKY4T$p zK(E0{ESM&k_*5^^16L2K9JbFmv}pma%s^bFoeePngr7tjCK96X8LH&$v=7N4Yu{d@|IAYe5tMWw9+mcCvWf~2&tVmHT=V^_T zUuV?KWX03w`j^G{RW~8EsJ_V#<0o!=dLZR)0 zfblyM)Y(%M5?U#9VCzUY+8#eeBvy?kg4gxlOFdg)A(VGCoe3xI^B z9?Qxdf2{08I{Tmv4g+1nBELp?q|Jv)H|(f~6yZ;Qst30OMnL469|+NWBBgb_9kZ6h z8qrzfnsPL*Yad;{|IF7JVXDdgezhOldzaR$euim(sLlk5%Og)3I2ze>{M&`)+qI>5 zCdF8n6taXtDHPyeiZ&{p{xHr$2f@vt!ICL(Qw(X=1@FBx3NiPU>ol$se=G_a1&+hN z^=_z?1{5vbSnCGtm-k)|bro9ip0VzzVnF{Db<46N0=CsBze2wKz_5o!`$H3VS&b}c z%Y`;_;N(`sqI7gQ%h#!Siz*E{z>~&$6-U`#*5jAz_3$ql`oz5FR4P-f$&pgff8(J4 z^${E+7l>YY6 z{|l$TTL>xr7i51sf&cpR?Ln*^za4~)vy~M-%inw%zV<%=o#l&7s}V^&>rT5NZ|jD(5I0R{?n<0pdx+4?i8!ydnmk z!UhH3ubB3^C%niW<}I#S|NYvH@K}jMWxg%*a;=Ih@cO-TsYRRy&qoZiSowAZIhY^q zOFGqg>fL__qUrVhAhu82AYO$(N=y%xc0&@1`E0TmYDPL4g2ALlCH_tVoX0i#qz7$;~aVQx$LY zI8I8ezMG(rvDUVfvePP$V*U}xbym~zbzcAM$^*C6yGW8?(gg#`MI~2YKk?N1hrGe) zUeWH4xGZTvD4H0Tz3=o8>?N^KQ3TpFr+Sb8oXm{u^$9ao`4b4 zMn2VT1?+uwP6hSePk%5tE=@$R7uyK#u+MELQLX}R<@d@NIHQC529K?yHN8QoGRkI1 zUQTrQ5Z|XD4gYgYQZO7nxwSoM!qD)UA8W&pL%9Akel1iQ`ho{khs(PR?ss2gR6=pZ zvxx`Nz-ySubsl1B(ijT1fW%5mz+BbD2I}Ld1%x~V)HYqT3W(geQW2f49ld(WU!wJo z826s3yD^?|vkbT-3Ye{x=mqCJU1osc9ux8A`YNq2`1vqSY$R`V!j2!=iR5n@MRyVQhg=a7}>8e+-%u z`mf1$;2E#{7SAI59L+pB)HOx}gUWdOBcop>A(PJL@u|Km%SC?uM7u^D{^*=B?FFP* zE0>{Z*I4XL-3cjFjT#!c5HwDsMWj8pS{7Z1>&43_xnU*E>cJ=Nq)nLPFQ5BKPCxU?qt{@jChzR>angdp<2mYp^F|cMmzjc|FDMXz zDO<%|DF&H%pK1g)pdnVK&1V{H&=BGFNA-MW{MOkDCb8w&R!nBK0oJJnUcovv3<8l- zq)hu1k8*$kZ#fmLbgbxO@lI424o zucX_uts$qP7NexvB=@ZRV`Va`4sR~u?G+a#B|e-8m|+U3fAY{Ovbe+^-NFTJXs>89 zsZA@(Emj|_q8N6cCOoK?9ES$?oGD-Ljbv~!cLq9{kPIBvZ@0;ft*Rm|Vb1sonyMsp5nC(S&QXOX2qz*c(vY&melKE*F3pgFK6`4?{e>}u~HUg zqH%(``yz*B;-PQ((g#p-(>)FEyn1G%B6Q=?u%(YZFh4%w~il1*$uNbR!{j_*3Q$yT8c*nK1FhnJSLaYV{L zl1i&HqbT{JKeym*Juja5b^azJ*yk5y5*2;-cU)LbskoM~HGU zs!^&EiI#f8v2KM>EsojqLYajmC`Bl&q3gWm6?K=iDWFU>KR*krC~KPnqKU;2f^mYr zlR$6RCgeQ%;J1a1^W?23C+ecr>2AKRUxlClJJNQjoTtRc{flhK#-qt=Vi|Z`w3&PB z^e8#H#m^qVz)0%g7E`maB(sGDGr$i%WjQjskr3e$ z>qO*ED4KlDqeDMdm#ZO5FC?T|T|L^A7zyC?Ls0@a=1oH(N7xuFBv`)l=juV+#slWoaf77G)Yp>u^+XQV`iPrL4N7TVuSr-XQK;_g%>p1 zW`(fxWp&!}c?^|~j5IU6)XQ&Nt!((mZ~5T?O4Q6`@czK#k+rYjomiC1=T+evLKi&| zxKt@O?7uKp?J6rvCIz%B#hH~^^TqmwAq0@&Wb`CPtF+N7#?=ln=5n{aQnthUDyjru zHVO)xRQ4ahyJ|9;c#o`GFktCN#v+|Qg)FsgOaJsC;ER=xOzfG$GTrl6<7QtZ$JJKe z54dU*IuCaRU4z55Vyd>)GQlSzI144foDRDHAgmu{RL8|!z(YGk;q$pl+`Jv$?v>m) zrNR6JzRN_yhls_VuSl?!g`F*L)8x%xn^-330LG4N}M-{({(%S!B z`%jJSU9cqy;)XF2^Fp#1vJa zWR2nUW{d3b^o5bWqU1C? z1d?fK4HZNVUb+`vyMxIJB^OFiy1aVIrffdM5d`SGLOFVIKDe%q+unpnvxTqPfh`;D zBd`ML`Fa~U(WfjF2G9DeSLYnxV#_rp>)D-E1{;UXgLU#^w>bgLJ8%rTkX6_M#Dmrl z6G*)aZY5mfcklNQ%KcC3!XhMsHH4Rdt*y^EId|c)$`T~7}1#N?QIFCO| zX;U5d)Jf7w|i%44YD_7smszdLWZ;FN8l27yc_x9uZU^4YzLm+o2<%X)Bl;Jc;QaZd5Ue%Z&q zrHS+ADn0ojcD86`m(Z=x>}zoFxL^?K@@}yJXAYmkn<@$aqf!|ESW_URlBu7Cu@N$3O)WxmiZ8 z;GsFXq%vTP5*tcrPYDoHW%KB62N1wTS8Kf;^eLocBOkX1uQqPfkY}<|{Ux5xCjQD< z-)G^+_`ZKvAtn4BJuYscOm<}<=vk9H8@;)FuH*0vD)%@Q}iS3hFlu@B(v%TO|v zhzpg+Mtvzpf9VPPlg&c$cdEmP->J=KqFijP~J(@^Z(h)b^gRHZJ^pJDj z<1ET#y?clg3wDb-u=r~6=^m{}eP?q7Flm5;Q~eGFJIp+yWdo-!=08VeQBJv&?~_~= z(28OG=MZ7g#mZPmK3RTY8y{bQP;sMN%N9O-w2sF~(U+O}${{s%CchZxNgyfBdN3*+ zu=|ybdU_2j5f;OEplA*XH0VkN$ z&t8;BS)ycdS-r250~#=x<%&RRCyI+6*6doI6(Jb^pni|okPRFH08i6Q5pm%ZLBkXO z#Q;2r)>f8xv?yQ%K*>)|D6%CA-Sn81GhRO2LM&Jasb;bPfz~s!Zk*2VRIMrUs2Gy= zUVv5$E;>-{UczJUQX-#b#>xcukqNmURtMpwYei#JS2>L!!NCCi+@9pz&;Z+m_0)1P{g+!62#Z)?xz2qE=shO6>86TA^MGKUG+sI$ zhJCxjkw8)@URO7s1Iuq&AWcpR=AX+o3;jP$@?nijwBLH`bIZ+ip>o#cX-3`FUNmv( zAKISvK>ob??tjPp+3+_a(91?%cM9TKlhwrt2MOhwU>D;F@vON%Aj(gP@NGvR( zH_Ut9#60uKD1>ng00>lubAX9h&4Mx?*AQJewHGP}uC~Q?=u7w!w^tfcC@DMp6edBMLYCb210z!E>jeG#Z7rHjQ%Kq!>v3pecg#6wa~0$iQ>t71%Wxh2GAKxf~mSekQ~VRQ@EmQSV)dML_i7 zDY(T{WG0I61yHgoh`6G(Bm;#kIQBI3eIvay6{^(R#@>E*_@zNUS`Z}bViuAofPEa= z*a(r=6`mi>gc#NY#bMdz!{m}zOTNZu_(u{YsvUi%WDIrMX)d&dFpa^C6jTP%i(>67 zP417?eoM!RV-RPh{XnOwrVPRvulnYvc6*j_K_A5FZ2*WVOG{WEUyyg~%6D#lSIep12WDBKx;b=wR|>AoxPQg(K#nJ#)}_k(8-I2()pC{@?RA zIRi-zHO6HM*`+ESVX}e-+?c5GE3R@Jjuy@Yd|46;g)i%>nqG8I&EdkmwNi@H(8r57 z6m!C0L{mkMA??erU&xql)-W3i6%QBCsjYa9@EiqWWL>d$-!S)&T8{p_qDMO%ud4UH zNZ*dRaBsZiV0Gh@Q1bg!m3p;8FBa<9Dz+}Qn~J>^8UjD8iN}ZRj=G=w%Yh4z>Ff~Y&{UaIq-lj1%UsTJes1I8X58nz!Bffy-cdOT?tCRXDx^Nnt&D1S6);c%)}be4Fi8ge?Wp}^@eA|a*}4_f z0Iwo8xsMzKkjXb(z1H6j()4QerbJJXBPJ;Ku$Lu7Y98Nbk54Ca$;DNkB0HKQ7>Uv0fhEm1St zV*N(pU?fcW@;)U`_C)7+K!v4;zY9{Jp3C+R`Jt{W1!)PH5eQH)f)r#opI;DC;J5a zQ-P);!eW$C;b-msARbxqpnoPj|5PjKB8Pn(%6#p0yUP z!k6wYameA{ECZQlKOxTajPsh?L7f!+Jx@goJ0O3*Vw3*k%#+cb1fYel(U@wVlhWKN zO)>XbUM~7qyZc=cwH)<0ev`Lj`ti!AESt7ZTP01sQ8Gb=`8cn@^yJ4Ki!eyg5D5vY@1N!Fb z%Hhxh0+oQlJO436P}cwNmyHYEBRrlhZ49-X;Ma1j(_LJU{5+ZAj69QIDAD4!PSmHv zZGQF!Z};{3Xu{N5hv13zYJnrUnfEzO#*)oN*>XG9~mP#J8)~^nA?YeaBfB*yDg~M=cMT<}RJQ8j!5l2A7ka^ryBzU|gkeF)&In;MItOdFIE-3#^YZ+zEA_DN|pH$H}?aB!=&<&Vz*>a;4%^zpVjF^N8v<_z1|gP@TUV z4@U#Mt&XMD5~m|t$X;dj2D9;B?d&FalGz59E#p*Ks0IKD#(L(yH5|Tl-fomlT{&PE zCqKjutc1)~<5vn(W{<|AI!|xQgDAY~iZk?{Ck2V<;2YB@|9?~q@CqsSqHmL2RB+Pu zjOh+r!kGM@S1*%d2hZ~|4-7g)L{rKKS*wwg`T^IWAx%|C z_yo1wG=nV&JAk*=+rTxdWPsjZ}u_{s4{aH#^ka z^E1v*x)pIH-U(^|8O zaXJilwU9KfYVz$)19*)agAm=}9Hw4F<9~aM*h1VJS^F>EYMe8Kw0gt4eR&)!&2yk_ zew1t(|3519Jl@F-EOieUG~-Y#!Zb`B2+#26l;(IymZP^n4??KOn->WqQBx%co5$qF zT+TdoF(O*0DMj-IcbJAs2r_1*`A4}?T4!I^eRBhJdN^)Q1~P-U?)`apEzSipwJv(dCkyu1AKgzV@X-nl0)w@5o1jYv@T#pEyncySI&pi#dI zW?SYgj7X!t*vzQD_OADl0ZdQuR@4Sj^9%`cM1X_#y)8HQkg}Rg%1(02rj{Gx1fG%3 z9KF*!eif`#Z8&B+UJS|Qe^rqrRbha1T$>#d#KJ>n5a?9!F8gwa@Rqnm|EPJmW4cx@ zTOO%<3DU@B)HM1k&CzD9ZLnlNji?Alzi1P@kyO32a1Ft>j1fB$fqxFKaa?If(OJY z9GhjMvb5riG>L%Hrk`4s*W8t`uLx(I%MR)WPy*=k=mRanT`<`QT+&EW;)7f!5|m6d z3D|S_t=c)$lZl4vVUlU3f|GuXV%6)lCBFjfMDDb8v1Eh^rumNYYHh8FTj03CI%aP# zCXM2UHqomd`;~_^V(+lTnZF@3JzaFd)#P7%?fhMdDZ3Y5C})CNqnWVu5PbEIEotE+ zQC+_ifz!&-UeA?CJqJZo?Bo=drzWo&LHGruTRwWHXszl(pZ7wH<4h(+co(5@Uy?IS zr^lFvykMHztRORhib=6d7W*tXKly8If#%uv2AW`@OfBI_;7-QKO3vAHWDvPI>6~@s zxA1uc%e(nwGh0tLnpS!NTG}ew(xGcADeR_K8N|uD%kFx*N%=AXSAGFsn2kiT@PHE= z9F#xwI_H8{bx+!EWNDLmF6&L#Q7HV5uBnZ|pdE6=#Ols)jr)<9hFo6-o}LgIqO;S< z33EUcwgG}jA%JlPd^%2HEG$0j&v}07pZRb4E)wR650%*UuRM=-E zBumuoqT%TOzc0A(RrgTK`qnE)C_6K<+(bhU3y?~uOTa7Ph^v>#1L^-&E{})r!kO&X z*`UNwNMkoISH%x{^SDmFrY~;i3f~`N>sd>d`Z)r#utA66r-xuMtGZ0y_IG z7FQQ17e30p{qAq+Wjx>~qk}=d7$IigB)`lY?qh3;625uAO5Z#@yN)<*QCVLcvmXsn zxNR|K-ZP~Dbd?xcafs>|&&uq9t?f!iq)^XnR#6L7mWh~^pMlb(DNZCiIbcx*qz1`y zt%;oBpV3%h3Zok9$?2T2Wm9VzSq5lZ*?|^V5oIn=Si?%XK(*`rJgCgd|)f9M%;RP#hVg8@l+@v||q+chvbTFQw{aAftCE z-04hST?JC`9zP+q^tLEXLy5*`47I*c(jN=DdXnDMNC!9$4`@)no{&p5s!5LlA+yP{ zfF#YL<{EbuW-2uM#Xfy+s6V~#ciQSL79%baWTO8~F4pu-VDPdvfb(PEAwq%d>_RL@ zm{?%s|w-A!m!`i;z#AXYc}foi;_)CYDb@H8u`4?GX+`q~Qu(ExLMK%! z%Eolfp7X^yMIHnWHMkGn#IvFl&2-l$eQ`Dc&H-j6jAM9ia*lB|Y)VXMC?Mq(Il?~M&$I+p_hk?Y_1Da>d|NIJomeGN~kZfe)~wC`TfdMP zZ|Z)uh$fEE=Kk?g7hz+I&|89izeRZHiz+`Xi66M)vi%k!eK{p>BXSy$7@rGJLD@|HIOiVz`(%7aS_ z@*|#5NxO5lc5d)N<9lQ;bTdEz8CA@jwGWma1xHcaz)-sTx|xCC1oMFocn~Nq`+1l= z15wqWng{3mY7Eu|b!Zj*^DmXAk^kTvJLDh9ST6=}g(gOzo418bEJQ3eEo)6MyF+=l zsA$%|EORjCmjmwci*x%Vur}wkS+=aL_VAGd{9x zKqii1oXz*dF;u?tUPaWi!=eOJnjZ!Dmhg@N0$_{(oGQX8Gn&-M#X#Cj5~XN)gg7&X zZu|a1j|G{XxtPXJ{g73Og;ck%Im1^mc|^KZ`?)r;;fPb+lT=AcqffEXkcPY@z0A;X zGOYNTTz{3%EIM!#;|pddfyi?f?(^vp3kGrg!#RNKK*Awnwa&S;!EHdfcF2brLyes@Jks(Ep{PNU zG!x`TMJJX}`tWSR$1{TcSNbyYl)Fbt1d&Nb%hQiL*62KYZCg`T`F`}h=;=1l8g1mg zc@!Jtt7h4QPCl%UQD|lPuuP63rGgDDew8D@=*Ur$AdJZ;+CH7?&M8?_4R~@-ylAB2 z(RP0hthU4V%0rq-m(SdwmiWz2v;s8edXsEkMvVAzNvz>p=ya zgW%d@wbf16zYLr00D>wfVSlxgj}5(-(QU6N+Hd!}=>I<&|K+k^HVJgf z>u8WS>8#?wzH?!9V1)`$eNIZt#%y2TBZc^9?)NN7SZRGO>#sCHFJH@EaKG8`_CSsD zRMuWZn_Jn7~E%= zB1pW+XU?b3P*|zoLK0gM<1s)wFdEp@UKGkAn_BM9W*H|ogeTOkprIJgCzuk zdaOt1L;)=HWFyq^{$8XD)=Vm}(M(UpLGApFp}%0FkkYM)2H$WXaN|F)ZC2Y5q&TC) z@%8j0;d~Vl@dOjlKM*wzYCrGfL~Zpa=;bNmBHD{UAzBiqW*TYmIWGO=Dz6kVT8P8| zh8uQ1u)jJ4`m?ED{ok7ok4TFwNdT+pS%k_HkjB%3+-u0m)soe77d(Ja%QHRXD)RA6F+1~d`IOHEz^%N`uk4mGK# z%0K!QZ8i(e+eA94h3`TnZvpAp;W;XbJ?c(j?Z~lF-c^1Mx!eSq8Ot8JBF>W=;5j?9 zqn$uTlnF_mF-jozN{{K64*XTu8BJD3c~emUuYFi!jY)8}na)i>Fv1s4{gW|g;f=rQ z05#_)W{6A37ca;IQ-N!WWB+N0BwptFCd4pZF!eIc@@GGH3BIMBPZ1RD&z7kjZKuMG z4iH(!MgvhG1Co2Y5QJId^9`9sTm4nmyIY1z7V5@kLvadGeRB~2T1%XYmUy39Tv}}T zPH`gvydwzbOS}XuRes>LO6RF;X3Y&KzM_B^CnBm{X=#7qyzQcz1ctiDTU?gq1=TT;eVx-Fi72k_J#pPkckM-jq$j zk)ZuEv3HW=G}L^cyER$eM52(ZF69*+rF}9$Hj!Z1r;w{!H>a&@%PvB@+Ol6B^;3j% z1~A7R@JrKtLc@EG%@!99$^-_jKFr*zxu6_2wKAV*+lO8>&R@DU$2E^YaS`x?aBFYz zaFe?3InfERDq}4w?uXUZe51fBK7d)oYp_e$86lI{6{}EA7CPZc`$*lW{WCS*{@519 z3dd%7SU_)GvWw)XF0hr$MHFb7I{-xvZhg79A911pEN|poq5FHjc$Gd%lo81cB3Mg4 zCiZ2{*)#YhWl-r3g&D^pE(SM#R5DlYf6j-gNS#O`e<5OvX!@E3xl|ZIpyg;c%Zup? z0!)fD?RP4gGz`9cz3rlbsem@syop&9Hv3buo|0>BC3TP(L$wnCBIz8FVc<1^(kyXt zz^r@^|C@Bne#QejQ`HxQJ|F$E{|SVc`YC&e&<9&Ap;$Jxt@bQp(dTc6m#kB?leN2O zH0djTfw^`4n<89S&)-{*JK|D8UTB6 zvv|YpIVcU&)y8uX)|gSiI<0L7@Rjo^I6;ZI3_zr_Z~X~rI7sszblu6tVPj`N;}Acia+mD6w7AT zVBrIORJ10&pVH}xVC6W)Y|HVVD6pBS1>C*uOUJD>O-nU!UO>{APh1s)s{yJ8h&f67 zkse61fwpZi?#wuTjjV0NQKLG?)`NqaSjS(>$y>OEv?qgi!np2p!PcXY?csd@le|KHj_@F-^!?esw z^A-Sb&92LI&-ftkN$pp{JbgPzr6Ya!U@l=9JfMXoAry*H9A?l=Ofm1kVO0XA3G_FZ zpOZ<=ge9Q$Kx@0}tF*kWFM6h+dn z`o{;-0|gGXr|sNNl7RJ%5;^N#Lg-}oVXx!z$DA{Aro3t4Xx2h)O>tEGCXYWDFF+@I z0B4P*=iq2vshSVg(sS*B3W&Ng$E>6S<_7I3jRU1dUILz2FLyT;Dd34;tli}0v|yH++RGK4BYqu z%{g?D#g@?tztw&JEob14UH7l2b4+5Ta;z=YIu>4%r38#GV3Y6%c@NE@d_N)nl6*86 z`+civq?>c?ftohTs_5KW_=-&&ytx`lIsIqb!dx5I{$Ji8jz?Hz1pxUiqh57h z@}K0Uxh8^=2DLFH)YLF`IA}l;&e(G6P2V0yvqyH=+I1B8w7Hma)x!7*57UIa`yYiC zJ>$t|rj+Q`7Lu!EA1vbCfjU+_C4;EPv7i`3w8(zX^9CykJbC3(cja{e3)dLYm%Cz<-TesVu*3(7FYksJ_ zS0MDxj8vw1DvLN;nic+8)u(gNs1@rjPE2MXJG39&gZb3g(0opsWe*rmZE!Hf=~J|_ z0-L#%xp(R-xz=7Qe-Fjl>3H8@s)ON~3ZPbOHsen}gzeSWu77GnXg0*_xQ{HV{X#Fj zczB~?l#3KU*D}Pp2L2V7iN8gPGKb(E z3ZUglP3%es%^^lEPrl!S-2VT5QDcyu$iWLT_DmW8vwYcMpAdyJjbdl9kS-{k@D|?kHFD`CW$v0= zkU(DcdH@@gCI~^;NEyL~ennnkD9g2hB#?SE+Mw|Fx2wkrFfg5MSn>WuzwcAt$%G*6 z$en^oanIB7-$K-I&AzyT8bHhTttZjYh~Lehcv_5SdzUUDJNY#TFIYtFJS0RNfT8+) z8yKn9KSN@^L+i`-7{PH-0!Tvc{J%*ltGMl;Mqfmu47m#%IqAt?ow2?;WeEY5TY}RI z347Q+S1tz}{C`@z%8S6Q!lYGNCUq-`K1t{CIZJl?`JCNK7*Q_*Ke?WZ@-wqRlti30 zUxLq62`CD!KZ6FWv`ftJfi{hrkj|a*T`=aDDIb?bhDctajCRw|8X3dV3kgD9W4Tgm z**q&6ctnf>k?EU>t}|m+?L6Lm+MyyQoRhN`_lmqrr3U^QZ2nASbw=U{?mJGt5~1~b z6N4fA&?Gx!zL`yFpT%sshy@Z}Wy!M?4!QW* zJ9JLzRrA?~qRGqukO`M`09 zJzbm)={cQEkuGM-55AhEkJ??Mf&r1J@?4;2z8U44X2Q9*4c;D0%3SldXp{kq#L`>+ts;Hg?Pfhe8> zyj%9fZ{K*7P}F4_ny#zwU7)2yk)zj5P)AI9{8209G)?rb9GrQ1$%W!2I!$JSSXfs9tzDm;0`9_9U7}<48Yu-xGkF(MqkiXKSV!5KKuZzPvFlKzHjPN}uVQYETLa z0RcF>A0A1O3@bdm|HjGg#Y~7(-0|A|UEXYKUbKZi1Qo$fPH8sj12@bXEDm%q z&Y&AUk&3YU>4t`K)R%^Orx80OfTB$Nhu~%`Q?FCIbBWe%oP7vkW?zqW=CeVQ2>1~PtoS#xri?}pGX|> zPJDtL*8n3zCiAz$E(&5k1lQ8kmV5fU7suD2X3uWY?`yw6Ba!oO9hys;^2}v1zSiB-mtr)6!$@0%yWC1o1xyIyhFnn_CDEcs0M|Gs}`4KqAKFG$(hRt5uJqIB+aW zR=P=TRyhDmHJvl#--JTq7(MOfBxF9k8ch*q>y~R{a-iMJzLF%X5gw3>y!Ld*9Vi*L zVY3rs=9m}7Qh4mOYAdz>t)+DYTIn7e581;VMGM%b=mwMhEM9J}7p~U73`X-gr6F7G z`?VpF`#(Bi6Sle4psP)vqhF{4f%Iwq6#9hTk&%$NMUI=g9a**NWkF%ie-Ki7Rp#~( z@O>fNNmWzVu*3=u1so?PID@mbwg8w;TrU6FP*bF!$V!tIhKg`LwSj?H9x_jR=B| z=(1J&5zkIA-4Bprb2fgI&LGV%xo2UN{hW4M!ZNXtZ4vAr92{f$7{ zK0y+(ka&}($7AKg0xgAKwu=a=(KtTywQPjufIgDkmHhd8>Z8`kd?hBM!3T;?eaMtE z*gzkqJR)ztRIBX0pzA|8D?+$INO6F$mZ%uGQ?Z1jbi0k5NG-D8tXtDZYMB3ptislf#FP&WLEU;sD29GW6(_E&L93PrBz;OWD`kw~wRA0q zYSqAW^m(+kKs|&-6yALt(6dZoxVotls3(#s&GxgwWwprL#(UNcvun+q%Io#G->XEq zXBe8Y!|^Q5?UE zJqrT>mf!A2=AR+Qd()Zcs)9cbN4j$HJjyy-i?>(-*k*1>;47)HPjI5tAe^BtLZvqq zFnX5wW%QH}0hrzYMboa$G2Cn|j4lJABIiI(2{E@m(FDy#RrN6)Qbb<5}cl1(OLpQd9tO^Y+%B0u$_BFjzp3GgdGuLZp@#`cf_QHur z!!;6}^sOj^Qwcc%>z3Kz2xpU2mWJJ={Jj5yi(^J?@hmQQ9>in3LjzC~vOmYAR6>RT z%3=TGHD*IZnn0Kt_C>nW2sj8HL}Xz)kfMOoaj`?(U3WeFjka}T2_4Z431I(WdDS~3 zzE501u`uhZ96th4;{Ct@%gZ{}YWdWwn!Rbd+kkY=VU{j^Y zM9<3<$)3%t>>6YGzm_J?lOoGywl19l?mYE#1rkx-IKb{`&5yewY|W;6hGp*|CTKVz zmTW?5#$Zy~6jGE;Q&=(EK|}o37tLr3RCC~ush!Y^uqsUuXT5caIu`~%FV@=4te;5d zMbJmgh_$5nXv^&a|5e5SEi26++@J!6m|5jv(G#res$^G2rBc{MSE3E!<*X9C=$N@|v)|^)kt8gz}HJ z3Wdd)7yZ>1Px7?W_27YCO^|CM!x6sm81>g`xz`BU6d;!ff|92cfsrP_0siSp>#XJx z&6uD;N?zqu(r&L3E2)07p^*e(^ez4VHgl)=@^g@<-GR;9} z*Uz?eRZNMl?MR~9B;stpM~NDh!hR(a*)bg3h;z)o(GQagGeFO zi+|`b%qC@`&!60UMxA33P}_HO&Pk(8LzFk70v&QZkBAX^rZC7m0gR$Y1J74rU4K61 zDe=t-qb>9yo0x5`ZX-pC!8=03U&NE|V|kyGpG?cU`N-FuYnBCr(uc*X7ee9i*K?$m9SQ=BMkue8CZuP2kfbP*P4Q1$k=G=Og0Xbznet`SOkav$pxo^WpxzLi!w539U zy^lsOWUv}on4vA-^;RDRz=P-0S_e`S#bc(eJ1_fHx9tWE3V_b-qif6>*W+P8FNN$5 zeGJ3A_m)!1s1%NaEJ2u61*mgByq1PFB*EjcB{MYkU$f2)>?wS{iwNnL6%86iE{VjFj{i>YJBxXX0r^a27P>(Rl5OLdM*~l4&UL?4=$ae&;QH@U1#ZdP=Q= zNjd=;doYN(cYw7c0>pAGa}! zJTqPd41a2e>yawB=ivsNB=L7hNy#9bGes-G|fkHE28C07vLD>yiC`X=Z=9mwtG9LMOdxC?x5{^;wN zd$=50-*s6LG{}7^@fZJw-gMz-VH1FLUHD_%Q@jyrC6I!wCeO{)&VMn!4tU_AQu9uM zLS2vr6mhbFSYH>=*!y{9y9QN)sbC z;6na^|3b;oBKDyYEhy~^5kGj{3bqC4j5e5c!G4UXYh!MKNXj*V8S6ggz7XsJ6%<8b%N06lpX22Vj)?$EzFRB- ztpqszhCdB#TZkgxmv+fbJBR&zE~&Q>Nao(MMNJuWI~gAE7h|0@g-J$(rV8AL0GCBG z-55P=s*stq5m}5S#t4UAz-OusmM`(b_9Y6nH|Fk!!^4XOIwLD$O=*)Pe!}wF@ZIw8 zNac&Femb~t9+j@;9D5DpLYD$HHIpn~k-gTtYI z&G-GQi42Hz6Uc&<$NvMZ&E$jpb6*ctL;KXIht?XoY>=mVo&Uoh2;y=3DIw{(&knyM zwnl0~v4gy{To%g!z`851*|)KvYrB}F>xByT<=RL6WpzG-_h|w+pjb-$Xt+KLHqA1J z*)kxQT_5lkAqgQRZ{A2Bh_9`5Hq4u1PGwnPcNqb2noLhvo96IC_Si~H%Im*n_w$B% zfR)V(ojsu|;;}(&X*1hP2O?iSl5wV+5~JjIpR>pcx3|5K^ku!fqJBM$qmIA8l~|JT zDe8D0N4tbjPS3X+vY~ikK94MiMYZW`Wm?LC(tC9_2?ok#jL%A&5oBTxAE=C!ZeM-X zt%8)I>ke0=$>zS6u=6FJ&Oe_;QxY(4P%lw2auACI)%-M>h1D8yV8&+RZu4=Z;r{Iu zL)I-e+N*RB`it66p;($T1y(WWFL>RX2>S{=2OIz0g`~@sH1Axcafc$0DbS}n18YM6 zzm_x;Xl-Z8vyavq%0spzRWqz3i|kdaS;1g?k@^?&!v|8-*(W)%7kp(d;Y4VKSiQ?) z>T%i6$W$+a|7iqEmojaBq+}8tzWTjVcf~81itR0bG?{sk!BSwYGK^O67N%L^l6tq- zbEhN4aMRJCSY0?d*kF!ZM+yITXkra0Xh$VF9D}^?$KATnWuRZt4{&P6ae&2|sz8$b ztFYDSNEO0rE+Yq#m2w|VmVHY2N3(6I6#wQGJrrl6WWUu4OTD2U&Xbd~iYmNoL~7K& zr*tmM+ANP1T>bAzPp~4mUj#8jL_-}LLz;RFpe>geA(?!&N zXa7=d#BxALc1E>_u^18PyPt8SJo9zWZVGF6Gn-U_RlS+2Fiv>z_s_NTQ%THAKCcZW z%QqhGY5j<2ze>K_9gRU!reeWCLx1hA=TH@oCnv$K13pc7I)6CUw&hBZfq&5!+Vii3 zigF%)iQkc}O7OOExMvmtM`t;;H9nelcH6IIl=Pv zP34wmdCR5eZKZVt=P=ps5*vsVC~XgXlf7&(TrBl@3zE|34(6MC-tD~^zJ#=y;vSQNi9F$}I3mvs%Ksde-8PsUqiVY%9T2{|*~D za7hSOj`kD56$|NteN7g4}KA0S)`T;{Bpw*gg|l{AnGPaGWEW!!*OQi z^~Y4LkaD3b)@L@rE?9oI+0_0D!SK5G1mq2|qLVNqy*cq>CIG8>vPZRt0~3A2CK1tG z<<)$T5rg()W>7x9W#j8g=0v3U>u01ptUxHq##s<_%F#1EwV&}D}|bBRpYb6dtW*QrY;9Z4xAQ?n=7>}Af9b%U}x_QCK0dGgTO-4j^q1L+kt6fHkjCGxoeYE04VNq5-h%~!MKcN2qLzy&TU zwxYXHuAH-_VT&ztgq?EoTWIHXC=6#x*CdC4+}8t*Ba|Av<7~fI^!cHBKR4Amm7m_c zwHo&Nrd?$m#_r7ZcaS4n(|0%mVDJ%dx>^a#j{~X^1v(f?WBt-BOCG5 z6$;Wm&Pa8{yKk>DO(^Kv0>tMI(~v|{h7b_nC)i<(MF=(a^a#XXavkCBN^ggNGKZ4} zQ(gK>t&EzfdY&z6$Ay?wBa%OwD6)xKhWh zHzmQ%fHNM63sfLt0o&Liob$@qF1jWNCV%1UIfY<&+;#{_mq8eiIIzQAQU3XecBOP! zJ3@F$|2F8c2%GC3<}5hMMC%dUHhA@mdlJE&h`V?2Cb=WgxZctEcR#QyCl+A*T+gO_ z#Xuv2bLNK(ri_@73o#B{{1;KO0vY?AuEv~#X(i;Cs#Gg6ABl^aab-$11XyVCg%5kn zMPZtFajm4=$7;j`LIE$##4N4`OIjWC%wj!LBAYx0=^B|G0vyK&Tp=U?-@TIkY~s%= zG=Tm`j3zq{kGKNH2?H1sml#jtTQN*Ztc?~0_%4KghyT%GAZjn^f+Nt%p!F%2YUi*0 z;+QmBVJwokWArOMC~2l{IP3)b;yf(3Urb!%0}Rf|d;>D((3b=#2n?WkJBh+M&IZEz zpinvL6n(7-UqiggYJOG%oOvWjc{;O~^Z)v<#gQ8Hr2Y zugTf0AfIP(S>E=baDQ3;S?%GKYD!pzKQjo3?e1(u9A(>wFa(1{fuw(} zI{1!Q($abRps@dpOE~Sp0Ttnk5r&19PhJZ!Xl!U)>cZMfIMI@#(cU@?7z4?&wQr;K{?*UW8z}qv3vzU8oC1MDgDZFc+d8{v6g!}ZIleBk=Aa-Wh1X_^@+79_?3 z6j6+sJg=PT6IO~gnlbEvRx(FTu^#So`{)Ld0MbH>w;As6)Is3Vw{UAB(S^qcg5GTj z!R}nC1+VjT`)JdK%C}Dj@*)`J@wE9@tCN-+uPvRkS-G} z3{wLw-)myYvU{H}I-6VW9N}Ww;oXjfscFeNuNANEXQYy#&d`h{da3gFy^0)u-flTv z(NtV14r@H~hk-}LbnnDf=WW7H>zS_`dj1zlz_0>~_+M2NbW!CxJ`sK>+uy_NJbq-} z1XQGKi9$LA9#U}EbyDX*Q$@M`-~`pQujzn9y20UO24<`@`@7!Ze5O~|1RE^ z+?gd+r3Ho#@~Af~Cdg9Kl1pxI?Bf zX~I#R2&egEU}?F=PYiSVpmSNRc8ly|U)5OL##*2l-N}gY+scAWw8c6A^BToakQlmO z5PI9R@fEvK9K!S9FWm=VdvDfwit)Y(1&dSVTsyl3pk$5Z)qj&hHw!UBrz}=6EJI?6 z7+BYTd%7gnlV4yWbREo&^J_u2uC2U>MRLjn*@c-2`W1AE{=CbeGY`l>-Zo!iezlr{ zCO|bh1VN|88yd^EGR#CuYweSs?pykON{9N}CIC8yHUp>k1)2dE@itJIrZTm#p3vZo zPvZ?A_8EZDY2<5k+IlV_RJBXug!V%04tiEH*Jw%H)=<9gtJdtjEkX-B-7ro=P;J?~ zZF#P5+O}%zB7U6>p2nOMz z9v9(5R~vrQ4TwEH9rXkw{M@}~0RBqv`zBYtn#TF(QX!Td1~HB!v~jLs zT`ZJ?Cd0|%IKIhTT%*k>y0fkFm*#D*kFjj%L7t`fAQylBf)NSsZG^Hb>%{9^r3HPL z4Qve7&*fS^w0Xhb^m5XkNG1x@AF6uS%B+coYR5FEx;Ei(VJ`=gI=XlRnIx;cCxEPU zr}2%UvLqXenN-rV;C3-Oqil`Pp^Jk1mOV;}OD~%wxfm_IYQVED>$bj4)WMgMC)QvR zu*M&~MP%19poIi>MCQ^)47f>Rgf|J^)J%V~X!H_Q&bAkjiW_E0sUd>L>N#wKH1$8u zt97uy{6av~z5Ns6_&w!rwk4$#^!VNNDB-tVyU~&-gulXa{v1$V|Cg}~K6@7p;*dZt z;l}Q)Jk1d#%1ZFs2^wPil~T^Vj477-zu2JppHRVn+5G-L*;b4k%>OMuhmrLk#1aN} z_WwOOwI=JgHj0wuAsGQ%^iPG&$zAxm#)GAiX%HQ*^pZ0 zukW}CoTpSmazk!zWp3OJXT4A_ot&J&iEDB6O)(dGSCUaWy=jrJ zyW>Pt>4F9nxKcwR)@*D&)Y%O5pTkd{#B!oheJ~RG_{U41K+>+OhFFWCe5(Zt`W7$y zyl_3sLN3a8Yg;DM8+w+_XPjcYdfsHzB&&8|%$Cv{^<5JtzO-%E ziC9bBgePrEk-?O`4I5jN$2TID+Zs!S={X~29lzlV_zm%3(g-xMSnNtxJPl*yS!inH z`)X<2&X8qxSDqf%!z1sTT;rtC$BvJE!=NQ^%eEIXZj|}Yk7{m}N{q|8v2LmPaEx@H zffncaeXgNLF&^Q&-s^j`p7DG(J<_447LG#K`Bw9+ROKS-sX9FfFeyR6$;H&}oQYe_ zxw1#?kOVV|gHM`vIgK1RXNHVM4lEG6u2Ol7EjD*1S-HEczS}0`C8=yE#=;;~D1Y3A z{;J>aJu>|+b;5Jt@lK5EuTFqkWl}=NEe?$Q&d%?N04qe8jV}(u{9&S_+2@NCmx>KM z1d7!@+X@A)*yaR0I%0CRxRV5}i{dD|fltB}#(DLVuN>YBfdXG$V^GBw>`IXIt zj>lLZ4f~Dn!2GJF>ku^bb+1g$M4l^1@-3vGg9*0t)w{tLb@1T@WxJ0Hq4y$4y)DK| z42Hc)I(A;3@-1^oA#s@5zb0HlErW91sG$&K-j`bbx)FDJl26()vO6on|DY(4v=IW^ z**M^Ug=s#5r(Pcaq-+jRO2VOye1+2pg`ET?Eu8S%N;^g3&HHM$ZY97ZPnv6P@so^V z^!`m)fb`h}-^?P(<(Eqh>oJ?$Xe)ZQ1<}+;r?I^$Fosa2A#tGC=YDl0u|g1aE0uG& zZ+>~b3;F3C%X2(BSOnh}kVnc^%J_r9S56D{*k|rA1C~wBT5yAT3VI%yT#JfotKg!> z?@zdg>)2sJ*JSEbyz;mYr`)64wG!RCFo(2k5t>AbsKPgL1G<_SbDrjK^#a(1zp-UD z@8I2D&XRpw?#MGho1)IE`4Fj*350W7&M#Xf28yCk8Yt>7oCPYT?h4bs!qG`qIFml0 ziw4$P4Df>IV@lKNVvYyqOo;jly#10E@MtqzJr)~*o~uXj9<=6ebux(RvT7L6&QNvV zU&qRh^~Mx$)n|UVeDXw;qr;ofP0>0t5URh$x6Va1vIsIH@^$Vm!RAt{@H&RddgDSU zvYe+meLcK=*RF5s7`OsTSQ#ZZ;Rohp4?0{_HuW{$wYECdZ5$7?d%LKrP;rjqPUsCn zu=I@e`zrID0QK`Z+$(fGiCumgH^E||hI_K#%MU=Z!751NMuAB+kswPNYvXiIWa$I= zb-k(YW%K0WfR%P|BGv%aYa8#XWddvRbKk2))&Td%cKXM7kWA9S&S{2h-7$$_ZeX$2 zou7nGqVL$dg}z_dvqBtk(-_W+|2CY0YjVZ~Fv<|W)~zrz9g+#q*@^3-&4@0I21dl$ zxj;ovD`hEnNRW`wPi*U2U?4NJb$Ddrn*ZVPq9&A?k4`pQ=aYyHKKW-jh;frLGA zlU;tusAiJQIo--$uOF}|Q+6oJMZYmRr$Q$Xf4xjI5rrtJGG6{hH%` z$9TY9_OjcLJ`SVcDqKC|3|{`H;gmGX(RziygdQa>{A*&ovBle(ew%j^SnGg%$)W{$CjA> zS&}xY!=Xf8AI=@rhucfqas`)46e0A*5%6csuGL;GZ*~D>zPL)r@94kQ$@tL*W~8zm zm~mXQCQ>ppuG)-3M8{~(+fr03S$LSD%u&;nC8qC=3WT5WCy#B)L0f*GP4_EPVDqoPysU7%pI>m&3$Q!UIW3?BSttbYnIgN@D+$Lvxwdj|FwRwC7vh*7RI*M@?B@|A52bgWq;8;Sk;H8f zA}xeIxWCSTzf`OBTFWD%8xqc|&B2l4#WdGps0>)xhp=s(;?XZ{n@89+d+Y1UY-hxJ zc<+*M{j^I!bl{J%1KiL(Y#O6{bt#3F6~8+b1f;ask}?)KAN0kGXq+8253Q4o%kKgKw{* z2cFrl{Z>dyPnS4~U-NbvRfa(*2JkInU!$Z^|G>@tx}bhTd0htth3`#Rq=fG`?!RJr zYxmrVXhZ8+hXltCb~vdBT0bgz5IjM+hvSImvP@m5b|oJM+EF?$Ox4@|G7su8U%L&z zzx|zMBnCXw{xaXI-t^5rBv-s~QG1@1qCXrmjL7KMs7j@q)RGyW{SoEF>-BZ>_%db7 zOoS-r*9oZx<sg?YN&X2%oCv{yxOdrc#{D4{1pl8@`V9q&)ou@WJ^=GG>n!#Ak2BJsKi8@h4^7YuQ;oj z`lH$fbODS{X^&g`{pThqqc2~wZZ&gM4>znVA|5b->3)cKeVePp1#8B8)`r?(lw($0 zjF>1tl}wfPg*5)yzPyA>oX@ka25a1gy-vq4?Zw2G9ATOEO&g-3(ZP|Zq`w$c{3m^r zf$6_y;xVxP169tz@QK*{le8vd;A91Gc62fMJL`o`QcyyS@o!X@e}lVxLdE|4lbE%g zp@Fp%;QxqY|Af4ZAf{o074KYikj2QOkH6oqT~3Gw5Yu&#O)OLUMolm#V%$&dm5iTK z)#0ewV-6zCu%x)x3TrB@Kk{XAH(`^JT5@d$2lF~p)8Mx?WuqHrFryq;hMM;t$( z2Zw`NKQ67PQb=hFBPiBH#6w8{k<8hrOAi>k?^9QmG)h|%@M^f26msX4A9!1Fnp0Em z_Kdp+8tqP^h`(2UxTCjq*DtsxtR_MyC~arltQf!V9AFjmzpdi>W=Aa_!$OZusk?Ei zYvUImKbBV267u2|pM6oCGwD;5_%d_#TpsCxl&d8^cwY9~j z!w z7uDi6P;)Sz%NzB}Vgavd!*PJq^VXPOeiV5=6cAjf&ZF9(l<$?_Brk}GBDB=0^%&S| z<7MdnEB>32J>!pWG#7=XP!4y&-e+Vb&IpCX54*EV7E!*rR4u7%A(qxS%AD+N@ySW= zh6`2k!?osaOqqC(98D;2`KXS9>jw4Ru*+R7vI%mZtJhz<&dTj9Z{ZwNm00*e9oRi4 z?1+yd0EWI%z58YrmK|acF`c?V&@|Ug=okFlhFx^*<1Q6`SCz1{p`sjN zuV3kh$(Lqh-({1v&Ll^^p*!jz2$IPy6-;qKMkqj-93?d7Q|_$(6aR17%#BM#jvQ?F zDpVkwUz#Txr)($@4D+1^lqOhi^9p|9lfMFv6cqEvmQtr!-pT~U7<)X_va;UpGR(oC zbxls8wmmKFjsuYG$iK?gJwdGSPw{EgZbria&YL#?xVSUeh+m&_4?QaKiD5RX@*!ZN zf#jIFl$Wmyp4dg?tIRRCpy(fI267_G<%aNccd*Db6Xyi$Glna&lF?L0z?vZMMn;m_ zc1|Fr2(k3SCEwEW=x#V5w{9&X_a~+!FL!!qaH5OIm+kA(V4ZoqY?b;xA|Ucj1fW&G z2{b?&DeEhKVU{kMH}G32+GGOM(Nk9aouYn?$470n$Adf!NZEmC=ttvT$$7T7;uc|{ zkqsJN;lB?7cXnz3m5H@WS!47j@o=2Ebo(U=Ew^(1G*j9ILSCN8WK2uyl-5UiJCXsP zIn3rJ$;_h7%PA@5^2?uMuoe$ipd$PtUI$8cj}n$yeots`_}+i%96-?7ydr|%ZO;(Q zBPGm?0TxqS>e?)JAp5+Mz5azacZ#ZQD{rJWeFTk{6u!)-eCdbfT{82dALGq9_gP}T zZg>ZgR5z73LKkcqNE6yX2UqiBC#DLgg@~9#KtWAQ0FU&_TY3Tul&uz<%!zb02-x$3 zEvC242&*nl!OF7eZ9=QEb9IG6ziX!6%euA5>|mv>#w6GN2Zi~ld4cqiglWczK$G%v zVb=@4&$WGG`b)!ZpQ;4z$Gq7#Bol$-cTMGw4N1rwukaaW1xj#o5ACWES{Gfqh$K(% zuCXXm0Ek{`24l+6^zkWy*%fmJb{KT#C13z$xcnxPZ7PVCx015r%%b@6^>v+{`wKf5 zIdwhr!Hc59z)<^v#i5bjl}Y^QljU_P2fU54I67-&w}CjwAOc+%%er|UKVeCfKXhDD z4A4bmnR8sfeuDa}o9ZUOP-kAFtBvalOCy}M{9$f&YQb{}BN(012Uk7tH(nZ-RbayW z!e6u(|H;SYV5R>r5vr_={~(01Gyd;qn^dC*7Rjlz7GP_d3Y?EJzE<>$x>3P8!cOQ$ z1-+|P){K(?FLPOg`uv!mjP8}NyHMFG0#m&EdVcE-SGsFN*ryqGiGH-!upmXLcl)Kr z7Z6W;Ww0Rz9l(WUA-rAIZ4GtZ66gDhUA#MwUnW;*UD1tEi3){=xnW(6=DA^}2zsp` zI0m6$<;gv*N0k9abu}uvBkr}Idh3drcCxfKk^r2M-ycraC7aNjw6si8~eiLVsz?MV7ru zmg~|ZH3UCoj2pYI5L}Mdu_2YHVTzzHEdyn3a@UCSM3yGN421>|a^0xy9C6f(V&skQ z2~dfpc5KF};@QudBaNjJhhYmZ*GKcPHBy!7qAL&}o50JU z*!fyySs|!2?IoV<|m(mAsP^+IPFq80N|MX=DBb`E`&oLh}e-O$KE&w&Q-K z5dz>IhLKxxBcoi7pDhCI;n1yu-^Y1hLnfW&tfqzB<+7mB{7A{M^epvkTZAv+R1*G*pfJ_7u)S*14_1`kWM|2TFv5VUn8+^gW?@X@{ zL9KU?kQ9JB=7z^6*vC79@<)mFE%#xMXNq=V#I>LYxUyhkW0&>6u|Fyw;V@EeAG-LR zZOVgy`G~R~XUaos?gbn9aF%Go<`UhKTM*(~PTIlg`=o0(SH5to`BmaSp6#)!n-Fbv zi!`-8*GX4Z)KAMR^1t=I9_P090?zczHmCCZqK5n04Y^MCx@ksyo={J)F%2!9Wk&*= zKN!2Dnmk&*FWx~2IGE81k)}RuU~PW4H*M_7Y!6`DHOdg_^KfXa{$wPKq_(cMtn~h; z`uxex{ev?5*;AA@u{Cox2QV}Jw*Y5m#(%QnS^xKV?hZ&C-ARQ823md3TL#${`Sx!3 z8HZOi+d#F^9>A9qkoF?*qDmrKTl%oqv;k`)MJ5sE{pPYkP*DTAy|cx=8jcdp=C#0F z^#;FbnBj6nZiq}NYfqR49Z&0!;5B43-gV28ZSdfuFvu>J>+PlhWEuqgr(kabuJEfF zpA*T5t4q>(6llGK2=v;FrFSK~dn$~6H;l%xpC^dR&yD2T_h#VJI^Q**rWFIOV{P13 z*qe;H+~pE-2)O)Fv0~ESmWQW;KC1Pr93@O_kx7Vo+;yH+8Zu0IVgt?S1$J%*p}wzr zr?u@NvoE-QC;v`kzP=;IXhk>V6t;Nosr?340)(3L?`c^Y_ z|3IC%-`&Hnn^ZnLai|)h-7LZ_BcLGa6(1f*JC$20+yjD%=cB#9O*@#>ZZ8!@vE&Ry zWUv-l24_Jza2my{=8icl)Eh3u|T>guv z?O%}9|M#>pFwps z7~?a177#aczP0 z5Kiw+!HR$zT^@vA#*FBwuoyy9G=$f7R3J4%U~!WDYMX7Q`#B4K_RGZzq6f?opWpCD z>gWQbwdxI9cdWQO!xscdNPDl}g#E$V3PGD#YSMS~sO+=&)XY}Ud2%i4R;&&O38?hC zVO?)>Hh9w8v`+(;@Iw_vy6#FmiAF7mVVLL#hhoKs7P}lH9VO$jd$gLxXSo>hpIcGLmJrg*i*D5`7KYA_aI!HFJqBHE#R&-rbYjgnJ02nh@^Ptd zAJXr~-w0T(ZO1H^efYWwgZ3>P9It-_QAt9s=8FEtXHEyI`<4p1SCJHtd02B$851y_ zCaFb93Ozt;&TXDGnw`smMe0LehC$C%8XLPcBC(7!WkbN-@VR#A_f{Yv{^Z80*yOjO z?F0}nRFogDqCGg&uK{F>scq`=?7Ov}s_nK!NUZdtiOsv15iSI6e98Q@qb)uJsFk3m zn=c;OsB`h#X6+IEt^Gh)E+wiCDeLZ6I^5Ss&4*iq1O&7q(d-K%XuhRiXb|0x@~^%$ zp@h)7^?L`E2i!w>a>#Fu=?QZT!%(bKBca`Q8H8LiOI2RQB*0MNLmMbJ=SI2khixxDo%d76UxI3;u0BFVEpQ*6iVRqM$gD!+3nx4uoHtfPZE$-HfGtmv4XznD zve+y`hoN|l>V==5y2~#Be`kvu-@=3B{Ea`^NJtTbsE~2_r{CN@!kg#!M0eO+w^!4) zU_k`kpEyg1IJm4J4Wb347S=b#EcKzDYTl!6!Q8wMhK>}+C1VXk;6q{@9It{U@6RFE z_pu8EfsBBoi|=VnEyMYS% zjGv5OWe@vLqOZD~p{0qDGo6x)q4S>we+nF(poO!OyosZbosGSn?H>SmhJWCJS^nPl zXJcpipUa`9aQ*An+EDl?bOrNn6yb!1|3f8`lw#2dA5v{Etd((1JDjr)|5X(d_$)Dd zzI#@?x}x1NgQ7M(14XtyUq{MxW_vmy$*{AIt!az(WO4(Es&)`*QBa$Y;Byn}mIQ>KH}hUSLYDA>9r zLIz_NYJxH>V)q1Tg#OJ|$cQ{Yf`3sEV5DY@b?_}aF3me*6mtu$TEhuPYzL*U7J1oj zq~_7XNtB_cg0g{PoTZfN6j#rym$U)#b}GBD@X zQLgar9i!+iBuVM#&RJ4wMcz5_PhWb|t8H+Bw#j}tICB@uYBEPf8Q5t3q7`~Fd!z4| z0nepX4pAXWdArPrG7-LGd-nXLLf#SVJ$-Z3=j!7JP9Re4_t?81Wk2g=tWnh+=tCMN z%J2!u-4TGF?WH!Xt*CD^rDjraPWf-B4pStVvXM82I(6$=4wqnz92n$(61x< zfVy~L);H(;KIM7u+GV(*?6HSWs_8_@_OSkl8lQF5pFXCgF1cZtAZk$Nn)gO zp_PHv&M#Ud#b2dsj{@)9RM7J5L@D<^44UHg_T)ZF+BrHN7`}Px4%Hy1PJ)t!y0 ztgmyU>PUpaIKw%R2b)C~U8*22WBu8~?wUy%$qDU>xtWmuHC9=g5A0$(HO1Q?ibV(N z7JDkvMizz597;Y8{%ReCrxr|*|2*4~UwYqq!@Ns5Jq{mrBHKrUT01q6?*X;gU)2Y)0A*{r>Hj*RURQvtg1k6KHiW z1{|PpkU-3|pYDJ(1Hqg%`{KAVRv6){IKnvIS>|B*f=mj7hBX7H(QA&ws$apN(W%0Z zyK&7e6r^`L>LAUc^*2H}=>nC%m`G*aE+!?@GG{!;>al}p*^_(dw3+(HC9&w?^fmJo z4!N@kIIbR?-W`vhM`@pU%jWN3-{qS9bGqk$-FsDR z?chs4KK>#}3zB!uT!6J=f;{!OyC1-QrQP!wdexuYsKxv0Y&lYjW71kYC@ixQrtg4!@(X*yBXdiPdMwPY^Eb@gYFU8>W=Q-n+e##D9!Wcfi&Yf8}(#1`zc`c{8u&=m8 zEw%F+V!)&j53^Wzs;MTDE2)iZsHE}fa=&zl2&U1KJuV(5GFm^OjC;0$i5gF()6(2I zVO{)}s@7qcNu^r-HU%u*w#ksdV3g)kD>mQJ%-5ydD?w{of^5N}eKIxuCQ!0(q%jdb z^N`lv{%9f5!4*n{1=>7G3iJ>1e1&VEr}^}PE2AS)mZ#5H9_FDV=c6OtK%=SRF(kNF1}jyhdt@N#<7&t3ws8AWiOwPXKx^{5(@qhn7tc+RuIBVD33i{ z$8cuyzL~WRkw(mHjVJEMlXsS4AwE=|pTy+el3N9DXm+c-D2CpN2rc@U3a!l!8LCbLx)%W)6$_4@HUHZ7umh_-zK%s+v+a5MSa+++zSa!zl z%9_G#tk^Htsz7M~8s{Oy{7k#g3D%6*c+Lfif7TrP-lcwqm?RT^TFKWXsFzmUN8BDw zJcFq!*D>9?_5k%)+j7E6w+{a}L_FTB@2Br5$ zW_!`?CGPj)*9;fzJ2YiK1%Z>pl3BtsY$%W^ey!7n7Gcvq+$lTTodwRd%{|y}>aktI zGP(ei8MqkG?lTH>X{(c>gao$MIbiY75u`yXs7Dq8=%;nH6&Bzv5H?Vd+e*JqFt5?? z;K+IU@q!@uzMjZspCec;ffM+0Pfh03TY@<8L~*Z5bzFgWZ1o!-^1@9fX|H~(IPjt z))rl&(cn_rXfc{ezjTkj?%$Q+vB3lgM(cRVb$s08?R#qM4suTyH09PA8Ng^+UDtjL zobJ34=XeibYHJ3D;Hp%JvBiCo(0E`vnIt8w8LkE=&ON1Jf7Z~#t*dL={ybi%?zEXR zvhCK~jUW18e!YKv-#)ehK!pwzc?=f3p@7!+2i#w4sp#G<9~3IV;vr*Dnv8$V;J#*; z;+2eT^l;O?Y{z{(w2k)Rk* zng;>^Qg-bQ65SPnbT$JmYRtVyE!gRHh&4bL!%*td0VkU_B^Hh6v~As|7oI%+G12s? z=S07#kY~T_{eZ^Em?6>WRRy0!Bn9)mI-4j2h2(f z&Az`4Ksd$JNU(Qdlu?r)US5R{MXN6Vvc&`SYnjoJWO=2;t5vOTX-FNCf)D5nQs0rc zq7yNJ{_K*m8pH*}=;kaj!MAMW#@{o@ZPix=$6WtOlD{6rpJ7nXiGv-^>~izh zS*|&g=I6r01tq7SgKfv*1(q~;V#L421;7%JWxKO0S+nX*dW z!ODQrAm08lNyyNOH*46@%G3!qFBf}TM}e!;HPXWZYY(H{Vs2te#K?l)ag+S>eLvAl z47q|>Ofuc6h#bHCM~8lfV$Dwx;dn1)?=(Ugz9B9A5P3}k5$Eo!>Tlm#DL>eKUCjy` z??aNPU$yXt6Q|XBifj_{X{8r(h8!tgv#Atz*xaRTs|ioNC6>4u=(#LT^H`#&l2Kur z@}FIsijA4~dic5Cxf$4L(G);b_|1IU`pcUx9M*o(1VR_ywIT00nueK;V&e6M7OUAG zVAVqzv72V~VcC6zJBp39D;LIa36?vTI4Jh$>zG(os}pR&_4?MRY6SRj@|E=jC3P2F z5nLlkrfV9puiJZ3<;-{vyZy9*{x(PvS3|&@zf}!=3h|xir`^PR<06>%58AFo;+a9L zLFlA-<6dW5q$JjQag`}x(OZIDo`bl@5=`z+c&7#%?8XKzMl&1Cvv8kjt&!rAI5`S_ zjwby_2{QBW?T;~Dp1cc8JlD}JN2YplPm&C>p^OW{H2pQpJ%zn?QNtp?9tkK&usg4aW4UWyjHq?O(nRJQ6x0-1Wnts8*OH} znnCt_^n%j^Cw`faZC+J5g2NgszOFu9y-c@SZ2=sY_u$2Z=Femm{l>Fvy>#=n!Y=^8 z@*#0+7z&NBaw6e{1`5rEVbtIp-D^JxVlea_GgmTklGC4+EsZb^in9E`4&|nu5`?C) z6`e}qsy^4fP>BePUXqLZQ8z}Dqi*p`4|3Y0*i&rlmQMN?FXun==>KjaFtYvECIbE6 z`^60O|NED-hL-+0iJ2Wpbw}hy_P(03pEB#Flai2#Dg40mTt&v}qkAUOikx?Rdtz5~ zn{>fJ4_H96@icV4E(Ma@4(SMYFXDt>V}?QOUy1PGA_{u)C~zy-324^sBmrPgdc`# zFs*LzCbQ(;%Ch!`3JN$OS@Zt;_y(?YbBJOak^Ji-{zTW(wY26cM267>9jjGEp$X3y zMPW{<*&@WLLVbQ(-v!&kK8vBKZv$q$Ky&7D+be|6u`=FhLReS|`ewN=gnnkLpWDZJ z>JzHV%!>%>)=zlA@)0jXoi307|3xtWV*SH^AIyIkLJai(dpkNPBM739Ri>ZcI>LXc z;VCK&9U~xn*hLg)Zt`?im_`I-L|rJnn2hfjPSiPyUK{>_FYOURwI#`kdwWvh037|0$~Yt@FwX+mt_Fu0R&-9pQ& z6ZV`HLT}^`mr5zvP5-f6kcY7LbFA(aa7JbLm^6-*Cy3r_Va$o5;SW?({CZ9lHOGPL zahI_0NIo=sL@+T3MzzT5Dkdke=c*n@S9px`YK2yIsMmdBWBUiI)c%eAUOEBt4nQ~a z7c!^>LWkCmRH?>bo2cm-M$;!FszMT2?GC_L6dg#lljK+`14C8U%|z@g&8nYxR>OFr@%TvXE$(#>BsN)z+e4mw~@TUA4Id6rb zCE~R=V>9Nn+DDfsXa#p}pwshQKhU0X$FMd(XLOZFhu3vvRI!o( zkwd#NQS_OHJSX1bqv|C~oEMmx&bQloK%TkNCe_Bi=wxmPMnfd9($9?YLAx-7`zuaT zM{e1x;4$QZ=Lj7|^abwTgksp91?g884BB21rw`0x5a49x$GCddDN zx|j!&-gbgTchogV*yE|zdZ5F72C~BIq(=^xoiO$EluQal<|?Q9nB&veDHT?P6G(8Onh=R?gz2*6xi^mU;@bB=E?|H)SJayxS4K>9%oURiedC4H&wWF zBl&e^uq5l@_W96^1!i@`>*477kiV22{mNaI$mjLtR`MRA_u(_Sd4Rwf@TfTAsGe$+aEoK ze=B1Iu>H~S{973lfb9?c`nNJ>0NbBQtp9pG76AJnmGf`Mu>#otxQ~A;V*{}NVY&QU z89RXek9oa+E8_sL|K~N+1K9red4?}YdB=Z}#6;pVXYi>>pw zK*<}Jnb64_IR0VR{Otl1O`Pmp9F0tz0DsoDBAtwhv4w%4o%?4^|8Xm99E<=~2FA}S zRkU+9a5e!jemdMjpV9n0#pnP0dBy+ojsH0_`9}(wsD-t&iR0(fVEuW9za^El z=$QBjWBr>)1*RPkWJ;o6&Fo6ff6Lm%)L7$nDIPMKkDwI8Aaf)7?#CFoX`+O%)+y=? zV;JPm3-6{Of&6Bjr%Nw|m|wlv1Rc?%*jjLlsg-W>^;Q7Q6=_xqPuTh5dyt`FF5DLE z;$y52D@*NNuV!2^L<9vpYUT8MRuIWUTX!k&E>yxykgI|Di^JO#2?}uF2BM(r4Oy>c zY#9wI+?A+zuD7Y_xV1z0Theq1$*?g00W9$q)HfLm(5EL}g zFDax60>qQwoPwY}=N03}C>Qr+Alz#$6`VwRfu3Ut5ZE4_5l1K%IngQ1N-N3OoXV!D{!~}nUk0D2N+oDk{*H|Z+UPmx9-X0gj10ux5 z;aQdiJXW$;x1D(hxR%-C`HSM327!$&n_Cuyzr<`4p`B`v(*3Sfl^w%R>VwT4KiP}o zPKA%VQHP-%36Z|2u5nja#{(y>B7rd!u1E=*csWAuI!@nFo~f@T;2%ESnBaIr#>rH$ zKHYx-yR4Nb7r=`Jo7|zW2l;J7mm9Z-(SS*d95?Vse!S$E|^Ex^=o3-F74DgNl$%q2agXC!ueVP z2|*cB==c47%gM%P#)i#LlMJ9FT^vQ>UI-$l7c6Bj=cRu3Tdyr7k4rWBE~u9XAH+x- zW_~B_lS0x|ZPqe67dDlQ0fBD1Cx-i`KV;btnL{+d`W|wd+}9ZdL0Wk|m*a#-mj=$K zt2aS4c_QyE3E=CH<~jvyT_I`r`MEQ24;@e8G3i7L?&$k7n!pY99@sF9)Looe8OO$p zO31jbRmTMtq3*B)nyux`gyw)M3fqf<4Zo6eD?~=#;i6D%cwcT5 zne+)B^u&B)t6Sy%Z6rCVt=`M`E*?O4W3B}z>sS=tqyxt036|=7xx0{@eV1H?lhqO3 zRw&USQ)mC(PG)3eV*mf@C$s;_|a3*$cRvRze} zOMANhbVemSG!MMRL7SJs#}kos)FK3{NFmEow^tEqvZ>NZZg>SAL-LCPJ@LIa@XQL0 zyHCsypY{^86Ci913YC-=wl8DI6NNY3Wq#5SA!r{oM;>4m9~<`M8!W#%^hEl?E~!d` zuSZ#F42EE3N@RvU!s z)puv|U&sY?5hCJ^z>H<-fdUW>P{Ji~{oQ!^*Ir7f z%4aOmXu26y1$iVNGFIY1idMYxUS%Of&Y`#Y_R6$v#1+_L21|6Q{_(en&z z;VQQj#wOXa)YKeyv^CjCb+Kuh4NCg_iU^;c_o6W588DL!Q7Xp6F(b=jcThX4Jnhnd zmXAn~A}=hVUev+4tX#TvcKD%a#5-G?xr~^l$hu?o#(djVwarja1~mpV&OcRQB+nJr zu_d>fbGr2PnDL2Ny;x$_$_5OLf5kqnvW7EIXw9^~$TAtEc>0N$_6gEbC<4wtOD8fG z=x*9^YTG#??k}(&O(Uo98|LHV7*iS5Ev9+va%$H4bo6y;bfw{-f1VQY8Il1p!oa>G zOV4IWtu1->Js({uj_>npv}mj`YHBTho$-u^kY9Z!q8?8W)XCId#;f9-C78gOxbLkf z@m8!dJ$I-LhD^zZ?LiOU|1eYE0;bQox*G6L7!V#&l?08JOSA3}Lzm0dOG`+jU@pHf zW}BScQJo>%aFPGJr+}nnk5XIMFEwj{g!qfs)j8dM&Ug83RIWlePJ%t8&7E5}iJS~9 zxzuqi96pAus~R@-pm>nk=^n(rs1x2fdjQj>5X&jbon>jPamNNJv2B`&HeobE&rGR-e+oXp3lRimBqI3mex&YIC;J?wO9~cqKfMgVgSTxc zBeVe>vQ>=Ijm3Y3_$i}OvQg?jrhHSKiO<#PQ5)IBfVfnilhk3>o(r58j!PL7bbzZe zcg}MZtaVVoPcZ{+0A|It!WqafypF}l!{V_jbNGQsy=d%#^2W&Kwr@FnN7T?1cA)wD zP>Z7+5{u$dh3#$~oTf%eu)I!?l*pQb_1U3+r;-w#KAuP_P9ssFM}A}o z`%eM5zm^%{V1#3TO)o&(pWs^g_P|pF+OowDOq=^i7F#9on=L;w;~po=DqgwOBp1Hq zIk@W3qPu+c0p+6ndBfc+67P>VieYSTXopm=i~(34+IztxLVF>Oj=V&KX-_4IKrn1pTzUjN zty9c~%do(yMNgppHaw>RkO7{K8`q=?L<&NHhzL;@2~2+aS$E{lV* zlTr)&GiaMd`z#d-m?DhIStKq@t_)U@vykXNZl5Go7NMha4C))HpuUx7^YmdO6?YS? ze3oFck;2QE;L>XH%A^{kkBNXKvmlrcj$bYvq<((Y{v2Q~b&dqo$k6hqzxU$}%s6$NeEKFu0gHwGVnd7J(l_;H2*owW`$R!YFRX z533+`;OfCVPR?1;OP%(S>dnse2)_QrWIO;ASH>N`O}8l7c+p)C<$gHbgkgAUn3jJ} z50ABFc^6W2(=uLn(r!J~ei}rnC)X)Km)3WBLyOftYZ3+;iBN3#%xwg$E{;gqfu^CK zs1awA1Y_!eo^O>V$TsKH)0L)Ald3;R9pJxqyxbiLD+&uZ@@G7Y2W;sJm zU@M2a*yRiyTy}%90{Kr`K4I&h8R?}FYat-BrPPw#iXKFo^z(1dPqCxx*GetpEC|1$?x5gI)?6t+T7sWRjYkc`aASACL`(nltGk? zU8z;3;L8Vdfej1So2P=qayrO+(elF;$@dPLAwisVW&_O#6Z5gfOO%;5o^i3M?`nu4|U`u2eSc^2@4; z&ylcj#4!D|6^_Y)_7V%Nbu2ep5%JXZ(=N5kk5~8GquO_=jtcM(qThwuvxxq87D{Q_ z4M@U;`R?mO7l)bBz)2y3{tX5fY?`$jM7Hf(Qe2hTVAe6q zr{v`sL;myT20r6iPXQ&_|Jtv=x6>pGf)-K8?WyE6O%MM$j)!xpu{Z=q0&fgNe9DN?YCo9XZF)5n)Dsa>4lee7F z!^L-q^zA?+ghu4{0N`i^G{H%f=7F>u=h(*=RoAnzsXiAdfJ;>u3YcML--bOu2ng?| zW_C_kH4jZynvrX`zIPjQQ%FZl-iR>~`_>pu9LLeYeLASgy5IXciTlj?jMv~=7MN?d zy&NE&DY7`&4Pe>PAi=jq2Dq> z4z~$VlI$|~7%xXnzEA1!qkTa%E_WMU*5HMiJot28*iOYKevcMP9_ceM-+Pb~PWOHN zBFG7H-YkpXEXt}AqU4Vl;Bp#lcjnYDy{>ESw>}_@)cF67By4%`v2a6-PHQ}sbk4cW z+rO{F_(n1{B}){rm2kLhD2M<_eDbg(ByP*}T*TP-{!XX#+qH;N<)sO9f{c%k_(kJqf9l$8?k2{xE8?1I zn@j@=*Qr{)r;pe9X?uP!SwL~(ZSkvHJ|LV}idvxNl_t$+-can84I4G>2!=&T0#=pN z`e6zSN67JrsY~{y)>KU0wP6)Mohvt`vFGv7QC8*HAv0Y74Jlk>h=f51_6JdhpU7u| z&dK%4Os6;T-F_^1|fFL`)jb2F13$B+zo%w|NG{g(WIJtVQ9&HHN_RR5H=ZY1>X`RAF}t!oFojo z6IV!`O%#h0B=aOSM{of^upvw%tJWcJ9CB};hHy)BoYf`XOAHZ!W)XDRHRPfbu$k`9 zZeX+9rUm@1u!y4}AMXsqXCX-eaQAS@del7Ab-eZVC==zD7j28YD64Ma)s+ z;V@HhX0t?SHWYM{Kp7`R&(Z0>Ge0Yxm8WfPif6~WM9+^sh5N&=)ozj?KN6S8BpXKV^kC95bs{$_2{Ei`KV{w^ts(Z)2bRW zkr5wbNOtm*)d~|U)1NiSgOGh>&v#GNKWls1r5e9l@v*O3i4(5?(TGYLj(4>fSaGRp z{&w)|ZPKM*KmpY_$?yOsa*5urYs%y_Tz;O<>mQd-k5PH`n@@g_3wqOAD(BwCfSFF$ zovQ^#8vi1zYba@5Ja0sbLOBqcDYt!$!&S*$9_R+lf!reb#-`4=wVvP;n;?-1*$_=z@@-}Su0J$6SC!*S z@(waFo==$8ZarkTOnCQS{h+jZBKSO1l^7c|kl6K^yPgHB*FU?-F?Y8V7q_{pd*U6P zAzZ;D@J!K`AqXFwTmCVo zMEZ-li7WCrWjyR7=<*ZROuqPvr=00B6m2CUGO2%HLATn$-7LeEN=}x>wxyrloXkwr zXJ3}*) z#24PLSxLJ&k^I$eSHI1+w*Jo+L%wF(imu`*`aUh0;zXN*yRHESWZe6TK=U$|r{OIB zN$sIm7=BwKnricSwm|xa%(?y++tPknPean#z&n zdzHVq1fGXUo-0}t(Rf~^TRz@48EnA{$S96t%ds`d%N(331hT{Y3P+SsJE4Lq952Np z)Obpe_aPWc@P07E?fjloZ*GHIjgQxgEL+nzK>NpEc${R>(|w&? zYH1>swFmF^FnU_#W+9`NnPfQWb1BF+(7FRhwWWJkLEkaqBo5I^yxbe#TWl}=#O2Y`C1*oWL@+% z0Ei1`BC1fgi6yR!Czklc=w`|HQC=xJ(TJ>k@Koc{eiVI|=7}SioIOVa+2tr!8_6yx zpC$&ZnGBv??H!J)T=JK3dny>3^CS1D#oM#}V&)ulLru$rk8VIVlAV2+I0{zWF!b7I zTGL4_*+bN^*Z7!{r&@&w>#0qq;)z4%a9j7}9`l>rG5mqqT{LtU&b0X$qv$5!tI2F> z6c8;V5qx5wHWNA2^FZP+VnS0%41HvJ=JvsWDG$xnoIg}GPCxv za!S{QtQ4_!C@U~3?BCb-u};>Q<}=RJYSivvCE7!$mKc<&xH;B<**uV6H`77)?xP;I z5PVigR)fte`?yN2z=ifLEe#@5BxjjvAW9>J3iWhZo4HMsduO>$(`fpm9U^K;(UE?> zGQhAWh5hFs(~c_e8!<7TfQ8RfxDr!eV^Pj>?B2aWr`vaYW>w4?knZ82?n|&`)KQI#!s5 zJ2uOgq)9M-eVWQe_GQH-iOm&Q6|*m6_b*FM%L6kZH=n?M(bbJE68_m(s95kTBdOlg z_qq?npH-v-(p}C^A8{yYBx%Jd322S?X!l@4yE_QJh+9>wNd_TQ zBjrH}mGJeS!d5fEdc(q2C+(Y&MvDIsNhY{o7v^K(U-w%PGg91Zy{T zmpPJY&@4=&5|*QXgN&G_J8bd+gqwr9H$s!NN_8hc$dAznG|;i=U5zb_2iKw9J6q|( zk~@0UO)jSC>g_F|f2~MO08sOZ50st~)4c0d7mNiQfdMbXQS8VA=$PDz99dXD6qvGx z2Da%CK)U-CZxgm1ntd+RXiu)77=Qn%Qw#kR4)0lf(^q@0qVTd}Hw)!1V<;!$pRk2k z*urSrsHK&r=QltKGOpBbjqtLeW()3a^+2eKN7$ETV6O9x%BxIWHU%Q{J^B|{gI0*u zLaY{NRi)a&O3k-*Ef?jddWCjS zWe^$DmTzycM*k_S96b%3W-Bj9B+hMxN~VtF+^7*}xU`3iIrqEBK+29mO1GFKVy}%12UF5{BXH7x@7@SB{|0p~EO0 z3$<945~9)8KUcVj4&^RaS_>f~-rrJqM4Mt<0%mi=CYtr~D8%N%d+PR1L8uI|S8#uV z(bmkWuCD!f^m&QjO0y^dw2{TJs(FZ^x@@1UHj_V#zZVQQV1Xbr!%z``pIJ)?m>>5N zYBcn`ND(UD3dg3>2At!M5p5dBzI&bka09MdbTZuBKjEbBfR4>;)<+~CpxT?AF%d>P zmZiEnYhITU+jp1=fU_FF63Gwt@|JOBrR+&NIG;PcuWpVU9e z5YLF!$-Tg^_u`Ps@?ZJeerfEvmo3j*J{uiVq=S^+A(=0^26lO+RV4gZrGs!OqYvk5 z|64~pPfr(6NBIWUu;S@3xO;iYWLj+?39A3hYGa8*B-DMBmE~ zAF4T6c=RxncFMU;n6*4deANhFA${`k9gpHysq=}$>Z_`&0q?wek+X58g+hSl0Z;wb z86T$tX$ja)=b=87op0k&C^~M_=7a6-LYt3e2QBjLE1WbK*g-$dgWN5_uz)O}o#=E4 z`X!|84*F@`Pll&KIFq%h#OPOot6Y@31=C1Al|svk-8dC#pbs*=RF8f!cw5d| zu*yx8JIR`}M7G<5kxI5g33CIw|SNgc0M|@m*bw zeMz#qy$bxB%1=eOH1h}C(<@2h;MzRw8Z#uv!+&F~>p@;Cj}{NRp9fD_X^!wVQhRcZ zrJX2<7(LmxeDbFFEeDrYoec-`QADM&g_mId@Hkpjx;YPM6__k!wk=v3uX4R(hRf7P z%4rO~;Q<}$&0u1dx@W8A50D+HN!w#I^4!}Z)G2D9I%PP-9Tc+Sr-7=9JS%P9L_ls4 zB7U(k79Lx@loFjt{3_Vwe>WM6BscAac6hjw&g{?F79$p3IS*R6FU%GdK`VO?t|xI% z&lf*Hsp^Pk&U$}|4no?1eX~ct3`9Ji|s)U_`(4Ztgu>$2pg z0}P6_Yx(U2SMV;s4A5@{!qpUkn2M*vr}D?__aZNXXrq)4(`H#Pf<-K%#}ON8ljSS4 z+*x$c51Iw23qz4g-Qu8WZAY($jaaD*W5G%*odDAs<_ukXgH59axcdv6qxcL>mn%=2qVKO3=OxM^h71x^a|97r)P9Dn$O@$o1w}dk`#~l%qY1XvoOGYTnL%Q zhEwb_L(9P!U&|4emP#y66O{8+?SE!2_* z8L*@wixo+;;bP$T^l2fRdsHn`n)imBJ=9MDVD263Cs}e5_;V_gZNM$~)s(~rKaz>Z z$q$KJW!d-^w5G6un-<5hI)aQ}B-hof>FHvb(B{mICv|qJCE(A-<}2b&jp!-dtRwaq zmsxKulC$kbPj#GyErcSzqms)i`LP}RQ?XD2_S41DGaOTHQI%-5H+Tt;+HV|pVg`UW zTzmJpGp+m>Xe@@~ktU=?@O;0mYjgn6_`ibLt!m7yEqwWA8ol5lnEiFq4I}?qZdPI? zf0VO;%?!u4{A4ycMoD!F16Ebac>phOuK{vHrpUtKh`mpyr^r(@k9GZFl7Kih!-sK~x&2vIj4 ztPxO6jgu7ByB%lIZOpV=54`lX4Ha~2dB@O|OV3f)m@x6o98`l+xczNbH+8|T1WEe` z(3m6SZA{>nv#btpB+@#fV@V7pUAP|@XueMCZB#tZQZohLlW;cTmo@D+UV6EJWdKoa z-}ATsynm-<{hUgtAYn(-smEzFW7ajI*K@jsWubxFHARKqyb#yF%Bx}anZ?YCMNh9Q zIOG)oUBRoX_BnpHWF@AkY)#QT%3mHU>H_FS{A+(WuFQP^;vU`hiq3if$7q|ZFa*M{ zk@mF>vhcWWI^*8!btzL9Yy zjar_M8G2BuckteGH~0Q-SA|{wP9n11jy_gXG?;b_yeC5rUyc$ETV|ePvu9J4%F%km zD}?iKi7SE4Hkd;!pv0hYR|ngx8($G@C13pV9~D;7bbo%G;G_o`Z*W%?&HrzoSr5ZE zFX0S#TTEqFUx|^wD3K`C4|!#a%n<}i+{c{NWNEL5&meN~DXs)alHH}A%Xb7DO@;V( zyKoc6Ypi~Ps%P+N^%EY=irLP#e0Id{AMyo4xjktEs-nF(cu2fZI4#i-hT#oVQCAB3 z;X%B0D}rmv-)R&F%!7SkL9@bvEd3l+w8raX=SG~Xa1~@7iCFrFwF8nYND6~Y> z%XHVIcdrmI(*h5;7iYOB_`n#L3#$WLih$k*iVdrAc=);yB->rNCDcR6Gls>xozfc$ zrFnW7o~)&Yd9tQjw_4R|kvN@4t*VB`xQiYp9;S3@@>ub0=Q#>~ZZ33>{)VR%;GQvi zQkd+5fDj8P;fDBRJOz;^rY!L@^A9c^msY;v(t4S3W!y05;G8%Twq#NfUoo9XAU@1RX{BSCw{LT6<`~ng6l^8yOgePXvp|F@mT8Yb`Z|6{Y#WJ_obu|$n$ zOx0k~!KcC26d<2jW_U)Jcoq$+N-WAh26rYEQF==8yd!47SUP)({zc;el=i;sEm=v0rGC$9pdB3fNrw2YWMY=$@uaX0jx0YStp^vKMOE%iF~WxCDLPdlrdf(Wa0u>9=}pvMLxMVb z#Oo&lJJD-@{?{W_dk(*-Lt~nmrgNHpy^DAssTyU;C0nwCVZ=FYQg_6~oP8D4Afm;h zXhMqx^mM63?E1!sdo1W=Rzabcbg7fmKT2HiV(uCgr?Hwu`&Dz7SKx2RyK990ExA`e zTTC#W5cn<92X*!COa@C<-Sde{Y4LjUnk!;lN|w~A(uo8^fu+RO^5fX>fA+W{UwaAg84iuz zNd@j)YE=Gip1z?T5T^Y_)#`8oi_ zXkPR@)sQ7{X~Hn)=58z_NtXj+3Dq7NKs*9mb)I{+(z9eiif-@yfXq@Qszndn9dpD+ zhPY)@;A_*=;w~S6MX5@P^)PoQve_osJ0tlZ)1-4_Glh0c+5BJVT|Un|eKb zag{Q08RpmHa4UrwVjPXH^u~NWCVb-S`c{vgj_(hCh7(&@94eF<#C3nxu1zfOyg|G=RCI}6gsJPkt?)N!DLP-eumUrlQjZZ3;9OVS# zQLEOsi`B&s!iAe%u}QDurKi3efBy|dVjj58*>&|0AioZfRU$a3ih3Q>s4e;8j`^;K ztyU9GKY6U`T^qn*tJRc*BOu_78}7%C&Ecl!GH5kjBYV`jM0A^{{OrwbjPUSaZn1p{ zabnWG^MNo|S0^4`s0vkt)57d9k;^g!h=f1EAdGEJRo{_y$EcuveeKm(jYv#xPzMzc z6SAv@gKUgqRF}$WkPtpF2-n}(Sf-c^?gv_)Ia=2ms$+Nx(gkzwt`@flG4gFOU)H^?hF!l}IiD^@>kdpn@jr?Mxh9umD z>DFg11*WD87d!0ZVib%lm{bvhO~?wfVq;HrN)0&=IuUJO3)$e}gX_OJ@a5)Ah787?*~%k2UZ_922_ z4W6b6K1oosLfci=}oa{s?&<3a`sXM4A4&EY7(#f0zY zlm={O8Bh_N_d&B}P>TWn*)jy|&AS5;djYXU#=Mn@4RZvKU22YAT{HzJ3>2b4U(Ycx zQ^z7~Cx3vPv9O3>U^6V6r#}7d1tzs6?B!SLNiX2Z)YAm_U(pdPK*h$0;Pei41gW-$ zXisM6Y+UPV{0klpaCsP3@YSttxM3+~rSR1tjI;$n2r)HY3$i^=)*nO8_g)`arl)Cl!L=p`vNQXI5(r11iDY%Vk$EO9?R5 z_K(~jtO+t_P|Kr_R(9J_-Kln0gI**;R)N*&YP%=A*napa*U_*2he(IDHXc8e$WdU) zto~mPQjy8iM5V_;j>gtcX0ls@V2<*}d82d+V%u)rZ(`38yUSpL=p-es$<^HntUGNK zilV=UqKz>OfTw#W@=aLz=I=9lg8l!ruOsYPQ@2&Zx;gCz7}DV4rz2%#)eTHsmv}M+ z(w6lq#h?M>aG4vtar~q|h0WkADmTn%l95zL0VWYDvxSR_SO8~j%L57Kw@U@7B~bv+A{tI$XPI%_oaA4sKG z7Cm>PlV=#Mg5E`8R|8nUcwl}Z588K+bLL_#vrDmuvW0L6+T_!iIL6NhmM#F-k9-MO z61oVh7!SGF@TiiPURGB+ZiD0m_R#cYGLGUz$rf&hvp}9W(h`)+Q-lhuF85Zk3%Ae| z&N<|vVlU95&AT`o4$kEmH6M&24ktoer*ikc1taiaegT`MO*k+KpfZtm_j71Ln_slp zahA>ajk8u`7H7TFtuP8bt!EdZuiwV`Tk_(~xQ1i-$Yg7Uk6_(nEP42SATh$WaFkv9 ziFjQdx$+}D@v4SEXfxVdQ1EV)$o4cteVR5zpCLWZu$7H7lPX0M5>J&*<7BYO0EmAa z=B`|?vPjKXpOJF?&Ai?<;WsE((_?@7SrN_()TzC|Kj10X+Go?p>bx;F4h;#C(IGh-Jv;a=h zxLq(g^M5U4pAEt_4af`Uf@>2;3Ike&ureGqs;eEgcy_Z@4_oYIEBa+jpyV~d@=s?n z8_gA9vmyVtS@jr`C|2MiyU%+q>vZFlPFZ!8Xcp+rGm9f!_bf;* z`Kl&mIfsm(wQ@`(0?J#}Gxnhz&HHjAZ#68?QW-_#eBlr(L`%YH;dQs6b_xw(%-f5L zB5MlEu{gP8DlW9fy?D#DUq=mOs_(Mw1FbFA7zWa%m#tB3wKDD*g$Hh&b{pM5R;b$L z7PVLiN6a@_Ky|sSSFVF5kzFE6p?aXR@Vb;X@8ofv`6v;4gB&k<@_+JAoYS}V%i!BQ z31=rOy4kK|w!fk(azY9XN*kadh9(n9g&JydgI-IAC31UnbJY8og}RAlfWqztyb|A( zd8Bo(lrtnU_E(g0uG5a-9W%jS7=y~$Vbd?*WcT+d{ymWH8cpv~%@@a*e7Q!QMC3@c zNzZl*?)5ifbkOq4L6_m^{L9p1_y8EeWl9$`3Gr%2oGkjjiFlE z;@=o1nKhn|sN}!Vhf(G2eh=5+Goi7#VjN+d1FGxM>OaRR-LI;vu>;uh!byr6P<~JPI`7oSKp#a*I?#v*NkG0 zDgP}54CBoPAKOc-mvvK6Lbp2t%P6b*mVfuNYC(&UEs7QyV~$?2kyXjDf=g79yQ47l zQB1PkB1fZrgY~(Az$T=JkRLttfls>SgPdCKS?hi=K7x)OCb*bw_mqEjR{_tUCm6Dz zNxE$sX)BYGFWzhs%8Z&-3G1&26E*Rq8=Q%O zH-;6K<~1h@K{ZCKfC|WJe7MUW;7NLWG6XuoCIx*^<=${?amcaD6bBXBhU9b`CMy8p zgF^tJkgUye!6=A~szRhAVpX7d_{s3rBX^>YF{(9c`3CC^Pa>m#9GsZ3?7sO^ zHyj6Y9Z;F-{$C}4fCV1TAw!0L%qbOIrW@m->)21axAWApYnz`S)cxi4`AmLl`EL*0 z$>l*)<1%G(bu3J|4)8!EDZZk^Bh-(q6_=R{ZyfaPkK8#bIFiK!fFwiY5HH**#?ASb zTn$LIDMtNEI|-Quy`K#&@iUE&Thw2=)3-3?jNq-2+6a4cqz**})30a;<{_)zj`IP) zIV?5EuMF#RQr!^IerMChBb>FC{g)zx>A4nn*zBrqj|+O+% z2->3_AxDp~9=V@jnQNGlSG1w>|A)LN)SLbBlU0YMgh7LExR>Z|QC}eXay+a|o#;Fa zc-~13+VG`kJcN;Jr={1us1ZV5n`Ani3F424B>bQv&G9Jehu3)?iBj;EQ69v7$Luf} zi8W0pp~_e_XbZ5|KZ8|-Ry;C@cUthbcPbWw$8tmI^aioWuWK0|n)2_&I*93Jn7t_Q zg@*u&2-GSHtlh|7(?-rx-^cjoBRjY3@3*T;_c*cR_xK9o#aDH#JLhir} zL2|!foFSHBzE3TS;>3s%S>QhoiNQwNf`OhYPqa(9`+#?%x@sCo+mfHfr-iZ{Un_*L z0smP{GPj5uosY=zFrftAsk8urw+cOeJts!)iG11pXDNJaWo{EXfPnVgljT~H)A}YX z567rRd%D#BxS3A7c<1DXzuVwO%nH5T;B^rbFA@Fjlymt2 zq4)2iA&p=)a}%3lwK7wGr`nix^PtgXhS$&)c7MHDu&{(=f}nmPbEa+u6A4SLUZh;h zHD??HR<8=g?k^3ACjGk|oW5DR|IhDHB4x(!*h{o}^>S0_*io!l)?K#E*&f?8&7feHE>6?-#;1!4b6}4M_Fljy zc%gjZMWz&KrS>nn+5@XdZi zKe6pXBJl($_`=5oB6(V&cMf&E*ENT&JsU>sj^$1B&zpFpK$OZ|vC;27>>P1BHfi<_u=VN` zu!9lHB;2YqTM!*6hmTn36XXFsHcN*mm|(S3aO3lm&UGrpoaPb#;P+(PCXR>IEa`Oh zxCuN%whM}Q9YOmgD}y5Af$KI$!%Wa)o1%ovX=pyW17s0Jv519-)@Na zQ}!ESghd0#lZ?H=Rk5*(w~%~70f&{H%}q9jTg&WZ zM(t-!=vVGo%lV_w_F5f@j-L(?Q*Cq22aBTWmtF&);P_1if*ChXi-w`r{%1@IsT z!T=B?#PcOM+3>MTm*S2Bt;E52lL6j5 ztDQ%;Drw7-ulky2DcL~Fx0zS~-zR(DyUD#y8#;ztSfZ-1{qvka@sY?$jJv>Klx8PLZo5sq$ z#@K10&Q>ipaFp2o3Wf2Y}#0S4}M>{}q^S4o?q^_&`F!t97?*KcyPvMe|o z1x_Y6eInHiWek>zvh=FV4M;$q)CD018D z)eAfSa(KD@h87fU7=yIn*>bJ}x$pG(25UhaxF*FQ9@?P2k$#QN+B^zq2E=HwX$G;? zpfL~Y8JlXEqZ%aPKl_HlAfF})BW&iXse1Qe535&N=Wbi`?yNL<&_*X1QrN4$aiC9k zL{<9uA@O{)P8ZnBQKmItmm&uDnWWxcR+aVw+UpJdC;2$lxlh9-wEuH7 zGEF4HtM8)j7;R~LLF89^h0ZHsA7M~&gkenA87`k5Nqk?CCWhE%9&_Ts^(t03MgK_L zk{~Bi`;XoG`dFgDu+iF6T`bBv-|)4dm~$t=yc=-&_-aj1Z7}HOivJ_93A}JM$8d~L zIBrF1Ff>X0#}j{dmok}naN#L~?S&F|>CIJ!75i8pBtGeKp+WFCZ)cYsxd zGN^K9F%1VEQ@BR5pK9meC8fz&v;&FYXZ{2M^_u;Q>m1O>K51v_ll4KPcy~SIJ&~l~1EejC~2Wa-Rssd^o zA+0UAA$xx(>b*Y~4+?@oQq%!5h~>bcJEaBFm4Wu(4Sh4Cx(S=#=}tRv{*z}1d`4hJ zX?*B{$Uded29-f}OyT+lGWr<0X<@xhd?U2^8mp##931AisRcK>GGXyDI;2K%nI1W~ zms!XrA0~GV`Po#KM%UtV-dfcbX@b|QvCS=@f|vZ76*#n4)BpZY`r&zW4altMA7NvUXp5hC?c!W_{DIq#gq1e2bj!Nn zknf7vXnQQ#X?vV{`yxm!>mfU_@_bm;jObgLrWM86#r4g0h2Ga4Lq7V`1*WcR#Q0sj zlng}mNca_rHSViMkDjuK2JipJ9MX0!vvA#l~s_o4_LXnmDQ8jl6BZaH^$8-Fhn!cS530o{}VD@`exP)OWz+zTTVSX z6^-U6;ehRVnBtb+3e7T&&iLI1UiVDWxy#pUJ*K)Lc&8GdySvh`Fi>ZTz4KS2Iulv+ zQU|y+tullFs$5db11qc&X#%{doIC~3Vz7s8C?_NbgV*bBdaO?62t>aHWF&}UiWbr& zyqntekN<=pluil3npA zQh8y!lGX6m$2~$S)0UR&&n6piLX zZy&A1!&@Iakf#G$cvhDq7*8U~Mx9rE*|#WD9{LZbLk=)Yd;iqf>e~&J$YyL~!nr_> z97Z$DHlO?<7iUXs%2O5}`$gx)P4tY{% z%Abj7PK?PQzpIeyFfbH?5 zU?cdDaEgbbh9(#v2i zg4}#l%X+`MFZ#E?hQ_)JYjem|qNOEzMK1F8|Gl}lC0#|myn#NL%K`t50xBY3$3*)n z#)T?>qvD-zI&sH!b%QtaF_ycXM^K%5yD-lSwxi8tZzz1})dWO?UUl!sotWAZ{Hi#= z;jd%ni=)!rTI0RS-@8qgk!&Dk%ya%;Y)Ctjs3wH}k_Nlv1w7L$?6Ttt2>6MVKa#dP z7O^V7_#d|e*9#OO34UqcQy{_B<*7315CIOM zWxl+4sqmTt1-2ye=}x>feqo^6^g_@w6MSM+HGxTG%uvT(W~?!iX^Z}#6_Pkg{X5%N zO!2%rqGOZm(z-Z7Axil&WqIMpWUQTIlr2rRuFKlRUAAr8wrv}`Y}?i@+qP}*vTfUS z>+5^^obKEG=bq8)Pmb}9T)EcFm^o)e%*c2$(S9>KA=TY0VZ!UoB(5$lAQ=GK0slTy zqXJobNH*<4gV4+9S<5j5{?W?>_VVRnkjuOgj5-Vac&aM!5dVi4RX>?~{*!m0Z8pRB zCXeM?b=G7Ug@=OY^45`gJC-Owo?gYvM6rGNu zeui;&6NZSkL@ji^jgiUlmlmE>-kjD-&K>?2D6}?zT&(vc#<1O>t>W~r1)hU}B4~1* zqCFC?!Gs?k!t(wd4~cw>Pfav?ZyKI7{e?Awi0= zQrNls@07oEl^~n$oaSUZFV7y0VSZdv5Pmein6OQ`{fg##^cfnn*IeWIa{}d-{W4YD z)=R&FonCb(QkKR0i@SyrM|uz&&TT&Sv6#tTk5$sn0VE%_EEKcPBAIe1Jh1!~#>17c z5P|5%89kZ)Qx2v=RGrOc75I%`XHn)5o||D*UKccnbL#LP9n zj#7v%TiU&GVlFiAj<}E|@T22GO0`U#&{9F`CrC6#Vc6}+D6V->FnBAZAnS?YJ4$-q zx5$$KzTK_&kw5pYC?h-)r^&p0MazpembHNbby*i62w6l!2KDkR$72Mm$Udz|4n+N4 z=j2ZlWc}H*SZ!K-g<>?60oSchtB$COL6ZqIj{DBMGutBCo+|uA211DR@a{)7p*!$D z6#=Jy{xQTj=D>)E`%nhj9P`T6hP1ncb*FuyYqTN4@8G9|kg(#Zui&xgVA@z8!q)gn zDsk0^I88E7Tz&*)V}zFfVIa!s0b38vmI|9{sy&0BijvX)JYB5rS~m?NOWz{^1iIec zR}=mOtObEg=eE!820f75H6lnwB}3^&vR}B#ojXM}U>0z3_`02nfWzHWvJJaw`XY;G zZ5b|vC^rdAqG zz@m|#1K*~h#JZ!$6_hAcfgMe`OKL4pYBY6$S@>B$WBR_{d6DuMkZBIHI zK(ocND}boB@e!3bb$A32ca#L-;P-YdR$Hqw;GBnS1#zHO#1C0K0}*PDkwJLr`_|*= z*OOwK$yfu&B7lRg#G^LC-HRNjgNYu<6e@8sF8C|^=}e|*E%G^;W0xoe3YIlEz{Ze!Ir7V2Vn7$7GGc?cLbAzWupq*wt zD*h+XBbVQDcFPpb;bs6DNd(lg(VT&D*!tsZ?ec1KVD zP-($pnv{WnmHxt`*jUt?$#-vB!r9DLgr8z!pCT z0buBIBC*;W@WG{wdQ8^U4QJst!HRcd;R=)a2gHtYqmep{*h=#`L?V}Ws-ApU)M2-e`9_FH75%cc+6gIq-1WrL`$Hg!7pB6KE+XlZo{l7K`6@uz+3Q3@(wa0M7b#1hJn|5@+1KB`-s&Y93w?!$rdi$>fepw^JhQXCk66zKu!o3P?4E z{(kFtwwljftV4bz09uxqy8(octl=^pf{Pa^pIlrW&f>dcic1EokPOmWV*4HonYFZ> zrK#bxH@mi&Wf56ql9aSR0>Sg_>>lCRAqO{TVPVhAH8lChf1gj7dzw$sGyu=enK8l$ z?7&B1u|Z9>+|Awd{!HG`(&E}Vp{sTWpA5$_PZbr-?GvTBh{H{%lo+eEv7B(aJn*%YrT;atrTK({gu<<)mB+F{I?I^#1mfXn`L?n~`A#pRe}L{&o_ zm(&S6x4DCdJ|iEdO!7Fcl^4Y5rTDvor`@fcZ&m+=@94w|L?-hNCw|AB%(@$_DFkJg zDru^Qy@JN{2oNJA;Bt8~7*NPkxJRYC&U;#3qj@+qy(3SU^y_i17v6mUkt)Xb_7Vnq zys_9mKS=8(e^FyyIFa^q8C-6O3)LE7+nc?tN(uJIySrW7jabs4qlS*e&o#m$cz$W- zV(VF6D=OXDx_c{38A;tQLio7SJz*xJqDO$K3XUFB!bcnGg7op$ZUUI8IDF#o6f%)E z`KkeNrSs8wnOZ-#H%k&9JkcjZKz_fuQXYbjx7**G)XY{&gytx;ziARRNEiEy-tSI$ zdQ_Vl2rfw19zHe#J)A7fx0%@Vn{O`1o6DIZdDuBC@a!-5rt&it%X5>y289lYn36h= zP*p7d(&s{;xZ0{x$-5Y*;$9dJ!tTILm?L=em6&S`PU|e+b4^;5mM%a486J1ZQS)Bv zi5q9V!?HEceaX@Z<2WQ*=3ViohWJ{4JzjAf#JS&Vc7a3w_heJx2Gv<~R(d%;;2JPBX- zpA3K?Ma8dof9-b?>~JSwi`74o<0nDSnD+@rtko4N}2Oj?-Rp6 zP;yQmnZRG#@CfL5z4rLFbA66BZ_?aFxfhs$7Tl*I@Y z0fi}d*pxfM$*aDrEvZ8I=pUq&FO@K`Ou`%!sXv5pwfZ+O8qTDtG9-q*TwH^`WU>H{ zVt;Bx-MU_{Sfmdh$}`;0b3p4$J4e@^>0Pu*LDOImgIlR8#N3k|<^ksy2=WOj>H=C! z&u7NCoenW!q8dB^5Mk5m-;*M33~NL3dS}vBf(|5|@E-x1(9)yVqN7kJT-*p7SKG)H zyKhZL`SE$ql*f!Vdt{LdM`T6eSFjO)E!KBE3iPBG*a>&F%0R@wep`7J#o~vqDuMG8 zt|>3i1$cSrEgoSv3k;!rTAZsE9>gvF0G}l$VhR) zs=#I3e^&j1j>Q%h8Bv#!4W3Bt6~;coQYV~Xyn~;f1^7Ia-x{8P`sZ}vcTxtk=u@V{ z#x1raEgB?I`3$CB#I?Uxk!`^cRFu2mqW|bcz~qrGcj%iYN~UeCcJW>O81@K;{bEY0 zbHTiSQb{hQEV-uDwl;QUJth(f)<+7Ee(q?zH>;U^AwWVf>ODmIF9VuWq(q6AZKG`~ zUlv%nWMLbUMf_pesJcMCI&^3=ixi#yX4U&4KNW5KF?Wu=b1n1rafNe;E7aZ5?uKI_ zf7DF>V{1McvV@#FphhZSK0s(FqXq7bnRS&$))mQZFljdS+g2zHVic{$3v1IO`6L-< z(rh?&^Tf97#2(mo$$f#siapi@fKU5gHjsg9#Nmt$<0miH@F-EID{=%9eJVgUQc(6* z;(P6-*rm%U>9^@^in{2eHMJF0;)xWBuzQmh$+ghRIi=i&*x&w}+*Iq+5Xsu13^&zz z+}8v%>xlvOGWqW7fKuTckQWScaA+MAP%2-%vntVGrQTXPx-;cwaX!iJEUEEx?lFUE zcbNMH!&t;;n7(P+0mPp!BB{rSGKaQs1y5tRX*|6@`BrGcyVA^gLqki;S5RQmdF~`& zD>@Muq@1+~ok~XYvQPnb1Yi21GNE!*;)52psyYBVTe~Xd``?w#sy*$3h*B4hQ=}L` z(Z%twTmmvb_I6W$-;s61ko&lD@2IyVH4KdEfEP7PS_2xnu`&YN_dH0IupNzK_XPC~ z@j*$C70BpGN#5pSp2!MQ$aclXMo(g)a%F{F6{sA&T_C5LJu#(2#3I|8)4MN?Bz;uB1hl=FszHeZ!Tq}6a$A&1rj{IW57|PIhbt)y>Udwd|#sM&g zL0zC@4xG)U)IY~tNZ}v4V{67SaM8+8S(qEI*+U@%wxW)dlvX^kNgY%D85zF0}Ni9L1rrUCwP?Ata|USfSr1yhR-11G4%%c(|KR;a&=> z-`IvqeU=Ob2uGSgM1{|23>carP8augDqJCsxwG=q0h zmHJ>5_EJ~xQ|E;=)H<^PK^n3GHucvt_i;v*hz72?*?WNyqzJ&&r|R80{e`{7&!wnj zclTZa`$TH-vX+njBQd=9 zYZtOz4AMb)%_A$%|1 z=}^ssBVg2_J6LuK=#hP<6_D5kq;dCH1_hgP&F*fRJhOPHX7<(?qOsNNwD7?}=lUng z1j_1`t||2P05{?f7B0g>`EWIMdpmYSmA%eu;|~)t>e0wj9tQK1NdZ*F1f*?DF+qcd z>9t;0`_!mlwEGS0|)Xu0MDt2!!gv!a=Q!+{R zznxfc%+o<7A;+^UOZ(q|kvqnjzQ|pq+Y6uPKpDyxtlMZ!EK|KwJW;?N<4^?U5 zNl7r&K${2p4mo@y59>&z{ z|EXC(oF`hI1c^Akc?73rXT2W`WBV?@SPqVSfTg7tIsv#zse#&1Mls!OmTo|jj)7{| za{=n}>(?F@uTB_KGk9Z+WjQ$+E=N(JIgG{!*b(Nto_a)!185cHm<&+1e3r0jdW#L6 z{F-5<2}7Qlim6hZ;KnW(|B2z91Pcw_RBG`-@H@PYn35i-@}~O?j~t|DiqW8_U#uXP z@>8_zTw$wwSKWHPe0&B;r>udTBnHhkII< zu~&DGMe42<+Q17PT$8UEZ2gM1(#}PbdcDP=YW@iZOa_CeJ;JT5UI`)klBQl!FjzMbN~$ zQWo^ju7W4!0zE7Rx!vVKC9SzObkwoR{wak%HkJDdQT#1}B?^+i`z|xEKp9=&! z*LoCbVbVr|6`19+PJ1=GwA&LpzM8CoZn4j@^!|wI9W6OXit4>HVs>g0Uk6PUx~Pc9k42_+gtl_(3^_Syh|doRn?Vi z2ChtSlpjv!d>w}$>VWsWyQP77vvqj}omi~SCxSr5X;3|BqR-KpZrV3yjLau-Q0*cF zkuL=?&sNrWsFcjssE993l_v{ZxxH_o*A24W+MX(3BbGBr536#oRBEh zvw-($;iX$;e<w*X^Pbzg*5lJB>oPU z#RgC1S!-3=wLI3olwEy`AB4SpQ`Sw|)}|@vYT?K4fh3>p7i7qiNknk1|bO%Ha?0Vfgfxjuvnq)>gO;&rruA%jwNRE;Gj4eXx2GKoJXx+9KgY1i9}c zUhHpVzs_2JTdgfbYA$hZRYQl}XVjA4SSLMj-IGqzjL%tLTM4FN(#|eHBn#5Svi}kG-37Bi}j&aKkvHY1Ugy~%4sbk$5a17 zCSwsA-}60J8(yu4(p9EF;uf?C0!MkaN8mvWH(um;N*C~0K#;JDzz0X{1rvTc5%i5W z6GpY#_KAi^n|dCeN>Z#M><~z_`#fYdJG=U3Y7?s6IGz|2prb^1xbp4zU${fmEv*G( zdTWqf!G654k1|YK8C03B9N59|ZiS(yOp`*jS>6E`d#1|sxoMhB5E}>O_pFc+p{`Ts zmVYeEkyWA<0~+fOv8N=u1nIOu@$e{6Kh5UwX0cHw?wQ@>aqXPWxG1vi%Ic;CN#~@P zZR81BUHMxP``kw5PP&OheR7MK+{zqFMu=wZ99+R7xHVa%PApxx_PFkCm=maMV^QeL zB6IP79J%Tfr0h)_BlF|2bN>vrU&LNtec)I%6K8B1YxNsUB_Z~jNgnJ;kM>G2o@6 z7!KOajX}fQnSzgPQ7_Gb=)e&NWuv)hJ0i@T?K-5^^?+xAUoDA@AOhb5^r{^yW(tZ3 zZF`eTYjXA&j5k^cc8iY+)?7<2H{j#7eo35g$(^})%HPZL>JOVl(`7UEOaPh0Mvp0@Dl#~te8+(bO< zAqDdeEsqYx5?r{oRvjd?Du#gCk2jF9&G1-S&pwW4>c5Wqn3>z-Ds^dUT8~0cOI1_@ zsc5vR2>3G804`XE&|kQI8jH9Hrm9^*$0xWorpD`()d5))hKsm7_Ewe)fRG_5>#cdE z0cx_zh5z^&F9>wOgTUP|58M1%v-I-(v2z(f%DP}jz*b8lQN7V$WkMWFhcC|j2d1XY z`hq+jY?kg!q?M3!j_BGQ=Irp{1j>PS=BMuCd%vq-2@OgGuz81BPU+z~a_Hv>?O2NK zo$NG9z#!h_O)n4md?DARi?_?^)j;sn?yt@|csZj?+gy=qAo4q@um1 zt7*;{i!H6qp}eA_-6V_C9T!D(J{^FZ3prSoXJ2RL9-&K{ydcoTXI5lsGdy3ba1myr z;_1w_8RJO~_Y#}5MXkoZuN$>ZB8(|Pe!sXPcTd{B1aP2Mtbkz98F0ba#JpoEp$0O8 z)@TJi020gX$Z0|l7E&jq=}i%XQAOYf#K5Sit2-T6imq)6ECtk;z&(XFx12Y8nSS9qgyT{u zGH_Sgv%u*T&0l8yQIhtWu;GDsFW{1MghK;DD!5oXqOXvqpiP=Y_fN$hhWq4TDSf~% z21Z*!Jo-&na_2^AsYZ4RW{CF|L~WMHT}`-fHzz&75b;zf%ej)O5=1DlL9*(IqajYI zv!v9NimQ-OB~~>Lw6i}7zA%Dx1GZm)f?i{`ger9EBAz|Q2mx(qvE!6sA33P+r#*)Q z{ML|#kWDHrNUhI9Nm9z9!hhmf4~)r(_OSY+YlIL$nB-F+4Sd#`aUSM4ZK!jvV?R*; z(PLWAW(4C-4dXFUHhIuBvW@%7FT^u++8$iS1hSino|ebG9=*!P?o~XYt<0b#ABUqn zF%2y&guD%vdpiPC1dJ<8S#pP%{OGKKx!mRFnpy5SG|MmRQ}mYFKNRb9fRuS&H-UdR zo(34fpvm7p3IWay=c3y>lcY4#sFVK9px|F|fb>iZ|G!WX`oBX({(+lI&&co}@Ba^@ z+w#(}j28S*R~yDZm$?yhmqgfV!A%`TjvMf}4GA1Ic?i)4u7`$+wfpi;wWK~*`lFN+ z9@t9f%NICeBRNvNvUje}OzqaO<1o`*?^hHwCmcQ;`6033Aa=yKb5Zo?pDiwwb^jqcDP9~sKU?yGET5w;xkb=n>c8PTcN%Jy_Pa` z+PKPou?OXp^C;#G9V%#rZ%}RB4(sFV#)A(YQdj`!HOL6j=JfUvlifr{$gS1Ky1m1!_OGt$S~+u=PNZRTT!3$wyZg^9N~iCJ+IB zC5nEPznO-gw3ouV`v~?Fe5})z66D3K@@|Bv7;WW?IYdfBbr-s*kWy0%h*j8_pp*k<6M|75rt|Zx4hL^p$j@sI)kSsdUtw zvifx3N2S z8CvWt259rXr^7!C5jAKRo|Ct2J?(cYl`!&$2q)W|XIUw;Y)y)ts*vFH?;&lW9tm{~ z$uk`_?`xV0&~eg-;vL65`PY#Iy@|PJX8@`mUZfR+?l{RZ<_UDRo&~rixJ6!Z=KUxw zg?Iwxp5UZ+IS9;2&97^%3Sia)miKNe*WV(j{%?|c`IK*%BkKw%FdbuL4+Jt2- zi9IM2=uCd$qF+;ydHK zMaKmYWX=*88plZIk3G!V%hL?!!*x!`^9D`+=v7skc3`_}YbhtKtm*5N=6Gsg!3~g_ zxiJ!0$kLUjN!2FPh2tS%$iq!sTFuAZn%N%Tc%~A;3g_r1WSHUxj45a<&Y(NWXL4p) z_yt2~-3{)>nAx9@<$eo$$LK%ajS2r2VSmLD1U#R34*p58Wv$E0)_eDEN3t4L`|d&4{fWEPFHz^EiU}Ym0NM+Yn$d+g`6ut^wEe@N)o{j+&QIEx=)lJP+tkHA z*2GX_b5KZekf^CfkKb#X60FAtT0PbX)}zoOHFhW{C_h1>#H_$9MIY{{#@?y31iWWy z*hF8tMHL#C;^hx+c6~w@3_=hdnBf(=ncxB&uKkS*5o$A>DuMt+Uqo&a+_l^EOdQL_ zrD50Q=k(fI{MNtWaNFb6jSZTIhk@Z(5oXEHgTyMFSiWyNS2&^}(#n&4a;|RS0x$Dv zAmfskXGKjv3f?(h>PK0ojRtaeWDkXm*n8eEDgb)l+=qK~JB>ZDYTl2=fe%0k!9EfB zyR7JOP{;7yX0VP~E!^G&EEG5kfHvc5w^Vj>?_vE7!`2_ymT`LZ+z|33LXWO90XDm< zWJ2XH4Lxj*2ZZ*6)02wWw;;m;|4lymS0X7r9n=4oV#)G9d|5Vn*8g}qQK|y*O?Z4A7`wTdIy)>`{JeOn&7KlHn zzpY1PXf4K#&NAh%o)#K+8kbaWO}Dz>4jitJbCJ$ZrbpNODF^yb+d9SXi{EhoXQ*{6N@tESHVl zQRyp9JmV|L3SEP_$>moEBgYnw-KmcWx9BEy8#wC_XjrkAzgCNr%LFzl^m7D^<(gaWZV2hum$=sY z3nbJ>-pxkeC-i#wkS0ugQhl4FiiI1^m>LJ6cM`zg3vN3LNyWd=>FiFdal9J7z%D+r z&a68ocBx9V@P7W0brFsv<`OgHaz_*EYg0kvKzZK$N$zg#)&{%cXEaFXcw_gv3y5^# zcm|43@Zo^YW&%-9$M}?rDB0!9M3p@*@p6lrfuv64V?}>irO#)iUwuDqLES%epc|KU z@FWC6Fv|O<8SF&31r%$S1uEec1-|<-W*_HX|Gd?KS@^^$Tq+lOyYr$Hc4}uu2t>T3 zD;xwoDtH96vP2>;=<8sz+%40AGw%kDH!gAf!=WzmH~(7(WZ_=#7BX88qs@Kly+C(I zUhGso)0i+H+bJFI{k-{t$}Tit;z9TzWhP;t`n6R{OAQZx_}ij17qfA*Knv@b-OsGNB7v4&-uL^eT$iMWLvc#;0!OjNb=S+IbZN#CHf%<$ z#B7K#-3RQpm~MJ>!4sI)Am=G+m4equx?g*i6IuHA^WlgBOa={YH1!N*CWrqfoc#qO z{b%Uj|37l?@4aJ2Hpagb_n7FJ{^QZip+(oWus2Y*Kv~WUV~Og(&!vs|J|tc``Fbff zE64q_xFrdcXdy(A`)7krl{~8+%Y1rYcf1#12b#%@n3y3SOnQC?li`#PbIB;oCnZ>z z6_=cV#a9es)cdD%%X$#}Xa0Ud1FK8f7`IAoc!WG%lgO8RQ?55T^ZbT)atSj*%<75w zA8T0R-@4(dP$^bPKs1SG8suAk2gGWnp(J~yvmFUsnBEmb^KypS0sbzAxXj~UaKod< zJfE3P_P_NQtt70G4Yuv{utvNt(gh?*o7DKv$FH%3)$06ib5Sy-B?9oXhy6pB#G3My z)QB-XN=OMS6}_FzS!r&^(li7#vD*r!w3#nGp6t;zrMk+*9;svE_V(}1 z#TAF;6qyGWhrr8{BLa#A3AZUlr;niu{D4hy(AfUqN{zc+gA;)}~zqV-vy$82{PIqI>5S)>EjmOZA?NdD`O|nW4RnP`redhlvX4URC%)&RHT&VfE3dNmwGrNQ@~ZYcA3B7BeTI!>6_p~>AAE0K z1Rw+x^V><6z9?zjRR2h1>bikJ{K_5zd~Lb+EflZCC#OY&WGVoC)V=r;k&BVi!;>E^ zeC)NX6e+wURD<*A{^yc@{Wh@>(zVDDQ+7~j6-V1vnMr*F@M{b?ia}tBE~D7=77c<= z>dKYsN)ob842Gz98%kf+Dxx&EQkar`aOhSnh~b|F@#}*?1VAe8WAR7oUgbA-iWNaf z&SY~=mO6V_vY6?`FIpQ%4Q zaGvh%??#DmvSI{#duNyiTu#O9Hqof*({FBw;6-!9{yca0@k6-^(%IOm*u3lMN zjZNnbH;`HuNJ9kNsdLutsxCOwQCSZx7s6?hNvBIDLyDsq*TifeL94uUPxasv0SsDn z!QfM&!2%e_XLw*|#avN#8?T z6le9OTHm8r%~l)qp7V@X`#=vp9|}K~*EuVo-zp0I<4|e&%9fitqr%ZTZzrl?5|-Mk z#$L!|AYb?K>aJl7_i8jW18Q_ke{&M~fD86x269R@ciPGHs z*!aa`x}G>zsficay6(#J_(p791nl3*w5si_(65zvT{vCznbZiAs=Qqnaj`eJEX@g) zJ3$;5kKW`P8r!TxPpm?V!bI-s;IDF*Q&N4Y69e3o1RghZs7cPp`#rC$`$08BrVv?q zEBuHQCO5S#R(h%hAFF-#Gio&=(?Sq}O_qKDK|WQvrRH{KR*6K_*PJ{MOAx8hQhD_@ zyQ6N9#ITjm(RB%``{ynK4{g#=BHk?;%Ud3#*O8Y+Tk5|FHvd2!|9h}uXZYWy5|;mt zHf#)Z|M8AU9;oczLjwW_8;iZoSG5+5mmb2Ir`v0Jn~NC??2_b-fJj`FtwsZpB*hPk zi53PQ&X01^!YXp9yC3x-E`2)}^1Fhool)Zz5fpbZAL(#{!- z8|DV%bMHriq3MJgdtYJhKsVm5m>>;d9OKXz!s^sS6>}|et>n65T@@S-^e_neLjCI<#};N zIk2PqyYG2<6It27L;3X|JLo#>R%!e;kNCX}Rx9QWfMn)35RO~ey6|igPB1mNM4n!F z4IW}qHgY2`7i9R>#GsC-6Q8YV_a-G`&EAYW_b}08#=qoQNPc#U&TlU@CuD99BqG{- z{G(~)z+#09MkzA}Nz-)%t66)Sv=7vK{<1<3CWWu$D$!tFW&r#FLMHhaR7i%_Vlaqg$|DCXy-_%`4kGrTR<&)8VY+9=yobgS3Mi6z5%rG=Uqo@$c+^dKq6|iM?EUop6O63{7E~Dv0T%w0i1iVnX zVJ|*4wG{d$=L9wDiBPotxBk>ijsm>l9Q_!RK+X}yXr1=G*6kWU}%Y#R8=xvh_suws{Hne<~AM! z2$2GVj#F`MQQ1+ddc?54264{lezux@yuViSId}#9+STsTM{lx7#9rlAiFvc&5U{cZ zD#2+wkG8vPP7W)ptY|EITT_J zbX(zo6q9FBTf>rMja?q8K-TrVNQfzRO6y>`$es94C4#X74Qx|)K8LBQYU$l7N+qw} z_+R~)L0eK|!%r3US$EY1mpALfLB(tgvhQ@1E^Av-2))RHBJt&c{#hWR(qiSb{DN#B7*$<6K?CaxxHU}0?NNUP{%;P^K|+*;q%m{!2t z(Lv7GUeMOs&eq1*=9@zPUqu8)w!e>(=;{9R!O7?k^NgaxR#lcA%@5*+?Ow;#qo>OV zva;G9iQgFJLS`k6`^4!Q;GW|WA{Y*s(wSg|{g7WdvMngyvN%kpup^H|90|tv@@K>4 zQ=>~u!OfZpTD8!^W(oe=(B#k>r&Z@iUi$UfXV5=5y)wX9aQAOH9bq#zBZ0v%XIvy! z(BT2Q1;_=G;;-i|fm{aaL)i!m3aBdk0g-cDgsd^So&4Qe+;Gi_4ZNbMElU}X{9r|k z1dIm+RLT@P##jJz;wt*iFP6XrXTiH7@hqXR;sFd<2|#!$a&JS@L>)!YX5x`AZfPPa z5cpwm;&o*S%=qnG(`iuACv-y?3AVAA&g858fm)l3TTgV`cnL-D4B8n!f5qCU^)NJV zx&B-(C;5c;J-om5sH3T|K02%N4*T&Tv-!bP+2knYR$d>sf zmlr}cy}2~30n&R?iHzIrt8cdtfQf(o?+w<2=&P+~w!!`OWvH?J%>_?JCe<949K&^Kz6z4{Y!tbKEMK&vDDpd5Y(Baym^O^(dVeQ*t-{E@uE21;^z{oROk>k9Lipp)TH%@*3EOt-rS-DoW=w;iU9M zlL>f0;O`)0aH(H$GvaT+gsr9uhY(W!O=JGgB0<{!>Sr)AvivWfWEQ&rZcMiS{D>6| zB%#_=#6o~l`_J@s=HcO>)%9!9M{u{x{n9oWS!LclwjVuqK;4IT2k11pTn(~b+XN5B zGY5Ig7_(cyISNt=3zE9++?8GAS=P)3@Qg?cfENY4Au$PLm4Z!+>&_fM@T`i>JXmv* z+NMGQ*KA@$=&UL<>KlK>&}&IHdNd)GWT?Q0b&I>im z>^{JKDC{+zegMbfB~)~L7J;XQ2G%gz`kXT;ygfbKf+W!bN)Zt(goLm=pJjPCXZFwR zy1e3ZYf~fuKK)RlEI){1C}EB6u(B;wv0-;x#*YMBycM>+TmN$q=cd;-vU>Z2Ivb+0 zlX{`jIQ0L%rO!2?AUloym(%A6W|C(0(CygENJK6oeB0b%=`qwPOKb=ZX|E>OuG2aCvdb)oxho13U z{TGAinZDJ3F^Qh}Tm2WK=vltie=&=m^;`X$VLUvve{1sZ`~U3%-|F8?kHVre!Ib6w}th) z^;o`5)TULib<}q>#$#ZmqZRyiweL%Of9Jn`^S^)bUuSI@SiVz|h`E)cvHiENT76$a z$oShWjlch*yAIA3fxYI3$%}6DD>UCk4_wB^@J@Y;nz(o$M>Qm&g$%-Xv_8StculFQj zz>VwCfn;b{-ansxj6+970}gjFz>NEEwB-fY2JezNc~YDSCF!@{)dyu~B($u$GoMA( zJZ92KE!Y*}_)?92Zpw~)zgiI%1~4Tkd~}okV`><-Ge?zo7B$9@D{N+|HJ*56-Y;UsZs$r_MSItw zZc6a84F*&EgEQ(U=hPQ(V@u>IDZnD!uiOQTW+#pFp4t{w51z6U>!}!B0Z@Zi8TOPR zl7Wu$Oe=X320X#?JrG5Z@z%6wEa26RF25uwW@Sr%DGpPzB0{ZM5nbP(aDeAZTO(KO zMv~De`KFv8&dKSrMv#KOTV^%RAL7u|@=XJ{H1TNn7Y&IfI%;3Avs85AzK|f`5~bG{ zVQ2;#{)774KG&K#VZ%)W3=+1K1q~pme?x5@DSua2D3wlzrB8+>2ruYoYTK=BM9QWV;aQnK2LBZTIwL z^b9SNqSGXZB5Vrt+c>Gyi(wTAQu*$uO<#q z&{94Y(xDL!Q&-9v!gJhg(8qn=O@4k{xMR#E%$Q2qeG@Ib3z9rbEgH|}rXm~c=V73L z?b3|v4ScFAe+OBYRv&=IT~S0je4Rz>5ROxlKJ#H>3ABeRcvKfovR9%JyoEpxVuK%> z7(;@E$5E(Ixesf~%cBTQ2Tl?#1GwCiTzM}W^V*{mAfV-+iWNk<`c^$}C;kXSs7R1L zoLtvUY@yhqc6J22>CtRzJju!0h$wfnchRlN+{!tfAU z67HhQOFHzPVyjp5x3p^u%iNgrS8XYS~d z#_;qeoZ6eGk?mGGl2P8FzIvAh!cuGhhp}_&5(HY7blJ9T+qP}nwr$($GP-Qrwr$&* zo_p3^cV^AYyzPhm1HQ=2h&ZE2RA>5Sc^hQH=xY8d*FjTV4{=3Vw;VI7Ppxr=1Wu`n zB#>?WC?|aN#Qg4uBm*1-+Z{c!Wx|B!=7x42&-vW$kSx# zU@oN90o=2o%nDc$`sx%3cYm3(ozcUL;p@nv14&5k&iI=@H``8{F*)t|hz-7g+m z-wior8_pJdaeHbbPbpW)Br@7#n`Bq?*2Xt7KU~G3EZn_^pxi}VdLHbpM@!*nc*q8N z6ELhYIRF%+@PAwPtpcZ+>snKodG=3$JX{&xc;MAqO42BhJkh6ZCwEqX=^Bu{1ujqh zk9X|4jMN{a)Kl{iklb;?jn{)qG~Nw;CTIvpBYv*F?r7|ApWHZZ@sj$5#>%p`f!7w5 z!TCvq;JK~-4OX)yFaA)^D0)+=02^QQQDH3tc{A)pdAxM7tNA-g`Px-5YN8YKP2vDw z+|}?xZMhSw-4MAM@U1lw=0^_G0KL@R*pU{l!X~UNKy**VgDuxnd%ZGN*|=meefp_s zcahV?ghuc(nxrBy#}JDtchzsyArT)kB3YpIL;odL((6ilup>ZFIn$g~`Jlk-CQ5L} zJgXUN)%6(ewO#apyViKmWdd@C z4pNer!!ZnN-FEY`HC1d6%wc&>Y_tpA(3dymee~Pq0|&1U!R8PS8}aDJ`2dN;3A6Oa z$+!HV>$DLU*d~}9+Qwa8=;mIJRQA~N5dX4CaT7%`wf8=-N7vquUo+`%_LG35ncgGv zBlGZ}*}%e>JauE^UR?__t-g5@1zfrMz)BDtEyIa8Cea9B3ZplL&_UMp`{(Cnip1~1 z(ZZGX&5~bM*uHmJ7u5X8*E^)k<97aU=C5=Z*Dk;o?ECr6t~R)?Q0BKcwmC^&aqO<8 z?F7NoMEQad?OB#ub}XSVk#1zLDeXP9H@5Z;5t5STc!v>Aap5I8V-8!iWz@+kzKqA& z@5Cb1*R2gzb6N8gu1z#r=wpuBg*vIVX(W(WyJH-sC>=^9*1|4tOk@wV!+Fc8xyiWS zb4mb$j)SUYv=zFpxc)QiFG#Q6K@P6kF$l({gTJ*hU97?R$SMrt<$@5KQob$3F;Bkm z!JSlD_k)9LHVoiM4Wb>CPcB`Tr}o{!6v|-|J##X4Zde-~Uka z|L+`);K^5e?Np( z{)5Q>p!+|Mf5dL<{13?OTy1O!IR8tR5a|97KugyaQ=N{E10vvN2iU_8o-?Ogp|tuR zvTn8LE= z@>bFF%#(;j0IoyAY{>q)|A}I87tun16?yjk^L7^1%3gk%&*oY3IO0=`vT+M@qlo}k z*E$C`ogW8Lg~?7xHN7F*2epVHg()INO-dYWUA_OZvRB!Bp>hT|pK5+ECGhf0%Co$|ECDRK5Ff`*?@5#Yx=qXq6Y%2w%;#Z_s?y9796 zOac>U?A^VW;T1ucY7%lsK8=~M^(W*lVL6gURQyclYL1!aTpsUHg4c4!Eea`1TLnc% z!lCtr-k@kOO5hlaUd&`^!)dcnxhrq|RY5YK_!8lsaTs`_LMqlEfn9-rg^iy@8Sq*o!cb$ot697iYC5=Al9M zlIK?l6Q!Pm22fkS=Ub0_vYhYMb*4e0#Nx46xySst0@bW$6KL)cllcQwW`9K_uQtme z$@1_xs8-*fjYUv0T|$f&+e;W}t7L}g`P~}eO0lW(!x5C=)V%Y*!xS{7I=*QGV!oz7ni^OU!TFMIoYPmc{k88v^R*s zWJ*EXrxnpB?oRAFs5mRySSQ#(1$P|NGJu{wtIn{%;tU+rWEoVif;$r%+mYfjC zbBFQ3Cand3nBY+sW&V{s=-ERn;wX|85!Y1z)%pA07ikVf-*lu9Y*QbAu|Hg*@G>lz z5wACJNF@)ZUcI5`$`faoUk)tqZM5L9Mo%|EgBGH5E+k9$UYJ1YW6z^q53&vL)V zrbs=y%HdTqS-aBOj$~D(aG@BhJS=%^Azr5Jv$6%MxPP095G4nO+BXeCiX%w|lpF~}% zDu<>;K>0Yq`W7*xKmGbxzy*7ZUMq`uKz_OpdbT zm!0U#v4^SiTt~z?2!igXIbnVQmTE&)&jO|uP*1NOg1$pLqS_*RF#%#1=Z+|Ug=K!J zXp+T_301mXr$X;s>VU^+V(=fdeDt}yv~|XE(gsA_HaT7J zEpU5r7%&3`Y04J7p(2TsKq^6cE!_FML<`Z9wnIeXP~$1DkpiN%1*c&+waN)vCCd}p zEfHuu=>PgLr(1A5QR+;T+K@Z|r0aVr*m7g-NYp)3l@2ul$*da30o!?3*8!|r;}J}f z5)f(Sz}3HSPYEdC{ENWl9XL_^aE7b$8K?OHMT6WUp{t(Hr`dB&d7w9D>-p_v>cqYW zrW-NNm4p^L-obqSdJ?QOqr3RV0T4W>Qt*2%p=L9o=qrV}C3KdsIh5MUro-7|XOhtT zRD_I{^mGNbKVXA-ks%K_R6|!(&&;1(iK(594>NOEl4+RqV_}!xxLz^>^8^6Whde`Y zO9C-RA0toVbW=|KU?+}{qd3f?B6e}|RrRz1_xaKG(W;0{*%vd}%X@;l+mkLGIiOgZ znqZP}(WrwA?5&L@acF-IMq_q1ri%eVl`oT{_X1w%g{xY*mW#$jD8g%N&Jc3;+E{tO z{Z+rUkZ=*4sDkBeoe52nF067a%a}(xB?<|sg2NWnuANnm2&WvI0d=HZ5Ir{Pn+ASZ zO?bZ7#K7CwhVahUPGSntS7t=%;Im&~O><%BHa_6WtK_bAHhu}SAJUy-JpnAdGDvFU zUPuQyG9F9mFrlH1kNH)a(Grp&0fRJwE8DUgP%&7O`$f02{J|OjBS5Dm% z;JugpgsVj{=bmwmEK}~dcJUIMJ+Wr7zm>OF>4I*X5j(PPMcwO@1Q=5?Ql{DIf}9AZ zXIWwyK|;-XssZWr2*`wZ-8v42Ba~$NQy*>EnZ=@&eUe#g!Rf8~;s8-;$`vRNj9poH z3~89x*u3ykPd7-0wSJh;PazpWhq?MFwu_#zO3&tVtK$EhauMMGi2*s2gq%GN01UhB z+kI4+z$U+{W|B6YH)_y8xN#`vJvYcDGl`n8oRz{7B0j3uAvUTc)z#_{0*==TpGF_#>p=%&Vs$k@@Lrf}wzr%w7+)r;oVYdFALGb@pWlT6E(PIEC+Y-oWmM z6$m%wV0+$sfv`-5lmp8wQ1YSkM@d$i$W}%m*RRDV(!U}KE49|O-K^b+@)7xsS9^%H z%nP?l4ED}-Gvesm1{ASwk@&4NrwFgWP&vq%1CcFI*o%*P>i`1-SF3aUS(E{J8Chf6 z_db?krHfGN>~`_w9aAorbL$P&&Pb&uzGRm0?|!1{FE`B|`UglHII&`2PzAaXQlHOb zU7xT-qq6)vGA&#VOfXHJ0(OxO2{#o*Q0Da?48}FUGItX~|W7|fxBn=b>sA+5AoFB8OvcOEwfGd1@4CEkEDZY}ZHgCmEN)N%+J$f~k z#!oSkEJ^(&S9_DPtVIa^B#jD=tJazF_b0VgrR|#)E92{BXi9!vjM4)i2E8IU`%?8G zPN1Cm0#p|Qk+Rs9EMbvptLx>utq_CFtzJs*;Pc0ldE23jSY-6V&_^6r}NJO&>|J`^V z>UTAdk8BWx?n6LGmvdT#bAoT4jjAvb$>CR)LiIs+x~RiLKjB$AgA*1Y>YFa48G+NH zk6km8S-^o}z}}&MNT28oJXVt+BT3t5VFjvw8*#Y$z~XpnX~2Wsw7*T)ObRw1lR4WL zIjU^rt$rWx^VXa7ezp%#rF+ODjW2bS*(D75|Iz`pPb&l}&;v~ZNuUq#^DEQlCy3EF zE0wNs(rWS8LZKqslW*a$f!O{%x8xo-cF{<}tx`-r?MfLNi!rplnm)&fY{Djt_&r`3 z3A_7J(E+xSlM8)c&qg_qTc=N^PvcUMhc`57@2BlIrlB^`xGFjZZcr#z?FCLpbj0sc z0;)w~te=Vl1OQ9n?>jBW@?hB|qXQT4r&b=*D|)6paj%Pm%ZXoJ{RkCnA!*mL76lm3 z=8E7Yf_}U^1kJN6DAwFCR`TQ-FrXXtAJuXB(!q~7}h67(<5gegYF0p)ZHn=sh7!_Q7 zN3I=?qV39R`)`Q<)(&_PIy%uS@#_&cFit$5Yd&WO=Ls#ughgl8;t+@Wyj7@3VCN8#*^9F@;?o>l}0KXv;BwJxA_+GGMhor zXCZGofDiw~g5Q##qxA4{Tbu(hMzI*Ms3yMYt$1&6xjn}~>JEfjx86T3qmm+H;|GK) z*^{cq$hmq9&QAn%2p3cCm$-?|%GYEV&V_JQdw_?~-r7_4!+C^4A-~I(Zk-hsI}?ZE z_;l_gyv>@!T7G6p^7Wb=xRFuz84y_ogxvbXJlYNI)(C6&2tm5Dbtfh>Z{sN5{jA%g zF~3UR)}B~ZzWd>C*=8MgFj=_*6{E`BjPN?1_7TM8%CzLPF899j+rg-rMbb%%Paa2t z@~s{+xbe?MqM{^ofhqP`EL*_sbb>8IrfGp|sLJtJgEntHMZe5L=Lof&bK*s=$SsD7RjoND5njt=oWt)D7IX8GaENJkC9T0c+zINQ&hP=^x%7}D$oPG_o!I`fWn?jl>u$y*wlGSiQazyGAKW18nP7df zPXF`nG+Z9nVFcS6KXLyfW|zZ`u-87Nw^gh>{eZ4^3=S*QJC?DaQSiz%L4gL*P0|U? zj^ehI9F?w)aI&4rLsP1twSxiFq^~C`uS}H?pH)3!=5YmCOyNnf=3uz1&``D;xIiE< z^o|2y1bLvO=wbnYy+N9$RTEZy`_F5+$393sh!h?_*GepS(Pt=BuPfc8C zG|ER$r_9*2z&*05;=jJyR?1`KquFuZ+VHk&yaEbkl4u|2Mq6TH*P5DnTv_Ujii zl3$?0avl%1XVMFIZibu+kMUe{aq+9kc6a)Ld{b^h%%TqqJk$pJ!2fhKvno|+Ve$6@ z?r2$fiz1)<#MFtZdLVpPsmmIba}>6w0a}Z9mUOfI=v;s|S&|>+ zoGu!74IEv|r^Ql3U~&}J3D=StPT~4f%6=4TW0_16PU&MhN@7awP_UU(R241X;+x`) zUHdK(`fnn_5ax(9IF317@b(D+m9?MxOHIGig{n{Kibg)Ph&sEBF>WpIpwD&6qri^s zQ%XTS;3Uu45;OAeTOiW@8GFy6>@5`)yph8iyC;+EJ>>Z_!*}uM!>4R~P-D$V$7ALa zk)<&no)dd-?{jKMM*DQa3%WIF4KEmu({f=+MwA(q<_7M=Y)3ChPKQYm1X5aDV z8#Hjvu6MRSO`=uX%&8v+TO_+LIL3d%*%ty)1RzPn4I$85&7=$-6H7YDPQZ0X*voV2 zlg$Ei+*WoZZ3aX5XwPVVss{k{e%)XtYSyi_PQlR-L4LiH;7T@~uzL8^MG+0~uaKn=tSo_(c*ZdrVvv7;epprl5EiK{I(r^A%FqC<=ht%q~bOXMVz)IGiDzq^y{kd8&2RK`K=cy(t^PSAV z^KjHYRJG7p$k^fkPX0`eS@ePsi=l&G7pt+O1=82)0ZLGk zC}ZON^9?%Jtq_emHp0NwPFElI zYLO;*G76B7M@6k-#|j;~MTXTLJc^!aveG4>ccCc#cp?`4%~rsjt{8@>o+$0M?PgN(LKiKC*RKlWU()HAQIe);7_>e zCK!xEHe<-vBdH`QMP5?%716<#k0KP{kst$L))t$y)j2CxG? zKEchtUgkFK(_~8frzL?*Vzu$01_CA-$E^8^XXh3zh6rYMi^RwZUAATXN+8f!_OyVd z4>bse2^swPM@7JSec2F7J7e!(<)VH6@~C+7hDE_TFw1qgngvg;@P1-;1+(9j;4RkE zmpM#DC6u;S&c1t=)6@)-BicDGl$=xJl` zGM+#^nefBRsYhM~a{tt_-7?bzTg-xD0NJWeua2;kp0fS<3bSIF%S_+LydQ(r2^;Ikc~=;_mw<#V zb3*K_s^7A&yd{zgM(XvY3PXI;W{!J~EYyLeel>Ea^GtTlg4L-3tP@ax3smVOBlS%w z`#6_s@a1i-bo2%|k5pSIa`HofdJ$lIowG;e$8&^i0a!odtl)Ch?f~B@qN;dWrkk30 zNPhTuVykG3JM{*x-lWQ@L3xQAH2R)`B%sGceH<{es6$4SsiZ3&1&76@-4 znhPc)M)Z*WIu#?iJ%UJ4@xXQX;5{RjiaV=;)etzs&=U%aE zy++7xUey(=CS)e3RNQ``4kcbXDHXQOs{bth*}u@2^>^VTdUDDUsB5N;P9|xc$_Gbf zxzs`I3HLeORySzQw7-+0f4*7MNs$M)-*0qLCPi7Sfm(rW#0bXzK&ny0saQWW$_DqvbEJO* zM#rldMs*5X%=zsjnYW&$m626XU~!Zo`!Be*JQWR~Vy*07UWDUMVUy!TzdKioYuyBI z#M&ANWb}mI$mL4LyZf`19Zt&5#P8O;-d&j|Dv%&UxHZ#t&-+ULaoob)Q{dc49Qj^a z2|IQ1o2zSk2auWe$k6Kpleu$`%VW}JWoKggPb>S zY8p0T84iUExLbOjP*`jWo-QJaz!EWENgI7TulsbJUGyX-y@g+%RNcQBTtwmkT5u2>8m25NrumjyFc8u+WeTne zR^rGUUZ5aoYAkEsF+z*+@gJ^)3TLWM6G5jNMZ|ufS znvls1uet9)uVXQf^STWAzN?bwE{kb)3mG~8XR6Jv)me8ZOJ%3`mu3RyK|Ib7U+=A` zwHX9dwR%@^bf0=<+)WKG(7E2#jcG^31e{aGP2TAw5ua?u%2|UUV4gAg5{WNZ!s?6s z{8o-onXWvBib<+d1LnzLrs1uzfhF!aTn|hRmY`)9(b~qa;Kzi=y~U@L%~g#%B|FQb z;UaofNBKcjU1Q?)0p?g(yLW*Ku27l23kC{H{|c&;b%B~)Zz-jw8?SR9Qvl)ScgQT+ zMCOvZFH9w&sUAv50$1XxGDp@3*uVT=+-(V7!Fq@Eg_nsYeepBXE=fSCSAeFsi<0*= zV1}4bU%*c+;a~s`bN7$XUvUp!@?BZ*Qt?{!8KH;_?vdsceFPYIlhv8F71F9ZhIjWbnbMvT47+@*@UwI}{c z*tW{;^w0}<%%rStBMiLyICD@E%6$iv5M z_z)cFv=Ozk^eQ^GDSb}JcV77MN%^rdoB@p@*CH6es$jeG1XZXGIn!ufc34EIGbZWp2vhkg2l za5LuKR1L+4-e(gH+eFW79B?Jx5;IQ|IeNKkC51BNvk9PzBoWX`c&M`OZdo$J<<9M+ z2O^R6t4TXJERGx_q2S~pz?O|3qs#qS98PU)t(X21Se$TJUNqE0;^G_!40X;-&~83; zpZLb-F@IE2DbR*E3(cl+LkwGv%!AZ8`SnHBty?8656*?jk;uL312-xv_AhZUBr)<}4mnk~WT^dn)`|p7oc#{)jr4_wu8fa% z{r(ec2_N?bNg^MKonS1_z^_DIVtu;tN1hkCrKKvCIA?#CTW|J&(v1EMkG#F&D{ZOT zkj4xPafuc25ol{pB|@q;%p)qF+d|+>O%fl;u(vo1sZ8^)mW~M+7?-8rV`_8Y4HmD(kNOy1%8yQPg!q0!n#qIt%9xv7rI!&}X=yIIkh-5c;Pu@i zcGxM69<0O(u#P3`t^NwNQ$qk#c}B>|83x02YxMwIY^$K+@_k8Sn9I1)``Qp19JMnq zNB22-3Vqk|Fu###tu1tia&=~Hf8O+ekzyM{SXRoG)d5ebk?@|sZA0W{y zMn%oS&dXFnqyit2BpB0gTmidGeFVE! zj6OC?FG}60h^^ILc`qqCwP6lDsMev{K`5t9wMGN{$i6T&yh00g=`Z-}gw7;q)%&uiSf~Er7l|qqZDh z+x@M|b9*cPOo``Ol9BVa9;7VY z+_ih+PKN<_`ORTXrVB=-B0oK(aDeRfD@!LKP5-`N^s}uUNBw4WbC9%oIX5j6>*m-c zjvm?Hw)|jnK=;`FDdfzud(xu=x5h?6T@~1O?Pdh^%R)|2c@bOT9rxyOI2iCKld$LB ze9Gba>9rmSaa#Fgg6SCllVXeS>7mS+#<~2l!I;jyb7hz8fGT0W|>rUMxv;6GHOgCZXaw0+S=o?T}O1y3u96| zAkAq>qV;998Fz{nxNnF9%WF&C7|K7W%g~q-DYt8r;xJz#6y z%cCWU3F+~&J9@^$`-qAkbU9Qe?(6PtfNZO@yvyYn)g?fuGuY_=6;?iTCf0(;5S zAVkRsk6O}CRIEejk^}DIdD$G3YtK~kO>y5%twdh=UlxSz$DB>q*)<}N!Up~J8z3W) zWrkF3Y=;%C(n$jjMq%$Eiw!RY-wm@aQxNgL@~b9fWFpli&%3l}co6%w2+-VV=O765mFm2a zu}3WH-}1{}vn>fPS4!E_OnpTwxcmqZ=k^InE*xY88#!ljyA@71;Y-9Um7lL+Z+-vP z9(hYj2n1&%DjMlZ;i5y*{H4hk^rze?FEO#>o}ORW!ir(D90od(JT5+6WD@yq7|CvB zA(HH@wrZHIdchc>#XuG;X|HEBSF z0CkeJ)z5K>Zv<|2c@mjVJPk-UoDxdpPnk`*sAjc-GhtZN6o6jM*qr^_qWZ>Mq` zk3YD68dwiUHa19juc-8F>La;o&e_{&_a!d_3#r{(>s{@udQ{=7tcCCqom`kw)OO*} zGy`D_SZ-@CFE0_@-wU%ZHo_U3y;Fivwhs)@6yf^&M{Q68-Z~JWc3(TccQm<;7M2V8doYMV5;jb}ezs z$Bom33Zc&^JJv*oX&74#!1<4_ON5oOWS;0KKKs8^KXuXV(E|^D(AK>D$Se8i+k%Ty5A!^38^e zv{V$YLDC6zb?4D2nLLGO@XUtvQ)N~~*&wisHi|g@CxthOSEL!jAp5ac{4@y$`i;Q) zZ|=8Y{rW?5b-a-oRW05iz(kos??1Ad5KuJhG#2{Woh+gx8a?ou>$HVKomDsCG@l*g z>}uekzoNh7`kGdg%)QU)9jH!do)3Q)mI+@%7Qx!^&;}ScD9i0AA$TBtoCo$LnR+=j z1BnqPp(n%lon>TKBw0Z{!l_uu9a3|vv@TyyHz5^#Y+pK1h1VUM&f<(hx9qoAp6Qc#|ZwoNxcTr3ReKrh(=@35tW6r z6JSBF$}oB<6EFGR=KUm{)?P$CX+=J7fg2hz{pqj+Nh+JET5w|wGCJwN4mki@oID%v z?8%eUB*e@opI_npVfBx^h+q%_`bA4~ohL+9&<`?22WM^ng{^#S=`D!x)VF*z=0&{#g&EM__yx<(Ya_m<+Mob`#N?Yd{3dMOd2@zRRYUIRJ|W^i!or326q?PQ;$2FX2BU zdw}MBi8SK2c6x*B!?<(mQ#QfQC(*z6)vRE{$0LY)T~c}o9u#lOYOod&zle$GsI*E0 zt(Lin|E{xA8UY;A9!^s?&~}V%ls1JzPDEi|KNVb%cIk+3#1+t`wTg(?DnJO=c*Q{x zMwXESVRhcmNHUQ3lKWN%{Q%VKk5b6`p#sl1K*mU$iW-h)+}yaQQ=fevJ!L?OBiEtc z9jq<K7vJ3R)Z1to?hW{|}&3KC1(XAY0 zyL^tI+DI<-5}goK*=>d*LqCA6vC}j*C&6zy^>3$Cu}w+*Jqz>-CFd-dLiI8h8%Zv7 zK3Now1hs6xM>QC^{~yiX7TFIp>5*&LdyKqNlilye&U8*morwxJQ{Q$h9jbf81KeFP znpbsQuki{c-w3(iItx<^aYM+hO~i#chc-9xUiiW3hQ)EnL0i^8h{6+zJd+!>UY^M)V*?>I+5>brO`^oe9bU6T zwh!k6DK65#Ela-w=yW6iliToT!jB?AeKitV*wYC~j-x-Z)Y~&>l6SMj7nZ;|c3R?J z%q!I|hF$4=k<))AI&!g#x@5{v{?^4E zorIWFVP6s0bhJvjR&Hez^BJNdm~-R9ao_h>qEnD@qBQOc&mHhh4__RHxgZdCE4W|~ zRtT^+2z*AJhH>YORMa$Jwy#(Y^$D=#U8FWPC+bK=_oA3~y?1d!xl)ZZ5k-#90(7l; z>!N8Tk^=8YR>Vmo!Wv*IS)bQLDB5|HWb4k~pq%xlBk7t2ov|8>CK`5(&^B8J)vS!Q z+27qeI@$reMoyJNfD^YzoVXr%omeXcbaPj*jzuLfG20p0cU8g7L4q9U%@OVAqs8N~-5P*bnlSp+kt+WXxI+DLwZRvoLSF&JJxM-??W5{&<4pR&XXeqD2OeVfG>5<~K1*2O%$Yq;!#(mD7KAZ~ z7+1dVV%9sZ5e3=X3`m#BTlg1BthPbt9YCyA;A($!1dF_1hu|z#e}xNhilpVTa`d!>XJyxMUE}iOj)3xk zw)Uvoyjsjr7K%TN1}Y9%`zU0f7==F`x2h#t)JC;BGR-v8W(jH=CNR-VwM2R;=>p{i zxeqjn&2QFqU<8}H%n^F$w!6-LNvWc#k;|Xhyy$_D=N7_EIW_O6?p?TA4yVEbEi)zbghTj`on*tS3oZv4YLghJ z?_=@`j@dz<>|ClDW5427W=+r@ZzQ_+p0ltdrLyuPrJ^<<>APm!oB)1Y)3a{;W!&(n zwc3zNYzAojYUnnp5(G^`uhbra5t4d$!GZ0G;y2rtmf*j^@~1a<%oHZsQQP*k(~T_q zn|XIzhF_SRg9kSlKUD?d6`A_QN9Oou$9xPn6_q6#>l65a!%WAz>M+s(ZMsMX%98hB zOMYc{gGE!lo7N{Ug?9+zbG@I7&b4CVc^S(-$y?N9gZ&LSE^8XS|U4lEW}S7-IB;D-C6k$8qt%ZS;t)l|B z60c^OPQt&%&?mKp0OEGBT;D3Y>^#zo>Qt1adl zi?TPzeCI=jr+^rF`6tins(pq_b~3%F?s_pm@o+l>jBK&K;+rn+@BEj$9A(W63>rAO zY$yT<^ew;O>T%Tkd=;mzHkC+cNhk-}EEX+e`SmGd`a%;&Azs|kAfM-WyrYOg&E~VC z8YRRI!F`hQTEOTzN3Zu#nzHd-aePLMUSSC{!gYjkJ0h7fHL4v!TYiq7;$WAAE$cN9 z>6@;341W~arn2=M`yFX|%wtOGZl{4E{8yPYSRzAr*|T+tYEJehup%1qj!f9^#k7D# z3d>MGP?qO|;NLJX@vOE#L9dUbV6@!eT~MT-Cz5=Zo6*dhd^;^)s;RE*1C>!DJF%5Q=&`7B?hC0 zejE(}SRPn^aOiRMDIXHQ8oaRUXWl0^wj}?o)%dAlb{pu<(A;5|F|@AS8OBfF$!`Sf zVjiA&&W81vk602;s?aZEeH z>dTlcG|lTJ#+mg@k#q+J^I4onk@Dp+&SUoiyTU&(S*54=Y#UEr6bil~dB@Z%Z1>3Q ztTDbzKzih@>^xS4f6BxYV+FR9=hz>SKTup>IO7-=R_W*i>AeJ;-ExtNf+4J9^x`d&q8V%pe$k zZL-O6-HCP;T9t8VNflu0)5n3-I&ZH#s#S$JwjE`^Htn{t{DtztTLg#&W&T%ycc5Z{ zFu+jK3&1u=cItP;&TP#|xZJMw`=#FOVn17T4wz@drzTQn(@>HOSD^jZc`dpiC>w`a z=zzbI8)!l#nkUhRWVUNT9kabkEkCfz%P)Eb$`D+-WL0W(pEERF9URWFhc83^p=4KX^kgzg5=L>>~k!?2!^LSqEc7_ z`hx)0@pDe1-hUS18Lin*7HxvY4@6yDK_2a`4G1O7#$!`PPe1XqCNYd=@yqVy#8=XJ z(_gD93DeAp*Qb`pwwR`Ec~Vu_aFG)H+f+BGnOg??@@7*dqA}%jIGUup1AU-e!NHZmhC* zTx@jazbx8fUd{A6GtlNG8f8jR)(2VR+O5l?pvfA$le`+3i0hU-aHk$>P#9sG-f3_% zMfE1zMzPqaKgGIa3`Ro~QqkU6yivAu+AVYRKYxQkQ_1uTzQ_S;p7bpbY<@Jm?3-@{ zr*jqL%B=6TU+k$|^{CorR#8~u^JFGiO4PB+LRRB}hj9=W#LHa@8Z<9Lv;a!9&Ph&? zYbjPi5Kqlf>lZmzy8HQ_o)vyen_1~Mj-0FZlg$y7WM4o8wXPXv==8%>?f!tq>`5W# zSEFeyKbUTn%>l@9#LmgnVzt=421FmK%$7m0YwXsIV%DhgV+r2O(J}S7KM+vDEWO&H`v}lEt#-Rth!{W~;yH3{N{SiTT;}C$NudvINt`9pBe%>L5sp-;KaTQ0LLwt)af~h6^UjS7=s=wCqBh9KNAP+NdCC|%u z4>aBKlBh;eE292^`M67c->wYjY|)acBt=x0uKca$4C)p+0TifefOLrZ)SR_8<|zgj z;q}l#hu|0p<kA($sl4zJYvJSy>^dMljU1dYW^^7%goxyJjp$d2uPhstrx22O0ntuiN)DcDoR%Od5y-NJAmzHX4BZgW$!0BvEO zh5^%TK_27WG`OD4vh2!_y|YC_Q3&d2MjIziLf+?iqcjAdO?&d}s?#fB`Iueu(A6>N zeH(`Egx$rFWXMB4uy1@U=C z#vvfvtjP`=^^M=N=h}Fur9HSJWN9HPFuubQQJ{0*gvqTl4%cpXmk&f^a-oFF9*&W(7$;i<6&pvqI40F=Uf5UySA4sa^KvRP)9d#%3$sBHvzrc<}XI0WomNvQD58^82I%zG5p2qo9epa>uWQUqJ^giZ;Pb8f8B{X zv2wx~rV}%6A-XhyT#EUn%gqFF%HCtar(d)Jp%50DpwI%E&&12AA!^-Y4{iM{@3G zj&v2HQI}iII40WR`tb@`{WWmvMt{KqDYmlW?cagT=q>@wK&qXR`pR0PnD(_nhTu&e z)k|X==#>-TIQ0c2Wy+j~>iw?@OE!^%0W2cgQ}^>D$wsrlpVTuERQo3=y6aYm?RWXW z$`zHah(HN5Na3vh96{*JC@&B6B{T@=;8G5EQws9gZ&R^#yswINQ!Md5s&K(fwGQwZ z?u^+bR-XJ>>GpO^x*5Wd<|IsdmWRjTA+Fj<1ZD9jL7fV%Y!9;0HXtdxgBdR*_c+#N zMPu)B{q0uxpph<-CTRm4(eGWzId24yu{@c2!S*;ts$p^4R`C)l>O(%Q{BD6;nfW+M zmgGViNWQ(~X&Z+lY-vxn*$j}fs74mP+PUdSACXsHEn_gE4<&u>o?7hE%!9zF@;Mv^ zCFRB-sZ|`W|2I<`*2Faydq$AuxxoK-^v14zbz&5xmCrmiU8DR&J8Qj@%wy3IkDcVpwO9wt~SKxYIJ#C1=~uBtzSo+SHHTo-ZAVXDWPCu*A^6ubc>fRw&b(hsAOUrif@}e@Y?Kzz+kaZF=YuEw<%SW|80#` zo5aeOrR8iZ8>PtaZPESXU z@W7esTS=rGQHL(~@ayq!z18F8K@u?x_pkhyp<)psD63}lLV%UrTkw}MLD!M#64Ak^ zS-Qc|x3{(H4sKn3QGCGjYG7I|rX+01qS7!-zTFT7n1_ugHfV}G-(GC<`6N;P9+?$e z*$@@`14~cmMc!O>yOHw${IFMr*!_)>-d9`VDC`AqZ?M7f(%?E57=YEOs+K=i6V!Wz zQ8#olFK!nJ#eNpdxbnEpB>9<5rh-{6_+Gk6g0upAvqW9lQYt1yWxm#fb3{zL>{%?P zjruL@!5ozUBon50EG_QYIw-wIJ*lGodzZ#{*~7DxRDETbq8C_~5)TuO$EWkqLs5X6vuM@gAT#B=;#SU4Cx5&%Nh>yDC8b=s ztDX43<8U{1OsYo1#pZI+m&Qp}BfFA_m8~^L8;Ql0ZE~P9p8kM^@NzOnu1HCp?p_te zhE&vPcU-q|fPHx26a2x*Sku9>C&+6Zgxc1K?mLj^BxQ{G?d6h_Pe+{>2q=!ppZbHg z5)^nFvHLS7a77O=1}aLnA&`z<3-ZF}(_S|y#VjCx%UI$eQLe$04H0D?nGDeu<(d+= zBDpWsu3SSLEw}zX6Gbh8-B&r)>woIVn^kKtjBtjoh5`p!>jq7*u*S6c4>RbC?WMi@(n6!yB@1DjWWH6W4-&RSh69E z9%cVipmZ)J=Vp2qt6=$MSG)0 z?D|9wx`x1UcAprbkGM#|q3q{GkL~5StC`e3o@}XTd6%@8?(3Lqz5GC6n@c&A!*qUZnosi-!FQjI#@ZwE?75QWnwh^+|V@n&a_Y2l6@UcompfI`mzO5;7>ew&ugDX1G|I| zm3J}n6YF6w^f2ZsWZb%DKG-1vZJx}TpA}Kq-tZHCe(X$dFi0xk1b(3dcm9>}5KP4w z05YqwesT|ByjwZ7j>EQQP+?>@$iqX9^kXs9Zk2UsM_fMjhNV4}+?KC1@buv0%#8V- zrZ{F^l`@z+thv4QH6JzF8=_fp5i~(QayQQ6^k(Xg3jaa0lF4$8QmG_HM^7x?YueghQcTN00=!_tVh)y}c)>T!5adQm8H8sx}~!LZI=c)JKz zqkpj%Go{y`MdqX&0oGyyZmN5)r6+N7odWMnfmMgjx^2Ita1oHNvS_CJf40qW1*e*{T{Bi-*8f z<#xAx)!8_7GmWA~p%7?>KK<2mIts`5Ls4j;>R($Lh)yZM4X~5=VT+3bJ#uc&5nAZ8 z#$xKmd(#1T(wpWop!L?TRzf2!XWvpd#6p+)Ru{9&ZV`oxykO}To>L$Eh<2Ua12MBK zMVFKEM2nb|Z%xjR4`nl;HJyXoN9(+FpUQXh0{}>>zomzaRw2DM3tfajgLB@&d8NzMu-l05t2G}5AM?*T ztrwX%tqz;Tn}aDNFy&nv;Yqy&$iuO0ELprJ`?!-fNj0T%r@c2jPcb7`bNXErc?nk?pc`%%BH)gNs0 zeK}Oq%~Q~1@YkB2C2Bz4^<2OB7C$nlO0;a&6=U)#NP(2M+-Jz85=OHh1T^4`37OSE z?i1-;%kn|c>gCDa4|iPAz_|x^zA#97nYC22V}rm4&F)S-0j6WIyU)0cZi3*J(0xN1 z_0*fTKHZ6S{=T>`ZEVb~fOGap8xT5tF@qwnx%Ral0!qi$y8p~kyVjyw9*u^Rja2^~w)Dtd}~0Ex*#* z5;bO49dz2Wu>xa0?ua6*`r3$yZ6Zg5#dIGz)EQvNv1d3nyywl{W9T(qe+U1~3#tK+ zw+oH`jVqsL$vI8}z$V76TrSpNO5T0GA*%CoPvUQG!$LDPi@N%g*;%wcM(qg$$WBwx zD2#R4y4wD!%E(wT*sjGw0@Ot-n|h~piR$Y2N!&x!AwTArYOzHULYS@`Q&RA6Al>X^ zjmme7)W-bWh+nW+zB8cjy5L>)z{f{(ci%{yBRF#ww+GV7BvQ^NJiQH0e?n)TJ;D(C)VW6iYp z*#|Y*CY{ZKf>6<$r_wXYlx*7Z<#w*~tLRT?)gUU}q#OiU^bV8YYM7NZ^-JGNW*v5B;AR^YBZVZwl4(^uPz73X5T_BRIIxBqjHpr>sG z!c)QetXi@2!0<`X$g*j(mqFc)uWGMIi9pBx)2@OnRJX#LtiubV+fOWlP~18sls(4* zluUx>RfoqItGB7(!&5Hn9pd#zc5W{GdD;r@6vTv$_p8C)3ij!{c!;NnYjTn3TgyN3 z?S$MX=z=@ki7J;>0_)7_D*B5S%&uTC(T1@6!~k*!i&9~aQW=@Lng1kcp5IT>l4)<< zP{rXnqr1XRvGQeZ*$-BWrgC>~2hyaX8Fn%l;`UH2rbM!KLSnEO{z2td7TS;mdx+bL zdc(n*Id~y$5~GRp1r=(9^yE;XGrI%IAH3lQ=Oixg_=4N$jxpAwu%#65IoOEniSKch zVD%iQKwe>hh;CjdKN=)!<5FEH;OM4CxC+fe(5@U+Y~;FRsD`@J1{1^UjfbIJR}a3K z;$VCm>C2t3Lh+#!zoI2=#dt$0lDOjD*P>Ua+G4Anq($_{mrKBW3P@~*wj$t=DzPszq%1w&&6ac3uzrA#`QU3G0 z?35KU{I(_hl#4VxK%)OKG}D#RHtp%~;CoE=IO%7cS;68(y&{GgvSN$yadfQ$jtd(l z1bZ-_Fxma)&HdH^?^abr&YfC|05Dm;|fUC5b&ydyX`@2{!T zHj-Dp6-vkZ2%CpMlag8zps(4%jyNCW2UBk$(U*8L#7a&NzragEmHZ=PHz-r+?q|#X zSf@sIq24UEbe7oAn?XZWC3_KWBU)E&%`ei_bM7FmK6Xc}D zgaM5v=)kcQ0TriPC{08U$=sTcAtBU0M&a|eHgFg4TBhxIF5Rq5Vyj%p&>vL;4ReKM zZNdu%Aj{C2m;sn^FhRSdDurgo$8`Sk=X*_}+=HAhN;t(KO@d@(c zI0Mc&{10(p7*+Xf_GFI@k81x(4n;`71)4Qb4~e{Rg=AhU+d?DxG)pJTAZ1jlF1|N0 z@9)&VWqOyX%jPS=N|{T0f398ZdHpIMh49B%BUzRRqTv$%GaEN-wKkKjE|`D-WZ4W@ zDd1ue56d7Iz;3Z8?@J=<@zt`vM~>j)gxY4MF~i278M8$Y#sFWk+??;@9MOpZgR74+ zhNo8S!D%R>-;rLJu8~}Ejz=jHfrdsQ_q6DfMTf+PLH|@4-1rWmOU8m{fKe5^$lZF@ zqJPMr^vZ4?Lrf~|26?l_PS}P-aJl2oXXB!c%9-o}!~5((Ty5W7@0}?@*IA~cug+<= zDSZ&C-p4R--p1R7a48=EhdsogRgqx{`~LBI6zhILE{!fZ^x-bt>w?9kxJd+c8UgG< z-?k@T=<=p*3?bf!@1H0e5K+!ORuwCY-r8I2-S5#|A!W31fno;5gflxjF>Dyd&9f?McxP(_mXEKk5Zc)d3oU_I)suzFPEYi*8GptQnS}p>B=yLnjKiSnRKLV1y92pke2MOf#$|(QhE?sCkC?Pr_L*uXng-Y)cu`DUS!s9z32k-sdzjsa#XGZ5Dv`9L4)DXi@GdTos^=%6k1qQKW8Y_)!1f z5(If3K3>(@eLx#R10SwJvC3E%@qqtNU$Y#A1EmL*P1mACSvKjVFb=+uZ+AsVW3ldt zehvOkEnrJp_~y;dvczk?9?!p6im;5lHb>y+@g{{)P%wDs#&Rzp!AkN&at$vTbb^K{0?W z$1X9}Btr5PY92LTG4GLUepUD%Qw9bhfPH~hGbkWCJQ9BZI=AE+5LVSlzzQCd)u);$ zEoT7*bg3;5LGtcTcxjF1p41W(GGXzo3jWbI#MozFsGS4Q8m~<;fFzMzInWU8Vfg7b z^jn-SK{dEcXs-lq)WnpMZ3y#!`nvd?c~I}((KR@;0;#1xZxyi#DAnDDeF`&byXM!? zc+N=MU9NMHN}pHLOMKmr9JIrghQ5I%G1kCqv4`bED0ARETPE$m$7$A(cvk{eb9{}` zj1#o(tFQg~Jzeh;Z^7IxYZ-uq*7fZ4(=AYG@|3hG69s-^lVZdGpZ}f046NUWs>84g#5EH44z=a`m&{uP`-a(cgsn|0Y(uU}{G`s-{!nl4-P29JcO&uZ zmbU*r+Th;r8Zq`Y9hppGn0}E*Q(SBg3j?d&qKxxGv5g6s-qgb$FC2N94qEcD?u0qK zzedCm^Ng-St~KQ- z*li6SEu05r^X=~dVLip(Mr?gnQ^-sn7`s;BhGFhJA7!PEyWAIJhB!paK7`l~AJa@U zQ?b$3MZZ5)!H<;L+E}?hOJ+lwRrr_-2QoR&59m23KXf9x)cRp2MU8}nQNMV}Cb#-C zIlH4C32#gtY~y<;W92xouPdup z&i%RRc)y(DzAZ70W%cD3KuOJlvz1<)9$JZw8zTc;D-|mm&cwrrWo9P)_1J?*R3V1~ z>__2u7461ngzPHygp@NsQu?`^@{@yx8UVE*g`5ot0lR9KD)at|T{hfVO}-r^v?mRs_z$X zPEJeXt65a#0UIE^R{iqJ30}GYEOL^-D(=gaV5(dEnB&nrAMM&ma}q!nKO2+3_xPx` zt{bs3ju0ug+|xrqvhu}3I5XQ5M9oZ}rS+F=Z=TwK|3+x{01aFbFAD(-h*X5BrgTJh99fez@(=ICl zQ2iVtXOfT|A-wOwsy^W}B^WK6Q0}gLpY=vQw#^zXqzD^hM1`WGI4XyF-Nsim6Wx6u zHvm_@oQrwYlDl)T<>M2M^0KwRrXj&Izd(buR%v6sRmaGnFOAKlQ!m6AK-ot6?vI;m zjwcj4f6}NIL|>XdCg+;Bk(&Xt=*k*6Ntgrg9RX*qKp8j>8c5j3O5G;L=Nzc5YDT>U z9yM6rEOlTLNjn->D9`*~V9bBr21v-iRH4q;n`xV2{&P~*1WplIQ=!iVhQ?g$uU5XG zkGd!voRK<$bxpNjauPEB)hwFMHsD%;JYz;EZBsk;WX(KhbJS9pTi3(9Ij#x&jCPXv zj0;j)`KAP~I>|qY&EOy^>rGTrHO#es6pGTqJ3N7QY2%ifedFrdy?Yk{;U!>9M?yu; zq3u4~Y`WhVuq^T*2UKx!st8X}{Sq(Icm(PX+`NF5#)q|H&Ats;u&&Cb_3lL__W&}C zn`bOwEijI>x3Lkpe)h?)n*$Yg0(&)%`0XiKTJODs=Db?w|2ma?@n-KH7$}_aFVlVn z=U6K(avzWRbiV22Kmo|F*S_J&va=Y}5*W#SwYmU@oxf;x;c)4y_pS#$$3J5WuC$a7 zR?u+O9LBU)$C5>oZzx+YLd}S(xp0LI=(E@mh#zTB#AN1Z93Aq4iClKnZoRd}Q8#Q_ z70)BO9(=XxU5cn*AV);CfxB>!*-v^DB6$!#eN{kgegclH&J26poz7LklWXMJpO=4?AYr? ze-SG2te^FveEDH!l>H+AL14nURBzxllrs-4lzp_{HR2jZ3{ z8|fj93V89eB+7nyy?2IjZ6m^=XyN@acggXWC#goR|YQid)15J*QS1^um5ve$+6NuchP=Vd1-3^169RhAd zHUYi!(xhOcgK_5$5@8kN!r4t0cdGlNZU$miaW8YcAMi_XPClWZd3f*IxdQ#0cRiXI zCOSiPffoj;X;+u}b+(cEq!Vt4hxU# z+slHLK@0hzdKXb4N`K&>mub8*`$}|PL+81LnQP+K<_={ut-u^4;8Ii1i`r=3Uexks zOCWo0)g)J8K(77j&#vUqg*(%_Q}C8xKG@pNG|WU-K2kiV)P)>C1+7(mRFUj|8DU9E zN6_Y|$5u=xs~v_Z<_cJ@XMR-T|1BNQt7~Zx&poy2YcYivsx2~#-*fro#^l#w7gT?u zJT>4&jGE5mY(8{03$jcMw#Kk+STPv$hwK?<{C0#!H}pf@{5Fy99|*9gwr3EB_! z_uIe#5B%Wz=;3ed&n~(PjL%UqvN+egq=6L)m>KKzsFUYfgD(Jvv;r-U)um2~7r1Zv z$A%2<0F&#H53%t4d%Zi1=zTf6hbFX)G07WBV5+KXh!_VQkdfxJbWxSg3^hn&skJ$D z*WBlng|Oc_4{6*hKoWr+m5IxHimh16mGh%)VM%kO)zA!1_`1&#c+T`INTUC1V5R8M zA-OL#b#Sg^te(*WSP8;CY+))Xv>ow?N4M5+FvMOZq|d6B6mbh*fkK0<#}}Prieyyn zglSyy4tAku*zWy6pC*(k{jR`0;*8P5#AIXUl6> z#m9K|qu?(I!k=W5Z1te+hzBi~*EUvl(pGtm-tou59UYMU!_Zn_UvGyv zJ1~XrYV8o$?vFW07fTuV)uE~1u|^bp6@A79Lrb|h86wiJ`;5|SZ2qk}$}rdlCUFNH z5^a%@3TMoVNX zuKkQ|h(D~6n6haD;RPkHL85%wqrS8%@prdi51NnO6AytjtjuR28LW3UKV)PL`1(cL z@P%-R_7DY?7kK)(TPN6M*Z*7;Q*&?P-mXB{H71XXCUV*GV8?ujDve(EUbVwzQWDDs zlLzw!gpRqoo(~?Cug5+Z`ZCJ_aAJt`SGXMQTWv0Rpm+^t^$SvfcNDuoCnRlnHleGJ zfSg-LUuvow2Wx=rAMZbv-a)+pDY}ItU6MGiE8bvHHHH>-La@Q3=DR00*sPbv&8mej z5yUh2HESec-=~AR;o4YO;{6;XI{%D>r1BB!4KeALr%#B6Pe>c>tPg$@OGUe- zP>B7FQGAU@jnbj>!8pbBAO$)t>I>^$>k=~z%%se{Vx*e8-(OU@vO12LuKoc<7TJEk zNA&&^&1RpmG49v=hM)oua_R)eP)=iK%RQ*+YIae98~-^@*6qZx8uFfg`v%0OT$8#X8#<=F`1Omw2 z3?zy>WJN6SkA)i{(B9z2*Kgv()y#)azhpj`OP_tV#h>!=@MKfBu9OwK2)j|#Cp7rE zB)#N8K%?LQNoIV4$ei(1zE_yMLYF_n#{dRww3lN|bt=Rk8$YcYg>=Qz;Tw14rT2ta z8{e-;CU?^RHaQN&fl7ft(+Sj}{bVF_0QAytAk^(A=Sn7)I^Kc6aQig%v4DmZp5!C4 zJgm8ljUdRhEgW}k@Xvga7sENwy0LJ`<^B?J#59MzY-pZ{-kE#2iiE?VcT8A0`Vx?% z0C5w}#?Y_CzF=<-oCIrgO=hRvrEtm6MJ>?xCO`ppwJ33KE4qS~&AVPFfi6kM`x^|L z?$fveu2>HU>w9Cdsb3b_tNySl2Y4n={IDU?U-t&ayjD1!hP493(G0u=mXWgFM`v?# z6V>zw2U-McyxU~Fb3KHcYNgVU_7^;2bjjCg1 zUw=2hrNT)TYtxp!+%;_>fyb7?beA+@+04*xRI}=_DlvSpLc|aTmAp+Kor|r??QbV> zfT)OF?R$i>;PYDtBU6YeXh7Fgz2+tF5qtqS%p1ar_b*E1jaT`I&N%J`OdAv@!*Qtr z5kM>2d&W0?vzlaGGdT`STEq;o4z7x5D<`F!9{vsmIBlerOCWy#C*ICAhzs3OfX!V$ z&jdf(X#2CxPNY0*XesWn>1mAXjF{hy3AsZc?%br*GAOM{*KE7XKQ~n_GQZ>5k`F-- zMHxBJUuLzoOTNZoOi`!k)WEYkht~B}cJ9aBv^-_XQ@YnW>z>nKPISFH_T!FW-w?EwL>!PrDJdY z&C&)W(L;HEx-Iv0=&!;rZ#1KAEV3`yQN0A{xVJeR@e=@=nT2WYNeV9^WCH9gz( z0yJ^rE2NF4@mEiGTP6BY$j^I~_&b5Gwg z!;q^ykd1=EJR4V;B%Vs=%qE^;4tLJ6Xoz^C*MG=U`S__0vSU4JvZW>u)3=75onof| zz)Nmk%&3|KR#M`(s?vYHS+i5mZm#}4KOi>nl|S5f`ih|)r(XIMV(#vNaS%bK3;kUv z)>ad^6HUQ)O#Lq;N^HYQL(r7;$gli1#L>?RMMO=~OJ?Si7p@%^9T4*so{Rtwtg>IcyzN(_ zo`%dJ%TE@xfEeaN`ViA)ktOAXCIkKh3 zWzifVd7Mf-lST6dRG>1pg(y<7YU;(Yo38M|GrcKL5Qzk?fp=AQ1}uaqnyCk7=+gth z3O)!X-4EexSnlX&Zu+$Y zp_DN`x9pVw?2}Z>LQ&gGzdAQCpMo$rO1x&$_BiGCfL4_u_-s?UPll5go<8CL)g{8% zZRcKPsV4k{h_{O^comAjP&3CWjr~c`FzIbY?=Gz6r4{8K^*JUOvQ>>5tP989?%wh_09oVi;rA%$#}J*;=-{hVz7GZE@` zwRTQ8=_i4TiX50#n8^2~bphS8ohC+HKDs%hth+3x50$Qb3}#Id)u^zGdpJB-%gW-C z9Sj&>5F#l&TcnIHbl?~`;fOqQH+G5fM@eG0u>QYEc#6T+HG_Pq>gD|XM1_!Dht(u?vnRO`Lwm-k5WPgCH)=0dvoejT?r@r_~T`0TT zq==8-0P{vABM)DRrB_7-n*)_{(`JKShQi~M?lTyCpjEY@(N@F9sD^xRsO(;H*-3+X zVy~D|VXrXE9QXW~rW81r16T#1#!$@)%Zb2)krBv}$3NJ$N8PTFa#u%jzD74@Y2tec zC&wztsaj?`wjmjuLWDe@ILWM9xabpTDh{cDcU0Ohs6Z3saEu*vdLr%Re<;+27DJ8J zxO$!~Y#m#tAM`1f_1PrvgzuE9-_9iToz1P+bC|k~yTS(&Dhm+3ZPg|BTgZ-sN+hTj zwMchdVNQ0An@!jAPmf|)-EuttBKZ@wGxJwg@}+Yih~r+?D!$J*(p(~ienq=~ywX0+ zSJaas0X=9xJsY+QVd)RJV}j%kfvVETNM5Wh*YB}(QtevCTdx<&K}mCzJO;jnUU*MK zU^KxL8dDvacx6*2=@56DcHl(8`HA82ztXA-QNDYVU_hNwtgI=MMrS{^f$0?p8rSD831ta#5Kt*pwtWkcx zicE{%QX-PI*>8tg=Kgm=)Jxa%COd%Ie|Mk$lck9zXUBm(DiREo2o{vDP0D^P7Sh(# z2h00(Ag#|PIRz+okGVC6bUsVGr=^$x+F%%}tV#J^37d=cINkNF${5di`H&$q#uQeq06|X2gp{tmC zv{c$Euw`4)!I*F)x@mUW&LPHFKn}4=ahfLypuTxr$XUxf$q0`QORnA(aQ4*|k``(6D|WLZg4%!` zVA&JZec#R6E0R}8eW;`J4z8$Rk#}AB~U4B{y4&t%K=~Grx7uD9lW9Q zs@$t7algVBTCC|k4b79_DAa(wP*-Op>2{mI+i7x58=lf+wf1+Oczam3Pgv4a@OX-i zGf{|AGMpvun@g;5^lDs$wAD(oWHgL@F**-dmqjE3%==^`1cykItx7zEuVsYUwmwq@ z@`oOB3t2Hf(aCtn3i$Xz+^y670P1$*I2JdHonw;&Eb<&M6!|mCr~#L7;atw%zzy~G zfy5*^^fqq07Uyb^qjQ#M$KXg8h}3f#G17hr>m1JN7xQM--{-B;?WEq1JDqgmsIDBK zs~n-+EM|2>Dq-Ojl{K)RZA9p}>evs+dq{4;SJnJ|3%G>a`n6Rhb7=5}zf-_0cD&jB zeq3{Yb?}3BXzZD*d74`(sjtk*G=fhrM`opPQjep7ho!nbn?B?mBIZ)N4d66O{YDj) zcuV-D3{TV*9Rfgc|ENc(F`?Of(Jkt47Qmqy0a&N8t);*W#qsL5V`=~yp^_0r(&%20 zqWW}~ne#3Ffo1Nmr-aLmHxc9}N^7qZO6H{=>nl)33#{@#lr+fE*?bJRt*J}1pQLIx zG1@=8w<4Kg+;AOzI1Ph#g4FWFtxbUtT^^gh{=M-l zA@Vc~6Bh{={FpAev(O#f*Izw38aV| zQUH-XI|u$`m<8w~?jk4&vw{3wV7WQ#UM}+-?FGxAPx)M>tZ;R)oWFP6?%FUFnO3@& z{~r$3RY{eXuk50u4ove&#wF2G+I9q2Aov^*(1n*`kqUG^AlZB(3p+Wl(TrbJ z_rHjii5~cr;@dN+=m|Vr!s1n?Ztk?$^K5ns`GJ%|Un~?!^9U2Cz91hjC04AU^ATac zH|5FAuksFOo{@hG`ncNy;I+6LXeLI$vm0say%GX2FZ(M#L{juBHZtzzrLY8R{_8=G z!GlG)czCiG-&i^*7){m>{j|WXf@U=L5Afh?IYCHon6H_9Ow>ao0IH}cwy15`1-4zj zZjauwZiE(Z4t{SH+{=1PF;VfZ`kJU4NR%%pP+QZcD8e(&@*^7bZK`9%acsWoCqoyO zA0bAsa$R}c2@71cNVeZjDJp`sQUgS}jTO-4<#|meK9j6P+@Rs|#@S7&bCV|&d&nEO zm4B>5FsNY}rN~XGU4gKhe|VLV3zUMc1Jp%&?ePgvZXf#>d0UZT5WHB3e5IJ5$+_E~ z%(9p|aXY%%-IYK<*)ko$o!-$aL5mY>+(8WH*dC&d#i0%8=RV_a#9j4~M-1&46mW;5 z*iHA;=8vjIUT%N$t@b<;Mqpbs>KO|JDi|c_zw1x%3Ne>TMkIlR%pS(8*iIslju+|dphvr_Pg(MEK@bavqroYn#5Pk zVj}t^w<`lm46Ia??SOD`UWV%l5q>@arJB>#<5{eOl|$fZiKhAQ+b{%h+zMC}nhNpI zGRROdL~4Gjc+Z3?lFdcyO;}mf=*=nJ--~u~SFuo*buZVW=scAlvj-}~^e@H?r`b^$ z;+f@|k6f71G`xF>XkIDeO}1F#G1%i8Rpnt`BAS8|kOr=QL$!6`{5f!04m})ubbQ6I`PWLVp!?8t;~yVji7e$?sy{Hvk-8km0YdH zaDn)M;q5?uBy)$^sl2ss*NNN^Bg4L&>j@x z^5xcRFW|>l=29~(!44PNQtIVbmxNXN8xV}dxBjV6bjMkvJjv@ll6^sST@wevUw@ya zq?X1U)oK#5cc>@eo|<=UMet{JO*19pwXewFo4-fv)kEJ zwc`K`3HZjm;B$f{fG3Xzsq4il<`t#$$E*vGYyYU)ztLkquIe~HwmMU* zB3Z8afkM}U@}6|3oXvBk{Kw8A^6yDa3|`b2S(sNuiavz@LEjl*wasWBX>%}j5|&G9 zH7yPtZ0%VVygu|Ylb!;V!f_aWO+cKGX-zDRGu#waf@$qX`noBoM9eL+&Z2fatjmT- zsb^?}m=xdWzB2q^n2UyTEtrF4C=3hB_cPX^AIr;x&{QazX4A!J2IKDVYSBy+t<}1w z)vkOep_ywj3uW{nZY?D3UQ0Rpdw(cFd; zH<_|seKU&;DTXf1kh#uoqWAemv+9&^;CXUSR+JWT|XQD$ujkdU>o z9_{VU3(cxe%L*;&vcjQ9V+jJ%@~n#>RGa7i$jic$f<~+mOatikjRpX4S{(qc80)Px z1&@s)Da%E^!SAr8ScRdYzGe5^^z5cTNwKdBJhL9JkQ#xOgQsFX6ouPYnLWvX&2u28 zhOYhMKGIn*Bxb?j>5MEXKXFbi$H6J#hlBRbSD8Tua#f3E(Q5ydd zTnWOw+8f3weWokKZ*8I4TOpv~JM8}d-1AEh&(SM6@)nM)(4(tGtxtMZiV4$ z4nl@~&R9Bq=&-u1V^qvNIp=rMc2YOzyP!m4Y_)-vBdzs&9BkB!a$C+Ar*y{_7Xebp z>ZB?VU$-!H*EdA2AN)K6Ej7|JyBc{;IAPBVVY+=YQP0LKBoHS0lrg$$G|FfD)xr_Sty zP}LWulBdyNJsPRq)|cY}+@ulf1Ofr?BV^WxNY~$N73i|bh1iAe=5)P(6e!*2g>_(< z-4OV=Ba3&CYdgz1IBo)ZXMYjR3|CUaRWfE@>u}~1RUi@W2Ym7DS34AuhoSU=nHAgj zl3y;W7f5W`^WXqgpYgGbWf0zxMo<_HR7S~sPJYcDAjAMe;wGj*6N=guR2-ll#)a4= zNV}k+bIkx9_KQ!G9N{-Y!rKA_CZ!y{fD|26_L7%TI=+#3>3h0`wf=B>8uX@|RZST( za$}C(RWM}BTAMTOY9wOJDoNjSfsx-EYueVUMOeK%4$pyDn@_r*RJDvfbDf!2;lO;h z2&)KsNtvHFj1-NBQLX?!ev(RNDvitdV1bDoIFm^Ul9@$#s5yJG(9v1%YW>DLd&^7ZGQsWNw3<-fPuz&B zs-pc;qs;9q)fN#YxY&tX397Wo4*oj5O3msf?iJ;E1X(qb;LF_R23J-gXoeGLZf$a1*0R_^cFb=AtfYoO_eRbA+5y_8a*!j;{!a1u209zD9vYu+k$i@vk#ITJU`g z%JDdudU-3rgSSGi1;1=zA0a;%Cn?Pp4um&SpIuYN+qP}nwr$(I$F}Wrk8PXp z&di&hkM6IIuAkbGRTWY7ldD#)+_}2zoeDl0^OFc3QD@3P< zmK5sEK~)M3Vq(S!wAhPW_WacriXX%tx}PA1bE-E)5NS(PJrKYiDgzMv6^6&MnnjD% ztq~2{&$q^k@R}m-kF@$bI(yR=b>s0;@v47YvXbiXGY3H8 z;}G^6ePVJ?i~E1ESYyP(oY9SJ)fX3r3@rL#Tv_Ld@SX$ZgODqb?1+GaZQiPHex7#m zR=4(+cd>*Hr#+eX{AW1+WU$FuQtc2Ikkub@7IRMS6%CoXUEOKs_bxon+I^_RX}P^A zixI&}j-3>T(aN=*T*opQmV_RSmRbcovX11JTThjcx+NThbkLVyDJ%g4O3P^hp|>uF zHZXFr*EA?nX-V_^jqb!+DyIIkSN>cG30ctkn|(2CLP-UF-(GWX=H#Ltdv^nYtonO0 z{MXa|XmLVD5%NRs^Rle?EmaA8MP{>F^58g;nskAZ5jYWb2*@RT?W7D*t}=-El(f>{ zhnNhle%u9zY>|Dw12jC4?W975Se4~W9ZV7cVB2I9$hl)EE65QsWf+K_R!Is*qc!vg z*)*GmWVIWo=ti^e#lVN7yq@l+5dmJA$z^Thay7PkI4%e087yL+g+ztU`0@JS0ckZhZ{*QT z`2r|q=Fk^I~O0P1Mt~5hQH>Y-6$JZCrC==lb3BE0r$!*^FUf(_274-m zw7_myjc~W$aCjs*%t-*s$%^DT{vdkmckV|aFhypRe$yAKCYP0;wR;6pzlMBnaf*SN0M!+4MB6CJCHWu!dF% zKLoWxaP58VpYT|qPR(h#jZiFzk$%O1xY{lz2D=Vp>_Y-h%G+NfRkwL4yRrK9)HN~n zNvTcL%q!&OVu8>-5JO?pbonqspYYLzy9p?Vv#CGoLAb3h&Ly^O1hWugrOQ3zNL$(X zOmJ<2R)zFPnV8cSOvZu8rNG=@PEMDllZ!n?qOxlohG!KQeWebdbr4YwF4CUSUd`#} zO@0DH}Z!l}W}ZZm;u}yo{L*YxCupV?_ur07~x z+oQQ3k1m%bMTbC~(Zv)r(k28*{qToNYmr!9Dn3&%drC!gP++2+)-99vag+H%55y?{ z`5d{jLg(;U1=akK^R41{bb144836I0(HVfR|*SkC215`$0_-%GP2ucIdEA^my z=yGr;U_`(@e~pbEFHu=0KvxNt1=xGs7Qs+O>NA#5ZHr;8p6My!1&?qhW5ruyl8CvXZzNk6Z5MBwBGLeEH>ovQlB! zQ&t1bZezVV6!#({RL{rqHfvxQ`>J!R_${9Ro5I&frzqHoF2C2Q_a)b zMorGd+X~RAs6CapUuzgaVRmpJ<3d8yt8DgHgyBUXbA;xv%)u#7-${uDH68O?h?+82 z3;&E{dd8jgaJNtsD#c7N<$k`)AOGp24(*~}aYV*-WtXG_hhOqb;lD62yZ#0|bw$Iw zu~BGqTF5r|#sW3+8tuE$2nhsa5TVRZJn`c<1~f;zWl(>_Nhy0|lrdHt%hsjZ0pC|%HGHdij$Fmf#82FczF2u{v*irA3=Hu(va{b0J`) zSGP3z_b4+H8@+_7rMbnw5CLc$fL=;SQk+S|)Y#s{ zl>Yym6bzkgoe6k&{?8?G8+#)|8)pK}fA6Nm_wRuE|G#8*Z+00>OY`z!@+MQ{XDF4N zr$)mS86j|?37rZxQE7)Wi=nfzGOJjp%oV+Fukv%A-xF*fDv9l;Wr|jxYrcd$y}yB7 z;5IQ}8R|P^*-WNr|DSV>#mERh% zOMiYci-(wsnAu`O?jO9D-Rtu3dy$L;ym?wA0mv_+T32PV;jL~=D}?Pej=B{uNF)z1 zmzk`ejXWw1JeIq`IU@mavoeKeoWG&x`?lny8It@O+n#qG^ivcDOTLO+37KRYWujx> zp`mn&uvmj}S`cJ9*OZTu60-fNBe;idU~F8RatE$YV&pbGX$9c|<;kW>O_&jQl^&eI zRLM!IQF-lQHsJ22%h!R6Ys`1J(JJfpp%9m%A2xG10dK1?a!%59?&7I!IWSew_`6;G z(8UW@K84}VcoDya$&wzwhoanJA!Se@;GLBWdrV!mZ zk+!-q;e|1YDF{ELueY4?J-doRc(EF5W=cR|N6C#d(-0&|J|{d?RfD$fL3IBpy;HeZ z#Q43gVgu|}UZ!a&Z*iukEHbPN1c!@>5)K0;)lFb%PYTVCT#=gH>RacCfO3~RtCwER5NR;042;Lp!r2VCL4UNNYg z)WFhs&(!&!Tm^Ri)1na*yI$xCDCa8qL$NFtXW-&wg9YMqy=MA|%>&t)R)sLr%i0zw z{ia>xG-~|iuO_9{l|4Oqq-G;R5x+z=0&TcSldN%(IE#_U30P zN_9T%;`%3>zNCTKc6fRsCvi?o;iSH19vSc@AR@LPPJeG8RI>*4i`MCKayIje!8(8i zZW5~`ne9&!8|Tw(V4fzOktEp`BX+{%`JBhWMd*e|PHdYba^^NmP(_=B0GS%0R8b#d zvIPgnFO7|22}6I6;Rj>G8as29GvU+omh6!*A0v>#xy((o0M7jR=q?vIDQv^Nk1z@g z0pk>?sV`9vGn#d!o}0aN%g$cq?~+H^ng2B)5$|=}>r4Wy17p@ESq_3ws-_i#?sTN8 z$ITVuE^LbY{yyBubYj03G{#LzgChWu4pSplVI3@0hjT*(1I@d!k^l8p++O7_C3?6v zFz>TI9%nOy6RTic*sCa?q-+Nz((QT|0a8=HGBGe*i#6P4)j&m+C$^M-OZ5n0;#ogj zFEbqFzGsKrCkxzYTvWxTP9^4yXZ`B~mR(kVdg4G7*vv)SzkWyO#X4vys`eDkt-xf< z`Tl)1tPK-Ya0~~CQE*U+Quhr**n4a`y7msz$co)F$0#rwn0~7=@LG~40R(-}-^Wm1 zY-Dzyf>~IotOtyv$BWtl*kLIbF#)|E+YnX68?*d}8v4px>^f$WU(4hBsEeo^g*Nx^ zC`RKL`Jax}e@5HespKm)k=E~Cy?1bq-zpA6Y~ExBY?D3E4BSYVJ-OrKFWNJA#dsdZ z8@4PGron1D%mFbk?JO&yL3@mUoQ#Tn|570?0)wA7tC0t=TTFU#G=9py^b~4ZrSD<+d|0GpWK^GrFnJe$C;b zGT*)HjQiq4V}54)_f;U?>IWz!#xM6#y;b7YAQJccy>fXg$b&^zT4W;_fijch`C{|O z`|}u;n;3uo_!*LyCV~!Sz6aJ<0aQ2U%Xhf81xo&fLqeI~4$B?_$}|TK@Fn>I4u_x1 zw4%my-64h}qB{Cfz)2wWf$7caY;Gu149NV%g%`^8E|rE%#Q=B*O%C3$tgPyNximbN zI(;)3v+};*3_9Nw6s~aky@H359PUA_iRJa%o3Olx5`&JE+OF`hc(QH}C~f8xh6p$! zQMXF5%)K{eEW3kpmYf)bBLH4(p0Y5>p9!>OF9n?fhQr!)XbG+QPynSng|xh`d8cO` zb@Eh|uclB*T5K-(81WvaW8wD|k%&+J3z2DyD)}JeZHr#dg(hG+yu9TDKC{T5s>!%+ zL3P7qbFS+HBx=fN@x%PQoh<(fW9BmVHQG;U`)hSh*uJG+RWbwYGnG^;mXwMURrbA& z0bXWeIPqg|3>J#+AEXa>1ZG zy+p@)f_>Yx0lf@=u#PL#1h#An`uEe;#ex^!M43vwCcaJaMwZD^9sX`Ra0hE^;W>QJ zt0&}Y4VV^Zf}%`m@0MO>PpyUdJ0HETMXZ{m&In<)i~y?Lre>$ZSazX$g=i{#uJQqi zspv3oW{_8azEFuw#3oe_zN@S9Y$`zc-gU5sL)1J}m45QJQ!P}g%x1_jq{UW46Uem0 zsO&>6e#el448rZ9AO3TW-KS+OI1IPosyC1WpVo3Ux6A;9RM6?XfUTo%2!yr*zcM_P+J1F(-C~xr`+w3&p2+8lEm|-`|e#lqNt9r4mwdc*8^TTS6>g6#DS6A21 zn%R-DM9XY#PAeMajE5#74aq{;Ds9H{5BpkpDyHR&n-`ufW{+MF6^gEJ1PRga_t+rG zerxTvb?jZqO;@zC{D%|KdaotuxEpiZWPfaxdR?}%MA!3O=ZXs%RKizlrE>rb9EbN5 z$qXWvX``tR?F6fnZ~P87!Z{G zOhVcU1?A=FzXmHAH608(_MOKA^@WoOFX7f=>iG|k5?}giV~t|rXQZq9@s8JEIQZyj zSb686u#@Kr@^6+)>n>)?+M8{{iNDnzPUwndQL`60zyU2QPIY+1y_UiVc;X2MXeV>aDucY^TP~o2kkSNUtmGb+xR86ar!0fs)*|iVN8$Y&+4^COvs6kPvv#D(_#h9)*)5BH zp{t9nTetqiMe-gyJJ0&l*GM$%Jo|;bH|Yfv--!Xs2-jJkOax-CMCj@?>wl`r_|-xj z4hKcfmm1_U$uw6ZHyyCjqLXmFQQf1aF=$D9D^C$wyvY|Ds{qM|S1NS8hj*o-bU8Uj z_r5vFVOHQbxYJ&cgroE(jVHbKzz{B!0Gn1FAaVKUUp9Pt_FbemOlp508*2}S9YF@y z5v6d%o_p5Y z;}S8weacs|^+z};JUexl_~7q(K*K!w@oF_ggX@JCAP>>-Erj^tef<1o#*IjX?m+{` zU65j$02*60ddm(X&yX-J0M`c`xraTGj_H@6+ZBYxGHdxwn>9 zjmstXpU7J&^4MtS$A;=_6=S-RIx2sbNqd4SCS7+FPWBKye}{pL1M-oM{u1zzAmKTT3KS(5em{)TKWBtX!=>o;RYM zOT0ak?N!5h=F?Zd(vRn2I5h~2!f(>XE4$X3Wxsm_3u2L7(3ppI$kd69dGnoQJfz<} zsco%iV+!d*oc)97lmW(R6w2)G<|!xAv64gT!wYs)2-|&FWn92KsZcTCkE1PeF;rB) z#fGC_mfJ00rg)|W+py){vb)T?A2G9ll4f9U7iOi4`Nw>47UP)F{>q!@nLTV#_X4xx z5wIlZB$!9^>6HxnV7Btug3}O=OCRS`rvN^;?zVr!yc0@0sN94Jx#P+NUh)O+Mq=)C zqH$FiMExxe?WmwUr)fbE8Hh~giKQp=VkKlL51+JvX3Mhi<$l1)qb2hj?38awD|>0v z(X3)9+t>u$@)J&>&$nOo4MNhlh`#hhKbb3UPDLrM{nx^5yzt<$@Hyn<;NfGUC01BchQ1v%2jx$s%>I{llIe6CKaFf$IV2=6Wf4|%kXjvJO3g)yQS%~@ zoXkf_yoLH@tiGfEDYoif@Xb%y7sK__r*(-bTya0UbklTGrS1r5+vX`W`ubOEZ)q{I z{7lxw_Yx#o;u9&_(BmKQe>w=0jw&b(ONkW;y97?1tvl zRl_U5Kl_=Tf7T^$LJ$U*^_Q^Mwm_^q^sMHs5%I~)v@DT>rlG{%B)_}u$f&~GQbfNDpc>a% zI=>M?9W8P6X;$xI8wEoSlAODviQgsi$so*x-2rir^5%JLbIlAhU!KJzL5(M#s9Y+~ zc&$#7^!*Y?rxe`pV?4{at8fq9w&2Hg^#!$)(G4BxZBqvoAy-^dSAS}+|Mf9uE?f>( z^p_GUIW6so+#mSMFmw$;vUDsku6v|6uioxrpvh_OJeMTluYp*+wr9u)I8m z0NY6lo2@FTtw3Xm*}^S#gB}g1jdKb(I6eZ%2OKJ_8hNj71E03R^>dzGW)x#&ImH@3 zE3?_OT>2##2Ty{}B^iedMTJM&x}z#|SeKcU{t6~d2!Fgjf1Dk3WG~}wa&_Ynrl+?b z32m?-%8f%U+Gn2Cq&##NTS|m_xw%V|WXM{CLaaN_L^z@$Qh_6GTr+2SOeYLzk#@Xm z@QgTs+hCp|x5>*0GJ&y^t1gxs2v-1!dMWO`6;2VtdM3X!ZvtZogSOZW`{}{j%FbEv2B4Mcv9rn`CjmJ zu_V3t`rjYw+D1Y!6P8seQXw`yS!U`jqk_C36@z;4yor3vftdu3CW;uCmL(pg0XW7( zhz$2Vs-Gw0dWwT0MBSYqCmmB5CenYV+eUgPY~yH0wdVWj2vGoRyeS}ZP( zI7uS58|`}LTyA>`aZjtfmWSocvqB+_u_O@=MsCV?`o8T#^uM1%9B}(HE4*cMr?e~T z;o||B7eQNY5l^=KayE>%T-b&&4)dn=phr-v`l9ps&sE^uDiGsS9Pa=bFBFWU|kJII#fQ6hb5v;%E zS33F%my05fBXGVAz#_IJIoiN^bLC{z%7U}(CZsiJ z=2j;Mh_hS+&jXFGqNI5QwEs{I)PqE}bc*|TU%77Ax)k}kVZ(vZqt5lqW6@nTk|`xK zh!8LoA4s#CXTL+)$gZmo47cGZf}E04UD900U}=lcn&WfR(c7}gHD^FPjdI8qwCMr; zp3G~g;D)Q&{roX~h#x+9S3$V)FhF1l#zo<;CqY8z0Sz+5cX7V`VqBb#TUhIPJSn6# zQ>98M!cEM==(`oou5i#6o6pvnO zfOfrWLalVl*&f*h1xv`y#eScShEhM5BK>>cteD5 zgB3%BDbJV-qpX>(ovM&>+34N1pm;0cE?v$7C{*P2cDn}-4XkmT zjOm+LzmxrQNGff4KRyFO3V;`ZpSK-QRT!NTFFgo-5($qz6i~}Fu;)#ha#KWbozpsY zLl59q&B4jHu%+@%Lbn|#f)@(aW*)|ezF23;m^JGq7QOWSfryQfLgN0EZV$Sja-hNB z&*mj9J2E<95|R~_Y9aRA+1)FleAknXOi`D^hmx^KS5R&PPxHhoDtGB0*Q4Mo7ucsK zuz`v234b?FCC$h&^k5JNUubn4Fum`3_zr2gff2pd`NSe(S4(5r5Z=KgEE16~{epKO zQhOA;C8_d}E;5>0(WcJf={9p}MjomV5X`lb)zO zQe8*`UW^MSL~i57&nkrn1Wm=_CWMV0yaN(yR`At>Q$Q_hI8b{S^`#}S$mrlExvmnm z)ZZRSZrD_!h&R_}d*-)(4ml|c$O|`8*`KY_XWd%-1EN5rWWn(O!!fm)PYSRtEtPYL z`rS;+1jqTj7QyVonvY$qO?JO_@0jfrb$qz82>iO6oE?_wqoIdxO{ZSA57$1QtV=vD zif>#L_}VT#liMZkTu23tbUuk?npqVBa$ZAhaGdCXZcIJXtiisr8G91tZI}+vtTs+e z zK2B~}qU4NkZJ7hz2X;hea?o`Sx0VSM$*N>v8m~7cA$m@;N1&c(59>dIkx}8E>TV^! z-c!V3Z;tQ}AnEFP=<}MEHQIAHWoB6FJibB;WFR>00h>qTs`|U`1*8Ar8^Ew7H7m5u zc65ScChB?~cT{k4?Y_0aaqYu1dwfc7+Bzy>Y#3tohQwESdUk=q?Si!k6 z!;WdE?6$?V1v1);vYzchj_=~njrnmZC!`zJ1+yB{s_U2W%*y7Yvvs3W5h`6=s3*%c z4(P0J9`;|CIYRE5FCq`m{7DRu31Kiwab736IUYAK3tbmd#jRR)h)ufl+Ny};{AY#C zU%T1LFqEZAzQeY#T7XES&n0iUcl9Hxna*z2zho}Zo_}Won3;&;56mPgTk|-X=^3{S z+udw$+wA>{({}e&rlo33<6L?}5yR#2_K#MJCQj4*e+$#Yxd^dbLZCu%=m>9h8-m?} znZJMad9aA!40c1-ws{8c$t|3Ns1;HQ&w4G20S~m7QS&>#KuDko!ZT9$*ZlGjYAt3c-54;{=Ia7MWLo*G>4(F@_F3W-&d9>b50# z)myku^5@AU27oP1@9d88GKd&^BkFG^OZ!N^u}so=$N?JOR8bh^Rv zT@)bXO|KT!IY~F4dq}LpoDRL(NnfPV6al4oEM;rw}u!^9G_3p;osxxqk|_z`XoOx@~bClo4AY0mn&9AwwVi>~o%! zI-R-OzATt>rEe&}!-da5UdWu>pBq;|`5N<5Z{4<`(cVqL#O0yL+(WuL2Rj$IbE%uv zG>*SlMuOpyaCd4B_8P~-2=|0f_ImmPBsBX2=lkoubQ~^oGg>(djf}m=2bVu(EJMY` z4{B8@C)s^rsNy2?s2b$4r21I+~F{s=XCcux~6T|$TskflbUVeHsV8eqkG#Df51`-W2nEf#@|F{ zpF2bY>C|<;$reO00Vky84e1am)$tuPe-jWTLPi9vE$A%YPd$Ex^0}f6oDD*C8UU*| zIfP_s!^@?aepIW#*)N0V1p?^)-VGuSjk}>zu34%qy4P04GbL3P?KA4>Eu8%LSGIXkI`aIdE19JvFPP)0EA}s>qx+|3z z14G!r( zxkU`Nx(h)4*M8;#IPnEi&gT0Ub+)dLr3pfc+)YG|Gqet( zrpKQ#rT?_c+a?q=Y+=Ygx4Q!`RrcxrIV9SH2%Vvxu5j`FAs~YEQ8K;Yx}QVm9*V?= zbXQ;m16;j2p`cBT)D@=-?(=LHaA#s%FRC_q(N;3*-7TyJL8Zz!P0f6PMo#*kud6f6 z*?|8D%>*Zf5Lq*!tPM5@!wd__1QcK)2XR}w{Z&Em+-4rirFzC`&WOc+4l-z4mQ!pQ z?n65-dZ2z612_yDjwx;%D9eaxXeP0eQMEe$X0^cPFU_9tzlnm8OHNo!;8?fj^QI{yq|fbWf-gU$^qt@v?9qWB>j`yFjdw z-?YD0Tv)dDUTMNTOT%tnxo!&EsOm}IVbjY@2!v4RUTk=f=W{+<%s_oTFFAl!UoiF^ zdW(bbVWx*n2%FohH=_@o`}>uqGDn3}*#_%}c@!tXLYe-Rg)Z~ol;Ia3bS2~cg^eRC zYC+D?HEg^M`w`pvtgaq7wDX6aJmtsqJ@b6h zXZ}z6IWrRj!+%#l=V1O1{hXDF<$qj1uLfGira+J#N~be`QiSJNv4-K{uj}f(mwgzl z|CC%97&Na;E(=BpHB%e4rs4OB5B2WzqNvb-cstMYWU55o6l|Dvd z+hmTGoQrm4>f%Dc^HMg1ML5~6gfYH2y*#w>QVh0|;w3Sxw8vj%fp~pC;GzN49|*sT z3Ff+Htqwe_jdoWt#ib*%NxwE2T9xs1Xr>_-DV@Di-z74178 z)ZL(9xvx)arL+v9;74mijTFSuUEPqwoqlTQQt?VN+4su{;o~N14ZQA{!l@~qH91ap z-E1t`gu^+2w9kU)+C*{JE%mPdkqCv0Gc-+T$7x8Qb@<^@bJHah&YNE@#Vj*Gzar*5 zHDZg`Pa$AQElMK1d=UNCXdx5mn<0pX4g3Vd_KPK!?S}oFZAfon|FPv``VUoz`3%Xo zC=8X;1TtA!_16|15Ndq!NwZe6R8^h;h6XMvmstppNSa!?06cRMGhzm*0sItbBgGHv z^xiEE?~7g+-gdU|XAP;NHKBg|_%S|N78K2cbn% zh+yAPOqeq+tf+BO=WMZveU;_oVUp1y)iRMnYyeYQ`){ITUQzPX`xfOZJzkWCKZ(26 zG@MXD8OnNIyt8^EPJKH9CUk?!kP=D`Ea${TsO?s>$J8KpkTuT+QBBV2{fv%LUB_BSWqUd zl0`XkmZdF$(S*782<%)GLY+f|fNr|R3=)XOXo%r0rsyF;oa|@Bt&QY|oxF;bl3%dX zKppdT=c?~NHT2Q-jO>23rpYZA_|ItUh9;_{?UD>r1d|3JK75vwJREwexT0Aodj1~* z!1f({6szeSY+l}2<@m1#+?N58Yvq-7)%ql9C_Ct*ma_Je?K!{Sei$fWUd2xUDZmQn z$S5f8SEDl@><7ZjbLXfl9S{itKGkkb0vLX#cEvCeuox5c*t%AS=B!pqkVX%-w&=*&Jk#f4=;5 zRUV+I4$bfr4~etsvUDN3op{PcSP8DTZVn8(0{)in!$U4^fH;5=5chZ6)8xJy0XVL( zZAu&M^t~DRljV{1&7N^&+o9|Tk<-szVV+DBT@_4@1^pYvFR|)#vZ~?F%ap|IPmObAS6>QP?^OF<>jpraw$5vV#%Qu|r!_+qJPw_3hyBFK@@;OBe z&Vvw_vCUdu3lO8-+b6om$a-mkjBf3T!$d3%I@}*^iQAdd2muUf4W0Fk_TsZBNK!-T zJrNg=K5ArjTWhy+P)ZNp<#Ki!8pf*#&|h%n+WYlzm2vZP`zpC#rMhEam$qt!j;kLR zbb>H*KA1~CH_L*!hKj<3OS$NhE$752&Fr5G=Pk7fq|F@%mbr4$M$Glr8aLsYLH4v3 zN$+=?f1{`Bvj}sTWC;&h3@zAEi1-3z=dEhaE^BO~gVT={>}AB;g|-Z8Kyb`yYbvNw zc{og;jl`aOU15-jwho@EKj``Woj6&1gJ78HF&>)zy0H%f2R09s_Ezb0;$pr<-HhJ9 zX~uaUr<0J~obWD<{vlYv9lw1EP3b8bNsJ?KX{^tNCbB*`S}^O5YJFWhN;%WSv0s|?My-pTLDkI~g4wW%+hg zml1t`?vhLufzYMT$^y+h)#FL)iJL)tDk(SH8YTluW9V1{ZW9%}|LC;!7!QW4fVCE` zl?`JbS!k@Tw$q-Zf@WBPty{or zrIgGnYQQ9vHD3U46lB#@S7hAmz-*skNLi9ar?SQjX!U&5*j7XVnurY* zKbBE{0=zeW&*^$ zAwAi>0seu!12T-2;;2KC74uj0>w;GGfq8dzY%lnk#7~wbLhCH#YpfG{{V1k5KuBJt zE4MK*_fiZsN1)36ubBew&v!4XZrn1;8-8;0ee0@0WzxzT{vhO;p7Vle+@JHCx#(;k ztTSAA)@hiQs@E z!h-OQ$&(~PTfzcG*>bz>d8!94$)cT<&sSNF7#BtU3V?q@`C_q<7NXgZAJV*Mw$nyq zZr&#`ei+^TO-xq=E3Ee4(X%Z_cF#M!x$yw?$UOcjptu!UW)+H&44w>Ps>AA*rJu6 zDQDYN^Vhj-%zjM=NAk>3oB1XmwN;`D+oU%(v~?bc-bFY8ieK+(r!_$u&beovu~Xsi z;AL$73;x9NpZF6aJ0sJ7lRq)CasCH?Vq#_fALmas!R|+eY+QGWW4-EO>?t#FR&00Zil=*;v=+; z22ZAeOKJd5i`xRqTXi`{MWQgfnVe@EMxroh1OaAEx+b~~G? zXRLF)!K)oW!O5?N(#oajfVMI7BRNO$2wkkXrZg7=(`y^<|4M>>*dzEGBi5}n8;HC@ zsM+N&v%41pDO`l`W0#z*J&8`#=p*U4@ru>+DIiA$Il0f~Zolya;R{EQeMn&#Sl|vk zjY7dBnjpDJhWF1?es2VTlFS0TNn^#mqlzwY_SC!~g*3C@%gN$9d?e4Y`q4|admxYt;tS&@ya+KZTAx$_*juiUuZ>9zn=KHOV=M3 zEy>#s5OGc(47ANDY~J%`J4$Zl4XM-YPpr!#!lF8!g*S+WPw>M_Y~y7%v7jCK%i7Hw zAEjhdZFU@HdC|+fB+2tKg`;%vi0tBnP{9W+{Afb)YKd*?f1Xueza%HbQgewkl$4!( zP{N10U|$>$tkho^am-E!*#K6#c{>BXOZ%=aj2;6_#A&;FGg8!I=?)=WlhDqajzv-) zg7+wdX24%p_JZ~c&6=d!#=0#cR4u#`W8}4y3HIq(2Cp!FP9#;be55->rD{kFQ}@f1 z-3RaQKu~$J-OA>R^3&jqvEv&K{s>*Umv?*KWubl<#(O*Do;Cftf0kLE_n{zPeWH+< z3xLcRa}Kq;!X)=OEy2iIYAVd&^`jtv!#mkEcc*t^-f-3=HAOB3E0zq z-ve!vg-4x7eYwc_FHIm9&9FL?u5I-ua=_~tt}>UYbFfECw z=EmM&DtA7r^|bTA9hw@-p6dfta#6^oL* zsgwpa6uWHim+!z-KGZmmBBTi$R$GuJ4Q*LwO%Do;ewcP$C#O?k%*;ot69v5Y)fF`} z-JrNi#8xSH)N^ce7ueO()|AA}ZToE;4>4g*_Hq{P>&EW>f{BkeoNAR{(!bAJNEosB zdAQ=G9<`nn7y3|0=khfF+vwmK0aT311N%0VLjK5l9krmKC{Nr;(fqy9Ud4~l)Mmg6 zkw~|1X#SVxqQr8XdEUB7`-R)o^+oB8s+Gha%tDh<3_@RY**RW?q*H9Qq){ntZ-R4H zOJPfC+;6CdHSV7$lFaqbNdU!ehms8dVh2@fK^g3{0-XF7*Z|p*^t@>Yr10sL#Iw#0 z`tUw(T0_AJOJ!D;r=xXzcjfgA>Mr}CyM(rQ09oG+C2q)B%y?*st{`%hMQe>S^sAp( zXxyKNYfM8$Ug~^*otyWbncvbNz|W;Bm7h$ukg^*CEV(R(4!)>yuE%_0CaOBR+Z`@{a9k*}3^^U!5=de8h>nP5 zgQ#-9cCx8oJfLLgF$>#(&}Qg$%KLUz_)6TCpZB-YUe|2)X9fl^!Kg;;-(~^P$H1AP zGwsIY!c#&^YsrL?X~`lJP_Q8guR-)NG5U=RSGa~0-sf+}PrVNRyej2lSmSyB<(CEq z8oK)3L1359&2)-@cf#E^Xg+z&I0Y2!WH#FR{{nAW|1;h){I~b}u>L=||0{MaX#Ib>W`Y6pMy;l-ZM zW($qtUQPZatBpjB&@aAefCFM_$=ZeEOL=MLz-p%^C@>cZ)>=DitG+3;lyp{+hL^t)oKy=z z%lKweNzkn#7JM`l!))7>Tj)_wqIF=MZ%QTT9_uFT*&Ow0%07sXw=`ZEVTt!OhCUeNwj5^m4RA`g_$h-AxVjiB%otRmYmFrW7Xd3gah^ITzqu-B%gAUCY zzywornPIkhCtxhxTi#%lgyh`2=9HU+z{v9B^cXvD)*~<|#c>FC&sN^w3@?_?vM_ft z&JhwZGNs~4p)l)HvI9=-8c?bIhRdI6>X=`*bnA>zWTekYBrZxRd8RT!NngeD@34CE zztnR?7x5J}hqY1=4lWps$MGZ!8*5m>;ev8%=^mO~m>MbdUKy@gjctf5ORK48xF~^g zkhrXhsBM-Fs}OWc3VJMM;+k6Ba76bw4~m>4em9A@E4Xi-*}^FBG1E#JFsf}DRHY_D zv3n(n6fAHRfJpAlx$b&rGskur4G5SztAMOf+pu8oGxPx2;X?$9XE_F)ikS8y+?>99 zA5P732|p`IDH78P_=sLkF8y|}tW}Ln$hJ+3PwA;LLJ}YOUlC6atW1C!TKs{VDtZ$- z;DgT)d7QyGPs~YNzKQ@MDz-aVLYTZYZV$+H$hNKAcA}e+-p%ZU<(1b2T!fVx?Odup zdYgVe0}R$cZMJF7BdQ(rlS8xWDule~WBsN+%JtHGW#Tn{i;|toh3ncmo6rOG$DUX| zBa{foF>kvE5|LaNV%Ui;cNr5Iywjb2Him=lTce)V5?mJ70G@<&GnF{_+gOd!KAylF zsEP5$+SPMEbLaw$`gW(ZI-2$KAuWPtw=m!bRt8cGDq|bJaDy#JV`2DMi#xa=%ILmw zRW+0S-%F}q`3a2u=U5%@_SHHkfn0Dyh-69*^pcT_`0&E-+|6-!2_V$X)kabA9QN=t zA|uY|j`GBOs1X%D#ed+}1}-2Ay#%dmc_EcH9b;)nq#-i(+Oo~`O10TX2^ zEz4sd19Dru_sZD0!_}(;anC`->E8w+085>quoWO2Ki&O6rl|C$u;kmyj$b5EO483C zW2NoV^dzzABrzO@a6y6qT|1HoCP?RaED~y+$vTIAbH%a)Yr40jQVa8^TLJx=$t?4m zaTCX*kssOF18Z4C{K!zb4FhM8hr}XxPJow!dvLe~ERA(b(<;zf+kZJ)2bCDv3H(a5 zJfIf8nhO`igVsEWQ*ClBvn9ha+GMss0ZfF92z-0s@^`-9U?RI%MGG*$x%fm)Da08UNYubb+n#$8wT2 z&^8fo?2NM6u|za!?togaMjTw0nw}dO3^#%?FF0XWo+a2mVdVolQlsoV${lOF6E3J(-f?Q~M14c!>BLd*+O@uPdbJ zJw1W3!`@8K?)Hawi1f0}%Wc2+`yB`oLj$z@334xN{BH_^W*Cb)2Be}U{S271M5INw zCR{KhRw)i>xt`BnfHQlZ1~3({>z(6$UkZQ~T>6`xxbIZIQ~~Qt{Sl?{{7)woC`wwK z`>b}|G1c7=Yjkm1yxB?@@{OyK>kmk=7iTWf#10$>N#Nuo@2V@>bFAMt)^k2ZhwHO- zo?ktL@me!4Z%G;RcT8HaU7&QD!jYfIna|m!SOJw>go74&?tZF5U?LKufl=7<$q`NJ zvcXXWPv+-DN6#7ANi!PG{_;wY^3Yw(!%95T)Y7aw2vdbp9KbiqT7UH6+KLBsPn1k{3eJ&lRRa(1>g^|Mj+Iya{lMY^q zEvYo|ONc!jz0(9gN^nAxqmC??35(a|;u&(ztyS;I!?MD>6f{IxTROCD@c8t}91XU< zupycU4ac~=k=_ZP?{}Xxem>%; zyW>1XC1dI6OihG>q!(-UfQ#E7-AiwhhU-NhjG6YEMu3aXWAshAm26$-?S>RL@J(gJ z1v585Xyo!5#tv@%Hqfc+loZW&d#NGR_A(uWSpA&elpPJxisgLEhj=zp1ES2V3Hv!?@GsDoxGxMdO1o79i9z)}421a-LJ z@h)1l)w<|_$i952`L-(ybtZVc>NT^J#0#ba91o~o7uGqR6*Y-@n^Er3|FHp0Fy7&e zh1%m3j)SmCcoF8!M4;H}=U!gpwy|6hv7K~J&ArV)>lR2eh3D-7>d~)MFRrN#5XF9k z1W~ZTf8X>VVC`a`K!_bbZgc_8V{B1UpVvmX0y_x~-;`?-i8mZeHL+-t3)%}K&fsP} z;JhGxE+QGZ+n-I<{)++;1s-uZPldnDEd=MZQ|y=^7;;uk-0BAJZZyjB)HCU!htO+7 ziXg*Uir1$c_6NdU%^+_aJYXyxHJ)Av!Qmgv+2<6^u8!|^B zqXs|r_tGV@144suMwj|YtLM0wmyd%*2EBPD%!eDM9C2pa9 z_K}&oND6sf*@D7lf2IVB5ydWy+c&qS$E1yMB~@ja4JBm5P3z{kA)Q9!?al%+6rRX| zXh`h7^F5aC2J@`!H`8#{H1pI_!KM0ync@_+0@JNR$Pa30j^byrAV!(^JkW3~eVr3C zy};L%(^=P=Nm?40>K;c|vcfbRR;LK;b_I!AYAlYRwpTWo0X*a#Lx9Jm(y6w{xeaJU zpWu8#ZeFMC>}_|?iRkOBq-i31#7ETQI>RZPiBwT^#NcuC$`6DSW+(lS0 z6)pgVLYMp6U~+jE@5$xQ#3C4p_y9j1`0byjK#Zn9 zEkB1Q1{kW5Cwznjk%&`vs1F4)!U}YB&&Vm^f1w%xPd9%a$&`;6ssvK%Ww! z(ilEpwifiwG_-F=mhkEmqU(h97UDrx%@2lF0M!2xE1<8<2qgiZoD>;1G_{hHzx#M| zFPwm7#6O;^E-^Hih`@TV9`;m;Ps z%GBZCUtm*<6?eTvOxEdS&!#GUk$$T^D~N4HfB}0j(5Ke+zhx(gdHVX{NN4l?g|%ly*f!az|n7Ld@zGW@aadw?T;6)Psjx>o$hH*EAgM6 z@Er_S2PyEIa^0A}19Bob+qRd0Vq-I+J7M5Vuq1P-pmSU&gu(kUC!zc#+IJor`ty!{ z8^k@-$>eAJd@@Bm{IzaZ+U@=;T3~uD$Kol@$H_G)l;#^z4vvj8OVpb}KnN}*)sayW zp$oojZ#FzeZwnPK|9ohx1!=P-Ld8nDM7<{b1$KPh;kx8nU`oi(APHxQq8!$C^+Fq3 z4Ntv9+*Me zvK~*gs@g)2kCLtuGdj_+QJE8$Lmta<>&moj^-;SQOD3`Eas+ev2j!iGS#3NA7w9PX z2`cAxEr@4j7>J&}%>7NjEo(!Xk`TQRz?h+|^BOg{a;Gi?g56tz{K!d1D+#UpiJyZ% z!q4QexG}|o*4qtH%I*iV_N0KVT zhr0DjHl5R_Eq;*K^6OF73!n_cp}goF;;+tw>M84@eF?qulo1Y%gC_VIkzEB(B|&8r z&fkpcfu-IhoTySZ~o9e|nX8V&~ zp5iFKMP#wI)POiiN1X)&`adFgU;!FN;^`@i9pl7mVhW*iV1&GX|5%)y7KpIxC-bLP z|I%4lbEn-MB&LSX!qKQ@_uNhl?bw2i=M_++xgsN<>-^&XrBEAgOFSDa>9wC=p+JU6 z147|?iP?|>(CHEdkylcbY2gIQ6-NT_63C%|K!yL2zHKmDn5(6AUTX`QKBA{yC4XS2 z@npa;4BJ*})u!<&Ei7#8QDK-#jHA9jwwq+7LX+`@239cH_UsIl7Gv|RB?aEk)|Hnu2$Hq5;k1+sXA2!X z5u@-WCXe#n*V>|Oq$#?TCH^EpG3jc#^R2~h%ld%s(4>OK*ODaOZp39D`38}v3cH(j z3o5mUlLHeMM5w~TDiL;t{s4SV9<+#-Hc=hP+$q4uR1(>2lc9g4IK+`u}7Cw zQ}|u{&2LGfnL9U-nATMrgJ`3Tl+qa6A&ru&1M?Ic&;qzPb27#Sn8yN5u9H$KEc;ih z<9k`ETQH_g6k}^l?1v_py}+@1J!d0h-y9lVNXeL2?mHQBie;*J^B7oGkXnm_@u^06 zH^Mb(SDScP`Kq!H<)2vIL{xy%V*3g(Qg4|tNY*hFFwT&eqvkaRiZbMZyqP3&Y3LVc z_s4R1+_aaL?HYZjN6oj_MTOq3EcWk3>!r8Q*iE#GVs4TF2S_OQ@Bx_7nOS>h3f*G3 z>5(c7qzaJG-jV1br^c(%Wxrh+e3uIGQ!#ftn&PTOY75p~bfE+`4)ts@-MXt@kP{lZ zNBeZ~7RpZLPY`V5f+>ZWwMA}Q)0lb7FOHqoQ&(gLdTx(I->@Of^+OLeCyz(VEy5SgJPl4pR4o}U#k6FRC_xs=m(R^dvZ4((e46NDp=p*=+Dr8 z$;{-fc~^v!iff*KKx|{}%t2C5yGj-IB-<#KHu-3Q8$deR6n|;p>=T{!%|8%$t|%+yCVkD&K|5H-VcC*WYoX zQXj=D{z30f zQ}`;Qu1{=b(2*io&UZjm4Mr#6Gpbp;cGc)DK5dEIh_b^g3m0dZNR(|RTA;*ARG{Hb z(t_N;dLf%hDy|#!PT)JiA!c7i|9ree3?iZ}RB^+`&>Q0o|)&{ECW_lOXyg zf&Dac5RQP?q-|HpE*0>j*v^y4_~gbMIC-)L5ZB*cc!Ea(hhZH6}(ukB{R@PNq7 znE3IH7SdsIkix2*aiEh9NPo^AUz#az&M%^mjzkO0+~*uR@H;aiGUBA`yda+aIr;}c92(bRq5Z2 zDUkvSm3zUqUNK51_mwnWN>DD_B7S0C<$I5jp zn5+&3nxJMfkbsGcDPt=wI$9~S(k=-=D`RafM_~x4menEU3~3kO+r9@O@7CTVKjN@r zw0c!-#Ui@m{D_Qk<*)QgD8kiX6g1u``vu+NB#I&0qs*yiO^`ukgA zia7sG-c8Kx)ak<~04t^q30(z4Kn@-FqMR#C8p8dj>4=Z2r^kl3<}0rWMY)~?;0x-< z=g*Ks9gFx!pC3xpEscbES899piIEclxbVCaS*%)piffJwUDYUoK|%7Zjfe?1h&4wm zZm|#ywyGomIVF862%h}0jA^olEstqFNt(vUIkqu#&&tT8_7SU_ey2eWc0x+ zJ^68)3d8yws$Nyx5od6SwOxC7Pe%pdZ1c(zo2ZF=b?$s(5%{d0h^vauZt8)e{K}L^ zgWV7vD{2i&QM$W5463C*d7yLVmFTH#X!%fjc>`OWsz4D43VWOAiIX59tv~m{u*y14 zd4VwX0sT;c$XVxJrIb?!0|(GrzkP=?PzxM}dh^q<%Ev$u8R8{eKW{e(L&eu@7=i2s zmc}`u;hXO*Qk2>t4~q=re9Q6tP=dR7=F;gUP1WIKF&W4Ogu-=VBZBZ0o+p~g-+~AF z&2SN*>6%yASOFG7fd0iyxGarm5s)w=HwU)sj9oB1h{9Ba*OeH`H>|G-b8ZM5HZaqn zaSpxmXVLmE_Qrp%p4jOBY9)k;?O*3inA!gOg;_`@w93%>(01`HVZ zGX%!rD!RjTWldw04xUAc3W%5_bJu>+ilMT3sX1YeBoF(1w76IOB2&mCS?49v^p*vKRFtO zWy~%qlHGjJBSP?4%e?B$(bsbAHeY<3DelN#Rj#9>wCHj7M+pw9XIn0& zl(9EgtK21te3c`Sf7V)Hwy?#-x8m6FzXO)&p~xJAOOf+oWq^Fv!Q};{v90ZF%S(a2 z=kX4E0iNWe>NFh*K7L1hG$Y9SA#7&h++LP@2%l7x7^kn)e>nfGYHPVcgidsqnurb2 z?K9A0>BQn5RE~4iDo;_gBbbVm88~1%0`8zFymTxKyMQ%LEi(bDeWBLFTL>QRS%;)d zxi3eqpP*gs`dx6hhxPylTtl)Oi6m74-{W9&TE@OmHyy`2z=?XX9>UPt z8yAg+ae!3&?KH6o%1)SI$`bQ;wDeW>BOpfB?+3Kw3!*Ev8s^D8Ht)X7DAAOc&^!zu z3gexS^9P5Zan-eXr1fNuJON)kQVDiKO@scQzga6W(KL99@Ww+i<1P{~TzT zNJ!p%&(QHMWgq*Z6xJkm7zjSg4`qE#YGrRWJ$#vSDjGXq^q59-&cXfVy@=)R&pqQO z(Sa{vwk~kGcvrP+Vbq%yPq_oHu$8J?yq*X3cf=uOx7e7Xoy2=GFm zlRFDh3{+@Zyf}+lp%9Q=4n)lQ*}Q^7ZYhzC?Ydp3>`;rpgtBLw^y(X&F=y{kpDyA8 z#pm!efzL$?bIEBlsXGMrljYiYf&bD{S1MSfs^l9BF7lG_jQEZ&v zQslX_N&be1XEQK%3qo^<>}De%S6}cVQxFOO1y55vi%?s~>}#r1>QFTH`HCU*GB-P# z6By+FIuQ|hiqQKLNSGoJYQY6&LLIOLRi+C2sKUt577x^}TPA%|Z-9#d9f)q=scQ&p zG2DsFm!h_AKE6E1cciWwX7s z4nZoX$0d^js}h4XR>_M9rkT91K)+LWIe#W|shFQpo>j5!p=i@s``#JtgHP@Dr;(== z$P|%Wq=+#X48s8gUI7`G>6vh2IT6+8YmdIPO(3b3f^Rl=N7rZQ$P9aLGj@q+ZG1SO zuc;!%CWAgXGqir+kOY@iXueJK5HvuUg`mwAms~MK3NIQ+coN=V(Fa#Z76-sFWQ6e! zn{PJg#$w>m0nCzDwcd1Yi{=?`;B0uNv)6hU<*D%}lL!VUhfnX=jB&(y{k-ia^3(zQ zvuOCwV~;G%e>EHZdo=v_>v$m5+f{m?=Y;zOvs^U9KsvDv%G?)iWt(_dCz}=D{DxE} z5SmqLz)4o_T;Owno8mK>>Yy#`JWem22qf(wlxG}mnK6gI3vk@u9%$KRJiY3yeMATQ z)DZVJl22RxYC^n&B^`-}*QYiTvcw7I{?P{O{bRm&XI5`Xv?wN}>tp}Ml&`KgcD`Q- z0zZr10-wjwloOKX0~ygBEBrm02DbCkwWxaHRH{)%+G#YwY}l1Q~fHI@75T*ZL;V3DZohA}IL zlX3=+1^f0_DE0&2kaEW|xFrBj1mh_25U-IGB05w&1Y8%O7jo1TE4Uc9PxfX606%YU zb^1$*KkD#Xx)Ud{A6{KZe*#2*$vn<${F*DB=l5t0DTUP z0O^t6I?4~D<6|)P#>=+{QWE24$B?g^2K9ifajvW^rB9%2*ZEmbky$AEXK(j^Hl;H% z|J5_S4F6N5X8vlI`)@O1E05pv3>w;4U3$6@!C8-YhEP*HHn8_5B|$n0Ohj%b`vERZ zQV9ao+ZUNVCUB`bh!vmmQp0<^{G55AlQrmh#a3m;LDs}|p;MSoCogGGbj(xp2pBlh z^W`3aotp@d5PA8P*iDCC9S5bX+}|O=nT)i0+2>Oos~crk0A8k~cIu^=sif&0MRYGJ zmlpOLtQ4xkh!fLT9LY@%M$sDgPJuoLID`0rtFmLCUqGx;r<%TGx=lL~G}%*WvqAk% zXv*h@j$c)`{NZ}a)jV~8xthfR(uHbZG3hqScLbgT`-$#0HXJAQ99M9ZTk(MFl0SP| zf6~(UmoxL%(Sv^ym~;I1TZDvjLL=S-s{A$Eb`aHj(TgD3iS>cFGvls*ok8N7@za%1 zLA-qSr%f?lA9O_rG^9J<@P@3TOvvL zOf1fUneHNpfq}lNX`QQ%2l6Y7D0xhQ1Ked=$3s2`xtD$yk7Xb5*X>>nPaWJD=*y|p zrKb8b@Be3q79-nVT^IdpTf)f9`d^QgSs+=PtKr`&Fb+iexyZ&9IQihk@d|A$D2>Ac z>HZsZBceuf5kkKaK)W><8v;tW33S^054+Gnq{Zv*;`Puk9fOBXp7QNYL&HjbWF9Sh zjB5nFetW$0fpe*!<=|r(cXd}IzveCN$8f%PvjQb1@@Vbih=NuT478%RQLhYGvtC=i zGEj(%CsI2seKiV74NmA&dc~Z_E-0Z??=F?TyU@4u(OgOi2S|Qb2Rl!2X!lXN&Tep- z6TE|mKm7ip_7epOrOwe)1A)mtt%)1+j@q~v0}{_an>Zj(6usw)@^`tPft> zve{c@I7m1HK$vE~$BR8tiq!RCM1iw~<;9>6xqt7X5IdTh)!Werf{{?r$5WoTKu z1>&QF)-CooM?>e#83oV0a)6yA+Y~&oTrM;))e#0|44pPF~-xUe2ecpkv zs1>Vt+}T&n6#;^6;$4Y*L<_{)%Jv;8-via%@&Un$P!OU6Q!o`Fu#z|rK7 zEAZ)*Eo@92X%y{j3~cE{Y`;V(ENsp2zXU971#BHH{%QD^LIwlFzu~0v4t7RLCQkTT z_;m8ZqF-Z~xP6WIx1=ukk58e0d`jT!{8K;U4`B;+33+J&4G~3pdrZ?+0-u5L zkNf$%tj0f-K^PeR4P5%WGv)u#`S?=h_(R>}kDad~ouY}OowI|HiR0I}e;a{L#>Cjd zK+w+Z%Nu_f*f<#RSs56=Zd=jL$-v13pOKB8PUy?!Ut|37qrVOF?|%K09X0*eGV7lz zA)?k_gZy0{y=_1`@GltE(b&zvX< zR=>X>R+t+v`W*y@B3KYGOJ+~paYj>=IGk2#t#0X`qXOh$9%0LoyR`)@@G>pE_W&3x1%%NHtUi7Ut6Odq+kWAl#xY@DRd4p2%x$nanUKsnD_FbmH&u}F z28Hjs!WxE34GpS%UN*J95WlmljZz$~15dAnfT8#TB16GHR}NCPqN8#g za6KLG<^-QIKKB??Mv_lBfzKHHhPL{oq52)pw73t1ickqN_5-6>6fV9|e3U9~e6D*s z6{Hx*3&{|6RRF`%-4tQ&{cU#&Vun)>q)LaZfQrHfP`nvx@Z_w$Nad%`L}EpYd9gG8 z@BTW)F7csJx9j#7w6wNRSW(cM(Hlo|yDpbUe#q|G?{ZS%1YoF+fL&JXB={~b`GPq2 z^OU7^+l4QCJvBbH1XS^Py;#Pz?K$TT*;+gb5CF8nh~yJc4dFA6(ca%Szcx&gG_G#s zfiwKF>He@>1m<7@@m}A&XIZN)5F24_v*>1(cszpwM=${Z4{Rn%?I16g3EVgiulkQ^ z9KpBm$1eN)-+yTJ=KA;Ljc@3F<6s%!U(E>G2s(L~_3x8d-4{6BhX>dHxq02ffj+uh zyo8N_PCAyRpY668Km|PP9DPdZp_FlZt!~C{@dOYVM4Q62{qDz?b|EogECfc>3|9{% z*S6BL_aS2B9BGGy{#ei9hElyVtG_Hp+KyEAr72bv^rbG3$dr=l=fk)S?%dR)-AoBhf-w*7 zGK-_dLj8q{;H`*6SO3T=e)mRWwa-5PI#0GDuqA{bbVM-6z&l4<*;%A!(hJqTTgej1 zz%C``h7%^mb!^j)Y{tRD3tFESZyOvUuR}MpV<|qJ&-x^ooJRArp~|c>u}LHG5Ng!Z zL@IP3{C$8NeIrp?YF7TkX*B3pq0lb_lH_-JD$4Qxxp(endHEHQNZ?#zG|M!Wa{d2=#HziKE?j~&b1LT-^{JlE~y zTn)@>G-rKFH7z9da6^NDJ+^?-_?)1MW`-C}*R7{Szlk5*zkyzJBS+|A^^oUya*7f- z>=!a>v$!ho#7?$9dbt6)xwhJKN_O@D5^nD?k>z;~Wwu8>pZ)q|**XAk%Xr4{tmM2! zVz?FaA-;qLU=neVqAz#ZsZ3%7zt{~H z^GkZxtSOl}5D;w`@UgO*SM9Cdw*9*A@b+m>8Wv_NEH*Ko9g|gr(=_V3X@3%jYA2a#|mUSBL&|E^}NKSTPrYE8e!iGzS8Z zIf~n=E0aidTm1GAKlo~)#L&E_@n@>IVim1Ubj;!-kssD0obXPsy#h96)lwNX`Ht27 z($B#6X1rL$Xw_IN4s_krY9brrM2nmf!%2B5JWr3RtRaQH@n!=FCt}0u1s}@ufUE9k z!(wQVhj=vfQqOf;u1qZ?d`Szb1dAauJHOlb7}+}Hx{FGgMXnSCgQCK-Kxva*w}(>1 z(2q8#?adL+H%j}d#9&HilE#TxJLkyu7ZcPT1EOB?IOQ`0W?(g>S$+;6e&i2}oC?V!y#_DZxk?%VyZp+n=PONP9ahcguZ<%Us zXRZTtVlY|^j2S-sBJpDZX{w!Pd zBv5R{Cj6lbd;UvSCjkiALq%ppcSs$S%Y;YNrLF}|B)9n_Jz6>2q>ei6AOvq&UuEqk zE7SU-M7@eJxZ+7a!RqR}$3eSQOp?Q}|A4DfE&vnY8miAD0!j-u9Bm9f0OXG2>8n^s z+emI>5zpA3oQy8?Cw~KHbV5&cgBxCo_Ah)>(t<|(G)*B|&*G2aMRHpvX{LA~A>(%i ztR*9Ynj+^o^*Hlsu3k} z$Z$p`>ci5_M%XIldE2Gq@jCN$y@MerCn1d=zrS*+IczP`^Qh?#$bLeh>AJ~JV2T_h zkf=Srl<5Ieka!aOr(Yqx@vP65t|aW!A+wS!aWKTE-nAu9o#XYU$Upl`!c9tI=%ag6#_V1sKEc zIel!3RQ{%IpN7YRAhUA$9CC*SPFxGJky8r@JbB}iM8$mWc+WEDD+eYrMG$P4ouTV` zW5rwzFH6rn&533=W_24<%4;aeqFX>$1TQI{J#ZDqrkoJR^#a|0vU%}?JLKIUw;;^> zta30Y5VVwHPtdIxAI!dx399ypU9K^HOKMaON9_}b8-3)ei-Ht68(e>APtMglmsIE@ z?wwD$5!trUIIwUM0^m^t`)Ml83q_=bT z8`w6|eO?D~($Z)fA*x0Ao5n;pfld&x<3wOmRcXHHB_KuNdWh9cTIyi^8|B;Tt_pBN z$1D$L6H4C@Z_>Dr5Ls?(17UT9S>_ICdjo!39ZjBJo^Nio1X+`{KaUrnwbh#O&V4 zrHtM&HwswUCHIxga|Pn!n^oVcQmU+47Rp2Z3&>(NPOr;gz1@lOhObTnNIX|P?WlPG8J6WFjLoF-T*w>L zw3MnMX6{X%2`Yv+m8Wle^ylQeK z*WtnQCbXuF9>vV`rjUFWNmd18EBuw%!t?Aqdtb7(qwpIT$oqf&?$|p&&+h!GM7c@y zTSnG=`SU|jonNshiFuFqmjj(CTEru9n9#oslE*$9)Azy4;oiV7nC*y;>F-tc z%G}CCaZchindtS7q%$|Nd}|Jl&Z?uaD-O|BHitU`P7KqfMQflQ2HVR>I&14)F`~p} zw1`lqrwng`UJ%qW`%2g3pDT8zT3epJJKduA{u_>Q7I_fDqy`1W;68ViYeJ}4+F*3o z=NzNZHzot^=6jQ^-4Zl_IOOEGLlxVEwV{?rVD3mczelYG=pfbHg8-L zRsIqPU{SsDZuUNu!P@bR`?P>kL&4%H4@_qmYC0Iuq?~rLj*bNtQ~By24v;9e#6Ms0 zpUY_78~ao(P&oHZCnrL(e;N_9RM>&U#~bO#gq=W1*Qdk+k{!o=k!xH_IgWl_sIpi) z3qhxu^a0=LdF2Dr(@X7)e29Tt5dU0jlHEa|j5`b^oZj_OA=U$#ugkF*7p(7X%c*vg zHTZpxKV;L+c>L`QJ^-hu?Zp+dVgPIe*BhOQb^piGA)__YLYs9G6BrBSV19jj9uD)# z$u+(R6iGOju*+bR_@jUC&^hikIMzJa;psGCRw7klN+*N`;!0)8#xCyji{G68v^cD= zL2#S_F?m9Tj3p{crYm7O#&-bUGs_AgUc~HH_=+mWt@2qTT3Btv!B;J|{ZXBtP-UtD zz&@;GQi~?#;i>RJc+i855;5fag`v5JmgQJ#I6VuJ$NGt=!E~=6Zs)|mT+PzRKkpug zPEG*gj$U%{e_*ga{*tmXF^aOJ=C=9?IqpIkQ8otg!0-@7sG z#;Q0$Mt8fjhUuLIB$FCs7-s*%mV0$yr%~0^RJc%&Php$%t!X^@9nmc$cB!LOG7T}f z`m~9<)>=*I?5K7+(Qfn}XfjSBOIk6;05^y}LCPi^RVUG+zTFr=ZL8hmxYA&8P!G1D z!J8J|%isLu>>GvV*4g)D7SuTZ-*Y($?!Z=lTuC)Yo5RoOiseCbclZ06HfHIF&4uor1p=t6icR#dpDg`c-O0gz{;ur{vYc~8-e zKxg7@qcy4{&lB?6o0^>C8lM1m#0y`X8iYl_g;TDuv>K^(Jwk& zmAYARo3Vy1)=C@nskBxSChkFkVIiwlBLCF|i1wlslL_D2Uo%MMnb~v!(X^Tu$jN~- zHQEf5!2U1JtW_{Gs$*Joas6pFS9nI5F6iy!aC}}3rrzT2W#p8-L{)mPAUqV4?H?+o zTO{W?yIuj!f#2f6+(*gPm2e*A0CqsXD7hKgN(!8*iF&fRpNO0ayrU^kYmOxwP3b&;Kq>62^Ve+yd&x zVY{o2U6SkJ_zuM`kfQskb82^_T$mh0FD^fIv+{lhmJvGs4U;SYjOniPg!uu>vOR{S z`sYG_wA_AKwg*;jH4t+E_Ryl_8all$ z8K{&%K#8(5`5IV0<0st=EtgW`BKb=gUrWeHv!@7y34>`p_(!(x#qI^;i#kvI*j=7v z%1+AWqJY9fOeil$9a-pdgG|(p0iW0eLWmyDMzuGq-e)TkldPC0!zI37L>XYTLySfiD575I@k9i>Xd6eT zqB5Gz6r{lP`cI_P88?*BnIZC8-T^RhRcOg@EkCjHbCx&wAI=AH*qo12u|Whu!fQWP zWtwF+gWcj6z4%m%f{|TJ6)3j(G+{ zmhIfQs;)&5*nTv!u9R%rco8rE33B^4`160C17KogX8!-x9A^KA<}d>*>;D|gVqj!r z`GOp+?HrWs4UE2!Uttp$3nLRT2Ltzi!irzW?Y{wwUsnhz{~cre!Y%*)*@6p} zwQHapQVkqr83EourWYbZg8)aWmMFse00ya^Nql!pjehyB6%&tt_UZ+^827& zpXg8SCV627yp#>T*^n>edxp)8^-~g-HTT{)kxS!(f{AR;us}6zpsX2HyDBVr5E#p& z18bl1NZn4w#g%t;PswPu|E55glFvFj?kn%wYnaimx0#e6lk!HQrt)s;q|ct+b}5ph zK4(H;Lp?6Wo2b@uRXW&pJvuPty*p4&?<+_tIs2RhN?rMlq1)z-mGDxjqG)~7~ud~(wXvl9i>Df-~IO*7A8OU3b|Tof3=R%*sU=n z+}QL`6(gcYlXxy+xT-jlqAR!w0qE;frG@@Lm(!M<+d2Auoju!{7yN0t3TROIG(^xj zAFi4j&oz&gA?}_|kputJL)SP0Ckq~0;8gGt%+xUj6+i1;MiQA)Zk@-ySwu@9=5mKY zeD)cLp>6XAUr!Xp#(0%2EvjY;0xmVN2$BmIL{L82yc4iR4n&8XYqB7I3>A+AluNH=7w>Xa=%@OoLwh?**`HR;8`_)M% zjEA4v@F%e7{kOM}HXusuuF9c?t-oS$Q|EsW;lK%Nhmggz73dr1lLWqX(fPgArNi+5 z;2T6|Ux(nnweyGqw!j`VH|tMbGvbzOQ6U#=U!tcVyy zXm-!;h3HA)Yxae8z+9r7CCwuQVI#BmzlPqUpq&K_;onZ@EUpi(hekd-c^3KM>0#Z( zNSQB@ixa3BBQ^yv`3+FOqXLT*HpHmbui#L5Zf!iQ2#!w}`80Q1L)kxxSdq7F>r8}h z#^%UNwaF@_$D}bxmuQ0z(m%eCN4Nmeeh0MFQX>@_bvgElpra0XZdVJ>C>vG=@p+Op zmcM!KT9_l1_mO6=_)&`o{Fud?Tk^$-r#Im5ac*`Y>q2QU^DZTPJq;K{vk=_LuZW2P{%1w_BxV?hNR zugK9b-WhDu-u00{Bp1KXmAeh5lDPJb97Kv|@7}kfZDjI4Yd1&bv}ef*#&|tZ@IWaTvg^QraPT^n49Cxrjd;Qz;FhEi2GX-W3qr`lQ3Ngz z8|E-FgiG1fz>SNddDq@$bzx9;7lei21l}M_qeQBCHzSRuIHuh_RTigax^FcOUK`#i zyb_k-A6=!JRE$bFWNX}*gRLP_-~+AH`ZNAY@_MgnT0CC(7{;=?b2HBI`Tf9m` zK-d#Diz*a8QJvQF_0+IE;;0(}NsPwK)>6K4*a=cNo=HGYdS`LZAep3SAGKbjRZ8*l zW61p>cG3M_3iEe*>?ZO2x04>zG(_^{oHi#fj3igAAPa&pc~7QcPcDf`-C8zGKkU(5 zD&aL@wcHySO`U>KT!vg(={rAY9E3>u1>D=Ts)Wn!CE0ATvix4p`>Ypl3)*X=uX6S` z-ahoaCOW#E>L+*l4UqaGjqw(Ok5^~0Dg%A=fLFU=J#ykM+ zsP6IG?K!?|5^Kt~qLgeH8X%Oegpdmc49LitC0eFH7ddR`W)wad7Zk8nye6uzHGFX; z-ImGj%~ENA32FFHRyix4QmfMRT3ef~8$4a27op{dkEYGBgr@VoOp&~0#fk*B<=E9* zH|cLEyRd#SjW-u*zrtc=Q}TP9aIyFSd-c4@mpRmoLYusIQS2sdI*PN`b+~mUVmP>b zn(EV4FtxK}`bPa$&_7oFr0#1+I*EyFagpEpaO zIr7a+UdaW5-6rgqbboN=}wAf3>R)OUDLmN!irl^camkkGJ@S8lW7JesL+?(IcXB= zwcq@#6qNgJr3%o)^+DO-8j0iuLFA$kwwz6>e01hSSBYDmK))-@6&5A*BBcc?x`(et z&0#nxP_~mky?Qq?toPG(SKTlThDq#vhsqM8Kk!W4Df1^xYwi!l>sq?X^6qp)PTaVt z7xZzmrz6K+if`QP5as5^DsqG2P7}U!z#1Y{Y5M2sm&+4)^KnP;Hx`$x#sz@AydM@I zXu+!@lxa*ChTpW-z;(G5{n8TP!);+LryS zzPWGJBJ-|r(-@4w*@27)Vr(*^>=5G;YVkIbrf+f=|=~KKnD@}^^8L{@f;2xtoiJtoa!ZdTRIvq zjJC`ZzLTo7w&MOnMS?Ux7sQ$uEWr36>v;WpJl>|6)hi{tDJ>c?ArTOQdP~nwg?9Md zlo14*4w@kfxd6Z0-;^ABb3ShdzJ1tDmQDKoGtt|loOfsWd)FTt&Y|jlKJ6sT!&ATK zMrxW|%>rrj;k8K#V>H}Z_3AxxS^VMeSFZ#^km^DV?ZV)%pX|uNhn2TBi;g(Bx4Jgt zmZyX%*2~;+2^c=F0xIBXjX_+1N^PhE;lLs97_Ct(kTW_o5;+*CcrMr{)Hw0`N%N#s zP^Y$|^nYGgMa5OLpTk#Y#>{!i7>_csgJ{PDs0d$coj!UD9Uk-WAdZUvWGD!_2Ropd z#X}f+csudbj&M>IV z0jESPNkaOF$84`?N{r5qpDf!B0Tyu`%sI)h<>J~0SgF0V^cp>ihjnTdpuiWrmK5x<0oA9=+1$}8`*UcNRjz^+;@I|9kSBf3>k1>f2{oBkJ|A zipY0~z+s-Z-<)mokFDT>j-9LeEovv$5uca5weVo>CHoaxJgA*08l2l;5|W}w{m7u( zF<+8o^HUJNl4(REv{sm<{ov@ehietZLQ?`aSUQajvF3aU!KP{gkj3WUJ**k2eQ zrhvd2L6ZmH5jMgP787j<(4a9A-~d@_Vr$U`%fM#O6*7vYfeyPbvFMCa@JKX~wzZg^ zZAY(C1BG!WfDWIl;-%x(-hfK4ot;IFAxM=uRp;5K8@6w=X+I!?1>O(_3A06sv$ zzux{=P+XUUaBSay;SV#$HDKN8LR|Ep4!Au&ug|>9Rt}oJ!JehXf2HYeL zeeq^>Y1J2$$p~Jvkp{5fA`++(0WW*uHG-BhcU~UbT(>q~twr(5?_Zc?+>H)oEDE(3 z%A!MzP|+uCjCeSj%WlJsGYZl4(<_M(6}faRut2FD_LYAw8Ds_9K3TuZ6jUEHBG$rL z-`2sC?%4C-Zd46c2k~n=;gtlQ`Ov(p{tp%zk3jakrd0VB2p?*(q``ac_>sN+kH$4v z2h@hcAg(dWO;iU7rL-2N4&$q^&%M68=`4-=KG8m^cq;ghT=)<}k9jONZ@++zgft>^ z!0dUP3H>$z!Cw$OCMFI+Q1g|%K8k;E((^v!>JNqO87;7K-k^GpTlfw;f}{0xDjoM@Pd za+e7$r2lawnXE>D`VzT$&VWPIoHV0roT3J73~Ki%BoWH{uumI3vB?d$79ljgeoy7C z!&iYm!md-qNm4R1Ds~Yo@p@mC+^6$(7dOXF13qvZ5VuhX(UmKPz9g!qw`iqmU)?fYyhTm7UGKs z#bqQM&X*aub!S_ZYS};8+AW=GTS&Kn!$$m6LARMr!azY3rCSgn2q^`-q^y$^r;%eu z_bhJcI=PijLMKd%er^m%&O^XZG7wy-9@yiipWSB24cL6&kVK%~&=erm)0#~-rK3-s zk@rc;bn#bneZ&)A|6aGraa!_z|av^{w+HXH_TA|J{z=Y}rolU)HQM|;F z&l#8A-ShysY?-rV1BF_KVLR}y87Yc|vftc^NiLb%-~@NjP@*3+pzmq;u~xDi8kYH9 z?#t^vb;@) zvl#9EVOQ;f0X107)H1WzJb%poUfgOf-z!Q|_&vo6Wp$-Tc~=ziS;U@z-m>qSd820i zC<&G`CrA|O>PRDO4S3%yO7HyWEavC{h5s*Zl{JX~`e!DEO$TJkppgtsQ>8BTw2i&P zNu@v+`o4m|gxSG%a=pg7(H&obi7P0?Vst+E1Q7j_Xl(Qs&L?$e&r5U1jAgDb zr~@+XOmP)BA%xoBwYeugR2muR;bk)4Dk*9s`RCZaTQ1%ZAT-&9w|BG}z3RF2ohKkbDYQKdYw>Q!dlOf|aXv=6f3OurRy$6$Bi z+N|%RjP6K@Nbye39-3%kn?u;!?JJCPbk`B#e$`r*vR46a)6fENjNAP07t6%_p=Fr6 zhhzjG6ek%tvkHQU&g_oc%_81vc2Fy_8MjH`fXEO4?xVxp&G$_0I0K5xc~PU;gcH*@ z9H-TeuYTO(ext_fpSNw%I0gTkD+>jCGp6<33f9?_Xf+QuNZcj)+a9z^m`Zt$ zme@E_y95_3X0eFhq>`QQ#VC><=^H>A1W1l1hnyfU9ZmF1qoSWPe`Fym5J;l)xy}#$ zwV+IXM%WLk%J-H&PwjKS7&$$U0E>d1p~haW@q=?3p8&;IUK1$CBh5cQ5f@q|^IZef zmwN3PuQElyebIDd=*wHtC;JT&b0YfV-CGWpi!?6-5Xp?AMRsgDtgM2(?Nvyszr20# z9+i7{nT$HE76Z=w&v9)Cl%~#hj63fq7sZl-!Bls}L@_L4@sk^#0p_aD+ulJSd!Em{#&Z z2Sr`%4Mq0`FaC})Jvcdq3_4_ig4xV`;UZ`T1W;%Wjd0m(XuLc^w!H6?iZv(3Y96iO zkcl>}((sUrNwNw7B+O`p0y@P}r7+bP3%7;*{F$ivPdu^7kOTe z=pQb1F$vW5fUGL{+uG5pw9{&q$VtkZ>M)+1HB|@`X|72u1~CgKJ&~i@qHp&d2>F7m z0iUUy*X8xGw3Cc);9$XpmhSv6R;F`Qy+$^g$cbEeq)R1?mm3k$yW9qzggzd*s00BZup3@#;2#dEqxt}|6^6yT&$QMnn}G;y zmG$;(d8)48PHJj}yZxy{{FH6ruQwl(0mO3CGXOy5m29LAsfQ%#aqR*bBL*_Bv`cF0 zJAQ1BwK*2MmWED$20pSy*FPbOq>`O( zk36mt)1=!8dC+l(J|KVX8(aU;1WOM52*OAzjH8SxHILQfUVeQIT1v^| zrYtR;FEG^c_T&@nQ}kx?T_R6QTmY6Z1mlu_8b{tRu0BceW*54^3rpi32b0lb5iKRh zma|1qhLot{%c6<~c&R+?E{5U%M-9JZjNKXMf1=61=_q_%iLgufkUoPV&>7d`^m(`c z9mnYdscJPHc$U)VFPH@<3)o}xs4y^bi=SDeP%;~RN8kwqtPG$f|S3dp4q7PA?&oUdF1$w47hq zz!89a%slA}Zg0Up3n462s{=nGH{R>*KwQ2~n};~C4+|&N5;q*&{&u#}XuLgb$>iQp zM1_&-2{Zr#S1FwJ?{(+`Pw$6QnX=F(-N&y*QeJfyx?6Khk=CJSBt?;wMFfR;-+B>7 z*Sj{g(sE5?E#Ve)N%XVp=Fd(1OMqD@iWi^<((`}l;&2Gez~>+T_8)*^#p!TO!<#^( zdt+74hb$);MmlI!|75qQf}C^0tAAK1I;mDd$>);!peLz{5ww3Erpsqm!GbYFB_=C*w?MZES(0l@ zB>~>;;Fcyg^BYe?QibIiS=Nm3WXIZdV{%?ZUi6yE7|xU3(%PlKvV=NZ*EhQx(Q_AG z1~}srT$KrhpQT0-zuClonYLNYy1%mjLI7C(7u-v?>g-$RVk!3>`QzAGt4S4aTwRMo+hjc{3Z>UDQf2@tr2fRo}J`guNr{U!mrCLfEN?%jV5*sPErwI(7IpyfjJ60 zxSa^iklWXSl5;@hDFhcgN-^K=@@^s9I!P)%6jRtnn2)Un4re;DqJ?z64hj{KMcXh z+tJca|8!jq$6{8IKnr#yXjeO9#$-LeB&XdQ$Fxcqu6#`n~&a zXxdnrK{=Fi9-;0BnWGu|p(1ym;4%QWo(r^g0Diu|KZkG#k-iI96a(emP~6RPG_x&G zo$B#489n*;kQx@?gXo*rF3P*|cDi&}rC3g!l!gI+KoVsyx@RQ zx(X_A1qI|q91Ov`7o?*sWIR)V@8-#Tag3p{69v@Q1kWPM;t*OxZCC1b?1n-~j5jf* z*Zh>euv|Gw*orFm3Q7piZrFETFVEP0GW#J`E&k{iDpnfBrtYgqM1Z#-;ymLQ$glR`)1A=wG-*K^WSWFGtub5lbgv|E`N=Yp_wz9~_70(Ln$kE=d@Ob*?KvG(}_X zg!}kLb;PJwbSMPU>T==xY!$$ZO&9LeCJnO4EhzxxG?mRXS*&aNo&{Yp{POHIh$u4m z+AG0EY(~MyhO175OV+5n@UdMz;Cg750PBWhX8UA-aK%;K_b@a7EmSTt`-DKu8(j`k z{G%QjBTO+f&`@K4AwQYaUg#Dztf*?LIlO1;UF1CS`|JX5{afR@ zo%;bf#c6JJ*`!lm{WVB!T(22-2QN=qT%)L*xC_20!wqr1sY3CzbVDNU+7WDNzSSI* zmDwgb8;imVVFxGWrO-*0Fgs*ysD;< zmY*T*uDN6OAJb2YXh5kR%y-erFa;_-U7cb_`M-&yG_CuGA{)agC0X2b}zDMvE96+J6HYl*|SnUc))S>&$Iz<3r%iw zU4`p^jFvjsR3g@|_YMwFt4$%5DD9Jnrqs=r2H=sao5nd&uc zz&)3DNVc_9RiVCWS;gqk^2NTOe{fFEgAc0@8_$WCUkh~uRK%!KLxK063DE{6QQ}(I z>tp;m1kU4;_#XN}Z0d`$jFWIb_!aqqUVAPcmIQA&TPM{6yR9(MaoQZEOQ(o}wSwfD z%hgR)a7LWRj|VvQ2d_stwDt1k*DoI!qk=v(y5H?vnyNv~-UO8XsR}dMFcnuPl}hNW z*`EC5yKv%|qJj{cYvE-IQEyc)15Tt$PW&9NcZx|9l_1~(-VVOzoMIJNFVE-bdP-0t zAVw=1KNCRnJmD)$H#MgQhCZQ>4y>$AadU?8HCx{AChR_5oOKn{32V#sO*%U+n9qYwp^dvrt%VeugTT@rF2Z>Go(-lhto3J z-I#g=3ZyT2EJ(Re!VgVopqUcGxp~#Y0orBo-2pkz6ewvJaCZWjf>}20e)Mneg{W@f zHs&7_@W{%|dFwnSYSByX+4M|bj0M6+eh5?5 zJ=UcBTf6XhLB?LCyjlZj?EwnD>sBxY{3dT(rI%xPNKW1ZaWkW|_FuN*=m+_V@kh+3 zP$vg^9ha~1tB)(x_rQ=oWm_u4<8FvX{!?>pe@hS_q<0d@ra2SC7_BM_ssZr&&Guz? zu~2nb&INcpz+U^Yo5aVUCh&NSU0?Z+(}naBO-~iJoa?19Be-1UB7ePRfNeYiR`bwa zTf%FMD$0YU?bE+fyH}?c#8vWFoXDjXS=?bTh5Rtx-%#l}Q4BKuP9Hd*C<`}B+Pqdy z;Qj&y3}z`sgX`#gcD`Ue>bu?Ou5lM50gCgb2i$f*iw^^eSj4Ln((BnJ;(8$Gb7H^F zW|QYeqjlUwgvt(%78TyJ`A2>NneC!O9l}wE=NewfLqUX-F3xPZzr~2M%?c^3LHfTYOS!4`%eYlrK|Pfi$?{s?zOSPNnkr8z1$I z!8!K)fwdF7v>NKxt(hr))Pn@CoUQX<@vwc0V;qUQlOPy3Hh~3XmIoEMuk8mOOZUsk z^=!wL%~k!sgX}W!VaC-_R|Csd$Y`CF1hRh|mnR^Qc)A(T!UfgZ8-pfbc-uwTl7iCe zWqMIuxZk|v<@Frs$LL$rwJ-?xP1020uopyY8JwZgnRa?oLVyCOF ztFK{f(Gr_Osd6NE?yC`L+Rr;l7k(s3$Y`)Av}Q;ahm)+)5j=2FPqqL-_r0OLALv6- za#r+-fT}$2hVc8V@e&6&yl_Wgzgnzu4uS$;4W(>y94H<3X_IP)3ru3F4Ub?DhIG67 zR9E$RubdKUaTYwoqk$16OiGfn7*tbVB1IU8ycTaRO#Pbb3fccfB6zG4KZlHe^V4dP3uhX3ig>vgaH2WZz zja;3eL#Yk83>ED$nj=KH)_X=m%MNg*-83H9gXvq6t9}ow$$~bPVI8{9`l>Z;l&M1E zTAL5j^D_SFZ9yCL3ZjuLrL7)k0NdqC$z6-yDgW%b;z|fU=nnorc(;JSgWMkd-RuIe+*S+rGl(T&8LMHp{F z%#fK7@aZ_Hor9$AJMT~RE$VTuX(>7-q`1gA4KHF_+^Glp%9_;!@DwbpVsk$-8#LCt zq|D=}1XAE`OP3w?q&9!0P?*j}1y?*Re|1CkIUfuR55f}^sy{fH_^@QDy0v+5%xa6T za)k22m@b>jEmR#UVJ){zbVINGY^KIu>buol95p=}q)2@|A$Xd}coxz%-I2z@{6upL zWhuIg3e+6f>>nS~j1V``7ax;wzt#MWA&m;7o)+%1(Yq#SRhb-ea+YMMq%6@(R!OOB zz?wPll|5P2Q8zxTFbR0!`W>@$`dTe`ue20PbEpt$MObM6-jfG*!whi@gjZj?O$?Hx zgL+_559J#O^RjZfvSZD8xzYhB=F2V69JH;}H@B6TjfGn;eLaw%TRq%pf~pZnv}%E; zuAm=kIPy;5f)o{OA0)8iKd);J)0@%vzS`YJeu5&yy}r@gx6;2*ZVBH?dS_ z6t6pan_E^qxhH1ighe`zwJf+V+?EH6-q-`4{3FP&Bc&k|6dLkF9HeFupU4|1$sTc5 zy3oIx-d{|{I8VaLhL{s`2le%PQzx~QU%QS*DpWbRActD)i$h=+DjUcU5je^hR6K>c z#|s-Oy!TaY;)=ADhx@mrxh{JaSg-IlID6_Qwfjj#NWv)9Q{BeQ zz>@(^DBUhQf%HNS49RGaNfxeBY-95)o;FwN4LOoW{A9ZhE-&SI~78HDTr+TB2SNkk-FAbIN`bu06e`B zX@FZZNbj4MO6j>ffHcl&~G%i1Ks>iB+F?eAW zo|)IcP>|UbTb-7*?gtjlavcXiYt%j33|T$>aw-^7(eC%H93hF~LVTgNPlmC2huIZ9 zy9|PUK7>xm3{{dkB$T_a;9Xl0vPrF}kb;3P44pG)q0+R=%J}4VpH7=`+Kto#P zf^Lwm4d7pZr5Kb`=Z#(^I2f7^hvN{!plD)q`57Xmn0CXN^>}Sb83vffRBlB=MX_VJ z^*GofXtRUxSmh9M0`!ev950=_bo1EPgV@>pLd2p6FJ21642xe`#DfiK@vOVEwj^r0 z@)}aUo3|7W`ejsb8y36!_+II5XE~~h(8TP6_!_URE z@x1*LRT)mFa~`(Ed5qOVYGLkQ-L4$=X{3LgR4$H)IcDLAS3k_A;}jLbIl8nw04%V> zldOEqe^PhO)li_8S@vx&G=!#n_kJv2uJ1zCPhShA<>^3Iptr zhA(!f3YlrUE^Lp%?EUR{LU&aJoMS_l9t&)TM$DEeg?5_cIuwprS;f>r6stKsL+bx&1JWd=aait-;t=M>F`<*5mwu+NoLj0+ci9YTbd}e@NLwyNp4J{|&)rVO)Q; zF?98$8Dly^NzgiST`Kc%MIfmkvq|cI8T~?2Dc3mb+YBsOG5j1i(Xi{61gt@2>qY&} zrQa>`2%57Gi2TYMOS~{N`E)LL&|jnIYG*8<>UM~`_`s_{(CdO2r&CLTS2xxj^t;-1 zQoVVbjNT!mAvmc8Y}PQ?y4LW#E>Zb9HLM9#LTI)U?sE;Y^{C@~50qtzv})U=f0 zJPA0kw+Svc7;nF8l38oQp7-S21P!f=F~3zttjq&qT(}yGuh{(QIfcbwkj5(h^nZef zPch$=P|`!Mg;h=@*Xi#Id!CTNBPDh{Y6tqxL*@Y;ON{ z&ofiBxhE*%5A~c0C`alE@6y_80rto?!(mz2(}udQM^4?*oaLYJtN#{6@_N;LB%SF+ zjox%LpumpUvhMTRJE(1Oy)vacK6DG2fkFIPGwVI;vYehevHPyMl;9VDKyDSGwtxrN zz~%d;6&`+|m&D1sAkC-n?)B~HVR!ic@`MHso9(sr9^gEaNNjOnRR^bU0duPG7uPpr_$V;iFf7X zF!iIOmFqAPiaO^pL$GBnY)raJZH5N{Q!Pj0bHTBx5D78tkDnklu8v@ZCP(xlod3%7 zp;C~hCP58LgUQ6Q2C?(aN0o^^Zu2e?LAwaW%0Q#=lVDmY&k*?>J#@6pI?K?+>ku5B zvdSo*6EHQTxX0bX8kdKsO@`>sH$-9CgJF?Ia0)k;8oSg8#6JuG=)vA_F3G~DIxL>7 z_~ol=CB72tVAh_iTAAj2eIVYOIku}vZAKJUXrO=N-PZ!jO!Lz+-B18{lB~GsIFC_j zgXzoz73m28>b_7br~GlurGxD;@uuxC`birLn)Ck}6kWM2?qv&}t%=ImKn{CUvZLpf zYU>E8z{CP_ZH^}w1iX|Sugad0IpNK(ySr2jwRV?e9`wN8)VPwvefN9MoAWd{P9dE< zs2sG{SH7#MDB4lL{sRdD+QlJcl$otYbXD}txg92^@yxs6?tf5M^(`@DFf)aM-%93f<#w{*caYw-&|$a`gTcGi|k%!2cbeOkL@gm1y~A3T zy&Y}qeIOh?V#3n`=+`-wtuJ)w^}~xJNH4@B7j?HP)@rZjubkl z@ZEK{t2&puQ|0H?x}(k|s`lM_@Xg)<4f5ZhE8Z!&^Jb=~2gRf`;bsuz$+oM4JXnrQ zBtS1Pda~){%cs`1b*s4Opfe-rI?OL!bR+=4b*GJ-mk{i1icsuc^@5v#^xE}%Y7*MhCZ!*$072gMTm@8urb@_PXtVm{ zQ{CSJ#19gEC0UQX&kj7lD0)HTTNKSzdzxZ{SX7%p|zHtw`=! zETMvQJ19zX57l9oOeZcNz}p$WgUREEET}Z(i#E5b!IiyapeJqK_Tfh?Q4ZcTIL==W($veo zh_=h))j@Th?201SkNv9&;N}e5AL_9&qni=Y>JR3WX|Y2fAuIt=R@<0KH9gL%v0gce zQ+~ks?e3PRgIMwrsQjCGOf^2f6Af8_Ae?BzN+EHMLm&uC6U&97v^k`&g3f!Z9HQ@- z*l3~>9u;^*)LmHU^zXNDUqJGptDSpMw^+HJau*I-{+p`cWzq$;>e*6uTmvOYV-LvI zk!zxr>GdSDql+Xs>PF*5)b@A*xW+;L1~~+EMl6L2a(?u4xF%^#r_NhWPJGhH`}bPD zE5XbMVu^A?YDHro81~`L5@%tbHx5U~?WADAN|F7C4EB++{OPZk{w?8Kr-L^U+md}S zj?TTUdMKbYU~P%I?Hi`zm>O1cHm`tTyjVJNrq}bnQAQBH_G~gs#6Sg%uRc6v^C@Mn ziMJg3nNLmFE@3)}KkLlNG;qKsV7_Ur2IF|aAy&r)V~2#5A`Z@3oc4ee$}>W*njcdB z2|tYY8l>MYVxvZ*!Oycig*(2!dP&^hr%!7=TkBfU7D$2j{5;ml>9)YUIh)XA*hWUJ z(>bM7=}kQ7N0MLXP*!1=6GVD?m>+~Oj6vs?sr3ZWFL!W2&WJoH8yZQsVpxj`{md`-K(Fm{@BY5Kcy=@Iz+ zb24sKZ`;{q(ZF~i;I?l%kdXP=rQ9#CM`@>OG``R3*gnt2_C&#C#09-HwBLO>5ynnC z!E%!r1qIuN=bTp4wBi$KSMzpvh z=8U6-MNTA8e{xDF=JpW(UY}OI!W`AK&Xrf5?9sKt zlQK-lXVLyS2}#vSQ0yr8U@;LOmyk){A_}KU{+sxTAXVK50_vLz<;saX-a zRX4Y+oRZh{YI1j}+QSs%zC6W1DiNT2(UDavqu&4;)#H!yAL@bdLoX1G9ESr>Xd(Yi zY<12@*ujym1@sJWj9rWm(F%^OB(w{mujf&M5Yd=D5>4H;Bh4r6n9|G>3jf6m`tg`U z34|kbiT9w|#hA*_<;p8O9AhY(U6pbMFZ#dyLuyKm>wG;v3`!Vbio~?^s8)QfO*ugQ zGQ&gp2<>RQ=s$!2gfEX1$mW(P?Ocl3nUbet+~(-*8)^MleD_~`EtMip2PL2)h`9aO zt0sX}Q?LK2^=D1afYyUm1am4FA5H2%z%KtcC*}Op86FjRwHE^b6hsCbzmk*AWU#7k zb`$bmQ?V2BCB(9wR}DypfESrjTZ2aC$U{ayFId{V5t5xO7KQY8f?!!v;1vMmv;?-E zzG~;6z$0kaxcRuST78jraK4|FJavJFy8(a#>(i%Dohz0_E$xVH!`Jw5iBoz9@g~9Ywc3`r@9{pMf&A(SxJf z80_zpyFwng!r0H_RzVUL-@!*XEe2EIk#=;7!xUl@*+v@YjN1nNqcW9l-V>f=74JL~ zRu{-7`J+*##U_4Ch9oBv+6|I}5t-OZEHujuE!vopyO1oj+{BfQ@Rabro_73oPB*Cg zI?#lvAYZz)yq8)O+}J#!651gCRIZs<*vFd1H8i~neAXt^4U=;a#@ z#S{(Gi!mCjNUD$Zu+Lo#K9JS`b)|5COx3<5r-KCLYRoNbH7b|v8?Q(I{{I1WaMAy) z=mFbUmg~24GA61Zl93C6a^@1X8w3*dFI5fzm;_k}0{8z0bz5%_&aV*lv!hX|J>XH7 zMb^I||25o-r)3}Wt5N$tZPX^jHgTK@9&tO$7{sJ=`l4>B$qTqCd!y|kn90n)mxB+P zbga(eDo2dRy$?2acP;-6h}7J%U=@OW>lIyf`ge0)R_EA7nu!S zYF`cxLlKdDoEM8!bj(6H2j<=Tgj}nz3L*MS5sTwsN5*LP5(-@jUQXZ=P<%7HaCg%O zi51!=dI!rU5Fs_e;9orb%Z?QCUINj;3BX+7oB!B%@RP0^tD)JyLzez{WK%OrOn3tZ zm{?yAGx`Tp?n5W*+K_j8Yy)P$Tnz_#%krczTOE%SE8tI$-4j zYY2tsft&)8pJnUKtWvaFZA9u+YFNGOY-oBlX?kh{EEwX&5>7_KU43wEsDqA>5SFJI z13M(e$^&zGy_$oqUX=B&&43ng*XjFDC6`j`EQ1lO)iJu9 zxja*W8oltr4`Rw#1ywL&S4vt9R5o5F2d-cSm9C*!CEq?&97ab zY89HVib(iwQ2q0syXdglr}vT7pRdvSg5_08+`biVD+h10l-KW+vyDJzXdGj>Y<~!) zyPx<39}A!*>3h2%vRWKast2c^0<8cgVDQymx(035fBMC7>-9VXW-PU1?lEK_qGHz>{q083UQ~o4S%EFa;y@)UEAPt` z+m9u?L`K224Jts6}EpM+`BZhv53^bXm{EyO`tjrhF>jPRgzj z+R{vis=RLhu$O?GlwB!K`vjzRKUJpx;vabfGGUP3)jX9DsqE5(`c-5=CbtmMa$ z-x$7u`zOa_g>PL>`(tM%8Ex+WeUro7J|_pj|BCwFU6w89iZpH6h}r!8mi_ZzLM(4_ zx5dDu|0H=W22Y2xv(zOc*e>mYq>=V634Gg;HFDyT7h)^KW=rS#|31H%+`nTaXlplO7m7q=2~hX{I_YU zH1k;7^VCAlpdWw*zY@K-{Kum1N&1SNY)#o=6<+>K)ep3T|Br~B=#$=Y0dsx5o+%0h zjT^W^sF1AWMRx2n#+=bO`9f3>x2y;1e6$Jq662CApD+OG+b7Po8jDa5?sgWgIz$+z zE&=Ddx2l=Nxd>UtAVS7mJz0kn>oYQdWhx!3{U7`4nHo6tI-X52~=-r|X3j!ZaBDJ^0XRb9KzQD6N1y@NQ*w|>K2 z0Wlc)C@SfBQ+YNjdDL-vgD}2iq9KGWT_$}Swcb05!Q^@{Q#$75Ra}A-8MH{&^ zFA0TWq(>Gp=s$@jNcLXFO{jFs@I=oLDPF?GI7nx$U1f05{e%m9-y?mJg=9=O@!{F~ z3u1^@adg3b&&ts~Cx<~xnzgZzogez^s5XWZ5IzUgWsFxK*t4m{lOwB3jW-V<^;u(` zDD_!D=Y1f|8&nbX6pr1(HMJMjUNYG*5gKzw=ye(+u-#{Ww1UYK|IWcUtlWWES zhKL1+$9-{d8X$5l+d`c-*~&HYdW!J6uGof0e_b(^h)c5kEHm@=F{@wj@YxL|en?Pl8{Vp$21jNH^kKM+mqho$$1s;9TflCc2XflFe@ z3zwWKI52>t?^0s-)rY?#h3eW4D23d4+h0oAYC0SQG2%_FOxAv^q3>{tU){`J)I)iM z|7pCU_mW@k4KzG`lNie^PbQ|s93;#U(V@Z2zK45{7y$JEHXt58d51#01C{A&h|Jfn zKcHHq%L5#w>+cwsX(zOYTLKEh_>5wA_s{HO<{JLC3lpGZQb)2tb}1w| zAD$?hmKBlGlsZyCrggy7PK46ottz_U?*&>Dd%*n~rhDyC;A*)0InuZJU!08cS7%VV-2GUFZ0+T&C^8$FCG9iabiH z1UXVPrUEj19bPhP+r>eB9)+(~Jy84f)>DO_(77fI!g)9ww>VxX2wdt%2O@JgEFPuD z)mqD@VQ2xogoL&WU0yGcu%(W=_Vz!rTQ}uc8nEOo5NE=n2u_?)T$+SptSM`#eL>SF z^Uzm8tqiA!G1m7m>JNR|>G^xUq~_jM720+^>Y0l8^<<>EK z!3RiC5s8onJF3^YRaC5zRzrH|9l)jp9k-f;&3_*PG_sGq>~k>}qIs+*q%(Y;C29o^ zRn2{)-OfX`uBL4)4_8i2>b1>($%{4aU>ttonmYENDn5rRB?gjz&zT4bl#U6o<~tnl zpEX0XeoO9p5gku+%w&OjzLec7fipA;QXcy%7v~(-E2|5GJrxPVJzbNdr_r&G-5~kz z>(NfOgwdX2`MR8cg})UQfX4|Uh&CxcY8OyB)6UKAjr`z_XSUjY+?kM%RM99;3HDgB zl%|9G>j0DxX>k*C(55+FFtjr{z$D=UG;^85T?7n)IQhOi6Ync@x)5xhJE39Hx@2sp z2*>otsMqL(g;N>4%`?cz7ur+2ib+6aG!YgrxtYd@q~?@D zKaxCu0g7Bwsc|~Tb=s+imibI`X*Nc80$0XyfPzpJrdah+oCvjpSv0G1MeLYwBoyCGcM19ksX?q<$8@!f@`TFFW2YgZSf zBI`J-uk#2KAZIT5P??yIq0vdO999@X#AbR4)#7l@N3s?I03D&Pa}KfdS;(Z)m={tX z%)TiWyA)j)qSrUmAev5=^*K7^F?5XqhI&t>Y$OZPUxUz2FKs~)N+>TN51wUizo|ws z00u{vjtT`CQiZX*-Fl?X*<>^0L7o}>u>7K!f~O+1_dJcA6DvMkm`D^F@ck0`K-37| z0O^|_E>KirBPiG`h8!orP#(u?9(a=G&2_s@F3pC+VaWI!fXt?2Q48){0Yf+9oK9Op zu;owj4$7>3VGFCXh&}*wjM+}-oXTH){{jKW z1q+2+Hv2p0NS{WEe+a`-gfpSClt!$T64qJDBFPd4y(>0qPu^jgevc z_p;kKvZf?PPfbFM>XX>80I!^%SbfHBsN$F}~InmCx-VLbP*45FP*H2lWL| ztSKQvaZjg-=a-J)z@umA}7UXh>t7)OD^YW30ikma_84nPc}k@#JX=VZ`X#3gwO zRqY_C)hr(Yg5d$7=fst7Iys|?ZK&BTB zz)!H1SOxMT?6)HVsNU#{SGJMq4d;Pb=BnX3TAwth;Df_3g|*0_lR}btQyY@kTO>yw zYgI~Z{)K6C6|-)aptsk?gS|Bj@*WAfK>VtV9iRroDlS>Ro#sR=&oM z&l*KMYM=L-^fWpGgy@W|N=`LI@fs^xO@t{n1|N$H>jYzWyd z65LMm^xDBR1O^uXBMHG0UYM<8xEpBT?RtVJqydG4N_+{2&Bb`!C!P2=EhO(KXj5Lg z+{S^CL#JaJuCIA?f>2y|?A8VMZ`a!*j;fexIIh0#+zxQ|W8p@Ognl-wvy&x_6~a@_ zV-Z@_UxL`0;8ZZcqb)D?6Zx|Qy7+bb2XNTwFwN>@=BCNZoSv~4+7I3E$zO%?FL!w2 zZ916=XglC4r>_WqB-59RKE$s#b^;YtdLy1gBeV37E|f&?)$N2`V4b1jqO5K*v<6lX zwq$lLX3wqNt>Wzdk1X&Jno+)`|ir^PX6zc_$^kM+kg=?cCDs2A*J) zIl-^wra>%8a1WGi4|5|=iY#uaj@h;W{rmGLvzzjyH@dBrRrZrV5@4oT(cgX@MqMcl zgBlnsw~pnb>_{d%tK^o>dndL}4j8*s7Jb<7#@$huv}6D%$P-KAC$?;l%8=w}MkS{u zT@^2-^DoylcY>|M12f1qy@#Z%q%AG(^_E56)l}yEDofl5JN5KZttYbY#$>p}wUD$& zXQUwG44F>fTx~Rg3RGhoPej_N@IWh*X5sS5u5#@}@INL(56oZ{`ukmxlf-Usn~dQs z_ek?ZqQZ&r7)90JVVTD0_m=5>AADY!793u=Wc<^4O|E3A9ITa*#&-GE4x##g) z@Bef1^wG%U0UxD4xx|A>#h@~ts1a+^9boxwv}{epp>C@Lj0hV7Gor%2W! z_#MKBCn3L)3xGp^YS6sLln+@dxXCMtT5b`x*}v?ok3uVj&QH1>2ZQ-u#~&A{H)CsB z!**dKL4jJaB~o{F@Yx&<)N!KK!%cQgf*Utf(25=(Zbn%wgRdTES6gXJVxB$qc%L{l zVSC~Z5~$kZ1}_`2o(8}(^uE|OYRyj%6E4K|$$#FN#KdG)NqL0^D{;gVjF|?=wL3aC zfoPixos6g7SK1^g&Wn%X2qob%Pz;ZFwxSE>Vs_%wk$2ma@1h z1>NY*kli>twSi!;6|BHgq2e(*0!(GQdok4w(c3N)f9Qo3RZN+m{_vN zq$=f8;>*m&D3Xn3s?3efHmBRmC|8jmDXlwVYR5M{U-ZR|ey6s7|coL2=~|)n;gm{b|g@ zHk*5ro~M1eDH&5r@`Qc!+A6;#4x zE@8|y7C*6u*hp2{`<3G&)lf;s18}U@HNroQif6~u!{MAkWba1NZ&(ESSvsQOgs^Y1@3C&LnR{4ooXW= z_weqRtRlLWbeQG~1#cW&%H~n1V{0J20R?}8-C?>y%|LN|P4@yHpeKTl`FL&`L+5Kx z+5YUc!eFfJ=sR>t)+-vybt7C(O@$ze>I9i!E`X$8q8sUfX}~`PM|6JaNdGo9BI=KJ zIisY6$ep`DNdkCoUg`It#{A%Z2JReci) zoRlS4J`!(5s-Ou6#K6P`7-M>MH3GGnFMW@SWQ^D$H#&6RJTuP1HC?8_+h>DEW^Ve& zS?mfmTHrJ~Ecqp!yF9(&6;5Ny3ySu?pexzYJ;zAxG)(bmURiKXeyN=x%SqC1ME4i7 z#DH)t{nw{5XbL5{q2W4F=xElpPV60c^=bzwT^Fe5-mt3KvE4PM2furZ{L+suf3Z%k zPde$VMm?sg^Fc@0UWSH9uY*o5vHq^pOl=_hB9_jgC|`E~5}|)&jR$wRjv7^Am_e&o z;=x-UwrmG7eyM-DD8T%ie-GV5+ceRN$+df5B|U#eE5VB|VS=EaHJmu@y}a7PQ-Lb$ zbwbUKqj7$Q>Hu4Mk6~^--=f~;ioeM5@VnZ|6sn3Er|G@qU)8Jd8yd>B>4PfY1j!VK zvX~$TCy%vgZ8_h~<^J#`{*F^6Giy*;h-M~ssKeh__?SdRyq*)xlP-)UEZJwyWo^T$J z10PfYP}%Bl#F1xU-C>`$2s(PV_(X-SrkW;AoBjSfPCN1`M!AIAW*y{^da14-><4s$&_(XHw83?GwR~Z?D%nbZ^cA z!cLmh0M`42#45!rQhH$~^i7Q@erlxoz$oD5UlNmne7(*BSHLU8@-5W{ zb?{~z@iDd%=xW%wsmZkj9#QDoC5!Op=G5Y$HxHnQEFs-j7F7iGHeVnDghIK)Eyn@VKF1Gp0J~;CYiqyk4-Xk8B`1#nK5)#iAU-`+2FU_Y3AN11(kvMU z{?UV>{MKaDh2$ZKPD3~ueF0?d&rh%yRUxke#r?tHnBV5&&V{P8f5YpDpui`nw5ULC z)| zI#5xho=J?He*DV2n%d3XY-ZUoZFS-Vod#`wy-$sAW2>1(0Jegx_UgYCVDQ2?yVh(uPBHp<+w=Q95ymWA;pG1 zM+eKYx({{sg+5zElkjIgFUh|`dpEBc${NI`e>`lO* z!C{CEDd4SdSfsL-6wV<%fYB6xDX&LM;PCsB?Mp)uibJo5<;1An*UTR*{^4bKb?cI9 zA~adDzP@Ubo`mo*zM-cv#Y0!!2;%ZfOq|tSrQ+h}7c*L28B18nHv}ZNmXg)q;#Q(M zb=fpwyv6`eT?sT4&&jqd2o9keI=5=x-fUIcLCGecyKjzHA(S70b!bH(_+HLo!4dFF zC3r-s{AGRAaw`L*QC#Hk6AHiqj%*#;w@5|E=89bA-sB;w%gFEl8JfA0vjcicb81-S zziohmy*2kJA7t=_HhYPdYUO=y+Gz=?ew=EAsF7P-_p?JZmOtfb!_Sf})5QlYN#G2! z(hcmV5)>!3empk~2Z2Cxj^GLQsSIumW!5!sBE-}R?qazNUY&ib1h{iO@1dWeR2!l8 zg_m)uAZSwX+mec(YzK;j@S`0kzJ{bXR6GAJ|WVigWU2c3jq##ttr9 zny0$VhU4GUr8j(_@u_h1UZBP6VnIX|3c}(~nAbk>?)Dc974vS$z`SW#2}f(YnsGgl zohV{w$y8Ng^AO+^@|*^rFuI-n3DP^|9rJ@)_5fXcN?D99WuYJ3|2!p}@V-@ObsZrOghR zpw?Lxkc*in02{TC5P0u*khq$a7gm50Ic3beWhrlkU!jfXGxlI85q;lr?lB?l9*$b( z$n2)RS%G9Oe0o0Zz&Y@^j!$%6dW@eHiP@?agWk>arEUl@sym6}HJlkHzuK(2SZ*6o zfDhU)C?!%Z+rtK_$3@weu2-F%^uzo35hD78{D;L+0?A z%X#jAbTPX1CSLHo1d&W!T(qaRhAlB+F()YdZ)z&b7}acky2hoy?$SoY7CKvfwA{W1 zKn~di>;|V^m3!rkjIV6A2r$$A=L?i-9!?>|xT?lso#)qGHhs79JiMgmkE#aL{(p7w78(Sp2r!uJd zNQz^2QtEhs6}0*Ou?+*qD?kKgpPopiMU@|D5-H?rXw%?FZ-OP@-;jjaz1J%aBO?YO z2aBP++aAVV$VxM5>9ZDN5k1z8STrT9Yhxu{fEXlTjpA*QQuhZfgpsF6RoG~eDZeW^ zh{Lb{=aJ`JIAFEb2Opv%-X`5>Dc3%xHF#gd1lcw07c+s}#z;4wto$4n4mma~3PY&b z62I*6zVTs49iHyEA~9j}TEq{5rC}7^RsDUHw$aaQ+55B8dz3+ydS;?vhok>w$1L$2 zX#HOsL7%}KU9a7WTFWm$!lFAg_{|qq&4iX+9R3Lkm6QG@!RGMW5N+&#Fh98s)`jJv zIAH9h?9YZc2swQA!YlAo=ySwLSaOKE$Wk~Ud8vMk ztndc6BLQV>d`4Ss%$;0&>-qw7dIbVeUT#o!)r_Y(jcx&It4&=n8#E-mJ-Zfh+kzDs z3yBUzkxabNVaIllp;DHfjbPYqfNBFAW)!o5(*qg44AFcHJsHl8fgJm3lSH8o8_O1v zdF*GMJKEdyQ22&f-lxs9ocHFltt|aoYsp_F$j+S<5Q_U$$dejpTMCF!UWP>)Ex+Se zaJqEqve050@D@^bY-D(*(tS-g1BzuYLjf%lcO|ZtY&b>xvXi0b2j}eM8y@icR zk6DvL*s9%zwVivAI=8W}rTEklyYO(Xrog0)97*-)wFPs^m)FlLbV6_t&tJO;ma7Kg zW(Q3#*@Zv^bi)63Yd|Ah;9)Q!uo-KDQg^;J{n0OQny&p-tWB8mvonzqPNrrDrhv?uUw^sKaj2mENma1o>6RA6z%_J>r_hWaSbtan zoDYc2kX3FnKWJP{-;9--BL)g9Sbrnp>yfxq)-hHC6H}!657|B}EU{M>x?a4i9yw$Y zQOtp+nKheV}bz{1QzQ^bWNe6y;LQ$+bZr)mmI( znXz@X&pB^1^IwSTV6zNk|$2>Q6()$2Adk}whuVs7FyLl&2&=w&sxWtCd zVr;~jX9R45&lUSN>CM8b<4{$i^60s#eIXk+j_N8p1@4mIIzKhbL6%nGsB!&*GZcxD z+7>}=&&RWnWH);+Y3JE6=ZfUbxg47mxvcquh9ru~gOE+)pp&jZd&CHZFPMDOdDYx( zeuogdAyLv@?8nf+Z5U+FmTW48g_57uL|JQQD*w)RoC8kj?87rF-%-UWKKZ zd;;fR1`ehzfYE)tz4noxUQxV#L06|r0kQ0EO?xFAH$A1;_|8iIVFiGVvD}ugO-lU6 zMg)fcLis105;jtizX(w9b8CCK`IwSH+I`ON*IH$miQEdG;>)NL03WqdmncbU8G;W6 z;T^Li?@#`<;qOIjIPo2>08KKp#^qG|+8*>KwvdCDKuU^h<=m$-EP<5+dE+)yEBqRK zy8WqkWv-4MJL)hGH;aUUx`-6_t05`ZgfX)~YgBI*M+4e03CNEN!z!P=_A$OnBF6sQ zd%mIqWvBNlHh|cUMIDIfRoo}~ML-W^xX34Mz$!bLusNegU+8E)wsvCwtwYEu@RuC< z#@F{J8$@VSIUg8WEM7S;Si&345? zXwx8FZhOe4rB69%o0Ir6evbr8OSq~MaCKgcQ^)&!&fda6K!wMM+lMcAPmnHkk3hs`=aUi{ zK&iIXN8OdeUtwD!Vt!^cu$DM*r$xCnKv&h3O`v}8#86AmfqQGvkbI5A=PUZx+ta01 zW2|Y(UDq-1ukuH8u;Hjwm+Y9=G^M8MEEZc1G{4|`8%?vUkx1kV(K>Y#Z!lDU)SCul zs!R>>DhwsKo00k~$+=3S_qb!0Y7^g^KJS}I6Ot+hOpkA0w^20dXiotH9 z^GeI>bt5Rq$W)ToHtqOM{QC{Lwbgua3F&92X?#}y0kZg0;Cvaut*h^Zwbi{PZ>mra7Bqc&CjlYEuS{m(6MDtWXIVRd~^+Pp~q>vlx*hXAmLEJn#jv~82dqF_Yk z7qxO|6j2@}<#Ujp8a9YAp=<)plPk4Sq7dT(PY8pD`B51XUX4M7{}K&6JQZg$Tduw+ zjtxR2Mb+M+=1`{x3YwS~(s|_3scnQ7Y=aqx`CuUh!uevZIM*S6WTfxAsDRSSKeZqM2SZvDzFH~ zmBS{htS+VD7^8-TziLBKBk)WozgGdQki;b{HgBF7vfgG-x>7+YLX2s2OZl-Xe|80% z1*(>y0G%dO+#m}5pSc3_O=lgF9tBC&7$ zH#mhBjJXc@Lj4(3Bg);xL@^1DlR^Txp=s7)a^v-zWYr-5o@?9ImQ>WelsmWc+5fkb z=gr6MmYI7^+YaCA6EubyH~t4&8$3Q&qT>Wz+VRT|yP;tq&3a9_Q-%Y~6rKG3m^WZa z@F&Mm%u6sANJ8;O>!d39+?y4byg@sI!?}6`{1CUbmP)A~N3y~Htg(?y>&{=SBoqrc zcj&*JE9bLBb>7m62RP;|ct!1)NnOeN{KUv`k=Z0(|)0wfqZ}LP@Tp0xMr@A}zY>?rP;G)IqmMTGSIXXF2nztH4NH6W0Vnr3_;? z!n`FO$mNV-R%r7*L9uaVx?KA2D@9nP)W*LG%a6Iz2G|9pgT>~r>OT;_oV!`^BDFlBy z9TMK|m5p^B@hd$WIcm1_OsOQD{u!t_^lE-1=}}|mS8OQ}UN8wcxM`T5IXYHbWgeT+K|^q{zm1be?{T3T!oXz*RdwG@wBJhCDsjk5*g z4etHwB=!nn%m!an;bDGW3jVX_SU*xmKC^omN)m15BFEg6il^my9m%BC z2xtqd)NGyL+prcH`mnz#caz(6)>LO6vdoR(SGjl8=F;iT6yiAqg|Rq&f7)oS7`)=MOD%;H{kji*yRmCz+zCq>yJLSld`Q2m#Ko_^gx>Cy9Uiv8c%1w7&< zH8LWP?s2Ec2LLCV(Q-Zo2);uTJt*h_+EI}2>@CS@7^q|;xl5a`Z0=z zHqW^lKtV7_3a>rja%9je|dp_ug*|5`X3e^@G!$(<2#caL9BYTRstltpF>K09LhPM zj?rf2xcy8r=y3E16TxrdIDUIq)Re}1cx}PqhoYPzy7ETvH`v_vvd$K7zu%8;F|H6B zO>iRgH5R?b(K3=A-lW<6lEGYulwd%5ObHVc9HFBO_l@v%juikP3dJDVs3x$tUnTaC z_rCks_xa|^uSaLzK!H>P4!)KhDAG`w3a|)rRVR!>UaFe?QFq)aT6$_2hdmDjVEvkw zsY0Ua@^7VHhXgiuO1OU`-{3tqf(OPp+<60!4D{1vBf&E-neTQ#Lno`mK^=It2Ickk zh;0vCQz+Msp<#%YisKi_ckr~r_N!dr%A`e@VMsoB9+;gW@|R6%-bY$TaSrb>iHG*a zSM3QIv%tQd;) zu(ufAshww+@a%j!b!uA!)BHFI+wJ7?ZAa6}KN9B4k?HQ}?yjhjpx+he0m;R&uSQc; zfu3k)G6gblnep~gHF7CjP=-P)wxvR+GEw)sN$2r0jA<@1OS zWuAB+iN8gIW?cz^M$T=>+QvFZy{MD|c0dWOX;lC8hYgZuuKK`HvF*`WTJOdh72yvn zmg393`*vV%?bQDe7zRdjGQKr)7kL@bJvho_F8OWK(7H{p<^qKx8|vjTh0J2yHeE#? zkga*L3+p8>7RdZJ^cXhdCrvF5Lnp1?o%F+osu#+)W&onB5%2WmuK)yLkpKD?vxDqQ?`}hjLUTslT-WJqb!Eb0Kc~Qh-KagS^(^^+OvBUStCt0K_Z(vz0^P z`8rW5)F&SU$f&=xC)5~pwslZh@?On;JA2f~X*hiBkDX*}qQbDNa%&+~IVM_pzQ6h~ z5k`*cKYyqZGIsE*Pc-HlQD;Uf<7I2z>~Bisr75Hvb=jvBkADEZd?4We4(pT8-l1aC z#~<@3Wu~D(bve3-&+y|&eH3=53`*A})(fJQdi2a;LWv;$$`s?Ci(~!BYMFlXCx#tx zanCrwzmMhj8q0<#2(kbe(MtPVHXKBRqGyYN=Yya0OL0unu2mAn7CEYiw5=?ww?G^+g$VhE`dTr2irAIal!mJ)@OA-n5Kxyqj`pA`}4u7z=m{F@lkB!Zv zAP}J}+|yMWcj{X8wHdxvSE$J?oLu)qg!x;!XD8bO@@75j54ik=)hcK zPVV5{LHnPq51)4HQ$|@GNJg#1YHN4Hzsi_;>)13NmGeXFE?fWO_h5x5$A2m|bjb%tg2O)~Xk<0pRZo|5 zB#@S1+3*vJGK&61qw`&_L!AEN8rwq8B==IS5Y-Die*S(!zy9(bn;agTx3rm)XN_m@ z86|KcA>oCT6_LUyC-2aL<=)QHfm;pGZTnrc4x(rZhd?1t7EYk(&xMj$w{qh^LUx`j z)^x{q5+rJT^~m6Q@jo#;o+(@ch|`wO&OpGvjcrT6m znw+|&;2*yddEVaomu3ReiW%D-^s-)iNUGcpych_VL1@o z90rk}yu}${A(Pjw)wXpxrRs~s6`>qEyQ(q5=imQJ81t&+yBzp}7Gh}*b_C0YRAO;^ z$HMI|troI{h-iLP(;HC?_xZQ%@eGuq`dzB<;kQDcZUx^?NPH5AL;?s9S5difXm`4h{t)ch2QU5XH*f! z4uvq>zRPngAV!x%l``OIJ-KQ^Aa~Ls@>$4pv!5EGS$o4hIm)w7j4P^%r`vLl78yTFuE{e? z9h8_=;NseUGDb)dq;n?_u(W9R6gg28+ZFue2o0(X#`m#u*M!U0nle zZ;Y;-TdFWF?Vu3N&d57F@PR1n%jOWZU*n>5rDW`%0fK=E0&Fuq26tKC3^AFdH}E(h z@E@f$JCf!)3PV8-3zIfoR4TwY=h;&bq_yqUvrPB|H6r|Ug=AOsHA$EAQXob>yVB*?GZe2C1WS%l%iS-l zzdnX#22G~$wzUOe2=qM6v@wGD*wkWbj$6#s0bb7#rBCC8kuvkyXRK_|lFjlc zFK+xA_ztY0!cqNtuPe4+`^{-LUhfOK5@YI&>Mb%ZMOsN@sdaUQVYFrtM>cE9YW#o)kiMw#qENxC{niKHFQVr2WE?p(~pf!6etb6-GRc|{5ZUlYd5bervH^Ni-$ zAKe^R(0r)0mgXxqlfIFy-1ppYN-GfFRhQn!90Km?(!>g+FhjYa6@OzXPnHli{@*c2 zM5c0eYVSs9@`QsO>62K8H0Y>Xs+<>k%c2&Z!)AC)#x`=K(HL9y+Y(N+VoBT(3?G|E zw`V6RIuM_BHlztRON6P1}BNS{UhPae)mtF6SJoRuxF*2rtE^8)Ngf>BH$9wg{ zli9y2vka~c(Kw)uWO4L@HHc#bwnloT_gPC#_l)22~FfQ3aWDX5uKg92|0F#oN z;S>Bq*jR^aaf^Z09^ROHzqzu+6dP1S2_O+&puj+kPr;b7iGCJ+KokStfnRBRIFWp) zsG4@cO*0T~>v48$%x~(3!urW^2gi`4l{(r<*&b*pc*$`Mh%vx$FdWs(yog_y7A*MTmofE=v^FRjIlpL$eY_;`CSU{i}ro$W3pWQP`$h>9!`L#d}a! z1S3;^I;CxO87hxq5(Rw*`$iB+t`gE)Hv@$Srk1(@OSmC=GxMM_c<4K%idw_zIOM|0nv8{jRxH6}_ zzayMQH#L4RPg7OYAjP=iJ(m(VQ7-%7ic;(LAIaZ*rt>WzBXrl5A?4OeV@H*IPHX`^NU(EQh4PB^jF(ZWMH*+(-G3Fy*f zIE%_Yc3pf0!-sC{N+Re=%p=KVRG<>SRnwjvjjg^v8YJ(50Z(#m6TPX;b)vk*0Gcp* zg>K+!^P9CoVd0;B*8ZQ8a!Tyk)~?*HIkihn=m0G%DGL}8a0U|9gsCERoA$=?Eln*a#7I=Vk8h zwF?oS>M={Bwk{w;)LQ>Qmu_5opTE9Qsbggei`|JzS4szwbKd?!7pf;DGB$Ls1(DXt zk&`+jOq%;uV{;-}WbM5E=vg|&)|8K~z9sO$ZRLCX=}OxF&qSY3w8mgyX@4+z4@rC} z0I78gd=gx&dlv@c=AKKgnc27ky=3Fu@i>hl(1S?Ni$*|kmO^jYcR3#n=zs#q^}60X zB%gF~!nesuKUYpY-jGLqM2)tjhO87MKF1(WC&U}8AhhYJLqQ$WPW+dC5;y;I~^zp|Zmdq=xL(q5u-@nG~HDzI0NB$MU zu_K4z(!;z9hr-PgC_&Yb7#F8qSMF2C%oh7@82ocK6NJGX*`Ah25^6S1xj%$d1>SsV zFLfkikZrmO9vyC1oh00f0*}PkaUXUv|5CE59;KvS_lc3F+dh<2GpYF*C+#paY)^%s z2z@1O%a4a_HhW3}neUVMyAmQ-CaM1=(4A%o!(o%KopB=Tp#EjxEQ5_fS&4Iij!Ea5 zhw;q-2fnQ}cxm%5Xa+a!6&*|D;BFCNF2J)J!epi`U;J!DT*Vx-$(KKM0*I%go{Xby zvA=stN?(W5a@A@&{8Oqk8(Wc5)6Q7b>lEjBVABf}qDcu_s7bIk&oI;|cber@eJrE^ z*&5;Hg5f3CVA@ywop-=(d{Dy~RFyqeouPwgE|k*!?9v8R7TL9=n%RC4w(yIFZ&V~1 z8R?0kZ-TxKm^-b)zh&75=FaBS1Rk`*S4*g-p>Zd7cu^{Gcx9CR5w}6tXmPix&E*lb zY=5kl#X<;5#i708DAqi;F z1A(dzGayHij5jsoHa~0ltOcz8B1&8Y6$zKjM6g^+FmD{eETtzjh&ej-Pb&ap*cAfz zCWZJ#eH+Wl=5fuI%8w)4Be$Y!?mBHN@~NQLjh?8m2zQVO?a9RDi9RpOtDVZZt`htNBY^M-Mv2F`@mqT zNB*uj?WTGftCgi7nkoHRWA;$z)>?8+~l!j~UZ~rG%|(clw3nARkQY4+Bf@ z6Gl2~#zwDht3g#=CJ`bt^d;qf#+wejGJKu1*Jcg(aSHtO%?g;I53bK>b7+3(k5OyR zXh-KK6mb8hd#2eJy)T}if;}}IQX<><`jhI7L8I2H<~ULtG0-_z?EoZ21+AE0^iCCWo~41baG{3Z3<;>WN%_>3NbM> zATS_rVrmLJJU%`OWo~3|VrmL8F*P7CAa7!73Oqb7Ol59obZ8(mH#IgmFI0JOWgstD zPhx6iV{|W5bz*dRaAhDbNo`?gWiLW$baPN;azk%zaBps9Zge0qFIQ<~bZ8(lH8D6Z zNM&hfXmlVkI5;^kNo`?gWldpoYan!Tb!9I`X>4?5av(2CLPIhjYW;5^E_dmiVqCdo1<_?<6y>V=pl;mOc(>bL404Nmk#9$_`W=^_<^=ivvXE z^kR;h2QB~_@RT!s(xqb8tmS^ALE9gdA@%sFN14SG#3^{ZH^h33>KBzUp+^|&GJ|u? z$yx8z3G2c=Wa{AU^W1N#ht3@CMIJfZS&&bugV!}-lvRe?@6{Gy(C)p&>6wb~hQFy> zTZC<-8pFJ@1j`JJMT6!-9Hw$n0!ax>O%aaT<}O{VQ?s6_u5AKW9w=d|>kP5VoQo{o zjro}qZ7tS8h zShoH>4`uYln!zWE?D{XsEP&paXBUlWFKq6kdP$0#jLPrS+yP?kP8HCiv}(`(e{aIF}YCbMN?sYZZR)E?p*;K|y= z;!>xiP6NBntX&D{C_J81Hz=J)e_+_td!PF!{4XA%9ZN6}#WI|)nhWLqC20K5I*`l% zIVi!t!KR_)wQ>Vu8lj4_CWR`XQ6bo-`PSvEFBj_CylvAz7^?rHj7{3oXEu$aO~f=X z`K=ptXyNsiMI1UIZ2k{S7$xKRm$ZMI$$qFrvI+PmcRc~T>q`I|l-_B<&K_rqB4#LB zf;4CoBFeRuG4&XqJB|#odDe>5Bf)NyHH0;;y}4B%xJTixEe;L64?+d`(bC=kqimc5 zW_Di9jJE{=3Z$K=n+={YbIZF>X(bpNt)zNaa`l;G<_wsXwE* z8brc4ljjH5W0|(WKcM<|l8Q`#kZIA-bG%#6-Q@#&!VWBFpT!JiT8R9u_xe&*7~^{5 zXnLUR$!66b0d3SLiO5Vvb_m3{7;zxC^wtxWsqFERCl5(4TxB875jDEH{SF<*m1DPG z3Vt5nw;W@i5P9SEqQrT;AFXGMucw;UhGED$%{INg3O?GU58TtA_5e1uXggD89@YrX z(4;Ldn?`Cp*{3s%?4kGEEhRW`h`01oqta+ypOsd?-H8DDG^!pf`mcIU(jecWS(vQo z=X&7EvN1FPZHO#jU{cv^T~M=(-T@*{+SVvNlH%AB`#5O*G9S)}qp;5ZTl)w9UL1vQ z>jt0#8iktR2G;MtYG9{vy6)N}^A|3bQkO)*=8f{r06`a^7WPE$Ci%Wc*dafHPeu!*CxzYoLJ7!`R=%Boz^6(Po2so1Jw5 zsvqomfzR7fKD}04#I?Wc=~S>%&X@bQb+x1G|%+s_sdyXJ9 zrT;qtOut01a40>`QkmzW4?3OA@GD^aWVl#X)|cz60|}?=mvqUd(+wL|;fEyYUk`%p z`Vy{;UXiz-jG`FDYQ)?xiB6gUkBvptv0KO3nYP05jZZq)4wZj8Xs-73gRoG<#`y%=__Fj)p_|?!;+lz$Q&eEGJuDA{K6RprR zYUgGc%Xmz-thVLFU6Fqavcw;ZPuDQ`#of9ws23Avs7!POcS8jsOpQs>7L@|gT|>bd zNx~VqDoMr*-<>{8U?a|;K7W{6l8eBp(%fPMkUyo4IKE?Ap3DOsxxFo1PeeE+Z>n~! z=aOeX<6ER@_Q>qf+C?LmUdb44@skL0#0)_*y`!6MbF8o@8#h@Ef;u*`8x8DHNRT2_ z2WV{CMc63bWX>(}xu?gI(nY2h{rS+W;p7?Gul+YJBqH0zn9H$a%4^8%pRP%ZL}bGn zBJv#zW(*>o_mtekrbeg4zrFD>fH!Dx%IL;Zo6c2|^L1k0Frv=yp5+ZACq|q4hsiEq z{wTI2;3Uj4q-XQqg7e5s`QpWfzF1l(CBc!{)p$HUj@UqDK#Ce1G|NZax5LQrESHVC&_^@Iva^^ z8g7!xNxP#_$U<7n$NRu?_#dnQYl0j8xTs$Rey$t@7nn$fcFO;O+U=gOMQecVo%&~J zQ+|?#m78OG0Xz7K$^xI;n30NT`x)R{mU;Mlg+wp^ATjO+qUZK zS{K)Lp;&uT=x$b0?=(%TO7R;uVMSi<2)Ht7Bmuegb=eTVFWkV6O>?-Q4ad*^B(dgHK{0e&WeY5;nZl?O=^WA3%!1G5Hso z6#F{t2y@nGfCIT_hu?067R+wo<3&57HiS)sV$m?$3&~ zj?v+}|91VS6icCUpTb~?Ie)Vqd^=-c8~u4lQpnDs@7*@|&O^}Q)8;}2&w=Z>-T9lZ z^0jQuvi!!T=hKC`3_q5~jJL|c_t9=eN8>uUn>(1gyuxG1Q8i|XUVhYil6ye!RtN6v zcC(iWEl`mZG8rr_c5W4gP#Er-c@Ta^`gkoACu>{m1|zX$T3!c!1U=w5PK}>{5x^QD zS35cVQtZOt7+Qjl#p@xlw)8G**yW+?+A~~7d76Xq%^l8L_ja2{ulsUhH$MiyZf8tXi$Wq%^^Dx4l2vs`M6am+0yMZpGtmI z#={_b4+V(WCw-3ahTf-o{FzGx_aAUIMAr z^K8{OXkdrE>p|XM!9Vqe$$^m7(a>@!cg=f(3O>ZlnZM8+ z6u+#Il20sAvn(=2X8zEk0hjxm96C`}uwq1}mrhkBAUsp&z3^{@p4oM`6t&9BG zRgrQwtT+@kpa~?7(H3t)9A#H zC4}38tAay#1}&(?@NiFpb~xdMZWll?lR)7?UwvM>KWJ6(5Ae3z>hsWIxMEe+ayrQV z?ixsT&zta4#oTv(E_PX?LHHq^`Zlcmed{}qsFJ_ELi?5~9bEg1r16olGmRHP#hA%%Y-$&I_#Np@NV3Io z+H4!D?Yq5Jz?Q8%2a+EE-f~(_NfD(u#wtOgu+h5RS~{lIN3QHY|5y2Y7JA7dvPicf z+$?N(n|U51xww`4B^6&uN!0iyBp2D;Hcq}RJolrc#{5g@wt66Z9{@njlA=rQx>#X+2#&9Z( zK8Y6_f(iVsJ$;^(aC8EH>7CEIpIVYMIoGk_qm;*a1_IZ4MaR_9sMoHooNWH1s%EuG zMCMR2vO5qnhCFjOO4Ac7-G+6y!W88WAgv;Jq;h_KAE6!}9uJHt-ap6~lu9W%J-~dl z$}&z!4c%unOQC0K&WIt#ZDXoinUT*sktzwIIEoDN zfA7-T%OSyb6P=mo0WvE8&jSBXI2Pzm(Rq}afHNWmacAs&UHKii@=}f*OgkwBND~FH zmt1Ag1x6;f#Ga?TS^H`%u!%(uP}Aqo=6kMIHoiC6`x-TMXqTe_fSIZ)^OsyHZxfu* zj_mh-*NOuty2zjavipjN3eM{T+=WT(u4~WGlVzw`5b#Qe!*6cd&$AbuK!hKdP6+lr zR}bQsaN!3XzZurWy?j;lraDM1#g=Z#0|tDyx_je;$$bzrZr&qPgLP+;Nzgpw1eBl8 zU`FC2=oFe*#>yGb@2b0E)q#j+6h1I$(x#f?UeR4-d9jQ&Zc~Zm3S&ZzL#Q&!wa|Zm zEpHw;(x$p>Bbks~Dt}|sv%Kgju6BeCT%>i_f=}=Gzrnuz#%KK<(@ohyT<>C3ERCT% zrAJ66h2V0#I;}_AMixwV@x-=T)#K%hMd1!yI2I``%|q8zZ@IVhA=mrGQ)OVmJO3>R zFA&r26d;A~dN9!*OMh#v&HpgDy8OR0Ru%6+Gl+kgc*9zxJ;IIr&(-@&=j*yVf}O^b zEr^E?!q}e13n#?b*nL84qpgLdM~rU6f49CWwS`jSCg4OJo$8ub-hrX{T7^_>@uIVO zoA;;41@eLqhCQfI&t1V1$rGPZezQlp)RPe(L``?3JTaa~Dhm8B%P5}=YniiEke)eG zBa1s?w#usNFB<)(nJ`;bU2=P5Yn@O40LjGXKwdE%{Mc_=it7JBSLto#gQBmf?ZUdt zWEJ#wOS=?W3btQh`FWoNbODkH)s4VPTd)Iph5z(wYvxv?BDO)t54O?eb*ha{`LaPz$p!bVk_QF#rQFZLF zOi3ag8hISXhN`b7sMoQ1rw{FaM4b6#?gY7rz#PK=b~Z;^Fn1R;{zq}_mwCMpn&QW3 z4*O=-I}?v`kQLqkiF?&C0}v%}0Hi#cCnCW<3SNmLK2ROBWGP{x>x3m-8dD{;DHZZKb6=JF3&%y}|*-| zCW&ZcRy0+83ALy3^|T}aJ@1IPb-ebu(P<-|A#J-c7jtDp{rQR(@TaXk5oCj_4l?zA z(k8!@CyLYU&R9FlWr;CC!N-M_OUD=x1*BAcVt+RoiVsyGbx3q0hfv~p1r>4Nb=F$s zvDHT18VBjm(|$fgI36q?FZhf*@fkGoFeX-1O#!h<9{E{m5fI`zb@U<{6Xw_^AiSu^ z8dA>Tq7gpFWb}@sWiOXi4|5)Fg%XZmWDa}?e*oiPJS(!EYE`uSKf*c6mTtSbVU%UH zoc=?3H9`IMoCSQ;2dB+xBGp=$cst^OlgotNo!0zIrjOxbf?Goja=ayV?)4O*vmV_~ z?OLpMVHdlL;H&-!yBb{vo1g-0937H;Z>yyW0mJSBWtbf*-qi>?agNC)X{b|}>OQwI7H>L^&@qd%;8L7Uc?!yv`PTa_=>jxbemUWq27 z$D38o?LOj=prQ^Pr`|PAdB@;D$AJsojF<^)DZ%{zY}0t>?x zC-xK4Y@z#8l--si(2y6RZZ)ideLh#A_ER9aX)cZ$|BkB7YlRsM0_LYdHlEM4^rpjR zlF|}zbamn)@E}6X5}VF$l@87sGtRwtYCUX#Mc4fhvm&3V@HfJvL8%jO!+!ok|;Ol5V&}0eJ z5EntttV8$%oKI7$_-4!Yn+zaT1305`QYJij1LEO!(&NuE^dz`cri(w=jjx{KbaAP^ z74U0KVvx$fdu`7jlIr{l7@18o*E}PZ7S2iC^eQXNBXGjls8Y&XDJdlm??vhArU3Ku zjZDj4Au6e0g4UVbktsW#($>+n1Z$LmjxpN*DwA>z`Tx#Nlt3e9!e>q(Tji>G<`$^1 zq$3|Tf_~i5A_jwAPQW+Y|HlVl0_$yy{7sH31XiyWh@N86f0;yw1g!eQlAb*tV{VKI zx5Dp@iZ-vthEERZ$pgf}A3k`mx-3}i(Gz<9gDeMsQf?|xSnXAJy4He(nu0y@yzswE zCT9CJ$4eUKXc=kzT^TNe2n=0f5@Az^D0KvnDAbd1LVcapWMG)Dw$Tn(gZqD|2WJ70R%sR7b?A<;Vark*1xy=#6Q53kn%rY@&+de zI7SJdeT0zRWm#NhFsw7Zsvg9PG`H{qUL7D&Lq*&I1jv|vu)*871hK?#W5lR~5j;O$ zl**LhBKd69`33re;b+zpu($nNJbzS*7vW7zaxbBk`Pr2){xcPZI%v;>&C*#ith~#> zx3^%0qfnDb-?(-uts?VV_|HwJY_x{G6XVsa_PU9rGv05y2+OE@o%5k_>;dlI( z1!|~!mxd!)_CsT6WcQwc;GijX|CebGdsyaDzgpF*QOt7)(Y#cKXmfG9_(^r6xr3QX zGq%#l*lDp>MZ55diI2wvbz(u+)-;$mmMTUeF!Ms2eH@o!i@_2kJ%t6VC-53rPnwcH zuMb{iEt-S@94dE;LcqXNIJCBF(6+RJxDJ`n3Ob*Gd~M*QhpSiht1F&~!DNFZQu?{V z*58I)5U3ZU$%Z0eIBlMuzTfT^&vo)*`CQx0-{4XLW^{(OmGMLv=9IMBRk(fIfY7$m zd?&Q^H=#^LD;4154XO6w>^1;6c(vw^&&`wKD8CIGzXGUn@mGTPMs*knw9r-4+OqDtbxeus zW_Bf4iF0abPR2XannkON?q=UYH(Bc&Te?u1@cd0WzYJ?L22@s3U9K!o zt$0^2-6vn(LJW`!&w6!~yZ_T?(X_y?O&v`kGgGIoJqAcJ+D!&0%k<@+u*{!iLw;iYdFxlid8e^IilAp$P z%&=&lkf&J2a-FKO4{>rq#lfMMVg*u!>rnLkMW;Hqx%cnn-4c`2x>4H}%+oZ8X!xjs zg=>=1NSQE$j7>uL=Fka$GreA!q~Q)~v5GJ-a5OoeV*DtM6Iv=5-G z6?Rgda3OOe`?KrDo6xN9KxqpFuWVe3>U{3Zf!~a#8SR$V@F!3dqTnBgpOb1;reO$R z)O#PVFLB-jPt1b4lA^hYHWjw|rGwb^ca&{uf7SyAwR?+|15OfkS8gSw@s;h^u&3CK zZ6D}f<$S-^!$kQ&vB+S(UPryz&so;dpj6&WJZ;)~mGWeX{UvM@l$m-3dqrqOYIeT> z4p|_fM}3+tda<;jRzJ#!!EiqAGXsSIecvrfZ9JY;>4faZcz_{XtrQ*IDD1+QPeD-2 z!yGus?W~3;_4<{CYig;};(Pf;E1ln>%~TvEFc@elnIsmSKzxMU@qCJuB zvQ&rJ>G9^my!cG!bu`mj9Rat|*&oH`$?h3+bYKJS4&C-q({njdddTFJc*oW{1){&H z9$s{wc1NnB;V)uOk$#Y)eC$$;wAh|078!Ahd;^poFs@QsNhaCCvku9lI0$q@BMJD) zIW?FcdX{nhMHJQyU&hHXK&dh2{|Ce$WwP7jD%ra}#y z_Zj-2M$!VlYJa@~wvyaHD6hsCJA7SAjBEyvr#1E<$T-4CJr(R8lS@)1 z0Yw|aOfNIJ#>ZaobQ3D>p3y$i)>n61f7h$MyI6}t#f38iK%ilPx7s~SjW40Kch#D= z?l{(@3E+no^uu8(C{JsQI8{Q&52-5z}Jq9zsl48Q%pVNxFcuIl1(v;LVYQ)?k`jl!o|q`AX{Iuu6=ajG#NqHK>wl#vz&dbRNjr@;N&kJ>=4E{lMf6n;1<}jM1k6 zWZ{zplSG;XK@#09j{Q6{pa}1$f9jqJpY?M$%_rtyOAPc_TsI2zecIJ|krZ&%FMo-1;YWWJz^C8fcw z0sGUx;&GBMvb1+d_k3(3&OHmKy@*;g(qD#+ppisjBpdA+)uGzfG%pd)=+S;TNxV)0 z7ODVwBX-aKjdu0em%z3MY|8Mx*`q4xIhX2Ho!8hIal_Kto~fpatDuj->*&}RdV5{@ z^a;fmcG|{s{E;g6cl1)qqeNqiXJBI>+o#ZO{2mq7Ff~+`zNqSlirge#CL z`=fL!GVC^Xn9q_HJbFU;*+D{mY7;chfO)a{?BsM$j4j$d1zFtLwlV3l?G*hQV<8#(QSy=D0e`}rR|23n>q8nG*Ub#WPe{Rw}q)2u5g zuuy7KCz${4M&j!=e!lHExJkzWl>Fg`I1P({QC`3i=8>3M>ek&Ca2@B%#Hgex8X_|z z2r+I4z%kc$QwU;CA|5fHGg8q9C(<)kmf{`GS2bvJ6ccuYXI_0?jrB~$mC25hZ4HCHLsdKQ6-}Qa)spg$3%y%zvK_hfUuiqFfT%TL z@km*x+HFz^l#DU!ul>3Pvq}A%OeB!#2=Penh;<+~0RkM)L-?R(w(Ud}xE5lvT6T7* z$ffAMIl~dc>d$}Jn*%}DRaI<6hRG)5$tAv#YHPuYOwqXT#TuLacVW@8;Y`ZL;8!GL zP@}-1D{a~`mMdw*wdesm?f~|wRvcDH)N0|9=ltz#f{Cb-mEtrkXtG*6B)yOY;5~*X z2W$kPDw*EriL0^%a(`31!LZ}+HLD)aOeBc6K>aKc)@hmVa4^f~+@sdLO`voe$JqW0 z(rP_<(@0#1xM60?^y=XmsRShYsr<7|SB)7%=!dha!NHv?cA^vwG^csLc;V^S&)_p-rzHXynx` z`!TK93i#w-HL0W^b&| z;!P+~^y~T%Qoi2(-?$B4;Tcww0Ev&(z;&*@Z@)J+bYtYw)XG z&mQ@{-7_=_(zb23#CDXH`=(T%^OfKxXbmuL&L`>c_@hf~9IDA4C?1e04$=dylGrOk0>ilK4kp)0-`eCdKsfpS}4jCNrjzQy5#VP@Qyk9eQcq zO*0w?_N)9E8qx9E!>8}tpWC_2fj zmw~OF<$T8E#OIY;0LyKe-be>EeYn9prubS39#w}nf4pFk(#E@^T$Hh533LkeJAjkP zeYXKt))vaX_<=|d>f@onZ^b-+S-IJU1K!@rFOf)!pSg0pL`$)yxqW_s~9450)5_Q0e|Y;$R)oZRqig zsb76!v0Kioqx$p8NnPhR)^BJH*TkYGA{_gC8J01x#9xXMx-B4(KkG(?BSJg}-K@u2$nU8!zB<(^a`N7f|e>5XN@%qu?Wj$rY*+6P~6)!1rRJf}9K*Iz5 z{1}Z2II<7D7__rBj&tI9Zl1SO*VAebWxUe2De>2pQDJ^$NB#A3g-6-6E$>fSP^FR2u6N z@9JxKN5K{g6Ng3)Z2b>i?{7$T^m)V;tq`-X2(jQa@0SNsFJ(=A0SFui2qYpaI zBb&=74A>99;a+M*%8yId+&nj0;H2))IJX0SPr2t%{l(T4fUt{HEX3^4ZjF^~8=(UrK^#45HxOl{uKeDcslzz-(0P~c;Yc0FIIC6zf~ zj8FynsLI2kQy;Wo5+88X#q(GI*V@M8Mj+8Ebj-Vq3s4j1lMS&x)z??{lBAAA!%an_)`KXFyMEsFT*@$q5pWl1ymd&}ta^o9T zonUsd5!zKUKSO5838|@lOsmnnZJpy_@@5q|bhyj?CT85;Vi-r9Szq0jywD~Z%X4ki z+5v|_ko3bF-@fi-`lAB?TG-M&PB#3a^`Qj6`Xfb48t~82gGswQ7>KBUmF6?XZk1s! zS)|_gPE(aFB%onB|A%#WW+e^e(#XfcA^ee_^bC*j_XtE%gL&(g>#E{-$z&z2_E!w9 zA8Fan?niZe^l$A_I~r@-*T9VX)r#5YlzMX(=|QIJjL7&Uc8tkBd8RYh&fGHlQ)a(w zQxrbYQ)Fwqd2s{sDR%d9`zI`DvX;FiTI@ga`FAbN9rezIUWHNtu&@;bcTRC~_|o__`Fo&ujhqB;xvEYtR8H9J0jP&vucIRZdH$x%!AMb zG4BOl__v9p`xK%kuY7>=0nf`2V;b^u-NGPcJO2L_Xb%As)SRyWemD-*T`tWEEsfei-i!RQF-iKaH>Vsm%ro#&Q~N6Ipevi&{sF|MS+r+MJUJ!H=H6tow<;jn zt#-?FADFBe93IMkknqsRK3??9WzS-K#0y23oKW4V;(TSi-^6%K93Lg*Hc-=ySg zSOl6%6a~gbS+Xxa$lT|LQz0+Srq6hjIIf`elE10yw>J167R7TgO)64Ze?PD_g7?HG|*gN1;zW|$RA{Rb5D_#qQ^Nh&NA<(>av2^2x=^X+E9r!?tGlEWxj z_nK^Ft{LCd^6TSsf*It zb^>gNXK+=QG!+}RSE zlDVWgGQYSA7GHbcJ19X7rfb*=tbM;YSc40@1 z6Zc%ICEzEB$ds61rB~=QLp8{Ie-r=pVSTv3>C>ULOpj*swBLDRE;ywB4rd4e{;QHjoz5?-~ z>XkS;i?;KR*$f_|oH+#XcuFa^5llTr{9SmRi&nuGG~k2N_-F`Uu}JI;igK>X+4bwC)i@4?ZgnoKcD0=8K#QE)3y@Q?)z zf8KxQ0uX8FW#FH%%-h9-+Z?6nSPfLP^R;L)ygu+}DS6{=*=vfN*1tV7muFA-E4~FP z0Izf*mfinG+8LZpDuyjyT&%kQwj%Q6de@7@jRVHd~h% zWh#^wPE0&U=T;)$4=KEsj71T-m9K|G-6!TDNG2cJ%ohDMpxtt{pBB*kv(9=Xe)eH$Ac5Un?cEnaWRQfpeX4L?g8p3WqYw~Aw28)5T!gW<7u zu?BETw1(GlCf}z>OfH{AJKilVfbg8!wpM7?^OF;c0~X8J4OX^N+1FK#Q4}^}y7{Vq z&k?ddE01DU0GQYMq(XD%GO=J}%RG|FkF|s1r0&^K0n|HmJD2pj*LgKq^qj9Tz=tJxX!a zZkc$&PTUlA)s|x_WAo8zb${vSxCaUB9EZ6r<)=c}Id8uW^M4CKPnunpc z*;5<3@PkG)QP|JU*3YZ*a2tqB*Db4xGmbfCM-VGlx`DZtn|Q)R`3zo99&25C#Wo^! zb#EtlbKGVgDqGZM*R;8`Oarctffu{e8fEYTed*y+(7|rXa(z&O@#ROK0k&Xm%OJu`pY{LGvY7Hnod zp0~JovZofG)%XYFjIlW9UXsm{Wwz>*oMM)9c*{U}{yDJFB%e|2gl$Q|66b{o{QME^8^+*@-lE0;UE54-&`FD*N!3- z$J0FJ5uw^9b%7$*wSd{nszO9Qt~I?^q_-EPD-lC4mOZY}y`Xr6oB_m-82sNbsJ#n`%lvB1przjPlSqTL~>ALwj=e8_iAM0yNG7OK5=`z=RQ>D*wuR+F* z!B746vq*h~MoSNM73@mJb8JxS_nclWk!9U|O)OBL^#m@5bZhRh_+N z&t1OciIZ}cYV^H-R-lip@SuFTg3KNUX>9PBMe-9=TLchcDWS5jM5CpX1%?a=SGl{y zPDv)iB38VxPhgP;1Y0{(tZPZ+@K>`aN@u(er$RS^SfjYD7;vJU0#RipO>5&tJsf(? z;Z;9T(PpO%vYGUuV}S}p$(`adBDCsI057rfL7z?FAW{DeyZM(UefdJi-(Di?*N0Aq zfQda#<^e%@L#z4J2PYgVJM9h-Y+mYHx6l_|jdKI2vto88L4do{z~Vw7XPd=UXF!4dEQ_BS z@M?T!z-jgRN^2AT;Zr$wE%G5xj|>C;Q4&lS|8*k`I#Gppyq1`oBtNTVX3rX^pn^eA zixYSmXB6&isi?+Ud~?ZbF|*_(YdQ9hX& zQtVVpEZNp+dqjqRRp&uu)idviuPG+W&_`5IPu0oYoH>}l0-_5CCzusDuI^HNeC3#D z6guLr8*06+b*l8~zC=<^Z*Y7|x|e^`k^ju@S)qa36Io|ru#zM`*zNpn2y=qfd+V+) zJ@H2X6ERlQ-X!X&zLSIOUUoxH14!SA!ek^2T_Bc6NY?#Vy*SibFMsJLN`XBU=lGsW zyod!d+F;U`O@c7z1ehttz}4?+SmJUQwtBIkrq4i7UN3CaXZFYbg4IC}oV{|`Afyxr zF3TI!^#YahN%?Er#!o?T)&6>9yiopJg<6dNG$A|}NHe;!|CVt3CFp9bUX^Pbd8W}#>*F#3V- zQfET?3#nVKKKiaEC+%C9w$oCRxX=H_}qqJIVL! zK;U|aeQu(awNvd8p9hKJ8k|(U@t&C=@{)*nqH9}V___)85@XISO+^$>6?`YcRr&IN z5|qRSQ$l5jGUS}Ig0@hG$quK_UGL@!k$-gCL9Vqx_L{Hcj+((~X zy_6TSY}>3tVz1eD&NP$qY$J<5DFxc_7dB_VL!mZf&MH)Tp90xkT(KDZ0zy(Uv|5rZN1=Mh!x zh7)b;>4o?=1bGNlws5d6Ae6Qv3@QXDxStiE!9`*;hQaetjd+{T*+YZm%#rY|V=Ki# z!S$a^) zvlZkNF}ycRS6fF(tqy_fm(!kt3-(C4c@z#6-R` z+=W1Qe9_0k84Hhv@rlu}sFgX+F(jR@8o4{OI8av=bjoP#ZNdfNC2kfEG@B$@+cXkL zV{?s0&-HY-AzEK_4){?#NguYV-W*;V8Cs!Z0|!3>yBO5Mcpkdv`@+L(eCir7n|XIS-;aVkYu&Moul@}*)6&n85aZ+zzbD9 znP}735-7&iwp3*91_8Gl!XA;-;g+l&&UW#wSz7kwC301TZQx8!BUU)>l8Awq2|5uB zwGWimh`1KWw9Ml}2_iNwY*3PKx$vca{6ZkuH5IJe%pv7uff^`mZ;ZDXJ*YGZz(~&) zvMibNJiH?hap65&K!T-gXkP?gD{v~p|Nhw+OO*&fa}l_bT=Uk{^ZF3+dj$My@1 zO=JSD^CdnYVMhGN^MrQ4Mk2m}jX$Y_LTJV8a+Cj>OQR|5BBG9W%PukA+hXZi84&?W zS(g&o=qE2+kX5C+DU&lS46Q$k_|olC-@Tr^%n`Qi0Cf|=tfFXJLMO4H6r0D zIsoqz7J5ti2f7z8alk}l2H+Eqh`GYk4slO9{DX425#%dYb?@kaU!YE@&mA4FnOpHa zQQ*R1P3b*q%XRyMzvWf{UHA*{7lMu+%IeaD8f7AsMB?{NJC=Nl5SJ1_Oy;%>HEK#o zdH_z{&aRMnLEsJ`Ym3;TPvX*3^x0dzgfn^$hFyN3Zk%4!84lfz`1>f%k|NK8^4U2a zq+o;TZq~N;Ob~%k_KG>jxdGrdvk(L-1$`ZE=s+f|!@T5vH~=Y|#*Gr>e!xy*Pi_P5 zhL;eEl|QfV=wxC%6Q(HinoAxdK9vj9n_SdT0{5{iKi||}8AxbJC(j>R`J^*o&exSt zQ<-HEGk{C^v>o*e1ezmTIzb9}?+lFWAWOag+mtZ@OiHN~Lc;X)g{0-c#gLB(sUP1oYedIkXrwqkT9qnNx#iwH^T$qcDziJ$>m)Ox{hA67_5a-#(kovMqWNUC;77ITy_>%V`2?MqykfX!eWUdJilJ>-YG|`7_418SoL1Y?l>IX5P^H zS1ka|QfEcj%kn+!`1!3fZt2U#c#Qi+qGZ3+jZP=;w3_fpmC!6{{&2?NAo5{A*#p za&;O_naLz|YP2w!$m3Mm?ZI8j@N^R!hsE{LcuRmAS=S+YEUY&AHN4-eKjXG%Uw>q2 z+`X>Y(|`l2fTf_|4o7kHn)Yt%o)(v%$ZK!IW5Fi;FJDNME<|GdS?eZwM{FVQ5JvVz zUw639%OnI8l#%VxWM|!!_g;c}Rp`18H9ZY>ZMY3oszY}4XJc6VG?NdXVjc^X)O()4 z&7lW}Td*hcpM%W?CD3VP+!cy<{Xzotu(hZjS%4 z5=urH9qdQO^BlIRv$Z=>He@aG28F|%44WFfQR{^S)JsOHi=D(OV}UBj^;1#2@9NII zAQ4Bdyu`HB)MYS>UCZZmsIJ(xcxIS~+*i<)`&kw>A>?N9W{TJ_2oE-@w52%UrWiif zR=V8u+R&|b|7i-|=VyYZVb+H-;T~T`-@FQ|&l0+jS{mP^=lLuVfB;_G>U)2Kcg2J7fzr~O%1tQ?#G1A>0{vnVW z@<2eCzPl2xi1-Fm)ki0T@jP24wVccti3XVwsC2Zy?~PsN588H`Mnx|5Vo@wXkys{R zstPj3p6gg%Hi*>qMf)?I^rJ|!u8Tsl`2&jU?NWFm8IMyTJ>f>ib8_>D z%SC%Y=(H+=vZtS<CVrzup!dJG@!EDdk5+2FVt)mgfbpF_IN`KB85T3(Qe8Ii+lIX zF7p{LilI&CgEZiDNChZ!>CsECiYPdzr{^e*Y@rBIj`^88O#sL+04fC+XFB(V%c~?Z zRZdF2X67vpfEs)4n+NyQYhSP+g0w-N!q}+w9b_{!!M|Y-sx#n~7?Nfv%MyyjCXCxU z@L`0qk{jMR$I|a>j}FEPM%77qaOQRZhR?^J^V===oKYTI6^k+q#U>;5!t)vYVequ! zTPdNAY>+~o@6--3l`vnE-UX&z_Vw41=bqgZHl1G1(PIhhLkZLIO5YsPb9t_*aL85x zr`1A~`029*%o$s>Oe;|>VJKKoHzzj~Ru;g`h| zQ@NDX;jkP1Y7Iu>Heh448nLMja3@;dG3|HuJpOBJLS8Zi1v!bbh~v=8y<#2epFlqD zRwnc3t$PK<7U>u`SE`s@m_sW;eUJOPKzIw{5DoOjEWBF> z{+a*OK{#6~FB#8wO=`rmBpp*dQH^}Y7V+S0TY*^4RA_LAm`G`lyy3X$Y!h+k=%CR` zOxer!^svp02mB5X@Oa%NEV$EEb&zLE;UKsq0QYnqQ$SEzNptIjRXPO^YcVuIc z73%-M)X$C~3TU9qh>}I^$xXFU*LS zHHvxFe%|^GOXBd%%l=J*mo~7o^s3b&qX&M$d7dI1c<-l!rbr>Z zIecHQ-`&4>4IMoE8&4F#AY*n@q}7=Zt+qB2#4n3=9&A@!+;L2_QbY5iAdlHbuO`qR zqIIQ}t@x3AMF*g5rkrefbYo$A5av7wf@GJM5?oS6)04IQ8on=-P3Na)e2DS~ha{am#u8CVI!)Z7H6-Qe#;Ah5hcQvKYmrT9A%> zC}%oQ?cKS+er5Y~Z7i`6D#ol>LkPMz9IN}9)3roc(oKEdLFfmaqbG~`Lc4~SVn`R< z@H6`5s>_g6xlVuZ7Uast+Jjj(^u7^r$UotpHJ7~@nHkdRyLP9_-)F<6s{pT|2pwkH zkh(1wHg*5}kgtel)97w(+$$E*>%!Eo+Rywx*HYcYEjP~d_O-$12IdTfX*KHm)70sa zps1wMv!=W5*T|M%qI0Qj(0`KHA;E_=eCVcX2Wr}=gA8SriN#C=+Vu_}vdn1SlP2HB zk4e^liZ#6Cr*^e*Bzz30T2)g8)2Z~cQORdDGmD$E$%3-{e96fM?c{M+X=>1Hry-_M z`4c_nUFeCv{VInb!@qhjGDBVS)G&&KkAM{2&KEsB^*i|4Jx}iG(W%Ulr4Je1BNLEr z@|tV`OOAN^c<=3cIz}*T)GV|(S-Vcf#Q|*ZFB_w0Vr@>=pPsruiQb0$Ii7WZMREEG#gIg zeS>v^6&N%gIv2^k4X!1*`ZSeq$?+Ec0@j^okqN+)ibK7UZW$#(oaGPs-B5mgMVuV1PcgpBbt?e*C zgNHTnEyg`uh9bMns-^w6@yc&nU zx@%A@WPJvGa81E}ciV;eBeu;0;*a~b2<*t`1Bnv+c~CZomgxMUm8F=k!T3KNa;#Sr zIt?R8T!WEnb+uB0Y99SH74NWFxtoPUCrOJ(PCA14k`O_}dzyo{4#6vEv`nVG{Rn0v zu+QaV2Zkn?IFoAekoZt#zy$=`AN8QBtd4a$yL0mi7Y?mlS{+oCMgG=sRv8nw@ZWt( zHq~_ybg@n(Y*e4@ns3#yxxIjcFs9t`vgRLywK65Z`Qp0$zw%r-BTO5zp08z@wF&r{ zR1^io$&_u2_Q(3G#?Q@4TRp2AGXYtY-duq1nW?(s+<3&FK=!d?A2xd66FgR?C_M+@ zK0s+SVW6I&e}@zn<=3n}5Y(Lb-SPz+OO9z2xhbn^kfMai#I5CL3)ZsY`}YJef3N+o!)*D`KL>8qA5ASe^n&nE#`c@QENgU zc#TMOYN(#;M|dYl^JgMg)i4vQv;J@Cf(cFzbe@rffZZ#8*hvb4;$^(BQp(TCya|)y zzUcKsD0hkQFd7WZSEebORBu*#!?CYrQNVHdd?pYOBf-yzSXR|VI8{}N)xe-q{wKQ>3=Y{N*k=t&)H z*G|-AjI3Y5;h%2u+A%(1n(kv!))?B>RHej$bKx(kw)xU}91L`YVZNPrYa6kBW*}l7 z&nmAXV?$PRV^qq7fu5LYq88STF5tnRze07oxFD5Z)&NkmXB`5@)2@rEb5^zWiKWtS z^zh1|ioyw1-wjeyG~QHm{J!TEex^^0U9%M}c2t1ay62*?G+o=xGIXwJ0LR^6T_l6| zMJJ}e`uV`^*hn@wrOkMmY)RmLn``(K_98XA0j7s>rSgNCC$u=}RGas&Ch-8e^No`Y z!z_b0hgfUTRdV%$u%1g;e=^KS(8mEa*(rG-yP23o8cInnel$1wH)x;dhggH=aSr-1 z)MR5F&qr`77BXy24_ol=hj;tTy0qar^Pu+ZgN`r*nz`U0!O&?)p`B$B>s{9&$c{-p z_tH4ra+ud-Wso5wlQ_y*MC>y7C(N1-BhAW2;AQ=5VQyz!q^ct?;rmktshi;?3N4fWCAOABZXRv*jj-swV0MWSjp|e&GqS z>lkWxAGi8>&_IcW89U7r`7Jm;utHNcv|8+7M(<0%*hYx^9nlznxS|Obtmb@QN=lD1 zWM=N$I)6dA&h^b+Fn1s>ov}t4m*IJ~S_S0_nU%q05UDvZpa9+nsVg5jn$}Agx4YnjV|} zaO~PhOr3^dEI;+LGJpxJ=7@pD;7j1E{J<<)Jv?o99GAqIL;;*w-@uA^5{x3QVlz)f zYbbvZ7Ta3%LY2veibx?(L49v{YlI>{ITe4B7Z~@v0$dZ@vqHpNseunMJ~mTUu}6Z9 zIwv5Vja!t4SWRJr;Z4hsq*H1}Ez6FgNtYjw;dTvKOU)C8^xlFlz*Be&+M?uE(SS&o z-EF*J52$uKxP@}fiNa8SCtXDguP{jrM zB6|d84KZVb`Mu~t5$yXJC8ZueB^aww*W^gkizz}xTBzK|eiE&>D)5EMw)D*r} zwjJjA`u4HZr1>K|E%sT`7@k zGXQiXb=tDxeQ!o;*cif@3_n!H3EWHU2$ciL)Ywv2avvR6{_0Fl()Pju57vK~hlJeiW5x`?$niCBvb{THFGCoQ1zm?RCkU z5y9zK%&GQQ<2Xu=+2CldDvu$^-R>ZE)0#Fz$hJe(GL0t?_V2XLH#_@W(?Ic_&D77- z!qkQq#-yvz2Z>S|nyqjdsiw>Sc!7_Ed$1evZ?w1qTZ^zp#mp?n;ITe6Z;UwlCH`+% zISYYU>0L}K`SDu-83#;7j`TYglCaaHjywv`zb>0r_H6w0li_SARKq)e7IWibZDwa* z9^~dl_fd{k9(wh8?8*dA^?g5nh778gf`)V%6purof_p}}E;+7PKY-`?p`ro|Hjrqw z6<9XAO9=#U)il%{f$eQElxb6RhU!bnoj9)$kZX)acm@Gf12#va-Pp-_0mz`ENrpye zM1I?aP`%(IP#28i1E*jz|CcT#dUrO}L#q`Jnw~+4i-|7}$SFKh%>Vxk%EZLDGZnBg z4pAW(m&wutn9T2vy;$#5Bamd(DDj<<)9$S`@f@~XlX^Vx2Q_Vq0ih5D;kuf*9$NR7 z0+vc|P!lgc08F6}kCZCm&{)PQo15*qzSpub;gMlgL)_zAS{V}U#gl1Jq#Y}b;%Ng7 zq~~cqt81g{SB%$3F3MOm-%F5ltU+KLjf?<`glRLTfgS?6TES-Eq$09R;Ca;fvZQrV?Zu`Qg0{nntcwc#`=4o=Op@H`T|zakir@c080F?=BdlEq0%p$dL-9CjigB|LOaXMN8vo$aO+ zo~e?)wT@TL@d1!OUpMhO&_WTwkd2bUY1l2@Ks^mpIFS!EKvAsop5nmP{n?2~nfwIU9jk-DUGJ2}`KVKuvu0=RwDz{5r1yQghXJ_ zo;c_2Y@7sa9#UdXVllqpC|AZ#<~hXaLtJj_w>~mapqXcPZy&#u*#eL|3b(YrNA02R z;Ln09+!xVl@cCkTCA7{2jQ|Ql2Wbb9_LCy9zyY=){Rqp6N|G6I#h%=cFth}XL|%4< zx}K@2@UWLMd?AMg9;Q%i%zK7V-GM)f^YZZE$|eRReJ^gnt;PeWX&K9k^o@{yipoLr zV`%q1Kge+neI=&0o*i$WD92+5Y)*H@G5c(h&$}UWLvm7^ z_uuN+$m(l?H^QM2A$t8;Fyn!sInAe1=o#X-ApTtZXa1K`oj&1O#(}D=-&Vxjr!P-_ z^3l!pVT7mCq`IST@nJKZQ=m!9WZN8W>fM7)K0dCRfu)>OzRan*Z(*K0z=k$kGM*QV z+wIMv6yUx^e(&M?91V}(qWn}#@pGa3>dATf5I71-kFh`-&hcoJNREHiwqO^orRY-5 zm4{Ytkk}1}>kOK`9owchPgLctq|G0?)^|g)&I*1F~ISs5U2+ zgL5NrCM_^oa4-F~9c5}vWVdLj zfw*)tvkXvsTBS!ashEwvd!T%z-DS})aj38_+1Qt!QSd^q)-1oEub$IQ8SthT2?2 zL#S2fq1k+6ysvz6z?6*o0wO0DRQ=R6NO!ROS>T5u@UO@BONkj&j7hJQj6#w~z7GCB zc<;Qj$;@^J6Aya4m@sH)+~&bpdR07ExGf*6GQXp`o`^^J?Js-4{Q>!FwW6G|=)>Igcs>tmOGa(vq0(Agyp z*<99BJ7r-MktQtswT4Q?xpUue+tXq_%nM&gK3~_Jy(G?&0iE@}{Dvhm-{WxHk;IME z=3qwO-j8b&UA_Hhn_pV75qq+Q=srfZiLQfVB(xJ*QkAOM(~pg);zdX31@D<~Vy35| z+hx;Y%N5m|6ltfZaGuw8jn~;$4U_h^U`m#N@9sRKNp~fCp+_GNzEn)BG<)K9K*+?@ zh1q@CI>;?+?BtOMiLC8Lj+d~ETXTS#fzhJWNNv<$*yosS^NqeIn(3yo)z`y2rA^nQ zUDT}^9eL}h*KvQxgtId)p7)RiW#Ce+B+EaQ!U&CO3lHl{khXFzX2;9i{3mhrU0u%T zeZGC3EjcHpJv$wQ%!p@kc&h-Ohp$!bXCmmFIbf!Fi!ORlx3YUw)O>If*RI^S6jcdexBryf)wC?vgfLx{A_AFe)FzNl~V6bH}J(>YsSVzt}^6 zOWM-pCHnwvSg2dZ|B@zC;+o5s+4QL-fiJ+a+q;}*s+^p@#Www!U3@M8Yxr9}FsLCk zPB*I)k&;4BxbBNGD=9j(v4drs#fIM=EF;=m$=g#U@E;WsDK>r6Tszbz@*Qea9f-n3 z>8jJU`K^4-9{R4?C~aF42?$b$Z(8$Y42N0tgpWT$>~5kHTWe$A0!WgK z1~~F+xpFNdN>c5q)F^Ag?vn9^g?kD75j)PnDI*aVV{J82^roI9%(dAYmH6MtpFds$HC5*M*pIRTuInjWEfqk1L9F4zwH}ui7>MgP! zh#jLq(CI2XLP$qEqJSqky&|OcOB|gKLp$Gj`1+rR6)(;k(a$i0A zDRBBLWULdWi?9DWVGD^nC>$$mA zIWG&Og9$MqKY z*G!t?OzItMq**ZKI>@W9o=FA=0?c6LbnMA1vqcBd>baXCrEHz7)Hj~dU8@leEZp3# zf_kyx<0qA+tSo&WqLwCBTzdk!{WHbr*5WC`I<{JqH#x@^LIIc}w)@Q=>6-LCirs^E zU}}F3hE4qS7xBS#7h66~gsw=6CdZ+NlCP-2ayiO%cnSDY*R-y<_Czut^9wP^ko*ph zl0AY%O}n>Wbls`dMipu=8i)FPGY-X?#kMbiGPi)lSdic;rzQ7z1au6qKPq=>HrSSkp@VG?A3Sh;TVbTcAIdlt81E%djIRAg5Aejo3Ft;A6Q1f^tP?^7A~^nu5KS zKewMQ_56#<ktD=fl_Y1DSr;HDBE!O5>IELbKgnv{4hJ1Gp-(u1rZ(wy z=+;jE(U(yLP7-p`3Ixa zustF@H8XYjWCp4YssyF~)g*XHNEKZ&P*=ata`YoL7xv@QN?qOkj0mokn{eEMGSR($ zCxFWPNLCzX56@T80degbCyw8nlV_H!&mW;mqmgV)h8Y7 zKZ0@=g?!fHbynr|)b}MCi`n>~SPmQo8`1`;H~Wq>F%W^AX+uK=cQy&9Zn;HyZ&|8|5>oS1Kb@h4WSBMLGKiJ&IMR1<laKsn0xJbZUSFXk{Z$ z6)+W5Zb*A^iKAUa_K=fx;uPO<0VZ{S0zDRqdmGT|RuRY;SiTBV??JTj$?(v& zZU-{dSE)?%eXOYgM*WYvG4!G!sCct0Wg8~hq(#O>VIM0Ma@!dr&s8v5YE|;Vd4$Xl z#@5Grag>zT9E7RH6?1j&{3(H%K;kSbqyu+^gvjv+Iohv}jqJh|j%nGP<>>VQFh|;t z9CA6N#(_g(SKxNjUuhGta@oS1T81c+T|89QuWhm;6>h;vgq@%HkL@jc{1;lWXG^1A zDg;`E{bDph6y5lKnwm#=!|R>EOpAj^huvs3zPUlnyWtD9cV>LK7qx9kQqz0kLdo{XiK#NU^?}0BCDHdzT6__!6(ldxyXJ@hFmR_GmHZSx z6LPuK;{Iz+O-xTuhBVtHL>%q3N|^#sI;-;ne2<}@3!UN_y4<`ZA!=|EW7|+go$rlf z0{F?Ipx6vfj0L>CdqJW*pzm!&i*5K`t-+?@dEI$noDZ%oJs%R9r-Q8A%4!u;!6=HH zFH`MpWn6Lj4Y|Q4;gOCYC%x3yB8jjPQkh?Ene!WKBLvoq$c|GGuL;%Yop84Hw2NdF z0N?(425Sd26Th?r1JSk&(UCCmJNw?o*Bc9MPkdMQ$uWu)a6_z~cjpWt6;x<@yKJ|3q~XZX35Fm`P!>Oh)%7kB6^YfK&~=^!>M~ zEzm-@#7jR5qyhiUeYMqLSlXaR1M0j6=9hw86AY>v*v=`)rHK1!(>LHKNIjef0PZAr%z3XWGmAGMpuD(OxzO z#u?9KeHFduSr>rTbdoe9nLF`TD~>`EJt(L{7j!sGVAcgrIz7%Tpy}l&LXoBtP}P`v zBL#khiFsT>9wTKe9%wVKf9>KJ5DwYKJDe3Bnt)GIfvO>7c6ksqJjIGlrQ(R;|9gAc z7?clRx|YsEG=_~4upDibXI&xZ+{x2q-m8v*5jwP(X%d7&PQafLcR$oJcgJdf?*kw~ z@WxcteF149{oDRReujWB3bGmID`rDL~|(gFE(n^V+d1wINs%t;|Tnp$=*q zoz8Oh^Bg2NkYsSsKK(@Jmb0r_W%1?cbtIY8jtQ!BUM_J*}5YTktakq zOI1esa*Y*n_p!qaNivX2W?mw!-yz#f(Cu*7>k>IsQj~NZEx4j?Fktu&3VHnoyeIzMs7EALvXZxcrp0E6;Y!I9-B+rkM zOb3E6lq*^1;aVZnklMHv)eexZxFdsbI@GM7>ac_)SdZ<&uVErm&Eypp){^=2!(Dmu zKw4Xp73q*60uQ{xs2ESPZJdiS;^cy+{bFAP`XTZnj}7YJzvr)tNu`9luf+Xpm^@Uh zLxq&B`EcPaKh=5{{@9$mI8SC7nyluhk)yk+*5l#B=wVxXP%uo$I(=e9aqt4(TQu5YtRi_En6NuiAE8k)iS0cmLzFss`ROj7L5g;FyRcrquqn*8-H)!j$q!_BJU^ne7ur9zm*zz z>yAY zID$9YGhY;eOn|lEziCgnQC~QMDVgGUQUy8yrrVeBD)M;VO0BUgG;?WShO9oyo`=DA zS4tjkD6e6e=B3rerqz>@6A0mcpB4o9)BTBjRop&cYs zMfMeY)hL8?CHVBRT@W+au`LLU_Hd3PoofG=Wh@(O0Nzkn|HW(3P0{Ep<~)(8Hfmv= zffv{2k(e(Rr0GCD2@=s-c5>Bq1v~Vbw*1iRow?!?jKBC4%Xcfl<%GF?t8ipuKX$RqQd$5abMAe0Y8ICTST5hy*xb!@H9j(;BmMl?uNfX+~Xk|FTdr zDE(p$YA5FRU6%h9%*$;Y9om=b+BO9_gBRE_rb`mnpx*80ZD~Djx`5us`PfZo&0Ppb z0?F?0usis$TGu+FALVaEM3q#|DOg6OPJIyrya;zTyVy7%YsuyV+rp*gd1p(pLRu-u zeJw3Iz#>dbqyA{6nrSG8$-r14k10PQlsN84v|RWonM=#REcI9zO&|%R(a+0u9Sp$` zHJKtXtm#AzF%$5g=sh$M!oMSo6t$S&>>BJI-kn!c-_t<;a7$qpMaKv)k3h2_^D+Yr zVShsxN^p%6Y)#pR1(YszS_)iJy`n!0b(m$%b0&y`2ExtJT|FA~!2yYc`~t3(Zj5IIp&%-?RW@=l^7>LjohSwt~QW=xX1hV$$DP zUkmaDdgL<^w6FV6jZc=q3Utk` zk%<>WAypn+$H;b!wm9F~wY*Z$tI>>f{}h5IED-`*b^XR96?hbr@1N2=DiQ4o9cZgy zN&BFf_l?fYGH#c5>)RX_KUld=WO{E75x9r+xGYfpUTxL+VW?@n)ji@R2|LlDg_x4$ zqo>H?t3)n#xp!;>B2BGC3hyhyRRn6Ng11D#tmCEo0@P;t4|DU7tROiR1QP>K)64un znaa=4gTCH@K|S19DFy`lwJud-Br7ZnL86AxDU+vcp2S;*7gw}d4FGhiTv6RCHMBKL z9gq9Fy$LsA<@3zS&1~dZ=_oIA=yfAPV>ar<`lJeMnxEq3xGgQ4ggN~V+Z29C`SQXc*p&?GmFv3fTDWFRT{rG%Rm6d5?b)%{?+_kN&%84R;b}B z0>bAc$U_4No$zHXPM*xs`^Jn`aG`ZfYENAV5l3Hvi=szy_M1@ZJBQLpJu$-#ShL6V zu4%zA2lCg~Poc<@KOJK}Mr(MJ2ayPsu+&0C<&$jnn+w&lfMbidY>gWY4lKYj-NOy_HAI8DLwLkRb& z?QlHq7jlhTDXPO8z9%$Ii2e_6>pz3aB(q5_S83@_y_ zS|Os`O->>Xdb=uTCk5FN9oq^Ytx2nka9|ww+?2n_Zi(A)grn;iZAqxt&FJ86JYmKC zbl`=0It}#iaXb(%cMYTqG1%EjBIpZ;LZEz5*3w zYc)_@G-&2HS5US5Oh9)o^-s|RyWi`h{izGNbc9odOa1xKxBFBl$jh|i(oPrfmx7pI zn5HK%#=ju^U0Nyp)f=ajQyM~GXEznnCxddfZAThvz*(+@Fm4@p;a4a%(OWubz$^Ts zV@@W#4R9;dIjf8RzeeV<+}F~Jr!K`Kw9$mMXUzbPBiV<^yR+Lr9-FZZl-p5=&y`g> z1B`w=j4o;vrXH=>UZg)Enj+-Lh!hObY8Sfy<^Nyg47TCJBC1+@27YjyI*_YgmvJ~( zQ+)rrpWgZXGt&wn&x)m&dCdyHgB61X5|Do8<1iM-=1;MYh}>s@H^3DeYC?-tWgKqA zFE-G;CC(lE3yHSfXE26Z@U%1LP-_pw;bAe%4s#-7CBw`pP{e~q`gS!k)BRGdX7%a8tPa)ny78To`O)jmoGSI%Z3X(?ltN#H-&qfiuvzJxq0z|JUfmw zccv*TuTSoz{N=C|{wcjkS<0rUDAPATYc>)T6SCID9w;v~8t1JoD4L}lH#Ar-Zugv_ zv7HYf?P`W+F13}DRFzYuMNGNe%08$zaUIA4nQ_Aw~}%*wEp{>>%)Gq6=_+_zMQ zrSOq%)U}bJ?-L8s`@JJwys^rRaanJ15hxCmnuGe4J->pBCa{9ROZLzb0EM>q3XT}C z5F>&IMX!oUQOhs}=g&%qt+HX*#aHu)*$A(mm+s!KR0HRYk2LTC)s-an`KAbuNZXyU z`!kB2lw@1BuT4qbE)qR0GuOk|$7Ynq8KAxwHiEJQhy@8k)snblm@ntrK+)ZL($Rsb z{R!W*L8S_3E~vJ$9iCM z9k7_qGj;n$UTE(dWcHi|_+y04b;C2ZLp$2Vec^#CQ8?dZbh+} z+9n-tC6Ug`XYMyA^#M3KEDr}ea-u#_IfL)PyE(?vv_&oY3)1qq#G_da>MV}79s#{c z%5_;5BI5;ow`+p;m#Ook@wLT60-)Sy*)=9RVK%mo-a*LUAJ*QgDgY*z;tgq}Qgw(O z3RD(BA5i5x;?ja~I}r>?xce?}jgvE}w>%3M6I`;ZUTdBVtLD?1 z;riR$B>bo?Q08oqLWoW#mSn7TI+2dtG!+$Qhi~B;#uu9Ax=GJ zD#$P$J-~({`f+3!Bj1y1*T+Z!C|<9$j~wW^KjGS_V~C|$L>VK|NuRy=ypN=|vh-w^ zB=XUGPbqgFM>u{tj6fBS_bxAu)pkEihRsK1a?%yBq)3IlDvk-mbC>SG@cs*e=c;RST51Jmc zy1W7%*a#06^{%%xKvraF_o7sd4>SQok(cCi=_M?b>y4xhp?dakE;zv^wRXf9Qc^!PF$@C&Y z_);_`PO0eL!yoBz3?h-3nxntbIMbfN+eWrXGZ_2w@)qQyS0%|kN8nqr{yOGG0~fL8 zA*RCyzpX@-{a67r!>%1@O{`YO8OZ((_t3~K=n1BJ5%$!!r^OX*!UT*yjf=RijsF<3iB z_1Ly2t$)S4)VO7D9=UKt4izL0FQ6y+QL)>ZX0tlxpiGAS|9?|!2WCv@vmu)JHPW)um2)+14UaT`w)0Lt-DAwjlS$%kOhkLwC97S*&NT zr=(nuVLX=9^q{ZE4}lu+qc^IOQBZ3Cb=1cGJP6sZaw87QTBNm|rd}|N6(G6oL%;~-@h2XjC zlhSXo7N)!tLLv@&-F5uYB%ur~rti&wR0!aC5jK=R!2R@+Bp6APzx7i2#H&*(;QPWC z74H1uI0M7X1k3wkT#j*?jSlceHX(l&)^&UDn<9;-$T;=^B_W!35|Wrk1Xvr{Gn2-73uCu&N`BXk z`qGk$zvzH|iezdY9SAo)6q8WuDS7*P(AiIH9HUZ7KHUxN!0=1=?c7*g+xiklYm{pg z&b_uC-{iN7%=>0UydS6dWM&iyvuGiKV8+gPW3gvld;9!vV7XeWkj|ia{&~l8c;m&6 zkP+Y*uXJeXFIWBIrVVue$|Ja1Vx--Wds~UJp^8{(kLQ(lyrP#pF&X)MZJeGFwG~5E z_1gG8Gj}aKizfoJUTmXiFFR`hH+}WZID)Z6)8(X7)Ngv^vVD^t6tUydQ`6)95Es=y zP03wA-e!V`0G&Ei7GKNt%RNWs0fGC?M7B?_A9~&#L{><2J91^J9;#IHZ9}wOWHM; zx*8aGhed1}(%ENm?=!ivNG!^Uu%pL>CDe+c- zA`toA2VKP+L>E$jk%$7>_KUT2coT29{ZF6Hh9VE^QaL+4?9?Kr5YCh zp#5tokQY=>-;3$l`d^p1HL48zIh@rCGnMl@aE>9kiEPgRc}m)<5t{lv6(V2?`e>2Z zcTH9Uzm;K2wkt;B4=TrfJh}K89=tmggk!ElP8ZksALu?lugxV2XTW9CkhEAsomReS za}`zrGjTF(AfOB~c%}=by-Y=DTWt`Rx9)@~zv65n9s$C9c_~_CZS_KZwFciP_>0Vs z?Wxv!1U*|kl&F_li(Fw=rE1OyIEj!p9zb`MD> znNxx@yOPlENrAfC5SR8Y?99%JbUwWn%d`*{AP$dqCN{6JI3PBIVaw6ht5;O z(D0#o-Pog~1Tmo zJ(v}kEeCiue(QNmc?Yga)9*r_@nkL+A7K<3;5Zl@B~fJ)49m#2=AO6Ja8^_M&@d9M}}uPgTUhg zKd9Na?(iLbRisHwsjlm1DkH02>Yx)lvjkw0#l>EnMN=314(7MdZh4Dlhr+U4w6Nht z%Kdz57Vg$A0Fx>mu`2WA!><>z>NX}K*x}f?MnuABl+zUFZZrzxQn*}!tM^YKC`e}L z;nxv+Ruuf{jCSJoE_oKuS%ab5#X`+@fGL78p!fOZJMexZb{JJ;#A6pAVn(qlWr_>S z_xPdvx9RL7eLnm+IdhYI#He3{Ry&#%d_R42CIT;8u~h1yYJ%s@Cok{4d_Yo@Q&a={ zW`Nn2hst(TH2fyWV{p_(m2Td`C8rwHlTXHFlA?kE{tOUI1Iv4WK~B*saSF*7h5_i$ zo#ll=k^4E)dMemlgbS77F3@2>G{z=jAAJ$|iJas6kA0$V*B`z>kzFyJ;~{IjudXby z7~Oa5VQ0pLXd^uP>~yKcn8DLFFBnOtn$WidIgO&>d*c5Ff!3%EbzY&YpS!@So0Kmc zMd%Dl3Q&XZC16$pbHK~&-UCk8J#jtzLq{$>mFL(s7-2D9gb z+F=O>OQ-*C!vXE^LL?3aZa9LK3FdWUt6aGfesGa7Cpo7Dp|QH}6f5#99*2umOvZE9 ziYkwP7Pb5!xw;VajTGM-%~ULs=BVRTM6lYyFXb9;Yt?~6N9}!d)&k-D%`Q=( zPl$Or+Q%jXPRvn?IS`%U|9O+(M5wPuoCV8|y|N~0L|t@1PzBc^ZZ}ROC7O`4YXN{W z>?F_(zJ!xWZYfmiZw{(C&RnampoSkdI|Hq8lk`i>x!NJM^9ov7#V9wI zKM~xuI!I)d?c9hEblnK>2g39|X;ZB}&`Vm2e~md(mQ_>dtRqwUgY@;CFsr%0i%);G zb_vm8W@;j)znz2y*HOH{?;C-rkJsmfqwGtYdR@_kfR&n114lvCZo^IFb411|1nnbt z;?8cJ6o_pWL7C4!%m@qjg8&!_3mFm6_%7tA5-j6>D+9VE!ug)vP@_f zdkNPc*=R*4sym`fLTEiO)3!uy1Fknqt4j?!GlS-7nrP5!1|QKVBA41)Sil)j;skBD zL6_i#%i9OQ?4oYP)Bs-tPy28Wycbwt(5IhTxoFJRzoccWR5NXh&47cUJWz&qxQrwK zy~bmANk!V2;doRoqiGf(zU^>j2*=dI7)X2Ku;LLdwj`R^vo(R_@i5{dYR!)X`N|yb zx4D6NOb;e8^C4#5*@8-!JJu_H3Fl0&{#XD=4^-));6nb;mCemvsd|6laOZFGcLW6* z{5$dZhh6R4zt+OUiv90=l?z^oPzovt(okY2<-o>kijYFhvtUvD3xEI4d;2Bl3^&Om z&rtJ6IwG@j|8JXoDrPuNL7LFW&N(y^8?V;<$2$RVT_Mx%8o( zgTAcv5f!FjBg@#b!r@MDh*CCcn+wcIOe#OIZG6AWT(+53G0V62_~vpF68^F29kCNP zxq+d}CnO`{;oN(IZu1Do^l&;6SRCaaP=z0Hy=Dca%7vvPYkbpjXdjEv8z;MQ5N~TG>45ue!uy2ux`8XrJt5thg?D4SDH4wvJX{$@Ceen zy;ZSiT0O_Gkr01Ias^CrKh;{qH}QeRhPFdFoVHmC7 z6K1aVI}xhFJD{_GbEX-W@J`3cmW#CmE|1tCYR2=1ptPz*cc8{C`M63`APaGcY$DyH zsKcojHaUe7j+QbYlwbNMj>mzR^{BuPQYHNYc^?j+IXM>yZL1U=P*nt$;?EYT-cUo<}z{Gwo3)a7M}b}Z!43_?u%MG`zR!@C;cvaYr1)PJ=dYJ$lRh50Qf2%kdTUPz^*R=-)sF&@$3Aa`#?Xa$GeM{DCzW*pE z;2-m=a{fDsI|wPyy3e9#gkadTe*LQXxb6nWTJxF2tG(}Pqyocu@-yFbJpP2g<_2)D zn?e_x0(Rna>1>Tfq8<{a`q^~w*$q3=?Ou}}Tu0H0fWWDlkL;MJZ(Rs2;toxlM*0*& zY&6QnSkNomOmXjr?y!?L#R&vKx%f3DXFFCr>e|f zAEQw%GK5LV!2Fd8cN+~<=5s6jh7hQXl4j@03Pub5fA_eCu|P{rZ}x^=#em*d}G?0o_J;wAnE<9eY1>#tGl{HPe}4C$^UbW3^sCd^5LX0Su+J@&qa zK>NC=M(qyTNseq{m{~Jg{Pj-hxNAesasw}s(oIIVc$r|B&^qwKW(~z_1NSaPi2E$T zL3~bAB*x6XH8X!*=A69q^Wrx%C%&5CXBfilHsXwbE+?ZCFB)Y)y{s_g&2oOAj8X=- zzAMp48TXq!`@H-Y__KYKLWl1R3YF0{R4lxEGcEnH@oZQHhO zt4m$BZQHilRb94i+qP}pdNa@jIWjY1W@aQi>p zd~d%m4vY6iN@<4qU@^$D_P#Zh@#DD1A+j9ng02&Yr#N#jJjqDxGhyXt7Pur$XK!m2 zL?1aWKsy*zI5I@m0vvfdV%D)9reaRO*+wI#OgQj98758DcJ9>AWwcfTRcJ3XvR`vE z(YD6Na>K^Z*~tio5uBdie9>vKg#$CJ?>##*>lB{uc*E;{;7O4Vp3f=yX{Xy~hgfL( zCtsrfSN`)zlW<^Wi)Ha1{oXD%=z5x@Fx>Yl+hT@3psdK8W+|+@mY|n4eh$G-Nklq9 zFesHum|;YraEQ3RMztme-C48JG2+^iXi03q&X6w95&cpM=f^l_$2nyGnC{3~eggNv zQ36HOOQmQ*$kV~N>Qw^fS)|{hX!d|VrCE_54f%NXcv@OxN!n(TPAi3is}8}xlgY%J zXl$GMB%1YC|ur5^fiLEuMW7?cpqirStopt|4=4D6hO-VAO>0;1T4 z)p7uS@F-Sd0gm0~iS*wHK>(ZvI3XRc8{v?{(9i4<%6$Lf? z=%})3Cs-TstAy~9ok29nbW5i1*lvawYR3KgxL%pd9cMC-BdslP>pewf>@m!uTF~+b zCl(Hh(cE8g@5*O9`&!g=%(b<#WGyfd1M03T-sCCS9P5SvF?br0P?CizAVFYvqnyHn zc}$G=?{d=)mG_dXfgl~k8d9wds4hdEpNmtpiqkz@f7*60Xy#$tMh_(8224>sp@US> zWviRh>HL)Pn(B;7pO`mYXr+Pz>{hFH&{;nZ79^~E3vURVrgd`h{Ub&?BhS$E(2(G8 z6fd>69!}~=eF-@-1xY#F5niOQZpv_^phUK%afEX-(e(3;@VYM+L=0)&9GBfm_@Yin zf2LITP~>AB^RvgbKJ$WG)*rJ(SdjBj7B%97`2_27miY%+f|*&(Z;(<6ARD-tQmOKXi`U-LR?JUF8C~ z8DZ=PWr{lG{PW^g3JY#eMgdWQSZ@|R{zCCB*s-Qm&XoQj^<_n;>zx+{ zs>5*csd5WV+4$0-29>?#F(pZ?$}Q^e-nQNSfb|Xp77Y-O?A3#qL9Xu0=w6b}@g`+Y zwMUVE2$_wL%R>!}CnQe;L z1*!Ml={5!>a9zLxIoG;tqByTr+hio6=bA#Hd!MK7_0wtryD$@s!RjdT^NxtF0gE?p ztm+&keK%pfJLncdd@-u4+!Ab{uHC8 zKX&i)D<7HOkD(LO-0)|v*N4;>c4tT1bs-y4O*yuV@|cSn3lxn4o1R1LVqG0C-k}Aa z1o|OQ2S)*+%$MAKT}i{RNz7b%8#z~UK#ns^ouomcTI$E0K(&OSP8|4xA!EO(bzhc} z3i#6?sVAeCro;!TvAWD5xNufwpjxJCiAb;(jhdqy@Tln5q_Y^wv5>57%!l6F$vfJ{ zRvP75w7roJhc#McVNPIzf*jT}I!1A)K#g0Ry5SS+I7o}JM@`Jn-3>Tq4!`vK+?LmX z#7JcV?1>MQesxcA&PR4#!m3xhpDbviBs#VM)50EgUWub9w}>V&+z?HJ9Qdu#^FjxTpQx1tDsn~p=HcWT+5)AX9=qa@0apx> z*b^?Aod{}rOS+Xu|71VLJ>1kSwDJfeW@8KPQ=k6K0wK|rA<-c*cwM+5CnR}>!6Z~C z0`52F**O*Vo#ncYiN#ZY)V|NMA#qX}I^tg1rK6&cKYwq=%g8SGtHQU1*7CQkikk&- zMF>jHw5Uc_6cf2U6e?aH=cxS2m#i-YMTx50B5JQD|w>6)r&QlTue-23)i!y5B*SG5W-v36qwSp_X-%q|UX z?QGkYsp}$ePNoFI_Omf^r|oE-KqYMvDoppZdrn0YIqs!xnTsfROS#<6PZ=o z-(dk8ONU1TM_H&2k&b*iHZ_pl1j^4^49QQ!jNLe)QqAYs}C z((R&0YG;(FqXY~DQ46ivO7D+cbc2}G14&TQDJ%bCBIIE4C^c^0@|F%?It%)|k11;2ofYPkM3rOQh@BwWiAY&p^dKHbcodt5OJcPSY2O>L zFr}gV>_;hbI}Ed%S z<#Q~Q3~l-6z%|y=F2aQ`BI!#0-r?i1sqSd?zHEoblCFhlcDG86^L4?|r4x0|V)DSj z{nGJeh4R=*h)RD3j#EJyg&X@jpfVaK_PFeJ-sI0(r-b4MT%L5q>5TTRt$SrW{XV%0 z?m%yyJD$^Cel>(Q8(IS+ctG2!}N zgza_<$!MlTL(^+JxCjfTuS9PQGHEL?JfIHC&y=2Y1di+?r95~x+*3nlL_ebRlXgN( zbCJ}IXRay!fW#@Di3ebjy80@%?I9N*=~Lbh29HJnR$6+pJkKcj(Db*uV^KJ>_7aH zFR|C%-WUUI51{)y)uE}SqN`yd5!aLOY}>Sw9vawM$vV)qg}=%lcvCr;!O1g-7rFf- z1rUNzQtU>BX_1#oeA?pd*xyrG82}+)WEz++|}x>IG&8<`l}# zbWH%2Ar+RbMMVv+AFrl&MhMOb;ZdBh@G3e??@r#a$Tg}r>DMl>6ategWR1jdw`3sf z(PBPs7f;nKkA!bromlI;9u_63kdH;kiO13yWhYJo!7hl0cAped@GHw7$MP2*HbL@s zriGM3prktK5%55ab#V{b$-qD*iOaS1xXB^2aPDaGM2t?kN&=F2HH}Q?~mfg z*MQG5$fzjL0W*F^K9!%pOvZ1hkhmi>tkPlyCpO;eWT|Q4DQU$JT&5A=d124ato;#1 zeFS|P3|uqatKRtr?kHW$_Jtu9dAnBX*L~YqIne(X{ER{?4 zGu`B+=g%LBI-&yFn-elLUTNZnH-KqKc9M|)X+UNFzXnuRHpc(uc*?@Y@?Q=<{r?Z+ z>Cs-F`JcQ?IE8l(Ew4WsU;PEj@Bm^+1b=Y!UH53WZ3>8q-OlF^3i>e@ZNII_V|pBUPT*q{?gLwz*lts+g%``ufM#qxw=iLIal3 zP-Lk1 zN6+5mvM3Y5800DS-bfV65!aA?uKt|-B~h+(|8NDYbvZdt6b7?V9tLH+D1EVRB znCY`6o>C&vQD9$3A0KZqoYvOvva?ff(bzCbqb^XIL#xJ8!;`x80K50&Dth}p*eA?> z=eY(n{`l+5exgP&>FId60u~py>g_Xc{SdVgPOGk7X0P}i%iwxtNVhRW0^gLnb zh%oNgj-}3Tm7t)d1Ysq74FAtm5yhikcA#0-o7<|xJFFdnWodgoF}=$j>@kp_A?P>K z*Va2x_6j&RlXnnQ5|Cz#C|f9*ssW(fc$&oX#EVYz$^|33=^U`hx(ETH z#if0q6nBLzyKcSX*}Ecsyyov<_*Pt7w1rbK$SfD>=YZbUn&kvQHO6c!))3RBqhKpQ60coMiAZVlL2tAM)AJT(XO_7V7 zWuc3C(R+Ymzc4ynntWoCdOhnNh_`60zf^hWyg25qu%h&7`I>vMSeH(Jy2WUTvbS4U!@O8O zlh2KvHfaN7OPM=9Ztljg?ef~lN~b!m3aHVhT;&R|<3yeZ1EZI7GSWT)>f+;UXu=26 zqf%zUuyadJmE#rmkVmU%53V-0Aku-u&dQCqjh%^ zLvebj^MD?tW7u+V4JmTfz8Bx?$?o?&~~R_NC}O_kL}3vI;vRov6&6JZ67l9 zU0e4Dr7VL-2nz{bZ}psl9VLe@ne+kh|Dkter2kj#{hjg9flgM>>YEG^ zrDvcM)N?TUs{}rsvYC~U1C64Mm7X=7i1jy@VP zP4f0O21-Vb_?q~1^1`CuvW#56CH{>q5&Xwh=pR=JeC>a-Fn{qQ>JswO0vaNU^!N;n z%-;eP{|nI-l41A;|6+6g17!RL|B9*p17!LJ{~8zm17!XN|3cWo1^>}#{%&^pzj&o@8t5-J>2Ff# z6pb8goa_yZ9KO~1`^#jE49)ZeZCtcPi z7qUPKpI<3iYjo?PR%`PLMyw|x+pj9#oyO7VV~t}}B;8@E&UN+2XP@a24jUChszp~u zL__E4!Z0$IQYMU|&NhhNV#Z#b7L1Zp_2cbjfd-Yjirat<}iJml8Kl^{UVgSk?G zg?G`kGNt(SlEc!mmXTY6yELA8Bb^K!Nqv7Fg$_|)gKQ&igS*xYv z8sKXf-uCn0Sc+^eV{X~p3GPQNbHFoNOFdYyAI!EHJ>+Oly|95Tk_O-y&O=u18S0Ye zgng@f!>yXVIMbV0)=$^W^W^|<<*3%v(5BqY7Vv>z`K1E2{)TmB;m<V#q7~01RC_nT>N=q$nvZqm> zUNIQsnBPsQ<%s-DqH2)1xbofE3Lubg^|Pg)oir7cD)sMaDF9fss!`IT==>FE&``C; zsx={59jbI_cDckBOvRVR3M%o>(6unr5m=%~)dBVxC`sqUenbbpJ+g82vNh}$mvK)s z_)sThTtC3Y_ATU|67f0(jvj)T9SHj%CV?cRstb%HktIh!Ns?nM`4BvAs)EC*L5zt~p7pt`p=@ajbdk zKAw_pV$zZx=zM)$)|_O~APU?{mx`cmwK}`WA;@@82H7Xvv+r2J$bfIwCeNv}`AqSD z{!tE*Y~pg9b9;nI=j-rT^3Wc@N(y+=T)pgP>wwj>0POnlh=a=Uqr>kPB+qfb*6SERj!bZ zXyHuRQHR>NL^$OCP-z!trG&^m#Kp(6zxY1!6=Ht@?qaIPwLP+|SDpl7;{}_MhHHh5%(g)-GfGrl33+ z>#MoqMV6IPIOP0C?TqGsSPC61%7|7%_rbsf=XM4~28-_TBdfS{kxK$X3*#L>jcl>J ze$T$eHy4nqAD|PhYnnfOwXsnFEm+%2<*;A&@zG{&8$rzy@?>r>Ys_glm=B7`T7WM6+ZxK4KgoY9R))WUNxcMeXBta9ymJq+8R| z3~;NXZ4N`*OEM@Y3M=hnrsp#=cRCO#I1{E})?NF!}2 z#8#|T@mBYRk@sRR_el(9E==4%5g>Tj*G`=@lB>Vu3ceRd$14vZs}p{% zYDVeimazJB+61;%XBG~QighSR8Ege3oOrg$&BP46dy7cK&^LHt zYKO@MTy>EJe=Yc5CerX=P6c`aab?=xp>cQp-Wxq=&4n6BA^bxOM?6PqPBfu%dS9)1 zM6T*Adc5F=8MeEGLTZFy8QhWt=YXK@`iQ8;V0^HyRY!`>2+d%HSAZM}!E*&D0n^?B z&jt7kYY6B$ZKXcpVe;vI{$03k0+pdI+AoNH8$Bn25E{FFDFLYurLW13E1Nshlf z8SixXO5tEv^yjOUNtf4af@E4sQ=$yhJImLC7A?xTqM$=5~+4b=m}R`6ae1#4aP9kOXos zlX(&*#B!EemjxaHc$01X7tY455Xd)=wmC_d{a-qyQH`DLFJ}K+p>>NwbW& zQ~^$pI3JD(h6@5(0q!KvSx0j(17ODYcZFD!@;;>aCk^jR)|43*?ErammpIdgBQHZO z!{!oIOau&I&9c{e4H`E%DhY)-ph&j;$+7R6ndBw9M!W;kiNP&{!%Km^$keY(3MWP4 z1p(o*{5KniYs{iiMLV;0Y)h3^AJrJzbM_ZcAmuw2Btlpbr$cmt;sn}V%l=S46SGtg zD{p;M_oVaRV%(@2glhMF%_zP7Sr~j9?s5Bn4ig2qPiv63vgm~|#Kyix5w6JkoxS2K z3?bc~YnhE!0AM<9E+lU@OyQ#m(BF?i12NjB2gfkZ<4EBfJ@gM{Gq7CbF(XCDX}XwX zEmz;-?Fa#FKp0yndviJ_vf%BsA(q#Ar)Km44 zT9|nKeJe^#f+xYojCDfYmDW6%t=QXFLiUF9KgAS(Ip+V(&tzj`{r@_L!TygqRR-37 zn^k4}CSZhYEN$$SZ1oJjV-jH_XEOsMF?&6?f4Z^XF~z?*vfm|yl>hG2e*4M)KG~{? zZ|!7h`RyjNd~2(Sul+BV*C73H%Rf`*_cLewL*G2X^QG~glXwVTY#&@K`0BM`&^Aj{ zTxUI@)6Nc6Y^fph*X5>x1@{7#DfA8MhuddVO%Poz+}NHIri;#1Z7TU-L97qU#%?3# z3W)D$=}oBBb`agI-pGO~SOCdV2+E2qq;1){GciSH?rrUy8u4HXMxO#nAmC8XRHnz- z!}isU(ors>aj59F=>XtQA|b_m}reU`GtJGm(138karhOO@m-_ZxI;zb{*dqw*lAXvc{szeqIhE)~pecHhaF5&x9f4u@k{rt?Vf# zl8No=k!)6F{jy5iEur8ac{Zq+VxmP?AGh_IhO24v;6g=Rk)j6`-R4{#D@2%InWI;B zd6z~rwjv4$=WF6+yM{i}6P8G?b`YSSd5 zepSeI5{d;|JS|MU%Ed!{$iU+P&pQyopH`j;w z+Y+EU$b6~8irbHd)P30_Qd@Rhl~sd*7p+Hp zd%HNtjYwKNyEcp(2k_Puwge@*stU)0Hbbj^PgiM2(x6flx5Nv$=vcW)Yum(F^Sm*1 zk2J(XAc^zJS5*z~Gj1G!R3*vHZucA=<*_nk)nZMNdMtqngLotCf25T{Ow^yrz3YJJ zlVSoAfc58n@S4+1Y}hE^2RrMj$N#7n5f$Jl=#$8zjSW_GW0VUD-9mT$MZ-K|p_Ez+ zt|yUdVBoX%CHv84EVafI(oI|B(-ACe3ooPAZ1XcA=jqI6e@<2bFK?r( zppt;{XIWVV589Cx=g~bYkkSk+(PG|f3KHfT6@_x3{!N9WODwwliMrBfV@dn|k?mkR zn5j=NfS>2UCM`7JQvjs=;EF36w0O^G00juX#F>8PPpN}Zqc2*mpI*Dap5;Uc6(&9` z=B9@}8y)1Yrr8OdXy$ETAV$urqM#Tr&kDvVVujlh-+a$2m3^-nN?b@MS|KrUxTqY& zmHF{l0wgPl?bMre$%C!d&{e=Hc(3zI*LXda5Bkd5?M~}xTp@PO*(cy(#F3PU-;xMY z8ah{5oddvRKi0L@NLBD{E3p!n9S%l$511H8q_BLv zcsw*dl=4MZES6|xkpHx!8S@Ds2$xY0EGx9<$7k^nE`C@)Vixs&CDE78ZJA|KgB5X& z4-Nqf6zVN?(rK`?%K*6{v@0B7ta=-XRRk*jP@MiGXrS2jTO^1p{v{3!TsQS|Pk{`s zD_eYv9R5+pMpxqa&`?)ewBi0M|MoReINRn)w;?I~;Rqg{7ROp^d9}Tn2TQ)rzGg`A z>X-zN){5E5a{0yi5wI29X z*0xq}NHp`aYmkDWFrq3v@-wS++F-AU_Z$c7QK+28BSO2)ODBnOwNI(-RF9`LMr1s% z;E@hPZ$Slz?SVeyIMD_B&5d;(vg;dMajDrt12J(ke%qU_30G0l?}A_)0ZLAa>P3+y z=M%z=OXiYFR^1@vFcXSmUBkxZbr8`&K_Di?fjl_k*-ra8x2i-F0Jv51G>hKw$&0ke zh(1Z=`Hse~i^Ohes54N&$+;%=oW-;9uC5zf3EC%=vIBX+lehSh7XM3r0IMj0BghV) z+346SIXnZ`U5pZ9H`<1{0|}r7p;##m2H=%7il54!Jp9|;tfck0Cndj>jmE(O0Ybn7qeF87EN=Ji zU)r_GIyixCHrTY&TLCMV?!(yJc?(8KH+Pf)S0N=)Y}8OQb5GL~Sg$^1*O-z~Jb4u~$xnra#<&G`_UKZ><- zs$|Nu8T^pNFQ3$*HmKQ>ky`Q_(#_)PM$)yiGV7K%S#$}cs1lggS6u*!A|@I770Gi1 z8BUv2dmYE-aEw zs%oJ11e4!^?0!jfUa6E2LQt%LL!>}n(XWN?$SowXHEV~(1ykO2Jf|C1*e~gYhTi-B z8R>-Yrs+Q#;JATnP z0(ey7L2|Cs;OXB_++P^O;XDpl>IdHe$=3}B@mPcLf?;g?Oj=JU9EMuG0sjr?TPDMo z67X=p&>pcu#V-=l^j5$PXHIbbsTLQj?v8)-xQ8GdtpBzU6K=I3m*`GSX0FPTl1PZ) z1cu?J?o;x^g+QO>VN*yW4{#ZHM@d-Jfq)HiM@VE74W$6Xm9$s1gPDUrfWD-)%SBpS zm_rjTr~n!^DP|OtbrALKd{j{rtua=1t4d1pJ4>CLRcSecZe9SdL4H5m@$RdCo6X=C zSyQiyG1UyK;19nC0C3$ktM9GIGLY=@0*Cb-JC6z9!Mql*G?ZD`?#JI}6O=0D;OTlCI9x1iPj*rHwbu@VU8fwVcur?Ua7 zb!^nRV&>UJLq7yWX-MO|+Tc9T&j4YayBz);#`*H6alz`;4r>|Hl~4c3nivdOD<3a7 zBR$xra-x_Pybsq^?lk}1OhMM4OqE7P8Jb2!3O z_(izJr_c1OXsdJRdn5gb!HNSK-3@89h5f zqd!=QNapdTQ-L$B!2FnGJzWeq*2(zha;*@9wpzsnF191;tnt)AEDSh+FEj2WgwU)d zYQa5hOc(tRmAFdF>R(dv%?}l;*~`DI6UK0?~%ED(m6`QuC2?+ z*3erEv#Rv5Y(+l&DZ5UIo88ZcZypQ1KhEqU#=k&Za6ez*=UHdeX*HQLm!jbaJ8d?+ zN+_i%tky@0D=#&cbmCr~W*)uIn;o3Sf$sP6Z$NuqFB{7`JhWzp<1V;y#OAZ;@!Sg& zzU0Qksg#qksYZg1tX;uxBr`xg7l`H_^y*q%VL8hgi!od?6m@{Q?{LKJgwn`K8xdeK z9t_gE#fXqqEOQ4z+%805?nvVgH3*R z)i^2)#E`?H{km6~kr|;u+f9KrMN!OuA})1zMfH@(-xIeC=tak5e$fJ+8G(~h;PLaY zD0FT(^K4XI1aNQsutsm#&vsms*xMV9pR$D0OZ}eIPQ(N`jW?ddh-BSL^%dF9CWu z5vGd@i}`x+^+4n#JAStI_AUu|ltHHhxbc2fA)7YUOe=w5ndBviI3+ zev*{v#+AGsh>IujJrKfz- zb8~$1v$!Q0#$y#o@PAz#&ZqM5F(>@_;m$Eh|N3C+NZEK34>1L>7eu0GNihesI39Vx zF08>al_w5lJM?w-fj3KyNTL)JJXNYXE^>R^x~$!cD-L_{(;Sbglz>u+bOw^Q`BAF( zJXJafbx9w;yKZDph3c|b5^qdM#E<})y0<~4M?bQAw@c^JCRfh|`rXnH`{9MKo@H&s zfXeww#hh+2&?J>UqNSc*Jg&kYUmu$|1qYp*GNL3lLt)}a@1=5*Z)xaIl^G#fbMeCT zufvjf2j(A739=TzNtewB3j~jM{FoU##ci^U zBO0XMb^D+C_hqfNxbdFV=yzw{HHv)kW>0iIZCvFO>KjXa&5<3IBGq6}!cohO8}>b# z>IlMWt)nb2dmP?gTzS(+FtdnxWY=rqOz#_9kX`Zn$tm+pVYJ<{>Ij>`Rl6vx4q?7Q(4CHCGe$F1$njD^x8$cb}r& zm>*_Ja!9}9vjmxut%Bo`?ya_&liBF}3BU~mpgE6j>5)L5Mbnixi%el0hrBp3eF^*L zE5dRFE809-7GW*f4Qe}u_n`&`<)N2@BcvK@6sgZLAe6UDj6p2v3?YTZKMo^ z24F8%LIzj`GFHQ*1(W#X@s1yYJ}j~K(VDV;geE(Dhf4S^DAS+oJ($bVT9{pKd^RrN z&0d0IqtG1en#IEsEQM$~a7$bkcDeUP<$J>9sJ-WHOm;lUY#41R0x(k~(<1{Lj;pgr z7OQhMJ$HjTGTxusnrK$?gKiksl?rUgXq<4j!X0VBp)Rxta;#`sq0%DxYbo#1Szp}zHGQw^E6#GMwA0^k>^+I7o z1$G8FU;4)J8xrWPF4xu1B_k6`?5zkh`|z7`3avO_dGJF+Pp)xFIiTijIsMLA%V?#Q z_0i7%AgICY&4l5MCB8M05ND@oP%?=pq<42AE3bX=c@2|mPap?sqW`X02~mFH1&@6{ zAS0e$%t8oMFrI!BB^eMJXDl>Rkecs_@hPNzB~fk0pQ<7EO0~@DJjRC zh?-~`vs9$fHn?HL(yzO{F8Q{%R{(cdplq*{H9{ovN}m$DBeM3>f9dJg-nLU>ZOdnT zr3fbVRA7Bl5_=1K74i%a498eip{ueDVoniPs3U`EZBgoK=NR7O&9WDpzF}I;Z`~_%ux6W zPNr5cexCB>5G*51g!<4>d@{n*FwD1WRkqG^5Dw?BerGELjR!Mgu>L~ISM#OQ+BR?S zDsiUbMDo)HJDyzF$nG-ejo;Q5KeV z%RqSofO_#gQmV97zVA6w_Ah-I&_*?|hk9WJ05$M^e2_?|%`8t9gIGP4i4tHRI18Zl ztjVJysKxR= zx%#>m&RDCi<-5}up0g-IV8h%k0gESDL@0K4xz)lel4$^HBzu+SR(Wmr}qIk^+gHilQs9j8j~>a2CN# z1nu4qGfZR6^q%^)6w||H+1h2$gBFSbhLRlDauLH<$WbqIgCw)UK!K*QNh+THiFxWRO$Zsm@P=+km;Z54<;OjmS>M+j8!Rqsfj*&pK8_3a2abMf2xwCbd_Vk%h z55E@`?*^%(kW^xJ8RWv4sp_>m?_){mvIs81FcmUC0jiXv4!8~tS+o4}e{>lj*^^OE zP{hiTDZ6)V8NUh)?$cHsAph)%%ypHEw%#Ia5XbWW&Fg|hz-aUM`3F(fNIT$lvb zhI+r^*CswgH?OZTHrnV}*x(c}5o4rEahXN2vi%A7OG)(-on}<9{GqAh>*)jUyLi`! z$;%RAxA31Z{XeJ1#j_sw-d&CRhf%8Ho^&!#U!KNWrTJT(_w9D>?|F9TgDR-k5^ST1 zQOkz@5cIWNZW6}W5j1pc;s5NHH9dBq1^hmU@Dyd~aey0)YjipRHWm%u#DjdKvDif| z(PvmXLXl!!9KO?#!l!*90O`!}E$PnRPs#QQ#ldaIT(lBP3nx-$yqm0B%I}THY2~k z6#>>pqtT6YW?z8pX$tM5$hOE=`x&#-0yBT>#p!m0TudE!+2if#m3t)l4tyVfrbo;5 zBe}+9y$J$l(!{TsfQ2YtY(&einU@u}v|>?;TwhkG$dGhA%!rN}^3G;5&CiY<*j!=U zr9%`*Jge5cE^@c%-(#-j{SNpLQO*E^fo#dTZ77423h)ITb#3( zUyJ&SFLIt4-j3i`7m&y>>V`g$LPfEwfSky)Y4d9TbZ$YB!Jp@jWb+@OBqh!ryZC8) zi}M>q21=0OE2ZVNoz&#IqEK!DAP!nqA!E%(7=_~~w75AfN$jp@f-0XsxY|wt#6tDD z>@kBQFXEqP`E|;}_$2yXCpJtMzyJ8)wFV2S`CLd6NC0u%LoWm|s-R$PfCx^CaHQ6q zc3MK}Bnp+=X|X&99QJ)&7mL7xE*9#lshK(Q{DQ~rldCMU?#TkP1r2j*HW2_SXEM); zoy>L#SGQ`hootNj%)Nm;Xh*8M?7YX;2M8v~>Rk?n(A@tz3q^p!UXD^<-7yDgCo*z( z9q|58=(2L-o#XN;uWzB>UU++`44$`+K1fGGxC?HR~_3=ManLX3YgR3|~GGv=u6S5?z}kGku}7Vko&hIdS) z&>TIX(-P;m*h~&Ko|d+Xxe3_3uSr;mH*%{`TMYuJet$xO&#QirTrPha>WA9e8@pza zq{R4a9h?;Z8UZ+cqK9&8BGQ?m6(T&{lVnP;@Tq+p;i(ktr$Dc_HVo`GLZqu_hUri?N+ge7s!FA39V3plBPVuYsj{xFOBV6eO-E ztEn{}Drf(`=Nr%iOrD2AE_pp;d29ZKzj`r82ui}#7*jw#67|q0uNi`KTraZh0vy4N zKFpGI;%$h-l?g&Kjk)SJb8}pR@F!6;Y^aN2R9U7L|}oIo$SpmIq5!>p1j)Lu&^)*(x>NkufZXb?{kZ5$i%9 z;Qa;iK1P)z&S>LTe42XE8no4IT=aP=;2$0%0VwE~teAQ{;e6Q(WoXv#Q&`>*^#|I~ znsP)$HzqQ;M2hZCRy&G_DxSx#oPP22i?s!#hyNZDg|wJVqCi5)wfq{W`AiIs3=>6y z$p|!T?gd4S;q^wB{TM_N1=2Lv(iA>VDa{pSW#KKX=^SCtNIDD7fKyrpR*g9-*v@lD zc*|=OZfhZy7_KL@Q1Tvz^!!Sp&pf$80tJ$ZCEq0mqEN4wf$tV0i;EgqO9~hsrJZ8b z@Y3}1Azr^B$m*z%6j|N4@xY6pvUcX$70qVH`Vqk17Mszzx$VRoRF1yG^(MAgQGYNg z5u(+Ipn@G(nM_+9@k)`MV0VhD%zwu&qI0=Et$|s2$7@>^u?5;O5gKG64^6Py# zy3OWy!7x4(rP}M3B!||J)Gw1y6i-62U33TD6cgZz&T6*Lw9cP~iL2goGiUq9trsFP_yrPy8vUiv!)Ey6C;EMe!YxH8yfNYa zEm33qx1H&6Oe*%2??wQWZRSJDOSgfHSD> zH<;=MK%fCi`(tAvQPC6t2{`I@G$AmGjKZ#XROoH_DJW-4`Tw*~5434#9V@o5ecyfd z!xA*8PCc~--Tatpetye|MP@RnoQ@Fk&Ay>h&|oV!AW#=Zq3R+uv$6OxeA=_s+As%jBd){mG`N2JGzgs$OM4B9LJ{@htjtp!srJ(cd6ZNW$3 zv1P6zu`wsAcYhnZy)-2N)!9VC#y;_W&YbHamaEmo?rBYD8?|`xXT4N0fn8n-mJNDh z*@n^Zr725LaK^hJ3&Zg?W`E zK3jE%!JIl&VOFG%&FhRaIp`bsw$P2r#Z~ezyGpoF9`jHl-r%!zW~>K(&_5vv@-XYx zkAr>P)^4|P_ZEoOs6sO0v?3b54+eigSG>8T6#NeeQp;i3B9p%2N6l{HFcrcz89jQ_ zrO852cRqG=l9^W%=1``YC{k60bZrKxG7?!eB;ejz{S^sEcU#8UQCG@muA6=iG2X-wo7nc9Yt}rcj4;6;f$1l~}V~&gVZM({zV&mFooY%#Y`({j9ZW9SI+m2(W zo3XUY*QE)E=vD~(abT*6Vsb*L^IZc^OFoAOJFM6awQQJa8a@B)~q#=4X$R6Ej+&?n3VBXalM=7Um6ZqFr4gA;6Xlt|4N zoX}7+-taDUbAy!%P9>T!U&hWi5>fO*KKNJxj`U%SH+%Z@MG5cm(rV6i<~O<~r;-_e z*#Vr@+wtB6;p{-5N>Gd8VFjVRm{5;MkqL9`GjfQwPvGmM`RWPmE9yLgdv6H9Z8fh} zF);p`gE$CBy>PH7T-mfPx||72_(QZZ6Y~votM254BtEsDUAW8WFNE+=)90;1D7lC5 z!aQ;H1O;C}$-gx;;{Z$cWP3qmH%aP90?CgQ=r!#Xq7>?|4O=$5_*)EEx?oh=z6IY) z8<(9}m^j-5tX4Q3SS#7=H}d6n*7gLGuzxGtltkrS=VkdiIZO%hK&~JC(WlmAO-9pC zrFna@@QtPBScq(Ta$xw;tkftvWNGcVjV-n~f}F6eRp3v9D4D!NS0-a3IL!8VSsw8M>#Hw4?xM5L$ zpnvOK_++PC0X^{R^wF@46HbyNVXJGWPVOkWVQ#^-z!1(YMrQmUQYDg;Zq>O|s!3_G zNU*&)6Iz=|@$kQb?lqo@cU`kQK#tsr{rK+A^cZO#c+X5<{_LNeG_rrurkwd#E%wO6cOj!qCz-L}mQ zq5j7XC!ab)m54mCjd3>!W(2D)9ZC*x^^6y>ugLnBD;(LwEji@^A}}@UL5ih)ep~@_ z?taw)wt7uodV(#QJVAt4#?&*O1V($E`E$Mo=zqym^ao{b!Dav8Sd!n-S%hq#JhH8EUY5U%XVC@7I^wLlOTa@ zXk4nXYOrzvT9{&4t?;Mx(ej~TmIIQ#->ii94@hf5wFsxMeozvh`)F4 zh4Ja?3uIQQ>+E!Hf4k27!5~r_-E^>>yN4U=;nW~QI*D6J!|HmZt)Col?Q2lM$+`5K zZ`8==vWK%Yp|!v@lR%)K-rMhU%3GS@`@2K^t=WsMLC8Bu9@ zVZ3IG0Vv-vNcT}PDWoJZO$=2%L%5p28WP?Y52tJ5+PCCbiX&kPHGop=lWJOSqxyy6 z=CF-I()c7CD}Z!WVjS%h!(NZVu#r_LQpV+LQYWzFMa44+ZvEUG@5iA$i-Ts;^9bcL zFHnq%N%vB1=#BkIce~mW%=(QaHdZb4IhNBXQriWIe!Le3nQUy4-eVOF$1s(NQ*b3& z!Wy(6_FNE*&oBOolD)NqyG2B8ZsHU<;uEYSIwuqzyoaettqpoG(HC0mf{igFa2IAg znywPEsDV+VfcB(ZXdu-wI%{);O1HvECC^&YLHvF)@E|faX+0o-wBPUTwQl&9PNJq~ ze1F!UTjnvTPA2#s0KFpMaUY?3N{tNDAj9&Ts>iGB9!JakDx&^l;$gPj?xnpXn=Ju5 zJP6X;t?k~5%#<@6X0uZ3F7GWH4@c zHBX2IKk5RQASWtUkb?jJ_97tKqL1{BHtnQ{5(jRY*n5e4qK$0OON-SoRGo;Tnp$I@ zBWi38@Irr$6n1K^VJcG7Aj&S@*`!`cjuRqFPou`-t=8m-IfSjrAc|*n!G(4)EMD;CY7(;PwQdmKf9c+G7Io zuhv6&hd0q$hCeexdpu2aM6zgzUD3tLdy*GDx8| zB0PsJaq^wpLC&QH$d2>w`TpD;KfxnfnFa8xuG#F9 zi0vvt9@P!{(y3+urRNHxJiyyV*e%7f|5*%-X%d{-luBAl3AG9vyHvcZdEAZ3-)EFh zL5NJ<3W6l6?I6j#jD^{#LlA7@a9IJn&xQ+*B6`#we_gp2;wUH|iB>q1@E6Y5ef!cP z5Q3GzB9}0qQ%Q}pXw?R1{1lJFL$_Pujl7axh}$W-l; zyC!qlvwHV_UF3M5$2Jwt+srCsc^a3_;{o`sEd!sM0Og7GO}IJgL3s^cSgW9Xcpz@g zHN<(X4KKMQ0b7LSLKX-9KHFA0!tSz)u7UIieb~0Ccl!)};Wp<9TrBc~ugtUhc<8%^ zE4|MY$TCTgN?AuZib*tb2m`ac6r#OGeh1Pb0NR*~aVBZ-{TntO32UpJpZ=Vd>%-}- zymIA-wCuIqG+(F^uLK81H7zC6iggW!YdJXUPq?L3C8LzNFG@Gs39fdw}0wZ(QXIflIUf zeU^P;7h9x`4tXiQzR04JCYM3DFp{ix*Uggmh8}T=Wvz8AI0(JJ{)t}pNAk-mWtMSb zE_Im%wab==ZGh?u-d>87q8cuoLXeVXz;v^w#b!kiSTvo?e1`SO5{m<@Do4C++&B=eL- z*zo$_HcASyi2O7E>avv|a1HzEs)yxN7jd?~N$$4UjsZ&l&WiL8MC-WA6A4~po{*Y~ z8^^a^u}2vXRO_Sp5?U2?^ZDma17k0-V!34B%ueH6L0+jTN)B|oRFHU`j8hn0ID7f(B7iEV@R(9 zOAaT4bK!wV(r6c8DP6DVgtzuY;12oyVt*Zx@0n`w*40|_h%@0Mw&pYa2AVj2&Mo)iyop+|%~ z7-4SNeu*w|%Q5J{XW zVmt7GOwSHHUrYJ}=m(ELCWdr8({XDnaEm}2qL91RL2dE%UleJYjJP| zq5d2-nNhVvZMuS!MIBuIFFz z8Ra=GO(~z~m<$DlJp2Vwjc|2;tDd{2I!|jojk8g-=e2y*z>=^kDx=Y*wnu$IPv{{3F2g`-NctQKv)Q;yO-7Ni56hyVf2VP6{R2s^juR4p+%<6bFbK8eqaUR2+P}o!)({ z*15_Hbg;U0UX>U6MeO-?0@i&lUTZaAJf{bD!bDZ`b)sH06pmCpDnjaV2Kp-UbGSJ; zHSz9_R+feJ7FO=F0i<10b&dj2zv?w2|4$zs#f6*j2QDHyHI~fzsj<+J!HF z{wE(r)@B4yFUSiSO_&UBeC!NOVYCs3=!3*4*Bz>Wcz<^$V_jNO9Fc!=MrV!c7Yv?P zCH^~F|q#{sftXO)>5cG;m5iZs0%u#W5%2uPhe+?J zllsrFjdbpaEp^1|V{I(k@#c+1I~89rX@*5?!NkO04MXy4>@K;F*Z4;MbzT;Y$`KD?G0~j zg72;A%=LTThLjI}h9YxpDsIhcuDghXx#&lnDUhdPN&MSEwMbeof@t18-O5oy zNs?)@IT)y`@2w5*WNiwA%uPYbzw2`_9((N90MW9LJjm{)48ymCmt5132y!N0RVrs` zUZh%o5fp155JpM#QacG0Mc0eQ00$3Z@1xy0K*8EaI()Y)YQFN5CQAw0WnJc>I2TV} znF^!{sH5{Au<~Nlw$pI-Cvk*3Ecr8t!Bc{y@6EjqeH|N23mK|vtg^|p9;H=aMnq#~ zwmw1aLXKO&q%J(`-%yF?G?W2+C9a&aEnjz|p>hzz3x(Bh_D+F9+X02NbES#YsSXke zbvYyuiYLwZEjxpYf|iY1r-M(2ui!PyM`4l#B+zSw0(1x(Y{MywEsS}6Cmf|C1(Bs~Pge#*-sYTDMWQ8?wz4SzjRQOkc zuFV;w_Ec({epf?XP*}SDLBK6kSZxD|;r}fg9I}to&8~PVpIxrh(!3}PBLR@p-XHoc zU3?}}uP$C)QAn3F0{W=-i=1PG zV-tp@M|-CoY(U)Re7%;(1NpO4^ABr{A~;w9r*axB2@ zLkLpJ%?iXPe@f4JWRdp86-MN#w=W4la5)Z-DP0&HW}Zy_j;q4fL)Pd=H`0Y4cY@`E zY*u(kLQcvD5?Q+^YLHx7eJe5g7)6Yqzg6SzxSY>;pQ5~qK9Z= zz-IGjkROr$Z0(;FU89GB_w(LC;v0fDZ2UfzPq9xjPlkvD78;Gi?tU|QV3wNucC#}HJ}ho ztbWo*${r%$=m(D$m7V8EZsTY9A%LsO91Pq0*wO;*k(mQ%n$gwM%`gQJ(##ZuB3bQo zB_4&b@Lm5c>h&2fRLX-+ak;U*3!&Ogcq@?insY`Xu$UHzl={rssLgSJzr2?*YsQ zTidSCrs_;jEZ?0VDQ6e2?8K_$FSNXR5zuF4Pdau%`K=Me#6c%yN`Fi)k>K(W0m6yj z^@W2H8RZZx1rxEe2Lay(a#!$&s{N}PqDg>AI4HUpnsn~AwQHHQd5+44Jn6z88uE$M z@J7$?s7t%2PQ_5TVgf`C1G1I=QX5yIM8A6o4oZWRaK~>x4GNq!bAb|alg?s*&_pBY zZVPqxH_POffs8(xY~)@ITsADDSzuZE8eb{peuO0YtVKyJ)e%a~%QJot8Ums`+nnUV zc(R+15m2}b!^H^)e-$M!Bni4)#O@E4FgAolJrWNPxuFiK`X)B+Znoo`D z{f?=N4oA4@6LB$*v3GC3Uo%*lp+%C&D3cQH9JSK6Qq3H+pzU)sen<02 ztkA;MW40KuTWT@o<)DYl$AbjI`sWa$9S#+i zgENt>RI=M(EvOHM!f9PxMb9(82ie!3?<4sR3N|wm(2v6fTnOolo^;VFBKLYNGKq!F za7+dxsfZ{ZmGFh?U=4>UPeh=GyzPxlDvJY*)9+O&9G6a{&z^xWwd z;G#cb$llJ>Kr$VRS>;wxKVutf*Pk@ux0orqeT%iVU7OCOTkSCDM2mWKeg1}rf7rkz zLii71pq%E(-2MC<`rjPr{1bs(KqsWArZc;`ET#(^vGRejszCNNbs)`Y7dor^|C<(~*J}g$fhlUacTd+6cP_ zSg$<rIs(TU7@gLwS*y3c<2vouDGWN7?VqU5bMA*ntp zsnW%Jyw`lwRJ1EwFD53y6al>VxhiQJww{&mWyCO}gK9!76z6C78sej4s$T##li;wx zH-BwC>}RJ8O4snPz_==a^&(C*bJhD}OBh$pd4kK1w)wJO0kE@rz1vs}anlc{t|K~w zzP4Y6(z1{KD$7|2o{Sx0j@fSaD%9I2_*=@$6N z6BaLi`+#5BD?ZEcpqd`$$TJA;fb8rK)rao>{4pPnNi929NNLs&lUr`#8tj-{6el@+fFhBbnxg1wr*(DUz-4 z!a@_cr)DfyDmPqE7%%TmWgzrbhMr6sZzr|Yj>!P36P?<9 zI74IBx0a;%>1Q|2z{VuC*s&61cWO+3OtARB?Y#Q}f)M zwd1%$zA@Erv+RR2MHG|6w|P$FfG{SN!8Q=9%^x)$GR*<4{XL)9LWBOm>i8&CZ#KYC zXGGtZBgg1!G;dHN25Yn|NctL7m|=Q_o7OAJjuYj1s2ZAI?kM<1-}|LJAdR5C%`-@| zq9y2IM1yuw!bf=OSDO1ZmJ+}T&|Pm=g~v9p+_k*zNuB`NSUp0pAPycqs`i_VAF0|e zIs^MJTE9Y!aVt@Xx(I6h{k5s!$ds)Ses42GITZ;j8oWq61Eo4tHUKShl4t|X?sxeh zxDL&*9lXGfbi`|F8Z~Z84d2#Fks8C}U*?wYyBZlfy3#!K9ovjA7$8HeuPb;Lr z?$g`(**F(dckyd5jw#qz3^0t^O-0|b!5#XMpF#Own_@j*Jhu3lPYU}E+s%W*eH1?J zHvgp7x2^HmN&nEvDb6pAroO!45C4D|s54_-Y}AzhW1!v=M_e29nB~ChQK`5;jtUwpgAj4NTHO7j~e>vnA77ZkQ z)9C?9w}j=^*yv5AJ(ckOV_hf_pUL%Qb8H8#?M@m!^9#?L778vfA0v4FL)SK=5Tf zY`RC!Vi=Zr=i{&<-V`$YIeD=m-@Ap0PPH8P969SVXlXsP(sc0Rkcd&OxRuH9C~(l3 z;EBSNf~lHRKYa@j5y(%=s7cZnq@^U914}9g>Yu*z4$b1;O2Kz)5^rrt~Uf6I} z)W&I~u2@9gKcHs=*P^v6{;8{+iwq|<=qye&UZ z3kh-Qw2EeckG|0lE|p=|_-gprLlFp$YnohN-cWXu3C7GqvO&SPF7iZ8zA2h#5;bY2 z4Wc#1d}UOq&@%1y9yrqExZ0$CxIu7-53v9d&)VO~aBa&MmF{2Ly>}I*I>hJ6XA7JN z9NW6}$QG=NIek3@4a4S9Z6U>wOFn(ocwuSVc}~{i0ihRONOCk$X&8nsjYls!*(^8) zHREW+k(%Ozb$ z!A5jgRaFG?@GHk~F{;xyn_JTIrtHK-r5{TmVQ!&@KOECmo;!FZCA~+&Vuq_I(?p10 z>8>CKU2dv$9{9fgsyqcpZz{K~mD=R_TK-;ovU>ZE_LL4OZ2U zB70yC z8a%sKA@FgG8~3LC_cw_>U)BaKEU^QWmUAT0in>(YcBavgXF&j*_!A66Urk~aV;qYg zz?PFXung?EfJWm>U3<#?FqK;b9;CpbL)g$(`tZ}ZVu&-m<)D#S7J?f#g5$>p&tZ9~ zQOcq8Qc?(=oqk^F1~!*;`HBjHqhe9f)D;RL5HO&*ZPG{oyf-LOE9osLQ|=I;=-jCv zh-%1^U#FSpZke+gNM&juvN>rPNrv+QOxslX1J*DF=Y7m9%chQR%0ruT^kt?H4uM>U zXmiImu_+#i4a$~*{CuCuwsW#!fjW4@UF&nl2&4v#lfE1ORY5TkI_HFhKdo@y z8%JmEqjGd^y}>6lE*)Y8NuS)i2t`lM?6nWa16n=9hLEZV#GNcmoocWS%h@ypQ)V@% z>Q{Y+EU@u)(cRwS=v-8mn>f1bf?^KW6TInSg_?0uZvN@;yh~$J%J$o&$Ug;2F$WLR zrvPX=C84x2wb~)Jw!3x?jwCtAJHs@W1G1Boj4uPhJVq2zFO^!#$gdLbpnOD_IUS<; z%%CJ4wlS^Cx}nk5#%&qUT1a$YgS7^fGcDI&0u-fft7aoans~(B!)y`vLtQkpl)0?u zvbL~2oZDXZs!ed0$Bri7xAm1W@eF%AcSMQyh`4r?6(LCd{vU0tu0&2tFJpHA4QF8P zt4cjv?j8ov$-3~NCnMw!YF)>&UNxzs&U&t^ndsx*Y?Q3fGlU~POxis_B}em5bC4%x z=R!~yM9D4^g_0eZiRj!k;-1<+!IBJ_-pwJc3=u=qV^2NU)F@}pjtWl_%7;Hbd|-kz z<$}WB;^K48eiqq0&SahRdqlCC3Khr)p=7?+OcaKe@VOj7cQ^NwZ zyjq%J;$}zbS8dT={lvu|)*R{3SrS8K1iRCn_@`*yiWjoB-qVJ1Kqg(z;kX(>*OgsP!j>fYj6pA*k!E)*X~7|?ABWSs zl+%j^l--J$%Ke0TXb-dGl#cl27n50SEodoo;QO~+NN={{oQm=e=1M5aneRyl0Mw;N zbwK*SA$`U1&6LKdo3LFTMrt8T9&O0;{a1RAUGJpj^USET)!O!il!QbODAng2WC(8E zlSd>rFO@1*e9@l;*;fzbb;0HS;)XkNUIf#g!xgN!cNPak5d0V&Uu8t-?lSk+3)qBa zqm(^ejBL>{6s~T$dHMZ>j`;d7Q)$E<*}s1^*%X7cynwPcBIuoI9M`XPTd8}-Xu^3x zK`HAco#ilnq*+`abfMau+`k_{eu{%DFXF77#j?HDuo!J|laK^8uiHg%`2UHXM1E_m z3Lw%V-A!Zjn!)IIzZ^Q~75S@J3RyLJgIzU>mvpVs$PsBpAD|(|It^8asl`vUe6x3- z*&%?QY!iXzFict!e8^78p4Ue5b*54!73t!k8%GIE({Z}j z=!4Bjf2Ep0R5ri4tJ{E^ee8j8TBs38Zml^h-Xl!!E36OH3w=+9GBX5h)uwbPXZnOo z+MF+Gk$>>ml~o<&6BP!rb14-bEYvSB{=~c=LrIgcj@gnQW^6IO1LRkz0|R|XE{Sk);1&5kQD3Ac9H86WZA5JW)t_8T^!(6KRTFqIo-?_ly8cm%8A%O0^N@C>rI z;5|O?A6`TPn0H(h#Rsn5(#;W*V`(OJ2O{X=2AV^Ph zuQBm+?}1xtO^XD|+&^JOCuJp$6LNRuUWxuGjasC;N*lHuV-~Q+aO)T|Qm%8jLG0N6=vJ+AcPC2PpRwZ<2>`>3-3*Nl?3Tnw!=8$@ zn-a(ZNYd(&d7-7B(7a?XczL$bDmCKWHdLyvs_IN$(f&XVIuhgj29cV>5RF$ZhJw?< z3#Abcm8Nhsj+q|g<=oMMYl!D+S5%7YJX2s&CK#N7%e$~oc4_xPtL;XA5r>P2ZWJRL zU^N+ez?mlM^ERcBo~MvuoE+XT7$;uhDnLO!NEoI9S>F}wf}ts;P-Da~8r{I4&8QPW zYzzLW$qRqHY`Q^)&J(3j=8UDim?2J+;u%+KIK4df80XAdTf?eI|fR6Q|GV<5GP z?sLcR++2TAuPYsmaPp_djr<9)KQp|DADcIB6V@^)uDjv*OB^v@5b%?#c`5Iyo6ocu z_D-|0?ERJ=Ev$Z+18@!UXyskFZu1J-`k=?>p(yB3n^xXqFNCFqi;mCYQN*7Sp;E@o zFdp}feB+IuQSAe@r9_*8R@tv2`aN1eJA;idCctNc1}isk&C<`;dPyQo%axhY^IEjy2^y8IkPJ#eU` zEEuZq4Dz{Y*?Wh}<1{A1wlM1nflWi?>G6O6PNos+H63H=CMQ(a8j>~h7=Mfoppat$ zK>8M^@aAYp8(@NlVglDY^wq(2Ac~FI-Mj9J2NiIW5=~` z6r@d^kw1*>L<79dgs1VCAQ#EQJXZL$r69e~M6-!Mz?G3^`?KV*LWU+PyT4tzeba6x zM=ngY=9lSdb2c?wh@VM%kfjEp%%30z%?db%Dd)2>-DZo{l1?%`WeM4yoQ@CeN(Zi4 ztN_p=Dn<=^Z!Lh?0!8dJUJq8fZo7zh+bMDuK;R6~H*!?knKv%ykC1ztSw}M#ph?1f zvpOyo(!2YB8S7e2`c~Io5)SIWV_{TM`wbe-5k!|}=MxZV2dLN=N#Ps!SBjAL#8&v( zT9x!5uCz>5<8R=l07eRg!I8FLNe>DZIiS{NqB!1b#s$huqYmHG=W zFZMc$a__+T)ml;V9YFzt5Vs>Ocz`cs|;n0(EOYLGEv%GKhLBD5SU zpCI2yjTlOL?BR{P>drywU9U=xeV@Xi%rXcquaaeE?MlKV* zKCeS`>;}GHjKh#2K7XXMZPCmC|KcJWHRx_^ycSbvMHJ)(hE7?+*GVW$q{adA!LytZ z%(dmmT(lVoHsn>S{i*l4<65VaAj; zu!WN`Kr(Khj2uWeMti+0xnmLObN;Sr^ut|qded4Av2a%2>J+WqohAj!dulL){=Bwf zH*r8-V8y~{J{UweF!C(#;fw0nnehuiRbufN(|A;0A1o;Qq5E?yj<&*g9K)T|78Fz^ zypRQ=zMp^4Bg!!;oLZ%=>;CWvyB(1d_nzl3x!^*So`GEOvH3sfO;MUwj3}Zw#MBGQ zs?~Tsly@zBy0t5QVC10*V35Pnl@f@B0O~F}F1NVRKOys#zNaT0oF{9;=d(okaNUA(xR@soH*n0JsNHTyZ%mtk=Dg@yQc(%T#qWIB`dCeFg2A2& zkM)U|^;&@18Qrrg%X8h01!hfWtzOn6RqvjH0G?$lVV|kBO%c83*?|@Jj$YjxB3$VN z{C53^!ID##K(hSd_|wb^wD)uM?M^iWUI>-n+=x!k&X zJ!-T&JQ6GZ_VC89fc|rFCMiu7u|{TsROwlQGPQE%k#`w{pob*?E<`eCTZ$Cl^Wiv^ z)7D)#F4^Kwp@1wWbtPL7XTw4Qu(5&m9;mk~0qkn~I zS+2U2=LN6!&*W@_#crSJTU{6wHzbA4-FeDS8$WO0s*wDZT@#rMv?!t^aj;FT#3JN; zLF5_5e+QEd@zZ4-ZYRNsws7^HIR6a_Kc;AMSqo$2RFvmb)1A9KMTC`%MKNUZ)@h*# zkcrcmWBeKWZoMcv=jUY@P_=YH79K-^@Qm26N3&X;?#2x7N?Fw}Qk}l?E~6V6X1IBqD@gnyT&k-C za>@^C^cy}*R*?!oyf(NYWF%~X`HTL-bmZB(M^*tLckTrVz5fdzk!-A2h9bKrYz(sa z1I7JS!5HVs&x!gOnGVUo?SBLT37HW;mIj361a{7eU5vc16=`kxrEoe$(xP_3NqhAp zxWDvbzi_iS@e0nAG!2Ig8yxI&=iz$u)70@N=xmT z65gsL{8#E>Qu%HjFoFA>*-3#$_}YEZY;^DO*mWMd{de(U5v#8%O5Oy&i*9EvKzE^D zVr0HsqyaKC9N(@JkqUfMi$(A>E%M%gWgqzemFbVjDqFIbuST^@i?I^C9nIpaJ_v*8y}o$d6A>FB5)VDkaiDOlx9Vt105TXrxm%7)_o%MmRA287&7^?t>T zL10~G45|1=TzD5eeC0{jXbD1m3-u9{btIJ>3>yyq&dZf~1Ew24#^!Ur@4!8s@!bv|g- zl8LcP7SoAq^sxQa=D52>jF2JgWqcp4S~rQ;g~1TBHjU$qg6f0+kW8o zUes!hPOAgJZYh}I`ge@BkXtmrI(dGOr?Oe*?X2;&0NzvLu%C-+|1Zo744109!&tHtr-~s1~s1erp(htw+->g$Pgc5d@^S`<4N`$FnL@x{(!$;^WxIn^{TH^56|l}C!84P0NB5G2(m zenyo#;cm+)T><8Xz8lNnQm?dxsv_bN1Cs51Jb34~8UmOWxSA&~Wy@fLp2ROoOo}}S z)^n9W4PVuN4JKpn zh=Xj$pd!S5#?s?5-|9DnhcpIe!mpTHZ#vz*E&aB;6e7hYE;I7sF6YNy@>@!ipKUMc zK2T@|KcuV~T~D5FoNaTcWRQ|2$v?lk9*j1FHg)5h$x3QnRIaoF!9cU(f_q6LJcs(< zwM{@#$d1s)^I|a~2GRPE&4|=45qU0P6XEPuGaLua?wda!Icy^ew?T-@M~b!sTDEXr zP8AO`lZ~4uBQ_A2;ng$}3d5FQS3d}@R74{|3|oAwzGaTva9q~l)5DUEAs(N#hs~yq zG^5IYu}m-po;}-I$UQQ7(|W=6tsbZBkCNH+VNu3{3DueAc)uicRmnO1UJMvF8`v%t zJzBz_EvQd1jIB^H*45jsGY(w>Dm(437^;Zk7gm3tp$S*!Z| zRWX6i21{t+5J&o~a`7mnOT&Jr#P>uYBMUq(LzW^h-_?7}e$?uKuN1~P@Sz_%al!pu z{T7|bA{>YHuur3Zq|;N0i@zhFOHfnqXXv^;{%TQ{r@FD?I?#aDqgkxC2gn#v<-rGG*6(IBn?O)33}VfUPDkZH%zql+*| zix{9_7I;(k|3k?7cRwO}u5hvpm)9_vMXg39c?*EF4p$b-^jxkUh%9#0!xHy1Y!``N zHGvwHjKC`|2g=Ucz72T*Dci9A(Z3u)RiTl~l*1%D?6*|x`bLtEe0M06jc#KCf(Ec( z@{+^YTy4~>uyix-pOTWoL+=KN?LZcS)^(Jw3}<)t*%v_Z{zW+h4Zt}U&dHBHeO&~H zC_+3DGxoy+Ek@A;e!G%xbp6t5mfy?vK-rN8M{)q<*W4cu2#r)NfB!N4fd|rq z=8N0h?6`|qY52*}1m&B$zaU5x3@cWAcqnkjlCF^wn#>Ufba=FfN8N(_ZwiBZ&&~35 z*JtRGgjt(@{2CWb*5Cin_+X1T>uXn#f{6es7^(XV&PwZ}q@+gr&v^i)q*B`yTZ~C* zJuMpSH3-OhaQ5mIVhAWx=>~Z08MO=3!O_K3E0HQh(rAdJm6EUe<;r##c3shNO)UHx zfo+T2Ea=CjtIq11^zgq=&3&rqX0bEh)z|h{ju{$m4NMarT(U8Jlr|2MScY6ftjqvP z%v_=u0Qb+fiJ}+TG zG!B2&tg@_H<%GlQjcRz5LlE)_2&2`*5chD)^IQYsM+wUMRiiSEqk*bYon6oP+YH|k z)!~J~YUb8T>+>uOGAebXpnfcmN6FY{UvJ26967G6>#V-8~V3VhQzE| zkbaEz#^`m0ax`TY!tE$<0SFUKHM-1Ldf$Xv;D6u`dJC*PaCbR9D$M%OnT;1PW|u&f z#rkP9p_V>c8oE?{upCVh#b3RkI-nKkA`mrz*ckS^e2&0aL-Fq&u6RgErQ<3u?u-wt z-WGw)kN}}ZNhg7fUmXxZ} ze>m1Bs3Gs!D=~p;1Ho~^hnN0!{c4PzqBew#j7B3=6^bw0J*Wcd`M74)RRMhcoSt<( zlOE4`M0SjYUb{g_5Shx-j;^a!fUhA3&a5V*2@N{l2(Jq82O~)!{j#*%+z3fXTVt3J z08?w|CC9%V8Bv2!MNmw^q6N;k>I8YhJM^t1J&-JhFRLIo>@x^8M{HchCD+aJxr`Jxib#{AdbpW%brawjz80GX;?pTfJhhuB$GM=?3AqVw3A0|# zkCok*Dus#SFzk{cG zrg5-z{UE1KkE@$JX!~FE@GoFxj%6}N_F%33YfoogeABQyI>xi(m-*NC&BPGuB`edI&sBev;|Cc zwScf!WEG}mRucH&dog&XBF-YAr{?|b-EABdR2^fop6(9A7Y}uumE^Om+a={i1aLLk z06FU6z!6vqru4?9+zG&&*CfB%vq?GeENpVWbeyG>xhuyP*B0`uj)<&E(r^W&tIguk zUovxBNpw}o=RXu$F_z+mYgA$jxO9CC?5t_(I{|&VqPCwcU40T{sBMB*YGyLuIIG9Ov|_DmIcWcf*DE}nDa855Q} z{m-g0HUP#s<0p-Jaaf>#bQuk>Uxl43UCCX69&Yoc7Dhmpfp_gPG)^^NaBG2%%IEI#_qEal0pQ0f*u1D`%r>UmK1QJ>Z!(6Id>IL)34m zSC$0a$*R=@1g~0`4#O>CN+fV+L?K8SCqnyfS|6CXiELVH68=dur zlM--hQ2BMthML|jm zVdiGAl`&}xDv&6IEzIvV&Aox-$tH#>Sn7ZvpU7HsfRbP7%kD`Aly)qWPqn_)>3@D0 zXQaeG8%d5sI90mw2d9biHRnH5F4Z?_y{HPbyAp%tTEU1SOqY`Y;3(K|J(Eat^`nah zbW;_mPdf8%Pg>6os^J<>EKQVU_>=v43`n@7q(c=egU{6*i+f}{+#JO_IL`ikX06Xy z7dhy5yRwcVbGySFmGcO2i%lyq zoP}RjbZRDR{IylGCH=}$8Y%s*wNZ6n=f#Ek)^ZSKH=V2LyB}g4V8yPaLgUvc_aZnQ z?_h_UDsABZS`{>_!Rx91)!&1#= zhavwA3xX%W`9N(i@dluDhfh=khwwY9d0gx}7szPWEfsObI0$l4Sq?7~>$E1QUnB-2^namT;PBDh0dmG6BKWX$mjgWc+5D;YH`jjpOo(94crxS zq#lOBUw3(oPI7U%*zvxJo4j@=I<7eGklS}3cE8~vaKm_-e?!w&mDnP|bR+83*WX34(0oX0OM9wGF)XZxQ=$)c2d~{XDBEuJ~ z9xatZ-JqDPBaZ`E1PtfeSMtNpJS6kQ9d+af^&8MwekPufX@k^f>!gqX$i`A5H-s0nNeMk3)~*|o5{c*MbRy)O^x zDirsxBw4sSe$2VF9@Kwu6jki-XR$B8fSj4@Gx}#w_&Q#P-GypR(HGN#uZpy>FOa?Gmm`nQRL~Mk{!-4e~0pf?EXAP z$W}X9Js(KQt2BhRXKO`1Xv=!kY(1yC9Bz#Zx_c4^h9}5MCu7VF^wtB;*(tkZBqb}i6D&GD!2)()xwWZ195;jSR`eqlT-tGvUNJm^U4T; zu~L!Vli?0AwPkYKwAhs`-%hz_4TB9n9DPNGPQ7yR;B4e1P%e-6hACM&&Z6SnMtEcE z(aCu^<|?Ml&a~87?9gM%|Lqa~;E#Pbm!j`ev1s;2H?S*1H$`qbYBWvN^Q)&^F_$L!#{71S+t&8K@4apwRz8==g1Z3esx+p_YTA1TvtFT}b9 zog^tz%%0CIgdpxFUi7!_84Ci8w&FU#qvV-A;(yW=2*^aNJQ=4of}D2(=tl2UgGss*_D9wr!(e?(0CAm?{L~`~;nI`^%kyZ1Q=FGl# zYOKF!BZ(b~?-&ds6S{1FROuIR#Rl^aC5lmTKayiCDbc)xdpJ!okZG{XjYBcBzwEh{6!a z^0)1V#pRuXVeelD2lSDYMr#PcmoR*j3CY{Ftm5cpAp}o{Ym6)!UWP34DG$jks3VP^ z)M`+khAIuHb+d&oy2xFS0ITjQIkc^eI`?_sETgR}-N|}`OefG!7^QVZt`ts49+61T zycbP}N)k~y;kS+~r^ksShtN&J%f-L1guyV6L#Mt{9U4#iIc2Cpxd)mmLHKv2G2HXea0<58J%kq^?^RsJ1jRds$>ALv3?8ZnM z?evsq7fD@Eh8W|i3*UyjJ@0SUMkCgNI%N_Dpgap>vujW%n49tRdcQ4K`Deb}z)5Vz z4OyrH0N0~<0e*eGVD_Xc&@YC#vMLtTJ=MYnaxkzZ^B~{T8pt2?>g1Or1~jZ(tl44v zeKKc;`t2>0a4kXhQwkLmjt1>&W)> z8#KT>{G7RdnZ!!#ppifrDVO(NwZETt(0^BTBoW16km^R*=@>6qjB|n&a^p=a7Pj>l zA&o4FlYjT^ZaD(TAl~IX3|>F85c9ngP@cRS*!eq*39JrS8=m7NB)tnO|M#`&kf90_ zyTkhE=o)w!8NrWXuR%I5^SYSlS^Fe3QR3AA^PkAVoU7%*5cf+D01&f2DX>REEr8vB zC#74Jf-G?;usZI5tOsKPh@Jc?DdQRFx~Zq8CBhX#+`I(jp6I}`=Q z6+9H=n@DU8rT-0jlMYk@wH+xMD739sJ?PRgY@0UFJOXqs2^{h%-1X1aNPK8A51(8~ zY1E&at?B}SCj|E_A-r*nOoO7r+5%&e1$;7wRF$~cjNY_QJ`dM~AeuAJfn=uv&` zzSrgg1pOUgw;S(%zs+%-*D(5RH-72++Y9^xzoyo@hwIWhBZ@GDq}F~9<9zJ2C3W+d zZCKlK9k!Zi6MCBP*m}-2&hYIhH!=kL5=3%Fo9)Rr0aMo8h6{`veU8ERdRz(u)gEY> zu<`w4rCRT4u{KYCwyf4Q#^yCIDFfE1Mzd#4>AWiZcnSGNVK&;vDW9Sc64JnL55j^; zD)A^Goe(}&i{bB{PI?UU2@dAp<#^F)DNa!=9+U%F68P(0wgU+*)MR|?!_e7ow$*14xTdfNF3>@qm zd98^ok|`8;bM%SPL(?G*V}m*>7s1V-u=LEh^$y$V`wuH3x{>-z2%*)%dKFoWn9V=r z(-^VR@6+Zt6@HrUyY?#c6?8?ARt&8@Ylip1i$TJ}WKj_^_z#K?+s7(er zWqE^c;p(F<9~%IrFvTyp{7}QrZ)uMr&jY?b2|SH~9;tRnR;5+&?wOXr@V{$=5MO54 zeI+*+u9aKmb7TzjYs42E^$n^=LB(EzTyA#WCzQ8Poc>f1L{QUZznCoQ$LQOG*QL@A z`VfF7*-5eZ;Xx(owJyEm*Co%XlkE&sruu#rY0u`#Z#is6?Ns;4YoqSL{EE=G)!%lz zyvC}dT9gS@md3pz-7W57_elw?;t_P&ryPc+G0O%_0bQhe&VI=cn>J&ExIw`uo;H)r zKOJ{UoN^_kEjFWc$IH{)=;icx^4*jVGr&-WZGt--gTOwjOn-x#1nZ|sob-z^ZSenj z0Dq;BL{QK7Wd79a6uorfx8X@*juvauve6NCAc9&D?*G0WyV8gDOa@610mBMwh*G4@TX#YrLtXE25Cw4mw6rT-Y)d%$md(R*laVvVm zz5-0JBoPUvUGy$|_}_M1t;1y|i)-$ga^ouizBgxGMDzz;aZ_jGszVOYB!eRcg@4F5 zvRpsJ(8|A}$kV#~%xrB}M$_jwRQ-r*0E;Jv3ppBbS|vE+R5fDyoHxiWGRWaxefZWe zMNJvqKy`S((ot8b_~uylkONuGFlZ(7Kc$=|HZPbiTg~ssaq2cYw5 zTUCjX8Em73bX3QbRtjmFbH%$fXkBZJrgjCAd>E|?MGr6(gqW_8!+hIG50YRt!QUao zm?VoW0!eEH_Ns}_n!m%+EW(#CQvF;`Eub6sB4nO#2#XFV zGVcv1&ht!$prNKIZif6;KZ<(N6cPx!B|&RjLD(Jl+Mnlnw~=)he-@3XvksD95NveO z8q+P5+u7Cr)#6h}4N8E`fXf~0Pu30IoYe@=G3}o@fH6e?%Y$#EAtS7tg5p#zk%|=u z8e&xxy$0;HM%P-0KD8*}j>X&Q{5Qe%sF@qrufmFNu@X^tsO9g zpujR?mYF7ZH1q|-VCwr;sZp>FyHK00_{iShV<=(Xo_c*7$dGM zUGM^*G#h6dzN7k~H{Kn{N~0Zde}JP!kG(_4D~i;HYZXpUp>77Wdwr9wQyrqHEK}mA zh$lRiI0YDwxeUMY(hKynbTQiAu_HSOUVaMIlY)i|aEssau?C|o27cw}*YsF=V@h-L z^9vty?9v$E3wZt4-J=VDE+2%I1Fl6+W{i{Jd0Bn4ID8+{*;9u>vvN`sj3_CR2l%!# zE{dx)E3iApnBE~z2p>WFidR|fS4ap4OYi`1$m<6O(G@@>K-J;P$v1IncorjTD7Q;W zmm?Zjy{F#YMKvmLh&X51oB8kas?eU1`bQnL(%?2)qxA#`>Vw^g`ny(A*vXJ-*I zAU5oZb&LbNrt4+`n1e-ssz9H5IA&St>%mgLLh71aen4i#W1DE#jC8m1LP?jV0z!wa za$dR>bZJt4%^Ze=XVx-FQj#4k0?dY>9f17D%;*kC`^{9jBY6_@?mL2*X8~1XnX}cI z|G_y{KE&>_CYC^%RR_@r#NGj&4Fyc#YI`Gl`vSv5?tqzK37W=wm4RlU$SOFCANMZq zxdDAksJNaD)Ls#0QvVfzWq;84w|@~;e=Z`OQ-Z$oTqv)-)l=}s1VerynUhcU8&o?0 zWaAo^a{e*G@C6YBw(>10Cq!WP=J?WCbRU`aI-3+h1SrbOO8zUu)Zm_85U7XXyF(Ze z(1#&mF34aHb z)Ww=6)J4o3Ik@pw6fzUjtj58kb3e-nwNsJZqXG5UXn;lG)cjRRHHY_)cZI;(Aq6mW z$Wy^KjrmIS!>`v67*VrJ9Z)awBhWxZCqc&_alq@Kae!&fNTy|Mr&_Pd<=$XLk`iRk zDg=R`0H-9k(CAOz7wB5?!ObOQn>U!c4Q9Cy_r6ynTUc)x@0=Ar?pfXLdS6PDt?0Su z?>7qT;#q|((^SggNjS4xWXk0~QP?IY+g+tSrz3|}B(bjV!K=r&u)VbF#pfF`E0y2~ zlc_7-yRWNWL>IbTR^39xXNFAs^Q~N+mFa?IedGp+Raer59#LHer2ei!k%V&XqquhZ z=6n>>V+;E6=6?1za-i|qH|?y5S3(3D>v;t3K*OY;0nIDJv0m^mJXx^VM~0Rg)L{}$ zC@wLpxJGHI*4$<^2@Rz>ZBN<2`UY08o~{I26S+`a&}rwK;$51S?@xqH{#)i~a|0r| zbwCHJph$^G4+_8KDzMXec!(i{4!}MP28kJe(K7g3I=S4(Vr8S3SyLAT7XH-0N4R`? z1Fs1l?zd#txEFsYz1k@!yFgxkcGT@d0{)DRq%DM6ZAZJ0gzL{$6X#cCmtwG*D+8cg zK^lGQ-e#s0dnm74#mLJX5%C8FZR{YXv{)SrWMeWU!jwQn3}8};a}dm0-PXrWxixQh z_`hhcbZq)rX=n|O^D+ZdJ$v6*|qH*c^;2+)qI47EU zB<YYVCopwV52QQ5$c5occ zzghO;Fd_nBd8JR41I_oxQKf1`m$yALv8O=xl<};|*s23Z1}5rX7TyWB12)(2eh>q; zE|Fi@#fNk1tONrj-_G@U%x9)qjdxWEh2(_41j3Xn=1GvJW^BQQF_oo^JnQ>Rh#pQi z(DLs+Y&0zC?U^+2D$Z$bCm$Y@8Hz>&r+p;UMW8apTHg^bmdbNf2kMJ1S7o!WY{wg( znuH^Qq?3ZT0{mjD&@KV4|80ssrH~&Z=Dusc;#f_no3==jR#Tw@zG#D1+VI|#BL0Yc z=SNxCkj(M{eGpqnS5?ZF;u>0W=(ef3U>QyZYj$RTP4;o>CMR#^MJ#l8?1)TVun_M$ z!)=+m3#Z2Q;XVRW1_=0juyxwp>kg+*>0_d>@wrb*YT?(gCdh_S1MT@$%v?2}>|sM@ zJ_C;iPbl?A_7VWHcyBitZCs8j%wW&AS57TkWJ;f+yK;|^d;oRbu_O>i=FgOUQ6h~( zw#KXG6OK0gCOUi$FEHM=3Y{naHdASvi;%dEH3UJpVAd-0rr}S*ulaPbURMTNM<->^ zZN0&`Nc$#*f44l_@F#r~5Tkt!cn}SXHYo6R6Ja1KOqVe&jdc@3?2FbSVz!2_gKgEK zoqA1W`|BQ+Vbk@TPJ<^SO$;KLkL-NUvkjmkOBVebSoWbyM>s4$;CXTwzQ5kZ1Pe7t zxjIzVi@i89wosV|2R(sTH^+Wvje?u|cea9qJ)AxkG26g_x9;rX#e)iuH{ubAVQ{E` z_<#g?;dJ*%%QpI=AFb-?k1M~b-WoMJ%q8+BzSK{M*Mnu9yo`HF`0|zKw2FkKME|>D zD8`>2jlw-No-OAM0QHE-*MB9-e_7_;rx<~9Si-|C(dldK?pXR`@I~34o~@dhus6pN ztzn~2A&jvzqN~YRfxf-^w84>D3GE0eSFuI6***%9;U0B^%`MR9#_0@T6AC3-LFon@ z-DgX)kRd=H2gu?x5ib~)__oaSa2pXnE}|-jQ3a8+XINQD6)SHhq~2AXshU>MxtK)yu@dD zUCezVa|-EQ!I&|dYV}KKo3E=N zVU}obak-%ph07zIOLQPS%zG0SJVWlE_pT}L z8QC2E_=CgGUB9prtL$2D$Fw&2%`~wWLK#tcVh!RtaF=6qxjwCnnD-d6O{bv6-6a&8 zcKjjZ%6Y9Q<|Q+ZxUBlHq&H_Oz}lx~BeM=Tm98QH15zyjFBy$E%TqF_L$GTDxBFPA#+9!gdotwkvy z>s4l9l%zGFkM`FH+AtDcp^v(jRzs0fCWC6Fbbppq)>w?15=gSf1|Ip0i1-w zjh1{>AFRCuuG%Qu9_a!nQ=w+${f(VLRIEu~3bd|VZ+~U#u)~~n56m%+{=yuQ%lk2I zg1mtOCE7&>8inrOZ_(30kXv|z2A7S33Pqhg&uo(~3&OSwH*y|&kBY{fpH56Cz?P_f zr`Ut@X3t~!A@w_huGpp`MkViNexYAsD6w^*m&y$o9{Y9Bp8lzVXUX%Y460Lb{8CX> z+S4>K__&P`WJ7OB6(xwutaOnB0=gT^@tFkpm`8=N)whftW<;ZM<&7KKd;adUL$aav zYNm2NLP&au?50IRk?42ZV?X@ny;YJ2H#_PGz(;bj+o$i&4n%%=AMl8)$jMvxT! zbs{{C^u<7R!z8N*_wURx0gP%iOs7-WN|BM#N>6WoMUhhx9N1ztu3h>)JTM@niKPe2 zFG5Llm0oyGd@2qYBkdo0``yC(b_B&q{SZ%&nSQF*s-%vgV0ZAE55IS^TNY~8SknUY zyPqhexfSamusE+pXxu4Is)v$zLx7pet?s+ zZyu;P#x#}a$~ZKKl>L{?Tm>hr1hemgu&Nbqhgi@qW#oGNyXy>a^*GHsU^ETIm$fZz zoZ^W$oHTINunY(g4}Hj@%iMDYDH)_~djB#t&wr}D+?6PFe3pCSxj+3sZXyZvX+*<} z5cgLcg7`X*au3n%*Z9~ad(mqX%FYYJQy5GRsR=a=y*%$Snp|xIcRj(|*=T&%D^Y5< z7g;f;zJBKc_WZKYr0LdW#OK?;?@9f>C4Olh^M4*$L3uuMx5MJWZJx^+URtYa!6o@Shx75Ee z2QFbk84cpXD=1=(cn^|4+2Td=C$ReqJx#1Ro5xQ3&$7L0x?x@0RCA|eG~=DDZN%@c z%a*tnA(LKJ18$!xv5D=FrfDD$c`ab z`7Y<9NdCOSU99VMbA@q%Vq4_=U0DJG=kjP_LGUvVOEbl<%UWzLGa){f;6@hnvW_E1 zFZ{q%L5)~jEvs}k(-9n4kBDDAfbcldvGty*u?5t~5`B7m#6Fr$Qsvbqxn; zz;e4{a3WBO%Onem08{@(n(edX?s~IlF!TpS4FEn&2yXGP^TKB%g`CIdh!&&{P>sFBl+sur{EE z9U4;C_B(S}^l#G>W*e%YV-b~^rsJ+9{NmI0zRT*@q0VQL3yne%Ncs1X2k1nGHQvb; zooz%CU`nvxtpJBVMgi_Do1&;AvX6hh1z=nDD4BD;<>>lt6A?ARAhQJ>caqz1z!IyB z;}VkGqY573Zub6mQrFXK7a{J90A?paY-%90FSr|R9IIZeay4IQOOiWXUUp_4=nJ8w zRT6b*ro5g5x2~l_);8!pU3IZgAy!4EW&Sip@bW7~JcE|=z?Q^8gr)4xLPlOpl~y3> zo2taC_lEE7?Ghmaeg3Z6*ODvm2g{w~CurIjl&PgmdpKG`XpBRFP{DI8Hto2Yu?jYGJ<#t0G@5pBlvISv9+xxtcE%i#g3 zl;SMBFN2=wwlppPef`~W0>tH4t9#Jh`ez;ht_e96Rbxf=*nx*x)G4uLy@8*)2if;v9}X2qfhWPlcY>4J^y%nG+Bmu^>6EiEd36saz)e;DRtf{}uuQ}8 zcovWHP10%+JodX)emGg?AH)rr2aN){PqXRS4xi`fXZYM{K{VoOozMauP;sr)uuCTl ziPw-tGb`&^H&6}MR&g2o4P6fkraf;#dhCT7%`E9a$+CV&x}NO=<^VZHZ^gqXUZ8}hf#QXNIJwRc zE5iIicV4&@bJLc~?zfvzJzY;m5QJoKk;A@YYhIF|ZE*=++jTO4-g5_RD^I7oI zcHD7Zf`>8^Z2Zw3=v~u{h$x*}xBfo0!}I|t$72W2bxde*-mZ@M!w3_QGV$oAWUyTU z_tn+KBUXr-2-!im|!ru(Q(v0JmjYcA;txSlG1u$ z-%w0=Iwq%i@3OMy>k{)^aN(zhDWZK7wAy)s)r_|4Is}(4*$4FaDyX4st2{~iu4*!< zqKcz{-RfPj0%rt~#CThtog8qgt)_J69VINswisWuw4{qqA1iC1I>Gm3=Mu#-Qr7Wy z-XT94Q~}Kk{~F~r4xNnAYs54JbB02yItA^zs#5uHCLe<>{nDaC*#~Tb?zAF#g;a z{+6|1Au#hT_@oRTmj%ri2lE#Sj=a03N*~(1} zl#8CREqtK=54!n3XpjY2HL#JT6A(;y^S)C`6fE$_z)JZwa~t(BoLos(LY(XostaS6 z>8&CT>?AY=M8BOANzkOgO^C=0s>`(uZ28%V8uL26)TM%!I@#rIAH8bkTmaB5;?|UDv8(PCX&23Qe%>C{qNNGR-BJX+V+!hD!e0UiiMA1c*K!vAJGO8pvdxUz zL7p#MYB`$9VykKSl`m1(E8gsv(2@zE}COu&?2LmUP*ZjIso_O+ma#DD}i!Rk^v0@3%24 zt~#m}v;t#XTB=`r%(uVwMMD;@?>8<@t(f>gK?tDcLr$T6_^IRcB_ZAKDBn0>NJ=^e zngUH|Ea|UD!x(NK5m=6#IOs%r6#jrK)~rx)pt#^e1TjRJ#SwBcspL%6o|oJgDZ)+} z7zFLmVK)WmP}bfw-36jah2&k!f@0C$G>^zQ5YwO}SpmU7#t+|#bG?meM(;j2F!~N- zQmgu8i6eFM0n~R7P4pm$OoQ=^6Kb3d=z01EF#wLRqA)G0luBf_ntT%xfSld2HAQ2q zem8GS?jR0gJG6muW=CLbyytRwZ{~?`q?}fX`{{u4ruer@GC8-C+&h{pHvON3X4G=b z!}>wo5VzWndvRSlG=lI>zdyWSyfnr~4A_%fpY*!NN%9KV(e9mnebYg+i!q~Xn@N=^ z?OWHNuj3ecFF0=q#*x~itev-E4A{ha_H!@Qz=_EF%eR=UN{%p+-akcQ-e#e0yivXY zMOn?dZZy1wi<#bwC}i1&t=}ECoK=zmLw*%FZE?IOQ1*Cm(;67HY-S-Yh!uvagQf+H z1M_mbhonH#ha#(mFUiYiU&D&kTndoT=O#b$uh1psKqg6~#-0>m)

(XDd_883Z6? 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%0Av}uWoA|c%V-* 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%0Af=6-u8 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

RGxgK*7`X$ry7 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 z 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%0D9!-$UNl&0Qa--#b^gVxUc&TzP~ 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 >71Uo>)@*T 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 z%0D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

aOvTGjt&~MnsxI{-P+A#cMu@S*Z##5#^!Bt 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 Lk5B$Kmi+$!4_Z$J literal 0 HcmV?d00001 diff --git a/modules/joex/src/main/resources/reference.conf b/modules/joex/src/main/resources/reference.conf index c6ad2cdd..3e2ce177 100644 --- a/modules/joex/src/main/resources/reference.conf +++ b/modules/joex/src/main/resources/reference.conf @@ -586,6 +586,21 @@ Docpell Update Check } working-dir = ${java.io.tmpdir}"/docspell-convert" } + + # Allows to try to decrypt a PDF with encryption or protection. If + # enabled, a PDFs encryption or protection will be removed during + # conversion. + # + # For encrypted PDFs, this is necessary to be processed, because + # docspell needs to read it. It also requires to specify a + # password here. All passwords are tried when reading a PDF. + # + # This is enabled by default, using an empty password list. This + # removes protection from PDFs, which is better for processing. + decrypt-pdf = { + enabled = true + passwords = [] + } } # The same section is also present in the rest-server config. It is From f74624485f498a6c2d82cbf1dcad29cbde68386b Mon Sep 17 00:00:00 2001 From: eikek Date: Thu, 30 Sep 2021 10:35:38 +0200 Subject: [PATCH 10/75] Allow to manage passwords for a collective --- docker/docker-compose/docker-compose.yml | 1 + .../docspell/backend/ops/OCollective.scala | 20 ++++- .../src/main/resources/docspell-openapi.yml | 6 ++ .../restserver/routes/CollectiveRoutes.scala | 9 ++- .../h2/V1.27.0__collective_passwords.sql | 7 ++ .../mariadb/V1.27.0__collective_passwords.sql | 7 ++ .../V1.27.0__collective_passwords.sql | 7 ++ .../docspell/store/records/RCollective.scala | 16 +++- .../store/records/RCollectivePassword.scala | 79 +++++++++++++++++++ .../main/elm/Comp/CollectiveSettingsForm.elm | 41 ++++++++++ .../Messages/Comp/CollectiveSettingsForm.elm | 6 ++ 11 files changed, 190 insertions(+), 9 deletions(-) create mode 100644 modules/store/src/main/resources/db/migration/h2/V1.27.0__collective_passwords.sql create mode 100644 modules/store/src/main/resources/db/migration/mariadb/V1.27.0__collective_passwords.sql create mode 100644 modules/store/src/main/resources/db/migration/postgresql/V1.27.0__collective_passwords.sql create mode 100644 modules/store/src/main/scala/docspell/store/records/RCollectivePassword.scala diff --git a/docker/docker-compose/docker-compose.yml b/docker/docker-compose/docker-compose.yml index 18712b4c..d63ed86d 100644 --- a/docker/docker-compose/docker-compose.yml +++ b/docker/docker-compose/docker-compose.yml @@ -19,6 +19,7 @@ services: image: docspell/joex:latest container_name: docspell-joex command: + - -J-Xmx3G - /opt/docspell.conf restart: unless-stopped env_file: ./.env diff --git a/modules/backend/src/main/scala/docspell/backend/ops/OCollective.scala b/modules/backend/src/main/scala/docspell/backend/ops/OCollective.scala index 1b2825fe..907bfcef 100644 --- a/modules/backend/src/main/scala/docspell/backend/ops/OCollective.scala +++ b/modules/backend/src/main/scala/docspell/backend/ops/OCollective.scala @@ -63,6 +63,12 @@ trait OCollective[F[_]] { def findEnabledSource(sourceId: Ident): F[Option[RSource]] + def addPassword(collective: Ident, pw: Password): F[Unit] + + def getPasswords(collective: Ident): F[List[RCollectivePassword]] + + def removePassword(id: Ident): F[Unit] + def startLearnClassifier(collective: Ident): F[Unit] def startEmptyTrash(args: EmptyTrashArgs): F[Unit] @@ -149,7 +155,7 @@ object OCollective { private def updateLearnClassifierTask(coll: Ident, sett: Settings): F[Unit] = for { id <- Ident.randomId[F] - on = sett.classifier.map(_.enabled).getOrElse(false) + on = sett.classifier.exists(_.enabled) timer = sett.classifier.map(_.schedule).getOrElse(CalEvent.unsafe("")) args = LearnClassifierArgs(coll) ut = UserTask( @@ -174,6 +180,18 @@ object OCollective { _ <- joex.notifyAllNodes } yield () + def addPassword(collective: Ident, pw: Password): F[Unit] = + for { + cpass <- RCollectivePassword.createNew[F](collective, pw) + _ <- store.transact(RCollectivePassword.upsert(cpass)) + } yield () + + def getPasswords(collective: Ident): F[List[RCollectivePassword]] = + store.transact(RCollectivePassword.findAll(collective)) + + def removePassword(id: Ident): F[Unit] = + store.transact(RCollectivePassword.deleteById(id)).map(_ => ()) + def startLearnClassifier(collective: Ident): F[Unit] = for { id <- Ident.randomId[F] diff --git a/modules/restapi/src/main/resources/docspell-openapi.yml b/modules/restapi/src/main/resources/docspell-openapi.yml index 4c6b31ee..c5e95d29 100644 --- a/modules/restapi/src/main/resources/docspell-openapi.yml +++ b/modules/restapi/src/main/resources/docspell-openapi.yml @@ -5635,6 +5635,7 @@ components: - integrationEnabled - classifier - emptyTrash + - passwords properties: language: type: string @@ -5648,6 +5649,11 @@ components: $ref: "#/components/schemas/ClassifierSetting" emptyTrash: $ref: "#/components/schemas/EmptyTrashSetting" + passwords: + type: array + items: + type: string + format: password EmptyTrashSetting: description: | diff --git a/modules/restserver/src/main/scala/docspell/restserver/routes/CollectiveRoutes.scala b/modules/restserver/src/main/scala/docspell/restserver/routes/CollectiveRoutes.scala index 75690d64..f1cd03d8 100644 --- a/modules/restserver/src/main/scala/docspell/restserver/routes/CollectiveRoutes.scala +++ b/modules/restserver/src/main/scala/docspell/restserver/routes/CollectiveRoutes.scala @@ -12,8 +12,7 @@ import cats.implicits._ import docspell.backend.BackendApp import docspell.backend.auth.AuthToken import docspell.backend.ops.OCollective -import docspell.common.EmptyTrashArgs -import docspell.common.ListType +import docspell.common._ import docspell.restapi.model._ import docspell.restserver.conv.Conversions import docspell.restserver.http4s._ @@ -62,7 +61,8 @@ object CollectiveRoutes { settings.emptyTrash.schedule, settings.emptyTrash.minAge ) - ) + ), + settings.passwords.map(Password.apply) ) res <- backend.collective @@ -89,7 +89,8 @@ object CollectiveRoutes { EmptyTrashSetting( trash.schedule, trash.minAge - ) + ), + settDb.map(_.passwords).getOrElse(Nil).map(_.pass) ) ) resp <- sett.toResponse() diff --git a/modules/store/src/main/resources/db/migration/h2/V1.27.0__collective_passwords.sql b/modules/store/src/main/resources/db/migration/h2/V1.27.0__collective_passwords.sql new file mode 100644 index 00000000..223fa8d5 --- /dev/null +++ b/modules/store/src/main/resources/db/migration/h2/V1.27.0__collective_passwords.sql @@ -0,0 +1,7 @@ +CREATE TABLE "collective_password" ( + "id" varchar(254) not null primary key, + "cid" varchar(254) not null, + "pass" varchar(254) not null, + "created" timestamp not null, + foreign key ("cid") references "collective"("cid") on delete cascade +) diff --git a/modules/store/src/main/resources/db/migration/mariadb/V1.27.0__collective_passwords.sql b/modules/store/src/main/resources/db/migration/mariadb/V1.27.0__collective_passwords.sql new file mode 100644 index 00000000..2224e560 --- /dev/null +++ b/modules/store/src/main/resources/db/migration/mariadb/V1.27.0__collective_passwords.sql @@ -0,0 +1,7 @@ +CREATE TABLE `collective_password` ( + `id` varchar(254) not null primary key, + `cid` varchar(254) not null, + `pass` varchar(254) not null, + `created` timestamp not null, + foreign key (`cid`) references `collective`(`cid`) on delete cascade +) diff --git a/modules/store/src/main/resources/db/migration/postgresql/V1.27.0__collective_passwords.sql b/modules/store/src/main/resources/db/migration/postgresql/V1.27.0__collective_passwords.sql new file mode 100644 index 00000000..223fa8d5 --- /dev/null +++ b/modules/store/src/main/resources/db/migration/postgresql/V1.27.0__collective_passwords.sql @@ -0,0 +1,7 @@ +CREATE TABLE "collective_password" ( + "id" varchar(254) not null primary key, + "cid" varchar(254) not null, + "pass" varchar(254) not null, + "created" timestamp not null, + foreign key ("cid") references "collective"("cid") on delete cascade +) diff --git a/modules/store/src/main/scala/docspell/store/records/RCollective.scala b/modules/store/src/main/scala/docspell/store/records/RCollective.scala index dd0afce2..906277c6 100644 --- a/modules/store/src/main/scala/docspell/store/records/RCollective.scala +++ b/modules/store/src/main/scala/docspell/store/records/RCollective.scala @@ -89,7 +89,8 @@ object RCollective { case None => REmptyTrashSetting.delete(cid) } - } yield n1 + n2 + n3 + n4 <- RCollectivePassword.replaceAll(cid, settings.passwords) + } yield n1 + n2 + n3 + n4 // this hides categories that have been deleted in the meantime // they are finally removed from the json array once the learn classifier task is run @@ -99,10 +100,12 @@ object RCollective { prev <- OptionT.fromOption[ConnectionIO](sett.classifier) cats <- OptionT.liftF(RTag.listCategories(coll)) next = prev.copy(categories = prev.categories.intersect(cats)) - } yield sett.copy(classifier = Some(next))).value + pws <- OptionT.liftF(RCollectivePassword.findAll(coll)) + } yield sett.copy(classifier = Some(next), passwords = pws.map(_.password))).value private def getRawSettings(coll: Ident): ConnectionIO[Option[Settings]] = { import RClassifierSetting.stringListMeta + val c = RCollective.as("c") val cs = RClassifierSetting.as("cs") val es = REmptyTrashSetting.as("es") @@ -116,7 +119,8 @@ object RCollective { cs.categories.s, cs.listType.s, es.schedule.s, - es.minAge.s + es.minAge.s, + const(0) //dummy value to load Nil as list of passwords ), from(c).leftJoin(cs, cs.cid === c.id).leftJoin(es, es.cid === c.id), c.id === coll @@ -170,7 +174,11 @@ object RCollective { language: Language, integrationEnabled: Boolean, classifier: Option[RClassifierSetting.Classifier], - emptyTrash: Option[REmptyTrashSetting.EmptyTrash] + emptyTrash: Option[REmptyTrashSetting.EmptyTrash], + passwords: List[Password] ) + implicit val passwordListMeta: Read[List[Password]] = + Read[Int].map(_ => Nil: List[Password]) + } diff --git a/modules/store/src/main/scala/docspell/store/records/RCollectivePassword.scala b/modules/store/src/main/scala/docspell/store/records/RCollectivePassword.scala new file mode 100644 index 00000000..53726572 --- /dev/null +++ b/modules/store/src/main/scala/docspell/store/records/RCollectivePassword.scala @@ -0,0 +1,79 @@ +package docspell.store.records + +import cats.data.NonEmptyList +import docspell.common._ +import docspell.store.qb._ +import docspell.store.qb.DSL._ +import doobie._ +import doobie.implicits._ +import cats.effect._ +import cats.implicits._ + +final case class RCollectivePassword( + id: Ident, + cid: Ident, + password: Password, + created: Timestamp +) {} + +object RCollectivePassword { + final case class Table(alias: Option[String]) extends TableDef { + val tableName: String = "collective_password" + + val id = Column[Ident]("id", this) + val cid = Column[Ident]("cid", this) + val password = Column[Password]("pass", this) + val created = Column[Timestamp]("created", this) + + val all: NonEmptyList[Column[_]] = + NonEmptyList.of(id, cid, password, created) + } + + val T = Table(None) + def as(alias: String): Table = + Table(Some(alias)) + + def createNew[F[_]: Sync](cid: Ident, pw: Password): F[RCollectivePassword] = + for { + id <- Ident.randomId[F] + time <- Timestamp.current[F] + } yield RCollectivePassword(id, cid, pw, time) + + def insert(v: RCollectivePassword): ConnectionIO[Int] = + DML.insert( + T, + T.all, + fr"${v.id}, ${v.cid},${v.password},${v.created}" + ) + + def upsert(v: RCollectivePassword): ConnectionIO[Int] = + for { + k <- deleteByPassword(v.cid, v.password) + n <- insert(v) + } yield n + k + + def deleteById(id: Ident): ConnectionIO[Int] = + DML.delete(T, T.id === id) + + def deleteByPassword(cid: Ident, pw: Password): ConnectionIO[Int] = + DML.delete(T, T.password === pw && T.cid === cid) + + def findAll(cid: Ident): ConnectionIO[List[RCollectivePassword]] = + Select(select(T.all), from(T), T.cid === cid).build + .query[RCollectivePassword] + .to[List] + + def replaceAll(cid: Ident, pws: List[Password]): ConnectionIO[Int] = + for { + k <- DML.delete(T, T.cid === cid) + pw <- pws.traverse(p => createNew[ConnectionIO](cid, p)) + n <- + if (pws.isEmpty) 0.pure[ConnectionIO] + else + DML.insertMany( + T, + T.all, + pw.map(p => fr"${p.id},${p.cid},${p.password},${p.created}") + ) + } yield k + n +} diff --git a/modules/webapp/src/main/elm/Comp/CollectiveSettingsForm.elm b/modules/webapp/src/main/elm/Comp/CollectiveSettingsForm.elm index fee15790..f7994b4a 100644 --- a/modules/webapp/src/main/elm/Comp/CollectiveSettingsForm.elm +++ b/modules/webapp/src/main/elm/Comp/CollectiveSettingsForm.elm @@ -22,6 +22,7 @@ import Comp.ClassifierSettingsForm import Comp.Dropdown import Comp.EmptyTrashForm import Comp.MenuBar as MB +import Comp.StringListInput import Data.DropdownStyle as DS import Data.Flags exposing (Flags) import Data.Language exposing (Language) @@ -30,6 +31,7 @@ import Html exposing (..) import Html.Attributes exposing (..) import Html.Events exposing (onCheck, onClick, onInput) import Http +import Markdown import Messages.Comp.CollectiveSettingsForm exposing (Texts) import Styles as S @@ -44,6 +46,8 @@ type alias Model = , startClassifierResult : ClassifierResult , emptyTrashModel : Comp.EmptyTrashForm.Model , startEmptyTrashResult : EmptyTrashResult + , passwordModel : Comp.StringListInput.Model + , passwords : List String } @@ -96,6 +100,8 @@ init flags settings = , startClassifierResult = ClassifierResultInitial , emptyTrashModel = em , startEmptyTrashResult = EmptyTrashResultInitial + , passwordModel = Comp.StringListInput.init + , passwords = settings.passwords } , Cmd.batch [ Cmd.map ClassifierSettingMsg cc, Cmd.map EmptyTrashMsg ec ] ) @@ -114,6 +120,7 @@ getSettings model = , integrationEnabled = model.intEnabled , classifier = cls , emptyTrash = trash + , passwords = model.passwords } ) (Comp.ClassifierSettingsForm.getSettings model.classifierModel) @@ -133,6 +140,7 @@ type Msg | StartEmptyTrashTask | StartClassifierResp (Result Http.Error BasicResult) | StartEmptyTrashResp (Result Http.Error BasicResult) + | PasswordMsg Comp.StringListInput.Msg update : Flags -> Msg -> Model -> ( Model, Cmd Msg, Maybe CollectiveSettings ) @@ -285,6 +293,27 @@ update flags msg model = , Nothing ) + PasswordMsg lm -> + let + ( pm, action ) = + Comp.StringListInput.update lm model.passwordModel + + pws = + case action of + Comp.StringListInput.AddAction pw -> + pw :: model.passwords + + Comp.StringListInput.RemoveAction pw -> + List.filter (\e -> e /= pw) model.passwords + + Comp.StringListInput.NoAction -> + model.passwords + in + ( { model | passwordModel = pm, passwords = pws } + , Cmd.none + , Nothing + ) + --- View2 @@ -460,6 +489,18 @@ view2 flags texts settings model = ] ] ] + , div [] + [ h2 [ class S.header2 ] + [ text texts.passwords + ] + , div [ class "mb-4" ] + [ div [ class "opacity-50 text-sm" ] + [ Markdown.toHtml [] texts.passwordsInfo + ] + , Html.map PasswordMsg + (Comp.StringListInput.view2 model.passwords model.passwordModel) + ] + ] ] diff --git a/modules/webapp/src/main/elm/Messages/Comp/CollectiveSettingsForm.elm b/modules/webapp/src/main/elm/Messages/Comp/CollectiveSettingsForm.elm index 79de30cc..ea6248f1 100644 --- a/modules/webapp/src/main/elm/Messages/Comp/CollectiveSettingsForm.elm +++ b/modules/webapp/src/main/elm/Messages/Comp/CollectiveSettingsForm.elm @@ -44,6 +44,8 @@ type alias Texts = , fulltextReindexSubmitted : String , fulltextReindexOkMissing : String , emptyTrash : String + , passwords : String + , passwordsInfo : String } @@ -77,6 +79,8 @@ gb = , fulltextReindexOkMissing = "Please type OK in the field if you really want to start re-indexing your data." , emptyTrash = "Empty Trash" + , passwords = "Passwords" + , passwordsInfo = "These passwords are used when encrypted PDFs are being processed. Please note, that they are stored in the database as **plain text**!" } @@ -110,4 +114,6 @@ de = , fulltextReindexOkMissing = "Bitte tippe OK in das Feld ein, wenn Du wirklich den Index neu erzeugen möchtest." , emptyTrash = "Papierkorb löschen" + , passwords = "Passwörter" + , passwordsInfo = "Diese Passwörter werden zum Lesen von verschlüsselten PDFs verwendet. Diese Passwörter werden in der Datanbank **in Klartext** gespeichert!" } From aa8f3b82fc9338a4a258a323e3f587b5e557396c Mon Sep 17 00:00:00 2001 From: eikek Date: Thu, 30 Sep 2021 11:11:08 +0200 Subject: [PATCH 11/75] Use passwords when reading PDFs --- .../scala/docspell/convert/Conversion.scala | 11 +++++-- .../docspell/convert/ConvertConfig.scala | 3 +- .../convert/RemovePdfEncryption.scala | 16 +++++----- .../docspell/convert/ConversionTest.scala | 2 +- .../convert/RemovePdfEncryptionTest.scala | 23 +++++++++----- .../joex/src/main/resources/reference.conf | 6 +++- .../docspell/joex/process/ConvertPdf.scala | 30 ++++++++++++------- .../store/records/RCollectivePassword.scala | 18 +++++++---- website/site/content/docs/features/_index.md | 1 + 9 files changed, 73 insertions(+), 37 deletions(-) diff --git a/modules/convert/src/main/scala/docspell/convert/Conversion.scala b/modules/convert/src/main/scala/docspell/convert/Conversion.scala index b27be23b..b1a05aa4 100644 --- a/modules/convert/src/main/scala/docspell/convert/Conversion.scala +++ b/modules/convert/src/main/scala/docspell/convert/Conversion.scala @@ -33,6 +33,7 @@ object Conversion { def create[F[_]: Async]( cfg: ConvertConfig, sanitizeHtml: SanitizeHtml, + additionalPasswords: List[Password], logger: Logger[F] ): Resource[F, Conversion[F]] = Resource.pure[F, Conversion[F]](new Conversion[F] { @@ -42,10 +43,14 @@ object Conversion { ): F[A] = TikaMimetype.resolve(dataType, in).flatMap { case MimeType.PdfMatch(_) => + val allPass = cfg.decryptPdf.passwords ++ additionalPasswords val pdfStream = - if (cfg.decryptPdf.enabled) - in.through(RemovePdfEncryption(logger, cfg.decryptPdf.passwords)) - else in + if (cfg.decryptPdf.enabled) { + logger.s + .debug(s"Trying to read the PDF using ${allPass.size} passwords") + .drain ++ + in.through(RemovePdfEncryption(logger, allPass)) + } else in OcrMyPdf .toPDF(cfg.ocrmypdf, lang, cfg.chunkSize, logger)(pdfStream, handler) diff --git a/modules/convert/src/main/scala/docspell/convert/ConvertConfig.scala b/modules/convert/src/main/scala/docspell/convert/ConvertConfig.scala index 74a136b1..a4f3c224 100644 --- a/modules/convert/src/main/scala/docspell/convert/ConvertConfig.scala +++ b/modules/convert/src/main/scala/docspell/convert/ConvertConfig.scala @@ -6,6 +6,7 @@ package docspell.convert +import docspell.common.Password import docspell.convert.ConvertConfig.DecryptPdf import docspell.convert.extern.OcrMyPdfConfig import docspell.convert.extern.{TesseractConfig, UnoconvConfig, WkHtmlPdfConfig} @@ -25,5 +26,5 @@ final case class ConvertConfig( object ConvertConfig { - final case class DecryptPdf(enabled: Boolean, passwords: List[String]) + final case class DecryptPdf(enabled: Boolean, passwords: List[Password]) } diff --git a/modules/convert/src/main/scala/docspell/convert/RemovePdfEncryption.scala b/modules/convert/src/main/scala/docspell/convert/RemovePdfEncryption.scala index 34f93054..4d7a469f 100644 --- a/modules/convert/src/main/scala/docspell/convert/RemovePdfEncryption.scala +++ b/modules/convert/src/main/scala/docspell/convert/RemovePdfEncryption.scala @@ -11,7 +11,7 @@ import java.io.ByteArrayOutputStream import cats.effect._ import fs2.{Chunk, Pipe, Stream} -import docspell.common.Logger +import docspell.common._ import org.apache.pdfbox.pdmodel.PDDocument import org.apache.pdfbox.pdmodel.encryption.InvalidPasswordException @@ -21,15 +21,15 @@ object RemovePdfEncryption { def apply[F[_]: Sync]( logger: Logger[F], - passwords: List[String] + passwords: List[Password] ): Pipe[F, Byte, Byte] = apply(logger, Stream.emits(passwords)) def apply[F[_]: Sync]( logger: Logger[F], - passwords: Stream[F, String] + passwords: Stream[F, Password] ): Pipe[F, Byte, Byte] = { - val pws = passwords.cons1("") + val pws = passwords.cons1(Password.empty) in => pws .flatMap(pw => in.through(openPdf[F](logger, pw))) @@ -54,7 +54,7 @@ object RemovePdfEncryption { private def openPdf[F[_]: Sync]( logger: Logger[F], - pw: String + pw: Password ): Pipe[F, Byte, PDDocument] = { def alloc(bytes: Array[Byte]): F[Option[PDDocument]] = Sync[F].delay(load(bytes, pw)) @@ -64,7 +64,7 @@ object RemovePdfEncryption { val log = if (pw.isEmpty) Stream.empty - else logger.s.debug(s"Try opening PDF with password: ${pw.take(2)}***").drain + else logger.s.debug(s"Try opening PDF with password: ${pw.pass.take(2)}***").drain in => Stream @@ -73,8 +73,8 @@ object RemovePdfEncryption { .flatMap(opt => opt.map(Stream.emit).getOrElse(Stream.empty)) } - private def load(bytes: Array[Byte], pw: String): Option[PDDocument] = - try Option(PDDocument.load(bytes, pw)) + private def load(bytes: Array[Byte], pw: Password): Option[PDDocument] = + try Option(PDDocument.load(bytes, pw.pass)) catch { case _: InvalidPasswordException => None diff --git a/modules/convert/src/test/scala/docspell/convert/ConversionTest.scala b/modules/convert/src/test/scala/docspell/convert/ConversionTest.scala index 3bd1de4a..8f9f191f 100644 --- a/modules/convert/src/test/scala/docspell/convert/ConversionTest.scala +++ b/modules/convert/src/test/scala/docspell/convert/ConversionTest.scala @@ -79,7 +79,7 @@ class ConversionTest extends FunSuite with FileChecks { ) val conversion = - Conversion.create[IO](convertConfig, SanitizeHtml.none, logger) + Conversion.create[IO](convertConfig, SanitizeHtml.none, Nil, logger) val bombs = List( ExampleFiles.bombs_20K_gray_jpeg, diff --git a/modules/convert/src/test/scala/docspell/convert/RemovePdfEncryptionTest.scala b/modules/convert/src/test/scala/docspell/convert/RemovePdfEncryptionTest.scala index 805c44ad..803f3174 100644 --- a/modules/convert/src/test/scala/docspell/convert/RemovePdfEncryptionTest.scala +++ b/modules/convert/src/test/scala/docspell/convert/RemovePdfEncryptionTest.scala @@ -9,7 +9,7 @@ package docspell.convert import cats.effect.IO import fs2.Stream -import docspell.common.Logger +import docspell.common._ import docspell.files.ExampleFiles import munit.CatsEffectSuite @@ -17,9 +17,11 @@ import munit.CatsEffectSuite class RemovePdfEncryptionTest extends CatsEffectSuite with FileChecks { val logger: Logger[IO] = Logger.log4s(org.log4s.getLogger) - val protectedPdf = ExampleFiles.secured_protected_test123_pdf.readURL[IO](16 * 1024) - val encryptedPdf = ExampleFiles.secured_encrypted_test123_pdf.readURL[IO](16 * 1024) - val plainPdf = ExampleFiles.letter_en_pdf.readURL[IO](16 * 1024) + private val protectedPdf = + ExampleFiles.secured_protected_test123_pdf.readURL[IO](16 * 1024) + private val encryptedPdf = + ExampleFiles.secured_encrypted_test123_pdf.readURL[IO](16 * 1024) + private val plainPdf = ExampleFiles.letter_en_pdf.readURL[IO](16 * 1024) test("have encrypted pdfs") { for { @@ -30,14 +32,19 @@ class RemovePdfEncryptionTest extends CatsEffectSuite with FileChecks { test("decrypt pdf") { encryptedPdf - .through(RemovePdfEncryption(logger, List("test123"))) + .through(RemovePdfEncryption(logger, List(Password("test123")))) .isUnencryptedPDF .map(assert(_)) } test("decrypt pdf with multiple passwords") { encryptedPdf - .through(RemovePdfEncryption(logger, List("xy123", "123xy", "test123", "abc123"))) + .through( + RemovePdfEncryption( + logger, + List("xy123", "123xy", "test123", "abc123").map(Password(_)) + ) + ) .isUnencryptedPDF .map(assert(_)) } @@ -59,7 +66,7 @@ class RemovePdfEncryptionTest extends CatsEffectSuite with FileChecks { test("decrypt with multiple passwords, stop on first") { val passwords: Stream[IO, String] = Stream("test123") ++ Stream.raiseError[IO](new Exception("is not called")) - val decrypt = RemovePdfEncryption(logger, passwords) + val decrypt = RemovePdfEncryption(logger, passwords.map(Password(_))) encryptedPdf .through(decrypt) .isUnencryptedPDF @@ -68,7 +75,7 @@ class RemovePdfEncryptionTest extends CatsEffectSuite with FileChecks { test("return input stream if nothing helps") { encryptedPdf - .through(RemovePdfEncryption(logger, List("a", "b"))) + .through(RemovePdfEncryption(logger, List("a", "b").map(Password(_)))) .isEncryptedPDF .map(assert(_)) } diff --git a/modules/joex/src/main/resources/reference.conf b/modules/joex/src/main/resources/reference.conf index 3e2ce177..4313771a 100644 --- a/modules/joex/src/main/resources/reference.conf +++ b/modules/joex/src/main/resources/reference.conf @@ -595,8 +595,12 @@ Docpell Update Check # docspell needs to read it. It also requires to specify a # password here. All passwords are tried when reading a PDF. # - # This is enabled by default, using an empty password list. This + # This is enabled by default with an empty password list. This # removes protection from PDFs, which is better for processing. + # + # Passwords can be given here and each collective can maintain + # their passwords as well. But if the `enabled` setting below is + # `false`, then no attempt at decrypting is done. decrypt-pdf = { enabled = true passwords = [] diff --git a/modules/joex/src/main/scala/docspell/joex/process/ConvertPdf.scala b/modules/joex/src/main/scala/docspell/joex/process/ConvertPdf.scala index 44e2613f..0108ef98 100644 --- a/modules/joex/src/main/scala/docspell/joex/process/ConvertPdf.scala +++ b/modules/joex/src/main/scala/docspell/joex/process/ConvertPdf.scala @@ -77,17 +77,27 @@ object ConvertPdf { ctx: Context[F, ProcessItemArgs], item: ItemData )(ra: RAttachment, mime: MimeType): F[(RAttachment, Option[RAttachmentMeta])] = - Conversion.create[F](cfg, sanitizeHtml, ctx.logger).use { conv => - mime match { - case mt => - val data = ctx.store.fileStore.getBytes(ra.fileId) - val handler = conversionHandler[F](ctx, cfg, ra, item) - ctx.logger.info(s"Converting file ${ra.name} (${mime.asString}) into a PDF") *> - conv.toPDF(DataType(mt), ctx.args.meta.language, handler)( - data - ) + loadCollectivePasswords(ctx).flatMap(collPass => + Conversion.create[F](cfg, sanitizeHtml, collPass, ctx.logger).use { conv => + mime match { + case mt => + val data = ctx.store.fileStore.getBytes(ra.fileId) + val handler = conversionHandler[F](ctx, cfg, ra, item) + ctx.logger + .info(s"Converting file ${ra.name} (${mime.asString}) into a PDF") *> + conv.toPDF(DataType(mt), ctx.args.meta.language, handler)( + data + ) + } } - } + ) + + private def loadCollectivePasswords[F[_]: Async]( + ctx: Context[F, ProcessItemArgs] + ): F[List[Password]] = + ctx.store + .transact(RCollectivePassword.findAll(ctx.args.meta.collective)) + .map(_.map(_.password).distinct) private def conversionHandler[F[_]: Sync]( ctx: Context[F, ProcessItemArgs], diff --git a/modules/store/src/main/scala/docspell/store/records/RCollectivePassword.scala b/modules/store/src/main/scala/docspell/store/records/RCollectivePassword.scala index 53726572..c7931d20 100644 --- a/modules/store/src/main/scala/docspell/store/records/RCollectivePassword.scala +++ b/modules/store/src/main/scala/docspell/store/records/RCollectivePassword.scala @@ -1,14 +1,22 @@ +/* + * Copyright 2020 Eike K. & Contributors + * + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + package docspell.store.records import cats.data.NonEmptyList -import docspell.common._ -import docspell.store.qb._ -import docspell.store.qb.DSL._ -import doobie._ -import doobie.implicits._ import cats.effect._ import cats.implicits._ +import docspell.common._ +import docspell.store.qb.DSL._ +import docspell.store.qb._ + +import doobie._ +import doobie.implicits._ + final case class RCollectivePassword( id: Ident, cid: Ident, diff --git a/website/site/content/docs/features/_index.md b/website/site/content/docs/features/_index.md index b5855066..03da2d7d 100644 --- a/website/site/content/docs/features/_index.md +++ b/website/site/content/docs/features/_index.md @@ -56,6 +56,7 @@ description = "A list of features and limitations." - Everything stored in a SQL database: PostgreSQL, MariaDB or H2 - H2 is embedded, a "one-file-only" database, avoids installing db servers +- Support for encrypted PDFs - Files supported: - Documents: - PDF From 1a78bbc1a900d0d75a40859eb1f8c2fb06c8bbce Mon Sep 17 00:00:00 2001 From: Scala Steward Date: Thu, 30 Sep 2021 12:19:11 +0200 Subject: [PATCH 12/75] Update jsoup to 1.14.3 --- project/Dependencies.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 159a4d0c..b3d7c731 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -22,7 +22,7 @@ object Dependencies { val Http4sVersion = "0.23.4" val Icu4jVersion = "69.1" val javaOtpVersion = "0.3.0" - val JsoupVersion = "1.14.2" + val JsoupVersion = "1.14.3" val JwtScalaVersion = "9.0.1" val KindProjectorVersion = "0.10.3" val KittensVersion = "2.3.2" From b3e8711589cb7064226e92238b73470998abbeeb Mon Sep 17 00:00:00 2001 From: Scala Steward Date: Thu, 30 Sep 2021 16:21:56 +0200 Subject: [PATCH 13/75] Update munit-cats-effect-3 to 1.0.6 --- project/Dependencies.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index b3d7c731..aa305240 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -31,7 +31,7 @@ object Dependencies { val LogbackVersion = "1.2.6" val MariaDbVersion = "2.7.4" val MUnitVersion = "0.7.29" - val MUnitCatsEffectVersion = "1.0.5" + val MUnitCatsEffectVersion = "1.0.6" val OrganizeImportsVersion = "0.5.0" val PdfboxVersion = "2.0.24" val PoiVersion = "4.1.2" From 5d00207efdcd7b7475e1cf6d797d79eadcdd674b Mon Sep 17 00:00:00 2001 From: Scala Steward Date: Thu, 30 Sep 2021 18:18:14 +0200 Subject: [PATCH 14/75] Update swagger-ui to 3.52.3 --- project/Dependencies.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index aa305240..624ad20d 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -43,7 +43,7 @@ object Dependencies { val StanfordNlpVersion = "4.2.2" val TikaVersion = "2.1.0" val YamuscaVersion = "0.8.1" - val SwaggerUIVersion = "3.52.1" + val SwaggerUIVersion = "3.52.3" val TestContainerVersion = "0.39.8" val TwelveMonkeysVersion = "3.7.0" val JQueryVersion = "3.5.1" From e4667116fd5fbc00c801e68fd27436c62f28b815 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 1 Oct 2021 00:35:10 +0000 Subject: [PATCH 15/75] Update postgres Docker tag to v14 --- docker/docker-compose/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/docker-compose/docker-compose.yml b/docker/docker-compose/docker-compose.yml index d63ed86d..84bf5979 100644 --- a/docker/docker-compose/docker-compose.yml +++ b/docker/docker-compose/docker-compose.yml @@ -51,7 +51,7 @@ services: - restserver db: - image: postgres:13.4 + image: postgres:14.0 container_name: postgres_db restart: unless-stopped volumes: From 49badbf8600b4704f755c71d3ff7c06cec39f098 Mon Sep 17 00:00:00 2001 From: Scala Steward Date: Sat, 2 Oct 2021 18:20:53 +0200 Subject: [PATCH 16/75] Update scalafmt-core to 3.0.6 --- .scalafmt.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.scalafmt.conf b/.scalafmt.conf index 9c961a3d..fe959dae 100644 --- a/.scalafmt.conf +++ b/.scalafmt.conf @@ -1,4 +1,4 @@ -version = "3.0.5" +version = "3.0.6" preset = default align.preset = some From 5265c212c7cdcc3734145b14ccb990c16166dbbf Mon Sep 17 00:00:00 2001 From: Scala Steward Date: Sun, 3 Oct 2021 00:52:45 +0200 Subject: [PATCH 17/75] Update pureconfig to 0.17.0 --- project/Dependencies.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 624ad20d..7cf02543 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -36,7 +36,7 @@ object Dependencies { val PdfboxVersion = "2.0.24" val PoiVersion = "4.1.2" val PostgresVersion = "42.2.24" - val PureConfigVersion = "0.16.0" + val PureConfigVersion = "0.17.0" val ScalaJavaTimeVersion = "2.3.0" val ScodecBitsVersion = "1.1.29" val Slf4jVersion = "1.7.32" From 21148efe21868ec12c29096ef4ee464305134b87 Mon Sep 17 00:00:00 2001 From: Scala Steward Date: Mon, 4 Oct 2021 14:15:53 +0200 Subject: [PATCH 18/75] Update jwt-circe to 9.0.2 --- project/Dependencies.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 7cf02543..4c27032e 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -23,7 +23,7 @@ object Dependencies { val Icu4jVersion = "69.1" val javaOtpVersion = "0.3.0" val JsoupVersion = "1.14.3" - val JwtScalaVersion = "9.0.1" + val JwtScalaVersion = "9.0.2" val KindProjectorVersion = "0.10.3" val KittensVersion = "2.3.2" val LevigoJbig2Version = "2.0" From 30aa8193bc0138368aea697f64632e1b4d372af4 Mon Sep 17 00:00:00 2001 From: Scala Steward Date: Wed, 6 Oct 2021 06:15:08 +0200 Subject: [PATCH 19/75] Update fs2-core, fs2-io to 3.1.4 --- project/Dependencies.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 4c27032e..3cf091b3 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -16,7 +16,7 @@ object Dependencies { val EmilVersion = "0.10.0-M3" val FlexmarkVersion = "0.62.2" val FlywayVersion = "7.15.0" - val Fs2Version = "3.1.3" + val Fs2Version = "3.1.4" val Fs2CronVersion = "0.7.1" val H2Version = "1.4.200" val Http4sVersion = "0.23.4" From 5f7f24957953a59f18a87715dd92e3897fec1e9d Mon Sep 17 00:00:00 2001 From: Scala Steward Date: Wed, 6 Oct 2021 20:45:27 +0200 Subject: [PATCH 20/75] Update flyway-core to 8.0.0 --- project/Dependencies.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 3cf091b3..3cb99534 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -15,7 +15,7 @@ object Dependencies { val DoobieVersion = "1.0.0-RC1" val EmilVersion = "0.10.0-M3" val FlexmarkVersion = "0.62.2" - val FlywayVersion = "7.15.0" + val FlywayVersion = "8.0.0" val Fs2Version = "3.1.4" val Fs2CronVersion = "0.7.1" val H2Version = "1.4.200" From 2b17b9a1dbde23755b052ca5a0bfad7509804535 Mon Sep 17 00:00:00 2001 From: Scala Steward Date: Wed, 6 Oct 2021 20:45:34 +0200 Subject: [PATCH 21/75] Update sbt-scalajs, scalajs-compiler, ... to 1.7.1 --- project/plugins.sbt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/plugins.sbt b/project/plugins.sbt index bc7539f0..467c715d 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -9,6 +9,6 @@ addSbtPlugin("de.heikoseeberger" % "sbt-header" % "5.6.0") addSbtPlugin("io.kevinlee" % "sbt-github-pages" % "0.8.0") addSbtPlugin("io.spray" % "sbt-revolver" % "0.9.1") addSbtPlugin("org.portable-scala" % "sbt-scalajs-crossproject" % "1.1.0") -addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.7.0") +addSbtPlugin("org.scala-js" % "sbt-scalajs" % "1.7.1") addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.4.3") addSbtPlugin("org.xerial.sbt" % "sbt-sonatype" % "3.9.10") From 1e9a4ada5a23fe79e0d852de3e1967f1935c61f7 Mon Sep 17 00:00:00 2001 From: Scala Steward Date: Thu, 7 Oct 2021 14:30:25 +0200 Subject: [PATCH 22/75] Update sbt-git to 1.0.2 --- project/plugins.sbt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/plugins.sbt b/project/plugins.sbt index 467c715d..cfda993f 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -3,7 +3,7 @@ addSbtPlugin("com.eed3si9n" % "sbt-buildinfo" % "0.10.0") addSbtPlugin("com.github.eikek" % "sbt-openapi-schema" % "0.8.2") addSbtPlugin("com.github.sbt" % "sbt-pgp" % "2.1.2") addSbtPlugin("com.github.sbt" % "sbt-release" % "1.1.0") -addSbtPlugin("com.typesafe.sbt" % "sbt-git" % "1.0.1") +addSbtPlugin("com.typesafe.sbt" % "sbt-git" % "1.0.2") addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.8.1") addSbtPlugin("de.heikoseeberger" % "sbt-header" % "5.6.0") addSbtPlugin("io.kevinlee" % "sbt-github-pages" % "0.8.0") From 61a002247bf64fe059a2867bd792cc129d9b1025 Mon Sep 17 00:00:00 2001 From: Scala Steward Date: Thu, 7 Oct 2021 14:30:29 +0200 Subject: [PATCH 23/75] Update sbt-native-packager to 1.9.0 --- project/plugins.sbt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/plugins.sbt b/project/plugins.sbt index 467c715d..dc70ae68 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -4,7 +4,7 @@ addSbtPlugin("com.github.eikek" % "sbt-openapi-schema" % "0.8.2") addSbtPlugin("com.github.sbt" % "sbt-pgp" % "2.1.2") addSbtPlugin("com.github.sbt" % "sbt-release" % "1.1.0") addSbtPlugin("com.typesafe.sbt" % "sbt-git" % "1.0.1") -addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.8.1") +addSbtPlugin("com.github.sbt" % "sbt-native-packager" % "1.9.0") addSbtPlugin("de.heikoseeberger" % "sbt-header" % "5.6.0") addSbtPlugin("io.kevinlee" % "sbt-github-pages" % "0.8.0") addSbtPlugin("io.spray" % "sbt-revolver" % "0.9.1") From 082b33a7784ac500236219fdbffa205f201859ea Mon Sep 17 00:00:00 2001 From: Scala Steward Date: Thu, 7 Oct 2021 16:22:23 +0200 Subject: [PATCH 24/75] Update sbt-native-packager to 1.9.0 --- project/plugins.sbt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/plugins.sbt b/project/plugins.sbt index cfda993f..7c333b1c 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -4,7 +4,7 @@ addSbtPlugin("com.github.eikek" % "sbt-openapi-schema" % "0.8.2") addSbtPlugin("com.github.sbt" % "sbt-pgp" % "2.1.2") addSbtPlugin("com.github.sbt" % "sbt-release" % "1.1.0") addSbtPlugin("com.typesafe.sbt" % "sbt-git" % "1.0.2") -addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.8.1") +addSbtPlugin("com.github.sbt" % "sbt-native-packager" % "1.9.0") addSbtPlugin("de.heikoseeberger" % "sbt-header" % "5.6.0") addSbtPlugin("io.kevinlee" % "sbt-github-pages" % "0.8.0") addSbtPlugin("io.spray" % "sbt-revolver" % "0.9.1") From 6e29312f2970c9b680422540488befeeb39e71dc Mon Sep 17 00:00:00 2001 From: Scala Steward Date: Thu, 7 Oct 2021 18:21:10 +0200 Subject: [PATCH 25/75] Update sbt-native-packager to 1.9.5 --- project/plugins.sbt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/plugins.sbt b/project/plugins.sbt index 7c333b1c..fcdeed44 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -4,7 +4,7 @@ addSbtPlugin("com.github.eikek" % "sbt-openapi-schema" % "0.8.2") addSbtPlugin("com.github.sbt" % "sbt-pgp" % "2.1.2") addSbtPlugin("com.github.sbt" % "sbt-release" % "1.1.0") addSbtPlugin("com.typesafe.sbt" % "sbt-git" % "1.0.2") -addSbtPlugin("com.github.sbt" % "sbt-native-packager" % "1.9.0") +addSbtPlugin("com.github.sbt" % "sbt-native-packager" % "1.9.5") addSbtPlugin("de.heikoseeberger" % "sbt-header" % "5.6.0") addSbtPlugin("io.kevinlee" % "sbt-github-pages" % "0.8.0") addSbtPlugin("io.spray" % "sbt-revolver" % "0.9.1") From 26d4986bf4a659e8a5cebd3e1092d4ce9fea4014 Mon Sep 17 00:00:00 2001 From: Scala Steward Date: Fri, 8 Oct 2021 04:13:33 +0200 Subject: [PATCH 26/75] Update fs2-core, fs2-io to 3.1.5 --- project/Dependencies.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 3cb99534..272498be 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -16,7 +16,7 @@ object Dependencies { val EmilVersion = "0.10.0-M3" val FlexmarkVersion = "0.62.2" val FlywayVersion = "8.0.0" - val Fs2Version = "3.1.4" + val Fs2Version = "3.1.5" val Fs2CronVersion = "0.7.1" val H2Version = "1.4.200" val Http4sVersion = "0.23.4" From 23f7caa6d32cf81027445c34eddcdd839d7215ea Mon Sep 17 00:00:00 2001 From: Scala Steward Date: Wed, 13 Oct 2021 22:33:33 +0200 Subject: [PATCH 27/75] Update flyway-core to 8.0.1 --- project/Dependencies.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 272498be..35236d69 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -15,7 +15,7 @@ object Dependencies { val DoobieVersion = "1.0.0-RC1" val EmilVersion = "0.10.0-M3" val FlexmarkVersion = "0.62.2" - val FlywayVersion = "8.0.0" + val FlywayVersion = "8.0.1" val Fs2Version = "3.1.5" val Fs2CronVersion = "0.7.1" val H2Version = "1.4.200" From d820156fdc8a6af94d0dd0bde9f968de7b93987e Mon Sep 17 00:00:00 2001 From: Scala Steward Date: Thu, 14 Oct 2021 12:13:53 +0200 Subject: [PATCH 28/75] Update sbt-native-packager to 1.9.6 --- project/plugins.sbt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/plugins.sbt b/project/plugins.sbt index fcdeed44..905ec7db 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -4,7 +4,7 @@ addSbtPlugin("com.github.eikek" % "sbt-openapi-schema" % "0.8.2") addSbtPlugin("com.github.sbt" % "sbt-pgp" % "2.1.2") addSbtPlugin("com.github.sbt" % "sbt-release" % "1.1.0") addSbtPlugin("com.typesafe.sbt" % "sbt-git" % "1.0.2") -addSbtPlugin("com.github.sbt" % "sbt-native-packager" % "1.9.5") +addSbtPlugin("com.github.sbt" % "sbt-native-packager" % "1.9.6") addSbtPlugin("de.heikoseeberger" % "sbt-header" % "5.6.0") addSbtPlugin("io.kevinlee" % "sbt-github-pages" % "0.8.0") addSbtPlugin("io.spray" % "sbt-revolver" % "0.9.1") From 018fbb7ee22591db1050291ed97475fc00c3438c Mon Sep 17 00:00:00 2001 From: Scala Steward Date: Thu, 14 Oct 2021 22:24:57 +0200 Subject: [PATCH 29/75] Update swagger-ui to 3.52.5 --- project/Dependencies.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 35236d69..c40b51db 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -43,7 +43,7 @@ object Dependencies { val StanfordNlpVersion = "4.2.2" val TikaVersion = "2.1.0" val YamuscaVersion = "0.8.1" - val SwaggerUIVersion = "3.52.3" + val SwaggerUIVersion = "3.52.5" val TestContainerVersion = "0.39.8" val TwelveMonkeysVersion = "3.7.0" val JQueryVersion = "3.5.1" From f40e0660d015c3606ec623cfd4a42391a42237f2 Mon Sep 17 00:00:00 2001 From: Renovate Bot Date: Fri, 15 Oct 2021 16:01:53 +0000 Subject: [PATCH 30/75] Update actions/checkout action to v2.3.5 --- .github/workflows/ci.yml | 2 +- .github/workflows/docker-image.yml | 2 +- .github/workflows/release-nightly.yml | 2 +- .github/workflows/release.yml | 2 +- .github/workflows/website.yml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d8a25793..3450209c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -9,7 +9,7 @@ jobs: matrix: java: [ 'openjdk@1.11' ] steps: - - uses: actions/checkout@v2.3.4 + - uses: actions/checkout@v2.3.5 with: fetch-depth: 100 - uses: jorelali/setup-elm@v3 diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml index adb18852..b2e6adcb 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/docker-image.yml @@ -6,7 +6,7 @@ jobs: docker-images: runs-on: ubuntu-20.04 steps: - - uses: actions/checkout@v2.3.4 + - uses: actions/checkout@v2.3.5 with: fetch-depth: 0 - name: Set current version diff --git a/.github/workflows/release-nightly.yml b/.github/workflows/release-nightly.yml index e5f0f671..b20042d4 100644 --- a/.github/workflows/release-nightly.yml +++ b/.github/workflows/release-nightly.yml @@ -11,7 +11,7 @@ jobs: matrix: java: [ 'openjdk@1.11' ] steps: - - uses: actions/checkout@v2.3.4 + - uses: actions/checkout@v2.3.5 with: fetch-depth: 0 - uses: olafurpg/setup-scala@v13 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ba3ff89c..51ca8f75 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -11,7 +11,7 @@ jobs: matrix: java: [ 'openjdk@1.11' ] steps: - - uses: actions/checkout@v2.3.4 + - uses: actions/checkout@v2.3.5 with: fetch-depth: 0 - uses: olafurpg/setup-scala@v13 diff --git a/.github/workflows/website.yml b/.github/workflows/website.yml index d7185b3c..774da824 100644 --- a/.github/workflows/website.yml +++ b/.github/workflows/website.yml @@ -7,7 +7,7 @@ jobs: publish-website: runs-on: ubuntu-20.04 steps: - - uses: actions/checkout@v2.3.4 + - uses: actions/checkout@v2.3.5 with: fetch-depth: 0 - name: Set current version From 12cbdc653c812ea4c459fe34144cbf2c6caaf7b5 Mon Sep 17 00:00:00 2001 From: Scala Steward Date: Mon, 18 Oct 2021 02:17:48 +0200 Subject: [PATCH 31/75] Update fs2-core, fs2-io to 3.1.6 --- project/Dependencies.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index c40b51db..30923b66 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -16,7 +16,7 @@ object Dependencies { val EmilVersion = "0.10.0-M3" val FlexmarkVersion = "0.62.2" val FlywayVersion = "8.0.1" - val Fs2Version = "3.1.5" + val Fs2Version = "3.1.6" val Fs2CronVersion = "0.7.1" val H2Version = "1.4.200" val Http4sVersion = "0.23.4" From bb3bfc236c39d1b0684bfdabfb05ff8d393b7c85 Mon Sep 17 00:00:00 2001 From: Scala Steward Date: Mon, 18 Oct 2021 18:42:41 +0200 Subject: [PATCH 32/75] Update postgresql to 42.3.0 --- project/Dependencies.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index 30923b66..ad91dea3 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -35,7 +35,7 @@ object Dependencies { val OrganizeImportsVersion = "0.5.0" val PdfboxVersion = "2.0.24" val PoiVersion = "4.1.2" - val PostgresVersion = "42.2.24" + val PostgresVersion = "42.3.0" val PureConfigVersion = "0.17.0" val ScalaJavaTimeVersion = "2.3.0" val ScodecBitsVersion = "1.1.29" From 6a7913d13c97b238c9d9ffaa028834a502ef1851 Mon Sep 17 00:00:00 2001 From: Scala Steward Date: Thu, 21 Oct 2021 04:42:05 +0200 Subject: [PATCH 33/75] Update flyway-core to 8.0.2 --- project/Dependencies.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index ad91dea3..f4249d5d 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -15,7 +15,7 @@ object Dependencies { val DoobieVersion = "1.0.0-RC1" val EmilVersion = "0.10.0-M3" val FlexmarkVersion = "0.62.2" - val FlywayVersion = "8.0.1" + val FlywayVersion = "8.0.2" val Fs2Version = "3.1.6" val Fs2CronVersion = "0.7.1" val H2Version = "1.4.200" From 77b1e2fa563ed5bf907fa348c51078c9201be4de Mon Sep 17 00:00:00 2001 From: Scala Steward Date: Fri, 22 Oct 2021 00:24:58 +0200 Subject: [PATCH 34/75] Update testcontainers-scala-mariadb, ... to 0.39.9 --- project/Dependencies.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/Dependencies.scala b/project/Dependencies.scala index f4249d5d..c97cfd87 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -44,7 +44,7 @@ object Dependencies { val TikaVersion = "2.1.0" val YamuscaVersion = "0.8.1" val SwaggerUIVersion = "3.52.5" - val TestContainerVersion = "0.39.8" + val TestContainerVersion = "0.39.9" val TwelveMonkeysVersion = "3.7.0" val JQueryVersion = "3.5.1" val ViewerJSVersion = "0.5.9" From de1baf725f8e6b1e355b9319326b17dc85b96d00 Mon Sep 17 00:00:00 2001 From: eikek Date: Fri, 1 Oct 2021 01:42:20 +0200 Subject: [PATCH 35/75] Generate a query string given an expression Initialize share record and improve tests. --- .../main/scala/docspell/query/ItemQuery.scala | 8 +- .../docspell/query/ItemQueryParser.scala | 24 +- .../docspell/query/internal/BasicParser.scala | 2 +- .../docspell/query/internal/ExprString.scala | 244 +++++++++++++++ .../docspell/query/internal/ExprUtil.scala | 23 +- .../scala/docspell/query/ItemQueryGen.scala | 287 ++++++++++++++++++ .../query/internal/ExprStringTest.scala | 69 +++++ .../query/internal/ItemQueryParserTest.scala | 12 +- .../docspell/store/impl/DoobieMeta.scala | 6 + .../scala/docspell/store/records/RShare.scala | 59 ++++ 10 files changed, 718 insertions(+), 16 deletions(-) create mode 100644 modules/query/shared/src/main/scala/docspell/query/internal/ExprString.scala create mode 100644 modules/query/shared/src/test/scala/docspell/query/ItemQueryGen.scala create mode 100644 modules/query/shared/src/test/scala/docspell/query/internal/ExprStringTest.scala create mode 100644 modules/store/src/main/scala/docspell/store/records/RShare.scala diff --git a/modules/query/shared/src/main/scala/docspell/query/ItemQuery.scala b/modules/query/shared/src/main/scala/docspell/query/ItemQuery.scala index 0fc73acb..be0e5135 100644 --- a/modules/query/shared/src/main/scala/docspell/query/ItemQuery.scala +++ b/modules/query/shared/src/main/scala/docspell/query/ItemQuery.scala @@ -123,9 +123,11 @@ object ItemQuery { final case class ChecksumMatch(checksum: String) extends Expr final case class AttachId(id: String) extends Expr - final case object ValidItemStates extends Expr - final case object Trashed extends Expr - final case object ValidItemsOrTrashed extends Expr + /** A "private" expression is only visible in code, but cannot be parsed. */ + sealed trait PrivateExpr extends Expr + final case object ValidItemStates extends PrivateExpr + final case object Trashed extends PrivateExpr + final case object ValidItemsOrTrashed extends PrivateExpr // things that can be expressed with terms above sealed trait MacroExpr extends Expr { diff --git a/modules/query/shared/src/main/scala/docspell/query/ItemQueryParser.scala b/modules/query/shared/src/main/scala/docspell/query/ItemQueryParser.scala index c4c17801..d571cf63 100644 --- a/modules/query/shared/src/main/scala/docspell/query/ItemQueryParser.scala +++ b/modules/query/shared/src/main/scala/docspell/query/ItemQueryParser.scala @@ -8,12 +8,23 @@ package docspell.query import cats.data.NonEmptyList -import docspell.query.internal.ExprParser -import docspell.query.internal.ExprUtil +import docspell.query.internal.{ExprParser, ExprString, ExprUtil} object ItemQueryParser { + val PrivateExprError = ExprString.PrivateExprError + type PrivateExprError = ExprString.PrivateExprError + def parse(input: String): Either[ParseFailure, ItemQuery] = + parse0(input, expandMacros = true) + + def parseKeepMacros(input: String): Either[ParseFailure, ItemQuery] = + parse0(input, expandMacros = false) + + private def parse0( + input: String, + expandMacros: Boolean + ): Either[ParseFailure, ItemQuery] = if (input.isEmpty) Left( ParseFailure("", 0, NonEmptyList.of(ParseFailure.SimpleMessage(0, "No input."))) @@ -24,9 +35,16 @@ object ItemQueryParser { .parseQuery(in) .left .map(ParseFailure.fromError(in)) - .map(q => q.copy(expr = ExprUtil.reduce(q.expr))) + .map(q => q.copy(expr = ExprUtil.reduce(expandMacros)(q.expr))) } def parseUnsafe(input: String): ItemQuery = parse(input).fold(m => sys.error(m.render), identity) + + def asString(q: ItemQuery.Expr): Either[PrivateExprError, String] = + ExprString(q) + + def unsafeAsString(q: ItemQuery.Expr): String = + asString(q).fold(f => sys.error(s"Cannot expose private query part: $f"), identity) + } diff --git a/modules/query/shared/src/main/scala/docspell/query/internal/BasicParser.scala b/modules/query/shared/src/main/scala/docspell/query/internal/BasicParser.scala index fd2d9207..48bd98df 100644 --- a/modules/query/shared/src/main/scala/docspell/query/internal/BasicParser.scala +++ b/modules/query/shared/src/main/scala/docspell/query/internal/BasicParser.scala @@ -24,7 +24,7 @@ object BasicParser { ) private[this] val identChars: Set[Char] = - (('A' to 'Z') ++ ('a' to 'z') ++ ('0' to '9') ++ "-_.").toSet + (('A' to 'Z') ++ ('a' to 'z') ++ ('0' to '9') ++ "-_.@").toSet val parenAnd: P[Unit] = P.stringIn(List("(&", "(and")).void <* ws0 diff --git a/modules/query/shared/src/main/scala/docspell/query/internal/ExprString.scala b/modules/query/shared/src/main/scala/docspell/query/internal/ExprString.scala new file mode 100644 index 00000000..d3c5def4 --- /dev/null +++ b/modules/query/shared/src/main/scala/docspell/query/internal/ExprString.scala @@ -0,0 +1,244 @@ +/* + * Copyright 2020 Eike K. & Contributors + * + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +package docspell.query.internal + +import java.time.Period + +import docspell.query.Date +import docspell.query.Date.DateLiteral +import docspell.query.ItemQuery.Attr._ +import docspell.query.ItemQuery.Expr._ +import docspell.query.ItemQuery._ +import docspell.query.internal.{Constants => C} + +/** Creates the string representation for a given expression. The returned string can be + * parsed back to the expression using `ExprParser`. Note that expressions obtained from + * the `ItemQueryParser` have macros already expanded. + * + * It may fail when the expression contains non-public parts. Every expression that has + * been created by parsing a string, can be transformed back to a string. But an + * expression created via code may contain parts that cannot be transformed to a string. + */ +object ExprString { + + final case class PrivateExprError(expr: Expr.PrivateExpr) + type Result = Either[PrivateExprError, String] + + def apply(expr: Expr): Result = + expr match { + case AndExpr(inner) => + val es = inner.traverse(ExprString.apply) + es.map(_.toList.mkString(" ")).map(els => s"(& $els )") + + case OrExpr(inner) => + val es = inner.traverse(ExprString.apply) + es.map(_.toList.mkString(" ")).map(els => s"(| $els )") + + case NotExpr(inner) => + inner match { + case NotExpr(inner2) => + apply(inner2) + case _ => + apply(inner).map(n => s"!$n") + } + + case m: MacroExpr => + Right(macroStr(m)) + + case DirectionExpr(v) => + Right(s"${C.incoming}${C.like}${v}") + + case InboxExpr(v) => + Right(s"${C.inbox}${C.like}${v}") + + case InExpr(attr, values) => + val els = values.map(quote).toList.mkString(",") + Right(s"${attrStr(attr)}${C.in}$els") + + case InDateExpr(attr, values) => + val els = values.map(dateStr).toList.mkString(",") + Right(s"${attrStr(attr)}${C.in}$els") + + case TagsMatch(op, values) => + val els = values.map(quote).toList.mkString(",") + Right(s"${C.tag}${tagOpStr(op)}$els") + + case TagIdsMatch(op, values) => + val els = values.map(quote).toList.mkString(",") + Right(s"${C.tagId}${tagOpStr(op)}$els") + + case Exists(field) => + Right(s"${C.exist}${C.like}${attrStr(field)}") + + case Fulltext(v) => + Right(s"${C.content}${C.like}${quote(v)}") + + case SimpleExpr(op, prop) => + prop match { + case Property.StringProperty(attr, value) => + Right(s"${stringAttr(attr)}${opStr(op)}${quote(value)}") + case Property.DateProperty(attr, value) => + Right(s"${dateAttr(attr)}${opStr(op)}${dateStr(value)}") + case Property.IntProperty(attr, value) => + Right(s"${attrStr(attr)}${opStr(op)}$value") + } + + case TagCategoryMatch(op, values) => + val els = values.map(quote).toList.mkString(",") + Right(s"${C.cat}${tagOpStr(op)}$els") + + case CustomFieldMatch(name, op, value) => + Right(s"${C.customField}:$name${opStr(op)}${quote(value)}") + + case CustomFieldIdMatch(id, op, value) => + Right(s"${C.customFieldId}:$id${opStr(op)}${quote(value)}") + + case ChecksumMatch(cs) => + Right(s"${C.checksum}${C.like}$cs") + + case AttachId(aid) => + Right(s"${C.attachId}${C.eqs}$aid") + + case pe: PrivateExpr => + // There is no parser equivalent for this + Left(PrivateExprError(pe)) + } + + private[internal] def macroStr(expr: Expr.MacroExpr): String = + expr match { + case Expr.NamesMacro(name) => + s"${C.names}:${quote(name)}" + case Expr.YearMacro(_, year) => + s"${C.year}:$year" //currently, only for Attr.Date + case Expr.ConcMacro(term) => + s"${C.conc}:${quote(term)}" + case Expr.CorrMacro(term) => + s"${C.corr}:${quote(term)}" + case Expr.DateRangeMacro(attr, left, right) => + val name = attr match { + case Attr.CreatedDate => + C.createdIn + case Attr.Date => + C.dateIn + case Attr.DueDate => + C.dueIn + } + (left, right) match { + case (_: Date.DateLiteral, Date.Calc(date, calc, period)) => + s"$name:${dateStr(date)};${calcStr(calc)}${periodStr(period)}" + + case (Date.Calc(date, calc, period), _: DateLiteral) => + s"$name:${dateStr(date)};${calcStr(calc)}${periodStr(period)}" + + case (Date.Calc(d1, _, p1), Date.Calc(_, _, _)) => + s"$name:${dateStr(d1)};/${periodStr(p1)}" + + case (_: DateLiteral, _: DateLiteral) => + sys.error("Invalid date range") + } + } + + private[internal] def dateStr(date: Date): String = + date match { + case Date.Today => + "today" + case Date.Local(ld) => + f"${ld.getYear}-${ld.getMonthValue}%02d-${ld.getDayOfMonth}%02d" + + case Date.Millis(ms) => + s"ms$ms" + + case Date.Calc(date, calc, period) => + val ds = dateStr(date) + s"$ds;${calcStr(calc)}${periodStr(period)}" + } + + private[internal] def calcStr(c: Date.CalcDirection): String = + c match { + case Date.CalcDirection.Plus => "+" + case Date.CalcDirection.Minus => "-" + } + + private[internal] def periodStr(p: Period): String = + if (p.toTotalMonths == 0) s"${p.getDays}d" + else s"${p.toTotalMonths}m" + + private[internal] def attrStr(attr: Attr): String = + attr match { + case a: StringAttr => stringAttr(a) + case a: DateAttr => dateAttr(a) + case a: IntAttr => intAttr(a) + } + + private[internal] def intAttr(attr: IntAttr): String = + attr match { + case AttachCount => + Constants.attachCount + } + + private[internal] def dateAttr(attr: DateAttr): String = + attr match { + case Attr.Date => + Constants.date + case DueDate => + Constants.due + case CreatedDate => + Constants.created + } + + private[internal] def stringAttr(attr: StringAttr): String = + attr match { + case Attr.ItemName => + Constants.name + case Attr.ItemId => + Constants.id + case Attr.ItemSource => + Constants.source + case Attr.ItemNotes => + Constants.notes + case Correspondent.OrgId => + Constants.corrOrgId + case Correspondent.OrgName => + Constants.corrOrgName + case Correspondent.PersonId => + Constants.corrPersId + case Correspondent.PersonName => + Constants.corrPersName + case Concerning.EquipId => + Constants.concEquipId + case Concerning.EquipName => + Constants.concEquipName + case Concerning.PersonId => + Constants.concPersId + case Concerning.PersonName => + Constants.concPersName + case Folder.FolderName => + Constants.folder + case Folder.FolderId => + Constants.folderId + } + + private[internal] def opStr(op: Operator): String = + op match { + case Operator.Like => Constants.like.toString + case Operator.Gte => Constants.gte + case Operator.Lte => Constants.lte + case Operator.Eq => Constants.eqs.toString + case Operator.Lt => Constants.lt.toString + case Operator.Gt => Constants.gt.toString + case Operator.Neq => Constants.neq + } + + private[internal] def tagOpStr(op: TagOperator): String = + op match { + case TagOperator.AllMatch => C.eqs.toString + case TagOperator.AnyMatch => C.like.toString + } + + private def quote(s: String): String = + s"\"$s\"" +} diff --git a/modules/query/shared/src/main/scala/docspell/query/internal/ExprUtil.scala b/modules/query/shared/src/main/scala/docspell/query/internal/ExprUtil.scala index 4f985be5..6b22ef96 100644 --- a/modules/query/shared/src/main/scala/docspell/query/internal/ExprUtil.scala +++ b/modules/query/shared/src/main/scala/docspell/query/internal/ExprUtil.scala @@ -13,35 +13,42 @@ import docspell.query.ItemQuery._ object ExprUtil { + def reduce(expr: Expr): Expr = + reduce(expandMacros = true)(expr) + /** Does some basic transformation, like unfolding nested and trees containing one value * etc. */ - def reduce(expr: Expr): Expr = + def reduce(expandMacros: Boolean)(expr: Expr): Expr = expr match { case AndExpr(inner) => val nodes = spliceAnd(inner) - if (nodes.tail.isEmpty) reduce(nodes.head) - else AndExpr(nodes.map(reduce)) + if (nodes.tail.isEmpty) reduce(expandMacros)(nodes.head) + else AndExpr(nodes.map(reduce(expandMacros))) case OrExpr(inner) => val nodes = spliceOr(inner) - if (nodes.tail.isEmpty) reduce(nodes.head) - else OrExpr(nodes.map(reduce)) + if (nodes.tail.isEmpty) reduce(expandMacros)(nodes.head) + else OrExpr(nodes.map(reduce(expandMacros))) case NotExpr(inner) => inner match { case NotExpr(inner2) => - reduce(inner2) + reduce(expandMacros)(inner2) case InboxExpr(flag) => InboxExpr(!flag) case DirectionExpr(flag) => DirectionExpr(!flag) case _ => - NotExpr(reduce(inner)) + NotExpr(reduce(expandMacros)(inner)) } case m: MacroExpr => - reduce(m.body) + if (expandMacros) { + reduce(expandMacros)(m.body) + } else { + m + } case DirectionExpr(_) => expr diff --git a/modules/query/shared/src/test/scala/docspell/query/ItemQueryGen.scala b/modules/query/shared/src/test/scala/docspell/query/ItemQueryGen.scala new file mode 100644 index 00000000..4f6a6982 --- /dev/null +++ b/modules/query/shared/src/test/scala/docspell/query/ItemQueryGen.scala @@ -0,0 +1,287 @@ +/* + * Copyright 2020 Eike K. & Contributors + * + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +package docspell.query + +import java.time.{Instant, Period, ZoneOffset} + +import cats.data.NonEmptyList + +import docspell.query.ItemQuery.Expr.TagIdsMatch +import docspell.query.ItemQuery._ + +import org.scalacheck.Gen + +/** Generator for syntactically valid queries. */ +object ItemQueryGen { + + def exprGen: Gen[Expr] = + Gen.oneOf( + simpleExprGen, + existsExprGen, + inExprGen, + inDateExprGen, + inboxExprGen, + directionExprGen, + tagIdsMatchExprGen, + tagMatchExprGen, + tagCatMatchExpr, + customFieldMatchExprGen, + customFieldIdMatchExprGen, + fulltextExprGen, + checksumMatchExprGen, + attachIdExprGen, + namesMacroGen, + corrMacroGen, + concMacroGen, + yearMacroGen, + dateRangeMacro, + Gen.lzy(andExprGen(exprGen)), + Gen.lzy(orExprGen(exprGen)), + Gen.lzy(notExprGen(exprGen)) + ) + + def andExprGen(g: Gen[Expr]): Gen[Expr.AndExpr] = + nelGen(g).map(Expr.AndExpr) + + def orExprGen(g: Gen[Expr]): Gen[Expr.OrExpr] = + nelGen(g).map(Expr.OrExpr) + + // avoid generating nested not expressions, they are already flattened by the parser + // and only occur artificially + def notExprGen(g: Gen[Expr]): Gen[Expr] = + g.map { + case Expr.NotExpr(inner) => inner + case e => Expr.NotExpr(e) + } + + val opGen: Gen[Operator] = + Gen.oneOf( + Operator.Like, + Operator.Gte, + Operator.Lt, + Operator.Gt, + Operator.Lte, + Operator.Eq, + Operator.Neq + ) + + val tagOpGen: Gen[TagOperator] = + Gen.oneOf(TagOperator.AllMatch, TagOperator.AnyMatch) + + val stringAttrGen: Gen[Attr.StringAttr] = + Gen.oneOf( + Attr.Concerning.EquipName, + Attr.Concerning.EquipId, + Attr.Concerning.PersonName, + Attr.Concerning.PersonId, + Attr.Correspondent.OrgName, + Attr.Correspondent.OrgId, + Attr.Correspondent.PersonName, + Attr.Correspondent.PersonId, + Attr.ItemId, + Attr.ItemName, + Attr.ItemSource, + Attr.ItemNotes, + Attr.Folder.FolderId, + Attr.Folder.FolderName + ) + + val dateAttrGen: Gen[Attr.DateAttr] = + Gen.oneOf(Attr.Date, Attr.DueDate, Attr.CreatedDate) + + val intAttrGen: Gen[Attr.IntAttr] = + Gen.const(Attr.AttachCount) + + val attrGen: Gen[Attr] = + Gen.oneOf(stringAttrGen, dateAttrGen, intAttrGen) + + private val valueChars = + Gen.oneOf(Gen.alphaNumChar, Gen.oneOf(" /{}*?-:@#$~+%…_[]^!ß")) + + private val stringValueGen: Gen[String] = + Gen.choose(1, 20).flatMap(n => Gen.stringOfN(n, valueChars)) + + private val intValueGen: Gen[Int] = + Gen.choose(1900, 9999) + + private val identGen: Gen[String] = + Gen + .choose(3, 12) + .flatMap(n => + Gen.stringOfN( + n, + Gen.oneOf((('A' to 'Z') ++ ('a' to 'z') ++ ('0' to '9') ++ "-_.@").toSet) + ) + ) + + private def nelGen[T](gen: Gen[T]): Gen[NonEmptyList[T]] = + for { + head <- gen + tail <- Gen.choose(0, 9).flatMap(n => Gen.listOfN(n, gen)) + } yield NonEmptyList(head, tail) + + private val dateMillisGen: Gen[Long] = + Gen.choose(0, Instant.parse("2100-12-24T20:00:00Z").toEpochMilli) + + val localDateGen: Gen[Date.Local] = + dateMillisGen + .map(ms => Instant.ofEpochMilli(ms).atOffset(ZoneOffset.UTC).toLocalDate) + .map(Date.Local) + + val millisDateGen: Gen[Date.Millis] = + dateMillisGen.map(Date.Millis) + + val dateLiteralGen: Gen[Date.DateLiteral] = + Gen.oneOf( + localDateGen, + millisDateGen, + Gen.const(Date.Today) + ) + + val periodGen: Gen[Period] = + for { + mOrD <- Gen.oneOf(a => Period.ofDays(a), a => Period.ofMonths(a)) + num <- Gen.choose(1, 30) + } yield mOrD(num) + + val calcGen: Gen[Date.CalcDirection] = + Gen.oneOf(Date.CalcDirection.Plus, Date.CalcDirection.Minus) + + val dateCalcGen: Gen[Date.Calc] = + for { + dl <- dateLiteralGen + calc <- calcGen + period <- periodGen + } yield Date.Calc(dl, calc, period) + + val dateValueGen: Gen[Date] = + Gen.oneOf(dateLiteralGen, dateCalcGen) + + val stringPropGen: Gen[Property.StringProperty] = + for { + attr <- stringAttrGen + sval <- stringValueGen + } yield Property.StringProperty(attr, sval) + + val intPropGen: Gen[Property.IntProperty] = + for { + attr <- intAttrGen + ival <- intValueGen + } yield Property.IntProperty(attr, ival) + + val datePropGen: Gen[Property.DateProperty] = + for { + attr <- dateAttrGen + dv <- dateValueGen + } yield Property.DateProperty(attr, dv) + + val propertyGen: Gen[Property] = + Gen.oneOf(stringPropGen, datePropGen, intPropGen) + + val simpleExprGen: Gen[Expr.SimpleExpr] = + for { + op <- opGen + prop <- propertyGen + } yield Expr.SimpleExpr(op, prop) + + val existsExprGen: Gen[Expr.Exists] = + attrGen.map(Expr.Exists) + + val inExprGen: Gen[Expr.InExpr] = + for { + attr <- stringAttrGen + vals <- nelGen(stringValueGen) + } yield Expr.InExpr(attr, vals) + + val inDateExprGen: Gen[Expr.InDateExpr] = + for { + attr <- dateAttrGen + vals <- nelGen(dateValueGen) + } yield Expr.InDateExpr(attr, vals) + + val inboxExprGen: Gen[Expr.InboxExpr] = + Gen.oneOf(true, false).map(Expr.InboxExpr) + + val directionExprGen: Gen[Expr.DirectionExpr] = + Gen.oneOf(true, false).map(Expr.DirectionExpr) + + val tagIdsMatchExprGen: Gen[Expr.TagIdsMatch] = + for { + op <- tagOpGen + vals <- nelGen(stringValueGen) + } yield TagIdsMatch(op, vals) + + val tagMatchExprGen: Gen[Expr.TagsMatch] = + for { + op <- tagOpGen + vals <- nelGen(stringValueGen) + } yield Expr.TagsMatch(op, vals) + + val tagCatMatchExpr: Gen[Expr.TagCategoryMatch] = + for { + op <- tagOpGen + vals <- nelGen(stringValueGen) + } yield Expr.TagCategoryMatch(op, vals) + + val customFieldMatchExprGen: Gen[Expr.CustomFieldMatch] = + for { + name <- identGen + op <- opGen + value <- stringValueGen + } yield Expr.CustomFieldMatch(name, op, value) + + val customFieldIdMatchExprGen: Gen[Expr.CustomFieldIdMatch] = + for { + name <- identGen + op <- opGen + value <- identGen + } yield Expr.CustomFieldIdMatch(name, op, value) + + val fulltextExprGen: Gen[Expr.Fulltext] = + Gen + .choose(3, 20) + .flatMap(n => Gen.stringOfN(n, valueChars)) + .map(Expr.Fulltext) + + val checksumMatchExprGen: Gen[Expr.ChecksumMatch] = + Gen.stringOfN(64, Gen.hexChar).map(Expr.ChecksumMatch) + + val attachIdExprGen: Gen[Expr.AttachId] = + identGen.map(Expr.AttachId) + + val namesMacroGen: Gen[Expr.NamesMacro] = + stringValueGen.map(Expr.NamesMacro) + + val concMacroGen: Gen[Expr.ConcMacro] = + stringValueGen.map(Expr.ConcMacro) + + val corrMacroGen: Gen[Expr.CorrMacro] = + stringValueGen.map(Expr.CorrMacro) + + val yearMacroGen: Gen[Expr.YearMacro] = + Gen.choose(1900, 9999).map(Expr.YearMacro(Attr.Date, _)) + + val dateRangeMacro: Gen[Expr.DateRangeMacro] = + for { + attr <- dateAttrGen + dl <- dateLiteralGen + p <- periodGen + calc <- Gen.option(calcGen) + range = calc match { + case Some(c @ Date.CalcDirection.Plus) => + Expr.DateRangeMacro(attr, dl, Date.Calc(dl, c, p)) + case Some(c @ Date.CalcDirection.Minus) => + Expr.DateRangeMacro(attr, Date.Calc(dl, c, p), dl) + case None => + Expr.DateRangeMacro( + attr, + Date.Calc(dl, Date.CalcDirection.Minus, p), + Date.Calc(dl, Date.CalcDirection.Plus, p) + ) + } + } yield range +} diff --git a/modules/query/shared/src/test/scala/docspell/query/internal/ExprStringTest.scala b/modules/query/shared/src/test/scala/docspell/query/internal/ExprStringTest.scala new file mode 100644 index 00000000..99fe673f --- /dev/null +++ b/modules/query/shared/src/test/scala/docspell/query/internal/ExprStringTest.scala @@ -0,0 +1,69 @@ +/* + * Copyright 2020 Eike K. & Contributors + * + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +package docspell.query.internal + +import java.time.{LocalDate, Period} + +import docspell.query.ItemQuery._ +import docspell.query.{Date, ItemQueryGen, ParseFailure} + +import munit.{FunSuite, ScalaCheckSuite} +import org.scalacheck.Prop.forAll + +class ExprStringTest extends FunSuite with ScalaCheckSuite { + + // parses the query without reducing and expanding macros + def singleParse(s: String): Expr = + ExprParser + .parseQuery(s) + .left + .map(ParseFailure.fromError(s)) + .fold(f => sys.error(f.render), _.expr) + + def exprString(expr: Expr): String = + ExprString(expr).fold(f => sys.error(f.toString), identity) + + test("macro: name") { + val str = exprString(Expr.NamesMacro("test")) + val q = singleParse(str) + assertEquals(str, "names:\"test\"") + assertEquals(q, Expr.NamesMacro("test")) + } + + test("macro: year") { + val str = exprString(Expr.YearMacro(Attr.Date, 1990)) + val q = singleParse(str) + assertEquals(str, "year:1990") + assertEquals(q, Expr.YearMacro(Attr.Date, 1990)) + } + + test("macro: daterange") { + val range = Expr.DateRangeMacro( + attr = Attr.Date, + left = Date.Calc( + date = Date.Local( + date = LocalDate.of(2076, 12, 9) + ), + calc = Date.CalcDirection.Minus, + period = Period.ofMonths(27) + ), + right = Date.Local(LocalDate.of(2076, 12, 9)) + ) + val str = exprString(range) + val q = singleParse(str) + assertEquals(str, "dateIn:2076-12-09;-27m") + assertEquals(q, range) + } + + property("generate expr and parse it") { + forAll(ItemQueryGen.exprGen) { expr => + val str = exprString(expr) + val q = singleParse(str) + assertEquals(q, expr) + } + } +} diff --git a/modules/query/shared/src/test/scala/docspell/query/internal/ItemQueryParserTest.scala b/modules/query/shared/src/test/scala/docspell/query/internal/ItemQueryParserTest.scala index 37de9db0..3326a764 100644 --- a/modules/query/shared/src/test/scala/docspell/query/internal/ItemQueryParserTest.scala +++ b/modules/query/shared/src/test/scala/docspell/query/internal/ItemQueryParserTest.scala @@ -8,7 +8,7 @@ package docspell.query.internal import cats.implicits._ -import docspell.query.ItemQueryParser +import docspell.query.{ItemQuery, ItemQueryParser} import munit._ @@ -64,4 +64,14 @@ class ItemQueryParserTest extends FunSuite { ItemQueryParser.parseUnsafe("(| name:hello date:2021-02 name:world name:hello )") assertEquals(expect.copy(raw = raw.some), q) } + + test("f.id:name=value") { + val raw = "f.id:QsuGW@=\"dAHBstXJd0\"" + val q = ItemQueryParser.parseUnsafe(raw) + val expect = + ItemQuery.Expr.CustomFieldIdMatch("QsuGW@", ItemQuery.Operator.Eq, "dAHBstXJd0") + + assertEquals(q.expr, expect) + + } } diff --git a/modules/store/src/main/scala/docspell/store/impl/DoobieMeta.scala b/modules/store/src/main/scala/docspell/store/impl/DoobieMeta.scala index 1d69da70..4c94b1c2 100644 --- a/modules/store/src/main/scala/docspell/store/impl/DoobieMeta.scala +++ b/modules/store/src/main/scala/docspell/store/impl/DoobieMeta.scala @@ -11,6 +11,7 @@ import java.time.{Instant, LocalDate} import docspell.common._ import docspell.common.syntax.all._ +import docspell.query.{ItemQuery, ItemQueryParser} import docspell.totp.Key import com.github.eikek.calev.CalEvent @@ -142,6 +143,11 @@ trait DoobieMeta extends EmilDoobieMeta { implicit val metaByteSize: Meta[ByteSize] = Meta[Long].timap(ByteSize.apply)(_.bytes) + + implicit val metaItemQuery: Meta[ItemQuery] = + Meta[String].timap(s => ItemQueryParser.parseUnsafe(s))(q => + q.raw.getOrElse(ItemQueryParser.unsafeAsString(q.expr)) + ) } object DoobieMeta extends DoobieMeta { diff --git a/modules/store/src/main/scala/docspell/store/records/RShare.scala b/modules/store/src/main/scala/docspell/store/records/RShare.scala new file mode 100644 index 00000000..72f67de7 --- /dev/null +++ b/modules/store/src/main/scala/docspell/store/records/RShare.scala @@ -0,0 +1,59 @@ +/* + * Copyright 2020 Eike K. & Contributors + * + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +package docspell.store.records + +import cats.data.NonEmptyList + +import docspell.common._ +import docspell.query.ItemQuery +import docspell.store.qb._ + +final case class RShare( + id: Ident, + cid: Ident, + query: ItemQuery, + enabled: Boolean, + password: Option[Password], + publishedAt: Timestamp, + publishedUntil: Timestamp, + views: Int, + lastAccess: Option[Timestamp] +) {} + +object RShare { + + final case class Table(alias: Option[String]) extends TableDef { + val tableName = "item_share"; + + val id = Column[Ident]("id", this) + val cid = Column[Ident]("cid", this) + val query = Column[ItemQuery]("query", this) + val enabled = Column[Boolean]("enabled", this) + val password = Column[Password]("password", this) + val publishedAt = Column[Timestamp]("published_at", this) + val publishedUntil = Column[Timestamp]("published_until", this) + val views = Column[Int]("views", this) + val lastAccess = Column[Timestamp]("last_access", this) + + val all: NonEmptyList[Column[_]] = + NonEmptyList.of( + id, + cid, + query, + enabled, + password, + publishedAt, + publishedUntil, + views, + lastAccess + ) + } + + val T: Table = Table(None) + def as(alias: String): Table = Table(Some(alias)) + +} From c7d587bea404a7dc31e13a7c9adbfcaf15410547 Mon Sep 17 00:00:00 2001 From: eikek Date: Sat, 2 Oct 2021 15:16:02 +0200 Subject: [PATCH 36/75] Basic management of shares --- build.sbt | 15 +- .../scala/docspell/backend/BackendApp.scala | 3 + .../scala/docspell/backend/ops/OShare.scala | 116 ++++++ .../scala/docspell/common/Timestamp.scala | 3 + .../src/main/resources/docspell-openapi.yml | 178 ++++++++- .../restapi/codec/ItemQueryJson.scala | 24 ++ .../docspell/restserver/RestServer.scala | 1 + .../restserver/routes/ShareRoutes.scala | 105 ++++++ .../db/migration/h2/V1.27.1__item_share.sql | 13 + .../migration/mariadb/V1.27.1__item_share.sql | 13 + .../postgresql/V1.27.1__item_share.sql | 13 + .../src/main/scala/docspell/store/Store.scala | 2 + .../scala/docspell/store/impl/StoreImpl.scala | 5 + .../scala/docspell/store/records/RShare.scala | 62 +++- modules/webapp/src/main/elm/Api.elm | 59 +++ .../webapp/src/main/elm/Comp/DatePicker.elm | 2 +- .../webapp/src/main/elm/Comp/ShareForm.elm | 282 ++++++++++++++ .../webapp/src/main/elm/Comp/ShareManage.elm | 349 ++++++++++++++++++ .../webapp/src/main/elm/Comp/ShareTable.elm | 87 +++++ modules/webapp/src/main/elm/Data/Icons.elm | 20 +- .../src/main/elm/Messages/Comp/ShareForm.elm | 46 +++ .../main/elm/Messages/Comp/ShareManage.elm | 74 ++++ .../src/main/elm/Messages/Comp/ShareTable.elm | 42 +++ .../elm/Messages/Page/CollectiveSettings.elm | 7 + .../main/elm/Page/CollectiveSettings/Data.elm | 9 + .../elm/Page/CollectiveSettings/Update.elm | 11 + .../elm/Page/CollectiveSettings/View2.elm | 30 ++ 27 files changed, 1551 insertions(+), 20 deletions(-) create mode 100644 modules/backend/src/main/scala/docspell/backend/ops/OShare.scala create mode 100644 modules/restapi/src/main/scala/docspell/restapi/codec/ItemQueryJson.scala create mode 100644 modules/restserver/src/main/scala/docspell/restserver/routes/ShareRoutes.scala create mode 100644 modules/store/src/main/resources/db/migration/h2/V1.27.1__item_share.sql create mode 100644 modules/store/src/main/resources/db/migration/mariadb/V1.27.1__item_share.sql create mode 100644 modules/store/src/main/resources/db/migration/postgresql/V1.27.1__item_share.sql create mode 100644 modules/webapp/src/main/elm/Comp/ShareForm.elm create mode 100644 modules/webapp/src/main/elm/Comp/ShareManage.elm create mode 100644 modules/webapp/src/main/elm/Comp/ShareTable.elm create mode 100644 modules/webapp/src/main/elm/Messages/Comp/ShareForm.elm create mode 100644 modules/webapp/src/main/elm/Messages/Comp/ShareManage.elm create mode 100644 modules/webapp/src/main/elm/Messages/Comp/ShareTable.elm diff --git a/build.sbt b/build.sbt index c4837e71..9e1b0777 100644 --- a/build.sbt +++ b/build.sbt @@ -260,6 +260,18 @@ val openapiScalaSettings = Seq( .copy(typeDef = TypeDef("AccountSource", Imports("docspell.common.AccountSource")) ) + case "itemquery" => + field => + field + .copy(typeDef = + TypeDef( + "ItemQuery", + Imports( + "docspell.query.ItemQuery", + "docspell.restapi.codec.ItemQueryJson._" + ) + ) + ) }) ) @@ -367,6 +379,7 @@ val store = project .settings(testSettingsMUnit) .settings( name := "docspell-store", + addCompilerPlugin(Dependencies.kindProjectorPlugin), libraryDependencies ++= Dependencies.doobie ++ Dependencies.binny ++ @@ -472,7 +485,7 @@ val restapi = project openapiSpec := (Compile / resourceDirectory).value / "docspell-openapi.yml", openapiStaticGen := OpenApiDocGenerator.Redoc ) - .dependsOn(common) + .dependsOn(common, query.jvm) val joexapi = project .in(file("modules/joexapi")) diff --git a/modules/backend/src/main/scala/docspell/backend/BackendApp.scala b/modules/backend/src/main/scala/docspell/backend/BackendApp.scala index fd12ec40..5a6fa482 100644 --- a/modules/backend/src/main/scala/docspell/backend/BackendApp.scala +++ b/modules/backend/src/main/scala/docspell/backend/BackendApp.scala @@ -48,6 +48,7 @@ trait BackendApp[F[_]] { def simpleSearch: OSimpleSearch[F] def clientSettings: OClientSettings[F] def totp: OTotp[F] + def share: OShare[F] } object BackendApp { @@ -85,6 +86,7 @@ object BackendApp { customFieldsImpl <- OCustomFields(store) simpleSearchImpl = OSimpleSearch(fulltextImpl, itemSearchImpl) clientSettingsImpl <- OClientSettings(store) + shareImpl <- Resource.pure(OShare(store)) } yield new BackendApp[F] { val login = loginImpl val signup = signupImpl @@ -107,6 +109,7 @@ object BackendApp { val simpleSearch = simpleSearchImpl val clientSettings = clientSettingsImpl val totp = totpImpl + val share = shareImpl } def apply[F[_]: Async]( diff --git a/modules/backend/src/main/scala/docspell/backend/ops/OShare.scala b/modules/backend/src/main/scala/docspell/backend/ops/OShare.scala new file mode 100644 index 00000000..68b86f11 --- /dev/null +++ b/modules/backend/src/main/scala/docspell/backend/ops/OShare.scala @@ -0,0 +1,116 @@ +/* + * Copyright 2020 Eike K. & Contributors + * + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +package docspell.backend.ops + +import cats.data.OptionT +import cats.effect._ +import cats.implicits._ + +import docspell.backend.PasswordCrypt +import docspell.common._ +import docspell.query.ItemQuery +import docspell.store.Store +import docspell.store.records.RShare + +trait OShare[F[_]] { + + def findAll(collective: Ident): F[List[RShare]] + + def delete(id: Ident, collective: Ident): F[Boolean] + + def addNew(share: OShare.NewShare): F[OShare.ChangeResult] + + def findOne(id: Ident, collective: Ident): OptionT[F, RShare] + + def update( + id: Ident, + share: OShare.NewShare, + removePassword: Boolean + ): F[OShare.ChangeResult] +} + +object OShare { + + final case class NewShare( + cid: Ident, + name: Option[String], + query: ItemQuery, + enabled: Boolean, + password: Option[Password], + publishUntil: Timestamp + ) + + sealed trait ChangeResult + object ChangeResult { + final case class Success(id: Ident) extends ChangeResult + case object PublishUntilInPast extends ChangeResult + + def success(id: Ident): ChangeResult = Success(id) + def publishUntilInPast: ChangeResult = PublishUntilInPast + } + + def apply[F[_]: Async](store: Store[F]): OShare[F] = + new OShare[F] { + def findAll(collective: Ident): F[List[RShare]] = + store.transact(RShare.findAllByCollective(collective)) + + def delete(id: Ident, collective: Ident): F[Boolean] = + store.transact(RShare.deleteByIdAndCid(id, collective)).map(_ > 0) + + def addNew(share: NewShare): F[ChangeResult] = + for { + curTime <- Timestamp.current[F] + id <- Ident.randomId[F] + pass = share.password.map(PasswordCrypt.crypt) + record = RShare( + id, + share.cid, + share.name, + share.query, + share.enabled, + pass, + curTime, + share.publishUntil, + 0, + None + ) + res <- + if (share.publishUntil < curTime) ChangeResult.publishUntilInPast.pure[F] + else store.transact(RShare.insert(record)).map(_ => ChangeResult.success(id)) + } yield res + + def update( + id: Ident, + share: OShare.NewShare, + removePassword: Boolean + ): F[ChangeResult] = + for { + curTime <- Timestamp.current[F] + record = RShare( + id, + share.cid, + share.name, + share.query, + share.enabled, + share.password.map(PasswordCrypt.crypt), + Timestamp.Epoch, + share.publishUntil, + 0, + None + ) + res <- + if (share.publishUntil < curTime) ChangeResult.publishUntilInPast.pure[F] + else + store + .transact(RShare.updateData(record, removePassword)) + .map(_ => ChangeResult.success(id)) + } yield res + + def findOne(id: Ident, collective: Ident): OptionT[F, RShare] = + RShare.findOne(id, collective).mapK(store.transform) + } +} diff --git a/modules/common/src/main/scala/docspell/common/Timestamp.scala b/modules/common/src/main/scala/docspell/common/Timestamp.scala index d55e5fc4..b9aa104f 100644 --- a/modules/common/src/main/scala/docspell/common/Timestamp.scala +++ b/modules/common/src/main/scala/docspell/common/Timestamp.scala @@ -51,6 +51,9 @@ case class Timestamp(value: Instant) { def <(other: Timestamp): Boolean = this.value.isBefore(other.value) + + def >(other: Timestamp): Boolean = + this.value.isAfter(other.value) } object Timestamp { diff --git a/modules/restapi/src/main/resources/docspell-openapi.yml b/modules/restapi/src/main/resources/docspell-openapi.yml index c5e95d29..f01cd129 100644 --- a/modules/restapi/src/main/resources/docspell-openapi.yml +++ b/modules/restapi/src/main/resources/docspell-openapi.yml @@ -1711,6 +1711,96 @@ paths: schema: $ref: "#/components/schemas/BasicResult" + /sec/share: + get: + operationId: "sec-share-get-all" + tags: [ Share ] + summary: Get a list of shares + description: | + Return a list of all shares for this collective. + security: + - authTokenHeader: [] + responses: + 200: + description: Ok + content: + application/json: + schema: + $ref: "#/components/schemas/ShareList" + post: + operationId: "sec-share-new" + tags: [ Share ] + summary: Create a new share. + description: | + Create a new share. + security: + - authTokenHeader: [] + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/ShareData" + responses: + 200: + description: Ok + content: + application/json: + schema: + $ref: "#/components/schemas/IdResult" + /sec/share/{shareId}: + parameters: + - $ref: "#/components/parameters/shareId" + get: + operationId: "sec-share-get" + tags: [Share] + summary: Get details to a single share. + description: | + Given the id of a share, returns some details about it. + security: + - authTokenHeader: [] + responses: + 200: + description: Ok + content: + application/json: + schema: + $ref: "#/components/schemas/ShareDetail" + put: + operationId: "sec-share-update" + tags: [ Share ] + summary: Update an existing share. + description: | + Updates an existing share. + security: + - authTokenHeader: [] + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/ShareData" + responses: + 200: + description: Ok + content: + application/json: + schema: + $ref: "#/components/schemas/BasicResult" + delete: + operationId: "sec-share-delete-by-id" + tags: [ Share ] + summary: Delete a share. + description: | + Deletes a share + security: + - authTokenHeader: [] + responses: + 200: + description: Ok + content: + application/json: + schema: + $ref: "#/components/schemas/BasicResult" + /sec/item/search: get: operationId: "sec-item-search-by-get" @@ -4096,6 +4186,83 @@ paths: components: schemas: + ShareData: + description: | + Editable data for a share. + required: + - query + - enabled + - publishUntil + properties: + name: + type: string + query: + type: string + format: itemquery + enabled: + type: boolean + password: + type: string + format: password + publishUntil: + type: integer + format: date-time + removePassword: + type: boolean + description: | + For an update request, this can control whether to delete + the password. Otherwise if the password is not set, it + will not be changed. When adding a new share, this has no + effect. + + ShareDetail: + description: | + Details for an existing share. + required: + - id + - query + - enabled + - publishAt + - publishUntil + - password + - views + properties: + id: + type: string + format: ident + query: + type: string + format: itemquery + name: + type: string + enabled: + type: boolean + publishAt: + type: integer + format: date-time + publishUntil: + type: integer + format: date-time + password: + type: boolean + views: + type: integer + format: int32 + lastAccess: + type: integer + format: date-time + + ShareList: + description: | + A list of shares. + required: + - items + properties: + items: + type: array + items: + $ref: "#/components/schemas/ShareDetail" + DeleteUserData: description: | An excerpt of data that would be deleted when deleting the @@ -6121,8 +6288,8 @@ components: type: string IdResult: description: | - Some basic result of an operation with an ID as payload. If - success if `false` the id is not usable. + Some basic result of an operation with an ID as payload, if + success is true. If success is `false` the id is not usable. required: - success - message @@ -6257,6 +6424,13 @@ components: required: true schema: type: string + shareId: + name: shareId + in: path + description: An identifier for a share + required: true + schema: + type: string username: name: username in: path diff --git a/modules/restapi/src/main/scala/docspell/restapi/codec/ItemQueryJson.scala b/modules/restapi/src/main/scala/docspell/restapi/codec/ItemQueryJson.scala new file mode 100644 index 00000000..096c0ba5 --- /dev/null +++ b/modules/restapi/src/main/scala/docspell/restapi/codec/ItemQueryJson.scala @@ -0,0 +1,24 @@ +/* + * Copyright 2020 Eike K. & Contributors + * + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +package docspell.restapi.codec + +import docspell.query.{ItemQuery, ItemQueryParser} + +import io.circe.{Decoder, Encoder} + +trait ItemQueryJson { + + implicit val itemQueryDecoder: Decoder[ItemQuery] = + Decoder.decodeString.emap(str => ItemQueryParser.parse(str).left.map(_.render)) + + implicit val itemQueryEncoder: Encoder[ItemQuery] = + Encoder.encodeString.contramap(q => + q.raw.getOrElse(ItemQueryParser.unsafeAsString(q.expr)) + ) +} + +object ItemQueryJson extends ItemQueryJson diff --git a/modules/restserver/src/main/scala/docspell/restserver/RestServer.scala b/modules/restserver/src/main/scala/docspell/restserver/RestServer.scala index 3cc244fb..6c620a0b 100644 --- a/modules/restserver/src/main/scala/docspell/restserver/RestServer.scala +++ b/modules/restserver/src/main/scala/docspell/restserver/RestServer.scala @@ -94,6 +94,7 @@ object RestServer { "email/send" -> MailSendRoutes(restApp.backend, token), "email/settings" -> MailSettingsRoutes(restApp.backend, token), "email/sent" -> SentMailRoutes(restApp.backend, token), + "share" -> ShareRoutes.manage(restApp.backend, token), "usertask/notifydueitems" -> NotifyDueItemsRoutes(cfg, restApp.backend, token), "usertask/scanmailbox" -> ScanMailboxRoutes(restApp.backend, token), "calevent/check" -> CalEventCheckRoutes(), diff --git a/modules/restserver/src/main/scala/docspell/restserver/routes/ShareRoutes.scala b/modules/restserver/src/main/scala/docspell/restserver/routes/ShareRoutes.scala new file mode 100644 index 00000000..060ef30c --- /dev/null +++ b/modules/restserver/src/main/scala/docspell/restserver/routes/ShareRoutes.scala @@ -0,0 +1,105 @@ +/* + * Copyright 2020 Eike K. & Contributors + * + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +package docspell.restserver.routes + +import cats.data.OptionT +import cats.effect._ +import cats.implicits._ + +import docspell.backend.BackendApp +import docspell.backend.auth.AuthToken +import docspell.backend.ops.OShare +import docspell.common.Ident +import docspell.restapi.model._ +import docspell.restserver.http4s.ResponseGenerator +import docspell.store.records.RShare + +import org.http4s.HttpRoutes +import org.http4s.circe.CirceEntityDecoder._ +import org.http4s.circe.CirceEntityEncoder._ +import org.http4s.dsl.Http4sDsl + +object ShareRoutes { + + def manage[F[_]: Async](backend: BackendApp[F], user: AuthToken): HttpRoutes[F] = { + val dsl = new Http4sDsl[F] with ResponseGenerator[F] {} + import dsl._ + + HttpRoutes.of { + case GET -> Root => + for { + all <- backend.share.findAll(user.account.collective) + res <- Ok(ShareList(all.map(mkShareDetail))) + } yield res + + case req @ POST -> Root => + for { + data <- req.as[ShareData] + share = mkNewShare(data, user) + res <- backend.share.addNew(share) + resp <- Ok(mkIdResult(res, "New share created.")) + } yield resp + + case GET -> Root / Ident(id) => + (for { + share <- backend.share.findOne(id, user.account.collective) + resp <- OptionT.liftF(Ok(mkShareDetail(share))) + } yield resp).getOrElseF(NotFound()) + + case req @ PUT -> Root / Ident(id) => + for { + data <- req.as[ShareData] + share = mkNewShare(data, user) + updated <- backend.share.update(id, share, data.removePassword.getOrElse(false)) + resp <- Ok(mkBasicResult(updated, "Share updated.")) + } yield resp + + case DELETE -> Root / Ident(id) => + for { + del <- backend.share.delete(id, user.account.collective) + resp <- Ok(BasicResult(del, if (del) "Share deleted." else "Deleting failed.")) + } yield resp + } + } + + def mkNewShare(data: ShareData, user: AuthToken): OShare.NewShare = + OShare.NewShare( + user.account.collective, + data.name, + data.query, + data.enabled, + data.password, + data.publishUntil + ) + + def mkIdResult(r: OShare.ChangeResult, msg: => String): IdResult = + r match { + case OShare.ChangeResult.Success(id) => IdResult(true, msg, id) + case OShare.ChangeResult.PublishUntilInPast => + IdResult(false, "Until date must not be in the past", Ident.unsafe("")) + } + + def mkBasicResult(r: OShare.ChangeResult, msg: => String): BasicResult = + r match { + case OShare.ChangeResult.Success(_) => BasicResult(true, msg) + case OShare.ChangeResult.PublishUntilInPast => + BasicResult(false, "Until date must not be in the past") + } + + def mkShareDetail(r: RShare): ShareDetail = + ShareDetail( + r.id, + r.query, + r.name, + r.enabled, + r.publishAt, + r.publishUntil, + r.password.isDefined, + r.views, + r.lastAccess + ) +} diff --git a/modules/store/src/main/resources/db/migration/h2/V1.27.1__item_share.sql b/modules/store/src/main/resources/db/migration/h2/V1.27.1__item_share.sql new file mode 100644 index 00000000..7e252c14 --- /dev/null +++ b/modules/store/src/main/resources/db/migration/h2/V1.27.1__item_share.sql @@ -0,0 +1,13 @@ +CREATE TABLE "item_share" ( + "id" varchar(254) not null primary key, + "cid" varchar(254) not null, + "name" varchar(254), + "query" varchar(2000) not null, + "enabled" boolean not null, + "pass" varchar(254), + "publish_at" timestamp not null, + "publish_until" timestamp not null, + "views" int not null, + "last_access" timestamp, + foreign key ("cid") references "collective"("cid") on delete cascade +) diff --git a/modules/store/src/main/resources/db/migration/mariadb/V1.27.1__item_share.sql b/modules/store/src/main/resources/db/migration/mariadb/V1.27.1__item_share.sql new file mode 100644 index 00000000..fb74d283 --- /dev/null +++ b/modules/store/src/main/resources/db/migration/mariadb/V1.27.1__item_share.sql @@ -0,0 +1,13 @@ +CREATE TABLE `item_share` ( + `id` varchar(254) not null primary key, + `cid` varchar(254) not null, + `name` varchar(254), + `query` varchar(2000) not null, + `enabled` boolean not null, + `pass` varchar(254), + `publish_at` timestamp not null, + `publish_until` timestamp not null, + `views` int not null, + `last_access` timestamp, + foreign key (`cid`) references `collective`(`cid`) on delete cascade +) diff --git a/modules/store/src/main/resources/db/migration/postgresql/V1.27.1__item_share.sql b/modules/store/src/main/resources/db/migration/postgresql/V1.27.1__item_share.sql new file mode 100644 index 00000000..7e252c14 --- /dev/null +++ b/modules/store/src/main/resources/db/migration/postgresql/V1.27.1__item_share.sql @@ -0,0 +1,13 @@ +CREATE TABLE "item_share" ( + "id" varchar(254) not null primary key, + "cid" varchar(254) not null, + "name" varchar(254), + "query" varchar(2000) not null, + "enabled" boolean not null, + "pass" varchar(254), + "publish_at" timestamp not null, + "publish_until" timestamp not null, + "views" int not null, + "last_access" timestamp, + foreign key ("cid") references "collective"("cid") on delete cascade +) diff --git a/modules/store/src/main/scala/docspell/store/Store.scala b/modules/store/src/main/scala/docspell/store/Store.scala index f68e353c..338b177a 100644 --- a/modules/store/src/main/scala/docspell/store/Store.scala +++ b/modules/store/src/main/scala/docspell/store/Store.scala @@ -9,6 +9,7 @@ package docspell.store import scala.concurrent.ExecutionContext import cats.effect._ +import cats.~> import fs2._ import docspell.store.file.FileStore @@ -19,6 +20,7 @@ import doobie._ import doobie.hikari.HikariTransactor trait Store[F[_]] { + def transform: ConnectionIO ~> F def transact[A](prg: ConnectionIO[A]): F[A] diff --git a/modules/store/src/main/scala/docspell/store/impl/StoreImpl.scala b/modules/store/src/main/scala/docspell/store/impl/StoreImpl.scala index f0f622bb..50c856b1 100644 --- a/modules/store/src/main/scala/docspell/store/impl/StoreImpl.scala +++ b/modules/store/src/main/scala/docspell/store/impl/StoreImpl.scala @@ -6,8 +6,10 @@ package docspell.store.impl +import cats.arrow.FunctionK import cats.effect.Async import cats.implicits._ +import cats.~> import docspell.store.file.FileStore import docspell.store.migrate.FlywayMigrate @@ -22,6 +24,9 @@ final class StoreImpl[F[_]: Async]( xa: Transactor[F] ) extends Store[F] { + def transform: ConnectionIO ~> F = + FunctionK.lift(transact) + def migrate: F[Int] = FlywayMigrate.run[F](jdbc).map(_.migrationsExecuted) diff --git a/modules/store/src/main/scala/docspell/store/records/RShare.scala b/modules/store/src/main/scala/docspell/store/records/RShare.scala index 72f67de7..af0b1e40 100644 --- a/modules/store/src/main/scala/docspell/store/records/RShare.scala +++ b/modules/store/src/main/scala/docspell/store/records/RShare.scala @@ -6,20 +6,25 @@ package docspell.store.records -import cats.data.NonEmptyList +import cats.data.{NonEmptyList, OptionT} import docspell.common._ import docspell.query.ItemQuery +import docspell.store.qb.DSL._ import docspell.store.qb._ +import doobie._ +import doobie.implicits._ + final case class RShare( id: Ident, cid: Ident, + name: Option[String], query: ItemQuery, enabled: Boolean, password: Option[Password], - publishedAt: Timestamp, - publishedUntil: Timestamp, + publishAt: Timestamp, + publishUntil: Timestamp, views: Int, lastAccess: Option[Timestamp] ) {} @@ -31,11 +36,12 @@ object RShare { val id = Column[Ident]("id", this) val cid = Column[Ident]("cid", this) + val name = Column[String]("name", this) val query = Column[ItemQuery]("query", this) val enabled = Column[Boolean]("enabled", this) - val password = Column[Password]("password", this) - val publishedAt = Column[Timestamp]("published_at", this) - val publishedUntil = Column[Timestamp]("published_until", this) + val password = Column[Password]("pass", this) + val publishedAt = Column[Timestamp]("publish_at", this) + val publishedUntil = Column[Timestamp]("publish_until", this) val views = Column[Int]("views", this) val lastAccess = Column[Timestamp]("last_access", this) @@ -43,6 +49,7 @@ object RShare { NonEmptyList.of( id, cid, + name, query, enabled, password, @@ -56,4 +63,47 @@ object RShare { val T: Table = Table(None) def as(alias: String): Table = Table(Some(alias)) + def insert(r: RShare): ConnectionIO[Int] = + DML.insert( + T, + T.all, + fr"${r.id},${r.cid},${r.name},${r.query},${r.enabled},${r.password},${r.publishAt},${r.publishUntil},${r.views},${r.lastAccess}" + ) + + def incAccess(id: Ident): ConnectionIO[Int] = + for { + curTime <- Timestamp.current[ConnectionIO] + n <- DML.update( + T, + T.id === id, + DML.set(T.views.increment(1), T.lastAccess.setTo(curTime)) + ) + } yield n + + def updateData(r: RShare, removePassword: Boolean): ConnectionIO[Int] = + DML.update( + T, + T.id === r.id && T.cid === r.cid, + DML.set( + T.name.setTo(r.name), + T.query.setTo(r.query), + T.enabled.setTo(r.enabled), + T.publishedUntil.setTo(r.publishUntil) + ) ++ (if (r.password.isDefined || removePassword) + List(T.password.setTo(r.password)) + else Nil) + ) + + def findOne(id: Ident, cid: Ident): OptionT[ConnectionIO, RShare] = + OptionT( + Select(select(T.all), from(T), T.id === id && T.cid === cid).build + .query[RShare] + .option + ) + + def findAllByCollective(cid: Ident): ConnectionIO[List[RShare]] = + Select(select(T.all), from(T), T.cid === cid).build.query[RShare].to[List] + + def deleteByIdAndCid(id: Ident, cid: Ident): ConnectionIO[Int] = + DML.delete(T, T.id === id && T.cid === cid) } diff --git a/modules/webapp/src/main/elm/Api.elm b/modules/webapp/src/main/elm/Api.elm index 5ae8945d..a9619b1e 100644 --- a/modules/webapp/src/main/elm/Api.elm +++ b/modules/webapp/src/main/elm/Api.elm @@ -11,6 +11,7 @@ module Api exposing , addCorrOrg , addCorrPerson , addMember + , addShare , addTag , addTagsMultiple , attachmentPreviewURL @@ -40,6 +41,7 @@ module Api exposing , deleteOrg , deletePerson , deleteScanMailbox + , deleteShare , deleteSource , deleteTag , deleteUser @@ -72,6 +74,8 @@ module Api exposing , getPersonsLight , getScanMailbox , getSentMails + , getShare + , getShares , getSources , getTagCloud , getTags @@ -147,6 +151,7 @@ module Api exposing , unconfirmMultiple , updateNotifyDueItems , updateScanMailbox + , updateShare , upload , uploadAmend , uploadSingle @@ -215,6 +220,9 @@ import Api.Model.ScanMailboxSettingsList exposing (ScanMailboxSettingsList) import Api.Model.SearchStats exposing (SearchStats) import Api.Model.SecondFactor exposing (SecondFactor) import Api.Model.SentMails exposing (SentMails) +import Api.Model.ShareData exposing (ShareData) +import Api.Model.ShareDetail exposing (ShareDetail) +import Api.Model.ShareList exposing (ShareList) import Api.Model.SimpleMail exposing (SimpleMail) import Api.Model.SourceAndTags exposing (SourceAndTags) import Api.Model.SourceList exposing (SourceList) @@ -2206,6 +2214,57 @@ disableOtp flags otp receive = +--- Share + + +getShares : Flags -> (Result Http.Error ShareList -> msg) -> Cmd msg +getShares flags receive = + Http2.authGet + { url = flags.config.baseUrl ++ "/api/v1/sec/share" + , account = getAccount flags + , expect = Http.expectJson receive Api.Model.ShareList.decoder + } + + +getShare : Flags -> String -> (Result Http.Error ShareDetail -> msg) -> Cmd msg +getShare flags id receive = + Http2.authGet + { url = flags.config.baseUrl ++ "/api/v1/sec/share/" ++ id + , account = getAccount flags + , expect = Http.expectJson receive Api.Model.ShareDetail.decoder + } + + +addShare : Flags -> ShareData -> (Result Http.Error IdResult -> msg) -> Cmd msg +addShare flags share receive = + Http2.authPost + { url = flags.config.baseUrl ++ "/api/v1/sec/share" + , account = getAccount flags + , body = Http.jsonBody (Api.Model.ShareData.encode share) + , expect = Http.expectJson receive Api.Model.IdResult.decoder + } + + +updateShare : Flags -> String -> ShareData -> (Result Http.Error BasicResult -> msg) -> Cmd msg +updateShare flags id share receive = + Http2.authPut + { url = flags.config.baseUrl ++ "/api/v1/sec/share/" ++ id + , account = getAccount flags + , body = Http.jsonBody (Api.Model.ShareData.encode share) + , expect = Http.expectJson receive Api.Model.BasicResult.decoder + } + + +deleteShare : Flags -> String -> (Result Http.Error BasicResult -> msg) -> Cmd msg +deleteShare flags id receive = + Http2.authDelete + { url = flags.config.baseUrl ++ "/api/v1/sec/share/" ++ id + , account = getAccount flags + , expect = Http.expectJson receive Api.Model.BasicResult.decoder + } + + + --- Helper diff --git a/modules/webapp/src/main/elm/Comp/DatePicker.elm b/modules/webapp/src/main/elm/Comp/DatePicker.elm index 3804c296..e0383651 100644 --- a/modules/webapp/src/main/elm/Comp/DatePicker.elm +++ b/modules/webapp/src/main/elm/Comp/DatePicker.elm @@ -37,7 +37,7 @@ init = emptyModel : DatePicker emptyModel = - DatePicker.initFromDate (Date.fromCalendarDate 2019 Aug 21) + DatePicker.initFromDate (Date.fromCalendarDate 2021 Oct 31) defaultSettings : Settings diff --git a/modules/webapp/src/main/elm/Comp/ShareForm.elm b/modules/webapp/src/main/elm/Comp/ShareForm.elm new file mode 100644 index 00000000..4f2d39cf --- /dev/null +++ b/modules/webapp/src/main/elm/Comp/ShareForm.elm @@ -0,0 +1,282 @@ +{- + Copyright 2020 Eike K. & Contributors + + SPDX-License-Identifier: AGPL-3.0-or-later +-} + + +module Comp.ShareForm exposing (Model, Msg, getShare, init, setShare, update, view) + +import Api.Model.ShareData exposing (ShareData) +import Api.Model.ShareDetail exposing (ShareDetail) +import Comp.Basic as B +import Comp.DatePicker +import Comp.PasswordInput +import Data.Flags exposing (Flags) +import DatePicker exposing (DatePicker) +import Html exposing (..) +import Html.Attributes exposing (..) +import Html.Events exposing (onCheck, onInput) +import Messages.Comp.ShareForm exposing (Texts) +import Styles as S +import Util.Maybe + + +type alias Model = + { share : ShareDetail + , name : Maybe String + , query : String + , enabled : Bool + , passwordModel : Comp.PasswordInput.Model + , password : Maybe String + , passwordSet : Bool + , clearPassword : Bool + , untilModel : DatePicker + , untilDate : Maybe Int + } + + +init : ( Model, Cmd Msg ) +init = + let + ( dp, dpc ) = + Comp.DatePicker.init + in + ( { share = Api.Model.ShareDetail.empty + , name = Nothing + , query = "" + , enabled = False + , passwordModel = Comp.PasswordInput.init + , password = Nothing + , passwordSet = False + , clearPassword = False + , untilModel = dp + , untilDate = Nothing + } + , Cmd.map UntilDateMsg dpc + ) + + +isValid : Model -> Bool +isValid model = + model.query /= "" && model.untilDate /= Nothing + + +type Msg + = SetName String + | SetQuery String + | SetShare ShareDetail + | ToggleEnabled + | ToggleClearPassword + | PasswordMsg Comp.PasswordInput.Msg + | UntilDateMsg Comp.DatePicker.Msg + + +setShare : ShareDetail -> Msg +setShare share = + SetShare share + + +getShare : Model -> Maybe ( String, ShareData ) +getShare model = + if isValid model then + Just + ( model.share.id + , { name = model.name + , query = model.query + , enabled = model.enabled + , password = model.password + , removePassword = + if model.share.id == "" then + Nothing + + else + Just model.clearPassword + , publishUntil = Maybe.withDefault 0 model.untilDate + } + ) + + else + Nothing + + +update : Flags -> Msg -> Model -> ( Model, Cmd Msg ) +update _ msg model = + case msg of + SetShare s -> + ( { model + | share = s + , name = s.name + , query = s.query + , enabled = s.enabled + , password = Nothing + , passwordSet = s.password + , clearPassword = False + , untilDate = + if s.publishUntil > 0 then + Just s.publishUntil + + else + Nothing + } + , Cmd.none + ) + + SetName n -> + ( { model | name = Util.Maybe.fromString n }, Cmd.none ) + + SetQuery n -> + ( { model | query = n }, Cmd.none ) + + ToggleEnabled -> + ( { model | enabled = not model.enabled }, Cmd.none ) + + ToggleClearPassword -> + ( { model | clearPassword = not model.clearPassword }, Cmd.none ) + + PasswordMsg lm -> + let + ( pm, pw ) = + Comp.PasswordInput.update lm model.passwordModel + in + ( { model + | passwordModel = pm + , password = pw + } + , Cmd.none + ) + + UntilDateMsg lm -> + let + ( dp, event ) = + Comp.DatePicker.updateDefault lm model.untilModel + + nextDate = + case event of + DatePicker.Picked date -> + Just (Comp.DatePicker.endOfDay date) + + _ -> + Nothing + in + ( { model | untilModel = dp, untilDate = nextDate } + , Cmd.none + ) + + + +--- View + + +view : Texts -> Model -> Html Msg +view texts model = + div + [ class "flex flex-col" ] + [ div [ class "mb-4" ] + [ label + [ for "sharename" + , class S.inputLabel + ] + [ text texts.basics.name + ] + , input + [ type_ "text" + , onInput SetName + , placeholder texts.basics.name + , value <| Maybe.withDefault "" model.name + , id "sharename" + , class S.textInput + ] + [] + ] + , div [ class "mb-4" ] + [ label + [ for "sharequery" + , class S.inputLabel + ] + [ text texts.queryLabel + , B.inputRequired + ] + , input + [ type_ "text" + , onInput SetQuery + , placeholder texts.queryLabel + , value model.query + , id "sharequery" + , class S.textInput + , classList + [ ( S.inputErrorBorder + , not (isValid model) + ) + ] + ] + [] + ] + , div [ class "mb-4" ] + [ label + [ class "inline-flex items-center" + , for "source-enabled" + ] + [ input + [ type_ "checkbox" + , onCheck (\_ -> ToggleEnabled) + , checked model.enabled + , class S.checkboxInput + , id "source-enabled" + ] + [] + , span [ class "ml-2" ] + [ text texts.enabled + ] + ] + ] + , div [ class "mb-4" ] + [ label + [ class S.inputLabel + ] + [ text texts.password + ] + , Html.map PasswordMsg + (Comp.PasswordInput.view2 + { placeholder = texts.password } + model.password + False + model.passwordModel + ) + , div + [ class "mb-2" + , classList [ ( "hidden", not model.passwordSet ) ] + ] + [ label + [ class "inline-flex items-center" + , for "clear-password" + ] + [ input + [ type_ "checkbox" + , onCheck (\_ -> ToggleClearPassword) + , checked model.clearPassword + , class S.checkboxInput + , id "clear-password" + ] + [] + , span [ class "ml-2" ] + [ text texts.clearPassword + ] + ] + ] + ] + , div [ class "mb-2 max-w-sm" ] + [ label [ class S.inputLabel ] + [ text texts.publishUntil + , B.inputRequired + ] + , div [ class "relative" ] + [ Html.map UntilDateMsg + (Comp.DatePicker.viewTimeDefault + model.untilDate + model.untilModel + ) + , i [ class S.dateInputIcon, class "fa fa-calendar" ] [] + ] + ] + ] diff --git a/modules/webapp/src/main/elm/Comp/ShareManage.elm b/modules/webapp/src/main/elm/Comp/ShareManage.elm new file mode 100644 index 00000000..4fc431af --- /dev/null +++ b/modules/webapp/src/main/elm/Comp/ShareManage.elm @@ -0,0 +1,349 @@ +{- + Copyright 2020 Eike K. & Contributors + + SPDX-License-Identifier: AGPL-3.0-or-later +-} + + +module Comp.ShareManage exposing (Model, Msg, init, loadShares, update, view) + +import Api +import Api.Model.BasicResult exposing (BasicResult) +import Api.Model.IdResult exposing (IdResult) +import Api.Model.ShareDetail exposing (ShareDetail) +import Api.Model.ShareList exposing (ShareList) +import Comp.Basic as B +import Comp.ItemDetail.Model exposing (Msg(..)) +import Comp.MenuBar as MB +import Comp.ShareForm +import Comp.ShareTable +import Data.Flags exposing (Flags) +import Html exposing (..) +import Html.Attributes exposing (..) +import Html.Events exposing (onClick) +import Http +import Messages.Comp.ShareManage exposing (Texts) +import Styles as S + + +type FormError + = FormErrorNone + | FormErrorHttp Http.Error + | FormErrorInvalid + | FormErrorSubmit String + + +type ViewMode + = Table + | Form + + +type DeleteConfirm + = DeleteConfirmOff + | DeleteConfirmOn + + +type alias Model = + { viewMode : ViewMode + , shares : List ShareDetail + , formModel : Comp.ShareForm.Model + , loading : Bool + , formError : FormError + , deleteConfirm : DeleteConfirm + } + + +init : ( Model, Cmd Msg ) +init = + let + ( fm, fc ) = + Comp.ShareForm.init + in + ( { viewMode = Table + , shares = [] + , formModel = fm + , loading = False + , formError = FormErrorNone + , deleteConfirm = DeleteConfirmOff + } + , Cmd.map FormMsg fc + ) + + +type Msg + = LoadShares + | TableMsg Comp.ShareTable.Msg + | FormMsg Comp.ShareForm.Msg + | InitNewShare + | SetViewMode ViewMode + | Submit + | RequestDelete + | CancelDelete + | DeleteShareNow String + | LoadSharesResp (Result Http.Error ShareList) + | AddShareResp (Result Http.Error IdResult) + | UpdateShareResp (Result Http.Error BasicResult) + | GetShareResp (Result Http.Error ShareDetail) + | DeleteShareResp (Result Http.Error BasicResult) + + +loadShares : Msg +loadShares = + LoadShares + + + +--- update + + +update : Flags -> Msg -> Model -> ( Model, Cmd Msg ) +update flags msg model = + case msg of + InitNewShare -> + let + nm = + { model | viewMode = Form, formError = FormErrorNone } + + share = + Api.Model.ShareDetail.empty + in + update flags (FormMsg (Comp.ShareForm.setShare share)) nm + + SetViewMode vm -> + ( { model | viewMode = vm, formError = FormErrorNone } + , if vm == Table then + Api.getShares flags LoadSharesResp + + else + Cmd.none + ) + + FormMsg lm -> + let + ( fm, fc ) = + Comp.ShareForm.update flags lm model.formModel + in + ( { model | formModel = fm }, Cmd.map FormMsg fc ) + + TableMsg lm -> + let + action = + Comp.ShareTable.update lm + + nextModel = + { model | viewMode = Form, formError = FormErrorNone } + in + case action of + Comp.ShareTable.Edit share -> + update flags (FormMsg <| Comp.ShareForm.setShare share) nextModel + + RequestDelete -> + ( { model | deleteConfirm = DeleteConfirmOn }, Cmd.none ) + + CancelDelete -> + ( { model | deleteConfirm = DeleteConfirmOff }, Cmd.none ) + + DeleteShareNow id -> + ( { model | deleteConfirm = DeleteConfirmOff, loading = True } + , Api.deleteShare flags id DeleteShareResp + ) + + LoadShares -> + ( { model | loading = True }, Api.getShares flags LoadSharesResp ) + + LoadSharesResp (Ok list) -> + ( { model | loading = False, shares = list.items, formError = FormErrorNone }, Cmd.none ) + + LoadSharesResp (Err err) -> + ( { model | loading = False, formError = FormErrorHttp err }, Cmd.none ) + + Submit -> + case Comp.ShareForm.getShare model.formModel of + Just ( id, data ) -> + if id == "" then + ( { model | loading = True }, Api.addShare flags data AddShareResp ) + + else + ( { model | loading = True }, Api.updateShare flags id data UpdateShareResp ) + + Nothing -> + ( { model | formError = FormErrorInvalid }, Cmd.none ) + + AddShareResp (Ok res) -> + if res.success then + ( model, Api.getShare flags res.id GetShareResp ) + + else + ( { model | loading = False, formError = FormErrorSubmit res.message }, Cmd.none ) + + AddShareResp (Err err) -> + ( { model | loading = False, formError = FormErrorHttp err }, Cmd.none ) + + UpdateShareResp (Ok res) -> + if res.success then + ( model, Api.getShare flags model.formModel.share.id GetShareResp ) + + else + ( { model | loading = False, formError = FormErrorSubmit res.message }, Cmd.none ) + + UpdateShareResp (Err err) -> + ( { model | loading = False, formError = FormErrorHttp err }, Cmd.none ) + + GetShareResp (Ok share) -> + let + nextModel = + { model | formError = FormErrorNone, loading = False } + in + update flags (FormMsg <| Comp.ShareForm.setShare share) nextModel + + GetShareResp (Err err) -> + ( { model | formError = FormErrorHttp err }, Cmd.none ) + + DeleteShareResp (Ok res) -> + if res.success then + update flags (SetViewMode Table) { model | loading = False } + + else + ( { model | formError = FormErrorSubmit res.message, loading = False }, Cmd.none ) + + DeleteShareResp (Err err) -> + ( { model | formError = FormErrorHttp err, loading = False }, Cmd.none ) + + + +--- view + + +view : Texts -> Flags -> Model -> Html Msg +view texts _ model = + if model.viewMode == Table then + viewTable texts model + + else + viewForm texts model + + +viewTable : Texts -> Model -> Html Msg +viewTable texts model = + div [ class "flex flex-col" ] + [ MB.view + { start = + [] + , end = + [ MB.PrimaryButton + { tagger = InitNewShare + , title = texts.createNewShare + , icon = Just "fa fa-plus" + , label = texts.newShare + } + ] + , rootClasses = "mb-4" + } + , Html.map TableMsg (Comp.ShareTable.view texts.shareTable model.shares) + , B.loadingDimmer + { label = "" + , active = model.loading + } + ] + + +viewForm : Texts -> Model -> Html Msg +viewForm texts model = + let + newShare = + model.formModel.share.id == "" + in + Html.form [ class "relative" ] + [ if newShare then + h1 [ class S.header2 ] + [ text texts.createNewShare + ] + + else + h1 [ class S.header2 ] + [ text <| Maybe.withDefault texts.noName model.formModel.share.name + , div [ class "opacity-50 text-sm" ] + [ text "Id: " + , text model.formModel.share.id + ] + ] + , MB.view + { start = + [ MB.PrimaryButton + { tagger = Submit + , title = "Submit this form" + , icon = Just "fa fa-save" + , label = texts.basics.submit + } + , MB.SecondaryButton + { tagger = SetViewMode Table + , title = texts.basics.backToList + , icon = Just "fa fa-arrow-left" + , label = texts.basics.cancel + } + ] + , end = + if not newShare then + [ MB.DeleteButton + { tagger = RequestDelete + , title = texts.deleteThisShare + , icon = Just "fa fa-trash" + , label = texts.basics.delete + } + ] + + else + [] + , rootClasses = "mb-4" + } + , div + [ classList + [ ( "hidden", model.formError == FormErrorNone ) + ] + , class "my-2" + , class S.errorMessage + ] + [ case model.formError of + FormErrorNone -> + text "" + + FormErrorHttp err -> + text (texts.httpError err) + + FormErrorInvalid -> + text texts.correctFormErrors + + FormErrorSubmit m -> + text m + ] + , Html.map FormMsg (Comp.ShareForm.view texts.shareForm model.formModel) + , B.loadingDimmer + { active = model.loading + , label = texts.basics.loading + } + , B.contentDimmer + (model.deleteConfirm == DeleteConfirmOn) + (div [ class "flex flex-col" ] + [ div [ class "text-lg" ] + [ i [ class "fa fa-info-circle mr-2" ] [] + , text texts.reallyDeleteShare + ] + , div [ class "mt-4 flex flex-row items-center" ] + [ B.deleteButton + { label = texts.basics.yes + , icon = "fa fa-check" + , disabled = False + , handler = onClick (DeleteShareNow model.formModel.share.id) + , attrs = [ href "#" ] + } + , B.secondaryButton + { label = texts.basics.no + , icon = "fa fa-times" + , disabled = False + , handler = onClick CancelDelete + , attrs = [ href "#", class "ml-2" ] + } + ] + ] + ) + ] diff --git a/modules/webapp/src/main/elm/Comp/ShareTable.elm b/modules/webapp/src/main/elm/Comp/ShareTable.elm new file mode 100644 index 00000000..940f64c5 --- /dev/null +++ b/modules/webapp/src/main/elm/Comp/ShareTable.elm @@ -0,0 +1,87 @@ +{- + Copyright 2020 Eike K. & Contributors + + SPDX-License-Identifier: AGPL-3.0-or-later +-} + + +module Comp.ShareTable exposing + ( Msg(..) + , SelectAction(..) + , update + , view + ) + +import Api.Model.ShareDetail exposing (ShareDetail) +import Comp.Basic as B +import Html exposing (..) +import Html.Attributes exposing (..) +import Messages.Comp.ShareTable exposing (Texts) +import Styles as S +import Util.Html +import Util.String + + +type Msg + = Select ShareDetail + + +type SelectAction + = Edit ShareDetail + + +update : Msg -> SelectAction +update msg = + case msg of + Select share -> + Edit share + + + +--- View + + +view : Texts -> List ShareDetail -> Html Msg +view texts shares = + table [ class S.tableMain ] + [ thead [] + [ tr [] + [ th [ class "" ] [] + , th [ class "text-left" ] + [ text texts.basics.id + ] + , th [ class "text-left" ] + [ text texts.basics.name + ] + , th [ class "text-center" ] + [ text texts.enabled + ] + , th [ class "text-center" ] + [ text texts.publishUntil + ] + ] + ] + , tbody [] + (List.map (renderShareLine texts) shares) + ] + + +renderShareLine : Texts -> ShareDetail -> Html Msg +renderShareLine texts share = + tr + [ class S.tableRow + ] + [ B.editLinkTableCell texts.basics.edit (Select share) + , td [ class "text-left py-4 md:py-2" ] + [ text (Util.String.ellipsis 8 share.id) + ] + , td [ class "text-left py-4 md:py-2" ] + [ text (Maybe.withDefault "-" share.name) + ] + , td [ class "w-px px-2 text-center" ] + [ Util.Html.checkbox2 share.enabled + ] + , td [ class "hidden sm:table-cell text-center" ] + [ texts.formatDateTime share.publishUntil |> text + ] + ] diff --git a/modules/webapp/src/main/elm/Data/Icons.elm b/modules/webapp/src/main/elm/Data/Icons.elm index f2455c8d..76a5f360 100644 --- a/modules/webapp/src/main/elm/Data/Icons.elm +++ b/modules/webapp/src/main/elm/Data/Icons.elm @@ -58,11 +58,11 @@ module Data.Icons exposing , personIcon2 , search , searchIcon + , share + , shareIcon , showQr , showQrIcon - , source , source2 - , sourceIcon , sourceIcon2 , tag , tag2 @@ -79,9 +79,14 @@ import Html exposing (Html, i) import Html.Attributes exposing (class) -source : String -source = - "upload icon" +share : String +share = + "fa fa-share-alt" + + +shareIcon : String -> Html msg +shareIcon classes = + i [ class (classes ++ " " ++ share) ] [] source2 : String @@ -89,11 +94,6 @@ source2 = "fa fa-upload" -sourceIcon : String -> Html msg -sourceIcon classes = - i [ class (source ++ " " ++ classes) ] [] - - sourceIcon2 : String -> Html msg sourceIcon2 classes = i [ class (source2 ++ " " ++ classes) ] [] diff --git a/modules/webapp/src/main/elm/Messages/Comp/ShareForm.elm b/modules/webapp/src/main/elm/Messages/Comp/ShareForm.elm new file mode 100644 index 00000000..44a9bcb5 --- /dev/null +++ b/modules/webapp/src/main/elm/Messages/Comp/ShareForm.elm @@ -0,0 +1,46 @@ +{- + Copyright 2020 Eike K. & Contributors + + SPDX-License-Identifier: AGPL-3.0-or-later +-} + + +module Messages.Comp.ShareForm exposing + ( Texts + , de + , gb + ) + +import Messages.Basics + + +type alias Texts = + { basics : Messages.Basics.Texts + , queryLabel : String + , enabled : String + , password : String + , publishUntil : String + , clearPassword : String + } + + +gb : Texts +gb = + { basics = Messages.Basics.gb + , queryLabel = "Query" + , enabled = "Enabled" + , password = "Password" + , publishUntil = "Publish Until" + , clearPassword = "Remove password" + } + + +de : Texts +de = + { basics = Messages.Basics.de + , queryLabel = "Abfrage" + , enabled = "Aktiv" + , password = "Passwort" + , publishUntil = "Publiziert bis" + , clearPassword = "Passwort entfernen" + } diff --git a/modules/webapp/src/main/elm/Messages/Comp/ShareManage.elm b/modules/webapp/src/main/elm/Messages/Comp/ShareManage.elm new file mode 100644 index 00000000..66b27e6e --- /dev/null +++ b/modules/webapp/src/main/elm/Messages/Comp/ShareManage.elm @@ -0,0 +1,74 @@ +{- + Copyright 2020 Eike K. & Contributors + + SPDX-License-Identifier: AGPL-3.0-or-later +-} + + +module Messages.Comp.ShareManage exposing + ( Texts + , de + , gb + ) + +import Http +import Messages.Basics +import Messages.Comp.HttpError +import Messages.Comp.ShareForm +import Messages.Comp.ShareTable + + +type alias Texts = + { basics : Messages.Basics.Texts + , shareTable : Messages.Comp.ShareTable.Texts + , shareForm : Messages.Comp.ShareForm.Texts + , httpError : Http.Error -> String + , newShare : String + , copyToClipboard : String + , openInNewTab : String + , publicUrl : String + , reallyDeleteShare : String + , createNewShare : String + , deleteThisShare : String + , errorGeneratingQR : String + , correctFormErrors : String + , noName : String + } + + +gb : Texts +gb = + { basics = Messages.Basics.gb + , httpError = Messages.Comp.HttpError.gb + , shareTable = Messages.Comp.ShareTable.gb + , shareForm = Messages.Comp.ShareForm.gb + , newShare = "New share" + , copyToClipboard = "Copy to clipboard" + , openInNewTab = "Open in new tab/window" + , publicUrl = "Public URL" + , reallyDeleteShare = "Really delete this share?" + , createNewShare = "Create new share" + , deleteThisShare = "Delete this share" + , errorGeneratingQR = "Error generating QR Code" + , correctFormErrors = "Please correct the errors in the form." + , noName = "No Name" + } + + +de : Texts +de = + { basics = Messages.Basics.de + , shareTable = Messages.Comp.ShareTable.de + , shareForm = Messages.Comp.ShareForm.de + , httpError = Messages.Comp.HttpError.de + , newShare = "Neue Freigabe" + , copyToClipboard = "In die Zwischenablage kopieren" + , openInNewTab = "Im neuen Tab/Fenster öffnen" + , publicUrl = "Öffentliche URL" + , reallyDeleteShare = "Diese Freigabe wirklich entfernen?" + , createNewShare = "Neue Freigabe erstellen" + , deleteThisShare = "Freigabe löschen" + , errorGeneratingQR = "Fehler beim Generieren des QR-Code" + , correctFormErrors = "Bitte korrigiere die Fehler im Formular." + , noName = "Ohne Name" + } diff --git a/modules/webapp/src/main/elm/Messages/Comp/ShareTable.elm b/modules/webapp/src/main/elm/Messages/Comp/ShareTable.elm new file mode 100644 index 00000000..7b68fcc4 --- /dev/null +++ b/modules/webapp/src/main/elm/Messages/Comp/ShareTable.elm @@ -0,0 +1,42 @@ +{- + Copyright 2020 Eike K. & Contributors + + SPDX-License-Identifier: AGPL-3.0-or-later +-} + + +module Messages.Comp.ShareTable exposing + ( Texts + , de + , gb + ) + +import Messages.Basics +import Messages.DateFormat as DF +import Messages.UiLanguage + + +type alias Texts = + { basics : Messages.Basics.Texts + , formatDateTime : Int -> String + , enabled : String + , publishUntil : String + } + + +gb : Texts +gb = + { basics = Messages.Basics.gb + , formatDateTime = DF.formatDateTimeLong Messages.UiLanguage.English + , enabled = "Enabled" + , publishUntil = "Publish Until" + } + + +de : Texts +de = + { basics = Messages.Basics.de + , formatDateTime = DF.formatDateTimeLong Messages.UiLanguage.German + , enabled = "Aktiv" + , publishUntil = "Publiziert bis" + } diff --git a/modules/webapp/src/main/elm/Messages/Page/CollectiveSettings.elm b/modules/webapp/src/main/elm/Messages/Page/CollectiveSettings.elm index dc36ab98..4ca75f93 100644 --- a/modules/webapp/src/main/elm/Messages/Page/CollectiveSettings.elm +++ b/modules/webapp/src/main/elm/Messages/Page/CollectiveSettings.elm @@ -15,6 +15,7 @@ import Http import Messages.Basics import Messages.Comp.CollectiveSettingsForm import Messages.Comp.HttpError +import Messages.Comp.ShareManage import Messages.Comp.SourceManage import Messages.Comp.UserManage @@ -24,12 +25,14 @@ type alias Texts = , userManage : Messages.Comp.UserManage.Texts , collectiveSettingsForm : Messages.Comp.CollectiveSettingsForm.Texts , sourceManage : Messages.Comp.SourceManage.Texts + , shareManage : Messages.Comp.ShareManage.Texts , httpError : Http.Error -> String , collectiveSettings : String , insights : String , sources : String , settings : String , users : String + , shares : String , user : String , collective : String , size : String @@ -44,12 +47,14 @@ gb = , userManage = Messages.Comp.UserManage.gb , collectiveSettingsForm = Messages.Comp.CollectiveSettingsForm.gb , sourceManage = Messages.Comp.SourceManage.gb + , shareManage = Messages.Comp.ShareManage.gb , httpError = Messages.Comp.HttpError.gb , collectiveSettings = "Collective Settings" , insights = "Insights" , sources = "Sources" , settings = "Settings" , users = "Users" + , shares = "Shares" , user = "User" , collective = "Collective" , size = "Size" @@ -64,12 +69,14 @@ de = , userManage = Messages.Comp.UserManage.de , collectiveSettingsForm = Messages.Comp.CollectiveSettingsForm.de , sourceManage = Messages.Comp.SourceManage.de + , shareManage = Messages.Comp.ShareManage.de , httpError = Messages.Comp.HttpError.de , collectiveSettings = "Kollektiveinstellungen" , insights = "Statistiken" , sources = "Quellen" , settings = "Einstellungen" , users = "Benutzer" + , shares = "Freigaben" , user = "Benutzer" , collective = "Kollektiv" , size = "Größe" diff --git a/modules/webapp/src/main/elm/Page/CollectiveSettings/Data.elm b/modules/webapp/src/main/elm/Page/CollectiveSettings/Data.elm index d24b9494..e940ade4 100644 --- a/modules/webapp/src/main/elm/Page/CollectiveSettings/Data.elm +++ b/modules/webapp/src/main/elm/Page/CollectiveSettings/Data.elm @@ -17,6 +17,7 @@ import Api.Model.BasicResult exposing (BasicResult) import Api.Model.CollectiveSettings exposing (CollectiveSettings) import Api.Model.ItemInsights exposing (ItemInsights) import Comp.CollectiveSettingsForm +import Comp.ShareManage import Comp.SourceManage import Comp.UserManage import Data.Flags exposing (Flags) @@ -28,6 +29,7 @@ type alias Model = , sourceModel : Comp.SourceManage.Model , userModel : Comp.UserManage.Model , settingsModel : Comp.CollectiveSettingsForm.Model + , shareModel : Comp.ShareManage.Model , insights : ItemInsights , formState : FormState } @@ -48,10 +50,14 @@ init flags = ( cm, cc ) = Comp.CollectiveSettingsForm.init flags Api.Model.CollectiveSettings.empty + + ( shm, shc ) = + Comp.ShareManage.init in ( { currentTab = Just InsightsTab , sourceModel = sm , userModel = Comp.UserManage.emptyModel + , shareModel = shm , settingsModel = cm , insights = Api.Model.ItemInsights.empty , formState = InitialState @@ -59,6 +65,7 @@ init flags = , Cmd.batch [ Cmd.map SourceMsg sc , Cmd.map SettingsFormMsg cc + , Cmd.map ShareMsg shc ] ) @@ -68,6 +75,7 @@ type Tab | UserTab | InsightsTab | SettingsTab + | ShareTab type Msg @@ -79,3 +87,4 @@ type Msg | GetInsightsResp (Result Http.Error ItemInsights) | CollectiveSettingsResp (Result Http.Error CollectiveSettings) | SubmitResp (Result Http.Error BasicResult) + | ShareMsg Comp.ShareManage.Msg diff --git a/modules/webapp/src/main/elm/Page/CollectiveSettings/Update.elm b/modules/webapp/src/main/elm/Page/CollectiveSettings/Update.elm index b3b55b88..1e711acd 100644 --- a/modules/webapp/src/main/elm/Page/CollectiveSettings/Update.elm +++ b/modules/webapp/src/main/elm/Page/CollectiveSettings/Update.elm @@ -9,6 +9,7 @@ module Page.CollectiveSettings.Update exposing (update) import Api import Comp.CollectiveSettingsForm +import Comp.ShareManage import Comp.SourceManage import Comp.UserManage import Data.Flags exposing (Flags) @@ -36,6 +37,9 @@ update flags msg model = SettingsTab -> update flags Init m + ShareTab -> + update flags (ShareMsg Comp.ShareManage.loadShares) m + SourceMsg m -> let ( m2, c2 ) = @@ -43,6 +47,13 @@ update flags msg model = in ( { model | sourceModel = m2 }, Cmd.map SourceMsg c2 ) + ShareMsg lm -> + let + ( sm, sc ) = + Comp.ShareManage.update flags lm model.shareModel + in + ( { model | shareModel = sm }, Cmd.map ShareMsg sc ) + UserMsg m -> let ( m2, c2 ) = diff --git a/modules/webapp/src/main/elm/Page/CollectiveSettings/View2.elm b/modules/webapp/src/main/elm/Page/CollectiveSettings/View2.elm index 4454e30f..7c31f7ff 100644 --- a/modules/webapp/src/main/elm/Page/CollectiveSettings/View2.elm +++ b/modules/webapp/src/main/elm/Page/CollectiveSettings/View2.elm @@ -10,6 +10,7 @@ module Page.CollectiveSettings.View2 exposing (viewContent, viewSidebar) import Api.Model.TagCount exposing (TagCount) import Comp.Basic as B import Comp.CollectiveSettingsForm +import Comp.ShareManage import Comp.SourceManage import Comp.UserManage import Data.Flags exposing (Flags) @@ -60,6 +61,17 @@ viewSidebar texts visible _ _ model = [ class "ml-3" ] [ text texts.sources ] ] + , a + [ href "#" + , onClick (SetTab ShareTab) + , class S.sidebarLink + , menuEntryActive model ShareTab + ] + [ Icons.shareIcon "" + , span + [ class "ml-3" ] + [ text texts.shares ] + ] , a [ href "#" , onClick (SetTab SettingsTab) @@ -105,6 +117,9 @@ viewContent texts flags settings model = Just SourceTab -> viewSources texts flags settings model + Just ShareTab -> + viewShares texts flags model + Nothing -> [] ) @@ -230,6 +245,21 @@ viewSources texts flags settings model = ] +viewShares : Texts -> Flags -> Model -> List (Html Msg) +viewShares texts flags model = + [ h1 + [ class S.header1 + , class "inline-flex items-center" + ] + [ Icons.shareIcon "" + , div [ class "ml-3" ] + [ text texts.shares + ] + ] + , Html.map ShareMsg (Comp.ShareManage.view texts.shareManage flags model.shareModel) + ] + + viewUsers : Texts -> UiSettings -> Model -> List (Html Msg) viewUsers texts settings model = [ h1 From 4ef9d6c3ffca9bcf9201bd1a9df7b22d459bc04d Mon Sep 17 00:00:00 2001 From: eikek Date: Sat, 2 Oct 2021 23:05:19 +0200 Subject: [PATCH 37/75] Add expired flag to share details --- .../src/main/resources/docspell-openapi.yml | 3 +++ .../docspell/restserver/routes/ShareRoutes.scala | 14 ++++++++------ .../main/scala/docspell/store/records/RShare.scala | 6 +++++- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/modules/restapi/src/main/resources/docspell-openapi.yml b/modules/restapi/src/main/resources/docspell-openapi.yml index f01cd129..ac2cc363 100644 --- a/modules/restapi/src/main/resources/docspell-openapi.yml +++ b/modules/restapi/src/main/resources/docspell-openapi.yml @@ -4226,6 +4226,7 @@ components: - publishUntil - password - views + - expired properties: id: type: string @@ -4243,6 +4244,8 @@ components: publishUntil: type: integer format: date-time + expired: + type: boolean password: type: boolean views: diff --git a/modules/restserver/src/main/scala/docspell/restserver/routes/ShareRoutes.scala b/modules/restserver/src/main/scala/docspell/restserver/routes/ShareRoutes.scala index 060ef30c..846bc7bc 100644 --- a/modules/restserver/src/main/scala/docspell/restserver/routes/ShareRoutes.scala +++ b/modules/restserver/src/main/scala/docspell/restserver/routes/ShareRoutes.scala @@ -9,15 +9,13 @@ package docspell.restserver.routes import cats.data.OptionT import cats.effect._ import cats.implicits._ - import docspell.backend.BackendApp import docspell.backend.auth.AuthToken import docspell.backend.ops.OShare -import docspell.common.Ident +import docspell.common.{Ident, Timestamp} import docspell.restapi.model._ import docspell.restserver.http4s.ResponseGenerator import docspell.store.records.RShare - import org.http4s.HttpRoutes import org.http4s.circe.CirceEntityDecoder._ import org.http4s.circe.CirceEntityEncoder._ @@ -33,7 +31,8 @@ object ShareRoutes { case GET -> Root => for { all <- backend.share.findAll(user.account.collective) - res <- Ok(ShareList(all.map(mkShareDetail))) + now <- Timestamp.current[F] + res <- Ok(ShareList(all.map(mkShareDetail(now)))) } yield res case req @ POST -> Root => @@ -47,7 +46,8 @@ object ShareRoutes { case GET -> Root / Ident(id) => (for { share <- backend.share.findOne(id, user.account.collective) - resp <- OptionT.liftF(Ok(mkShareDetail(share))) + now <- OptionT.liftF(Timestamp.current[F]) + resp <- OptionT.liftF(Ok(mkShareDetail(now)(share))) } yield resp).getOrElseF(NotFound()) case req @ PUT -> Root / Ident(id) => @@ -90,7 +90,7 @@ object ShareRoutes { BasicResult(false, "Until date must not be in the past") } - def mkShareDetail(r: RShare): ShareDetail = + def mkShareDetail(now: Timestamp)(r: RShare): ShareDetail = ShareDetail( r.id, r.query, @@ -98,8 +98,10 @@ object ShareRoutes { r.enabled, r.publishAt, r.publishUntil, + now > r.publishUntil, r.password.isDefined, r.views, r.lastAccess ) + } diff --git a/modules/store/src/main/scala/docspell/store/records/RShare.scala b/modules/store/src/main/scala/docspell/store/records/RShare.scala index af0b1e40..4cef0929 100644 --- a/modules/store/src/main/scala/docspell/store/records/RShare.scala +++ b/modules/store/src/main/scala/docspell/store/records/RShare.scala @@ -102,7 +102,11 @@ object RShare { ) def findAllByCollective(cid: Ident): ConnectionIO[List[RShare]] = - Select(select(T.all), from(T), T.cid === cid).build.query[RShare].to[List] + Select(select(T.all), from(T), T.cid === cid) + .orderBy(T.publishedAt.desc) + .build + .query[RShare] + .to[List] def deleteByIdAndCid(id: Ident, cid: Ident): ConnectionIO[Int] = DML.delete(T, T.id === id && T.cid === cid) From 189009325e08bda7a1c8ab931970453eb6fddeeb Mon Sep 17 00:00:00 2001 From: eikek Date: Sat, 2 Oct 2021 23:08:01 +0200 Subject: [PATCH 38/75] Update tailwind to 2.2.16 --- modules/webapp/package-lock.json | 392 +++++++++++++++--------------- modules/webapp/package.json | 2 +- modules/webapp/tailwind.config.js | 2 +- 3 files changed, 204 insertions(+), 192 deletions(-) diff --git a/modules/webapp/package-lock.json b/modules/webapp/package-lock.json index 702326f0..6f8016f3 100644 --- a/modules/webapp/package-lock.json +++ b/modules/webapp/package-lock.json @@ -32,14 +32,6 @@ "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-5.15.3.tgz", "integrity": "sha512-rFnSUN/QOtnOAgqFRooTA3H57JLDm0QEG/jPdk+tLQNL/eWd+Aok8g3qCI+Q1xuDPWpGW/i9JySpJVsq8Q0s9w==" }, - "@fullhuman/postcss-purgecss": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@fullhuman/postcss-purgecss/-/postcss-purgecss-3.1.3.tgz", - "integrity": "sha512-kwOXw8fZ0Lt1QmeOOrd+o4Ibvp4UTEBFQbzvWldjlKv5n+G9sXfIPn1hh63IQIL8K8vbvv1oYMJiIUbuy9bGaA==", - "requires": { - "purgecss": "^3.1.3" - } - }, "@nodelib/fs.scandir": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", @@ -128,16 +120,16 @@ "picomatch": "^2.0.4" } }, + "arg": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz", + "integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==" + }, "array-union": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz", "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==" }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" - }, "autoprefixer": { "version": "10.2.5", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.2.5.tgz", @@ -517,9 +509,9 @@ } }, "didyoumean": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.1.tgz", - "integrity": "sha1-6S7f2tplN9SE1zwBcv0eugxJdv8=" + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" }, "dir-glob": { "version": "3.0.1", @@ -604,16 +596,15 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "fast-glob": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", - "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", + "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.2", - "picomatch": "^2.2.1" + "micromatch": "^4.0.4" } }, "fastq": { @@ -643,11 +634,10 @@ "integrity": "sha512-E1fz2Xs9ltlUp+qbiyx9wmt2n9dRzPsS11Jtdb8D2o+cC7wr9xkkKsVKJuBX0ST+LVS+LhLO+SbLJNtfWcJvXA==" }, "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", + "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", "requires": { - "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" @@ -680,9 +670,9 @@ "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==" }, "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -692,38 +682,6 @@ "path-is-absolute": "^1.0.0" } }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "requires": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" - }, - "dependencies": { - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "requires": { - "is-glob": "^2.0.0" - } - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "requires": { - "is-extglob": "^1.0.0" - } - } - } - }, "glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", @@ -913,11 +871,6 @@ "has": "^1.0.3" } }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=" - }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -1015,11 +968,6 @@ "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" }, - "lodash.toarray": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.toarray/-/lodash.toarray-4.4.0.tgz", - "integrity": "sha1-JMS/zWsvuji/0FlNsRedjptlZWE=" - }, "lodash.topath": { "version": "4.5.2", "resolved": "https://registry.npmjs.org/lodash.topath/-/lodash.topath-4.5.2.tgz", @@ -1041,12 +989,19 @@ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" }, "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", "requires": { "braces": "^3.0.1", - "picomatch": "^2.0.5" + "picomatch": "^2.2.3" + }, + "dependencies": { + "picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" + } } }, "mini-svg-data-uri": { @@ -1068,9 +1023,9 @@ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, "modern-normalize": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/modern-normalize/-/modern-normalize-1.0.0.tgz", - "integrity": "sha512-1lM+BMLGuDfsdwf3rsgBSrxJwAZHFIrQ8YR61xIqdHo0uNKI9M52wNpHSrliZATJp51On6JD0AfRxd4YGSU0lw==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/modern-normalize/-/modern-normalize-1.1.0.tgz", + "integrity": "sha512-2lMlY1Yc1+CUy0gw4H95uNN7vjbpoED7NNRSBHE25nWfLBdmMzFCsPshlzbxHz+gYMcBEUN8V4pU16prcdPSgA==" }, "nanoid": { "version": "3.1.22", @@ -1078,11 +1033,11 @@ "integrity": "sha512-/2ZUaJX2ANuLtTvqTlgqBQNJoQO398KyJgZloL0PZkC0dpysjncRUPsFe3DUPzz/y3h+u7C46np8RMuvF3jsSQ==" }, "node-emoji": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.10.0.tgz", - "integrity": "sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", "requires": { - "lodash.toarray": "^4.4.0" + "lodash": "^4.17.21" } }, "normalize-path": { @@ -1108,15 +1063,10 @@ "boolbase": "^1.0.0" } }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, "object-hash": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.1.1.tgz", - "integrity": "sha512-VOJmgmS+7wvXf8CjbQmimtCnEx3IAoLxI3fp2fbWehxrWBcAQFbk+vcwb6vzR0VZv/eNCJ/27j151ZTwqW/JeQ==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", + "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==" }, "once": { "version": "1.4.0", @@ -1146,32 +1096,6 @@ } } }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "requires": { - "glob-base": "^0.3.0", - "is-dotfile": "^1.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.0" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "requires": { - "is-extglob": "^1.0.0" - } - } - } - }, "parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", @@ -1303,42 +1227,6 @@ "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.0.tgz", "integrity": "sha512-hybnScTaZM2iEA6kzVQ6Spozy7kVdLw+lGw8hftLlBEzt93uzXoltkYp9u0tI8xbfhxDLTOOzHsHQCkYdmzRUg==" }, - "postcss-functions": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-functions/-/postcss-functions-3.0.0.tgz", - "integrity": "sha1-DpTQFERwCkgd4g3k1V+yZAVkJQ4=", - "requires": { - "glob": "^7.1.2", - "object-assign": "^4.1.1", - "postcss": "^6.0.9", - "postcss-value-parser": "^3.3.0" - }, - "dependencies": { - "postcss": { - "version": "6.0.23", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", - "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", - "requires": { - "chalk": "^2.4.1", - "source-map": "^0.6.1", - "supports-color": "^5.4.0" - } - }, - "postcss-value-parser": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, "postcss-import": { "version": "14.0.1", "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.0.1.tgz", @@ -1449,11 +1337,22 @@ } }, "postcss-nested": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.5.tgz", - "integrity": "sha512-GSRXYz5bccobpTzLQZXOnSOfKl6TwVr5CyAQJUPub4nuRJSOECK5AqurxVgmtxP48p0Kc/ndY/YyS1yqldX0Ew==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", + "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", "requires": { - "postcss-selector-parser": "^6.0.4" + "postcss-selector-parser": "^6.0.6" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", + "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + } } }, "postcss-normalize-charset": { @@ -1619,9 +1518,9 @@ "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=" }, "purgecss": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-3.1.3.tgz", - "integrity": "sha512-hRSLN9mguJ2lzlIQtW4qmPS2kh6oMnA9RxdIYK8sz18QYqd6ePp4GNDl18oWHA1f2v2NEQIh51CO8s/E3YGckQ==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-4.0.3.tgz", + "integrity": "sha512-PYOIn5ibRIP34PBU9zohUcCI09c7drPJJtTDAc0Q6QlRz2/CHQ8ywGLdE7ZhxU2VTqB7p5wkvj5Qcm05Rz3Jmw==", "requires": { "commander": "^6.0.0", "glob": "^7.0.0", @@ -1700,6 +1599,14 @@ "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=" }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "requires": { + "glob": "^7.1.3" + } + }, "run-parallel": { "version": "1.1.10", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.10.tgz", @@ -1829,37 +1736,42 @@ } }, "tailwindcss": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-2.1.1.tgz", - "integrity": "sha512-zZ6axGqpSZOCBS7wITm/WNHkBzDt5CIZlDlx0eCVldwTxFPELCVGbgh7Xpb3/kZp3cUxOmK7bZUjqhuMrbN6xQ==", + "version": "2.2.16", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-2.2.16.tgz", + "integrity": "sha512-EireCtpQyyJ4Xz8NYzHafBoy4baCOO96flM0+HgtsFcIQ9KFy/YBK3GEtlnD+rXen0e4xm8t3WiUcKBJmN6yjg==", "requires": { - "@fullhuman/postcss-purgecss": "^3.1.3", + "arg": "^5.0.1", "bytes": "^3.0.0", - "chalk": "^4.1.0", - "chokidar": "^3.5.1", - "color": "^3.1.3", + "chalk": "^4.1.2", + "chokidar": "^3.5.2", + "color": "^4.0.1", + "cosmiconfig": "^7.0.1", "detective": "^5.2.0", - "didyoumean": "^1.2.1", + "didyoumean": "^1.2.2", "dlv": "^1.1.3", - "fast-glob": "^3.2.5", - "fs-extra": "^9.1.0", + "fast-glob": "^3.2.7", + "fs-extra": "^10.0.0", + "glob-parent": "^6.0.1", "html-tags": "^3.1.0", + "is-color-stop": "^1.1.0", + "is-glob": "^4.0.1", "lodash": "^4.17.21", "lodash.topath": "^4.5.2", - "modern-normalize": "^1.0.0", - "node-emoji": "^1.8.1", + "modern-normalize": "^1.1.0", + "node-emoji": "^1.11.0", "normalize-path": "^3.0.0", - "object-hash": "^2.1.1", - "parse-glob": "^3.0.4", - "postcss-functions": "^3", + "object-hash": "^2.2.0", "postcss-js": "^3.0.3", - "postcss-nested": "5.0.5", - "postcss-selector-parser": "^6.0.4", + "postcss-load-config": "^3.1.0", + "postcss-nested": "5.0.6", + "postcss-selector-parser": "^6.0.6", "postcss-value-parser": "^4.1.0", "pretty-hrtime": "^1.0.3", + "purgecss": "^4.0.3", "quick-lru": "^5.1.1", "reduce-css-calc": "^2.1.8", - "resolve": "^1.20.0" + "resolve": "^1.20.0", + "tmp": "^0.2.1" }, "dependencies": { "ansi-styles": { @@ -1870,15 +1782,58 @@ "color-convert": "^2.0.1" } }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, + "chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "color": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/color/-/color-4.0.1.tgz", + "integrity": "sha512-rpZjOKN5O7naJxkH2Rx1sZzzBgaiWECc6BYXjeCE6kF0kcASJYbUq02u7JqIHwCb/j3NhV+QhRL2683aICeGZA==", + "requires": { + "color-convert": "^2.0.1", + "color-string": "^1.6.0" + } + }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -1892,17 +1847,66 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "color-string": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.6.0.tgz", + "integrity": "sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA==", "requires": { - "has-flag": "^4.0.0" + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "cosmiconfig": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "requires": { + "is-glob": "^4.0.3" + }, + "dependencies": { + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "requires": { + "is-extglob": "^2.1.1" + } + } + } + }, + "postcss-selector-parser": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", + "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "requires": { + "picomatch": "^2.2.1" } } } @@ -1912,6 +1916,14 @@ "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" }, + "tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "requires": { + "rimraf": "^3.0.0" + } + }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", diff --git a/modules/webapp/package.json b/modules/webapp/package.json index fa662612..d5c85f4b 100644 --- a/modules/webapp/package.json +++ b/modules/webapp/package.json @@ -11,6 +11,6 @@ "postcss": "^8.2.9", "postcss-cli": "^9.0.0", "postcss-import": "^14.0.1", - "tailwindcss": "^2.1.1" + "tailwindcss": "^2.2.16" } } diff --git a/modules/webapp/tailwind.config.js b/modules/webapp/tailwind.config.js index 8dcb72c4..3578b787 100644 --- a/modules/webapp/tailwind.config.js +++ b/modules/webapp/tailwind.config.js @@ -19,7 +19,7 @@ module.exports = { orange: colors.orange, teal: colors.teal, lime: colors.lime, - lightblue: colors.lightBlue + lightblue: colors.sky } } }, From aa21e7a74cce60965fe3647cb4897db4e07a12ae Mon Sep 17 00:00:00 2001 From: eikek Date: Sat, 2 Oct 2021 23:46:58 +0200 Subject: [PATCH 39/75] Create shares from search and select view --- .../webapp/src/main/elm/Comp/PublishItems.elm | 292 ++++++++++++++++++ .../webapp/src/main/elm/Comp/ShareForm.elm | 35 ++- .../webapp/src/main/elm/Comp/ShareManage.elm | 228 ++++++++------ .../webapp/src/main/elm/Comp/ShareTable.elm | 11 +- .../webapp/src/main/elm/Comp/ShareView.elm | 184 +++++++++++ .../main/elm/Messages/Comp/PublishItems.elm | 82 +++++ .../main/elm/Messages/Comp/ShareManage.elm | 7 + .../src/main/elm/Messages/Comp/ShareTable.elm | 6 +- .../src/main/elm/Messages/Comp/ShareView.elm | 66 ++++ .../src/main/elm/Messages/Page/Home.elm | 19 ++ .../webapp/src/main/elm/Page/Home/Data.elm | 32 +- .../webapp/src/main/elm/Page/Home/Update.elm | 118 +++++++ .../webapp/src/main/elm/Page/Home/View2.elm | 92 +++++- modules/webapp/src/main/elm/Styles.elm | 5 + 14 files changed, 1046 insertions(+), 131 deletions(-) create mode 100644 modules/webapp/src/main/elm/Comp/PublishItems.elm create mode 100644 modules/webapp/src/main/elm/Comp/ShareView.elm create mode 100644 modules/webapp/src/main/elm/Messages/Comp/PublishItems.elm create mode 100644 modules/webapp/src/main/elm/Messages/Comp/ShareView.elm diff --git a/modules/webapp/src/main/elm/Comp/PublishItems.elm b/modules/webapp/src/main/elm/Comp/PublishItems.elm new file mode 100644 index 00000000..2a491f15 --- /dev/null +++ b/modules/webapp/src/main/elm/Comp/PublishItems.elm @@ -0,0 +1,292 @@ +{- + Copyright 2020 Eike K. & Contributors + + SPDX-License-Identifier: AGPL-3.0-or-later +-} + + +module Comp.PublishItems exposing + ( Model + , Msg + , Outcome(..) + , init + , initQuery + , update + , view + ) + +import Api +import Api.Model.IdResult exposing (IdResult) +import Api.Model.ShareDetail exposing (ShareDetail) +import Comp.Basic as B +import Comp.MenuBar as MB +import Comp.ShareForm +import Comp.ShareView +import Data.Flags exposing (Flags) +import Data.Icons as Icons +import Data.ItemQuery exposing (ItemQuery) +import Data.SearchMode exposing (SearchMode) +import Html exposing (..) +import Html.Attributes exposing (..) +import Http +import Messages.Comp.PublishItems exposing (Texts) +import Ports +import Styles as S + + + +--- Model + + +type ViewMode + = ViewModeEdit + | ViewModeInfo ShareDetail + + +type FormError + = FormErrorNone + | FormErrorHttp Http.Error + | FormErrorInvalid + | FormErrorSubmit String + + +type alias Model = + { formModel : Comp.ShareForm.Model + , viewMode : ViewMode + , formError : FormError + , loading : Bool + } + + +init : ( Model, Cmd Msg ) +init = + let + ( fm, fc ) = + Comp.ShareForm.init + in + ( { formModel = fm + , viewMode = ViewModeEdit + , formError = FormErrorNone + , loading = False + } + , Cmd.map FormMsg fc + ) + + +initQuery : ItemQuery -> ( Model, Cmd Msg ) +initQuery query = + let + ( fm, fc ) = + Comp.ShareForm.initQuery (Data.ItemQuery.render query) + in + ( { formModel = fm + , viewMode = ViewModeEdit + , formError = FormErrorNone + , loading = False + } + , Cmd.map FormMsg fc + ) + + + +--- Update + + +type Msg + = FormMsg Comp.ShareForm.Msg + | CancelPublish + | SubmitPublish + | PublishResp (Result Http.Error IdResult) + | GetShareResp (Result Http.Error ShareDetail) + + +type Outcome + = OutcomeDone + | OutcomeInProgress + + +type alias UpdateResult = + { model : Model + , cmd : Cmd Msg + , outcome : Outcome + } + + +update : Flags -> Msg -> Model -> UpdateResult +update flags msg model = + case msg of + CancelPublish -> + { model = model + , cmd = Cmd.none + , outcome = OutcomeDone + } + + FormMsg lm -> + let + ( fm, fc ) = + Comp.ShareForm.update flags lm model.formModel + in + { model = { model | formModel = fm } + , cmd = Cmd.map FormMsg fc + , outcome = OutcomeInProgress + } + + SubmitPublish -> + case Comp.ShareForm.getShare model.formModel of + Just ( _, data ) -> + { model = { model | loading = True } + , cmd = Api.addShare flags data PublishResp + , outcome = OutcomeInProgress + } + + Nothing -> + { model = { model | formError = FormErrorInvalid } + , cmd = Cmd.none + , outcome = OutcomeInProgress + } + + PublishResp (Ok res) -> + if res.success then + { model = model + , cmd = Api.getShare flags res.id GetShareResp + , outcome = OutcomeInProgress + } + + else + { model = { model | formError = FormErrorSubmit res.message, loading = False } + , cmd = Cmd.none + , outcome = OutcomeInProgress + } + + PublishResp (Err err) -> + { model = { model | formError = FormErrorHttp err, loading = False } + , cmd = Cmd.none + , outcome = OutcomeInProgress + } + + GetShareResp (Ok share) -> + { model = + { model + | formError = FormErrorNone + , loading = False + , viewMode = ViewModeInfo share + } + , cmd = Ports.initClipboard (Comp.ShareView.clipboardData share) + , outcome = OutcomeInProgress + } + + GetShareResp (Err err) -> + { model = { model | formError = FormErrorHttp err, loading = False } + , cmd = Cmd.none + , outcome = OutcomeInProgress + } + + + +--- View + + +view : Texts -> Flags -> Model -> Html Msg +view texts flags model = + div [] + [ B.loadingDimmer + { active = model.loading + , label = "" + } + , case model.viewMode of + ViewModeEdit -> + viewForm texts model + + ViewModeInfo share -> + viewInfo texts flags model share + ] + + +viewInfo : Texts -> Flags -> Model -> ShareDetail -> Html Msg +viewInfo texts flags model share = + let + cfg = + { mainClasses = "" + , showAccessData = False + } + in + div [ class "px-2 mb-4" ] + [ h1 [ class S.header1 ] + [ text texts.title + ] + , div + [ class S.infoMessage + ] + [ text texts.infoText + ] + , MB.view <| + { start = + [ MB.SecondaryButton + { tagger = CancelPublish + , title = texts.cancelPublishTitle + , icon = Just "fa fa-arrow-left" + , label = texts.doneLabel + } + ] + , end = [] + , rootClasses = "my-4" + } + , div [] + [ Comp.ShareView.view cfg texts.shareView flags share + ] + ] + + +viewForm : Texts -> Model -> Html Msg +viewForm texts model = + div [ class "px-2 mb-4" ] + [ h1 [ class S.header1 ] + [ text texts.title + ] + , div + [ class S.infoMessage + ] + [ text texts.infoText + ] + , MB.view <| + { start = + [ MB.PrimaryButton + { tagger = SubmitPublish + , title = texts.submitPublishTitle + , icon = Just Icons.share + , label = texts.submitPublish + } + , MB.SecondaryButton + { tagger = CancelPublish + , title = texts.cancelPublishTitle + , icon = Just "fa fa-times" + , label = texts.cancelPublish + } + ] + , end = [] + , rootClasses = "my-4" + } + , div [] + [ Html.map FormMsg (Comp.ShareForm.view texts.shareForm model.formModel) + ] + , div + [ classList + [ ( "hidden", model.formError == FormErrorNone ) + ] + , class "my-2" + , class S.errorMessage + ] + [ case model.formError of + FormErrorNone -> + text "" + + FormErrorHttp err -> + text (texts.httpError err) + + FormErrorInvalid -> + text texts.correctFormErrors + + FormErrorSubmit m -> + text m + ] + ] diff --git a/modules/webapp/src/main/elm/Comp/ShareForm.elm b/modules/webapp/src/main/elm/Comp/ShareForm.elm index 4f2d39cf..d07e74a4 100644 --- a/modules/webapp/src/main/elm/Comp/ShareForm.elm +++ b/modules/webapp/src/main/elm/Comp/ShareForm.elm @@ -5,7 +5,7 @@ -} -module Comp.ShareForm exposing (Model, Msg, getShare, init, setShare, update, view) +module Comp.ShareForm exposing (Model, Msg, getShare, init, initQuery, setShare, update, view) import Api.Model.ShareData exposing (ShareData) import Api.Model.ShareDetail exposing (ShareDetail) @@ -36,16 +36,16 @@ type alias Model = } -init : ( Model, Cmd Msg ) -init = +initQuery : String -> ( Model, Cmd Msg ) +initQuery q = let ( dp, dpc ) = Comp.DatePicker.init in ( { share = Api.Model.ShareDetail.empty , name = Nothing - , query = "" - , enabled = False + , query = q + , enabled = True , passwordModel = Comp.PasswordInput.init , password = Nothing , passwordSet = False @@ -57,6 +57,11 @@ init = ) +init : ( Model, Cmd Msg ) +init = + initQuery "" + + isValid : Model -> Bool isValid model = model.query /= "" && model.untilDate /= Nothing @@ -206,7 +211,7 @@ view texts model = , class S.textInput , classList [ ( S.inputErrorBorder - , not (isValid model) + , model.query == "" ) ] ] @@ -265,12 +270,16 @@ view texts model = ] ] ] - , div [ class "mb-2 max-w-sm" ] + , div + [ class "mb-2 max-w-sm" + ] [ label [ class S.inputLabel ] [ text texts.publishUntil , B.inputRequired ] - , div [ class "relative" ] + , div + [ class "relative" + ] [ Html.map UntilDateMsg (Comp.DatePicker.viewTimeDefault model.untilDate @@ -278,5 +287,15 @@ view texts model = ) , i [ class S.dateInputIcon, class "fa fa-calendar" ] [] ] + , div + [ classList + [ ( "hidden" + , model.untilDate /= Nothing + ) + ] + , class "mt-1" + , class S.errorText + ] + [ text "This field is required." ] ] ] diff --git a/modules/webapp/src/main/elm/Comp/ShareManage.elm b/modules/webapp/src/main/elm/Comp/ShareManage.elm index 4fc431af..472680c4 100644 --- a/modules/webapp/src/main/elm/Comp/ShareManage.elm +++ b/modules/webapp/src/main/elm/Comp/ShareManage.elm @@ -17,12 +17,14 @@ import Comp.ItemDetail.Model exposing (Msg(..)) import Comp.MenuBar as MB import Comp.ShareForm import Comp.ShareTable +import Comp.ShareView import Data.Flags exposing (Flags) import Html exposing (..) import Html.Attributes exposing (..) import Html.Events exposing (onClick) import Http import Messages.Comp.ShareManage exposing (Texts) +import Ports import Styles as S @@ -107,7 +109,7 @@ update flags msg model = share = Api.Model.ShareDetail.empty in - update flags (FormMsg (Comp.ShareForm.setShare share)) nm + update flags (FormMsg (Comp.ShareForm.setShare { share | enabled = True })) nm SetViewMode vm -> ( { model | viewMode = vm, formError = FormErrorNone } @@ -129,13 +131,10 @@ update flags msg model = let action = Comp.ShareTable.update lm - - nextModel = - { model | viewMode = Form, formError = FormErrorNone } in case action of Comp.ShareTable.Edit share -> - update flags (FormMsg <| Comp.ShareForm.setShare share) nextModel + setShare share flags model RequestDelete -> ( { model | deleteConfirm = DeleteConfirmOn }, Cmd.none ) @@ -190,11 +189,7 @@ update flags msg model = ( { model | loading = False, formError = FormErrorHttp err }, Cmd.none ) GetShareResp (Ok share) -> - let - nextModel = - { model | formError = FormErrorNone, loading = False } - in - update flags (FormMsg <| Comp.ShareForm.setShare share) nextModel + setShare share flags model GetShareResp (Err err) -> ( { model | formError = FormErrorHttp err }, Cmd.none ) @@ -210,17 +205,32 @@ update flags msg model = ( { model | formError = FormErrorHttp err, loading = False }, Cmd.none ) +setShare : ShareDetail -> Flags -> Model -> ( Model, Cmd Msg ) +setShare share flags model = + let + nextModel = + { model | formError = FormErrorNone, viewMode = Form, loading = False } + + initClipboard = + Ports.initClipboard (Comp.ShareView.clipboardData share) + + ( nm, nc ) = + update flags (FormMsg <| Comp.ShareForm.setShare share) nextModel + in + ( nm, Cmd.batch [ initClipboard, nc ] ) + + --- view view : Texts -> Flags -> Model -> Html Msg -view texts _ model = +view texts flags model = if model.viewMode == Table then viewTable texts model else - viewForm texts model + viewForm texts flags model viewTable : Texts -> Model -> Html Msg @@ -247,103 +257,119 @@ viewTable texts model = ] -viewForm : Texts -> Model -> Html Msg -viewForm texts model = +viewForm : Texts -> Flags -> Model -> Html Msg +viewForm texts flags model = let newShare = model.formModel.share.id == "" in - Html.form [ class "relative" ] - [ if newShare then - h1 [ class S.header2 ] - [ text texts.createNewShare - ] - - else - h1 [ class S.header2 ] - [ text <| Maybe.withDefault texts.noName model.formModel.share.name - , div [ class "opacity-50 text-sm" ] - [ text "Id: " - , text model.formModel.share.id + div [ class "relative" ] + [ Html.form [] + [ if newShare then + h1 [ class S.header2 ] + [ text texts.createNewShare ] - ] - , MB.view - { start = - [ MB.PrimaryButton - { tagger = Submit - , title = "Submit this form" - , icon = Just "fa fa-save" - , label = texts.basics.submit - } - , MB.SecondaryButton - { tagger = SetViewMode Table - , title = texts.basics.backToList - , icon = Just "fa fa-arrow-left" - , label = texts.basics.cancel - } - ] - , end = - if not newShare then - [ MB.DeleteButton - { tagger = RequestDelete - , title = texts.deleteThisShare - , icon = Just "fa fa-trash" - , label = texts.basics.delete + + else + h1 [ class S.header2 ] + [ text <| Maybe.withDefault texts.noName model.formModel.share.name + , div [ class "opacity-50 text-sm" ] + [ text "Id: " + , text model.formModel.share.id + ] + ] + , MB.view + { start = + [ MB.PrimaryButton + { tagger = Submit + , title = "Submit this form" + , icon = Just "fa fa-save" + , label = texts.basics.submit + } + , MB.SecondaryButton + { tagger = SetViewMode Table + , title = texts.basics.backToList + , icon = Just "fa fa-arrow-left" + , label = texts.basics.cancel } ] + , end = + if not newShare then + [ MB.DeleteButton + { tagger = RequestDelete + , title = texts.deleteThisShare + , icon = Just "fa fa-trash" + , label = texts.basics.delete + } + ] - else - [] - , rootClasses = "mb-4" - } - , div - [ classList - [ ( "hidden", model.formError == FormErrorNone ) + else + [] + , rootClasses = "mb-4" + } + , div + [ classList + [ ( "hidden", model.formError == FormErrorNone ) + ] + , class "my-2" + , class S.errorMessage ] - , class "my-2" - , class S.errorMessage + [ case model.formError of + FormErrorNone -> + text "" + + FormErrorHttp err -> + text (texts.httpError err) + + FormErrorInvalid -> + text texts.correctFormErrors + + FormErrorSubmit m -> + text m + ] + , Html.map FormMsg (Comp.ShareForm.view texts.shareForm model.formModel) + , B.loadingDimmer + { active = model.loading + , label = texts.basics.loading + } + , B.contentDimmer + (model.deleteConfirm == DeleteConfirmOn) + (div [ class "flex flex-col" ] + [ div [ class "text-lg" ] + [ i [ class "fa fa-info-circle mr-2" ] [] + , text texts.reallyDeleteShare + ] + , div [ class "mt-4 flex flex-row items-center" ] + [ B.deleteButton + { label = texts.basics.yes + , icon = "fa fa-check" + , disabled = False + , handler = onClick (DeleteShareNow model.formModel.share.id) + , attrs = [ href "#" ] + } + , B.secondaryButton + { label = texts.basics.no + , icon = "fa fa-times" + , disabled = False + , handler = onClick CancelDelete + , attrs = [ href "#", class "ml-2" ] + } + ] + ] + ) ] - [ case model.formError of - FormErrorNone -> - text "" - - FormErrorHttp err -> - text (texts.httpError err) - - FormErrorInvalid -> - text texts.correctFormErrors - - FormErrorSubmit m -> - text m - ] - , Html.map FormMsg (Comp.ShareForm.view texts.shareForm model.formModel) - , B.loadingDimmer - { active = model.loading - , label = texts.basics.loading - } - , B.contentDimmer - (model.deleteConfirm == DeleteConfirmOn) - (div [ class "flex flex-col" ] - [ div [ class "text-lg" ] - [ i [ class "fa fa-info-circle mr-2" ] [] - , text texts.reallyDeleteShare - ] - , div [ class "mt-4 flex flex-row items-center" ] - [ B.deleteButton - { label = texts.basics.yes - , icon = "fa fa-check" - , disabled = False - , handler = onClick (DeleteShareNow model.formModel.share.id) - , attrs = [ href "#" ] - } - , B.secondaryButton - { label = texts.basics.no - , icon = "fa fa-times" - , disabled = False - , handler = onClick CancelDelete - , attrs = [ href "#", class "ml-2" ] - } - ] - ] - ) + , shareInfo texts flags model.formModel.share + ] + + +shareInfo : Texts -> Flags -> ShareDetail -> Html Msg +shareInfo texts flags share = + div + [ class "mt-6" + , classList [ ( "hidden", share.id == "" ) ] + ] + [ h2 [ class S.header2 ] + [ text texts.shareInformation + ] + , Comp.ShareView.viewDefault texts.shareView flags share ] diff --git a/modules/webapp/src/main/elm/Comp/ShareTable.elm b/modules/webapp/src/main/elm/Comp/ShareTable.elm index 940f64c5..b62f39b5 100644 --- a/modules/webapp/src/main/elm/Comp/ShareTable.elm +++ b/modules/webapp/src/main/elm/Comp/ShareTable.elm @@ -54,7 +54,7 @@ view texts shares = [ text texts.basics.name ] , th [ class "text-center" ] - [ text texts.enabled + [ text texts.active ] , th [ class "text-center" ] [ text texts.publishUntil @@ -79,7 +79,14 @@ renderShareLine texts share = [ text (Maybe.withDefault "-" share.name) ] , td [ class "w-px px-2 text-center" ] - [ Util.Html.checkbox2 share.enabled + [ if not share.enabled then + i [ class "fa fa-ban" ] [] + + else if share.expired then + i [ class "fa fa-bolt text-red-600 dark:text-orange-800" ] [] + + else + i [ class "fa fa-check" ] [] ] , td [ class "hidden sm:table-cell text-center" ] [ texts.formatDateTime share.publishUntil |> text diff --git a/modules/webapp/src/main/elm/Comp/ShareView.elm b/modules/webapp/src/main/elm/Comp/ShareView.elm new file mode 100644 index 00000000..f7d4962f --- /dev/null +++ b/modules/webapp/src/main/elm/Comp/ShareView.elm @@ -0,0 +1,184 @@ +{- + Copyright 2020 Eike K. & Contributors + + SPDX-License-Identifier: AGPL-3.0-or-later +-} + + +module Comp.ShareView exposing (ViewSettings, clipboardData, view, viewDefault) + +import Api.Model.ShareDetail exposing (ShareDetail) +import Data.Flags exposing (Flags) +import Html exposing (..) +import Html.Attributes exposing (..) +import Messages.Comp.ShareView exposing (Texts) +import QRCode +import Styles as S + + +type alias ViewSettings = + { mainClasses : String + , showAccessData : Bool + } + + +view : ViewSettings -> Texts -> Flags -> ShareDetail -> Html msg +view cfg texts flags share = + if not share.enabled then + viewDisabled cfg texts share + + else if share.expired then + viewExpired cfg texts share + + else + viewActive cfg texts flags share + + +viewDefault : Texts -> Flags -> ShareDetail -> Html msg +viewDefault = + view + { mainClasses = "" + , showAccessData = True + } + + +clipboardData : ShareDetail -> ( String, String ) +clipboardData share = + ( "app-share-" ++ share.id, "#app-share-url-copy-to-clipboard-btn-" ++ share.id ) + + + +--- Helper + + +viewActive : ViewSettings -> Texts -> Flags -> ShareDetail -> Html msg +viewActive cfg texts flags share = + let + clipboard = + clipboardData share + + appUrl = + flags.config.baseUrl ++ "/app/share/" ++ share.id + + styleUrl = + "truncate px-2 py-2 border-0 border-t border-b border-r font-mono text-sm my-auto rounded-r border-gray-400 dark:border-bluegray-500" + + infoLine hidden icon label value = + div + [ class "flex flex-row items-center" + , classList [ ( "hidden", hidden ) ] + ] + [ div [ class "flex mr-3" ] + [ i [ class icon ] [] + ] + , div [ class "flex flex-col" ] + [ div [ class "-mb-1" ] + [ text value + ] + , div [ class "opacity-50 text-sm" ] + [ text label + ] + ] + ] + in + div + [ class cfg.mainClasses + , class "flex flex-col sm:flex-row " + ] + [ div [ class "flex" ] + [ div + [ class S.border + , class S.qrCode + ] + [ qrCodeView texts appUrl + ] + ] + , div + [ class "flex flex-col ml-3 pr-2" + + -- hack for the qr code that is 265px + , style "max-width" "calc(100% - 265px)" + ] + [ div [ class "font-medium text-2xl" ] + [ text <| Maybe.withDefault texts.noName share.name + ] + , div [ class "my-2" ] + [ div [ class "flex flex-row" ] + [ a + [ class S.secondaryBasicButtonPlain + , class "rounded-l border text-sm px-4 py-2" + , title texts.copyToClipboard + , href "#" + , Tuple.second clipboard + |> String.dropLeft 1 + |> id + , attribute "data-clipboard-target" ("#" ++ Tuple.first clipboard) + ] + [ i [ class "fa fa-copy" ] [] + ] + , a + [ class S.secondaryBasicButtonPlain + , class "px-4 py-2 border-0 border-t border-b border-r text-sm" + , href appUrl + , target "_blank" + , title texts.openInNewTab + ] + [ i [ class "fa fa-external-link-alt" ] [] + ] + , div + [ id (Tuple.first clipboard) + , class styleUrl + ] + [ text appUrl + ] + ] + ] + , div [ class "text-lg flex flex-col" ] + [ infoLine False "fa fa-calendar" texts.publishUntil (texts.date share.publishUntil) + , infoLine False + (if share.password then + "fa fa-lock" + + else + "fa fa-lock-open" + ) + texts.passwordProtected + (if share.password then + texts.basics.yes + + else + texts.basics.no + ) + , infoLine + (not cfg.showAccessData) + "fa fa-eye" + texts.views + (String.fromInt share.views) + , infoLine + (not cfg.showAccessData) + "fa fa-calendar-check font-thin" + texts.lastAccess + (Maybe.map texts.date share.lastAccess |> Maybe.withDefault "-") + ] + ] + ] + + +viewExpired : ViewSettings -> Texts -> ShareDetail -> Html msg +viewExpired cfg texts share = + div [ class S.warnMessage ] + [ text texts.expiredInfo ] + + +viewDisabled : ViewSettings -> Texts -> ShareDetail -> Html msg +viewDisabled cfg texts share = + div [ class S.warnMessage ] + [ text texts.disabledInfo ] + + +qrCodeView : Texts -> String -> Html msg +qrCodeView texts message = + QRCode.encode message + |> Result.map QRCode.toSvg + |> Result.withDefault + (Html.text texts.qrCodeError) diff --git a/modules/webapp/src/main/elm/Messages/Comp/PublishItems.elm b/modules/webapp/src/main/elm/Messages/Comp/PublishItems.elm new file mode 100644 index 00000000..269f68ef --- /dev/null +++ b/modules/webapp/src/main/elm/Messages/Comp/PublishItems.elm @@ -0,0 +1,82 @@ +{- + Copyright 2020 Eike K. & Contributors + + SPDX-License-Identifier: AGPL-3.0-or-later +-} + + +module Messages.Comp.PublishItems exposing + ( Texts + , de + , gb + ) + +import Http +import Messages.Basics +import Messages.Comp.HttpError +import Messages.Comp.ShareForm +import Messages.Comp.ShareView +import Messages.DateFormat +import Messages.UiLanguage + + +type alias Texts = + { basics : Messages.Basics.Texts + , httpError : Http.Error -> String + , shareForm : Messages.Comp.ShareForm.Texts + , shareView : Messages.Comp.ShareView.Texts + , title : String + , infoText : String + , formatDateLong : Int -> String + , formatDateShort : Int -> String + , submitPublish : String + , cancelPublish : String + , submitPublishTitle : String + , cancelPublishTitle : String + , publishSuccessful : String + , publishInProcess : String + , correctFormErrors : String + , doneLabel : String + } + + +gb : Texts +gb = + { basics = Messages.Basics.gb + , httpError = Messages.Comp.HttpError.gb + , shareForm = Messages.Comp.ShareForm.gb + , shareView = Messages.Comp.ShareView.gb + , title = "Publish Items" + , infoText = "Publishing items creates a cryptic link, which can be used by everyone to see the selected documents. This link cannot be guessed, but is public! It exists for a certain amount of time and can be further protected using a password." + , formatDateLong = Messages.DateFormat.formatDateLong Messages.UiLanguage.English + , formatDateShort = Messages.DateFormat.formatDateShort Messages.UiLanguage.English + , submitPublish = "Publish" + , submitPublishTitle = "Publish the documents now" + , cancelPublish = "Cancel" + , cancelPublishTitle = "Back to select view" + , publishSuccessful = "Items published successfully" + , publishInProcess = "Items are published …" + , correctFormErrors = "Please correct the errors in the form." + , doneLabel = "Done" + } + + +de : Texts +de = + { basics = Messages.Basics.de + , httpError = Messages.Comp.HttpError.de + , shareForm = Messages.Comp.ShareForm.de + , shareView = Messages.Comp.ShareView.de + , title = "Dokumente publizieren" + , infoText = "Beim Publizieren der Dokumente wird ein kryptischer Link erzeugt, mit welchem jeder die dahinter publizierten Dokumente einsehen kann. Dieser Link kann nicht erraten werden, ist aber öffentlich. Er ist zeitlich begrenzt und kann zusätzlich mit einem Passwort geschützt werden." + , formatDateLong = Messages.DateFormat.formatDateLong Messages.UiLanguage.German + , formatDateShort = Messages.DateFormat.formatDateShort Messages.UiLanguage.German + , submitPublish = "Publizieren" + , submitPublishTitle = "Dokumente jetzt publizieren" + , cancelPublish = "Abbrechen" + , cancelPublishTitle = "Zurück zur Auswahl" + , publishSuccessful = "Die Dokumente wurden erfolgreich publiziert." + , publishInProcess = "Dokumente werden publiziert…" + , correctFormErrors = "Bitte korrigiere die Fehler im Formular." + , doneLabel = "Fertig" + } diff --git a/modules/webapp/src/main/elm/Messages/Comp/ShareManage.elm b/modules/webapp/src/main/elm/Messages/Comp/ShareManage.elm index 66b27e6e..c415d3c8 100644 --- a/modules/webapp/src/main/elm/Messages/Comp/ShareManage.elm +++ b/modules/webapp/src/main/elm/Messages/Comp/ShareManage.elm @@ -16,12 +16,14 @@ import Messages.Basics import Messages.Comp.HttpError import Messages.Comp.ShareForm import Messages.Comp.ShareTable +import Messages.Comp.ShareView type alias Texts = { basics : Messages.Basics.Texts , shareTable : Messages.Comp.ShareTable.Texts , shareForm : Messages.Comp.ShareForm.Texts + , shareView : Messages.Comp.ShareView.Texts , httpError : Http.Error -> String , newShare : String , copyToClipboard : String @@ -33,6 +35,7 @@ type alias Texts = , errorGeneratingQR : String , correctFormErrors : String , noName : String + , shareInformation : String } @@ -42,6 +45,7 @@ gb = , httpError = Messages.Comp.HttpError.gb , shareTable = Messages.Comp.ShareTable.gb , shareForm = Messages.Comp.ShareForm.gb + , shareView = Messages.Comp.ShareView.gb , newShare = "New share" , copyToClipboard = "Copy to clipboard" , openInNewTab = "Open in new tab/window" @@ -52,6 +56,7 @@ gb = , errorGeneratingQR = "Error generating QR Code" , correctFormErrors = "Please correct the errors in the form." , noName = "No Name" + , shareInformation = "Share Information" } @@ -60,6 +65,7 @@ de = { basics = Messages.Basics.de , shareTable = Messages.Comp.ShareTable.de , shareForm = Messages.Comp.ShareForm.de + , shareView = Messages.Comp.ShareView.de , httpError = Messages.Comp.HttpError.de , newShare = "Neue Freigabe" , copyToClipboard = "In die Zwischenablage kopieren" @@ -71,4 +77,5 @@ de = , errorGeneratingQR = "Fehler beim Generieren des QR-Code" , correctFormErrors = "Bitte korrigiere die Fehler im Formular." , noName = "Ohne Name" + , shareInformation = "Informationen zur Freigabe" } diff --git a/modules/webapp/src/main/elm/Messages/Comp/ShareTable.elm b/modules/webapp/src/main/elm/Messages/Comp/ShareTable.elm index 7b68fcc4..5b87e47e 100644 --- a/modules/webapp/src/main/elm/Messages/Comp/ShareTable.elm +++ b/modules/webapp/src/main/elm/Messages/Comp/ShareTable.elm @@ -19,7 +19,7 @@ import Messages.UiLanguage type alias Texts = { basics : Messages.Basics.Texts , formatDateTime : Int -> String - , enabled : String + , active : String , publishUntil : String } @@ -28,7 +28,7 @@ gb : Texts gb = { basics = Messages.Basics.gb , formatDateTime = DF.formatDateTimeLong Messages.UiLanguage.English - , enabled = "Enabled" + , active = "Active" , publishUntil = "Publish Until" } @@ -37,6 +37,6 @@ de : Texts de = { basics = Messages.Basics.de , formatDateTime = DF.formatDateTimeLong Messages.UiLanguage.German - , enabled = "Aktiv" + , active = "Aktiv" , publishUntil = "Publiziert bis" } diff --git a/modules/webapp/src/main/elm/Messages/Comp/ShareView.elm b/modules/webapp/src/main/elm/Messages/Comp/ShareView.elm new file mode 100644 index 00000000..86f15c07 --- /dev/null +++ b/modules/webapp/src/main/elm/Messages/Comp/ShareView.elm @@ -0,0 +1,66 @@ +{- + Copyright 2020 Eike K. & Contributors + + SPDX-License-Identifier: AGPL-3.0-or-later +-} + + +module Messages.Comp.ShareView exposing + ( Texts + , de + , gb + ) + +import Messages.Basics +import Messages.DateFormat as DF +import Messages.UiLanguage + + +type alias Texts = + { basics : Messages.Basics.Texts + , date : Int -> String + , qrCodeError : String + , expiredInfo : String + , disabledInfo : String + , noName : String + , copyToClipboard : String + , openInNewTab : String + , publishUntil : String + , passwordProtected : String + , views : String + , lastAccess : String + } + + +gb : Texts +gb = + { basics = Messages.Basics.gb + , date = DF.formatDateLong Messages.UiLanguage.English + , qrCodeError = "Error generating QR Code." + , expiredInfo = "This share has expired." + , disabledInfo = "This share is disabled." + , noName = "No Name" + , copyToClipboard = "Copy to clipboard" + , openInNewTab = "Open in new tab/window" + , publishUntil = "Published Until" + , passwordProtected = "Password protected" + , views = "Views" + , lastAccess = "Last Access" + } + + +de : Texts +de = + { basics = Messages.Basics.de + , date = DF.formatDateLong Messages.UiLanguage.German + , qrCodeError = "Fehler beim Erzeugen des QR-Codes." + , expiredInfo = "Diese Freigabe ist abgelaufen." + , disabledInfo = "Diese Freigae ist nicht aktiv." + , noName = "Ohne Name" + , copyToClipboard = "In die Zwischenablage kopieren" + , openInNewTab = "Im neuen Tab/Fenster öffnen" + , publishUntil = "Publiziert bis" + , passwordProtected = "Passwordgeschützt" + , views = "Aufrufe" + , lastAccess = "Letzter Zugriff" + } diff --git a/modules/webapp/src/main/elm/Messages/Page/Home.elm b/modules/webapp/src/main/elm/Messages/Page/Home.elm index f51c5202..dada7a27 100644 --- a/modules/webapp/src/main/elm/Messages/Page/Home.elm +++ b/modules/webapp/src/main/elm/Messages/Page/Home.elm @@ -14,6 +14,7 @@ module Messages.Page.Home exposing import Messages.Basics import Messages.Comp.ItemCardList import Messages.Comp.ItemMerge +import Messages.Comp.PublishItems import Messages.Comp.SearchStatsView import Messages.Page.HomeSideMenu @@ -24,6 +25,7 @@ type alias Texts = , searchStatsView : Messages.Comp.SearchStatsView.Texts , sideMenu : Messages.Page.HomeSideMenu.Texts , itemMerge : Messages.Comp.ItemMerge.Texts + , publishItems : Messages.Comp.PublishItems.Texts , contentSearch : String , searchInNames : String , selectModeTitle : String @@ -42,6 +44,11 @@ type alias Texts = , resetSearchForm : String , exitSelectMode : String , mergeItemsTitle : Int -> String + , publishItemsTitle : Int -> String + , publishCurrentQueryTitle : String + , nothingSelectedToShare : String + , loadMore : String + , thatsAll : String } @@ -52,6 +59,7 @@ gb = , searchStatsView = Messages.Comp.SearchStatsView.gb , sideMenu = Messages.Page.HomeSideMenu.gb , itemMerge = Messages.Comp.ItemMerge.gb + , publishItems = Messages.Comp.PublishItems.gb , contentSearch = "Content search…" , searchInNames = "Search in names…" , selectModeTitle = "Select Mode" @@ -70,6 +78,11 @@ gb = , resetSearchForm = "Reset search form" , exitSelectMode = "Exit Select Mode" , mergeItemsTitle = \n -> "Merge " ++ String.fromInt n ++ " selected items" + , publishItemsTitle = \n -> "Publish " ++ String.fromInt n ++ " selected items" + , publishCurrentQueryTitle = "Publish current results" + , nothingSelectedToShare = "Sharing everything doesn't work. You need to apply some criteria." + , loadMore = "Load more…" + , thatsAll = "That's all" } @@ -80,6 +93,7 @@ de = , searchStatsView = Messages.Comp.SearchStatsView.de , sideMenu = Messages.Page.HomeSideMenu.de , itemMerge = Messages.Comp.ItemMerge.de + , publishItems = Messages.Comp.PublishItems.de , contentSearch = "Volltextsuche…" , searchInNames = "Suche in Namen…" , selectModeTitle = "Auswahlmodus" @@ -98,4 +112,9 @@ de = , resetSearchForm = "Suchformular zurücksetzen" , exitSelectMode = "Auswahlmodus verlassen" , mergeItemsTitle = \n -> String.fromInt n ++ " gewählte Dokumente zusammenführen" + , publishItemsTitle = \n -> String.fromInt n ++ " gewählte Dokumente publizieren" + , publishCurrentQueryTitle = "Aktuelle Ansicht publizieren" + , nothingSelectedToShare = "Alles kann nicht geteilt werden; es muss etwas gesucht werden." + , loadMore = "Mehr laden…" + , thatsAll = "Mehr gibt es nicht" } diff --git a/modules/webapp/src/main/elm/Page/Home/Data.elm b/modules/webapp/src/main/elm/Page/Home/Data.elm index cb60492d..c4b65df0 100644 --- a/modules/webapp/src/main/elm/Page/Home/Data.elm +++ b/modules/webapp/src/main/elm/Page/Home/Data.elm @@ -14,6 +14,7 @@ module Page.Home.Data exposing , SelectActionMode(..) , SelectViewModel , ViewMode(..) + , createQuery , doSearchCmd , editActive , init @@ -36,6 +37,7 @@ import Comp.ItemDetail.MultiEditMenu exposing (SaveNameState(..)) import Comp.ItemMerge import Comp.LinkTarget exposing (LinkTarget) import Comp.PowerSearchInput +import Comp.PublishItems import Comp.SearchMenu import Data.Flags exposing (Flags) import Data.ItemNav exposing (ItemNav) @@ -79,6 +81,7 @@ type alias SelectViewModel = , confirmModal : Maybe ConfirmModalValue , editModel : Comp.ItemDetail.MultiEditMenu.Model , mergeModel : Comp.ItemMerge.Model + , publishModel : Comp.PublishItems.Model , saveNameState : SaveNameState , saveCustomFieldState : Set String } @@ -91,6 +94,7 @@ initSelectViewModel = , confirmModal = Nothing , editModel = Comp.ItemDetail.MultiEditMenu.init , mergeModel = Comp.ItemMerge.init [] + , publishModel = Tuple.first Comp.PublishItems.init , saveNameState = SaveSuccess , saveCustomFieldState = Set.empty } @@ -100,6 +104,7 @@ type ViewMode = SimpleView | SearchView | SelectView SelectViewModel + | PublishView Comp.PublishItems.Model init : Flags -> ViewMode -> Model @@ -143,6 +148,9 @@ menuCollapsed model = SelectView _ -> False + PublishView _ -> + False + selectActive : Model -> Bool selectActive model = @@ -153,6 +161,9 @@ selectActive model = SearchView -> False + PublishView _ -> + False + SelectView _ -> True @@ -166,6 +177,9 @@ editActive model = SearchView -> False + PublishView _ -> + False + SelectView svm -> svm.action == EditSelected @@ -211,6 +225,10 @@ type Msg | RemoveItem String | MergeSelectedItems | MergeItemsMsg Comp.ItemMerge.Msg + | PublishSelectedItems + | PublishItemsMsg Comp.PublishItems.Msg + | TogglePublishCurrentQueryView + | PublishViewMsg Comp.PublishItems.Msg type SearchType @@ -225,6 +243,7 @@ type SelectActionMode | ReprocessSelected | RestoreSelected | MergeSelected + | PublishSelected type alias SearchParam = @@ -251,10 +270,7 @@ doSearchDefaultCmd param model = let smask = Q.request model.searchMenuModel.searchMode <| - Q.and - [ Comp.SearchMenu.getItemQuery model.searchMenuModel - , Maybe.map Q.Fragment model.powerSearchInput.input - ] + createQuery model mask = { smask @@ -272,6 +288,14 @@ doSearchDefaultCmd param model = Api.itemSearch param.flags mask ItemSearchAddResp +createQuery : Model -> Maybe Q.ItemQuery +createQuery model = + Q.and + [ Comp.SearchMenu.getItemQuery model.searchMenuModel + , Maybe.map Q.Fragment model.powerSearchInput.input + ] + + resultsBelowLimit : UiSettings -> Model -> Bool resultsBelowLimit settings model = let diff --git a/modules/webapp/src/main/elm/Page/Home/Update.elm b/modules/webapp/src/main/elm/Page/Home/Update.elm index 2ba19438..00ebfe9a 100644 --- a/modules/webapp/src/main/elm/Page/Home/Update.elm +++ b/modules/webapp/src/main/elm/Page/Home/Update.elm @@ -19,6 +19,7 @@ import Comp.ItemDetail.MultiEditMenu exposing (SaveNameState(..)) import Comp.ItemMerge import Comp.LinkTarget exposing (LinkTarget) import Comp.PowerSearchInput +import Comp.PublishItems import Comp.SearchMenu import Data.Flags exposing (Flags) import Data.ItemQuery as Q @@ -237,6 +238,9 @@ update mId key flags settings msg model = SelectView _ -> SimpleView + + PublishView q -> + PublishView q in withSub ( { model | viewMode = nextView } @@ -255,6 +259,9 @@ update mId key flags settings msg model = SelectView _ -> ( SearchView, Cmd.none ) + + PublishView q -> + ( PublishView q, Cmd.none ) in withSub ( { model @@ -620,6 +627,85 @@ update mId key flags settings msg model = _ -> noSub ( model, Cmd.none ) + PublishSelectedItems -> + case model.viewMode of + SelectView svm -> + if svm.action == PublishSelected then + let + ( mm, mc ) = + Comp.PublishItems.init + in + noSub + ( { model + | viewMode = + SelectView + { svm + | action = NoneAction + , publishModel = mm + } + } + , Cmd.map PublishItemsMsg mc + ) + + else if svm.ids == Set.empty then + noSub ( model, Cmd.none ) + + else + let + ( mm, mc ) = + Comp.PublishItems.initQuery + (Q.ItemIdIn (Set.toList svm.ids)) + in + noSub + ( { model + | viewMode = + SelectView + { svm + | action = PublishSelected + , publishModel = mm + } + } + , Cmd.map PublishItemsMsg mc + ) + + _ -> + noSub ( model, Cmd.none ) + + PublishItemsMsg lmsg -> + case model.viewMode of + SelectView svm -> + let + result = + Comp.PublishItems.update flags lmsg svm.publishModel + + nextView = + case result.outcome of + Comp.PublishItems.OutcomeDone -> + SelectView { svm | action = NoneAction } + + Comp.PublishItems.OutcomeInProgress -> + SelectView { svm | publishModel = result.model } + + model_ = + { model | viewMode = nextView } + in + if result.outcome == Comp.PublishItems.OutcomeDone then + update mId + key + flags + settings + (DoSearch model.searchTypeDropdownValue) + model_ + + else + noSub + ( model_ + , Cmd.map PublishItemsMsg result.cmd + ) + + _ -> + noSub ( model, Cmd.none ) + EditMenuMsg lmsg -> case model.viewMode of SelectView svm -> @@ -786,6 +872,38 @@ update mId key flags settings msg model = RemoveItem id -> update mId key flags settings (ItemCardListMsg (Comp.ItemCardList.RemoveItem id)) model + TogglePublishCurrentQueryView -> + case createQuery model of + Just q -> + let + ( pm, pc ) = + Comp.PublishItems.initQuery q + in + noSub ( { model | viewMode = PublishView pm }, Cmd.map PublishViewMsg pc ) + + Nothing -> + noSub ( model, Cmd.none ) + + PublishViewMsg lmsg -> + case model.viewMode of + PublishView inPM -> + let + result = + Comp.PublishItems.update flags lmsg inPM + in + case result.outcome of + Comp.PublishItems.OutcomeInProgress -> + noSub + ( { model | viewMode = PublishView result.model } + , Cmd.map PublishViewMsg result.cmd + ) + + Comp.PublishItems.OutcomeDone -> + noSub ( { model | viewMode = SearchView }, Cmd.none ) + + _ -> + noSub ( model, Cmd.none ) + --- Helpers diff --git a/modules/webapp/src/main/elm/Page/Home/View2.elm b/modules/webapp/src/main/elm/Page/Home/View2.elm index 40dd3b3c..63f39957 100644 --- a/modules/webapp/src/main/elm/Page/Home/View2.elm +++ b/modules/webapp/src/main/elm/Page/Home/View2.elm @@ -13,9 +13,12 @@ import Comp.ItemCardList import Comp.ItemMerge import Comp.MenuBar as MB import Comp.PowerSearchInput +import Comp.PublishItems import Comp.SearchMenu import Comp.SearchStatsView import Data.Flags exposing (Flags) +import Data.Icons as Icons +import Data.ItemQuery as Q import Data.ItemSelection import Data.SearchMode import Data.UiSettings exposing (UiSettings) @@ -63,29 +66,52 @@ viewContent texts flags settings model = mainView : Texts -> Flags -> UiSettings -> Model -> List (Html Msg) mainView texts flags settings model = let - mergeView = + otherView = case model.viewMode of SelectView svm -> case svm.action of MergeSelected -> - Just svm + Just + [ div [ class "sm:relative mb-2" ] + (itemMergeView texts settings svm) + ] + + PublishSelected -> + Just + [ div [ class "sm:relative mb-2" ] + (itemPublishView texts flags svm) + ] _ -> Nothing - _ -> + PublishView pm -> + Just + [ div [ class "sm:relative mb-2" ] + (publishResults texts flags model pm) + ] + + SimpleView -> + Nothing + + SearchView -> Nothing in - case mergeView of - Just svm -> - [ div [ class "sm:relative mb-2" ] - (itemMergeView texts settings svm) - ] + case otherView of + Just body -> + body Nothing -> itemCardList texts flags settings model +itemPublishView : Texts -> Flags -> SelectViewModel -> List (Html Msg) +itemPublishView texts flags svm = + [ Html.map PublishItemsMsg + (Comp.PublishItems.view texts.publishItems flags svm.publishModel) + ] + + itemMergeView : Texts -> UiSettings -> SelectViewModel -> List (Html Msg) itemMergeView texts settings svm = [ Html.map MergeItemsMsg @@ -93,6 +119,13 @@ itemMergeView texts settings svm = ] +publishResults : Texts -> Flags -> Model -> Comp.PublishItems.Model -> List (Html Msg) +publishResults texts flags model pm = + [ Html.map PublishViewMsg + (Comp.PublishItems.view texts.publishItems flags pm) + ] + + confirmModal : Texts -> Model -> List (Html Msg) confirmModal texts model = let @@ -148,6 +181,9 @@ itemsBar texts flags settings model = SelectView svm -> [ editMenuBar texts model svm ] + PublishView query -> + [ defaultMenuBar texts flags settings model ] + defaultMenuBar : Texts -> Flags -> UiSettings -> Model -> Html Msg defaultMenuBar texts flags settings model = @@ -215,6 +251,25 @@ defaultMenuBar texts flags settings model = MB.view { end = [ MB.CustomElement <| + B.secondaryBasicButton + { label = "" + , icon = Icons.share + , disabled = createQuery model == Nothing + , handler = onClick TogglePublishCurrentQueryView + , attrs = + [ title <| + if createQuery model == Nothing then + texts.nothingSelectedToShare + + else + texts.publishCurrentQueryTitle + , classList + [ ( btnStyle, True ) + ] + , href "#" + ] + } + , MB.CustomElement <| B.secondaryBasicButton { label = "" , icon = @@ -332,6 +387,17 @@ editMenuBar texts model svm = , ( "hidden", model.searchMenuModel.searchMode == Data.SearchMode.Trashed ) ] } + , MB.CustomButton + { tagger = PublishSelectedItems + , label = "" + , icon = Just Icons.share + , title = texts.publishItemsTitle selectCount + , inputClass = + [ ( btnStyle, True ) + , ( "bg-gray-200 dark:bg-bluegray-600", svm.action == PublishSelected ) + , ( "hidden", model.searchMenuModel.searchMode == Data.SearchMode.Trashed ) + ] + } ] , end = [ MB.CustomButton @@ -413,12 +479,12 @@ itemCardList texts _ settings model = settings model.itemListModel ) - , loadMore settings model + , loadMore texts settings model ] -loadMore : UiSettings -> Model -> Html Msg -loadMore settings model = +loadMore : Texts -> UiSettings -> Model -> Html Msg +loadMore texts settings model = let inactive = not model.moreAvailable || model.moreInProgress || model.searchInProgress @@ -430,10 +496,10 @@ loadMore settings model = [ B.secondaryBasicButton { label = if model.moreAvailable then - "Load more…" + texts.loadMore else - "That's all" + texts.thatsAll , icon = if model.moreInProgress then "fa fa-circle-notch animate-spin" diff --git a/modules/webapp/src/main/elm/Styles.elm b/modules/webapp/src/main/elm/Styles.elm index c7686ffa..f33ba301 100644 --- a/modules/webapp/src/main/elm/Styles.elm +++ b/modules/webapp/src/main/elm/Styles.elm @@ -48,6 +48,11 @@ errorMessage = " border border-red-600 bg-red-50 text-red-600 dark:border-orange-800 dark:bg-orange-300 dark:text-orange-800 px-2 py-2 rounded " +errorText : String +errorText = + " text-red-600 dark:text-orange-800 " + + warnMessage : String warnMessage = warnMessageColors ++ " border dark:bg-opacity-25 px-2 py-2 rounded " From 97922340d9b8799c3da84ea495281ea10f217d4e Mon Sep 17 00:00:00 2001 From: eikek Date: Sun, 3 Oct 2021 01:32:56 +0200 Subject: [PATCH 40/75] Share page skeleton --- modules/webapp/src/main/elm/App/Data.elm | 8 ++++ modules/webapp/src/main/elm/App/Update.elm | 25 +++++++++++ modules/webapp/src/main/elm/App/View2.elm | 41 +++++++++++++++---- modules/webapp/src/main/elm/Data/Flags.elm | 20 +++++++++ modules/webapp/src/main/elm/Messages.elm | 4 ++ .../src/main/elm/Messages/Page/Share.elm | 22 ++++++++++ modules/webapp/src/main/elm/Page.elm | 25 +++++++++++ .../webapp/src/main/elm/Page/Share/Data.elm | 32 +++++++++++++++ .../webapp/src/main/elm/Page/Share/Update.elm | 23 +++++++++++ .../webapp/src/main/elm/Page/Share/View.elm | 38 +++++++++++++++++ 10 files changed, 231 insertions(+), 7 deletions(-) create mode 100644 modules/webapp/src/main/elm/Messages/Page/Share.elm create mode 100644 modules/webapp/src/main/elm/Page/Share/Data.elm create mode 100644 modules/webapp/src/main/elm/Page/Share/Update.elm create mode 100644 modules/webapp/src/main/elm/Page/Share/View.elm diff --git a/modules/webapp/src/main/elm/App/Data.elm b/modules/webapp/src/main/elm/App/Data.elm index 055eb456..36713a54 100644 --- a/modules/webapp/src/main/elm/App/Data.elm +++ b/modules/webapp/src/main/elm/App/Data.elm @@ -32,6 +32,7 @@ import Page.ManageData.Data import Page.NewInvite.Data import Page.Queue.Data import Page.Register.Data +import Page.Share.Data import Page.Upload.Data import Page.UserSettings.Data import Url exposing (Url) @@ -52,6 +53,7 @@ type alias Model = , uploadModel : Page.Upload.Data.Model , newInviteModel : Page.NewInvite.Data.Model , itemDetailModel : Page.ItemDetail.Data.Model + , shareModel : Page.Share.Data.Model , navMenuOpen : Bool , userMenuOpen : Bool , subs : Sub Msg @@ -85,6 +87,9 @@ init key url flags_ settings = ( loginm, loginc ) = Page.Login.Data.init flags (Page.loginPageReferrer page) + ( shm, shc ) = + Page.Share.Data.init (Page.shareId page) flags + homeViewMode = if settings.searchMenuVisible then Page.Home.Data.SearchView @@ -106,6 +111,7 @@ init key url flags_ settings = , uploadModel = Page.Upload.Data.emptyModel , newInviteModel = Page.NewInvite.Data.emptyModel , itemDetailModel = Page.ItemDetail.Data.emptyModel + , shareModel = shm , navMenuOpen = False , userMenuOpen = False , subs = Sub.none @@ -120,6 +126,7 @@ init key url flags_ settings = , Cmd.map ManageDataMsg mdc , Cmd.map CollSettingsMsg csc , Cmd.map LoginMsg loginc + , Cmd.map ShareMsg shc ] ) @@ -162,6 +169,7 @@ type Msg | UploadMsg Page.Upload.Data.Msg | NewInviteMsg Page.NewInvite.Data.Msg | ItemDetailMsg Page.ItemDetail.Data.Msg + | ShareMsg Page.Share.Data.Msg | Logout | LogoutResp (Result Http.Error ()) | SessionCheckResp (Result Http.Error AuthResult) diff --git a/modules/webapp/src/main/elm/App/Update.elm b/modules/webapp/src/main/elm/App/Update.elm index bd760a70..5408c581 100644 --- a/modules/webapp/src/main/elm/App/Update.elm +++ b/modules/webapp/src/main/elm/App/Update.elm @@ -34,6 +34,8 @@ import Page.Queue.Data import Page.Queue.Update import Page.Register.Data import Page.Register.Update +import Page.Share.Data +import Page.Share.Update import Page.Upload.Data import Page.Upload.Update import Page.UserSettings.Data @@ -114,6 +116,9 @@ updateWithSub msg model = HomeMsg lm -> updateHome lm model + ShareMsg lm -> + updateShare lm model + LoginMsg lm -> updateLogin lm model @@ -313,6 +318,23 @@ applyClientSettings model settings = { model | uiSettings = settings } +updateShare : Page.Share.Data.Msg -> Model -> ( Model, Cmd Msg, Sub Msg ) +updateShare lmsg model = + case Page.shareId model.page of + Just id -> + let + result = + Page.Share.Update.update model.flags id lmsg model.shareModel + in + ( { model | shareModel = result.model } + , Cmd.map ShareMsg result.cmd + , Sub.map ShareMsg result.sub + ) + + Nothing -> + ( model, Cmd.none, Sub.none ) + + updateItemDetail : Page.ItemDetail.Data.Msg -> Model -> ( Model, Cmd Msg, Sub Msg ) updateItemDetail lmsg model = let @@ -568,3 +590,6 @@ initPage model_ page = , updateQueue Page.Queue.Data.StopRefresh ] model + + SharePage _ -> + ( model, Cmd.none, Sub.none ) diff --git a/modules/webapp/src/main/elm/App/View2.elm b/modules/webapp/src/main/elm/App/View2.elm index d2b277b7..d80be6e3 100644 --- a/modules/webapp/src/main/elm/App/View2.elm +++ b/modules/webapp/src/main/elm/App/View2.elm @@ -27,6 +27,7 @@ import Page.ManageData.View2 as ManageData import Page.NewInvite.View2 as NewInvite import Page.Queue.View2 as Queue import Page.Register.View2 as Register +import Page.Share.View as Share import Page.Upload.View2 as Upload import Page.UserSettings.View2 as UserSettings import Styles as S @@ -41,13 +42,9 @@ view model = topNavbar : Model -> Html Msg topNavbar model = - case model.flags.account of + case Data.Flags.getAccount model.flags of Just acc -> - if acc.success then - topNavUser acc model - - else - topNavAnon model + topNavUser acc model Nothing -> topNavAnon model @@ -86,7 +83,16 @@ topNavAnon model = [ id "top-nav" , class styleTopNav ] - [ headerNavItem model + [ B.genericButton + { label = "" + , icon = "fa fa-bars" + , handler = onClick ToggleSidebar + , disabled = not (Page.hasSidebar model.page) + , attrs = [ href "#" ] + , baseStyle = "font-bold inline-flex items-center px-4 py-2" + , activeStyle = "hover:bg-blue-200 dark:hover:bg-bluegray-800 w-12" + } + , headerNavItem model , div [ class "flex flex-grow justify-end" ] [ langMenu model , a @@ -157,6 +163,9 @@ mainContent model = ItemDetailPage id -> viewItemDetail texts id model + + SharePage id -> + viewShare texts id model ) @@ -411,6 +420,24 @@ dropdownMenu = " absolute right-0 bg-white dark:bg-bluegray-800 border dark:border-bluegray-700 dark:text-bluegray-300 shadow-lg opacity-1 transition duration-200 min-w-max " +viewShare : Messages -> String -> Model -> List (Html Msg) +viewShare texts shareId model = + [ Html.map ShareMsg + (Share.viewSidebar texts.share + model.sidebarVisible + model.flags + model.uiSettings + model.shareModel + ) + , Html.map ShareMsg + (Share.viewContent texts.share + model.flags + model.uiSettings + model.shareModel + ) + ] + + viewHome : Messages -> Model -> List (Html Msg) viewHome texts model = [ Html.map HomeMsg diff --git a/modules/webapp/src/main/elm/Data/Flags.elm b/modules/webapp/src/main/elm/Data/Flags.elm index ea23b52f..e605bd50 100644 --- a/modules/webapp/src/main/elm/Data/Flags.elm +++ b/modules/webapp/src/main/elm/Data/Flags.elm @@ -9,7 +9,9 @@ module Data.Flags exposing ( Config , Flags , accountString + , getAccount , getToken + , isAuthenticated , withAccount , withoutAccount ) @@ -43,6 +45,24 @@ type alias Flags = } +isAuthenticated : Flags -> Bool +isAuthenticated flags = + getAccount flags /= Nothing + + +getAccount : Flags -> Maybe AuthResult +getAccount flags = + Maybe.andThen + (\ar -> + if ar.success then + Just ar + + else + Nothing + ) + flags.account + + getToken : Flags -> Maybe String getToken flags = flags.account diff --git a/modules/webapp/src/main/elm/Messages.elm b/modules/webapp/src/main/elm/Messages.elm index a0671289..9809f1b4 100644 --- a/modules/webapp/src/main/elm/Messages.elm +++ b/modules/webapp/src/main/elm/Messages.elm @@ -21,6 +21,7 @@ import Messages.Page.ManageData import Messages.Page.NewInvite import Messages.Page.Queue import Messages.Page.Register +import Messages.Page.Share import Messages.Page.Upload import Messages.Page.UserSettings import Messages.UiLanguage exposing (UiLanguage(..)) @@ -44,6 +45,7 @@ type alias Messages = , userSettings : Messages.Page.UserSettings.Texts , manageData : Messages.Page.ManageData.Texts , home : Messages.Page.Home.Texts + , share : Messages.Page.Share.Texts } @@ -109,6 +111,7 @@ gb = , userSettings = Messages.Page.UserSettings.gb , manageData = Messages.Page.ManageData.gb , home = Messages.Page.Home.gb + , share = Messages.Page.Share.gb } @@ -129,4 +132,5 @@ de = , userSettings = Messages.Page.UserSettings.de , manageData = Messages.Page.ManageData.de , home = Messages.Page.Home.de + , share = Messages.Page.Share.de } diff --git a/modules/webapp/src/main/elm/Messages/Page/Share.elm b/modules/webapp/src/main/elm/Messages/Page/Share.elm new file mode 100644 index 00000000..b6044543 --- /dev/null +++ b/modules/webapp/src/main/elm/Messages/Page/Share.elm @@ -0,0 +1,22 @@ +{- + Copyright 2020 Eike K. & Contributors + + SPDX-License-Identifier: AGPL-3.0-or-later +-} + + +module Messages.Page.Share exposing (..) + + +type alias Texts = + {} + + +gb : Texts +gb = + {} + + +de : Texts +de = + {} diff --git a/modules/webapp/src/main/elm/Page.elm b/modules/webapp/src/main/elm/Page.elm index 92ff29d9..667fe7aa 100644 --- a/modules/webapp/src/main/elm/Page.elm +++ b/modules/webapp/src/main/elm/Page.elm @@ -21,6 +21,7 @@ module Page exposing , pageName , pageToString , set + , shareId , uploadId ) @@ -59,6 +60,7 @@ type Page | UploadPage (Maybe String) | NewInvitePage | ItemDetailPage String + | SharePage String isSecured : Page -> Bool @@ -94,6 +96,9 @@ isSecured page = ItemDetailPage _ -> True + SharePage _ -> + False + {-| Currently, all secured pages have a sidebar, except UploadPage. -} @@ -103,6 +108,9 @@ hasSidebar page = UploadPage _ -> False + SharePage _ -> + True + _ -> isSecured page @@ -160,6 +168,9 @@ pageName page = ItemDetailPage _ -> "Item" + SharePage _ -> + "Share" + loginPageReferrer : Page -> LoginData loginPageReferrer page = @@ -171,6 +182,16 @@ loginPageReferrer page = emptyLoginData +shareId : Page -> Maybe String +shareId page = + case page of + SharePage id -> + Just id + + _ -> + Nothing + + uploadId : Page -> Maybe String uploadId page = case page of @@ -224,6 +245,9 @@ pageToString page = ItemDetailPage id -> "/app/item/" ++ id + SharePage id -> + "/app/share/" ++ id + pageFromString : String -> Maybe Page pageFromString str = @@ -280,6 +304,7 @@ parser = , Parser.map (UploadPage Nothing) (s pathPrefix s "upload") , Parser.map NewInvitePage (s pathPrefix s "newinvite") , Parser.map ItemDetailPage (s pathPrefix s "item" string) + , Parser.map SharePage (s pathPrefix s "share" string) ] diff --git a/modules/webapp/src/main/elm/Page/Share/Data.elm b/modules/webapp/src/main/elm/Page/Share/Data.elm new file mode 100644 index 00000000..a0aa5f76 --- /dev/null +++ b/modules/webapp/src/main/elm/Page/Share/Data.elm @@ -0,0 +1,32 @@ +{- + Copyright 2020 Eike K. & Contributors + + SPDX-License-Identifier: AGPL-3.0-or-later +-} + + +module Page.Share.Data exposing (Model, Msg, init) + +import Data.Flags exposing (Flags) + + +type alias Model = + {} + + +init : Maybe String -> Flags -> ( Model, Cmd Msg ) +init shareId flags = + case shareId of + Just id -> + let + _ = + Debug.log "share" id + in + ( {}, Cmd.none ) + + Nothing -> + ( {}, Cmd.none ) + + +type Msg + = Msg diff --git a/modules/webapp/src/main/elm/Page/Share/Update.elm b/modules/webapp/src/main/elm/Page/Share/Update.elm new file mode 100644 index 00000000..0f1dadbb --- /dev/null +++ b/modules/webapp/src/main/elm/Page/Share/Update.elm @@ -0,0 +1,23 @@ +{- + Copyright 2020 Eike K. & Contributors + + SPDX-License-Identifier: AGPL-3.0-or-later +-} + + +module Page.Share.Update exposing (UpdateResult, update) + +import Data.Flags exposing (Flags) +import Page.Share.Data exposing (..) + + +type alias UpdateResult = + { model : Model + , cmd : Cmd Msg + , sub : Sub Msg + } + + +update : Flags -> String -> Msg -> Model -> UpdateResult +update flags shareId msg model = + UpdateResult model Cmd.none Sub.none diff --git a/modules/webapp/src/main/elm/Page/Share/View.elm b/modules/webapp/src/main/elm/Page/Share/View.elm new file mode 100644 index 00000000..0d5cf016 --- /dev/null +++ b/modules/webapp/src/main/elm/Page/Share/View.elm @@ -0,0 +1,38 @@ +{- + Copyright 2020 Eike K. & Contributors + + SPDX-License-Identifier: AGPL-3.0-or-later +-} + + +module Page.Share.View exposing (viewContent, viewSidebar) + +import Data.Flags exposing (Flags) +import Data.UiSettings exposing (UiSettings) +import Html exposing (..) +import Html.Attributes exposing (..) +import Messages.Page.Share exposing (Texts) +import Page.Share.Data exposing (..) +import Styles as S + + +viewSidebar : Texts -> Bool -> Flags -> UiSettings -> Model -> Html Msg +viewSidebar _ visible _ _ _ = + div + [ id "sidebar" + , classList [ ( "hidden", not visible ) ] + ] + [ text "sidebar" ] + + +viewContent : Texts -> Flags -> UiSettings -> Model -> Html Msg +viewContent texts flags _ model = + div + [ id "content" + , class "h-full flex flex-col" + , class S.content + ] + [ h1 [ class S.header1 ] + [ text "Share Page!" + ] + ] From f4596db63da0c28396b57a88146a330997890766 Mon Sep 17 00:00:00 2001 From: eikek Date: Sun, 3 Oct 2021 23:56:59 +0200 Subject: [PATCH 41/75] Authorize share access --- .../docspell/backend/auth/ShareToken.scala | 52 +++++++++++++ .../docspell/backend/auth/TokenUtil.scala | 15 +++- .../scala/docspell/backend/ops/OShare.scala | 74 +++++++++++++++++++ .../main/scala/docspell/common/Password.scala | 11 +++ .../scala/docspell/common/Timestamp.scala | 3 + .../src/main/resources/docspell-openapi.yml | 63 ++++++++++++++++ .../docspell/restserver/RestServer.scala | 19 ++++- .../restserver/auth/ShareCookieData.scala | 69 +++++++++++++++++ .../{AdminRoutes.scala => AdminAuth.scala} | 6 +- .../restserver/routes/ShareAuth.scala | 73 ++++++++++++++++++ .../restserver/routes/ShareRoutes.scala | 32 +++++++- .../restserver/routes/ShareSearchRoutes.scala | 29 ++++++++ .../scala/docspell/store/records/RShare.scala | 22 ++++++ 13 files changed, 457 insertions(+), 11 deletions(-) create mode 100644 modules/backend/src/main/scala/docspell/backend/auth/ShareToken.scala create mode 100644 modules/restserver/src/main/scala/docspell/restserver/auth/ShareCookieData.scala rename modules/restserver/src/main/scala/docspell/restserver/routes/{AdminRoutes.scala => AdminAuth.scala} (92%) create mode 100644 modules/restserver/src/main/scala/docspell/restserver/routes/ShareAuth.scala create mode 100644 modules/restserver/src/main/scala/docspell/restserver/routes/ShareSearchRoutes.scala diff --git a/modules/backend/src/main/scala/docspell/backend/auth/ShareToken.scala b/modules/backend/src/main/scala/docspell/backend/auth/ShareToken.scala new file mode 100644 index 00000000..c26124d6 --- /dev/null +++ b/modules/backend/src/main/scala/docspell/backend/auth/ShareToken.scala @@ -0,0 +1,52 @@ +/* + * Copyright 2020 Eike K. & Contributors + * + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +package docspell.backend.auth + +import cats.effect._ +import cats.implicits._ + +import docspell.backend.Common +import docspell.common.{Ident, Timestamp} + +import scodec.bits.ByteVector + +/** Can be used as an authenticator to access data behind a share. */ +final case class ShareToken(created: Timestamp, id: Ident, salt: String, sig: String) { + def asString = s"${created.toMillis}-${TokenUtil.b64enc(id.id)}-$salt-$sig" + + def sigValid(key: ByteVector): Boolean = { + val newSig = TokenUtil.sign(this, key) + TokenUtil.constTimeEq(sig, newSig) + } + def sigInvalid(key: ByteVector): Boolean = + !sigValid(key) +} + +object ShareToken { + + def fromString(s: String): Either[String, ShareToken] = + s.split("-", 4) match { + case Array(ms, id, salt, sig) => + for { + created <- ms.toLongOption.toRight("Invalid timestamp") + idStr <- TokenUtil.b64dec(id).toRight("Cannot read authenticator data") + shareId <- Ident.fromString(idStr) + } yield ShareToken(Timestamp.ofMillis(created), shareId, salt, sig) + + case _ => + Left("Invalid authenticator") + } + + def create[F[_]: Sync](shareId: Ident, key: ByteVector): F[ShareToken] = + for { + now <- Timestamp.current[F] + salt <- Common.genSaltString[F] + cd = ShareToken(now, shareId, salt, "") + sig = TokenUtil.sign(cd, key) + } yield cd.copy(sig = sig) + +} diff --git a/modules/backend/src/main/scala/docspell/backend/auth/TokenUtil.scala b/modules/backend/src/main/scala/docspell/backend/auth/TokenUtil.scala index 7958ed0a..9bba4823 100644 --- a/modules/backend/src/main/scala/docspell/backend/auth/TokenUtil.scala +++ b/modules/backend/src/main/scala/docspell/backend/auth/TokenUtil.scala @@ -18,17 +18,24 @@ private[auth] object TokenUtil { def sign(cd: RememberToken, key: ByteVector): String = { val raw = cd.nowMillis.toString + cd.rememberId.id + cd.salt - val mac = Mac.getInstance("HmacSHA1") - mac.init(new SecretKeySpec(key.toArray, "HmacSHA1")) - ByteVector.view(mac.doFinal(raw.getBytes(utf8))).toBase64 + signRaw(raw, key) } def sign(cd: AuthToken, key: ByteVector): String = { val raw = cd.nowMillis.toString + cd.account.asString + cd.requireSecondFactor + cd.salt + signRaw(raw, key) + } + + def sign(sd: ShareToken, key: ByteVector): String = { + val raw = s"${sd.created.toMillis}${sd.id.id}${sd.salt}" + signRaw(raw, key) + } + + private def signRaw(data: String, key: ByteVector): String = { val mac = Mac.getInstance("HmacSHA1") mac.init(new SecretKeySpec(key.toArray, "HmacSHA1")) - ByteVector.view(mac.doFinal(raw.getBytes(utf8))).toBase64 + ByteVector.view(mac.doFinal(data.getBytes(utf8))).toBase64 } def b64enc(s: String): String = diff --git a/modules/backend/src/main/scala/docspell/backend/ops/OShare.scala b/modules/backend/src/main/scala/docspell/backend/ops/OShare.scala index 68b86f11..005938a0 100644 --- a/modules/backend/src/main/scala/docspell/backend/ops/OShare.scala +++ b/modules/backend/src/main/scala/docspell/backend/ops/OShare.scala @@ -11,11 +11,15 @@ import cats.effect._ import cats.implicits._ import docspell.backend.PasswordCrypt +import docspell.backend.auth.ShareToken +import docspell.backend.ops.OShare.VerifyResult import docspell.common._ import docspell.query.ItemQuery import docspell.store.Store import docspell.store.records.RShare +import scodec.bits.ByteVector + trait OShare[F[_]] { def findAll(collective: Ident): F[List[RShare]] @@ -31,10 +35,32 @@ trait OShare[F[_]] { share: OShare.NewShare, removePassword: Boolean ): F[OShare.ChangeResult] + + def verify(key: ByteVector)(id: Ident, password: Option[Password]): F[VerifyResult] + def verifyToken(key: ByteVector)(token: String): F[VerifyResult] } object OShare { + sealed trait VerifyResult { + def toEither: Either[String, ShareToken] = + this match { + case VerifyResult.Success(token) => Right(token) + case _ => Left("Authentication failed.") + } + } + object VerifyResult { + case class Success(token: ShareToken) extends VerifyResult + case object NotFound extends VerifyResult + case object PasswordMismatch extends VerifyResult + case object InvalidToken extends VerifyResult + + def success(token: ShareToken): VerifyResult = Success(token) + def notFound: VerifyResult = NotFound + def passwordMismatch: VerifyResult = PasswordMismatch + def invalidToken: VerifyResult = InvalidToken + } + final case class NewShare( cid: Ident, name: Option[String], @@ -55,6 +81,8 @@ object OShare { def apply[F[_]: Async](store: Store[F]): OShare[F] = new OShare[F] { + private[this] val logger = Logger.log4s[F](org.log4s.getLogger) + def findAll(collective: Ident): F[List[RShare]] = store.transact(RShare.findAllByCollective(collective)) @@ -112,5 +140,51 @@ object OShare { def findOne(id: Ident, collective: Ident): OptionT[F, RShare] = RShare.findOne(id, collective).mapK(store.transform) + + def verify( + key: ByteVector + )(id: Ident, password: Option[Password]): F[VerifyResult] = + RShare + .findCurrentActive(id) + .mapK(store.transform) + .semiflatMap { share => + val pwCheck = + share.password.map(encPw => password.exists(PasswordCrypt.check(_, encPw))) + + // add the password (if existing) to the server secret key; this way the token + // invalidates when the user changes the password + val shareKey = + share.password.map(pw => key ++ pw.asByteVector).getOrElse(key) + + val token = ShareToken.create(id, shareKey) + pwCheck match { + case Some(true) => token.map(VerifyResult.success) + case None => token.map(VerifyResult.success) + case Some(false) => VerifyResult.passwordMismatch.pure[F] + } + } + .getOrElse(VerifyResult.notFound) + + def verifyToken(key: ByteVector)(token: String): F[VerifyResult] = + ShareToken.fromString(token) match { + case Right(st) => + RShare + .findActivePassword(st.id) + .mapK(store.transform) + .semiflatMap { password => + val shareKey = + password.map(pw => key ++ pw.asByteVector).getOrElse(key) + if (st.sigValid(shareKey)) VerifyResult.success(st).pure[F] + else + logger.info( + s"Signature failure for share: ${st.id.id}" + ) *> VerifyResult.invalidToken.pure[F] + } + .getOrElse(VerifyResult.notFound) + + case Left(err) => + logger.debug(s"Invalid session token: $err") *> + VerifyResult.invalidToken.pure[F] + } } } diff --git a/modules/common/src/main/scala/docspell/common/Password.scala b/modules/common/src/main/scala/docspell/common/Password.scala index da83364c..7c2daeb0 100644 --- a/modules/common/src/main/scala/docspell/common/Password.scala +++ b/modules/common/src/main/scala/docspell/common/Password.scala @@ -6,18 +6,29 @@ package docspell.common +import java.nio.charset.StandardCharsets + import cats.effect.Sync import cats.implicits._ import io.circe.{Decoder, Encoder} +import scodec.bits.ByteVector final class Password(val pass: String) extends AnyVal { def isEmpty: Boolean = pass.isEmpty + def nonEmpty: Boolean = pass.nonEmpty + def length: Int = pass.length + + def asByteVector: ByteVector = + ByteVector.view(pass.getBytes(StandardCharsets.UTF_8)) override def toString: String = if (pass.isEmpty) "" else "***" + def compare(other: Password): Boolean = + this.pass.zip(other.pass).forall { case (a, b) => a == b } && + this.nonEmpty && this.length == other.length } object Password { diff --git a/modules/common/src/main/scala/docspell/common/Timestamp.scala b/modules/common/src/main/scala/docspell/common/Timestamp.scala index b9aa104f..c056c2a8 100644 --- a/modules/common/src/main/scala/docspell/common/Timestamp.scala +++ b/modules/common/src/main/scala/docspell/common/Timestamp.scala @@ -70,6 +70,9 @@ object Timestamp { def atUtc(ldt: LocalDateTime): Timestamp = from(ldt.atZone(UTC)) + def ofMillis(ms: Long): Timestamp = + Timestamp(Instant.ofEpochMilli(ms)) + def daysBetween(ts0: Timestamp, ts1: Timestamp): Long = ChronoUnit.DAYS.between(ts0.toUtcDate, ts1.toUtcDate) diff --git a/modules/restapi/src/main/resources/docspell-openapi.yml b/modules/restapi/src/main/resources/docspell-openapi.yml index ac2cc363..f1e5176b 100644 --- a/modules/restapi/src/main/resources/docspell-openapi.yml +++ b/modules/restapi/src/main/resources/docspell-openapi.yml @@ -538,6 +538,37 @@ paths: application/json: schema: $ref: "#/components/schemas/InviteResult" + + /open/share/verify: + post: + operationId: "open-share-verify" + tags: [ Share ] + summary: Verify a secret for a share + description: | + Given the share id and optionally a password, it verifies the + correctness of the given data. As a result, a token is + returned that must be used with all `share/*` routes. If the + password is missing, but required, the response indicates + this. Then the requests needs to be replayed with the correct + password to retrieve the token. + + The token is also added as a session cookie to the response. + + The token is used to avoid passing the user define password + with every request. + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/ShareSecret" + responses: + 200: + description: Ok + content: + application/json: + schema: + $ref: "#/components/schemas/ShareVerifyResult" + /sec/auth/session: post: operationId: "sec-auth-session" @@ -4186,6 +4217,38 @@ paths: components: schemas: + ShareSecret: + description: | + The secret (the share id + optional password) to access a + share. + required: + - shareId + properties: + shareId: + type: string + format: ident + password: + type: string + format: password + + ShareVerifyResult: + description: | + The data returned when verifying a `ShareSecret`. + required: + - success + - token + - passwordRequired + - message + properties: + success: + type: boolean + token: + type: string + passwordRequired: + type: boolean + message: + type: string + ShareData: description: | Editable data for a share. diff --git a/modules/restserver/src/main/scala/docspell/restserver/RestServer.scala b/modules/restserver/src/main/scala/docspell/restserver/RestServer.scala index 6c620a0b..cceacfdd 100644 --- a/modules/restserver/src/main/scala/docspell/restserver/RestServer.scala +++ b/modules/restserver/src/main/scala/docspell/restserver/RestServer.scala @@ -10,7 +10,7 @@ import cats.effect._ import cats.implicits._ import fs2.Stream -import docspell.backend.auth.AuthToken +import docspell.backend.auth.{AuthToken, ShareToken} import docspell.common._ import docspell.oidc.CodeFlowRoutes import docspell.restserver.auth.OpenId @@ -44,9 +44,12 @@ object RestServer { "/api/v1/sec/" -> Authenticate(restApp.backend.login, cfg.auth) { token => securedRoutes(cfg, restApp, token) }, - "/api/v1/admin" -> AdminRoutes(cfg.adminEndpoint) { + "/api/v1/admin" -> AdminAuth(cfg.adminEndpoint) { adminRoutes(cfg, restApp) }, + "/api/v1/share" -> ShareAuth(restApp.backend.share, cfg.auth) { token => + shareRoutes(cfg, restApp, token) + }, "/api/doc" -> templates.doc, "/app/assets" -> EnvMiddleware(WebjarRoutes.appRoutes[F]), "/app" -> EnvMiddleware(templates.app), @@ -120,7 +123,8 @@ object RestServer { "signup" -> RegisterRoutes(restApp.backend, cfg), "upload" -> UploadRoutes.open(restApp.backend, cfg), "checkfile" -> CheckFileRoutes.open(restApp.backend), - "integration" -> IntegrationEndpointRoutes.open(restApp.backend, cfg) + "integration" -> IntegrationEndpointRoutes.open(restApp.backend, cfg), + "share" -> ShareRoutes.verify(restApp.backend, cfg) ) def adminRoutes[F[_]: Async](cfg: Config, restApp: RestApp[F]): HttpRoutes[F] = @@ -132,6 +136,15 @@ object RestServer { "attachments" -> AttachmentRoutes.admin(restApp.backend) ) + def shareRoutes[F[_]: Async]( + cfg: Config, + restApp: RestApp[F], + token: ShareToken + ): HttpRoutes[F] = + Router( + "search" -> ShareSearchRoutes(restApp.backend, cfg, token) + ) + def redirectTo[F[_]: Async](path: String): HttpRoutes[F] = { val dsl = new Http4sDsl[F] {} import dsl._ diff --git a/modules/restserver/src/main/scala/docspell/restserver/auth/ShareCookieData.scala b/modules/restserver/src/main/scala/docspell/restserver/auth/ShareCookieData.scala new file mode 100644 index 00000000..0c3b0bdf --- /dev/null +++ b/modules/restserver/src/main/scala/docspell/restserver/auth/ShareCookieData.scala @@ -0,0 +1,69 @@ +/* + * Copyright 2020 Eike K. & Contributors + * + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +package docspell.restserver.auth + +import docspell.backend.auth.ShareToken +import docspell.common._ + +import org.http4s._ +import org.typelevel.ci.CIString + +final case class ShareCookieData(token: ShareToken) { + def asString: String = token.asString + + def asCookie(baseUrl: LenientUri): ResponseCookie = { + val sec = baseUrl.scheme.exists(_.endsWith("s")) + val path = baseUrl.path / "api" / "v1" + ResponseCookie( + name = ShareCookieData.cookieName, + content = asString, + domain = None, + path = Some(path.asString), + httpOnly = true, + secure = sec, + maxAge = None, + expires = None + ) + } + + def addCookie[F[_]](baseUrl: LenientUri)( + resp: Response[F] + ): Response[F] = + resp.addCookie(asCookie(baseUrl)) +} + +object ShareCookieData { + val cookieName = "docspell_share" + val headerName = "Docspell-Share-Auth" + + def fromCookie[F[_]](req: Request[F]): Option[String] = + for { + header <- req.headers.get[headers.Cookie] + cookie <- header.values.toList.find(_.name == cookieName) + } yield cookie.content + + def fromHeader[F[_]](req: Request[F]): Option[String] = + req.headers + .get(CIString(headerName)) + .map(_.head.value) + + def fromRequest[F[_]](req: Request[F]): Option[String] = + fromCookie(req).orElse(fromHeader(req)) + + def delete(baseUrl: LenientUri): ResponseCookie = + ResponseCookie( + name = cookieName, + content = "", + domain = None, + path = Some(baseUrl.path / "api" / "v1").map(_.asString), + httpOnly = true, + secure = baseUrl.scheme.exists(_.endsWith("s")), + maxAge = None, + expires = None + ) + +} diff --git a/modules/restserver/src/main/scala/docspell/restserver/routes/AdminRoutes.scala b/modules/restserver/src/main/scala/docspell/restserver/routes/AdminAuth.scala similarity index 92% rename from modules/restserver/src/main/scala/docspell/restserver/routes/AdminRoutes.scala rename to modules/restserver/src/main/scala/docspell/restserver/routes/AdminAuth.scala index 59491091..333f8d10 100644 --- a/modules/restserver/src/main/scala/docspell/restserver/routes/AdminRoutes.scala +++ b/modules/restserver/src/main/scala/docspell/restserver/routes/AdminAuth.scala @@ -10,6 +10,7 @@ import cats.data.{Kleisli, OptionT} import cats.effect._ import cats.implicits._ +import docspell.common.Password import docspell.restserver.Config import docspell.restserver.http4s.Responses @@ -19,7 +20,7 @@ import org.http4s.dsl.Http4sDsl import org.http4s.server._ import org.typelevel.ci.CIString -object AdminRoutes { +object AdminAuth { private val adminHeader = CIString("Docspell-Admin-Secret") def apply[F[_]: Async](cfg: Config.AdminEndpoint)( @@ -55,6 +56,5 @@ object AdminRoutes { req.headers.get(adminHeader).map(_.head.value) private def compareSecret(s1: String)(s2: String): Boolean = - s1.length > 0 && s1.length == s2.length && - s1.zip(s2).forall { case (a, b) => a == b } + Password(s1).compare(Password(s2)) } diff --git a/modules/restserver/src/main/scala/docspell/restserver/routes/ShareAuth.scala b/modules/restserver/src/main/scala/docspell/restserver/routes/ShareAuth.scala new file mode 100644 index 00000000..ad2c41ab --- /dev/null +++ b/modules/restserver/src/main/scala/docspell/restserver/routes/ShareAuth.scala @@ -0,0 +1,73 @@ +/* + * Copyright 2020 Eike K. & Contributors + * + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +package docspell.restserver.routes + +import cats.data.{Kleisli, OptionT} +import cats.effect._ +import cats.implicits._ + +import docspell.backend.auth.{Login, ShareToken} +import docspell.backend.ops.OShare +import docspell.backend.ops.OShare.VerifyResult +import docspell.restserver.auth.ShareCookieData + +import org.http4s._ +import org.http4s.circe.CirceEntityEncoder._ +import org.http4s.dsl.Http4sDsl +import org.http4s.server._ + +object ShareAuth { + + def authenticateRequest[F[_]: Async]( + validate: String => F[VerifyResult] + )(req: Request[F]): F[OShare.VerifyResult] = + ShareCookieData.fromRequest(req) match { + case Some(tokenStr) => + validate(tokenStr) + case None => + VerifyResult.notFound.pure[F] + } + + private def getToken[F[_]: Async]( + auth: String => F[VerifyResult] + ): Kleisli[F, Request[F], Either[String, ShareToken]] = + Kleisli(r => authenticateRequest(auth)(r).map(_.toEither)) + + def of[F[_]: Async](S: OShare[F], cfg: Login.Config)( + pf: PartialFunction[AuthedRequest[F, ShareToken], F[Response[F]]] + ): HttpRoutes[F] = { + val dsl: Http4sDsl[F] = new Http4sDsl[F] {} + import dsl._ + + val authUser = getToken[F](S.verifyToken(cfg.serverSecret)) + + val onFailure: AuthedRoutes[String, F] = + Kleisli(req => OptionT.liftF(Forbidden(req.context))) + + val middleware: AuthMiddleware[F, ShareToken] = + AuthMiddleware(authUser, onFailure) + + middleware(AuthedRoutes.of(pf)) + } + + def apply[F[_]: Async](S: OShare[F], cfg: Login.Config)( + f: ShareToken => HttpRoutes[F] + ): HttpRoutes[F] = { + val dsl: Http4sDsl[F] = new Http4sDsl[F] {} + import dsl._ + + val authUser = getToken[F](S.verifyToken(cfg.serverSecret)) + + val onFailure: AuthedRoutes[String, F] = + Kleisli(req => OptionT.liftF(Forbidden(req.context))) + + val middleware: AuthMiddleware[F, ShareToken] = + AuthMiddleware(authUser, onFailure) + + middleware(AuthedRoutes(authReq => f(authReq.context).run(authReq.req))) + } +} diff --git a/modules/restserver/src/main/scala/docspell/restserver/routes/ShareRoutes.scala b/modules/restserver/src/main/scala/docspell/restserver/routes/ShareRoutes.scala index 846bc7bc..1e5947a6 100644 --- a/modules/restserver/src/main/scala/docspell/restserver/routes/ShareRoutes.scala +++ b/modules/restserver/src/main/scala/docspell/restserver/routes/ShareRoutes.scala @@ -9,13 +9,18 @@ package docspell.restserver.routes import cats.data.OptionT import cats.effect._ import cats.implicits._ + import docspell.backend.BackendApp import docspell.backend.auth.AuthToken import docspell.backend.ops.OShare +import docspell.backend.ops.OShare.VerifyResult import docspell.common.{Ident, Timestamp} import docspell.restapi.model._ -import docspell.restserver.http4s.ResponseGenerator +import docspell.restserver.Config +import docspell.restserver.auth.ShareCookieData +import docspell.restserver.http4s.{ClientRequestInfo, ResponseGenerator} import docspell.store.records.RShare + import org.http4s.HttpRoutes import org.http4s.circe.CirceEntityDecoder._ import org.http4s.circe.CirceEntityEncoder._ @@ -66,6 +71,31 @@ object ShareRoutes { } } + def verify[F[_]: Async](backend: BackendApp[F], cfg: Config): HttpRoutes[F] = { + val dsl = new Http4sDsl[F] with ResponseGenerator[F] {} + import dsl._ + + HttpRoutes.of { case req @ POST -> Root / "verify" => + for { + secret <- req.as[ShareSecret] + res <- backend.share + .verify(cfg.auth.serverSecret)(secret.shareId, secret.password) + resp <- res match { + case VerifyResult.Success(token) => + val cd = ShareCookieData(token) + Ok(ShareVerifyResult(true, token.asString, false, "Success")) + .map(cd.addCookie(ClientRequestInfo.getBaseUrl(cfg, req))) + case VerifyResult.PasswordMismatch => + Ok(ShareVerifyResult(false, "", true, "Failed")) + case VerifyResult.NotFound => + Ok(ShareVerifyResult(false, "", false, "Failed")) + case VerifyResult.InvalidToken => + Ok(ShareVerifyResult(false, "", false, "Failed")) + } + } yield resp + } + } + def mkNewShare(data: ShareData, user: AuthToken): OShare.NewShare = OShare.NewShare( user.account.collective, diff --git a/modules/restserver/src/main/scala/docspell/restserver/routes/ShareSearchRoutes.scala b/modules/restserver/src/main/scala/docspell/restserver/routes/ShareSearchRoutes.scala new file mode 100644 index 00000000..720b5d2f --- /dev/null +++ b/modules/restserver/src/main/scala/docspell/restserver/routes/ShareSearchRoutes.scala @@ -0,0 +1,29 @@ +/* + * Copyright 2020 Eike K. & Contributors + * + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +package docspell.restserver.routes + +import cats.effect._ + +import docspell.backend.BackendApp +import docspell.backend.auth.ShareToken +import docspell.common.Logger +import docspell.restserver.Config + +import org.http4s.HttpRoutes + +object ShareSearchRoutes { + + def apply[F[_]: Async]( + backend: BackendApp[F], + cfg: Config, + token: ShareToken + ): HttpRoutes[F] = { + val logger = Logger.log4s[F](org.log4s.getLogger) + logger.trace(s"$backend $cfg $token") + ??? + } +} diff --git a/modules/store/src/main/scala/docspell/store/records/RShare.scala b/modules/store/src/main/scala/docspell/store/records/RShare.scala index 4cef0929..7d6ae9bd 100644 --- a/modules/store/src/main/scala/docspell/store/records/RShare.scala +++ b/modules/store/src/main/scala/docspell/store/records/RShare.scala @@ -101,6 +101,28 @@ object RShare { .option ) + private def activeCondition(t: Table, id: Ident, current: Timestamp): Condition = + t.id === id && t.enabled === true && t.publishedUntil > current + + def findActive(id: Ident, current: Timestamp): OptionT[ConnectionIO, RShare] = + OptionT( + Select( + select(T.all), + from(T), + activeCondition(T, id, current) + ).build.query[RShare].option + ) + + def findCurrentActive(id: Ident): OptionT[ConnectionIO, RShare] = + OptionT.liftF(Timestamp.current[ConnectionIO]).flatMap(now => findActive(id, now)) + + def findActivePassword(id: Ident): OptionT[ConnectionIO, Option[Password]] = + OptionT(Timestamp.current[ConnectionIO].flatMap { now => + Select(select(T.password), from(T), activeCondition(T, id, now)).build + .query[Option[Password]] + .option + }) + def findAllByCollective(cid: Ident): ConnectionIO[List[RShare]] = Select(select(T.all), from(T), T.cid === cid) .orderBy(T.publishedAt.desc) From a2865561160af9aaed469083e2f2ff2783c3986c Mon Sep 17 00:00:00 2001 From: eikek Date: Mon, 4 Oct 2021 09:46:08 +0200 Subject: [PATCH 42/75] Initial impl of search route --- .../scala/docspell/backend/ops/OShare.scala | 31 ++++++++++--- .../src/main/resources/docspell-openapi.yml | 33 ++++++++++++++ .../restserver/routes/ShareRoutes.scala | 10 ++--- .../restserver/routes/ShareSearchRoutes.scala | 43 +++++++++++++++++-- 4 files changed, 102 insertions(+), 15 deletions(-) diff --git a/modules/backend/src/main/scala/docspell/backend/ops/OShare.scala b/modules/backend/src/main/scala/docspell/backend/ops/OShare.scala index 005938a0..d0b82171 100644 --- a/modules/backend/src/main/scala/docspell/backend/ops/OShare.scala +++ b/modules/backend/src/main/scala/docspell/backend/ops/OShare.scala @@ -12,7 +12,7 @@ import cats.implicits._ import docspell.backend.PasswordCrypt import docspell.backend.auth.ShareToken -import docspell.backend.ops.OShare.VerifyResult +import docspell.backend.ops.OShare.{ShareQuery, VerifyResult} import docspell.common._ import docspell.query.ItemQuery import docspell.store.Store @@ -36,26 +36,37 @@ trait OShare[F[_]] { removePassword: Boolean ): F[OShare.ChangeResult] + // --- + + /** Verifies the given id and password and returns a authorization token on success. */ def verify(key: ByteVector)(id: Ident, password: Option[Password]): F[VerifyResult] + + /** Verifies the authorization token. */ def verifyToken(key: ByteVector)(token: String): F[VerifyResult] + + def findShareQuery(id: Ident): OptionT[F, ShareQuery] } object OShare { + final case class ShareQuery(id: Ident, cid: Ident, query: ItemQuery) sealed trait VerifyResult { def toEither: Either[String, ShareToken] = this match { - case VerifyResult.Success(token) => Right(token) - case _ => Left("Authentication failed.") + case VerifyResult.Success(token, _) => + Right(token) + case _ => Left("Authentication failed.") } } object VerifyResult { - case class Success(token: ShareToken) extends VerifyResult + case class Success(token: ShareToken, shareName: Option[String]) extends VerifyResult case object NotFound extends VerifyResult case object PasswordMismatch extends VerifyResult case object InvalidToken extends VerifyResult - def success(token: ShareToken): VerifyResult = Success(token) + def success(token: ShareToken): VerifyResult = Success(token, None) + def success(token: ShareToken, name: Option[String]): VerifyResult = + Success(token, name) def notFound: VerifyResult = NotFound def passwordMismatch: VerifyResult = PasswordMismatch def invalidToken: VerifyResult = InvalidToken @@ -158,8 +169,8 @@ object OShare { val token = ShareToken.create(id, shareKey) pwCheck match { - case Some(true) => token.map(VerifyResult.success) - case None => token.map(VerifyResult.success) + case Some(true) => token.map(t => VerifyResult.success(t, share.name)) + case None => token.map(t => VerifyResult.success(t, share.name)) case Some(false) => VerifyResult.passwordMismatch.pure[F] } } @@ -186,5 +197,11 @@ object OShare { logger.debug(s"Invalid session token: $err") *> VerifyResult.invalidToken.pure[F] } + + def findShareQuery(id: Ident): OptionT[F, ShareQuery] = + RShare + .findCurrentActive(id) + .mapK(store.transform) + .map(share => ShareQuery(share.id, share.cid, share.query)) } } diff --git a/modules/restapi/src/main/resources/docspell-openapi.yml b/modules/restapi/src/main/resources/docspell-openapi.yml index f1e5176b..2f563116 100644 --- a/modules/restapi/src/main/resources/docspell-openapi.yml +++ b/modules/restapi/src/main/resources/docspell-openapi.yml @@ -1558,6 +1558,30 @@ paths: schema: $ref: "#/components/schemas/BasicResult" + /share/search: + post: + operationId: "share-search" + tags: [Share] + summary: Performs a search in a share. + description: | + Allows to run a search query in the shared documents. The + input data structure is the same as with a standard query. The + `searchMode` parameter is ignored here. + security: + - shareTokenHeader: [] + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/ItemQuery" + responses: + 200: + description: Ok + content: + application/json: + schema: + $ref: "#/components/schemas/ItemLightList" + /admin/user/resetPassword: post: operationId: "admin-user-reset-password" @@ -4248,6 +4272,11 @@ components: type: boolean message: type: string + name: + type: string + description: | + The name of the share if it exists. Only valid to use when + `success` is `true`. ShareData: description: | @@ -6475,6 +6504,10 @@ components: type: apiKey in: header name: Docspell-Admin-Secret + shareTokenHeader: + type: apiKey + in: header + name: Docspell-Share-Auth parameters: id: name: id diff --git a/modules/restserver/src/main/scala/docspell/restserver/routes/ShareRoutes.scala b/modules/restserver/src/main/scala/docspell/restserver/routes/ShareRoutes.scala index 1e5947a6..5e9b13b5 100644 --- a/modules/restserver/src/main/scala/docspell/restserver/routes/ShareRoutes.scala +++ b/modules/restserver/src/main/scala/docspell/restserver/routes/ShareRoutes.scala @@ -81,16 +81,16 @@ object ShareRoutes { res <- backend.share .verify(cfg.auth.serverSecret)(secret.shareId, secret.password) resp <- res match { - case VerifyResult.Success(token) => + case VerifyResult.Success(token, name) => val cd = ShareCookieData(token) - Ok(ShareVerifyResult(true, token.asString, false, "Success")) + Ok(ShareVerifyResult(true, token.asString, false, "Success", name)) .map(cd.addCookie(ClientRequestInfo.getBaseUrl(cfg, req))) case VerifyResult.PasswordMismatch => - Ok(ShareVerifyResult(false, "", true, "Failed")) + Ok(ShareVerifyResult(false, "", true, "Failed", None)) case VerifyResult.NotFound => - Ok(ShareVerifyResult(false, "", false, "Failed")) + Ok(ShareVerifyResult(false, "", false, "Failed", None)) case VerifyResult.InvalidToken => - Ok(ShareVerifyResult(false, "", false, "Failed")) + Ok(ShareVerifyResult(false, "", false, "Failed", None)) } } yield resp } diff --git a/modules/restserver/src/main/scala/docspell/restserver/routes/ShareSearchRoutes.scala b/modules/restserver/src/main/scala/docspell/restserver/routes/ShareSearchRoutes.scala index 720b5d2f..a0ffa3a9 100644 --- a/modules/restserver/src/main/scala/docspell/restserver/routes/ShareSearchRoutes.scala +++ b/modules/restserver/src/main/scala/docspell/restserver/routes/ShareSearchRoutes.scala @@ -7,13 +7,20 @@ package docspell.restserver.routes import cats.effect._ +import cats.implicits._ import docspell.backend.BackendApp import docspell.backend.auth.ShareToken -import docspell.common.Logger +import docspell.backend.ops.OSimpleSearch +import docspell.common._ +import docspell.restapi.model.ItemQuery import docspell.restserver.Config +import docspell.store.qb.Batch +import docspell.store.queries.Query import org.http4s.HttpRoutes +import org.http4s.circe.CirceEntityDecoder._ +import org.http4s.dsl.Http4sDsl object ShareSearchRoutes { @@ -23,7 +30,37 @@ object ShareSearchRoutes { token: ShareToken ): HttpRoutes[F] = { val logger = Logger.log4s[F](org.log4s.getLogger) - logger.trace(s"$backend $cfg $token") - ??? + + val dsl = new Http4sDsl[F] {} + import dsl._ + + HttpRoutes.of { case req @ POST -> Root => + backend.share + .findShareQuery(token.id) + .semiflatMap { share => + for { + userQuery <- req.as[ItemQuery] + batch = Batch( + userQuery.offset.getOrElse(0), + userQuery.limit.getOrElse(cfg.maxItemPageSize) + ).restrictLimitTo( + cfg.maxItemPageSize + ) + itemQuery = ItemQueryString(userQuery.query) + settings = OSimpleSearch.Settings( + batch, + cfg.fullTextSearch.enabled, + userQuery.withDetails.getOrElse(false), + cfg.maxNoteLength, + searchMode = SearchMode.Normal + ) + account = AccountId(share.cid, Ident.unsafe("")) + fixQuery = Query.Fix(account, Some(share.query.expr), None) + _ <- logger.debug(s"Searching in share ${share.id.id}: ${userQuery.query}") + resp <- ItemRoutes.searchItems(backend, dsl)(settings, fixQuery, itemQuery) + } yield resp + } + .getOrElseF(NotFound()) + } } } From 83dd675e4f4525f53abe102c8fa597e5ddf4ceda Mon Sep 17 00:00:00 2001 From: eikek Date: Tue, 5 Oct 2021 01:06:52 +0200 Subject: [PATCH 43/75] Basic search view for shares --- modules/webapp/src/main/elm/Api.elm | 24 +++ modules/webapp/src/main/elm/App/Update.elm | 2 +- modules/webapp/src/main/elm/App/View2.elm | 1 + modules/webapp/src/main/elm/Data/Items.elm | 6 + .../src/main/elm/Messages/Page/Share.elm | 31 +++- .../webapp/src/main/elm/Page/Share/Data.elm | 73 +++++++- .../src/main/elm/Page/Share/Menubar.elm | 60 +++++++ .../src/main/elm/Page/Share/Results.elm | 23 +++ .../src/main/elm/Page/Share/Sidebar.elm | 32 ++++ .../webapp/src/main/elm/Page/Share/Update.elm | 169 +++++++++++++++++- .../webapp/src/main/elm/Page/Share/View.elm | 137 +++++++++++++- modules/webapp/src/main/elm/Util/Http.elm | 42 +++++ 12 files changed, 577 insertions(+), 23 deletions(-) create mode 100644 modules/webapp/src/main/elm/Page/Share/Menubar.elm create mode 100644 modules/webapp/src/main/elm/Page/Share/Results.elm create mode 100644 modules/webapp/src/main/elm/Page/Share/Sidebar.elm diff --git a/modules/webapp/src/main/elm/Api.elm b/modules/webapp/src/main/elm/Api.elm index a9619b1e..b5323195 100644 --- a/modules/webapp/src/main/elm/Api.elm +++ b/modules/webapp/src/main/elm/Api.elm @@ -113,6 +113,7 @@ module Api exposing , restoreAllItems , restoreItem , saveClientSettings + , searchShare , sendMail , setAttachmentName , setCollectiveSettings @@ -155,6 +156,7 @@ module Api exposing , upload , uploadAmend , uploadSingle + , verifyShare , versionInfo ) @@ -223,6 +225,8 @@ import Api.Model.SentMails exposing (SentMails) import Api.Model.ShareData exposing (ShareData) import Api.Model.ShareDetail exposing (ShareDetail) import Api.Model.ShareList exposing (ShareList) +import Api.Model.ShareSecret exposing (ShareSecret) +import Api.Model.ShareVerifyResult exposing (ShareVerifyResult) import Api.Model.SimpleMail exposing (SimpleMail) import Api.Model.SourceAndTags exposing (SourceAndTags) import Api.Model.SourceList exposing (SourceList) @@ -2264,6 +2268,26 @@ deleteShare flags id receive = } +verifyShare : Flags -> ShareSecret -> (Result Http.Error ShareVerifyResult -> msg) -> Cmd msg +verifyShare flags secret receive = + Http2.authPost + { url = flags.config.baseUrl ++ "/api/v1/open/share/verify" + , account = getAccount flags + , body = Http.jsonBody (Api.Model.ShareSecret.encode secret) + , expect = Http.expectJson receive Api.Model.ShareVerifyResult.decoder + } + + +searchShare : Flags -> String -> ItemQuery -> (Result Http.Error ItemLightList -> msg) -> Cmd msg +searchShare flags token search receive = + Http2.sharePost + { url = flags.config.baseUrl ++ "/api/v1/share/search" + , token = token + , body = Http.jsonBody (Api.Model.ItemQuery.encode search) + , expect = Http.expectJson receive Api.Model.ItemLightList.decoder + } + + --- Helper diff --git a/modules/webapp/src/main/elm/App/Update.elm b/modules/webapp/src/main/elm/App/Update.elm index 5408c581..2b051d84 100644 --- a/modules/webapp/src/main/elm/App/Update.elm +++ b/modules/webapp/src/main/elm/App/Update.elm @@ -324,7 +324,7 @@ updateShare lmsg model = Just id -> let result = - Page.Share.Update.update model.flags id lmsg model.shareModel + Page.Share.Update.update model.flags model.uiSettings id lmsg model.shareModel in ( { model | shareModel = result.model } , Cmd.map ShareMsg result.cmd diff --git a/modules/webapp/src/main/elm/App/View2.elm b/modules/webapp/src/main/elm/App/View2.elm index d80be6e3..06b99462 100644 --- a/modules/webapp/src/main/elm/App/View2.elm +++ b/modules/webapp/src/main/elm/App/View2.elm @@ -432,6 +432,7 @@ viewShare texts shareId model = , Html.map ShareMsg (Share.viewContent texts.share model.flags + model.version model.uiSettings model.shareModel ) diff --git a/modules/webapp/src/main/elm/Data/Items.elm b/modules/webapp/src/main/elm/Data/Items.elm index a2459b7b..0940781c 100644 --- a/modules/webapp/src/main/elm/Data/Items.elm +++ b/modules/webapp/src/main/elm/Data/Items.elm @@ -8,6 +8,7 @@ module Data.Items exposing ( concat , first + , flatten , idSet , length , replaceIn @@ -21,6 +22,11 @@ import Set exposing (Set) import Util.List +flatten : ItemLightList -> List ItemLight +flatten list = + List.concatMap .items list.groups + + concat : ItemLightList -> ItemLightList -> ItemLightList concat l0 l1 = let diff --git a/modules/webapp/src/main/elm/Messages/Page/Share.elm b/modules/webapp/src/main/elm/Messages/Page/Share.elm index b6044543..cee461cd 100644 --- a/modules/webapp/src/main/elm/Messages/Page/Share.elm +++ b/modules/webapp/src/main/elm/Messages/Page/Share.elm @@ -7,16 +7,41 @@ module Messages.Page.Share exposing (..) +import Messages.Basics +import Messages.Comp.ItemCardList +import Messages.Comp.SearchMenu + type alias Texts = - {} + { searchMenu : Messages.Comp.SearchMenu.Texts + , basics : Messages.Basics.Texts + , itemCardList : Messages.Comp.ItemCardList.Texts + , passwordRequired : String + , password : String + , passwordSubmitButton : String + , passwordFailed : String + } gb : Texts gb = - {} + { searchMenu = Messages.Comp.SearchMenu.gb + , basics = Messages.Basics.gb + , itemCardList = Messages.Comp.ItemCardList.gb + , passwordRequired = "Password required" + , password = "Password" + , passwordSubmitButton = "Submit" + , passwordFailed = "Das Passwort ist falsch" + } de : Texts de = - {} + { searchMenu = Messages.Comp.SearchMenu.de + , basics = Messages.Basics.de + , itemCardList = Messages.Comp.ItemCardList.de + , passwordRequired = "Passwort benötigt" + , password = "Passwort" + , passwordSubmitButton = "Submit" + , passwordFailed = "Password is wrong" + } diff --git a/modules/webapp/src/main/elm/Page/Share/Data.elm b/modules/webapp/src/main/elm/Page/Share/Data.elm index a0aa5f76..0689e9dd 100644 --- a/modules/webapp/src/main/elm/Page/Share/Data.elm +++ b/modules/webapp/src/main/elm/Page/Share/Data.elm @@ -5,28 +5,83 @@ -} -module Page.Share.Data exposing (Model, Msg, init) +module Page.Share.Data exposing (Mode(..), Model, Msg(..), PageError(..), init) +import Api +import Api.Model.ItemLightList exposing (ItemLightList) +import Api.Model.ShareSecret exposing (ShareSecret) +import Api.Model.ShareVerifyResult exposing (ShareVerifyResult) +import Comp.ItemCardList +import Comp.PowerSearchInput +import Comp.SearchMenu import Data.Flags exposing (Flags) +import Http + + +type Mode + = ModeInitial + | ModePassword + | ModeShare + + +type PageError + = PageErrorNone + | PageErrorHttp Http.Error + | PageErrorAuthFail + + +type alias PasswordModel = + { password : String + , passwordFailed : Bool + } type alias Model = - {} + { mode : Mode + , verifyResult : ShareVerifyResult + , passwordModel : PasswordModel + , pageError : PageError + , items : ItemLightList + , searchMenuModel : Comp.SearchMenu.Model + , powerSearchInput : Comp.PowerSearchInput.Model + , searchInProgress : Bool + , itemListModel : Comp.ItemCardList.Model + } + + +emptyModel : Flags -> Model +emptyModel flags = + { mode = ModeInitial + , verifyResult = Api.Model.ShareVerifyResult.empty + , passwordModel = + { password = "" + , passwordFailed = False + } + , pageError = PageErrorNone + , items = Api.Model.ItemLightList.empty + , searchMenuModel = Comp.SearchMenu.init flags + , powerSearchInput = Comp.PowerSearchInput.init + , searchInProgress = False + , itemListModel = Comp.ItemCardList.init + } init : Maybe String -> Flags -> ( Model, Cmd Msg ) init shareId flags = case shareId of Just id -> - let - _ = - Debug.log "share" id - in - ( {}, Cmd.none ) + ( emptyModel flags, Api.verifyShare flags (ShareSecret id Nothing) VerifyResp ) Nothing -> - ( {}, Cmd.none ) + ( emptyModel flags, Cmd.none ) type Msg - = Msg + = VerifyResp (Result Http.Error ShareVerifyResult) + | SearchResp (Result Http.Error ItemLightList) + | SetPassword String + | SubmitPassword + | SearchMenuMsg Comp.SearchMenu.Msg + | PowerSearchMsg Comp.PowerSearchInput.Msg + | ResetSearch + | ItemListMsg Comp.ItemCardList.Msg diff --git a/modules/webapp/src/main/elm/Page/Share/Menubar.elm b/modules/webapp/src/main/elm/Page/Share/Menubar.elm new file mode 100644 index 00000000..10751839 --- /dev/null +++ b/modules/webapp/src/main/elm/Page/Share/Menubar.elm @@ -0,0 +1,60 @@ +module Page.Share.Menubar exposing (view) + +import Comp.Basic as B +import Comp.MenuBar as MB +import Comp.PowerSearchInput +import Comp.SearchMenu +import Html exposing (..) +import Html.Attributes exposing (..) +import Html.Events exposing (onClick) +import Messages.Page.Share exposing (Texts) +import Page.Share.Data exposing (Model, Msg(..)) +import Styles as S + + +view : Texts -> Model -> Html Msg +view texts model = + let + btnStyle = + S.secondaryBasicButton ++ " text-sm" + + searchInput = + Comp.SearchMenu.textSearchString + model.searchMenuModel.textSearchModel + + powerSearchBar = + div + [ class "relative flex flex-grow flex-row" ] + [ Html.map PowerSearchMsg + (Comp.PowerSearchInput.viewInput + { placeholder = texts.basics.searchPlaceholder + , extraAttrs = [] + } + model.powerSearchInput + ) + , Html.map PowerSearchMsg + (Comp.PowerSearchInput.viewResult [] model.powerSearchInput) + ] + in + MB.view + { end = + [ MB.CustomElement <| + B.secondaryBasicButton + { label = "" + , icon = + if model.searchInProgress then + "fa fa-sync animate-spin" + + else + "fa fa-sync" + , disabled = model.searchInProgress + , handler = onClick ResetSearch + , attrs = [ href "#" ] + } + ] + , start = + [ MB.CustomElement <| + powerSearchBar + ] + , rootClasses = "mb-2 pt-1 dark:bg-bluegray-700 items-center text-sm" + } diff --git a/modules/webapp/src/main/elm/Page/Share/Results.elm b/modules/webapp/src/main/elm/Page/Share/Results.elm new file mode 100644 index 00000000..b513e936 --- /dev/null +++ b/modules/webapp/src/main/elm/Page/Share/Results.elm @@ -0,0 +1,23 @@ +module Page.Share.Results exposing (view) + +import Comp.ItemCardList +import Data.ItemSelection +import Data.UiSettings exposing (UiSettings) +import Html exposing (..) +import Html.Attributes exposing (..) +import Messages.Page.Share exposing (Texts) +import Page.Share.Data exposing (Model, Msg(..)) + + +view : Texts -> UiSettings -> Model -> Html Msg +view texts settings model = + let + viewCfg = + { current = Nothing + , selection = Data.ItemSelection.Inactive + } + in + div [] + [ Html.map ItemListMsg + (Comp.ItemCardList.view2 texts.itemCardList viewCfg settings model.itemListModel) + ] diff --git a/modules/webapp/src/main/elm/Page/Share/Sidebar.elm b/modules/webapp/src/main/elm/Page/Share/Sidebar.elm new file mode 100644 index 00000000..abd0d8f4 --- /dev/null +++ b/modules/webapp/src/main/elm/Page/Share/Sidebar.elm @@ -0,0 +1,32 @@ +module Page.Share.Sidebar exposing (..) + +import Comp.SearchMenu +import Data.Flags exposing (Flags) +import Data.UiSettings exposing (UiSettings) +import Html exposing (..) +import Html.Attributes exposing (..) +import Messages.Page.Share exposing (Texts) +import Page.Share.Data exposing (Model, Msg(..)) +import Util.ItemDragDrop + + +view : Texts -> Flags -> UiSettings -> Model -> Html Msg +view texts flags settings model = + div + [ class "flex flex-col" + ] + [ Html.map SearchMenuMsg + (Comp.SearchMenu.viewDrop2 texts.searchMenu + ddDummy + flags + settings + model.searchMenuModel + ) + ] + + +ddDummy : Util.ItemDragDrop.DragDropData +ddDummy = + { model = Util.ItemDragDrop.init + , dropped = Nothing + } diff --git a/modules/webapp/src/main/elm/Page/Share/Update.elm b/modules/webapp/src/main/elm/Page/Share/Update.elm index 0f1dadbb..f7be7d99 100644 --- a/modules/webapp/src/main/elm/Page/Share/Update.elm +++ b/modules/webapp/src/main/elm/Page/Share/Update.elm @@ -7,7 +7,15 @@ module Page.Share.Update exposing (UpdateResult, update) +import Api +import Api.Model.ItemQuery +import Comp.ItemCardList +import Comp.PowerSearchInput +import Comp.SearchMenu import Data.Flags exposing (Flags) +import Data.ItemQuery as Q +import Data.SearchMode +import Data.UiSettings exposing (UiSettings) import Page.Share.Data exposing (..) @@ -18,6 +26,161 @@ type alias UpdateResult = } -update : Flags -> String -> Msg -> Model -> UpdateResult -update flags shareId msg model = - UpdateResult model Cmd.none Sub.none +update : Flags -> UiSettings -> String -> Msg -> Model -> UpdateResult +update flags settings shareId msg model = + case msg of + VerifyResp (Ok res) -> + if res.success then + let + eq = + Api.Model.ItemQuery.empty + + iq = + { eq | withDetails = Just True } + in + noSub + ( { model + | pageError = PageErrorNone + , mode = ModeShare + , verifyResult = res + , searchInProgress = True + } + , makeSearchCmd flags model + ) + + else if res.passwordRequired then + if model.mode == ModePassword then + noSub + ( { model + | pageError = PageErrorNone + , passwordModel = + { password = "" + , passwordFailed = True + } + } + , Cmd.none + ) + + else + noSub + ( { model + | pageError = PageErrorNone + , mode = ModePassword + } + , Cmd.none + ) + + else + noSub + ( { model | pageError = PageErrorAuthFail } + , Cmd.none + ) + + VerifyResp (Err err) -> + noSub ( { model | pageError = PageErrorHttp err }, Cmd.none ) + + SearchResp (Ok list) -> + update flags + settings + shareId + (ItemListMsg (Comp.ItemCardList.SetResults list)) + { model | searchInProgress = False } + + SearchResp (Err err) -> + noSub ( { model | pageError = PageErrorHttp err, searchInProgress = False }, Cmd.none ) + + SetPassword pw -> + let + pm = + model.passwordModel + in + noSub ( { model | passwordModel = { pm | password = pw } }, Cmd.none ) + + SubmitPassword -> + let + secret = + { shareId = shareId + , password = Just model.passwordModel.password + } + in + noSub ( model, Api.verifyShare flags secret VerifyResp ) + + SearchMenuMsg lm -> + let + res = + Comp.SearchMenu.update flags settings lm model.searchMenuModel + + nextModel = + { model | searchMenuModel = res.model } + + ( initSearch, searchCmd ) = + if res.stateChange && not model.searchInProgress then + ( True, makeSearchCmd flags nextModel ) + + else + ( False, Cmd.none ) + in + noSub + ( { nextModel | searchInProgress = initSearch } + , Cmd.batch [ Cmd.map SearchMenuMsg res.cmd, searchCmd ] + ) + + PowerSearchMsg lm -> + let + res = + Comp.PowerSearchInput.update lm model.powerSearchInput + + nextModel = + { model | powerSearchInput = res.model } + + ( initSearch, searchCmd ) = + case res.action of + Comp.PowerSearchInput.NoAction -> + ( False, Cmd.none ) + + Comp.PowerSearchInput.SubmitSearch -> + ( True, makeSearchCmd flags nextModel ) + in + { model = { nextModel | searchInProgress = initSearch } + , cmd = Cmd.batch [ Cmd.map PowerSearchMsg res.cmd, searchCmd ] + , sub = Sub.map PowerSearchMsg res.subs + } + + ResetSearch -> + let + nm = + { model | powerSearchInput = Comp.PowerSearchInput.init } + in + update flags settings shareId (SearchMenuMsg Comp.SearchMenu.ResetForm) nm + + ItemListMsg lm -> + let + ( im, ic ) = + Comp.ItemCardList.update flags lm model.itemListModel + in + noSub ( { model | itemListModel = im }, Cmd.map ItemListMsg ic ) + + +noSub : ( Model, Cmd Msg ) -> UpdateResult +noSub ( m, c ) = + UpdateResult m c Sub.none + + +makeSearchCmd : Flags -> Model -> Cmd Msg +makeSearchCmd flags model = + let + xq = + Q.and + [ Comp.SearchMenu.getItemQuery model.searchMenuModel + , Maybe.map Q.Fragment model.powerSearchInput.input + ] + + request mq = + { offset = Nothing + , limit = Nothing + , withDetails = Just True + , query = Q.renderMaybe mq + , searchMode = Just (Data.SearchMode.asString Data.SearchMode.Normal) + } + in + Api.searchShare flags model.verifyResult.token (request xq) SearchResp diff --git a/modules/webapp/src/main/elm/Page/Share/View.elm b/modules/webapp/src/main/elm/Page/Share/View.elm index 0d5cf016..5c0f941b 100644 --- a/modules/webapp/src/main/elm/Page/Share/View.elm +++ b/modules/webapp/src/main/elm/Page/Share/View.elm @@ -7,32 +7,155 @@ module Page.Share.View exposing (viewContent, viewSidebar) +import Api.Model.VersionInfo exposing (VersionInfo) +import Comp.Basic as B import Data.Flags exposing (Flags) +import Data.Items import Data.UiSettings exposing (UiSettings) import Html exposing (..) import Html.Attributes exposing (..) +import Html.Events exposing (onInput, onSubmit) import Messages.Page.Share exposing (Texts) import Page.Share.Data exposing (..) +import Page.Share.Menubar as Menubar +import Page.Share.Results as Results +import Page.Share.Sidebar as Sidebar import Styles as S viewSidebar : Texts -> Bool -> Flags -> UiSettings -> Model -> Html Msg -viewSidebar _ visible _ _ _ = +viewSidebar texts visible flags settings model = div [ id "sidebar" - , classList [ ( "hidden", not visible ) ] + , class S.sidebar + , class S.sidebarBg + , classList [ ( "hidden", not visible || model.mode /= ModeShare ) ] + ] + [ Sidebar.view texts flags settings model ] - [ text "sidebar" ] -viewContent : Texts -> Flags -> UiSettings -> Model -> Html Msg -viewContent texts flags _ model = +viewContent : Texts -> Flags -> VersionInfo -> UiSettings -> Model -> Html Msg +viewContent texts flags versionInfo uiSettings model = + case model.mode of + ModeInitial -> + div + [ id "content" + , class "h-full w-full flex flex-col text-5xl" + , class S.content + ] + [ B.loadingDimmer + { active = model.pageError == PageErrorNone + , label = "" + } + ] + + ModePassword -> + passwordContent texts flags versionInfo model + + ModeShare -> + mainContent texts flags uiSettings model + + + +--- Helpers + + +mainContent : Texts -> Flags -> UiSettings -> Model -> Html Msg +mainContent texts _ settings model = div [ id "content" , class "h-full flex flex-col" , class S.content ] - [ h1 [ class S.header1 ] - [ text "Share Page!" + [ h1 + [ class S.header1 + , classList [ ( "hidden", model.verifyResult.name == Nothing ) ] + ] + [ text <| Maybe.withDefault "" model.verifyResult.name + ] + , Menubar.view texts model + , Results.view texts settings model + ] + + +passwordContent : Texts -> Flags -> VersionInfo -> Model -> Html Msg +passwordContent texts flags versionInfo model = + div + [ id "content" + , class "h-full flex flex-col items-center justify-center w-full" + , class S.content + ] + [ div [ class ("flex flex-col px-4 sm:px-6 md:px-8 lg:px-10 py-8 rounded-md " ++ S.box) ] + [ div [ class "self-center" ] + [ img + [ class "w-16 py-2" + , src (flags.config.docspellAssetPath ++ "/img/logo-96.png") + ] + [] + ] + , div [ class "font-medium self-center text-xl sm:text-2xl" ] + [ text texts.passwordRequired + ] + , Html.form + [ action "#" + , onSubmit SubmitPassword + , autocomplete False + ] + [ div [ class "flex flex-col my-3" ] + [ label + [ for "password" + , class S.inputLabel + ] + [ text texts.password + ] + , div [ class "relative" ] + [ div [ class S.inputIcon ] + [ i [ class "fa fa-lock" ] [] + ] + , input + [ type_ "password" + , name "password" + , autocomplete False + , autofocus True + , tabindex 1 + , onInput SetPassword + , value model.passwordModel.password + , class ("pl-10 pr-4 py-2 rounded-lg" ++ S.textInput) + , placeholder texts.password + ] + [] + ] + ] + , div [ class "flex flex-col my-3" ] + [ button + [ type_ "submit" + , class S.primaryButton + ] + [ text texts.passwordSubmitButton + ] + ] + , div + [ class S.errorMessage + , classList [ ( "hidden", not model.passwordModel.passwordFailed ) ] + ] + [ text texts.passwordFailed + ] + ] + ] + , a + [ class "inline-flex items-center mt-4 text-xs opacity-50 hover:opacity-90" + , href "https://docspell.org" + , target "_new" + ] + [ img + [ src (flags.config.docspellAssetPath ++ "/img/logo-mc-96.png") + , class "w-3 h-3 mr-1" + ] + [] + , span [] + [ text "Docspell " + , text versionInfo.version + ] ] ] diff --git a/modules/webapp/src/main/elm/Util/Http.elm b/modules/webapp/src/main/elm/Util/Http.elm index 550cbd7a..dd965b23 100644 --- a/modules/webapp/src/main/elm/Util/Http.elm +++ b/modules/webapp/src/main/elm/Util/Http.elm @@ -14,6 +14,7 @@ module Util.Http exposing , authTask , executeIn , jsonResolver + , sharePost ) import Api.Model.AuthResult exposing (AuthResult) @@ -49,6 +50,28 @@ authReq req = } +shareReq : + { url : String + , token : String + , method : String + , headers : List Http.Header + , body : Http.Body + , expect : Http.Expect msg + , tracker : Maybe String + } + -> Cmd msg +shareReq req = + Http.request + { url = req.url + , method = req.method + , headers = Http.header "Docspell-Share-Auth" req.token :: req.headers + , expect = req.expect + , body = req.body + , timeout = Nothing + , tracker = req.tracker + } + + authPost : { url : String , account : AuthResult @@ -68,6 +91,25 @@ authPost req = } +sharePost : + { url : String + , token : String + , body : Http.Body + , expect : Http.Expect msg + } + -> Cmd msg +sharePost req = + shareReq + { url = req.url + , token = req.token + , body = req.body + , expect = req.expect + , method = "POST" + , headers = [] + , tracker = Nothing + } + + authPostTrack : { url : String , account : AuthResult From 7b0f378558ed7610f7d46743936c08e00bf1e719 Mon Sep 17 00:00:00 2001 From: eikek Date: Tue, 5 Oct 2021 01:44:50 +0200 Subject: [PATCH 44/75] Refactor to allow internal card links into search menu Also allows to exchange the preview-url in the item card --- modules/webapp/src/main/elm/Api.elm | 12 +++++++ modules/webapp/src/main/elm/Comp/ItemCard.elm | 15 +++++---- .../webapp/src/main/elm/Comp/ItemCardList.elm | 9 +++-- .../webapp/src/main/elm/Comp/SearchMenu.elm | 33 +++++++++++++++++++ .../webapp/src/main/elm/Page/Home/Update.elm | 28 +--------------- .../webapp/src/main/elm/Page/Home/View2.elm | 11 +++++++ .../src/main/elm/Page/Share/Menubar.elm | 7 ++++ .../src/main/elm/Page/Share/Results.elm | 10 ++++++ .../src/main/elm/Page/Share/Sidebar.elm | 7 ++++ .../webapp/src/main/elm/Page/Share/Update.elm | 18 ++++++++-- 10 files changed, 111 insertions(+), 39 deletions(-) diff --git a/modules/webapp/src/main/elm/Api.elm b/modules/webapp/src/main/elm/Api.elm index b5323195..226b3740 100644 --- a/modules/webapp/src/main/elm/Api.elm +++ b/modules/webapp/src/main/elm/Api.elm @@ -141,6 +141,8 @@ module Api exposing , setTags , setTagsMultiple , setUnconfirmed + , shareAttachmentPreviewURL + , shareItemBasePreviewURL , startClassifier , startEmptyTrash , startOnceNotifyDueItems @@ -2288,6 +2290,16 @@ searchShare flags token search receive = } +shareAttachmentPreviewURL : String -> String +shareAttachmentPreviewURL id = + "/api/v1/share/attachment/" ++ id ++ "/preview?withFallback=true" + + +shareItemBasePreviewURL : String -> String +shareItemBasePreviewURL itemId = + "/api/v1/share/item/" ++ itemId ++ "/preview?withFallback=true" + + --- Helper diff --git a/modules/webapp/src/main/elm/Comp/ItemCard.elm b/modules/webapp/src/main/elm/Comp/ItemCard.elm index 9fd19ff3..b4ce9786 100644 --- a/modules/webapp/src/main/elm/Comp/ItemCard.elm +++ b/modules/webapp/src/main/elm/Comp/ItemCard.elm @@ -56,6 +56,8 @@ type Msg type alias ViewConfig = { selection : ItemSelection , extraClasses : String + , previewUrl : AttachmentLight -> String + , previewUrlFallback : ItemLight -> String } @@ -160,7 +162,7 @@ view2 texts cfg settings model item = "text-blue-500 dark:text-lightblue-500" else if isDeleted then - "text-red-600 dark:text-orange-600" + "text-red-600 dark:text-orange-600" else "" @@ -210,7 +212,7 @@ view2 texts cfg settings model item = [] else - [ previewImage2 settings cardAction model item + [ previewImage2 cfg settings cardAction model item ] ) ++ [ mainContent2 texts cardAction cardColor isCreated isDeleted settings cfg item @@ -443,16 +445,15 @@ mainTagsAndFields2 settings item = (renderFields ++ renderTags) -previewImage2 : UiSettings -> List (Attribute Msg) -> Model -> ItemLight -> Html Msg -previewImage2 settings cardAction model item = +previewImage2 : ViewConfig -> UiSettings -> List (Attribute Msg) -> Model -> ItemLight -> Html Msg +previewImage2 cfg settings cardAction model item = let mainAttach = currentAttachment model item previewUrl = - Maybe.map .id mainAttach - |> Maybe.map Api.attachmentPreviewURL - |> Maybe.withDefault (Api.itemBasePreviewURL item.id) + Maybe.map cfg.previewUrl mainAttach + |> Maybe.withDefault (cfg.previewUrlFallback item) in a ([ class "overflow-hidden block bg-gray-50 dark:bg-bluegray-700 dark:bg-opacity-40 border-gray-400 dark:hover:border-bluegray-500 rounded-t-lg" diff --git a/modules/webapp/src/main/elm/Comp/ItemCardList.elm b/modules/webapp/src/main/elm/Comp/ItemCardList.elm index 0d0c97e0..6c66004d 100644 --- a/modules/webapp/src/main/elm/Comp/ItemCardList.elm +++ b/modules/webapp/src/main/elm/Comp/ItemCardList.elm @@ -17,6 +17,7 @@ module Comp.ItemCardList exposing , view2 ) +import Api.Model.AttachmentLight exposing (AttachmentLight) import Api.Model.ItemLight exposing (ItemLight) import Api.Model.ItemLightGroup exposing (ItemLightGroup) import Api.Model.ItemLightList exposing (ItemLightList) @@ -72,13 +73,13 @@ prevItem model id = --- Update -update : Flags -> Msg -> Model -> ( Model, Cmd Msg ) +update : Flags -> Msg -> Model -> ( Model, Cmd Msg, LinkTarget ) update flags msg model = let res = updateDrag DD.init flags msg model in - ( res.model, res.cmd ) + ( res.model, res.cmd, res.linkTarget ) type alias UpdateResult = @@ -161,6 +162,8 @@ updateDrag dm _ msg model = type alias ViewConfig = { current : Maybe String , selection : ItemSelection + , previewUrl : AttachmentLight -> String + , previewUrlFallback : ItemLight -> String } @@ -216,7 +219,7 @@ viewItem2 texts model cfg settings item = "" vvcfg = - Comp.ItemCard.ViewConfig cfg.selection currentClass + Comp.ItemCard.ViewConfig cfg.selection currentClass cfg.previewUrl cfg.previewUrlFallback cardModel = Dict.get item.id model.itemCards diff --git a/modules/webapp/src/main/elm/Comp/SearchMenu.elm b/modules/webapp/src/main/elm/Comp/SearchMenu.elm index e29d52aa..5a2aa5f7 100644 --- a/modules/webapp/src/main/elm/Comp/SearchMenu.elm +++ b/modules/webapp/src/main/elm/Comp/SearchMenu.elm @@ -14,6 +14,7 @@ module Comp.SearchMenu exposing , init , isFulltextSearch , isNamesSearch + , linkTargetMsg , textSearchString , update , updateDrop @@ -34,6 +35,7 @@ import Comp.CustomFieldMultiInput import Comp.DatePicker import Comp.Dropdown exposing (isDropdownChangeMsg) import Comp.FolderSelect +import Comp.LinkTarget exposing (LinkTarget) import Comp.MenuBar as MB import Comp.Tabs import Comp.TagSelect @@ -377,6 +379,37 @@ type Msg | ToggleOpenAllAkkordionTabs +linkTargetMsg : LinkTarget -> Maybe Msg +linkTargetMsg linkTarget = + case linkTarget of + Comp.LinkTarget.LinkNone -> + Nothing + + Comp.LinkTarget.LinkCorrOrg id -> + Just <| SetCorrOrg id + + Comp.LinkTarget.LinkCorrPerson id -> + Just <| SetCorrPerson id + + Comp.LinkTarget.LinkConcPerson id -> + Just <| SetConcPerson id + + Comp.LinkTarget.LinkConcEquip id -> + Just <| SetConcEquip id + + Comp.LinkTarget.LinkFolder id -> + Just <| SetFolder id + + Comp.LinkTarget.LinkTag id -> + Just <| SetTag id.id + + Comp.LinkTarget.LinkCustomField id -> + Just <| SetCustomField id + + Comp.LinkTarget.LinkSource str -> + Just <| ResetToSource str + + type alias NextState = { model : Model , cmd : Cmd Msg diff --git a/modules/webapp/src/main/elm/Page/Home/Update.elm b/modules/webapp/src/main/elm/Page/Home/Update.elm index 00ebfe9a..edebe2f0 100644 --- a/modules/webapp/src/main/elm/Page/Home/Update.elm +++ b/modules/webapp/src/main/elm/Page/Home/Update.elm @@ -1035,33 +1035,7 @@ doSearch param model = linkTargetMsg : LinkTarget -> Maybe Msg linkTargetMsg linkTarget = - case linkTarget of - Comp.LinkTarget.LinkNone -> - Nothing - - Comp.LinkTarget.LinkCorrOrg id -> - Just <| SearchMenuMsg (Comp.SearchMenu.SetCorrOrg id) - - Comp.LinkTarget.LinkCorrPerson id -> - Just <| SearchMenuMsg (Comp.SearchMenu.SetCorrPerson id) - - Comp.LinkTarget.LinkConcPerson id -> - Just <| SearchMenuMsg (Comp.SearchMenu.SetConcPerson id) - - Comp.LinkTarget.LinkConcEquip id -> - Just <| SearchMenuMsg (Comp.SearchMenu.SetConcEquip id) - - Comp.LinkTarget.LinkFolder id -> - Just <| SearchMenuMsg (Comp.SearchMenu.SetFolder id) - - Comp.LinkTarget.LinkTag id -> - Just <| SearchMenuMsg (Comp.SearchMenu.SetTag id.id) - - Comp.LinkTarget.LinkCustomField id -> - Just <| SearchMenuMsg (Comp.SearchMenu.SetCustomField id) - - Comp.LinkTarget.LinkSource str -> - Just <| SearchMenuMsg (Comp.SearchMenu.ResetToSource str) + Maybe.map SearchMenuMsg (Comp.SearchMenu.linkTargetMsg linkTarget) doSearchMore : Flags -> UiSettings -> Model -> ( Model, Cmd Msg ) diff --git a/modules/webapp/src/main/elm/Page/Home/View2.elm b/modules/webapp/src/main/elm/Page/Home/View2.elm index 63f39957..b0ca349e 100644 --- a/modules/webapp/src/main/elm/Page/Home/View2.elm +++ b/modules/webapp/src/main/elm/Page/Home/View2.elm @@ -7,6 +7,7 @@ module Page.Home.View2 exposing (viewContent, viewSidebar) +import Api import Comp.Basic as B import Comp.ConfirmModal import Comp.ItemCardList @@ -461,17 +462,27 @@ searchStats texts _ settings model = itemCardList : Texts -> Flags -> UiSettings -> Model -> List (Html Msg) itemCardList texts _ settings model = let + previewUrl attach = + Api.attachmentPreviewURL attach.id + + previewUrlFallback item = + Api.itemBasePreviewURL item.id + itemViewCfg = case model.viewMode of SelectView svm -> Comp.ItemCardList.ViewConfig model.scrollToCard (Data.ItemSelection.Active svm.ids) + previewUrl + previewUrlFallback _ -> Comp.ItemCardList.ViewConfig model.scrollToCard Data.ItemSelection.Inactive + previewUrl + previewUrlFallback in [ Html.map ItemCardListMsg (Comp.ItemCardList.view2 texts.itemCardList diff --git a/modules/webapp/src/main/elm/Page/Share/Menubar.elm b/modules/webapp/src/main/elm/Page/Share/Menubar.elm index 10751839..eb490c37 100644 --- a/modules/webapp/src/main/elm/Page/Share/Menubar.elm +++ b/modules/webapp/src/main/elm/Page/Share/Menubar.elm @@ -1,3 +1,10 @@ +{- + Copyright 2020 Eike K. & Contributors + + SPDX-License-Identifier: AGPL-3.0-or-later +-} + + module Page.Share.Menubar exposing (view) import Comp.Basic as B diff --git a/modules/webapp/src/main/elm/Page/Share/Results.elm b/modules/webapp/src/main/elm/Page/Share/Results.elm index b513e936..c50af9e8 100644 --- a/modules/webapp/src/main/elm/Page/Share/Results.elm +++ b/modules/webapp/src/main/elm/Page/Share/Results.elm @@ -1,5 +1,13 @@ +{- + Copyright 2020 Eike K. & Contributors + + SPDX-License-Identifier: AGPL-3.0-or-later +-} + + module Page.Share.Results exposing (view) +import Api import Comp.ItemCardList import Data.ItemSelection import Data.UiSettings exposing (UiSettings) @@ -15,6 +23,8 @@ view texts settings model = viewCfg = { current = Nothing , selection = Data.ItemSelection.Inactive + , previewUrl = \attach -> Api.shareAttachmentPreviewURL attach.id + , previewUrlFallback = \item -> Api.shareItemBasePreviewURL item.id } in div [] diff --git a/modules/webapp/src/main/elm/Page/Share/Sidebar.elm b/modules/webapp/src/main/elm/Page/Share/Sidebar.elm index abd0d8f4..31a8ee1b 100644 --- a/modules/webapp/src/main/elm/Page/Share/Sidebar.elm +++ b/modules/webapp/src/main/elm/Page/Share/Sidebar.elm @@ -1,3 +1,10 @@ +{- + Copyright 2020 Eike K. & Contributors + + SPDX-License-Identifier: AGPL-3.0-or-later +-} + + module Page.Share.Sidebar exposing (..) import Comp.SearchMenu diff --git a/modules/webapp/src/main/elm/Page/Share/Update.elm b/modules/webapp/src/main/elm/Page/Share/Update.elm index f7be7d99..56070017 100644 --- a/modules/webapp/src/main/elm/Page/Share/Update.elm +++ b/modules/webapp/src/main/elm/Page/Share/Update.elm @@ -10,6 +10,7 @@ module Page.Share.Update exposing (UpdateResult, update) import Api import Api.Model.ItemQuery import Comp.ItemCardList +import Comp.LinkTarget exposing (LinkTarget) import Comp.PowerSearchInput import Comp.SearchMenu import Data.Flags exposing (Flags) @@ -17,6 +18,7 @@ import Data.ItemQuery as Q import Data.SearchMode import Data.UiSettings exposing (UiSettings) import Page.Share.Data exposing (..) +import Util.Update type alias UpdateResult = @@ -155,10 +157,17 @@ update flags settings shareId msg model = ItemListMsg lm -> let - ( im, ic ) = + ( im, ic, linkTarget ) = Comp.ItemCardList.update flags lm model.itemListModel + + searchMsg = + Maybe.map Util.Update.cmdUnit (linkTargetMsg linkTarget) + |> Maybe.withDefault Cmd.none in - noSub ( { model | itemListModel = im }, Cmd.map ItemListMsg ic ) + noSub + ( { model | itemListModel = im } + , Cmd.batch [ Cmd.map ItemListMsg ic, searchMsg ] + ) noSub : ( Model, Cmd Msg ) -> UpdateResult @@ -184,3 +193,8 @@ makeSearchCmd flags model = } in Api.searchShare flags model.verifyResult.token (request xq) SearchResp + + +linkTargetMsg : LinkTarget -> Maybe Msg +linkTargetMsg linkTarget = + Maybe.map SearchMenuMsg (Comp.SearchMenu.linkTargetMsg linkTarget) From e52271f9cdbc9e99144e2d36f94baa1f01996d32 Mon Sep 17 00:00:00 2001 From: eikek Date: Tue, 5 Oct 2021 09:24:11 +0200 Subject: [PATCH 45/75] Implement share preview image --- .../scala/docspell/backend/BackendApp.scala | 2 +- .../scala/docspell/backend/ops/OShare.scala | 43 +++++++++++++++++-- .../docspell/restserver/RestServer.scala | 3 +- .../restserver/http4s/BinaryUtil.scala | 34 ++++++++++++++- .../restserver/routes/AttachmentRoutes.scala | 19 +------- .../restserver/routes/ItemRoutes.scala | 2 +- .../routes/ShareAttachmentRoutes.scala | 37 ++++++++++++++++ .../restserver/routes/ShareSearchRoutes.scala | 2 +- 8 files changed, 115 insertions(+), 27 deletions(-) create mode 100644 modules/restserver/src/main/scala/docspell/restserver/routes/ShareAttachmentRoutes.scala diff --git a/modules/backend/src/main/scala/docspell/backend/BackendApp.scala b/modules/backend/src/main/scala/docspell/backend/BackendApp.scala index 5a6fa482..1e58654c 100644 --- a/modules/backend/src/main/scala/docspell/backend/BackendApp.scala +++ b/modules/backend/src/main/scala/docspell/backend/BackendApp.scala @@ -86,7 +86,7 @@ object BackendApp { customFieldsImpl <- OCustomFields(store) simpleSearchImpl = OSimpleSearch(fulltextImpl, itemSearchImpl) clientSettingsImpl <- OClientSettings(store) - shareImpl <- Resource.pure(OShare(store)) + shareImpl <- Resource.pure(OShare(store, itemSearchImpl)) } yield new BackendApp[F] { val login = loginImpl val signup = signupImpl diff --git a/modules/backend/src/main/scala/docspell/backend/ops/OShare.scala b/modules/backend/src/main/scala/docspell/backend/ops/OShare.scala index d0b82171..77b882f2 100644 --- a/modules/backend/src/main/scala/docspell/backend/ops/OShare.scala +++ b/modules/backend/src/main/scala/docspell/backend/ops/OShare.scala @@ -9,15 +9,15 @@ package docspell.backend.ops import cats.data.OptionT import cats.effect._ import cats.implicits._ - import docspell.backend.PasswordCrypt import docspell.backend.auth.ShareToken +import docspell.backend.ops.OItemSearch.{AttachmentPreviewData, Batch, Query} import docspell.backend.ops.OShare.{ShareQuery, VerifyResult} import docspell.common._ import docspell.query.ItemQuery +import docspell.query.ItemQuery.Expr.AttachId import docspell.store.Store import docspell.store.records.RShare - import scodec.bits.ByteVector trait OShare[F[_]] { @@ -45,10 +45,21 @@ trait OShare[F[_]] { def verifyToken(key: ByteVector)(token: String): F[VerifyResult] def findShareQuery(id: Ident): OptionT[F, ShareQuery] + + def findAttachmentPreview( + attachId: Ident, + shareId: Ident + ): OptionT[F, AttachmentPreviewData[F]] + } object OShare { - final case class ShareQuery(id: Ident, cid: Ident, query: ItemQuery) + final case class ShareQuery(id: Ident, cid: Ident, query: ItemQuery) { + + //TODO + def asAccount: AccountId = + AccountId(cid, Ident.unsafe("")) + } sealed trait VerifyResult { def toEither: Either[String, ShareToken] = @@ -90,7 +101,7 @@ object OShare { def publishUntilInPast: ChangeResult = PublishUntilInPast } - def apply[F[_]: Async](store: Store[F]): OShare[F] = + def apply[F[_]: Async](store: Store[F], itemSearch: OItemSearch[F]): OShare[F] = new OShare[F] { private[this] val logger = Logger.log4s[F](org.log4s.getLogger) @@ -203,5 +214,29 @@ object OShare { .findCurrentActive(id) .mapK(store.transform) .map(share => ShareQuery(share.id, share.cid, share.query)) + + def findAttachmentPreview( + attachId: Ident, + shareId: Ident + ): OptionT[F, AttachmentPreviewData[F]] = + for { + sq <- findShareQuery(shareId) + account = sq.asAccount + checkQuery = Query( + Query.Fix(account, Some(sq.query.expr), None), + Query.QueryExpr(AttachId(attachId.id)) + ) + checkRes <- OptionT.liftF(itemSearch.findItems(0)(checkQuery, Batch.limit(1))) + res <- + if (checkRes.isEmpty) + OptionT + .liftF( + logger.info( + s"Attempt to load unshared attachment '${attachId.id}' for share: ${shareId.id}" + ) + ) + .mapFilter(_ => None) + else OptionT(itemSearch.findAttachmentPreview(attachId, sq.cid)) + } yield res } } diff --git a/modules/restserver/src/main/scala/docspell/restserver/RestServer.scala b/modules/restserver/src/main/scala/docspell/restserver/RestServer.scala index cceacfdd..2e66c65f 100644 --- a/modules/restserver/src/main/scala/docspell/restserver/RestServer.scala +++ b/modules/restserver/src/main/scala/docspell/restserver/RestServer.scala @@ -142,7 +142,8 @@ object RestServer { token: ShareToken ): HttpRoutes[F] = Router( - "search" -> ShareSearchRoutes(restApp.backend, cfg, token) + "search" -> ShareSearchRoutes(restApp.backend, cfg, token), + "attachment" -> ShareAttachmentRoutes(restApp.backend, token) ) def redirectTo[F[_]: Async](path: String): HttpRoutes[F] = { diff --git a/modules/restserver/src/main/scala/docspell/restserver/http4s/BinaryUtil.scala b/modules/restserver/src/main/scala/docspell/restserver/http4s/BinaryUtil.scala index e97eda8f..91baf47e 100644 --- a/modules/restserver/src/main/scala/docspell/restserver/http4s/BinaryUtil.scala +++ b/modules/restserver/src/main/scala/docspell/restserver/http4s/BinaryUtil.scala @@ -10,19 +10,49 @@ import cats.data.NonEmptyList import cats.data.OptionT import cats.effect._ import cats.implicits._ - +import docspell.backend.ops.OItemSearch.AttachmentPreviewData import docspell.backend.ops._ +import docspell.restapi.model.BasicResult import docspell.store.records.RFileMeta +import docspell.restserver.http4s.{QueryParam => QP} import org.http4s._ import org.http4s.circe.CirceEntityEncoder._ import org.http4s.dsl.Http4sDsl -import org.http4s.headers.ETag.EntityTag import org.http4s.headers._ +import org.http4s.headers.ETag.EntityTag import org.typelevel.ci.CIString object BinaryUtil { + def respond[F[_]: Async](dsl: Http4sDsl[F], req: Request[F])( + fileData: Option[AttachmentPreviewData[F]] + ): F[Response[F]] = { + import dsl._ + def notFound = + NotFound(BasicResult(false, "Not found")) + + QP.WithFallback.unapply(req.multiParams) match { + case Some(bool) => + val fallback = bool.getOrElse(false) + val inm = req.headers.get[`If-None-Match`].flatMap(_.tags) + val matches = matchETag(fileData.map(_.meta), inm) + + fileData + .map { data => + if (matches) withResponseHeaders(dsl, NotModified())(data) + else makeByteResp(dsl)(data) + } + .getOrElse( + if (fallback) BinaryUtil.noPreview(req.some).getOrElseF(notFound) + else notFound + ) + + case None => + BadRequest(BasicResult(false, "Invalid query parameter 'withFallback'")) + } + } + def withResponseHeaders[F[_]: Sync](dsl: Http4sDsl[F], resp: F[Response[F]])( data: OItemSearch.BinaryData[F] ): F[Response[F]] = { diff --git a/modules/restserver/src/main/scala/docspell/restserver/routes/AttachmentRoutes.scala b/modules/restserver/src/main/scala/docspell/restserver/routes/AttachmentRoutes.scala index 9b5d52aa..63b818cd 100644 --- a/modules/restserver/src/main/scala/docspell/restserver/routes/AttachmentRoutes.scala +++ b/modules/restserver/src/main/scala/docspell/restserver/routes/AttachmentRoutes.scala @@ -17,7 +17,6 @@ import docspell.common.MakePreviewArgs import docspell.restapi.model._ import docspell.restserver.conv.Conversions import docspell.restserver.http4s.BinaryUtil -import docspell.restserver.http4s.{QueryParam => QP} import docspell.restserver.webapp.Webjars import org.http4s._ @@ -115,25 +114,11 @@ object AttachmentRoutes { .getOrElse(NotFound(BasicResult(false, "Not found"))) } yield resp - case req @ GET -> Root / Ident(id) / "preview" :? QP.WithFallback(flag) => - def notFound = - NotFound(BasicResult(false, "Not found")) + case req @ GET -> Root / Ident(id) / "preview" => for { fileData <- backend.itemSearch.findAttachmentPreview(id, user.account.collective) - inm = req.headers.get[`If-None-Match`].flatMap(_.tags) - matches = BinaryUtil.matchETag(fileData.map(_.meta), inm) - fallback = flag.getOrElse(false) - resp <- - fileData - .map { data => - if (matches) withResponseHeaders(NotModified())(data) - else makeByteResp(data) - } - .getOrElse( - if (fallback) BinaryUtil.noPreview(req.some).getOrElseF(notFound) - else notFound - ) + resp <- BinaryUtil.respond(dsl, req)(fileData) } yield resp case HEAD -> Root / Ident(id) / "preview" => diff --git a/modules/restserver/src/main/scala/docspell/restserver/routes/ItemRoutes.scala b/modules/restserver/src/main/scala/docspell/restserver/routes/ItemRoutes.scala index 8ea503bd..5277d0c8 100644 --- a/modules/restserver/src/main/scala/docspell/restserver/routes/ItemRoutes.scala +++ b/modules/restserver/src/main/scala/docspell/restserver/routes/ItemRoutes.scala @@ -452,7 +452,7 @@ object ItemRoutes { } } - private def searchItemStats[F[_]: Sync]( + def searchItemStats[F[_]: Sync]( backend: BackendApp[F], dsl: Http4sDsl[F] )( diff --git a/modules/restserver/src/main/scala/docspell/restserver/routes/ShareAttachmentRoutes.scala b/modules/restserver/src/main/scala/docspell/restserver/routes/ShareAttachmentRoutes.scala new file mode 100644 index 00000000..af02bf16 --- /dev/null +++ b/modules/restserver/src/main/scala/docspell/restserver/routes/ShareAttachmentRoutes.scala @@ -0,0 +1,37 @@ +/* + * Copyright 2020 Eike K. & Contributors + * + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +package docspell.restserver.routes + +import cats.effect._ +import cats.implicits._ + +import docspell.backend.BackendApp +import docspell.backend.auth.ShareToken +import docspell.common._ +import docspell.restserver.http4s.BinaryUtil + +import org.http4s.HttpRoutes +import org.http4s.dsl.Http4sDsl + +object ShareAttachmentRoutes { + + def apply[F[_]: Async]( + backend: BackendApp[F], + token: ShareToken + ): HttpRoutes[F] = { + val dsl = new Http4sDsl[F] {} + import dsl._ + + HttpRoutes.of { case req @ GET -> Root / Ident(id) / "preview" => + for { + fileData <- + backend.share.findAttachmentPreview(id, token.id).value + resp <- BinaryUtil.respond(dsl, req)(fileData) + } yield resp + } + } +} diff --git a/modules/restserver/src/main/scala/docspell/restserver/routes/ShareSearchRoutes.scala b/modules/restserver/src/main/scala/docspell/restserver/routes/ShareSearchRoutes.scala index a0ffa3a9..39a45412 100644 --- a/modules/restserver/src/main/scala/docspell/restserver/routes/ShareSearchRoutes.scala +++ b/modules/restserver/src/main/scala/docspell/restserver/routes/ShareSearchRoutes.scala @@ -54,7 +54,7 @@ object ShareSearchRoutes { cfg.maxNoteLength, searchMode = SearchMode.Normal ) - account = AccountId(share.cid, Ident.unsafe("")) + account = share.asAccount fixQuery = Query.Fix(account, Some(share.query.expr), None) _ <- logger.debug(s"Searching in share ${share.id.id}: ${userQuery.query}") resp <- ItemRoutes.searchItems(backend, dsl)(settings, fixQuery, itemQuery) From e961a5ac10f5854e829c05d61c4ace39dca56b7d Mon Sep 17 00:00:00 2001 From: eikek Date: Tue, 5 Oct 2021 10:27:21 +0200 Subject: [PATCH 46/75] Use search stats to populate search menu --- .../scala/docspell/backend/BackendApp.scala | 2 +- .../scala/docspell/backend/ops/OShare.scala | 31 +++++- .../src/main/resources/docspell-openapi.yml | 70 ++++++++++++- .../restserver/http4s/BinaryUtil.scala | 14 ++- .../restserver/routes/AttachmentRoutes.scala | 5 +- .../restserver/routes/ItemRoutes.scala | 11 ++- .../routes/ShareAttachmentRoutes.scala | 20 ++-- .../restserver/routes/ShareSearchRoutes.scala | 99 +++++++++++++------ .../store/queries/SearchSummary.scala | 12 ++- modules/webapp/src/main/elm/Api.elm | 13 ++- .../webapp/src/main/elm/Comp/SearchMenu.elm | 6 ++ .../webapp/src/main/elm/Comp/TagSelect.elm | 7 ++ .../webapp/src/main/elm/Page/Share/Data.elm | 4 +- .../webapp/src/main/elm/Page/Share/Update.elm | 18 +++- 14 files changed, 257 insertions(+), 55 deletions(-) diff --git a/modules/backend/src/main/scala/docspell/backend/BackendApp.scala b/modules/backend/src/main/scala/docspell/backend/BackendApp.scala index 1e58654c..9037e138 100644 --- a/modules/backend/src/main/scala/docspell/backend/BackendApp.scala +++ b/modules/backend/src/main/scala/docspell/backend/BackendApp.scala @@ -86,7 +86,7 @@ object BackendApp { customFieldsImpl <- OCustomFields(store) simpleSearchImpl = OSimpleSearch(fulltextImpl, itemSearchImpl) clientSettingsImpl <- OClientSettings(store) - shareImpl <- Resource.pure(OShare(store, itemSearchImpl)) + shareImpl <- Resource.pure(OShare(store, itemSearchImpl, simpleSearchImpl)) } yield new BackendApp[F] { val login = loginImpl val signup = signupImpl diff --git a/modules/backend/src/main/scala/docspell/backend/ops/OShare.scala b/modules/backend/src/main/scala/docspell/backend/ops/OShare.scala index 77b882f2..0f064c36 100644 --- a/modules/backend/src/main/scala/docspell/backend/ops/OShare.scala +++ b/modules/backend/src/main/scala/docspell/backend/ops/OShare.scala @@ -9,15 +9,19 @@ package docspell.backend.ops import cats.data.OptionT import cats.effect._ import cats.implicits._ + import docspell.backend.PasswordCrypt import docspell.backend.auth.ShareToken import docspell.backend.ops.OItemSearch.{AttachmentPreviewData, Batch, Query} import docspell.backend.ops.OShare.{ShareQuery, VerifyResult} +import docspell.backend.ops.OSimpleSearch.StringSearchResult import docspell.common._ import docspell.query.ItemQuery import docspell.query.ItemQuery.Expr.AttachId import docspell.store.Store +import docspell.store.queries.SearchSummary import docspell.store.records.RShare + import scodec.bits.ByteVector trait OShare[F[_]] { @@ -51,6 +55,9 @@ trait OShare[F[_]] { shareId: Ident ): OptionT[F, AttachmentPreviewData[F]] + def searchSummary( + settings: OSimpleSearch.StatsSettings + )(shareId: Ident, q: ItemQueryString): OptionT[F, StringSearchResult[SearchSummary]] } object OShare { @@ -101,7 +108,11 @@ object OShare { def publishUntilInPast: ChangeResult = PublishUntilInPast } - def apply[F[_]: Async](store: Store[F], itemSearch: OItemSearch[F]): OShare[F] = + def apply[F[_]: Async]( + store: Store[F], + itemSearch: OItemSearch[F], + simpleSearch: OSimpleSearch[F] + ): OShare[F] = new OShare[F] { private[this] val logger = Logger.log4s[F](org.log4s.getLogger) @@ -238,5 +249,23 @@ object OShare { .mapFilter(_ => None) else OptionT(itemSearch.findAttachmentPreview(attachId, sq.cid)) } yield res + + def searchSummary( + settings: OSimpleSearch.StatsSettings + )( + shareId: Ident, + q: ItemQueryString + ): OptionT[F, StringSearchResult[SearchSummary]] = + findShareQuery(shareId) + .semiflatMap { share => + val fix = Query.Fix(share.asAccount, Some(share.query.expr), None) + simpleSearch + .searchSummaryByString(settings)(fix, q) + .map { + case StringSearchResult.Success(summary) => + StringSearchResult.Success(summary.onlyExisting) + case other => other + } + } } } diff --git a/modules/restapi/src/main/resources/docspell-openapi.yml b/modules/restapi/src/main/resources/docspell-openapi.yml index 2f563116..46a4766a 100644 --- a/modules/restapi/src/main/resources/docspell-openapi.yml +++ b/modules/restapi/src/main/resources/docspell-openapi.yml @@ -1558,9 +1558,9 @@ paths: schema: $ref: "#/components/schemas/BasicResult" - /share/search: + /share/search/query: post: - operationId: "share-search" + operationId: "share-search-query" tags: [Share] summary: Performs a search in a share. description: | @@ -1581,6 +1581,72 @@ paths: application/json: schema: $ref: "#/components/schemas/ItemLightList" + /share/search/stats: + post: + operationId: "share-search-stats" + tags: [ Share ] + summary: Get basic statistics about search results. + description: | + Instead of returning the results of a query, uses it to return + a summary, constraint to the share. + security: + - shareTokenHeader: [] + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/ItemQuery" + responses: + 200: + description: Ok + content: + application/json: + schema: + $ref: "#/components/schemas/SearchStats" + /share/attachment/{id}/preview: + head: + operationId: "share-attach-check-preview" + tags: [ Attachment ] + summary: Get the headers to a preview image of an attachment file. + description: | + Checks if an image file showing a preview of the attachment is + available. If not available, a 404 is returned. + security: + - shareTokenHeader: [] + parameters: + - $ref: "#/components/parameters/id" + responses: + 200: + description: Ok + 404: + description: NotFound + get: + operationId: "share-attach-get-preview" + tags: [ Attachment ] + summary: Get a preview image of an attachment file. + description: | + Gets a image file showing a preview of the attachment. Usually + it is a small image of the first page of the document.If not + available, a 404 is returned. However, if the query parameter + `withFallback` is `true`, a fallback preview image is + returned. You can also use the `HEAD` method to check for + existence. + + The attachment must be in the search results of the current + share. + security: + - shareTokenHeader: [] + parameters: + - $ref: "#/components/parameters/id" + - $ref: "#/components/parameters/withFallback" + responses: + 200: + description: Ok + content: + application/octet-stream: + schema: + type: string + format: binary /admin/user/resetPassword: post: diff --git a/modules/restserver/src/main/scala/docspell/restserver/http4s/BinaryUtil.scala b/modules/restserver/src/main/scala/docspell/restserver/http4s/BinaryUtil.scala index 91baf47e..208847a6 100644 --- a/modules/restserver/src/main/scala/docspell/restserver/http4s/BinaryUtil.scala +++ b/modules/restserver/src/main/scala/docspell/restserver/http4s/BinaryUtil.scala @@ -10,17 +10,18 @@ import cats.data.NonEmptyList import cats.data.OptionT import cats.effect._ import cats.implicits._ + import docspell.backend.ops.OItemSearch.AttachmentPreviewData import docspell.backend.ops._ import docspell.restapi.model.BasicResult -import docspell.store.records.RFileMeta import docspell.restserver.http4s.{QueryParam => QP} +import docspell.store.records.RFileMeta import org.http4s._ import org.http4s.circe.CirceEntityEncoder._ import org.http4s.dsl.Http4sDsl -import org.http4s.headers._ import org.http4s.headers.ETag.EntityTag +import org.http4s.headers._ import org.typelevel.ci.CIString object BinaryUtil { @@ -53,6 +54,15 @@ object BinaryUtil { } } + def respondHead[F[_]: Async]( + dsl: Http4sDsl[F] + )(fileData: Option[AttachmentPreviewData[F]]): F[Response[F]] = { + import dsl._ + fileData + .map(data => withResponseHeaders(dsl, Ok())(data)) + .getOrElse(NotFound(BasicResult(false, "Not found"))) + } + def withResponseHeaders[F[_]: Sync](dsl: Http4sDsl[F], resp: F[Response[F]])( data: OItemSearch.BinaryData[F] ): F[Response[F]] = { diff --git a/modules/restserver/src/main/scala/docspell/restserver/routes/AttachmentRoutes.scala b/modules/restserver/src/main/scala/docspell/restserver/routes/AttachmentRoutes.scala index 63b818cd..cf4e23f7 100644 --- a/modules/restserver/src/main/scala/docspell/restserver/routes/AttachmentRoutes.scala +++ b/modules/restserver/src/main/scala/docspell/restserver/routes/AttachmentRoutes.scala @@ -125,10 +125,7 @@ object AttachmentRoutes { for { fileData <- backend.itemSearch.findAttachmentPreview(id, user.account.collective) - resp <- - fileData - .map(data => withResponseHeaders(Ok())(data)) - .getOrElse(NotFound(BasicResult(false, "Not found"))) + resp <- BinaryUtil.respondHead(dsl)(fileData) } yield resp case POST -> Root / Ident(id) / "preview" => diff --git a/modules/restserver/src/main/scala/docspell/restserver/routes/ItemRoutes.scala b/modules/restserver/src/main/scala/docspell/restserver/routes/ItemRoutes.scala index 5277d0c8..5db15101 100644 --- a/modules/restserver/src/main/scala/docspell/restserver/routes/ItemRoutes.scala +++ b/modules/restserver/src/main/scala/docspell/restserver/routes/ItemRoutes.scala @@ -28,11 +28,11 @@ import docspell.restserver.http4s.BinaryUtil import docspell.restserver.http4s.Responses import docspell.restserver.http4s.{QueryParam => QP} -import org.http4s.HttpRoutes import org.http4s.circe.CirceEntityDecoder._ import org.http4s.circe.CirceEntityEncoder._ import org.http4s.dsl.Http4sDsl import org.http4s.headers._ +import org.http4s.{HttpRoutes, Response} import org.log4s._ object ItemRoutes { @@ -415,7 +415,11 @@ object ItemRoutes { def searchItems[F[_]: Sync]( backend: BackendApp[F], dsl: Http4sDsl[F] - )(settings: OSimpleSearch.Settings, fixQuery: Query.Fix, itemQuery: ItemQueryString) = { + )( + settings: OSimpleSearch.Settings, + fixQuery: Query.Fix, + itemQuery: ItemQueryString + ): F[Response[F]] = { import dsl._ def convertFts(res: OSimpleSearch.Items.FtsItems): ItemLightList = @@ -459,7 +463,7 @@ object ItemRoutes { settings: OSimpleSearch.StatsSettings, fixQuery: Query.Fix, itemQuery: ItemQueryString - ) = { + ): F[Response[F]] = { import dsl._ backend.simpleSearch @@ -479,7 +483,6 @@ object ItemRoutes { case StringSearchResult.ParseFailed(pf) => BadRequest(BasicResult(false, s"Error reading query: ${pf.render}")) } - } implicit final class OptionString(opt: Option[String]) { diff --git a/modules/restserver/src/main/scala/docspell/restserver/routes/ShareAttachmentRoutes.scala b/modules/restserver/src/main/scala/docspell/restserver/routes/ShareAttachmentRoutes.scala index af02bf16..d763530b 100644 --- a/modules/restserver/src/main/scala/docspell/restserver/routes/ShareAttachmentRoutes.scala +++ b/modules/restserver/src/main/scala/docspell/restserver/routes/ShareAttachmentRoutes.scala @@ -26,12 +26,20 @@ object ShareAttachmentRoutes { val dsl = new Http4sDsl[F] {} import dsl._ - HttpRoutes.of { case req @ GET -> Root / Ident(id) / "preview" => - for { - fileData <- - backend.share.findAttachmentPreview(id, token.id).value - resp <- BinaryUtil.respond(dsl, req)(fileData) - } yield resp + HttpRoutes.of { + case req @ GET -> Root / Ident(id) / "preview" => + for { + fileData <- + backend.share.findAttachmentPreview(id, token.id).value + resp <- BinaryUtil.respond(dsl, req)(fileData) + } yield resp + + case HEAD -> Root / Ident(id) / "preview" => + for { + fileData <- + backend.share.findAttachmentPreview(id, token.id).value + resp <- BinaryUtil.respondHead(dsl)(fileData) + } yield resp } } } diff --git a/modules/restserver/src/main/scala/docspell/restserver/routes/ShareSearchRoutes.scala b/modules/restserver/src/main/scala/docspell/restserver/routes/ShareSearchRoutes.scala index 39a45412..96202f14 100644 --- a/modules/restserver/src/main/scala/docspell/restserver/routes/ShareSearchRoutes.scala +++ b/modules/restserver/src/main/scala/docspell/restserver/routes/ShareSearchRoutes.scala @@ -12,15 +12,19 @@ import cats.implicits._ import docspell.backend.BackendApp import docspell.backend.auth.ShareToken import docspell.backend.ops.OSimpleSearch +import docspell.backend.ops.OSimpleSearch.StringSearchResult import docspell.common._ -import docspell.restapi.model.ItemQuery +import docspell.query.FulltextExtract.Result.{TooMany, UnsupportedPosition} +import docspell.restapi.model._ import docspell.restserver.Config +import docspell.restserver.conv.Conversions import docspell.store.qb.Batch -import docspell.store.queries.Query +import docspell.store.queries.{Query, SearchSummary} -import org.http4s.HttpRoutes import org.http4s.circe.CirceEntityDecoder._ +import org.http4s.circe.CirceEntityEncoder._ import org.http4s.dsl.Http4sDsl +import org.http4s.{HttpRoutes, Response} object ShareSearchRoutes { @@ -34,33 +38,68 @@ object ShareSearchRoutes { val dsl = new Http4sDsl[F] {} import dsl._ - HttpRoutes.of { case req @ POST -> Root => - backend.share - .findShareQuery(token.id) - .semiflatMap { share => - for { - userQuery <- req.as[ItemQuery] - batch = Batch( - userQuery.offset.getOrElse(0), - userQuery.limit.getOrElse(cfg.maxItemPageSize) - ).restrictLimitTo( - cfg.maxItemPageSize - ) - itemQuery = ItemQueryString(userQuery.query) - settings = OSimpleSearch.Settings( - batch, - cfg.fullTextSearch.enabled, - userQuery.withDetails.getOrElse(false), - cfg.maxNoteLength, - searchMode = SearchMode.Normal - ) - account = share.asAccount - fixQuery = Query.Fix(account, Some(share.query.expr), None) - _ <- logger.debug(s"Searching in share ${share.id.id}: ${userQuery.query}") - resp <- ItemRoutes.searchItems(backend, dsl)(settings, fixQuery, itemQuery) - } yield resp - } - .getOrElseF(NotFound()) + HttpRoutes.of { + case req @ POST -> Root / "query" => + backend.share + .findShareQuery(token.id) + .semiflatMap { share => + for { + userQuery <- req.as[ItemQuery] + batch = Batch( + userQuery.offset.getOrElse(0), + userQuery.limit.getOrElse(cfg.maxItemPageSize) + ).restrictLimitTo( + cfg.maxItemPageSize + ) + itemQuery = ItemQueryString(userQuery.query) + settings = OSimpleSearch.Settings( + batch, + cfg.fullTextSearch.enabled, + userQuery.withDetails.getOrElse(false), + cfg.maxNoteLength, + searchMode = SearchMode.Normal + ) + account = share.asAccount + fixQuery = Query.Fix(account, Some(share.query.expr), None) + _ <- logger.debug(s"Searching in share ${share.id.id}: ${userQuery.query}") + resp <- ItemRoutes.searchItems(backend, dsl)(settings, fixQuery, itemQuery) + } yield resp + } + .getOrElseF(NotFound()) + + case req @ POST -> Root / "stats" => + for { + userQuery <- req.as[ItemQuery] + itemQuery = ItemQueryString(userQuery.query) + settings = OSimpleSearch.StatsSettings( + useFTS = cfg.fullTextSearch.enabled, + searchMode = userQuery.searchMode.getOrElse(SearchMode.Normal) + ) + stats <- backend.share.searchSummary(settings)(token.id, itemQuery).value + resp <- stats.map(mkSummaryResponse(dsl)).getOrElse(NotFound()) + } yield resp } } + + def mkSummaryResponse[F[_]: Sync]( + dsl: Http4sDsl[F] + )(r: StringSearchResult[SearchSummary]): F[Response[F]] = { + import dsl._ + r match { + case StringSearchResult.Success(summary) => + Ok(Conversions.mkSearchStats(summary)) + case StringSearchResult.FulltextMismatch(TooMany) => + BadRequest(BasicResult(false, "Fulltext search is not possible in this share.")) + case StringSearchResult.FulltextMismatch(UnsupportedPosition) => + BadRequest( + BasicResult( + false, + "Fulltext search must be in root position or inside the first AND." + ) + ) + case StringSearchResult.ParseFailed(pf) => + BadRequest(BasicResult(false, s"Error reading query: ${pf.render}")) + } + } + } diff --git a/modules/store/src/main/scala/docspell/store/queries/SearchSummary.scala b/modules/store/src/main/scala/docspell/store/queries/SearchSummary.scala index 0b6a1b1c..1eeaef2e 100644 --- a/modules/store/src/main/scala/docspell/store/queries/SearchSummary.scala +++ b/modules/store/src/main/scala/docspell/store/queries/SearchSummary.scala @@ -12,4 +12,14 @@ case class SearchSummary( cats: List[CategoryCount], fields: List[FieldStats], folders: List[FolderCount] -) +) { + + def onlyExisting: SearchSummary = + SearchSummary( + count, + tags.filter(_.count > 0), + cats.filter(_.count > 0), + fields.filter(_.count > 0), + folders.filter(_.count > 0) + ) +} diff --git a/modules/webapp/src/main/elm/Api.elm b/modules/webapp/src/main/elm/Api.elm index 226b3740..a049bce3 100644 --- a/modules/webapp/src/main/elm/Api.elm +++ b/modules/webapp/src/main/elm/Api.elm @@ -114,6 +114,7 @@ module Api exposing , restoreItem , saveClientSettings , searchShare + , searchShareStats , sendMail , setAttachmentName , setCollectiveSettings @@ -2283,13 +2284,23 @@ verifyShare flags secret receive = searchShare : Flags -> String -> ItemQuery -> (Result Http.Error ItemLightList -> msg) -> Cmd msg searchShare flags token search receive = Http2.sharePost - { url = flags.config.baseUrl ++ "/api/v1/share/search" + { url = flags.config.baseUrl ++ "/api/v1/share/search/query" , token = token , body = Http.jsonBody (Api.Model.ItemQuery.encode search) , expect = Http.expectJson receive Api.Model.ItemLightList.decoder } +searchShareStats : Flags -> String -> ItemQuery -> (Result Http.Error SearchStats -> msg) -> Cmd msg +searchShareStats flags token search receive = + Http2.sharePost + { url = flags.config.baseUrl ++ "/api/v1/share/search/stats" + , token = token + , body = Http.jsonBody (Api.Model.ItemQuery.encode search) + , expect = Http.expectJson receive Api.Model.SearchStats.decoder + } + + shareAttachmentPreviewURL : String -> String shareAttachmentPreviewURL id = "/api/v1/share/attachment/" ++ id ++ "/preview?withFallback=true" diff --git a/modules/webapp/src/main/elm/Comp/SearchMenu.elm b/modules/webapp/src/main/elm/Comp/SearchMenu.elm index 5a2aa5f7..c70a1c3d 100644 --- a/modules/webapp/src/main/elm/Comp/SearchMenu.elm +++ b/modules/webapp/src/main/elm/Comp/SearchMenu.elm @@ -15,6 +15,7 @@ module Comp.SearchMenu exposing , isFulltextSearch , isNamesSearch , linkTargetMsg + , setFromStats , textSearchString , update , updateDrop @@ -379,6 +380,11 @@ type Msg | ToggleOpenAllAkkordionTabs +setFromStats : SearchStats -> Msg +setFromStats stats = + GetStatsResp (Ok stats) + + linkTargetMsg : LinkTarget -> Maybe Msg linkTargetMsg linkTarget = case linkTarget of diff --git a/modules/webapp/src/main/elm/Comp/TagSelect.elm b/modules/webapp/src/main/elm/Comp/TagSelect.elm index 62f2a65d..3fe96ac1 100644 --- a/modules/webapp/src/main/elm/Comp/TagSelect.elm +++ b/modules/webapp/src/main/elm/Comp/TagSelect.elm @@ -245,6 +245,12 @@ makeWorkModel sel model = } +noEmptyTags : Model -> Bool +noEmptyTags model = + Dict.filter (\k -> \v -> v.count == 0) model.availableTags + |> Dict.isEmpty + + type Msg = ToggleTag String | ToggleCat String @@ -422,6 +428,7 @@ viewTagsDrop2 texts ddm wm settings model = [ a [ class S.secondaryBasicButtonPlain , class "border rounded flex-none px-1 py-1" + , classList [ ( "hidden", noEmptyTags model ) ] , href "#" , onClick ToggleShowEmpty ] diff --git a/modules/webapp/src/main/elm/Page/Share/Data.elm b/modules/webapp/src/main/elm/Page/Share/Data.elm index 0689e9dd..eb47a41c 100644 --- a/modules/webapp/src/main/elm/Page/Share/Data.elm +++ b/modules/webapp/src/main/elm/Page/Share/Data.elm @@ -9,6 +9,7 @@ module Page.Share.Data exposing (Mode(..), Model, Msg(..), PageError(..), init) import Api import Api.Model.ItemLightList exposing (ItemLightList) +import Api.Model.SearchStats exposing (SearchStats) import Api.Model.ShareSecret exposing (ShareSecret) import Api.Model.ShareVerifyResult exposing (ShareVerifyResult) import Comp.ItemCardList @@ -41,7 +42,6 @@ type alias Model = , verifyResult : ShareVerifyResult , passwordModel : PasswordModel , pageError : PageError - , items : ItemLightList , searchMenuModel : Comp.SearchMenu.Model , powerSearchInput : Comp.PowerSearchInput.Model , searchInProgress : Bool @@ -58,7 +58,6 @@ emptyModel flags = , passwordFailed = False } , pageError = PageErrorNone - , items = Api.Model.ItemLightList.empty , searchMenuModel = Comp.SearchMenu.init flags , powerSearchInput = Comp.PowerSearchInput.init , searchInProgress = False @@ -79,6 +78,7 @@ init shareId flags = type Msg = VerifyResp (Result Http.Error ShareVerifyResult) | SearchResp (Result Http.Error ItemLightList) + | StatsResp (Result Http.Error SearchStats) | SetPassword String | SubmitPassword | SearchMenuMsg Comp.SearchMenu.Msg diff --git a/modules/webapp/src/main/elm/Page/Share/Update.elm b/modules/webapp/src/main/elm/Page/Share/Update.elm index 56070017..01b7ec73 100644 --- a/modules/webapp/src/main/elm/Page/Share/Update.elm +++ b/modules/webapp/src/main/elm/Page/Share/Update.elm @@ -91,6 +91,16 @@ update flags settings shareId msg model = SearchResp (Err err) -> noSub ( { model | pageError = PageErrorHttp err, searchInProgress = False }, Cmd.none ) + StatsResp (Ok stats) -> + update flags + settings + shareId + (SearchMenuMsg (Comp.SearchMenu.setFromStats stats)) + model + + StatsResp (Err err) -> + noSub ( { model | pageError = PageErrorHttp err }, Cmd.none ) + SetPassword pw -> let pm = @@ -191,8 +201,14 @@ makeSearchCmd flags model = , query = Q.renderMaybe mq , searchMode = Just (Data.SearchMode.asString Data.SearchMode.Normal) } + + searchCmd = + Api.searchShare flags model.verifyResult.token (request xq) SearchResp + + statsCmd = + Api.searchShareStats flags model.verifyResult.token (request xq) StatsResp in - Api.searchShare flags model.verifyResult.token (request xq) SearchResp + Cmd.batch [ searchCmd, statsCmd ] linkTargetMsg : LinkTarget -> Maybe Msg From 813797756cffe1d0f89b7618639b2dabf2123601 Mon Sep 17 00:00:00 2001 From: eikek Date: Tue, 5 Oct 2021 13:50:31 +0200 Subject: [PATCH 47/75] Extend search stats to fully populate search menu Refs: #856 --- .../src/main/resources/docspell-openapi.yml | 34 +++++++++++++ .../restserver/conv/Conversions.scala | 14 ++++-- .../docspell/store/queries/IdRefCount.scala | 5 ++ .../scala/docspell/store/queries/QItem.scala | 50 ++++++++++++++++++- .../store/queries/SearchSummary.scala | 12 ++++- .../main/elm/Comp/CustomFieldMultiInput.elm | 6 +++ .../webapp/src/main/elm/Comp/SearchMenu.elm | 42 ++++++++++++++++ .../webapp/src/main/elm/Util/CustomField.elm | 12 +++++ 8 files changed, 167 insertions(+), 8 deletions(-) create mode 100644 modules/store/src/main/scala/docspell/store/queries/IdRefCount.scala diff --git a/modules/restapi/src/main/resources/docspell-openapi.yml b/modules/restapi/src/main/resources/docspell-openapi.yml index 46a4766a..0c0dd351 100644 --- a/modules/restapi/src/main/resources/docspell-openapi.yml +++ b/modules/restapi/src/main/resources/docspell-openapi.yml @@ -5305,6 +5305,10 @@ components: - tagCategoryCloud - fieldStats - folderStats + - corrOrgStats + - corrPersStats + - concPersStats + - concEquipStats properties: count: type: integer @@ -5321,6 +5325,23 @@ components: type: array items: $ref: "#/components/schemas/FolderStats" + corrOrgStats: + type: array + items: + $ref: "#/components/schemas/IdRefStats" + corrPersStats: + type: array + items: + $ref: "#/components/schemas/IdRefStats" + concPersStats: + type: array + items: + $ref: "#/components/schemas/IdRefStats" + concEquipStats: + type: array + items: + $ref: "#/components/schemas/IdRefStats" + ItemInsights: description: | Information about the items in docspell. @@ -5454,6 +5475,19 @@ components: type: integer format: int32 + IdRefStats: + description: | + Counting some objects that have an id and a name. + required: + - ref + - count + properties: + ref: + $ref: "#/components/schemas/IdName" + count: + type: integer + format: int32 + AttachmentMeta: description: | Extracted meta data of an attachment. diff --git a/modules/restserver/src/main/scala/docspell/restserver/conv/Conversions.scala b/modules/restserver/src/main/scala/docspell/restserver/conv/Conversions.scala index 7cc03c6b..be89e955 100644 --- a/modules/restserver/src/main/scala/docspell/restserver/conv/Conversions.scala +++ b/modules/restserver/src/main/scala/docspell/restserver/conv/Conversions.scala @@ -7,11 +7,9 @@ package docspell.restserver.conv import java.time.{LocalDate, ZoneId} - import cats.effect.{Async, Sync} import cats.implicits._ import fs2.Stream - import docspell.backend.ops.OCollective.{InsightData, PassChangeResult} import docspell.backend.ops.OCustomFields.SetValueResult import docspell.backend.ops.OJob.JobCancelResult @@ -22,10 +20,9 @@ import docspell.common.syntax.all._ import docspell.ftsclient.FtsResult import docspell.restapi.model._ import docspell.restserver.conv.Conversions._ -import docspell.store.queries.{AttachmentLight => QAttachmentLight} +import docspell.store.queries.{AttachmentLight => QAttachmentLight, IdRefCount} import docspell.store.records._ import docspell.store.{AddResult, UpdateResult} - import org.http4s.headers.`Content-Type` import org.http4s.multipart.Multipart import org.log4s.Logger @@ -38,9 +35,16 @@ trait Conversions { mkTagCloud(sum.tags), mkTagCategoryCloud(sum.cats), sum.fields.map(mkFieldStats), - sum.folders.map(mkFolderStats) + sum.folders.map(mkFolderStats), + sum.corrOrgs.map(mkIdRefStats), + sum.corrPers.map(mkIdRefStats), + sum.concPers.map(mkIdRefStats), + sum.concEquip.map(mkIdRefStats) ) + def mkIdRefStats(s: IdRefCount): IdRefStats = + IdRefStats(mkIdName(s.ref), s.count) + def mkFolderStats(fs: docspell.store.queries.FolderCount): FolderStats = FolderStats(fs.id, fs.name, mkIdName(fs.owner), fs.count) diff --git a/modules/store/src/main/scala/docspell/store/queries/IdRefCount.scala b/modules/store/src/main/scala/docspell/store/queries/IdRefCount.scala new file mode 100644 index 00000000..20c2fbdf --- /dev/null +++ b/modules/store/src/main/scala/docspell/store/queries/IdRefCount.scala @@ -0,0 +1,5 @@ +package docspell.store.queries + +import docspell.common._ + +final case class IdRefCount(ref: IdRef, count: Int) {} diff --git a/modules/store/src/main/scala/docspell/store/queries/QItem.scala b/modules/store/src/main/scala/docspell/store/queries/QItem.scala index 2671fcaa..623b68e0 100644 --- a/modules/store/src/main/scala/docspell/store/queries/QItem.scala +++ b/modules/store/src/main/scala/docspell/store/queries/QItem.scala @@ -192,7 +192,21 @@ object QItem { cats <- searchTagCategorySummary(today)(q) fields <- searchFieldSummary(today)(q) folders <- searchFolderSummary(today)(q) - } yield SearchSummary(count, tags, cats, fields, folders) + orgs <- searchCorrOrgSummary(today)(q) + corrPers <- searchCorrPersonSummary(today)(q) + concPers <- searchConcPersonSummary(today)(q) + concEquip <- searchConcEquipSummary(today)(q) + } yield SearchSummary( + count, + tags, + cats, + fields, + folders, + orgs, + corrPers, + concPers, + concEquip + ) def searchTagCategorySummary( today: LocalDate @@ -251,6 +265,40 @@ object QItem { .query[Int] .unique + def searchCorrOrgSummary(today: LocalDate)(q: Query): ConnectionIO[List[IdRefCount]] = + searchIdRefSummary(org.oid, org.name, i.corrOrg, today)(q) + + def searchCorrPersonSummary(today: LocalDate)( + q: Query + ): ConnectionIO[List[IdRefCount]] = + searchIdRefSummary(pers0.pid, pers0.name, i.corrPerson, today)(q) + + def searchConcPersonSummary(today: LocalDate)( + q: Query + ): ConnectionIO[List[IdRefCount]] = + searchIdRefSummary(pers1.pid, pers1.name, i.concPerson, today)(q) + + def searchConcEquipSummary(today: LocalDate)( + q: Query + ): ConnectionIO[List[IdRefCount]] = + searchIdRefSummary(equip.eid, equip.name, i.concEquipment, today)(q) + + private def searchIdRefSummary( + idCol: Column[Ident], + nameCol: Column[String], + fkCol: Column[Ident], + today: LocalDate + )(q: Query): ConnectionIO[List[IdRefCount]] = + findItemsBase(q.fix, today, 0).unwrap + .withSelect(select(idCol, nameCol).append(count(idCol).as("num"))) + .changeWhere(c => + c && fkCol.isNotNull && queryCondition(today, q.fix.account.collective, q.cond) + ) + .groupBy(idCol, nameCol) + .build + .query[IdRefCount] + .to[List] + def searchFolderSummary(today: LocalDate)(q: Query): ConnectionIO[List[FolderCount]] = { val fu = RUser.as("fu") findItemsBase(q.fix, today, 0).unwrap diff --git a/modules/store/src/main/scala/docspell/store/queries/SearchSummary.scala b/modules/store/src/main/scala/docspell/store/queries/SearchSummary.scala index 1eeaef2e..c6bff383 100644 --- a/modules/store/src/main/scala/docspell/store/queries/SearchSummary.scala +++ b/modules/store/src/main/scala/docspell/store/queries/SearchSummary.scala @@ -11,7 +11,11 @@ case class SearchSummary( tags: List[TagCount], cats: List[CategoryCount], fields: List[FieldStats], - folders: List[FolderCount] + folders: List[FolderCount], + corrOrgs: List[IdRefCount], + corrPers: List[IdRefCount], + concPers: List[IdRefCount], + concEquip: List[IdRefCount] ) { def onlyExisting: SearchSummary = @@ -20,6 +24,10 @@ case class SearchSummary( tags.filter(_.count > 0), cats.filter(_.count > 0), fields.filter(_.count > 0), - folders.filter(_.count > 0) + folders.filter(_.count > 0), + corrOrgs = corrOrgs.filter(_.count > 0), + corrPers = corrPers.filter(_.count > 0), + concPers = concPers.filter(_.count > 0), + concEquip = concEquip.filter(_.count > 0) ) } diff --git a/modules/webapp/src/main/elm/Comp/CustomFieldMultiInput.elm b/modules/webapp/src/main/elm/Comp/CustomFieldMultiInput.elm index 27d11480..6a60260e 100644 --- a/modules/webapp/src/main/elm/Comp/CustomFieldMultiInput.elm +++ b/modules/webapp/src/main/elm/Comp/CustomFieldMultiInput.elm @@ -16,6 +16,7 @@ module Comp.CustomFieldMultiInput exposing , isEmpty , nonEmpty , reset + , setOptions , setValues , update , updateSearch @@ -125,6 +126,11 @@ setValues values = SetValues values +setOptions : List CustomField -> Msg +setOptions fields = + CustomFieldResp (Ok (CustomFieldList fields)) + + reset : Model -> Model reset model = let diff --git a/modules/webapp/src/main/elm/Comp/SearchMenu.elm b/modules/webapp/src/main/elm/Comp/SearchMenu.elm index c70a1c3d..890cf25b 100644 --- a/modules/webapp/src/main/elm/Comp/SearchMenu.elm +++ b/modules/webapp/src/main/elm/Comp/SearchMenu.elm @@ -60,6 +60,7 @@ import Http import Messages.Comp.SearchMenu exposing (Texts) import Set exposing (Set) import Styles as S +import Util.CustomField import Util.Html exposing (KeyCode(..)) import Util.ItemDragDrop as DD import Util.Maybe @@ -564,6 +565,42 @@ updateDrop ddm flags settings msg model = selectModel = Comp.TagSelect.modifyCount model.tagSelectModel tagCount catCount + orgOpts = + Comp.Dropdown.update (Comp.Dropdown.SetOptions (List.map .ref stats.corrOrgStats)) + model.orgModel + |> Tuple.first + + corrPersOpts = + Comp.Dropdown.update (Comp.Dropdown.SetOptions (List.map .ref stats.corrPersStats)) + model.corrPersonModel + |> Tuple.first + + concPersOpts = + Comp.Dropdown.update (Comp.Dropdown.SetOptions (List.map .ref stats.concPersStats)) + model.concPersonModel + |> Tuple.first + + concEquipOpts = + let + mkEquip ref = + Equipment ref.id ref.name 0 Nothing "" + in + Comp.Dropdown.update + (Comp.Dropdown.SetOptions + (List.map (.ref >> mkEquip) stats.concEquipStats) + ) + model.concEquipmentModel + |> Tuple.first + + fields = + Util.CustomField.statsToFields stats + + fieldOpts = + Comp.CustomFieldMultiInput.update flags + (Comp.CustomFieldMultiInput.setOptions fields) + model.customFieldModel + |> .model + model_ = { model | tagSelectModel = selectModel @@ -571,6 +608,11 @@ updateDrop ddm flags settings msg model = Comp.FolderSelect.modify model.selectedFolder model.folderList stats.folderStats + , orgModel = orgOpts + , corrPersonModel = corrPersOpts + , concPersonModel = concPersOpts + , concEquipmentModel = concEquipOpts + , customFieldModel = fieldOpts } in { model = model_ diff --git a/modules/webapp/src/main/elm/Util/CustomField.elm b/modules/webapp/src/main/elm/Util/CustomField.elm index fc121f62..cfe58d92 100644 --- a/modules/webapp/src/main/elm/Util/CustomField.elm +++ b/modules/webapp/src/main/elm/Util/CustomField.elm @@ -10,9 +10,12 @@ module Util.CustomField exposing , nameOrLabel , renderValue , renderValue2 + , statsToFields ) +import Api.Model.CustomField exposing (CustomField) import Api.Model.ItemFieldValue exposing (ItemFieldValue) +import Api.Model.SearchStats exposing (SearchStats) import Data.CustomFieldType import Data.Icons as Icons import Html exposing (..) @@ -20,6 +23,15 @@ import Html.Attributes exposing (..) import Html.Events exposing (onClick) +statsToFields : SearchStats -> List CustomField +statsToFields stats = + let + mkField fs = + CustomField fs.id fs.name fs.label fs.ftype fs.count 0 + in + List.map mkField stats.fieldStats + + {-| This is how the server wants the value to a bool custom field -} boolValue : Bool -> String From 4ad90b76b49d4b6b93681357c9973fc44290ec68 Mon Sep 17 00:00:00 2001 From: eikek Date: Wed, 6 Oct 2021 00:26:53 +0200 Subject: [PATCH 48/75] Fix tag menu when restricting results When search results are restricted in a share view, tags may disappear and thus the tags from the beginning need to be kept. --- .../webapp/src/main/elm/Comp/SearchMenu.elm | 23 ++++++------ .../webapp/src/main/elm/Comp/TagSelect.elm | 35 +++++++++++++++++++ .../src/main/elm/Page/Home/SideMenu.elm | 8 ++++- .../src/main/elm/Page/Share/Sidebar.elm | 15 ++++++++ 4 files changed, 70 insertions(+), 11 deletions(-) diff --git a/modules/webapp/src/main/elm/Comp/SearchMenu.elm b/modules/webapp/src/main/elm/Comp/SearchMenu.elm index 890cf25b..019987d7 100644 --- a/modules/webapp/src/main/elm/Comp/SearchMenu.elm +++ b/modules/webapp/src/main/elm/Comp/SearchMenu.elm @@ -9,6 +9,7 @@ module Comp.SearchMenu exposing ( Model , Msg(..) , NextState + , SearchTab(..) , TextSearchModel , getItemQuery , init @@ -563,7 +564,7 @@ updateDrop ddm flags settings msg model = List.sortBy .count stats.tagCategoryCloud.items selectModel = - Comp.TagSelect.modifyCount model.tagSelectModel tagCount catCount + Comp.TagSelect.modifyCountKeepExisting model.tagSelectModel tagCount catCount orgOpts = Comp.Dropdown.update (Comp.Dropdown.SetOptions (List.map .ref stats.corrOrgStats)) @@ -1044,15 +1045,20 @@ updateDrop ddm flags settings msg model = --- View2 -viewDrop2 : Texts -> DD.DragDropData -> Flags -> UiSettings -> Model -> Html Msg -viewDrop2 texts ddd flags settings model = +type alias ViewConfig = + { overrideTabLook : SearchTab -> Comp.Tabs.Look -> Comp.Tabs.Look + } + + +viewDrop2 : Texts -> DD.DragDropData -> Flags -> ViewConfig -> UiSettings -> Model -> Html Msg +viewDrop2 texts ddd flags cfg settings model = let akkordionStyle = Comp.Tabs.searchMenuStyle in Comp.Tabs.akkordion akkordionStyle - (searchTabState settings model) + (searchTabState settings cfg model) (searchTabs texts ddd flags settings model) @@ -1254,12 +1260,9 @@ tabLook settings model tab = Comp.Tabs.Normal -searchTabState : UiSettings -> Model -> Comp.Tabs.Tab Msg -> ( Comp.Tabs.State, Msg ) -searchTabState settings model tab = +searchTabState : UiSettings -> ViewConfig -> Model -> Comp.Tabs.Tab Msg -> ( Comp.Tabs.State, Msg ) +searchTabState settings cfg model tab = let - isHidden f = - Data.UiSettings.fieldHidden settings f - searchTab = findTab tab @@ -1273,7 +1276,7 @@ searchTabState settings model tab = state = { folded = folded , look = - Maybe.map (tabLook settings model) searchTab + Maybe.map (\t -> tabLook settings model t |> cfg.overrideTabLook t) searchTab |> Maybe.withDefault Comp.Tabs.Normal } in diff --git a/modules/webapp/src/main/elm/Comp/TagSelect.elm b/modules/webapp/src/main/elm/Comp/TagSelect.elm index 3fe96ac1..07d76380 100644 --- a/modules/webapp/src/main/elm/Comp/TagSelect.elm +++ b/modules/webapp/src/main/elm/Comp/TagSelect.elm @@ -16,6 +16,7 @@ module Comp.TagSelect exposing , makeWorkModel , modifyAll , modifyCount + , modifyCountKeepExisting , reset , toggleTag , update @@ -99,6 +100,40 @@ modifyCount model tags cats = } +modifyCountKeepExisting : Model -> List TagCount -> List NameCount -> Model +modifyCountKeepExisting model tags cats = + let + tagZeros : Dict String TagCount + tagZeros = + Dict.map (\_ -> \tc -> TagCount tc.tag 0) model.availableTags + + tagAvail = + List.foldl (\tc -> \dict -> Dict.insert tc.tag.id tc dict) tagZeros tags + + tcs = + Dict.values tagAvail + + catcs = + List.filterMap (\e -> Maybe.map (\k -> CategoryCount k e.count) e.name) cats + + catZeros : Dict String CategoryCount + catZeros = + Dict.map (\_ -> \cc -> CategoryCount cc.name 0) model.availableCats + + catAvail = + List.foldl (\cc -> \dict -> Dict.insert cc.name cc dict) catZeros catcs + + ccs = + Dict.values catAvail + in + { model + | tagCounts = tcs + , availableTags = tagAvail + , categoryCounts = ccs + , availableCats = catAvail + } + + reset : Model -> Model reset model = { model diff --git a/modules/webapp/src/main/elm/Page/Home/SideMenu.elm b/modules/webapp/src/main/elm/Page/Home/SideMenu.elm index f5690952..5ad19c47 100644 --- a/modules/webapp/src/main/elm/Page/Home/SideMenu.elm +++ b/modules/webapp/src/main/elm/Page/Home/SideMenu.elm @@ -82,10 +82,16 @@ viewSearch texts flags settings model = , end = [] , rootClasses = "my-1 text-xs hidden sm:flex" } - , Html.map SearchMenuMsg + , let + searchMenuCfg = + { overrideTabLook = \_ -> identity + } + in + Html.map SearchMenuMsg (Comp.SearchMenu.viewDrop2 texts.searchMenu model.dragDropData flags + searchMenuCfg settings model.searchMenuModel ) diff --git a/modules/webapp/src/main/elm/Page/Share/Sidebar.elm b/modules/webapp/src/main/elm/Page/Share/Sidebar.elm index 31a8ee1b..11c31457 100644 --- a/modules/webapp/src/main/elm/Page/Share/Sidebar.elm +++ b/modules/webapp/src/main/elm/Page/Share/Sidebar.elm @@ -8,6 +8,7 @@ module Page.Share.Sidebar exposing (..) import Comp.SearchMenu +import Comp.Tabs import Data.Flags exposing (Flags) import Data.UiSettings exposing (UiSettings) import Html exposing (..) @@ -19,6 +20,19 @@ import Util.ItemDragDrop view : Texts -> Flags -> UiSettings -> Model -> Html Msg view texts flags settings model = + let + hideTrashTab tab default = + case tab of + Comp.SearchMenu.TabTrashed -> + Comp.Tabs.Hidden + + _ -> + default + + searchMenuCfg = + { overrideTabLook = hideTrashTab + } + in div [ class "flex flex-col" ] @@ -26,6 +40,7 @@ view texts flags settings model = (Comp.SearchMenu.viewDrop2 texts.searchMenu ddDummy flags + searchMenuCfg settings model.searchMenuModel ) From 9eb2f9c6fe9ee1104e1d2631ad05433ce60bb44c Mon Sep 17 00:00:00 2001 From: eikek Date: Wed, 6 Oct 2021 00:48:48 +0200 Subject: [PATCH 49/75] Implement binary routes for shares --- .../scala/docspell/backend/ops/OShare.scala | 48 ++++++++++++------- .../restserver/conv/Conversions.scala | 3 ++ .../restserver/http4s/BinaryUtil.scala | 29 ++++++++++- .../restserver/routes/AttachmentRoutes.scala | 19 ++------ .../routes/ShareAttachmentRoutes.scala | 33 ++++++++++--- .../docspell/store/queries/IdRefCount.scala | 6 +++ 6 files changed, 97 insertions(+), 41 deletions(-) diff --git a/modules/backend/src/main/scala/docspell/backend/ops/OShare.scala b/modules/backend/src/main/scala/docspell/backend/ops/OShare.scala index 0f064c36..75e899a6 100644 --- a/modules/backend/src/main/scala/docspell/backend/ops/OShare.scala +++ b/modules/backend/src/main/scala/docspell/backend/ops/OShare.scala @@ -12,7 +12,7 @@ import cats.implicits._ import docspell.backend.PasswordCrypt import docspell.backend.auth.ShareToken -import docspell.backend.ops.OItemSearch.{AttachmentPreviewData, Batch, Query} +import docspell.backend.ops.OItemSearch._ import docspell.backend.ops.OShare.{ShareQuery, VerifyResult} import docspell.backend.ops.OSimpleSearch.StringSearchResult import docspell.common._ @@ -55,6 +55,8 @@ trait OShare[F[_]] { shareId: Ident ): OptionT[F, AttachmentPreviewData[F]] + def findAttachment(attachId: Ident, shareId: Ident): OptionT[F, AttachmentData[F]] + def searchSummary( settings: OSimpleSearch.StatsSettings )(shareId: Ident, q: ItemQueryString): OptionT[F, StringSearchResult[SearchSummary]] @@ -232,24 +234,36 @@ object OShare { ): OptionT[F, AttachmentPreviewData[F]] = for { sq <- findShareQuery(shareId) - account = sq.asAccount - checkQuery = Query( - Query.Fix(account, Some(sq.query.expr), None), - Query.QueryExpr(AttachId(attachId.id)) - ) - checkRes <- OptionT.liftF(itemSearch.findItems(0)(checkQuery, Batch.limit(1))) - res <- - if (checkRes.isEmpty) - OptionT - .liftF( - logger.info( - s"Attempt to load unshared attachment '${attachId.id}' for share: ${shareId.id}" - ) - ) - .mapFilter(_ => None) - else OptionT(itemSearch.findAttachmentPreview(attachId, sq.cid)) + _ <- checkAttachment(sq, attachId) + res <- OptionT(itemSearch.findAttachmentPreview(attachId, sq.cid)) } yield res + def findAttachment(attachId: Ident, shareId: Ident): OptionT[F, AttachmentData[F]] = + for { + sq <- findShareQuery(shareId) + _ <- checkAttachment(sq, attachId) + res <- OptionT(itemSearch.findAttachment(attachId, sq.cid)) + } yield res + + /** Check whether the attachment with the given id is in the results of the given + * share + */ + private def checkAttachment(sq: ShareQuery, attachId: Ident): OptionT[F, Unit] = { + val checkQuery = Query( + Query.Fix(sq.asAccount, Some(sq.query.expr), None), + Query.QueryExpr(AttachId(attachId.id)) + ) + OptionT( + itemSearch + .findItems(0)(checkQuery, Batch.limit(1)) + .map(_.headOption.map(_ => ())) + ).flatTapNone( + logger.info( + s"Attempt to load unshared attachment '${attachId.id}' via share: ${sq.id.id}" + ) + ) + } + def searchSummary( settings: OSimpleSearch.StatsSettings )( diff --git a/modules/restserver/src/main/scala/docspell/restserver/conv/Conversions.scala b/modules/restserver/src/main/scala/docspell/restserver/conv/Conversions.scala index be89e955..03142eaf 100644 --- a/modules/restserver/src/main/scala/docspell/restserver/conv/Conversions.scala +++ b/modules/restserver/src/main/scala/docspell/restserver/conv/Conversions.scala @@ -7,9 +7,11 @@ package docspell.restserver.conv import java.time.{LocalDate, ZoneId} + import cats.effect.{Async, Sync} import cats.implicits._ import fs2.Stream + import docspell.backend.ops.OCollective.{InsightData, PassChangeResult} import docspell.backend.ops.OCustomFields.SetValueResult import docspell.backend.ops.OJob.JobCancelResult @@ -23,6 +25,7 @@ import docspell.restserver.conv.Conversions._ import docspell.store.queries.{AttachmentLight => QAttachmentLight, IdRefCount} import docspell.store.records._ import docspell.store.{AddResult, UpdateResult} + import org.http4s.headers.`Content-Type` import org.http4s.multipart.Multipart import org.log4s.Logger diff --git a/modules/restserver/src/main/scala/docspell/restserver/http4s/BinaryUtil.scala b/modules/restserver/src/main/scala/docspell/restserver/http4s/BinaryUtil.scala index 208847a6..7ebdb9b3 100644 --- a/modules/restserver/src/main/scala/docspell/restserver/http4s/BinaryUtil.scala +++ b/modules/restserver/src/main/scala/docspell/restserver/http4s/BinaryUtil.scala @@ -11,7 +11,7 @@ import cats.data.OptionT import cats.effect._ import cats.implicits._ -import docspell.backend.ops.OItemSearch.AttachmentPreviewData +import docspell.backend.ops.OItemSearch.{AttachmentData, AttachmentPreviewData} import docspell.backend.ops._ import docspell.restapi.model.BasicResult import docspell.restserver.http4s.{QueryParam => QP} @@ -27,6 +27,31 @@ import org.typelevel.ci.CIString object BinaryUtil { def respond[F[_]: Async](dsl: Http4sDsl[F], req: Request[F])( + fileData: Option[AttachmentData[F]] + ): F[Response[F]] = { + import dsl._ + + val inm = req.headers.get[`If-None-Match`].flatMap(_.tags) + val matches = BinaryUtil.matchETag(fileData.map(_.meta), inm) + fileData + .map { data => + if (matches) withResponseHeaders(dsl, NotModified())(data) + else makeByteResp(dsl)(data) + } + .getOrElse(NotFound(BasicResult(false, "Not found"))) + } + + def respondHead[F[_]: Async](dsl: Http4sDsl[F])( + fileData: Option[AttachmentData[F]] + ): F[Response[F]] = { + import dsl._ + + fileData + .map(data => withResponseHeaders(dsl, Ok())(data)) + .getOrElse(NotFound(BasicResult(false, "Not found"))) + } + + def respondPreview[F[_]: Async](dsl: Http4sDsl[F], req: Request[F])( fileData: Option[AttachmentPreviewData[F]] ): F[Response[F]] = { import dsl._ @@ -54,7 +79,7 @@ object BinaryUtil { } } - def respondHead[F[_]: Async]( + def respondPreviewHead[F[_]: Async]( dsl: Http4sDsl[F] )(fileData: Option[AttachmentPreviewData[F]]): F[Response[F]] = { import dsl._ diff --git a/modules/restserver/src/main/scala/docspell/restserver/routes/AttachmentRoutes.scala b/modules/restserver/src/main/scala/docspell/restserver/routes/AttachmentRoutes.scala index cf4e23f7..a7bc4b82 100644 --- a/modules/restserver/src/main/scala/docspell/restserver/routes/AttachmentRoutes.scala +++ b/modules/restserver/src/main/scala/docspell/restserver/routes/AttachmentRoutes.scala @@ -46,24 +46,13 @@ object AttachmentRoutes { case HEAD -> Root / Ident(id) => for { fileData <- backend.itemSearch.findAttachment(id, user.account.collective) - resp <- - fileData - .map(data => withResponseHeaders(Ok())(data)) - .getOrElse(NotFound(BasicResult(false, "Not found"))) + resp <- BinaryUtil.respondHead(dsl)(fileData) } yield resp case req @ GET -> Root / Ident(id) => for { fileData <- backend.itemSearch.findAttachment(id, user.account.collective) - inm = req.headers.get[`If-None-Match`].flatMap(_.tags) - matches = BinaryUtil.matchETag(fileData.map(_.meta), inm) - resp <- - fileData - .map { data => - if (matches) withResponseHeaders(NotModified())(data) - else makeByteResp(data) - } - .getOrElse(NotFound(BasicResult(false, "Not found"))) + resp <- BinaryUtil.respond[F](dsl, req)(fileData) } yield resp case HEAD -> Root / Ident(id) / "original" => @@ -118,14 +107,14 @@ object AttachmentRoutes { for { fileData <- backend.itemSearch.findAttachmentPreview(id, user.account.collective) - resp <- BinaryUtil.respond(dsl, req)(fileData) + resp <- BinaryUtil.respondPreview(dsl, req)(fileData) } yield resp case HEAD -> Root / Ident(id) / "preview" => for { fileData <- backend.itemSearch.findAttachmentPreview(id, user.account.collective) - resp <- BinaryUtil.respondHead(dsl)(fileData) + resp <- BinaryUtil.respondPreviewHead(dsl)(fileData) } yield resp case POST -> Root / Ident(id) / "preview" => diff --git a/modules/restserver/src/main/scala/docspell/restserver/routes/ShareAttachmentRoutes.scala b/modules/restserver/src/main/scala/docspell/restserver/routes/ShareAttachmentRoutes.scala index d763530b..b93a1381 100644 --- a/modules/restserver/src/main/scala/docspell/restserver/routes/ShareAttachmentRoutes.scala +++ b/modules/restserver/src/main/scala/docspell/restserver/routes/ShareAttachmentRoutes.scala @@ -13,9 +13,11 @@ import docspell.backend.BackendApp import docspell.backend.auth.ShareToken import docspell.common._ import docspell.restserver.http4s.BinaryUtil +import docspell.restserver.webapp.Webjars -import org.http4s.HttpRoutes +import org.http4s._ import org.http4s.dsl.Http4sDsl +import org.http4s.headers._ object ShareAttachmentRoutes { @@ -27,18 +29,35 @@ object ShareAttachmentRoutes { import dsl._ HttpRoutes.of { + case HEAD -> Root / Ident(id) => + for { + fileData <- backend.share.findAttachment(id, token.id).value + resp <- BinaryUtil.respondHead(dsl)(fileData) + } yield resp + + case req @ GET -> Root / Ident(id) => + for { + fileData <- backend.share.findAttachment(id, token.id).value + resp <- BinaryUtil.respond(dsl, req)(fileData) + } yield resp + + case GET -> Root / Ident(id) / "view" => + // this route exists to provide a stable url + // it redirects currently to viewerjs + val attachUrl = s"/api/v1/share/attachment/${id.id}" + val path = s"/app/assets${Webjars.viewerjs}/index.html#$attachUrl" + SeeOther(Location(Uri(path = Uri.Path.unsafeFromString(path)))) + case req @ GET -> Root / Ident(id) / "preview" => for { - fileData <- - backend.share.findAttachmentPreview(id, token.id).value - resp <- BinaryUtil.respond(dsl, req)(fileData) + fileData <- backend.share.findAttachmentPreview(id, token.id).value + resp <- BinaryUtil.respondPreview(dsl, req)(fileData) } yield resp case HEAD -> Root / Ident(id) / "preview" => for { - fileData <- - backend.share.findAttachmentPreview(id, token.id).value - resp <- BinaryUtil.respondHead(dsl)(fileData) + fileData <- backend.share.findAttachmentPreview(id, token.id).value + resp <- BinaryUtil.respondPreviewHead(dsl)(fileData) } yield resp } } diff --git a/modules/store/src/main/scala/docspell/store/queries/IdRefCount.scala b/modules/store/src/main/scala/docspell/store/queries/IdRefCount.scala index 20c2fbdf..5ac6682d 100644 --- a/modules/store/src/main/scala/docspell/store/queries/IdRefCount.scala +++ b/modules/store/src/main/scala/docspell/store/queries/IdRefCount.scala @@ -1,3 +1,9 @@ +/* + * Copyright 2020 Eike K. & Contributors + * + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + package docspell.store.queries import docspell.common._ From c62b8526be8a86ce82218a88a110c5b51c8b9c32 Mon Sep 17 00:00:00 2001 From: eikek Date: Wed, 6 Oct 2021 01:14:30 +0200 Subject: [PATCH 50/75] View attachments from a share --- modules/webapp/src/main/elm/Api.elm | 6 ++++++ modules/webapp/src/main/elm/Comp/ItemCard.elm | 16 ++++++++-------- .../webapp/src/main/elm/Comp/ItemCardList.elm | 3 ++- modules/webapp/src/main/elm/Page/Home/View2.elm | 2 ++ .../webapp/src/main/elm/Page/Share/Results.elm | 1 + 5 files changed, 19 insertions(+), 9 deletions(-) diff --git a/modules/webapp/src/main/elm/Api.elm b/modules/webapp/src/main/elm/Api.elm index a049bce3..bb6b94e7 100644 --- a/modules/webapp/src/main/elm/Api.elm +++ b/modules/webapp/src/main/elm/Api.elm @@ -143,6 +143,7 @@ module Api exposing , setTagsMultiple , setUnconfirmed , shareAttachmentPreviewURL + , shareFileURL , shareItemBasePreviewURL , startClassifier , startEmptyTrash @@ -2311,6 +2312,11 @@ shareItemBasePreviewURL itemId = "/api/v1/share/item/" ++ itemId ++ "/preview?withFallback=true" +shareFileURL : String -> String +shareFileURL attachId = + "/api/v1/share/attachment/" ++ attachId + + --- Helper diff --git a/modules/webapp/src/main/elm/Comp/ItemCard.elm b/modules/webapp/src/main/elm/Comp/ItemCard.elm index b4ce9786..15d66ce5 100644 --- a/modules/webapp/src/main/elm/Comp/ItemCard.elm +++ b/modules/webapp/src/main/elm/Comp/ItemCard.elm @@ -58,6 +58,7 @@ type alias ViewConfig = , extraClasses : String , previewUrl : AttachmentLight -> String , previewUrlFallback : ItemLight -> String + , attachUrl : AttachmentLight -> String } @@ -219,7 +220,7 @@ view2 texts cfg settings model item = , metaDataContent2 texts settings item , notesContent2 settings item , fulltextResultsContent2 item - , previewMenu2 texts settings model item (currentAttachment model item) + , previewMenu2 texts settings cfg model item (currentAttachment model item) , selectedDimmer ] ) @@ -473,8 +474,8 @@ previewImage2 cfg settings cardAction model item = ] -previewMenu2 : Texts -> UiSettings -> Model -> ItemLight -> Maybe AttachmentLight -> Html Msg -previewMenu2 texts settings model item mainAttach = +previewMenu2 : Texts -> UiSettings -> ViewConfig -> Model -> ItemLight -> Maybe AttachmentLight -> Html Msg +previewMenu2 texts settings cfg model item mainAttach = let pageCount = Maybe.andThen .pageCount mainAttach @@ -486,16 +487,15 @@ previewMenu2 texts settings model item mainAttach = fieldHidden f = Data.UiSettings.fieldHidden settings f - mkAttachUrl id = + mkAttachUrl attach = if settings.nativePdfPreview then - Api.fileURL id + cfg.attachUrl attach else - Api.fileURL id ++ "/view" + cfg.attachUrl attach ++ "/view" attachUrl = - Maybe.map .id mainAttach - |> Maybe.map mkAttachUrl + Maybe.map mkAttachUrl mainAttach |> Maybe.withDefault "/api/v1/sec/attachment/none" dueDate = diff --git a/modules/webapp/src/main/elm/Comp/ItemCardList.elm b/modules/webapp/src/main/elm/Comp/ItemCardList.elm index 6c66004d..a23894e2 100644 --- a/modules/webapp/src/main/elm/Comp/ItemCardList.elm +++ b/modules/webapp/src/main/elm/Comp/ItemCardList.elm @@ -164,6 +164,7 @@ type alias ViewConfig = , selection : ItemSelection , previewUrl : AttachmentLight -> String , previewUrlFallback : ItemLight -> String + , attachUrl : AttachmentLight -> String } @@ -219,7 +220,7 @@ viewItem2 texts model cfg settings item = "" vvcfg = - Comp.ItemCard.ViewConfig cfg.selection currentClass cfg.previewUrl cfg.previewUrlFallback + Comp.ItemCard.ViewConfig cfg.selection currentClass cfg.previewUrl cfg.previewUrlFallback cfg.attachUrl cardModel = Dict.get item.id model.itemCards diff --git a/modules/webapp/src/main/elm/Page/Home/View2.elm b/modules/webapp/src/main/elm/Page/Home/View2.elm index b0ca349e..506ae853 100644 --- a/modules/webapp/src/main/elm/Page/Home/View2.elm +++ b/modules/webapp/src/main/elm/Page/Home/View2.elm @@ -476,6 +476,7 @@ itemCardList texts _ settings model = (Data.ItemSelection.Active svm.ids) previewUrl previewUrlFallback + (.id >> Api.fileURL) _ -> Comp.ItemCardList.ViewConfig @@ -483,6 +484,7 @@ itemCardList texts _ settings model = Data.ItemSelection.Inactive previewUrl previewUrlFallback + (.id >> Api.fileURL) in [ Html.map ItemCardListMsg (Comp.ItemCardList.view2 texts.itemCardList diff --git a/modules/webapp/src/main/elm/Page/Share/Results.elm b/modules/webapp/src/main/elm/Page/Share/Results.elm index c50af9e8..5bd69400 100644 --- a/modules/webapp/src/main/elm/Page/Share/Results.elm +++ b/modules/webapp/src/main/elm/Page/Share/Results.elm @@ -25,6 +25,7 @@ view texts settings model = , selection = Data.ItemSelection.Inactive , previewUrl = \attach -> Api.shareAttachmentPreviewURL attach.id , previewUrlFallback = \item -> Api.shareItemBasePreviewURL item.id + , attachUrl = .id >> Api.shareFileURL } in div [] From 1a10216e3d8821bfb97392026f47b9016375164c Mon Sep 17 00:00:00 2001 From: eikek Date: Wed, 6 Oct 2021 09:36:38 +0200 Subject: [PATCH 51/75] Get item details from a share --- .../scala/docspell/backend/ops/OShare.scala | 20 +++- .../main/scala/docspell/query/ItemQuery.scala | 4 + .../src/main/resources/docspell-openapi.yml | 91 +++++++++++++++++++ .../docspell/restserver/RestServer.scala | 3 +- .../restserver/routes/ShareItemRoutes.scala | 41 +++++++++ 5 files changed, 153 insertions(+), 6 deletions(-) create mode 100644 modules/restserver/src/main/scala/docspell/restserver/routes/ShareItemRoutes.scala diff --git a/modules/backend/src/main/scala/docspell/backend/ops/OShare.scala b/modules/backend/src/main/scala/docspell/backend/ops/OShare.scala index 75e899a6..57a2c236 100644 --- a/modules/backend/src/main/scala/docspell/backend/ops/OShare.scala +++ b/modules/backend/src/main/scala/docspell/backend/ops/OShare.scala @@ -17,6 +17,7 @@ import docspell.backend.ops.OShare.{ShareQuery, VerifyResult} import docspell.backend.ops.OSimpleSearch.StringSearchResult import docspell.common._ import docspell.query.ItemQuery +import docspell.query.ItemQuery.Expr import docspell.query.ItemQuery.Expr.AttachId import docspell.store.Store import docspell.store.queries.SearchSummary @@ -57,6 +58,8 @@ trait OShare[F[_]] { def findAttachment(attachId: Ident, shareId: Ident): OptionT[F, AttachmentData[F]] + def findItem(itemId: Ident, shareId: Ident): OptionT[F, ItemData] + def searchSummary( settings: OSimpleSearch.StatsSettings )(shareId: Ident, q: ItemQueryString): OptionT[F, StringSearchResult[SearchSummary]] @@ -234,24 +237,31 @@ object OShare { ): OptionT[F, AttachmentPreviewData[F]] = for { sq <- findShareQuery(shareId) - _ <- checkAttachment(sq, attachId) + _ <- checkAttachment(sq, AttachId(attachId.id)) res <- OptionT(itemSearch.findAttachmentPreview(attachId, sq.cid)) } yield res def findAttachment(attachId: Ident, shareId: Ident): OptionT[F, AttachmentData[F]] = for { sq <- findShareQuery(shareId) - _ <- checkAttachment(sq, attachId) + _ <- checkAttachment(sq, AttachId(attachId.id)) res <- OptionT(itemSearch.findAttachment(attachId, sq.cid)) } yield res + def findItem(itemId: Ident, shareId: Ident): OptionT[F, ItemData] = + for { + sq <- findShareQuery(shareId) + _ <- checkAttachment(sq, Expr.itemIdEq(itemId.id)) + res <- OptionT(itemSearch.findItem(itemId, sq.cid)) + } yield res + /** Check whether the attachment with the given id is in the results of the given * share */ - private def checkAttachment(sq: ShareQuery, attachId: Ident): OptionT[F, Unit] = { + private def checkAttachment(sq: ShareQuery, idExpr: Expr): OptionT[F, Unit] = { val checkQuery = Query( Query.Fix(sq.asAccount, Some(sq.query.expr), None), - Query.QueryExpr(AttachId(attachId.id)) + Query.QueryExpr(idExpr) ) OptionT( itemSearch @@ -259,7 +269,7 @@ object OShare { .map(_.headOption.map(_ => ())) ).flatTapNone( logger.info( - s"Attempt to load unshared attachment '${attachId.id}' via share: ${sq.id.id}" + s"Attempt to load unshared data '$idExpr' via share: ${sq.id.id}" ) ) } diff --git a/modules/query/shared/src/main/scala/docspell/query/ItemQuery.scala b/modules/query/shared/src/main/scala/docspell/query/ItemQuery.scala index be0e5135..c9466ac0 100644 --- a/modules/query/shared/src/main/scala/docspell/query/ItemQuery.scala +++ b/modules/query/shared/src/main/scala/docspell/query/ItemQuery.scala @@ -188,6 +188,10 @@ object ItemQuery { def date(op: Operator, attr: DateAttr, value: Date): SimpleExpr = SimpleExpr(op, Property(attr, value)) + + def itemIdEq(itemId1: String, moreIds: String*): Expr = + if (moreIds.isEmpty) string(Operator.Eq, Attr.ItemId, itemId1) + else InExpr(Attr.ItemId, Nel(itemId1, moreIds.toList)) } } diff --git a/modules/restapi/src/main/resources/docspell-openapi.yml b/modules/restapi/src/main/resources/docspell-openapi.yml index 0c0dd351..8745c23c 100644 --- a/modules/restapi/src/main/resources/docspell-openapi.yml +++ b/modules/restapi/src/main/resources/docspell-openapi.yml @@ -1603,6 +1603,97 @@ paths: application/json: schema: $ref: "#/components/schemas/SearchStats" + /share/item/{id}: + get: + operationId: "share-item-get" + tags: [ Share ] + summary: Get details about an item. + description: | + Get detailed information about an item. + security: + - shareTokenHeader: [] + parameters: + - $ref: "#/components/parameters/id" + responses: + 200: + description: Ok + content: + application/json: + schema: + $ref: "#/components/schemas/ItemDetail" + /share/attachment/{id}: + head: + operationId: "share-attach-head" + tags: [ Share ] + summary: Get headers to an attachment file. + description: | + Get information about the binary file belonging to the + attachment with the given id. + security: + - shareTokenHeader: [] + parameters: + - $ref: "#/components/parameters/id" + responses: + 200: + description: Ok + headers: + Content-Type: + schema: + type: string + Content-Length: + schema: + type: integer + format: int64 + ETag: + schema: + type: string + Content-Disposition: + schema: + type: string + get: + operationId: "share-attach-get" + tags: [ Share ] + summary: Get an attachment file. + description: | + Get the binary file belonging to the attachment with the given + id. The binary is a pdf file. If conversion failed, then the + original file is returned. + security: + - shareTokenHeader: [] + parameters: + - $ref: "#/components/parameters/id" + responses: + 200: + description: Ok + content: + application/octet-stream: + schema: + type: string + format: binary + /share/attachment/{id}/view: + get: + operationId: "share-attach-show-viewerjs" + tags: [ Share ] + summary: A javascript rendered view of the pdf attachment + description: | + This provides a preview of the attachment rendered in a + browser. + + It currently uses a third-party javascript library (viewerjs) + to display the preview. This works by redirecting to the + viewerjs url with the attachment url as parameter. Note that + the resulting url that is redirected to is not stable. It may + change from version to version. This route, however, is meant + to provide a stable url for the preview. + security: + - shareTokenHeader: [] + parameters: + - $ref: "#/components/parameters/id" + responses: + 303: + description: See Other + 200: + description: Ok /share/attachment/{id}/preview: head: operationId: "share-attach-check-preview" diff --git a/modules/restserver/src/main/scala/docspell/restserver/RestServer.scala b/modules/restserver/src/main/scala/docspell/restserver/RestServer.scala index 2e66c65f..9881fdcc 100644 --- a/modules/restserver/src/main/scala/docspell/restserver/RestServer.scala +++ b/modules/restserver/src/main/scala/docspell/restserver/RestServer.scala @@ -143,7 +143,8 @@ object RestServer { ): HttpRoutes[F] = Router( "search" -> ShareSearchRoutes(restApp.backend, cfg, token), - "attachment" -> ShareAttachmentRoutes(restApp.backend, token) + "attachment" -> ShareAttachmentRoutes(restApp.backend, token), + "item" -> ShareItemRoutes(restApp.backend, token) ) def redirectTo[F[_]: Async](path: String): HttpRoutes[F] = { diff --git a/modules/restserver/src/main/scala/docspell/restserver/routes/ShareItemRoutes.scala b/modules/restserver/src/main/scala/docspell/restserver/routes/ShareItemRoutes.scala new file mode 100644 index 00000000..38c3d041 --- /dev/null +++ b/modules/restserver/src/main/scala/docspell/restserver/routes/ShareItemRoutes.scala @@ -0,0 +1,41 @@ +/* + * Copyright 2020 Eike K. & Contributors + * + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +package docspell.restserver.routes +import cats.effect._ +import cats.implicits._ + +import docspell.backend.BackendApp +import docspell.backend.auth.ShareToken +import docspell.common._ +import docspell.restapi.model.BasicResult +import docspell.restserver.conv.Conversions + +import org.http4s._ +import org.http4s.circe.CirceEntityEncoder._ +import org.http4s.dsl.Http4sDsl + +object ShareItemRoutes { + + def apply[F[_]: Async]( + backend: BackendApp[F], + token: ShareToken + ): HttpRoutes[F] = { + val dsl = new Http4sDsl[F] {} + import dsl._ + + HttpRoutes.of { case GET -> Root / Ident(id) => + for { + item <- backend.share.findItem(id, token.id).value + result = item.map(Conversions.mkItemDetail) + resp <- + result + .map(r => Ok(r)) + .getOrElse(NotFound(BasicResult(false, "Not found."))) + } yield resp + } + } +} From b6187bb88d9e2a24395a984c11ba8d30f0274c96 Mon Sep 17 00:00:00 2001 From: eikek Date: Wed, 6 Oct 2021 11:04:18 +0200 Subject: [PATCH 52/75] Outline share detail page --- modules/webapp/src/main/elm/Api.elm | 10 ++ modules/webapp/src/main/elm/App/Data.elm | 10 +- modules/webapp/src/main/elm/App/Update.elm | 36 +++- modules/webapp/src/main/elm/App/View2.elm | 26 +++ modules/webapp/src/main/elm/Comp/ItemCard.elm | 5 +- .../webapp/src/main/elm/Comp/ItemCardList.elm | 3 +- .../src/main/elm/Comp/SharePasswordForm.elm | 156 ++++++++++++++++++ modules/webapp/src/main/elm/Messages.elm | 4 + .../elm/Messages/Comp/SharePasswordForm.elm | 33 ++++ .../src/main/elm/Messages/Page/Share.elm | 16 +- .../main/elm/Messages/Page/ShareDetail.elm | 20 +++ modules/webapp/src/main/elm/Page.elm | 28 +++- .../webapp/src/main/elm/Page/Home/View2.elm | 23 ++- .../webapp/src/main/elm/Page/Share/Data.elm | 17 +- .../src/main/elm/Page/Share/Results.elm | 6 +- .../webapp/src/main/elm/Page/Share/Update.elm | 52 +++--- .../webapp/src/main/elm/Page/Share/View.elm | 87 +--------- .../src/main/elm/Page/ShareDetail/Data.elm | 56 +++++++ .../src/main/elm/Page/ShareDetail/Update.elm | 64 +++++++ .../src/main/elm/Page/ShareDetail/View.elm | 108 ++++++++++++ modules/webapp/src/main/elm/Util/Http.elm | 19 +++ 21 files changed, 622 insertions(+), 157 deletions(-) create mode 100644 modules/webapp/src/main/elm/Comp/SharePasswordForm.elm create mode 100644 modules/webapp/src/main/elm/Messages/Comp/SharePasswordForm.elm create mode 100644 modules/webapp/src/main/elm/Messages/Page/ShareDetail.elm create mode 100644 modules/webapp/src/main/elm/Page/ShareDetail/Data.elm create mode 100644 modules/webapp/src/main/elm/Page/ShareDetail/Update.elm create mode 100644 modules/webapp/src/main/elm/Page/ShareDetail/View.elm diff --git a/modules/webapp/src/main/elm/Api.elm b/modules/webapp/src/main/elm/Api.elm index bb6b94e7..42b16e20 100644 --- a/modules/webapp/src/main/elm/Api.elm +++ b/modules/webapp/src/main/elm/Api.elm @@ -83,6 +83,7 @@ module Api exposing , initOtp , itemBasePreviewURL , itemDetail + , itemDetailShare , itemIndexSearch , itemSearch , itemSearchStats @@ -2302,6 +2303,15 @@ searchShareStats flags token search receive = } +itemDetailShare : Flags -> String -> String -> (Result Http.Error ItemDetail -> msg) -> Cmd msg +itemDetailShare flags token itemId receive = + Http2.shareGet + { url = flags.config.baseUrl ++ "/api/v1/share/item/" ++ itemId + , token = token + , expect = Http.expectJson receive Api.Model.ItemDetail.decoder + } + + shareAttachmentPreviewURL : String -> String shareAttachmentPreviewURL id = "/api/v1/share/attachment/" ++ id ++ "/preview?withFallback=true" diff --git a/modules/webapp/src/main/elm/App/Data.elm b/modules/webapp/src/main/elm/App/Data.elm index 36713a54..c64c192a 100644 --- a/modules/webapp/src/main/elm/App/Data.elm +++ b/modules/webapp/src/main/elm/App/Data.elm @@ -33,6 +33,7 @@ import Page.NewInvite.Data import Page.Queue.Data import Page.Register.Data import Page.Share.Data +import Page.ShareDetail.Data import Page.Upload.Data import Page.UserSettings.Data import Url exposing (Url) @@ -54,6 +55,7 @@ type alias Model = , newInviteModel : Page.NewInvite.Data.Model , itemDetailModel : Page.ItemDetail.Data.Model , shareModel : Page.Share.Data.Model + , shareDetailModel : Page.ShareDetail.Data.Model , navMenuOpen : Bool , userMenuOpen : Bool , subs : Sub Msg @@ -88,7 +90,10 @@ init key url flags_ settings = Page.Login.Data.init flags (Page.loginPageReferrer page) ( shm, shc ) = - Page.Share.Data.init (Page.shareId page) flags + Page.Share.Data.init (Page.pageShareId page) flags + + ( sdm, sdc ) = + Page.ShareDetail.Data.init (Page.pageShareDetail page) flags homeViewMode = if settings.searchMenuVisible then @@ -112,6 +117,7 @@ init key url flags_ settings = , newInviteModel = Page.NewInvite.Data.emptyModel , itemDetailModel = Page.ItemDetail.Data.emptyModel , shareModel = shm + , shareDetailModel = sdm , navMenuOpen = False , userMenuOpen = False , subs = Sub.none @@ -127,6 +133,7 @@ init key url flags_ settings = , Cmd.map CollSettingsMsg csc , Cmd.map LoginMsg loginc , Cmd.map ShareMsg shc + , Cmd.map ShareDetailMsg sdc ] ) @@ -170,6 +177,7 @@ type Msg | NewInviteMsg Page.NewInvite.Data.Msg | ItemDetailMsg Page.ItemDetail.Data.Msg | ShareMsg Page.Share.Data.Msg + | ShareDetailMsg Page.ShareDetail.Data.Msg | Logout | LogoutResp (Result Http.Error ()) | SessionCheckResp (Result Http.Error AuthResult) diff --git a/modules/webapp/src/main/elm/App/Update.elm b/modules/webapp/src/main/elm/App/Update.elm index 2b051d84..19a689cb 100644 --- a/modules/webapp/src/main/elm/App/Update.elm +++ b/modules/webapp/src/main/elm/App/Update.elm @@ -36,6 +36,8 @@ import Page.Register.Data import Page.Register.Update import Page.Share.Data import Page.Share.Update +import Page.ShareDetail.Data +import Page.ShareDetail.Update import Page.Upload.Data import Page.Upload.Update import Page.UserSettings.Data @@ -119,6 +121,9 @@ updateWithSub msg model = ShareMsg lm -> updateShare lm model + ShareDetailMsg lm -> + updateShareDetail lm model + LoginMsg lm -> updateLogin lm model @@ -318,9 +323,26 @@ applyClientSettings model settings = { model | uiSettings = settings } +updateShareDetail : Page.ShareDetail.Data.Msg -> Model -> ( Model, Cmd Msg, Sub Msg ) +updateShareDetail lmsg model = + case Page.pageShareDetail model.page of + Just ( shareId, itemId ) -> + let + ( m, c ) = + Page.ShareDetail.Update.update shareId itemId model.flags lmsg model.shareDetailModel + in + ( { model | shareDetailModel = m } + , Cmd.map ShareDetailMsg c + , Sub.none + ) + + Nothing -> + ( model, Cmd.none, Sub.none ) + + updateShare : Page.Share.Data.Msg -> Model -> ( Model, Cmd Msg, Sub Msg ) updateShare lmsg model = - case Page.shareId model.page of + case Page.pageShareId model.page of Just id -> let result = @@ -593,3 +615,15 @@ initPage model_ page = SharePage _ -> ( model, Cmd.none, Sub.none ) + + ShareDetailPage _ _ -> + case model_.page of + SharePage _ -> + let + verifyResult = + model.shareModel.verifyResult + in + updateShareDetail (Page.ShareDetail.Data.VerifyResp (Ok verifyResult)) model + + _ -> + ( model, Cmd.none, Sub.none ) diff --git a/modules/webapp/src/main/elm/App/View2.elm b/modules/webapp/src/main/elm/App/View2.elm index 06b99462..3dcaba5a 100644 --- a/modules/webapp/src/main/elm/App/View2.elm +++ b/modules/webapp/src/main/elm/App/View2.elm @@ -28,6 +28,7 @@ import Page.NewInvite.View2 as NewInvite import Page.Queue.View2 as Queue import Page.Register.View2 as Register import Page.Share.View as Share +import Page.ShareDetail.View as ShareDetail import Page.Upload.View2 as Upload import Page.UserSettings.View2 as UserSettings import Styles as S @@ -166,6 +167,9 @@ mainContent model = SharePage id -> viewShare texts id model + + ShareDetailPage shareId itemId -> + viewShareDetail texts shareId itemId model ) @@ -434,11 +438,33 @@ viewShare texts shareId model = model.flags model.version model.uiSettings + shareId model.shareModel ) ] +viewShareDetail : Messages -> String -> String -> Model -> List (Html Msg) +viewShareDetail texts shareId itemId model = + [ Html.map ShareDetailMsg + (ShareDetail.viewSidebar texts.shareDetail + model.sidebarVisible + model.flags + model.uiSettings + model.shareDetailModel + ) + , Html.map ShareDetailMsg + (ShareDetail.viewContent texts.shareDetail + model.flags + model.uiSettings + model.version + shareId + itemId + model.shareDetailModel + ) + ] + + viewHome : Messages -> Model -> List (Html Msg) viewHome texts model = [ Html.map HomeMsg diff --git a/modules/webapp/src/main/elm/Comp/ItemCard.elm b/modules/webapp/src/main/elm/Comp/ItemCard.elm index 15d66ce5..554cb1c5 100644 --- a/modules/webapp/src/main/elm/Comp/ItemCard.elm +++ b/modules/webapp/src/main/elm/Comp/ItemCard.elm @@ -59,6 +59,7 @@ type alias ViewConfig = , previewUrl : AttachmentLight -> String , previewUrlFallback : ItemLight -> String , attachUrl : AttachmentLight -> String + , detailPage : ItemLight -> Page } @@ -174,7 +175,7 @@ view2 texts cfg settings model item = cardAction = case cfg.selection of Data.ItemSelection.Inactive -> - [ Page.href (ItemDetailPage item.id) + [ Page.href (cfg.detailPage item) ] Data.ItemSelection.Active ids -> @@ -530,7 +531,7 @@ previewMenu2 texts settings cfg model item mainAttach = , a [ class S.secondaryBasicButtonPlain , class "px-2 py-1 border rounded ml-2" - , Page.href (ItemDetailPage item.id) + , Page.href (cfg.detailPage item) , title texts.gotoDetail ] [ i [ class "fa fa-edit" ] [] diff --git a/modules/webapp/src/main/elm/Comp/ItemCardList.elm b/modules/webapp/src/main/elm/Comp/ItemCardList.elm index a23894e2..1986411d 100644 --- a/modules/webapp/src/main/elm/Comp/ItemCardList.elm +++ b/modules/webapp/src/main/elm/Comp/ItemCardList.elm @@ -165,6 +165,7 @@ type alias ViewConfig = , previewUrl : AttachmentLight -> String , previewUrlFallback : ItemLight -> String , attachUrl : AttachmentLight -> String + , detailPage : ItemLight -> Page } @@ -220,7 +221,7 @@ viewItem2 texts model cfg settings item = "" vvcfg = - Comp.ItemCard.ViewConfig cfg.selection currentClass cfg.previewUrl cfg.previewUrlFallback cfg.attachUrl + Comp.ItemCard.ViewConfig cfg.selection currentClass cfg.previewUrl cfg.previewUrlFallback cfg.attachUrl cfg.detailPage cardModel = Dict.get item.id model.itemCards diff --git a/modules/webapp/src/main/elm/Comp/SharePasswordForm.elm b/modules/webapp/src/main/elm/Comp/SharePasswordForm.elm new file mode 100644 index 00000000..2c17a16a --- /dev/null +++ b/modules/webapp/src/main/elm/Comp/SharePasswordForm.elm @@ -0,0 +1,156 @@ +module Comp.SharePasswordForm exposing (Model, Msg, init, update, view) + +import Api +import Api.Model.ShareVerifyResult exposing (ShareVerifyResult) +import Api.Model.VersionInfo exposing (VersionInfo) +import Data.Flags exposing (Flags) +import Html exposing (..) +import Html.Attributes exposing (..) +import Html.Events exposing (onInput, onSubmit) +import Http +import Messages.Comp.SharePasswordForm exposing (Texts) +import Styles as S + + +type CompError + = CompErrorNone + | CompErrorPasswordFailed + | CompErrorHttp Http.Error + + +type alias Model = + { password : String + , compError : CompError + } + + +init : Model +init = + { password = "" + , compError = CompErrorNone + } + + +type Msg + = SetPassword String + | SubmitPassword + | VerifyResp (Result Http.Error ShareVerifyResult) + + + +--- update + + +update : String -> Flags -> Msg -> Model -> ( Model, Cmd Msg, Maybe ShareVerifyResult ) +update shareId flags msg model = + case msg of + SetPassword pw -> + ( { model | password = pw }, Cmd.none, Nothing ) + + SubmitPassword -> + let + secret = + { shareId = shareId + , password = Just model.password + } + in + ( model, Api.verifyShare flags secret VerifyResp, Nothing ) + + VerifyResp (Ok res) -> + if res.success then + ( { model | password = "", compError = CompErrorNone }, Cmd.none, Just res ) + + else + ( { model | password = "", compError = CompErrorPasswordFailed }, Cmd.none, Nothing ) + + VerifyResp (Err err) -> + ( { model | password = "", compError = CompErrorHttp err }, Cmd.none, Nothing ) + + + +--- view + + +view : Texts -> Flags -> VersionInfo -> Model -> Html Msg +view texts flags versionInfo model = + div [ class "flex flex-col items-center" ] + [ div [ class ("flex flex-col px-4 sm:px-6 md:px-8 lg:px-10 py-8 rounded-md " ++ S.box) ] + [ div [ class "self-center" ] + [ img + [ class "w-16 py-2" + , src (flags.config.docspellAssetPath ++ "/img/logo-96.png") + ] + [] + ] + , div [ class "font-medium self-center text-xl sm:text-2xl" ] + [ text texts.passwordRequired + ] + , Html.form + [ action "#" + , onSubmit SubmitPassword + , autocomplete False + ] + [ div [ class "flex flex-col my-3" ] + [ label + [ for "password" + , class S.inputLabel + ] + [ text texts.password + ] + , div [ class "relative" ] + [ div [ class S.inputIcon ] + [ i [ class "fa fa-lock" ] [] + ] + , input + [ type_ "password" + , name "password" + , autocomplete False + , autofocus True + , tabindex 1 + , onInput SetPassword + , value model.password + , class ("pl-10 pr-4 py-2 rounded-lg" ++ S.textInput) + , placeholder texts.password + ] + [] + ] + ] + , div [ class "flex flex-col my-3" ] + [ button + [ type_ "submit" + , class S.primaryButton + ] + [ text texts.passwordSubmitButton + ] + ] + , case model.compError of + CompErrorNone -> + span [ class "hidden" ] [] + + CompErrorHttp err -> + div [ class S.errorMessage ] + [ text (texts.httpError err) + ] + + CompErrorPasswordFailed -> + div [ class S.errorMessage ] + [ text texts.passwordFailed + ] + ] + ] + , a + [ class "inline-flex items-center mt-4 text-xs opacity-50 hover:opacity-90" + , href "https://docspell.org" + , target "_new" + ] + [ img + [ src (flags.config.docspellAssetPath ++ "/img/logo-mc-96.png") + , class "w-3 h-3 mr-1" + ] + [] + , span [] + [ text "Docspell " + , text versionInfo.version + ] + ] + ] diff --git a/modules/webapp/src/main/elm/Messages.elm b/modules/webapp/src/main/elm/Messages.elm index 9809f1b4..24399b15 100644 --- a/modules/webapp/src/main/elm/Messages.elm +++ b/modules/webapp/src/main/elm/Messages.elm @@ -22,6 +22,7 @@ import Messages.Page.NewInvite import Messages.Page.Queue import Messages.Page.Register import Messages.Page.Share +import Messages.Page.ShareDetail import Messages.Page.Upload import Messages.Page.UserSettings import Messages.UiLanguage exposing (UiLanguage(..)) @@ -46,6 +47,7 @@ type alias Messages = , manageData : Messages.Page.ManageData.Texts , home : Messages.Page.Home.Texts , share : Messages.Page.Share.Texts + , shareDetail : Messages.Page.ShareDetail.Texts } @@ -112,6 +114,7 @@ gb = , manageData = Messages.Page.ManageData.gb , home = Messages.Page.Home.gb , share = Messages.Page.Share.gb + , shareDetail = Messages.Page.ShareDetail.gb } @@ -133,4 +136,5 @@ de = , manageData = Messages.Page.ManageData.de , home = Messages.Page.Home.de , share = Messages.Page.Share.de + , shareDetail = Messages.Page.ShareDetail.de } diff --git a/modules/webapp/src/main/elm/Messages/Comp/SharePasswordForm.elm b/modules/webapp/src/main/elm/Messages/Comp/SharePasswordForm.elm new file mode 100644 index 00000000..8688a4e9 --- /dev/null +++ b/modules/webapp/src/main/elm/Messages/Comp/SharePasswordForm.elm @@ -0,0 +1,33 @@ +module Messages.Comp.SharePasswordForm exposing (Texts, de, gb) + +import Http +import Messages.Comp.HttpError + + +type alias Texts = + { httpError : Http.Error -> String + , passwordRequired : String + , password : String + , passwordSubmitButton : String + , passwordFailed : String + } + + +gb : Texts +gb = + { httpError = Messages.Comp.HttpError.gb + , passwordRequired = "Password required" + , password = "Password" + , passwordSubmitButton = "Submit" + , passwordFailed = "Das Passwort ist falsch" + } + + +de : Texts +de = + { httpError = Messages.Comp.HttpError.de + , passwordRequired = "Passwort benötigt" + , password = "Passwort" + , passwordSubmitButton = "Submit" + , passwordFailed = "Password is wrong" + } diff --git a/modules/webapp/src/main/elm/Messages/Page/Share.elm b/modules/webapp/src/main/elm/Messages/Page/Share.elm index cee461cd..f6b73d31 100644 --- a/modules/webapp/src/main/elm/Messages/Page/Share.elm +++ b/modules/webapp/src/main/elm/Messages/Page/Share.elm @@ -10,16 +10,14 @@ module Messages.Page.Share exposing (..) import Messages.Basics import Messages.Comp.ItemCardList import Messages.Comp.SearchMenu +import Messages.Comp.SharePasswordForm type alias Texts = { searchMenu : Messages.Comp.SearchMenu.Texts , basics : Messages.Basics.Texts , itemCardList : Messages.Comp.ItemCardList.Texts - , passwordRequired : String - , password : String - , passwordSubmitButton : String - , passwordFailed : String + , passwordForm : Messages.Comp.SharePasswordForm.Texts } @@ -28,10 +26,7 @@ gb = { searchMenu = Messages.Comp.SearchMenu.gb , basics = Messages.Basics.gb , itemCardList = Messages.Comp.ItemCardList.gb - , passwordRequired = "Password required" - , password = "Password" - , passwordSubmitButton = "Submit" - , passwordFailed = "Das Passwort ist falsch" + , passwordForm = Messages.Comp.SharePasswordForm.gb } @@ -40,8 +35,5 @@ de = { searchMenu = Messages.Comp.SearchMenu.de , basics = Messages.Basics.de , itemCardList = Messages.Comp.ItemCardList.de - , passwordRequired = "Passwort benötigt" - , password = "Passwort" - , passwordSubmitButton = "Submit" - , passwordFailed = "Password is wrong" + , passwordForm = Messages.Comp.SharePasswordForm.de } diff --git a/modules/webapp/src/main/elm/Messages/Page/ShareDetail.elm b/modules/webapp/src/main/elm/Messages/Page/ShareDetail.elm new file mode 100644 index 00000000..71ab9536 --- /dev/null +++ b/modules/webapp/src/main/elm/Messages/Page/ShareDetail.elm @@ -0,0 +1,20 @@ +module Messages.Page.ShareDetail exposing (..) + +import Messages.Comp.SharePasswordForm + + +type alias Texts = + { passwordForm : Messages.Comp.SharePasswordForm.Texts + } + + +gb : Texts +gb = + { passwordForm = Messages.Comp.SharePasswordForm.gb + } + + +de : Texts +de = + { passwordForm = Messages.Comp.SharePasswordForm.de + } diff --git a/modules/webapp/src/main/elm/Page.elm b/modules/webapp/src/main/elm/Page.elm index 667fe7aa..2f42ee2e 100644 --- a/modules/webapp/src/main/elm/Page.elm +++ b/modules/webapp/src/main/elm/Page.elm @@ -19,9 +19,10 @@ module Page exposing , loginPageReferrer , pageFromString , pageName + , pageShareDetail + , pageShareId , pageToString , set - , shareId , uploadId ) @@ -61,6 +62,7 @@ type Page | NewInvitePage | ItemDetailPage String | SharePage String + | ShareDetailPage String String isSecured : Page -> Bool @@ -99,6 +101,9 @@ isSecured page = SharePage _ -> False + ShareDetailPage _ _ -> + False + {-| Currently, all secured pages have a sidebar, except UploadPage. -} @@ -171,6 +176,9 @@ pageName page = SharePage _ -> "Share" + ShareDetailPage _ _ -> + "Share Detail" + loginPageReferrer : Page -> LoginData loginPageReferrer page = @@ -182,8 +190,8 @@ loginPageReferrer page = emptyLoginData -shareId : Page -> Maybe String -shareId page = +pageShareId : Page -> Maybe String +pageShareId page = case page of SharePage id -> Just id @@ -192,6 +200,16 @@ shareId page = Nothing +pageShareDetail : Page -> Maybe ( String, String ) +pageShareDetail page = + case page of + ShareDetailPage shareId itemId -> + Just ( shareId, itemId ) + + _ -> + Nothing + + uploadId : Page -> Maybe String uploadId page = case page of @@ -248,6 +266,9 @@ pageToString page = SharePage id -> "/app/share/" ++ id + ShareDetailPage shareId itemId -> + "/app/share/" ++ shareId ++ "/" ++ itemId + pageFromString : String -> Maybe Page pageFromString str = @@ -304,6 +325,7 @@ parser = , Parser.map (UploadPage Nothing) (s pathPrefix s "upload") , Parser.map NewInvitePage (s pathPrefix s "newinvite") , Parser.map ItemDetailPage (s pathPrefix s "item" string) + , Parser.map ShareDetailPage (s pathPrefix s "share" string string) , Parser.map SharePage (s pathPrefix s "share" string) ] diff --git a/modules/webapp/src/main/elm/Page/Home/View2.elm b/modules/webapp/src/main/elm/Page/Home/View2.elm index 506ae853..da26662d 100644 --- a/modules/webapp/src/main/elm/Page/Home/View2.elm +++ b/modules/webapp/src/main/elm/Page/Home/View2.elm @@ -468,23 +468,22 @@ itemCardList texts _ settings model = previewUrlFallback item = Api.itemBasePreviewURL item.id + viewCfg sel = + Comp.ItemCardList.ViewConfig + model.scrollToCard + sel + previewUrl + previewUrlFallback + (.id >> Api.fileURL) + (.id >> ItemDetailPage) + itemViewCfg = case model.viewMode of SelectView svm -> - Comp.ItemCardList.ViewConfig - model.scrollToCard - (Data.ItemSelection.Active svm.ids) - previewUrl - previewUrlFallback - (.id >> Api.fileURL) + viewCfg (Data.ItemSelection.Active svm.ids) _ -> - Comp.ItemCardList.ViewConfig - model.scrollToCard - Data.ItemSelection.Inactive - previewUrl - previewUrlFallback - (.id >> Api.fileURL) + viewCfg Data.ItemSelection.Inactive in [ Html.map ItemCardListMsg (Comp.ItemCardList.view2 texts.itemCardList diff --git a/modules/webapp/src/main/elm/Page/Share/Data.elm b/modules/webapp/src/main/elm/Page/Share/Data.elm index eb47a41c..4be43360 100644 --- a/modules/webapp/src/main/elm/Page/Share/Data.elm +++ b/modules/webapp/src/main/elm/Page/Share/Data.elm @@ -15,6 +15,7 @@ import Api.Model.ShareVerifyResult exposing (ShareVerifyResult) import Comp.ItemCardList import Comp.PowerSearchInput import Comp.SearchMenu +import Comp.SharePasswordForm import Data.Flags exposing (Flags) import Http @@ -31,16 +32,10 @@ type PageError | PageErrorAuthFail -type alias PasswordModel = - { password : String - , passwordFailed : Bool - } - - type alias Model = { mode : Mode , verifyResult : ShareVerifyResult - , passwordModel : PasswordModel + , passwordModel : Comp.SharePasswordForm.Model , pageError : PageError , searchMenuModel : Comp.SearchMenu.Model , powerSearchInput : Comp.PowerSearchInput.Model @@ -53,10 +48,7 @@ emptyModel : Flags -> Model emptyModel flags = { mode = ModeInitial , verifyResult = Api.Model.ShareVerifyResult.empty - , passwordModel = - { password = "" - , passwordFailed = False - } + , passwordModel = Comp.SharePasswordForm.init , pageError = PageErrorNone , searchMenuModel = Comp.SearchMenu.init flags , powerSearchInput = Comp.PowerSearchInput.init @@ -79,8 +71,7 @@ type Msg = VerifyResp (Result Http.Error ShareVerifyResult) | SearchResp (Result Http.Error ItemLightList) | StatsResp (Result Http.Error SearchStats) - | SetPassword String - | SubmitPassword + | PasswordMsg Comp.SharePasswordForm.Msg | SearchMenuMsg Comp.SearchMenu.Msg | PowerSearchMsg Comp.PowerSearchInput.Msg | ResetSearch diff --git a/modules/webapp/src/main/elm/Page/Share/Results.elm b/modules/webapp/src/main/elm/Page/Share/Results.elm index 5bd69400..e47d8583 100644 --- a/modules/webapp/src/main/elm/Page/Share/Results.elm +++ b/modules/webapp/src/main/elm/Page/Share/Results.elm @@ -14,11 +14,12 @@ import Data.UiSettings exposing (UiSettings) import Html exposing (..) import Html.Attributes exposing (..) import Messages.Page.Share exposing (Texts) +import Page exposing (Page(..)) import Page.Share.Data exposing (Model, Msg(..)) -view : Texts -> UiSettings -> Model -> Html Msg -view texts settings model = +view : Texts -> UiSettings -> String -> Model -> Html Msg +view texts settings shareId model = let viewCfg = { current = Nothing @@ -26,6 +27,7 @@ view texts settings model = , previewUrl = \attach -> Api.shareAttachmentPreviewURL attach.id , previewUrlFallback = \item -> Api.shareItemBasePreviewURL item.id , attachUrl = .id >> Api.shareFileURL + , detailPage = \item -> ShareDetailPage shareId item.id } in div [] diff --git a/modules/webapp/src/main/elm/Page/Share/Update.elm b/modules/webapp/src/main/elm/Page/Share/Update.elm index 01b7ec73..c37a9776 100644 --- a/modules/webapp/src/main/elm/Page/Share/Update.elm +++ b/modules/webapp/src/main/elm/Page/Share/Update.elm @@ -13,6 +13,7 @@ import Comp.ItemCardList import Comp.LinkTarget exposing (LinkTarget) import Comp.PowerSearchInput import Comp.SearchMenu +import Comp.SharePasswordForm import Data.Flags exposing (Flags) import Data.ItemQuery as Q import Data.SearchMode @@ -51,26 +52,13 @@ update flags settings shareId msg model = ) else if res.passwordRequired then - if model.mode == ModePassword then - noSub - ( { model - | pageError = PageErrorNone - , passwordModel = - { password = "" - , passwordFailed = True - } - } - , Cmd.none - ) - - else - noSub - ( { model - | pageError = PageErrorNone - , mode = ModePassword - } - , Cmd.none - ) + noSub + ( { model + | pageError = PageErrorNone + , mode = ModePassword + } + , Cmd.none + ) else noSub @@ -101,21 +89,21 @@ update flags settings shareId msg model = StatsResp (Err err) -> noSub ( { model | pageError = PageErrorHttp err }, Cmd.none ) - SetPassword pw -> + PasswordMsg lmsg -> let - pm = - model.passwordModel + ( m, c, res ) = + Comp.SharePasswordForm.update shareId flags lmsg model.passwordModel in - noSub ( { model | passwordModel = { pm | password = pw } }, Cmd.none ) + case res of + Just verifyResult -> + update flags + settings + shareId + (VerifyResp (Ok verifyResult)) + model - SubmitPassword -> - let - secret = - { shareId = shareId - , password = Just model.passwordModel.password - } - in - noSub ( model, Api.verifyShare flags secret VerifyResp ) + Nothing -> + noSub ( { model | passwordModel = m }, Cmd.map PasswordMsg c ) SearchMenuMsg lm -> let diff --git a/modules/webapp/src/main/elm/Page/Share/View.elm b/modules/webapp/src/main/elm/Page/Share/View.elm index 5c0f941b..baaad70a 100644 --- a/modules/webapp/src/main/elm/Page/Share/View.elm +++ b/modules/webapp/src/main/elm/Page/Share/View.elm @@ -9,6 +9,7 @@ module Page.Share.View exposing (viewContent, viewSidebar) import Api.Model.VersionInfo exposing (VersionInfo) import Comp.Basic as B +import Comp.SharePasswordForm import Data.Flags exposing (Flags) import Data.Items import Data.UiSettings exposing (UiSettings) @@ -35,8 +36,8 @@ viewSidebar texts visible flags settings model = ] -viewContent : Texts -> Flags -> VersionInfo -> UiSettings -> Model -> Html Msg -viewContent texts flags versionInfo uiSettings model = +viewContent : Texts -> Flags -> VersionInfo -> UiSettings -> String -> Model -> Html Msg +viewContent texts flags versionInfo uiSettings shareId model = case model.mode of ModeInitial -> div @@ -54,15 +55,15 @@ viewContent texts flags versionInfo uiSettings model = passwordContent texts flags versionInfo model ModeShare -> - mainContent texts flags uiSettings model + mainContent texts flags uiSettings shareId model --- Helpers -mainContent : Texts -> Flags -> UiSettings -> Model -> Html Msg -mainContent texts _ settings model = +mainContent : Texts -> Flags -> UiSettings -> String -> Model -> Html Msg +mainContent texts _ settings shareId model = div [ id "content" , class "h-full flex flex-col" @@ -75,7 +76,7 @@ mainContent texts _ settings model = [ text <| Maybe.withDefault "" model.verifyResult.name ] , Menubar.view texts model - , Results.view texts settings model + , Results.view texts settings shareId model ] @@ -86,76 +87,6 @@ passwordContent texts flags versionInfo model = , class "h-full flex flex-col items-center justify-center w-full" , class S.content ] - [ div [ class ("flex flex-col px-4 sm:px-6 md:px-8 lg:px-10 py-8 rounded-md " ++ S.box) ] - [ div [ class "self-center" ] - [ img - [ class "w-16 py-2" - , src (flags.config.docspellAssetPath ++ "/img/logo-96.png") - ] - [] - ] - , div [ class "font-medium self-center text-xl sm:text-2xl" ] - [ text texts.passwordRequired - ] - , Html.form - [ action "#" - , onSubmit SubmitPassword - , autocomplete False - ] - [ div [ class "flex flex-col my-3" ] - [ label - [ for "password" - , class S.inputLabel - ] - [ text texts.password - ] - , div [ class "relative" ] - [ div [ class S.inputIcon ] - [ i [ class "fa fa-lock" ] [] - ] - , input - [ type_ "password" - , name "password" - , autocomplete False - , autofocus True - , tabindex 1 - , onInput SetPassword - , value model.passwordModel.password - , class ("pl-10 pr-4 py-2 rounded-lg" ++ S.textInput) - , placeholder texts.password - ] - [] - ] - ] - , div [ class "flex flex-col my-3" ] - [ button - [ type_ "submit" - , class S.primaryButton - ] - [ text texts.passwordSubmitButton - ] - ] - , div - [ class S.errorMessage - , classList [ ( "hidden", not model.passwordModel.passwordFailed ) ] - ] - [ text texts.passwordFailed - ] - ] - ] - , a - [ class "inline-flex items-center mt-4 text-xs opacity-50 hover:opacity-90" - , href "https://docspell.org" - , target "_new" - ] - [ img - [ src (flags.config.docspellAssetPath ++ "/img/logo-mc-96.png") - , class "w-3 h-3 mr-1" - ] - [] - , span [] - [ text "Docspell " - , text versionInfo.version - ] - ] + [ Html.map PasswordMsg + (Comp.SharePasswordForm.view texts.passwordForm flags versionInfo model.passwordModel) ] diff --git a/modules/webapp/src/main/elm/Page/ShareDetail/Data.elm b/modules/webapp/src/main/elm/Page/ShareDetail/Data.elm new file mode 100644 index 00000000..08c412bd --- /dev/null +++ b/modules/webapp/src/main/elm/Page/ShareDetail/Data.elm @@ -0,0 +1,56 @@ +module Page.ShareDetail.Data exposing (Model, Msg(..), PageError(..), ViewMode(..), init) + +import Api +import Api.Model.ItemDetail exposing (ItemDetail) +import Api.Model.ShareSecret exposing (ShareSecret) +import Api.Model.ShareVerifyResult exposing (ShareVerifyResult) +import Comp.SharePasswordForm +import Data.Flags exposing (Flags) +import Http + + +type ViewMode + = ViewNormal + | ViewPassword + | ViewLoading + + +type PageError + = PageErrorNone + | PageErrorHttp Http.Error + | PageErrorAuthFail + + +type alias Model = + { item : ItemDetail + , verifyResult : ShareVerifyResult + , passwordModel : Comp.SharePasswordForm.Model + , viewMode : ViewMode + , pageError : PageError + } + + +type Msg + = VerifyResp (Result Http.Error ShareVerifyResult) + | GetItemResp (Result Http.Error ItemDetail) + | PasswordMsg Comp.SharePasswordForm.Msg + + +emptyModel : ViewMode -> Model +emptyModel vm = + { item = Api.Model.ItemDetail.empty + , verifyResult = Api.Model.ShareVerifyResult.empty + , passwordModel = Comp.SharePasswordForm.init + , viewMode = vm + , pageError = PageErrorNone + } + + +init : Maybe ( String, String ) -> Flags -> ( Model, Cmd Msg ) +init mids flags = + case mids of + Just ( shareId, _ ) -> + ( emptyModel ViewLoading, Api.verifyShare flags (ShareSecret shareId Nothing) VerifyResp ) + + Nothing -> + ( emptyModel ViewLoading, Cmd.none ) diff --git a/modules/webapp/src/main/elm/Page/ShareDetail/Update.elm b/modules/webapp/src/main/elm/Page/ShareDetail/Update.elm new file mode 100644 index 00000000..40aa5757 --- /dev/null +++ b/modules/webapp/src/main/elm/Page/ShareDetail/Update.elm @@ -0,0 +1,64 @@ +module Page.ShareDetail.Update exposing (update) + +import Api +import Comp.SharePasswordForm +import Data.Flags exposing (Flags) +import Page.ShareDetail.Data exposing (..) + + +update : String -> String -> Flags -> Msg -> Model -> ( Model, Cmd Msg ) +update shareId itemId flags msg model = + case msg of + VerifyResp (Ok res) -> + if res.success then + ( { model + | pageError = PageErrorNone + , viewMode = ViewLoading + , verifyResult = res + } + , Api.itemDetailShare flags res.token itemId GetItemResp + ) + + else if res.passwordRequired then + ( { model + | pageError = PageErrorNone + , viewMode = ViewPassword + } + , Cmd.none + ) + + else + ( { model | pageError = PageErrorAuthFail } + , Cmd.none + ) + + VerifyResp (Err err) -> + ( { model | pageError = PageErrorHttp err }, Cmd.none ) + + GetItemResp (Ok item) -> + ( { model + | item = item + , viewMode = ViewNormal + , pageError = PageErrorNone + } + , Cmd.none + ) + + GetItemResp (Err err) -> + ( { model | viewMode = ViewNormal, pageError = PageErrorHttp err }, Cmd.none ) + + PasswordMsg lmsg -> + let + ( m, c, res ) = + Comp.SharePasswordForm.update shareId flags lmsg model.passwordModel + in + case res of + Just verifyResult -> + update shareId + itemId + flags + (VerifyResp (Ok verifyResult)) + model + + Nothing -> + ( { model | passwordModel = m }, Cmd.map PasswordMsg c ) diff --git a/modules/webapp/src/main/elm/Page/ShareDetail/View.elm b/modules/webapp/src/main/elm/Page/ShareDetail/View.elm new file mode 100644 index 00000000..aad6fa3f --- /dev/null +++ b/modules/webapp/src/main/elm/Page/ShareDetail/View.elm @@ -0,0 +1,108 @@ +module Page.ShareDetail.View exposing (viewContent, viewSidebar) + +import Api.Model.VersionInfo exposing (VersionInfo) +import Comp.Basic as B +import Comp.SharePasswordForm +import Data.Flags exposing (Flags) +import Data.UiSettings exposing (UiSettings) +import Html exposing (..) +import Html.Attributes exposing (..) +import Messages.Page.ShareDetail exposing (Texts) +import Page exposing (Page(..)) +import Page.ShareDetail.Data exposing (..) +import Styles as S + + +viewSidebar : Texts -> Bool -> Flags -> UiSettings -> Model -> Html Msg +viewSidebar texts visible flags settings model = + div + [ id "sidebar" + , class "hidden" + ] + [] + + +viewContent : Texts -> Flags -> UiSettings -> VersionInfo -> String -> String -> Model -> Html Msg +viewContent texts flags uiSettings versionInfo shareId itemId model = + case model.viewMode of + ViewLoading -> + div + [ id "content" + , class "h-full w-full flex flex-col text-5xl" + , class S.content + ] + [ B.loadingDimmer + { active = model.pageError == PageErrorNone + , label = "" + } + ] + + ViewPassword -> + passwordContent texts flags versionInfo model + + ViewNormal -> + mainContent texts flags uiSettings shareId model + + + +--- Helper + + +mainContent : Texts -> Flags -> UiSettings -> String -> Model -> Html Msg +mainContent texts flags settings shareId model = + div + [ class "flex flex-col" + , class S.content + ] + [ itemHead texts shareId model + , div [ class "flex flex-col sm:flex-row" ] + [ itemData texts model + , itemPreview texts flags settings model + ] + ] + + +itemData : Texts -> Model -> Html Msg +itemData texts model = + div [ class "flex" ] + [] + + +{-| Using ItemDetail Model to be able to reuse SingleAttachment component +-} +itemPreview : Texts -> Flags -> UiSettings -> Model -> Html Msg +itemPreview texts flags settings model = + div [ class "flex flex-grow" ] + [] + + +itemHead : Texts -> String -> Model -> Html Msg +itemHead texts shareId model = + div [ class "flex flex-col sm:flex-row" ] + [ div [ class "flex flex-grow items-center" ] + [ h1 [ class S.header1 ] + [ text model.item.name + ] + ] + , div [ class "flex flex-row items-center justify-end" ] + [ B.secondaryBasicButton + { label = "Close" + , icon = "fa fa-times" + , disabled = False + , handler = Page.href (SharePage shareId) + , attrs = [] + } + ] + ] + + +passwordContent : Texts -> Flags -> VersionInfo -> Model -> Html Msg +passwordContent texts flags versionInfo model = + div + [ id "content" + , class "h-full flex flex-col items-center justify-center w-full" + , class S.content + ] + [ Html.map PasswordMsg + (Comp.SharePasswordForm.view texts.passwordForm flags versionInfo model.passwordModel) + ] diff --git a/modules/webapp/src/main/elm/Util/Http.elm b/modules/webapp/src/main/elm/Util/Http.elm index dd965b23..5088f892 100644 --- a/modules/webapp/src/main/elm/Util/Http.elm +++ b/modules/webapp/src/main/elm/Util/Http.elm @@ -14,6 +14,7 @@ module Util.Http exposing , authTask , executeIn , jsonResolver + , shareGet , sharePost ) @@ -167,6 +168,24 @@ authGet req = } +shareGet : + { url : String + , token : String + , expect : Http.Expect msg + } + -> Cmd msg +shareGet req = + shareReq + { url = req.url + , token = req.token + , body = Http.emptyBody + , expect = req.expect + , method = "GET" + , headers = [] + , tracker = Nothing + } + + authDelete : { url : String , account : AuthResult From f216c472ee632bab8cad58ae555f90f8f839a6d3 Mon Sep 17 00:00:00 2001 From: eikek Date: Wed, 6 Oct 2021 23:20:16 +0200 Subject: [PATCH 53/75] Detect how to display pdf files Closes: #1099 --- .../restserver/src/main/templates/index.html | 13 ++++ modules/webapp/src/main/elm/Comp/ItemCard.elm | 17 ++--- .../webapp/src/main/elm/Comp/ItemCardList.elm | 18 ++--- .../src/main/elm/Comp/ItemDetail/Model.elm | 3 - .../elm/Comp/ItemDetail/SingleAttachment.elm | 20 +----- .../src/main/elm/Comp/ItemDetail/Update.elm | 13 ---- .../src/main/elm/Comp/UiSettingsForm.elm | 56 ++++++++++------ modules/webapp/src/main/elm/Data/Flags.elm | 1 + modules/webapp/src/main/elm/Data/Pdf.elm | 67 +++++++++++++++++++ .../webapp/src/main/elm/Data/UiSettings.elm | 38 ++++++++--- .../main/elm/Messages/Comp/UiSettingsForm.elm | 5 ++ .../src/main/elm/Messages/Data/PdfMode.elm | 39 +++++++++++ .../webapp/src/main/elm/Page/Home/View2.elm | 3 +- .../src/main/elm/Page/Share/Results.elm | 7 +- .../webapp/src/main/elm/Page/Share/View.elm | 4 +- 15 files changed, 217 insertions(+), 87 deletions(-) create mode 100644 modules/webapp/src/main/elm/Data/Pdf.elm create mode 100644 modules/webapp/src/main/elm/Messages/Data/PdfMode.elm diff --git a/modules/restserver/src/main/templates/index.html b/modules/restserver/src/main/templates/index.html index 6ae141fb..2a61f28c 100644 --- a/modules/restserver/src/main/templates/index.html +++ b/modules/restserver/src/main/templates/index.html @@ -43,8 +43,21 @@ // this is required for transitioning; elm fails to parse the account account["requireSecondFactor"] = false; } + + // hack to guess if the browser can display PDFs natively. It + // seems that almost all browsers allow to query the + // navigator.mimeTypes array, except firefox. + var ua = navigator.userAgent.toLowerCase(); + var pdfSupported = false; + if (ua.indexOf("firefox") > -1) { + pdfSupported = ua.indexOf("mobile") == -1; + } else { + pdfSupported = "application/pdf" in navigator.mimeTypes; + } + var elmFlags = { "account": account, + "pdfSupported": pdfSupported, "config": {{{flagsJson}}} }; diff --git a/modules/webapp/src/main/elm/Comp/ItemCard.elm b/modules/webapp/src/main/elm/Comp/ItemCard.elm index 554cb1c5..093afbc2 100644 --- a/modules/webapp/src/main/elm/Comp/ItemCard.elm +++ b/modules/webapp/src/main/elm/Comp/ItemCard.elm @@ -22,6 +22,7 @@ import Api.Model.ItemLight exposing (ItemLight) import Comp.LinkTarget exposing (LinkTarget(..)) import Data.Direction import Data.Fields +import Data.Flags exposing (Flags) import Data.Icons as Icons import Data.ItemSelection exposing (ItemSelection) import Data.ItemTemplate as IT @@ -150,8 +151,8 @@ update ddm msg model = --- View2 -view2 : Texts -> ViewConfig -> UiSettings -> Model -> ItemLight -> Html Msg -view2 texts cfg settings model item = +view2 : Texts -> ViewConfig -> UiSettings -> Flags -> Model -> ItemLight -> Html Msg +view2 texts cfg settings flags model item = let isCreated = item.state == "created" @@ -221,7 +222,7 @@ view2 texts cfg settings model item = , metaDataContent2 texts settings item , notesContent2 settings item , fulltextResultsContent2 item - , previewMenu2 texts settings cfg model item (currentAttachment model item) + , previewMenu2 texts settings flags cfg model item (currentAttachment model item) , selectedDimmer ] ) @@ -475,8 +476,8 @@ previewImage2 cfg settings cardAction model item = ] -previewMenu2 : Texts -> UiSettings -> ViewConfig -> Model -> ItemLight -> Maybe AttachmentLight -> Html Msg -previewMenu2 texts settings cfg model item mainAttach = +previewMenu2 : Texts -> UiSettings -> Flags -> ViewConfig -> Model -> ItemLight -> Maybe AttachmentLight -> Html Msg +previewMenu2 texts settings flags cfg model item mainAttach = let pageCount = Maybe.andThen .pageCount mainAttach @@ -489,11 +490,7 @@ previewMenu2 texts settings cfg model item mainAttach = Data.UiSettings.fieldHidden settings f mkAttachUrl attach = - if settings.nativePdfPreview then - cfg.attachUrl attach - - else - cfg.attachUrl attach ++ "/view" + Data.UiSettings.pdfUrl settings flags (cfg.attachUrl attach) attachUrl = Maybe.map mkAttachUrl mainAttach diff --git a/modules/webapp/src/main/elm/Comp/ItemCardList.elm b/modules/webapp/src/main/elm/Comp/ItemCardList.elm index 1986411d..df8b7af4 100644 --- a/modules/webapp/src/main/elm/Comp/ItemCardList.elm +++ b/modules/webapp/src/main/elm/Comp/ItemCardList.elm @@ -169,19 +169,19 @@ type alias ViewConfig = } -view2 : Texts -> ViewConfig -> UiSettings -> Model -> Html Msg -view2 texts cfg settings model = +view2 : Texts -> ViewConfig -> UiSettings -> Flags -> Model -> Html Msg +view2 texts cfg settings flags model = div [ classList [ ( "ds-item-list", True ) , ( "ds-multi-select-mode", isMultiSelectMode cfg ) ] ] - (List.map (viewGroup2 texts model cfg settings) model.results.groups) + (List.map (viewGroup2 texts model cfg settings flags) model.results.groups) -viewGroup2 : Texts -> Model -> ViewConfig -> UiSettings -> ItemLightGroup -> Html Msg -viewGroup2 texts model cfg settings group = +viewGroup2 : Texts -> Model -> ViewConfig -> UiSettings -> Flags -> ItemLightGroup -> Html Msg +viewGroup2 texts model cfg settings flags group = div [ class "ds-item-group" ] [ div [ class "flex py-1 mt-2 mb-2 flex flex-row items-center" @@ -206,12 +206,12 @@ viewGroup2 texts model cfg settings group = [] ] , div [ class "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 2xl:grid-cols-4 gap-2" ] - (List.map (viewItem2 texts model cfg settings) group.items) + (List.map (viewItem2 texts model cfg settings flags) group.items) ] -viewItem2 : Texts -> Model -> ViewConfig -> UiSettings -> ItemLight -> Html Msg -viewItem2 texts model cfg settings item = +viewItem2 : Texts -> Model -> ViewConfig -> UiSettings -> Flags -> ItemLight -> Html Msg +viewItem2 texts model cfg settings flags item = let currentClass = if cfg.current == Just item.id then @@ -228,7 +228,7 @@ viewItem2 texts model cfg settings item = |> Maybe.withDefault Comp.ItemCard.init cardHtml = - Comp.ItemCard.view2 texts.itemCard vvcfg settings cardModel item + Comp.ItemCard.view2 texts.itemCard vvcfg settings flags cardModel item in Html.map (ItemCardMsg item) cardHtml diff --git a/modules/webapp/src/main/elm/Comp/ItemDetail/Model.elm b/modules/webapp/src/main/elm/Comp/ItemDetail/Model.elm index 1302791d..d995ef7d 100644 --- a/modules/webapp/src/main/elm/Comp/ItemDetail/Model.elm +++ b/modules/webapp/src/main/elm/Comp/ItemDetail/Model.elm @@ -100,7 +100,6 @@ type alias Model = , sentMailsOpen : Bool , attachMeta : Dict String Comp.AttachmentMeta.Model , attachMetaOpen : Bool - , pdfNativeView : Maybe Bool , attachModal : Maybe ConfirmModalValue , addFilesOpen : Bool , addFilesModel : Comp.Dropzone.Model @@ -236,7 +235,6 @@ emptyModel = , sentMailsOpen = False , attachMeta = Dict.empty , attachMetaOpen = False - , pdfNativeView = Nothing , attachModal = Nothing , addFilesOpen = False , addFilesModel = Comp.Dropzone.init [] @@ -316,7 +314,6 @@ type Msg | SentMailsResp (Result Http.Error SentMails) | AttachMetaClick String | AttachMetaMsg String Comp.AttachmentMeta.Msg - | TogglePdfNativeView Bool | RequestDeleteAttachment String | DeleteAttachConfirmed String | RequestDeleteSelected diff --git a/modules/webapp/src/main/elm/Comp/ItemDetail/SingleAttachment.elm b/modules/webapp/src/main/elm/Comp/ItemDetail/SingleAttachment.elm index 61143847..52f935f9 100644 --- a/modules/webapp/src/main/elm/Comp/ItemDetail/SingleAttachment.elm +++ b/modules/webapp/src/main/elm/Comp/ItemDetail/SingleAttachment.elm @@ -85,12 +85,8 @@ view texts flags settings model pos attach = , style "max-height" "calc(100vh - 140px)" , style "min-height" "500px" ] - [ iframe - [ if Maybe.withDefault settings.nativePdfPreview model.pdfNativeView then - src fileUrl - - else - src (fileUrl ++ "/view") + [ embed + [ src <| Data.UiSettings.pdfUrl settings flags fileUrl , class "absolute h-full w-full top-0 left-0 mx-0 py-0" , id "ds-pdf-view-iframe" ] @@ -254,18 +250,6 @@ attachHeader texts settings model _ attach = , classList [ ( "hidden", not attach.converted ) ] ] } - , { icon = - if Maybe.withDefault settings.nativePdfPreview model.pdfNativeView then - "fa fa-toggle-on" - - else - "fa fa-toggle-off" - , label = texts.renderPdfByBrowser - , attrs = - [ onClick (TogglePdfNativeView settings.nativePdfPreview) - , href "#" - ] - } , { icon = if isAttachMetaOpen model attach.id then "fa fa-toggle-on" diff --git a/modules/webapp/src/main/elm/Comp/ItemDetail/Update.elm b/modules/webapp/src/main/elm/Comp/ItemDetail/Update.elm index 4299e632..c6b41490 100644 --- a/modules/webapp/src/main/elm/Comp/ItemDetail/Update.elm +++ b/modules/webapp/src/main/elm/Comp/ItemDetail/Update.elm @@ -913,19 +913,6 @@ update key flags inav settings msg model = Nothing -> resultModel model - TogglePdfNativeView default -> - resultModel - { model - | pdfNativeView = - case model.pdfNativeView of - Just flag -> - Just (not flag) - - Nothing -> - Just (not default) - , attachmentDropdownOpen = False - } - DeleteAttachConfirmed attachId -> let cmd = diff --git a/modules/webapp/src/main/elm/Comp/UiSettingsForm.elm b/modules/webapp/src/main/elm/Comp/UiSettingsForm.elm index 4e4b1632..ecfb6781 100644 --- a/modules/webapp/src/main/elm/Comp/UiSettingsForm.elm +++ b/modules/webapp/src/main/elm/Comp/UiSettingsForm.elm @@ -28,6 +28,7 @@ import Data.DropdownStyle as DS import Data.Fields exposing (Field) import Data.Flags exposing (Flags) import Data.ItemTemplate as IT exposing (ItemTemplate) +import Data.Pdf exposing (PdfMode) import Data.TagOrder import Data.UiSettings exposing (ItemPattern, Pos(..), UiSettings) import Dict exposing (Dict) @@ -50,7 +51,8 @@ type alias Model = , searchPageSizeModel : Comp.IntField.Model , tagColors : Dict String Color , tagColorModel : Comp.ColorTagger.Model - , nativePdfPreview : Bool + , pdfMode : PdfMode + , pdfModeModel : Comp.FixedDropdown.Model PdfMode , itemSearchNoteLength : Maybe Int , searchNoteLengthModel : Comp.IntField.Model , searchMenuFolderCount : Maybe Int @@ -122,7 +124,8 @@ init flags settings = Comp.ColorTagger.init [] Data.Color.all - , nativePdfPreview = settings.nativePdfPreview + , pdfMode = settings.pdfMode + , pdfModeModel = Comp.FixedDropdown.init Data.Pdf.allModes , itemSearchNoteLength = Just settings.itemSearchNoteLength , searchNoteLengthModel = Comp.IntField.init @@ -169,7 +172,6 @@ type Msg = SearchPageSizeMsg Comp.IntField.Msg | TagColorMsg Comp.ColorTagger.Msg | GetTagsResp (Result Http.Error TagList) - | TogglePdfPreview | NoteLengthMsg Comp.IntField.Msg | SearchMenuFolderMsg Comp.IntField.Msg | SearchMenuTagMsg Comp.IntField.Msg @@ -185,6 +187,7 @@ type Msg | ToggleSideMenuVisible | TogglePowerSearch | UiLangMsg (Comp.FixedDropdown.Msg UiLanguage) + | PdfModeMsg (Comp.FixedDropdown.Msg PdfMode) @@ -290,15 +293,6 @@ update sett msg model = in ( model_, nextSettings ) - TogglePdfPreview -> - let - flag = - not model.nativePdfPreview - in - ( { model | nativePdfPreview = flag } - , Just { sett | nativePdfPreview = flag } - ) - GetTagsResp (Ok tl) -> let categories = @@ -463,6 +457,22 @@ update sett msg model = Just { sett | uiLang = newLang } ) + PdfModeMsg lm -> + let + ( m, sel ) = + Comp.FixedDropdown.update lm model.pdfModeModel + + newMode = + Maybe.withDefault model.pdfMode sel + in + ( { model | pdfModeModel = m, pdfMode = newMode } + , if newMode == model.pdfMode then + Nothing + + else + Just { sett | pdfMode = newMode } + ) + --- View2 @@ -516,6 +526,13 @@ settingFormTabs texts flags _ model = , style = DS.mainStyle , selectPlaceholder = texts.basics.selectPlaceholder } + + pdfModeCfg = + { display = texts.pdfMode + , icon = \_ -> Nothing + , style = DS.mainStyle + , selectPlaceholder = texts.basics.selectPlaceholder + } in [ { name = "general" , title = texts.general @@ -689,13 +706,14 @@ settingFormTabs texts flags _ model = , info = Nothing , body = [ div [ class "mb-4" ] - [ MB.viewItem <| - MB.Checkbox - { tagger = \_ -> TogglePdfPreview - , label = texts.browserNativePdfView - , value = model.nativePdfPreview - , id = "uisetting-pdfpreview-toggle" - } + [ label [ class S.inputLabel ] [ text texts.browserNativePdfView ] + , Html.map PdfModeMsg + (Comp.FixedDropdown.viewStyled2 + pdfModeCfg + False + (Just model.pdfMode) + model.pdfModeModel + ) ] , div [ class "mb-4" ] [ MB.viewItem <| diff --git a/modules/webapp/src/main/elm/Data/Flags.elm b/modules/webapp/src/main/elm/Data/Flags.elm index e605bd50..5ebfa9c7 100644 --- a/modules/webapp/src/main/elm/Data/Flags.elm +++ b/modules/webapp/src/main/elm/Data/Flags.elm @@ -41,6 +41,7 @@ type alias Config = type alias Flags = { account : Maybe AuthResult + , pdfSupported : Bool , config : Config } diff --git a/modules/webapp/src/main/elm/Data/Pdf.elm b/modules/webapp/src/main/elm/Data/Pdf.elm new file mode 100644 index 00000000..e4c691b8 --- /dev/null +++ b/modules/webapp/src/main/elm/Data/Pdf.elm @@ -0,0 +1,67 @@ +module Data.Pdf exposing (PdfMode(..), allModes, asString, detectUrl, fromString, serverUrl) + +{-| Makes use of the fact, that docspell uses a `/view` suffix on the +path to provide a browser independent PDF view. +-} + +import Data.Flags exposing (Flags) +import Html exposing (..) +import Html.Attributes exposing (..) + + +type PdfMode + = Detect + | Native + | Server + + +allModes : List PdfMode +allModes = + [ Detect, Native, Server ] + + +asString : PdfMode -> String +asString mode = + case mode of + Detect -> + "detect" + + Native -> + "native" + + Server -> + "server" + + +fromString : String -> Maybe PdfMode +fromString str = + case String.toLower str of + "detect" -> + Just Detect + + "native" -> + Just Native + + "server" -> + Just Server + + _ -> + Nothing + + +serverUrl : String -> String +serverUrl url = + if String.endsWith "/" url then + url ++ "view" + + else + url ++ "/view" + + +detectUrl : Flags -> String -> String +detectUrl flags url = + if flags.pdfSupported then + url + + else + serverUrl url diff --git a/modules/webapp/src/main/elm/Data/UiSettings.elm b/modules/webapp/src/main/elm/Data/UiSettings.elm index fa7180df..3b5d4d80 100644 --- a/modules/webapp/src/main/elm/Data/UiSettings.elm +++ b/modules/webapp/src/main/elm/Data/UiSettings.elm @@ -20,6 +20,7 @@ module Data.UiSettings exposing , fieldVisible , merge , mergeDefaults + , pdfUrl , posFromString , posToString , storedUiSettingsDecoder @@ -34,7 +35,9 @@ import Api.Model.Tag exposing (Tag) import Data.BasicSize exposing (BasicSize) import Data.Color exposing (Color) import Data.Fields exposing (Field) +import Data.Flags exposing (Flags) import Data.ItemTemplate exposing (ItemTemplate) +import Data.Pdf exposing (PdfMode) import Data.UiTheme exposing (UiTheme) import Dict exposing (Dict) import Html exposing (Attribute) @@ -57,7 +60,7 @@ force default settings. type alias StoredUiSettings = { itemSearchPageSize : Maybe Int , tagCategoryColors : List ( String, String ) - , nativePdfPreview : Bool + , pdfMode : Maybe String , itemSearchNoteLength : Maybe Int , itemDetailNotesPosition : Maybe String , searchMenuFolderCount : Maybe Int @@ -91,7 +94,7 @@ storedUiSettingsDecoder = Decode.succeed StoredUiSettings |> P.optional "itemSearchPageSize" maybeInt Nothing |> P.optional "tagCategoryColors" (Decode.keyValuePairs Decode.string) [] - |> P.optional "nativePdfPreview" Decode.bool False + |> P.optional "pdfMode" maybeString Nothing |> P.optional "itemSearchNoteLength" maybeInt Nothing |> P.optional "itemDetailNotesPosition" maybeString Nothing |> P.optional "searchMenuFolderCount" maybeInt Nothing @@ -121,7 +124,7 @@ storedUiSettingsEncode value = Encode.object [ ( "itemSearchPageSize", maybeEnc Encode.int value.itemSearchPageSize ) , ( "tagCategoryColors", Encode.dict identity Encode.string (Dict.fromList value.tagCategoryColors) ) - , ( "nativePdfPreview", Encode.bool value.nativePdfPreview ) + , ( "pdfMode", maybeEnc Encode.string value.pdfMode ) , ( "itemSearchNoteLength", maybeEnc Encode.int value.itemSearchNoteLength ) , ( "itemDetailNotesPosition", maybeEnc Encode.string value.itemDetailNotesPosition ) , ( "searchMenuFolderCount", maybeEnc Encode.int value.searchMenuFolderCount ) @@ -146,14 +149,15 @@ storedUiSettingsEncode value = {-| Settings for the web ui. These fields are all mandatory, since there is always a default value. -When loaded from local storage, all optional fields can fallback to a -default value, converting the StoredUiSettings into a UiSettings. +When loaded from local storage or the server, all optional fields can +fallback to a default value, converting the StoredUiSettings into a +UiSettings. -} type alias UiSettings = { itemSearchPageSize : Int , tagCategoryColors : Dict String Color - , nativePdfPreview : Bool + , pdfMode : PdfMode , itemSearchNoteLength : Int , itemDetailNotesPosition : Pos , searchMenuFolderCount : Int @@ -219,7 +223,7 @@ defaults : UiSettings defaults = { itemSearchPageSize = 60 , tagCategoryColors = Dict.empty - , nativePdfPreview = False + , pdfMode = Data.Pdf.Detect , itemSearchNoteLength = 0 , itemDetailNotesPosition = Bottom , searchMenuFolderCount = 3 @@ -259,7 +263,10 @@ merge given fallback = |> Dict.map (\_ -> Maybe.withDefault Data.Color.Grey) ) fallback.tagCategoryColors - , nativePdfPreview = given.nativePdfPreview + , pdfMode = + given.pdfMode + |> Maybe.andThen Data.Pdf.fromString + |> Maybe.withDefault fallback.pdfMode , itemSearchNoteLength = choose given.itemSearchNoteLength fallback.itemSearchNoteLength , itemDetailNotesPosition = @@ -313,7 +320,7 @@ toStoredUiSettings settings = , tagCategoryColors = Dict.map (\_ -> Data.Color.toString) settings.tagCategoryColors |> Dict.toList - , nativePdfPreview = settings.nativePdfPreview + , pdfMode = Just (Data.Pdf.asString settings.pdfMode) , itemSearchNoteLength = Just settings.itemSearchNoteLength , itemDetailNotesPosition = Just (posToString settings.itemDetailNotesPosition) , searchMenuFolderCount = Just settings.searchMenuFolderCount @@ -407,6 +414,19 @@ cardPreviewSize2 settings = "max-h-80" +pdfUrl : UiSettings -> Flags -> String -> String +pdfUrl settings flags originalUrl = + case settings.pdfMode of + Data.Pdf.Detect -> + Data.Pdf.detectUrl flags originalUrl + + Data.Pdf.Native -> + originalUrl + + Data.Pdf.Server -> + Data.Pdf.serverUrl originalUrl + + --- Helpers diff --git a/modules/webapp/src/main/elm/Messages/Comp/UiSettingsForm.elm b/modules/webapp/src/main/elm/Messages/Comp/UiSettingsForm.elm index 929128bd..a09151a3 100644 --- a/modules/webapp/src/main/elm/Messages/Comp/UiSettingsForm.elm +++ b/modules/webapp/src/main/elm/Messages/Comp/UiSettingsForm.elm @@ -13,9 +13,11 @@ module Messages.Comp.UiSettingsForm exposing import Data.Color exposing (Color) import Data.Fields exposing (Field) +import Data.Pdf exposing (PdfMode) import Messages.Basics import Messages.Data.Color import Messages.Data.Fields +import Messages.Data.PdfMode type alias Texts = @@ -53,6 +55,7 @@ type alias Texts = , fieldsInfo : String , fieldLabel : Field -> String , templateHelpMessage : String + , pdfMode : PdfMode -> String } @@ -127,6 +130,7 @@ for example `{{corrOrg|corrPerson|-}}` would render the organization and if that is not present the person. If both are absent a dash `-` is rendered. """ + , pdfMode = Messages.Data.PdfMode.gb } @@ -203,4 +207,5 @@ verknüpft werden, bis zur ersten die einen Wert enthält. Zum Beispiel: oder, wenn diese leer ist, die Person. Sind beide leer wird ein `-` dargestellt. """ + , pdfMode = Messages.Data.PdfMode.de } diff --git a/modules/webapp/src/main/elm/Messages/Data/PdfMode.elm b/modules/webapp/src/main/elm/Messages/Data/PdfMode.elm new file mode 100644 index 00000000..73748076 --- /dev/null +++ b/modules/webapp/src/main/elm/Messages/Data/PdfMode.elm @@ -0,0 +1,39 @@ +{- + Copyright 2020 Eike K. & Contributors + + SPDX-License-Identifier: AGPL-3.0-or-later +-} + + +module Messages.Data.PdfMode exposing + ( de + , gb + ) + +import Data.Pdf exposing (PdfMode(..)) + + +gb : PdfMode -> String +gb st = + case st of + Detect -> + "Detect automatically" + + Native -> + "Use the browser's native PDF view" + + Server -> + "Use cross-browser fallback" + + +de : PdfMode -> String +de st = + case st of + Detect -> + "Automatisch ermitteln" + + Native -> + "Browsernative Darstellung" + + Server -> + "Browserübergreifende Ersatzdarstellung" diff --git a/modules/webapp/src/main/elm/Page/Home/View2.elm b/modules/webapp/src/main/elm/Page/Home/View2.elm index da26662d..515c8c51 100644 --- a/modules/webapp/src/main/elm/Page/Home/View2.elm +++ b/modules/webapp/src/main/elm/Page/Home/View2.elm @@ -460,7 +460,7 @@ searchStats texts _ settings model = itemCardList : Texts -> Flags -> UiSettings -> Model -> List (Html Msg) -itemCardList texts _ settings model = +itemCardList texts flags settings model = let previewUrl attach = Api.attachmentPreviewURL attach.id @@ -489,6 +489,7 @@ itemCardList texts _ settings model = (Comp.ItemCardList.view2 texts.itemCardList itemViewCfg settings + flags model.itemListModel ) , loadMore texts settings model diff --git a/modules/webapp/src/main/elm/Page/Share/Results.elm b/modules/webapp/src/main/elm/Page/Share/Results.elm index e47d8583..6785663c 100644 --- a/modules/webapp/src/main/elm/Page/Share/Results.elm +++ b/modules/webapp/src/main/elm/Page/Share/Results.elm @@ -9,6 +9,7 @@ module Page.Share.Results exposing (view) import Api import Comp.ItemCardList +import Data.Flags exposing (Flags) import Data.ItemSelection import Data.UiSettings exposing (UiSettings) import Html exposing (..) @@ -18,8 +19,8 @@ import Page exposing (Page(..)) import Page.Share.Data exposing (Model, Msg(..)) -view : Texts -> UiSettings -> String -> Model -> Html Msg -view texts settings shareId model = +view : Texts -> UiSettings -> Flags -> String -> Model -> Html Msg +view texts settings flags shareId model = let viewCfg = { current = Nothing @@ -32,5 +33,5 @@ view texts settings shareId model = in div [] [ Html.map ItemListMsg - (Comp.ItemCardList.view2 texts.itemCardList viewCfg settings model.itemListModel) + (Comp.ItemCardList.view2 texts.itemCardList viewCfg settings flags model.itemListModel) ] diff --git a/modules/webapp/src/main/elm/Page/Share/View.elm b/modules/webapp/src/main/elm/Page/Share/View.elm index baaad70a..49bf8803 100644 --- a/modules/webapp/src/main/elm/Page/Share/View.elm +++ b/modules/webapp/src/main/elm/Page/Share/View.elm @@ -63,7 +63,7 @@ viewContent texts flags versionInfo uiSettings shareId model = mainContent : Texts -> Flags -> UiSettings -> String -> Model -> Html Msg -mainContent texts _ settings shareId model = +mainContent texts flags settings shareId model = div [ id "content" , class "h-full flex flex-col" @@ -76,7 +76,7 @@ mainContent texts _ settings shareId model = [ text <| Maybe.withDefault "" model.verifyResult.name ] , Menubar.view texts model - , Results.view texts settings shareId model + , Results.view texts settings flags shareId model ] From f25d40b493ecd1027f4d8dd8b7f19d086825b50e Mon Sep 17 00:00:00 2001 From: eikek Date: Thu, 7 Oct 2021 01:33:59 +0200 Subject: [PATCH 54/75] First simple item detail version for a share --- modules/webapp/src/main/elm/Data/Icons.elm | 12 -- .../main/elm/Messages/Page/ShareDetail.elm | 8 ++ .../src/main/elm/Page/ShareDetail/View.elm | 105 ++++++++++++++++-- modules/webapp/src/main/elm/Styles.elm | 2 +- modules/webapp/src/main/elm/Util/Item.elm | 35 ++++++ 5 files changed, 141 insertions(+), 21 deletions(-) diff --git a/modules/webapp/src/main/elm/Data/Icons.elm b/modules/webapp/src/main/elm/Data/Icons.elm index 76a5f360..dbe79fc0 100644 --- a/modules/webapp/src/main/elm/Data/Icons.elm +++ b/modules/webapp/src/main/elm/Data/Icons.elm @@ -68,9 +68,7 @@ module Data.Icons exposing , tag2 , tagIcon , tagIcon2 - , tags , tags2 - , tagsIcon , tagsIcon2 ) @@ -361,16 +359,6 @@ tagIcon2 classes = i [ class (tag2 ++ " " ++ classes) ] [] -tags : String -tags = - "tags icon" - - -tagsIcon : String -> Html msg -tagsIcon classes = - i [ class (tags ++ " " ++ classes) ] [] - - tags2 : String tags2 = "fa fa-tags" diff --git a/modules/webapp/src/main/elm/Messages/Page/ShareDetail.elm b/modules/webapp/src/main/elm/Messages/Page/ShareDetail.elm index 71ab9536..a9392d9a 100644 --- a/modules/webapp/src/main/elm/Messages/Page/ShareDetail.elm +++ b/modules/webapp/src/main/elm/Messages/Page/ShareDetail.elm @@ -1,20 +1,28 @@ module Messages.Page.ShareDetail exposing (..) import Messages.Comp.SharePasswordForm +import Messages.DateFormat +import Messages.UiLanguage exposing (UiLanguage(..)) type alias Texts = { passwordForm : Messages.Comp.SharePasswordForm.Texts + , formatDateLong : Int -> String + , formatDateShort : Int -> String } gb : Texts gb = { passwordForm = Messages.Comp.SharePasswordForm.gb + , formatDateLong = Messages.DateFormat.formatDateLong English + , formatDateShort = Messages.DateFormat.formatDateShort English } de : Texts de = { passwordForm = Messages.Comp.SharePasswordForm.de + , formatDateLong = Messages.DateFormat.formatDateLong German + , formatDateShort = Messages.DateFormat.formatDateShort German } diff --git a/modules/webapp/src/main/elm/Page/ShareDetail/View.elm b/modules/webapp/src/main/elm/Page/ShareDetail/View.elm index aad6fa3f..7d06fc65 100644 --- a/modules/webapp/src/main/elm/Page/ShareDetail/View.elm +++ b/modules/webapp/src/main/elm/Page/ShareDetail/View.elm @@ -1,9 +1,12 @@ module Page.ShareDetail.View exposing (viewContent, viewSidebar) +import Api import Api.Model.VersionInfo exposing (VersionInfo) import Comp.Basic as B import Comp.SharePasswordForm import Data.Flags exposing (Flags) +import Data.Icons as Icons +import Data.ItemTemplate as IT exposing (ItemTemplate) import Data.UiSettings exposing (UiSettings) import Html exposing (..) import Html.Attributes exposing (..) @@ -11,6 +14,8 @@ import Messages.Page.ShareDetail exposing (Texts) import Page exposing (Page(..)) import Page.ShareDetail.Data exposing (..) import Styles as S +import Util.CustomField +import Util.Item viewSidebar : Texts -> Bool -> Flags -> UiSettings -> Model -> Html Msg @@ -55,7 +60,7 @@ mainContent texts flags settings shareId model = , class S.content ] [ itemHead texts shareId model - , div [ class "flex flex-col sm:flex-row" ] + , div [ class "flex flex-col sm:flex-row sm:space-x-4 relative h-full" ] [ itemData texts model , itemPreview texts flags settings model ] @@ -64,16 +69,92 @@ mainContent texts flags settings shareId model = itemData : Texts -> Model -> Html Msg itemData texts model = - div [ class "flex" ] - [] + let + boxStyle = + "mb-4 sm:mb-6 max-w-sm" + + headerStyle = + "py-2 bg-blue-50 hover:bg-blue-100 dark:bg-bluegray-700 dark:hover:bg-opacity-100 dark:hover:bg-bluegray-600 text-lg font-medium rounded-lg" + + showTag tag = + div + [ class "flex ml-2 mt-1 font-semibold hover:opacity-75" + , class S.basicLabel + ] + [ i [ class "fa fa-tag mr-2" ] [] + , text tag.name + ] + + showField = + Util.CustomField.renderValue2 + [ ( S.basicLabel, True ) + , ( "flex ml-2 mt-1 font-semibold hover:opacity-75", True ) + ] + Nothing + in + div [ class "flex flex-col pr-2 sm:w-1/3" ] + [ div [ class boxStyle ] + [ div [ class headerStyle ] + [ Icons.dateIcon2 "mr-2 ml-2" + , text "Date" + ] + , div [ class "text-lg ml-2" ] + [ Util.Item.toItemLight model.item + |> IT.render IT.dateLong (templateCtx texts) + |> text + ] + ] + , div [ class boxStyle ] + [ div [ class headerStyle ] + [ Icons.tagsIcon2 "mr-2 ml-2" + , text "Tags & Fields" + ] + , div [ class "flex flex-row items-center flex-wrap font-medium my-1" ] + (List.map showTag model.item.tags ++ List.map showField model.item.customfields) + ] + , div [ class boxStyle ] + [ div [ class headerStyle ] + [ Icons.correspondentIcon2 "mr-2 ml-2" + , text "Correspondent" + ] + , div [ class "text-lg ml-2" ] + [ Util.Item.toItemLight model.item + |> IT.render IT.correspondent (templateCtx texts) + |> text + ] + ] + , div [ class boxStyle ] + [ div [ class headerStyle ] + [ Icons.concernedIcon2 "mr-2 ml-2" + , text "Concerning" + ] + , div [ class "text-lg ml-2" ] + [ Util.Item.toItemLight model.item + |> IT.render IT.concerning (templateCtx texts) + |> text + ] + ] + ] -{-| Using ItemDetail Model to be able to reuse SingleAttachment component --} itemPreview : Texts -> Flags -> UiSettings -> Model -> Html Msg itemPreview texts flags settings model = - div [ class "flex flex-grow" ] - [] + let + id = + List.head model.item.attachments + |> Maybe.map .id + |> Maybe.withDefault "" + in + div + [ class "flex flex-grow" + , style "min-height" "500px" + ] + [ embed + [ src (Data.UiSettings.pdfUrl settings flags (Api.shareFileURL id)) + , class " h-full w-full mx-0 py-0" + ] + [] + ] itemHead : Texts -> String -> Model -> Html Msg @@ -84,7 +165,7 @@ itemHead texts shareId model = [ text model.item.name ] ] - , div [ class "flex flex-row items-center justify-end" ] + , div [ class "flex flex-row items-center justify-end mb-2 sm:mb-0" ] [ B.secondaryBasicButton { label = "Close" , icon = "fa fa-times" @@ -106,3 +187,11 @@ passwordContent texts flags versionInfo model = [ Html.map PasswordMsg (Comp.SharePasswordForm.view texts.passwordForm flags versionInfo model.passwordModel) ] + + +templateCtx : Texts -> IT.TemplateContext +templateCtx texts = + { dateFormatLong = texts.formatDateLong + , dateFormatShort = texts.formatDateShort + , directionLabel = \_ -> "" + } diff --git a/modules/webapp/src/main/elm/Styles.elm b/modules/webapp/src/main/elm/Styles.elm index f33ba301..2c8167dd 100644 --- a/modules/webapp/src/main/elm/Styles.elm +++ b/modules/webapp/src/main/elm/Styles.elm @@ -325,7 +325,7 @@ border2 = header1 : String header1 = - " text-3xl mt-3 mb-5 font-semibold tracking-wide break-all" + " text-3xl mt-3 mb-3 sm:mb-5 font-semibold tracking-wide break-all" header2 : String diff --git a/modules/webapp/src/main/elm/Util/Item.elm b/modules/webapp/src/main/elm/Util/Item.elm index c14a3b8d..3a8c8ea3 100644 --- a/modules/webapp/src/main/elm/Util/Item.elm +++ b/modules/webapp/src/main/elm/Util/Item.elm @@ -8,14 +8,49 @@ module Util.Item exposing ( concTemplate , corrTemplate + , toItemLight ) +import Api.Model.Attachment exposing (Attachment) +import Api.Model.AttachmentLight exposing (AttachmentLight) +import Api.Model.ItemDetail exposing (ItemDetail) import Api.Model.ItemLight exposing (ItemLight) import Data.Fields import Data.ItemTemplate as IT exposing (ItemTemplate) import Data.UiSettings exposing (UiSettings) +toItemLight : ItemDetail -> ItemLight +toItemLight detail = + { id = detail.id + , name = detail.name + , state = detail.state + , date = Maybe.withDefault detail.created detail.itemDate + , dueDate = detail.dueDate + , source = detail.source + , direction = Just detail.direction + , corrOrg = detail.corrOrg + , corrPerson = detail.corrPerson + , concPerson = detail.concPerson + , concEquipment = detail.concEquipment + , folder = detail.folder + , attachments = List.indexedMap toAttachmentLight detail.attachments + , tags = detail.tags + , customfields = detail.customfields + , notes = detail.notes + , highlighting = [] + } + + +toAttachmentLight : Int -> Attachment -> AttachmentLight +toAttachmentLight index attach = + { id = attach.id + , position = index + , name = attach.name + , pageCount = Nothing + } + + corrTemplate : UiSettings -> ItemTemplate corrTemplate settings = let From 02cbd95e0d8e7761671eb9e17cb1a5453d126395 Mon Sep 17 00:00:00 2001 From: eikek Date: Thu, 7 Oct 2021 15:39:32 +0200 Subject: [PATCH 55/75] Increment share access on verify --- .../backend/src/main/scala/docspell/backend/ops/OShare.scala | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/modules/backend/src/main/scala/docspell/backend/ops/OShare.scala b/modules/backend/src/main/scala/docspell/backend/ops/OShare.scala index 57a2c236..4b8ae0f6 100644 --- a/modules/backend/src/main/scala/docspell/backend/ops/OShare.scala +++ b/modules/backend/src/main/scala/docspell/backend/ops/OShare.scala @@ -194,7 +194,9 @@ object OShare { val shareKey = share.password.map(pw => key ++ pw.asByteVector).getOrElse(key) - val token = ShareToken.create(id, shareKey) + val token = ShareToken + .create(id, shareKey) + .flatTap(_ => store.transact(RShare.incAccess(share.id))) pwCheck match { case Some(true) => token.map(t => VerifyResult.success(t, share.name)) case None => token.map(t => VerifyResult.success(t, share.name)) From 006791deb42245b765fb64a796875379e79c1215 Mon Sep 17 00:00:00 2001 From: eikek Date: Thu, 7 Oct 2021 15:41:08 +0200 Subject: [PATCH 56/75] Fix curl command in exim conf --- tools/exim/exim.conf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/exim/exim.conf b/tools/exim/exim.conf index e2d7d6b4..25926737 100644 --- a/tools/exim/exim.conf +++ b/tools/exim/exim.conf @@ -28,7 +28,7 @@ require verify = recipient require message = Recipient unknown - condition = ${run{/usr/bin/curl --out /dev/null --silent --fail -H "Docspell-Integration: ${env{DS_HEADER}{$value} fail}" "${env{DS_URL}{$value} fail}/api/v1/open/integration/item/$local_part"}{yes}{no}} + condition = ${run{/usr/bin/curl --output /dev/null --silent --fail -H "Docspell-Integration: ${env{DS_HEADER}{$value} fail}" "${env{DS_URL}{$value} fail}/api/v1/open/integration/item/$local_part"}{yes}{no}} warn message = Reverse lookup failed !verify = reverse_host_lookup @@ -48,7 +48,7 @@ local_users: begin transports docspell: driver = pipe - command = /usr/bin/curl --out /dev/null --silent --fail -H "Docspell-Integration: ${env{DS_HEADER}{$value} fail}" -F "file=@-;filename=\"$h_subject:\"" "${env{DS_URL}{$value} fail}/api/v1/open/integration/item/$local_part" + command = /usr/bin/curl --output /dev/null --silent --fail -H "Docspell-Integration: ${env{DS_HEADER}{$value} fail}" -F "file=@-;filename=\"$h_subject:\"" "${env{DS_URL}{$value} fail}/api/v1/open/integration/item/$local_part" return_fail_output user = nobody delivery_date_add From 7cbdf919f43dde2ab7a90e258b7f2422a5b7f77c Mon Sep 17 00:00:00 2001 From: eikek Date: Thu, 7 Oct 2021 22:02:31 +0200 Subject: [PATCH 57/75] Show item detail for a shared item --- modules/webapp/elm.json | 4 +- modules/webapp/src/main/elm/App/Update.elm | 15 +- modules/webapp/src/main/elm/App/View2.elm | 2 + .../main/elm/Comp/ItemDetail/ShowQrCode.elm | 5 +- modules/webapp/src/main/elm/Comp/OtpSetup.elm | 5 +- .../webapp/src/main/elm/Comp/ShareView.elm | 5 +- .../webapp/src/main/elm/Comp/SourceManage.elm | 5 +- modules/webapp/src/main/elm/Comp/UrlCopy.elm | 95 +++++++ .../src/main/elm/Messages/Page/Share.elm | 8 + .../main/elm/Messages/Page/ShareDetail.elm | 26 ++ modules/webapp/src/main/elm/Page.elm | 3 + .../webapp/src/main/elm/Page/Share/Data.elm | 17 +- .../webapp/src/main/elm/Page/Share/View.elm | 33 ++- .../src/main/elm/Page/ShareDetail/Data.elm | 14 +- .../src/main/elm/Page/ShareDetail/Update.elm | 26 +- .../src/main/elm/Page/ShareDetail/View.elm | 241 +++++++++++++++--- modules/webapp/src/main/elm/Styles.elm | 7 +- modules/webapp/src/main/webjar/docspell.js | 4 +- 18 files changed, 458 insertions(+), 57 deletions(-) create mode 100644 modules/webapp/src/main/elm/Comp/UrlCopy.elm diff --git a/modules/webapp/elm.json b/modules/webapp/elm.json index 047c5cda..b1071ec9 100644 --- a/modules/webapp/elm.json +++ b/modules/webapp/elm.json @@ -16,12 +16,13 @@ "elm/html": "1.0.0", "elm/http": "2.0.0", "elm/json": "1.1.3", + "elm/svg": "1.0.1", "elm/time": "1.0.0", "elm/url": "1.0.0", "elm-explorations/markdown": "1.0.0", "justinmimbs/date": "3.1.2", "norpan/elm-html5-drag-drop": "3.1.4", - "pablohirafuji/elm-qrcode": "3.3.1", + "pablohirafuji/elm-qrcode": "4.0.1", "ryannhg/date-format": "2.3.0", "truqu/elm-base64": "2.0.4", "ursi/elm-scroll": "1.0.0", @@ -33,7 +34,6 @@ "elm/bytes": "1.0.8", "elm/parser": "1.1.0", "elm/regex": "1.0.0", - "elm/svg": "1.0.1", "elm/virtual-dom": "1.0.2", "elm-community/list-extra": "8.2.4", "folkertdev/elm-flate": "2.0.4", diff --git a/modules/webapp/src/main/elm/App/Update.elm b/modules/webapp/src/main/elm/App/Update.elm index 19a689cb..66002c92 100644 --- a/modules/webapp/src/main/elm/App/Update.elm +++ b/modules/webapp/src/main/elm/App/Update.elm @@ -613,8 +613,19 @@ initPage model_ page = ] model - SharePage _ -> - ( model, Cmd.none, Sub.none ) + SharePage id -> + let + cmd = + Cmd.map ShareMsg (Page.Share.Data.initCmd id model.flags) + + shareModel = + model.shareModel + in + if shareModel.initialized then + ( model, Cmd.none, Sub.none ) + + else + ( { model | shareModel = { shareModel | initialized = True } }, cmd, Sub.none ) ShareDetailPage _ _ -> case model_.page of diff --git a/modules/webapp/src/main/elm/App/View2.elm b/modules/webapp/src/main/elm/App/View2.elm index 3dcaba5a..6e5652a5 100644 --- a/modules/webapp/src/main/elm/App/View2.elm +++ b/modules/webapp/src/main/elm/App/View2.elm @@ -451,6 +451,8 @@ viewShareDetail texts shareId itemId model = model.sidebarVisible model.flags model.uiSettings + shareId + itemId model.shareDetailModel ) , Html.map ShareDetailMsg diff --git a/modules/webapp/src/main/elm/Comp/ItemDetail/ShowQrCode.elm b/modules/webapp/src/main/elm/Comp/ItemDetail/ShowQrCode.elm index cfd1ae22..a6e3a96f 100644 --- a/modules/webapp/src/main/elm/Comp/ItemDetail/ShowQrCode.elm +++ b/modules/webapp/src/main/elm/Comp/ItemDetail/ShowQrCode.elm @@ -17,6 +17,7 @@ import Html.Attributes exposing (..) import Html.Events exposing (onClick) import QRCode import Styles as S +import Svg.Attributes as SvgA view : Flags -> String -> Model -> UrlId -> Html Msg @@ -111,7 +112,7 @@ type UrlId qrCodeView : String -> Html msg qrCodeView message = - QRCode.encode message - |> Result.map QRCode.toSvg + QRCode.fromString message + |> Result.map (QRCode.toSvg [ SvgA.class "w-64 h-64" ]) |> Result.withDefault (text "Error generating QR code") diff --git a/modules/webapp/src/main/elm/Comp/OtpSetup.elm b/modules/webapp/src/main/elm/Comp/OtpSetup.elm index 46db0f75..c972eb95 100644 --- a/modules/webapp/src/main/elm/Comp/OtpSetup.elm +++ b/modules/webapp/src/main/elm/Comp/OtpSetup.elm @@ -23,6 +23,7 @@ import Markdown import Messages.Comp.OtpSetup exposing (Texts) import QRCode import Styles as S +import Svg.Attributes as SvgA type Model @@ -389,8 +390,8 @@ viewDisabled texts model = qrCodeView : Texts -> String -> Html msg qrCodeView texts message = - QRCode.encode message - |> Result.map QRCode.toSvg + QRCode.fromString message + |> Result.map (QRCode.toSvg [ SvgA.class "w-64 h-64" ]) |> Result.withDefault (Html.text texts.errorGeneratingQR) diff --git a/modules/webapp/src/main/elm/Comp/ShareView.elm b/modules/webapp/src/main/elm/Comp/ShareView.elm index f7d4962f..dbb33752 100644 --- a/modules/webapp/src/main/elm/Comp/ShareView.elm +++ b/modules/webapp/src/main/elm/Comp/ShareView.elm @@ -14,6 +14,7 @@ import Html.Attributes exposing (..) import Messages.Comp.ShareView exposing (Texts) import QRCode import Styles as S +import Svg.Attributes as SvgA type alias ViewSettings = @@ -178,7 +179,7 @@ viewDisabled cfg texts share = qrCodeView : Texts -> String -> Html msg qrCodeView texts message = - QRCode.encode message - |> Result.map QRCode.toSvg + QRCode.fromString message + |> Result.map (QRCode.toSvg [ SvgA.class "w-64 h-64" ]) |> Result.withDefault (Html.text texts.qrCodeError) diff --git a/modules/webapp/src/main/elm/Comp/SourceManage.elm b/modules/webapp/src/main/elm/Comp/SourceManage.elm index 5ce42136..629ac18e 100644 --- a/modules/webapp/src/main/elm/Comp/SourceManage.elm +++ b/modules/webapp/src/main/elm/Comp/SourceManage.elm @@ -32,6 +32,7 @@ import Messages.Comp.SourceManage exposing (Texts) import Ports import QRCode import Styles as S +import Svg.Attributes as SvgA type alias Model = @@ -226,8 +227,8 @@ update flags msg model = qrCodeView : Texts -> String -> Html msg qrCodeView texts message = - QRCode.encode message - |> Result.map QRCode.toSvg + QRCode.fromString message + |> Result.map (QRCode.toSvg [ SvgA.class "w-64 h-64" ]) |> Result.withDefault (Html.text texts.errorGeneratingQR) diff --git a/modules/webapp/src/main/elm/Comp/UrlCopy.elm b/modules/webapp/src/main/elm/Comp/UrlCopy.elm new file mode 100644 index 00000000..2a6f048b --- /dev/null +++ b/modules/webapp/src/main/elm/Comp/UrlCopy.elm @@ -0,0 +1,95 @@ +module Comp.UrlCopy exposing (..) + +import Comp.Basic as B +import Html exposing (..) +import Html.Attributes exposing (..) +import Html.Events exposing (onClick) +import Ports +import QRCode +import Styles as S +import Svg.Attributes as SvgA + + +type Msg + = Print String + + +update : Msg -> Cmd msg +update msg = + case msg of + Print id -> + Ports.printElement id + + +initCopy : String -> Cmd msg +initCopy data = + Ports.initClipboard <| clipboardData data + + +clipboardData : String -> ( String, String ) +clipboardData data = + ( "share-url", "#button-share-url" ) + + +view : String -> Html Msg +view data = + let + ( elementId, buttonId ) = + clipboardData data + + btnId = + String.dropLeft 1 buttonId + + printId = + "print-qr-code" + in + div [ class "flex flex-col items-center" ] + [ div + [ class S.border + , class S.qrCode + , id printId + ] + [ qrCodeView data + ] + , div + [ class "flex w-64" + ] + [ p + [ id elementId + , class "font-mono text-xs py-2 mx-auto break-all" + ] + [ text data + ] + ] + , div [ class "flex flex-row mt-1 space-x-2 items-center w-full" ] + [ B.primaryButton + { label = "Copy" + , icon = "fa fa-copy" + , handler = href "#" + , disabled = False + , attrs = + [ id btnId + , class "flex flex-grow items-center justify-center" + , attribute "data-clipboard-target" ("#" ++ elementId) + ] + } + , B.primaryButton + { label = "Print" + , icon = "fa fa-print" + , handler = onClick (Print printId) + , disabled = False + , attrs = + [ href "#" + , class "flex flex-grow items-center justify-center" + ] + } + ] + ] + + +qrCodeView : String -> Html msg +qrCodeView message = + QRCode.fromString message + |> Result.map (QRCode.toSvg [ SvgA.class "w-64 h-64" ]) + |> Result.withDefault + (text "Error generating QR code") diff --git a/modules/webapp/src/main/elm/Messages/Page/Share.elm b/modules/webapp/src/main/elm/Messages/Page/Share.elm index f6b73d31..20884777 100644 --- a/modules/webapp/src/main/elm/Messages/Page/Share.elm +++ b/modules/webapp/src/main/elm/Messages/Page/Share.elm @@ -7,7 +7,9 @@ module Messages.Page.Share exposing (..) +import Http import Messages.Basics +import Messages.Comp.HttpError import Messages.Comp.ItemCardList import Messages.Comp.SearchMenu import Messages.Comp.SharePasswordForm @@ -18,6 +20,8 @@ type alias Texts = , basics : Messages.Basics.Texts , itemCardList : Messages.Comp.ItemCardList.Texts , passwordForm : Messages.Comp.SharePasswordForm.Texts + , httpError : Http.Error -> String + , authFailed : String } @@ -27,6 +31,8 @@ gb = , basics = Messages.Basics.gb , itemCardList = Messages.Comp.ItemCardList.gb , passwordForm = Messages.Comp.SharePasswordForm.gb + , authFailed = "This share does not exist." + , httpError = Messages.Comp.HttpError.gb } @@ -36,4 +42,6 @@ de = , basics = Messages.Basics.de , itemCardList = Messages.Comp.ItemCardList.de , passwordForm = Messages.Comp.SharePasswordForm.de + , authFailed = "Diese Freigabe existiert nicht." + , httpError = Messages.Comp.HttpError.de } diff --git a/modules/webapp/src/main/elm/Messages/Page/ShareDetail.elm b/modules/webapp/src/main/elm/Messages/Page/ShareDetail.elm index a9392d9a..70397991 100644 --- a/modules/webapp/src/main/elm/Messages/Page/ShareDetail.elm +++ b/modules/webapp/src/main/elm/Messages/Page/ShareDetail.elm @@ -1,28 +1,54 @@ module Messages.Page.ShareDetail exposing (..) +import Data.Fields exposing (Field) +import Http +import Messages.Basics +import Messages.Comp.HttpError import Messages.Comp.SharePasswordForm +import Messages.Data.Fields import Messages.DateFormat import Messages.UiLanguage exposing (UiLanguage(..)) type alias Texts = { passwordForm : Messages.Comp.SharePasswordForm.Texts + , basics : Messages.Basics.Texts + , field : Field -> String , formatDateLong : Int -> String , formatDateShort : Int -> String + , httpError : Http.Error -> String + , authFailed : String + , tagsAndFields : String + , noName : String + , unconfirmed : String } gb : Texts gb = { passwordForm = Messages.Comp.SharePasswordForm.gb + , basics = Messages.Basics.gb + , field = Messages.Data.Fields.gb , formatDateLong = Messages.DateFormat.formatDateLong English , formatDateShort = Messages.DateFormat.formatDateShort English + , authFailed = "This share does not exist." + , httpError = Messages.Comp.HttpError.gb + , tagsAndFields = "Tags & Fields" + , noName = "No name" + , unconfirmed = "Unconfirmed" } de : Texts de = { passwordForm = Messages.Comp.SharePasswordForm.de + , basics = Messages.Basics.de + , field = Messages.Data.Fields.de , formatDateLong = Messages.DateFormat.formatDateLong German , formatDateShort = Messages.DateFormat.formatDateShort German + , authFailed = "Diese Freigabe existiert nicht." + , httpError = Messages.Comp.HttpError.de + , tagsAndFields = "Tags & Felder" + , noName = "Kein Name" + , unconfirmed = "Nicht bestätigt" } diff --git a/modules/webapp/src/main/elm/Page.elm b/modules/webapp/src/main/elm/Page.elm index 2f42ee2e..a14e5295 100644 --- a/modules/webapp/src/main/elm/Page.elm +++ b/modules/webapp/src/main/elm/Page.elm @@ -116,6 +116,9 @@ hasSidebar page = SharePage _ -> True + ShareDetailPage _ _ -> + True + _ -> isSecured page diff --git a/modules/webapp/src/main/elm/Page/Share/Data.elm b/modules/webapp/src/main/elm/Page/Share/Data.elm index 4be43360..505f4908 100644 --- a/modules/webapp/src/main/elm/Page/Share/Data.elm +++ b/modules/webapp/src/main/elm/Page/Share/Data.elm @@ -5,7 +5,7 @@ -} -module Page.Share.Data exposing (Mode(..), Model, Msg(..), PageError(..), init) +module Page.Share.Data exposing (Mode(..), Model, Msg(..), PageError(..), init, initCmd) import Api import Api.Model.ItemLightList exposing (ItemLightList) @@ -41,6 +41,7 @@ type alias Model = , powerSearchInput : Comp.PowerSearchInput.Model , searchInProgress : Bool , itemListModel : Comp.ItemCardList.Model + , initialized : Bool } @@ -54,17 +55,27 @@ emptyModel flags = , powerSearchInput = Comp.PowerSearchInput.init , searchInProgress = False , itemListModel = Comp.ItemCardList.init + , initialized = False } init : Maybe String -> Flags -> ( Model, Cmd Msg ) init shareId flags = + let + em = + emptyModel flags + in case shareId of Just id -> - ( emptyModel flags, Api.verifyShare flags (ShareSecret id Nothing) VerifyResp ) + ( { em | initialized = True }, Api.verifyShare flags (ShareSecret id Nothing) VerifyResp ) Nothing -> - ( emptyModel flags, Cmd.none ) + ( em, Cmd.none ) + + +initCmd : String -> Flags -> Cmd Msg +initCmd shareId flags = + Api.verifyShare flags (ShareSecret shareId Nothing) VerifyResp type Msg diff --git a/modules/webapp/src/main/elm/Page/Share/View.elm b/modules/webapp/src/main/elm/Page/Share/View.elm index 49bf8803..924b4631 100644 --- a/modules/webapp/src/main/elm/Page/Share/View.elm +++ b/modules/webapp/src/main/elm/Page/Share/View.elm @@ -42,13 +42,18 @@ viewContent texts flags versionInfo uiSettings shareId model = ModeInitial -> div [ id "content" - , class "h-full w-full flex flex-col text-5xl" + , class "h-full w-full flex flex-col" , class S.content ] - [ B.loadingDimmer - { active = model.pageError == PageErrorNone - , label = "" - } + [ div [ class " text-5xl" ] + [ B.loadingDimmer + { active = model.pageError == PageErrorNone + , label = "" + } + ] + , div [ class "my-4 text-lg" ] + [ errorMessage texts model + ] ] ModePassword -> @@ -76,10 +81,28 @@ mainContent texts flags settings shareId model = [ text <| Maybe.withDefault "" model.verifyResult.name ] , Menubar.view texts model + , errorMessage texts model , Results.view texts settings flags shareId model ] +errorMessage : Texts -> Model -> Html Msg +errorMessage texts model = + case model.pageError of + PageErrorNone -> + span [ class "hidden" ] [] + + PageErrorAuthFail -> + div [ class S.errorMessage ] + [ text texts.authFailed + ] + + PageErrorHttp err -> + div [ class S.errorMessage ] + [ text (texts.httpError err) + ] + + passwordContent : Texts -> Flags -> VersionInfo -> Model -> Html Msg passwordContent texts flags versionInfo model = div diff --git a/modules/webapp/src/main/elm/Page/ShareDetail/Data.elm b/modules/webapp/src/main/elm/Page/ShareDetail/Data.elm index 08c412bd..0f262dab 100644 --- a/modules/webapp/src/main/elm/Page/ShareDetail/Data.elm +++ b/modules/webapp/src/main/elm/Page/ShareDetail/Data.elm @@ -5,6 +5,7 @@ import Api.Model.ItemDetail exposing (ItemDetail) import Api.Model.ShareSecret exposing (ShareSecret) import Api.Model.ShareVerifyResult exposing (ShareVerifyResult) import Comp.SharePasswordForm +import Comp.UrlCopy import Data.Flags exposing (Flags) import Http @@ -27,6 +28,8 @@ type alias Model = , passwordModel : Comp.SharePasswordForm.Model , viewMode : ViewMode , pageError : PageError + , attachMenuOpen : Bool + , visibleAttach : Int } @@ -34,6 +37,9 @@ type Msg = VerifyResp (Result Http.Error ShareVerifyResult) | GetItemResp (Result Http.Error ItemDetail) | PasswordMsg Comp.SharePasswordForm.Msg + | SelectActiveAttachment Int + | ToggleSelectAttach + | UrlCopyMsg Comp.UrlCopy.Msg emptyModel : ViewMode -> Model @@ -43,14 +49,18 @@ emptyModel vm = , passwordModel = Comp.SharePasswordForm.init , viewMode = vm , pageError = PageErrorNone + , attachMenuOpen = False + , visibleAttach = 0 } init : Maybe ( String, String ) -> Flags -> ( Model, Cmd Msg ) init mids flags = case mids of - Just ( shareId, _ ) -> - ( emptyModel ViewLoading, Api.verifyShare flags (ShareSecret shareId Nothing) VerifyResp ) + Just ( shareId, itemId ) -> + ( emptyModel ViewLoading + , Api.verifyShare flags (ShareSecret shareId Nothing) VerifyResp + ) Nothing -> ( emptyModel ViewLoading, Cmd.none ) diff --git a/modules/webapp/src/main/elm/Page/ShareDetail/Update.elm b/modules/webapp/src/main/elm/Page/ShareDetail/Update.elm index 40aa5757..93ddabe2 100644 --- a/modules/webapp/src/main/elm/Page/ShareDetail/Update.elm +++ b/modules/webapp/src/main/elm/Page/ShareDetail/Update.elm @@ -2,7 +2,9 @@ module Page.ShareDetail.Update exposing (update) import Api import Comp.SharePasswordForm +import Comp.UrlCopy import Data.Flags exposing (Flags) +import Page exposing (Page(..)) import Page.ShareDetail.Data exposing (..) @@ -36,12 +38,16 @@ update shareId itemId flags msg model = ( { model | pageError = PageErrorHttp err }, Cmd.none ) GetItemResp (Ok item) -> + let + url = + Page.pageToString (ShareDetailPage shareId itemId) + in ( { model | item = item , viewMode = ViewNormal , pageError = PageErrorNone } - , Cmd.none + , Comp.UrlCopy.initCopy url ) GetItemResp (Err err) -> @@ -62,3 +68,21 @@ update shareId itemId flags msg model = Nothing -> ( { model | passwordModel = m }, Cmd.map PasswordMsg c ) + + SelectActiveAttachment pos -> + ( { model + | visibleAttach = pos + , attachMenuOpen = False + } + , Cmd.none + ) + + ToggleSelectAttach -> + ( { model | attachMenuOpen = not model.attachMenuOpen }, Cmd.none ) + + UrlCopyMsg lm -> + let + cmd = + Comp.UrlCopy.update lm + in + ( model, cmd ) diff --git a/modules/webapp/src/main/elm/Page/ShareDetail/View.elm b/modules/webapp/src/main/elm/Page/ShareDetail/View.elm index 7d06fc65..56ef7cbb 100644 --- a/modules/webapp/src/main/elm/Page/ShareDetail/View.elm +++ b/modules/webapp/src/main/elm/Page/ShareDetail/View.elm @@ -1,30 +1,41 @@ module Page.ShareDetail.View exposing (viewContent, viewSidebar) import Api +import Api.Model.Attachment exposing (Attachment) import Api.Model.VersionInfo exposing (VersionInfo) import Comp.Basic as B import Comp.SharePasswordForm +import Comp.UrlCopy +import Data.Fields import Data.Flags exposing (Flags) import Data.Icons as Icons import Data.ItemTemplate as IT exposing (ItemTemplate) import Data.UiSettings exposing (UiSettings) import Html exposing (..) import Html.Attributes exposing (..) +import Html.Events exposing (onClick) import Messages.Page.ShareDetail exposing (Texts) import Page exposing (Page(..)) import Page.ShareDetail.Data exposing (..) import Styles as S import Util.CustomField import Util.Item +import Util.List +import Util.Size +import Util.String -viewSidebar : Texts -> Bool -> Flags -> UiSettings -> Model -> Html Msg -viewSidebar texts visible flags settings model = +viewSidebar : Texts -> Bool -> Flags -> UiSettings -> String -> String -> Model -> Html Msg +viewSidebar texts visible flags settings shareId itemId model = div [ id "sidebar" - , class "hidden" + , classList [ ( "hidden", not visible ) ] + , class S.sidebar + ] + [ div [ class "pt-2" ] + [ itemData texts flags model shareId itemId + ] ] - [] viewContent : Texts -> Flags -> UiSettings -> VersionInfo -> String -> String -> Model -> Html Msg @@ -36,10 +47,15 @@ viewContent texts flags uiSettings versionInfo shareId itemId model = , class "h-full w-full flex flex-col text-5xl" , class S.content ] - [ B.loadingDimmer - { active = model.pageError == PageErrorNone - , label = "" - } + [ div [ class "text-5xl" ] + [ B.loadingDimmer + { active = model.pageError == PageErrorNone + , label = "" + } + ] + , div [ class "my-4 text-lg" ] + [ errorMessage texts model + ] ] ViewPassword -> @@ -60,18 +76,18 @@ mainContent texts flags settings shareId model = , class S.content ] [ itemHead texts shareId model - , div [ class "flex flex-col sm:flex-row sm:space-x-4 relative h-full" ] - [ itemData texts model - , itemPreview texts flags settings model + , errorMessage texts model + , div [ class "relative h-full" ] + [ itemPreview texts flags settings model ] ] -itemData : Texts -> Model -> Html Msg -itemData texts model = +itemData : Texts -> Flags -> Model -> String -> String -> Html Msg +itemData texts flags model shareId itemId = let boxStyle = - "mb-4 sm:mb-6 max-w-sm" + "mb-4 sm:mb-6" headerStyle = "py-2 bg-blue-50 hover:bg-blue-100 dark:bg-bluegray-700 dark:hover:bg-opacity-100 dark:hover:bg-bluegray-600 text-lg font-medium rounded-lg" @@ -92,11 +108,11 @@ itemData texts model = ] Nothing in - div [ class "flex flex-col pr-2 sm:w-1/3" ] + div [ class "flex flex-col" ] [ div [ class boxStyle ] [ div [ class headerStyle ] [ Icons.dateIcon2 "mr-2 ml-2" - , text "Date" + , text (texts.field Data.Fields.Date) ] , div [ class "text-lg ml-2" ] [ Util.Item.toItemLight model.item @@ -104,10 +120,24 @@ itemData texts model = |> text ] ] + , div + [ class boxStyle + , classList [ ( "hidden", model.item.dueDate == Nothing ) ] + ] + [ div [ class headerStyle ] + [ Icons.dueDateIcon2 "mr-2 ml-2" + , text (texts.field Data.Fields.DueDate) + ] + , div [ class "text-lg ml-2" ] + [ Util.Item.toItemLight model.item + |> IT.render IT.dueDateLong (templateCtx texts) + |> text + ] + ] , div [ class boxStyle ] [ div [ class headerStyle ] [ Icons.tagsIcon2 "mr-2 ml-2" - , text "Tags & Fields" + , text texts.tagsAndFields ] , div [ class "flex flex-row items-center flex-wrap font-medium my-1" ] (List.map showTag model.item.tags ++ List.map showField model.item.customfields) @@ -115,7 +145,7 @@ itemData texts model = , div [ class boxStyle ] [ div [ class headerStyle ] [ Icons.correspondentIcon2 "mr-2 ml-2" - , text "Correspondent" + , text texts.basics.correspondent ] , div [ class "text-lg ml-2" ] [ Util.Item.toItemLight model.item @@ -126,7 +156,7 @@ itemData texts model = , div [ class boxStyle ] [ div [ class headerStyle ] [ Icons.concernedIcon2 "mr-2 ml-2" - , text "Concerning" + , text texts.basics.concerning ] , div [ class "text-lg ml-2" ] [ Util.Item.toItemLight model.item @@ -134,40 +164,110 @@ itemData texts model = |> text ] ] + , div [ class boxStyle ] + [ div [ class headerStyle ] + [ i [ class "fa fa-copy mr-2 ml-2" ] [] + , text "Copy URL" + ] + , div [ class "flex flex-col items-center py-2" ] + [ Html.map UrlCopyMsg + (Comp.UrlCopy.view + (flags.config.baseUrl + ++ Page.pageToString + (ShareDetailPage shareId itemId) + ) + ) + ] + ] ] itemPreview : Texts -> Flags -> UiSettings -> Model -> Html Msg itemPreview texts flags settings model = let - id = - List.head model.item.attachments - |> Maybe.map .id - |> Maybe.withDefault "" + attach = + Util.List.get model.item.attachments model.visibleAttach + |> Maybe.withDefault Api.Model.Attachment.empty + + attachName = + Maybe.withDefault (texts.noName ++ ".pdf") attach.name in div - [ class "flex flex-grow" - , style "min-height" "500px" + [ class "flex flex-grow flex-col h-full border-t dark:border-bluegray-600" ] - [ embed - [ src (Data.UiSettings.pdfUrl settings flags (Api.shareFileURL id)) - , class " h-full w-full mx-0 py-0" + [ div [ class "flex flex-col sm:flex-row items-center py-1 px-1 border-l border-r dark:border-bluegray-600" ] + [ div [ class "text-base font-bold flex-grow w-full text-center sm:text-left break-all" ] + [ text attachName + , text " (" + , text (Util.Size.bytesReadable Util.Size.B (toFloat attach.size)) + , text ")" + ] + , div [ class "flex flex-row space-x-2" ] + [ B.secondaryBasicButton + { label = "" + , icon = "fa fa-eye" + , disabled = False + , handler = href (Api.shareFileURL attach.id) + , attrs = + [ target "_new" + ] + } + , B.secondaryBasicButton + { label = "" + , icon = "fa fa-download" + , disabled = False + , handler = href (Api.shareFileURL attach.id) + , attrs = + [ download attachName + ] + } + , B.secondaryBasicButton + { label = "" + , icon = "fa fa-ellipsis-v" + , disabled = False + , handler = onClick ToggleSelectAttach + , attrs = + [ href "#" + , classList [ ( "hidden", List.length model.item.attachments <= 1 ) ] + ] + } + ] + ] + , attachmentSelect texts model + , div + [ class "flex w-full h-full mb-4 border-b border-l border-r dark:border-bluegray-600" + , style "min-height" "500px" + ] + [ embed + [ src (Data.UiSettings.pdfUrl settings flags (Api.shareFileURL attach.id)) + , class " h-full w-full mx-0 py-0" + ] + [] ] - [] ] itemHead : Texts -> String -> Model -> Html Msg itemHead texts shareId model = - div [ class "flex flex-col sm:flex-row" ] + div [ class "flex flex-col sm:flex-row mt-1" ] [ div [ class "flex flex-grow items-center" ] - [ h1 [ class S.header1 ] + [ h1 + [ class S.header1 + , class "items-center flex flex-row" + ] [ text model.item.name + , span + [ classList [ ( "hidden", model.item.state /= "created" ) ] + , class S.blueBasicLabel + , class "inline ml-4 text-sm" + ] + [ text texts.unconfirmed + ] ] ] , div [ class "flex flex-row items-center justify-end mb-2 sm:mb-0" ] [ B.secondaryBasicButton - { label = "Close" + { label = texts.basics.back , icon = "fa fa-times" , disabled = False , handler = Page.href (SharePage shareId) @@ -189,6 +289,83 @@ passwordContent texts flags versionInfo model = ] +attachmentSelect : Texts -> Model -> Html Msg +attachmentSelect texts model = + div + [ class "flex flex-row border-l border-t border-r px-2 py-2 dark:border-bluegray-600 " + , class "overflow-x-auto overflow-y-none" + , classList + [ ( "hidden", not model.attachMenuOpen ) + ] + ] + (List.indexedMap (menuItem texts model) model.item.attachments) + + +menuItem : Texts -> Model -> Int -> Attachment -> Html Msg +menuItem texts model pos attach = + let + iconClass = + "fa fa-circle ml-1" + + visible = + model.visibleAttach == pos + in + a + [ classList <| + [ ( "border-blue-500 dark:border-lightblue-500", pos == 0 ) + , ( "dark:border-bluegray-600", pos /= 0 ) + ] + , class "flex flex-col relative border rounded px-1 py-1 mr-2" + , class " hover:shadow dark:hover:border-bluegray-500" + , href "#" + , onClick (SelectActiveAttachment pos) + ] + [ div + [ classList + [ ( "hidden", not visible ) + ] + , class "absolute right-1 top-1 text-blue-400 dark:text-lightblue-400 text-xl" + ] + [ i [ class iconClass ] [] + ] + , div [ class "flex-grow" ] + [ img + [ src (Api.shareAttachmentPreviewURL attach.id) + , class "block w-20 mx-auto" + ] + [] + ] + , div [ class "mt-1 text-sm break-all w-28 text-center" ] + [ Maybe.map (Util.String.ellipsis 36) attach.name + |> Maybe.withDefault texts.noName + |> text + ] + ] + + +errorMessage : Texts -> Model -> Html Msg +errorMessage texts model = + case model.pageError of + PageErrorNone -> + span [ class "hidden" ] [] + + PageErrorAuthFail -> + div + [ class S.errorMessage + , class "my-4" + ] + [ text texts.authFailed + ] + + PageErrorHttp err -> + div + [ class S.errorMessage + , class "my-4" + ] + [ text (texts.httpError err) + ] + + templateCtx : Texts -> IT.TemplateContext templateCtx texts = { dateFormatLong = texts.formatDateLong diff --git a/modules/webapp/src/main/elm/Styles.elm b/modules/webapp/src/main/elm/Styles.elm index 2c8167dd..645d2324 100644 --- a/modules/webapp/src/main/elm/Styles.elm +++ b/modules/webapp/src/main/elm/Styles.elm @@ -10,7 +10,7 @@ module Styles exposing (..) sidebar : String sidebar = - " flex flex-col flex-none md:w-80 w-full min-h-max px-2 dark:text-gray-200 shadow overflow-y-auto h-full transition-opacity transition-duration-200 scrollbar-thin scrollbar-light-sidebar dark:scrollbar-dark-sidebar" + " flex flex-col flex-none md:w-80 w-full min-h-max px-2 dark:text-gray-200 overflow-y-auto h-full transition-opacity transition-duration-200 scrollbar-thin scrollbar-light-sidebar dark:scrollbar-dark-sidebar" sidebarBg : String @@ -100,6 +100,11 @@ basicLabel = " label border-gray-600 text-gray-600 dark:border-bluegray-300 dark:text-bluegray-300 " +blueBasicLabel : String +blueBasicLabel = + " label border-blue-500 text-blue-500 dark:border-lightblue-200 dark:text-lightblue-200 " + + --- Primary Button diff --git a/modules/webapp/src/main/webjar/docspell.js b/modules/webapp/src/main/webjar/docspell.js index a5518163..ef4ef03c 100644 --- a/modules/webapp/src/main/webjar/docspell.js +++ b/modules/webapp/src/main/webjar/docspell.js @@ -127,8 +127,10 @@ elmApp.ports.printElement.subscribe(function(id) { w.document.write(''); } w.document.write(''); + w.document.write('

'); + w.document.write(''); w.document.write(''); } } From fe77f7245a5f54038bbc2b91ae3b7f715a42b85c Mon Sep 17 00:00:00 2001 From: eikek Date: Thu, 7 Oct 2021 22:11:16 +0200 Subject: [PATCH 58/75] Fix navbar link for anonymous --- modules/webapp/src/main/elm/App/View2.elm | 27 +++++++++++++++++------ 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/modules/webapp/src/main/elm/App/View2.elm b/modules/webapp/src/main/elm/App/View2.elm index 6e5652a5..75159ed1 100644 --- a/modules/webapp/src/main/elm/App/View2.elm +++ b/modules/webapp/src/main/elm/App/View2.elm @@ -70,7 +70,7 @@ topNavUser auth model = , baseStyle = "font-bold inline-flex items-center px-4 py-2" , activeStyle = "hover:bg-blue-200 dark:hover:bg-bluegray-800 w-12" } - , headerNavItem model + , headerNavItem True model , div [ class "flex flex-grow justify-end" ] [ userMenu texts.app auth model , dataMenu texts.app auth model @@ -93,7 +93,7 @@ topNavAnon model = , baseStyle = "font-bold inline-flex items-center px-4 py-2" , activeStyle = "hover:bg-blue-200 dark:hover:bg-bluegray-800 w-12" } - , headerNavItem model + , headerNavItem False model , div [ class "flex flex-grow justify-end" ] [ langMenu model , a @@ -107,11 +107,24 @@ topNavAnon model = ] -headerNavItem : Model -> Html Msg -headerNavItem model = - a - [ class "inline-flex font-bold hover:bg-blue-200 dark:hover:bg-bluegray-800 items-center px-4" - , Page.href HomePage +headerNavItem : Bool -> Model -> Html Msg +headerNavItem authenticated model = + let + tag = + if authenticated then + a + + else + div + in + tag + [ class "inline-flex font-bold items-center px-4" + , classList [ ( "hover:bg-blue-200 dark:hover:bg-bluegray-800", authenticated ) ] + , if authenticated then + Page.href HomePage + + else + href "#" ] [ img [ src (model.flags.config.docspellAssetPath ++ "/img/logo-96.png") From 40aa2d41025b5218a6a8e5abd762953ee72802f3 Mon Sep 17 00:00:00 2001 From: eikek Date: Thu, 7 Oct 2021 23:51:09 +0200 Subject: [PATCH 59/75] Use powersearch input element in share form --- modules/webapp/src/main/elm/App/Update.elm | 4 +- .../elm/Comp/ItemDetail/SingleAttachment.elm | 9 +- .../src/main/elm/Comp/PowerSearchInput.elm | 12 +++ .../webapp/src/main/elm/Comp/PublishItems.elm | 12 ++- .../webapp/src/main/elm/Comp/ShareForm.elm | 89 +++++++++++++------ .../webapp/src/main/elm/Comp/ShareManage.elm | 54 ++++++----- .../elm/Page/CollectiveSettings/Update.elm | 22 +++-- 7 files changed, 136 insertions(+), 66 deletions(-) diff --git a/modules/webapp/src/main/elm/App/Update.elm b/modules/webapp/src/main/elm/App/Update.elm index 66002c92..de687444 100644 --- a/modules/webapp/src/main/elm/App/Update.elm +++ b/modules/webapp/src/main/elm/App/Update.elm @@ -478,14 +478,14 @@ updateUserSettings lmsg model = updateCollSettings : Page.CollectiveSettings.Data.Msg -> Model -> ( Model, Cmd Msg, Sub Msg ) updateCollSettings lmsg model = let - ( lm, lc ) = + ( lm, lc, ls ) = Page.CollectiveSettings.Update.update model.flags lmsg model.collSettingsModel in ( { model | collSettingsModel = lm } , Cmd.map CollSettingsMsg lc - , Sub.none + , Sub.map CollSettingsMsg ls ) diff --git a/modules/webapp/src/main/elm/Comp/ItemDetail/SingleAttachment.elm b/modules/webapp/src/main/elm/Comp/ItemDetail/SingleAttachment.elm index 52f935f9..56d63635 100644 --- a/modules/webapp/src/main/elm/Comp/ItemDetail/SingleAttachment.elm +++ b/modules/webapp/src/main/elm/Comp/ItemDetail/SingleAttachment.elm @@ -153,6 +153,7 @@ attachHeader texts settings model _ attach = [ href "#" , onClick ToggleAttachMenu , class S.secondaryBasicButton + , class "mr-2" , classList [ ( "bg-gray-200 dark:bg-bluegray-600 ", model.attachMenuOpen ) , ( "hidden", not multiAttach ) @@ -160,12 +161,16 @@ attachHeader texts settings model _ attach = , ( "hidden sm:block", multiAttach && not mobile ) ] ] - [ i [ class "fa fa-images font-thin" ] [] + [ if model.attachMenuOpen then + i [ class "fa fa-chevron-up" ] [] + + else + i [ class "fa fa-chevron-down" ] [] ] in div [ class "flex flex-col sm:flex-row items-center w-full" ] [ attachSelectToggle False - , div [ class "ml-2 text-base font-bold flex-grow w-full text-center sm:text-left break-all" ] + , div [ class "text-base font-bold flex-grow w-full text-center sm:text-left break-all" ] [ text attachName , text " (" , text (Util.Size.bytesReadable Util.Size.B (toFloat attach.size)) diff --git a/modules/webapp/src/main/elm/Comp/PowerSearchInput.elm b/modules/webapp/src/main/elm/Comp/PowerSearchInput.elm index e06ef8c9..1036452d 100644 --- a/modules/webapp/src/main/elm/Comp/PowerSearchInput.elm +++ b/modules/webapp/src/main/elm/Comp/PowerSearchInput.elm @@ -11,6 +11,8 @@ module Comp.PowerSearchInput exposing , Msg , ViewSettings , init + , isValid + , setSearchString , update , viewInput , viewResult @@ -43,6 +45,11 @@ init = } +isValid : Model -> Bool +isValid model = + model.input /= Nothing && model.result.success + + type Msg = SetSearch String | KeyUpMsg (Maybe KeyCode) @@ -63,6 +70,11 @@ type alias Result = } +setSearchString : String -> Msg +setSearchString q = + SetSearch q + + --- Update diff --git a/modules/webapp/src/main/elm/Comp/PublishItems.elm b/modules/webapp/src/main/elm/Comp/PublishItems.elm index 2a491f15..a098d29a 100644 --- a/modules/webapp/src/main/elm/Comp/PublishItems.elm +++ b/modules/webapp/src/main/elm/Comp/PublishItems.elm @@ -108,6 +108,7 @@ type Outcome type alias UpdateResult = { model : Model , cmd : Cmd Msg + , sub : Sub Msg , outcome : Outcome } @@ -118,16 +119,18 @@ update flags msg model = CancelPublish -> { model = model , cmd = Cmd.none + , sub = Sub.none , outcome = OutcomeDone } FormMsg lm -> let - ( fm, fc ) = + ( fm, fc, fs ) = Comp.ShareForm.update flags lm model.formModel in { model = { model | formModel = fm } , cmd = Cmd.map FormMsg fc + , sub = Sub.map FormMsg fs , outcome = OutcomeInProgress } @@ -136,12 +139,14 @@ update flags msg model = Just ( _, data ) -> { model = { model | loading = True } , cmd = Api.addShare flags data PublishResp + , sub = Sub.none , outcome = OutcomeInProgress } Nothing -> { model = { model | formError = FormErrorInvalid } , cmd = Cmd.none + , sub = Sub.none , outcome = OutcomeInProgress } @@ -149,18 +154,21 @@ update flags msg model = if res.success then { model = model , cmd = Api.getShare flags res.id GetShareResp + , sub = Sub.none , outcome = OutcomeInProgress } else { model = { model | formError = FormErrorSubmit res.message, loading = False } , cmd = Cmd.none + , sub = Sub.none , outcome = OutcomeInProgress } PublishResp (Err err) -> { model = { model | formError = FormErrorHttp err, loading = False } , cmd = Cmd.none + , sub = Sub.none , outcome = OutcomeInProgress } @@ -172,12 +180,14 @@ update flags msg model = , viewMode = ViewModeInfo share } , cmd = Ports.initClipboard (Comp.ShareView.clipboardData share) + , sub = Sub.none , outcome = OutcomeInProgress } GetShareResp (Err err) -> { model = { model | formError = FormErrorHttp err, loading = False } , cmd = Cmd.none + , sub = Sub.none , outcome = OutcomeInProgress } diff --git a/modules/webapp/src/main/elm/Comp/ShareForm.elm b/modules/webapp/src/main/elm/Comp/ShareForm.elm index d07e74a4..ee08a7d8 100644 --- a/modules/webapp/src/main/elm/Comp/ShareForm.elm +++ b/modules/webapp/src/main/elm/Comp/ShareForm.elm @@ -12,6 +12,7 @@ import Api.Model.ShareDetail exposing (ShareDetail) import Comp.Basic as B import Comp.DatePicker import Comp.PasswordInput +import Comp.PowerSearchInput import Data.Flags exposing (Flags) import DatePicker exposing (DatePicker) import Html exposing (..) @@ -25,7 +26,7 @@ import Util.Maybe type alias Model = { share : ShareDetail , name : Maybe String - , query : String + , queryModel : Comp.PowerSearchInput.Model , enabled : Bool , passwordModel : Comp.PasswordInput.Model , password : Maybe String @@ -41,10 +42,15 @@ initQuery q = let ( dp, dpc ) = Comp.DatePicker.init + + res = + Comp.PowerSearchInput.update + (Comp.PowerSearchInput.setSearchString q) + Comp.PowerSearchInput.init in ( { share = Api.Model.ShareDetail.empty , name = Nothing - , query = q + , queryModel = res.model , enabled = True , passwordModel = Comp.PasswordInput.init , password = Nothing @@ -53,7 +59,10 @@ initQuery q = , untilModel = dp , untilDate = Nothing } - , Cmd.map UntilDateMsg dpc + , Cmd.batch + [ Cmd.map UntilDateMsg dpc + , Cmd.map QueryMsg res.cmd + ] ) @@ -64,17 +73,19 @@ init = isValid : Model -> Bool isValid model = - model.query /= "" && model.untilDate /= Nothing + Comp.PowerSearchInput.isValid model.queryModel + && model.untilDate + /= Nothing type Msg = SetName String - | SetQuery String | SetShare ShareDetail | ToggleEnabled | ToggleClearPassword | PasswordMsg Comp.PasswordInput.Msg | UntilDateMsg Comp.DatePicker.Msg + | QueryMsg Comp.PowerSearchInput.Msg setShare : ShareDetail -> Msg @@ -88,7 +99,9 @@ getShare model = Just ( model.share.id , { name = model.name - , query = model.query + , query = + model.queryModel.input + |> Maybe.withDefault "" , enabled = model.enabled , password = model.password , removePassword = @@ -105,14 +118,20 @@ getShare model = Nothing -update : Flags -> Msg -> Model -> ( Model, Cmd Msg ) +update : Flags -> Msg -> Model -> ( Model, Cmd Msg, Sub Msg ) update _ msg model = case msg of SetShare s -> + let + res = + Comp.PowerSearchInput.update + (Comp.PowerSearchInput.setSearchString s.query) + model.queryModel + in ( { model | share = s , name = s.name - , query = s.query + , queryModel = res.model , enabled = s.enabled , password = Nothing , passwordSet = s.password @@ -124,20 +143,18 @@ update _ msg model = else Nothing } - , Cmd.none + , Cmd.map QueryMsg res.cmd + , Sub.map QueryMsg res.subs ) SetName n -> - ( { model | name = Util.Maybe.fromString n }, Cmd.none ) - - SetQuery n -> - ( { model | query = n }, Cmd.none ) + ( { model | name = Util.Maybe.fromString n }, Cmd.none, Sub.none ) ToggleEnabled -> - ( { model | enabled = not model.enabled }, Cmd.none ) + ( { model | enabled = not model.enabled }, Cmd.none, Sub.none ) ToggleClearPassword -> - ( { model | clearPassword = not model.clearPassword }, Cmd.none ) + ( { model | clearPassword = not model.clearPassword }, Cmd.none, Sub.none ) PasswordMsg lm -> let @@ -149,6 +166,7 @@ update _ msg model = , password = pw } , Cmd.none + , Sub.none ) UntilDateMsg lm -> @@ -166,6 +184,17 @@ update _ msg model = in ( { model | untilModel = dp, untilDate = nextDate } , Cmd.none + , Sub.none + ) + + QueryMsg lm -> + let + res = + Comp.PowerSearchInput.update lm model.queryModel + in + ( { model | queryModel = res.model } + , Cmd.map QueryMsg res.cmd + , Sub.map QueryMsg res.subs ) @@ -175,6 +204,21 @@ update _ msg model = view : Texts -> Model -> Html Msg view texts model = + let + queryInput = + div + [ class "relative flex flex-grow flex-row" ] + [ Html.map QueryMsg + (Comp.PowerSearchInput.viewInput + { placeholder = texts.queryLabel + , extraAttrs = [] + } + model.queryModel + ) + , Html.map QueryMsg + (Comp.PowerSearchInput.viewResult [] model.queryModel) + ] + in div [ class "flex flex-col" ] [ div [ class "mb-4" ] @@ -202,20 +246,7 @@ view texts model = [ text texts.queryLabel , B.inputRequired ] - , input - [ type_ "text" - , onInput SetQuery - , placeholder texts.queryLabel - , value model.query - , id "sharequery" - , class S.textInput - , classList - [ ( S.inputErrorBorder - , model.query == "" - ) - ] - ] - [] + , queryInput ] , div [ class "mb-4" ] [ label diff --git a/modules/webapp/src/main/elm/Comp/ShareManage.elm b/modules/webapp/src/main/elm/Comp/ShareManage.elm index 472680c4..c3f31e64 100644 --- a/modules/webapp/src/main/elm/Comp/ShareManage.elm +++ b/modules/webapp/src/main/elm/Comp/ShareManage.elm @@ -98,7 +98,7 @@ loadShares = --- update -update : Flags -> Msg -> Model -> ( Model, Cmd Msg ) +update : Flags -> Msg -> Model -> ( Model, Cmd Msg, Sub Msg ) update flags msg model = case msg of InitNewShare -> @@ -118,14 +118,18 @@ update flags msg model = else Cmd.none + , Sub.none ) FormMsg lm -> let - ( fm, fc ) = + ( fm, fc, fs ) = Comp.ShareForm.update flags lm model.formModel in - ( { model | formModel = fm }, Cmd.map FormMsg fc ) + ( { model | formModel = fm, formError = FormErrorNone } + , Cmd.map FormMsg fc + , Sub.map FormMsg fs + ) TableMsg lm -> let @@ -137,75 +141,79 @@ update flags msg model = setShare share flags model RequestDelete -> - ( { model | deleteConfirm = DeleteConfirmOn }, Cmd.none ) + ( { model | deleteConfirm = DeleteConfirmOn }, Cmd.none, Sub.none ) CancelDelete -> - ( { model | deleteConfirm = DeleteConfirmOff }, Cmd.none ) + ( { model | deleteConfirm = DeleteConfirmOff }, Cmd.none, Sub.none ) DeleteShareNow id -> ( { model | deleteConfirm = DeleteConfirmOff, loading = True } , Api.deleteShare flags id DeleteShareResp + , Sub.none ) LoadShares -> - ( { model | loading = True }, Api.getShares flags LoadSharesResp ) + ( { model | loading = True }, Api.getShares flags LoadSharesResp, Sub.none ) LoadSharesResp (Ok list) -> - ( { model | loading = False, shares = list.items, formError = FormErrorNone }, Cmd.none ) + ( { model | loading = False, shares = list.items, formError = FormErrorNone } + , Cmd.none + , Sub.none + ) LoadSharesResp (Err err) -> - ( { model | loading = False, formError = FormErrorHttp err }, Cmd.none ) + ( { model | loading = False, formError = FormErrorHttp err }, Cmd.none, Sub.none ) Submit -> case Comp.ShareForm.getShare model.formModel of Just ( id, data ) -> if id == "" then - ( { model | loading = True }, Api.addShare flags data AddShareResp ) + ( { model | loading = True }, Api.addShare flags data AddShareResp, Sub.none ) else - ( { model | loading = True }, Api.updateShare flags id data UpdateShareResp ) + ( { model | loading = True }, Api.updateShare flags id data UpdateShareResp, Sub.none ) Nothing -> - ( { model | formError = FormErrorInvalid }, Cmd.none ) + ( { model | formError = FormErrorInvalid }, Cmd.none, Sub.none ) AddShareResp (Ok res) -> if res.success then - ( model, Api.getShare flags res.id GetShareResp ) + ( model, Api.getShare flags res.id GetShareResp, Sub.none ) else - ( { model | loading = False, formError = FormErrorSubmit res.message }, Cmd.none ) + ( { model | loading = False, formError = FormErrorSubmit res.message }, Cmd.none, Sub.none ) AddShareResp (Err err) -> - ( { model | loading = False, formError = FormErrorHttp err }, Cmd.none ) + ( { model | loading = False, formError = FormErrorHttp err }, Cmd.none, Sub.none ) UpdateShareResp (Ok res) -> if res.success then - ( model, Api.getShare flags model.formModel.share.id GetShareResp ) + ( model, Api.getShare flags model.formModel.share.id GetShareResp, Sub.none ) else - ( { model | loading = False, formError = FormErrorSubmit res.message }, Cmd.none ) + ( { model | loading = False, formError = FormErrorSubmit res.message }, Cmd.none, Sub.none ) UpdateShareResp (Err err) -> - ( { model | loading = False, formError = FormErrorHttp err }, Cmd.none ) + ( { model | loading = False, formError = FormErrorHttp err }, Cmd.none, Sub.none ) GetShareResp (Ok share) -> setShare share flags model GetShareResp (Err err) -> - ( { model | formError = FormErrorHttp err }, Cmd.none ) + ( { model | formError = FormErrorHttp err }, Cmd.none, Sub.none ) DeleteShareResp (Ok res) -> if res.success then update flags (SetViewMode Table) { model | loading = False } else - ( { model | formError = FormErrorSubmit res.message, loading = False }, Cmd.none ) + ( { model | formError = FormErrorSubmit res.message, loading = False }, Cmd.none, Sub.none ) DeleteShareResp (Err err) -> - ( { model | formError = FormErrorHttp err, loading = False }, Cmd.none ) + ( { model | formError = FormErrorHttp err, loading = False }, Cmd.none, Sub.none ) -setShare : ShareDetail -> Flags -> Model -> ( Model, Cmd Msg ) +setShare : ShareDetail -> Flags -> Model -> ( Model, Cmd Msg, Sub Msg ) setShare share flags model = let nextModel = @@ -214,10 +222,10 @@ setShare share flags model = initClipboard = Ports.initClipboard (Comp.ShareView.clipboardData share) - ( nm, nc ) = + ( nm, nc, ns ) = update flags (FormMsg <| Comp.ShareForm.setShare share) nextModel in - ( nm, Cmd.batch [ initClipboard, nc ] ) + ( nm, Cmd.batch [ initClipboard, nc ], ns ) diff --git a/modules/webapp/src/main/elm/Page/CollectiveSettings/Update.elm b/modules/webapp/src/main/elm/Page/CollectiveSettings/Update.elm index 1e711acd..b8a63d74 100644 --- a/modules/webapp/src/main/elm/Page/CollectiveSettings/Update.elm +++ b/modules/webapp/src/main/elm/Page/CollectiveSettings/Update.elm @@ -16,7 +16,7 @@ import Data.Flags exposing (Flags) import Page.CollectiveSettings.Data exposing (..) -update : Flags -> Msg -> Model -> ( Model, Cmd Msg ) +update : Flags -> Msg -> Model -> ( Model, Cmd Msg, Sub Msg ) update flags msg model = case msg of SetTab t -> @@ -45,21 +45,21 @@ update flags msg model = ( m2, c2 ) = Comp.SourceManage.update flags m model.sourceModel in - ( { model | sourceModel = m2 }, Cmd.map SourceMsg c2 ) + ( { model | sourceModel = m2 }, Cmd.map SourceMsg c2, Sub.none ) ShareMsg lm -> let - ( sm, sc ) = + ( sm, sc, ss ) = Comp.ShareManage.update flags lm model.shareModel in - ( { model | shareModel = sm }, Cmd.map ShareMsg sc ) + ( { model | shareModel = sm }, Cmd.map ShareMsg sc, Sub.map ShareMsg ss ) UserMsg m -> let ( m2, c2 ) = Comp.UserManage.update flags m model.userModel in - ( { model | userModel = m2 }, Cmd.map UserMsg c2 ) + ( { model | userModel = m2 }, Cmd.map UserMsg c2, Sub.none ) SettingsFormMsg m -> let @@ -76,6 +76,7 @@ update flags msg model = in ( { model | settingsModel = m2, formState = InitialState } , Cmd.batch [ cmd, Cmd.map SettingsFormMsg c2 ] + , Sub.none ) Init -> @@ -84,13 +85,14 @@ update flags msg model = [ Api.getInsights flags GetInsightsResp , Api.getCollectiveSettings flags CollectiveSettingsResp ] + , Sub.none ) GetInsightsResp (Ok data) -> - ( { model | insights = data }, Cmd.none ) + ( { model | insights = data }, Cmd.none, Sub.none ) GetInsightsResp (Err _) -> - ( model, Cmd.none ) + ( model, Cmd.none, Sub.none ) CollectiveSettingsResp (Ok data) -> let @@ -99,10 +101,11 @@ update flags msg model = in ( { model | settingsModel = cm } , Cmd.map SettingsFormMsg cc + , Sub.none ) CollectiveSettingsResp (Err _) -> - ( model, Cmd.none ) + ( model, Cmd.none, Sub.none ) SubmitResp (Ok res) -> ( { model @@ -114,7 +117,8 @@ update flags msg model = SubmitFailed res.message } , Cmd.none + , Sub.none ) SubmitResp (Err err) -> - ( { model | formState = SubmitError err }, Cmd.none ) + ( { model | formState = SubmitError err }, Cmd.none, Sub.none ) From 09242fddb25cf5449ec6ec95b9dc6411297cd7e6 Mon Sep 17 00:00:00 2001 From: eikek Date: Thu, 7 Oct 2021 23:54:05 +0200 Subject: [PATCH 60/75] Fix swapped translation --- .../webapp/src/main/elm/Messages/Comp/SharePasswordForm.elm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/webapp/src/main/elm/Messages/Comp/SharePasswordForm.elm b/modules/webapp/src/main/elm/Messages/Comp/SharePasswordForm.elm index 8688a4e9..8b0a7f13 100644 --- a/modules/webapp/src/main/elm/Messages/Comp/SharePasswordForm.elm +++ b/modules/webapp/src/main/elm/Messages/Comp/SharePasswordForm.elm @@ -19,7 +19,7 @@ gb = , passwordRequired = "Password required" , password = "Password" , passwordSubmitButton = "Submit" - , passwordFailed = "Das Passwort ist falsch" + , passwordFailed = "Password is wrong" } @@ -29,5 +29,5 @@ de = , passwordRequired = "Passwort benötigt" , password = "Passwort" , passwordSubmitButton = "Submit" - , passwordFailed = "Password is wrong" + , passwordFailed = "Das Passwort ist falsch" } From 337293128dc9f18d42d14fc2642444ecae4fc2ea Mon Sep 17 00:00:00 2001 From: eikek Date: Fri, 8 Oct 2021 09:51:35 +0200 Subject: [PATCH 61/75] Add route to send mail for a share --- .../scala/docspell/backend/BackendApp.scala | 4 +- .../scala/docspell/backend/ops/OMail.scala | 16 +++++ .../scala/docspell/backend/ops/OShare.scala | 72 ++++++++++++++++++- .../docspell/backend/ops/SendResult.scala | 26 ------- .../src/main/resources/docspell-openapi.yml | 56 +++++++++++++++ .../restserver/routes/MailSendRoutes.scala | 3 +- .../restserver/routes/ShareRoutes.scala | 31 +++++++- 7 files changed, 175 insertions(+), 33 deletions(-) delete mode 100644 modules/backend/src/main/scala/docspell/backend/ops/SendResult.scala diff --git a/modules/backend/src/main/scala/docspell/backend/BackendApp.scala b/modules/backend/src/main/scala/docspell/backend/BackendApp.scala index 9037e138..3881d537 100644 --- a/modules/backend/src/main/scala/docspell/backend/BackendApp.scala +++ b/modules/backend/src/main/scala/docspell/backend/BackendApp.scala @@ -86,7 +86,9 @@ object BackendApp { customFieldsImpl <- OCustomFields(store) simpleSearchImpl = OSimpleSearch(fulltextImpl, itemSearchImpl) clientSettingsImpl <- OClientSettings(store) - shareImpl <- Resource.pure(OShare(store, itemSearchImpl, simpleSearchImpl)) + shareImpl <- Resource.pure( + OShare(store, itemSearchImpl, simpleSearchImpl, javaEmil) + ) } yield new BackendApp[F] { val login = loginImpl val signup = signupImpl diff --git a/modules/backend/src/main/scala/docspell/backend/ops/OMail.scala b/modules/backend/src/main/scala/docspell/backend/ops/OMail.scala index 8d9debfe..368477d0 100644 --- a/modules/backend/src/main/scala/docspell/backend/ops/OMail.scala +++ b/modules/backend/src/main/scala/docspell/backend/ops/OMail.scala @@ -51,6 +51,22 @@ trait OMail[F[_]] { } object OMail { + sealed trait SendResult + + object SendResult { + + /** Mail was successfully sent and stored to db. */ + case class Success(id: Ident) extends SendResult + + /** There was a failure sending the mail. The mail is then not saved to db. */ + case class SendFailure(ex: Throwable) extends SendResult + + /** The mail was successfully sent, but storing to db failed. */ + case class StoreFailure(ex: Throwable) extends SendResult + + /** Something could not be found required for sending (mail configs, items etc). */ + case object NotFound extends SendResult + } case class Sent( id: Ident, diff --git a/modules/backend/src/main/scala/docspell/backend/ops/OShare.scala b/modules/backend/src/main/scala/docspell/backend/ops/OShare.scala index 4b8ae0f6..e8dae28f 100644 --- a/modules/backend/src/main/scala/docspell/backend/ops/OShare.scala +++ b/modules/backend/src/main/scala/docspell/backend/ops/OShare.scala @@ -13,7 +13,7 @@ import cats.implicits._ import docspell.backend.PasswordCrypt import docspell.backend.auth.ShareToken import docspell.backend.ops.OItemSearch._ -import docspell.backend.ops.OShare.{ShareQuery, VerifyResult} +import docspell.backend.ops.OShare._ import docspell.backend.ops.OSimpleSearch.StringSearchResult import docspell.common._ import docspell.query.ItemQuery @@ -21,8 +21,9 @@ import docspell.query.ItemQuery.Expr import docspell.query.ItemQuery.Expr.AttachId import docspell.store.Store import docspell.store.queries.SearchSummary -import docspell.store.records.RShare +import docspell.store.records.{RShare, RUserEmail} +import emil._ import scodec.bits.ByteVector trait OShare[F[_]] { @@ -63,9 +64,33 @@ trait OShare[F[_]] { def searchSummary( settings: OSimpleSearch.StatsSettings )(shareId: Ident, q: ItemQueryString): OptionT[F, StringSearchResult[SearchSummary]] + + def sendMail(account: AccountId, connection: Ident, mail: ShareMail): F[SendResult] } object OShare { + final case class ShareMail( + shareId: Ident, + subject: String, + recipients: List[MailAddress], + cc: List[MailAddress], + bcc: List[MailAddress], + body: String + ) + + sealed trait SendResult + object SendResult { + + /** Mail was successfully sent and stored to db. */ + case class Success(msgId: String) extends SendResult + + /** There was a failure sending the mail. The mail is then not saved to db. */ + case class SendFailure(ex: Throwable) extends SendResult + + /** Something could not be found required for sending (mail configs, items etc). */ + case object NotFound extends SendResult + } + final case class ShareQuery(id: Ident, cid: Ident, query: ItemQuery) { //TODO @@ -116,7 +141,8 @@ object OShare { def apply[F[_]: Async]( store: Store[F], itemSearch: OItemSearch[F], - simpleSearch: OSimpleSearch[F] + simpleSearch: OSimpleSearch[F], + emil: Emil[F] ): OShare[F] = new OShare[F] { private[this] val logger = Logger.log4s[F](org.log4s.getLogger) @@ -293,5 +319,45 @@ object OShare { case other => other } } + + def sendMail( + account: AccountId, + connection: Ident, + mail: ShareMail + ): F[SendResult] = { + val getSmtpSettings: OptionT[F, RUserEmail] = + OptionT(store.transact(RUserEmail.getByName(account, connection))) + + def createMail(sett: RUserEmail): OptionT[F, Mail[F]] = { + import _root_.emil.builder._ + + OptionT.pure( + MailBuilder.build( + From(sett.mailFrom), + Tos(mail.recipients), + Ccs(mail.cc), + Bccs(mail.bcc), + XMailer.emil, + Subject(mail.subject), + TextBody[F](mail.body) + ) + ) + } + + def sendMail(cfg: MailConfig, mail: Mail[F]): F[Either[SendResult, String]] = + emil(cfg).send(mail).map(_.head).attempt.map(_.left.map(SendResult.SendFailure)) + + (for { + _ <- RShare + .findCurrentActive(mail.shareId) + .filter(_.cid == account.collective) + .mapK(store.transform) + mailCfg <- getSmtpSettings + mail <- createMail(mailCfg) + mid <- OptionT.liftF(sendMail(mailCfg.toMailConfig, mail)) + conv = mid.fold(identity, id => SendResult.Success(id)) + } yield conv).getOrElse(SendResult.NotFound) + } + } } diff --git a/modules/backend/src/main/scala/docspell/backend/ops/SendResult.scala b/modules/backend/src/main/scala/docspell/backend/ops/SendResult.scala deleted file mode 100644 index 97feed6b..00000000 --- a/modules/backend/src/main/scala/docspell/backend/ops/SendResult.scala +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright 2020 Eike K. & Contributors - * - * SPDX-License-Identifier: AGPL-3.0-or-later - */ - -package docspell.backend.ops - -import docspell.common._ - -sealed trait SendResult - -object SendResult { - - /** Mail was successfully sent and stored to db. */ - case class Success(id: Ident) extends SendResult - - /** There was a failure sending the mail. The mail is then not saved to db. */ - case class SendFailure(ex: Throwable) extends SendResult - - /** The mail was successfully sent, but storing to db failed. */ - case class StoreFailure(ex: Throwable) extends SendResult - - /** Something could not be found required for sending (mail configs, items etc). */ - case object NotFound extends SendResult -} diff --git a/modules/restapi/src/main/resources/docspell-openapi.yml b/modules/restapi/src/main/resources/docspell-openapi.yml index 8745c23c..e5ce7c9e 100644 --- a/modules/restapi/src/main/resources/docspell-openapi.yml +++ b/modules/restapi/src/main/resources/docspell-openapi.yml @@ -1959,6 +1959,32 @@ paths: application/json: schema: $ref: "#/components/schemas/IdResult" + /sec/share/email/send/{name}: + post: + operationId: "sec-share-email-send" + tags: [ Share, E-Mail ] + summary: Send an email. + description: | + Sends an email as specified in the body of the request. + + An existing shareId must be given with the request, no matter + the content of the mail. + security: + - authTokenHeader: [] + parameters: + - $ref: "#/components/parameters/name" + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/SimpleShareMail" + responses: + 200: + description: Ok + content: + application/json: + schema: + $ref: "#/components/schemas/BasicResult" /sec/share/{shareId}: parameters: - $ref: "#/components/parameters/shareId" @@ -5283,6 +5309,36 @@ components: items: type: string format: ident + SimpleShareMail: + description: | + A simple e-mail related to a share. + required: + - shareId + - recipients + - cc + - bcc + - subject + - body + properties: + shareId: + type: string + format: ident + recipients: + type: array + items: + type: string + cc: + type: array + items: + type: string + bcc: + type: array + items: + type: string + subject: + type: string + body: + type: string EmailSettingsList: description: | A list of user email settings. diff --git a/modules/restserver/src/main/scala/docspell/restserver/routes/MailSendRoutes.scala b/modules/restserver/src/main/scala/docspell/restserver/routes/MailSendRoutes.scala index d8591aa0..798dd719 100644 --- a/modules/restserver/src/main/scala/docspell/restserver/routes/MailSendRoutes.scala +++ b/modules/restserver/src/main/scala/docspell/restserver/routes/MailSendRoutes.scala @@ -11,8 +11,7 @@ import cats.implicits._ import docspell.backend.BackendApp import docspell.backend.auth.AuthToken -import docspell.backend.ops.OMail.{AttachSelection, ItemMail} -import docspell.backend.ops.SendResult +import docspell.backend.ops.OMail.{AttachSelection, ItemMail, SendResult} import docspell.common._ import docspell.restapi.model._ diff --git a/modules/restserver/src/main/scala/docspell/restserver/routes/ShareRoutes.scala b/modules/restserver/src/main/scala/docspell/restserver/routes/ShareRoutes.scala index 5e9b13b5..92830d2d 100644 --- a/modules/restserver/src/main/scala/docspell/restserver/routes/ShareRoutes.scala +++ b/modules/restserver/src/main/scala/docspell/restserver/routes/ShareRoutes.scala @@ -13,7 +13,7 @@ import cats.implicits._ import docspell.backend.BackendApp import docspell.backend.auth.AuthToken import docspell.backend.ops.OShare -import docspell.backend.ops.OShare.VerifyResult +import docspell.backend.ops.OShare.{SendResult, ShareMail, VerifyResult} import docspell.common.{Ident, Timestamp} import docspell.restapi.model._ import docspell.restserver.Config @@ -21,6 +21,8 @@ import docspell.restserver.auth.ShareCookieData import docspell.restserver.http4s.{ClientRequestInfo, ResponseGenerator} import docspell.store.records.RShare +import emil.MailAddress +import emil.javamail.syntax._ import org.http4s.HttpRoutes import org.http4s.circe.CirceEntityDecoder._ import org.http4s.circe.CirceEntityEncoder._ @@ -68,6 +70,17 @@ object ShareRoutes { del <- backend.share.delete(id, user.account.collective) resp <- Ok(BasicResult(del, if (del) "Share deleted." else "Deleting failed.")) } yield resp + + case req @ POST -> Root / "email" / "send" / Ident(name) => + for { + in <- req.as[SimpleShareMail] + mail = convertIn(in) + res <- mail.traverse(m => backend.share.sendMail(user.account, name, m)) + resp <- res.fold( + err => Ok(BasicResult(false, s"Invalid mail data: $err")), + res => Ok(convertOut(res)) + ) + } yield resp } } @@ -134,4 +147,20 @@ object ShareRoutes { r.lastAccess ) + def convertIn(s: SimpleShareMail): Either[String, ShareMail] = + for { + rec <- s.recipients.traverse(MailAddress.parse) + cc <- s.cc.traverse(MailAddress.parse) + bcc <- s.bcc.traverse(MailAddress.parse) + } yield ShareMail(s.shareId, s.subject, rec, cc, bcc, s.body) + + def convertOut(res: SendResult): BasicResult = + res match { + case SendResult.Success(_) => + BasicResult(true, "Mail sent.") + case SendResult.SendFailure(ex) => + BasicResult(false, s"Mail sending failed: ${ex.getMessage}") + case SendResult.NotFound => + BasicResult(false, s"There was no mail-connection or item found.") + } } From 16ccddab9f2092f891f5fae4dd91c6523bb4cd45 Mon Sep 17 00:00:00 2001 From: eikek Date: Fri, 8 Oct 2021 10:15:19 +0200 Subject: [PATCH 62/75] Add mail form when creating shares --- modules/webapp/src/main/elm/Api.elm | 16 ++ modules/webapp/src/main/elm/Comp/ItemMail.elm | 71 ++++++- .../webapp/src/main/elm/Comp/PublishItems.elm | 71 +++++-- .../webapp/src/main/elm/Comp/ShareMail.elm | 183 ++++++++++++++++++ .../webapp/src/main/elm/Comp/ShareManage.elm | 74 +++++-- .../src/main/elm/Comp/SharePasswordForm.elm | 7 + modules/webapp/src/main/elm/Comp/UrlCopy.elm | 7 + modules/webapp/src/main/elm/Data/Pdf.elm | 7 + .../src/main/elm/Messages/Comp/ItemMail.elm | 4 +- .../main/elm/Messages/Comp/PublishItems.elm | 7 + .../src/main/elm/Messages/Comp/ShareMail.elm | 60 ++++++ .../main/elm/Messages/Comp/ShareManage.elm | 7 + .../elm/Messages/Comp/SharePasswordForm.elm | 7 + .../main/elm/Messages/Page/ShareDetail.elm | 7 + .../main/elm/Page/CollectiveSettings/Data.elm | 2 +- .../elm/Page/CollectiveSettings/View2.elm | 8 +- .../webapp/src/main/elm/Page/Home/Data.elm | 6 +- .../webapp/src/main/elm/Page/Home/Update.elm | 10 +- .../webapp/src/main/elm/Page/Home/View2.elm | 16 +- .../src/main/elm/Page/ShareDetail/Data.elm | 7 + .../src/main/elm/Page/ShareDetail/Update.elm | 7 + .../src/main/elm/Page/ShareDetail/View.elm | 7 + 22 files changed, 535 insertions(+), 56 deletions(-) create mode 100644 modules/webapp/src/main/elm/Comp/ShareMail.elm create mode 100644 modules/webapp/src/main/elm/Messages/Comp/ShareMail.elm diff --git a/modules/webapp/src/main/elm/Api.elm b/modules/webapp/src/main/elm/Api.elm index 42b16e20..2051fe23 100644 --- a/modules/webapp/src/main/elm/Api.elm +++ b/modules/webapp/src/main/elm/Api.elm @@ -146,6 +146,7 @@ module Api exposing , shareAttachmentPreviewURL , shareFileURL , shareItemBasePreviewURL + , shareSendMail , startClassifier , startEmptyTrash , startOnceNotifyDueItems @@ -233,6 +234,7 @@ import Api.Model.ShareList exposing (ShareList) import Api.Model.ShareSecret exposing (ShareSecret) import Api.Model.ShareVerifyResult exposing (ShareVerifyResult) import Api.Model.SimpleMail exposing (SimpleMail) +import Api.Model.SimpleShareMail exposing (SimpleShareMail) import Api.Model.SourceAndTags exposing (SourceAndTags) import Api.Model.SourceList exposing (SourceList) import Api.Model.SourceTagIn @@ -2312,6 +2314,20 @@ itemDetailShare flags token itemId receive = } +shareSendMail : + Flags + -> { conn : String, mail : SimpleShareMail } + -> (Result Http.Error BasicResult -> msg) + -> Cmd msg +shareSendMail flags opts receive = + Http2.authPost + { url = flags.config.baseUrl ++ "/api/v1/sec/share/email/send/" ++ opts.conn + , account = getAccount flags + , body = Http.jsonBody (Api.Model.SimpleShareMail.encode opts.mail) + , expect = Http.expectJson receive Api.Model.BasicResult.decoder + } + + shareAttachmentPreviewURL : String -> String shareAttachmentPreviewURL id = "/api/v1/share/attachment/" ++ id ++ "/preview?withFallback=true" diff --git a/modules/webapp/src/main/elm/Comp/ItemMail.elm b/modules/webapp/src/main/elm/Comp/ItemMail.elm index e135c45f..18b2fc57 100644 --- a/modules/webapp/src/main/elm/Comp/ItemMail.elm +++ b/modules/webapp/src/main/elm/Comp/ItemMail.elm @@ -12,7 +12,9 @@ module Comp.ItemMail exposing , clear , emptyModel , init + , setMailInfo , update + , view , view2 ) @@ -28,7 +30,7 @@ import Data.Flags exposing (Flags) import Data.UiSettings exposing (UiSettings) import Html exposing (..) import Html.Attributes exposing (..) -import Html.Events exposing (onClick, onInput) +import Html.Events exposing (onClick, onFocus, onInput) import Http import Messages.Comp.ItemMail exposing (Texts) import Styles as S @@ -61,6 +63,7 @@ type Msg | CCRecipientMsg Comp.EmailInput.Msg | BCCRecipientMsg Comp.EmailInput.Msg | SetBody String + | SetSubjectBody String String | ConnMsg (Comp.Dropdown.Msg String) | ConnResp (Result Http.Error EmailSettingsList) | ToggleAttachAll @@ -112,12 +115,20 @@ clear model = } +setMailInfo : String -> String -> Msg +setMailInfo subject body = + SetSubjectBody subject body + + update : Flags -> Msg -> Model -> ( Model, Cmd Msg, FormAction ) update flags msg model = case msg of SetSubject str -> ( { model | subject = str }, Cmd.none, FormNone ) + SetSubjectBody subj body -> + ( { model | subject = subj, body = body }, Cmd.none, FormNone ) + RecipientMsg m -> let ( em, ec, rec ) = @@ -239,8 +250,31 @@ isValid model = --- View2 +type alias ViewConfig = + { withAttachments : Bool + , subjectTemplate : Maybe String + , bodyTemplate : Maybe String + , textAreaClass : String + , showCancel : Bool + } + + view2 : Texts -> UiSettings -> Model -> Html Msg view2 texts settings model = + let + cfg = + { withAttachments = True + , subjectTemplate = Nothing + , bodyTemplate = Nothing + , textAreaClass = "" + , showCancel = True + } + in + view texts settings cfg model + + +view : Texts -> UiSettings -> ViewConfig -> Model -> Html Msg +view texts settings cfg model = let dds = Data.DropdownStyle.mainStyle @@ -323,6 +357,11 @@ view2 texts settings model = [ type_ "text" , class S.textInput , onInput SetSubject + , if model.subject == "" then + onFocus (SetSubject <| Maybe.withDefault "" cfg.subjectTemplate) + + else + class "" , value model.subject ] [] @@ -334,18 +373,27 @@ view2 texts settings model = ] , textarea [ onInput SetBody - , value model.body + , if model.body == "" then + value <| Maybe.withDefault "" cfg.bodyTemplate + + else + value model.body , class S.textAreaInput + , class cfg.textAreaClass ] [] ] - , MB.viewItem <| - MB.Checkbox - { tagger = \_ -> ToggleAttachAll - , label = texts.includeAllAttachments - , value = model.attachAll - , id = "item-send-mail-attach-all" - } + , if cfg.withAttachments then + MB.viewItem <| + MB.Checkbox + { tagger = \_ -> ToggleAttachAll + , label = texts.includeAllAttachments + , value = model.attachAll + , id = "item-send-mail-attach-all" + } + + else + span [ class "hidden" ] [] , div [ class "flex flex-row space-x-2" ] [ B.primaryButton { label = texts.sendLabel @@ -358,7 +406,10 @@ view2 texts settings model = { label = texts.basics.cancel , icon = "fa fa-times" , handler = onClick Cancel - , attrs = [ href "#" ] + , attrs = + [ href "#" + , classList [ ( "hidden", not cfg.showCancel ) ] + ] , disabled = False } ] diff --git a/modules/webapp/src/main/elm/Comp/PublishItems.elm b/modules/webapp/src/main/elm/Comp/PublishItems.elm index a098d29a..6e0aede9 100644 --- a/modules/webapp/src/main/elm/Comp/PublishItems.elm +++ b/modules/webapp/src/main/elm/Comp/PublishItems.elm @@ -21,11 +21,13 @@ import Api.Model.ShareDetail exposing (ShareDetail) import Comp.Basic as B import Comp.MenuBar as MB import Comp.ShareForm +import Comp.ShareMail import Comp.ShareView import Data.Flags exposing (Flags) import Data.Icons as Icons import Data.ItemQuery exposing (ItemQuery) import Data.SearchMode exposing (SearchMode) +import Data.UiSettings exposing (UiSettings) import Html exposing (..) import Html.Attributes exposing (..) import Http @@ -52,39 +54,54 @@ type FormError type alias Model = { formModel : Comp.ShareForm.Model + , mailModel : Comp.ShareMail.Model , viewMode : ViewMode , formError : FormError , loading : Bool } -init : ( Model, Cmd Msg ) -init = +init : Flags -> ( Model, Cmd Msg ) +init flags = let ( fm, fc ) = Comp.ShareForm.init + + ( mm, mc ) = + Comp.ShareMail.init flags in ( { formModel = fm + , mailModel = mm , viewMode = ViewModeEdit , formError = FormErrorNone , loading = False } - , Cmd.map FormMsg fc + , Cmd.batch + [ Cmd.map FormMsg fc + , Cmd.map MailMsg mc + ] ) -initQuery : ItemQuery -> ( Model, Cmd Msg ) -initQuery query = +initQuery : Flags -> ItemQuery -> ( Model, Cmd Msg ) +initQuery flags query = let ( fm, fc ) = Comp.ShareForm.initQuery (Data.ItemQuery.render query) + + ( mm, mc ) = + Comp.ShareMail.init flags in ( { formModel = fm + , mailModel = mm , viewMode = ViewModeEdit , formError = FormErrorNone , loading = False } - , Cmd.map FormMsg fc + , Cmd.batch + [ Cmd.map FormMsg fc + , Cmd.map MailMsg mc + ] ) @@ -94,6 +111,7 @@ initQuery query = type Msg = FormMsg Comp.ShareForm.Msg + | MailMsg Comp.ShareMail.Msg | CancelPublish | SubmitPublish | PublishResp (Result Http.Error IdResult) @@ -134,6 +152,17 @@ update flags msg model = , outcome = OutcomeInProgress } + MailMsg lm -> + let + ( mm, mc ) = + Comp.ShareMail.update flags lm model.mailModel + in + { model = { model | mailModel = mm } + , cmd = Cmd.map MailMsg mc + , sub = Sub.none + , outcome = OutcomeInProgress + } + SubmitPublish -> case Comp.ShareForm.getShare model.formModel of Just ( _, data ) -> @@ -173,13 +202,22 @@ update flags msg model = } GetShareResp (Ok share) -> + let + ( mm, mc ) = + Comp.ShareMail.update flags (Comp.ShareMail.setMailInfo share) model.mailModel + in { model = { model | formError = FormErrorNone , loading = False , viewMode = ViewModeInfo share + , mailModel = mm } - , cmd = Ports.initClipboard (Comp.ShareView.clipboardData share) + , cmd = + Cmd.batch + [ Ports.initClipboard (Comp.ShareView.clipboardData share) + , Cmd.map MailMsg mc + ] , sub = Sub.none , outcome = OutcomeInProgress } @@ -196,8 +234,8 @@ update flags msg model = --- View -view : Texts -> Flags -> Model -> Html Msg -view texts flags model = +view : Texts -> UiSettings -> Flags -> Model -> Html Msg +view texts settings flags model = div [] [ B.loadingDimmer { active = model.loading @@ -208,12 +246,12 @@ view texts flags model = viewForm texts model ViewModeInfo share -> - viewInfo texts flags model share + viewInfo texts settings flags model share ] -viewInfo : Texts -> Flags -> Model -> ShareDetail -> Html Msg -viewInfo texts flags model share = +viewInfo : Texts -> UiSettings -> Flags -> Model -> ShareDetail -> Html Msg +viewInfo texts settings flags model share = let cfg = { mainClasses = "" @@ -244,6 +282,15 @@ viewInfo texts flags model share = , div [] [ Comp.ShareView.view cfg texts.shareView flags share ] + , div [ class "flex flex-col mt-6" ] + [ div + [ class S.header2 + ] + [ text texts.sendViaMail + ] + , Html.map MailMsg + (Comp.ShareMail.view texts.shareMail flags settings model.mailModel) + ] ] diff --git a/modules/webapp/src/main/elm/Comp/ShareMail.elm b/modules/webapp/src/main/elm/Comp/ShareMail.elm new file mode 100644 index 00000000..201a7cd0 --- /dev/null +++ b/modules/webapp/src/main/elm/Comp/ShareMail.elm @@ -0,0 +1,183 @@ +{- + Copyright 2020 Eike K. & Contributors + + SPDX-License-Identifier: AGPL-3.0-or-later +-} + + +module Comp.ShareMail exposing (Model, Msg, init, setMailInfo, update, view) + +import Api +import Api.Model.BasicResult exposing (BasicResult) +import Api.Model.ShareDetail exposing (ShareDetail) +import Comp.Basic as B +import Comp.ItemMail +import Data.Flags exposing (Flags) +import Data.UiSettings exposing (UiSettings) +import Html exposing (..) +import Html.Attributes exposing (..) +import Http +import Messages.Comp.ShareMail exposing (Texts) +import Page exposing (Page(..)) +import Styles as S + + +type FormState + = FormStateNone + | FormStateSubmit String + | FormStateHttp Http.Error + | FormStateSent + + +type alias Model = + { mailModel : Comp.ItemMail.Model + , share : ShareDetail + , sending : Bool + , formState : FormState + } + + +init : Flags -> ( Model, Cmd Msg ) +init flags = + let + ( mm, mc ) = + Comp.ItemMail.init flags + in + ( { mailModel = mm + , share = Api.Model.ShareDetail.empty + , sending = False + , formState = FormStateNone + } + , Cmd.map MailMsg mc + ) + + +type Msg + = MailMsg Comp.ItemMail.Msg + | SetMailInfo ShareDetail + | SendMailResp (Result Http.Error BasicResult) + + + +--- Update + + +setMailInfo : ShareDetail -> Msg +setMailInfo share = + SetMailInfo share + + +update : Flags -> Msg -> Model -> ( Model, Cmd Msg ) +update flags msg model = + case msg of + MailMsg lm -> + let + ( mm, mc, fa ) = + Comp.ItemMail.update flags lm model.mailModel + + defaultResult = + ( { model | mailModel = mm }, Cmd.map MailMsg mc ) + in + case fa of + Comp.ItemMail.FormSend sm -> + let + mail = + { mail = + { shareId = model.share.id + , recipients = sm.mail.recipients + , cc = sm.mail.cc + , bcc = sm.mail.bcc + , subject = sm.mail.subject + , body = sm.mail.body + } + , conn = sm.conn + } + in + ( { model | sending = True, mailModel = mm } + , Cmd.batch + [ Cmd.map MailMsg mc + , Api.shareSendMail flags mail SendMailResp + ] + ) + + Comp.ItemMail.FormNone -> + defaultResult + + Comp.ItemMail.FormCancel -> + defaultResult + + SetMailInfo share -> + ( { model | share = share }, Cmd.none ) + + SendMailResp (Ok res) -> + if res.success then + ( { model + | formState = FormStateSent + , mailModel = Comp.ItemMail.clear model.mailModel + , sending = False + } + , Cmd.none + ) + + else + ( { model + | formState = FormStateSubmit res.message + , sending = False + } + , Cmd.none + ) + + SendMailResp (Err err) -> + ( { model | formState = FormStateHttp err }, Cmd.none ) + + + +--- View + + +view : Texts -> Flags -> UiSettings -> Model -> Html Msg +view texts flags settings model = + let + url = + flags.config.baseUrl ++ (Page.pageToString <| SharePage model.share.id) + + subject = + texts.subjectTemplate model.share.name + + body = + texts.bodyTemplate url + + cfg = + { withAttachments = False + , subjectTemplate = Just subject + , bodyTemplate = Just body + , textAreaClass = "h-52" + , showCancel = False + } + in + div [ class "relative" ] + [ case model.formState of + FormStateNone -> + span [ class "hidden" ] [] + + FormStateSubmit msg -> + div [ class S.errorMessage ] + [ text msg + ] + + FormStateHttp err -> + div [ class S.errorMessage ] + [ text (texts.httpError err) + ] + + FormStateSent -> + div [ class S.successMessage ] + [ text "Mail sent." + ] + , Html.map MailMsg + (Comp.ItemMail.view texts.itemMail settings cfg model.mailModel) + , B.loadingDimmer + { active = model.sending + , label = "" + } + ] diff --git a/modules/webapp/src/main/elm/Comp/ShareManage.elm b/modules/webapp/src/main/elm/Comp/ShareManage.elm index c3f31e64..f5d03315 100644 --- a/modules/webapp/src/main/elm/Comp/ShareManage.elm +++ b/modules/webapp/src/main/elm/Comp/ShareManage.elm @@ -16,14 +16,17 @@ import Comp.Basic as B import Comp.ItemDetail.Model exposing (Msg(..)) import Comp.MenuBar as MB import Comp.ShareForm +import Comp.ShareMail import Comp.ShareTable import Comp.ShareView import Data.Flags exposing (Flags) +import Data.UiSettings exposing (UiSettings) import Html exposing (..) import Html.Attributes exposing (..) import Html.Events exposing (onClick) import Http import Messages.Comp.ShareManage exposing (Texts) +import Page exposing (Page(..)) import Ports import Styles as S @@ -49,26 +52,34 @@ type alias Model = { viewMode : ViewMode , shares : List ShareDetail , formModel : Comp.ShareForm.Model + , mailModel : Comp.ShareMail.Model , loading : Bool , formError : FormError , deleteConfirm : DeleteConfirm } -init : ( Model, Cmd Msg ) -init = +init : Flags -> ( Model, Cmd Msg ) +init flags = let ( fm, fc ) = Comp.ShareForm.init + + ( mm, mc ) = + Comp.ShareMail.init flags in ( { viewMode = Table , shares = [] , formModel = fm + , mailModel = mm , loading = False , formError = FormErrorNone , deleteConfirm = DeleteConfirmOff } - , Cmd.map FormMsg fc + , Cmd.batch + [ Cmd.map FormMsg fc + , Cmd.map MailMsg mc + ] ) @@ -76,6 +87,7 @@ type Msg = LoadShares | TableMsg Comp.ShareTable.Msg | FormMsg Comp.ShareForm.Msg + | MailMsg Comp.ShareMail.Msg | InitNewShare | SetViewMode ViewMode | Submit @@ -212,10 +224,20 @@ update flags msg model = DeleteShareResp (Err err) -> ( { model | formError = FormErrorHttp err, loading = False }, Cmd.none, Sub.none ) + MailMsg lm -> + let + ( mm, mc ) = + Comp.ShareMail.update flags lm model.mailModel + in + ( { model | mailModel = mm }, Cmd.map MailMsg mc, Sub.none ) + setShare : ShareDetail -> Flags -> Model -> ( Model, Cmd Msg, Sub Msg ) setShare share flags model = let + shareUrl = + flags.config.baseUrl ++ Page.pageToString (SharePage share.id) + nextModel = { model | formError = FormErrorNone, viewMode = Form, loading = False } @@ -224,21 +246,24 @@ setShare share flags model = ( nm, nc, ns ) = update flags (FormMsg <| Comp.ShareForm.setShare share) nextModel + + ( nm2, nc2, ns2 ) = + update flags (MailMsg <| Comp.ShareMail.setMailInfo share) nm in - ( nm, Cmd.batch [ initClipboard, nc ], ns ) + ( nm2, Cmd.batch [ initClipboard, nc, nc2 ], Sub.batch [ ns, ns2 ] ) --- view -view : Texts -> Flags -> Model -> Html Msg -view texts flags model = +view : Texts -> UiSettings -> Flags -> Model -> Html Msg +view texts settings flags model = if model.viewMode == Table then viewTable texts model else - viewForm texts flags model + viewForm texts settings flags model viewTable : Texts -> Model -> Html Msg @@ -265,13 +290,13 @@ viewTable texts model = ] -viewForm : Texts -> Flags -> Model -> Html Msg -viewForm texts flags model = +viewForm : Texts -> UiSettings -> Flags -> Model -> Html Msg +viewForm texts settings flags model = let newShare = model.formModel.share.id == "" in - div [ class "relative" ] + div [] [ Html.form [] [ if newShare then h1 [ class S.header2 ] @@ -367,6 +392,7 @@ viewForm texts flags model = ) ] , shareInfo texts flags model.formModel.share + , shareSendMail texts flags settings model ] @@ -376,8 +402,34 @@ shareInfo texts flags share = [ class "mt-6" , classList [ ( "hidden", share.id == "" ) ] ] - [ h2 [ class S.header2 ] + [ h2 + [ class S.header2 + , class "border-b-2 dark:border-bluegray-600" + ] [ text texts.shareInformation ] , Comp.ShareView.viewDefault texts.shareView flags share ] + + +shareSendMail : Texts -> Flags -> UiSettings -> Model -> Html Msg +shareSendMail texts flags settings model = + let + share = + model.formModel.share + in + div + [ class "mt-8 mb-2" + , classList [ ( "hidden", share.id == "" || not share.enabled || share.expired ) ] + ] + [ h2 + [ class S.header2 + , class "border-b-2 dark:border-bluegray-600" + ] + [ text "Send via E-Mail" + ] + , div [ class "px-2 py-2 dark:border-bluegray-600" ] + [ Html.map MailMsg + (Comp.ShareMail.view texts.shareMail flags settings model.mailModel) + ] + ] diff --git a/modules/webapp/src/main/elm/Comp/SharePasswordForm.elm b/modules/webapp/src/main/elm/Comp/SharePasswordForm.elm index 2c17a16a..d280c732 100644 --- a/modules/webapp/src/main/elm/Comp/SharePasswordForm.elm +++ b/modules/webapp/src/main/elm/Comp/SharePasswordForm.elm @@ -1,3 +1,10 @@ +{- + Copyright 2020 Eike K. & Contributors + + SPDX-License-Identifier: AGPL-3.0-or-later +-} + + module Comp.SharePasswordForm exposing (Model, Msg, init, update, view) import Api diff --git a/modules/webapp/src/main/elm/Comp/UrlCopy.elm b/modules/webapp/src/main/elm/Comp/UrlCopy.elm index 2a6f048b..ac42d239 100644 --- a/modules/webapp/src/main/elm/Comp/UrlCopy.elm +++ b/modules/webapp/src/main/elm/Comp/UrlCopy.elm @@ -1,3 +1,10 @@ +{- + Copyright 2020 Eike K. & Contributors + + SPDX-License-Identifier: AGPL-3.0-or-later +-} + + module Comp.UrlCopy exposing (..) import Comp.Basic as B diff --git a/modules/webapp/src/main/elm/Data/Pdf.elm b/modules/webapp/src/main/elm/Data/Pdf.elm index e4c691b8..9943dbe1 100644 --- a/modules/webapp/src/main/elm/Data/Pdf.elm +++ b/modules/webapp/src/main/elm/Data/Pdf.elm @@ -1,3 +1,10 @@ +{- + Copyright 2020 Eike K. & Contributors + + SPDX-License-Identifier: AGPL-3.0-or-later +-} + + module Data.Pdf exposing (PdfMode(..), allModes, asString, detectUrl, fromString, serverUrl) {-| Makes use of the fact, that docspell uses a `/view` suffix on the diff --git a/modules/webapp/src/main/elm/Messages/Comp/ItemMail.elm b/modules/webapp/src/main/elm/Messages/Comp/ItemMail.elm index 78a538d2..c3ad7854 100644 --- a/modules/webapp/src/main/elm/Messages/Comp/ItemMail.elm +++ b/modules/webapp/src/main/elm/Messages/Comp/ItemMail.elm @@ -39,8 +39,8 @@ gb = , selectConnection = "Select connection..." , sendVia = "Send via" , recipients = "Recipient(s)" - , ccRecipients = "CC recipient(s)" - , bccRecipients = "BCC recipient(s)..." + , ccRecipients = "CC" + , bccRecipients = "BCC" , subject = "Subject" , body = "Body" , includeAllAttachments = "Include all item attachments" diff --git a/modules/webapp/src/main/elm/Messages/Comp/PublishItems.elm b/modules/webapp/src/main/elm/Messages/Comp/PublishItems.elm index 269f68ef..b23703a8 100644 --- a/modules/webapp/src/main/elm/Messages/Comp/PublishItems.elm +++ b/modules/webapp/src/main/elm/Messages/Comp/PublishItems.elm @@ -15,6 +15,7 @@ import Http import Messages.Basics import Messages.Comp.HttpError import Messages.Comp.ShareForm +import Messages.Comp.ShareMail import Messages.Comp.ShareView import Messages.DateFormat import Messages.UiLanguage @@ -25,6 +26,7 @@ type alias Texts = , httpError : Http.Error -> String , shareForm : Messages.Comp.ShareForm.Texts , shareView : Messages.Comp.ShareView.Texts + , shareMail : Messages.Comp.ShareMail.Texts , title : String , infoText : String , formatDateLong : Int -> String @@ -37,6 +39,7 @@ type alias Texts = , publishInProcess : String , correctFormErrors : String , doneLabel : String + , sendViaMail : String } @@ -46,6 +49,7 @@ gb = , httpError = Messages.Comp.HttpError.gb , shareForm = Messages.Comp.ShareForm.gb , shareView = Messages.Comp.ShareView.gb + , shareMail = Messages.Comp.ShareMail.gb , title = "Publish Items" , infoText = "Publishing items creates a cryptic link, which can be used by everyone to see the selected documents. This link cannot be guessed, but is public! It exists for a certain amount of time and can be further protected using a password." , formatDateLong = Messages.DateFormat.formatDateLong Messages.UiLanguage.English @@ -58,6 +62,7 @@ gb = , publishInProcess = "Items are published …" , correctFormErrors = "Please correct the errors in the form." , doneLabel = "Done" + , sendViaMail = "Send via E-Mail" } @@ -67,6 +72,7 @@ de = , httpError = Messages.Comp.HttpError.de , shareForm = Messages.Comp.ShareForm.de , shareView = Messages.Comp.ShareView.de + , shareMail = Messages.Comp.ShareMail.de , title = "Dokumente publizieren" , infoText = "Beim Publizieren der Dokumente wird ein kryptischer Link erzeugt, mit welchem jeder die dahinter publizierten Dokumente einsehen kann. Dieser Link kann nicht erraten werden, ist aber öffentlich. Er ist zeitlich begrenzt und kann zusätzlich mit einem Passwort geschützt werden." , formatDateLong = Messages.DateFormat.formatDateLong Messages.UiLanguage.German @@ -79,4 +85,5 @@ de = , publishInProcess = "Dokumente werden publiziert…" , correctFormErrors = "Bitte korrigiere die Fehler im Formular." , doneLabel = "Fertig" + , sendViaMail = "Per E-Mail versenden" } diff --git a/modules/webapp/src/main/elm/Messages/Comp/ShareMail.elm b/modules/webapp/src/main/elm/Messages/Comp/ShareMail.elm new file mode 100644 index 00000000..8b56bbb7 --- /dev/null +++ b/modules/webapp/src/main/elm/Messages/Comp/ShareMail.elm @@ -0,0 +1,60 @@ +{- + Copyright 2020 Eike K. & Contributors + + SPDX-License-Identifier: AGPL-3.0-or-later +-} + + +module Messages.Comp.ShareMail exposing + ( Texts + , de + , gb + ) + +import Http +import Messages.Basics +import Messages.Comp.HttpError +import Messages.Comp.ItemMail + + +type alias Texts = + { basics : Messages.Basics.Texts + , itemMail : Messages.Comp.ItemMail.Texts + , httpError : Http.Error -> String + , subjectTemplate : Maybe String -> String + , bodyTemplate : String -> String + } + + +gb : Texts +gb = + { basics = Messages.Basics.gb + , httpError = Messages.Comp.HttpError.gb + , itemMail = Messages.Comp.ItemMail.gb + , subjectTemplate = \mt -> "Shared Documents" ++ (Maybe.map (\n -> ": " ++ n) mt |> Maybe.withDefault "") + , bodyTemplate = \url -> """Hi, + +you can find the documents here: + + """ ++ url ++ """ + +Kind regards +""" + } + + +de : Texts +de = + { basics = Messages.Basics.de + , httpError = Messages.Comp.HttpError.de + , itemMail = Messages.Comp.ItemMail.de + , subjectTemplate = \mt -> "Freigegebene Dokumente" ++ (Maybe.map (\n -> ": " ++ n) mt |> Maybe.withDefault "") + , bodyTemplate = \url -> """Hallo, + +die freigegebenen Dokumente befinden sich hier: + + """ ++ url ++ """ + +Freundliche Grüße +""" + } diff --git a/modules/webapp/src/main/elm/Messages/Comp/ShareManage.elm b/modules/webapp/src/main/elm/Messages/Comp/ShareManage.elm index c415d3c8..d90824be 100644 --- a/modules/webapp/src/main/elm/Messages/Comp/ShareManage.elm +++ b/modules/webapp/src/main/elm/Messages/Comp/ShareManage.elm @@ -15,6 +15,7 @@ import Http import Messages.Basics import Messages.Comp.HttpError import Messages.Comp.ShareForm +import Messages.Comp.ShareMail import Messages.Comp.ShareTable import Messages.Comp.ShareView @@ -24,6 +25,7 @@ type alias Texts = , shareTable : Messages.Comp.ShareTable.Texts , shareForm : Messages.Comp.ShareForm.Texts , shareView : Messages.Comp.ShareView.Texts + , shareMail : Messages.Comp.ShareMail.Texts , httpError : Http.Error -> String , newShare : String , copyToClipboard : String @@ -36,6 +38,7 @@ type alias Texts = , correctFormErrors : String , noName : String , shareInformation : String + , sendMail : String } @@ -46,6 +49,7 @@ gb = , shareTable = Messages.Comp.ShareTable.gb , shareForm = Messages.Comp.ShareForm.gb , shareView = Messages.Comp.ShareView.gb + , shareMail = Messages.Comp.ShareMail.gb , newShare = "New share" , copyToClipboard = "Copy to clipboard" , openInNewTab = "Open in new tab/window" @@ -57,6 +61,7 @@ gb = , correctFormErrors = "Please correct the errors in the form." , noName = "No Name" , shareInformation = "Share Information" + , sendMail = "Send via E-Mail" } @@ -67,6 +72,7 @@ de = , shareForm = Messages.Comp.ShareForm.de , shareView = Messages.Comp.ShareView.de , httpError = Messages.Comp.HttpError.de + , shareMail = Messages.Comp.ShareMail.de , newShare = "Neue Freigabe" , copyToClipboard = "In die Zwischenablage kopieren" , openInNewTab = "Im neuen Tab/Fenster öffnen" @@ -78,4 +84,5 @@ de = , correctFormErrors = "Bitte korrigiere die Fehler im Formular." , noName = "Ohne Name" , shareInformation = "Informationen zur Freigabe" + , sendMail = "Per E-Mail versenden" } diff --git a/modules/webapp/src/main/elm/Messages/Comp/SharePasswordForm.elm b/modules/webapp/src/main/elm/Messages/Comp/SharePasswordForm.elm index 8b0a7f13..889495c8 100644 --- a/modules/webapp/src/main/elm/Messages/Comp/SharePasswordForm.elm +++ b/modules/webapp/src/main/elm/Messages/Comp/SharePasswordForm.elm @@ -1,3 +1,10 @@ +{- + Copyright 2020 Eike K. & Contributors + + SPDX-License-Identifier: AGPL-3.0-or-later +-} + + module Messages.Comp.SharePasswordForm exposing (Texts, de, gb) import Http diff --git a/modules/webapp/src/main/elm/Messages/Page/ShareDetail.elm b/modules/webapp/src/main/elm/Messages/Page/ShareDetail.elm index 70397991..33408d3f 100644 --- a/modules/webapp/src/main/elm/Messages/Page/ShareDetail.elm +++ b/modules/webapp/src/main/elm/Messages/Page/ShareDetail.elm @@ -1,3 +1,10 @@ +{- + Copyright 2020 Eike K. & Contributors + + SPDX-License-Identifier: AGPL-3.0-or-later +-} + + module Messages.Page.ShareDetail exposing (..) import Data.Fields exposing (Field) diff --git a/modules/webapp/src/main/elm/Page/CollectiveSettings/Data.elm b/modules/webapp/src/main/elm/Page/CollectiveSettings/Data.elm index e940ade4..286913b1 100644 --- a/modules/webapp/src/main/elm/Page/CollectiveSettings/Data.elm +++ b/modules/webapp/src/main/elm/Page/CollectiveSettings/Data.elm @@ -52,7 +52,7 @@ init flags = Comp.CollectiveSettingsForm.init flags Api.Model.CollectiveSettings.empty ( shm, shc ) = - Comp.ShareManage.init + Comp.ShareManage.init flags in ( { currentTab = Just InsightsTab , sourceModel = sm diff --git a/modules/webapp/src/main/elm/Page/CollectiveSettings/View2.elm b/modules/webapp/src/main/elm/Page/CollectiveSettings/View2.elm index 7c31f7ff..7a09d909 100644 --- a/modules/webapp/src/main/elm/Page/CollectiveSettings/View2.elm +++ b/modules/webapp/src/main/elm/Page/CollectiveSettings/View2.elm @@ -118,7 +118,7 @@ viewContent texts flags settings model = viewSources texts flags settings model Just ShareTab -> - viewShares texts flags model + viewShares texts settings flags model Nothing -> [] @@ -245,8 +245,8 @@ viewSources texts flags settings model = ] -viewShares : Texts -> Flags -> Model -> List (Html Msg) -viewShares texts flags model = +viewShares : Texts -> UiSettings -> Flags -> Model -> List (Html Msg) +viewShares texts settings flags model = [ h1 [ class S.header1 , class "inline-flex items-center" @@ -256,7 +256,7 @@ viewShares texts flags model = [ text texts.shares ] ] - , Html.map ShareMsg (Comp.ShareManage.view texts.shareManage flags model.shareModel) + , Html.map ShareMsg (Comp.ShareManage.view texts.shareManage settings flags model.shareModel) ] diff --git a/modules/webapp/src/main/elm/Page/Home/Data.elm b/modules/webapp/src/main/elm/Page/Home/Data.elm index c4b65df0..0a2deed7 100644 --- a/modules/webapp/src/main/elm/Page/Home/Data.elm +++ b/modules/webapp/src/main/elm/Page/Home/Data.elm @@ -87,14 +87,14 @@ type alias SelectViewModel = } -initSelectViewModel : SelectViewModel -initSelectViewModel = +initSelectViewModel : Flags -> SelectViewModel +initSelectViewModel flags = { ids = Set.empty , action = NoneAction , confirmModal = Nothing , editModel = Comp.ItemDetail.MultiEditMenu.init , mergeModel = Comp.ItemMerge.init [] - , publishModel = Tuple.first Comp.PublishItems.init + , publishModel = Tuple.first (Comp.PublishItems.init flags) , saveNameState = SaveSuccess , saveCustomFieldState = Set.empty } diff --git a/modules/webapp/src/main/elm/Page/Home/Update.elm b/modules/webapp/src/main/elm/Page/Home/Update.elm index edebe2f0..4848b838 100644 --- a/modules/webapp/src/main/elm/Page/Home/Update.elm +++ b/modules/webapp/src/main/elm/Page/Home/Update.elm @@ -252,10 +252,10 @@ update mId key flags settings msg model = ( nextView, cmd ) = case model.viewMode of SimpleView -> - ( SelectView initSelectViewModel, loadEditModel flags ) + ( SelectView <| initSelectViewModel flags, loadEditModel flags ) SearchView -> - ( SelectView initSelectViewModel, loadEditModel flags ) + ( SelectView <| initSelectViewModel flags, loadEditModel flags ) SelectView _ -> ( SearchView, Cmd.none ) @@ -633,7 +633,7 @@ update mId key flags settings msg model = if svm.action == PublishSelected then let ( mm, mc ) = - Comp.PublishItems.init + Comp.PublishItems.init flags in noSub ( { model @@ -653,7 +653,7 @@ update mId key flags settings msg model = else let ( mm, mc ) = - Comp.PublishItems.initQuery + Comp.PublishItems.initQuery flags (Q.ItemIdIn (Set.toList svm.ids)) in noSub @@ -877,7 +877,7 @@ update mId key flags settings msg model = Just q -> let ( pm, pc ) = - Comp.PublishItems.initQuery q + Comp.PublishItems.initQuery flags q in noSub ( { model | viewMode = PublishView pm }, Cmd.map PublishViewMsg pc ) diff --git a/modules/webapp/src/main/elm/Page/Home/View2.elm b/modules/webapp/src/main/elm/Page/Home/View2.elm index 515c8c51..e58f4132 100644 --- a/modules/webapp/src/main/elm/Page/Home/View2.elm +++ b/modules/webapp/src/main/elm/Page/Home/View2.elm @@ -80,7 +80,7 @@ mainView texts flags settings model = PublishSelected -> Just [ div [ class "sm:relative mb-2" ] - (itemPublishView texts flags svm) + (itemPublishView texts settings flags svm) ] _ -> @@ -89,7 +89,7 @@ mainView texts flags settings model = PublishView pm -> Just [ div [ class "sm:relative mb-2" ] - (publishResults texts flags model pm) + (publishResults texts settings flags model pm) ] SimpleView -> @@ -106,10 +106,10 @@ mainView texts flags settings model = itemCardList texts flags settings model -itemPublishView : Texts -> Flags -> SelectViewModel -> List (Html Msg) -itemPublishView texts flags svm = +itemPublishView : Texts -> UiSettings -> Flags -> SelectViewModel -> List (Html Msg) +itemPublishView texts settings flags svm = [ Html.map PublishItemsMsg - (Comp.PublishItems.view texts.publishItems flags svm.publishModel) + (Comp.PublishItems.view texts.publishItems settings flags svm.publishModel) ] @@ -120,10 +120,10 @@ itemMergeView texts settings svm = ] -publishResults : Texts -> Flags -> Model -> Comp.PublishItems.Model -> List (Html Msg) -publishResults texts flags model pm = +publishResults : Texts -> UiSettings -> Flags -> Model -> Comp.PublishItems.Model -> List (Html Msg) +publishResults texts settings flags model pm = [ Html.map PublishViewMsg - (Comp.PublishItems.view texts.publishItems flags pm) + (Comp.PublishItems.view texts.publishItems settings flags pm) ] diff --git a/modules/webapp/src/main/elm/Page/ShareDetail/Data.elm b/modules/webapp/src/main/elm/Page/ShareDetail/Data.elm index 0f262dab..2d6e1b3a 100644 --- a/modules/webapp/src/main/elm/Page/ShareDetail/Data.elm +++ b/modules/webapp/src/main/elm/Page/ShareDetail/Data.elm @@ -1,3 +1,10 @@ +{- + Copyright 2020 Eike K. & Contributors + + SPDX-License-Identifier: AGPL-3.0-or-later +-} + + module Page.ShareDetail.Data exposing (Model, Msg(..), PageError(..), ViewMode(..), init) import Api diff --git a/modules/webapp/src/main/elm/Page/ShareDetail/Update.elm b/modules/webapp/src/main/elm/Page/ShareDetail/Update.elm index 93ddabe2..efa880d3 100644 --- a/modules/webapp/src/main/elm/Page/ShareDetail/Update.elm +++ b/modules/webapp/src/main/elm/Page/ShareDetail/Update.elm @@ -1,3 +1,10 @@ +{- + Copyright 2020 Eike K. & Contributors + + SPDX-License-Identifier: AGPL-3.0-or-later +-} + + module Page.ShareDetail.Update exposing (update) import Api diff --git a/modules/webapp/src/main/elm/Page/ShareDetail/View.elm b/modules/webapp/src/main/elm/Page/ShareDetail/View.elm index 56ef7cbb..3ef1f3ea 100644 --- a/modules/webapp/src/main/elm/Page/ShareDetail/View.elm +++ b/modules/webapp/src/main/elm/Page/ShareDetail/View.elm @@ -1,3 +1,10 @@ +{- + Copyright 2020 Eike K. & Contributors + + SPDX-License-Identifier: AGPL-3.0-or-later +-} + + module Page.ShareDetail.View exposing (viewContent, viewSidebar) import Api From 9009ebcb3901a713f8e88cf43ae734c14fd47690 Mon Sep 17 00:00:00 2001 From: eikek Date: Sun, 10 Oct 2021 11:48:08 +0200 Subject: [PATCH 63/75] Prefill share mail form To have access to the translated content, the messages must be given to the update function. There is no way to set the values in the view. --- modules/webapp/src/main/elm/App/Update.elm | 67 +++++++++++-------- modules/webapp/src/main/elm/Comp/ItemMail.elm | 15 +---- .../webapp/src/main/elm/Comp/PublishItems.elm | 9 ++- .../webapp/src/main/elm/Comp/ShareMail.elm | 32 +++++---- .../webapp/src/main/elm/Comp/ShareManage.elm | 22 +++--- .../elm/Page/CollectiveSettings/Update.elm | 17 ++--- .../webapp/src/main/elm/Page/Home/Update.elm | 39 ++++++----- 7 files changed, 102 insertions(+), 99 deletions(-) diff --git a/modules/webapp/src/main/elm/App/Update.elm b/modules/webapp/src/main/elm/App/Update.elm index de687444..47d7ad9b 100644 --- a/modules/webapp/src/main/elm/App/Update.elm +++ b/modules/webapp/src/main/elm/App/Update.elm @@ -17,6 +17,7 @@ import Browser.Navigation as Nav import Data.Flags import Data.UiSettings exposing (UiSettings) import Data.UiTheme +import Messages exposing (Messages) import Page exposing (Page(..)) import Page.CollectiveSettings.Data import Page.CollectiveSettings.Update @@ -59,6 +60,10 @@ update msg model = updateWithSub : Msg -> Model -> ( Model, Cmd Msg, Sub Msg ) updateWithSub msg model = + let + texts = + Messages.get <| App.Data.getUiLanguage model + in case msg of ToggleSidebar -> ( { model | sidebarVisible = not model.sidebarVisible }, Cmd.none, Sub.none ) @@ -98,7 +103,7 @@ updateWithSub msg model = ClientSettingsSaveResp settings (Ok res) -> if res.success then - applyClientSettings model settings + applyClientSettings texts model settings else ( model, Cmd.none, Sub.none ) @@ -116,7 +121,7 @@ updateWithSub msg model = ( { model | anonymousUiLang = lang, langMenuOpen = False }, Cmd.none, Sub.none ) HomeMsg lm -> - updateHome lm model + updateHome texts lm model ShareMsg lm -> updateShare lm model @@ -131,10 +136,10 @@ updateWithSub msg model = updateManageData lm model CollSettingsMsg m -> - updateCollSettings m model + updateCollSettings texts m model UserSettingsMsg m -> - updateUserSettings m model + updateUserSettings texts m model QueueMsg m -> updateQueue m model @@ -149,7 +154,7 @@ updateWithSub msg model = updateNewInvite m model ItemDetailMsg m -> - updateItemDetail m model + updateItemDetail texts m model VersionResp (Ok info) -> ( { model | version = info }, Cmd.none, Sub.none ) @@ -291,7 +296,7 @@ updateWithSub msg model = ) GetUiSettings (Ok settings) -> - applyClientSettings model settings + applyClientSettings texts model settings GetUiSettings (Err _) -> ( model, Cmd.none, Sub.none ) @@ -301,11 +306,11 @@ updateWithSub msg model = lm = Page.UserSettings.Data.ReceiveBrowserSettings sett in - updateUserSettings lm model + updateUserSettings texts lm model -applyClientSettings : Model -> UiSettings -> ( Model, Cmd Msg, Sub Msg ) -applyClientSettings model settings = +applyClientSettings : Messages -> Model -> UiSettings -> ( Model, Cmd Msg, Sub Msg ) +applyClientSettings texts model settings = let setTheme = Ports.setUiTheme settings.uiTheme @@ -316,9 +321,9 @@ applyClientSettings model settings = , setTheme , Sub.none ) - , updateUserSettings Page.UserSettings.Data.UpdateSettings - , updateHome Page.Home.Data.UiSettingsUpdated - , updateItemDetail Page.ItemDetail.Data.UiSettingsUpdated + , updateUserSettings texts Page.UserSettings.Data.UpdateSettings + , updateHome texts Page.Home.Data.UiSettingsUpdated + , updateItemDetail texts Page.ItemDetail.Data.UiSettingsUpdated ] { model | uiSettings = settings } @@ -357,8 +362,8 @@ updateShare lmsg model = ( model, Cmd.none, Sub.none ) -updateItemDetail : Page.ItemDetail.Data.Msg -> Model -> ( Model, Cmd Msg, Sub Msg ) -updateItemDetail lmsg model = +updateItemDetail : Messages -> Page.ItemDetail.Data.Msg -> Model -> ( Model, Cmd Msg, Sub Msg ) +updateItemDetail texts lmsg model = let inav = Page.Home.Data.itemNav model.itemDetailModel.detail.item.id model.homeModel @@ -378,12 +383,12 @@ updateItemDetail lmsg model = } ( hm, hc, hs ) = - updateHome (Page.Home.Data.SetLinkTarget result.linkTarget) model_ + updateHome texts (Page.Home.Data.SetLinkTarget result.linkTarget) model_ ( hm1, hc1, hs1 ) = case result.removedItem of Just removedId -> - updateHome (Page.Home.Data.RemoveItem removedId) hm + updateHome texts (Page.Home.Data.RemoveItem removedId) hm Nothing -> ( hm, hc, hs ) @@ -446,8 +451,8 @@ updateQueue lmsg model = ) -updateUserSettings : Page.UserSettings.Data.Msg -> Model -> ( Model, Cmd Msg, Sub Msg ) -updateUserSettings lmsg model = +updateUserSettings : Messages -> Page.UserSettings.Data.Msg -> Model -> ( Model, Cmd Msg, Sub Msg ) +updateUserSettings texts lmsg model = let result = Page.UserSettings.Update.update model.flags model.uiSettings lmsg model.userSettingsModel @@ -458,7 +463,7 @@ updateUserSettings lmsg model = ( lm2, lc2, s2 ) = case result.newSettings of Just sett -> - applyClientSettings model_ sett + applyClientSettings texts model_ sett Nothing -> ( model_, Cmd.none, Sub.none ) @@ -475,11 +480,12 @@ updateUserSettings lmsg model = ) -updateCollSettings : Page.CollectiveSettings.Data.Msg -> Model -> ( Model, Cmd Msg, Sub Msg ) -updateCollSettings lmsg model = +updateCollSettings : Messages -> Page.CollectiveSettings.Data.Msg -> Model -> ( Model, Cmd Msg, Sub Msg ) +updateCollSettings texts lmsg model = let ( lm, lc, ls ) = - Page.CollectiveSettings.Update.update model.flags + Page.CollectiveSettings.Update.update texts.collectiveSettings + model.flags lmsg model.collSettingsModel in @@ -508,8 +514,8 @@ updateLogin lmsg model = ) -updateHome : Page.Home.Data.Msg -> Model -> ( Model, Cmd Msg, Sub Msg ) -updateHome lmsg model = +updateHome : Messages -> Page.Home.Data.Msg -> Model -> ( Model, Cmd Msg, Sub Msg ) +updateHome texts lmsg model = let mid = case model.page of @@ -520,7 +526,7 @@ updateHome lmsg model = Nothing result = - Page.Home.Update.update mid model.key model.flags model.uiSettings lmsg model.homeModel + Page.Home.Update.update mid model.key model.flags texts.home model.uiSettings lmsg model.homeModel model_ = { model | homeModel = result.model } @@ -528,7 +534,7 @@ updateHome lmsg model = ( lm, lc, ls ) = case result.newSettings of Just sett -> - applyClientSettings model_ sett + applyClientSettings texts model_ sett Nothing -> ( model_, Cmd.none, Sub.none ) @@ -562,11 +568,14 @@ initPage model_ page = let model = { model_ | page = page } + + texts = + Messages.get <| App.Data.getUiLanguage model in case page of HomePage -> Util.Update.andThen2 - [ updateHome Page.Home.Data.Init + [ updateHome texts Page.Home.Data.Init , updateQueue Page.Queue.Data.StopRefresh ] model @@ -580,7 +589,7 @@ initPage model_ page = CollectiveSettingPage -> Util.Update.andThen2 [ updateQueue Page.Queue.Data.StopRefresh - , updateCollSettings Page.CollectiveSettings.Data.Init + , updateCollSettings texts Page.CollectiveSettings.Data.Init ] model @@ -608,7 +617,7 @@ initPage model_ page = ItemDetailPage id -> Util.Update.andThen2 - [ updateItemDetail (Page.ItemDetail.Data.Init id) + [ updateItemDetail texts (Page.ItemDetail.Data.Init id) , updateQueue Page.Queue.Data.StopRefresh ] model diff --git a/modules/webapp/src/main/elm/Comp/ItemMail.elm b/modules/webapp/src/main/elm/Comp/ItemMail.elm index 18b2fc57..540e65c0 100644 --- a/modules/webapp/src/main/elm/Comp/ItemMail.elm +++ b/modules/webapp/src/main/elm/Comp/ItemMail.elm @@ -252,8 +252,6 @@ isValid model = type alias ViewConfig = { withAttachments : Bool - , subjectTemplate : Maybe String - , bodyTemplate : Maybe String , textAreaClass : String , showCancel : Bool } @@ -264,8 +262,6 @@ view2 texts settings model = let cfg = { withAttachments = True - , subjectTemplate = Nothing - , bodyTemplate = Nothing , textAreaClass = "" , showCancel = True } @@ -357,11 +353,6 @@ view texts settings cfg model = [ type_ "text" , class S.textInput , onInput SetSubject - , if model.subject == "" then - onFocus (SetSubject <| Maybe.withDefault "" cfg.subjectTemplate) - - else - class "" , value model.subject ] [] @@ -373,11 +364,7 @@ view texts settings cfg model = ] , textarea [ onInput SetBody - , if model.body == "" then - value <| Maybe.withDefault "" cfg.bodyTemplate - - else - value model.body + , value model.body , class S.textAreaInput , class cfg.textAreaClass ] diff --git a/modules/webapp/src/main/elm/Comp/PublishItems.elm b/modules/webapp/src/main/elm/Comp/PublishItems.elm index 6e0aede9..98d18084 100644 --- a/modules/webapp/src/main/elm/Comp/PublishItems.elm +++ b/modules/webapp/src/main/elm/Comp/PublishItems.elm @@ -26,7 +26,6 @@ import Comp.ShareView import Data.Flags exposing (Flags) import Data.Icons as Icons import Data.ItemQuery exposing (ItemQuery) -import Data.SearchMode exposing (SearchMode) import Data.UiSettings exposing (UiSettings) import Html exposing (..) import Html.Attributes exposing (..) @@ -131,8 +130,8 @@ type alias UpdateResult = } -update : Flags -> Msg -> Model -> UpdateResult -update flags msg model = +update : Texts -> Flags -> Msg -> Model -> UpdateResult +update texts flags msg model = case msg of CancelPublish -> { model = model @@ -155,7 +154,7 @@ update flags msg model = MailMsg lm -> let ( mm, mc ) = - Comp.ShareMail.update flags lm model.mailModel + Comp.ShareMail.update texts.shareMail flags lm model.mailModel in { model = { model | mailModel = mm } , cmd = Cmd.map MailMsg mc @@ -204,7 +203,7 @@ update flags msg model = GetShareResp (Ok share) -> let ( mm, mc ) = - Comp.ShareMail.update flags (Comp.ShareMail.setMailInfo share) model.mailModel + Comp.ShareMail.update texts.shareMail flags (Comp.ShareMail.setMailInfo share) model.mailModel in { model = { model diff --git a/modules/webapp/src/main/elm/Comp/ShareMail.elm b/modules/webapp/src/main/elm/Comp/ShareMail.elm index 201a7cd0..f28f2d70 100644 --- a/modules/webapp/src/main/elm/Comp/ShareMail.elm +++ b/modules/webapp/src/main/elm/Comp/ShareMail.elm @@ -67,8 +67,8 @@ setMailInfo share = SetMailInfo share -update : Flags -> Msg -> Model -> ( Model, Cmd Msg ) -update flags msg model = +update : Texts -> Flags -> Msg -> Model -> ( Model, Cmd Msg ) +update texts flags msg model = case msg of MailMsg lm -> let @@ -107,7 +107,22 @@ update flags msg model = defaultResult SetMailInfo share -> - ( { model | share = share }, Cmd.none ) + let + url = + flags.config.baseUrl ++ Page.pageToString (SharePage share.id) + + name = + share.name + + lm = + Comp.ItemMail.setMailInfo + (texts.subjectTemplate name) + (texts.bodyTemplate url) + + nm = + { model | share = share } + in + update texts flags (MailMsg lm) nm SendMailResp (Ok res) -> if res.success then @@ -138,19 +153,8 @@ update flags msg model = view : Texts -> Flags -> UiSettings -> Model -> Html Msg view texts flags settings model = let - url = - flags.config.baseUrl ++ (Page.pageToString <| SharePage model.share.id) - - subject = - texts.subjectTemplate model.share.name - - body = - texts.bodyTemplate url - cfg = { withAttachments = False - , subjectTemplate = Just subject - , bodyTemplate = Just body , textAreaClass = "h-52" , showCancel = False } diff --git a/modules/webapp/src/main/elm/Comp/ShareManage.elm b/modules/webapp/src/main/elm/Comp/ShareManage.elm index f5d03315..be079129 100644 --- a/modules/webapp/src/main/elm/Comp/ShareManage.elm +++ b/modules/webapp/src/main/elm/Comp/ShareManage.elm @@ -110,8 +110,8 @@ loadShares = --- update -update : Flags -> Msg -> Model -> ( Model, Cmd Msg, Sub Msg ) -update flags msg model = +update : Texts -> Flags -> Msg -> Model -> ( Model, Cmd Msg, Sub Msg ) +update texts flags msg model = case msg of InitNewShare -> let @@ -121,7 +121,7 @@ update flags msg model = share = Api.Model.ShareDetail.empty in - update flags (FormMsg (Comp.ShareForm.setShare { share | enabled = True })) nm + update texts flags (FormMsg (Comp.ShareForm.setShare { share | enabled = True })) nm SetViewMode vm -> ( { model | viewMode = vm, formError = FormErrorNone } @@ -150,7 +150,7 @@ update flags msg model = in case action of Comp.ShareTable.Edit share -> - setShare share flags model + setShare texts share flags model RequestDelete -> ( { model | deleteConfirm = DeleteConfirmOn }, Cmd.none, Sub.none ) @@ -209,14 +209,14 @@ update flags msg model = ( { model | loading = False, formError = FormErrorHttp err }, Cmd.none, Sub.none ) GetShareResp (Ok share) -> - setShare share flags model + setShare texts share flags model GetShareResp (Err err) -> ( { model | formError = FormErrorHttp err }, Cmd.none, Sub.none ) DeleteShareResp (Ok res) -> if res.success then - update flags (SetViewMode Table) { model | loading = False } + update texts flags (SetViewMode Table) { model | loading = False } else ( { model | formError = FormErrorSubmit res.message, loading = False }, Cmd.none, Sub.none ) @@ -227,13 +227,13 @@ update flags msg model = MailMsg lm -> let ( mm, mc ) = - Comp.ShareMail.update flags lm model.mailModel + Comp.ShareMail.update texts.shareMail flags lm model.mailModel in ( { model | mailModel = mm }, Cmd.map MailMsg mc, Sub.none ) -setShare : ShareDetail -> Flags -> Model -> ( Model, Cmd Msg, Sub Msg ) -setShare share flags model = +setShare : Texts -> ShareDetail -> Flags -> Model -> ( Model, Cmd Msg, Sub Msg ) +setShare texts share flags model = let shareUrl = flags.config.baseUrl ++ Page.pageToString (SharePage share.id) @@ -245,10 +245,10 @@ setShare share flags model = Ports.initClipboard (Comp.ShareView.clipboardData share) ( nm, nc, ns ) = - update flags (FormMsg <| Comp.ShareForm.setShare share) nextModel + update texts flags (FormMsg <| Comp.ShareForm.setShare share) nextModel ( nm2, nc2, ns2 ) = - update flags (MailMsg <| Comp.ShareMail.setMailInfo share) nm + update texts flags (MailMsg <| Comp.ShareMail.setMailInfo share) nm in ( nm2, Cmd.batch [ initClipboard, nc, nc2 ], Sub.batch [ ns, ns2 ] ) diff --git a/modules/webapp/src/main/elm/Page/CollectiveSettings/Update.elm b/modules/webapp/src/main/elm/Page/CollectiveSettings/Update.elm index b8a63d74..519971c0 100644 --- a/modules/webapp/src/main/elm/Page/CollectiveSettings/Update.elm +++ b/modules/webapp/src/main/elm/Page/CollectiveSettings/Update.elm @@ -13,11 +13,12 @@ import Comp.ShareManage import Comp.SourceManage import Comp.UserManage import Data.Flags exposing (Flags) +import Messages.Page.CollectiveSettings exposing (Texts) import Page.CollectiveSettings.Data exposing (..) -update : Flags -> Msg -> Model -> ( Model, Cmd Msg, Sub Msg ) -update flags msg model = +update : Texts -> Flags -> Msg -> Model -> ( Model, Cmd Msg, Sub Msg ) +update texts flags msg model = case msg of SetTab t -> let @@ -26,19 +27,19 @@ update flags msg model = in case t of SourceTab -> - update flags (SourceMsg Comp.SourceManage.LoadSources) m + update texts flags (SourceMsg Comp.SourceManage.LoadSources) m UserTab -> - update flags (UserMsg Comp.UserManage.LoadUsers) m + update texts flags (UserMsg Comp.UserManage.LoadUsers) m InsightsTab -> - update flags Init m + update texts flags Init m SettingsTab -> - update flags Init m + update texts flags Init m ShareTab -> - update flags (ShareMsg Comp.ShareManage.loadShares) m + update texts flags (ShareMsg Comp.ShareManage.loadShares) m SourceMsg m -> let @@ -50,7 +51,7 @@ update flags msg model = ShareMsg lm -> let ( sm, sc, ss ) = - Comp.ShareManage.update flags lm model.shareModel + Comp.ShareManage.update texts.shareManage flags lm model.shareModel in ( { model | shareModel = sm }, Cmd.map ShareMsg sc, Sub.map ShareMsg ss ) diff --git a/modules/webapp/src/main/elm/Page/Home/Update.elm b/modules/webapp/src/main/elm/Page/Home/Update.elm index 4848b838..27ddf0fd 100644 --- a/modules/webapp/src/main/elm/Page/Home/Update.elm +++ b/modules/webapp/src/main/elm/Page/Home/Update.elm @@ -27,6 +27,7 @@ import Data.ItemSelection import Data.Items import Data.SearchMode exposing (SearchMode) import Data.UiSettings exposing (UiSettings) +import Messages.Page.Home exposing (Texts) import Page exposing (Page(..)) import Page.Home.Data exposing (..) import Process @@ -48,8 +49,8 @@ type alias UpdateResult = } -update : Maybe String -> Nav.Key -> Flags -> UiSettings -> Msg -> Model -> UpdateResult -update mId key flags settings msg model = +update : Maybe String -> Nav.Key -> Flags -> Texts -> UiSettings -> Msg -> Model -> UpdateResult +update mId key flags texts settings msg model = case msg of Init -> let @@ -63,7 +64,7 @@ update mId key flags settings msg model = in makeResult <| Util.Update.andThen3 - [ update mId key flags settings (SearchMenuMsg Comp.SearchMenu.Init) + [ update mId key flags texts settings (SearchMenuMsg Comp.SearchMenu.Init) , doSearch searchParam ] model @@ -73,7 +74,7 @@ update mId key flags settings msg model = nm = { model | searchOffset = 0, powerSearchInput = Comp.PowerSearchInput.init } in - update mId key flags settings (SearchMenuMsg Comp.SearchMenu.ResetForm) nm + update mId key flags texts settings (SearchMenuMsg Comp.SearchMenu.ResetForm) nm SearchMenuMsg m -> let @@ -119,7 +120,7 @@ update mId key flags settings msg model = SetLinkTarget lt -> case linkTargetMsg lt of Just m -> - update mId key flags settings m model + update mId key flags texts settings m model Nothing -> makeResult ( model, Cmd.none, Sub.none ) @@ -167,7 +168,7 @@ update mId key flags settings msg model = in makeResult <| Util.Update.andThen3 - [ update mId key flags settings (ItemCardListMsg (Comp.ItemCardList.SetResults list)) + [ update mId key flags texts settings (ItemCardListMsg (Comp.ItemCardList.SetResults list)) , if scroll then scrollToCard mId @@ -189,7 +190,7 @@ update mId key flags settings msg model = , moreAvailable = list.groups /= [] } in - update mId key flags settings (ItemCardListMsg (Comp.ItemCardList.AddResults list)) m + update mId key flags texts settings (ItemCardListMsg (Comp.ItemCardList.AddResults list)) m ItemSearchAddResp (Err _) -> withSub @@ -289,18 +290,18 @@ update mId key flags settings msg model = smMsg = SearchMenuMsg (Comp.SearchMenu.SetTextSearch str) in - update mId key flags settings smMsg model + update mId key flags texts settings smMsg model ToggleSearchType -> case model.searchTypeDropdownValue of BasicSearch -> - update mId key flags settings (SearchMenuMsg Comp.SearchMenu.SetFulltextSearch) model + update mId key flags texts settings (SearchMenuMsg Comp.SearchMenu.SetFulltextSearch) model ContentOnlySearch -> - update mId key flags settings (SearchMenuMsg Comp.SearchMenu.SetNamesSearch) model + update mId key flags texts settings (SearchMenuMsg Comp.SearchMenu.SetNamesSearch) model KeyUpSearchbarMsg (Just Enter) -> - update mId key flags settings (DoSearch model.searchTypeDropdownValue) model + update mId key flags texts settings (DoSearch model.searchTypeDropdownValue) model KeyUpSearchbarMsg _ -> withSub ( model, Cmd.none ) @@ -614,6 +615,7 @@ update mId key flags settings msg model = update mId key flags + texts settings (DoSearch model.searchTypeDropdownValue) model_ @@ -676,7 +678,7 @@ update mId key flags settings msg model = SelectView svm -> let result = - Comp.PublishItems.update flags lmsg svm.publishModel + Comp.PublishItems.update texts.publishItems flags lmsg svm.publishModel nextView = case result.outcome of @@ -693,6 +695,7 @@ update mId key flags settings msg model = update mId key flags + texts settings (DoSearch model.searchTypeDropdownValue) model_ @@ -809,7 +812,7 @@ update mId key flags settings msg model = model_ = { model | viewMode = viewMode } in - update mId key flags settings (DoSearch model.lastSearchType) model_ + update mId key flags texts settings (DoSearch model.lastSearchType) model_ SearchStatsResp result -> let @@ -819,7 +822,7 @@ update mId key flags settings msg model = stats = Result.withDefault model.searchStats result in - update mId key flags settings lm { model | searchStats = stats } + update mId key flags texts settings lm { model | searchStats = stats } TogglePreviewFullWidth -> let @@ -861,16 +864,16 @@ update mId key flags settings msg model = makeResult ( model_, cmd_, Sub.map PowerSearchMsg result.subs ) Comp.PowerSearchInput.SubmitSearch -> - update mId key flags settings (DoSearch model_.searchTypeDropdownValue) model_ + update mId key flags texts settings (DoSearch model_.searchTypeDropdownValue) model_ KeyUpPowerSearchbarMsg (Just Enter) -> - update mId key flags settings (DoSearch model.searchTypeDropdownValue) model + update mId key flags texts settings (DoSearch model.searchTypeDropdownValue) model KeyUpPowerSearchbarMsg _ -> withSub ( model, Cmd.none ) RemoveItem id -> - update mId key flags settings (ItemCardListMsg (Comp.ItemCardList.RemoveItem id)) model + update mId key flags texts settings (ItemCardListMsg (Comp.ItemCardList.RemoveItem id)) model TogglePublishCurrentQueryView -> case createQuery model of @@ -889,7 +892,7 @@ update mId key flags settings msg model = PublishView inPM -> let result = - Comp.PublishItems.update flags lmsg inPM + Comp.PublishItems.update texts.publishItems flags lmsg inPM in case result.outcome of Comp.PublishItems.OutcomeInProgress -> From 2ac0b84e5226c2e018852cd648d67ae28f6e612b Mon Sep 17 00:00:00 2001 From: eikek Date: Sat, 23 Oct 2021 23:29:36 +0200 Subject: [PATCH 64/75] Link shares to the user, not the collective The user is required when searching because of folders (sadly), so the share is connected to the user. --- .../scala/docspell/backend/ops/OShare.scala | 68 ++++++++----- .../scala/docspell/common/AccountId.scala | 1 + .../src/main/resources/docspell-openapi.yml | 13 +++ .../restserver/http4s/QueryParam.scala | 3 +- .../restserver/routes/ShareRoutes.scala | 44 +++++---- .../restserver/routes/ShareSearchRoutes.scala | 2 +- .../db/migration/h2/V1.27.1__item_share.sql | 4 +- .../migration/mariadb/V1.27.1__item_share.sql | 4 +- .../postgresql/V1.27.1__item_share.sql | 4 +- .../scala/docspell/store/records/RShare.scala | 76 ++++++++++----- .../scala/docspell/store/records/RUser.scala | 8 +- modules/webapp/package-lock.json | 23 +---- modules/webapp/src/main/elm/Api.elm | 15 ++- .../webapp/src/main/elm/Comp/ShareManage.elm | 96 ++++++++++++++++--- .../webapp/src/main/elm/Comp/ShareTable.elm | 8 +- .../main/elm/Messages/Comp/ShareManage.elm | 6 ++ .../src/main/elm/Messages/Comp/ShareTable.elm | 3 + 17 files changed, 268 insertions(+), 110 deletions(-) diff --git a/modules/backend/src/main/scala/docspell/backend/ops/OShare.scala b/modules/backend/src/main/scala/docspell/backend/ops/OShare.scala index e8dae28f..ba27ea70 100644 --- a/modules/backend/src/main/scala/docspell/backend/ops/OShare.scala +++ b/modules/backend/src/main/scala/docspell/backend/ops/OShare.scala @@ -21,20 +21,24 @@ import docspell.query.ItemQuery.Expr import docspell.query.ItemQuery.Expr.AttachId import docspell.store.Store import docspell.store.queries.SearchSummary -import docspell.store.records.{RShare, RUserEmail} +import docspell.store.records._ import emil._ import scodec.bits.ByteVector trait OShare[F[_]] { - def findAll(collective: Ident): F[List[RShare]] + def findAll( + collective: Ident, + ownerLogin: Option[Ident], + query: Option[String] + ): F[List[ShareData]] def delete(id: Ident, collective: Ident): F[Boolean] def addNew(share: OShare.NewShare): F[OShare.ChangeResult] - def findOne(id: Ident, collective: Ident): OptionT[F, RShare] + def findOne(id: Ident, collective: Ident): OptionT[F, ShareData] def update( id: Ident, @@ -91,12 +95,7 @@ object OShare { case object NotFound extends SendResult } - final case class ShareQuery(id: Ident, cid: Ident, query: ItemQuery) { - - //TODO - def asAccount: AccountId = - AccountId(cid, Ident.unsafe("")) - } + final case class ShareQuery(id: Ident, account: AccountId, query: ItemQuery) sealed trait VerifyResult { def toEither: Either[String, ShareToken] = @@ -121,7 +120,7 @@ object OShare { } final case class NewShare( - cid: Ident, + account: AccountId, name: Option[String], query: ItemQuery, enabled: Boolean, @@ -133,11 +132,15 @@ object OShare { object ChangeResult { final case class Success(id: Ident) extends ChangeResult case object PublishUntilInPast extends ChangeResult + case object NotFound extends ChangeResult def success(id: Ident): ChangeResult = Success(id) def publishUntilInPast: ChangeResult = PublishUntilInPast + def notFound: ChangeResult = NotFound } + final case class ShareData(share: RShare, user: RUser) + def apply[F[_]: Async]( store: Store[F], itemSearch: OItemSearch[F], @@ -147,8 +150,14 @@ object OShare { new OShare[F] { private[this] val logger = Logger.log4s[F](org.log4s.getLogger) - def findAll(collective: Ident): F[List[RShare]] = - store.transact(RShare.findAllByCollective(collective)) + def findAll( + collective: Ident, + ownerLogin: Option[Ident], + query: Option[String] + ): F[List[ShareData]] = + store + .transact(RShare.findAllByCollective(collective, ownerLogin, query)) + .map(_.map(ShareData.tupled)) def delete(id: Ident, collective: Ident): F[Boolean] = store.transact(RShare.deleteByIdAndCid(id, collective)).map(_ > 0) @@ -157,10 +166,11 @@ object OShare { for { curTime <- Timestamp.current[F] id <- Ident.randomId[F] + user <- store.transact(RUser.findByAccount(share.account)) pass = share.password.map(PasswordCrypt.crypt) record = RShare( id, - share.cid, + user.map(_.uid).getOrElse(Ident.unsafe("-error-no-user-")), share.name, share.query, share.enabled, @@ -182,9 +192,10 @@ object OShare { ): F[ChangeResult] = for { curTime <- Timestamp.current[F] + user <- store.transact(RUser.findByAccount(share.account)) record = RShare( id, - share.cid, + user.map(_.uid).getOrElse(Ident.unsafe("-error-no-user-")), share.name, share.query, share.enabled, @@ -199,11 +210,14 @@ object OShare { else store .transact(RShare.updateData(record, removePassword)) - .map(_ => ChangeResult.success(id)) + .map(n => if (n > 0) ChangeResult.success(id) else ChangeResult.notFound) } yield res - def findOne(id: Ident, collective: Ident): OptionT[F, RShare] = - RShare.findOne(id, collective).mapK(store.transform) + def findOne(id: Ident, collective: Ident): OptionT[F, ShareData] = + RShare + .findOne(id, collective) + .mapK(store.transform) + .map(ShareData.tupled) def verify( key: ByteVector @@ -211,7 +225,7 @@ object OShare { RShare .findCurrentActive(id) .mapK(store.transform) - .semiflatMap { share => + .semiflatMap { case (share, _) => val pwCheck = share.password.map(encPw => password.exists(PasswordCrypt.check(_, encPw))) @@ -257,7 +271,9 @@ object OShare { RShare .findCurrentActive(id) .mapK(store.transform) - .map(share => ShareQuery(share.id, share.cid, share.query)) + .map { case (share, user) => + ShareQuery(share.id, user.accountId, share.query) + } def findAttachmentPreview( attachId: Ident, @@ -266,21 +282,23 @@ object OShare { for { sq <- findShareQuery(shareId) _ <- checkAttachment(sq, AttachId(attachId.id)) - res <- OptionT(itemSearch.findAttachmentPreview(attachId, sq.cid)) + res <- OptionT( + itemSearch.findAttachmentPreview(attachId, sq.account.collective) + ) } yield res def findAttachment(attachId: Ident, shareId: Ident): OptionT[F, AttachmentData[F]] = for { sq <- findShareQuery(shareId) _ <- checkAttachment(sq, AttachId(attachId.id)) - res <- OptionT(itemSearch.findAttachment(attachId, sq.cid)) + res <- OptionT(itemSearch.findAttachment(attachId, sq.account.collective)) } yield res def findItem(itemId: Ident, shareId: Ident): OptionT[F, ItemData] = for { sq <- findShareQuery(shareId) _ <- checkAttachment(sq, Expr.itemIdEq(itemId.id)) - res <- OptionT(itemSearch.findItem(itemId, sq.cid)) + res <- OptionT(itemSearch.findItem(itemId, sq.account.collective)) } yield res /** Check whether the attachment with the given id is in the results of the given @@ -288,7 +306,7 @@ object OShare { */ private def checkAttachment(sq: ShareQuery, idExpr: Expr): OptionT[F, Unit] = { val checkQuery = Query( - Query.Fix(sq.asAccount, Some(sq.query.expr), None), + Query.Fix(sq.account, Some(sq.query.expr), None), Query.QueryExpr(idExpr) ) OptionT( @@ -310,7 +328,7 @@ object OShare { ): OptionT[F, StringSearchResult[SearchSummary]] = findShareQuery(shareId) .semiflatMap { share => - val fix = Query.Fix(share.asAccount, Some(share.query.expr), None) + val fix = Query.Fix(share.account, Some(share.query.expr), None) simpleSearch .searchSummaryByString(settings)(fix, q) .map { @@ -350,7 +368,7 @@ object OShare { (for { _ <- RShare .findCurrentActive(mail.shareId) - .filter(_.cid == account.collective) + .filter(_._2.cid == account.collective) .mapK(store.transform) mailCfg <- getSmtpSettings mail <- createMail(mailCfg) diff --git a/modules/common/src/main/scala/docspell/common/AccountId.scala b/modules/common/src/main/scala/docspell/common/AccountId.scala index bd8f1fb1..e8479966 100644 --- a/modules/common/src/main/scala/docspell/common/AccountId.scala +++ b/modules/common/src/main/scala/docspell/common/AccountId.scala @@ -8,6 +8,7 @@ package docspell.common import io.circe._ +/** The collective and user name. */ case class AccountId(collective: Ident, user: Ident) { def asString = if (collective == user) user.id diff --git a/modules/restapi/src/main/resources/docspell-openapi.yml b/modules/restapi/src/main/resources/docspell-openapi.yml index e5ce7c9e..f7e250fa 100644 --- a/modules/restapi/src/main/resources/docspell-openapi.yml +++ b/modules/restapi/src/main/resources/docspell-openapi.yml @@ -1932,6 +1932,9 @@ paths: Return a list of all shares for this collective. security: - authTokenHeader: [] + parameters: + - $ref: "#/components/parameters/q" + - $ref: "#/components/parameters/owningShare" responses: 200: description: Ok @@ -4496,6 +4499,7 @@ components: required: - id - query + - owner - enabled - publishAt - publishUntil @@ -4509,6 +4513,8 @@ components: query: type: string format: itemquery + owner: + $ref: "#/components/schemas/IdName" name: type: string enabled: @@ -6805,6 +6811,13 @@ components: required: false schema: type: boolean + owningShare: + name: owning + in: query + description: Return my own shares only + required: false + schema: + type: boolean checksum: name: checksum in: path diff --git a/modules/restserver/src/main/scala/docspell/restserver/http4s/QueryParam.scala b/modules/restserver/src/main/scala/docspell/restserver/http4s/QueryParam.scala index 102325da..041814cf 100644 --- a/modules/restserver/src/main/scala/docspell/restserver/http4s/QueryParam.scala +++ b/modules/restserver/src/main/scala/docspell/restserver/http4s/QueryParam.scala @@ -16,7 +16,7 @@ import docspell.common.SearchMode import org.http4s.ParseFailure import org.http4s.QueryParamDecoder -import org.http4s.dsl.impl.OptionalQueryParamDecoderMatcher +import org.http4s.dsl.impl.{FlagQueryParamMatcher, OptionalQueryParamDecoderMatcher} object QueryParam { case class QueryString(q: String) @@ -67,6 +67,7 @@ object QueryParam { object FullOpt extends OptionalQueryParamDecoderMatcher[Boolean]("full") object OwningOpt extends OptionalQueryParamDecoderMatcher[Boolean]("owning") + object OwningFlag extends FlagQueryParamMatcher("owning") object ContactKindOpt extends OptionalQueryParamDecoderMatcher[ContactKind]("kind") diff --git a/modules/restserver/src/main/scala/docspell/restserver/routes/ShareRoutes.scala b/modules/restserver/src/main/scala/docspell/restserver/routes/ShareRoutes.scala index 92830d2d..4106642f 100644 --- a/modules/restserver/src/main/scala/docspell/restserver/routes/ShareRoutes.scala +++ b/modules/restserver/src/main/scala/docspell/restserver/routes/ShareRoutes.scala @@ -18,8 +18,7 @@ import docspell.common.{Ident, Timestamp} import docspell.restapi.model._ import docspell.restserver.Config import docspell.restserver.auth.ShareCookieData -import docspell.restserver.http4s.{ClientRequestInfo, ResponseGenerator} -import docspell.store.records.RShare +import docspell.restserver.http4s.{ClientRequestInfo, QueryParam => QP, ResponseGenerator} import emil.MailAddress import emil.javamail.syntax._ @@ -35,9 +34,10 @@ object ShareRoutes { import dsl._ HttpRoutes.of { - case GET -> Root => + case GET -> Root :? QP.Query(q) :? QP.OwningFlag(owning) => + val login = if (owning) Some(user.account.user) else None for { - all <- backend.share.findAll(user.account.collective) + all <- backend.share.findAll(user.account.collective, login, q) now <- Timestamp.current[F] res <- Ok(ShareList(all.map(mkShareDetail(now)))) } yield res @@ -111,7 +111,7 @@ object ShareRoutes { def mkNewShare(data: ShareData, user: AuthToken): OShare.NewShare = OShare.NewShare( - user.account.collective, + user.account, data.name, data.query, data.enabled, @@ -124,6 +124,12 @@ object ShareRoutes { case OShare.ChangeResult.Success(id) => IdResult(true, msg, id) case OShare.ChangeResult.PublishUntilInPast => IdResult(false, "Until date must not be in the past", Ident.unsafe("")) + case OShare.ChangeResult.NotFound => + IdResult( + false, + "Share not found or not owner. Only the owner can update a share.", + Ident.unsafe("") + ) } def mkBasicResult(r: OShare.ChangeResult, msg: => String): BasicResult = @@ -131,20 +137,26 @@ object ShareRoutes { case OShare.ChangeResult.Success(_) => BasicResult(true, msg) case OShare.ChangeResult.PublishUntilInPast => BasicResult(false, "Until date must not be in the past") + case OShare.ChangeResult.NotFound => + BasicResult( + false, + "Share not found or not owner. Only the owner can update a share." + ) } - def mkShareDetail(now: Timestamp)(r: RShare): ShareDetail = + def mkShareDetail(now: Timestamp)(r: OShare.ShareData): ShareDetail = ShareDetail( - r.id, - r.query, - r.name, - r.enabled, - r.publishAt, - r.publishUntil, - now > r.publishUntil, - r.password.isDefined, - r.views, - r.lastAccess + r.share.id, + r.share.query, + IdName(r.user.uid, r.user.login.id), + r.share.name, + r.share.enabled, + r.share.publishAt, + r.share.publishUntil, + now > r.share.publishUntil, + r.share.password.isDefined, + r.share.views, + r.share.lastAccess ) def convertIn(s: SimpleShareMail): Either[String, ShareMail] = diff --git a/modules/restserver/src/main/scala/docspell/restserver/routes/ShareSearchRoutes.scala b/modules/restserver/src/main/scala/docspell/restserver/routes/ShareSearchRoutes.scala index 96202f14..64e14a5e 100644 --- a/modules/restserver/src/main/scala/docspell/restserver/routes/ShareSearchRoutes.scala +++ b/modules/restserver/src/main/scala/docspell/restserver/routes/ShareSearchRoutes.scala @@ -59,7 +59,7 @@ object ShareSearchRoutes { cfg.maxNoteLength, searchMode = SearchMode.Normal ) - account = share.asAccount + account = share.account fixQuery = Query.Fix(account, Some(share.query.expr), None) _ <- logger.debug(s"Searching in share ${share.id.id}: ${userQuery.query}") resp <- ItemRoutes.searchItems(backend, dsl)(settings, fixQuery, itemQuery) diff --git a/modules/store/src/main/resources/db/migration/h2/V1.27.1__item_share.sql b/modules/store/src/main/resources/db/migration/h2/V1.27.1__item_share.sql index 7e252c14..9765afc1 100644 --- a/modules/store/src/main/resources/db/migration/h2/V1.27.1__item_share.sql +++ b/modules/store/src/main/resources/db/migration/h2/V1.27.1__item_share.sql @@ -1,6 +1,6 @@ CREATE TABLE "item_share" ( "id" varchar(254) not null primary key, - "cid" varchar(254) not null, + "user_id" varchar(254) not null, "name" varchar(254), "query" varchar(2000) not null, "enabled" boolean not null, @@ -9,5 +9,5 @@ CREATE TABLE "item_share" ( "publish_until" timestamp not null, "views" int not null, "last_access" timestamp, - foreign key ("cid") references "collective"("cid") on delete cascade + foreign key ("user_id") references "user_"("uid") on delete cascade ) diff --git a/modules/store/src/main/resources/db/migration/mariadb/V1.27.1__item_share.sql b/modules/store/src/main/resources/db/migration/mariadb/V1.27.1__item_share.sql index fb74d283..714aabbb 100644 --- a/modules/store/src/main/resources/db/migration/mariadb/V1.27.1__item_share.sql +++ b/modules/store/src/main/resources/db/migration/mariadb/V1.27.1__item_share.sql @@ -1,6 +1,6 @@ CREATE TABLE `item_share` ( `id` varchar(254) not null primary key, - `cid` varchar(254) not null, + `user_id` varchar(254) not null, `name` varchar(254), `query` varchar(2000) not null, `enabled` boolean not null, @@ -9,5 +9,5 @@ CREATE TABLE `item_share` ( `publish_until` timestamp not null, `views` int not null, `last_access` timestamp, - foreign key (`cid`) references `collective`(`cid`) on delete cascade + foreign key (`user_id`) references `user_`(`uid`) on delete cascade ) diff --git a/modules/store/src/main/resources/db/migration/postgresql/V1.27.1__item_share.sql b/modules/store/src/main/resources/db/migration/postgresql/V1.27.1__item_share.sql index 7e252c14..9765afc1 100644 --- a/modules/store/src/main/resources/db/migration/postgresql/V1.27.1__item_share.sql +++ b/modules/store/src/main/resources/db/migration/postgresql/V1.27.1__item_share.sql @@ -1,6 +1,6 @@ CREATE TABLE "item_share" ( "id" varchar(254) not null primary key, - "cid" varchar(254) not null, + "user_id" varchar(254) not null, "name" varchar(254), "query" varchar(2000) not null, "enabled" boolean not null, @@ -9,5 +9,5 @@ CREATE TABLE "item_share" ( "publish_until" timestamp not null, "views" int not null, "last_access" timestamp, - foreign key ("cid") references "collective"("cid") on delete cascade + foreign key ("user_id") references "user_"("uid") on delete cascade ) diff --git a/modules/store/src/main/scala/docspell/store/records/RShare.scala b/modules/store/src/main/scala/docspell/store/records/RShare.scala index 7d6ae9bd..5ddfdb6b 100644 --- a/modules/store/src/main/scala/docspell/store/records/RShare.scala +++ b/modules/store/src/main/scala/docspell/store/records/RShare.scala @@ -18,7 +18,7 @@ import doobie.implicits._ final case class RShare( id: Ident, - cid: Ident, + userId: Ident, name: Option[String], query: ItemQuery, enabled: Boolean, @@ -35,7 +35,7 @@ object RShare { val tableName = "item_share"; val id = Column[Ident]("id", this) - val cid = Column[Ident]("cid", this) + val userId = Column[Ident]("user_id", this) val name = Column[String]("name", this) val query = Column[ItemQuery]("query", this) val enabled = Column[Boolean]("enabled", this) @@ -48,7 +48,7 @@ object RShare { val all: NonEmptyList[Column[_]] = NonEmptyList.of( id, - cid, + userId, name, query, enabled, @@ -67,7 +67,7 @@ object RShare { DML.insert( T, T.all, - fr"${r.id},${r.cid},${r.name},${r.query},${r.enabled},${r.password},${r.publishAt},${r.publishUntil},${r.views},${r.lastAccess}" + fr"${r.id},${r.userId},${r.name},${r.query},${r.enabled},${r.password},${r.publishAt},${r.publishUntil},${r.views},${r.lastAccess}" ) def incAccess(id: Ident): ConnectionIO[Int] = @@ -83,7 +83,7 @@ object RShare { def updateData(r: RShare, removePassword: Boolean): ConnectionIO[Int] = DML.update( T, - T.id === r.id && T.cid === r.cid, + T.id === r.id && T.userId === r.userId, DML.set( T.name.setTo(r.name), T.query.setTo(r.query), @@ -94,26 +94,41 @@ object RShare { else Nil) ) - def findOne(id: Ident, cid: Ident): OptionT[ConnectionIO, RShare] = + def findOne(id: Ident, cid: Ident): OptionT[ConnectionIO, (RShare, RUser)] = { + val s = RShare.as("s") + val u = RUser.as("u") + OptionT( - Select(select(T.all), from(T), T.id === id && T.cid === cid).build - .query[RShare] + Select( + select(s.all, u.all), + from(s).innerJoin(u, u.uid === s.userId), + s.id === id && u.cid === cid + ).build + .query[(RShare, RUser)] .option ) + } private def activeCondition(t: Table, id: Ident, current: Timestamp): Condition = t.id === id && t.enabled === true && t.publishedUntil > current - def findActive(id: Ident, current: Timestamp): OptionT[ConnectionIO, RShare] = + def findActive( + id: Ident, + current: Timestamp + ): OptionT[ConnectionIO, (RShare, RUser)] = { + val s = RShare.as("s") + val u = RUser.as("u") + OptionT( Select( - select(T.all), - from(T), - activeCondition(T, id, current) - ).build.query[RShare].option + select(s.all, u.all), + from(s).innerJoin(u, s.userId === u.uid), + activeCondition(s, id, current) + ).build.query[(RShare, RUser)].option ) + } - def findCurrentActive(id: Ident): OptionT[ConnectionIO, RShare] = + def findCurrentActive(id: Ident): OptionT[ConnectionIO, (RShare, RUser)] = OptionT.liftF(Timestamp.current[ConnectionIO]).flatMap(now => findActive(id, now)) def findActivePassword(id: Ident): OptionT[ConnectionIO, Option[Password]] = @@ -123,13 +138,30 @@ object RShare { .option }) - def findAllByCollective(cid: Ident): ConnectionIO[List[RShare]] = - Select(select(T.all), from(T), T.cid === cid) - .orderBy(T.publishedAt.desc) - .build - .query[RShare] - .to[List] + def findAllByCollective( + cid: Ident, + ownerLogin: Option[Ident], + q: Option[String] + ): ConnectionIO[List[(RShare, RUser)]] = { + val s = RShare.as("s") + val u = RUser.as("u") - def deleteByIdAndCid(id: Ident, cid: Ident): ConnectionIO[Int] = - DML.delete(T, T.id === id && T.cid === cid) + val ownerQ = ownerLogin.map(name => u.login === name) + val nameQ = q.map(n => s.name.like(s"%$n%")) + + Select( + select(s.all, u.all), + from(s).innerJoin(u, u.uid === s.userId), + u.cid === cid &&? ownerQ &&? nameQ + ) + .orderBy(s.publishedAt.desc) + .build + .query[(RShare, RUser)] + .to[List] + } + + def deleteByIdAndCid(id: Ident, cid: Ident): ConnectionIO[Int] = { + val u = RUser.T + DML.delete(T, T.id === id && T.userId.in(Select(u.uid.s, from(u), u.cid === cid))) + } } diff --git a/modules/store/src/main/scala/docspell/store/records/RUser.scala b/modules/store/src/main/scala/docspell/store/records/RUser.scala index dc8f66d8..dbd4051c 100644 --- a/modules/store/src/main/scala/docspell/store/records/RUser.scala +++ b/modules/store/src/main/scala/docspell/store/records/RUser.scala @@ -26,7 +26,13 @@ case class RUser( loginCount: Int, lastLogin: Option[Timestamp], created: Timestamp -) {} +) { + def accountId: AccountId = + AccountId(cid, login) + + def idRef: IdRef = + IdRef(uid, login.id) +} object RUser { diff --git a/modules/webapp/package-lock.json b/modules/webapp/package-lock.json index 6f8016f3..4801d04f 100644 --- a/modules/webapp/package-lock.json +++ b/modules/webapp/package-lock.json @@ -153,20 +153,8 @@ "electron-to-chromium": "^1.3.719", "escalade": "^3.1.1", "node-releases": "^1.1.71" - }, - "dependencies": { - "caniuse-lite": { - "version": "1.0.30001230", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001230.tgz", - "integrity": "sha512-5yBd5nWCBS+jWKTcHOzXwo5xzcj4ePE/yjtkZyUV1BTUmrBaA9MRGC+e7mxnqXSA90CmCA8L3eKLaSUkt099IQ==" - } } }, - "caniuse-lite": { - "version": "1.0.30001204", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001204.tgz", - "integrity": "sha512-JUdjWpcxfJ9IPamy2f5JaRDCaqJOxDzOSKtbdx4rH9VivMd1vIzoPumsJa9LoMIi4Fx2BV2KZOxWhNkBjaYivQ==" - }, "colorette": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", @@ -228,11 +216,6 @@ "node-releases": "^1.1.71" }, "dependencies": { - "caniuse-lite": { - "version": "1.0.30001230", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001230.tgz", - "integrity": "sha512-5yBd5nWCBS+jWKTcHOzXwo5xzcj4ePE/yjtkZyUV1BTUmrBaA9MRGC+e7mxnqXSA90CmCA8L3eKLaSUkt099IQ==" - }, "colorette": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", @@ -272,9 +255,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001208", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001208.tgz", - "integrity": "sha512-OE5UE4+nBOro8Dyvv0lfx+SRtfVIOM9uhKqFmJeUbGriqhhStgp1A0OyBpgy3OUF8AhYCT+PVwPC1gMl2ZcQMA==" + "version": "1.0.30001271", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001271.tgz", + "integrity": "sha512-BBruZFWmt3HFdVPS8kceTBIguKxu4f99n5JNp06OlPD/luoAMIaIK5ieV5YjnBLH3Nysai9sxj9rpJj4ZisXOA==" }, "chalk": { "version": "2.4.2", diff --git a/modules/webapp/src/main/elm/Api.elm b/modules/webapp/src/main/elm/Api.elm index 2051fe23..bb89794d 100644 --- a/modules/webapp/src/main/elm/Api.elm +++ b/modules/webapp/src/main/elm/Api.elm @@ -2228,10 +2228,19 @@ disableOtp flags otp receive = --- Share -getShares : Flags -> (Result Http.Error ShareList -> msg) -> Cmd msg -getShares flags receive = +getShares : Flags -> String -> Bool -> (Result Http.Error ShareList -> msg) -> Cmd msg +getShares flags query owning receive = Http2.authGet - { url = flags.config.baseUrl ++ "/api/v1/sec/share" + { url = + flags.config.baseUrl + ++ "/api/v1/sec/share?q=" + ++ Url.percentEncode query + ++ (if owning then + "&owning" + + else + "" + ) , account = getAccount flags , expect = Http.expectJson receive Api.Model.ShareList.decoder } diff --git a/modules/webapp/src/main/elm/Comp/ShareManage.elm b/modules/webapp/src/main/elm/Comp/ShareManage.elm index be079129..e1c33def 100644 --- a/modules/webapp/src/main/elm/Comp/ShareManage.elm +++ b/modules/webapp/src/main/elm/Comp/ShareManage.elm @@ -56,6 +56,8 @@ type alias Model = , loading : Bool , formError : FormError , deleteConfirm : DeleteConfirm + , query : String + , owningOnly : Bool } @@ -75,6 +77,8 @@ init flags = , loading = False , formError = FormErrorNone , deleteConfirm = DeleteConfirmOff + , query = "" + , owningOnly = True } , Cmd.batch [ Cmd.map FormMsg fc @@ -90,6 +94,8 @@ type Msg | MailMsg Comp.ShareMail.Msg | InitNewShare | SetViewMode ViewMode + | SetQuery String + | ToggleOwningOnly | Submit | RequestDelete | CancelDelete @@ -126,7 +132,7 @@ update texts flags msg model = SetViewMode vm -> ( { model | viewMode = vm, formError = FormErrorNone } , if vm == Table then - Api.getShares flags LoadSharesResp + Api.getShares flags model.query model.owningOnly LoadSharesResp else Cmd.none @@ -165,7 +171,10 @@ update texts flags msg model = ) LoadShares -> - ( { model | loading = True }, Api.getShares flags LoadSharesResp, Sub.none ) + ( { model | loading = True } + , Api.getShares flags model.query model.owningOnly LoadSharesResp + , Sub.none + ) LoadSharesResp (Ok list) -> ( { model | loading = False, shares = list.items, formError = FormErrorNone } @@ -231,6 +240,26 @@ update texts flags msg model = in ( { model | mailModel = mm }, Cmd.map MailMsg mc, Sub.none ) + SetQuery q -> + let + nm = + { model | query = q } + in + ( nm + , Api.getShares flags nm.query nm.owningOnly LoadSharesResp + , Sub.none + ) + + ToggleOwningOnly -> + let + nm = + { model | owningOnly = not model.owningOnly } + in + ( nm + , Api.getShares flags nm.query nm.owningOnly LoadSharesResp + , Sub.none + ) + setShare : Texts -> ShareDetail -> Flags -> Model -> ( Model, Cmd Msg, Sub Msg ) setShare texts share flags model = @@ -271,7 +300,19 @@ viewTable texts model = div [ class "flex flex-col" ] [ MB.view { start = - [] + [ MB.TextInput + { tagger = SetQuery + , value = model.query + , placeholder = texts.basics.searchPlaceholder + , icon = Just "fa fa-search" + } + , MB.Checkbox + { tagger = \_ -> ToggleOwningOnly + , label = texts.showOwningSharesOnly + , value = model.owningOnly + , id = "share-toggle-owner" + } + ] , end = [ MB.PrimaryButton { tagger = InitNewShare @@ -295,6 +336,11 @@ viewForm texts settings flags model = let newShare = model.formModel.share.id == "" + + isOwner = + Maybe.map .user flags.account + |> Maybe.map ((==) model.formModel.share.owner.name) + |> Maybe.withDefault False in div [] [ Html.form [] @@ -305,20 +351,34 @@ viewForm texts settings flags model = else h1 [ class S.header2 ] - [ text <| Maybe.withDefault texts.noName model.formModel.share.name - , div [ class "opacity-50 text-sm" ] - [ text "Id: " - , text model.formModel.share.id + [ div [ class "flex flex-row items-center" ] + [ div + [ class "flex text-sm opacity-75 label mr-3" + , classList [ ( "hidden", isOwner ) ] + ] + [ i [ class "fa fa-user mr-2" ] [] + , text model.formModel.share.owner.name + ] + , text <| Maybe.withDefault texts.noName model.formModel.share.name + ] + , div [ class "flex flex-row items-center" ] + [ div [ class "opacity-50 text-sm flex-grow" ] + [ text "Id: " + , text model.formModel.share.id + ] ] ] , MB.view { start = - [ MB.PrimaryButton - { tagger = Submit - , title = "Submit this form" - , icon = Just "fa fa-save" - , label = texts.basics.submit - } + [ MB.CustomElement <| + B.primaryButton + { handler = onClick Submit + , title = "Submit this form" + , icon = "fa fa-save" + , label = texts.basics.submit + , disabled = not isOwner + , attrs = [ href "#" ] + } , MB.SecondaryButton { tagger = SetViewMode Table , title = texts.basics.backToList @@ -360,7 +420,15 @@ viewForm texts settings flags model = FormErrorSubmit m -> text m ] - , Html.map FormMsg (Comp.ShareForm.view texts.shareForm model.formModel) + , div + [ classList [ ( "hidden", isOwner ) ] + , class S.infoMessage + ] + [ text texts.notOwnerInfo + ] + , div [ classList [ ( "hidden", not isOwner ) ] ] + [ Html.map FormMsg (Comp.ShareForm.view texts.shareForm model.formModel) + ] , B.loadingDimmer { active = model.loading , label = texts.basics.loading diff --git a/modules/webapp/src/main/elm/Comp/ShareTable.elm b/modules/webapp/src/main/elm/Comp/ShareTable.elm index b62f39b5..1082567d 100644 --- a/modules/webapp/src/main/elm/Comp/ShareTable.elm +++ b/modules/webapp/src/main/elm/Comp/ShareTable.elm @@ -56,7 +56,10 @@ view texts shares = , th [ class "text-center" ] [ text texts.active ] - , th [ class "text-center" ] + , th [ class "hidden sm:table-cell text-center" ] + [ text texts.user + ] + , th [ class "hidden sm:table-cell text-center" ] [ text texts.publishUntil ] ] @@ -88,6 +91,9 @@ renderShareLine texts share = else i [ class "fa fa-check" ] [] ] + , td [ class "hidden sm:table-cell text-center" ] + [ text share.owner.name + ] , td [ class "hidden sm:table-cell text-center" ] [ texts.formatDateTime share.publishUntil |> text ] diff --git a/modules/webapp/src/main/elm/Messages/Comp/ShareManage.elm b/modules/webapp/src/main/elm/Messages/Comp/ShareManage.elm index d90824be..773ea5b3 100644 --- a/modules/webapp/src/main/elm/Messages/Comp/ShareManage.elm +++ b/modules/webapp/src/main/elm/Messages/Comp/ShareManage.elm @@ -39,6 +39,8 @@ type alias Texts = , noName : String , shareInformation : String , sendMail : String + , notOwnerInfo : String + , showOwningSharesOnly : String } @@ -62,6 +64,8 @@ gb = , noName = "No Name" , shareInformation = "Share Information" , sendMail = "Send via E-Mail" + , notOwnerInfo = "Only the user who created this share can edit its properties." + , showOwningSharesOnly = "Show my shares only" } @@ -85,4 +89,6 @@ de = , noName = "Ohne Name" , shareInformation = "Informationen zur Freigabe" , sendMail = "Per E-Mail versenden" + , notOwnerInfo = "Nur der Benutzer, der diese Freigabe erstellt hat, kann diese auch ändern." + , showOwningSharesOnly = "Nur meine Freigaben anzeigen" } diff --git a/modules/webapp/src/main/elm/Messages/Comp/ShareTable.elm b/modules/webapp/src/main/elm/Messages/Comp/ShareTable.elm index 5b87e47e..170876ff 100644 --- a/modules/webapp/src/main/elm/Messages/Comp/ShareTable.elm +++ b/modules/webapp/src/main/elm/Messages/Comp/ShareTable.elm @@ -21,6 +21,7 @@ type alias Texts = , formatDateTime : Int -> String , active : String , publishUntil : String + , user : String } @@ -30,6 +31,7 @@ gb = , formatDateTime = DF.formatDateTimeLong Messages.UiLanguage.English , active = "Active" , publishUntil = "Publish Until" + , user = "User" } @@ -39,4 +41,5 @@ de = , formatDateTime = DF.formatDateTimeLong Messages.UiLanguage.German , active = "Aktiv" , publishUntil = "Publiziert bis" + , user = "Benutzer" } From 6696aba4817861e00b0d754d90ebc8b502c9cca2 Mon Sep 17 00:00:00 2001 From: eikek Date: Sat, 23 Oct 2021 23:42:02 +0200 Subject: [PATCH 65/75] Show user shares when asking to delete user --- .../restapi/src/main/resources/docspell-openapi.yml | 4 ++++ .../docspell/restserver/routes/UserRoutes.scala | 4 +++- .../main/scala/docspell/store/queries/QUser.scala | 12 ++++++++++-- modules/webapp/src/main/elm/Comp/UserManage.elm | 12 ++++++++---- .../webapp/src/main/elm/Messages/Comp/UserManage.elm | 12 ++++++++++++ 5 files changed, 37 insertions(+), 7 deletions(-) diff --git a/modules/restapi/src/main/resources/docspell-openapi.yml b/modules/restapi/src/main/resources/docspell-openapi.yml index f7e250fa..f6714ac4 100644 --- a/modules/restapi/src/main/resources/docspell-openapi.yml +++ b/modules/restapi/src/main/resources/docspell-openapi.yml @@ -4554,6 +4554,7 @@ components: required: - folders - sentMails + - shares properties: folders: type: array @@ -4563,6 +4564,9 @@ components: sentMails: type: integer format: int32 + shares: + type: integer + format: int32 SecondFactor: description: | diff --git a/modules/restserver/src/main/scala/docspell/restserver/routes/UserRoutes.scala b/modules/restserver/src/main/scala/docspell/restserver/routes/UserRoutes.scala index 35944fca..ef4d75d8 100644 --- a/modules/restserver/src/main/scala/docspell/restserver/routes/UserRoutes.scala +++ b/modules/restserver/src/main/scala/docspell/restserver/routes/UserRoutes.scala @@ -72,7 +72,9 @@ object UserRoutes { data <- backend.collective.getDeleteUserData( AccountId(user.account.collective, username) ) - resp <- Ok(DeleteUserData(data.ownedFolders.map(_.id), data.sentMails)) + resp <- Ok( + DeleteUserData(data.ownedFolders.map(_.id), data.sentMails, data.shares) + ) } yield resp } } diff --git a/modules/store/src/main/scala/docspell/store/queries/QUser.scala b/modules/store/src/main/scala/docspell/store/queries/QUser.scala index c261b670..6000016a 100644 --- a/modules/store/src/main/scala/docspell/store/queries/QUser.scala +++ b/modules/store/src/main/scala/docspell/store/queries/QUser.scala @@ -20,7 +20,8 @@ object QUser { final case class UserData( ownedFolders: List[Ident], - sentMails: Int + sentMails: Int, + shares: Int ) def getUserData(accountId: AccountId): ConnectionIO[UserData] = { @@ -28,6 +29,7 @@ object QUser { val mail = RSentMail.as("m") val mitem = RSentMailItem.as("mi") val user = RUser.as("u") + val share = RShare.as("s") for { uid <- loadUserId(accountId).map(_.getOrElse(Ident.unsafe(""))) @@ -43,7 +45,13 @@ object QUser { .innerJoin(user, user.uid === mail.uid), user.login === accountId.user && user.cid === accountId.collective ).query[Int].unique - } yield UserData(folders, mails) + shares <- run( + select(count(share.id)), + from(share) + .innerJoin(user, user.uid === share.userId), + user.login === accountId.user && user.cid === accountId.collective + ).query[Int].unique + } yield UserData(folders, mails, shares) } def deleteUserAndData(accountId: AccountId): ConnectionIO[Int] = diff --git a/modules/webapp/src/main/elm/Comp/UserManage.elm b/modules/webapp/src/main/elm/Comp/UserManage.elm index 15efbaf8..47a6d0a6 100644 --- a/modules/webapp/src/main/elm/Comp/UserManage.elm +++ b/modules/webapp/src/main/elm/Comp/UserManage.elm @@ -295,7 +295,7 @@ renderDeleteConfirm texts settings model = DimmerUserData data -> let empty = - List.isEmpty data.folders && data.sentMails == 0 + List.isEmpty data.folders && data.sentMails == 0 && data.shares == 0 folderNames = String.join ", " data.folders @@ -312,16 +312,20 @@ renderDeleteConfirm texts settings model = [ div [] [ text texts.reallyDeleteUser , text " " - , text "The following data will be deleted:" + , text (texts.deleteFollowingData ++ ":") ] , ul [ class "list-inside list-disc" ] [ li [ classList [ ( "hidden", List.isEmpty data.folders ) ] ] - [ text "Folders: " + [ text (texts.folders ++ ": ") , text folderNames ] , li [ classList [ ( "hidden", data.sentMails == 0 ) ] ] [ text (String.fromInt data.sentMails) - , text " sent mails" + , text (" " ++ texts.sentMails) + ] + , li [ classList [ ( "hidden", data.shares == 0 ) ] ] + [ text (String.fromInt data.shares) + , text (" " ++ texts.shares) ] ] ] diff --git a/modules/webapp/src/main/elm/Messages/Comp/UserManage.elm b/modules/webapp/src/main/elm/Messages/Comp/UserManage.elm index 2c59fd72..5f1fd5f2 100644 --- a/modules/webapp/src/main/elm/Messages/Comp/UserManage.elm +++ b/modules/webapp/src/main/elm/Messages/Comp/UserManage.elm @@ -31,6 +31,10 @@ type alias Texts = , deleteThisUser : String , pleaseCorrectErrors : String , notDeleteCurrentUser : String + , folders : String + , sentMails : String + , shares : String + , deleteFollowingData : String } @@ -48,6 +52,10 @@ gb = , deleteThisUser = "Delete this user" , pleaseCorrectErrors = "Please correct the errors in the form." , notDeleteCurrentUser = "You can't delete the user you are currently logged in with." + , folders = "Folders" + , sentMails = "sent mails" + , shares = "shares" + , deleteFollowingData = "The following data will be deleted" } @@ -65,4 +73,8 @@ de = , deleteThisUser = "Benutzer löschen" , pleaseCorrectErrors = "Bitte korrigiere die Fehler im Formular." , notDeleteCurrentUser = "Der aktuelle Benutzer kann nicht gelöscht werden." + , folders = "Ordner" + , sentMails = "gesendete E-Mails" + , shares = "Freigaben" + , deleteFollowingData = "Die folgenden Daten werden auch gelöscht" } From eaccb607324bf6a674840823a082b2030357c71a Mon Sep 17 00:00:00 2001 From: eikek Date: Sun, 24 Oct 2021 00:03:09 +0200 Subject: [PATCH 66/75] Fix date field background for sidebar and main content --- modules/webapp/src/main/styles/index.css | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/modules/webapp/src/main/styles/index.css b/modules/webapp/src/main/styles/index.css index 274ad20a..aecfb8fb 100644 --- a/modules/webapp/src/main/styles/index.css +++ b/modules/webapp/src/main/styles/index.css @@ -18,7 +18,14 @@ } .elm-datepicker--input { - @apply pl-10 placeholder-gray-400 bg-blue-50 dark:text-bluegray-200 dark:bg-bluegray-700 dark:border-bluegray-500 border-gray-500 rounded w-full; + @apply pl-10 rounded w-full placeholder-gray-400 dark:text-bluegray-200 dark:border-bluegray-500; + } + #sidebar .elm-datepicker--input { + @apply dark:bg-bluegray-700 border-gray-500 bg-blue-50; + } + + #content .elm-datepicker--input { + @apply dark:bg-bluegray-800 border-gray-400; } .elm-datepicker--container { From f5bb85c61eb68257e111f6560cf4fd224ba7e2e9 Mon Sep 17 00:00:00 2001 From: eikek Date: Sun, 24 Oct 2021 00:37:53 +0200 Subject: [PATCH 67/75] Improve share email form --- modules/webapp/src/main/elm/Comp/ItemMail.elm | 10 ++++++ .../webapp/src/main/elm/Comp/PublishItems.elm | 35 ++++++++++++++++--- .../webapp/src/main/elm/Comp/ShareMail.elm | 10 ++++-- .../webapp/src/main/elm/Comp/ShareManage.elm | 26 +++++++++++--- .../src/main/elm/Messages/Comp/ShareMail.elm | 3 ++ .../main/elm/Messages/Comp/ShareManage.elm | 6 ++-- 6 files changed, 74 insertions(+), 16 deletions(-) diff --git a/modules/webapp/src/main/elm/Comp/ItemMail.elm b/modules/webapp/src/main/elm/Comp/ItemMail.elm index 540e65c0..617325a5 100644 --- a/modules/webapp/src/main/elm/Comp/ItemMail.elm +++ b/modules/webapp/src/main/elm/Comp/ItemMail.elm @@ -10,6 +10,7 @@ module Comp.ItemMail exposing , Model , Msg , clear + , clearRecipients , emptyModel , init , setMailInfo @@ -115,6 +116,15 @@ clear model = } +clearRecipients : Model -> Model +clearRecipients model = + { model + | recipients = [] + , ccRecipients = [] + , bccRecipients = [] + } + + setMailInfo : String -> String -> Msg setMailInfo subject body = SetSubjectBody subject body diff --git a/modules/webapp/src/main/elm/Comp/PublishItems.elm b/modules/webapp/src/main/elm/Comp/PublishItems.elm index 98d18084..5679f80a 100644 --- a/modules/webapp/src/main/elm/Comp/PublishItems.elm +++ b/modules/webapp/src/main/elm/Comp/PublishItems.elm @@ -29,6 +29,7 @@ import Data.ItemQuery exposing (ItemQuery) import Data.UiSettings exposing (UiSettings) import Html exposing (..) import Html.Attributes exposing (..) +import Html.Events exposing (onClick) import Http import Messages.Comp.PublishItems exposing (Texts) import Ports @@ -57,6 +58,7 @@ type alias Model = , viewMode : ViewMode , formError : FormError , loading : Bool + , mailVisible : Bool } @@ -74,6 +76,7 @@ init flags = , viewMode = ViewModeEdit , formError = FormErrorNone , loading = False + , mailVisible = False } , Cmd.batch [ Cmd.map FormMsg fc @@ -96,6 +99,7 @@ initQuery flags query = , viewMode = ViewModeEdit , formError = FormErrorNone , loading = False + , mailVisible = False } , Cmd.batch [ Cmd.map FormMsg fc @@ -115,6 +119,7 @@ type Msg | SubmitPublish | PublishResp (Result Http.Error IdResult) | GetShareResp (Result Http.Error ShareDetail) + | ToggleMailVisible type Outcome @@ -210,6 +215,7 @@ update texts flags msg model = | formError = FormErrorNone , loading = False , viewMode = ViewModeInfo share + , mailVisible = False , mailModel = mm } , cmd = @@ -228,6 +234,13 @@ update texts flags msg model = , outcome = OutcomeInProgress } + ToggleMailVisible -> + { model = { model | mailVisible = not model.mailVisible } + , cmd = Cmd.none + , sub = Sub.none + , outcome = OutcomeInProgress + } + --- View @@ -281,14 +294,26 @@ viewInfo texts settings flags model share = , div [] [ Comp.ShareView.view cfg texts.shareView flags share ] - , div [ class "flex flex-col mt-6" ] - [ div + , div + [ class "flex flex-col mt-6" + ] + [ a [ class S.header2 + , class "inline-block w-full" + , href "#" + , onClick ToggleMailVisible ] - [ text texts.sendViaMail + [ if model.mailVisible then + i [ class "fa fa-caret-down mr-2" ] [] + + else + i [ class "fa fa-caret-right mr-2" ] [] + , text texts.sendViaMail + ] + , div [ classList [ ( "hidden", not model.mailVisible ) ] ] + [ Html.map MailMsg + (Comp.ShareMail.view texts.shareMail flags settings model.mailModel) ] - , Html.map MailMsg - (Comp.ShareMail.view texts.shareMail flags settings model.mailModel) ] ] diff --git a/modules/webapp/src/main/elm/Comp/ShareMail.elm b/modules/webapp/src/main/elm/Comp/ShareMail.elm index f28f2d70..79701eb3 100644 --- a/modules/webapp/src/main/elm/Comp/ShareMail.elm +++ b/modules/webapp/src/main/elm/Comp/ShareMail.elm @@ -120,7 +120,11 @@ update texts flags msg model = (texts.bodyTemplate url) nm = - { model | share = share } + { model + | share = share + , mailModel = Comp.ItemMail.clearRecipients model.mailModel + , formState = FormStateNone + } in update texts flags (MailMsg lm) nm @@ -128,7 +132,7 @@ update texts flags msg model = if res.success then ( { model | formState = FormStateSent - , mailModel = Comp.ItemMail.clear model.mailModel + , mailModel = Comp.ItemMail.clearRecipients model.mailModel , sending = False } , Cmd.none @@ -176,7 +180,7 @@ view texts flags settings model = FormStateSent -> div [ class S.successMessage ] - [ text "Mail sent." + [ text texts.mailSent ] , Html.map MailMsg (Comp.ItemMail.view texts.itemMail settings cfg model.mailModel) diff --git a/modules/webapp/src/main/elm/Comp/ShareManage.elm b/modules/webapp/src/main/elm/Comp/ShareManage.elm index e1c33def..19bdce86 100644 --- a/modules/webapp/src/main/elm/Comp/ShareManage.elm +++ b/modules/webapp/src/main/elm/Comp/ShareManage.elm @@ -58,6 +58,7 @@ type alias Model = , deleteConfirm : DeleteConfirm , query : String , owningOnly : Bool + , sendMailVisible : Bool } @@ -79,6 +80,7 @@ init flags = , deleteConfirm = DeleteConfirmOff , query = "" , owningOnly = True + , sendMailVisible = False } , Cmd.batch [ Cmd.map FormMsg fc @@ -96,6 +98,7 @@ type Msg | SetViewMode ViewMode | SetQuery String | ToggleOwningOnly + | ToggleSendMailVisible | Submit | RequestDelete | CancelDelete @@ -260,6 +263,9 @@ update texts flags msg model = , Sub.none ) + ToggleSendMailVisible -> + ( { model | sendMailVisible = not model.sendMailVisible }, Cmd.none, Sub.none ) + setShare : Texts -> ShareDetail -> Flags -> Model -> ( Model, Cmd Msg, Sub Msg ) setShare texts share flags model = @@ -268,7 +274,7 @@ setShare texts share flags model = flags.config.baseUrl ++ Page.pageToString (SharePage share.id) nextModel = - { model | formError = FormErrorNone, viewMode = Form, loading = False } + { model | formError = FormErrorNone, viewMode = Form, loading = False, sendMailVisible = False } initClipboard = Ports.initClipboard (Comp.ShareView.clipboardData share) @@ -490,13 +496,23 @@ shareSendMail texts flags settings model = [ class "mt-8 mb-2" , classList [ ( "hidden", share.id == "" || not share.enabled || share.expired ) ] ] - [ h2 + [ a [ class S.header2 - , class "border-b-2 dark:border-bluegray-600" + , class "border-b-2 dark:border-bluegray-600 w-full inline-block" + , href "#" + , onClick ToggleSendMailVisible ] - [ text "Send via E-Mail" + [ if model.sendMailVisible then + i [ class "fa fa-caret-down mr-2" ] [] + + else + i [ class "fa fa-caret-right mr-2" ] [] + , text texts.sendViaMail + ] + , div + [ class "px-2 py-2 dark:border-bluegray-600" + , classList [ ( "hidden", not model.sendMailVisible ) ] ] - , div [ class "px-2 py-2 dark:border-bluegray-600" ] [ Html.map MailMsg (Comp.ShareMail.view texts.shareMail flags settings model.mailModel) ] diff --git a/modules/webapp/src/main/elm/Messages/Comp/ShareMail.elm b/modules/webapp/src/main/elm/Messages/Comp/ShareMail.elm index 8b56bbb7..04d49ba1 100644 --- a/modules/webapp/src/main/elm/Messages/Comp/ShareMail.elm +++ b/modules/webapp/src/main/elm/Messages/Comp/ShareMail.elm @@ -23,6 +23,7 @@ type alias Texts = , httpError : Http.Error -> String , subjectTemplate : Maybe String -> String , bodyTemplate : String -> String + , mailSent : String } @@ -40,6 +41,7 @@ you can find the documents here: Kind regards """ + , mailSent = "Mail sent." } @@ -57,4 +59,5 @@ die freigegebenen Dokumente befinden sich hier: Freundliche Grüße """ + , mailSent = "E-Mail gesendet." } diff --git a/modules/webapp/src/main/elm/Messages/Comp/ShareManage.elm b/modules/webapp/src/main/elm/Messages/Comp/ShareManage.elm index 773ea5b3..9de0104e 100644 --- a/modules/webapp/src/main/elm/Messages/Comp/ShareManage.elm +++ b/modules/webapp/src/main/elm/Messages/Comp/ShareManage.elm @@ -38,7 +38,7 @@ type alias Texts = , correctFormErrors : String , noName : String , shareInformation : String - , sendMail : String + , sendViaMail : String , notOwnerInfo : String , showOwningSharesOnly : String } @@ -63,7 +63,7 @@ gb = , correctFormErrors = "Please correct the errors in the form." , noName = "No Name" , shareInformation = "Share Information" - , sendMail = "Send via E-Mail" + , sendViaMail = "Send via E-Mail" , notOwnerInfo = "Only the user who created this share can edit its properties." , showOwningSharesOnly = "Show my shares only" } @@ -88,7 +88,7 @@ de = , correctFormErrors = "Bitte korrigiere die Fehler im Formular." , noName = "Ohne Name" , shareInformation = "Informationen zur Freigabe" - , sendMail = "Per E-Mail versenden" + , sendViaMail = "Per E-Mail versenden" , notOwnerInfo = "Nur der Benutzer, der diese Freigabe erstellt hat, kann diese auch ändern." , showOwningSharesOnly = "Nur meine Freigaben anzeigen" } From 28993e27e5ecedfaf78effdcf44aa7765c262e59 Mon Sep 17 00:00:00 2001 From: eikek Date: Sun, 24 Oct 2021 00:53:56 +0200 Subject: [PATCH 68/75] Dropdown cc and bcc recipients in mail form --- modules/webapp/src/main/elm/Comp/ItemMail.elm | 29 +++++++++++++++++-- .../src/main/elm/Messages/Comp/ItemMail.elm | 6 ++++ 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/modules/webapp/src/main/elm/Comp/ItemMail.elm b/modules/webapp/src/main/elm/Comp/ItemMail.elm index 617325a5..e7a47b80 100644 --- a/modules/webapp/src/main/elm/Comp/ItemMail.elm +++ b/modules/webapp/src/main/elm/Comp/ItemMail.elm @@ -49,6 +49,7 @@ type alias Model = , body : String , attachAll : Bool , formError : FormError + , showCC : Bool } @@ -65,6 +66,7 @@ type Msg | BCCRecipientMsg Comp.EmailInput.Msg | SetBody String | SetSubjectBody String String + | ToggleShowCC | ConnMsg (Comp.Dropdown.Msg String) | ConnResp (Result Http.Error EmailSettingsList) | ToggleAttachAll @@ -97,6 +99,7 @@ emptyModel = , body = "" , attachAll = True , formError = FormErrorNone + , showCC = False } @@ -189,6 +192,9 @@ update flags msg model = ToggleAttachAll -> ( { model | attachAll = not model.attachAll }, Cmd.none, FormNone ) + ToggleShowCC -> + ( { model | showCC = not model.showCC }, Cmd.none, FormNone ) + ConnResp (Ok list) -> let names = @@ -324,9 +330,22 @@ view texts settings cfg model = , div [ class "mb-4" ] [ label [ class S.inputLabel + , class "flex flex-row" ] [ text texts.recipients , B.inputRequired + , a + [ class S.link + , class "justify-end flex flex-grow" + , onClick ToggleShowCC + , href "#" + ] + [ if model.showCC then + text texts.lessRecipients + + else + text texts.moreRecipients + ] ] , Html.map RecipientMsg (Comp.EmailInput.view2 { style = dds, placeholder = appendDots texts.recipients } @@ -334,7 +353,10 @@ view texts settings cfg model = model.recipientsModel ) ] - , div [ class "mb-4" ] + , div + [ class "mb-4" + , classList [ ( "hidden", not model.showCC ) ] + ] [ label [ class S.inputLabel ] [ text texts.ccRecipients ] @@ -344,7 +366,10 @@ view texts settings cfg model = model.ccRecipientsModel ) ] - , div [ class "mb-4" ] + , div + [ class "mb-4" + , classList [ ( "hidden", not model.showCC ) ] + ] [ label [ class S.inputLabel ] [ text texts.bccRecipients ] diff --git a/modules/webapp/src/main/elm/Messages/Comp/ItemMail.elm b/modules/webapp/src/main/elm/Messages/Comp/ItemMail.elm index c3ad7854..f50885bd 100644 --- a/modules/webapp/src/main/elm/Messages/Comp/ItemMail.elm +++ b/modules/webapp/src/main/elm/Messages/Comp/ItemMail.elm @@ -29,6 +29,8 @@ type alias Texts = , includeAllAttachments : String , connectionMissing : String , sendLabel : String + , moreRecipients : String + , lessRecipients : String } @@ -46,6 +48,8 @@ gb = , includeAllAttachments = "Include all item attachments" , connectionMissing = "No E-Mail connections configured. Goto user settings to add one." , sendLabel = "Send" + , moreRecipients = "More…" + , lessRecipients = "Less…" } @@ -63,4 +67,6 @@ de = , includeAllAttachments = "Alle Anhänge mit einfügen" , connectionMissing = "Keine E-Mail-Verbindung definiert. Gehe zu den Benutzereinstellungen und füge eine hinzu." , sendLabel = "Senden" + , moreRecipients = "Weitere…" + , lessRecipients = "Weniger…" } From 99f3be9c0ddc2a8c8d4183857d558e5da8ad7de6 Mon Sep 17 00:00:00 2001 From: eikek Date: Sun, 24 Oct 2021 01:48:14 +0200 Subject: [PATCH 69/75] Allow simple search on share page --- .../src/main/elm/Messages/Page/Share.elm | 9 ++ .../webapp/src/main/elm/Page/Share/Data.elm | 15 +++- .../src/main/elm/Page/Share/Menubar.elm | 85 +++++++++++++++---- .../webapp/src/main/elm/Page/Share/Update.elm | 41 ++++++++- 4 files changed, 128 insertions(+), 22 deletions(-) diff --git a/modules/webapp/src/main/elm/Messages/Page/Share.elm b/modules/webapp/src/main/elm/Messages/Page/Share.elm index 20884777..53061b7d 100644 --- a/modules/webapp/src/main/elm/Messages/Page/Share.elm +++ b/modules/webapp/src/main/elm/Messages/Page/Share.elm @@ -22,6 +22,9 @@ type alias Texts = , passwordForm : Messages.Comp.SharePasswordForm.Texts , httpError : Http.Error -> String , authFailed : String + , fulltextPlaceholder : String + , powerSearchPlaceholder : String + , extendedSearch : String } @@ -33,6 +36,9 @@ gb = , passwordForm = Messages.Comp.SharePasswordForm.gb , authFailed = "This share does not exist." , httpError = Messages.Comp.HttpError.gb + , fulltextPlaceholder = "Fulltext search…" + , powerSearchPlaceholder = "Extended search…" + , extendedSearch = "Extended search query" } @@ -44,4 +50,7 @@ de = , passwordForm = Messages.Comp.SharePasswordForm.de , authFailed = "Diese Freigabe existiert nicht." , httpError = Messages.Comp.HttpError.de + , fulltextPlaceholder = "Volltextsuche…" + , powerSearchPlaceholder = "Erweiterte Suche…" + , extendedSearch = "Erweiterte Suchanfrage" } diff --git a/modules/webapp/src/main/elm/Page/Share/Data.elm b/modules/webapp/src/main/elm/Page/Share/Data.elm index 505f4908..bea33497 100644 --- a/modules/webapp/src/main/elm/Page/Share/Data.elm +++ b/modules/webapp/src/main/elm/Page/Share/Data.elm @@ -5,7 +5,7 @@ -} -module Page.Share.Data exposing (Mode(..), Model, Msg(..), PageError(..), init, initCmd) +module Page.Share.Data exposing (Mode(..), Model, Msg(..), PageError(..), SearchBarMode(..), init, initCmd) import Api import Api.Model.ItemLightList exposing (ItemLightList) @@ -18,6 +18,7 @@ import Comp.SearchMenu import Comp.SharePasswordForm import Data.Flags exposing (Flags) import Http +import Util.Html exposing (KeyCode) type Mode @@ -32,6 +33,11 @@ type PageError | PageErrorAuthFail +type SearchBarMode + = SearchBarNormal + | SearchBarContent + + type alias Model = { mode : Mode , verifyResult : ShareVerifyResult @@ -42,6 +48,8 @@ type alias Model = , searchInProgress : Bool , itemListModel : Comp.ItemCardList.Model , initialized : Bool + , contentSearch : Maybe String + , searchMode : SearchBarMode } @@ -56,6 +64,8 @@ emptyModel flags = , searchInProgress = False , itemListModel = Comp.ItemCardList.init , initialized = False + , contentSearch = Nothing + , searchMode = SearchBarContent } @@ -87,3 +97,6 @@ type Msg | PowerSearchMsg Comp.PowerSearchInput.Msg | ResetSearch | ItemListMsg Comp.ItemCardList.Msg + | ToggleSearchBar + | SetContentSearch String + | ContentSearchKey (Maybe KeyCode) diff --git a/modules/webapp/src/main/elm/Page/Share/Menubar.elm b/modules/webapp/src/main/elm/Page/Share/Menubar.elm index eb490c37..1bfcc08c 100644 --- a/modules/webapp/src/main/elm/Page/Share/Menubar.elm +++ b/modules/webapp/src/main/elm/Page/Share/Menubar.elm @@ -13,10 +13,11 @@ import Comp.PowerSearchInput import Comp.SearchMenu import Html exposing (..) import Html.Attributes exposing (..) -import Html.Events exposing (onClick) +import Html.Events exposing (onClick, onInput) import Messages.Page.Share exposing (Texts) -import Page.Share.Data exposing (Model, Msg(..)) +import Page.Share.Data exposing (Model, Msg(..), SearchBarMode(..)) import Styles as S +import Util.Html view : Texts -> Model -> Html Msg @@ -30,21 +31,73 @@ view texts model = model.searchMenuModel.textSearchModel powerSearchBar = - div - [ class "relative flex flex-grow flex-row" ] - [ Html.map PowerSearchMsg - (Comp.PowerSearchInput.viewInput - { placeholder = texts.basics.searchPlaceholder - , extraAttrs = [] - } - model.powerSearchInput - ) - , Html.map PowerSearchMsg - (Comp.PowerSearchInput.viewResult [] model.powerSearchInput) + div [ class "flex-grow flex flex-col relative" ] + [ div + [ class "relative flex flex-grow flex-row" ] + [ Html.map PowerSearchMsg + (Comp.PowerSearchInput.viewInput + { placeholder = texts.powerSearchPlaceholder + , extraAttrs = [] + } + model.powerSearchInput + ) + , Html.map PowerSearchMsg + (Comp.PowerSearchInput.viewResult [] model.powerSearchInput) + ] + , div + [ class "opacity-60 text-xs -mt-1.5 absolute -bottom-4" + ] + [ text "Use an " + , a + [ href "https://docspell.org/docs/query/#structure" + , target "_new" + , class S.link + , class "mx-1" + ] + [ i [ class "fa fa-external-link-alt mr-1" ] [] + , text "extended search" + ] + , text " syntax." + ] + ] + + contentSearchBar = + div [ class "flex flex-grow" ] + [ input + [ type_ "text" + , class S.textInput + , class "text-sm" + , placeholder texts.fulltextPlaceholder + , onInput SetContentSearch + , value (Maybe.withDefault "" model.contentSearch) + , Util.Html.onKeyUpCode ContentSearchKey + ] + [] ] in MB.view - { end = + { start = + [ MB.CustomElement <| + case model.searchMode of + SearchBarContent -> + contentSearchBar + + SearchBarNormal -> + powerSearchBar + , MB.CustomElement <| + B.secondaryBasicButton + { label = "" + , icon = "fa fa-search-plus" + , disabled = False + , handler = onClick ToggleSearchBar + , attrs = + [ href "#" + , title texts.extendedSearch + , classList [ ( "bg-gray-200 dark:bg-bluegray-600", model.searchMode == SearchBarNormal ) ] + ] + } + ] + , end = [ MB.CustomElement <| B.secondaryBasicButton { label = "" @@ -59,9 +112,5 @@ view texts model = , attrs = [ href "#" ] } ] - , start = - [ MB.CustomElement <| - powerSearchBar - ] , rootClasses = "mb-2 pt-1 dark:bg-bluegray-700 items-center text-sm" } diff --git a/modules/webapp/src/main/elm/Page/Share/Update.elm b/modules/webapp/src/main/elm/Page/Share/Update.elm index c37a9776..e7f6c852 100644 --- a/modules/webapp/src/main/elm/Page/Share/Update.elm +++ b/modules/webapp/src/main/elm/Page/Share/Update.elm @@ -19,6 +19,8 @@ import Data.ItemQuery as Q import Data.SearchMode import Data.UiSettings exposing (UiSettings) import Page.Share.Data exposing (..) +import Util.Html +import Util.Maybe import Util.Update @@ -74,7 +76,7 @@ update flags settings shareId msg model = settings shareId (ItemListMsg (Comp.ItemCardList.SetResults list)) - { model | searchInProgress = False } + { model | searchInProgress = False, pageError = PageErrorNone } SearchResp (Err err) -> noSub ( { model | pageError = PageErrorHttp err, searchInProgress = False }, Cmd.none ) @@ -149,7 +151,11 @@ update flags settings shareId msg model = ResetSearch -> let nm = - { model | powerSearchInput = Comp.PowerSearchInput.init } + { model + | powerSearchInput = Comp.PowerSearchInput.init + , contentSearch = Nothing + , pageError = PageErrorNone + } in update flags settings shareId (SearchMenuMsg Comp.SearchMenu.ResetForm) nm @@ -167,6 +173,29 @@ update flags settings shareId msg model = , Cmd.batch [ Cmd.map ItemListMsg ic, searchMsg ] ) + ToggleSearchBar -> + noSub + ( { model + | searchMode = + case model.searchMode of + SearchBarContent -> + SearchBarNormal + + SearchBarNormal -> + SearchBarContent + } + , Cmd.none + ) + + SetContentSearch q -> + noSub ( { model | contentSearch = Util.Maybe.fromString q }, Cmd.none ) + + ContentSearchKey (Just Util.Html.Enter) -> + noSub ( model, makeSearchCmd flags model ) + + ContentSearchKey _ -> + noSub ( model, Cmd.none ) + noSub : ( Model, Cmd Msg ) -> UpdateResult noSub ( m, c ) = @@ -179,7 +208,13 @@ makeSearchCmd flags model = xq = Q.and [ Comp.SearchMenu.getItemQuery model.searchMenuModel - , Maybe.map Q.Fragment model.powerSearchInput.input + , Maybe.map Q.Fragment <| + case model.searchMode of + SearchBarNormal -> + model.powerSearchInput.input + + SearchBarContent -> + Maybe.map (Q.Contents >> Q.render) model.contentSearch ] request mq = From 208f7e644533f9f11ccc605b56211a4b7ea42b64 Mon Sep 17 00:00:00 2001 From: eikek Date: Sun, 24 Oct 2021 12:53:41 +0200 Subject: [PATCH 70/75] Update npm packages --- modules/webapp/package-lock.json | 1167 ++++++++++++------------------ modules/webapp/package.json | 16 +- 2 files changed, 462 insertions(+), 721 deletions(-) diff --git a/modules/webapp/package-lock.json b/modules/webapp/package-lock.json index 4801d04f..bcd14273 100644 --- a/modules/webapp/package-lock.json +++ b/modules/webapp/package-lock.json @@ -5,68 +5,114 @@ "requires": true, "dependencies": { "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "version": "7.15.8", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz", + "integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==", "requires": { - "@babel/highlight": "^7.10.4" + "@babel/highlight": "^7.14.5" } }, "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==" + "version": "7.15.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", + "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==" }, "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", "requires": { - "@babel/helper-validator-identifier": "^7.10.4", + "@babel/helper-validator-identifier": "^7.14.5", "chalk": "^2.0.0", "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + } } }, "@fortawesome/fontawesome-free": { - "version": "5.15.3", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-5.15.3.tgz", - "integrity": "sha512-rFnSUN/QOtnOAgqFRooTA3H57JLDm0QEG/jPdk+tLQNL/eWd+Aok8g3qCI+Q1xuDPWpGW/i9JySpJVsq8Q0s9w==" + "version": "5.15.4", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-5.15.4.tgz", + "integrity": "sha512-eYm8vijH/hpzr/6/1CJ/V/Eb1xQFW2nnUKArb3z+yUWv7HTwj6M7SP957oMjfZjAHU6qpoNc2wQvIxBLWYa/Jg==" }, "@nodelib/fs.scandir": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", - "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "requires": { - "@nodelib/fs.stat": "2.0.4", + "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "@nodelib/fs.stat": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", - "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==" + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" }, "@nodelib/fs.walk": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", - "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "requires": { - "@nodelib/fs.scandir": "2.1.4", + "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "@tailwindcss/forms": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.3.2.tgz", - "integrity": "sha512-aj2/rJsGb2whAZ/BQWHWWQRSbhH0r/l1ozOByiv+ZNjBD84GMvb5dhAyfpeasFky+EJrAwX5eaqft8NQMZFWvA==", + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.3.4.tgz", + "integrity": "sha512-vlAoBifNJUkagB+PAdW4aHMe4pKmSLroH398UPgIogBFc91D2VlHUxe4pjxQhiJl0Nfw53sHSJSQBSTQBZP3vA==", "requires": { "mini-svg-data-uri": "^1.2.3" } }, "@trysound/sax": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.1.1.tgz", - "integrity": "sha512-Z6DoceYb/1xSg5+e+ZlPZ9v0N16ZvZ+wYMraFue4HYrE4ttONKtsvruIRf6t9TBR0YvSOfi1hUU0fJfBLCDYow==" + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==" }, "@types/parse-json": { "version": "4.0.0", @@ -104,17 +150,17 @@ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "requires": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" } }, "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -131,45 +177,16 @@ "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==" }, "autoprefixer": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.2.5.tgz", - "integrity": "sha512-7H4AJZXvSsn62SqZyJCP+1AWwOuoYpUfK6ot9vm0e87XD6mT8lDywc9D9OTJPMULyGcvmIxzTAMeG2Cc+YX+fA==", + "version": "10.3.7", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.3.7.tgz", + "integrity": "sha512-EmGpu0nnQVmMhX8ROoJ7Mx8mKYPlcUHuxkwrRYEYMz85lu7H09v8w6R1P0JPdn/hKU32GjpLBFEOuIlDWCRWvg==", "requires": { - "browserslist": "^4.16.3", - "caniuse-lite": "^1.0.30001196", - "colorette": "^1.2.2", - "fraction.js": "^4.0.13", + "browserslist": "^4.17.3", + "caniuse-lite": "^1.0.30001264", + "fraction.js": "^4.1.1", "normalize-range": "^0.1.2", + "picocolors": "^0.2.1", "postcss-value-parser": "^4.1.0" - }, - "dependencies": { - "browserslist": { - "version": "4.16.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.5.tgz", - "integrity": "sha512-C2HAjrM1AI/djrpAUU/tr4pml1DqLIzJKSLDBXBrNErl9ZCCTXdhwxdJjYc16953+mBWf7Lw+uUJgpgb8cN71A==", - "requires": { - "caniuse-lite": "^1.0.30001214", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.719", - "escalade": "^3.1.1", - "node-releases": "^1.1.71" - } - }, - "colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" - }, - "electron-to-chromium": { - "version": "1.3.739", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.739.tgz", - "integrity": "sha512-+LPJVRsN7hGZ9EIUUiWCpO7l4E3qBYHNadazlucBfsXBbccDFNKUBAgzE68FnkWGJPwD/AfKhSzL+G+Iqb8A4A==" - }, - "node-releases": { - "version": "1.1.72", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz", - "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==" - } } }, "balanced-match": { @@ -205,31 +222,21 @@ } }, "browserslist": { - "version": "4.16.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.5.tgz", - "integrity": "sha512-C2HAjrM1AI/djrpAUU/tr4pml1DqLIzJKSLDBXBrNErl9ZCCTXdhwxdJjYc16953+mBWf7Lw+uUJgpgb8cN71A==", + "version": "4.17.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.5.tgz", + "integrity": "sha512-I3ekeB92mmpctWBoLXe0d5wPS2cBuRvvW0JyyJHMrk9/HmP2ZjrTboNAZ8iuGqaEIlKguljbQY32OkOJIRrgoA==", "requires": { - "caniuse-lite": "^1.0.30001214", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.719", + "caniuse-lite": "^1.0.30001271", + "electron-to-chromium": "^1.3.878", "escalade": "^3.1.1", - "node-releases": "^1.1.71" + "node-releases": "^2.0.1", + "picocolors": "^1.0.0" }, "dependencies": { - "colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" - }, - "electron-to-chromium": { - "version": "1.3.739", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.739.tgz", - "integrity": "sha512-+LPJVRsN7hGZ9EIUUiWCpO7l4E3qBYHNadazlucBfsXBbccDFNKUBAgzE68FnkWGJPwD/AfKhSzL+G+Iqb8A4A==" - }, - "node-releases": { - "version": "1.1.72", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz", - "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==" + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" } } }, @@ -238,6 +245,11 @@ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + }, "camelcase-css": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", @@ -260,38 +272,27 @@ "integrity": "sha512-BBruZFWmt3HFdVPS8kceTBIguKxu4f99n5JNp06OlPD/luoAMIaIK5ieV5YjnBLH3Nysai9sxj9rpJj4ZisXOA==" }, "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, "chokidar": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", - "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", "requires": { - "anymatch": "~3.1.1", + "anymatch": "~3.1.2", "braces": "~3.0.2", - "fsevents": "~2.3.1", - "glob-parent": "~5.1.0", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" + "readdirp": "~3.6.0" } }, "cliui": { @@ -305,45 +306,45 @@ } }, "color": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/color/-/color-3.1.3.tgz", - "integrity": "sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/color/-/color-4.0.1.tgz", + "integrity": "sha512-rpZjOKN5O7naJxkH2Rx1sZzzBgaiWECc6BYXjeCE6kF0kcASJYbUq02u7JqIHwCb/j3NhV+QhRL2683aICeGZA==", "requires": { - "color-convert": "^1.9.1", - "color-string": "^1.5.4" + "color-convert": "^2.0.1", + "color-string": "^1.6.0" } }, "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "requires": { - "color-name": "1.1.3" + "color-name": "~1.1.4" } }, "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "color-string": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz", - "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.6.0.tgz", + "integrity": "sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA==", "requires": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" } }, - "colorette": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.10.tgz", - "integrity": "sha512-tQ7Prvd+zU6EUsQVXJNqxJUZdZ4btI34jlp/W1N/bNyWsY55dxe2oSg+ss3COV4vKbWLVlwLJt5xMSCuZ3R4og==" + "colord": { + "version": "2.9.1", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.1.tgz", + "integrity": "sha512-4LBMSt09vR0uLnPVkOUBnmxgoaeN4ewRbx801wY/bXcltXfpR/G46OdWn96XpYmCWuYvO46aBZP4NgX8HpNAcw==" }, "commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==" + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" }, "concat-map": { "version": "0.0.1", @@ -351,9 +352,9 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "cosmiconfig": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", - "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", "requires": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", @@ -368,22 +369,22 @@ "integrity": "sha512-/loXYOch1qU1biStIFsHH8SxTmOseh1IJqFvy8IujXOm1h+QjUdDhkzOrR5HG8K8mlxREj0yfi8ewCHx0eMxzA==" }, "css-declaration-sorter": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.0.0.tgz", - "integrity": "sha512-S0TE4E0ha5+tBHdLWPc5n+S8E4dFBS5xScPvgHkLNZwWvX4ISoFGhGeerLC9uS1cKA/sC+K2wHq6qEbcagT/fg==", + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.1.3.tgz", + "integrity": "sha512-SvjQjNRZgh4ULK1LDJ2AduPKUKxIqmtU7ZAyi47BTV+M90Qvxr9AB6lKlLbDUfXqI9IQeYA8LbAsCZPpJEV3aA==", "requires": { "timsort": "^0.3.0" } }, "css-select": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-3.1.2.tgz", - "integrity": "sha512-qmss1EihSuBNWNNhHjxzxSfJoFBM/lERB/Q4EnsJQQC62R2evJDW481091oAdOr9uh46/0n4nrg0It5cAnj1RA==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", + "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", "requires": { "boolbase": "^1.0.0", - "css-what": "^4.0.0", - "domhandler": "^4.0.0", - "domutils": "^2.4.3", + "css-what": "^5.0.0", + "domhandler": "^4.2.0", + "domutils": "^2.6.0", "nth-check": "^2.0.0" } }, @@ -402,9 +403,9 @@ "integrity": "sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==" }, "css-what": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-4.0.0.tgz", - "integrity": "sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A==" + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", + "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==" }, "cssesc": { "version": "3.0.0", @@ -412,56 +413,56 @@ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" }, "cssnano": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.0.tgz", - "integrity": "sha512-beaqJEU9aI0B2PpKWXy+UJdtw+Q2J2c2f2nHVphL/gb2wvkuQV+Zxf5Q5SsNXiPUb9Djo/+ja+UOelQWhHnVow==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.8.tgz", + "integrity": "sha512-Lda7geZU0Yu+RZi2SGpjYuQz4HI4/1Y+BhdD0jL7NXAQ5larCzVn+PUGuZbDMYz904AXXCOgO5L1teSvgu7aFg==", "requires": { - "cosmiconfig": "^7.0.0", - "cssnano-preset-default": "^5.0.0", + "cssnano-preset-default": "^5.1.4", "is-resolvable": "^1.1.0", - "opencollective-postinstall": "^2.0.2" + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" } }, "cssnano-preset-default": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.0.0.tgz", - "integrity": "sha512-zsLppqF7PxY6Tk+ghVx8djf4o1jIOu2GNufqy9lMxldt7gGpSy3FQ6jn7FCd5DZWCaBa7A/1/HVh8CK3BdFSJg==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.4.tgz", + "integrity": "sha512-sPpQNDQBI3R/QsYxQvfB4mXeEcWuw0wGtKtmS5eg8wudyStYMgKOQT39G07EbW1LB56AOYrinRS9f0ig4Y3MhQ==", "requires": { - "css-declaration-sorter": "6.0.0", - "cssnano-utils": "^2.0.0", + "css-declaration-sorter": "^6.0.3", + "cssnano-utils": "^2.0.1", "postcss-calc": "^8.0.0", - "postcss-colormin": "^5.0.0", - "postcss-convert-values": "^5.0.0", - "postcss-discard-comments": "^5.0.0", - "postcss-discard-duplicates": "^5.0.0", - "postcss-discard-empty": "^5.0.0", - "postcss-discard-overridden": "^5.0.0", - "postcss-merge-longhand": "^5.0.0", - "postcss-merge-rules": "^5.0.0", - "postcss-minify-font-values": "^5.0.0", - "postcss-minify-gradients": "^5.0.0", - "postcss-minify-params": "^5.0.0", - "postcss-minify-selectors": "^5.0.0", - "postcss-normalize-charset": "^5.0.0", - "postcss-normalize-display-values": "^5.0.0", - "postcss-normalize-positions": "^5.0.0", - "postcss-normalize-repeat-style": "^5.0.0", - "postcss-normalize-string": "^5.0.0", - "postcss-normalize-timing-functions": "^5.0.0", - "postcss-normalize-unicode": "^5.0.0", - "postcss-normalize-url": "^5.0.0", - "postcss-normalize-whitespace": "^5.0.0", - "postcss-ordered-values": "^5.0.0", - "postcss-reduce-initial": "^5.0.0", - "postcss-reduce-transforms": "^5.0.0", - "postcss-svgo": "^5.0.0", - "postcss-unique-selectors": "^5.0.0" + "postcss-colormin": "^5.2.0", + "postcss-convert-values": "^5.0.1", + "postcss-discard-comments": "^5.0.1", + "postcss-discard-duplicates": "^5.0.1", + "postcss-discard-empty": "^5.0.1", + "postcss-discard-overridden": "^5.0.1", + "postcss-merge-longhand": "^5.0.2", + "postcss-merge-rules": "^5.0.2", + "postcss-minify-font-values": "^5.0.1", + "postcss-minify-gradients": "^5.0.2", + "postcss-minify-params": "^5.0.1", + "postcss-minify-selectors": "^5.1.0", + "postcss-normalize-charset": "^5.0.1", + "postcss-normalize-display-values": "^5.0.1", + "postcss-normalize-positions": "^5.0.1", + "postcss-normalize-repeat-style": "^5.0.1", + "postcss-normalize-string": "^5.0.1", + "postcss-normalize-timing-functions": "^5.0.1", + "postcss-normalize-unicode": "^5.0.1", + "postcss-normalize-url": "^5.0.2", + "postcss-normalize-whitespace": "^5.0.1", + "postcss-ordered-values": "^5.0.2", + "postcss-reduce-initial": "^5.0.1", + "postcss-reduce-transforms": "^5.0.1", + "postcss-svgo": "^5.0.2", + "postcss-unique-selectors": "^5.0.1" } }, "cssnano-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-2.0.0.tgz", - "integrity": "sha512-xvxmTszdrvSyTACdPe8VU5J6p4sm3egpgw54dILvNqt5eBUv6TFjACLhSxtRuEsxYrgy8uDy269YjScO5aKbGA==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-2.0.1.tgz", + "integrity": "sha512-i8vLRZTnEH9ubIyfdZCAdIdgnHAUeQeByEeQ2I7oTilvP9oHO6RScpeq3GsFUVqeB8uZgOQ9pw8utofNn32hhQ==" }, "csso": { "version": "4.2.0", @@ -510,12 +511,12 @@ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" }, "dom-serializer": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.1.tgz", - "integrity": "sha512-Pv2ZluG5ife96udGgEDovOOOA5UELkltfJpnIExPrAk1LTvecolUGn6lIaoLh86d83GiB86CjzciMd9BuRB71Q==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", "requires": { "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", + "domhandler": "^4.2.0", "entities": "^2.0.0" } }, @@ -525,30 +526,27 @@ "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" }, "domhandler": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.1.0.tgz", - "integrity": "sha512-/6/kmsGlMY4Tup/nGVutdrK9yQi4YjWVcVeoQmixpzjOUK1U7pQkvAPHBJeUxOgxF0J8f8lwCJSlCfD0V4CMGQ==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", + "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", "requires": { "domelementtype": "^2.2.0" } }, "domutils": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.5.2.tgz", - "integrity": "sha512-MHTthCb1zj8f1GVfRpeZUbohQf/HdBos0oX5gZcQFepOZPLLRyj6Wn7XS7EMnY7CVpwv8863u2vyE83Hfu28HQ==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "requires": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", - "domhandler": "^4.1.0" + "domhandler": "^4.2.0" } }, - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "requires": { - "is-obj": "^2.0.0" - } + "electron-to-chromium": { + "version": "1.3.878", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.878.tgz", + "integrity": "sha512-O6yxWCN9ph2AdspAIszBnd9v8s11hQx8ub9w4UGApzmNRnoKhbulOWqbO8THEQec/aEHtvy+donHZMlh6l1rbA==" }, "emoji-regex": { "version": "8.0.0", @@ -566,6 +564,13 @@ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "requires": { "is-arrayish": "^0.2.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + } } }, "escalade": { @@ -591,9 +596,9 @@ } }, "fastq": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.10.1.tgz", - "integrity": "sha512-AWuv6Ery3pM+dY7LYS8YIaCiQvUaos9OB1RyNgaOWnaX+Tik7Onvcsf8x8c+YtDeT0maYLniBip2hox5KtEXXA==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", "requires": { "reusify": "^1.0.4" } @@ -612,9 +617,9 @@ "integrity": "sha512-pgJnJLrtb0tcDgU1fzGaQXmR8h++nXvILJ+r5SmOXaaL/2pocunQo2a8TAXhjQnBpRLPtZ1KCz/TYpqeNuE2ew==" }, "fraction.js": { - "version": "4.0.13", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.0.13.tgz", - "integrity": "sha512-E1fz2Xs9ltlUp+qbiyx9wmt2n9dRzPsS11Jtdb8D2o+cC7wr9xkkKsVKJuBX0ST+LVS+LhLO+SbLJNtfWcJvXA==" + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.1.tgz", + "integrity": "sha512-MHOhvvxHTfRFpF1geTK9czMIZ6xclsEor2wkIGYYq+PxcQqT7vStJqjhe6S1TenZrMZzo+wlqOufBDVepUEgPg==" }, "fs-extra": { "version": "10.0.0", @@ -632,9 +637,9 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.1.tgz", - "integrity": "sha512-YR47Eg4hChJGAB1O3yEAOkGO+rlzutoICGqGo9EZ4lKWokzZRSyIW1QmTzqjtw8MJdj9srP869CuWw/hyzSiBw==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "optional": true }, "function-bind": { @@ -684,40 +689,12 @@ "ignore": "^5.1.8", "merge2": "^1.4.1", "slash": "^4.0.0" - }, - "dependencies": { - "fast-glob": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", - "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" - } - }, - "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" - } } }, "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" }, "has": { "version": "1.0.3", @@ -728,9 +705,9 @@ } }, "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "hex-color-regex": { "version": "1.1.0", @@ -772,6 +749,13 @@ "requires": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + } } }, "import-from": { @@ -780,20 +764,8 @@ "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==", "requires": { "resolve-from": "^5.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" - } } }, - "indexes-of": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", - "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=" - }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -814,9 +786,9 @@ "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==" }, "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" }, "is-binary-path": { "version": "2.1.0", @@ -847,9 +819,9 @@ } }, "is-core-module": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", - "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", + "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", "requires": { "has": "^1.0.3" } @@ -865,9 +837,9 @@ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "requires": { "is-extglob": "^2.1.1" } @@ -877,11 +849,6 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" - }, "is-resolvable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", @@ -978,19 +945,12 @@ "requires": { "braces": "^3.0.1", "picomatch": "^2.2.3" - }, - "dependencies": { - "picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" - } } }, "mini-svg-data-uri": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.2.3.tgz", - "integrity": "sha512-zd6KCAyXgmq6FV1mR10oKXYtvmA9vRoB6xPSTUJTbFApCtkefDnYueVR1gkof3KcdLZo1Y8mjF2DFmQMIxsHNQ==" + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.3.tgz", + "integrity": "sha512-gSfqpMRC8IxghvMcxzzmMnWpXAChSA+vy4cia33RgerMS8Fex95akUyQZPbxJJmeBGiGmK7n/1OpUX8ksRjIdA==" }, "minimatch": { "version": "3.0.4", @@ -1010,10 +970,15 @@ "resolved": "https://registry.npmjs.org/modern-normalize/-/modern-normalize-1.1.0.tgz", "integrity": "sha512-2lMlY1Yc1+CUy0gw4H95uNN7vjbpoED7NNRSBHE25nWfLBdmMzFCsPshlzbxHz+gYMcBEUN8V4pU16prcdPSgA==" }, + "nanocolors": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/nanocolors/-/nanocolors-0.1.12.tgz", + "integrity": "sha512-2nMHqg1x5PU+unxX7PGY7AuYxl2qDx7PSrTRjizr8sxdd3l/3hBuWWaki62qmtYm2U5i4Z5E7GbjlyDFhs9/EQ==" + }, "nanoid": { - "version": "3.1.22", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.22.tgz", - "integrity": "sha512-/2ZUaJX2ANuLtTvqTlgqBQNJoQO398KyJgZloL0PZkC0dpysjncRUPsFe3DUPzz/y3h+u7C46np8RMuvF3jsSQ==" + "version": "3.1.30", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.30.tgz", + "integrity": "sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==" }, "node-emoji": { "version": "1.11.0", @@ -1023,6 +988,11 @@ "lodash": "^4.17.21" } }, + "node-releases": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==" + }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -1034,9 +1004,9 @@ "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=" }, "normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==" + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==" }, "nth-check": { "version": "2.0.1", @@ -1059,24 +1029,12 @@ "wrappy": "1" } }, - "opencollective-postinstall": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz", - "integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q==" - }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "requires": { "callsites": "^3.0.0" - }, - "dependencies": { - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - } } }, "parse-json": { @@ -1105,10 +1063,15 @@ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" }, + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==" + }, "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" }, "pify": { "version": "2.3.0", @@ -1116,19 +1079,19 @@ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" }, "postcss": { - "version": "8.2.10", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.2.10.tgz", - "integrity": "sha512-b/h7CPV7QEdrqIxtAf2j31U5ef05uBDuvoXv6L51Q4rcS1jdlXAVKJv+atCFdUXYl9dyTHGyoMzIepwowRJjFw==", + "version": "8.3.11", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.11.tgz", + "integrity": "sha512-hCmlUAIlUiav8Xdqw3Io4LcpA1DOt7h3LSTAC4G6JGHFFaWzI6qvFt9oilvl8BmkbBRX1IhM90ZAmpk68zccQA==", "requires": { - "colorette": "^1.2.2", - "nanoid": "^3.1.22", - "source-map": "^0.6.1" + "nanoid": "^3.1.30", + "picocolors": "^1.0.0", + "source-map-js": "^0.6.2" }, "dependencies": { - "colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==" + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" } } }, @@ -1142,16 +1105,16 @@ } }, "postcss-cli": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-9.0.0.tgz", - "integrity": "sha512-tg6MK/jYyO7Ye9PObPYkjCQa7Bh2K6dA3a3I0muczRuw4T4HAtOTpPR+nOCw+On+WDB2sdsbGOsjlwO8BNRbUw==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-9.0.1.tgz", + "integrity": "sha512-zO160OBaAZBFUWO+QZIzEKMjnPIc5c61dMg1d7xafblh9cxbNb6s16ahJuP91PcVsu//gqr7BKllJxRiRDsSYw==", "requires": { "chokidar": "^3.3.0", - "colorette": "^2.0.0", "dependency-graph": "^0.11.0", "fs-extra": "^10.0.0", "get-stdin": "^9.0.0", "globby": "^12.0.0", + "nanocolors": "^0.2.11", "postcss-load-config": "^3.0.0", "postcss-reporter": "^7.0.0", "pretty-hrtime": "^1.0.3", @@ -1160,60 +1123,56 @@ "yargs": "^17.0.0" }, "dependencies": { - "fs-extra": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", - "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } + "nanocolors": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/nanocolors/-/nanocolors-0.2.13.tgz", + "integrity": "sha512-0n3mSAQLPpGLV9ORXT5+C/D4mwew7Ebws69Hx4E2sgz2ZA5+32Q80B9tL8PbL7XHnRDiAxH/pnrUJ9a4fkTNTA==" } } }, "postcss-colormin": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.0.0.tgz", - "integrity": "sha512-Yt84+5V6CgS/AhK7d7MA58vG8dSZ7+ytlRtWLaQhag3HXOncTfmYpuUOX4cDoXjvLfw1sHRCHMiBjYhc35CymQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.0.tgz", + "integrity": "sha512-+HC6GfWU3upe5/mqmxuqYZ9B2Wl4lcoUUNkoaX59nEWV4EtADCMiBqui111Bu8R8IvaZTmqmxrqOAqjbHIwXPw==", "requires": { - "browserslist": "^4.16.0", - "color": "^3.1.1", + "browserslist": "^4.16.6", + "caniuse-api": "^3.0.0", + "colord": "^2.0.1", "postcss-value-parser": "^4.1.0" } }, "postcss-convert-values": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.0.tgz", - "integrity": "sha512-V5kmYm4xoBAjNs+eHY/6XzXJkkGeg4kwNf2ocfqhLb1WBPEa4oaSmoi1fnVO7Dkblqvus9h+AenDvhCKUCK7uQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.1.tgz", + "integrity": "sha512-C3zR1Do2BkKkCgC0g3sF8TS0koF2G+mN8xxayZx3f10cIRmTaAnpgpRQZjNekTZxM2ciSPoh2IWJm0VZx8NoQg==", "requires": { "postcss-value-parser": "^4.1.0" } }, "postcss-discard-comments": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.0.tgz", - "integrity": "sha512-Umig6Gxs8m20RihiXY6QkePd6mp4FxkA1Dg+f/Kd6uw0gEMfKRjDeQOyFkLibexbJJGHpE3lrN/Q0R9SMrUMbQ==" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.1.tgz", + "integrity": "sha512-lgZBPTDvWrbAYY1v5GYEv8fEO/WhKOu/hmZqmCYfrpD6eyDWWzAOsl2rF29lpvziKO02Gc5GJQtlpkTmakwOWg==" }, "postcss-discard-duplicates": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.0.tgz", - "integrity": "sha512-vEJJ+Y3pFUnO1FyCBA6PSisGjHtnphL3V6GsNvkASq/VkP3OX5/No5RYXXLxHa2QegStNzg6HYrYdo71uR4caQ==" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.1.tgz", + "integrity": "sha512-svx747PWHKOGpAXXQkCc4k/DsWo+6bc5LsVrAsw+OU+Ibi7klFZCyX54gjYzX4TH+f2uzXjRviLARxkMurA2bA==" }, "postcss-discard-empty": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.0.tgz", - "integrity": "sha512-+wigy099Y1xZxG36WG5L1f2zeH1oicntkJEW4TDIqKKDO2g9XVB3OhoiHTu08rDEjLnbcab4rw0BAccwi2VjiQ==" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.1.tgz", + "integrity": "sha512-vfU8CxAQ6YpMxV2SvMcMIyF2LX1ZzWpy0lqHDsOdaKKLQVQGVP1pzhrI9JlsO65s66uQTfkQBKBD/A5gp9STFw==" }, "postcss-discard-overridden": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.0.tgz", - "integrity": "sha512-hybnScTaZM2iEA6kzVQ6Spozy7kVdLw+lGw8hftLlBEzt93uzXoltkYp9u0tI8xbfhxDLTOOzHsHQCkYdmzRUg==" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.1.tgz", + "integrity": "sha512-Y28H7y93L2BpJhrdUR2SR2fnSsT+3TVx1NmVQLbcnZWwIUpJ7mfcTC6Za9M2PG6w8j7UQRfzxqn8jU2VwFxo3Q==" }, "postcss-import": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.0.1.tgz", - "integrity": "sha512-Xn2+z++vWObbEPhiiKO1a78JiyhqipyrXHBb3AHpv0ks7Cdg+GxQQJ24ODNMTanldf7197gSP3axppO9yaG0lA==", + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.0.2.tgz", + "integrity": "sha512-BJ2pVK4KhUyMcqjuKs9RijV5tatNzNa73e/32aBVE/ejYPe37iH+6vAu9WvqUkB5OAYgLHzbSvzHnorybJCm9g==", "requires": { "postcss-value-parser": "^4.0.0", "read-cache": "^1.0.0", @@ -1237,86 +1196,67 @@ "import-cwd": "^3.0.0", "lilconfig": "^2.0.3", "yaml": "^1.10.2" - }, - "dependencies": { - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" - } } }, "postcss-merge-longhand": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.0.tgz", - "integrity": "sha512-VZNFA40K8BYHzJNA6jHPdg1Nofsz/nK5Dkszrcb5IgWcLroSBZOD6I/iNQzpejSU/3XwpOiZNaYAdBV4KcvxWA==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.2.tgz", + "integrity": "sha512-BMlg9AXSI5G9TBT0Lo/H3PfUy63P84rVz3BjCFE9e9Y9RXQZD3+h3YO1kgTNsNJy7bBc1YQp8DmSnwLIW5VPcw==", "requires": { "css-color-names": "^1.0.1", "postcss-value-parser": "^4.1.0", - "stylehacks": "^5.0.0" + "stylehacks": "^5.0.1" } }, "postcss-merge-rules": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.0.tgz", - "integrity": "sha512-TfsXbKjNYCGfUPEXGIGPySnMiJbdS+3gcVeV8gwmJP4RajyKZHW8E0FYDL1WmggTj3hi+m+WUCAvqRpX2ut4Kg==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.2.tgz", + "integrity": "sha512-5K+Md7S3GwBewfB4rjDeol6V/RZ8S+v4B66Zk2gChRqLTCC8yjnHQ601omj9TKftS19OPGqZ/XzoqpzNQQLwbg==", "requires": { - "browserslist": "^4.16.0", + "browserslist": "^4.16.6", "caniuse-api": "^3.0.0", - "cssnano-utils": "^2.0.0", - "postcss-selector-parser": "^6.0.4", + "cssnano-utils": "^2.0.1", + "postcss-selector-parser": "^6.0.5", "vendors": "^1.0.3" } }, "postcss-minify-font-values": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.0.tgz", - "integrity": "sha512-zi2JhFaMOcIaNxhndX5uhsqSY1rexKDp23wV8EOmC9XERqzLbHsoRye3aYF716Zm+hkcR4loqKDt8LZlmihwAg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.1.tgz", + "integrity": "sha512-7JS4qIsnqaxk+FXY1E8dHBDmraYFWmuL6cgt0T1SWGRO5bzJf8sUoelwa4P88LEWJZweHevAiDKxHlofuvtIoA==", "requires": { "postcss-value-parser": "^4.1.0" } }, "postcss-minify-gradients": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.0.tgz", - "integrity": "sha512-/jPtNgs6JySMwgsE5dPOq8a2xEopWTW3RyqoB9fLqxgR+mDUNLSi7joKd+N1z7FXWgVkc4l/dEBMXHgNAaUbvg==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.2.tgz", + "integrity": "sha512-7Do9JP+wqSD6Prittitt2zDLrfzP9pqKs2EcLX7HJYxsxCOwrrcLt4x/ctQTsiOw+/8HYotAoqNkrzItL19SdQ==", "requires": { - "cssnano-utils": "^2.0.0", - "is-color-stop": "^1.1.0", + "colord": "^2.6", + "cssnano-utils": "^2.0.1", "postcss-value-parser": "^4.1.0" } }, "postcss-minify-params": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.0.tgz", - "integrity": "sha512-KvZYIxTPBVKjdd+XgObq9A+Sfv8lMkXTpbZTsjhr42XbfWIeLaTItMlygsDWfjArEc3muUfDaUFgNSeDiJ5jug==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.1.tgz", + "integrity": "sha512-4RUC4k2A/Q9mGco1Z8ODc7h+A0z7L7X2ypO1B6V8057eVK6mZ6xwz6QN64nHuHLbqbclkX1wyzRnIrdZehTEHw==", "requires": { "alphanum-sort": "^1.0.2", "browserslist": "^4.16.0", - "cssnano-utils": "^2.0.0", + "cssnano-utils": "^2.0.1", "postcss-value-parser": "^4.1.0", "uniqs": "^2.0.0" } }, "postcss-minify-selectors": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.0.0.tgz", - "integrity": "sha512-cEM0O0eWwFIvmo6nfB0lH0vO/XFwgqIvymODbfPXZ1gTA3i76FKnb7TGUrEpiTxaXH6tgYQ6DcTHwRiRS+YQLQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.0.tgz", + "integrity": "sha512-NzGBXDa7aPsAcijXZeagnJBKBPMYLaJJzB8CQh6ncvyl2sIndLVWfbcDi0SBjRWk5VqEjXvf8tYwzoKf4Z07og==", "requires": { "alphanum-sort": "^1.0.2", - "postcss-selector-parser": "^3.1.2" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", - "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", - "requires": { - "dot-prop": "^5.2.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1" - } - } + "postcss-selector-parser": "^6.0.5" } }, "postcss-nested": { @@ -1325,168 +1265,155 @@ "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", "requires": { "postcss-selector-parser": "^6.0.6" - }, - "dependencies": { - "postcss-selector-parser": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", - "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - } } }, "postcss-normalize-charset": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.0.tgz", - "integrity": "sha512-pqsCkgo9KmQP0ew6DqSA+uP9YN6EfsW20pQ3JU5JoQge09Z6Too4qU0TNDsTNWuEaP8SWsMp+19l15210MsDZQ==" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.1.tgz", + "integrity": "sha512-6J40l6LNYnBdPSk+BHZ8SF+HAkS4q2twe5jnocgd+xWpz/mx/5Sa32m3W1AA8uE8XaXN+eg8trIlfu8V9x61eg==" }, "postcss-normalize-display-values": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.0.tgz", - "integrity": "sha512-t4f2d//gH1f7Ns0Jq3eNdnWuPT7TeLuISZ6RQx4j8gpl5XrhkdshdNcOnlrEK48YU6Tcb6jqK7dorME3N4oOGA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.1.tgz", + "integrity": "sha512-uupdvWk88kLDXi5HEyI9IaAJTE3/Djbcrqq8YgjvAVuzgVuqIk3SuJWUisT2gaJbZm1H9g5k2w1xXilM3x8DjQ==", "requires": { - "cssnano-utils": "^2.0.0", + "cssnano-utils": "^2.0.1", "postcss-value-parser": "^4.1.0" } }, "postcss-normalize-positions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.0.tgz", - "integrity": "sha512-0o6/qU5ky74X/eWYj/tv4iiKCm3YqJnrhmVADpIMNXxzFZywsSQxl8F7cKs8jQEtF3VrJBgcDHTexZy1zgDoYg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.1.tgz", + "integrity": "sha512-rvzWAJai5xej9yWqlCb1OWLd9JjW2Ex2BCPzUJrbaXmtKtgfL8dBMOOMTX6TnvQMtjk3ei1Lswcs78qKO1Skrg==", "requires": { "postcss-value-parser": "^4.1.0" } }, "postcss-normalize-repeat-style": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.0.tgz", - "integrity": "sha512-KRT14JbrXKcFMYuc4q7lh8lvv8u22wLyMrq+UpHKLtbx2H/LOjvWXYdoDxmNrrrJzomAWL+ViEXr48/IhSUJnQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.1.tgz", + "integrity": "sha512-syZ2itq0HTQjj4QtXZOeefomckiV5TaUO6ReIEabCh3wgDs4Mr01pkif0MeVwKyU/LHEkPJnpwFKRxqWA/7O3w==", "requires": { - "cssnano-utils": "^2.0.0", + "cssnano-utils": "^2.0.1", "postcss-value-parser": "^4.1.0" } }, "postcss-normalize-string": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.0.tgz", - "integrity": "sha512-wSO4pf7GNcDZpmelREWYADF1+XZWrAcbFLQCOqoE92ZwYgaP/RLumkUTaamEzdT2YKRZAH8eLLKGWotU/7FNPw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.1.tgz", + "integrity": "sha512-Ic8GaQ3jPMVl1OEn2U//2pm93AXUcF3wz+OriskdZ1AOuYV25OdgS7w9Xu2LO5cGyhHCgn8dMXh9bO7vi3i9pA==", "requires": { "postcss-value-parser": "^4.1.0" } }, "postcss-normalize-timing-functions": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.0.tgz", - "integrity": "sha512-TwPaDX+wl9wO3MUm23lzGmOzGCGKnpk+rSDgzB2INpakD5dgWR3L6bJq1P1LQYzBAvz8fRIj2NWdnZdV4EV98Q==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.1.tgz", + "integrity": "sha512-cPcBdVN5OsWCNEo5hiXfLUnXfTGtSFiBU9SK8k7ii8UD7OLuznzgNRYkLZow11BkQiiqMcgPyh4ZqXEEUrtQ1Q==", "requires": { - "cssnano-utils": "^2.0.0", + "cssnano-utils": "^2.0.1", "postcss-value-parser": "^4.1.0" } }, "postcss-normalize-unicode": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.0.tgz", - "integrity": "sha512-2CpVoz/67rXU5s9tsPZDxG1YGS9OFHwoY9gsLAzrURrCxTAb0H7Vp87/62LvVPgRWTa5ZmvgmqTp2rL8tlm72A==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.1.tgz", + "integrity": "sha512-kAtYD6V3pK0beqrU90gpCQB7g6AOfP/2KIPCVBKJM2EheVsBQmx/Iof+9zR9NFKLAx4Pr9mDhogB27pmn354nA==", "requires": { "browserslist": "^4.16.0", "postcss-value-parser": "^4.1.0" } }, "postcss-normalize-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.0.tgz", - "integrity": "sha512-ICDaGFBqLgA3dlrCIRuhblLl80D13YtgEV9NJPTYJtgR72vu61KgxAHv+z/lKMs1EbwfSQa3ALjOFLSmXiE34A==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.2.tgz", + "integrity": "sha512-k4jLTPUxREQ5bpajFQZpx8bCF2UrlqOTzP9kEqcEnOfwsRshWs2+oAFIHfDQB8GO2PaUaSE0NlTAYtbluZTlHQ==", "requires": { "is-absolute-url": "^3.0.3", - "normalize-url": "^4.5.0", + "normalize-url": "^6.0.1", "postcss-value-parser": "^4.1.0" } }, "postcss-normalize-whitespace": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.0.tgz", - "integrity": "sha512-KRnxQvQAVkJfaeXSz7JlnD9nBN9sFZF9lrk9452Q2uRoqrRSkinqifF8Iex7wZGei2DZVG/qpmDFDmRvbNAOGA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.1.tgz", + "integrity": "sha512-iPklmI5SBnRvwceb/XH568yyzK0qRVuAG+a1HFUsFRf11lEJTiQQa03a4RSCQvLKdcpX7XsI1Gen9LuLoqwiqA==", "requires": { "postcss-value-parser": "^4.1.0" } }, "postcss-ordered-values": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.0.tgz", - "integrity": "sha512-dPr+SRObiHueCIc4IUaG0aOGQmYkuNu50wQvdXTGKy+rzi2mjmPsbeDsheLk5WPb9Zyf2tp8E+I+h40cnivm6g==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.2.tgz", + "integrity": "sha512-8AFYDSOYWebJYLyJi3fyjl6CqMEG/UVworjiyK1r573I56kb3e879sCJLGvR3merj+fAdPpVplXKQZv+ey6CgQ==", "requires": { - "cssnano-utils": "^2.0.0", + "cssnano-utils": "^2.0.1", "postcss-value-parser": "^4.1.0" } }, "postcss-reduce-initial": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.0.tgz", - "integrity": "sha512-wR6pXUaFbSMG1oCKx8pKVA+rnSXCHlca5jMrlmkmif+uig0HNUTV9oGN5kjKsM3mATQAldv2PF9Tbl2vqLFjnA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.1.tgz", + "integrity": "sha512-zlCZPKLLTMAqA3ZWH57HlbCjkD55LX9dsRyxlls+wfuRfqCi5mSlZVan0heX5cHr154Dq9AfbH70LyhrSAezJw==", "requires": { "browserslist": "^4.16.0", "caniuse-api": "^3.0.0" } }, "postcss-reduce-transforms": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.0.tgz", - "integrity": "sha512-iHdGODW4YzM3WjVecBhPQt6fpJC4lGQZxJKjkBNHpp2b8dzmvj0ogKThqya+IRodQEFzjfXgYeESkf172FH5Lw==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.1.tgz", + "integrity": "sha512-a//FjoPeFkRuAguPscTVmRQUODP+f3ke2HqFNgGPwdYnpeC29RZdCBvGRGTsKpMURb/I3p6jdKoBQ2zI+9Q7kA==", "requires": { - "cssnano-utils": "^2.0.0", + "cssnano-utils": "^2.0.1", "postcss-value-parser": "^4.1.0" } }, "postcss-reporter": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-7.0.2.tgz", - "integrity": "sha512-JyQ96NTQQsso42y6L1H1RqHfWH1C3Jr0pt91mVv5IdYddZAE9DUZxuferNgk6q0o6vBVOrfVJb10X1FgDzjmDw==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-7.0.4.tgz", + "integrity": "sha512-jY/fnpGSin7kwJeunXbY35STp5O3VIxSFdjee5JkoPQ+FfGH5JW3N+Xe9oAPcL9UkjWjkK+JC72o8XH4XXKdhw==", "requires": { - "colorette": "^1.2.1", "lodash.difference": "^4.5.0", "lodash.forown": "^4.4.0", "lodash.get": "^4.4.2", "lodash.groupby": "^4.6.0", - "lodash.sortby": "^4.7.0" + "lodash.sortby": "^4.7.0", + "picocolors": "^1.0.0" }, "dependencies": { - "colorette": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", - "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==" + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" } } }, "postcss-selector-parser": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz", - "integrity": "sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==", + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", + "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", "requires": { "cssesc": "^3.0.0", - "indexes-of": "^1.0.1", - "uniq": "^1.0.1", "util-deprecate": "^1.0.2" } }, "postcss-svgo": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.0.tgz", - "integrity": "sha512-M3/VS4sFI1Yp9g0bPL+xzzCNz5iLdRUztoFaugMit5a8sMfkVzzhwqbsOlD8IFFymCdJDmXmh31waYHWw1K4BA==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.2.tgz", + "integrity": "sha512-YzQuFLZu3U3aheizD+B1joQ94vzPfE6BNUcSYuceNxlVnKKsOtdo6hL9/zyC168Q8EwfLSgaDSalsUGa9f2C0A==", "requires": { "postcss-value-parser": "^4.1.0", "svgo": "^2.3.0" } }, "postcss-unique-selectors": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.0.tgz", - "integrity": "sha512-o9l4pF8SRn7aCMTmzb/kNv/kjV7wPZpZ8Nlb1Gq8v/Qvw969K1wanz1RVA0ehHzWe9+wHXaC2DvZlak/gdMJ5w==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.1.tgz", + "integrity": "sha512-gwi1NhHV4FMmPn+qwBNuot1sG1t2OmacLQ/AX29lzyggnjd+MnVD5uqQmpXO3J17KGL2WAxQruj1qTd3H0gG/w==", "requires": { "alphanum-sort": "^1.0.2", - "postcss-selector-parser": "^6.0.2", + "postcss-selector-parser": "^6.0.5", "uniqs": "^2.0.0" } }, @@ -1509,8 +1436,20 @@ "glob": "^7.0.0", "postcss": "^8.2.1", "postcss-selector-parser": "^6.0.2" + }, + "dependencies": { + "commander": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==" + } } }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + }, "quick-lru": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", @@ -1525,9 +1464,9 @@ } }, "readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "requires": { "picomatch": "^2.2.1" } @@ -1563,9 +1502,9 @@ } }, "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" }, "reusify": { "version": "1.0.4", @@ -1591,9 +1530,12 @@ } }, "run-parallel": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.10.tgz", - "integrity": "sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "requires": { + "queue-microtask": "^1.2.2" + } }, "simple-swizzle": { "version": "0.2.2", @@ -1601,13 +1543,6 @@ "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", "requires": { "is-arrayish": "^0.3.1" - }, - "dependencies": { - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - } } }, "slash": { @@ -1620,6 +1555,11 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" }, + "source-map-js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", + "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==" + }, "stable": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", @@ -1644,9 +1584,9 @@ } }, "stylehacks": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.0.tgz", - "integrity": "sha512-QOWm6XivDLb+fqffTZP8jrmPmPITVChl2KCY2R05nsCWwLi3VGhCdVc3IVGNwd1zzTt1jPd67zIKjpQfxzQZeA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.1.tgz", + "integrity": "sha512-Es0rVnHIqbWzveU1b24kbw92HsebBepxfcqe5iix7t9j0PQqhs0IxXVXv0pY2Bxa08CgMkzD6OWql7kbGOuEdA==", "requires": { "browserslist": "^4.16.0", "postcss-selector-parser": "^6.0.4" @@ -1658,70 +1598,26 @@ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "requires": { "has-flag": "^4.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - } } }, "svgo": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.3.0.tgz", - "integrity": "sha512-fz4IKjNO6HDPgIQxu4IxwtubtbSfGEAJUq/IXyTPIkGhWck/faiiwfkvsB8LnBkKLvSoyNNIY6d13lZprJMc9Q==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.7.0.tgz", + "integrity": "sha512-aDLsGkre4fTDCWvolyW+fs8ZJFABpzLXbtdK1y71CKnHzAnpDxKXPj2mNKj+pyOXUCzFHzuxRJ94XOFygOWV3w==", "requires": { - "@trysound/sax": "0.1.1", - "chalk": "^4.1.0", - "commander": "^7.1.0", - "css-select": "^3.1.2", - "css-tree": "^1.1.2", + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", "csso": "^4.2.0", + "nanocolors": "^0.1.12", "stable": "^0.1.8" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" - } } }, "tailwindcss": { - "version": "2.2.16", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-2.2.16.tgz", - "integrity": "sha512-EireCtpQyyJ4Xz8NYzHafBoy4baCOO96flM0+HgtsFcIQ9KFy/YBK3GEtlnD+rXen0e4xm8t3WiUcKBJmN6yjg==", + "version": "2.2.17", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-2.2.17.tgz", + "integrity": "sha512-WgRpn+Pxn7eWqlruxnxEbL9ByVRWi3iC10z4b6dW0zSdnkPVC4hPMSWLQkkW8GCyBIv/vbJ0bxIi9dVrl4CfoA==", "requires": { "arg": "^5.0.1", "bytes": "^3.0.0", @@ -1757,139 +1653,12 @@ "tmp": "^0.2.1" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, - "color": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/color/-/color-4.0.1.tgz", - "integrity": "sha512-rpZjOKN5O7naJxkH2Rx1sZzzBgaiWECc6BYXjeCE6kF0kcASJYbUq02u7JqIHwCb/j3NhV+QhRL2683aICeGZA==", - "requires": { - "color-convert": "^2.0.1", - "color-string": "^1.6.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "color-string": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.6.0.tgz", - "integrity": "sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA==", - "requires": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "cosmiconfig": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "optional": true - }, "glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "requires": { "is-glob": "^4.0.3" - }, - "dependencies": { - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "requires": { - "is-extglob": "^2.1.1" - } - } - } - }, - "postcss-selector-parser": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", - "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "requires": { - "picomatch": "^2.2.1" } } } @@ -1915,11 +1684,6 @@ "is-number": "^7.0.0" } }, - "uniq": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", - "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=" - }, "uniqs": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", @@ -1948,29 +1712,6 @@ "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - } } }, "wrappy": { @@ -1989,14 +1730,14 @@ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" }, "yaml": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.0.tgz", - "integrity": "sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg==" + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" }, "yargs": { - "version": "17.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.2.0.tgz", - "integrity": "sha512-UPeZv4h9Xv510ibpt5rdsUNzgD78nMa1rhxxCgvkKiq06hlKCEHJLiJ6Ub8zDg/wR6hedEI6ovnd2vCvJ4nusA==", + "version": "17.2.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.2.1.tgz", + "integrity": "sha512-XfR8du6ua4K6uLGm5S6fA+FIJom/MdJcFNVY8geLlp2v8GYbOXD4EB1tPNZsRn4vBzKGMgb5DRZMeWuFc2GO8Q==", "requires": { "cliui": "^7.0.2", "escalade": "^3.1.1", diff --git a/modules/webapp/package.json b/modules/webapp/package.json index d5c85f4b..33eb7cd9 100644 --- a/modules/webapp/package.json +++ b/modules/webapp/package.json @@ -3,14 +3,14 @@ "version": "1.0.0", "private": true, "dependencies": { - "@fortawesome/fontawesome-free": "^5.15.3", - "@tailwindcss/forms": "^0.3.0", - "autoprefixer": "^10.2.5", - "cssnano": "^5.0.0", + "@fortawesome/fontawesome-free": "^5.15.4", + "@tailwindcss/forms": "^0.3.4", + "autoprefixer": "^10.3.7", + "cssnano": "^5.0.8", "flag-icon-css": "^3.5.0", - "postcss": "^8.2.9", - "postcss-cli": "^9.0.0", - "postcss-import": "^14.0.1", - "tailwindcss": "^2.2.16" + "postcss": "^8.3.11", + "postcss-cli": "^9.0.1", + "postcss-import": "^14.0.2", + "tailwindcss": "^2.2.17" } } From c2d54cebb563afd0fd7eeea6cb72b1ae0301c075 Mon Sep 17 00:00:00 2001 From: eikek Date: Sun, 24 Oct 2021 14:45:03 +0200 Subject: [PATCH 71/75] Fix postcss-purgecss dependency --- modules/webapp/package-lock.json | 606 ++++++++++++++++++++++++------- modules/webapp/package.json | 10 +- modules/webapp/postcss.config.js | 2 +- project/StylesPlugin.scala | 3 +- 4 files changed, 487 insertions(+), 134 deletions(-) diff --git a/modules/webapp/package-lock.json b/modules/webapp/package-lock.json index bcd14273..d9b88b4e 100644 --- a/modules/webapp/package-lock.json +++ b/modules/webapp/package-lock.json @@ -8,6 +8,7 @@ "version": "7.15.8", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz", "integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==", + "dev": true, "requires": { "@babel/highlight": "^7.14.5" } @@ -15,12 +16,14 @@ "@babel/helper-validator-identifier": { "version": "7.15.7", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz", - "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==" + "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w==", + "dev": true }, "@babel/highlight": { "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.14.5", "chalk": "^2.0.0", @@ -31,6 +34,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "requires": { "color-convert": "^1.9.0" } @@ -39,6 +43,7 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -49,6 +54,7 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "requires": { "color-name": "1.1.3" } @@ -56,17 +62,20 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "requires": { "has-flag": "^3.0.0" } @@ -76,12 +85,14 @@ "@fortawesome/fontawesome-free": { "version": "5.15.4", "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-5.15.4.tgz", - "integrity": "sha512-eYm8vijH/hpzr/6/1CJ/V/Eb1xQFW2nnUKArb3z+yUWv7HTwj6M7SP957oMjfZjAHU6qpoNc2wQvIxBLWYa/Jg==" + "integrity": "sha512-eYm8vijH/hpzr/6/1CJ/V/Eb1xQFW2nnUKArb3z+yUWv7HTwj6M7SP957oMjfZjAHU6qpoNc2wQvIxBLWYa/Jg==", + "dev": true }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, "requires": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -90,12 +101,14 @@ "@nodelib/fs.stat": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true }, "@nodelib/fs.walk": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, "requires": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -105,6 +118,7 @@ "version": "0.3.4", "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.3.4.tgz", "integrity": "sha512-vlAoBifNJUkagB+PAdW4aHMe4pKmSLroH398UPgIogBFc91D2VlHUxe4pjxQhiJl0Nfw53sHSJSQBSTQBZP3vA==", + "dev": true, "requires": { "mini-svg-data-uri": "^1.2.3" } @@ -112,22 +126,26 @@ "@trysound/sax": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==" + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true }, "@types/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true }, "acorn": { "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true }, "acorn-node": { "version": "1.8.2", "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, "requires": { "acorn": "^7.0.0", "acorn-walk": "^7.0.0", @@ -137,22 +155,26 @@ "acorn-walk": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", - "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true }, "alphanum-sort": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", - "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=" + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", + "dev": true }, "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -161,6 +183,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -169,17 +192,20 @@ "arg": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.1.tgz", - "integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==" + "integrity": "sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==", + "dev": true }, "array-union": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz", - "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==" + "integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==", + "dev": true }, "autoprefixer": { "version": "10.3.7", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.3.7.tgz", "integrity": "sha512-EmGpu0nnQVmMhX8ROoJ7Mx8mKYPlcUHuxkwrRYEYMz85lu7H09v8w6R1P0JPdn/hKU32GjpLBFEOuIlDWCRWvg==", + "dev": true, "requires": { "browserslist": "^4.17.3", "caniuse-lite": "^1.0.30001264", @@ -192,22 +218,26 @@ "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true }, "boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -217,6 +247,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, "requires": { "fill-range": "^7.0.1" } @@ -225,6 +256,7 @@ "version": "4.17.5", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.5.tgz", "integrity": "sha512-I3ekeB92mmpctWBoLXe0d5wPS2cBuRvvW0JyyJHMrk9/HmP2ZjrTboNAZ8iuGqaEIlKguljbQY32OkOJIRrgoA==", + "dev": true, "requires": { "caniuse-lite": "^1.0.30001271", "electron-to-chromium": "^1.3.878", @@ -236,29 +268,34 @@ "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true } } }, "bytes": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true }, "camelcase-css": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==" + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true }, "caniuse-api": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, "requires": { "browserslist": "^4.0.0", "caniuse-lite": "^1.0.0", @@ -269,12 +306,14 @@ "caniuse-lite": { "version": "1.0.30001271", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001271.tgz", - "integrity": "sha512-BBruZFWmt3HFdVPS8kceTBIguKxu4f99n5JNp06OlPD/luoAMIaIK5ieV5YjnBLH3Nysai9sxj9rpJj4ZisXOA==" + "integrity": "sha512-BBruZFWmt3HFdVPS8kceTBIguKxu4f99n5JNp06OlPD/luoAMIaIK5ieV5YjnBLH3Nysai9sxj9rpJj4ZisXOA==", + "dev": true }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -284,6 +323,7 @@ "version": "3.5.2", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "dev": true, "requires": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -299,6 +339,7 @@ "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -309,6 +350,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/color/-/color-4.0.1.tgz", "integrity": "sha512-rpZjOKN5O7naJxkH2Rx1sZzzBgaiWECc6BYXjeCE6kF0kcASJYbUq02u7JqIHwCb/j3NhV+QhRL2683aICeGZA==", + "dev": true, "requires": { "color-convert": "^2.0.1", "color-string": "^1.6.0" @@ -318,6 +360,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "requires": { "color-name": "~1.1.4" } @@ -325,12 +368,14 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "color-string": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.6.0.tgz", "integrity": "sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA==", + "dev": true, "requires": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" @@ -339,22 +384,26 @@ "colord": { "version": "2.9.1", "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.1.tgz", - "integrity": "sha512-4LBMSt09vR0uLnPVkOUBnmxgoaeN4ewRbx801wY/bXcltXfpR/G46OdWn96XpYmCWuYvO46aBZP4NgX8HpNAcw==" + "integrity": "sha512-4LBMSt09vR0uLnPVkOUBnmxgoaeN4ewRbx801wY/bXcltXfpR/G46OdWn96XpYmCWuYvO46aBZP4NgX8HpNAcw==", + "dev": true }, "commander": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, "cosmiconfig": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "dev": true, "requires": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", @@ -366,12 +415,14 @@ "css-color-names": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-1.0.1.tgz", - "integrity": "sha512-/loXYOch1qU1biStIFsHH8SxTmOseh1IJqFvy8IujXOm1h+QjUdDhkzOrR5HG8K8mlxREj0yfi8ewCHx0eMxzA==" + "integrity": "sha512-/loXYOch1qU1biStIFsHH8SxTmOseh1IJqFvy8IujXOm1h+QjUdDhkzOrR5HG8K8mlxREj0yfi8ewCHx0eMxzA==", + "dev": true }, "css-declaration-sorter": { "version": "6.1.3", "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.1.3.tgz", "integrity": "sha512-SvjQjNRZgh4ULK1LDJ2AduPKUKxIqmtU7ZAyi47BTV+M90Qvxr9AB6lKlLbDUfXqI9IQeYA8LbAsCZPpJEV3aA==", + "dev": true, "requires": { "timsort": "^0.3.0" } @@ -380,6 +431,7 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", + "dev": true, "requires": { "boolbase": "^1.0.0", "css-what": "^5.0.0", @@ -392,6 +444,7 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, "requires": { "mdn-data": "2.0.14", "source-map": "^0.6.1" @@ -400,22 +453,26 @@ "css-unit-converter": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.2.tgz", - "integrity": "sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==" + "integrity": "sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==", + "dev": true }, "css-what": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", - "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==" + "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", + "dev": true }, "cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true }, "cssnano": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.8.tgz", "integrity": "sha512-Lda7geZU0Yu+RZi2SGpjYuQz4HI4/1Y+BhdD0jL7NXAQ5larCzVn+PUGuZbDMYz904AXXCOgO5L1teSvgu7aFg==", + "dev": true, "requires": { "cssnano-preset-default": "^5.1.4", "is-resolvable": "^1.1.0", @@ -427,6 +484,7 @@ "version": "5.1.4", "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.4.tgz", "integrity": "sha512-sPpQNDQBI3R/QsYxQvfB4mXeEcWuw0wGtKtmS5eg8wudyStYMgKOQT39G07EbW1LB56AOYrinRS9f0ig4Y3MhQ==", + "dev": true, "requires": { "css-declaration-sorter": "^6.0.3", "cssnano-utils": "^2.0.1", @@ -462,12 +520,14 @@ "cssnano-utils": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-2.0.1.tgz", - "integrity": "sha512-i8vLRZTnEH9ubIyfdZCAdIdgnHAUeQeByEeQ2I7oTilvP9oHO6RScpeq3GsFUVqeB8uZgOQ9pw8utofNn32hhQ==" + "integrity": "sha512-i8vLRZTnEH9ubIyfdZCAdIdgnHAUeQeByEeQ2I7oTilvP9oHO6RScpeq3GsFUVqeB8uZgOQ9pw8utofNn32hhQ==", + "dev": true }, "csso": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, "requires": { "css-tree": "^1.1.2" } @@ -475,17 +535,20 @@ "defined": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", - "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=" + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "dev": true }, "dependency-graph": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", - "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==" + "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", + "dev": true }, "detective": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", + "dev": true, "requires": { "acorn-node": "^1.6.1", "defined": "^1.0.0", @@ -495,12 +558,14 @@ "didyoumean": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", - "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true }, "dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, "requires": { "path-type": "^4.0.0" } @@ -508,12 +573,14 @@ "dlv": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", - "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true }, "dom-serializer": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "dev": true, "requires": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", @@ -523,12 +590,14 @@ "domelementtype": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "dev": true }, "domhandler": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", "integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", + "dev": true, "requires": { "domelementtype": "^2.2.0" } @@ -537,6 +606,7 @@ "version": "2.8.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, "requires": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", @@ -546,22 +616,26 @@ "electron-to-chromium": { "version": "1.3.878", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.878.tgz", - "integrity": "sha512-O6yxWCN9ph2AdspAIszBnd9v8s11hQx8ub9w4UGApzmNRnoKhbulOWqbO8THEQec/aEHtvy+donHZMlh6l1rbA==" + "integrity": "sha512-O6yxWCN9ph2AdspAIszBnd9v8s11hQx8ub9w4UGApzmNRnoKhbulOWqbO8THEQec/aEHtvy+donHZMlh6l1rbA==", + "dev": true }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "entities": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, "requires": { "is-arrayish": "^0.2.1" }, @@ -569,24 +643,28 @@ "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true } } }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true }, "fast-glob": { "version": "3.2.7", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "dev": true, "requires": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -599,6 +677,7 @@ "version": "1.13.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, "requires": { "reusify": "^1.0.4" } @@ -607,6 +686,7 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, "requires": { "to-regex-range": "^5.0.1" } @@ -614,17 +694,20 @@ "flag-icon-css": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/flag-icon-css/-/flag-icon-css-3.5.0.tgz", - "integrity": "sha512-pgJnJLrtb0tcDgU1fzGaQXmR8h++nXvILJ+r5SmOXaaL/2pocunQo2a8TAXhjQnBpRLPtZ1KCz/TYpqeNuE2ew==" + "integrity": "sha512-pgJnJLrtb0tcDgU1fzGaQXmR8h++nXvILJ+r5SmOXaaL/2pocunQo2a8TAXhjQnBpRLPtZ1KCz/TYpqeNuE2ew==", + "dev": true }, "fraction.js": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.1.tgz", - "integrity": "sha512-MHOhvvxHTfRFpF1geTK9czMIZ6xclsEor2wkIGYYq+PxcQqT7vStJqjhe6S1TenZrMZzo+wlqOufBDVepUEgPg==" + "integrity": "sha512-MHOhvvxHTfRFpF1geTK9czMIZ6xclsEor2wkIGYYq+PxcQqT7vStJqjhe6S1TenZrMZzo+wlqOufBDVepUEgPg==", + "dev": true }, "fs-extra": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", + "dev": true, "requires": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -634,33 +717,39 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true }, "fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, "optional": true }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true }, "get-stdin": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz", - "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==" + "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==", + "dev": true }, "glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -674,6 +763,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, "requires": { "is-glob": "^4.0.1" } @@ -682,6 +772,7 @@ "version": "12.0.2", "resolved": "https://registry.npmjs.org/globby/-/globby-12.0.2.tgz", "integrity": "sha512-lAsmb/5Lww4r7MM9nCCliDZVIKbZTavrsunAsHLr9oHthrZP1qi7/gAnHOsUs9bLvEt2vKVJhHmxuL7QbDuPdQ==", + "dev": true, "requires": { "array-union": "^3.0.1", "dir-glob": "^3.0.1", @@ -694,12 +785,14 @@ "graceful-fs": { "version": "4.2.8", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "dev": true }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, "requires": { "function-bind": "^1.1.1" } @@ -707,37 +800,44 @@ "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, "hex-color-regex": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", - "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==" + "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", + "dev": true }, "hsl-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", - "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=" + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", + "dev": true }, "hsla-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", - "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=" + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", + "dev": true }, "html-tags": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.1.0.tgz", - "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==" + "integrity": "sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==", + "dev": true }, "ignore": { "version": "5.1.8", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", - "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==" + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true }, "import-cwd": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-3.0.0.tgz", "integrity": "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==", + "dev": true, "requires": { "import-from": "^3.0.0" } @@ -746,6 +846,7 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, "requires": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -754,7 +855,8 @@ "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true } } }, @@ -762,6 +864,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz", "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==", + "dev": true, "requires": { "resolve-from": "^5.0.0" } @@ -770,6 +873,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -778,22 +882,26 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "is-absolute-url": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", - "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==" + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", + "dev": true }, "is-arrayish": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "dev": true }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, "requires": { "binary-extensions": "^2.0.0" } @@ -802,6 +910,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", + "dev": true, "requires": { "css-color-names": "^0.0.4", "hex-color-regex": "^1.1.0", @@ -814,7 +923,8 @@ "css-color-names": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", - "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=" + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "dev": true } } }, @@ -822,6 +932,7 @@ "version": "2.8.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz", "integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==", + "dev": true, "requires": { "has": "^1.0.3" } @@ -829,17 +940,20 @@ "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true }, "is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, "requires": { "is-extglob": "^2.1.1" } @@ -847,27 +961,32 @@ "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true }, "is-resolvable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==" + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "dev": true }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true }, "json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true }, "jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, "requires": { "graceful-fs": "^4.1.6", "universalify": "^2.0.0" @@ -876,72 +995,86 @@ "lilconfig": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.3.tgz", - "integrity": "sha512-EHKqr/+ZvdKCifpNrJCKxBTgk5XupZA3y/aCPY9mxfgBzmgh93Mt/WqjjQ38oMxXuvDokaKiM3lAgvSH2sjtHg==" + "integrity": "sha512-EHKqr/+ZvdKCifpNrJCKxBTgk5XupZA3y/aCPY9mxfgBzmgh93Mt/WqjjQ38oMxXuvDokaKiM3lAgvSH2sjtHg==", + "dev": true }, "lines-and-columns": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", - "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=" + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true }, "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true }, "lodash.difference": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", - "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=" + "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=", + "dev": true }, "lodash.forown": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.forown/-/lodash.forown-4.4.0.tgz", - "integrity": "sha1-hRFc8E9z75ZuztUlEdOJPMRmg68=" + "integrity": "sha1-hRFc8E9z75ZuztUlEdOJPMRmg68=", + "dev": true }, "lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", + "dev": true }, "lodash.groupby": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.groupby/-/lodash.groupby-4.6.0.tgz", - "integrity": "sha1-Cwih3PaDl8OXhVwyOXg4Mt90A9E=" + "integrity": "sha1-Cwih3PaDl8OXhVwyOXg4Mt90A9E=", + "dev": true }, "lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=" + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true }, "lodash.sortby": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true }, "lodash.topath": { "version": "4.5.2", "resolved": "https://registry.npmjs.org/lodash.topath/-/lodash.topath-4.5.2.tgz", - "integrity": "sha1-NhY1Hzu6YZlKCTGYlmC9AyVP0Ak=" + "integrity": "sha1-NhY1Hzu6YZlKCTGYlmC9AyVP0Ak=", + "dev": true }, "lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true }, "mdn-data": { "version": "2.0.14", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true }, "merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true }, "micromatch": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, "requires": { "braces": "^3.0.1", "picomatch": "^2.2.3" @@ -950,12 +1083,14 @@ "mini-svg-data-uri": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.3.tgz", - "integrity": "sha512-gSfqpMRC8IxghvMcxzzmMnWpXAChSA+vy4cia33RgerMS8Fex95akUyQZPbxJJmeBGiGmK7n/1OpUX8ksRjIdA==" + "integrity": "sha512-gSfqpMRC8IxghvMcxzzmMnWpXAChSA+vy4cia33RgerMS8Fex95akUyQZPbxJJmeBGiGmK7n/1OpUX8ksRjIdA==", + "dev": true }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -963,27 +1098,32 @@ "minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true }, "modern-normalize": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/modern-normalize/-/modern-normalize-1.1.0.tgz", - "integrity": "sha512-2lMlY1Yc1+CUy0gw4H95uNN7vjbpoED7NNRSBHE25nWfLBdmMzFCsPshlzbxHz+gYMcBEUN8V4pU16prcdPSgA==" + "integrity": "sha512-2lMlY1Yc1+CUy0gw4H95uNN7vjbpoED7NNRSBHE25nWfLBdmMzFCsPshlzbxHz+gYMcBEUN8V4pU16prcdPSgA==", + "dev": true }, "nanocolors": { "version": "0.1.12", "resolved": "https://registry.npmjs.org/nanocolors/-/nanocolors-0.1.12.tgz", - "integrity": "sha512-2nMHqg1x5PU+unxX7PGY7AuYxl2qDx7PSrTRjizr8sxdd3l/3hBuWWaki62qmtYm2U5i4Z5E7GbjlyDFhs9/EQ==" + "integrity": "sha512-2nMHqg1x5PU+unxX7PGY7AuYxl2qDx7PSrTRjizr8sxdd3l/3hBuWWaki62qmtYm2U5i4Z5E7GbjlyDFhs9/EQ==", + "dev": true }, "nanoid": { "version": "3.1.30", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.30.tgz", - "integrity": "sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==" + "integrity": "sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==", + "dev": true }, "node-emoji": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", + "dev": true, "requires": { "lodash": "^4.17.21" } @@ -991,27 +1131,32 @@ "node-releases": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", - "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==" + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", + "dev": true }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true }, "normalize-range": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=" + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true }, "normalize-url": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==" + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true }, "nth-check": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", + "dev": true, "requires": { "boolbase": "^1.0.0" } @@ -1019,12 +1164,14 @@ "object-hash": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", - "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==" + "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", + "dev": true }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, "requires": { "wrappy": "1" } @@ -1033,6 +1180,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, "requires": { "callsites": "^3.0.0" } @@ -1041,6 +1189,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, "requires": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -1051,37 +1200,44 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true }, "path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true }, "path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true }, "picocolors": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", - "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==" + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true }, "picomatch": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true }, "pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true }, "postcss": { "version": "8.3.11", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.11.tgz", "integrity": "sha512-hCmlUAIlUiav8Xdqw3Io4LcpA1DOt7h3LSTAC4G6JGHFFaWzI6qvFt9oilvl8BmkbBRX1IhM90ZAmpk68zccQA==", + "dev": true, "requires": { "nanoid": "^3.1.30", "picocolors": "^1.0.0", @@ -1091,7 +1247,8 @@ "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true } } }, @@ -1099,6 +1256,7 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.0.0.tgz", "integrity": "sha512-5NglwDrcbiy8XXfPM11F3HeC6hoT9W7GUH/Zi5U/p7u3Irv4rHhdDcIZwG0llHXV4ftsBjpfWMXAnXNl4lnt8g==", + "dev": true, "requires": { "postcss-selector-parser": "^6.0.2", "postcss-value-parser": "^4.0.2" @@ -1108,6 +1266,7 @@ "version": "9.0.1", "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-9.0.1.tgz", "integrity": "sha512-zO160OBaAZBFUWO+QZIzEKMjnPIc5c61dMg1d7xafblh9cxbNb6s16ahJuP91PcVsu//gqr7BKllJxRiRDsSYw==", + "dev": true, "requires": { "chokidar": "^3.3.0", "dependency-graph": "^0.11.0", @@ -1126,7 +1285,8 @@ "nanocolors": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/nanocolors/-/nanocolors-0.2.13.tgz", - "integrity": "sha512-0n3mSAQLPpGLV9ORXT5+C/D4mwew7Ebws69Hx4E2sgz2ZA5+32Q80B9tL8PbL7XHnRDiAxH/pnrUJ9a4fkTNTA==" + "integrity": "sha512-0n3mSAQLPpGLV9ORXT5+C/D4mwew7Ebws69Hx4E2sgz2ZA5+32Q80B9tL8PbL7XHnRDiAxH/pnrUJ9a4fkTNTA==", + "dev": true } } }, @@ -1134,6 +1294,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.0.tgz", "integrity": "sha512-+HC6GfWU3upe5/mqmxuqYZ9B2Wl4lcoUUNkoaX59nEWV4EtADCMiBqui111Bu8R8IvaZTmqmxrqOAqjbHIwXPw==", + "dev": true, "requires": { "browserslist": "^4.16.6", "caniuse-api": "^3.0.0", @@ -1145,6 +1306,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.1.tgz", "integrity": "sha512-C3zR1Do2BkKkCgC0g3sF8TS0koF2G+mN8xxayZx3f10cIRmTaAnpgpRQZjNekTZxM2ciSPoh2IWJm0VZx8NoQg==", + "dev": true, "requires": { "postcss-value-parser": "^4.1.0" } @@ -1152,27 +1314,32 @@ "postcss-discard-comments": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.1.tgz", - "integrity": "sha512-lgZBPTDvWrbAYY1v5GYEv8fEO/WhKOu/hmZqmCYfrpD6eyDWWzAOsl2rF29lpvziKO02Gc5GJQtlpkTmakwOWg==" + "integrity": "sha512-lgZBPTDvWrbAYY1v5GYEv8fEO/WhKOu/hmZqmCYfrpD6eyDWWzAOsl2rF29lpvziKO02Gc5GJQtlpkTmakwOWg==", + "dev": true }, "postcss-discard-duplicates": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.1.tgz", - "integrity": "sha512-svx747PWHKOGpAXXQkCc4k/DsWo+6bc5LsVrAsw+OU+Ibi7klFZCyX54gjYzX4TH+f2uzXjRviLARxkMurA2bA==" + "integrity": "sha512-svx747PWHKOGpAXXQkCc4k/DsWo+6bc5LsVrAsw+OU+Ibi7klFZCyX54gjYzX4TH+f2uzXjRviLARxkMurA2bA==", + "dev": true }, "postcss-discard-empty": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.1.tgz", - "integrity": "sha512-vfU8CxAQ6YpMxV2SvMcMIyF2LX1ZzWpy0lqHDsOdaKKLQVQGVP1pzhrI9JlsO65s66uQTfkQBKBD/A5gp9STFw==" + "integrity": "sha512-vfU8CxAQ6YpMxV2SvMcMIyF2LX1ZzWpy0lqHDsOdaKKLQVQGVP1pzhrI9JlsO65s66uQTfkQBKBD/A5gp9STFw==", + "dev": true }, "postcss-discard-overridden": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.1.tgz", - "integrity": "sha512-Y28H7y93L2BpJhrdUR2SR2fnSsT+3TVx1NmVQLbcnZWwIUpJ7mfcTC6Za9M2PG6w8j7UQRfzxqn8jU2VwFxo3Q==" + "integrity": "sha512-Y28H7y93L2BpJhrdUR2SR2fnSsT+3TVx1NmVQLbcnZWwIUpJ7mfcTC6Za9M2PG6w8j7UQRfzxqn8jU2VwFxo3Q==", + "dev": true }, "postcss-import": { "version": "14.0.2", "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.0.2.tgz", "integrity": "sha512-BJ2pVK4KhUyMcqjuKs9RijV5tatNzNa73e/32aBVE/ejYPe37iH+6vAu9WvqUkB5OAYgLHzbSvzHnorybJCm9g==", + "dev": true, "requires": { "postcss-value-parser": "^4.0.0", "read-cache": "^1.0.0", @@ -1183,6 +1350,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-3.0.3.tgz", "integrity": "sha512-gWnoWQXKFw65Hk/mi2+WTQTHdPD5UJdDXZmX073EY/B3BWnYjO4F4t0VneTCnCGQ5E5GsCdMkzPaTXwl3r5dJw==", + "dev": true, "requires": { "camelcase-css": "^2.0.1", "postcss": "^8.1.6" @@ -1192,6 +1360,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.0.tgz", "integrity": "sha512-ipM8Ds01ZUophjDTQYSVP70slFSYg3T0/zyfII5vzhN6V57YSxMgG5syXuwi5VtS8wSf3iL30v0uBdoIVx4Q0g==", + "dev": true, "requires": { "import-cwd": "^3.0.0", "lilconfig": "^2.0.3", @@ -1202,6 +1371,7 @@ "version": "5.0.2", "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.2.tgz", "integrity": "sha512-BMlg9AXSI5G9TBT0Lo/H3PfUy63P84rVz3BjCFE9e9Y9RXQZD3+h3YO1kgTNsNJy7bBc1YQp8DmSnwLIW5VPcw==", + "dev": true, "requires": { "css-color-names": "^1.0.1", "postcss-value-parser": "^4.1.0", @@ -1212,6 +1382,7 @@ "version": "5.0.2", "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.2.tgz", "integrity": "sha512-5K+Md7S3GwBewfB4rjDeol6V/RZ8S+v4B66Zk2gChRqLTCC8yjnHQ601omj9TKftS19OPGqZ/XzoqpzNQQLwbg==", + "dev": true, "requires": { "browserslist": "^4.16.6", "caniuse-api": "^3.0.0", @@ -1224,6 +1395,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.1.tgz", "integrity": "sha512-7JS4qIsnqaxk+FXY1E8dHBDmraYFWmuL6cgt0T1SWGRO5bzJf8sUoelwa4P88LEWJZweHevAiDKxHlofuvtIoA==", + "dev": true, "requires": { "postcss-value-parser": "^4.1.0" } @@ -1232,6 +1404,7 @@ "version": "5.0.2", "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.2.tgz", "integrity": "sha512-7Do9JP+wqSD6Prittitt2zDLrfzP9pqKs2EcLX7HJYxsxCOwrrcLt4x/ctQTsiOw+/8HYotAoqNkrzItL19SdQ==", + "dev": true, "requires": { "colord": "^2.6", "cssnano-utils": "^2.0.1", @@ -1242,6 +1415,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.1.tgz", "integrity": "sha512-4RUC4k2A/Q9mGco1Z8ODc7h+A0z7L7X2ypO1B6V8057eVK6mZ6xwz6QN64nHuHLbqbclkX1wyzRnIrdZehTEHw==", + "dev": true, "requires": { "alphanum-sort": "^1.0.2", "browserslist": "^4.16.0", @@ -1254,6 +1428,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.0.tgz", "integrity": "sha512-NzGBXDa7aPsAcijXZeagnJBKBPMYLaJJzB8CQh6ncvyl2sIndLVWfbcDi0SBjRWk5VqEjXvf8tYwzoKf4Z07og==", + "dev": true, "requires": { "alphanum-sort": "^1.0.2", "postcss-selector-parser": "^6.0.5" @@ -1263,6 +1438,7 @@ "version": "5.0.6", "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", + "dev": true, "requires": { "postcss-selector-parser": "^6.0.6" } @@ -1270,12 +1446,14 @@ "postcss-normalize-charset": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.1.tgz", - "integrity": "sha512-6J40l6LNYnBdPSk+BHZ8SF+HAkS4q2twe5jnocgd+xWpz/mx/5Sa32m3W1AA8uE8XaXN+eg8trIlfu8V9x61eg==" + "integrity": "sha512-6J40l6LNYnBdPSk+BHZ8SF+HAkS4q2twe5jnocgd+xWpz/mx/5Sa32m3W1AA8uE8XaXN+eg8trIlfu8V9x61eg==", + "dev": true }, "postcss-normalize-display-values": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.1.tgz", "integrity": "sha512-uupdvWk88kLDXi5HEyI9IaAJTE3/Djbcrqq8YgjvAVuzgVuqIk3SuJWUisT2gaJbZm1H9g5k2w1xXilM3x8DjQ==", + "dev": true, "requires": { "cssnano-utils": "^2.0.1", "postcss-value-parser": "^4.1.0" @@ -1285,6 +1463,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.1.tgz", "integrity": "sha512-rvzWAJai5xej9yWqlCb1OWLd9JjW2Ex2BCPzUJrbaXmtKtgfL8dBMOOMTX6TnvQMtjk3ei1Lswcs78qKO1Skrg==", + "dev": true, "requires": { "postcss-value-parser": "^4.1.0" } @@ -1293,6 +1472,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.1.tgz", "integrity": "sha512-syZ2itq0HTQjj4QtXZOeefomckiV5TaUO6ReIEabCh3wgDs4Mr01pkif0MeVwKyU/LHEkPJnpwFKRxqWA/7O3w==", + "dev": true, "requires": { "cssnano-utils": "^2.0.1", "postcss-value-parser": "^4.1.0" @@ -1302,6 +1482,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.1.tgz", "integrity": "sha512-Ic8GaQ3jPMVl1OEn2U//2pm93AXUcF3wz+OriskdZ1AOuYV25OdgS7w9Xu2LO5cGyhHCgn8dMXh9bO7vi3i9pA==", + "dev": true, "requires": { "postcss-value-parser": "^4.1.0" } @@ -1310,6 +1491,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.1.tgz", "integrity": "sha512-cPcBdVN5OsWCNEo5hiXfLUnXfTGtSFiBU9SK8k7ii8UD7OLuznzgNRYkLZow11BkQiiqMcgPyh4ZqXEEUrtQ1Q==", + "dev": true, "requires": { "cssnano-utils": "^2.0.1", "postcss-value-parser": "^4.1.0" @@ -1319,6 +1501,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.1.tgz", "integrity": "sha512-kAtYD6V3pK0beqrU90gpCQB7g6AOfP/2KIPCVBKJM2EheVsBQmx/Iof+9zR9NFKLAx4Pr9mDhogB27pmn354nA==", + "dev": true, "requires": { "browserslist": "^4.16.0", "postcss-value-parser": "^4.1.0" @@ -1328,6 +1511,7 @@ "version": "5.0.2", "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.2.tgz", "integrity": "sha512-k4jLTPUxREQ5bpajFQZpx8bCF2UrlqOTzP9kEqcEnOfwsRshWs2+oAFIHfDQB8GO2PaUaSE0NlTAYtbluZTlHQ==", + "dev": true, "requires": { "is-absolute-url": "^3.0.3", "normalize-url": "^6.0.1", @@ -1338,6 +1522,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.1.tgz", "integrity": "sha512-iPklmI5SBnRvwceb/XH568yyzK0qRVuAG+a1HFUsFRf11lEJTiQQa03a4RSCQvLKdcpX7XsI1Gen9LuLoqwiqA==", + "dev": true, "requires": { "postcss-value-parser": "^4.1.0" } @@ -1346,15 +1531,132 @@ "version": "5.0.2", "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.2.tgz", "integrity": "sha512-8AFYDSOYWebJYLyJi3fyjl6CqMEG/UVworjiyK1r573I56kb3e879sCJLGvR3merj+fAdPpVplXKQZv+ey6CgQ==", + "dev": true, "requires": { "cssnano-utils": "^2.0.1", "postcss-value-parser": "^4.1.0" } }, + "postcss-purgecss": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/postcss-purgecss/-/postcss-purgecss-2.0.3.tgz", + "integrity": "sha512-cuQin5PgZzvDe7EjW4S27iM6p4ZNz4iBEPmBrAykXm2WyaBtri1sA4ZVn/zECN7x3uxeADwDq1u4VDY5C9iusg==", + "dev": true, + "requires": { + "postcss": "7.0.26", + "purgecss": "^2.0.3" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "postcss": { + "version": "7.0.26", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.26.tgz", + "integrity": "sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "purgecss": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-2.3.0.tgz", + "integrity": "sha512-BE5CROfVGsx2XIhxGuZAT7rTH9lLeQx/6M0P7DTXQH4IUc3BBzs9JUzt4yzGf3JrH9enkeq6YJBe9CTtkm1WmQ==", + "dev": true, + "requires": { + "commander": "^5.0.0", + "glob": "^7.0.0", + "postcss": "7.0.32", + "postcss-selector-parser": "^6.0.2" + }, + "dependencies": { + "postcss": { + "version": "7.0.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz", + "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + } + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, "postcss-reduce-initial": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.1.tgz", "integrity": "sha512-zlCZPKLLTMAqA3ZWH57HlbCjkD55LX9dsRyxlls+wfuRfqCi5mSlZVan0heX5cHr154Dq9AfbH70LyhrSAezJw==", + "dev": true, "requires": { "browserslist": "^4.16.0", "caniuse-api": "^3.0.0" @@ -1364,6 +1666,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.1.tgz", "integrity": "sha512-a//FjoPeFkRuAguPscTVmRQUODP+f3ke2HqFNgGPwdYnpeC29RZdCBvGRGTsKpMURb/I3p6jdKoBQ2zI+9Q7kA==", + "dev": true, "requires": { "cssnano-utils": "^2.0.1", "postcss-value-parser": "^4.1.0" @@ -1373,6 +1676,7 @@ "version": "7.0.4", "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-7.0.4.tgz", "integrity": "sha512-jY/fnpGSin7kwJeunXbY35STp5O3VIxSFdjee5JkoPQ+FfGH5JW3N+Xe9oAPcL9UkjWjkK+JC72o8XH4XXKdhw==", + "dev": true, "requires": { "lodash.difference": "^4.5.0", "lodash.forown": "^4.4.0", @@ -1385,7 +1689,8 @@ "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true } } }, @@ -1393,6 +1698,7 @@ "version": "6.0.6", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", + "dev": true, "requires": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -1402,6 +1708,7 @@ "version": "5.0.2", "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.2.tgz", "integrity": "sha512-YzQuFLZu3U3aheizD+B1joQ94vzPfE6BNUcSYuceNxlVnKKsOtdo6hL9/zyC168Q8EwfLSgaDSalsUGa9f2C0A==", + "dev": true, "requires": { "postcss-value-parser": "^4.1.0", "svgo": "^2.3.0" @@ -1411,6 +1718,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.1.tgz", "integrity": "sha512-gwi1NhHV4FMmPn+qwBNuot1sG1t2OmacLQ/AX29lzyggnjd+MnVD5uqQmpXO3J17KGL2WAxQruj1qTd3H0gG/w==", + "dev": true, "requires": { "alphanum-sort": "^1.0.2", "postcss-selector-parser": "^6.0.5", @@ -1420,17 +1728,20 @@ "postcss-value-parser": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", - "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "dev": true }, "pretty-hrtime": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=" + "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", + "dev": true }, "purgecss": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-4.0.3.tgz", "integrity": "sha512-PYOIn5ibRIP34PBU9zohUcCI09c7drPJJtTDAc0Q6QlRz2/CHQ8ywGLdE7ZhxU2VTqB7p5wkvj5Qcm05Rz3Jmw==", + "dev": true, "requires": { "commander": "^6.0.0", "glob": "^7.0.0", @@ -1441,24 +1752,28 @@ "commander": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==" + "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", + "dev": true } } }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true }, "quick-lru": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==" + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true }, "read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=", + "dev": true, "requires": { "pify": "^2.3.0" } @@ -1467,6 +1782,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, "requires": { "picomatch": "^2.2.1" } @@ -1475,6 +1791,7 @@ "version": "2.1.8", "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz", "integrity": "sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg==", + "dev": true, "requires": { "css-unit-converter": "^1.1.1", "postcss-value-parser": "^3.3.0" @@ -1483,19 +1800,22 @@ "postcss-value-parser": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", - "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==" + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true } } }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true }, "resolve": { "version": "1.20.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, "requires": { "is-core-module": "^2.2.0", "path-parse": "^1.0.6" @@ -1504,27 +1824,32 @@ "resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==" + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true }, "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true }, "rgb-regex": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", - "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=" + "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", + "dev": true }, "rgba-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", - "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=" + "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", + "dev": true }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, "requires": { "glob": "^7.1.3" } @@ -1533,6 +1858,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, "requires": { "queue-microtask": "^1.2.2" } @@ -1541,6 +1867,7 @@ "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "dev": true, "requires": { "is-arrayish": "^0.3.1" } @@ -1548,27 +1875,32 @@ "slash": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==" + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true }, "source-map-js": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", - "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==" + "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", + "dev": true }, "stable": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true }, "string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -1579,6 +1911,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "requires": { "ansi-regex": "^5.0.1" } @@ -1587,6 +1920,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.1.tgz", "integrity": "sha512-Es0rVnHIqbWzveU1b24kbw92HsebBepxfcqe5iix7t9j0PQqhs0IxXVXv0pY2Bxa08CgMkzD6OWql7kbGOuEdA==", + "dev": true, "requires": { "browserslist": "^4.16.0", "postcss-selector-parser": "^6.0.4" @@ -1596,6 +1930,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -1604,6 +1939,7 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.7.0.tgz", "integrity": "sha512-aDLsGkre4fTDCWvolyW+fs8ZJFABpzLXbtdK1y71CKnHzAnpDxKXPj2mNKj+pyOXUCzFHzuxRJ94XOFygOWV3w==", + "dev": true, "requires": { "@trysound/sax": "0.2.0", "commander": "^7.2.0", @@ -1618,6 +1954,7 @@ "version": "2.2.17", "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-2.2.17.tgz", "integrity": "sha512-WgRpn+Pxn7eWqlruxnxEbL9ByVRWi3iC10z4b6dW0zSdnkPVC4hPMSWLQkkW8GCyBIv/vbJ0bxIi9dVrl4CfoA==", + "dev": true, "requires": { "arg": "^5.0.1", "bytes": "^3.0.0", @@ -1657,6 +1994,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, "requires": { "is-glob": "^4.0.3" } @@ -1666,12 +2004,14 @@ "timsort": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", - "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=" + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", + "dev": true }, "tmp": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, "requires": { "rimraf": "^3.0.0" } @@ -1680,6 +2020,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, "requires": { "is-number": "^7.0.0" } @@ -1687,27 +2028,32 @@ "uniqs": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", - "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=" + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", + "dev": true }, "universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true }, "vendors": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", - "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==" + "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", + "dev": true }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -1717,27 +2063,32 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true }, "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true }, "yaml": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true }, "yargs": { "version": "17.2.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.2.1.tgz", "integrity": "sha512-XfR8du6ua4K6uLGm5S6fA+FIJom/MdJcFNVY8geLlp2v8GYbOXD4EB1tPNZsRn4vBzKGMgb5DRZMeWuFc2GO8Q==", + "dev": true, "requires": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -1751,7 +2102,8 @@ "yargs-parser": { "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true } } } diff --git a/modules/webapp/package.json b/modules/webapp/package.json index 33eb7cd9..5b03270e 100644 --- a/modules/webapp/package.json +++ b/modules/webapp/package.json @@ -2,15 +2,17 @@ "name": "docspell-css", "version": "1.0.0", "private": true, - "dependencies": { + "dependencies": {}, + "devDependencies": { "@fortawesome/fontawesome-free": "^5.15.4", "@tailwindcss/forms": "^0.3.4", - "autoprefixer": "^10.3.7", - "cssnano": "^5.0.8", "flag-icon-css": "^3.5.0", - "postcss": "^8.3.11", "postcss-cli": "^9.0.1", "postcss-import": "^14.0.2", + "autoprefixer": "^10.3.7", + "cssnano": "^5.0.8", + "postcss": "^8.3.11", + "postcss-purgecss": "^2.0.3", "tailwindcss": "^2.2.17" } } diff --git a/modules/webapp/postcss.config.js b/modules/webapp/postcss.config.js index 049f289e..6976de4b 100644 --- a/modules/webapp/postcss.config.js +++ b/modules/webapp/postcss.config.js @@ -13,7 +13,7 @@ const prodPlugins = require('postcss-import'), tailwindcss("./tailwind.config.js"), require("autoprefixer"), - require("@fullhuman/postcss-purgecss")({ + require("postcss-purgecss")({ content: [ "./src/main/elm/**/*.elm", "./src/main/styles/keep.txt", diff --git a/project/StylesPlugin.scala b/project/StylesPlugin.scala index 5bb1b507..d83ff2e2 100644 --- a/project/StylesPlugin.scala +++ b/project/StylesPlugin.scala @@ -55,7 +55,7 @@ object StylesPlugin extends AutoPlugin { val files = postCss(npx, inDir, outDir, wd, mode, logger) ++ copyWebfonts(wd, outDir, logger) ++ copyFlags(wd, outDir, logger) - logger.info("Styles built") + logger.info(s"Styles built at $outDir") files }, stylesInstall := { @@ -63,7 +63,6 @@ object StylesPlugin extends AutoPlugin { val npm = stylesNpmCommand.value val wd = (LocalRootProject / baseDirectory).value npmInstall(npm, wd, logger) - } ) From 48d2bec9c460ab604b7253ec22785c216e1938f8 Mon Sep 17 00:00:00 2001 From: eikek Date: Sun, 24 Oct 2021 18:24:03 +0200 Subject: [PATCH 72/75] Update http4s to 0.23.6 --- .../src/main/scala/docspell/backend/BackendApp.scala | 5 ++--- .../src/main/scala/docspell/backend/ops/OJoex.scala | 9 ++------- .../common/src/main/scala/docspell/common/Pools.scala | 6 +++--- .../joex/src/main/scala/docspell/joex/JoexAppImpl.scala | 5 ++--- .../joex/src/main/scala/docspell/joex/JoexServer.scala | 6 ++---- modules/joex/src/main/scala/docspell/joex/Main.scala | 6 +----- .../src/main/scala/docspell/joex/hk/CheckNodesTask.scala | 2 +- .../main/scala/docspell/joexapi/client/JoexClient.scala | 6 ++---- .../src/main/scala/docspell/restserver/Main.scala | 7 +------ .../src/main/scala/docspell/restserver/RestAppImpl.scala | 5 ++--- .../src/main/scala/docspell/restserver/RestServer.scala | 8 +++----- project/Dependencies.scala | 2 +- 12 files changed, 22 insertions(+), 45 deletions(-) diff --git a/modules/backend/src/main/scala/docspell/backend/BackendApp.scala b/modules/backend/src/main/scala/docspell/backend/BackendApp.scala index 3881d537..4aea530f 100644 --- a/modules/backend/src/main/scala/docspell/backend/BackendApp.scala +++ b/modules/backend/src/main/scala/docspell/backend/BackendApp.scala @@ -116,12 +116,11 @@ object BackendApp { def apply[F[_]: Async]( cfg: Config, - connectEC: ExecutionContext, - httpClientEc: ExecutionContext + connectEC: ExecutionContext )(ftsFactory: Client[F] => Resource[F, FtsClient[F]]): Resource[F, BackendApp[F]] = for { store <- Store.create(cfg.jdbc, cfg.files.chunkSize, connectEC) - httpClient <- BlazeClientBuilder[F](httpClientEc).resource + httpClient <- BlazeClientBuilder[F].resource ftsClient <- ftsFactory(httpClient) backend <- create(cfg, store, httpClient, ftsClient) } yield backend diff --git a/modules/backend/src/main/scala/docspell/backend/ops/OJoex.scala b/modules/backend/src/main/scala/docspell/backend/ops/OJoex.scala index fb35267c..d4aaf956 100644 --- a/modules/backend/src/main/scala/docspell/backend/ops/OJoex.scala +++ b/modules/backend/src/main/scala/docspell/backend/ops/OJoex.scala @@ -6,8 +6,6 @@ package docspell.backend.ops -import scala.concurrent.ExecutionContext - import cats.data.OptionT import cats.effect._ import cats.implicits._ @@ -42,10 +40,7 @@ object OJoex { } yield cancel.success).getOrElse(false) }) - def create[F[_]: Async]( - ec: ExecutionContext, - store: Store[F] - ): Resource[F, OJoex[F]] = - JoexClient.resource(ec).flatMap(client => apply(client, store)) + def create[F[_]: Async](store: Store[F]): Resource[F, OJoex[F]] = + JoexClient.resource.flatMap(client => apply(client, store)) } diff --git a/modules/common/src/main/scala/docspell/common/Pools.scala b/modules/common/src/main/scala/docspell/common/Pools.scala index 20d2771c..a704bdbb 100644 --- a/modules/common/src/main/scala/docspell/common/Pools.scala +++ b/modules/common/src/main/scala/docspell/common/Pools.scala @@ -10,7 +10,7 @@ import scala.concurrent.ExecutionContext /** Captures thread pools to use in an application. */ case class Pools( - connectEC: ExecutionContext, - httpClientEC: ExecutionContext, - restEC: ExecutionContext + connectEC: ExecutionContext +// httpClientEC: ExecutionContext, +// restEC: ExecutionContext ) diff --git a/modules/joex/src/main/scala/docspell/joex/JoexAppImpl.scala b/modules/joex/src/main/scala/docspell/joex/JoexAppImpl.scala index 0f13bab4..86c65efc 100644 --- a/modules/joex/src/main/scala/docspell/joex/JoexAppImpl.scala +++ b/modules/joex/src/main/scala/docspell/joex/JoexAppImpl.scala @@ -116,11 +116,10 @@ object JoexAppImpl { def create[F[_]: Async]( cfg: Config, termSignal: SignallingRef[F, Boolean], - connectEC: ExecutionContext, - clientEC: ExecutionContext + connectEC: ExecutionContext ): Resource[F, JoexApp[F]] = for { - httpClient <- BlazeClientBuilder[F](clientEC).resource + httpClient <- BlazeClientBuilder[F].resource client = JoexClient(httpClient) store <- Store.create(cfg.jdbc, cfg.files.chunkSize, connectEC) queue <- JobQueue(store) diff --git a/modules/joex/src/main/scala/docspell/joex/JoexServer.scala b/modules/joex/src/main/scala/docspell/joex/JoexServer.scala index 202c830f..8c4773dc 100644 --- a/modules/joex/src/main/scala/docspell/joex/JoexServer.scala +++ b/modules/joex/src/main/scala/docspell/joex/JoexServer.scala @@ -33,9 +33,7 @@ object JoexServer { val app = for { signal <- Resource.eval(SignallingRef[F, Boolean](false)) exitCode <- Resource.eval(Ref[F].of(ExitCode.Success)) - joexApp <- - JoexAppImpl - .create[F](cfg, signal, pools.connectEC, pools.httpClientEC) + joexApp <- JoexAppImpl.create[F](cfg, signal, pools.connectEC) httpApp = Router( "/api/info" -> InfoRoutes(cfg), @@ -50,7 +48,7 @@ object JoexServer { Stream .resource(app) .flatMap(app => - BlazeServerBuilder[F](pools.restEC) + BlazeServerBuilder[F] .bindHttp(cfg.bind.port, cfg.bind.address) .withHttpApp(app.httpApp) .withoutBanner diff --git a/modules/joex/src/main/scala/docspell/joex/Main.scala b/modules/joex/src/main/scala/docspell/joex/Main.scala index a288c0b5..fa20b0e5 100644 --- a/modules/joex/src/main/scala/docspell/joex/Main.scala +++ b/modules/joex/src/main/scala/docspell/joex/Main.scala @@ -60,11 +60,7 @@ object Main extends IOApp { logger.warn(">>>>> Docspell is running in DEV mode! <<<<<") } - val pools = for { - cec <- connectEC - bec <- blockingEC - rec <- restserverEC - } yield Pools(cec, bec, rec) + val pools = connectEC.map(Pools.apply) pools.use(p => JoexServer .stream[IO](cfg, p) diff --git a/modules/joex/src/main/scala/docspell/joex/hk/CheckNodesTask.scala b/modules/joex/src/main/scala/docspell/joex/hk/CheckNodesTask.scala index ebcf49f5..ecba752b 100644 --- a/modules/joex/src/main/scala/docspell/joex/hk/CheckNodesTask.scala +++ b/modules/joex/src/main/scala/docspell/joex/hk/CheckNodesTask.scala @@ -26,7 +26,7 @@ object CheckNodesTask { for { _ <- ctx.logger.info("Check nodes reachability") ec = scala.concurrent.ExecutionContext.global - _ <- BlazeClientBuilder[F](ec).resource.use { client => + _ <- BlazeClientBuilder[F].withExecutionContext(ec).resource.use { client => checkNodes(ctx, client) } _ <- ctx.logger.info( diff --git a/modules/joexapi/src/main/scala/docspell/joexapi/client/JoexClient.scala b/modules/joexapi/src/main/scala/docspell/joexapi/client/JoexClient.scala index df2e5065..d6a6a5c7 100644 --- a/modules/joexapi/src/main/scala/docspell/joexapi/client/JoexClient.scala +++ b/modules/joexapi/src/main/scala/docspell/joexapi/client/JoexClient.scala @@ -6,8 +6,6 @@ package docspell.joexapi.client -import scala.concurrent.ExecutionContext - import cats.effect._ import cats.implicits._ @@ -69,6 +67,6 @@ object JoexClient { Uri.unsafeFromString(u.asString) } - def resource[F[_]: Async](ec: ExecutionContext): Resource[F, JoexClient[F]] = - BlazeClientBuilder[F](ec).resource.map(apply[F]) + def resource[F[_]: Async]: Resource[F, JoexClient[F]] = + BlazeClientBuilder[F].resource.map(apply[F]) } diff --git a/modules/restserver/src/main/scala/docspell/restserver/Main.scala b/modules/restserver/src/main/scala/docspell/restserver/Main.scala index d8d838ac..7d441783 100644 --- a/modules/restserver/src/main/scala/docspell/restserver/Main.scala +++ b/modules/restserver/src/main/scala/docspell/restserver/Main.scala @@ -55,12 +55,7 @@ object Main extends IOApp { cfg.baseUrl, Some(cfg.fullTextSearch.solr.url).filter(_ => cfg.fullTextSearch.enabled) ) - val pools = for { - cec <- connectEC - bec <- blockingEC - rec <- restserverEC - } yield Pools(cec, bec, rec) - + val pools = connectEC.map(Pools.apply) logger.info(s"\n${banner.render("***>")}") if (EnvMode.current.isDev) { logger.warn(">>>>> Docspell is running in DEV mode! <<<<<") diff --git a/modules/restserver/src/main/scala/docspell/restserver/RestAppImpl.scala b/modules/restserver/src/main/scala/docspell/restserver/RestAppImpl.scala index fbfbd0e1..74b6a303 100644 --- a/modules/restserver/src/main/scala/docspell/restserver/RestAppImpl.scala +++ b/modules/restserver/src/main/scala/docspell/restserver/RestAppImpl.scala @@ -32,11 +32,10 @@ object RestAppImpl { def create[F[_]: Async]( cfg: Config, - connectEC: ExecutionContext, - httpClientEc: ExecutionContext + connectEC: ExecutionContext ): Resource[F, RestApp[F]] = for { - backend <- BackendApp(cfg.backend, connectEC, httpClientEc)( + backend <- BackendApp(cfg.backend, connectEC)( createFtsClient[F](cfg) ) app = new RestAppImpl[F](cfg, backend) diff --git a/modules/restserver/src/main/scala/docspell/restserver/RestServer.scala b/modules/restserver/src/main/scala/docspell/restserver/RestServer.scala index 9881fdcc..f64f0a93 100644 --- a/modules/restserver/src/main/scala/docspell/restserver/RestServer.scala +++ b/modules/restserver/src/main/scala/docspell/restserver/RestServer.scala @@ -34,10 +34,8 @@ object RestServer { val templates = TemplateRoutes[F](cfg) val app = for { - restApp <- - RestAppImpl - .create[F](cfg, pools.connectEC, pools.httpClientEC) - httpClient <- BlazeClientBuilder[F](pools.httpClientEC).resource + restApp <- RestAppImpl.create[F](cfg, pools.connectEC) + httpClient <- BlazeClientBuilder[F].resource httpApp = Router( "/api/info" -> routes.InfoRoutes(), "/api/v1/open/" -> openRoutes(cfg, httpClient, restApp), @@ -64,7 +62,7 @@ object RestServer { Stream .resource(app) .flatMap(httpApp => - BlazeServerBuilder[F](pools.restEC) + BlazeServerBuilder[F] .bindHttp(cfg.bind.port, cfg.bind.address) .withHttpApp(httpApp) .withoutBanner diff --git a/project/Dependencies.scala b/project/Dependencies.scala index c97cfd87..c53bcc6c 100644 --- a/project/Dependencies.scala +++ b/project/Dependencies.scala @@ -19,7 +19,7 @@ object Dependencies { val Fs2Version = "3.1.6" val Fs2CronVersion = "0.7.1" val H2Version = "1.4.200" - val Http4sVersion = "0.23.4" + val Http4sVersion = "0.23.6" val Icu4jVersion = "69.1" val javaOtpVersion = "0.3.0" val JsoupVersion = "1.14.3" From 4e5924d796122fb539d5124f9946ff9c661cbf6f Mon Sep 17 00:00:00 2001 From: eikek Date: Sun, 24 Oct 2021 23:02:39 +0200 Subject: [PATCH 73/75] Refactor config loading and add config from environment Issue: #1121 --- .scalafmt.conf | 1 + build.sbt | 32 +++++- .../scala/docspell/config/ConfigFactory.scala | 108 ++++++++++++++++++ .../scala/docspell/config/EnvConfig.scala | 78 +++++++++++++ .../scala/docspell}/config/Implicits.scala | 5 +- .../config/src/test/resources/reference.conf | 5 + .../scala/docspell/config/EnvConfigTest.scala | 45 ++++++++ .../main/scala/docspell/joex/ConfigFile.scala | 13 ++- .../src/main/scala/docspell/joex/Main.scala | 84 +++++--------- .../docspell/restserver/ConfigFile.scala | 13 ++- .../main/scala/docspell/restserver/Main.scala | 65 ++++------- 11 files changed, 339 insertions(+), 110 deletions(-) create mode 100644 modules/config/src/main/scala/docspell/config/ConfigFactory.scala create mode 100644 modules/config/src/main/scala/docspell/config/EnvConfig.scala rename modules/{common/src/main/scala/docspell/common => config/src/main/scala/docspell}/config/Implicits.scala (97%) create mode 100644 modules/config/src/test/resources/reference.conf create mode 100644 modules/config/src/test/scala/docspell/config/EnvConfigTest.scala diff --git a/.scalafmt.conf b/.scalafmt.conf index fe959dae..28250946 100644 --- a/.scalafmt.conf +++ b/.scalafmt.conf @@ -2,6 +2,7 @@ version = "3.0.6" preset = default align.preset = some +runner.dialect = scala213 maxColumn = 90 diff --git a/build.sbt b/build.sbt index 9e1b0777..2d22c7b3 100644 --- a/build.sbt +++ b/build.sbt @@ -293,10 +293,23 @@ val common = project Dependencies.circe ++ Dependencies.loggingApi ++ Dependencies.calevCore ++ - Dependencies.calevCirce ++ - Dependencies.pureconfig.map(_ % "optional") + Dependencies.calevCirce ) +val config = project + .in(file("modules/config")) + .disablePlugins(RevolverPlugin) + .settings(sharedSettings) + .settings(testSettingsMUnit) + .settings( + name := "docspell-config", + addCompilerPlugin(Dependencies.kindProjectorPlugin), + libraryDependencies ++= + Dependencies.fs2 ++ + Dependencies.pureconfig + ) + .dependsOn(common) + // Some example files for testing // https://file-examples.com/index.php/sample-documents-download/sample-doc-download/ val files = project @@ -603,7 +616,17 @@ val joex = project ), Revolver.enableDebugging(port = 5051, suspend = false) ) - .dependsOn(store, backend, extract, convert, analysis, joexapi, restapi, ftssolr) + .dependsOn( + config, + store, + backend, + extract, + convert, + analysis, + joexapi, + restapi, + ftssolr + ) val restserver = project .in(file("modules/restserver")) @@ -666,7 +689,7 @@ val restserver = project } } ) - .dependsOn(restapi, joexapi, backend, webapp, ftssolr, oidc) + .dependsOn(config, restapi, joexapi, backend, webapp, ftssolr, oidc) // --- Website Documentation @@ -731,6 +754,7 @@ val root = project ) .aggregate( common, + config, extract, convert, analysis, diff --git a/modules/config/src/main/scala/docspell/config/ConfigFactory.scala b/modules/config/src/main/scala/docspell/config/ConfigFactory.scala new file mode 100644 index 00000000..27661f99 --- /dev/null +++ b/modules/config/src/main/scala/docspell/config/ConfigFactory.scala @@ -0,0 +1,108 @@ +/* + * Copyright 2020 Eike K. & Contributors + * + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +package docspell.config + +import scala.reflect.ClassTag + +import cats.data.OptionT +import cats.effect._ +import cats.implicits._ +import fs2.io.file.{Files, Path} + +import docspell.common.Logger + +import pureconfig.{ConfigReader, ConfigSource} + +object ConfigFactory { + + /** Reads the configuration trying the following in order: + * 1. if 'args' contains at least one element, the first is interpreted as a config + * file + * 1. otherwise check the system property 'config.file' for an existing file and use + * it if it does exist; ignore if it doesn't exist + * 1. if no file is found, read the config from environment variables falling back to + * the default config + */ + def default[F[_]: Async, C: ClassTag: ConfigReader](logger: Logger[F], atPath: String)( + args: List[String] + ): F[C] = + findFileFromArgs(args).flatMap { + case Some(file) => + logger.info(s"Using config file: $file") *> + readFile[F, C](file, atPath) + case None => + checkSystemProperty.value.flatMap { + case Some(file) => + logger.info(s"Using config file from system property: $file") *> + readConfig(atPath) + case None => + logger.info("Using config from environment variables!") *> + readEnv(atPath) + } + } + + /** Reads the configuration from the given file. */ + private def readFile[F[_]: Sync, C: ClassTag: ConfigReader]( + file: Path, + at: String + ): F[C] = + Sync[F].delay { + System.setProperty( + "config.file", + file.toNioPath.toAbsolutePath.normalize.toString + ) + ConfigSource.default.at(at).loadOrThrow[C] + } + + /** Reads the config as specified in typesafe's config library; usually loading the file + * given as system property 'config.file'. + */ + private def readConfig[F[_]: Sync, C: ClassTag: ConfigReader]( + at: String + ): F[C] = + Sync[F].delay(ConfigSource.default.at(at).loadOrThrow[C]) + + /** Reads the configuration from environment variables. */ + private def readEnv[F[_]: Sync, C: ClassTag: ConfigReader](at: String): F[C] = + Sync[F].delay(ConfigSource.fromConfig(EnvConfig.get).at(at).loadOrThrow[C]) + + /** Uses the first argument as a path to the config file. If it is specified but the + * file doesn't exist, an exception is thrown. + */ + private def findFileFromArgs[F[_]: Async](args: List[String]): F[Option[Path]] = + args.headOption + .map(Path.apply) + .traverse(p => + Files[F].exists(p).flatMap { + case true => p.pure[F] + case false => Async[F].raiseError(new Exception(s"File not found: $p")) + } + ) + + /** If the system property 'config.file' is set, it is checked whether the file exists. + * If it doesn't exist, the property is removed to not raise any exception. In contrast + * to giving the file as argument, it is not an error to specify a non-existing file + * via a system property. + */ + private def checkSystemProperty[F[_]: Async]: OptionT[F, Path] = + for { + cf <- OptionT( + Sync[F].delay( + Option(System.getProperty("config.file")).map(_.trim).filter(_.nonEmpty) + ) + ) + cp = Path(cf) + exists <- OptionT.liftF(Files[F].exists(cp)) + file <- + if (exists) OptionT.pure[F](cp) + else + OptionT + .liftF(Sync[F].delay(System.clearProperty("config.file"))) + .flatMap(_ => OptionT.none[F, Path]) + } yield file + +} diff --git a/modules/config/src/main/scala/docspell/config/EnvConfig.scala b/modules/config/src/main/scala/docspell/config/EnvConfig.scala new file mode 100644 index 00000000..37e05596 --- /dev/null +++ b/modules/config/src/main/scala/docspell/config/EnvConfig.scala @@ -0,0 +1,78 @@ +/* + * Copyright 2020 Eike K. & Contributors + * + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +package docspell.config + +import java.util.Properties + +import scala.collection.{MapView, mutable} +import scala.jdk.CollectionConverters._ + +import com.typesafe.config.{Config, ConfigFactory} + +/** Creates a config from environment variables. + * + * The env variables are expected to be in same form as the config keys with the + * following mangling: a dot is replaced by an underscore character, because this is the + * standard separator for env variables. In order to represent dashes, two underscores + * are needed (and for one underscore use three underscores in the env variable). + * + * For example, the config key + * {{{ + * docspell.server.app-name + * }}} + * can be given as env variable + * {{{ + * DOCSPELL_SERVER_APP__NAME + * }}} + */ +object EnvConfig { + + /** The config from current environment. */ + lazy val get: Config = + loadFrom(System.getenv().asScala.view) + + def loadFrom(env: MapView[String, String]): Config = { + val cfg = new Properties() + for (key <- env.keySet if key.startsWith("DOCSPELL_")) + cfg.setProperty(envToProp(key), env(key)) + + ConfigFactory + .parseProperties(cfg) + .withFallback(ConfigFactory.defaultReference()) + .resolve() + } + + /** Docspell has all lowercase key names and uses snake case. + * + * So this converts to lowercase and then replaces underscores (like + * [[com.typesafe.config.ConfigFactory.systemEnvironmentOverrides()]] + * + * - 3 underscores -> `_` (underscore) + * - 2 underscores -> `-` (dash) + * - 1 underscore -> `.` (dot) + */ + private[config] def envToProp(v: String): String = { + val len = v.length + val buffer = new mutable.StringBuilder() + val underscoreMapping = Map(3 -> '_', 2 -> '-', 1 -> '.').withDefault(_ => '_') + @annotation.tailrec + def go(current: Int, underscores: Int): String = + if (current >= len) buffer.toString() + else + v.charAt(current) match { + case '_' => go(current + 1, underscores + 1) + case c => + if (underscores > 0) { + buffer.append(underscoreMapping(underscores)) + } + buffer.append(c.toLower) + go(current + 1, 0) + } + + go(0, 0) + } +} diff --git a/modules/common/src/main/scala/docspell/common/config/Implicits.scala b/modules/config/src/main/scala/docspell/config/Implicits.scala similarity index 97% rename from modules/common/src/main/scala/docspell/common/config/Implicits.scala rename to modules/config/src/main/scala/docspell/config/Implicits.scala index 81ff0a4c..77136cbc 100644 --- a/modules/common/src/main/scala/docspell/common/config/Implicits.scala +++ b/modules/config/src/main/scala/docspell/config/Implicits.scala @@ -4,7 +4,7 @@ * SPDX-License-Identifier: AGPL-3.0-or-later */ -package docspell.common.config +package docspell.config import java.nio.file.{Path => JPath} @@ -15,12 +15,11 @@ import fs2.io.file.Path import docspell.common._ import com.github.eikek.calev.CalEvent -import pureconfig._ +import pureconfig.ConfigReader import pureconfig.error.{CannotConvert, FailureReason} import scodec.bits.ByteVector object Implicits { - implicit val accountIdReader: ConfigReader[AccountId] = ConfigReader[String].emap(reason(AccountId.parse)) diff --git a/modules/config/src/test/resources/reference.conf b/modules/config/src/test/resources/reference.conf new file mode 100644 index 00000000..9a1a79c8 --- /dev/null +++ b/modules/config/src/test/resources/reference.conf @@ -0,0 +1,5 @@ +docspell.server { + bind { + port = 7880 + } +} \ No newline at end of file diff --git a/modules/config/src/test/scala/docspell/config/EnvConfigTest.scala b/modules/config/src/test/scala/docspell/config/EnvConfigTest.scala new file mode 100644 index 00000000..044e0e57 --- /dev/null +++ b/modules/config/src/test/scala/docspell/config/EnvConfigTest.scala @@ -0,0 +1,45 @@ +/* + * Copyright 2020 Eike K. & Contributors + * + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +package docspell.config + +import munit.FunSuite + +class EnvConfigTest extends FunSuite { + + test("convert underscores") { + assertEquals(EnvConfig.envToProp("A_B_C"), "a.b.c") + assertEquals(EnvConfig.envToProp("A_B__C"), "a.b-c") + assertEquals(EnvConfig.envToProp("AA_BB__CC___D"), "aa.bb-cc_d") + } + + test("insert docspell keys") { + val cfg = EnvConfig.loadFrom( + Map( + "DOCSPELL_SERVER_APP__NAME" -> "Hello!", + "DOCSPELL_JOEX_BIND_PORT" -> "1234" + ).view + ) + + assertEquals(cfg.getString("docspell.server.app-name"), "Hello!") + assertEquals(cfg.getInt("docspell.joex.bind.port"), 1234) + } + + test("find default values from reference.conf") { + val cfg = EnvConfig.loadFrom( + Map( + "DOCSPELL_SERVER_APP__NAME" -> "Hello!", + "DOCSPELL_JOEX_BIND_PORT" -> "1234" + ).view + ) + assertEquals(cfg.getInt("docspell.server.bind.port"), 7880) + } + + test("discard non docspell keys") { + val cfg = EnvConfig.loadFrom(Map("A_B_C" -> "12").view) + assert(!cfg.hasPath("a.b.c")) + } +} diff --git a/modules/joex/src/main/scala/docspell/joex/ConfigFile.scala b/modules/joex/src/main/scala/docspell/joex/ConfigFile.scala index 24ef9322..4b3aaf4d 100644 --- a/modules/joex/src/main/scala/docspell/joex/ConfigFile.scala +++ b/modules/joex/src/main/scala/docspell/joex/ConfigFile.scala @@ -8,9 +8,12 @@ package docspell.joex import cats.data.Validated import cats.data.ValidatedNec +import cats.effect.Async import cats.implicits._ -import docspell.common.config.Implicits._ +import docspell.common.Logger +import docspell.config.ConfigFactory +import docspell.config.Implicits._ import docspell.joex.scheduler.CountingScheme import emil.MailAddress @@ -22,8 +25,12 @@ import yamusca.imports._ object ConfigFile { import Implicits._ - def loadConfig: Config = - validOrThrow(ConfigSource.default.at("docspell.joex").loadOrThrow[Config]) + def loadConfig[F[_]: Async](args: List[String]): F[Config] = { + val logger = Logger.log4s[F](org.log4s.getLogger) + ConfigFactory + .default[F, Config](logger, "docspell.joex")(args) + .map(cfg => validOrThrow(cfg)) + } private def validOrThrow(cfg: Config): Config = validate(cfg).fold(err => sys.error(err.toList.mkString("- ", "\n", "")), identity) diff --git a/modules/joex/src/main/scala/docspell/joex/Main.scala b/modules/joex/src/main/scala/docspell/joex/Main.scala index fa20b0e5..6f96e1e0 100644 --- a/modules/joex/src/main/scala/docspell/joex/Main.scala +++ b/modules/joex/src/main/scala/docspell/joex/Main.scala @@ -6,67 +6,45 @@ package docspell.joex -import java.nio.file.{Files, Paths} - import cats.effect._ -import cats.implicits._ import docspell.common._ -import org.log4s._ +import org.log4s.getLogger object Main extends IOApp { - private[this] val logger = getLogger - val blockingEC = - ThreadFactories.cached[IO](ThreadFactories.ofName("docspell-joex-blocking")) - val connectEC = + private val logger: Logger[IO] = Logger.log4s[IO](getLogger) + + private val connectEC = ThreadFactories.fixed[IO](5, ThreadFactories.ofName("docspell-joex-dbconnect")) - val restserverEC = - ThreadFactories.workSteal[IO](ThreadFactories.ofNameFJ("docspell-joex-server")) - def run(args: List[String]) = { - args match { - case file :: Nil => - val path = Paths.get(file).toAbsolutePath.normalize - logger.info(s"Using given config file: $path") - System.setProperty("config.file", file) - case _ => - Option(System.getProperty("config.file")) match { - case Some(f) if f.nonEmpty => - val path = Paths.get(f).toAbsolutePath.normalize - if (!Files.exists(path)) { - logger.info(s"Not using config file '$f' because it doesn't exist") - System.clearProperty("config.file") - } else - logger.info(s"Using config file from system properties: $f") - case _ => - } - } + def run(args: List[String]): IO[ExitCode] = + for { + cfg <- ConfigFile.loadConfig[IO](args) + banner = Banner( + "JOEX", + BuildInfo.version, + BuildInfo.gitHeadCommit, + cfg.jdbc.url, + Option(System.getProperty("config.file")), + cfg.appId, + cfg.baseUrl, + Some(cfg.fullTextSearch.solr.url).filter(_ => cfg.fullTextSearch.enabled) + ) + _ <- logger.info(s"\n${banner.render("***>")}") + _ <- + if (EnvMode.current.isDev) { + logger.warn(">>>>> Docspell is running in DEV mode! <<<<<") + } else IO(()) - val cfg = ConfigFile.loadConfig - val banner = Banner( - "JOEX", - BuildInfo.version, - BuildInfo.gitHeadCommit, - cfg.jdbc.url, - Option(System.getProperty("config.file")), - cfg.appId, - cfg.baseUrl, - Some(cfg.fullTextSearch.solr.url).filter(_ => cfg.fullTextSearch.enabled) - ) - logger.info(s"\n${banner.render("***>")}") - if (EnvMode.current.isDev) { - logger.warn(">>>>> Docspell is running in DEV mode! <<<<<") - } - - val pools = connectEC.map(Pools.apply) - pools.use(p => - JoexServer - .stream[IO](cfg, p) - .compile - .drain - .as(ExitCode.Success) - ) - } + pools = connectEC.map(Pools.apply) + rc <- pools.use(p => + JoexServer + .stream[IO](cfg, p) + .compile + .drain + .as(ExitCode.Success) + ) + } yield rc } diff --git a/modules/restserver/src/main/scala/docspell/restserver/ConfigFile.scala b/modules/restserver/src/main/scala/docspell/restserver/ConfigFile.scala index c321ee71..7bebe31e 100644 --- a/modules/restserver/src/main/scala/docspell/restserver/ConfigFile.scala +++ b/modules/restserver/src/main/scala/docspell/restserver/ConfigFile.scala @@ -8,10 +8,13 @@ package docspell.restserver import cats.Semigroup import cats.data.{Validated, ValidatedNec} +import cats.effect.Async import cats.implicits._ import docspell.backend.signup.{Config => SignupConfig} -import docspell.common.config.Implicits._ +import docspell.common.Logger +import docspell.config.ConfigFactory +import docspell.config.Implicits._ import docspell.oidc.{ProviderConfig, SignatureAlgo} import docspell.restserver.auth.OpenId @@ -21,8 +24,12 @@ import pureconfig.generic.auto._ object ConfigFile { import Implicits._ - def loadConfig: Config = - Validate(ConfigSource.default.at("docspell.server").loadOrThrow[Config]) + def loadConfig[F[_]: Async](args: List[String]): F[Config] = { + val logger = Logger.log4s(org.log4s.getLogger) + ConfigFactory + .default[F, Config](logger, "docspell.server")(args) + .map(cfg => Validate(cfg)) + } object Implicits { implicit val signupModeReader: ConfigReader[SignupConfig.Mode] = diff --git a/modules/restserver/src/main/scala/docspell/restserver/Main.scala b/modules/restserver/src/main/scala/docspell/restserver/Main.scala index 7d441783..5907ff41 100644 --- a/modules/restserver/src/main/scala/docspell/restserver/Main.scala +++ b/modules/restserver/src/main/scala/docspell/restserver/Main.scala @@ -6,46 +6,21 @@ package docspell.restserver -import java.nio.file.{Files, Paths} - import cats.effect._ -import cats.implicits._ import docspell.common._ -import org.log4s._ +import org.log4s.getLogger object Main extends IOApp { - private[this] val logger = getLogger + private[this] val logger: Logger[IO] = Logger.log4s(getLogger) - val blockingEC = - ThreadFactories.cached[IO](ThreadFactories.ofName("docspell-restserver-blocking")) - val connectEC = + private val connectEC = ThreadFactories.fixed[IO](5, ThreadFactories.ofName("docspell-dbconnect")) - val restserverEC = - ThreadFactories.workSteal[IO](ThreadFactories.ofNameFJ("docspell-restserver")) - def run(args: List[String]) = { - args match { - case file :: Nil => - val path = Paths.get(file).toAbsolutePath.normalize - logger.info(s"Using given config file: $path") - System.setProperty("config.file", file) - case _ => - Option(System.getProperty("config.file")) match { - case Some(f) if f.nonEmpty => - val path = Paths.get(f).toAbsolutePath.normalize - if (!Files.exists(path)) { - logger.info(s"Not using config file '$f' because it doesn't exist") - System.clearProperty("config.file") - } else - logger.info(s"Using config file from system properties: $f") - case _ => - } - } - - val cfg = ConfigFile.loadConfig - val banner = Banner( + def run(args: List[String]) = for { + cfg <- ConfigFile.loadConfig[IO](args) + banner = Banner( "REST Server", BuildInfo.version, BuildInfo.gitHeadCommit, @@ -55,18 +30,20 @@ object Main extends IOApp { cfg.baseUrl, Some(cfg.fullTextSearch.solr.url).filter(_ => cfg.fullTextSearch.enabled) ) - val pools = connectEC.map(Pools.apply) - logger.info(s"\n${banner.render("***>")}") - if (EnvMode.current.isDev) { - logger.warn(">>>>> Docspell is running in DEV mode! <<<<<") - } + _ <- logger.info(s"\n${banner.render("***>")}") + _ <- + if (EnvMode.current.isDev) { + logger.warn(">>>>> Docspell is running in DEV mode! <<<<<") + } else IO(()) - pools.use(p => - RestServer - .stream[IO](cfg, p) - .compile - .drain - .as(ExitCode.Success) - ) - } + pools = connectEC.map(Pools.apply) + rc <- + pools.use(p => + RestServer + .stream[IO](cfg, p) + .compile + .drain + .as(ExitCode.Success) + ) + } yield rc } From 94b26a1721146cb0dd49b5ed8a4f739358f1a053 Mon Sep 17 00:00:00 2001 From: eikek Date: Mon, 25 Oct 2021 00:21:03 +0200 Subject: [PATCH 74/75] Generate random server secret if not provided from config --- .../src/main/resources/reference.conf | 5 +++-- .../docspell/restserver/ConfigFile.scala | 21 +++++++++++++++++-- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/modules/restserver/src/main/resources/reference.conf b/modules/restserver/src/main/resources/reference.conf index 29b63dc1..074c4e39 100644 --- a/modules/restserver/src/main/resources/reference.conf +++ b/modules/restserver/src/main/resources/reference.conf @@ -47,8 +47,9 @@ docspell.server { # The secret for this server that is used to sign the authenicator # tokens. If multiple servers are running, all must share the same # secret. You can use base64 or hex strings (prefix with b64: and - # hex:, respectively). - server-secret = "hex:caffee" + # hex:, respectively). If empty, a random secret is generated. + # Example: b64:YRx77QujCGkHSvll0TVEmtTaw3Z5eXr+nWMsEJowgKg= + server-secret = "" # How long an authentication token is valid. The web application # will get a new one periodically. diff --git a/modules/restserver/src/main/scala/docspell/restserver/ConfigFile.scala b/modules/restserver/src/main/scala/docspell/restserver/ConfigFile.scala index 7bebe31e..3dff82e9 100644 --- a/modules/restserver/src/main/scala/docspell/restserver/ConfigFile.scala +++ b/modules/restserver/src/main/scala/docspell/restserver/ConfigFile.scala @@ -6,6 +6,8 @@ package docspell.restserver +import java.security.SecureRandom + import cats.Semigroup import cats.data.{Validated, ValidatedNec} import cats.effect.Async @@ -20,12 +22,14 @@ import docspell.restserver.auth.OpenId import pureconfig._ import pureconfig.generic.auto._ +import scodec.bits.ByteVector object ConfigFile { + private[this] val unsafeLogger = org.log4s.getLogger import Implicits._ def loadConfig[F[_]: Async](args: List[String]): F[Config] = { - val logger = Logger.log4s(org.log4s.getLogger) + val logger = Logger.log4s(unsafeLogger) ConfigFactory .default[F, Config](logger, "docspell.server")(args) .map(cfg => Validate(cfg)) @@ -57,12 +61,25 @@ object ConfigFile { def all(cfg: Config) = List( duplicateOpenIdProvider(cfg), - signKeyVsUserUrl(cfg) + signKeyVsUserUrl(cfg), + generateSecretIfEmpty(cfg) ) private def valid(cfg: Config): ValidatedNec[String, Config] = Validated.validNec(cfg) + def generateSecretIfEmpty(cfg: Config): ValidatedNec[String, Config] = + if (cfg.auth.serverSecret.isEmpty) { + unsafeLogger.warn( + "No serverSecret specified. Generating a random one. It is recommended to add a server-secret in the config file." + ) + val random = new SecureRandom() + val buffer = new Array[Byte](32) + random.nextBytes(buffer) + val secret = ByteVector.view(buffer) + valid(cfg.copy(auth = cfg.auth.copy(serverSecret = secret))) + } else valid(cfg) + def duplicateOpenIdProvider(cfg: Config): ValidatedNec[String, Config] = { val dupes = cfg.openid From 118d23c3a24ee40c02437e8ee4b6bbcaf5635fa6 Mon Sep 17 00:00:00 2001 From: eikek Date: Mon, 25 Oct 2021 00:21:18 +0200 Subject: [PATCH 75/75] Add list of env variables to documentation Issue: #1121 --- .gitignore | 1 + build.sbt | 12 ++- .../joex/src/main/resources/reference.conf | 13 +++- .../src/main/resources/reference.conf | 13 +++- project/EnvConfig.scala | 75 +++++++++++++++++++ project/build.sbt | 2 + website/site/content/docs/configure/_index.md | 36 +++++++-- 7 files changed, 137 insertions(+), 15 deletions(-) create mode 100644 project/EnvConfig.scala create mode 100644 project/build.sbt diff --git a/.gitignore b/.gitignore index fa587c4d..1af7f1de 100644 --- a/.gitignore +++ b/.gitignore @@ -14,5 +14,6 @@ _site/ /website/site/templates/shortcodes/server.conf /website/site/templates/shortcodes/sample-exim.conf /website/site/templates/shortcodes/joex.conf +/website/site/templates/shortcodes/config.env.txt /docker/docs /docker/dev-log diff --git a/build.sbt b/build.sbt index 2d22c7b3..82ebe6c2 100644 --- a/build.sbt +++ b/build.sbt @@ -709,7 +709,6 @@ val website = project val templateOut = baseDirectory.value / "site" / "templates" / "shortcodes" val staticOut = baseDirectory.value / "site" / "static" / "openapi" IO.createDirectories(Seq(templateOut, staticOut)) - val logger = streams.value.log val files = Seq( (restserver / Compile / resourceDirectory).value / "reference.conf" -> templateOut / "server.conf", @@ -721,6 +720,17 @@ val website = project IO.copy(files) files.map(_._2) }.taskValue, + Compile / resourceGenerators += Def.task { + val templateOut = + baseDirectory.value / "site" / "templates" / "shortcodes" / "config.env.txt" + val files = List( + (restserver / Compile / resourceDirectory).value / "reference.conf", + (joex / Compile / resourceDirectory).value / "reference.conf" + ) + val cfg = EnvConfig.makeConfig(files) + EnvConfig.serializeTo(cfg, templateOut) + Seq(templateOut) + }.taskValue, Compile / resourceGenerators += Def.task { val changelog = (LocalRootProject / baseDirectory).value / "Changelog.md" val targetDir = baseDirectory.value / "site" / "content" / "docs" / "changelog" diff --git a/modules/joex/src/main/resources/reference.conf b/modules/joex/src/main/resources/reference.conf index 4313771a..80348f57 100644 --- a/modules/joex/src/main/resources/reference.conf +++ b/modules/joex/src/main/resources/reference.conf @@ -20,14 +20,19 @@ docspell.joex { # The database connection. # - # By default a H2 file-based database is configured. You can provide - # a postgresql or mariadb connection here. When using H2 use the - # PostgreSQL compatibility mode and AUTO_SERVER feature. - # # It must be the same connection as the rest server is using. jdbc { + + # The JDBC url to the database. By default a H2 file-based + # database is configured. You can provide a postgresql or mariadb + # connection here. When using H2 use the PostgreSQL compatibility + # mode and AUTO_SERVER feature. url = "jdbc:h2://"${java.io.tmpdir}"/docspell-demo.db;MODE=PostgreSQL;DATABASE_TO_LOWER=TRUE;AUTO_SERVER=TRUE" + + # The database user. user = "sa" + + # The database password. password = "" } diff --git a/modules/restserver/src/main/resources/reference.conf b/modules/restserver/src/main/resources/reference.conf index 074c4e39..961d7d46 100644 --- a/modules/restserver/src/main/resources/reference.conf +++ b/modules/restserver/src/main/resources/reference.conf @@ -280,6 +280,7 @@ docspell.server { # Configuration for the backend. backend { + # Enable or disable debugging for e-mail related functionality. This # applies to both sending and receiving mails. For security reasons # logging is not very extensive on authentication failures. Setting @@ -287,13 +288,17 @@ docspell.server { mail-debug = false # The database connection. - # - # By default a H2 file-based database is configured. You can - # provide a postgresql or mariadb connection here. When using H2 - # use the PostgreSQL compatibility mode and AUTO_SERVER feature. jdbc { + # The JDBC url to the database. By default a H2 file-based + # database is configured. You can provide a postgresql or + # mariadb connection here. When using H2 use the PostgreSQL + # compatibility mode and AUTO_SERVER feature. url = "jdbc:h2://"${java.io.tmpdir}"/docspell-demo.db;MODE=PostgreSQL;DATABASE_TO_LOWER=TRUE;AUTO_SERVER=TRUE" + + # The database user. user = "sa" + + # The database password. password = "" } diff --git a/project/EnvConfig.scala b/project/EnvConfig.scala new file mode 100644 index 00000000..ea040adb --- /dev/null +++ b/project/EnvConfig.scala @@ -0,0 +1,75 @@ +import sbt._ +import com.typesafe.config._ + +import scala.annotation.tailrec +import scala.jdk.CollectionConverters._ +import java.util.{Map => JMap} + +object EnvConfig { + def serializeTo(cfg: Config, out: File): Unit = + IO.write(out, serialize(cfg)) + + def serialize(cfg: Config): String = { + val buffer = new StringBuilder + buffer.append("#### Server Configuration ####\n") + for ( + entry <- cfg.entrySet().asScala.toList.sortBy(_.getKey) + if isValidKey("docspell.server", entry) + ) append(buffer, entry.getKey, entry.getValue) + + buffer.append("\n#### JOEX Configuration ####\n") + for ( + entry <- cfg.entrySet().asScala.toList.sortBy(_.getKey) + if isValidKey("docspell.joex", entry) + ) append(buffer, entry.getKey, entry.getValue) + + buffer.toString().trim + } + + private def append(buffer: StringBuilder, key: String, value: ConfigValue): Unit = { + if (value.origin().comments().asScala.nonEmpty) { + buffer.append("\n") + } + value + .origin() + .comments() + .forEach(c => buffer.append("# ").append(c).append("\n")) + buffer.append(keyToEnv(key)).append("=").append(value.render()).append("\n") + } + + def isValidKey(prefix: String, entry: JMap.Entry[String, ConfigValue]): Boolean = + entry.getKey + .startsWith(prefix) && entry.getValue.valueType() != ConfigValueType.LIST + + def makeConfig(files: List[File]): Config = + files + .foldLeft(ConfigFactory.empty()) { (cfg, file) => + val cf = ConfigFactory.parseFile(file) + cfg.withFallback(cf) + } + .withFallback(ConfigFactory.defaultOverrides(getClass.getClassLoader)) + .resolve() + + def makeConfig(file: File, files: File*): Config = + makeConfig(file :: files.toList) + + def keyToEnv(k: String): String = { + val buffer = new StringBuilder() + val len = k.length + + @tailrec + def go(current: Int): String = + if (current >= len) buffer.toString() + else { + k.charAt(current) match { + case '.' => buffer.append("_") + case '-' => buffer.append("__") + case '_' => buffer.append("___") + case c => buffer.append(c.toUpper) + } + go(current + 1) + } + + go(0) + } +} diff --git a/project/build.sbt b/project/build.sbt new file mode 100644 index 00000000..18e1242b --- /dev/null +++ b/project/build.sbt @@ -0,0 +1,2 @@ +libraryDependencies ++= + Seq("com.typesafe" % "config" % "1.4.1") diff --git a/website/site/content/docs/configure/_index.md b/website/site/content/docs/configure/_index.md index 7ebb0950..5eef1bb5 100644 --- a/website/site/content/docs/configure/_index.md +++ b/website/site/content/docs/configure/_index.md @@ -8,10 +8,11 @@ mktoc = true +++ Docspell's executables (restserver and joex) can take one argument – a -configuration file. If that is not given, the defaults are used. The -config file overrides default values, so only values that differ from -the defaults are necessary. The complete default options and their -documentation is at the end of this page. +configuration file. If that is not given, the defaults are used, +overriden by environment variables. A config file overrides default +values, so only values that differ from the defaults are necessary. +The complete default options and their documentation is at the end of +this page. Besides the config file, another way is to provide individual settings via key-value pairs to the executable by the `-D` option. For example @@ -22,6 +23,21 @@ the recommended way is to maintain a config file. If these options *and* a file is provded, then any setting given via the `-D…` option overrides the same setting from the config file. +At last, it is possible to configure docspell via environment +variables if there is no config file supplied (if a config file *is* +supplied, it is always preferred). Note that this approach is limited, +as arrays are not supported. A list of environment variables can be +found at the [end of this page](#environment-variables). The +environment variable name follows the corresponding config key - where +dots are replaced by underscores and dashes are replaced by two +underscores. For example, the config key `docspell.server.app-name` +can be defined as env variable `DOCSPELL_SERVER_APP__NAME`. + +It is also possible to specify environment variables inside a config +file (to get a mix of both) - please see the [documentation of the +config library](https://github.com/lightbend/config#standard-behavior) +for more on this. + # File Format The format of the configuration files can be @@ -31,9 +47,9 @@ library](https://github.com/lightbend/config) understands. The default values below are in HOCON format, which is recommended, since it allows comments and has some [advanced features](https://github.com/lightbend/config#features-of-hocon). -Please refer to their documentation for more on this. +Please also see their documentation for more details. -A short description (please see the links for better understanding): +A short description (please check the links for better understanding): The config consists of key-value pairs and can be written in a JSON-like format (called HOCON). Keys are organized in trees, and a key defines a full path into the tree. There are two ways: @@ -633,3 +649,11 @@ statements with level "DEBUG" will be printed, too. {{ incl_conf(path="templates/shortcodes/joex.conf") }} + +## Environment Variables + +Environment variables can be used when there is no config file +supplied. The listing below shows all possible variables and their +default values. + +{{ incl_conf(path="templates/shortcodes/config.env.txt") }}