From 0b950b3253b5ccef6f324aede8e9e1f2e6723822 Mon Sep 17 00:00:00 2001 From: Nick Sweeting Date: Tue, 28 Mar 2023 02:58:49 -0600 Subject: [PATCH 01/31] make get_commit_hash more precisce by using exact ref --- archivebox/config.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/archivebox/config.py b/archivebox/config.py index 775be8e4..4e434c12 100644 --- a/archivebox/config.py +++ b/archivebox/config.py @@ -393,7 +393,10 @@ def get_version(config): def get_commit_hash(config): try: - return list((config['PACKAGE_DIR'] / '../.git/refs/heads/').glob('*'))[0].read_text().strip() + git_dir = config['PACKAGE_DIR'] / '../') + ref = (git_dir / 'HEAD').read_text().strip().split(' ')[-1] + commit_hash = git_dir.joinpath(ref).read_text().strip() + return commit_hash except Exception: return None From f0033f75d07d856d9b3c60ea679f3b6241806ba5 Mon Sep 17 00:00:00 2001 From: Nick Sweeting Date: Thu, 4 May 2023 01:43:34 -0700 Subject: [PATCH 02/31] config.py lint fixes --- archivebox/config.py | 6 +++--- archivebox/extractors/__init__.py | 2 +- bin/build_docker.sh | 1 + 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/archivebox/config.py b/archivebox/config.py index 4e434c12..a047ff20 100644 --- a/archivebox/config.py +++ b/archivebox/config.py @@ -53,6 +53,7 @@ from .config_stubs import ( ### Pre-Fetch Minimal System Config +TIMEZONE = 'UTC' SYSTEM_USER = getpass.getuser() or os.getlogin() try: @@ -81,7 +82,6 @@ CONFIG_SCHEMA: Dict[str, ConfigDefaultDict] = { 'IN_QEMU': {'type': bool, 'default': False}, 'PUID': {'type': int, 'default': os.getuid()}, 'PGID': {'type': int, 'default': os.getgid()}, - # TODO: 'SHOW_HINTS': {'type: bool, 'default': True}, }, 'GENERAL_CONFIG': { @@ -393,7 +393,7 @@ def get_version(config): def get_commit_hash(config): try: - git_dir = config['PACKAGE_DIR'] / '../') + git_dir = config['PACKAGE_DIR'] / '../' ref = (git_dir / 'HEAD').read_text().strip().split(' ')[-1] commit_hash = git_dir.joinpath(ref).read_text().strip() return commit_hash @@ -1195,7 +1195,7 @@ def check_dependencies(config: ConfigDict=CONFIG, show_help: bool=True) -> None: if config['USE_YOUTUBEDL'] and config['MEDIA_TIMEOUT'] < 20: stderr(f'[!] Warning: MEDIA_TIMEOUT is set too low! (currently set to MEDIA_TIMEOUT={config["MEDIA_TIMEOUT"]} seconds)', color='red') - stderr(' Youtube-dl will fail to archive all media if set to less than ~20 seconds.') + stderr(' youtube-dl/yt-dlp will fail to archive any media if set to less than ~20 seconds.') stderr(' (Setting it somewhere over 60 seconds is recommended)') stderr() stderr(' If you want to disable media archiving entirely, set SAVE_MEDIA=False instead:') diff --git a/archivebox/extractors/__init__.py b/archivebox/extractors/__init__.py index edcf218b..2515b8fd 100644 --- a/archivebox/extractors/__init__.py +++ b/archivebox/extractors/__init__.py @@ -184,7 +184,7 @@ def archive_link(link: Link, overwrite: bool=False, methods: Optional[Iterable[s link.url, command, ts - ) + "\n")) + ) + "\n" + str(e) + "\n")) #f.write(f"\n> {command}; ts={ts} version={config['VERSION']} docker={config['IN_DOCKER']} is_tty={config['IS_TTY']}\n") # print(' ', stats) diff --git a/bin/build_docker.sh b/bin/build_docker.sh index c88ed54c..e427c0a6 100755 --- a/bin/build_docker.sh +++ b/bin/build_docker.sh @@ -74,6 +74,7 @@ echo "[+] Generating requirements.txt and pdm.lock from pyproject.toml..." pdm lock --group=':all' --strategy="cross_platform" --production pdm export --group=':all' --production --without-hashes -o requirements.txt + echo "[+] Building archivebox:$VERSION docker image..." # docker builder prune # docker build . --no-cache -t archivebox-dev \ From 2b421c56bba9bebb85364578537fcd40d7ddf8b9 Mon Sep 17 00:00:00 2001 From: Nick Sweeting Date: Thu, 4 May 2023 01:43:47 -0700 Subject: [PATCH 03/31] require builx for for docker builds --- bin/build_docker.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/bin/build_docker.sh b/bin/build_docker.sh index e427c0a6..2de9f676 100755 --- a/bin/build_docker.sh +++ b/bin/build_docker.sh @@ -50,6 +50,7 @@ function create_builder() { docker buildx use xbuilder && return 0 echo "[+] Creating new xbuilder for: $SELECTED_PLATFORMS" echo + docker pull 'moby/buildkit:buildx-stable-1' # Switch to buildx builder if already present / previously created docker buildx create --name xbuilder --driver docker-container --bootstrap --use --platform "$SELECTED_PLATFORMS" || true From 6761ed368c75337d21f89c282bcbf982b081ad41 Mon Sep 17 00:00:00 2001 From: Nick Sweeting Date: Tue, 14 Nov 2023 02:04:49 -0800 Subject: [PATCH 04/31] wip pre-0.7.1 side fixes --- .vscode/settings.json | 3 + archivebox/config.py | 1 + archivebox/core/admin.py | 19 +- archivebox/core/apps.py | 2 +- archivebox/core/settings.py | 1 + archivebox/logging_util.py | 6 +- archivebox/static | 1 + archivebox/templates/admin/private_index.html | 1 + docker-compose.yml | 3 +- etc/crontabs/archivebox | 8 + package-lock.json | 1740 +++++++++++++++++ screenshot.png | Bin 0 -> 42845 bytes 12 files changed, 1772 insertions(+), 13 deletions(-) create mode 100644 .vscode/settings.json create mode 120000 archivebox/static create mode 100644 etc/crontabs/archivebox create mode 100644 screenshot.png diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..163c9840 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "python.formatting.provider": "black" +} diff --git a/archivebox/config.py b/archivebox/config.py index a047ff20..2895f207 100644 --- a/archivebox/config.py +++ b/archivebox/config.py @@ -786,6 +786,7 @@ def find_chrome_binary() -> Optional[str]: # Precedence: Chromium, Chrome, Beta, Canary, Unstable, Dev # make sure data dir finding precedence order always matches binary finding order default_executable_paths = ( + # '~/Library/Caches/ms-playwright/chromium-*/chrome-mac/Chromium.app/Contents/MacOS/Chromium', 'chromium-browser', 'chromium', '/Applications/Chromium.app/Contents/MacOS/Chromium', diff --git a/archivebox/core/admin.py b/archivebox/core/admin.py index 0329d9b0..ce4612a7 100644 --- a/archivebox/core/admin.py +++ b/archivebox/core/admin.py @@ -48,22 +48,23 @@ class TagInline(admin.TabularInline): from django.contrib.admin.helpers import ActionForm from django.contrib.admin.widgets import AutocompleteSelectMultiple -class AutocompleteTags: - model = Tag - search_fields = ['name'] +# class AutocompleteTags: +# model = Tag +# search_fields = ['name'] +# name = 'tags' -class AutocompleteTagsAdminStub: - name = 'admin' +# class AutocompleteTagsAdminStub: +# name = 'admin' class SnapshotActionForm(ActionForm): tags = forms.ModelMultipleChoiceField( queryset=Tag.objects.all(), required=False, - widget=AutocompleteSelectMultiple( - AutocompleteTags(), - AutocompleteTagsAdminStub(), - ), + # widget=AutocompleteSelectMultiple( + # # AutocompleteTags(), + # # AutocompleteTagsAdminStub(), + # ), ) # TODO: allow selecting actions for specific extractors? is this useful? diff --git a/archivebox/core/apps.py b/archivebox/core/apps.py index 5182da05..21b95877 100644 --- a/archivebox/core/apps.py +++ b/archivebox/core/apps.py @@ -3,4 +3,4 @@ from django.apps import AppConfig class CoreConfig(AppConfig): name = 'core' - default_auto_field = 'django.db.models.UUIDField' + # default_auto_field = 'django.db.models.UUIDField' diff --git a/archivebox/core/settings.py b/archivebox/core/settings.py index 11fd649d..8334c39b 100644 --- a/archivebox/core/settings.py +++ b/archivebox/core/settings.py @@ -268,6 +268,7 @@ AUTH_PASSWORD_VALIDATORS = [ {'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator'}, ] +# DEFAULT_AUTO_FIELD = 'django.db.models.UUIDField' ################################################################################ ### Shell Settings diff --git a/archivebox/logging_util.py b/archivebox/logging_util.py index d43bb086..af98c3fb 100644 --- a/archivebox/logging_util.py +++ b/archivebox/logging_util.py @@ -393,7 +393,11 @@ def log_link_archiving_finished(link: "Link", link_dir: str, is_new: bool, stats else: _LAST_RUN_STATS.succeeded += 1 - size = get_dir_size(link_dir) + try: + size = get_dir_size(link_dir) + except FileNotFoundError: + size = (0, None, '0') + end_ts = datetime.now(timezone.utc) duration = str(end_ts - start_ts).split('.')[0] print(' {black}{} files ({}) in {}s {reset}'.format(size[2], printable_filesize(size[0]), duration, **ANSI)) diff --git a/archivebox/static b/archivebox/static new file mode 120000 index 00000000..5d01044d --- /dev/null +++ b/archivebox/static @@ -0,0 +1 @@ +templates/static \ No newline at end of file diff --git a/archivebox/templates/admin/private_index.html b/archivebox/templates/admin/private_index.html index b60f3a3e..a95a7716 100644 --- a/archivebox/templates/admin/private_index.html +++ b/archivebox/templates/admin/private_index.html @@ -88,4 +88,5 @@ {% endblock %} + {% endblock %} diff --git a/docker-compose.yml b/docker-compose.yml index e4ea2b5d..6eff7736 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -21,7 +21,6 @@ services: # - ./etc/crontabs:/var/spool/cron/crontabs # uncomment this and archivebox_scheduler below to set up automatic recurring archive jobs # - ./archivebox:/app/archivebox # uncomment this to mount the ArchiveBox source code at runtime (for developers working on archivebox) # build: . # uncomment this to build the image from source code at buildtime (for developers working on archivebox) - environment: - ALLOWED_HOSTS=* # restrict this to only accept incoming traffic via specific domain name # - PUBLIC_INDEX=True # set to False to prevent anonymous users from viewing snapshot list @@ -161,4 +160,4 @@ networks: ipam: driver: default config: - - subnet: 172.20.0.0/24 \ No newline at end of file + - subnet: 172.20.0.0/24 diff --git a/etc/crontabs/archivebox b/etc/crontabs/archivebox new file mode 100644 index 00000000..fbb0acd3 --- /dev/null +++ b/etc/crontabs/archivebox @@ -0,0 +1,8 @@ +# DO NOT EDIT THIS FILE - edit the master and reinstall. +# (/tmp/tmpe3dawo9u installed on Tue Jun 13 23:21:48 2023) +# (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $) + +@daily cd /data && /usr/local/bin/archivebox add --depth=0 "https://example.com/3" >> /data/logs/schedule.log 2>&1 # archivebox_schedule +@daily cd /data && /usr/local/bin/archivebox add --depth=0 "https://example.com/2" >> /data/logs/schedule.log 2>&1 # archivebox_schedule +@daily cd /data && /usr/local/bin/archivebox add --depth=0 "https://example.com" >> /data/logs/schedule.log 2>&1 # archivebox_schedule +@daily cd /data && /usr/local/bin/archivebox add --depth=0 "update" >> /data/logs/schedule.log 2>&1 # archivebox_schedule diff --git a/package-lock.json b/package-lock.json index 158d57dd..bf024723 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11 +1,16 @@ { "name": "archivebox", +<<<<<<< HEAD "version": "0.7.1", +======= + "version": "0.7.0", +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "archivebox", +<<<<<<< HEAD "version": "0.7.1", "license": "MIT", "dependencies": { @@ -34,6 +39,36 @@ "node": ">=14.0.0" } }, +======= + "version": "0.7.0", + "license": "MIT", + "dependencies": { + "@postlight/mercury-parser": "git+https://github.com/postlight/mercury-parser.git", + "readability-extractor": "git+https://github.com/ArchiveBox/readability-extractor.git", + "single-file": "git+https://github.com/gildas-lormeau/SingleFile.git" + } + }, + "node_modules/@babel/runtime-corejs2": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.20.7.tgz", + "integrity": "sha512-SrtIxfjwLkUFljufH1GeqYlIYzdyxP2IoCb3tVjcrTdMyB7RQyRCdkyMzvw3k/h+CStnSf2SvvQicS1Rf/fuGQ==", + "dependencies": { + "core-js": "^2.6.12", + "regenerator-runtime": "^0.13.11" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@mozilla/readability": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@mozilla/readability/-/readability-0.4.2.tgz", + "integrity": "sha512-48MJXzi4Dhy2fJ3lGjmwdEJKoMmn3oiYew9n/1OW6cZy78hAzRIyDJDBCGrg4PBFDyY4xos+H4LCFn5QVRDcfw==", + "engines": { + "node": ">=10.0.0" + } + }, +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "node_modules/@postlight/ci-failed-test-reporter": { "version": "1.0.26", "resolved": "https://registry.npmjs.org/@postlight/ci-failed-test-reporter/-/ci-failed-test-reporter-1.0.26.tgz", @@ -46,15 +81,26 @@ "ciftr": "cli.js" } }, +<<<<<<< HEAD "node_modules/@postlight/parser": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/@postlight/parser/-/parser-2.2.3.tgz", "integrity": "sha512-4/syRvqJARgLN4yH8qtl634WO0+KINjkijU/SmhCJqqh8/aOfv5uQf+SquFpA+JwsAsbGzYQkIxSum29riOreg==", +======= + "node_modules/@postlight/mercury-parser": { + "version": "2.2.1", + "resolved": "git+ssh://git@github.com/postlight/mercury-parser.git#9cd9662bcbfea00b773fad691a4f6e53394ff543", + "integrity": "sha512-nTyjg98Zpe2anZVjl16QzC3b9nThISzhzw59aoRMCW7gqjDb8VFU1bXrFlt9dEkxxey1ysuJ109hdCJI17TVVg==", +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "bundleDependencies": [ "jquery", "moment-timezone", "browser-request" ], +<<<<<<< HEAD +======= + "license": "MIT", +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "dependencies": { "@babel/runtime-corejs2": "^7.2.0", "@postlight/ci-failed-test-reporter": "^1.0", @@ -75,13 +121,18 @@ "yargs-parser": "^15.0.1" }, "bin": { +<<<<<<< HEAD "mercury-parser": "cli.js", "postlight-parser": "cli.js" +======= + "mercury-parser": "cli.js" +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) }, "engines": { "node": ">=10" } }, +<<<<<<< HEAD "node_modules/@postlight/parser/node_modules/browser-request": { "version": "0.3.2", "engines": [ @@ -107,14 +158,28 @@ }, "node_modules/@postlight/parser/node_modules/moment": { "version": "2.29.4", +======= + "node_modules/@postlight/mercury-parser/node_modules/jquery": { + "version": "3.4.1", + "inBundle": true, + "license": "MIT" + }, + "node_modules/@postlight/mercury-parser/node_modules/moment": { + "version": "2.23.0", +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "inBundle": true, "license": "MIT", "engines": { "node": "*" } }, +<<<<<<< HEAD "node_modules/@postlight/parser/node_modules/moment-timezone": { "version": "0.5.37", +======= + "node_modules/@postlight/mercury-parser/node_modules/moment-timezone": { + "version": "0.5.26", +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "inBundle": true, "license": "MIT", "dependencies": { @@ -124,11 +189,14 @@ "node": "*" } }, +<<<<<<< HEAD "node_modules/@postlight/parser/node_modules/next-line": { "version": "1.1.0", "inBundle": true, "license": "MIT" }, +======= +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "node_modules/@postman/form-data": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/@postman/form-data/-/form-data-3.1.1.tgz", @@ -142,6 +210,7 @@ "node": ">= 6" } }, +<<<<<<< HEAD "node_modules/@postman/tough-cookie": { "version": "4.1.3-postman.1", "resolved": "https://registry.npmjs.org/@postman/tough-cookie/-/tough-cookie-4.1.3-postman.1.tgz", @@ -156,6 +225,8 @@ "node": ">=6" } }, +======= +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "node_modules/@postman/tunnel-agent": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/@postman/tunnel-agent/-/tunnel-agent-0.6.3.tgz", @@ -167,6 +238,7 @@ "node": "*" } }, +<<<<<<< HEAD "node_modules/@puppeteer/browsers": { "version": "1.7.1", "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-1.7.1.tgz", @@ -240,6 +312,28 @@ "integrity": "sha512-Km7XAtUIduROw7QPgvcft0lIupeG8a8rdKL8RiSyKvlE7dYY31fEn41HVuQsRFDuROA8tA4K2UVL+WdfFmErBA==", "optional": true, "dependencies": { +======= + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/@types/node": { + "version": "18.11.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", + "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==", + "optional": true + }, + "node_modules/@types/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==", + "optional": true, + "dependencies": { +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "@types/node": "*" } }, @@ -249,14 +343,21 @@ "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==" }, "node_modules/acorn": { +<<<<<<< HEAD "version": "8.11.2", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", +======= + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "bin": { "acorn": "bin/acorn" }, "engines": { "node": ">=0.4.0" +<<<<<<< HEAD } }, "node_modules/acorn-globals": { @@ -276,6 +377,38 @@ "node": ">=0.4.0" } }, +======= + } + }, + "node_modules/acorn-globals": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", + "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", + "dependencies": { + "acorn": "^6.0.1", + "acorn-walk": "^6.0.1" + } + }, + "node_modules/acorn-globals/node_modules/acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", + "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", + "engines": { + "node": ">=0.4.0" + } + }, +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "node_modules/agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -324,6 +457,14 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, +<<<<<<< HEAD +======= + "node_modules/array-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", + "integrity": "sha512-H3LU5RLiSsGXPhN+Nipar0iR0IofH+8r89G2y1tBKxQ/agagKyAjhkAFDRBfodP2caPrNKHpAWNIM/c9yeL7uA==" + }, +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "node_modules/asn1": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", @@ -340,6 +481,7 @@ "node": ">=0.8" } }, +<<<<<<< HEAD "node_modules/ast-types": { "version": "0.13.4", "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", @@ -350,6 +492,12 @@ "engines": { "node": ">=4" } +======= + "node_modules/async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) }, "node_modules/asynckit": { "version": "0.4.0", @@ -369,11 +517,14 @@ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==" }, +<<<<<<< HEAD "node_modules/b4a": { "version": "1.6.4", "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz", "integrity": "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==" }, +======= +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -398,6 +549,7 @@ } ] }, +<<<<<<< HEAD "node_modules/basic-ftp": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.3.tgz", @@ -406,6 +558,8 @@ "node": ">=10.0.0" } }, +======= +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "node_modules/bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", @@ -414,6 +568,19 @@ "tweetnacl": "^0.14.3" } }, +<<<<<<< HEAD +======= + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "node_modules/bluebird": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", @@ -441,6 +608,25 @@ "base64-js": "^1.1.2" } }, +<<<<<<< HEAD +======= + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" + }, + "node_modules/browser-request": { + "version": "0.3.2", + "resolved": "git+ssh://git@github.com/postlight/browser-request.git#38faa5b85741aabfca61aa37d1ef044d68969ddf", + "integrity": "sha512-TOvTWJ0BrWcB8Ach1AvdSBuczm2fsJdBlmo8D4N8fei7xfboW9VEk67zfriCiBo3/19Xe1waSstCEcLFUeBCjA==", + "engines": [ + "node" + ], + "dependencies": { + "http-headers": "^3.0.1" + } + }, +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "node_modules/buffer": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", @@ -511,6 +697,7 @@ "node": ">= 0.6" } }, +<<<<<<< HEAD "node_modules/chromium-bidi": { "version": "0.4.26", "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.26.tgz", @@ -526,6 +713,17 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", +======= + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -579,6 +777,7 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==" }, +<<<<<<< HEAD "node_modules/cross-fetch": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", @@ -587,6 +786,8 @@ "node-fetch": "^2.6.12" } }, +======= +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "node_modules/css-select": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", @@ -604,6 +805,7 @@ "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", "engines": { "node": "*" +<<<<<<< HEAD } }, "node_modules/cssstyle": { @@ -617,6 +819,23 @@ "node": ">=14" } }, +======= + } + }, + "node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" + }, + "node_modules/cssstyle": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz", + "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==", + "dependencies": { + "cssom": "0.3.x" + } + }, +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "node_modules/dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -626,6 +845,7 @@ }, "engines": { "node": ">=0.10" +<<<<<<< HEAD } }, "node_modules/data-uri-to-buffer": { @@ -670,6 +890,41 @@ }, "engines": { "node": ">=14" +======= + } + }, + "node_modules/data-urls": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", + "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", + "dependencies": { + "abab": "^2.0.0", + "whatwg-mimetype": "^2.2.0", + "whatwg-url": "^7.0.0" + } + }, + "node_modules/data-urls/node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/data-urls/node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" + }, + "node_modules/data-urls/node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) } }, "node_modules/debug": { @@ -701,6 +956,7 @@ "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" }, +<<<<<<< HEAD "node_modules/degenerator": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", @@ -713,6 +969,12 @@ "engines": { "node": ">= 14" } +======= + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) }, "node_modules/delayed-stream": { "version": "1.0.0", @@ -723,13 +985,23 @@ } }, "node_modules/devtools-protocol": { +<<<<<<< HEAD "version": "0.0.1159816", "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1159816.tgz", "integrity": "sha512-2cZlHxC5IlgkIWe2pSDmCrDiTzbSJWywjbDDnupOImEBcG31CQgBLV8wWE+5t+C4rimcjHsbzy7CBzf9oFjboA==" +======= + "version": "0.0.818844", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.818844.tgz", + "integrity": "sha512-AD1hi7iVJ8OD0aMLQU5VK0XH9LDlA1+BcPIgrAxPfaibx2DbWucuyOhc4oyQCbnvDDO68nN6/LcKfqTP343Jjg==" +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) }, "node_modules/difflib": { "version": "0.2.6", "resolved": "git+ssh://git@github.com/postlight/difflib.js.git#32e8e38c7fcd935241b9baab71bb432fd9b166ed", +<<<<<<< HEAD +======= + "integrity": "sha512-uFNs7czGYLWdMP22WQhD/vlFen/CuKzC+KiajNCj+ik2Ah/I9i2AFyMWkBjFgbVFGhv95kBHOtx7tgF6IVngqA==", +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "dependencies": { "heap": ">= 0.2.0" } @@ -749,6 +1021,7 @@ "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" }, "node_modules/domexception": { +<<<<<<< HEAD "version": "4.0.0", "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", @@ -759,6 +1032,20 @@ "node": ">=12" } }, +======= + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", + "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", + "dependencies": { + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" + }, +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "node_modules/domhandler": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", @@ -767,6 +1054,7 @@ "domelementtype": "1" } }, +<<<<<<< HEAD "node_modules/domino": { "version": "2.1.6", "resolved": "https://registry.npmjs.org/domino/-/domino-2.1.6.tgz", @@ -777,6 +1065,13 @@ "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.7.tgz", "integrity": "sha512-kxxKlPEDa6Nc5WJi+qRgPbOAbgTpSULL+vI3NUXsZMlkJxTqYI9wg5ZTay2sFrdZRWHPWNi+EdAhcJf81WtoMQ==" }, +======= + "node_modules/dompurify": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.3.tgz", + "integrity": "sha512-q6QaLcakcRjebxjg8/+NP+h0rPfatOgOzc46Fst9VAA3jF2ApfKBNKMzdP4DYTqtUMXSCd5pRS/8Po/OmoCHZQ==" + }, +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "node_modules/domutils": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", @@ -835,6 +1130,7 @@ } }, "node_modules/escodegen": { +<<<<<<< HEAD "version": "2.1.0", "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", @@ -842,13 +1138,27 @@ "esprima": "^4.0.1", "estraverse": "^5.2.0", "esutils": "^2.0.2" +======= + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) }, "bin": { "escodegen": "bin/escodegen.js", "esgenerate": "bin/esgenerate.js" }, "engines": { +<<<<<<< HEAD "node": ">=6.0" +======= + "node": ">=4.0" +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) }, "optionalDependencies": { "source-map": "~0.6.1" @@ -867,9 +1177,15 @@ } }, "node_modules/estraverse": { +<<<<<<< HEAD "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", +======= + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "engines": { "node": ">=4.0" } @@ -919,16 +1235,27 @@ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, +<<<<<<< HEAD "node_modules/fast-fifo": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==" }, +======= +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, +<<<<<<< HEAD +======= + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + }, +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "node_modules/fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", @@ -943,6 +1270,21 @@ "integrity": "sha512-g872QGsHexznxkIAdK8UiZRe7SkE6kvylShU4Nsj8NvfvZag7S0QuQ4IgvPDkk75HxgjIVDwycFTDAgIiO4nDA==", "engines": { "node": ">=8" +<<<<<<< HEAD +======= + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) } }, "node_modules/forever-agent": { @@ -951,6 +1293,7 @@ "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", "engines": { "node": "*" +<<<<<<< HEAD } }, "node_modules/form-data": { @@ -987,6 +1330,28 @@ "node": ">= 4.0.0" } }, +======= + } + }, + "node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -1014,6 +1379,7 @@ "url": "https://github.com/sponsors/sindresorhus" } }, +<<<<<<< HEAD "node_modules/get-uri": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.2.tgz", @@ -1028,6 +1394,8 @@ "node": ">= 14" } }, +======= +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "node_modules/getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", @@ -1055,11 +1423,14 @@ "url": "https://github.com/sponsors/isaacs" } }, +<<<<<<< HEAD "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, +======= +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "node_modules/har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", @@ -1087,6 +1458,7 @@ "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==" }, "node_modules/html-encoding-sniffer": { +<<<<<<< HEAD "version": "3.0.0", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", @@ -1095,6 +1467,13 @@ }, "engines": { "node": ">=12" +======= + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", + "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", + "dependencies": { + "whatwg-encoding": "^1.0.1" +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) } }, "node_modules/htmlparser2": { @@ -1110,12 +1489,29 @@ "readable-stream": "^3.1.1" } }, +<<<<<<< HEAD "node_modules/http-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", "dependencies": { "@tootallnate/once": "2", +======= + "node_modules/http-headers": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/http-headers/-/http-headers-3.0.2.tgz", + "integrity": "sha512-87E1I+2Wg4dxxz4rcxElo3dxO/w1ZtgL1yA0Sb6vH3qU16vRKq1NjWQv9SCY3ly2OQROcoxHZOUpmelS+k6wOw==", + "dependencies": { + "next-line": "^1.1.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dependencies": { + "@tootallnate/once": "1", +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "agent-base": "6", "debug": "4" }, @@ -1197,11 +1593,14 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, +<<<<<<< HEAD "node_modules/ip": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==" }, +======= +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "node_modules/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", @@ -1230,12 +1629,21 @@ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" }, +<<<<<<< HEAD +======= + "node_modules/jquery": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.3.tgz", + "integrity": "sha512-bZ5Sy3YzKo9Fyc8wH2iIQK4JImJ6R0GWI9kL1/k7Z91ZBNgkRXE6U0JfHIizZbort8ZunhSI3jw9I6253ahKfg==" + }, +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "node_modules/jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==" }, "node_modules/jsdom": { +<<<<<<< HEAD "version": "21.1.2", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-21.1.2.tgz", "integrity": "sha512-sCpFmK2jv+1sjff4u7fzft+pUh2KSUbUrEHYHyfSIbGTIcmnjyp83qg6qLwdJ/I3LpTXx33ACxeRL7Lsyc6lGQ==", @@ -1300,6 +1708,61 @@ }, "engines": { "node": ">=14" +======= + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-11.12.0.tgz", + "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", + "dependencies": { + "abab": "^2.0.0", + "acorn": "^5.5.3", + "acorn-globals": "^4.1.0", + "array-equal": "^1.0.0", + "cssom": ">= 0.3.2 < 0.4.0", + "cssstyle": "^1.0.0", + "data-urls": "^1.0.0", + "domexception": "^1.0.1", + "escodegen": "^1.9.1", + "html-encoding-sniffer": "^1.0.2", + "left-pad": "^1.3.0", + "nwsapi": "^2.0.7", + "parse5": "4.0.0", + "pn": "^1.1.0", + "request": "^2.87.0", + "request-promise-native": "^1.0.5", + "sax": "^1.2.4", + "symbol-tree": "^3.2.2", + "tough-cookie": "^2.3.4", + "w3c-hr-time": "^1.0.1", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.3", + "whatwg-mimetype": "^2.1.0", + "whatwg-url": "^6.4.1", + "ws": "^5.2.0", + "xml-name-validator": "^3.0.0" + } + }, + "node_modules/jsdom/node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/jsdom/node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" + }, + "node_modules/jsdom/node_modules/whatwg-url": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-6.5.0.tgz", + "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) } }, "node_modules/json-schema": { @@ -1317,6 +1780,7 @@ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==" }, +<<<<<<< HEAD "node_modules/jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", @@ -1325,6 +1789,8 @@ "graceful-fs": "^4.1.6" } }, +======= +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "node_modules/jsprim": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-2.0.2.tgz", @@ -1348,6 +1814,7 @@ "pako": "~1.0.2", "readable-stream": "~2.3.6", "setimmediate": "^1.0.5" +<<<<<<< HEAD } }, "node_modules/jszip/node_modules/readable-stream": { @@ -1364,10 +1831,29 @@ "util-deprecate": "~1.0.1" } }, +======= + } + }, + "node_modules/jszip/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "node_modules/jszip/node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" +<<<<<<< HEAD }, "node_modules/jszip/node_modules/string_decoder": { "version": "1.1.1", @@ -1375,6 +1861,33 @@ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dependencies": { "safe-buffer": "~5.1.0" +======= + }, + "node_modules/jszip/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/left-pad": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", + "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", + "deprecated": "use String.prototype.padStart()" + }, + "node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) } }, "node_modules/lie": { @@ -1385,6 +1898,20 @@ "immediate": "~3.0.5" } }, +<<<<<<< HEAD +======= + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -1450,6 +1977,7 @@ "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", "integrity": "sha512-j7MJE+TuT51q9ggt4fSgVqro163BEFjAt3u97IqU+JA2DkWl80nFTrowzLpZ/BnpN7rrl0JA/593NAdd8p/scQ==" }, +<<<<<<< HEAD "node_modules/lru-cache": { "version": "7.18.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", @@ -1457,6 +1985,12 @@ "engines": { "node": ">=12" } +======= + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==" +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) }, "node_modules/mime-db": { "version": "1.52.0", @@ -1488,26 +2022,55 @@ "node": "*" } }, +<<<<<<< HEAD "node_modules/mitt": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==" }, +======= +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "node_modules/mkdirp-classic": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" }, +<<<<<<< HEAD +======= + "node_modules/moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", + "engines": { + "node": "*" + } + }, +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "node_modules/moment-parseformat": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/moment-parseformat/-/moment-parseformat-3.0.0.tgz", "integrity": "sha512-dVgXe6b6DLnv4CHG7a1zUe5mSXaIZ3c6lSHm/EKeVeQI2/4pwe0VRde8OyoCE1Ro2lKT5P6uT9JElF7KDLV+jw==" }, +<<<<<<< HEAD +======= + "node_modules/moment-timezone": { + "version": "0.5.26", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.26.tgz", + "integrity": "sha512-sFP4cgEKTCymBBKgoxZjYzlSovC20Y6J7y3nanDc5RoBIXKlZhoYwBoZGe3flwU6A372AcRwScH8KiwV6zjy1g==", + "dependencies": { + "moment": ">= 2.9.0" + }, + "engines": { + "node": "*" + } + }, +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, +<<<<<<< HEAD "node_modules/netmask": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", @@ -1535,6 +2098,32 @@ } } }, +======= + "node_modules/next-line": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-line/-/next-line-1.1.0.tgz", + "integrity": "sha512-+I10J3wKNoKddNxn0CNpoZ3eTZuqxjNM3b1GImVx22+ePI+Y15P8g/j3WsbP0fhzzrFzrtjOAoq5NCCucswXOQ==" + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "node_modules/nth-check": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", @@ -1544,9 +2133,15 @@ } }, "node_modules/nwsapi": { +<<<<<<< HEAD "version": "2.2.7", "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==" +======= + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.2.tgz", + "integrity": "sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==" +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) }, "node_modules/oauth-sign": { "version": "0.9.0", @@ -1564,6 +2159,7 @@ "wrappy": "1" } }, +<<<<<<< HEAD "node_modules/pac-proxy-agent": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.1.tgz", @@ -1630,12 +2226,72 @@ "node": ">= 14" } }, +======= + "node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "node_modules/pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" }, "node_modules/parse5": { +<<<<<<< HEAD "version": "7.1.2", "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", @@ -1655,6 +2311,18 @@ }, "funding": { "url": "https://github.com/fb55/entities?sponsor=1" +======= + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-4.0.0.tgz", + "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==" + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) } }, "node_modules/path-is-absolute": { @@ -1675,10 +2343,33 @@ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" }, +<<<<<<< HEAD "node_modules/postman-request": { "version": "2.88.1-postman.33", "resolved": "https://registry.npmjs.org/postman-request/-/postman-request-2.88.1-postman.33.tgz", "integrity": "sha512-uL9sCML4gPH6Z4hreDWbeinKU0p0Ke261nU7OvII95NU22HN6Dk7T/SaVPaj6T4TsQqGKIFw6/woLZnH7ugFNA==", +======= + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", + "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==" + }, + "node_modules/postman-request": { + "version": "2.88.1-postman.31", + "resolved": "https://registry.npmjs.org/postman-request/-/postman-request-2.88.1-postman.31.tgz", + "integrity": "sha512-OJbYqP7ItxQ84yHyuNpDywCZB0HYbpHJisMQ9lb1cSL3N5H3Td6a2+3l/a74UMd3u82BiGC5yQyYmdOIETP/nQ==", +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "dependencies": { "@postman/form-data": "~3.1.1", "@postman/tough-cookie": "~4.1.3-postman.1", @@ -1701,12 +2392,28 @@ "qs": "~6.5.3", "safe-buffer": "^5.1.2", "stream-length": "^1.0.2", +<<<<<<< HEAD "uuid": "^8.3.2" +======= + "tough-cookie": "~2.5.0", + "uuid": "^3.3.2" +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) }, "engines": { "node": ">= 6" } }, +<<<<<<< HEAD +======= + "node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "engines": { + "node": ">= 0.8.0" + } + }, +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -1720,6 +2427,7 @@ "node": ">=0.4.0" } }, +<<<<<<< HEAD "node_modules/proxy-agent": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.3.1.tgz", @@ -1773,6 +2481,8 @@ "node": ">= 14" } }, +======= +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -1793,14 +2503,21 @@ } }, "node_modules/punycode": { +<<<<<<< HEAD "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", +======= + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "engines": { "node": ">=6" } }, "node_modules/puppeteer-core": { +<<<<<<< HEAD "version": "21.2.1", "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-21.2.1.tgz", "integrity": "sha512-+I8EjpWFeeFKScpQiTEnC4jGve2Wr4eA9qUMoa8S317DJPm9h7wzrT4YednZK2TQZMyPtPQ2Disb/Tg02+4Naw==", @@ -1826,6 +2543,59 @@ "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" +======= + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-5.5.0.tgz", + "integrity": "sha512-tlA+1n+ziW/Db03hVV+bAecDKse8ihFRXYiEypBe9IlLRvOCzYFG6qrCMBYK34HO/Q/Ecjc+tvkHRAfLVH+NgQ==", + "dependencies": { + "debug": "^4.1.0", + "devtools-protocol": "0.0.818844", + "extract-zip": "^2.0.0", + "https-proxy-agent": "^4.0.0", + "node-fetch": "^2.6.1", + "pkg-dir": "^4.2.0", + "progress": "^2.0.1", + "proxy-from-env": "^1.0.0", + "rimraf": "^3.0.2", + "tar-fs": "^2.0.0", + "unbzip2-stream": "^1.3.3", + "ws": "^7.2.3" + }, + "engines": { + "node": ">=10.18.1" + } + }, + "node_modules/puppeteer-core/node_modules/agent-base": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", + "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==", + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/puppeteer-core/node_modules/https-proxy-agent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", + "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", + "dependencies": { + "agent-base": "5", + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/puppeteer-core/node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) }, "peerDependenciesMeta": { "bufferutil": { @@ -1844,11 +2614,24 @@ "node": ">=0.6" } }, +<<<<<<< HEAD +======= + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "engines": { + "node": ">=0.4.x" + } + }, +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "node_modules/querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" }, +<<<<<<< HEAD "node_modules/queue-tick": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", @@ -1871,20 +2654,425 @@ "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", +======= + "node_modules/readability-extractor": { + "version": "0.0.2", + "resolved": "git+ssh://git@github.com/ArchiveBox/readability-extractor.git#42b243843c724a5d7a6b364d23985ff6acaeb55a", + "integrity": "sha512-B+oZuG4FwPYg5hxEafuhrwNOS8uiv/gYKlLKbIaeXXHlyznARYOqHpkHumiLMU6vkbZ3VAC7WucnWwh5jVOaBQ==", + "license": "MIT", + "dependencies": { + "@mozilla/readability": "^0.4.1", + "dompurify": "^2.2.7", + "jsdom": "^16.5.2" + }, + "bin": { + "readability-extractor": "readability-extractor" + } + }, + "node_modules/readability-extractor/node_modules/acorn": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/readability-extractor/node_modules/acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "node_modules/readability-extractor/node_modules/acorn-globals/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/readability-extractor/node_modules/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==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/readability-extractor/node_modules/cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==" + }, + "node_modules/readability-extractor/node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/readability-extractor/node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" + }, + "node_modules/readability-extractor/node_modules/data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dependencies": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/readability-extractor/node_modules/domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "dependencies": { + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/readability-extractor/node_modules/domexception/node_modules/webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/readability-extractor/node_modules/escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/readability-extractor/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/readability-extractor/node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readability-extractor/node_modules/html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "dependencies": { + "whatwg-encoding": "^1.0.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/readability-extractor/node_modules/jsdom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/readability-extractor/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + }, + "node_modules/readability-extractor/node_modules/tough-cookie": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz", + "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/readability-extractor/node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/readability-extractor/node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "engines": { + "node": ">=10.4" + } + }, + "node_modules/readability-extractor/node_modules/whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/readability-extractor/node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" +<<<<<<< HEAD +======= }, "engines": { "node": ">= 6" } }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) + }, + "engines": { + "node": ">= 6" + } + }, +<<<<<<< HEAD "node_modules/regenerator-runtime": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" }, +======= + "node_modules/request-promise": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/request-promise/-/request-promise-4.2.6.tgz", + "integrity": "sha512-HCHI3DJJUakkOr8fNoCc73E5nU5bqITjOYFMDrKHYOXWXrgD/SBaC7LjwuPymUprRyuF06UK7hd/lMHkmUXglQ==", + "deprecated": "request-promise has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142", + "dependencies": { + "bluebird": "^3.5.0", + "request-promise-core": "1.1.4", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "request": "^2.34" + } + }, + "node_modules/request-promise-core": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", + "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", + "dependencies": { + "lodash": "^4.17.19" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "request": "^2.34" + } + }, + "node_modules/request-promise-native": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", + "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", + "deprecated": "request-promise-native has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142", + "dependencies": { + "request-promise-core": "1.1.4", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + }, + "engines": { + "node": ">=0.12.0" + }, + "peerDependencies": { + "request": "^2.34" + } + }, + "node_modules/request-promise/node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "node_modules/request/node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/request/node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -1912,11 +3100,14 @@ "url": "https://github.com/sponsors/isaacs" } }, +<<<<<<< HEAD "node_modules/rrweb-cssom": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz", "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==" }, +======= +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -1941,14 +3132,27 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, +<<<<<<< HEAD "node_modules/saxes": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", +======= + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "dependencies": { "xmlchars": "^2.2.0" }, "engines": { +<<<<<<< HEAD "node": ">=v12.22.7" } }, @@ -1963,6 +3167,33 @@ }, "engines": { "node": ">= 14.20.0" +======= + "node": ">=10" + } + }, + "node_modules/selenium-webdriver": { + "version": "4.0.0-alpha.7", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.0.0-alpha.7.tgz", + "integrity": "sha512-D4qnTsyTr91jT8f7MfN+OwY0IlU5+5FmlO5xlgRUV6hDEV8JyYx2NerdTEqDDkNq7RZDYc4VoPALk8l578RBHw==", + "dependencies": { + "jszip": "^3.2.2", + "rimraf": "^2.7.1", + "tmp": "0.0.30" + }, + "engines": { + "node": ">= 10.15.0" + } + }, + "node_modules/selenium-webdriver/node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) } }, "node_modules/setimmediate": { @@ -1970,6 +3201,7 @@ "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" }, +<<<<<<< HEAD "node_modules/single-file-cli": { "version": "1.1.18", "resolved": "https://registry.npmjs.org/single-file-cli/-/single-file-cli-1.1.18.tgz", @@ -1989,6 +3221,172 @@ } }, "node_modules/single-file-cli/node_modules/iconv-lite": { +======= + "node_modules/single-file": { + "version": "0.3.16", + "resolved": "git+ssh://git@github.com/gildas-lormeau/SingleFile.git#ec9dbc7c2272bff0dc2415a44d6cdfb2b48aa7d2", + "integrity": "sha512-NwwtloJdZlPG2zKrTAlcPRowIcwQx+1U39wcyPnfsbpVZKi6FAyLpo+CV0/xVJmvdOO0DSTvimuZtnc8/gJfTw==", + "license": "AGPL-3.0-or-later", + "dependencies": { + "file-url": "^3.0.0", + "iconv-lite": "^0.6.2", + "jsdom": "^16.4.0", + "puppeteer-core": "^5.3.0", + "selenium-webdriver": "4.0.0-alpha.7", + "strong-data-uri": "^1.0.6", + "yargs": "^16.2.0" + }, + "bin": { + "single-file": "cli/single-file" + } + }, + "node_modules/single-file/node_modules/acorn": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/single-file/node_modules/acorn-globals": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-6.0.0.tgz", + "integrity": "sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==", + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "node_modules/single-file/node_modules/acorn-globals/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/single-file/node_modules/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==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/single-file/node_modules/cssom": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", + "integrity": "sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==" + }, + "node_modules/single-file/node_modules/cssstyle": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", + "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/single-file/node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" + }, + "node_modules/single-file/node_modules/data-urls": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", + "integrity": "sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==", + "dependencies": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/single-file/node_modules/domexception": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-2.0.1.tgz", + "integrity": "sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==", + "dependencies": { + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/single-file/node_modules/domexception/node_modules/webidl-conversions": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-5.0.0.tgz", + "integrity": "sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/single-file/node_modules/escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/single-file/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/single-file/node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/single-file/node_modules/html-encoding-sniffer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", + "integrity": "sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==", + "dependencies": { + "whatwg-encoding": "^1.0.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/single-file/node_modules/iconv-lite": { +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", @@ -1999,6 +3397,7 @@ "node": ">=0.10.0" } }, +<<<<<<< HEAD "node_modules/single-file-cli/node_modules/jsdom": { "version": "22.1.0", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-22.1.0.tgz", @@ -2030,6 +3429,43 @@ }, "engines": { "node": ">=16" +======= + "node_modules/single-file/node_modules/jsdom": { + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", + "integrity": "sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==", + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) }, "peerDependencies": { "canvas": "^2.5.0" @@ -2040,6 +3476,7 @@ } } }, +<<<<<<< HEAD "node_modules/single-file-cli/node_modules/tr46": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", @@ -2119,6 +3556,79 @@ "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" }, +======= + "node_modules/single-file/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + }, + "node_modules/single-file/node_modules/tough-cookie": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz", + "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/single-file/node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/single-file/node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "engines": { + "node": ">=10.4" + } + }, + "node_modules/single-file/node_modules/whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/single-file/node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -2129,9 +3639,15 @@ } }, "node_modules/sshpk": { +<<<<<<< HEAD "version": "1.18.0", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", +======= + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "dependencies": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -2152,6 +3668,17 @@ "node": ">=0.10.0" } }, +<<<<<<< HEAD +======= + "node_modules/stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==", + "engines": { + "node": ">=0.10.0" + } + }, +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "node_modules/stream-length": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/stream-length/-/stream-length-1.0.2.tgz", @@ -2160,6 +3687,7 @@ "bluebird": "^2.6.2" } }, +<<<<<<< HEAD "node_modules/streamx": { "version": "2.15.2", "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.2.tgz", @@ -2169,6 +3697,8 @@ "queue-tick": "^1.0.1" } }, +======= +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -2223,16 +3753,25 @@ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" }, "node_modules/tar-fs": { +<<<<<<< HEAD "version": "3.0.4", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.4.tgz", "integrity": "sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==", "dependencies": { +======= + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dependencies": { + "chownr": "^1.1.1", +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", "tar-stream": "^3.1.5" } }, "node_modules/tar-stream": { +<<<<<<< HEAD "version": "3.1.6", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.6.tgz", "integrity": "sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==", @@ -2240,6 +3779,20 @@ "b4a": "^1.6.4", "fast-fifo": "^1.2.0", "streamx": "^2.15.0" +======= + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) } }, "node_modules/through": { @@ -2248,6 +3801,7 @@ "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, "node_modules/tmp": { +<<<<<<< HEAD "version": "0.2.1", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", @@ -2270,6 +3824,28 @@ }, "engines": { "node": ">=6" +======= + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.30.tgz", + "integrity": "sha512-HXdTB7lvMwcb55XFfrTM8CPr/IYREk4hVBFaQ4b/6nInrluSL86hfHm7vu0luYKCfyBZp2trCjpc8caC3vVM3w==", + "dependencies": { + "os-tmpdir": "~1.0.1" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) } }, "node_modules/tr46": { @@ -2283,6 +3859,7 @@ "integrity": "sha512-em3E3SUDONOjTBcZ36DTm3RvDded3IRU9rX32oHwwXNt3rJD5MVaFlJTQvs8tJoHRoeYP36OuQ1eL/Q7bNEWIQ==", "engines": { "node": "*" +<<<<<<< HEAD } }, "node_modules/tslib": { @@ -2296,6 +3873,27 @@ "integrity": "sha512-ntI9R7fcUKjqBP6QU8rBK2Ehyt8LAzt3UBT9JR9tgo6GtuKvyUzpayWmeMKJw1DPdXzktvtIT8m2mVXz+bL/Qg==", "dependencies": { "domino": "^2.1.6" +======= + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/turndown": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/turndown/-/turndown-5.0.3.tgz", + "integrity": "sha512-popfGXEiedpq6F5saRIAThKxq/bbEPVFnsDnUdjaDGIre9f3/OL9Yi/yPbPcZ7RYUDpekghr666bBfZPrwNnhQ==", + "dependencies": { + "jsdom": "^11.9.0" +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) } }, "node_modules/tweetnacl": { @@ -2303,6 +3901,20 @@ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" }, +<<<<<<< HEAD +======= + "node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "node_modules/unbzip2-stream": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", @@ -2312,12 +3924,15 @@ "through": "^2.3.8" } }, +<<<<<<< HEAD "node_modules/undici-types": { "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", "optional": true }, +======= +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "node_modules/universalify": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", @@ -2334,6 +3949,18 @@ "punycode": "^2.1.0" } }, +<<<<<<< HEAD +======= + "node_modules/url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "node_modules/url-parse": { "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", @@ -2343,17 +3970,34 @@ "requires-port": "^1.0.0" } }, +<<<<<<< HEAD +======= + "node_modules/url/node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==" + }, +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "node_modules/uuid": { +<<<<<<< HEAD "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", "bin": { "uuid": "dist/bin/uuid" +======= + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "bin": { + "uuid": "bin/uuid" +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) } }, "node_modules/valid-url": { @@ -2374,6 +4018,7 @@ "extsprintf": "^1.2.0" } }, +<<<<<<< HEAD "node_modules/w3c-xmlserializer": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", @@ -2423,6 +4068,57 @@ "node": ">=12" } }, +======= + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "deprecated": "Use your platform's native performance.now() and performance.timeOrigin.", + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz", + "integrity": "sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==", + "dependencies": { + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/whatwg-encoding": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==" + }, +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", @@ -2432,10 +4128,20 @@ "webidl-conversions": "^3.0.0" } }, +<<<<<<< HEAD "node_modules/whatwg-url/node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" +======= + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "engines": { + "node": ">=0.10.0" + } +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) }, "node_modules/wrap-ansi": { "version": "7.0.0", @@ -2459,6 +4165,7 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/ws": { +<<<<<<< HEAD "version": "8.14.2", "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", @@ -2476,6 +4183,13 @@ "utf-8-validate": { "optional": true } +======= + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.3.tgz", + "integrity": "sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA==", + "dependencies": { + "async-limiter": "~1.0.0" +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) } }, "node_modules/wuzzy": { @@ -2487,12 +4201,18 @@ } }, "node_modules/xml-name-validator": { +<<<<<<< HEAD "version": "4.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", "engines": { "node": ">=12" } +======= + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) }, "node_modules/xmlchars": { "version": "2.2.0", @@ -2508,11 +4228,19 @@ } }, "node_modules/yargs": { +<<<<<<< HEAD "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dependencies": { "cliui": "^8.0.1", +======= + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dependencies": { + "cliui": "^7.0.2", +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", @@ -2521,7 +4249,11 @@ "yargs-parser": "^21.1.1" }, "engines": { +<<<<<<< HEAD "node": ">=12" +======= + "node": ">=10" +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) } }, "node_modules/yargs-parser": { @@ -2534,11 +4266,19 @@ } }, "node_modules/yargs/node_modules/yargs-parser": { +<<<<<<< HEAD "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "engines": { "node": ">=12" +======= + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "engines": { + "node": ">=10" +>>>>>>> 46b944b (wip pre-0.7.1 side fixes) } }, "node_modules/yauzl": { diff --git a/screenshot.png b/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..0dfcb530cce8a021b84e63f3290c4c2fa363b4bf GIT binary patch literal 42845 zcmeFZ_g7Qf8$K8Xw8S`3`|J zHU9%S@ZTldH3;i}SC^t7r~bS0xOGtZzpMY<_&@RdPbvPjh5wnt|4iZk!xYwMnf}$3 zD~TT}_vO1ne!Pz?VZl4NYwO2BJ(E|;kKeKuX*%vQ+Pq{5H~6ia4i$(pwdu0VX~;q4 zlOHtV*4gHIDln>oi^vu=?5Paq2!pKQ2aXD#%KGs6^2k5O4DxRWh+dh@Hpww;KV!HO z_NvJE?t7sl%u#+ivYxlqbTd8(NuPaMGQhRR;q89UW!twQkymrLU5=xA$>iIgxIuC5 zIC15Su31B5T)ciR#eq> ztCwnnG)@}VLAu9X-Ez06Ap}QficlEXAd0m1@uQkHCq&?;nA(#0J-%r^=HnIuAg(l_ znbR-&=Q!c?+vaw!u}=72H3d(jy|8oz^+m=vbP~DPA{AY#H=fzF9g@^87rS$iRMGfq&W8CSQ!U;cD0xI`)Q`{!W2 z{M$EM!fB`{|H^*q&qK&RkkGG6PlV20DkwO=Y!R}Y6MvR7zU0J!+DDN~-vi&>=3;eI zcu9X4hW~YxwZOc#9&8%+>*y&uGxRpig@bUrUlJkQAr1Me7sw)}kX&Hc9#>uWRQ;66 zP{M6-SUJIez@e()?|X5Q`XGfJJOmMwVGV~&Igr%n2Y%6xSha)?sq?Vbu{7PzKEPbY zABM&e7QDj7{)N%U=Z;?8X916dcOO5%+$HK)z;M|MDdG zJj!y-%tyrT2Dz0#?6ZOV_MajS=GT{r%t`s)&1$5yyW=8XK;@s0z*%{`TpR4};?&Bf0 zBEQz)qn$}OsU4jsiiP&)75+_uraT{kbG(-X3QE6`TXWj zT$F%Yr2fP^^0uHFu=H3nD|9LEzc)BU9bpN-H2l+%S4u2S?!YA!gZVM!%z?|0*@Dl( z2Y?yEt{yvN*-x2gS3klK+X!Ha48p~C5X|~q>euVxMzc`3NT%wQ9kHH!=I78erti)( z@9+q)wYdTL30dMispr_RU*vu3DNdW;WjT_cXSaQJtajI^58ZFgyfd8tX4Cn2$wuV^ zkaOU$Pqtpvf&6?H_WGO6evP^Z>eo%wi3_{O{v9(19JGbZ)zv&Z^@<B3!d*CzwSF*@W%>SJ}m$DKIL7LL+2s;B4Dil&a;cb`%%kiqjqJ|nZl+9 z&Ry@3W0v#VLrW3GZ-59c&pFin_n^Qj2=M&(c-*U3{na7oIc(&>_A-5XOrpjF3KPKF?9|}YP319hth3|?N%#Xl_Z@_Nkkm&`WJR*= zXgOEm)YOy+pQMC@u6W~CL|lBF0`4f6*!N5-K8Uc{8-ow}Rvpl7R1S^4DBTaoSi}o& z-d{zIVHa}U+G8@XKVHUT5CU2k3;TUAb9&Jbi+{Qs_wMK0*vQ9HW{>D0&2jTK(ZHVH zKy0HrN$QYr4*87^+thnOW!5p9(|h{EtD}g(ty+mdT5qHkT9gr3;XGQ9IcJ-x5M(rs zNm|1iWe49YrSI%fid=kA`&jOa3cmFi#EzFk;me#fuUy5B5H53W)bMyn+kD@yNzEN- zoQBjvk1Gb{mO6Xvm;Pe6FavLn9zEKXd+`87?C|je|He>}h0&avqY<2IyK-DyNw|@N zkS4){%1o{4c>Q*pwOcwq-Bte#B>WSL7c-!+vhI>64GyyGGsuz$UcE}JWw8`Xnnbg_ z;DVlIK68PUX|nG1x9^wN-|gF~MXuKBDA6~nFbLginWJy0)M`Xxc8Jds>ZU zJ6drDC^JLD!r(Vpgqssm-NVzfaz1#g7IP}MxV+X(G;Pu*D8`G}=QNs*uJ*x6lL#ES zA$unmQeDbMH(NgyKZ^Y0?B`-WQe=9~d{ZY@LWQXYb44S&i$qS@pw)CB`Z8z3;sPr? zcSu?I{@kDIyL;qDh1l}OhM#UlT!mE*=%toer4cN=(TVYDQp#rg6n-MB!HyA~CcTW2 za)Hw(6ZHK^gq)9@UB&8i+y;dnvQM z8|Vc`TD?sI29dTjVmSTaU3F-SO7G5!*W~S(Ivrv;UDEh9>*sa;&TcG$=HLV4JhGI`lE27_3JcI#F#JXHaE-Vx&aZ(y-XTX#B(N zqyPN#W5sW4#WbYiug1-hi-BeSgQW-d}=K*vvqSTSo8GeDBxxdAYga!tJzq8ueZ*GJ<~;GAt_C-&wcY4)h~O4yM9g;BGV(C>~)s*PSo| zW*Yf%KLkc~g+M?=y0;pm?U(k{_$Oxa`%SXl&&dzEIihv9vrC~UT}`}5}yG`40JBV{#b#Hef2%d<=Ky|+$Cmk;RLSj369%pB+4t&WV2hOaOd zd&UzhxuxAItH;fJmiI~?ngOS3xxRV3dyQ$S7w*0=sUu#JTW$4@McOS(>leGxjxSr) zgkGx(Y439#!Jpqlk5#%S;Sy=f6L3Iu$`QNU0r;2llS17b~#^;O7y;r1_q)^6* zi@cP~y}%Uxe4F5g826+w*eZR-%D+=yDfG479wB5;q+R{VlUwDeHQ$JG%9b4YHt^y< zRvP^#6*b1y^a+y3&V@RShi;5jXg28IM7ZMZ&G3Oi5k5>AZ7FO+@qrrSdw~j$L1kz~ z#xK3CTw`mh5M}hYTH!*@AtftzIFLdJwg|trA8i=zC;U!1c2&4kbgke^K z$&+p=H2StjTYHMEar}I#DAD9!K@8Fji#eS_tttkI%TjI0o%(sXdpr9+y=MBQM&IXZ zH_EO-rq-LTUWRx?E)pmQbYeN>g1&7PX`|BMF4Rm{p0FK1r2=pz8@&A_!cN8wTe8I? zx4bZ5J1%Q%=I28y+c|b_H#n5>ilxZB@k{9Tngh&kLK{XmdRBIQn>3)%naw%o7A zVHF^%zsXJgrBRpTWt?&MzS)7gIX^O16Q|i&!MQByJ;MfB7O~?Rnak_q4k7}-OxHa ztKc2O-gK$Z>`etd={rh!|Bs&vn zX=x)%Bz5?QgNo2Sj$^#Rs1Q~jHtp&9Ug38%kVHBy2t-sUPF5U}tO+@=B@~%>U{(%}j z($tlr0h0lU}KeNB@#1Mf8`t2+GG=N%lWSAfk1(t(Mlt+;3h{)DS<1z zeHms|dC}K*$S8@ng-Ag*yT$jUqLIdhT8S-+d7ku4d`gOM-#=?wj z&{hcs0aCT$8f%6Kj6zoo@tLAdR@GbE|85s7z_748+*?S#yJ#6ge@Fg75S6^2|Mg5% zndvf~&d#&@FqZv%av^Q#*p~@{|1wW0-A5}ghNx(tfu2A!H587>P) z*7;)i!Y*xLx0pG_i+Pd8;Ul1ey9!|q*BJgV{ZNWBvzU4-w1gD<+leo@;P>y}B0OFr zMb;up56t1NWi({Xa({!R?0V2wt4j_i^v;P|ef$3XdkHGs`>TlV15}{5F~wdB3R4Q+ z{$SsSAU{tqHAlEr(Ik8x=6(!Z-ZZ}BFn=6H?_z!Y^(OSDB{OSea`J&jf9sf`ny-!_a&EsL=l0frhGv!T3A@*^$meMJ@EO&dFG+Vqu&MAi9slu4)WbdBR7tOh`Cht#LY-fg ze4`J}msV*H&FlMOsT#{$#cKNa<69SexiB*YAuQZ9ogA*ZB=W@Q7im zl3(IHI>TaswVsn2A)oFGotW4!NpL0-|sh1*U-%n33 zt}P~P0AT@6PHLf(UWe2muGI5Gn(W>_R)$QSsa|TIv-+g@RovK!wEBY%W9Umrcv=QQ z^J0;1Er+`iX&~M|YksPx_v+xGjVYP}+;Pp=s`z4iTbnZonu>2emz>{t5q5%m-MSp6 zM88{7cjBV?1DLT@kUk#i)BD%|i_GW%4HZ;mG5(Jw*ExYC;km%EcM@6`WrhX$8pv>u zCKAbQD8q8KVnh3)-0I_yZTeX?y-((;rV%=Hgxed3iZAd+)Aw8IH}B7{HPYjju`WKd z9l9FgCDNtlLbql_jc#8f38~>+rHmIlwXHG ze|T7Ey-ij~_s_0(&@H?6)_xV$*kBbJZ@?JkCpgf$wY-Q#symrLD>9In3vMhmcbD__ zB&_I+RI6P>&mf>?i*4M?ObZW4NRuK;ZU)Uxdvo3HD3WyObNs4>?z^wEh3RkB2{_m6 zI8s?_2CT_m6c-qBlATZSTdaNXpAp}cYUgnaJ{?$IR@P-Ty_zyhZ*&Ms1eP+4I>d;I zLGU=^b150A8(Z9&?GFzt6b98%D}xn>0%t^*AKW3iL5r#R+UxRe*zaG|6GWUYT$K;% zbNE=jxR_>y5%XI_AWAt;>#7(ZVk-s}qTSC}{!$t=!wz?XQ@F^xFfQ)9e875vQ@qL& zV>>4iP3|&m^v909TmNkv>o_aPIPnkRKEY`M+PAo&q`e?VE;*p`!Ejm87t9?Ro^ z-kZ)?Z=7_=iRHs!CWDJ{IJ`h-BbB@{783T8>)B1C>H>rtZq=|sx8<-E(fWsDMJ|_X za(AwKQs|;7r06~^&7d(<0q#1~S3L1vQc;)D&S$8s9Nu8I4u_IwIyokXEi+^Td6mYH z`Kfnm*vAe)vX~H&4KNZn)92EaW$^Yy{??3c3-TqMox98O?$=bJ2ePtT;NIghvOYp8 zaU0FUoo0>pxfmG!<9ky>@yfEp3UdmNDjf%|rphitHO6UdCtr+RE1m8=amT$czm5`v zGX&``rD*% zSuV{^NJIK%S&BEGtGPqjuTdhT0Ua3I+FA;BP%UqN_3G6{MeonK>E!{W`mSJk%Qu-T zQep} zO^U(c#7V&GNtEzhEx*NJ zhdlHQyOfIo=I<2(H6rf1`ogAhiGl%@@9yX6TT_MclUqj_{7xNBg3zFYDl{avu8}<1 zu)Ry~_{byYYlhfd^?_lQ$Z-ZW+E5Mj7&smOU(=i1(q=J3*&%Y}U@OiBBc_n@9bHbMc{Fe4I33oZWlJs-ZxEDqdrQqb<62ngA<{N&R zN3^?OzgIwaCfRw_WriuL~&G}y~++vx_=zup8J6*jvlzyxr#LkZQ&K26i!v%PO#y;!lf+uFG}ez*#AuSel&OaSyAPVLLg7 zzLr#{=oT3{%D39xVCjZzG>>mPF;eu-=WewUNFYkBN{d2JT}c{#O323ntBamV=yfV# zsP)V?i4c!^7ZUuEO{makb$H;6_D>)F^Y#A^7huW%eH-d;97Y-$ehoe~^^Ei88Mkq( zGS^3Sd*i(UV?Uoiq>;lIRj%b`xs^qRrE#nK-Z<#e&d8u0Ff6Gj>f9gOfS;yj-Y_iH z8z-)@DM>XEy)N9emDDthn-@1(Fg;uNr-o}S2MacBqTl5TmusV{oWu;JO-hkdBXv;veu}+<#mD{Xorvw#h z;Lw}_+xC3q<))YnWVJ0(Oe<4X>$zBx)p;2ezX?L0!%oQ!ZrwKDpoZW8PTjofx%Oc) z8+#r%#E7!?MnS0SV(`~pzn>Z6cIru$C)Xxw&=i(R!%yaSoVtQCi2wnCGnx)S$CvPw zg;lYP`hzua7yZ|b)s!fy`r20y9zK+hrL7TGsHY+JcCUB6UcRim8WxHpE)5qYEY7?z zcB>iq$k~l^6Q8u*)&b)G=eHW}kTfABeeKlK8vT6j zo!~NUl9}Sep&qbRmEJTdEtzLJDOB$=hvqNYZ(w?i_T8J-iZ17q;#cN}W$0Ucn3e|+TIpRKjQTM zb*|CRA5y_jG@pchiLY*Hp3qL0cN#akb>|M=mb1Pt%MNE9mhpGrk0UKRom&RFbrH)w z?^y`^oU^|d3mU;$Y$SZ;N^>RTN%6TFe}%2~Ag>j)k|f+cFmA~7Ns9uzwRRUt`l9O) zi>M_1Ztz&8=-n}DMOodFP&WdAHQ28`ipWzVtMzUT56Y60&%^fKe)p>1NWc4>7G;&z z7o4}aIlL<=D{JoaL{wtH581edrEt&lo;sCPGZ}2igLP2+&I@WeXB<7|xbZ{kb!0JH zK9?C0e&pH^(k)jbX?-UhPqo-@Y>D*xLx;9wsH#SnwrNuVB-jRdvugSNr88%2#^)1t z+0B8_B6-6h5b=>BqXEC}hC!mW$gm)+Z?I-E1U9YcUN5CvYBpgbCx1^^J97iyEzoBV zAJ{n9vT+XfWAAiYAYDSv7i}FD@)8|}sR~8tCz^)}lyX&`W{3&N^4YLnkJpRmE?Gb@xiAT5@(L)riEM;t82>Am2dt z7p3#f-_q<|ooJ8QIT?wk2{L%-hlmIsmTx2H*tT6(jOZQma&kH+!*j07EU#&-)~iN6p}HXg06v2!ejk7&iAO+KApB|) z68R(5kGabm-4p_a`S~AdrQI2nY^pwwvX|nX1&Gpo7qwF5M=C{gT6HRy1JkUml*&yC#m|XV zy29=Ts7IjY2FubzxBs5TJ$?#+(~UV}D-!+FyHBo@f?)wu*{UL>U4x#RO!3DmV2xqu zl)}jz-vY)=tl1X64vKWRTaG`qFXa+eb(|XgDHgr;ageOT=-3LCaHn%2sE)|T<`cjg z6+WeZPfSiOsDaL37hNOof4%3!=sR*+8a56KMKs2i(dUf26{zJLH&Ohgh>Zp+-5WO( z{C7I)__AG;E;w_HwVv#d90Zd73LqMn)#{dto&kWldD(p+$=YdXUes#tBS_L?{HkkK z$gw+dCqcoW7_t{YYnlK}pUg{lhV>9GN!mo8vb|MQdnI&gYC17N(741R*Fhx)@s&g< zEw(eCQ8_WB;4l)#_2`Dh&!=@Q0`9fBg&5l~l+4choZ-7WuX+LSvN4>MZFQx&){8g{ z(1fMUriWHxV8b`?n4}@G2%z*(Gt>7p5~xP+KZF@Q_!UO^nIY$=9ZL=C@(pd62idMm zMpu%!gItmgnT-!|{C=jqPpTrr=2fn1zMSkfT-(jC$N<5k7-(J2CI!GQIOvH$CmSBN zs74L`3!(b^3jZbyq4MeUJ$LjBK!3CX{fg=~7f2(ku#0y@a9;CvZAuP(CfH4)wLhCJ zK#`Yxto?8_yuz)J-ZwIHD0X=U4<9V6eNV{_DGRlC1yFHIX6UHPjlTeZl5$*-Oso`5 zbC|H=3)xo#@Jh7cGjOiPum+lI&<}iaQH`tiL?dmwLzkRglOSa9<7>cd1s#jP@A174 zHLWr#bwlAj(a|y5wd}*C`t6?Sc9UWl;d0a>9NIZ($Hbf>Hq+NSH7$*+-(svA1v9%m zlpsyH(IA3C)NVc$;wDTqNy=oHr}_FVM7Hw|fZ9vw){Un)1nGyR6r!;A>iO}taiaA? zJItuSIic(0r&#LvatZk%dnP6zGx(2$7GuG-+)8+$J+|2ClQgsMp`IjEXc@FMb`k}= z+Nf>p7TmSmpyIV%LAE)($guvLkmFN^08aUFWuM>znmWHTkmC(dI8-JKtWuP=%MFJP zsYgaerZztN0*x)|%aFy6QXkZsU>$wWg2IPcWv+<_ve#tFl2}40BtPe;jhS)r(G83> zRovg1@%;BYA!VqhCgo_}ohU4RVBBSI$r@8IAH6wJZ>n$U)jMLghm*x!`P!R$r?0{# z@G*TqaCO|lJB)9c=sNXz+EkHX8>?8t?f|OaGQX9H+&{V9%UixR%$&2=`bYm3)(?fO z0wqgja9>Xm@TTX&<`mc$rm}ThsH+Oh#XKlGsyj?Tr7HMk+D*pr(2vzUeDJ^kbSk?) z4gu5^DzJ}DmK;|3ZF|#6@o%;4imW!iqu z!^uR^xvfW}Uf*&h>%n6jWE62#r1VkRfI`^QRO)3xfN~lBe0rrDL2l4VDX*}PUSgK% zoM+E|k90?srOFUq+}xvlOjy(|{@Z6>9zd77d|BBxGss93XJY)ZFOqr=GNs9EJo^tf z7G`GhO5g3?3)vmm6Y|FUfYpH-yyHg?6K(1iHw&AxZ*K|V?Wg3Z+B?Ajc2wkt-V0Wo zECFTMJ+&gk;yldEMF7Gjx{Uu)d;uDylFq+9q})e`+j)(s)TL~URj5QavF}JNUIne{ z;qfC;%<7rk%4m`-++`70-qH7ICroU_s1KArBmLvTz3j;0k!Pfy*KE{U? zbe2Jv?IfwR`H2~*aI{%67m^k!m`^3ek10g#;dQ#VrAcz0R)Apl-U;s8{gszh8&!GN zmpB(Rj0oi6rN^VaKQsZRw>eQYdZpP3OtDyYW<@##i$qWiK>;8qd^?C;)UxQiVsMyx zp7FVpUbPz|ztDz-Hjm3mKFhQ1+UtK~M&JB%Jm{>-*PEq$NnxdIfmBVuk)gvf zra^&E^gu(ho)<}E(JU_P{ln=7G#ZQ~1pwvVegD9^a=E*AO(c~v%aW}837)+yRsGVE z%Qh}K2v}qN7OBS#iQl{dHrqgV&gLb#kRlUD!v%Mp)?NpgT1gChg{GmC@d%L8peXY$ zOo;75#Mx3aX-pBUQUA^Es4wr?7a@$->tpO0aFif+h40d(5+)`!+{rOgXvxcC-}LR24Cl2Xo5 z*pERpl5`^7%Dd)w*z1I%Hh7JsWDoOKHP&X@AUBW=AJI9Xq)IMJY zu9AY~M>joRY7n*~}spnrCQMnNmpt#=6Av z(#apX0P7y%JXH4d9Y`^xziGzwwOm(gr|;_{{m28L=eCKl7M%68EM}4vT>nLX6LW}t zN5dLqKuE&YFv5LF*wPH7ukeibD-915@c9vcFo;Ct5qMLc1cSXcd&RvwHrn~#!@V$WqzSl2KIn5Z;k0+2bDktDlG&ox zN~>{P9wmLe$CD#}Kj18{l?f9>+qG#G5x$sDoN9iEt@KGddiF+^Uaoq9$-uXihS&yL z-;3^3xc{3ksv`07^|RY5TpxUwxo^J*?syHI6~CWdi3Z5p0Fxi z4t;mbGKn;UA1TZMJ$;2(;jiLJB-;a!@Df|jXJByfYHB`z@c4h1|36{EiQRm;wx+JG z-bHf0oCb9AYjW}efQq*LuL}xVHvzI21k$Gp!bj*ZJV=N0xUkJmG0(U%AXCK%Zkxb& zxxh!?Kpu^ryJ&5~*r&t-HrN1VM({}-6XyWDpbW(jS^YiGPAYmj5Er;Of~oQ*0Jz5q z0IjU=$7j*YeqQnOfuNX!!f=2Q^X_BfFu+^n$rKB9G5A((kj_`&07wDyfh+#ZsQ`6q z-llZ_8c9JY|GaJW^BDmi#bAE(J#oe=8}oZ|*tS|6{6q$MP5g1M`DEVf=Z~vBN1VI8 z*4B;`frTGx`RKT}#Z&tf6l|V+2LK=W3z9g+JtoH$Ojr(VA%Koq(mFaV#UOnK5)CL1-zAfz?v$r*MuI%8UqmHfYlk>h(knI6Lo*M@LdPvUOt+}4DMdtZi*LBgy3PGI` z_!G?%=&*h^MAju{6-9JY)7w~^xhT2%7~~umZ+j?lo@RLCOdMaJ^h2DV~wHGy+VD7R8W7K!J*|g zxm|@1^Tn793I4^5PW|C*eXb1o0QESatOeSZb%jA_Hu*i6Vu%@!oZm>#xR=lB#66$o z0rRT);Jmp>TGsS66}7lbZb@wb-VJy~t#Mcxkva|w85O1Th6IN*IU?n<%u?949aYeA zINA{9tDqp|pWN5lIzGw(oEGO@RX&Y4=2pRIQvsHs(O&>I9bkpoJ;6PMItS3H5pxc~ zLOf4~A;QLRa{;e9q_}+xpPdH0cB-6v1M^YlEY#j3YvjvffMI z08SAP+AkPueL|2mSu^uno+!2e$T09v=lze7JMIhK_FeqfuP-KG2nH|Sv54$yLI8=G%dftx;3&;b>uyjy6Q{Rk2cWwi$y zt%KpO9-bY~s*v?vEdq^X4eD+kZHEY38mfVPOc2V)emSx6r@K6`EY^}o21>Z9whM?> zpv)pju7vJ?5)Z;YHo_J0mzvb7vm8FDTcJ0{97`pZr+j;xRc9xvtQjn8xWdaAifgb` z2&C#V@q~J#Focd;s!Z6cRD@#=FwEgxT*&VBkf{|F6dwaj*aAEuYO;~bRGB3i=e#BO zvQtyjmCR`riZ9qCt;ThvO)G5#96paipeFNdnV6TDqN0BLwq36oQ-uIsfif(7@17}8 zgiVW2JrH(4N^Wp_bP@dfNoS*)vXZsT}LsalmMFh zb6d4elygj-OOtl5sLlpPU>-wG9H909e0^hL?4=nXKS{ZVq=Cw*Nske=I&cB+Fae#7 zPpP^yoq%DAkE!V?Rm3GwU}lnkj@J164d%V=0y=D*^PWx%L+HTO5Ww(K1Hm)(?=O>g zZ{NN!Y3xBXadi>a4)c=c8|cz{PvuPN%n<;3b*mB3cxtWu2tKhp-t(?t zPa(To6j$zB9v_Iopxw2xLZ%}db*!07VUBz{M+G;^7)q&9D5ngxvn5+&N~9dn8Itg& zQEGkJmz?(0kA^PHwa(Ze>bl zew^5r>@$1jNJ_DniyO%Vh;1>y&|b922iZlt6Q0K0`Dme_3Q$IySHKpye3ZL_NlsblQn z<|fUt{gv(w@Jo})Jt637=;Q!p_hX`n3vj*eg<*kIN88&C=wtnXo8R8H-AQqf9gbXA1>uvR_6(fgDyF zYTicz0;sS>ed$9%eQ+Yc43ze_a##+9l)}wbq^T0{XFI3nv)y~byr}!Qh zmqV1q{7S7?9!Q4r96KwSYPTK;l0ekKgSJuQfa}N{S!8!z*b4yqOufo!lXnM>Wbi9h zUdhV7FVhA5F}qN~91;M0wmUCr;7IF33tT6v$2nGNYr`yJFDZ;xg#iobtx#gzX*=&F zCe~+AVm8FoR2aFNN#121-}@epJ`A)G4}8O3&7N2fPR^}70*}&cQTC&1UrTHpx`ED z9l7ovDG#=AKl~7Wxhf-32}?|obkGFnkY`r9oOC!d9W zzRYFV7G(q&6zcUUB;*##_JshXr)N`3Sh875g{o$KAZw4ZBt||t3673QCI&klZ?Me= zW(U&jz}MVJNI#A6JrrdMg%z?W+m=9Ykk+C*C#agZEgq)&GRemG0D~=;Z~>nq=>=26 zt9*;)lK~DFu&**b==%R`8s}L`%$PtMV~@GzT}gOVDamgKcJrTNE*L5%Fv~iK!kShF%`B8}zJs zcLCP3;c8y%3}+5`lZRLbti&GQN^Q0K7R;Uvr=Sf>8LK;*SQp03LmLk;`Je;JT7Y- z;yiHw^fk%ZefmGOXU<%{@nN1ylaJL&lj~EU&d#>gXL=C^uDxI8;oe&~EoRy9+K61O z>})1<_3E|Lr!PbXZY~{!Xu}5hJGP;7o)*a9laY~V52?Qwr5VT*&!?xK3Q2ux5I%eT z0OV7WNK4VA(acr`asihw^We?F=@pB^#6C+11Ypt!2L=W{e299asd@aObOC#=UgYQg zr>HtpbMqDgffq?#Y1x1G>E%wBp}*0(vg6asvOcctz&5uH*IEnpQ%gPp*P*iK3!Pe8 zx@u=5@4bBk3wJuf&7CHXBlV0^AmId5pgJx%B;*H_a@czr`xrY~>f-QK%b$ARfM$^~@mj|yd4c_r|9IZYA*a8W*aft;VZUyi4+Qi7M_ct?QI=^SRg}N z3T(AAMl~O=U~6-#C$U{eGh`8LSt;iVN4~$j=IuCn&a-y9QQ(q%K?;5Bo2mXI0`mQb zjwc20E&}K?F;9hFV_l_aN{r$8PC2}>2ie-%3Lq?ZOh42uF_D0T*Vf*X^>t)}{LFaB z^YB5--y33ps0n`uhr_*lke0FsAP37W(SFvVx&8dFw*SuP{P5X3`Mb5*18S{HU~jSCB`ivYQU)_REE zojAKubw|#&(VeaV|DBxO=}$aQHlb{qEN%XQ*Jj1%L6BB$P=vQbWYm8;*rwenwn^yuAGGydt#BOf%yl0y5>pE-T{2;{E+_CG}!x2zha=|cMxnP4^B zj_U?amUkht&0mEY8n*4%9`w-nHJmc8qSblN-wVDG!OjyU=SMyWIVWQF`p~Du1xrDR zwG@K1q@<*)S>w4G0qtMES~V&>*7U}3I9ugL_P>igPCqIt?(ZR>KVFRcJrzp0>pgqJ zUNhskF&Eb*+2FHBj_AAuHg;HSDa|46z~|9>>s#x?BjfJz*R!5S z{rKU*G?>UUtv-k#qxB}{E;pR6rl()p?8AlqJtYu!nBS@^j#+>ds9cMcxLkM z2?!iEq!mFR;5Rra%L-0m{M3cbSIsn`grnKdr#<|<-hBF0RSkX@mt$dS{D$~q&O$}z zlzvW~z*L-%LU)Nzy&qW-l4XU*$`TE4So1c0f;(9GJzcK)z4aC6+?zEZRGw z*A&c0jcl=)iHV<$ZFzR4e0R!;FSIKgxDr#)UT`zf(((Kg&zziCI(BqFqX$=_XqgAX zm*^wU92^{eq}OK-V0|c_L481!0FkWw`DCxRS86h;A?1F)@!Xv05qzC*^C(H~mgm@0 z)GpDe5zzfEh)9aQ_pyIfuk@dC_SvZ~*N+~yd3^Fde4@d2LdZbbWE%=mE)9&{=nL7O zJu>XsrNk&P%mjJl{QDsrWE@*knMLdLHPs4x(q!^& zsK5js|GhC84U=Od-*M0L-qSzi z0f*m@{FBNz?OA2a-LyJ26`p0@+|kj|9{_VB4D+A&@D|DQ(_YC@J%8r~>jZw{him86 zZR6sPm3Ef8aC^K(`5cH13^$9|_v|?@_h)aeOu*U9Yskv8sGz$WlWuQ_=PxdPNslX` z$gZUbJToszexuu-oaWT9KJ({~Zr;WxzU1ue=a8%_QE_ZTwI4?ME@$_s(d`R8y}i>5 zCdZ9g$`@Ik!H@D@3g2aIP*kises6RUn5o~?;uWB=xDMa&POoC)1KX<=#2n&ug#EnQ-bes%%4dt$AY{WD3SrR-JO zqsJFy<&6*Ri1hZ2kyGktH={$6o$SH8vw0c;Tq?(&v!~Cl!Cz_l|kTF`en2yRG#*kZ@;1TK~^% z`?sA$>(E1fGBQrPhF0~rRTI+h?b*nhIhx$Pc*p70q*1v<MKvs+1UdOKgTk+Xut7^DrgXtUbME$0XkP z3~x=Z2pJ6rM^x)OeHxWS>JfjnETsEaZK3(|o+)y*9XBF!CDMDP5p2F*RJeazRu?OSG8 z-@QIdr{7|qsb04mOG-;XI`o?5{mJDQL-;CkV{nq;zs_wZQ$ocGz3@7?@9bgQB?nEV zF0pbnOk#3cyd{~O435A<=IX)goY!-y_|DEFG?s`zlclNGPek1lK!(*g=k1AEZF8pH zaeJ$G^pKcE{k}T&AqbS84k%y!cGce2_D$qW`;?K#KM^tKqpzvP+Ada-CH%*3@Lw0q z@hwfg0e+=feQvmL$iZV}`^fS0@|vj#j!S1g=0$T~5!shkiB0ZPs8g+qj1(M}L)E39LX=`gk!W&0RRlU8V?u@wqQjLE}|Ml3S!ILwm zO`8=G#V3b-cHsoKql%O(zJddIm*>PXg@r-Os*^_E-p9Y$ZeR*;OG-Wj#Nr<-NWL`^ zRp|=;{Gcf|SjP3(+SQI%K^;eUO*J~=hE#&KTK`E4^*DSwN5xRLMwV(+b^ zvh2RK(FYJPCvR!uj`s~tp)2ocdoxU=Re*O{)Bsuse9ch`f)so7p6O8-Ca`sH8gGR zFuIt>Zd)L&_ne{C%%Ie*SIC{um`OH)FEF*Uu60`w$wH<3R5Id)-mY``UHraEMNG&N z1LE@=%xClQDpI?8_1pDybpR-{e!4gseuGV{J9~u|#fr4ktR(VdU+K{wTt>{RwWAGZ zof8gYw9xrosnxmj+9S&8kGCg-$s?}=LepjSr~XLzeRK7j*{L_SCnijGwxQ9)uJM_6 zJEnO4{JGA_U6_YQ%-rr_bmGG3>~+IBr`cZn;W%Gw4H)`kV-4v=+$#BM{=9bezn2l^ zdM_K^#q008%GL#dp(v86lmuU~94j%TU+%iRJL_?+n78sVy@rg}m4rqv9%I)O_+KS=6XWvXTk6I;Zm5mKiAmG%X_wkpONF4WFVL>kGo?~VNlUFxGfh>gs=X5pHGIt zoGfQwefY2-HU04Zef*@P?pGpW2I@itcuz_2nfTPMu=;WfPp>Tgep(t7(bYRD0h zJ7~Z#RHii|tj6w1l++!TamkK6U~azfjxjF;$hKo|VvEml*v)EZs+QiX&w!N-k41Vy zwcf^V?`Xi#mCz%$)I58T3EYDpnXeh1r{BdI$)wZo#w;Ef`@#@8WHfep(dpt+HVf1S zhx6p*->Ycey-L$2=&UC?J7X zD@5>=bZ0|H%Dr^XY|SN1m3Zm!jEL8$rf0=$GAMok`OpIyboyc2ot8hh(2xPSEuM*! zAT<03fcV!?7noPK92RZ{kqZB^yJ%xwe4USrv1(w|y~P`SNtjw&o}*S(dU;qrZ03a* zBb1q2UpD;&bQ$RT4;#m%yd%o7!=r=gF(ut&S1!AK_vbUL@B0RmJQN|=79H>8UUo~9 zIyp(rDFq$0WcqVxTfI^+*}DzNtDg}(Rq3Y6LuX&?lPKgS%R{I6Cyi0V8&8Dc`s_)q zbZI3at7{yHU$_j*-CjJGcLV?;;0y^J=LZ;HfLMnYhQJKhVC+=F#z#&u4?KfhSTwITV zN#on#SrSWCnE##H`BqL!biBxLUcTRY|6AlQmF)WuANnse$EP@idExohIN?5Ce$1O! z8Ky&NTQsVJmLE(WVy6;QCFN(?|<;OY0C7+8l{hr@YRLk0F^6dwJwA;bH zv-{`MKP@f4>`l;X1O)Z;^nMjz?}4DMd&CRIH;Lhq`NCiU+~*}>cYi?Z3d)KGG%{wQ z^kLm@gpWOl@5m+oo*YzU?iZ8AD%DX}=L7Hm9v0>$Np>zl4|~eWdcTq4*9+CM99fa? zH5p2DQ&?5##w%>Dcb?l)dNo`kajkc*;1$XlFjdtjo`Z%5&*;`EL`0h2F$`4G0Su($`fRjnBI%f?c9NmIH94<814SYb)X%C=l$%4e)@M=Zv8Fb~!N za&`a5$=re_Mp>E9D0AlqZ#4OYm;iw1Z$Nu&Zf;tG>}dP#k%z{zBtMGKh(n^HZc||8 zZ$#<%oPYnde{lW}2}HtsYM5GvdZRoH-dZLK>(@2usA$i!_9h65TEBhq*OoWy^nBF- zt+$tTToC9VU?Tx%H@C*FE-aDTQ-OY;va`+d?)3Tjtsd#az<^lAPRHKPJ>9ET<@52o ztDSh|SpfWL9G@eevO9e5;>_-FoBKA%s27=PYIA?iKtTzZ4#NfUo%`VGmpcEr;Ji6q zP7Y##BDCHjl8*}woA@xU{lI$z8}EM-6BDzl5cLgCGH8F0v8}Te9z>D!`$t?{Ty(*6 zJbe19Uyj`|FEmCU{sWBuRs&xl8I3~=LC=J zwb=WaWpR zseBkrr$+;pu8{XuR+el10^EJe*Q?G}uqRFs(_0GtbU4FPDw3(**2RjF;#Qs}wwTgT zlPc53Ag|rL{5W&#C9sns(>~qWXMAaY`{t9a>6X3$#-7wKS^Y>eSM5OckbF4~4T9N=8eOZ&z2 z8OGR9`_>9VwWiaZNLB6(qeTOr`+K{=n|SW|C44}>>eP2RO@~bU=!VVo zPcsVr;D@(iEcSms0%Z;j;I>~#Bpi>FRKK7rAOMR&>sS!b4HVF?A7`>ixy&ahw-N;$ zFhF)zu(*v4AU2Q6EzyY?R{mxVMsXMtbtoUc@uX(lU8+GJ;Bz+a)p>bxf}A@Kj2+lB zEhXAHTK9**1kC#HstqX6Hwg9&josPZKN63{(SoMPTHKQG^%n`nG(7;JR;QhwLT}uu zL%aWgC`~aEu<8L1W*tNT*)>IyzV_6$kBr8yc79z2;Ulk4zn=A5&FLO)4&uUgPpYs9 z_&$`_ZyphI_Y3R3$WqD=JdU4f#ud)(ix$aL$SnBS&i!%l*FE*JEkAGnNXqWE(h*R* zFUz?TzcgQ4)r@8{TTWqx9K!(=tc&6%ce|bp<|3`q9k$9wfdT1>)n?$4Ql>WX5}j)@ zXfSJ_%EBOJsqgYqh{t8UM5)JEr|UIT`I%beKp9k_<#apP-x=SMGRxV|+dC(pfu%h^ zB=-UUPXfut#s<{`LTDc9g%3E_ImG5lH{QN={+6hE=>tk0zV5QNA5Jn!xjW$iwOoVQ zC<;t5z4t~nvuKsIUmYL?7;Tl`nguwNzY}SdrMR$*GFR-Gjo~MB!~Q>9xIMqz6b><; zbXaGwMXrWy%6^xr^!}o|{Ns4pGpL377lr?H|NKc3OwNAw>|%do2bw+5F99Chn{Q2= zTO0gC(tCCpEQ|sxHj)nif>8e!@|<voqx89Cq*^<|+AVkz~O7{E7O}G!GP+=bd#;HR$(H zV0$)uJnnx9K$297ofjUYZ(7dw=Oj8_H=;pkKYj*|3%pEUvWBXF-!~D+o?Bg`z#4`d z%uX$ihz_^;@yg1|R!2(NA)etH7$fn@7Yx>qeJSWryx>QZ&)jrge4*tf28TsI25>59 zFfp+=3v=_&oXf?n%%|(ndU|?xbN-^hUZ@p8Vi4>jYNU*MNlTBGTVIkII}abB7jvGC>kE%o=y|?4XK@~Afw5JM95ZJT~rnT zk;xsz@A+q~*87Kqu$Q1`JTz)C9LvgFjwxWLCe4z!ut>jdj9MkRl`}b?vJk;BaUxJ< zCQkOi_E(Jo7k#LIjsdmA6N!nv>MO{9^}3sA7-*=i%5?ZRWI|s) zd-^Vd1`!E;gAGY1K!9nSI`fASc#IGnjI$24eg$rEm66iVFXLrOdip)UN=`TZD@ATo z0Lmo^A<=`C-e!Q{y#apDIbBj+I|Xd|351yeGy}IyIBiqMl$yutpN;0t;sxD(0(_D0 zK-u50M|-ldH~@1}0t5u0>>)9S*ihaqPpj=RvpNHS%nPP-oF0S0P_~`a@HFHOmo5Tr=ZI?3yvjI0u zR_aNpy`ZS@T>zPq3ufWGOaWV}@d*amM|ko-&=AL36u=_unw{^iSqy-kPjTyAldFFvYCi!#UeS?+zt$*!CHm$zg%{)+ zphvE8NI-wguPMqvJym(|F)u(#??oF0Af}iTyn!E{tCF z@zzAiZ(!lx%E?6r5%%ThA6|n{+UMF@K_;C$UU;aJPTOB}@O7M(>?4CrCet`!tAQm% z!bVC#7Wn^DoRrts(-#K~R^_-xH9VgGjk(HUD`W*eF*%uxm=zk>a8mzRglZg5jSYL) z66g~chz*-t-FwJ)f(8TYIz@}qWFS0$n*tIxHLKjwdlQ9Q$L&^7VC08u-k!d}uumL< z6+mQjIsRq0!UTgsWM*~sBe1rVAUcChJmjm8DfV{NKPMmTVnWPXwW zkE*w3Wzwm<3u0EcvF~=-7{pNg3#e(E83w6WNAgOt@#{~}2-|Lus|Awrk`x=u4xX`F zbhPrdf@tL$J!1^#YoN}97_OIkhCJ9EfuwCy+y}%z!%WJ-W(fas0sh58Cxq+(J@jmy zoS67MGc%JR_NwL3CKu?jZxz3FcX!LDt1#YLDj<33(SdINUws{Q%M0{%#=?fb)nn#A zo4xga{${enU_i`cu|0hU_Knd@!rO8+dijutUVBPnB`QnV{XRav_i1a4 zehi0cM)B;x04it=zKuDQm&(HRBs;W}ln-FmySw+5@~2-~A$||0Ltfz1vUahpLpQwR z1&k+>Huqr)$Z31!aBb@M?ORBh@<~1hKR^GP!~6F<0`x9F#qLaJhJf-zI;a3V#t+2R z8-hC#Ex;35?++1{0C1bDQRnHf!952;3XsJIVW!XC-meqjZ>wdezPy$y(CvRv>-JXK zo%#|HKf#%L&CSlGSS>PD(K&FE8P}I*)#%30>Dq~pmC|Yrkb`3* zBWJ}d2aP-s@CLDGSESW!r9VhXT#SF*{XHh;?$Z;YJZQtccz9VEZ@q7eyJJbwiOmfh zcY{dNVGI@-2Mol*8&m03ZBE<=McJ-;lkSfp2aHZN+StE2K_{yVe}KqOh&jlS$HZInjd{{*R`}f&6jJZ zZRg8>$Ua)gpwiVix0ew8xeZuXkzh-$qvQOGB~{4R4rL>m<48EwKG|(7D&Q}*aQm<( zlHPO)(&jG9{eH88|F2Na84c{E^QlF0M@Crm>4K8cm)p6D#vCAVj826kEAD@YTMXPz zT#b6a7FWE|L&&h9X+*8^^5LV&Iy3Hztkd6(^RFA8nUzfe>q!Y3wx+gL*Uao5&_hW0 zY?WvxSAoHWeF7VI5;_RO=C<<)(OrO{I6YO0xSDd?g@H%}<%`wFKrBIl8TZsxM5d%r z#r2ri*BHdNWY*GLn=0E0%m6JoOft1+s530=Q5>%m8TR_Hw=}gUu%#0vreAjunkXQ* z1mkFp%l_#$DJ#*c&@QByC)$06<#D@>;wXY4n!P{{rWU> zi;9HLe6U;cEMie$Kx<0E1s%^pCna&;Lj#&e{;R>3KnMgvStekV*(@4;4}+K4wc@}&0c8xzw{hGV_XSn1 zWvg=B_5+cb<*xW(LAPsBAnP%x?_&cs@-u7lo4-6C=&Jumk-o9F_X&&zzMOt~bRt~f z+O6)+1}|$YN|R0W27>cE2)YmmT7vWlGD=-tM7+Ka7P`egaKkXfIaMVHMo`5U>!paduA{Yck z9p?0szlX&IOq7}?X^b+xNPVXZKx-jdq|zOgO}--2P0 z3cP4tELE(gapxd};^9m5s;s7)Vz7qO!sOJ&i4sfnRE0ZpuU{5g#72N<&~D}?WA0Lf zD!J)U0gCBx&gVpxoIfi%Jxu^Mg1|yFDG?mB~bXBUXe>&=(%Ii@P1+^!H$^gV{7-NPMkB!(1GwROI{03hRzBB_6r_>fz}#2L$wiW8Cw@ z-*xw((&n0KBfs=)tRCLaq!V|sSiEr#k=EAz+x1d zL3znv4PG|Md(*g`M8>krn|q$R(gx zy$k}GRFbWPgT5X*rKlhR(p?5ZZDQbc6(g=%#>f0$!&}<_Lthxn9o+;1No9)a8-Mq(gO5lBaKDNYDG9=^r8LlCuil!a7nI@;jwFU+R4p7^P)#c;YV z<+*`02_)dU1z6{)eUIi%22yo(EHRhWDe=)p9f4q!Dmem#l;kabT&n4J8MnS84+asp z1zB0wr5imWR-Af2)+iVV`Y{Tbf10IKbqy`NzinH(ZXBnkq)~$Xzpd_H=K#_3_iw9b z0KGfAxvoE#XHiia67}-(`SqR^)7i~s9i0|RtGIsk2xJYd<+_v|?;H_u+dSw=6vBD3 z!gd?`p15*7T|q&?_aH(}M^qd#zAt@0Uy8N<0l6crz(Ww_NL?(p-p0lj{rcefoP57v zE9Xd&l(e)LUe!i(^PiT5p6T0<>l!U^RZA-RF0IMuvWw{(tl&S|--~Zv)t-0}zIHk*9GWEB&ROF9@2%jRu z&UN&k_xxG6ptL3`A*rwjGc`;mCTpO~qCiZib6KTfXz%D8CC^naYuG2Rdkyk;-fO7+ z0%?M8bm#>INr4KnciR52qFTAlL8iCnyn+==(CluK=8dmqX9e&_>@0#47A2URr7{A0 z`Xh4?1EzX$swJ=L4av%HaYunP`=5(Vj|2s}-*IOKK2<^JWh6r^W#(n*1PuMcB6;!> zKQE2UQ#O2G9P-!gA7PqN*8Dd^K_rMTwd-AW zn3}w5;LTg#Qa%*fU7@-!f8Q;Hu3*WL&rv+XT8Jw-BU>~-Bc&9}qBAx*yBeLSnuP!i z8gRY-myKahBOj>z%H))tr#2&7#QRTu3L&aHLtk;o>;H^7zbiSYuu8X-Om+L0lyWM5 zs0=Cp8cp%}jTLJ8KFOP2b@nOL<4L18FC5+ML&Fymj{H{LI|S5!I#f@0hFwF!jifw` zo1t(?4#itmInS9`u>JE>9y@Sm_?<;^G=;Q`WNcC~uV>*wxAk9xy$-(mX@_Q}D;6+? znO**P!zx7>!Cm}DQT7h?&F4g*5!r9XGVgr1Y({T4_%PSf&@;l2@Yc-$O#0naDGpLj z%-2mYu3s28;nFO+o4=7)_56Q~bMMva1`b(ds%C2T=dZ1bc(Gk5XE#lw#B&n?q4Fim zh}!iGu)VG%8k9|cx*zlU3v!~VLmJ~mIB{)@Sibo|@%nqc6)pT05-F~% zn)=DHq_6&j>lO->d=fSGwOs}ciMgDHhN%i@ov4a?TDpzYvOhXM)v0_ z%)BUlIH_iJQ!dwof3dT?7JPWa8>Y~u3b|_fNYTUI_T$+|ibxb=w~6GEK&*DU&w@Yb z{!rg5p|`?0`Cu!Zr{|rXiHdlnyZ?xoov_Z#G?3ngaJ7m*v!MeX|K;J3a|F|z?jBvP z+)dN`fpXf=ssCnHWn}NZiFw!kAl1UaIgaj~)u5fbGbOr?mh|g`++Nn}4|FhHSBq@Q zyro!Lj?eIKH+`f{Dh{Pxes43j(kW<3jv~pPDf}GkNg@LKB{xi9Lq&KJc7C#;DiS2D zKK=pzkxxB>-7`28obeEft4v_aLzqQkiSSB%4$~cIe>zws<)W9YQZjSaS|9o9>T>QpKHe>8SaHbRZT40Q$Ts?V7su8hw`CaE{T{-NM3hMeRQF56omaosZb2ea*+o^1?-qDs>OfG zWpYqpd5&y6YV8Fjg`D8y_d|aAfI+G_LlSECp5nP^=<6qaIjk94)dl(G=n>rIuS|#u zx9Nx9cEi*o*;~JEAHz5{9z8A((fc0!d?JDy)1cwtOKkXs!c3SD6#E5%V(uW|vFM)m z4$cPX24Xd|lR3JOortoVMRk7KK^-hOm0VVuQdc3+8h)T?rlzNf^HpRB^<&);?>6ml z0c+&EEi?a+Qq-@IWRm&uv{!DALPas2_P3Q~Zc>R)?k_v%J;lH-7Gj(j;#+KY=qq)xA8HJ z&}r<9gqzH4y|Ub&H0x1hvX+Y-$yWu5trIO>qPohMZvm7ZQvQ5kB@J|?-NcMg6^0s< za)N}1$Sqckn8ne3pFBfmMf6F}3*zUBOb^7Eq|qd^vsBT&%eU_tl(iD*`JQ&0Ci~X$ zo2#qFrfmzSH`hFiZkB+ny*qcc1 zWv*h~hA}z%JT!9V?a(u0Y6?|C(XflQuQyIo&QO?ophc(t7Ny}22L-yA|3vIi`ppbl z-D(E*TOOs54Nbvc=swF3>T0wVkKw4(1M#~3Tj%wSGm=Nq1l@WzmwXo=cRmS?;A0sf* zn;J!Y62cjDDKNRbSK{DFVSz?OTjzcD_PHN%oG^JmgraXRvwXAM_EtLFE%=ljkM(4> zyy-KNPK@RbhXbpx&K=%c+5sXL&v>vEP1S$rdy!1?O?*I-;=8)3H>6jP^h?A@H@CcP z*A&Pv3MKJ`Gw!*)Bg*?@_!B^k^x5L3b&a);>mPj5@|N518b;{UoM*xfnlr*#vvF>heu_fya@}qs7U$Q#1Bl2$Bp7GkUYvi zElt=NOw0q9^OpT&AFLK~(~g=sb#&F3Sy70Ve|t=@lzwMlPy&Coi2ly!y_kkfNo*{h z?*S`xpJVQ_yQ_@e6>44rzM{`8ahb?;3;x%(7VB3ules=qlX3Jo0+U>_C0>lPW1^k4 zxC}q0GDb8NLx}Ikm(#E(sb9Gb9yj=VZbZ znw}M$*fxwtyM{^3G$wUL-}4zI$h<<{eO!STt9O_o0DED=DEiEp z{e7Du4}LD;osWLeSQ$DkSm7i~w_TGW(sq|4{d2Kwqovb>!sGvDXiQ)QhoB$Ns!E_V zbIWuVEx(`cNXy86bz?iIKS5;R?%P}iBkhH`c#nqYs~Dr{zhbNZ-5=-P6wB&+qQL$^8o_ zd^&>M&O+v!I?FfSOgxx_L-~t!x<@g@!R)&hx=%}IqWMq%uk9eVcxS6nYniss1VuwT}3}!(`78de7LBU!B1S-uTjl%!%6QhC1ZTX?_ zr_lxTlRN>QNedm&hU$B=eQ$WvHY)vYME~E-)9}qfr2>&ItBJ`Rn&)krQofg zx=~w^|9}oXRGM#Z?Lz=URoFAOb_KNHZnTvRZ;MjtpK5&Gb)W`-OI!HnzW2a_UEP&v zU7lQX4(k#xqBU7I4Vp=Kyt-hiJ){h!aZx5+>qFnIeT5_VZhjXHzemjYDbFhalYhC> z8PSTyD;RxTH}x4=>Y86}$gI0*bEQM5&0R$WrJmfDdAFFL5Lof(^UB&wjKndkNA&Cs z?Ftyi{DgFTZSsW#X#bG!;qw2L)@74{dNV4(AOFi<|CfvZ|0`g0)nw4W6f>X$hfj&x zn#MH3WkHtfamH?pnL$lP6wlP%djE*Pb%LpD9*X-bc{5&`)S^dp+Aoq{$p0Kgq)GqI z-L1}8+_@Jmt@6{5Sn5oGkh^Jn)!dFT_a$%S0B?dFy#OkXW7&%h&8&j#$mF@nAI|5} zv|vBAf=~JB{5cGa`vNC=<^p6i0^W(`m}GwheuEXv^NVZRQN!JXi|Jo0Jm^VqlgNKX zd6Hhh1>|Q+yXeDdy&BFMo}RiWd&TDl_S8kfaeFZ_Ufrgsbu20OEEh*lKDQciWL_5v z`+kZ=;k5lLLdP&FHWq)vp+~FsPNJmc3nMGlkE3m0@fy6%UcJ!nLP^+OvK2gDDAllL zUilKzOd3eXFWj4FAAa{q{`40!6Lh*T2d=8C`~@2k%5A}b&!L`z9aUjIm1;9PHVefo z1;wSGqoc2QJ`a^}yjN2v5@4p~MK?0C^+YDpJl}vH7kzWb3tX*ebxrJt8ZQ7v5r zLLco@WFDq|^8_O(?FSZEh3TbZT(vFQ^SE#GE(&+KwuHRy<{7eBY(7o)kS1Du)%EP6 z$ddR1E@*dQqc%p?(xNw9Wl_Mw?W@V;tDgI&O455F2q%h_2^NHN?7Ct;<^luF(RVWK z`1+lGpiDIm<-)6yAEO0Z(I(%m z?cuGo7bKv+p1I3jNn#i;MZrdgF?q%B<21=7njR6TQ#FNEN|Zff(R5ho`HocsZ^3Z3 zN#|=6!^V>naD4U6_wmcA67KC zq&N8an!!l7Ng*X`hc}^B!}m5PD9WGhcFt<(fmiI*pAy)*^gPrZF`o(4j@L-GAw?v2 z^z;^Q6sOkDnIt_BMcOkS!gMb})87|5-eX{7oYU?>zw=enYbr=A_?WS;z>(8)C9cjM z+pK&uysmy-CI5>ae8yWELlYOLHBsYut{p5_DJ=WlH=~vMa`Mu*@btJGk%I7hF|FAz z_+PmI8=7~?u`glGB%9V-Dg-K5wb+>^VAX4x$YqQN2C^zTnh>f@Rye)h?>TMQr?4Ro z2F*H*W>V63qqC|zalVCn@6S7DosR|XEX7Gt2vOX33r={oBxxDNvFS;PYz0bD5;y*h z+CpVE_jm9)y?mO|odD9YgHlb6+YM2(d=n^AYQb>4%iB1|WuSv!?wpRD((pJfVNm0& zVGCQ~W(=c(8QoxYz1gs|(U_r8EBSe7w)%q$Ljo^K#N#UApMkacUpVY8bSom{VX*Dj z&2ybQ9!-08s#q9<)WNHfW-JuK+DqD(HG(WQZ+E(EZ`JA4-si_n5UXCsPJx9x>c|Rz z<1aV;;@C~}=zaYD#v1!`m7Hl*@Z|u)Q!<9G?q4eRE-DRi%PyU;I4|j>cKp*Ud1s|8 zkwtFdCk4i>5g(^hm|!xn-OzlGh9EQ=!0IZ8Tl-Z@>~qQqPYtTIJkoP~?` zRRjssRq*MbC2G8D>LrfX;B0IRUD<0QCoa@Ie;;Pe;A4eAVuDU&F*(I_CLj(DM_4u2 z=^OVa!|z>G7_m=vR{j)6KCU1q^*@?CN%p`NR>93w|sWK+Ju zCK!Z-rsh))cr?tnL~>P{W=9{Q>^OY^i_KMXXK~#4iKo5>d6lJ2wRmb&gFLVS;fi!9IZ(W&)E@<+wxq6SJ>kWJChbJEkd@Mg-5l|=apmQ5(` zB3t6G&31Ygb8>Lqf)Oh`?3+l++kSrc?$Z6Fta!T3PozKfK>x#o!A+CFv~G*o<>O5%~`20RgU=^KOJav}bs^wZkL!vCI=B0t0Qh~##c!tCew5@ zWKQ-%hjj-B-Lb7V#n@jc4lN0|I6DqTgfmZBJK%T(N3IDS50y~0x8@OP;Ji##c%4`E zH;1Yn?2Hpq67b-nSqnGSvMH^^Y?4}4+g`;*Y_QI9a(po~ZRy8XMZ3k)NW%;E-c+5P z1YSf}2E0ygRw8?S9qOfrX+2Y94rR63qnA&d1T{Ub1Z%f<_;(K7wNq?jl)PbO*a$w6x)pm4{P< zw#S*zYh0e<50lR~SQ;BGvqcbhkxe_%yyVlEK4Yn|~&h-qV zM2ODx)kE#zke2kCYCB@Z1U>Y7m5|>!fhJ~llS|)+N1dnnsd~ug*1qX?Jn`3q*Z0nsp{Cu zQp?6i8z&-Y)8nkoM}{rh0!OtYW(2F#oqD$kT@UA7z&4(CzY9GFrl#V0-A})P-95N` zk9R^Rx7`Go>n_$UQCK9H2-xWcjk~+$tg4wo>KpVSO~K>1!_5)H^2GT1)zX}t%x>fS z>zBM&&)fZec^)ix3@_2*MdWJ6lV9xTF=*A%DTjyi!v7X%+RR6T4z0f25QI5lW?|tQfl&nwDNwMYj?!#I~`{ zWi<19w5YU@6*3>tOhgJ-Kl44>i6zdjWw6S7AKyw-`X_|^a(!D#Re5#nHtM) zN1x#c^7uzG^@bSIhf*DsA;tvH{ZQPdmU9CGq0a#ewiG@Zx!g#T08MR@fpVvWIJRfF z0SM~!cn%Jov#z7HflB?WUYW(B)H;vI)(kDx$R&ES5GvuTqgu7yb>g#y*1VqZCyDW2 z6^)lu(eszT*VVG?b#(1dIfWW`$%=~VpC5Tx?J-Ntyf34~blg!7YT_@k9Htx9vC+dg z-ibA&S6xZ7aY{oZ&YW$?X+?q=3SA4O5P@izb$qJ?j&t(L!dH zu8tca%r*j+oMoViPI&I&oQ=qm~vm z==a2nIV9Uf)U$&>e^-j^&$8n9&r|HzhA2dXg#?ntu_l?32b%}Xkbk7X7UW9~5~eO* zVeE?7vMbHgs;3aXSkhXXE_M^TxVpE${7reOQ)i`1Ck!*enVMVEMMCJhpI#AEe%pQZ z>ogf+#cs5!DlnSUNiQZQX8$Z$JK9o<&u}W9apx$zH6fIW*Xpnhi!bL|ySE+LH07PY z9QH7{8yaJ4&wQ8Ap2SDj*X((M&uM^taYCQrZY7RJ=8Y{0`Qold)?aRlceD=eD|3$5 zqzZWk6MP5Vm2Oah#3z=Ol)lD%3ygm7^dm@Zivq3$nu#`QQYm~Q5Ta)1}k1} zGKbS`o9!Yyxn5ctlE{{{H1|cMa3@$LaJG3w-sU@t&?9qmRVQ=*U>h=heZ0L9h4G1! z1r=`&cdosioz3X)?!NEDNjx{TFtQuXWUPu)qJx|#Hmgx6h%T?yqc*mc}_ zCBV$;y*O*lYX^e`G9-{kw>_L^v{_G$)M-yyE4H0kV~h+L)h1>wlEz1jqP2%E#Qf92mzMfSBywY9-)acFe6w4}LjC#xFm z&Z8+PRx=4!IrNk~S>CqO(RjR<(K8gyoMyF?5G|nZh_gB4knf*gbJ4MJHgJ7@vOfxU zJL#gytK`7P$9K5^+fSYEqEw!TM8IsC!Xy87USGs_X;e4|2P=c71Cw+)Myi*wz9&#d z26FxB2|OIZLPzFc?L^!wU(yg-_LaY34}+$eBbhBTt)icq>mB4`K z@Pi6@9L(}TN-)o7B z1BM}8wRan`04lj^u~a6bWimp}<7b%}Z-pGDm(DJPFEnPH4{{3*3$t6d9eV2J5U1ZD z8-YbMCah>&7nMq{V)(~K9H0S*Du=bhyeIR{G;-1&Ork*~QQ+iv!=YXM{f1NH{mpyK zhM=chu9_o3|3I@hTp^S45{Hikphnyfsv~U1m1RSEGd9!H?-#=~!eL-r^_shzv87I+)>P2Q!4 zvaM=vAeN6$E`$d6do45bdu4>{*}*pkK^|(Dq?@pw{l);T7Qa&$m_a9%QLRCKZZA!C z4*GhcuO+#xGJ7M19kk9##){f{HqZRoz#yz#&57WB?Q}KC@6xhaOE$RUKtTyRReTCV zy-3K-pNv{wUWQP6i!eJpauO^HjHBYU)xFlLo2@ll*_ZSi9v)tstTuMJO6owvd246a zc{?Xq$Iir(>}1mY(ycrttB8$;#7#+P|Fgf7OO7%pBl!rfaEi{E8|LxHI}#4WT-$b& z;Bf1>V~feZF@-D3F@=measb%Z*PRqjIbQ28Rrb_X!4ft7S`*Dx-Owv@|uGv#KjWjQ-I% zlYsso#W+Y5bz;s8%DI|xsPtNDvAHbAfmD7+w?|XL{+uLZ$!2Li?yO)!g46Dt1O+HO zarmhK>IoAk+UiR-i_DoUU_Cm*cB{4U1(uImLK|WCT9$~*IWiHRequ5zTaDRpAV(fO zD2^jHU`w*?&al%v3I{l*@+d+4;P(`|T6G>1n81X#e;Wjadaeqd5h<&dUd;XxJukgA zL|Pw7x{^2}SQWl#wV{%$psW^Mc~7Ua;R+s7(iL3J4eXF?2uPj=|8Z>DuWelwWuKAQSb*jT10G6#5F8ghj6Hn}h@^nY-~SRB;R z7s0(AQ~*hIw$p5Sm|UcFYwRNs?q=E=MGO!~jf{751+Wnu_o+-4SR*RhG(u7$m<50y zur<$IKJ428M4@-qhW}*C7RPil&7tl@4iO$R;czxljtJA4KKOXGusFJDGr0rbT+7ie z=DI{4c4*Z$_Kyq`Pu^iMInUwXnNLMu z%AdU|cd}|Nf!%(2|Mn+Xy)pkA*%Af<7D|aCn}cNrwK6s>zOpW@!{a@?YK-p|Zthb6 z`vGRtF?zi`sHRiS3PFBS+<@LfaniER=PLY6nVM>f8f15l&Ij;Kl(pi?+@ds0j3HmD zR^_hj@;THI%$6KQ*{(1`yP^-nF%Tb=*gr|Er+~X2Nr&X9E5x3r zpuz&IXO-p_<_wr=V7;FJy-I$&u*X`<;d(#gVq$axL|xivPL3`H#g~U3`YuDh|0>#K zd}0i&DLtvNH4XtR*))H0D$OA~Cr3^3%C*(7LmY5OFz9W{6KC%mfz422o633zIl;Fe zM&0B~60InX)mV^VrVL@-4pxiO$sVC-E+ldG!lP z44|DamOt;EwOgDl6C)0y;X*43J-Al0r6;zs9^7w&2_iIhTmY0<9)NCjU(%^dT+hmK z-z_>Qvfc{;tN$o4k2dQ%;n1u=T%3@n1Jrl6!i=Dsu6AUa9Vym`luqO9}xFq7P7Ix*m^WXErXyq5ja=6TB1*s8DOijYWv~444B8ZP4yFIwFo2` zg3mY+?Bkcf&WE@>+F5ohpZbx1c}C;NAK}==3z%r6)16O8*ct~1{N!EAk#X^$f6@Sa z1~xq0^Dj6Pi+#1Aylii)KG%sa4P~yL-41dg$|_{vui&mr?X>Jg9~@*%M{@y@+3sR= znz~M4iU(USbvSvrYCy6S(1RjFeXwOSmFRkV%S6+0NC$vf5ZL|04rvF_hyRAHu-WhO z=X>!Uu0AU&O5?(ni3&OQ@!{a)T=A~Fx8G6}&b!d(31L7;%h=gVF9!3k24IaF^y(GA zOz(y?vsthaU+Te3d<#ihALq6YxC2Q%q>Z`~5`p!TlG&;P3Qu*h9`d<;eW%^!FH%?Q zMEmtVA;=+N5xa}Ie7VGq3tAbRBEniz1bjqyxU^Vv3I`3fM$1KHx`Bu+zm znSd73(Dc3q1Hh;&IuSGr7ODFmA*;z>#wSdba{=;epgApxoQz$lG>Wcg(~(FAa={ND zmjSB**u?PgSgPfEEFwRvJ*VxayrC}WI1-Rz39 zo{}fDAEQ{h*0gSEmk5y~vVa7*K_6w~MuDk2=+0OF~}vw`6YTw?Wv zKio-xMF^Z5+mjVDQFFMTU7hp$!qJUC&CGOk=@{8++&yu$v!sd!Lnyrg^8>|wVWM-t zJGNzs{A$ZrLj4WqR+Q6=arjW%q&WYkyW8v6uj%OM6oB@0hOTdmyj-*c%G`64%DA^a!U~ zn@v}R6e^3!5|7rE3Gx}*;~F@^(Q(4>7c|*A4_u$OHyg*t>|7j{xvyJYKbNpwrlt7{ zyn^ju#s6vVT%X!1!Z03+6`8hlbVgeTC~CPlavP*n3YY*=9SngMXc?eD9Sn#zBE*Jk z2o(hj2y!V!DJ{xvC^w;{fdmpNrCb7`meP;}5`rd~ghEIHxj;C_-TDvsu^*BzXL4?{ zXW!lTdG@z+&iZR5`lP`L>aqkXg=pfYU@gSpE{yNvoxK{GIet175MQE^jbjZEcj+j1 zdiPGr500?7$hH-GQjD(6fK6B_6U{X;pjM zM*ktz7M9AS+Pi|TA@<4zuT$xm-HxWjXTB5)wpdh9&ffOsOWDG^Utd$9rVjw32!|p7 z2*Et`FCy$GE367m=}5V&ouA>yCDhOo4U%6ai{w`%9_RGBab@n?%<;!I>jFqM>7B)*oQi&BehH?3l z;!bZMvqrf}R9)O156R?akd;h@qkZH@S){f~a?0XlZNq6xjm&%$jwT?9gdhTF%!$JR z>gO#WW42YX$V#|LWf4!T?fvZ{MbtIZ`mew!i?z4lDch|)A3YlViMyWE4^Z1Zm1cM7cBra9X&mt z0-sH5KTC*Lu7N!ZY4Z%wJBAxcq)RgmoS0TZ!_z!_$rkfANGKpNEXxeL)Bv6;o=hf- zF7)}0l_B-IemnKclx+hbsgR(hSxJ2WJQSpu3NNC zQawcSZ*9!+Mu3kpWJCqX`cc$h!)LYtQ>*dXiLk<1? zDFnZ)XMc#_$l~+sc6Qw2V{5qf{w?@+o4mo1w>jr~!g*YK*se#gT$L8!9o+tXZ(&SV zJJP?HOpYLMjz^Z1IS7E& z@82A78d3{557@XSY3G*!Yt?(A{1U`*HL2Q8&>L}*A~bPvub>3qHj8)tj$`05PEDg- z|E+Dc-x;$H{13chT?jUqGZ(=FfFJlIEnE@|V?JC6tKmhdmRxUqFb4CoFf=468kWl( zoU> F{sr?|$4meK literal 0 HcmV?d00001 From 277364ab61fd901070d4907c661a60ad8fe5edae Mon Sep 17 00:00:00 2001 From: Nick Sweeting Date: Tue, 14 Nov 2023 02:29:18 -0800 Subject: [PATCH 05/31] remove extra files --- .vscode/settings.json | 3 --- screenshot.png | Bin 42845 -> 0 bytes 2 files changed, 3 deletions(-) delete mode 100644 .vscode/settings.json delete mode 100644 screenshot.png diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 163c9840..00000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "python.formatting.provider": "black" -} diff --git a/screenshot.png b/screenshot.png deleted file mode 100644 index 0dfcb530cce8a021b84e63f3290c4c2fa363b4bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42845 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 F{sr?|$4meK From f5c2cfcfe231f9d42c502e74f17e9d521ffe4b26 Mon Sep 17 00:00:00 2001 From: Nick Sweeting Date: Tue, 14 Nov 2023 02:30:59 -0800 Subject: [PATCH 06/31] dont alert on statics --- archivebox/templates/admin/private_index.html | 1 - 1 file changed, 1 deletion(-) diff --git a/archivebox/templates/admin/private_index.html b/archivebox/templates/admin/private_index.html index a95a7716..b60f3a3e 100644 --- a/archivebox/templates/admin/private_index.html +++ b/archivebox/templates/admin/private_index.html @@ -88,5 +88,4 @@ {% endblock %} - {% endblock %} From d4b0660b8d48046ad8b15c96eb17de1628818315 Mon Sep 17 00:00:00 2001 From: Nick Sweeting Date: Sun, 17 Dec 2023 16:04:02 -0800 Subject: [PATCH 07/31] add hint to use docker run instead of exec when catching root error fixes #1287 --- archivebox/config.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/archivebox/config.py b/archivebox/config.py index 775be8e4..0ee74922 100644 --- a/archivebox/config.py +++ b/archivebox/config.py @@ -1113,6 +1113,15 @@ def check_system_config(config: ConfigDict=CONFIG) -> None: stderr('[!] ArchiveBox should never be run as root!', color='red') stderr(' For more information, see the security overview documentation:') stderr(' https://github.com/ArchiveBox/ArchiveBox/wiki/Security-Overview#do-not-run-as-root') + + if config['IN_DOCKER']: + attempted_command = " ".join(sys.argv[:3]) + stderr('') + stderr(' {lightred}Hint{reset}: When using Docker, ArchiveBox commands should run with {green}docker run{reset} instead of {lightyellow}docker exec{reset}, e.g.:') + stderr(f' docker compose run archivebox {attempted_command}') + stderr(' or') + stderr(f' docker run -it -v ... -p ... archivebox/archivebox {attempted_command}') + raise SystemExit(2) ### Check Python environment From c183de29033aa6b865a7de8142e620bc3aad9c2c Mon Sep 17 00:00:00 2001 From: Nick Sweeting Date: Sun, 17 Dec 2023 16:04:48 -0800 Subject: [PATCH 08/31] split archivebox version into separate RUN line so that version can depend on VERSION.txt to get build time --- Dockerfile | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/Dockerfile b/Dockerfile index 3a700784..46700c4a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -276,11 +276,10 @@ ENV IN_DOCKER=True # Print version for nice docker finish summary RUN (echo -e "\n\n[√] Finished Docker build succesfully. Saving build summary in: /VERSION.txt" \ - && echo -e "PLATFORM=${TARGETPLATFORM} ARCH=$(uname -m) ($(uname -s) ${TARGETARCH} ${TARGETVARIANT})" \ - && echo -e "BUILD_END_TIME=$(date +"%Y-%m-%d %H:%M:%S %s") TZ=${TZ}\n\n" \ - && "$CODE_DIR/bin/docker_entrypoint.sh" \ - archivebox version 2>&1 \ + && echo -e "PLATFORM=${TARGETPLATFORM} ARCH=$(uname -m) ($(uname -s) ${TARGETARCH} ${TARGETVARIANT})\n" \ + && echo -e "BUILD_END_TIME=$(date +"%Y-%m-%d %H:%M:%S %s")\n\n" \ ) | tee -a /VERSION.txt +RUN "$CODE_DIR/bin/docker_entrypoint.sh" archivebox version 2>&1 | tee -a /VERSION.txt #################################################### From 169b427fdebd247384de049dc7af8d70946e9354 Mon Sep 17 00:00:00 2001 From: Nick Sweeting Date: Sun, 17 Dec 2023 16:05:00 -0800 Subject: [PATCH 09/31] bump min required python version to 3.7.0 --- archivebox/config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/archivebox/config.py b/archivebox/config.py index 0ee74922..424cf918 100644 --- a/archivebox/config.py +++ b/archivebox/config.py @@ -1125,7 +1125,7 @@ def check_system_config(config: ConfigDict=CONFIG) -> None: raise SystemExit(2) ### Check Python environment - if sys.version_info[:3] < (3, 6, 0): + if sys.version_info[:3] < (3, 7, 0): stderr(f'[X] Python version is not new enough: {config["PYTHON_VERSION"]} (>3.6 is required)', color='red') stderr(' See https://github.com/ArchiveBox/ArchiveBox/wiki/Troubleshooting#python for help upgrading your Python installation.') raise SystemExit(2) From b9f25d84f3cfd55362db0cb79e85f4ea73d8bf3c Mon Sep 17 00:00:00 2001 From: Nick Sweeting Date: Sun, 17 Dec 2023 16:05:45 -0800 Subject: [PATCH 10/31] catch edge case where user sets PUID=0 or autodetected PUID=0 and add hints about network filesystem permissions being messed with --- bin/docker_entrypoint.sh | 45 +++++++++++++++++++++++++++++++--------- 1 file changed, 35 insertions(+), 10 deletions(-) diff --git a/bin/docker_entrypoint.sh b/bin/docker_entrypoint.sh index 3f3654be..9b055fc4 100755 --- a/bin/docker_entrypoint.sh +++ b/bin/docker_entrypoint.sh @@ -1,20 +1,45 @@ #!/bin/bash +### Bash Environment Setup +# http://redsymbol.net/articles/unofficial-bash-strict-mode/ +# https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html +# set -o xtrace +set -o errexit +set -o errtrace +set -o nounset +set -o pipefail +IFS=$'\n' + +# Load global config (set by Dockerfile during image build time, not intended to be customized by users at runtime) export DATA_DIR="${DATA_DIR:-/data}" export ARCHIVEBOX_USER="${ARCHIVEBOX_USER:-archivebox}" -# default PUID and PGID if data dir is empty and no PUID+PGID is set +# Global default PUID and PGID if data dir is empty and no intended PUID+PGID is set manually by user export DEFAULT_PUID=911 export DEFAULT_PGID=911 -# if data directory already exists, autodetect detect owner by looking at files within -export DETECTED_UID="$(stat -c '%u' "$DATA_DIR/logs/errors.log" 2>/dev/null || echo "$DEFAULT_PUID")" -export DETECTED_GID="$(stat -c '%g' "$DATA_DIR/logs/errors.log" 2>/dev/null || echo "$DEFAULT_PGID")" +# If user tires to set PUID and PGID to root values manually, catch and reject because root is not allowed +if [[ "$PUID" == "0" ]] || [[ "$PGID" == "0" ]]; then + echo -e "\n[X] Error: Got PUID=$PUID and PGID=$PGID but ArchiveBox is not allowed to be run as root, please change or unset PUID & PGID and try again." >&2 + echo -e " Hint: some NFS/SMB/FUSE/etc. filesystems force-remap all permissions, leave PUID/PGID blank" >&2 + echo -e " or set PUID/PGID to the same value as the user/group they remap to (e.g. $DEFAULT_PUID:$DEFAULT_PGID)." >&2 + echo -e " https://linux.die.net/man/8/mount.cifs#:~:text=does%20not%20provide%20unix%20ownership" >&2 + exit 3 +fi + +# If data directory already exists, autodetect detect owner by looking at files within +export DETECTED_PUID="$(stat -c '%u' "$DATA_DIR/logs/errors.log" 2>/dev/null || echo "$DEFAULT_PUID")" +export DETECTED_PGID="$(stat -c '%g' "$DATA_DIR/logs/errors.log" 2>/dev/null || echo "$DEFAULT_PGID")" + +# If data directory exists but is owned by root, use defaults instead of root because root is not allowed +[[ "$DETECTED_PUID" == "0" ]] && export DETECTED_PUID="$DEFAULT_PUID" +[[ "$DETECTED_PGID" == "0" ]] && export DETECTED_PGID="$DEFAULT_PGID" + # Set the archivebox user to use the configured UID & GID -# prefers PUID and PGID env vars passsed in explicitly, falls back to autodetected defaults -usermod -o -u "${PUID:-$DETECTED_UID}" "$ARCHIVEBOX_USER" > /dev/null 2>&1 -groupmod -o -g "${PGID:-$DETECTED_GID}" "$ARCHIVEBOX_USER" > /dev/null 2>&1 +# prefer PUID and PGID env vars passsed in explicitly, falls back to autodetected values or global defaults +usermod -o -u "${PUID:-$DETECTED_PUID}" "$ARCHIVEBOX_USER" > /dev/null 2>&1 +groupmod -o -g "${PGID:-$DETECTED_PGID}" "$ARCHIVEBOX_USER" > /dev/null 2>&1 # re-set PUID and PGID to values reported by system instead of values we tried to set, # in case wonky filesystems or Docker setups try to play UID/GID remapping tricks on us @@ -29,12 +54,12 @@ if [[ -d "$DATA_DIR/archive" ]]; then # echo "[√] Permissions are correct" else # the only time this fails is if the host filesystem doesn't allow us to write as root (e.g. some NFS mapall/maproot problems, connection issues, drive dissapeared, etc.) - echo -e "\n[X] Error: archivebox user (PUID=$PUID) is not able to write to your ./data dir." >&2 - echo -e " Change ./data to be owned by PUID=$PUID PGID=$PGID on the host and retry:" + echo -e "\n[X] Error: archivebox user (PUID=$PUID) is not able to write to your ./data dir (currently owned by $(stat -c '%u' "$DATA_DIR"):$(stat -c '%g' "$DATA_DIR")." >&2 + echo -e " Change ./data to be owned by PUID=$PUID PGID=$PGID on the host and retry:" >&2 echo -e " \$ chown -R $PUID:$PGID ./data\n" >&2 echo -e " Configure the PUID & PGID environment variables to change the desired owner:" >&2 echo -e " https://docs.linuxserver.io/general/understanding-puid-and-pgid\n" >&2 - exit 1 + exit 3 fi else # create data directory From 35685cf6ea44703872fffce0611e3dd5a851c5f7 Mon Sep 17 00:00:00 2001 From: Nick Sweeting Date: Sun, 17 Dec 2023 16:06:02 -0800 Subject: [PATCH 11/31] mkdir and chown browsers directory automatically in entrypoint script --- bin/docker_entrypoint.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/bin/docker_entrypoint.sh b/bin/docker_entrypoint.sh index 9b055fc4..2d8035e2 100755 --- a/bin/docker_entrypoint.sh +++ b/bin/docker_entrypoint.sh @@ -71,10 +71,11 @@ fi chown $PUID:$PGID "$DATA_DIR" chown $PUID:$PGID "$DATA_DIR"/* -# also chown BROWSERS_DIR because otherwise 'archivebox setup' wont be able to install chrome +# also chown BROWSERS_DIR because otherwise 'archivebox setup' wont be able to install chrome at runtime PLAYWRIGHT_BROWSERS_PATH="${PLAYWRIGHT_BROWSERS_PATH:-/browsers}" +mkdir -p "$PLAYWRIGHT_BROWSERS_PATH" chown $PUID:$PGID "$PLAYWRIGHT_BROWSERS_PATH" -chown $PUID:$PGID "${PLAYWRIGHT_BROWSERS_PATH}/*" +chown $PUID:$PGID "$PLAYWRIGHT_BROWSERS_PATH"/* # (this check is written in blood, QEMU silently breaks things in ways that are not obvious) export IN_QEMU="$(pmap 1 | grep qemu | wc -l | grep -E '^0$' >/dev/null && echo 'False' || echo 'True')" From 951bba52a0341958b4286e94ad1c77268a7b181e Mon Sep 17 00:00:00 2001 From: Nick Sweeting Date: Sun, 17 Dec 2023 16:14:39 -0800 Subject: [PATCH 12/31] hide +editable from version string in output because all docker installs are editable --- archivebox/config.py | 2 +- archivebox/main.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/archivebox/config.py b/archivebox/config.py index 424cf918..9f373004 100644 --- a/archivebox/config.py +++ b/archivebox/config.py @@ -81,7 +81,7 @@ CONFIG_SCHEMA: Dict[str, ConfigDefaultDict] = { 'IN_QEMU': {'type': bool, 'default': False}, 'PUID': {'type': int, 'default': os.getuid()}, 'PGID': {'type': int, 'default': os.getgid()}, - # TODO: 'SHOW_HINTS': {'type: bool, 'default': True}, + # TODO: 'SHOW_HINTS': {'type: bool, 'default': True}, # hints are hidden automatically once collection contains >0 Snapshots, no need to configure }, 'GENERAL_CONFIG': { diff --git a/archivebox/main.py b/archivebox/main.py index b0e45bac..8968dea6 100755 --- a/archivebox/main.py +++ b/archivebox/main.py @@ -214,7 +214,7 @@ def version(quiet: bool=False, out_dir: Path=OUTPUT_DIR) -> None: """Print the ArchiveBox version and dependency information""" - print(VERSION) + print(VERSION.split('+')[0]) if not quiet: # 0.7.1 @@ -1005,9 +1005,9 @@ def setup(out_dir: Path=OUTPUT_DIR) -> None: stderr('\n Installing SINGLEFILE_BINARY, READABILITY_BINARY, MERCURY_BINARY automatically using npm...') if not NODE_VERSION: - stderr('[X] You must first install node using your system package manager', color='red') + stderr('[X] You must first install node & npm using your system package manager', color='red') hint([ - 'curl -sL https://deb.nodesource.com/setup_15.x | sudo -E bash -', + 'https://github.com/nodesource/distributions#table-of-contents', 'or to disable all node-based modules run: archivebox config --set USE_NODE=False', ]) raise SystemExit(1) From 8a306dbf6fef4fef63dd4c423faba0d32117684e Mon Sep 17 00:00:00 2001 From: Nick Sweeting Date: Sun, 17 Dec 2023 16:57:02 -0800 Subject: [PATCH 13/31] add BUILD_TIME to archivebox version output --- archivebox/config.py | 11 ++++++++++- archivebox/main.py | 38 ++++++++++++++++++++++++-------------- 2 files changed, 34 insertions(+), 15 deletions(-) diff --git a/archivebox/config.py b/archivebox/config.py index 9f373004..785e6a60 100644 --- a/archivebox/config.py +++ b/archivebox/config.py @@ -391,12 +391,20 @@ def get_version(config): raise Exception('Failed to detect installed archivebox version!') -def get_commit_hash(config): +def get_commit_hash(config) -> Optional[str]: try: return list((config['PACKAGE_DIR'] / '../.git/refs/heads/').glob('*'))[0].read_text().strip() except Exception: return None +def get_build_time(config) -> str: + if config['IN_DOCKER']: + docker_build_end_time = Path('/VERSION.txt').read_text().rsplit('BUILD_END_TIME=')[-1].split('\n', 1)[0] + return docker_build_end_time + + src_last_modified_unix_timestamp = (config['PACKAGE_DIR'] / 'config.py').stat().st_mtime + return datetime.fromtimestamp(src_last_modified_unix_timestamp).strftime('%Y-%m-%d %H:%M:%S %s') + ############################## Derived Config ################################## @@ -425,6 +433,7 @@ DYNAMIC_CONFIG_SCHEMA: ConfigDefaultDict = { 'ARCHIVEBOX_BINARY': {'default': lambda c: sys.argv[0] or bin_path('archivebox')}, 'VERSION': {'default': lambda c: get_version(c)}, 'COMMIT_HASH': {'default': lambda c: get_commit_hash(c)}, + 'BUILD_TIME': {'default': lambda c: get_build_time(c)}, 'PYTHON_BINARY': {'default': lambda c: sys.executable}, 'PYTHON_ENCODING': {'default': lambda c: sys.stdout.encoding.upper()}, diff --git a/archivebox/main.py b/archivebox/main.py index 8968dea6..05b22b46 100755 --- a/archivebox/main.py +++ b/archivebox/main.py @@ -93,11 +93,13 @@ from .config import ( SQL_INDEX_FILENAME, ALLOWED_IN_OUTPUT_DIR, SEARCH_BACKEND_ENGINE, + LDAP, check_dependencies, check_data_folder, write_config_file, VERSION, COMMIT_HASH, + BUILD_TIME, CODE_LOCATIONS, EXTERNAL_LOCATIONS, DATA_LOCATIONS, @@ -218,31 +220,39 @@ def version(quiet: bool=False, if not quiet: # 0.7.1 - # ArchiveBox v0.7.1 Cpython Linux Linux-4.19.121-linuxkit-x86_64-with-glibc2.28 x86_64 (in Docker) (in TTY) - # DEBUG=False IN_DOCKER=True IN_QEMU=False IS_TTY=True TZ=UTC FS_ATOMIC=True FS_REMOTE=False FS_PERMS=644 FS_USER=501:20 SEARCH_BACKEND=ripgrep + # ArchiveBox v0.7.1+editable COMMIT_HASH=951bba5 BUILD_TIME=2023-12-17 16:46:05 1702860365 + # IN_DOCKER=False IN_QEMU=False ARCH=arm64 OS=Darwin PLATFORM=macOS-14.2-arm64-arm-64bit PYTHON=Cpython + # FS_ATOMIC=True FS_REMOTE=False FS_USER=501:20 FS_PERMS=644 + # DEBUG=False IS_TTY=True TZ=UTC SEARCH_BACKEND=ripgrep LDAP=False p = platform.uname() print( 'ArchiveBox v{}'.format(VERSION), - *((COMMIT_HASH[:7],) if COMMIT_HASH else ()), - sys.implementation.name.title(), - p.system, - platform.platform(), - p.machine, + *((f'COMMIT_HASH={COMMIT_HASH[:7]}',) if COMMIT_HASH else ()), + f'BUILD_TIME={BUILD_TIME}', + ) + print( + f'IN_DOCKER={IN_DOCKER}', + f'IN_QEMU={IN_QEMU}', + f'ARCH={p.machine}', + f'OS={p.system}', + f'PLATFORM={platform.platform()}', + f'PYTHON={sys.implementation.name.title()}', ) OUTPUT_IS_REMOTE_FS = DATA_LOCATIONS['OUTPUT_DIR']['is_mount'] or DATA_LOCATIONS['ARCHIVE_DIR']['is_mount'] print( - f'DEBUG={DEBUG}', - f'IN_DOCKER={IN_DOCKER}', - f'IN_QEMU={IN_QEMU}', - f'IS_TTY={IS_TTY}', - f'TZ={TIMEZONE}', - #f'DB=django.db.backends.sqlite3 (({CONFIG["SQLITE_JOURNAL_MODE"]})', # add this if we have more useful info to show eventually f'FS_ATOMIC={ENFORCE_ATOMIC_WRITES}', f'FS_REMOTE={OUTPUT_IS_REMOTE_FS}', f'FS_USER={PUID}:{PGID}', f'FS_PERMS={OUTPUT_PERMISSIONS}', + ) + print( + f'DEBUG={DEBUG}', + f'IS_TTY={IS_TTY}', + f'TZ={TIMEZONE}', f'SEARCH_BACKEND={SEARCH_BACKEND_ENGINE}', + f'LDAP={LDAP}', + #f'DB=django.db.backends.sqlite3 (({CONFIG["SQLITE_JOURNAL_MODE"]})', # add this if we have more useful info to show eventually ) print() @@ -271,7 +281,7 @@ def version(quiet: bool=False, print(printable_folder_status(name, path)) else: print() - print('{white}[i] Data locations:{reset}'.format(**ANSI)) + print('{white}[i] Data locations:{reset} (not in a data directory)'.format(**ANSI)) print() check_dependencies() From d5f1411ed17988f0b50d7c594d65597272517637 Mon Sep 17 00:00:00 2001 From: Nick Sweeting Date: Sun, 17 Dec 2023 16:57:40 -0800 Subject: [PATCH 14/31] exit with running as root error when PUID is 0 --- archivebox/config.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/archivebox/config.py b/archivebox/config.py index 785e6a60..79bc5811 100644 --- a/archivebox/config.py +++ b/archivebox/config.py @@ -1118,15 +1118,15 @@ if not CONFIG['CHECK_SSL_VALIDITY']: def check_system_config(config: ConfigDict=CONFIG) -> None: ### Check system environment - if config['USER'] == 'root': + if config['USER'] == 'root' or str(config['PUID']) == "0": stderr('[!] ArchiveBox should never be run as root!', color='red') stderr(' For more information, see the security overview documentation:') stderr(' https://github.com/ArchiveBox/ArchiveBox/wiki/Security-Overview#do-not-run-as-root') if config['IN_DOCKER']: - attempted_command = " ".join(sys.argv[:3]) + attempted_command = ' '.join(sys.argv[:3]) stderr('') - stderr(' {lightred}Hint{reset}: When using Docker, ArchiveBox commands should run with {green}docker run{reset} instead of {lightyellow}docker exec{reset}, e.g.:') + stderr(' {lightred}Hint{reset}: When using Docker, you must run commands with {green}docker run{reset} instead of {lightyellow}docker exec{reset}, e.g.:') stderr(f' docker compose run archivebox {attempted_command}') stderr(' or') stderr(f' docker run -it -v ... -p ... archivebox/archivebox {attempted_command}') From 4a4ed2cad6605fdeb86246689fea162b1c7e3e14 Mon Sep 17 00:00:00 2001 From: Nick Sweeting Date: Sun, 17 Dec 2023 17:44:26 -0800 Subject: [PATCH 15/31] fix version string parsing --- Dockerfile | 2 +- archivebox/config.py | 5 ++--- archivebox/main.py | 5 +++-- bin/docker_entrypoint.sh | 1 - 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/Dockerfile b/Dockerfile index 46700c4a..4889cfd0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -279,7 +279,7 @@ RUN (echo -e "\n\n[√] Finished Docker build succesfully. Saving build summary && echo -e "PLATFORM=${TARGETPLATFORM} ARCH=$(uname -m) ($(uname -s) ${TARGETARCH} ${TARGETVARIANT})\n" \ && echo -e "BUILD_END_TIME=$(date +"%Y-%m-%d %H:%M:%S %s")\n\n" \ ) | tee -a /VERSION.txt -RUN "$CODE_DIR/bin/docker_entrypoint.sh" archivebox version 2>&1 | tee -a /VERSION.txt +RUN "$CODE_DIR"/bin/docker_entrypoint.sh version 2>&1 | tee -a /VERSION.txt #################################################### diff --git a/archivebox/config.py b/archivebox/config.py index 79bc5811..29f1a265 100644 --- a/archivebox/config.py +++ b/archivebox/config.py @@ -431,7 +431,7 @@ DYNAMIC_CONFIG_SCHEMA: ConfigDefaultDict = { 'DIR_OUTPUT_PERMISSIONS': {'default': lambda c: c['OUTPUT_PERMISSIONS'].replace('6', '7').replace('4', '5')}, 'ARCHIVEBOX_BINARY': {'default': lambda c: sys.argv[0] or bin_path('archivebox')}, - 'VERSION': {'default': lambda c: get_version(c)}, + 'VERSION': {'default': lambda c: get_version(c).split('+', 1)[0]}, 'COMMIT_HASH': {'default': lambda c: get_commit_hash(c)}, 'BUILD_TIME': {'default': lambda c: get_build_time(c)}, @@ -1298,8 +1298,7 @@ def setup_django(out_dir: Path=None, check_db=False, config: ConfigDict=CONFIG, with open(settings.ERROR_LOG, "a", encoding='utf-8') as f: command = ' '.join(sys.argv) ts = datetime.now(timezone.utc).strftime('%Y-%m-%d__%H:%M:%S') - f.write(f"\n> {command}; ts={ts} version={config['VERSION']} docker={config['IN_DOCKER']} is_tty={config['IS_TTY']}\n") - + f.write(f"\n> {command}; TS={ts} VERSION={config['VERSION']} IN_DOCKER={config['IN_DOCKER']} IS_TTY={config['IS_TTY']}\n") if check_db: # Enable WAL mode in sqlite3 diff --git a/archivebox/main.py b/archivebox/main.py index 05b22b46..e806ee4d 100755 --- a/archivebox/main.py +++ b/archivebox/main.py @@ -94,6 +94,7 @@ from .config import ( ALLOWED_IN_OUTPUT_DIR, SEARCH_BACKEND_ENGINE, LDAP, + get_version, check_dependencies, check_data_folder, write_config_file, @@ -216,7 +217,7 @@ def version(quiet: bool=False, out_dir: Path=OUTPUT_DIR) -> None: """Print the ArchiveBox version and dependency information""" - print(VERSION.split('+')[0]) + print(VERSION) if not quiet: # 0.7.1 @@ -227,7 +228,7 @@ def version(quiet: bool=False, p = platform.uname() print( - 'ArchiveBox v{}'.format(VERSION), + 'ArchiveBox v{}'.format(get_version(CONFIG)), *((f'COMMIT_HASH={COMMIT_HASH[:7]}',) if COMMIT_HASH else ()), f'BUILD_TIME={BUILD_TIME}', ) diff --git a/bin/docker_entrypoint.sh b/bin/docker_entrypoint.sh index 2d8035e2..c2abd8e8 100755 --- a/bin/docker_entrypoint.sh +++ b/bin/docker_entrypoint.sh @@ -6,7 +6,6 @@ # set -o xtrace set -o errexit set -o errtrace -set -o nounset set -o pipefail IFS=$'\n' From f250762c987fb60afbbe6733010d6548ffcf1266 Mon Sep 17 00:00:00 2001 From: Nick Sweeting Date: Sun, 17 Dec 2023 17:44:42 -0800 Subject: [PATCH 16/31] bump python requirement versions --- pdm.lock | 975 +++-------------------------------------------- requirements.txt | 36 +- 2 files changed, 71 insertions(+), 940 deletions(-) diff --git a/pdm.lock b/pdm.lock index 53329a63..1f70acc9 100644 --- a/pdm.lock +++ b/pdm.lock @@ -2,29 +2,10 @@ # It is not intended for manual editing. [metadata] -groups = ["default", "build", "debug", "dev", "doc", "ldap", "lint", "sonic", "test"] +groups = ["default", "ldap", "sonic"] strategy = ["cross_platform"] -lock_version = "4.4" -content_hash = "sha256:3355b57d87304093c9176a6387d80f5c5226b169964d8039f14a5998046faf4d" - -[[package]] -name = "alabaster" -version = "0.7.13" -requires_python = ">=3.6" -summary = "A configurable sidebar-enabled Sphinx theme" -files = [ - {file = "alabaster-0.7.13-py3-none-any.whl", hash = "sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3"}, - {file = "alabaster-0.7.13.tar.gz", hash = "sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2"}, -] - -[[package]] -name = "appnope" -version = "0.1.3" -summary = "Disable App Nap on macOS >= 10.9" -files = [ - {file = "appnope-0.1.3-py2.py3-none-any.whl", hash = "sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e"}, - {file = "appnope-0.1.3.tar.gz", hash = "sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24"}, -] +lock_version = "4.4.1" +content_hash = "sha256:37a19e5e34763f5ea329b87a911d2422a097c3b655d07c321820f4fdd680c3b2" [[package]] name = "asgiref" @@ -51,29 +32,6 @@ files = [ {file = "asttokens-2.4.1.tar.gz", hash = "sha256:b03869718ba9a6eb027e134bfdf69f38a236d681c83c160d510768af11254ba0"}, ] -[[package]] -name = "babel" -version = "2.13.1" -requires_python = ">=3.7" -summary = "Internationalization utilities" -dependencies = [ - "setuptools; python_version >= \"3.12\"", -] -files = [ - {file = "Babel-2.13.1-py3-none-any.whl", hash = "sha256:7077a4984b02b6727ac10f1f7294484f737443d7e2e66c5e4380e41a3ae0b4ed"}, - {file = "Babel-2.13.1.tar.gz", hash = "sha256:33e0952d7dd6374af8dbf6768cc4ddf3ccfefc244f9986d4074704f2fbd18900"}, -] - -[[package]] -name = "blinker" -version = "1.7.0" -requires_python = ">=3.8" -summary = "Fast, simple object-to-object and broadcast signaling" -files = [ - {file = "blinker-1.7.0-py3-none-any.whl", hash = "sha256:c3f865d4d54db7abc53758a01601cf343fe55b84c1de4e3fa910e420b438d5b9"}, - {file = "blinker-1.7.0.tar.gz", hash = "sha256:e6820ff6fa4e4d1d8e2747c2283749c3f547e4fee112b98555cdcdae32996182"}, -] - [[package]] name = "brotli" version = "1.1.0" @@ -168,43 +126,14 @@ files = [ {file = "brotlicffi-1.1.0.0.tar.gz", hash = "sha256:b77827a689905143f87915310b93b273ab17888fd43ef350d4832c4a71083c13"}, ] -[[package]] -name = "cachecontrol" -version = "0.13.1" -requires_python = ">=3.7" -summary = "httplib2 caching for requests" -dependencies = [ - "msgpack>=0.5.2", - "requests>=2.16.0", -] -files = [ - {file = "cachecontrol-0.13.1-py3-none-any.whl", hash = "sha256:95dedbec849f46dda3137866dc28b9d133fc9af55f5b805ab1291833e4457aa4"}, - {file = "cachecontrol-0.13.1.tar.gz", hash = "sha256:f012366b79d2243a6118309ce73151bf52a38d4a5dac8ea57f09bd29087e506b"}, -] - -[[package]] -name = "cachecontrol" -version = "0.13.1" -extras = ["filecache"] -requires_python = ">=3.7" -summary = "httplib2 caching for requests" -dependencies = [ - "cachecontrol==0.13.1", - "filelock>=3.8.0", -] -files = [ - {file = "cachecontrol-0.13.1-py3-none-any.whl", hash = "sha256:95dedbec849f46dda3137866dc28b9d133fc9af55f5b805ab1291833e4457aa4"}, - {file = "cachecontrol-0.13.1.tar.gz", hash = "sha256:f012366b79d2243a6118309ce73151bf52a38d4a5dac8ea57f09bd29087e506b"}, -] - [[package]] name = "certifi" -version = "2023.7.22" +version = "2023.11.17" requires_python = ">=3.6" summary = "Python package for providing Mozilla's CA Bundle." files = [ - {file = "certifi-2023.7.22-py3-none-any.whl", hash = "sha256:92d6037539857d8206b8f6ae472e8b77db8058fec5937a1ef3f54304089edbb9"}, - {file = "certifi-2023.7.22.tar.gz", hash = "sha256:539cc1d13202e33ca466e88b2807e29f4c13049d6d87031a3c110744495cb082"}, + {file = "certifi-2023.11.17-py3-none-any.whl", hash = "sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474"}, + {file = "certifi-2023.11.17.tar.gz", hash = "sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1"}, ] [[package]] @@ -342,15 +271,6 @@ files = [ {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] -[[package]] -name = "commonmark" -version = "0.9.1" -summary = "Python parser for the CommonMark Markdown spec" -files = [ - {file = "commonmark-0.9.1-py2.py3-none-any.whl", hash = "sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9"}, - {file = "commonmark-0.9.1.tar.gz", hash = "sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60"}, -] - [[package]] name = "croniter" version = "2.0.1" @@ -367,7 +287,7 @@ files = [ [[package]] name = "dateparser" -version = "1.1.8" +version = "1.2.0" requires_python = ">=3.7" summary = "Date parsing library designed to parse dates from HTML pages" dependencies = [ @@ -377,8 +297,8 @@ dependencies = [ "tzlocal", ] files = [ - {file = "dateparser-1.1.8-py2.py3-none-any.whl", hash = "sha256:070b29b5bbf4b1ec2cd51c96ea040dc68a614de703910a91ad1abba18f9f379f"}, - {file = "dateparser-1.1.8.tar.gz", hash = "sha256:86b8b7517efcc558f085a142cdb7620f0921543fcabdb538c8a4c4001d8178e3"}, + {file = "dateparser-1.2.0-py2.py3-none-any.whl", hash = "sha256:0b21ad96534e562920a0083e97fd45fa959882d4162acc358705144520a35830"}, + {file = "dateparser-1.2.0.tar.gz", hash = "sha256:7975b43a4222283e0ae15be7b4999d08c9a70e2d378ac87385b1ccf2cffbbb30"}, ] [[package]] @@ -391,15 +311,6 @@ files = [ {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, ] -[[package]] -name = "distlib" -version = "0.3.7" -summary = "Distribution utilities" -files = [ - {file = "distlib-0.3.7-py2.py3-none-any.whl", hash = "sha256:2e24928bc811348f0feb63014e97aaae3037f2cf48712d51ae61df7fd6075057"}, - {file = "distlib-0.3.7.tar.gz", hash = "sha256:9dafe54b34a028eafd95039d5e5d4851a13734540f1331060d31c9916e7147a8"}, -] - [[package]] name = "django" version = "3.1.14" @@ -429,20 +340,6 @@ files = [ {file = "django_auth_ldap-4.1.0-py3-none-any.whl", hash = "sha256:68870e7921e84b1a9867e268a9c8a3e573e8a0d95ea08bcf31be178f5826ff36"}, ] -[[package]] -name = "django-debug-toolbar" -version = "3.2.4" -requires_python = ">=3.6" -summary = "A configurable set of panels that display various debug information about the current request/response." -dependencies = [ - "Django>=2.2", - "sqlparse>=0.2.0", -] -files = [ - {file = "django-debug-toolbar-3.2.4.tar.gz", hash = "sha256:644bbd5c428d3283aa9115722471769cac1bec189edf3a0c855fd8ff870375a9"}, - {file = "django_debug_toolbar-3.2.4-py3-none-any.whl", hash = "sha256:6b633b6cfee24f232d73569870f19aa86c819d750e7f3e833f2344a9eb4b4409"}, -] - [[package]] name = "django-extensions" version = "3.1.5" @@ -456,65 +353,14 @@ files = [ {file = "django_extensions-3.1.5-py3-none-any.whl", hash = "sha256:9238b9e016bb0009d621e05cf56ea8ce5cce9b32e91ad2026996a7377ca28069"}, ] -[[package]] -name = "django-stubs" -version = "4.2.6" -requires_python = ">=3.8" -summary = "Mypy stubs for Django" -dependencies = [ - "django", - "django-stubs-ext>=4.2.5", - "tomli; python_version < \"3.11\"", - "types-PyYAML", - "types-pytz", - "typing-extensions", -] -files = [ - {file = "django-stubs-4.2.6.tar.gz", hash = "sha256:e60b43de662a199db4b15c803c06669e0ac5035614af291cbd3b91591f7dcc94"}, - {file = "django_stubs-4.2.6-py3-none-any.whl", hash = "sha256:2fcd257884a68dfa02de41ee5410ec805264d9b07d9b5b119e4dea82c7b8345e"}, -] - -[[package]] -name = "django-stubs-ext" -version = "4.2.5" -requires_python = ">=3.8" -summary = "Monkey-patching and extensions for django-stubs" -dependencies = [ - "django", - "typing-extensions", -] -files = [ - {file = "django-stubs-ext-4.2.5.tar.gz", hash = "sha256:8c4d1fb5f68419b3b2474c659681a189803e27d6a5e5abf5aa0da57601b58633"}, - {file = "django_stubs_ext-4.2.5-py3-none-any.whl", hash = "sha256:921cd7ae4614e74c234bc0fe86ee75537d163addfe1fc6f134bf03e29d86c01e"}, -] - -[[package]] -name = "djdt-flamegraph" -version = "0.2.13" -summary = "Flamegraphs for Django Debug Toolbar" -files = [ - {file = "djdt_flamegraph-0.2.13-py2.py3-none-any.whl", hash = "sha256:b3252b8cc9b586829166cc158b26952626cd6f41a3ffa92dceef2f5dbe5b99a0"}, - {file = "djdt_flamegraph-0.2.13.tar.gz", hash = "sha256:c07a71be58484636e021d4c49b129fd819f24c9128849cb59558e5141192dbf3"}, -] - -[[package]] -name = "docutils" -version = "0.18.1" -requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -summary = "Docutils -- Python Documentation Utilities" -files = [ - {file = "docutils-0.18.1-py2.py3-none-any.whl", hash = "sha256:23010f129180089fbcd3bc08cfefccb3b890b0050e1ca00c867036e9d161b98c"}, - {file = "docutils-0.18.1.tar.gz", hash = "sha256:679987caf361a7539d76e584cbeddc311e3aee937877c87346f31debc63e9d06"}, -] - [[package]] name = "exceptiongroup" -version = "1.1.3" +version = "1.2.0" requires_python = ">=3.7" summary = "Backport of PEP 654 (exception groups)" files = [ - {file = "exceptiongroup-1.1.3-py3-none-any.whl", hash = "sha256:343280667a4585d195ca1cf9cef84a4e178c4b6cf2274caef9859782b567d5e3"}, - {file = "exceptiongroup-1.1.3.tar.gz", hash = "sha256:097acd85d473d75af5bb98e41b61ff7fe35efe6675e4f9370ec6ec5126d160e9"}, + {file = "exceptiongroup-1.2.0-py3-none-any.whl", hash = "sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14"}, + {file = "exceptiongroup-1.2.0.tar.gz", hash = "sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68"}, ] [[package]] @@ -527,149 +373,37 @@ files = [ {file = "executing-2.0.1.tar.gz", hash = "sha256:35afe2ce3affba8ee97f2d69927fa823b08b472b7b994e36a52a964b93d16147"}, ] -[[package]] -name = "filelock" -version = "3.13.1" -requires_python = ">=3.8" -summary = "A platform independent file lock." -files = [ - {file = "filelock-3.13.1-py3-none-any.whl", hash = "sha256:57dbda9b35157b05fb3e58ee91448612eb674172fab98ee235ccb0b5bee19a1c"}, - {file = "filelock-3.13.1.tar.gz", hash = "sha256:521f5f56c50f8426f5e03ad3b281b490a87ef15bc6c526f168290f0c7148d44e"}, -] - -[[package]] -name = "findpython" -version = "0.4.0" -requires_python = ">=3.7" -summary = "A utility to find python versions on your system" -dependencies = [ - "packaging>=20", -] -files = [ - {file = "findpython-0.4.0-py3-none-any.whl", hash = "sha256:087148ac5935f9be458f36a05f3fa479efdf2c629f5d386c73ea481cfecff15e"}, - {file = "findpython-0.4.0.tar.gz", hash = "sha256:18b14d115678da18ae92ee22d7001cc30915ea531053f77010ee05a39680f438"}, -] - -[[package]] -name = "flake8" -version = "6.1.0" -requires_python = ">=3.8.1" -summary = "the modular source code checker: pep8 pyflakes and co" -dependencies = [ - "mccabe<0.8.0,>=0.7.0", - "pycodestyle<2.12.0,>=2.11.0", - "pyflakes<3.2.0,>=3.1.0", -] -files = [ - {file = "flake8-6.1.0-py2.py3-none-any.whl", hash = "sha256:ffdfce58ea94c6580c77888a86506937f9a1a227dfcd15f245d694ae20a6b6e5"}, - {file = "flake8-6.1.0.tar.gz", hash = "sha256:d5b3857f07c030bdb5bf41c7f53799571d75c4491748a3adcd47de929e34cd23"}, -] - -[[package]] -name = "homebrew-pypi-poet" -version = "0.10.0" -summary = "Writes Homebrew stanzas for pypi packages" -dependencies = [ - "jinja2", - "setuptools", -] -files = [ - {file = "homebrew-pypi-poet-0.10.0.tar.gz", hash = "sha256:e09e997e35a98f66445f9a39ccb33d6d93c5cd090302a59f231707eac0bf378e"}, - {file = "homebrew_pypi_poet-0.10.0-py2.py3-none-any.whl", hash = "sha256:65824f97aea0e713c4ac18aa2ef4477aca69426554eac842eeaaddf97df3fc47"}, -] - [[package]] name = "idna" -version = "3.4" +version = "3.6" requires_python = ">=3.5" summary = "Internationalized Domain Names in Applications (IDNA)" files = [ - {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, - {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, -] - -[[package]] -name = "imagesize" -version = "1.4.1" -requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -summary = "Getting image size from png/jpeg/jpeg2000/gif file" -files = [ - {file = "imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"}, - {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, -] - -[[package]] -name = "importlib-metadata" -version = "6.8.0" -requires_python = ">=3.8" -summary = "Read metadata from Python packages" -dependencies = [ - "zipp>=0.5", -] -files = [ - {file = "importlib_metadata-6.8.0-py3-none-any.whl", hash = "sha256:3ebb78df84a805d7698245025b975d9d67053cd94c79245ba4b3eb694abe68bb"}, - {file = "importlib_metadata-6.8.0.tar.gz", hash = "sha256:dbace7892d8c0c4ac1ad096662232f831d4e64f4c4545bd53016a3e9d4654743"}, -] - -[[package]] -name = "iniconfig" -version = "2.0.0" -requires_python = ">=3.7" -summary = "brain-dead simple config-ini parsing" -files = [ - {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, - {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, -] - -[[package]] -name = "installer" -version = "0.7.0" -requires_python = ">=3.7" -summary = "A library for installing Python wheels." -files = [ - {file = "installer-0.7.0-py3-none-any.whl", hash = "sha256:05d1933f0a5ba7d8d6296bb6d5018e7c94fa473ceb10cf198a92ccea19c27b53"}, - {file = "installer-0.7.0.tar.gz", hash = "sha256:a26d3e3116289bb08216e0d0f7d925fcef0b0194eedfa0c944bcaaa106c4b631"}, -] - -[[package]] -name = "ipdb" -version = "0.13.13" -requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -summary = "IPython-enabled pdb" -dependencies = [ - "decorator; python_version > \"3.6\" and python_version < \"3.11\"", - "decorator; python_version >= \"3.11\"", - "ipython>=7.31.1; python_version > \"3.6\" and python_version < \"3.11\"", - "ipython>=7.31.1; python_version >= \"3.11\"", - "tomli; python_version > \"3.6\" and python_version < \"3.11\"", -] -files = [ - {file = "ipdb-0.13.13-py3-none-any.whl", hash = "sha256:45529994741c4ab6d2388bfa5d7b725c2cf7fe9deffabdb8a6113aa5ed449ed4"}, - {file = "ipdb-0.13.13.tar.gz", hash = "sha256:e3ac6018ef05126d442af680aad863006ec19d02290561ac88b8b1c0b0cfc726"}, + {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"}, + {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, ] [[package]] name = "ipython" -version = "8.17.2" +version = "8.18.1" requires_python = ">=3.9" summary = "IPython: Productive Interactive Computing" dependencies = [ - "appnope; sys_platform == \"darwin\"", "colorama; sys_platform == \"win32\"", "decorator", "exceptiongroup; python_version < \"3.11\"", "jedi>=0.16", "matplotlib-inline", "pexpect>4.3; sys_platform != \"win32\"", - "prompt-toolkit!=3.0.37,<3.1.0,>=3.0.30", + "prompt-toolkit<3.1.0,>=3.0.41", "pygments>=2.4.0", "stack-data", "traitlets>=5", "typing-extensions; python_version < \"3.10\"", ] files = [ - {file = "ipython-8.17.2-py3-none-any.whl", hash = "sha256:1e4d1d666a023e3c93585ba0d8e962867f7a111af322efff6b9c58062b3e5444"}, - {file = "ipython-8.17.2.tar.gz", hash = "sha256:126bb57e1895594bb0d91ea3090bbd39384f6fe87c3d57fd558d0670f50339bb"}, + {file = "ipython-8.18.1-py3-none-any.whl", hash = "sha256:e8267419d72d81955ec1177f8a29aaa90ac80ad647499201119e2f05e99aa397"}, + {file = "ipython-8.18.1.tar.gz", hash = "sha256:ca6f079bb33457c66e233e4580ebfc4128855b4cf6370dddd73842a9563e8a27"}, ] [[package]] @@ -685,81 +419,6 @@ files = [ {file = "jedi-0.19.1.tar.gz", hash = "sha256:cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd"}, ] -[[package]] -name = "jinja2" -version = "3.1.2" -requires_python = ">=3.7" -summary = "A very fast and expressive template engine." -dependencies = [ - "MarkupSafe>=2.0", -] -files = [ - {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, - {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, -] - -[[package]] -name = "markdown-it-py" -version = "3.0.0" -requires_python = ">=3.8" -summary = "Python port of markdown-it. Markdown parsing, done right!" -dependencies = [ - "mdurl~=0.1", -] -files = [ - {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, - {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, -] - -[[package]] -name = "markupsafe" -version = "2.1.3" -requires_python = ">=3.7" -summary = "Safely add untrusted strings to HTML/XML markup." -files = [ - {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-win32.whl", hash = "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431"}, - {file = "MarkupSafe-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"}, - {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-win32.whl", hash = "sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007"}, - {file = "MarkupSafe-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-win32.whl", hash = "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2"}, - {file = "MarkupSafe-2.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba"}, - {file = "MarkupSafe-2.1.3.tar.gz", hash = "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad"}, -] - [[package]] name = "matplotlib-inline" version = "0.1.6" @@ -773,79 +432,6 @@ files = [ {file = "matplotlib_inline-0.1.6-py3-none-any.whl", hash = "sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311"}, ] -[[package]] -name = "mccabe" -version = "0.7.0" -requires_python = ">=3.6" -summary = "McCabe checker, plugin for flake8" -files = [ - {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, - {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, -] - -[[package]] -name = "mdurl" -version = "0.1.2" -requires_python = ">=3.7" -summary = "Markdown URL utilities" -files = [ - {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, - {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, -] - -[[package]] -name = "msgpack" -version = "1.0.7" -requires_python = ">=3.8" -summary = "MessagePack serializer" -files = [ - {file = "msgpack-1.0.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:04ad6069c86e531682f9e1e71b71c1c3937d6014a7c3e9edd2aa81ad58842862"}, - {file = "msgpack-1.0.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:cca1b62fe70d761a282496b96a5e51c44c213e410a964bdffe0928e611368329"}, - {file = "msgpack-1.0.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e50ebce52f41370707f1e21a59514e3375e3edd6e1832f5e5235237db933c98b"}, - {file = "msgpack-1.0.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a7b4f35de6a304b5533c238bee86b670b75b03d31b7797929caa7a624b5dda6"}, - {file = "msgpack-1.0.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28efb066cde83c479dfe5a48141a53bc7e5f13f785b92ddde336c716663039ee"}, - {file = "msgpack-1.0.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4cb14ce54d9b857be9591ac364cb08dc2d6a5c4318c1182cb1d02274029d590d"}, - {file = "msgpack-1.0.7-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b573a43ef7c368ba4ea06050a957c2a7550f729c31f11dd616d2ac4aba99888d"}, - {file = "msgpack-1.0.7-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ccf9a39706b604d884d2cb1e27fe973bc55f2890c52f38df742bc1d79ab9f5e1"}, - {file = "msgpack-1.0.7-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:cb70766519500281815dfd7a87d3a178acf7ce95390544b8c90587d76b227681"}, - {file = "msgpack-1.0.7-cp310-cp310-win32.whl", hash = "sha256:b610ff0f24e9f11c9ae653c67ff8cc03c075131401b3e5ef4b82570d1728f8a9"}, - {file = "msgpack-1.0.7-cp310-cp310-win_amd64.whl", hash = "sha256:a40821a89dc373d6427e2b44b572efc36a2778d3f543299e2f24eb1a5de65415"}, - {file = "msgpack-1.0.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:576eb384292b139821c41995523654ad82d1916da6a60cff129c715a6223ea84"}, - {file = "msgpack-1.0.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:730076207cb816138cf1af7f7237b208340a2c5e749707457d70705715c93b93"}, - {file = "msgpack-1.0.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:85765fdf4b27eb5086f05ac0491090fc76f4f2b28e09d9350c31aac25a5aaff8"}, - {file = "msgpack-1.0.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3476fae43db72bd11f29a5147ae2f3cb22e2f1a91d575ef130d2bf49afd21c46"}, - {file = "msgpack-1.0.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d4c80667de2e36970ebf74f42d1088cc9ee7ef5f4e8c35eee1b40eafd33ca5b"}, - {file = "msgpack-1.0.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b0bf0effb196ed76b7ad883848143427a73c355ae8e569fa538365064188b8e"}, - {file = "msgpack-1.0.7-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f9a7c509542db4eceed3dcf21ee5267ab565a83555c9b88a8109dcecc4709002"}, - {file = "msgpack-1.0.7-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:84b0daf226913133f899ea9b30618722d45feffa67e4fe867b0b5ae83a34060c"}, - {file = "msgpack-1.0.7-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ec79ff6159dffcc30853b2ad612ed572af86c92b5168aa3fc01a67b0fa40665e"}, - {file = "msgpack-1.0.7-cp311-cp311-win32.whl", hash = "sha256:3e7bf4442b310ff154b7bb9d81eb2c016b7d597e364f97d72b1acc3817a0fdc1"}, - {file = "msgpack-1.0.7-cp311-cp311-win_amd64.whl", hash = "sha256:3f0c8c6dfa6605ab8ff0611995ee30d4f9fcff89966cf562733b4008a3d60d82"}, - {file = "msgpack-1.0.7-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f0936e08e0003f66bfd97e74ee530427707297b0d0361247e9b4f59ab78ddc8b"}, - {file = "msgpack-1.0.7-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:98bbd754a422a0b123c66a4c341de0474cad4a5c10c164ceed6ea090f3563db4"}, - {file = "msgpack-1.0.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b291f0ee7961a597cbbcc77709374087fa2a9afe7bdb6a40dbbd9b127e79afee"}, - {file = "msgpack-1.0.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebbbba226f0a108a7366bf4b59bf0f30a12fd5e75100c630267d94d7f0ad20e5"}, - {file = "msgpack-1.0.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e2d69948e4132813b8d1131f29f9101bc2c915f26089a6d632001a5c1349672"}, - {file = "msgpack-1.0.7-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bdf38ba2d393c7911ae989c3bbba510ebbcdf4ecbdbfec36272abe350c454075"}, - {file = "msgpack-1.0.7-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:993584fc821c58d5993521bfdcd31a4adf025c7d745bbd4d12ccfecf695af5ba"}, - {file = "msgpack-1.0.7-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:52700dc63a4676669b341ba33520f4d6e43d3ca58d422e22ba66d1736b0a6e4c"}, - {file = "msgpack-1.0.7-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e45ae4927759289c30ccba8d9fdce62bb414977ba158286b5ddaf8df2cddb5c5"}, - {file = "msgpack-1.0.7-cp312-cp312-win32.whl", hash = "sha256:27dcd6f46a21c18fa5e5deed92a43d4554e3df8d8ca5a47bf0615d6a5f39dbc9"}, - {file = "msgpack-1.0.7-cp312-cp312-win_amd64.whl", hash = "sha256:7687e22a31e976a0e7fc99c2f4d11ca45eff652a81eb8c8085e9609298916dcf"}, - {file = "msgpack-1.0.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bfef2bb6ef068827bbd021017a107194956918ab43ce4d6dc945ffa13efbc25f"}, - {file = "msgpack-1.0.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:484ae3240666ad34cfa31eea7b8c6cd2f1fdaae21d73ce2974211df099a95d81"}, - {file = "msgpack-1.0.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3967e4ad1aa9da62fd53e346ed17d7b2e922cba5ab93bdd46febcac39be636fc"}, - {file = "msgpack-1.0.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8dd178c4c80706546702c59529ffc005681bd6dc2ea234c450661b205445a34d"}, - {file = "msgpack-1.0.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6ffbc252eb0d229aeb2f9ad051200668fc3a9aaa8994e49f0cb2ffe2b7867e7"}, - {file = "msgpack-1.0.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:822ea70dc4018c7e6223f13affd1c5c30c0f5c12ac1f96cd8e9949acddb48a61"}, - {file = "msgpack-1.0.7-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:384d779f0d6f1b110eae74cb0659d9aa6ff35aaf547b3955abf2ab4c901c4819"}, - {file = "msgpack-1.0.7-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f64e376cd20d3f030190e8c32e1c64582eba56ac6dc7d5b0b49a9d44021b52fd"}, - {file = "msgpack-1.0.7-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5ed82f5a7af3697b1c4786053736f24a0efd0a1b8a130d4c7bfee4b9ded0f08f"}, - {file = "msgpack-1.0.7-cp39-cp39-win32.whl", hash = "sha256:f26a07a6e877c76a88e3cecac8531908d980d3d5067ff69213653649ec0f60ad"}, - {file = "msgpack-1.0.7-cp39-cp39-win_amd64.whl", hash = "sha256:1dc93e8e4653bdb5910aed79f11e165c85732067614f180f70534f056da97db3"}, - {file = "msgpack-1.0.7.tar.gz", hash = "sha256:572efc93db7a4d27e404501975ca6d2d9775705c2d922390d878fcf768d92c87"}, -] - [[package]] name = "mutagen" version = "1.47.0" @@ -856,41 +442,6 @@ files = [ {file = "mutagen-1.47.0.tar.gz", hash = "sha256:719fadef0a978c31b4cf3c956261b3c58b6948b32023078a2117b1de09f0fc99"}, ] -[[package]] -name = "mypy" -version = "1.7.0" -requires_python = ">=3.8" -summary = "Optional static typing for Python" -dependencies = [ - "mypy-extensions>=1.0.0", - "tomli>=1.1.0; python_version < \"3.11\"", - "typing-extensions>=4.1.0", -] -files = [ - {file = "mypy-1.7.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5da84d7bf257fd8f66b4f759a904fd2c5a765f70d8b52dde62b521972a0a2357"}, - {file = "mypy-1.7.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a3637c03f4025f6405737570d6cbfa4f1400eb3c649317634d273687a09ffc2f"}, - {file = "mypy-1.7.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b633f188fc5ae1b6edca39dae566974d7ef4e9aaaae00bc36efe1f855e5173ac"}, - {file = "mypy-1.7.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d6ed9a3997b90c6f891138e3f83fb8f475c74db4ccaa942a1c7bf99e83a989a1"}, - {file = "mypy-1.7.0-cp310-cp310-win_amd64.whl", hash = "sha256:1fe46e96ae319df21359c8db77e1aecac8e5949da4773c0274c0ef3d8d1268a9"}, - {file = "mypy-1.7.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:df67fbeb666ee8828f675fee724cc2cbd2e4828cc3df56703e02fe6a421b7401"}, - {file = "mypy-1.7.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a79cdc12a02eb526d808a32a934c6fe6df07b05f3573d210e41808020aed8b5d"}, - {file = "mypy-1.7.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f65f385a6f43211effe8c682e8ec3f55d79391f70a201575def73d08db68ead1"}, - {file = "mypy-1.7.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0e81ffd120ee24959b449b647c4b2fbfcf8acf3465e082b8d58fd6c4c2b27e46"}, - {file = "mypy-1.7.0-cp311-cp311-win_amd64.whl", hash = "sha256:f29386804c3577c83d76520abf18cfcd7d68264c7e431c5907d250ab502658ee"}, - {file = "mypy-1.7.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:87c076c174e2c7ef8ab416c4e252d94c08cd4980a10967754f91571070bf5fbe"}, - {file = "mypy-1.7.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6cb8d5f6d0fcd9e708bb190b224089e45902cacef6f6915481806b0c77f7786d"}, - {file = "mypy-1.7.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d93e76c2256aa50d9c82a88e2f569232e9862c9982095f6d54e13509f01222fc"}, - {file = "mypy-1.7.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:cddee95dea7990e2215576fae95f6b78a8c12f4c089d7e4367564704e99118d3"}, - {file = "mypy-1.7.0-cp312-cp312-win_amd64.whl", hash = "sha256:d01921dbd691c4061a3e2ecdbfbfad029410c5c2b1ee88946bf45c62c6c91210"}, - {file = "mypy-1.7.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c1b06b4b109e342f7dccc9efda965fc3970a604db70f8560ddfdee7ef19afb05"}, - {file = "mypy-1.7.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:bf7a2f0a6907f231d5e41adba1a82d7d88cf1f61a70335889412dec99feeb0f8"}, - {file = "mypy-1.7.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:551d4a0cdcbd1d2cccdcc7cb516bb4ae888794929f5b040bb51aae1846062901"}, - {file = "mypy-1.7.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:55d28d7963bef00c330cb6461db80b0b72afe2f3c4e2963c99517cf06454e665"}, - {file = "mypy-1.7.0-cp39-cp39-win_amd64.whl", hash = "sha256:870bd1ffc8a5862e593185a4c169804f2744112b4a7c55b93eb50f48e7a77010"}, - {file = "mypy-1.7.0-py3-none-any.whl", hash = "sha256:96650d9a4c651bc2a4991cf46f100973f656d69edc7faf91844e87fe627f7e96"}, - {file = "mypy-1.7.0.tar.gz", hash = "sha256:1e280b5697202efa698372d2f39e9a6713a0395a756b1c6bd48995f8d72690dc"}, -] - [[package]] name = "mypy-extensions" version = "1.0.0" @@ -901,16 +452,6 @@ files = [ {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, ] -[[package]] -name = "packaging" -version = "23.2" -requires_python = ">=3.7" -summary = "Core utilities for Python packages" -files = [ - {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, - {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, -] - [[package]] name = "parso" version = "0.8.3" @@ -921,80 +462,29 @@ files = [ {file = "parso-0.8.3.tar.gz", hash = "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0"}, ] -[[package]] -name = "pdm" -version = "2.10.1" -requires_python = ">=3.7" -summary = "A modern Python package and dependency manager supporting the latest PEP standards" -dependencies = [ - "blinker", - "cachecontrol[filecache]>=0.13.0", - "certifi", - "findpython<1.0.0a0,>=0.4.0", - "importlib-metadata>=3.6; python_version < \"3.10\"", - "installer<0.8,>=0.7", - "packaging!=22.0,>=20.9", - "platformdirs", - "pyproject-hooks", - "python-dotenv>=0.15", - "requests-toolbelt", - "resolvelib>=1.0.1", - "rich>=12.3.0", - "shellingham>=1.3.2", - "tomli>=1.1.0; python_version < \"3.11\"", - "tomlkit<1,>=0.11.1", - "truststore; python_version >= \"3.10\"", - "unearth>=0.12.1", - "virtualenv>=20", -] -files = [ - {file = "pdm-2.10.1-py3-none-any.whl", hash = "sha256:2b2853b83830ed110a8a1eb3feb62cf4e55165de4809a5278bc9453c788898d3"}, - {file = "pdm-2.10.1.tar.gz", hash = "sha256:d166531c659fc4905933546544dd2e16cf648c2ba6d898c82126ad6a42117a81"}, -] - [[package]] name = "pexpect" -version = "4.8.0" +version = "4.9.0" summary = "Pexpect allows easy control of interactive console applications." dependencies = [ "ptyprocess>=0.5", ] files = [ - {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"}, - {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"}, -] - -[[package]] -name = "platformdirs" -version = "3.11.0" -requires_python = ">=3.7" -summary = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -files = [ - {file = "platformdirs-3.11.0-py3-none-any.whl", hash = "sha256:e9d171d00af68be50e9202731309c4e658fd8bc76f55c11c7dd760d023bda68e"}, - {file = "platformdirs-3.11.0.tar.gz", hash = "sha256:cf8ee52a3afdb965072dcc652433e0c7e3e40cf5ea1477cd4b3b1d2eb75495b3"}, -] - -[[package]] -name = "pluggy" -version = "1.3.0" -requires_python = ">=3.8" -summary = "plugin and hook calling mechanisms for python" -files = [ - {file = "pluggy-1.3.0-py3-none-any.whl", hash = "sha256:d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7"}, - {file = "pluggy-1.3.0.tar.gz", hash = "sha256:cf61ae8f126ac6f7c451172cf30e3e43d3ca77615509771b3a984a0730651e12"}, + {file = "pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523"}, + {file = "pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f"}, ] [[package]] name = "prompt-toolkit" -version = "3.0.40" +version = "3.0.43" requires_python = ">=3.7.0" summary = "Library for building powerful interactive command lines in Python" dependencies = [ "wcwidth", ] files = [ - {file = "prompt_toolkit-3.0.40-py3-none-any.whl", hash = "sha256:99ba3dfb23d5b5af89712f89e60a5f3d9b8b67a9482ca377c5771d0e9047a34b"}, - {file = "prompt_toolkit-3.0.40.tar.gz", hash = "sha256:a371c06bb1d66cd499fecd708e50c0b6ae00acba9822ba33c586e2f16d1b739e"}, + {file = "prompt_toolkit-3.0.43-py3-none-any.whl", hash = "sha256:a11a29cb3bf0a28a387fe5122cdb649816a957cd9261dcedf8c9f1fef33eacf6"}, + {file = "prompt_toolkit-3.0.43.tar.gz", hash = "sha256:3527b7af26106cbc65a040bcc84839a3566ec1b051bb0bfe953631e704b0ff7d"}, ] [[package]] @@ -1017,12 +507,12 @@ files = [ [[package]] name = "pyasn1" -version = "0.5.0" +version = "0.5.1" requires_python = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" summary = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" files = [ - {file = "pyasn1-0.5.0-py2.py3-none-any.whl", hash = "sha256:87a2121042a1ac9358cabcaf1d07680ff97ee6404333bacca15f76aa8ad01a57"}, - {file = "pyasn1-0.5.0.tar.gz", hash = "sha256:97b7290ca68e62a832558ec3976f15cbf911bf5d7c7039d8b861c2a0ece69fde"}, + {file = "pyasn1-0.5.1-py2.py3-none-any.whl", hash = "sha256:4439847c58d40b1d0a573d07e3856e95333f1976294494c325775aeca506eb58"}, + {file = "pyasn1-0.5.1.tar.gz", hash = "sha256:6d391a96e59b23130a5cfa74d6fd7f388dbbe26cc8f1edf39fdddf08d9d6676c"}, ] [[package]] @@ -1038,16 +528,6 @@ files = [ {file = "pyasn1_modules-0.3.0.tar.gz", hash = "sha256:5bd01446b736eb9d31512a30d46c1ac3395d676c6f3cafa4c03eb54b9925631c"}, ] -[[package]] -name = "pycodestyle" -version = "2.11.1" -requires_python = ">=3.8" -summary = "Python style guide checker" -files = [ - {file = "pycodestyle-2.11.1-py2.py3-none-any.whl", hash = "sha256:44fe31000b2d866f2e41841b18528a505fbd7fef9017b04eff4e2648a0fadc67"}, - {file = "pycodestyle-2.11.1.tar.gz", hash = "sha256:41ba0e7afc9752dfb53ced5489e89f8186be00e599e712660695b7a75ff2663f"}, -] - [[package]] name = "pycparser" version = "2.21" @@ -1087,55 +567,14 @@ files = [ {file = "pycryptodomex-3.19.0.tar.gz", hash = "sha256:af83a554b3f077564229865c45af0791be008ac6469ef0098152139e6bd4b5b6"}, ] -[[package]] -name = "pyflakes" -version = "3.1.0" -requires_python = ">=3.8" -summary = "passive checker of Python programs" -files = [ - {file = "pyflakes-3.1.0-py2.py3-none-any.whl", hash = "sha256:4132f6d49cb4dae6819e5379898f2b8cce3c5f23994194c24b77d5da2e36f774"}, - {file = "pyflakes-3.1.0.tar.gz", hash = "sha256:a0aae034c444db0071aa077972ba4768d40c830d9539fd45bf4cd3f8f6992efc"}, -] - [[package]] name = "pygments" -version = "2.16.1" +version = "2.17.2" requires_python = ">=3.7" summary = "Pygments is a syntax highlighting package written in Python." files = [ - {file = "Pygments-2.16.1-py3-none-any.whl", hash = "sha256:13fc09fa63bc8d8671a6d247e1eb303c4b343eaee81d861f3404db2935653692"}, - {file = "Pygments-2.16.1.tar.gz", hash = "sha256:1daff0494820c69bc8941e407aa20f577374ee88364ee10a98fdbe0aece96e29"}, -] - -[[package]] -name = "pyproject-hooks" -version = "1.0.0" -requires_python = ">=3.7" -summary = "Wrappers to call pyproject.toml-based build backend hooks." -dependencies = [ - "tomli>=1.1.0; python_version < \"3.11\"", -] -files = [ - {file = "pyproject_hooks-1.0.0-py3-none-any.whl", hash = "sha256:283c11acd6b928d2f6a7c73fa0d01cb2bdc5f07c57a2eeb6e83d5e56b97976f8"}, - {file = "pyproject_hooks-1.0.0.tar.gz", hash = "sha256:f271b298b97f5955d53fb12b72c1fb1948c22c1a6b70b315c54cedaca0264ef5"}, -] - -[[package]] -name = "pytest" -version = "7.4.3" -requires_python = ">=3.7" -summary = "pytest: simple powerful testing with Python" -dependencies = [ - "colorama; sys_platform == \"win32\"", - "exceptiongroup>=1.0.0rc8; python_version < \"3.11\"", - "iniconfig", - "packaging", - "pluggy<2.0,>=0.12", - "tomli>=1.0.0; python_version < \"3.11\"", -] -files = [ - {file = "pytest-7.4.3-py3-none-any.whl", hash = "sha256:0d009c083ea859a71b76adf7c1d502e4bc170b80a8ef002da5806527b9591fac"}, - {file = "pytest-7.4.3.tar.gz", hash = "sha256:d989d136982de4e3b29dabcc838ad581c64e8ed52c11fbe86ddebd9da0818cd5"}, + {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"}, + {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"}, ] [[package]] @@ -1163,19 +602,9 @@ files = [ {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, ] -[[package]] -name = "python-dotenv" -version = "1.0.0" -requires_python = ">=3.8" -summary = "Read key-value pairs from a .env file and set them as environment variables" -files = [ - {file = "python-dotenv-1.0.0.tar.gz", hash = "sha256:a8df96034aae6d2d50a4ebe8216326c61c3eb64836776504fcca410e5937a3ba"}, - {file = "python_dotenv-1.0.0-py3-none-any.whl", hash = "sha256:f5971a9226b701070a4bf2c38c89e5a3f0d64de8debda981d1db98583009122a"}, -] - [[package]] name = "python-ldap" -version = "3.4.3" +version = "3.4.4" requires_python = ">=3.6" summary = "Python modules for implementing LDAP clients" dependencies = [ @@ -1183,7 +612,7 @@ dependencies = [ "pyasn1>=0.3.7", ] files = [ - {file = "python-ldap-3.4.3.tar.gz", hash = "sha256:ab26c519a0ef2a443a2a10391fa3c5cb52d7871323399db949ebfaa9f25ee2a0"}, + {file = "python-ldap-3.4.4.tar.gz", hash = "sha256:7edb0accec4e037797705f3a05cbf36a9fde50d08c8f67f2aef99a2628fab828"}, ] [[package]] @@ -1195,20 +624,6 @@ files = [ {file = "pytz-2023.3.post1.tar.gz", hash = "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b"}, ] -[[package]] -name = "recommonmark" -version = "0.7.1" -summary = "A docutils-compatibility bridge to CommonMark, enabling you to write CommonMark inside of Docutils & Sphinx projects." -dependencies = [ - "commonmark>=0.8.1", - "docutils>=0.11", - "sphinx>=1.3.1", -] -files = [ - {file = "recommonmark-0.7.1-py2.py3-none-any.whl", hash = "sha256:1b1db69af0231efce3fa21b94ff627ea33dee7079a01dd0a7f8482c3da148b3f"}, - {file = "recommonmark-0.7.1.tar.gz", hash = "sha256:bdb4db649f2222dcd8d2d844f0006b958d627f732415d399791ee436a3686d67"}, -] - [[package]] name = "regex" version = "2023.10.3" @@ -1292,62 +707,6 @@ files = [ {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, ] -[[package]] -name = "requests-toolbelt" -version = "1.0.0" -requires_python = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -summary = "A utility belt for advanced users of python-requests" -dependencies = [ - "requests<3.0.0,>=2.0.1", -] -files = [ - {file = "requests-toolbelt-1.0.0.tar.gz", hash = "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6"}, - {file = "requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06"}, -] - -[[package]] -name = "resolvelib" -version = "1.0.1" -summary = "Resolve abstract dependencies into concrete ones" -files = [ - {file = "resolvelib-1.0.1-py2.py3-none-any.whl", hash = "sha256:d2da45d1a8dfee81bdd591647783e340ef3bcb104b54c383f70d422ef5cc7dbf"}, - {file = "resolvelib-1.0.1.tar.gz", hash = "sha256:04ce76cbd63fded2078ce224785da6ecd42b9564b1390793f64ddecbe997b309"}, -] - -[[package]] -name = "rich" -version = "13.6.0" -requires_python = ">=3.7.0" -summary = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" -dependencies = [ - "markdown-it-py>=2.2.0", - "pygments<3.0.0,>=2.13.0", -] -files = [ - {file = "rich-13.6.0-py3-none-any.whl", hash = "sha256:2b38e2fe9ca72c9a00170a1a2d20c63c790d0e10ef1fe35eba76e1e7b1d7d245"}, - {file = "rich-13.6.0.tar.gz", hash = "sha256:5c14d22737e6d5084ef4771b62d5d4363165b403455a30a1c8ca39dc7b644bef"}, -] - -[[package]] -name = "setuptools" -version = "68.2.2" -requires_python = ">=3.8" -summary = "Easily download, build, install, upgrade, and uninstall Python packages" -files = [ - {file = "setuptools-68.2.2-py3-none-any.whl", hash = "sha256:b454a35605876da60632df1a60f736524eb73cc47bbc9f3f1ef1b644de74fd2a"}, - {file = "setuptools-68.2.2.tar.gz", hash = "sha256:4ac1475276d2f1c48684874089fefcd83bd7162ddaafb81fac866ba0db282a87"}, -] - -[[package]] -name = "shellingham" -version = "1.5.4" -requires_python = ">=3.7" -summary = "Tool to Detect Surrounding Shell" -files = [ - {file = "shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686"}, - {file = "shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de"}, -] - [[package]] name = "six" version = "1.16.0" @@ -1358,15 +717,6 @@ files = [ {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, ] -[[package]] -name = "snowballstemmer" -version = "2.2.0" -summary = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." -files = [ - {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, - {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, -] - [[package]] name = "sonic-client" version = "1.0.0" @@ -1376,138 +726,6 @@ files = [ {file = "sonic_client-1.0.0-py3-none-any.whl", hash = "sha256:291bf292861e97a2dd765ff0c8754ea9631383680d31a63ec3da6f5aa5f4beda"}, ] -[[package]] -name = "sphinx" -version = "7.2.6" -requires_python = ">=3.9" -summary = "Python documentation generator" -dependencies = [ - "Jinja2>=3.0", - "Pygments>=2.14", - "alabaster<0.8,>=0.7", - "babel>=2.9", - "colorama>=0.4.5; sys_platform == \"win32\"", - "docutils<0.21,>=0.18.1", - "imagesize>=1.3", - "importlib-metadata>=4.8; python_version < \"3.10\"", - "packaging>=21.0", - "requests>=2.25.0", - "snowballstemmer>=2.0", - "sphinxcontrib-applehelp", - "sphinxcontrib-devhelp", - "sphinxcontrib-htmlhelp>=2.0.0", - "sphinxcontrib-jsmath", - "sphinxcontrib-qthelp", - "sphinxcontrib-serializinghtml>=1.1.9", -] -files = [ - {file = "sphinx-7.2.6-py3-none-any.whl", hash = "sha256:1e09160a40b956dc623c910118fa636da93bd3ca0b9876a7b3df90f07d691560"}, - {file = "sphinx-7.2.6.tar.gz", hash = "sha256:9a5160e1ea90688d5963ba09a2dcd8bdd526620edbb65c328728f1b2228d5ab5"}, -] - -[[package]] -name = "sphinx-rtd-theme" -version = "1.3.0" -requires_python = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" -summary = "Read the Docs theme for Sphinx" -dependencies = [ - "docutils<0.19", - "sphinx<8,>=1.6", - "sphinxcontrib-jquery<5,>=4", -] -files = [ - {file = "sphinx_rtd_theme-1.3.0-py2.py3-none-any.whl", hash = "sha256:46ddef89cc2416a81ecfbeaceab1881948c014b1b6e4450b815311a89fb977b0"}, - {file = "sphinx_rtd_theme-1.3.0.tar.gz", hash = "sha256:590b030c7abb9cf038ec053b95e5380b5c70d61591eb0b552063fbe7c41f0931"}, -] - -[[package]] -name = "sphinxcontrib-applehelp" -version = "1.0.7" -requires_python = ">=3.9" -summary = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" -dependencies = [ - "Sphinx>=5", -] -files = [ - {file = "sphinxcontrib_applehelp-1.0.7-py3-none-any.whl", hash = "sha256:094c4d56209d1734e7d252f6e0b3ccc090bd52ee56807a5d9315b19c122ab15d"}, - {file = "sphinxcontrib_applehelp-1.0.7.tar.gz", hash = "sha256:39fdc8d762d33b01a7d8f026a3b7d71563ea3b72787d5f00ad8465bd9d6dfbfa"}, -] - -[[package]] -name = "sphinxcontrib-devhelp" -version = "1.0.5" -requires_python = ">=3.9" -summary = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp documents" -dependencies = [ - "Sphinx>=5", -] -files = [ - {file = "sphinxcontrib_devhelp-1.0.5-py3-none-any.whl", hash = "sha256:fe8009aed765188f08fcaadbb3ea0d90ce8ae2d76710b7e29ea7d047177dae2f"}, - {file = "sphinxcontrib_devhelp-1.0.5.tar.gz", hash = "sha256:63b41e0d38207ca40ebbeabcf4d8e51f76c03e78cd61abe118cf4435c73d4212"}, -] - -[[package]] -name = "sphinxcontrib-htmlhelp" -version = "2.0.4" -requires_python = ">=3.9" -summary = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" -dependencies = [ - "Sphinx>=5", -] -files = [ - {file = "sphinxcontrib_htmlhelp-2.0.4-py3-none-any.whl", hash = "sha256:8001661c077a73c29beaf4a79968d0726103c5605e27db92b9ebed8bab1359e9"}, - {file = "sphinxcontrib_htmlhelp-2.0.4.tar.gz", hash = "sha256:6c26a118a05b76000738429b724a0568dbde5b72391a688577da08f11891092a"}, -] - -[[package]] -name = "sphinxcontrib-jquery" -version = "4.1" -requires_python = ">=2.7" -summary = "Extension to include jQuery on newer Sphinx releases" -dependencies = [ - "Sphinx>=1.8", -] -files = [ - {file = "sphinxcontrib-jquery-4.1.tar.gz", hash = "sha256:1620739f04e36a2c779f1a131a2dfd49b2fd07351bf1968ced074365933abc7a"}, - {file = "sphinxcontrib_jquery-4.1-py2.py3-none-any.whl", hash = "sha256:f936030d7d0147dd026a4f2b5a57343d233f1fc7b363f68b3d4f1cb0993878ae"}, -] - -[[package]] -name = "sphinxcontrib-jsmath" -version = "1.0.1" -requires_python = ">=3.5" -summary = "A sphinx extension which renders display math in HTML via JavaScript" -files = [ - {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, - {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, -] - -[[package]] -name = "sphinxcontrib-qthelp" -version = "1.0.6" -requires_python = ">=3.9" -summary = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp documents" -dependencies = [ - "Sphinx>=5", -] -files = [ - {file = "sphinxcontrib_qthelp-1.0.6-py3-none-any.whl", hash = "sha256:bf76886ee7470b934e363da7a954ea2825650013d367728588732c7350f49ea4"}, - {file = "sphinxcontrib_qthelp-1.0.6.tar.gz", hash = "sha256:62b9d1a186ab7f5ee3356d906f648cacb7a6bdb94d201ee7adf26db55092982d"}, -] - -[[package]] -name = "sphinxcontrib-serializinghtml" -version = "1.1.9" -requires_python = ">=3.9" -summary = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)" -dependencies = [ - "Sphinx>=5", -] -files = [ - {file = "sphinxcontrib_serializinghtml-1.1.9-py3-none-any.whl", hash = "sha256:9b36e503703ff04f20e9675771df105e58aa029cfcbc23b8ed716019b7416ae1"}, - {file = "sphinxcontrib_serializinghtml-1.1.9.tar.gz", hash = "sha256:0c64ff898339e1fac29abd2bf5f11078f3ec413cfe9c046d3120d7ca65530b54"}, -] - [[package]] name = "sqlparse" version = "0.4.4" @@ -1532,72 +750,24 @@ files = [ {file = "stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9"}, ] -[[package]] -name = "tomli" -version = "2.0.1" -requires_python = ">=3.7" -summary = "A lil' TOML parser" -files = [ - {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, - {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, -] - -[[package]] -name = "tomlkit" -version = "0.12.2" -requires_python = ">=3.7" -summary = "Style preserving TOML library" -files = [ - {file = "tomlkit-0.12.2-py3-none-any.whl", hash = "sha256:eeea7ac7563faeab0a1ed8fe12c2e5a51c61f933f2502f7e9db0241a65163ad0"}, - {file = "tomlkit-0.12.2.tar.gz", hash = "sha256:df32fab589a81f0d7dc525a4267b6d7a64ee99619cbd1eeb0fae32c1dd426977"}, -] - [[package]] name = "traitlets" -version = "5.13.0" +version = "5.14.0" requires_python = ">=3.8" summary = "Traitlets Python configuration system" files = [ - {file = "traitlets-5.13.0-py3-none-any.whl", hash = "sha256:baf991e61542da48fe8aef8b779a9ea0aa38d8a54166ee250d5af5ecf4486619"}, - {file = "traitlets-5.13.0.tar.gz", hash = "sha256:9b232b9430c8f57288c1024b34a8f0251ddcc47268927367a0dd3eeaca40deb5"}, -] - -[[package]] -name = "truststore" -version = "0.8.0" -requires_python = ">= 3.10" -summary = "Verify certificates using native system trust stores" -files = [ - {file = "truststore-0.8.0-py3-none-any.whl", hash = "sha256:e37a5642ae9fc48caa8f120b6283d77225d600d224965a672c9e8ef49ce4bb4c"}, - {file = "truststore-0.8.0.tar.gz", hash = "sha256:dc70da89634944a579bfeec70a7a4523c53ffdb3cf52d1bb4a431fda278ddb96"}, -] - -[[package]] -name = "types-pytz" -version = "2023.3.1.1" -summary = "Typing stubs for pytz" -files = [ - {file = "types-pytz-2023.3.1.1.tar.gz", hash = "sha256:cc23d0192cd49c8f6bba44ee0c81e4586a8f30204970fc0894d209a6b08dab9a"}, - {file = "types_pytz-2023.3.1.1-py3-none-any.whl", hash = "sha256:1999a123a3dc0e39a2ef6d19f3f8584211de9e6a77fe7a0259f04a524e90a5cf"}, -] - -[[package]] -name = "types-pyyaml" -version = "6.0.12.12" -summary = "Typing stubs for PyYAML" -files = [ - {file = "types-PyYAML-6.0.12.12.tar.gz", hash = "sha256:334373d392fde0fdf95af5c3f1661885fa10c52167b14593eb856289e1855062"}, - {file = "types_PyYAML-6.0.12.12-py3-none-any.whl", hash = "sha256:c05bc6c158facb0676674b7f11fe3960db4f389718e19e62bd2b84d6205cfd24"}, + {file = "traitlets-5.14.0-py3-none-any.whl", hash = "sha256:f14949d23829023013c47df20b4a76ccd1a85effb786dc060f34de7948361b33"}, + {file = "traitlets-5.14.0.tar.gz", hash = "sha256:fcdaa8ac49c04dfa0ed3ee3384ef6dfdb5d6f3741502be247279407679296772"}, ] [[package]] name = "typing-extensions" -version = "4.8.0" +version = "4.9.0" requires_python = ">=3.8" summary = "Backported and Experimental Type Hints for Python 3.8+" files = [ - {file = "typing_extensions-4.8.0-py3-none-any.whl", hash = "sha256:8f92fc8806f9a6b641eaa5318da32b44d401efaac0f6678c9bc448ba3605faa0"}, - {file = "typing_extensions-4.8.0.tar.gz", hash = "sha256:df8e4339e9cb77357558cbdbceca33c303714cf861d1eef15e1070055ae8b7ef"}, + {file = "typing_extensions-4.9.0-py3-none-any.whl", hash = "sha256:af72aea155e91adfc61c3ae9e0e342dbc0cba726d6cba4b6c72c1f34e47291cd"}, + {file = "typing_extensions-4.9.0.tar.gz", hash = "sha256:23478f88c37f27d76ac8aee6c905017a143b0b1b886c3c9f66bc2fd94f9f5783"}, ] [[package]] @@ -1623,20 +793,6 @@ files = [ {file = "tzlocal-5.2.tar.gz", hash = "sha256:8d399205578f1a9342816409cc1e46a93ebd5755e39ea2d85334bea911bf0e6e"}, ] -[[package]] -name = "unearth" -version = "0.12.1" -requires_python = ">=3.7" -summary = "A utility to fetch and download python packages" -dependencies = [ - "packaging>=20", - "requests>=2.25", -] -files = [ - {file = "unearth-0.12.1-py3-none-any.whl", hash = "sha256:a5a5c51ca44965cbe3618116bd592bb0bbe3705af5fe14e5792660d904aad7c8"}, - {file = "unearth-0.12.1.tar.gz", hash = "sha256:4caad941b60f51e50fdc109866234d407910aef77f1233aa1b6b5d168c7427ee"}, -] - [[package]] name = "urllib3" version = "2.1.0" @@ -1647,21 +803,6 @@ files = [ {file = "urllib3-2.1.0.tar.gz", hash = "sha256:df7aa8afb0148fa78488e7899b2c59b5f4ffcfa82e6c54ccb9dd37c1d7b52d54"}, ] -[[package]] -name = "virtualenv" -version = "20.24.6" -requires_python = ">=3.7" -summary = "Virtual Python Environment builder" -dependencies = [ - "distlib<1,>=0.3.7", - "filelock<4,>=3.12.2", - "platformdirs<4,>=3.9.1", -] -files = [ - {file = "virtualenv-20.24.6-py3-none-any.whl", hash = "sha256:520d056652454c5098a00c0f073611ccbea4c79089331f60bf9d7ba247bb7381"}, - {file = "virtualenv-20.24.6.tar.gz", hash = "sha256:02ece4f56fbf939dbbc33c0715159951d6bf14aaf5457b092e4548e1382455af"}, -] - [[package]] name = "w3lib" version = "2.1.2" @@ -1674,11 +815,11 @@ files = [ [[package]] name = "wcwidth" -version = "0.2.10" +version = "0.2.12" summary = "Measures the displayed width of unicode strings in a terminal" files = [ - {file = "wcwidth-0.2.10-py2.py3-none-any.whl", hash = "sha256:aec5179002dd0f0d40c456026e74a729661c9d468e1ed64405e3a6c2176ca36f"}, - {file = "wcwidth-0.2.10.tar.gz", hash = "sha256:390c7454101092a6a5e43baad8f83de615463af459201709556b6e4b1c861f97"}, + {file = "wcwidth-0.2.12-py2.py3-none-any.whl", hash = "sha256:f26ec43d96c8cbfed76a5075dac87680124fa84e0855195a6184da9c187f133c"}, + {file = "wcwidth-0.2.12.tar.gz", hash = "sha256:f01c104efdf57971bcb756f054dd58ddec5204dd15fa31d6503ea57947d97c02"}, ] [[package]] @@ -1750,40 +891,22 @@ files = [ {file = "websockets-12.0.tar.gz", hash = "sha256:81df9cbcbb6c260de1e007e58c011bfebe2dafc8435107b0537f393dd38c8b1b"}, ] -[[package]] -name = "wheel" -version = "0.41.3" -requires_python = ">=3.7" -summary = "A built-package format for Python" -files = [ - {file = "wheel-0.41.3-py3-none-any.whl", hash = "sha256:488609bc63a29322326e05560731bf7bfea8e48ad646e1f5e40d366607de0942"}, - {file = "wheel-0.41.3.tar.gz", hash = "sha256:4d4987ce51a49370ea65c0bfd2234e8ce80a12780820d9dc462597a6e60d0841"}, -] - [[package]] name = "yt-dlp" -version = "2023.10.13" +version = "2023.11.16" requires_python = ">=3.7" summary = "A youtube-dl fork with additional features and patches" dependencies = [ - "brotli; platform_python_implementation == \"CPython\"", - "brotlicffi; platform_python_implementation != \"CPython\"", + "brotli; implementation_name == \"cpython\"", + "brotlicffi; implementation_name != \"cpython\"", "certifi", "mutagen", "pycryptodomex", + "requests<3,>=2.31.0", + "urllib3<3,>=1.26.17", "websockets", ] files = [ - {file = "yt-dlp-2023.10.13.tar.gz", hash = "sha256:e026ea1c435ff36eef1215bc4c5bb8c479938b90054997ba99f63a4541fe63b4"}, - {file = "yt_dlp-2023.10.13-py2.py3-none-any.whl", hash = "sha256:2b069f22675532eebacdfd6372b1825651a751fef848de9ae6efe6491b2dc38a"}, -] - -[[package]] -name = "zipp" -version = "3.17.0" -requires_python = ">=3.8" -summary = "Backport of pathlib-compatible object wrapper for zip files" -files = [ - {file = "zipp-3.17.0-py3-none-any.whl", hash = "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31"}, - {file = "zipp-3.17.0.tar.gz", hash = "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0"}, + {file = "yt-dlp-2023.11.16.tar.gz", hash = "sha256:f0ccdaf12e08b15902601a4671c7ab12906d7b11de3ae75fa6506811c24ec5da"}, + {file = "yt_dlp-2023.11.16-py2.py3-none-any.whl", hash = "sha256:0322ba85aa4afdb75f8641ed550e5958964daff034aeb477abb15031fd9a51ed"}, ] diff --git a/requirements.txt b/requirements.txt index aa1cd8b6..b3c21b49 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,35 +1,41 @@ # This file is @generated by PDM. # Please do not edit it manually. -appnope==0.1.3 asgiref==3.7.2 asttokens==2.4.1 -brotli==1.1.0 -certifi==2023.7.22 +brotli==1.1.0; implementation_name == "cpython" +brotlicffi==1.1.0.0; implementation_name != "cpython" +certifi==2023.11.17 +cffi==1.16.0; implementation_name != "cpython" charset-normalizer==3.3.2 +colorama==0.4.6; sys_platform == "win32" croniter==2.0.1 -dateparser==1.1.8 +dateparser==1.2.0 decorator==5.1.1 django==3.1.14 +django-auth-ldap==4.1.0 django-extensions==3.1.5 +exceptiongroup==1.2.0; python_version < "3.11" executing==2.0.1 -idna==3.4 -ipython==8.17.2 +idna==3.6 +ipython==8.18.1 jedi==0.19.1 matplotlib-inline==0.1.6 mutagen==1.47.0 mypy-extensions==1.0.0 parso==0.8.3 -pexpect==4.8.0 -prompt-toolkit==3.0.40 -ptyprocess==0.7.0 +pexpect==4.9.0; sys_platform != "win32" +prompt-toolkit==3.0.43 +ptyprocess==0.7.0; sys_platform != "win32" pure-eval==0.2.2 -pyasn1==0.5.0 +pyasn1==0.5.1 pyasn1-modules==0.3.0 +pycparser==2.21; implementation_name != "cpython" pycryptodomex==3.19.0 -pygments==2.16.1 +pygments==2.17.2 python-crontab==3.0.0 python-dateutil==2.8.2 +python-ldap==3.4.4 pytz==2023.3.post1 regex==2023.10.3 requests==2.31.0 @@ -37,10 +43,12 @@ six==1.16.0 sonic-client==1.0.0 sqlparse==0.4.4 stack-data==0.6.3 -traitlets==5.13.0 +traitlets==5.14.0 +typing-extensions==4.9.0; python_version < "3.11" +tzdata==2023.3; platform_system == "Windows" tzlocal==5.2 urllib3==2.1.0 w3lib==2.1.2 -wcwidth==0.2.10 +wcwidth==0.2.12 websockets==12.0 -yt-dlp==2023.11.14 +yt-dlp==2023.11.16 From 1ce228e9bb8567bb8f7ed9ea135500cbc20facaa Mon Sep 17 00:00:00 2001 From: Nick Sweeting Date: Sun, 17 Dec 2023 17:51:36 -0800 Subject: [PATCH 17/31] fix /browsers/* does not exist chown error --- bin/docker_entrypoint.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bin/docker_entrypoint.sh b/bin/docker_entrypoint.sh index c2abd8e8..70699b2a 100755 --- a/bin/docker_entrypoint.sh +++ b/bin/docker_entrypoint.sh @@ -74,8 +74,10 @@ chown $PUID:$PGID "$DATA_DIR"/* PLAYWRIGHT_BROWSERS_PATH="${PLAYWRIGHT_BROWSERS_PATH:-/browsers}" mkdir -p "$PLAYWRIGHT_BROWSERS_PATH" chown $PUID:$PGID "$PLAYWRIGHT_BROWSERS_PATH" +touch "$PLAYWRIGHT_BROWSERS_PATH"/.permissions_test_safe_to_delete chown $PUID:$PGID "$PLAYWRIGHT_BROWSERS_PATH"/* + # (this check is written in blood, QEMU silently breaks things in ways that are not obvious) export IN_QEMU="$(pmap 1 | grep qemu | wc -l | grep -E '^0$' >/dev/null && echo 'False' || echo 'True')" if [[ "$IN_QEMU" == 'True' ]]; then From b82297a61a60b26653114d12e7b1ef74d51a3309 Mon Sep 17 00:00:00 2001 From: Nick Sweeting Date: Sun, 17 Dec 2023 17:55:35 -0800 Subject: [PATCH 18/31] bump python versions supported in pyproject.toml --- pyproject.toml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pyproject.toml b/pyproject.toml index a7a6f461..75227234 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -39,6 +39,9 @@ classifiers = [ "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", "Topic :: Internet :: WWW/HTTP", "Topic :: Internet :: WWW/HTTP :: Indexing/Search", "Topic :: Internet :: WWW/HTTP :: WSGI :: Application", From c259b3f2fd3f8d001307b16922f10e1915f20c64 Mon Sep 17 00:00:00 2001 From: Nick Sweeting Date: Sun, 17 Dec 2023 17:59:10 -0800 Subject: [PATCH 19/31] fix browsers chown on startup again --- bin/docker_entrypoint.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/bin/docker_entrypoint.sh b/bin/docker_entrypoint.sh index 70699b2a..d2509cc9 100755 --- a/bin/docker_entrypoint.sh +++ b/bin/docker_entrypoint.sh @@ -75,7 +75,8 @@ PLAYWRIGHT_BROWSERS_PATH="${PLAYWRIGHT_BROWSERS_PATH:-/browsers}" mkdir -p "$PLAYWRIGHT_BROWSERS_PATH" chown $PUID:$PGID "$PLAYWRIGHT_BROWSERS_PATH" touch "$PLAYWRIGHT_BROWSERS_PATH"/.permissions_test_safe_to_delete -chown $PUID:$PGID "$PLAYWRIGHT_BROWSERS_PATH"/* +chown $PUID:$PGID "$PLAYWRIGHT_BROWSERS_PATH"/*.* +rm -f "$PLAYWRIGHT_BROWSERS_PATH"/.permissions_test_safe_to_delete # (this check is written in blood, QEMU silently breaks things in ways that are not obvious) @@ -86,6 +87,7 @@ if [[ "$IN_QEMU" == 'True' ]]; then echo -e " See here for more info: https://github.com/microsoft/playwright/issues/17395#issuecomment-1250830493\n" >&2 fi + # Drop permissions to run commands as the archivebox user if [[ "$1" == /* || "$1" == "bash" || "$1" == "sh" || "$1" == "echo" || "$1" == "cat" || "$1" == "archivebox" ]]; then # handle "docker run archivebox /some/non-archivebox/command --with=some args" by passing args directly to bash -c From 6d2c4f9e390ee6101d13fd01a5af167e4e0dab2f Mon Sep 17 00:00:00 2001 From: Nick Sweeting Date: Sun, 17 Dec 2023 21:02:16 -0800 Subject: [PATCH 20/31] dont include docs in docker builds --- .dockerignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.dockerignore b/.dockerignore index d870390d..f4c91a47 100644 --- a/.dockerignore +++ b/.dockerignore @@ -16,6 +16,7 @@ venv/ .docker-venv/ node_modules/ +docs/ build/ dist/ brew_dist/ From b021a23b7bb8c8f398be8cbb74bd9b4e9860ea55 Mon Sep 17 00:00:00 2001 From: Nick Sweeting Date: Sun, 17 Dec 2023 21:02:42 -0800 Subject: [PATCH 21/31] dont install C compiler for final pip install archivebox in Dockerfile --- Dockerfile | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/Dockerfile b/Dockerfile index 4889cfd0..391b0101 100644 --- a/Dockerfile +++ b/Dockerfile @@ -73,7 +73,8 @@ COPY --chown=root:root --chmod=755 package.json "$CODE_DIR/" RUN grep '"version": ' "${CODE_DIR}/package.json" | awk -F'"' '{print $4}' > /VERSION.txt # Force apt to leave downloaded binaries in /var/cache/apt (massively speeds up Docker builds) -RUN rm -f /etc/apt/apt.conf.d/docker-clean; echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' > /etc/apt/apt.conf.d/keep-cache +RUN echo 'Binary::apt::APT::Keep-Downloaded-Packages "true";' > /etc/apt/apt.conf.d/keep-cache \ + && rm -f /etc/apt/apt.conf.d/docker-clean # Print debug info about build and save it to disk, for human eyes only, not used by anything else RUN (echo "[i] Docker build for ArchiveBox $(cat /VERSION.txt) starting..." \ @@ -123,7 +124,7 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked,id=apt-$TARGETARCH$T RUN --mount=type=cache,target=/var/cache/apt,sharing=locked,id=apt-$TARGETARCH$TARGETVARIANT --mount=type=cache,target=/root/.npm,sharing=locked,id=npm-$TARGETARCH$TARGETVARIANT \ echo "[+] Installing Node $NODE_VERSION environment in $NODE_MODULES..." \ && echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_${NODE_VERSION}.x nodistro main" >> /etc/apt/sources.list.d/nodejs.list \ - && curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \ + && curl -fsSL "https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key" | gpg --dearmor | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \ && apt-get update -qq \ && apt-get install -qq -y -t bookworm-backports --no-install-recommends \ nodejs libatomic1 python3-minimal \ @@ -246,15 +247,15 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked,id=apt-$TARGETARCH$T COPY --chown=root:root --chmod=755 "." "$CODE_DIR/" RUN --mount=type=cache,target=/var/cache/apt,sharing=locked,id=apt-$TARGETARCH$TARGETVARIANT --mount=type=cache,target=/root/.cache/pip,sharing=locked,id=pip-$TARGETARCH$TARGETVARIANT \ echo "[*] Installing PIP ArchiveBox package from $CODE_DIR..." \ - && apt-get update -qq \ + # && apt-get update -qq \ # install C compiler to build deps on platforms that dont have 32-bit wheels available on pypi - && apt-get install -qq -y -t bookworm-backports --no-install-recommends \ - build-essential \ + # && apt-get install -qq -y -t bookworm-backports --no-install-recommends \ + # build-essential \ # INSTALL ARCHIVEBOX python package globally from CODE_DIR, with all optional dependencies && pip install -e "$CODE_DIR"[sonic,ldap] \ # save docker image size and always remove compilers / build tools after building is complete - && apt-get purge -y build-essential \ - && apt-get autoremove -y \ + # && apt-get purge -y build-essential \ + # && apt-get autoremove -y \ && rm -rf /var/lib/apt/lists/* #################################################### From 7410fddacf939126adab8dcfcd9fc6399f88370a Mon Sep 17 00:00:00 2001 From: Nick Sweeting Date: Sun, 17 Dec 2023 21:03:01 -0800 Subject: [PATCH 22/31] improve entrypoint error handling and color coding --- archivebox/config.py | 4 ++- bin/docker_entrypoint.sh | 64 ++++++++++++++++++++++++---------------- 2 files changed, 41 insertions(+), 27 deletions(-) diff --git a/archivebox/config.py b/archivebox/config.py index 29f1a265..087b89a6 100644 --- a/archivebox/config.py +++ b/archivebox/config.py @@ -1126,10 +1126,12 @@ def check_system_config(config: ConfigDict=CONFIG) -> None: if config['IN_DOCKER']: attempted_command = ' '.join(sys.argv[:3]) stderr('') - stderr(' {lightred}Hint{reset}: When using Docker, you must run commands with {green}docker run{reset} instead of {lightyellow}docker exec{reset}, e.g.:') + stderr(' {lightred}Hint{reset}: When using Docker, you must run commands with {green}docker run{reset} instead of {lightyellow}docker exec{reset}, e.g.:'.format(**config['ANSI'])) stderr(f' docker compose run archivebox {attempted_command}') + stderr(f' docker compose exec --user=archivebox archivebox {attempted_command}') stderr(' or') stderr(f' docker run -it -v ... -p ... archivebox/archivebox {attempted_command}') + stderr(f' docker exec -it --user=archivebox /bin/bash') raise SystemExit(2) diff --git a/bin/docker_entrypoint.sh b/bin/docker_entrypoint.sh index d2509cc9..bccaa808 100755 --- a/bin/docker_entrypoint.sh +++ b/bin/docker_entrypoint.sh @@ -1,15 +1,28 @@ #!/bin/bash -### Bash Environment Setup +# This Docker ENTRYPOINT script is called by `docker run archivebox ...` or `docker compose run archivebox ...`. +# It takes a CMD as $* shell arguments and runs it following these setup steps: + +# - Set the archivebox user to use the correct PUID & PGID +# 1. highest precedence is for valid PUID and PGID env vars passsed in explicitly +# 2. fall back to DETECTED_PUID of files found within existing data dir +# 3. fall back to DEFAULT_PUID if no data dir or its owned by root +# - Create a new /data dir if necessary and set the correct ownership on it +# - Create a new /browsers dir if necessary and set the correct ownership on it +# - Check whether we're running inside QEMU emulation and show a warning if so. +# - Drop down to archivebox user permisisons and execute passed CMD command. + +# Bash Environment Setup # http://redsymbol.net/articles/unofficial-bash-strict-mode/ # https://www.gnu.org/software/bash/manual/html_node/The-Set-Builtin.html # set -o xtrace +# set -o nounset set -o errexit set -o errtrace set -o pipefail -IFS=$'\n' +# IFS=$'\n' -# Load global config (set by Dockerfile during image build time, not intended to be customized by users at runtime) +# Load global invariants (set by Dockerfile during image build time, not intended to be customized by users at runtime) export DATA_DIR="${DATA_DIR:-/data}" export ARCHIVEBOX_USER="${ARCHIVEBOX_USER:-archivebox}" @@ -19,10 +32,10 @@ export DEFAULT_PGID=911 # If user tires to set PUID and PGID to root values manually, catch and reject because root is not allowed if [[ "$PUID" == "0" ]] || [[ "$PGID" == "0" ]]; then - echo -e "\n[X] Error: Got PUID=$PUID and PGID=$PGID but ArchiveBox is not allowed to be run as root, please change or unset PUID & PGID and try again." >&2 - echo -e " Hint: some NFS/SMB/FUSE/etc. filesystems force-remap all permissions, leave PUID/PGID blank" >&2 - echo -e " or set PUID/PGID to the same value as the user/group they remap to (e.g. $DEFAULT_PUID:$DEFAULT_PGID)." >&2 - echo -e " https://linux.die.net/man/8/mount.cifs#:~:text=does%20not%20provide%20unix%20ownership" >&2 + echo -e "\n[X] Error: Got PUID=$PUID and PGID=$PGID but ArchiveBox is not allowed to be run as root, please change or unset PUID & PGID and try again." > /dev/stderr + echo -e " Hint: some NFS/SMB/FUSE/etc. filesystems force-remap all permissions, leave PUID/PGID blank" > /dev/stderr + echo -e " or set PUID/PGID to the same value as the user/group they remap to (e.g. $DEFAULT_PUID:$DEFAULT_PGID)." > /dev/stderr + echo -e " https://linux.die.net/man/8/mount.cifs#:~:text=does%20not%20provide%20unix%20ownership" > /dev/stderr exit 3 fi @@ -34,9 +47,7 @@ export DETECTED_PGID="$(stat -c '%g' "$DATA_DIR/logs/errors.log" 2>/dev/null || [[ "$DETECTED_PUID" == "0" ]] && export DETECTED_PUID="$DEFAULT_PUID" [[ "$DETECTED_PGID" == "0" ]] && export DETECTED_PGID="$DEFAULT_PGID" - -# Set the archivebox user to use the configured UID & GID -# prefer PUID and PGID env vars passsed in explicitly, falls back to autodetected values or global defaults +# Set archivebox user and group ids to desired PUID/PGID usermod -o -u "${PUID:-$DETECTED_PUID}" "$ARCHIVEBOX_USER" > /dev/null 2>&1 groupmod -o -g "${PGID:-$DETECTED_PGID}" "$ARCHIVEBOX_USER" > /dev/null 2>&1 @@ -54,10 +65,10 @@ if [[ -d "$DATA_DIR/archive" ]]; then else # the only time this fails is if the host filesystem doesn't allow us to write as root (e.g. some NFS mapall/maproot problems, connection issues, drive dissapeared, etc.) echo -e "\n[X] Error: archivebox user (PUID=$PUID) is not able to write to your ./data dir (currently owned by $(stat -c '%u' "$DATA_DIR"):$(stat -c '%g' "$DATA_DIR")." >&2 - echo -e " Change ./data to be owned by PUID=$PUID PGID=$PGID on the host and retry:" >&2 - echo -e " \$ chown -R $PUID:$PGID ./data\n" >&2 - echo -e " Configure the PUID & PGID environment variables to change the desired owner:" >&2 - echo -e " https://docs.linuxserver.io/general/understanding-puid-and-pgid\n" >&2 + echo -e " Change ./data to be owned by PUID=$PUID PGID=$PGID on the host and retry:" > /dev/stderr + echo -e " \$ chown -R $PUID:$PGID ./data\n" > /dev/stderr + echo -e " Configure the PUID & PGID environment variables to change the desired owner:" > /dev/stderr + echo -e " https://docs.linuxserver.io/general/understanding-puid-and-pgid\n" > /dev/stderr exit 3 fi else @@ -72,32 +83,33 @@ chown $PUID:$PGID "$DATA_DIR"/* # also chown BROWSERS_DIR because otherwise 'archivebox setup' wont be able to install chrome at runtime PLAYWRIGHT_BROWSERS_PATH="${PLAYWRIGHT_BROWSERS_PATH:-/browsers}" -mkdir -p "$PLAYWRIGHT_BROWSERS_PATH" +mkdir -p "$PLAYWRIGHT_BROWSERS_PATH/permissions_test_safe_to_delete" chown $PUID:$PGID "$PLAYWRIGHT_BROWSERS_PATH" -touch "$PLAYWRIGHT_BROWSERS_PATH"/.permissions_test_safe_to_delete -chown $PUID:$PGID "$PLAYWRIGHT_BROWSERS_PATH"/*.* -rm -f "$PLAYWRIGHT_BROWSERS_PATH"/.permissions_test_safe_to_delete +chown $PUID:$PGID "$PLAYWRIGHT_BROWSERS_PATH"/* +rm -Rf "$PLAYWRIGHT_BROWSERS_PATH/permissions_test_safe_to_delete" # (this check is written in blood, QEMU silently breaks things in ways that are not obvious) -export IN_QEMU="$(pmap 1 | grep qemu | wc -l | grep -E '^0$' >/dev/null && echo 'False' || echo 'True')" -if [[ "$IN_QEMU" == 'True' ]]; then - echo -e "\n[!] Warning: Running $(uname -m) emulated container in QEMU, some things will break!" >&2 - echo -e " chromium (screenshot, pdf, dom), singlefile, and any dependencies that rely on inotify will not run in QEMU." >&2 - echo -e " See here for more info: https://github.com/microsoft/playwright/issues/17395#issuecomment-1250830493\n" >&2 +export IN_QEMU="$(pmap 1 | grep qemu >/dev/null && echo 'True' || echo 'False')" +if [[ "$IN_QEMU" == "True" ]]; then + echo -e "\n[!] Warning: Running $(uname -m) docker image using QEMU emulation, some things will break!" > /dev/stderr + echo -e " chromium (screenshot, pdf, dom), singlefile, and any dependencies that rely on inotify will not run in QEMU." > /dev/stderr + echo -e " See here for more info: https://github.com/microsoft/playwright/issues/17395#issuecomment-1250830493\n" > /dev/stderr fi # Drop permissions to run commands as the archivebox user if [[ "$1" == /* || "$1" == "bash" || "$1" == "sh" || "$1" == "echo" || "$1" == "cat" || "$1" == "archivebox" ]]; then # handle "docker run archivebox /some/non-archivebox/command --with=some args" by passing args directly to bash -c - # e.g. "docker run archivebox /venv/bin/archivebox-alt init" + # e.g. "docker run archivebox archivebox init: + # "docker run archivebox /venv/bin/archivebox-alt init" # "docker run archivebox /bin/bash -c '...'" - # "docker run archivebox echo test" + # "docker run archivebox cat /VERSION.txt" exec gosu "$PUID" bash -c "$*" else # handle "docker run archivebox add some subcommand --with=args abc" by calling archivebox to run as args as CLI subcommand - # e.g. "docker run archivebox add --depth=1 https://example.com" + # e.g. "docker run archivebox help" + # "docker run archivebox add --depth=1 https://example.com" # "docker run archivebox manage createsupseruser" # "docker run archivebox server 0.0.0.0:8000" exec gosu "$PUID" bash -c "archivebox $*" From 78ad83a510a7555ea16fa551eec4e7ef26636c86 Mon Sep 17 00:00:00 2001 From: Nick Sweeting Date: Sun, 17 Dec 2023 21:18:16 -0800 Subject: [PATCH 23/31] Update docker.yml --- .github/workflows/docker.yml | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 9840f7ae..8a9a6bf8 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -11,8 +11,7 @@ on: env: DOCKER_IMAGE: archivebox-ci - - + jobs: buildx: runs-on: ubuntu-latest @@ -78,8 +77,18 @@ jobs: push: ${{ github.event_name != 'pull_request' }} tags: ${{ steps.docker_meta.outputs.tags }} cache-from: type=local,src=/tmp/.buildx-cache - cache-to: type=local,dest=/tmp/.buildx-cache + cache-to: type=local,dest=/tmp/.buildx-cache-new platforms: linux/amd64,linux/arm64,linux/arm/v7 - name: Image digest run: echo ${{ steps.docker_build.outputs.digest }} + + # This ugly bit is necessary if you don't want your cache to grow forever + # until it hits GitHub's limit of 5GB. + # Temp fix + # https://github.com/docker/build-push-action/issues/252 + # https://github.com/moby/buildkit/issues/1896 + - name: Move cache + run: | + rm -rf /tmp/.buildx-cache + mv /tmp/.buildx-cache-new /tmp/.buildx-cache From 6ec7114033b9c0256843a752fad8d91af31ea0b5 Mon Sep 17 00:00:00 2001 From: Nick Sweeting Date: Sun, 17 Dec 2023 21:48:38 -0800 Subject: [PATCH 24/31] also build GIT_SHA version of images --- bin/release_docker.sh | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/bin/release_docker.sh b/bin/release_docker.sh index 15e1b666..1aaaeac5 100755 --- a/bin/release_docker.sh +++ b/bin/release_docker.sh @@ -18,6 +18,7 @@ SUPPORTED_PLATFORMS="linux/amd64,linux/arm64,linux/arm/v7" TAG_NAME="${1:-$(git rev-parse --abbrev-ref HEAD)}" VERSION="$(jq -r '.version' < "$REPO_DIR/package.json")" SHORT_VERSION="$(echo "$VERSION" | perl -pe 's/(\d+)\.(\d+)\.(\d+)/$1.$2/g')" +GIT_SHA=sha-"$(git rev-parse --short HEAD)" SELECTED_PLATFORMS="${2:-$SUPPORTED_PLATFORMS}" @@ -26,7 +27,7 @@ SELECTED_PLATFORMS="${2:-$SUPPORTED_PLATFORMS}" # docker login ghcr.io --username=pirate echo "[^] Building docker image" -./bin/build_docker.sh "$TAG_NAME" "$SELECTED_PLATFORMS" +./bin/build_docker.sh "$TAG_NAME" "$GIT_SHA" "$SELECTED_PLATFORMS" echo "[^] Uploading docker image" docker buildx build --platform "$SELECTED_PLATFORMS" --push . \ @@ -34,12 +35,16 @@ docker buildx build --platform "$SELECTED_PLATFORMS" --push . \ -t archivebox/archivebox:$TAG_NAME \ -t archivebox/archivebox:$VERSION \ -t archivebox/archivebox:$SHORT_VERSION \ + -t archivebox/archivebox:$GIT_SHA \ -t archivebox/archivebox:latest \ -t nikisweeting/archivebox \ -t nikisweeting/archivebox:$TAG_NAME \ -t nikisweeting/archivebox:$VERSION \ -t nikisweeting/archivebox:$SHORT_VERSION \ + -t nikisweeting/archivebox:$GIT_SHA \ -t nikisweeting/archivebox:latest \ -t ghcr.io/archivebox/archivebox/archivebox:$TAG_NAME \ -t ghcr.io/archivebox/archivebox/archivebox:$VERSION \ - -t ghcr.io/archivebox/archivebox/archivebox:$SHORT_VERSION \ No newline at end of file + -t ghcr.io/archivebox/archivebox/archivebox:$SHORT_VERSION \ + -t ghcr.io/archivebox/archivebox/archivebox:$GIT_SHA + From 25a505f668770a96961507e7264292460b8d2eb1 Mon Sep 17 00:00:00 2001 From: Nick Sweeting Date: Sun, 17 Dec 2023 21:51:04 -0800 Subject: [PATCH 25/31] fix GIT_SHA tagging during build --- bin/build_docker.sh | 7 ++++++- bin/release_docker.sh | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/bin/build_docker.sh b/bin/build_docker.sh index c88ed54c..dd5d4d18 100755 --- a/bin/build_docker.sh +++ b/bin/build_docker.sh @@ -23,6 +23,7 @@ SUPPORTED_PLATFORMS="linux/amd64,linux/arm64,linux/arm/v7" TAG_NAME="${1:-$(git rev-parse --abbrev-ref HEAD)}" VERSION="$(jq -r '.version' < "$REPO_DIR/package.json")" SHORT_VERSION="$(echo "$VERSION" | perl -pe 's/(\d+)\.(\d+)\.(\d+)/$1.$2/g')" +GIT_SHA=sha-"$(git rev-parse --short HEAD)" SELECTED_PLATFORMS="${2:-$SUPPORTED_PLATFORMS}" echo "[+] Building Docker image: tag=$TAG_NAME version=$SHORT_VERSION arch=$SELECTED_PLATFORMS" @@ -83,12 +84,16 @@ docker buildx build --platform "$SELECTED_PLATFORMS" --load . \ -t archivebox/archivebox:$TAG_NAME \ -t archivebox/archivebox:$VERSION \ -t archivebox/archivebox:$SHORT_VERSION \ + -t archivebox/archivebox:$GIT_SHA \ -t archivebox/archivebox:latest \ -t nikisweeting/archivebox \ -t nikisweeting/archivebox:$TAG_NAME \ -t nikisweeting/archivebox:$VERSION \ -t nikisweeting/archivebox:$SHORT_VERSION \ + -t nikisweeting/archivebox:$GIT_SHA \ -t nikisweeting/archivebox:latest \ -t ghcr.io/archivebox/archivebox/archivebox:$TAG_NAME \ -t ghcr.io/archivebox/archivebox/archivebox:$VERSION \ - -t ghcr.io/archivebox/archivebox/archivebox:$SHORT_VERSION + -t ghcr.io/archivebox/archivebox/archivebox:$SHORT_VERSION \ + -t ghcr.io/archivebox/archivebox/archivebox:$GIT_SHA \ + -t ghcr.io/archivebox/archivebox/archivebox:latest diff --git a/bin/release_docker.sh b/bin/release_docker.sh index 1aaaeac5..137c1b53 100755 --- a/bin/release_docker.sh +++ b/bin/release_docker.sh @@ -27,7 +27,7 @@ SELECTED_PLATFORMS="${2:-$SUPPORTED_PLATFORMS}" # docker login ghcr.io --username=pirate echo "[^] Building docker image" -./bin/build_docker.sh "$TAG_NAME" "$GIT_SHA" "$SELECTED_PLATFORMS" +./bin/build_docker.sh "$TAG_NAME" "$SELECTED_PLATFORMS" echo "[^] Uploading docker image" docker buildx build --platform "$SELECTED_PLATFORMS" --push . \ From 5881a643538d134c53ef9aa314cd3bcb52bdf68e Mon Sep 17 00:00:00 2001 From: Nick Sweeting Date: Sun, 17 Dec 2023 22:11:13 -0800 Subject: [PATCH 26/31] fallback to alternative way of getting chrome version if needed --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 391b0101..b569a1a6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -203,7 +203,7 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked,id=apt-$TARGETARCH$T && chown -R $ARCHIVEBOX_USER "$PLAYWRIGHT_BROWSERS_PATH" \ # Save version info && ( \ - which chromium-browser && /usr/bin/chromium-browser --version \ + which chromium-browser && /usr/bin/chromium-browser --version || /usr/lib/chromium/chromium --version \ && echo -e '\n\n' \ ) | tee -a /VERSION.txt From 93b5e0d9e54395e100b7daf9da5d9862b697cfe7 Mon Sep 17 00:00:00 2001 From: Nick Sweeting Date: Sun, 17 Dec 2023 22:56:09 -0800 Subject: [PATCH 27/31] Update docker.yml --- .github/workflows/docker.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 8a9a6bf8..1cdddd6f 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -59,13 +59,11 @@ jobs: uses: docker/metadata-action@v5 with: images: archivebox/archivebox,nikisweeting/archivebox - flavor: | - latest=auto tags: | type=ref,event=branch type=semver,pattern={{version}} type=semver,pattern={{major}}.{{minor}} - type=sha + type=raw,value=latest,enable={{is_default_branch}} - name: Build and push id: docker_build From 7d068364438c039a3bbf1f86bcb36ed6498f4599 Mon Sep 17 00:00:00 2001 From: Nick Sweeting Date: Mon, 18 Dec 2023 19:24:18 -0800 Subject: [PATCH 28/31] add WIP comment --- archivebox/core/admin.py | 1 + 1 file changed, 1 insertion(+) diff --git a/archivebox/core/admin.py b/archivebox/core/admin.py index ce4612a7..50319804 100644 --- a/archivebox/core/admin.py +++ b/archivebox/core/admin.py @@ -48,6 +48,7 @@ class TagInline(admin.TabularInline): from django.contrib.admin.helpers import ActionForm from django.contrib.admin.widgets import AutocompleteSelectMultiple +# WIP: commented out because broken by Django 3.1.2 -> 4.0 migration # class AutocompleteTags: # model = Tag # search_fields = ['name'] From 7d5a7f80ca8f6da7419aa6646a90c836142519b6 Mon Sep 17 00:00:00 2001 From: Nick Sweeting Date: Mon, 18 Dec 2023 19:24:48 -0800 Subject: [PATCH 29/31] Update admin.py --- archivebox/core/admin.py | 1 + 1 file changed, 1 insertion(+) diff --git a/archivebox/core/admin.py b/archivebox/core/admin.py index 50319804..e2104e83 100644 --- a/archivebox/core/admin.py +++ b/archivebox/core/admin.py @@ -62,6 +62,7 @@ class SnapshotActionForm(ActionForm): tags = forms.ModelMultipleChoiceField( queryset=Tag.objects.all(), required=False, + # WIP: commented out because broken by Django 3.1.2 -> 4.0 migration # widget=AutocompleteSelectMultiple( # # AutocompleteTags(), # # AutocompleteTagsAdminStub(), From 5805e18380ef51521b9d03d752fd087c3d48ea9f Mon Sep 17 00:00:00 2001 From: Nick Sweeting Date: Mon, 18 Dec 2023 19:25:08 -0800 Subject: [PATCH 30/31] Update settings.py --- archivebox/core/settings.py | 1 + 1 file changed, 1 insertion(+) diff --git a/archivebox/core/settings.py b/archivebox/core/settings.py index 8334c39b..6a52641d 100644 --- a/archivebox/core/settings.py +++ b/archivebox/core/settings.py @@ -268,6 +268,7 @@ AUTH_PASSWORD_VALIDATORS = [ {'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator'}, ] +# WIP: commented out because broken by Django 3.1.2 -> 4.0 migration # DEFAULT_AUTO_FIELD = 'django.db.models.UUIDField' ################################################################################ From 487e560e321c595a2e3f428e3665acf00e0a0aac Mon Sep 17 00:00:00 2001 From: Nick Sweeting Date: Mon, 18 Dec 2023 19:27:52 -0800 Subject: [PATCH 31/31] Update config.py to use fallback git head method --- archivebox/config.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/archivebox/config.py b/archivebox/config.py index 90186b1c..1716036f 100644 --- a/archivebox/config.py +++ b/archivebox/config.py @@ -398,7 +398,14 @@ def get_commit_hash(config) -> Optional[str]: commit_hash = git_dir.joinpath(ref).read_text().strip() return commit_hash except Exception: - return None + pass + + try: + return list((config['PACKAGE_DIR'] / '../.git/refs/heads/').glob('*'))[0].read_text().strip() + except Exception: + pass + + return None def get_build_time(config) -> str: if config['IN_DOCKER']: